/*!
 * PRISM version: 1.1.0-rc.26
 * eoxc version: 1.1.1
 */
(function webpackUniversalModuleDefinition(root, factory) {
	if(typeof exports === 'object' && typeof module === 'object')
		module.exports = factory();
	else if(typeof define === 'function' && define.amd)
		define([], factory);
	else if(typeof exports === 'object')
		exports["prism"] = factory();
	else
		root["prism"] = factory();
})(this, function() {
return /******/ (function(modules) { // webpackBootstrap
/******/ 	// The module cache
/******/ 	var installedModules = {};
/******/
/******/ 	// The require function
/******/ 	function __webpack_require__(moduleId) {
/******/
/******/ 		// Check if module is in cache
/******/ 		if(installedModules[moduleId])
/******/ 			return installedModules[moduleId].exports;
/******/
/******/ 		// Create a new module (and put it into the cache)
/******/ 		var module = installedModules[moduleId] = {
/******/ 			exports: {},
/******/ 			id: moduleId,
/******/ 			loaded: false
/******/ 		};
/******/
/******/ 		// Execute the module function
/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ 		// Flag the module as loaded
/******/ 		module.loaded = true;
/******/
/******/ 		// Return the exports of the module
/******/ 		return module.exports;
/******/ 	}
/******/
/******/
/******/ 	// expose the modules object (__webpack_modules__)
/******/ 	__webpack_require__.m = modules;
/******/
/******/ 	// expose the module cache
/******/ 	__webpack_require__.c = installedModules;
/******/
/******/ 	// __webpack_public_path__
/******/ 	__webpack_require__.p = "";
/******/
/******/ 	// Load entry module and return exports
/******/ 	return __webpack_require__(0);
/******/ })
/************************************************************************/
/******/ ((function(modules) {
	// Check all modules for deduplicated modules
	for(var i in modules) {
		if(Object.prototype.hasOwnProperty.call(modules, i)) {
			switch(typeof modules[i]) {
			case "function": break;
			case "object":
				// Module can be created from a template
				modules[i] = (function(_m) {
					var args = _m.slice(1), fn = modules[_m[0]];
					return function (a,b,c) {
						fn.apply(this, [a,b,c].concat(args));
					};
				}(modules[i]));
				break;
			default:
				// Module is a copy of another module
				modules[i] = modules[modules[i]];
				break;
			}
		}
	}
	return modules;
}([
/* 0 */
/***/ (function(module, exports, __webpack_require__) {

	__webpack_require__(538);
	__webpack_require__(671);
	module.exports = __webpack_require__(669);


/***/ }),
/* 1 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	
	exports.default = function (key) {
	  var value = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined;
	
	  if (typeof value === 'number') {
	    return _i18next2.default.t(key, { count: value, escapeInterpolation: false });
	  } else if (typeof value === 'string') {
	    return _i18next2.default.t(key, { value: value, interpolation: { escapeValue: false } });
	  }
	  return _i18next2.default.t(key, { interpolation: { escapeValue: false } });
	};
	
	var _i18next = __webpack_require__(190);
	
	var _i18next2 = _interopRequireDefault(_i18next);

	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

/***/ }),
/* 2 */
/***/ (function(module, exports, __webpack_require__) {

	var require;/* WEBPACK VAR INJECTION */(function(module) {//! moment.js
	//! version : 2.27.0
	//! authors : Tim Wood, Iskren Chernev, Moment.js contributors
	//! license : MIT
	//! momentjs.com
	
	;(function (global, factory) {
	     true ? module.exports = factory() :
	    typeof define === 'function' && define.amd ? define(factory) :
	    global.moment = factory()
	}(this, (function () { 'use strict';
	
	    var hookCallback;
	
	    function hooks() {
	        return hookCallback.apply(null, arguments);
	    }
	
	    // This is done to register the method called with moment()
	    // without creating circular dependencies.
	    function setHookCallback(callback) {
	        hookCallback = callback;
	    }
	
	    function isArray(input) {
	        return (
	            input instanceof Array ||
	            Object.prototype.toString.call(input) === '[object Array]'
	        );
	    }
	
	    function isObject(input) {
	        // IE8 will treat undefined and null as object if it wasn't for
	        // input != null
	        return (
	            input != null &&
	            Object.prototype.toString.call(input) === '[object Object]'
	        );
	    }
	
	    function hasOwnProp(a, b) {
	        return Object.prototype.hasOwnProperty.call(a, b);
	    }
	
	    function isObjectEmpty(obj) {
	        if (Object.getOwnPropertyNames) {
	            return Object.getOwnPropertyNames(obj).length === 0;
	        } else {
	            var k;
	            for (k in obj) {
	                if (hasOwnProp(obj, k)) {
	                    return false;
	                }
	            }
	            return true;
	        }
	    }
	
	    function isUndefined(input) {
	        return input === void 0;
	    }
	
	    function isNumber(input) {
	        return (
	            typeof input === 'number' ||
	            Object.prototype.toString.call(input) === '[object Number]'
	        );
	    }
	
	    function isDate(input) {
	        return (
	            input instanceof Date ||
	            Object.prototype.toString.call(input) === '[object Date]'
	        );
	    }
	
	    function map(arr, fn) {
	        var res = [],
	            i;
	        for (i = 0; i < arr.length; ++i) {
	            res.push(fn(arr[i], i));
	        }
	        return res;
	    }
	
	    function extend(a, b) {
	        for (var i in b) {
	            if (hasOwnProp(b, i)) {
	                a[i] = b[i];
	            }
	        }
	
	        if (hasOwnProp(b, 'toString')) {
	            a.toString = b.toString;
	        }
	
	        if (hasOwnProp(b, 'valueOf')) {
	            a.valueOf = b.valueOf;
	        }
	
	        return a;
	    }
	
	    function createUTC(input, format, locale, strict) {
	        return createLocalOrUTC(input, format, locale, strict, true).utc();
	    }
	
	    function defaultParsingFlags() {
	        // We need to deep clone this object.
	        return {
	            empty: false,
	            unusedTokens: [],
	            unusedInput: [],
	            overflow: -2,
	            charsLeftOver: 0,
	            nullInput: false,
	            invalidEra: null,
	            invalidMonth: null,
	            invalidFormat: false,
	            userInvalidated: false,
	            iso: false,
	            parsedDateParts: [],
	            era: null,
	            meridiem: null,
	            rfc2822: false,
	            weekdayMismatch: false,
	        };
	    }
	
	    function getParsingFlags(m) {
	        if (m._pf == null) {
	            m._pf = defaultParsingFlags();
	        }
	        return m._pf;
	    }
	
	    var some;
	    if (Array.prototype.some) {
	        some = Array.prototype.some;
	    } else {
	        some = function (fun) {
	            var t = Object(this),
	                len = t.length >>> 0,
	                i;
	
	            for (i = 0; i < len; i++) {
	                if (i in t && fun.call(this, t[i], i, t)) {
	                    return true;
	                }
	            }
	
	            return false;
	        };
	    }
	
	    function isValid(m) {
	        if (m._isValid == null) {
	            var flags = getParsingFlags(m),
	                parsedParts = some.call(flags.parsedDateParts, function (i) {
	                    return i != null;
	                }),
	                isNowValid =
	                    !isNaN(m._d.getTime()) &&
	                    flags.overflow < 0 &&
	                    !flags.empty &&
	                    !flags.invalidEra &&
	                    !flags.invalidMonth &&
	                    !flags.invalidWeekday &&
	                    !flags.weekdayMismatch &&
	                    !flags.nullInput &&
	                    !flags.invalidFormat &&
	                    !flags.userInvalidated &&
	                    (!flags.meridiem || (flags.meridiem && parsedParts));
	
	            if (m._strict) {
	                isNowValid =
	                    isNowValid &&
	                    flags.charsLeftOver === 0 &&
	                    flags.unusedTokens.length === 0 &&
	                    flags.bigHour === undefined;
	            }
	
	            if (Object.isFrozen == null || !Object.isFrozen(m)) {
	                m._isValid = isNowValid;
	            } else {
	                return isNowValid;
	            }
	        }
	        return m._isValid;
	    }
	
	    function createInvalid(flags) {
	        var m = createUTC(NaN);
	        if (flags != null) {
	            extend(getParsingFlags(m), flags);
	        } else {
	            getParsingFlags(m).userInvalidated = true;
	        }
	
	        return m;
	    }
	
	    // Plugins that add properties should also add the key here (null value),
	    // so we can properly clone ourselves.
	    var momentProperties = (hooks.momentProperties = []),
	        updateInProgress = false;
	
	    function copyConfig(to, from) {
	        var i, prop, val;
	
	        if (!isUndefined(from._isAMomentObject)) {
	            to._isAMomentObject = from._isAMomentObject;
	        }
	        if (!isUndefined(from._i)) {
	            to._i = from._i;
	        }
	        if (!isUndefined(from._f)) {
	            to._f = from._f;
	        }
	        if (!isUndefined(from._l)) {
	            to._l = from._l;
	        }
	        if (!isUndefined(from._strict)) {
	            to._strict = from._strict;
	        }
	        if (!isUndefined(from._tzm)) {
	            to._tzm = from._tzm;
	        }
	        if (!isUndefined(from._isUTC)) {
	            to._isUTC = from._isUTC;
	        }
	        if (!isUndefined(from._offset)) {
	            to._offset = from._offset;
	        }
	        if (!isUndefined(from._pf)) {
	            to._pf = getParsingFlags(from);
	        }
	        if (!isUndefined(from._locale)) {
	            to._locale = from._locale;
	        }
	
	        if (momentProperties.length > 0) {
	            for (i = 0; i < momentProperties.length; i++) {
	                prop = momentProperties[i];
	                val = from[prop];
	                if (!isUndefined(val)) {
	                    to[prop] = val;
	                }
	            }
	        }
	
	        return to;
	    }
	
	    // Moment prototype object
	    function Moment(config) {
	        copyConfig(this, config);
	        this._d = new Date(config._d != null ? config._d.getTime() : NaN);
	        if (!this.isValid()) {
	            this._d = new Date(NaN);
	        }
	        // Prevent infinite loop in case updateOffset creates new moment
	        // objects.
	        if (updateInProgress === false) {
	            updateInProgress = true;
	            hooks.updateOffset(this);
	            updateInProgress = false;
	        }
	    }
	
	    function isMoment(obj) {
	        return (
	            obj instanceof Moment || (obj != null && obj._isAMomentObject != null)
	        );
	    }
	
	    function warn(msg) {
	        if (
	            hooks.suppressDeprecationWarnings === false &&
	            typeof console !== 'undefined' &&
	            console.warn
	        ) {
	            console.warn('Deprecation warning: ' + msg);
	        }
	    }
	
	    function deprecate(msg, fn) {
	        var firstTime = true;
	
	        return extend(function () {
	            if (hooks.deprecationHandler != null) {
	                hooks.deprecationHandler(null, msg);
	            }
	            if (firstTime) {
	                var args = [],
	                    arg,
	                    i,
	                    key;
	                for (i = 0; i < arguments.length; i++) {
	                    arg = '';
	                    if (typeof arguments[i] === 'object') {
	                        arg += '\n[' + i + '] ';
	                        for (key in arguments[0]) {
	                            if (hasOwnProp(arguments[0], key)) {
	                                arg += key + ': ' + arguments[0][key] + ', ';
	                            }
	                        }
	                        arg = arg.slice(0, -2); // Remove trailing comma and space
	                    } else {
	                        arg = arguments[i];
	                    }
	                    args.push(arg);
	                }
	                warn(
	                    msg +
	                        '\nArguments: ' +
	                        Array.prototype.slice.call(args).join('') +
	                        '\n' +
	                        new Error().stack
	                );
	                firstTime = false;
	            }
	            return fn.apply(this, arguments);
	        }, fn);
	    }
	
	    var deprecations = {};
	
	    function deprecateSimple(name, msg) {
	        if (hooks.deprecationHandler != null) {
	            hooks.deprecationHandler(name, msg);
	        }
	        if (!deprecations[name]) {
	            warn(msg);
	            deprecations[name] = true;
	        }
	    }
	
	    hooks.suppressDeprecationWarnings = false;
	    hooks.deprecationHandler = null;
	
	    function isFunction(input) {
	        return (
	            (typeof Function !== 'undefined' && input instanceof Function) ||
	            Object.prototype.toString.call(input) === '[object Function]'
	        );
	    }
	
	    function set(config) {
	        var prop, i;
	        for (i in config) {
	            if (hasOwnProp(config, i)) {
	                prop = config[i];
	                if (isFunction(prop)) {
	                    this[i] = prop;
	                } else {
	                    this['_' + i] = prop;
	                }
	            }
	        }
	        this._config = config;
	        // Lenient ordinal parsing accepts just a number in addition to
	        // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.
	        // TODO: Remove "ordinalParse" fallback in next major release.
	        this._dayOfMonthOrdinalParseLenient = new RegExp(
	            (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) +
	                '|' +
	                /\d{1,2}/.source
	        );
	    }
	
	    function mergeConfigs(parentConfig, childConfig) {
	        var res = extend({}, parentConfig),
	            prop;
	        for (prop in childConfig) {
	            if (hasOwnProp(childConfig, prop)) {
	                if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {
	                    res[prop] = {};
	                    extend(res[prop], parentConfig[prop]);
	                    extend(res[prop], childConfig[prop]);
	                } else if (childConfig[prop] != null) {
	                    res[prop] = childConfig[prop];
	                } else {
	                    delete res[prop];
	                }
	            }
	        }
	        for (prop in parentConfig) {
	            if (
	                hasOwnProp(parentConfig, prop) &&
	                !hasOwnProp(childConfig, prop) &&
	                isObject(parentConfig[prop])
	            ) {
	                // make sure changes to properties don't modify parent config
	                res[prop] = extend({}, res[prop]);
	            }
	        }
	        return res;
	    }
	
	    function Locale(config) {
	        if (config != null) {
	            this.set(config);
	        }
	    }
	
	    var keys;
	
	    if (Object.keys) {
	        keys = Object.keys;
	    } else {
	        keys = function (obj) {
	            var i,
	                res = [];
	            for (i in obj) {
	                if (hasOwnProp(obj, i)) {
	                    res.push(i);
	                }
	            }
	            return res;
	        };
	    }
	
	    var defaultCalendar = {
	        sameDay: '[Today at] LT',
	        nextDay: '[Tomorrow at] LT',
	        nextWeek: 'dddd [at] LT',
	        lastDay: '[Yesterday at] LT',
	        lastWeek: '[Last] dddd [at] LT',
	        sameElse: 'L',
	    };
	
	    function calendar(key, mom, now) {
	        var output = this._calendar[key] || this._calendar['sameElse'];
	        return isFunction(output) ? output.call(mom, now) : output;
	    }
	
	    function zeroFill(number, targetLength, forceSign) {
	        var absNumber = '' + Math.abs(number),
	            zerosToFill = targetLength - absNumber.length,
	            sign = number >= 0;
	        return (
	            (sign ? (forceSign ? '+' : '') : '-') +
	            Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) +
	            absNumber
	        );
	    }
	
	    var formattingTokens = /(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,
	        localFormattingTokens = /(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,
	        formatFunctions = {},
	        formatTokenFunctions = {};
	
	    // token:    'M'
	    // padded:   ['MM', 2]
	    // ordinal:  'Mo'
	    // callback: function () { this.month() + 1 }
	    function addFormatToken(token, padded, ordinal, callback) {
	        var func = callback;
	        if (typeof callback === 'string') {
	            func = function () {
	                return this[callback]();
	            };
	        }
	        if (token) {
	            formatTokenFunctions[token] = func;
	        }
	        if (padded) {
	            formatTokenFunctions[padded[0]] = function () {
	                return zeroFill(func.apply(this, arguments), padded[1], padded[2]);
	            };
	        }
	        if (ordinal) {
	            formatTokenFunctions[ordinal] = function () {
	                return this.localeData().ordinal(
	                    func.apply(this, arguments),
	                    token
	                );
	            };
	        }
	    }
	
	    function removeFormattingTokens(input) {
	        if (input.match(/\[[\s\S]/)) {
	            return input.replace(/^\[|\]$/g, '');
	        }
	        return input.replace(/\\/g, '');
	    }
	
	    function makeFormatFunction(format) {
	        var array = format.match(formattingTokens),
	            i,
	            length;
	
	        for (i = 0, length = array.length; i < length; i++) {
	            if (formatTokenFunctions[array[i]]) {
	                array[i] = formatTokenFunctions[array[i]];
	            } else {
	                array[i] = removeFormattingTokens(array[i]);
	            }
	        }
	
	        return function (mom) {
	            var output = '',
	                i;
	            for (i = 0; i < length; i++) {
	                output += isFunction(array[i])
	                    ? array[i].call(mom, format)
	                    : array[i];
	            }
	            return output;
	        };
	    }
	
	    // format date using native date object
	    function formatMoment(m, format) {
	        if (!m.isValid()) {
	            return m.localeData().invalidDate();
	        }
	
	        format = expandFormat(format, m.localeData());
	        formatFunctions[format] =
	            formatFunctions[format] || makeFormatFunction(format);
	
	        return formatFunctions[format](m);
	    }
	
	    function expandFormat(format, locale) {
	        var i = 5;
	
	        function replaceLongDateFormatTokens(input) {
	            return locale.longDateFormat(input) || input;
	        }
	
	        localFormattingTokens.lastIndex = 0;
	        while (i >= 0 && localFormattingTokens.test(format)) {
	            format = format.replace(
	                localFormattingTokens,
	                replaceLongDateFormatTokens
	            );
	            localFormattingTokens.lastIndex = 0;
	            i -= 1;
	        }
	
	        return format;
	    }
	
	    var defaultLongDateFormat = {
	        LTS: 'h:mm:ss A',
	        LT: 'h:mm A',
	        L: 'MM/DD/YYYY',
	        LL: 'MMMM D, YYYY',
	        LLL: 'MMMM D, YYYY h:mm A',
	        LLLL: 'dddd, MMMM D, YYYY h:mm A',
	    };
	
	    function longDateFormat(key) {
	        var format = this._longDateFormat[key],
	            formatUpper = this._longDateFormat[key.toUpperCase()];
	
	        if (format || !formatUpper) {
	            return format;
	        }
	
	        this._longDateFormat[key] = formatUpper
	            .match(formattingTokens)
	            .map(function (tok) {
	                if (
	                    tok === 'MMMM' ||
	                    tok === 'MM' ||
	                    tok === 'DD' ||
	                    tok === 'dddd'
	                ) {
	                    return tok.slice(1);
	                }
	                return tok;
	            })
	            .join('');
	
	        return this._longDateFormat[key];
	    }
	
	    var defaultInvalidDate = 'Invalid date';
	
	    function invalidDate() {
	        return this._invalidDate;
	    }
	
	    var defaultOrdinal = '%d',
	        defaultDayOfMonthOrdinalParse = /\d{1,2}/;
	
	    function ordinal(number) {
	        return this._ordinal.replace('%d', number);
	    }
	
	    var defaultRelativeTime = {
	        future: 'in %s',
	        past: '%s ago',
	        s: 'a few seconds',
	        ss: '%d seconds',
	        m: 'a minute',
	        mm: '%d minutes',
	        h: 'an hour',
	        hh: '%d hours',
	        d: 'a day',
	        dd: '%d days',
	        w: 'a week',
	        ww: '%d weeks',
	        M: 'a month',
	        MM: '%d months',
	        y: 'a year',
	        yy: '%d years',
	    };
	
	    function relativeTime(number, withoutSuffix, string, isFuture) {
	        var output = this._relativeTime[string];
	        return isFunction(output)
	            ? output(number, withoutSuffix, string, isFuture)
	            : output.replace(/%d/i, number);
	    }
	
	    function pastFuture(diff, output) {
	        var format = this._relativeTime[diff > 0 ? 'future' : 'past'];
	        return isFunction(format) ? format(output) : format.replace(/%s/i, output);
	    }
	
	    var aliases = {};
	
	    function addUnitAlias(unit, shorthand) {
	        var lowerCase = unit.toLowerCase();
	        aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit;
	    }
	
	    function normalizeUnits(units) {
	        return typeof units === 'string'
	            ? aliases[units] || aliases[units.toLowerCase()]
	            : undefined;
	    }
	
	    function normalizeObjectUnits(inputObject) {
	        var normalizedInput = {},
	            normalizedProp,
	            prop;
	
	        for (prop in inputObject) {
	            if (hasOwnProp(inputObject, prop)) {
	                normalizedProp = normalizeUnits(prop);
	                if (normalizedProp) {
	                    normalizedInput[normalizedProp] = inputObject[prop];
	                }
	            }
	        }
	
	        return normalizedInput;
	    }
	
	    var priorities = {};
	
	    function addUnitPriority(unit, priority) {
	        priorities[unit] = priority;
	    }
	
	    function getPrioritizedUnits(unitsObj) {
	        var units = [],
	            u;
	        for (u in unitsObj) {
	            if (hasOwnProp(unitsObj, u)) {
	                units.push({ unit: u, priority: priorities[u] });
	            }
	        }
	        units.sort(function (a, b) {
	            return a.priority - b.priority;
	        });
	        return units;
	    }
	
	    function isLeapYear(year) {
	        return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;
	    }
	
	    function absFloor(number) {
	        if (number < 0) {
	            // -0 -> 0
	            return Math.ceil(number) || 0;
	        } else {
	            return Math.floor(number);
	        }
	    }
	
	    function toInt(argumentForCoercion) {
	        var coercedNumber = +argumentForCoercion,
	            value = 0;
	
	        if (coercedNumber !== 0 && isFinite(coercedNumber)) {
	            value = absFloor(coercedNumber);
	        }
	
	        return value;
	    }
	
	    function makeGetSet(unit, keepTime) {
	        return function (value) {
	            if (value != null) {
	                set$1(this, unit, value);
	                hooks.updateOffset(this, keepTime);
	                return this;
	            } else {
	                return get(this, unit);
	            }
	        };
	    }
	
	    function get(mom, unit) {
	        return mom.isValid()
	            ? mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]()
	            : NaN;
	    }
	
	    function set$1(mom, unit, value) {
	        if (mom.isValid() && !isNaN(value)) {
	            if (
	                unit === 'FullYear' &&
	                isLeapYear(mom.year()) &&
	                mom.month() === 1 &&
	                mom.date() === 29
	            ) {
	                value = toInt(value);
	                mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](
	                    value,
	                    mom.month(),
	                    daysInMonth(value, mom.month())
	                );
	            } else {
	                mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);
	            }
	        }
	    }
	
	    // MOMENTS
	
	    function stringGet(units) {
	        units = normalizeUnits(units);
	        if (isFunction(this[units])) {
	            return this[units]();
	        }
	        return this;
	    }
	
	    function stringSet(units, value) {
	        if (typeof units === 'object') {
	            units = normalizeObjectUnits(units);
	            var prioritized = getPrioritizedUnits(units),
	                i;
	            for (i = 0; i < prioritized.length; i++) {
	                this[prioritized[i].unit](units[prioritized[i].unit]);
	            }
	        } else {
	            units = normalizeUnits(units);
	            if (isFunction(this[units])) {
	                return this[units](value);
	            }
	        }
	        return this;
	    }
	
	    var match1 = /\d/, //       0 - 9
	        match2 = /\d\d/, //      00 - 99
	        match3 = /\d{3}/, //     000 - 999
	        match4 = /\d{4}/, //    0000 - 9999
	        match6 = /[+-]?\d{6}/, // -999999 - 999999
	        match1to2 = /\d\d?/, //       0 - 99
	        match3to4 = /\d\d\d\d?/, //     999 - 9999
	        match5to6 = /\d\d\d\d\d\d?/, //   99999 - 999999
	        match1to3 = /\d{1,3}/, //       0 - 999
	        match1to4 = /\d{1,4}/, //       0 - 9999
	        match1to6 = /[+-]?\d{1,6}/, // -999999 - 999999
	        matchUnsigned = /\d+/, //       0 - inf
	        matchSigned = /[+-]?\d+/, //    -inf - inf
	        matchOffset = /Z|[+-]\d\d:?\d\d/gi, // +00:00 -00:00 +0000 -0000 or Z
	        matchShortOffset = /Z|[+-]\d\d(?::?\d\d)?/gi, // +00 -00 +00:00 -00:00 +0000 -0000 or Z
	        matchTimestamp = /[+-]?\d+(\.\d{1,3})?/, // 123456789 123456789.123
	        // any word (or two) characters or numbers including two/three word month in arabic.
	        // includes scottish gaelic two word and hyphenated months
	        matchWord = /[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i,
	        regexes;
	
	    regexes = {};
	
	    function addRegexToken(token, regex, strictRegex) {
	        regexes[token] = isFunction(regex)
	            ? regex
	            : function (isStrict, localeData) {
	                  return isStrict && strictRegex ? strictRegex : regex;
	              };
	    }
	
	    function getParseRegexForToken(token, config) {
	        if (!hasOwnProp(regexes, token)) {
	            return new RegExp(unescapeFormat(token));
	        }
	
	        return regexes[token](config._strict, config._locale);
	    }
	
	    // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript
	    function unescapeFormat(s) {
	        return regexEscape(
	            s
	                .replace('\\', '')
	                .replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g, function (
	                    matched,
	                    p1,
	                    p2,
	                    p3,
	                    p4
	                ) {
	                    return p1 || p2 || p3 || p4;
	                })
	        );
	    }
	
	    function regexEscape(s) {
	        return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
	    }
	
	    var tokens = {};
	
	    function addParseToken(token, callback) {
	        var i,
	            func = callback;
	        if (typeof token === 'string') {
	            token = [token];
	        }
	        if (isNumber(callback)) {
	            func = function (input, array) {
	                array[callback] = toInt(input);
	            };
	        }
	        for (i = 0; i < token.length; i++) {
	            tokens[token[i]] = func;
	        }
	    }
	
	    function addWeekParseToken(token, callback) {
	        addParseToken(token, function (input, array, config, token) {
	            config._w = config._w || {};
	            callback(input, config._w, config, token);
	        });
	    }
	
	    function addTimeToArrayFromToken(token, input, config) {
	        if (input != null && hasOwnProp(tokens, token)) {
	            tokens[token](input, config._a, config, token);
	        }
	    }
	
	    var YEAR = 0,
	        MONTH = 1,
	        DATE = 2,
	        HOUR = 3,
	        MINUTE = 4,
	        SECOND = 5,
	        MILLISECOND = 6,
	        WEEK = 7,
	        WEEKDAY = 8;
	
	    function mod(n, x) {
	        return ((n % x) + x) % x;
	    }
	
	    var indexOf;
	
	    if (Array.prototype.indexOf) {
	        indexOf = Array.prototype.indexOf;
	    } else {
	        indexOf = function (o) {
	            // I know
	            var i;
	            for (i = 0; i < this.length; ++i) {
	                if (this[i] === o) {
	                    return i;
	                }
	            }
	            return -1;
	        };
	    }
	
	    function daysInMonth(year, month) {
	        if (isNaN(year) || isNaN(month)) {
	            return NaN;
	        }
	        var modMonth = mod(month, 12);
	        year += (month - modMonth) / 12;
	        return modMonth === 1
	            ? isLeapYear(year)
	                ? 29
	                : 28
	            : 31 - ((modMonth % 7) % 2);
	    }
	
	    // FORMATTING
	
	    addFormatToken('M', ['MM', 2], 'Mo', function () {
	        return this.month() + 1;
	    });
	
	    addFormatToken('MMM', 0, 0, function (format) {
	        return this.localeData().monthsShort(this, format);
	    });
	
	    addFormatToken('MMMM', 0, 0, function (format) {
	        return this.localeData().months(this, format);
	    });
	
	    // ALIASES
	
	    addUnitAlias('month', 'M');
	
	    // PRIORITY
	
	    addUnitPriority('month', 8);
	
	    // PARSING
	
	    addRegexToken('M', match1to2);
	    addRegexToken('MM', match1to2, match2);
	    addRegexToken('MMM', function (isStrict, locale) {
	        return locale.monthsShortRegex(isStrict);
	    });
	    addRegexToken('MMMM', function (isStrict, locale) {
	        return locale.monthsRegex(isStrict);
	    });
	
	    addParseToken(['M', 'MM'], function (input, array) {
	        array[MONTH] = toInt(input) - 1;
	    });
	
	    addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {
	        var month = config._locale.monthsParse(input, token, config._strict);
	        // if we didn't find a month name, mark the date as invalid.
	        if (month != null) {
	            array[MONTH] = month;
	        } else {
	            getParsingFlags(config).invalidMonth = input;
	        }
	    });
	
	    // LOCALES
	
	    var defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split(
	            '_'
	        ),
	        defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split(
	            '_'
	        ),
	        MONTHS_IN_FORMAT = /D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/,
	        defaultMonthsShortRegex = matchWord,
	        defaultMonthsRegex = matchWord;
	
	    function localeMonths(m, format) {
	        if (!m) {
	            return isArray(this._months)
	                ? this._months
	                : this._months['standalone'];
	        }
	        return isArray(this._months)
	            ? this._months[m.month()]
	            : this._months[
	                  (this._months.isFormat || MONTHS_IN_FORMAT).test(format)
	                      ? 'format'
	                      : 'standalone'
	              ][m.month()];
	    }
	
	    function localeMonthsShort(m, format) {
	        if (!m) {
	            return isArray(this._monthsShort)
	                ? this._monthsShort
	                : this._monthsShort['standalone'];
	        }
	        return isArray(this._monthsShort)
	            ? this._monthsShort[m.month()]
	            : this._monthsShort[
	                  MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'
	              ][m.month()];
	    }
	
	    function handleStrictParse(monthName, format, strict) {
	        var i,
	            ii,
	            mom,
	            llc = monthName.toLocaleLowerCase();
	        if (!this._monthsParse) {
	            // this is not used
	            this._monthsParse = [];
	            this._longMonthsParse = [];
	            this._shortMonthsParse = [];
	            for (i = 0; i < 12; ++i) {
	                mom = createUTC([2000, i]);
	                this._shortMonthsParse[i] = this.monthsShort(
	                    mom,
	                    ''
	                ).toLocaleLowerCase();
	                this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();
	            }
	        }
	
	        if (strict) {
	            if (format === 'MMM') {
	                ii = indexOf.call(this._shortMonthsParse, llc);
	                return ii !== -1 ? ii : null;
	            } else {
	                ii = indexOf.call(this._longMonthsParse, llc);
	                return ii !== -1 ? ii : null;
	            }
	        } else {
	            if (format === 'MMM') {
	                ii = indexOf.call(this._shortMonthsParse, llc);
	                if (ii !== -1) {
	                    return ii;
	                }
	                ii = indexOf.call(this._longMonthsParse, llc);
	                return ii !== -1 ? ii : null;
	            } else {
	                ii = indexOf.call(this._longMonthsParse, llc);
	                if (ii !== -1) {
	                    return ii;
	                }
	                ii = indexOf.call(this._shortMonthsParse, llc);
	                return ii !== -1 ? ii : null;
	            }
	        }
	    }
	
	    function localeMonthsParse(monthName, format, strict) {
	        var i, mom, regex;
	
	        if (this._monthsParseExact) {
	            return handleStrictParse.call(this, monthName, format, strict);
	        }
	
	        if (!this._monthsParse) {
	            this._monthsParse = [];
	            this._longMonthsParse = [];
	            this._shortMonthsParse = [];
	        }
	
	        // TODO: add sorting
	        // Sorting makes sure if one month (or abbr) is a prefix of another
	        // see sorting in computeMonthsParse
	        for (i = 0; i < 12; i++) {
	            // make the regex if we don't have it already
	            mom = createUTC([2000, i]);
	            if (strict && !this._longMonthsParse[i]) {
	                this._longMonthsParse[i] = new RegExp(
	                    '^' + this.months(mom, '').replace('.', '') + '$',
	                    'i'
	                );
	                this._shortMonthsParse[i] = new RegExp(
	                    '^' + this.monthsShort(mom, '').replace('.', '') + '$',
	                    'i'
	                );
	            }
	            if (!strict && !this._monthsParse[i]) {
	                regex =
	                    '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');
	                this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');
	            }
	            // test the regex
	            if (
	                strict &&
	                format === 'MMMM' &&
	                this._longMonthsParse[i].test(monthName)
	            ) {
	                return i;
	            } else if (
	                strict &&
	                format === 'MMM' &&
	                this._shortMonthsParse[i].test(monthName)
	            ) {
	                return i;
	            } else if (!strict && this._monthsParse[i].test(monthName)) {
	                return i;
	            }
	        }
	    }
	
	    // MOMENTS
	
	    function setMonth(mom, value) {
	        var dayOfMonth;
	
	        if (!mom.isValid()) {
	            // No op
	            return mom;
	        }
	
	        if (typeof value === 'string') {
	            if (/^\d+$/.test(value)) {
	                value = toInt(value);
	            } else {
	                value = mom.localeData().monthsParse(value);
	                // TODO: Another silent failure?
	                if (!isNumber(value)) {
	                    return mom;
	                }
	            }
	        }
	
	        dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value));
	        mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth);
	        return mom;
	    }
	
	    function getSetMonth(value) {
	        if (value != null) {
	            setMonth(this, value);
	            hooks.updateOffset(this, true);
	            return this;
	        } else {
	            return get(this, 'Month');
	        }
	    }
	
	    function getDaysInMonth() {
	        return daysInMonth(this.year(), this.month());
	    }
	
	    function monthsShortRegex(isStrict) {
	        if (this._monthsParseExact) {
	            if (!hasOwnProp(this, '_monthsRegex')) {
	                computeMonthsParse.call(this);
	            }
	            if (isStrict) {
	                return this._monthsShortStrictRegex;
	            } else {
	                return this._monthsShortRegex;
	            }
	        } else {
	            if (!hasOwnProp(this, '_monthsShortRegex')) {
	                this._monthsShortRegex = defaultMonthsShortRegex;
	            }
	            return this._monthsShortStrictRegex && isStrict
	                ? this._monthsShortStrictRegex
	                : this._monthsShortRegex;
	        }
	    }
	
	    function monthsRegex(isStrict) {
	        if (this._monthsParseExact) {
	            if (!hasOwnProp(this, '_monthsRegex')) {
	                computeMonthsParse.call(this);
	            }
	            if (isStrict) {
	                return this._monthsStrictRegex;
	            } else {
	                return this._monthsRegex;
	            }
	        } else {
	            if (!hasOwnProp(this, '_monthsRegex')) {
	                this._monthsRegex = defaultMonthsRegex;
	            }
	            return this._monthsStrictRegex && isStrict
	                ? this._monthsStrictRegex
	                : this._monthsRegex;
	        }
	    }
	
	    function computeMonthsParse() {
	        function cmpLenRev(a, b) {
	            return b.length - a.length;
	        }
	
	        var shortPieces = [],
	            longPieces = [],
	            mixedPieces = [],
	            i,
	            mom;
	        for (i = 0; i < 12; i++) {
	            // make the regex if we don't have it already
	            mom = createUTC([2000, i]);
	            shortPieces.push(this.monthsShort(mom, ''));
	            longPieces.push(this.months(mom, ''));
	            mixedPieces.push(this.months(mom, ''));
	            mixedPieces.push(this.monthsShort(mom, ''));
	        }
	        // Sorting makes sure if one month (or abbr) is a prefix of another it
	        // will match the longer piece.
	        shortPieces.sort(cmpLenRev);
	        longPieces.sort(cmpLenRev);
	        mixedPieces.sort(cmpLenRev);
	        for (i = 0; i < 12; i++) {
	            shortPieces[i] = regexEscape(shortPieces[i]);
	            longPieces[i] = regexEscape(longPieces[i]);
	        }
	        for (i = 0; i < 24; i++) {
	            mixedPieces[i] = regexEscape(mixedPieces[i]);
	        }
	
	        this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');
	        this._monthsShortRegex = this._monthsRegex;
	        this._monthsStrictRegex = new RegExp(
	            '^(' + longPieces.join('|') + ')',
	            'i'
	        );
	        this._monthsShortStrictRegex = new RegExp(
	            '^(' + shortPieces.join('|') + ')',
	            'i'
	        );
	    }
	
	    // FORMATTING
	
	    addFormatToken('Y', 0, 0, function () {
	        var y = this.year();
	        return y <= 9999 ? zeroFill(y, 4) : '+' + y;
	    });
	
	    addFormatToken(0, ['YY', 2], 0, function () {
	        return this.year() % 100;
	    });
	
	    addFormatToken(0, ['YYYY', 4], 0, 'year');
	    addFormatToken(0, ['YYYYY', 5], 0, 'year');
	    addFormatToken(0, ['YYYYYY', 6, true], 0, 'year');
	
	    // ALIASES
	
	    addUnitAlias('year', 'y');
	
	    // PRIORITIES
	
	    addUnitPriority('year', 1);
	
	    // PARSING
	
	    addRegexToken('Y', matchSigned);
	    addRegexToken('YY', match1to2, match2);
	    addRegexToken('YYYY', match1to4, match4);
	    addRegexToken('YYYYY', match1to6, match6);
	    addRegexToken('YYYYYY', match1to6, match6);
	
	    addParseToken(['YYYYY', 'YYYYYY'], YEAR);
	    addParseToken('YYYY', function (input, array) {
	        array[YEAR] =
	            input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);
	    });
	    addParseToken('YY', function (input, array) {
	        array[YEAR] = hooks.parseTwoDigitYear(input);
	    });
	    addParseToken('Y', function (input, array) {
	        array[YEAR] = parseInt(input, 10);
	    });
	
	    // HELPERS
	
	    function daysInYear(year) {
	        return isLeapYear(year) ? 366 : 365;
	    }
	
	    // HOOKS
	
	    hooks.parseTwoDigitYear = function (input) {
	        return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);
	    };
	
	    // MOMENTS
	
	    var getSetYear = makeGetSet('FullYear', true);
	
	    function getIsLeapYear() {
	        return isLeapYear(this.year());
	    }
	
	    function createDate(y, m, d, h, M, s, ms) {
	        // can't just apply() to create a date:
	        // https://stackoverflow.com/q/181348
	        var date;
	        // the date constructor remaps years 0-99 to 1900-1999
	        if (y < 100 && y >= 0) {
	            // preserve leap years using a full 400 year cycle, then reset
	            date = new Date(y + 400, m, d, h, M, s, ms);
	            if (isFinite(date.getFullYear())) {
	                date.setFullYear(y);
	            }
	        } else {
	            date = new Date(y, m, d, h, M, s, ms);
	        }
	
	        return date;
	    }
	
	    function createUTCDate(y) {
	        var date, args;
	        // the Date.UTC function remaps years 0-99 to 1900-1999
	        if (y < 100 && y >= 0) {
	            args = Array.prototype.slice.call(arguments);
	            // preserve leap years using a full 400 year cycle, then reset
	            args[0] = y + 400;
	            date = new Date(Date.UTC.apply(null, args));
	            if (isFinite(date.getUTCFullYear())) {
	                date.setUTCFullYear(y);
	            }
	        } else {
	            date = new Date(Date.UTC.apply(null, arguments));
	        }
	
	        return date;
	    }
	
	    // start-of-first-week - start-of-year
	    function firstWeekOffset(year, dow, doy) {
	        var // first-week day -- which january is always in the first week (4 for iso, 1 for other)
	            fwd = 7 + dow - doy,
	            // first-week day local weekday -- which local weekday is fwd
	            fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;
	
	        return -fwdlw + fwd - 1;
	    }
	
	    // https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday
	    function dayOfYearFromWeeks(year, week, weekday, dow, doy) {
	        var localWeekday = (7 + weekday - dow) % 7,
	            weekOffset = firstWeekOffset(year, dow, doy),
	            dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,
	            resYear,
	            resDayOfYear;
	
	        if (dayOfYear <= 0) {
	            resYear = year - 1;
	            resDayOfYear = daysInYear(resYear) + dayOfYear;
	        } else if (dayOfYear > daysInYear(year)) {
	            resYear = year + 1;
	            resDayOfYear = dayOfYear - daysInYear(year);
	        } else {
	            resYear = year;
	            resDayOfYear = dayOfYear;
	        }
	
	        return {
	            year: resYear,
	            dayOfYear: resDayOfYear,
	        };
	    }
	
	    function weekOfYear(mom, dow, doy) {
	        var weekOffset = firstWeekOffset(mom.year(), dow, doy),
	            week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,
	            resWeek,
	            resYear;
	
	        if (week < 1) {
	            resYear = mom.year() - 1;
	            resWeek = week + weeksInYear(resYear, dow, doy);
	        } else if (week > weeksInYear(mom.year(), dow, doy)) {
	            resWeek = week - weeksInYear(mom.year(), dow, doy);
	            resYear = mom.year() + 1;
	        } else {
	            resYear = mom.year();
	            resWeek = week;
	        }
	
	        return {
	            week: resWeek,
	            year: resYear,
	        };
	    }
	
	    function weeksInYear(year, dow, doy) {
	        var weekOffset = firstWeekOffset(year, dow, doy),
	            weekOffsetNext = firstWeekOffset(year + 1, dow, doy);
	        return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;
	    }
	
	    // FORMATTING
	
	    addFormatToken('w', ['ww', 2], 'wo', 'week');
	    addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');
	
	    // ALIASES
	
	    addUnitAlias('week', 'w');
	    addUnitAlias('isoWeek', 'W');
	
	    // PRIORITIES
	
	    addUnitPriority('week', 5);
	    addUnitPriority('isoWeek', 5);
	
	    // PARSING
	
	    addRegexToken('w', match1to2);
	    addRegexToken('ww', match1to2, match2);
	    addRegexToken('W', match1to2);
	    addRegexToken('WW', match1to2, match2);
	
	    addWeekParseToken(['w', 'ww', 'W', 'WW'], function (
	        input,
	        week,
	        config,
	        token
	    ) {
	        week[token.substr(0, 1)] = toInt(input);
	    });
	
	    // HELPERS
	
	    // LOCALES
	
	    function localeWeek(mom) {
	        return weekOfYear(mom, this._week.dow, this._week.doy).week;
	    }
	
	    var defaultLocaleWeek = {
	        dow: 0, // Sunday is the first day of the week.
	        doy: 6, // The week that contains Jan 6th is the first week of the year.
	    };
	
	    function localeFirstDayOfWeek() {
	        return this._week.dow;
	    }
	
	    function localeFirstDayOfYear() {
	        return this._week.doy;
	    }
	
	    // MOMENTS
	
	    function getSetWeek(input) {
	        var week = this.localeData().week(this);
	        return input == null ? week : this.add((input - week) * 7, 'd');
	    }
	
	    function getSetISOWeek(input) {
	        var week = weekOfYear(this, 1, 4).week;
	        return input == null ? week : this.add((input - week) * 7, 'd');
	    }
	
	    // FORMATTING
	
	    addFormatToken('d', 0, 'do', 'day');
	
	    addFormatToken('dd', 0, 0, function (format) {
	        return this.localeData().weekdaysMin(this, format);
	    });
	
	    addFormatToken('ddd', 0, 0, function (format) {
	        return this.localeData().weekdaysShort(this, format);
	    });
	
	    addFormatToken('dddd', 0, 0, function (format) {
	        return this.localeData().weekdays(this, format);
	    });
	
	    addFormatToken('e', 0, 0, 'weekday');
	    addFormatToken('E', 0, 0, 'isoWeekday');
	
	    // ALIASES
	
	    addUnitAlias('day', 'd');
	    addUnitAlias('weekday', 'e');
	    addUnitAlias('isoWeekday', 'E');
	
	    // PRIORITY
	    addUnitPriority('day', 11);
	    addUnitPriority('weekday', 11);
	    addUnitPriority('isoWeekday', 11);
	
	    // PARSING
	
	    addRegexToken('d', match1to2);
	    addRegexToken('e', match1to2);
	    addRegexToken('E', match1to2);
	    addRegexToken('dd', function (isStrict, locale) {
	        return locale.weekdaysMinRegex(isStrict);
	    });
	    addRegexToken('ddd', function (isStrict, locale) {
	        return locale.weekdaysShortRegex(isStrict);
	    });
	    addRegexToken('dddd', function (isStrict, locale) {
	        return locale.weekdaysRegex(isStrict);
	    });
	
	    addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {
	        var weekday = config._locale.weekdaysParse(input, token, config._strict);
	        // if we didn't get a weekday name, mark the date as invalid
	        if (weekday != null) {
	            week.d = weekday;
	        } else {
	            getParsingFlags(config).invalidWeekday = input;
	        }
	    });
	
	    addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {
	        week[token] = toInt(input);
	    });
	
	    // HELPERS
	
	    function parseWeekday(input, locale) {
	        if (typeof input !== 'string') {
	            return input;
	        }
	
	        if (!isNaN(input)) {
	            return parseInt(input, 10);
	        }
	
	        input = locale.weekdaysParse(input);
	        if (typeof input === 'number') {
	            return input;
	        }
	
	        return null;
	    }
	
	    function parseIsoWeekday(input, locale) {
	        if (typeof input === 'string') {
	            return locale.weekdaysParse(input) % 7 || 7;
	        }
	        return isNaN(input) ? null : input;
	    }
	
	    // LOCALES
	    function shiftWeekdays(ws, n) {
	        return ws.slice(n, 7).concat(ws.slice(0, n));
	    }
	
	    var defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(
	            '_'
	        ),
	        defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
	        defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
	        defaultWeekdaysRegex = matchWord,
	        defaultWeekdaysShortRegex = matchWord,
	        defaultWeekdaysMinRegex = matchWord;
	
	    function localeWeekdays(m, format) {
	        var weekdays = isArray(this._weekdays)
	            ? this._weekdays
	            : this._weekdays[
	                  m && m !== true && this._weekdays.isFormat.test(format)
	                      ? 'format'
	                      : 'standalone'
	              ];
	        return m === true
	            ? shiftWeekdays(weekdays, this._week.dow)
	            : m
	            ? weekdays[m.day()]
	            : weekdays;
	    }
	
	    function localeWeekdaysShort(m) {
	        return m === true
	            ? shiftWeekdays(this._weekdaysShort, this._week.dow)
	            : m
	            ? this._weekdaysShort[m.day()]
	            : this._weekdaysShort;
	    }
	
	    function localeWeekdaysMin(m) {
	        return m === true
	            ? shiftWeekdays(this._weekdaysMin, this._week.dow)
	            : m
	            ? this._weekdaysMin[m.day()]
	            : this._weekdaysMin;
	    }
	
	    function handleStrictParse$1(weekdayName, format, strict) {
	        var i,
	            ii,
	            mom,
	            llc = weekdayName.toLocaleLowerCase();
	        if (!this._weekdaysParse) {
	            this._weekdaysParse = [];
	            this._shortWeekdaysParse = [];
	            this._minWeekdaysParse = [];
	
	            for (i = 0; i < 7; ++i) {
	                mom = createUTC([2000, 1]).day(i);
	                this._minWeekdaysParse[i] = this.weekdaysMin(
	                    mom,
	                    ''
	                ).toLocaleLowerCase();
	                this._shortWeekdaysParse[i] = this.weekdaysShort(
	                    mom,
	                    ''
	                ).toLocaleLowerCase();
	                this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();
	            }
	        }
	
	        if (strict) {
	            if (format === 'dddd') {
	                ii = indexOf.call(this._weekdaysParse, llc);
	                return ii !== -1 ? ii : null;
	            } else if (format === 'ddd') {
	                ii = indexOf.call(this._shortWeekdaysParse, llc);
	                return ii !== -1 ? ii : null;
	            } else {
	                ii = indexOf.call(this._minWeekdaysParse, llc);
	                return ii !== -1 ? ii : null;
	            }
	        } else {
	            if (format === 'dddd') {
	                ii = indexOf.call(this._weekdaysParse, llc);
	                if (ii !== -1) {
	                    return ii;
	                }
	                ii = indexOf.call(this._shortWeekdaysParse, llc);
	                if (ii !== -1) {
	                    return ii;
	                }
	                ii = indexOf.call(this._minWeekdaysParse, llc);
	                return ii !== -1 ? ii : null;
	            } else if (format === 'ddd') {
	                ii = indexOf.call(this._shortWeekdaysParse, llc);
	                if (ii !== -1) {
	                    return ii;
	                }
	                ii = indexOf.call(this._weekdaysParse, llc);
	                if (ii !== -1) {
	                    return ii;
	                }
	                ii = indexOf.call(this._minWeekdaysParse, llc);
	                return ii !== -1 ? ii : null;
	            } else {
	                ii = indexOf.call(this._minWeekdaysParse, llc);
	                if (ii !== -1) {
	                    return ii;
	                }
	                ii = indexOf.call(this._weekdaysParse, llc);
	                if (ii !== -1) {
	                    return ii;
	                }
	                ii = indexOf.call(this._shortWeekdaysParse, llc);
	                return ii !== -1 ? ii : null;
	            }
	        }
	    }
	
	    function localeWeekdaysParse(weekdayName, format, strict) {
	        var i, mom, regex;
	
	        if (this._weekdaysParseExact) {
	            return handleStrictParse$1.call(this, weekdayName, format, strict);
	        }
	
	        if (!this._weekdaysParse) {
	            this._weekdaysParse = [];
	            this._minWeekdaysParse = [];
	            this._shortWeekdaysParse = [];
	            this._fullWeekdaysParse = [];
	        }
	
	        for (i = 0; i < 7; i++) {
	            // make the regex if we don't have it already
	
	            mom = createUTC([2000, 1]).day(i);
	            if (strict && !this._fullWeekdaysParse[i]) {
	                this._fullWeekdaysParse[i] = new RegExp(
	                    '^' + this.weekdays(mom, '').replace('.', '\\.?') + '$',
	                    'i'
	                );
	                this._shortWeekdaysParse[i] = new RegExp(
	                    '^' + this.weekdaysShort(mom, '').replace('.', '\\.?') + '$',
	                    'i'
	                );
	                this._minWeekdaysParse[i] = new RegExp(
	                    '^' + this.weekdaysMin(mom, '').replace('.', '\\.?') + '$',
	                    'i'
	                );
	            }
	            if (!this._weekdaysParse[i]) {
	                regex =
	                    '^' +
	                    this.weekdays(mom, '') +
	                    '|^' +
	                    this.weekdaysShort(mom, '') +
	                    '|^' +
	                    this.weekdaysMin(mom, '');
	                this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');
	            }
	            // test the regex
	            if (
	                strict &&
	                format === 'dddd' &&
	                this._fullWeekdaysParse[i].test(weekdayName)
	            ) {
	                return i;
	            } else if (
	                strict &&
	                format === 'ddd' &&
	                this._shortWeekdaysParse[i].test(weekdayName)
	            ) {
	                return i;
	            } else if (
	                strict &&
	                format === 'dd' &&
	                this._minWeekdaysParse[i].test(weekdayName)
	            ) {
	                return i;
	            } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {
	                return i;
	            }
	        }
	    }
	
	    // MOMENTS
	
	    function getSetDayOfWeek(input) {
	        if (!this.isValid()) {
	            return input != null ? this : NaN;
	        }
	        var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();
	        if (input != null) {
	            input = parseWeekday(input, this.localeData());
	            return this.add(input - day, 'd');
	        } else {
	            return day;
	        }
	    }
	
	    function getSetLocaleDayOfWeek(input) {
	        if (!this.isValid()) {
	            return input != null ? this : NaN;
	        }
	        var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;
	        return input == null ? weekday : this.add(input - weekday, 'd');
	    }
	
	    function getSetISODayOfWeek(input) {
	        if (!this.isValid()) {
	            return input != null ? this : NaN;
	        }
	
	        // behaves the same as moment#day except
	        // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)
	        // as a setter, sunday should belong to the previous week.
	
	        if (input != null) {
	            var weekday = parseIsoWeekday(input, this.localeData());
	            return this.day(this.day() % 7 ? weekday : weekday - 7);
	        } else {
	            return this.day() || 7;
	        }
	    }
	
	    function weekdaysRegex(isStrict) {
	        if (this._weekdaysParseExact) {
	            if (!hasOwnProp(this, '_weekdaysRegex')) {
	                computeWeekdaysParse.call(this);
	            }
	            if (isStrict) {
	                return this._weekdaysStrictRegex;
	            } else {
	                return this._weekdaysRegex;
	            }
	        } else {
	            if (!hasOwnProp(this, '_weekdaysRegex')) {
	                this._weekdaysRegex = defaultWeekdaysRegex;
	            }
	            return this._weekdaysStrictRegex && isStrict
	                ? this._weekdaysStrictRegex
	                : this._weekdaysRegex;
	        }
	    }
	
	    function weekdaysShortRegex(isStrict) {
	        if (this._weekdaysParseExact) {
	            if (!hasOwnProp(this, '_weekdaysRegex')) {
	                computeWeekdaysParse.call(this);
	            }
	            if (isStrict) {
	                return this._weekdaysShortStrictRegex;
	            } else {
	                return this._weekdaysShortRegex;
	            }
	        } else {
	            if (!hasOwnProp(this, '_weekdaysShortRegex')) {
	                this._weekdaysShortRegex = defaultWeekdaysShortRegex;
	            }
	            return this._weekdaysShortStrictRegex && isStrict
	                ? this._weekdaysShortStrictRegex
	                : this._weekdaysShortRegex;
	        }
	    }
	
	    function weekdaysMinRegex(isStrict) {
	        if (this._weekdaysParseExact) {
	            if (!hasOwnProp(this, '_weekdaysRegex')) {
	                computeWeekdaysParse.call(this);
	            }
	            if (isStrict) {
	                return this._weekdaysMinStrictRegex;
	            } else {
	                return this._weekdaysMinRegex;
	            }
	        } else {
	            if (!hasOwnProp(this, '_weekdaysMinRegex')) {
	                this._weekdaysMinRegex = defaultWeekdaysMinRegex;
	            }
	            return this._weekdaysMinStrictRegex && isStrict
	                ? this._weekdaysMinStrictRegex
	                : this._weekdaysMinRegex;
	        }
	    }
	
	    function computeWeekdaysParse() {
	        function cmpLenRev(a, b) {
	            return b.length - a.length;
	        }
	
	        var minPieces = [],
	            shortPieces = [],
	            longPieces = [],
	            mixedPieces = [],
	            i,
	            mom,
	            minp,
	            shortp,
	            longp;
	        for (i = 0; i < 7; i++) {
	            // make the regex if we don't have it already
	            mom = createUTC([2000, 1]).day(i);
	            minp = regexEscape(this.weekdaysMin(mom, ''));
	            shortp = regexEscape(this.weekdaysShort(mom, ''));
	            longp = regexEscape(this.weekdays(mom, ''));
	            minPieces.push(minp);
	            shortPieces.push(shortp);
	            longPieces.push(longp);
	            mixedPieces.push(minp);
	            mixedPieces.push(shortp);
	            mixedPieces.push(longp);
	        }
	        // Sorting makes sure if one weekday (or abbr) is a prefix of another it
	        // will match the longer piece.
	        minPieces.sort(cmpLenRev);
	        shortPieces.sort(cmpLenRev);
	        longPieces.sort(cmpLenRev);
	        mixedPieces.sort(cmpLenRev);
	
	        this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');
	        this._weekdaysShortRegex = this._weekdaysRegex;
	        this._weekdaysMinRegex = this._weekdaysRegex;
	
	        this._weekdaysStrictRegex = new RegExp(
	            '^(' + longPieces.join('|') + ')',
	            'i'
	        );
	        this._weekdaysShortStrictRegex = new RegExp(
	            '^(' + shortPieces.join('|') + ')',
	            'i'
	        );
	        this._weekdaysMinStrictRegex = new RegExp(
	            '^(' + minPieces.join('|') + ')',
	            'i'
	        );
	    }
	
	    // FORMATTING
	
	    function hFormat() {
	        return this.hours() % 12 || 12;
	    }
	
	    function kFormat() {
	        return this.hours() || 24;
	    }
	
	    addFormatToken('H', ['HH', 2], 0, 'hour');
	    addFormatToken('h', ['hh', 2], 0, hFormat);
	    addFormatToken('k', ['kk', 2], 0, kFormat);
	
	    addFormatToken('hmm', 0, 0, function () {
	        return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);
	    });
	
	    addFormatToken('hmmss', 0, 0, function () {
	        return (
	            '' +
	            hFormat.apply(this) +
	            zeroFill(this.minutes(), 2) +
	            zeroFill(this.seconds(), 2)
	        );
	    });
	
	    addFormatToken('Hmm', 0, 0, function () {
	        return '' + this.hours() + zeroFill(this.minutes(), 2);
	    });
	
	    addFormatToken('Hmmss', 0, 0, function () {
	        return (
	            '' +
	            this.hours() +
	            zeroFill(this.minutes(), 2) +
	            zeroFill(this.seconds(), 2)
	        );
	    });
	
	    function meridiem(token, lowercase) {
	        addFormatToken(token, 0, 0, function () {
	            return this.localeData().meridiem(
	                this.hours(),
	                this.minutes(),
	                lowercase
	            );
	        });
	    }
	
	    meridiem('a', true);
	    meridiem('A', false);
	
	    // ALIASES
	
	    addUnitAlias('hour', 'h');
	
	    // PRIORITY
	    addUnitPriority('hour', 13);
	
	    // PARSING
	
	    function matchMeridiem(isStrict, locale) {
	        return locale._meridiemParse;
	    }
	
	    addRegexToken('a', matchMeridiem);
	    addRegexToken('A', matchMeridiem);
	    addRegexToken('H', match1to2);
	    addRegexToken('h', match1to2);
	    addRegexToken('k', match1to2);
	    addRegexToken('HH', match1to2, match2);
	    addRegexToken('hh', match1to2, match2);
	    addRegexToken('kk', match1to2, match2);
	
	    addRegexToken('hmm', match3to4);
	    addRegexToken('hmmss', match5to6);
	    addRegexToken('Hmm', match3to4);
	    addRegexToken('Hmmss', match5to6);
	
	    addParseToken(['H', 'HH'], HOUR);
	    addParseToken(['k', 'kk'], function (input, array, config) {
	        var kInput = toInt(input);
	        array[HOUR] = kInput === 24 ? 0 : kInput;
	    });
	    addParseToken(['a', 'A'], function (input, array, config) {
	        config._isPm = config._locale.isPM(input);
	        config._meridiem = input;
	    });
	    addParseToken(['h', 'hh'], function (input, array, config) {
	        array[HOUR] = toInt(input);
	        getParsingFlags(config).bigHour = true;
	    });
	    addParseToken('hmm', function (input, array, config) {
	        var pos = input.length - 2;
	        array[HOUR] = toInt(input.substr(0, pos));
	        array[MINUTE] = toInt(input.substr(pos));
	        getParsingFlags(config).bigHour = true;
	    });
	    addParseToken('hmmss', function (input, array, config) {
	        var pos1 = input.length - 4,
	            pos2 = input.length - 2;
	        array[HOUR] = toInt(input.substr(0, pos1));
	        array[MINUTE] = toInt(input.substr(pos1, 2));
	        array[SECOND] = toInt(input.substr(pos2));
	        getParsingFlags(config).bigHour = true;
	    });
	    addParseToken('Hmm', function (input, array, config) {
	        var pos = input.length - 2;
	        array[HOUR] = toInt(input.substr(0, pos));
	        array[MINUTE] = toInt(input.substr(pos));
	    });
	    addParseToken('Hmmss', function (input, array, config) {
	        var pos1 = input.length - 4,
	            pos2 = input.length - 2;
	        array[HOUR] = toInt(input.substr(0, pos1));
	        array[MINUTE] = toInt(input.substr(pos1, 2));
	        array[SECOND] = toInt(input.substr(pos2));
	    });
	
	    // LOCALES
	
	    function localeIsPM(input) {
	        // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays
	        // Using charAt should be more compatible.
	        return (input + '').toLowerCase().charAt(0) === 'p';
	    }
	
	    var defaultLocaleMeridiemParse = /[ap]\.?m?\.?/i,
	        // Setting the hour should keep the time, because the user explicitly
	        // specified which hour they want. So trying to maintain the same hour (in
	        // a new timezone) makes sense. Adding/subtracting hours does not follow
	        // this rule.
	        getSetHour = makeGetSet('Hours', true);
	
	    function localeMeridiem(hours, minutes, isLower) {
	        if (hours > 11) {
	            return isLower ? 'pm' : 'PM';
	        } else {
	            return isLower ? 'am' : 'AM';
	        }
	    }
	
	    var baseConfig = {
	        calendar: defaultCalendar,
	        longDateFormat: defaultLongDateFormat,
	        invalidDate: defaultInvalidDate,
	        ordinal: defaultOrdinal,
	        dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,
	        relativeTime: defaultRelativeTime,
	
	        months: defaultLocaleMonths,
	        monthsShort: defaultLocaleMonthsShort,
	
	        week: defaultLocaleWeek,
	
	        weekdays: defaultLocaleWeekdays,
	        weekdaysMin: defaultLocaleWeekdaysMin,
	        weekdaysShort: defaultLocaleWeekdaysShort,
	
	        meridiemParse: defaultLocaleMeridiemParse,
	    };
	
	    // internal storage for locale config files
	    var locales = {},
	        localeFamilies = {},
	        globalLocale;
	
	    function commonPrefix(arr1, arr2) {
	        var i,
	            minl = Math.min(arr1.length, arr2.length);
	        for (i = 0; i < minl; i += 1) {
	            if (arr1[i] !== arr2[i]) {
	                return i;
	            }
	        }
	        return minl;
	    }
	
	    function normalizeLocale(key) {
	        return key ? key.toLowerCase().replace('_', '-') : key;
	    }
	
	    // pick the locale from the array
	    // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each
	    // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root
	    function chooseLocale(names) {
	        var i = 0,
	            j,
	            next,
	            locale,
	            split;
	
	        while (i < names.length) {
	            split = normalizeLocale(names[i]).split('-');
	            j = split.length;
	            next = normalizeLocale(names[i + 1]);
	            next = next ? next.split('-') : null;
	            while (j > 0) {
	                locale = loadLocale(split.slice(0, j).join('-'));
	                if (locale) {
	                    return locale;
	                }
	                if (
	                    next &&
	                    next.length >= j &&
	                    commonPrefix(split, next) >= j - 1
	                ) {
	                    //the next array item is better than a shallower substring of this one
	                    break;
	                }
	                j--;
	            }
	            i++;
	        }
	        return globalLocale;
	    }
	
	    function loadLocale(name) {
	        var oldLocale = null,
	            aliasedRequire;
	        // TODO: Find a better way to register and load all the locales in Node
	        if (
	            locales[name] === undefined &&
	            typeof module !== 'undefined' &&
	            module &&
	            module.exports
	        ) {
	            try {
	                oldLocale = globalLocale._abbr;
	                aliasedRequire = require;
	                __webpack_require__(1082)("./" + name);
	                getSetGlobalLocale(oldLocale);
	            } catch (e) {
	                // mark as not found to avoid repeating expensive file require call causing high CPU
	                // when trying to find en-US, en_US, en-us for every format call
	                locales[name] = null; // null means not found
	            }
	        }
	        return locales[name];
	    }
	
	    // This function will load locale and then set the global locale.  If
	    // no arguments are passed in, it will simply return the current global
	    // locale key.
	    function getSetGlobalLocale(key, values) {
	        var data;
	        if (key) {
	            if (isUndefined(values)) {
	                data = getLocale(key);
	            } else {
	                data = defineLocale(key, values);
	            }
	
	            if (data) {
	                // moment.duration._locale = moment._locale = data;
	                globalLocale = data;
	            } else {
	                if (typeof console !== 'undefined' && console.warn) {
	                    //warn user if arguments are passed but the locale could not be set
	                    console.warn(
	                        'Locale ' + key + ' not found. Did you forget to load it?'
	                    );
	                }
	            }
	        }
	
	        return globalLocale._abbr;
	    }
	
	    function defineLocale(name, config) {
	        if (config !== null) {
	            var locale,
	                parentConfig = baseConfig;
	            config.abbr = name;
	            if (locales[name] != null) {
	                deprecateSimple(
	                    'defineLocaleOverride',
	                    'use moment.updateLocale(localeName, config) to change ' +
	                        'an existing locale. moment.defineLocale(localeName, ' +
	                        'config) should only be used for creating a new locale ' +
	                        'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.'
	                );
	                parentConfig = locales[name]._config;
	            } else if (config.parentLocale != null) {
	                if (locales[config.parentLocale] != null) {
	                    parentConfig = locales[config.parentLocale]._config;
	                } else {
	                    locale = loadLocale(config.parentLocale);
	                    if (locale != null) {
	                        parentConfig = locale._config;
	                    } else {
	                        if (!localeFamilies[config.parentLocale]) {
	                            localeFamilies[config.parentLocale] = [];
	                        }
	                        localeFamilies[config.parentLocale].push({
	                            name: name,
	                            config: config,
	                        });
	                        return null;
	                    }
	                }
	            }
	            locales[name] = new Locale(mergeConfigs(parentConfig, config));
	
	            if (localeFamilies[name]) {
	                localeFamilies[name].forEach(function (x) {
	                    defineLocale(x.name, x.config);
	                });
	            }
	
	            // backwards compat for now: also set the locale
	            // make sure we set the locale AFTER all child locales have been
	            // created, so we won't end up with the child locale set.
	            getSetGlobalLocale(name);
	
	            return locales[name];
	        } else {
	            // useful for testing
	            delete locales[name];
	            return null;
	        }
	    }
	
	    function updateLocale(name, config) {
	        if (config != null) {
	            var locale,
	                tmpLocale,
	                parentConfig = baseConfig;
	
	            if (locales[name] != null && locales[name].parentLocale != null) {
	                // Update existing child locale in-place to avoid memory-leaks
	                locales[name].set(mergeConfigs(locales[name]._config, config));
	            } else {
	                // MERGE
	                tmpLocale = loadLocale(name);
	                if (tmpLocale != null) {
	                    parentConfig = tmpLocale._config;
	                }
	                config = mergeConfigs(parentConfig, config);
	                if (tmpLocale == null) {
	                    // updateLocale is called for creating a new locale
	                    // Set abbr so it will have a name (getters return
	                    // undefined otherwise).
	                    config.abbr = name;
	                }
	                locale = new Locale(config);
	                locale.parentLocale = locales[name];
	                locales[name] = locale;
	            }
	
	            // backwards compat for now: also set the locale
	            getSetGlobalLocale(name);
	        } else {
	            // pass null for config to unupdate, useful for tests
	            if (locales[name] != null) {
	                if (locales[name].parentLocale != null) {
	                    locales[name] = locales[name].parentLocale;
	                    if (name === getSetGlobalLocale()) {
	                        getSetGlobalLocale(name);
	                    }
	                } else if (locales[name] != null) {
	                    delete locales[name];
	                }
	            }
	        }
	        return locales[name];
	    }
	
	    // returns locale data
	    function getLocale(key) {
	        var locale;
	
	        if (key && key._locale && key._locale._abbr) {
	            key = key._locale._abbr;
	        }
	
	        if (!key) {
	            return globalLocale;
	        }
	
	        if (!isArray(key)) {
	            //short-circuit everything else
	            locale = loadLocale(key);
	            if (locale) {
	                return locale;
	            }
	            key = [key];
	        }
	
	        return chooseLocale(key);
	    }
	
	    function listLocales() {
	        return keys(locales);
	    }
	
	    function checkOverflow(m) {
	        var overflow,
	            a = m._a;
	
	        if (a && getParsingFlags(m).overflow === -2) {
	            overflow =
	                a[MONTH] < 0 || a[MONTH] > 11
	                    ? MONTH
	                    : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH])
	                    ? DATE
	                    : a[HOUR] < 0 ||
	                      a[HOUR] > 24 ||
	                      (a[HOUR] === 24 &&
	                          (a[MINUTE] !== 0 ||
	                              a[SECOND] !== 0 ||
	                              a[MILLISECOND] !== 0))
	                    ? HOUR
	                    : a[MINUTE] < 0 || a[MINUTE] > 59
	                    ? MINUTE
	                    : a[SECOND] < 0 || a[SECOND] > 59
	                    ? SECOND
	                    : a[MILLISECOND] < 0 || a[MILLISECOND] > 999
	                    ? MILLISECOND
	                    : -1;
	
	            if (
	                getParsingFlags(m)._overflowDayOfYear &&
	                (overflow < YEAR || overflow > DATE)
	            ) {
	                overflow = DATE;
	            }
	            if (getParsingFlags(m)._overflowWeeks && overflow === -1) {
	                overflow = WEEK;
	            }
	            if (getParsingFlags(m)._overflowWeekday && overflow === -1) {
	                overflow = WEEKDAY;
	            }
	
	            getParsingFlags(m).overflow = overflow;
	        }
	
	        return m;
	    }
	
	    // iso 8601 regex
	    // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)
	    var extendedIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,
	        basicIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d|))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,
	        tzRegex = /Z|[+-]\d\d(?::?\d\d)?/,
	        isoDates = [
	            ['YYYYYY-MM-DD', /[+-]\d{6}-\d\d-\d\d/],
	            ['YYYY-MM-DD', /\d{4}-\d\d-\d\d/],
	            ['GGGG-[W]WW-E', /\d{4}-W\d\d-\d/],
	            ['GGGG-[W]WW', /\d{4}-W\d\d/, false],
	            ['YYYY-DDD', /\d{4}-\d{3}/],
	            ['YYYY-MM', /\d{4}-\d\d/, false],
	            ['YYYYYYMMDD', /[+-]\d{10}/],
	            ['YYYYMMDD', /\d{8}/],
	            ['GGGG[W]WWE', /\d{4}W\d{3}/],
	            ['GGGG[W]WW', /\d{4}W\d{2}/, false],
	            ['YYYYDDD', /\d{7}/],
	            ['YYYYMM', /\d{6}/, false],
	            ['YYYY', /\d{4}/, false],
	        ],
	        // iso time formats and regexes
	        isoTimes = [
	            ['HH:mm:ss.SSSS', /\d\d:\d\d:\d\d\.\d+/],
	            ['HH:mm:ss,SSSS', /\d\d:\d\d:\d\d,\d+/],
	            ['HH:mm:ss', /\d\d:\d\d:\d\d/],
	            ['HH:mm', /\d\d:\d\d/],
	            ['HHmmss.SSSS', /\d\d\d\d\d\d\.\d+/],
	            ['HHmmss,SSSS', /\d\d\d\d\d\d,\d+/],
	            ['HHmmss', /\d\d\d\d\d\d/],
	            ['HHmm', /\d\d\d\d/],
	            ['HH', /\d\d/],
	        ],
	        aspNetJsonRegex = /^\/?Date\((-?\d+)/i,
	        // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3
	        rfc2822 = /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/,
	        obsOffsets = {
	            UT: 0,
	            GMT: 0,
	            EDT: -4 * 60,
	            EST: -5 * 60,
	            CDT: -5 * 60,
	            CST: -6 * 60,
	            MDT: -6 * 60,
	            MST: -7 * 60,
	            PDT: -7 * 60,
	            PST: -8 * 60,
	        };
	
	    // date from iso format
	    function configFromISO(config) {
	        var i,
	            l,
	            string = config._i,
	            match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),
	            allowTime,
	            dateFormat,
	            timeFormat,
	            tzFormat;
	
	        if (match) {
	            getParsingFlags(config).iso = true;
	
	            for (i = 0, l = isoDates.length; i < l; i++) {
	                if (isoDates[i][1].exec(match[1])) {
	                    dateFormat = isoDates[i][0];
	                    allowTime = isoDates[i][2] !== false;
	                    break;
	                }
	            }
	            if (dateFormat == null) {
	                config._isValid = false;
	                return;
	            }
	            if (match[3]) {
	                for (i = 0, l = isoTimes.length; i < l; i++) {
	                    if (isoTimes[i][1].exec(match[3])) {
	                        // match[2] should be 'T' or space
	                        timeFormat = (match[2] || ' ') + isoTimes[i][0];
	                        break;
	                    }
	                }
	                if (timeFormat == null) {
	                    config._isValid = false;
	                    return;
	                }
	            }
	            if (!allowTime && timeFormat != null) {
	                config._isValid = false;
	                return;
	            }
	            if (match[4]) {
	                if (tzRegex.exec(match[4])) {
	                    tzFormat = 'Z';
	                } else {
	                    config._isValid = false;
	                    return;
	                }
	            }
	            config._f = dateFormat + (timeFormat || '') + (tzFormat || '');
	            configFromStringAndFormat(config);
	        } else {
	            config._isValid = false;
	        }
	    }
	
	    function extractFromRFC2822Strings(
	        yearStr,
	        monthStr,
	        dayStr,
	        hourStr,
	        minuteStr,
	        secondStr
	    ) {
	        var result = [
	            untruncateYear(yearStr),
	            defaultLocaleMonthsShort.indexOf(monthStr),
	            parseInt(dayStr, 10),
	            parseInt(hourStr, 10),
	            parseInt(minuteStr, 10),
	        ];
	
	        if (secondStr) {
	            result.push(parseInt(secondStr, 10));
	        }
	
	        return result;
	    }
	
	    function untruncateYear(yearStr) {
	        var year = parseInt(yearStr, 10);
	        if (year <= 49) {
	            return 2000 + year;
	        } else if (year <= 999) {
	            return 1900 + year;
	        }
	        return year;
	    }
	
	    function preprocessRFC2822(s) {
	        // Remove comments and folding whitespace and replace multiple-spaces with a single space
	        return s
	            .replace(/\([^)]*\)|[\n\t]/g, ' ')
	            .replace(/(\s\s+)/g, ' ')
	            .replace(/^\s\s*/, '')
	            .replace(/\s\s*$/, '');
	    }
	
	    function checkWeekday(weekdayStr, parsedInput, config) {
	        if (weekdayStr) {
	            // TODO: Replace the vanilla JS Date object with an independent day-of-week check.
	            var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),
	                weekdayActual = new Date(
	                    parsedInput[0],
	                    parsedInput[1],
	                    parsedInput[2]
	                ).getDay();
	            if (weekdayProvided !== weekdayActual) {
	                getParsingFlags(config).weekdayMismatch = true;
	                config._isValid = false;
	                return false;
	            }
	        }
	        return true;
	    }
	
	    function calculateOffset(obsOffset, militaryOffset, numOffset) {
	        if (obsOffset) {
	            return obsOffsets[obsOffset];
	        } else if (militaryOffset) {
	            // the only allowed military tz is Z
	            return 0;
	        } else {
	            var hm = parseInt(numOffset, 10),
	                m = hm % 100,
	                h = (hm - m) / 100;
	            return h * 60 + m;
	        }
	    }
	
	    // date and time from ref 2822 format
	    function configFromRFC2822(config) {
	        var match = rfc2822.exec(preprocessRFC2822(config._i)),
	            parsedArray;
	        if (match) {
	            parsedArray = extractFromRFC2822Strings(
	                match[4],
	                match[3],
	                match[2],
	                match[5],
	                match[6],
	                match[7]
	            );
	            if (!checkWeekday(match[1], parsedArray, config)) {
	                return;
	            }
	
	            config._a = parsedArray;
	            config._tzm = calculateOffset(match[8], match[9], match[10]);
	
	            config._d = createUTCDate.apply(null, config._a);
	            config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);
	
	            getParsingFlags(config).rfc2822 = true;
	        } else {
	            config._isValid = false;
	        }
	    }
	
	    // date from 1) ASP.NET, 2) ISO, 3) RFC 2822 formats, or 4) optional fallback if parsing isn't strict
	    function configFromString(config) {
	        var matched = aspNetJsonRegex.exec(config._i);
	        if (matched !== null) {
	            config._d = new Date(+matched[1]);
	            return;
	        }
	
	        configFromISO(config);
	        if (config._isValid === false) {
	            delete config._isValid;
	        } else {
	            return;
	        }
	
	        configFromRFC2822(config);
	        if (config._isValid === false) {
	            delete config._isValid;
	        } else {
	            return;
	        }
	
	        if (config._strict) {
	            config._isValid = false;
	        } else {
	            // Final attempt, use Input Fallback
	            hooks.createFromInputFallback(config);
	        }
	    }
	
	    hooks.createFromInputFallback = deprecate(
	        'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' +
	            'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' +
	            'discouraged and will be removed in an upcoming major release. Please refer to ' +
	            'http://momentjs.com/guides/#/warnings/js-date/ for more info.',
	        function (config) {
	            config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));
	        }
	    );
	
	    // Pick the first defined of two or three arguments.
	    function defaults(a, b, c) {
	        if (a != null) {
	            return a;
	        }
	        if (b != null) {
	            return b;
	        }
	        return c;
	    }
	
	    function currentDateArray(config) {
	        // hooks is actually the exported moment object
	        var nowValue = new Date(hooks.now());
	        if (config._useUTC) {
	            return [
	                nowValue.getUTCFullYear(),
	                nowValue.getUTCMonth(),
	                nowValue.getUTCDate(),
	            ];
	        }
	        return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];
	    }
	
	    // convert an array to a date.
	    // the array should mirror the parameters below
	    // note: all values past the year are optional and will default to the lowest possible value.
	    // [year, month, day , hour, minute, second, millisecond]
	    function configFromArray(config) {
	        var i,
	            date,
	            input = [],
	            currentDate,
	            expectedWeekday,
	            yearToUse;
	
	        if (config._d) {
	            return;
	        }
	
	        currentDate = currentDateArray(config);
	
	        //compute day of the year from weeks and weekdays
	        if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {
	            dayOfYearFromWeekInfo(config);
	        }
	
	        //if the day of the year is set, figure out what it is
	        if (config._dayOfYear != null) {
	            yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);
	
	            if (
	                config._dayOfYear > daysInYear(yearToUse) ||
	                config._dayOfYear === 0
	            ) {
	                getParsingFlags(config)._overflowDayOfYear = true;
	            }
	
	            date = createUTCDate(yearToUse, 0, config._dayOfYear);
	            config._a[MONTH] = date.getUTCMonth();
	            config._a[DATE] = date.getUTCDate();
	        }
	
	        // Default to current date.
	        // * if no year, month, day of month are given, default to today
	        // * if day of month is given, default month and year
	        // * if month is given, default only year
	        // * if year is given, don't default anything
	        for (i = 0; i < 3 && config._a[i] == null; ++i) {
	            config._a[i] = input[i] = currentDate[i];
	        }
	
	        // Zero out whatever was not defaulted, including time
	        for (; i < 7; i++) {
	            config._a[i] = input[i] =
	                config._a[i] == null ? (i === 2 ? 1 : 0) : config._a[i];
	        }
	
	        // Check for 24:00:00.000
	        if (
	            config._a[HOUR] === 24 &&
	            config._a[MINUTE] === 0 &&
	            config._a[SECOND] === 0 &&
	            config._a[MILLISECOND] === 0
	        ) {
	            config._nextDay = true;
	            config._a[HOUR] = 0;
	        }
	
	        config._d = (config._useUTC ? createUTCDate : createDate).apply(
	            null,
	            input
	        );
	        expectedWeekday = config._useUTC
	            ? config._d.getUTCDay()
	            : config._d.getDay();
	
	        // Apply timezone offset from input. The actual utcOffset can be changed
	        // with parseZone.
	        if (config._tzm != null) {
	            config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);
	        }
	
	        if (config._nextDay) {
	            config._a[HOUR] = 24;
	        }
	
	        // check for mismatching day of week
	        if (
	            config._w &&
	            typeof config._w.d !== 'undefined' &&
	            config._w.d !== expectedWeekday
	        ) {
	            getParsingFlags(config).weekdayMismatch = true;
	        }
	    }
	
	    function dayOfYearFromWeekInfo(config) {
	        var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow, curWeek;
	
	        w = config._w;
	        if (w.GG != null || w.W != null || w.E != null) {
	            dow = 1;
	            doy = 4;
	
	            // TODO: We need to take the current isoWeekYear, but that depends on
	            // how we interpret now (local, utc, fixed offset). So create
	            // a now version of current config (take local/utc/offset flags, and
	            // create now).
	            weekYear = defaults(
	                w.GG,
	                config._a[YEAR],
	                weekOfYear(createLocal(), 1, 4).year
	            );
	            week = defaults(w.W, 1);
	            weekday = defaults(w.E, 1);
	            if (weekday < 1 || weekday > 7) {
	                weekdayOverflow = true;
	            }
	        } else {
	            dow = config._locale._week.dow;
	            doy = config._locale._week.doy;
	
	            curWeek = weekOfYear(createLocal(), dow, doy);
	
	            weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);
	
	            // Default to current week.
	            week = defaults(w.w, curWeek.week);
	
	            if (w.d != null) {
	                // weekday -- low day numbers are considered next week
	                weekday = w.d;
	                if (weekday < 0 || weekday > 6) {
	                    weekdayOverflow = true;
	                }
	            } else if (w.e != null) {
	                // local weekday -- counting starts from beginning of week
	                weekday = w.e + dow;
	                if (w.e < 0 || w.e > 6) {
	                    weekdayOverflow = true;
	                }
	            } else {
	                // default to beginning of week
	                weekday = dow;
	            }
	        }
	        if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {
	            getParsingFlags(config)._overflowWeeks = true;
	        } else if (weekdayOverflow != null) {
	            getParsingFlags(config)._overflowWeekday = true;
	        } else {
	            temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);
	            config._a[YEAR] = temp.year;
	            config._dayOfYear = temp.dayOfYear;
	        }
	    }
	
	    // constant that refers to the ISO standard
	    hooks.ISO_8601 = function () {};
	
	    // constant that refers to the RFC 2822 form
	    hooks.RFC_2822 = function () {};
	
	    // date from string and format string
	    function configFromStringAndFormat(config) {
	        // TODO: Move this to another part of the creation flow to prevent circular deps
	        if (config._f === hooks.ISO_8601) {
	            configFromISO(config);
	            return;
	        }
	        if (config._f === hooks.RFC_2822) {
	            configFromRFC2822(config);
	            return;
	        }
	        config._a = [];
	        getParsingFlags(config).empty = true;
	
	        // This array is used to make a Date, either with `new Date` or `Date.UTC`
	        var string = '' + config._i,
	            i,
	            parsedInput,
	            tokens,
	            token,
	            skipped,
	            stringLength = string.length,
	            totalParsedInputLength = 0,
	            era;
	
	        tokens =
	            expandFormat(config._f, config._locale).match(formattingTokens) || [];
	
	        for (i = 0; i < tokens.length; i++) {
	            token = tokens[i];
	            parsedInput = (string.match(getParseRegexForToken(token, config)) ||
	                [])[0];
	            if (parsedInput) {
	                skipped = string.substr(0, string.indexOf(parsedInput));
	                if (skipped.length > 0) {
	                    getParsingFlags(config).unusedInput.push(skipped);
	                }
	                string = string.slice(
	                    string.indexOf(parsedInput) + parsedInput.length
	                );
	                totalParsedInputLength += parsedInput.length;
	            }
	            // don't parse if it's not a known token
	            if (formatTokenFunctions[token]) {
	                if (parsedInput) {
	                    getParsingFlags(config).empty = false;
	                } else {
	                    getParsingFlags(config).unusedTokens.push(token);
	                }
	                addTimeToArrayFromToken(token, parsedInput, config);
	            } else if (config._strict && !parsedInput) {
	                getParsingFlags(config).unusedTokens.push(token);
	            }
	        }
	
	        // add remaining unparsed input length to the string
	        getParsingFlags(config).charsLeftOver =
	            stringLength - totalParsedInputLength;
	        if (string.length > 0) {
	            getParsingFlags(config).unusedInput.push(string);
	        }
	
	        // clear _12h flag if hour is <= 12
	        if (
	            config._a[HOUR] <= 12 &&
	            getParsingFlags(config).bigHour === true &&
	            config._a[HOUR] > 0
	        ) {
	            getParsingFlags(config).bigHour = undefined;
	        }
	
	        getParsingFlags(config).parsedDateParts = config._a.slice(0);
	        getParsingFlags(config).meridiem = config._meridiem;
	        // handle meridiem
	        config._a[HOUR] = meridiemFixWrap(
	            config._locale,
	            config._a[HOUR],
	            config._meridiem
	        );
	
	        // handle era
	        era = getParsingFlags(config).era;
	        if (era !== null) {
	            config._a[YEAR] = config._locale.erasConvertYear(era, config._a[YEAR]);
	        }
	
	        configFromArray(config);
	        checkOverflow(config);
	    }
	
	    function meridiemFixWrap(locale, hour, meridiem) {
	        var isPm;
	
	        if (meridiem == null) {
	            // nothing to do
	            return hour;
	        }
	        if (locale.meridiemHour != null) {
	            return locale.meridiemHour(hour, meridiem);
	        } else if (locale.isPM != null) {
	            // Fallback
	            isPm = locale.isPM(meridiem);
	            if (isPm && hour < 12) {
	                hour += 12;
	            }
	            if (!isPm && hour === 12) {
	                hour = 0;
	            }
	            return hour;
	        } else {
	            // this is not supposed to happen
	            return hour;
	        }
	    }
	
	    // date from string and array of format strings
	    function configFromStringAndArray(config) {
	        var tempConfig,
	            bestMoment,
	            scoreToBeat,
	            i,
	            currentScore,
	            validFormatFound,
	            bestFormatIsValid = false;
	
	        if (config._f.length === 0) {
	            getParsingFlags(config).invalidFormat = true;
	            config._d = new Date(NaN);
	            return;
	        }
	
	        for (i = 0; i < config._f.length; i++) {
	            currentScore = 0;
	            validFormatFound = false;
	            tempConfig = copyConfig({}, config);
	            if (config._useUTC != null) {
	                tempConfig._useUTC = config._useUTC;
	            }
	            tempConfig._f = config._f[i];
	            configFromStringAndFormat(tempConfig);
	
	            if (isValid(tempConfig)) {
	                validFormatFound = true;
	            }
	
	            // if there is any input that was not parsed add a penalty for that format
	            currentScore += getParsingFlags(tempConfig).charsLeftOver;
	
	            //or tokens
	            currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;
	
	            getParsingFlags(tempConfig).score = currentScore;
	
	            if (!bestFormatIsValid) {
	                if (
	                    scoreToBeat == null ||
	                    currentScore < scoreToBeat ||
	                    validFormatFound
	                ) {
	                    scoreToBeat = currentScore;
	                    bestMoment = tempConfig;
	                    if (validFormatFound) {
	                        bestFormatIsValid = true;
	                    }
	                }
	            } else {
	                if (currentScore < scoreToBeat) {
	                    scoreToBeat = currentScore;
	                    bestMoment = tempConfig;
	                }
	            }
	        }
	
	        extend(config, bestMoment || tempConfig);
	    }
	
	    function configFromObject(config) {
	        if (config._d) {
	            return;
	        }
	
	        var i = normalizeObjectUnits(config._i),
	            dayOrDate = i.day === undefined ? i.date : i.day;
	        config._a = map(
	            [i.year, i.month, dayOrDate, i.hour, i.minute, i.second, i.millisecond],
	            function (obj) {
	                return obj && parseInt(obj, 10);
	            }
	        );
	
	        configFromArray(config);
	    }
	
	    function createFromConfig(config) {
	        var res = new Moment(checkOverflow(prepareConfig(config)));
	        if (res._nextDay) {
	            // Adding is smart enough around DST
	            res.add(1, 'd');
	            res._nextDay = undefined;
	        }
	
	        return res;
	    }
	
	    function prepareConfig(config) {
	        var input = config._i,
	            format = config._f;
	
	        config._locale = config._locale || getLocale(config._l);
	
	        if (input === null || (format === undefined && input === '')) {
	            return createInvalid({ nullInput: true });
	        }
	
	        if (typeof input === 'string') {
	            config._i = input = config._locale.preparse(input);
	        }
	
	        if (isMoment(input)) {
	            return new Moment(checkOverflow(input));
	        } else if (isDate(input)) {
	            config._d = input;
	        } else if (isArray(format)) {
	            configFromStringAndArray(config);
	        } else if (format) {
	            configFromStringAndFormat(config);
	        } else {
	            configFromInput(config);
	        }
	
	        if (!isValid(config)) {
	            config._d = null;
	        }
	
	        return config;
	    }
	
	    function configFromInput(config) {
	        var input = config._i;
	        if (isUndefined(input)) {
	            config._d = new Date(hooks.now());
	        } else if (isDate(input)) {
	            config._d = new Date(input.valueOf());
	        } else if (typeof input === 'string') {
	            configFromString(config);
	        } else if (isArray(input)) {
	            config._a = map(input.slice(0), function (obj) {
	                return parseInt(obj, 10);
	            });
	            configFromArray(config);
	        } else if (isObject(input)) {
	            configFromObject(config);
	        } else if (isNumber(input)) {
	            // from milliseconds
	            config._d = new Date(input);
	        } else {
	            hooks.createFromInputFallback(config);
	        }
	    }
	
	    function createLocalOrUTC(input, format, locale, strict, isUTC) {
	        var c = {};
	
	        if (format === true || format === false) {
	            strict = format;
	            format = undefined;
	        }
	
	        if (locale === true || locale === false) {
	            strict = locale;
	            locale = undefined;
	        }
	
	        if (
	            (isObject(input) && isObjectEmpty(input)) ||
	            (isArray(input) && input.length === 0)
	        ) {
	            input = undefined;
	        }
	        // object construction must be done this way.
	        // https://github.com/moment/moment/issues/1423
	        c._isAMomentObject = true;
	        c._useUTC = c._isUTC = isUTC;
	        c._l = locale;
	        c._i = input;
	        c._f = format;
	        c._strict = strict;
	
	        return createFromConfig(c);
	    }
	
	    function createLocal(input, format, locale, strict) {
	        return createLocalOrUTC(input, format, locale, strict, false);
	    }
	
	    var prototypeMin = deprecate(
	            'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',
	            function () {
	                var other = createLocal.apply(null, arguments);
	                if (this.isValid() && other.isValid()) {
	                    return other < this ? this : other;
	                } else {
	                    return createInvalid();
	                }
	            }
	        ),
	        prototypeMax = deprecate(
	            'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',
	            function () {
	                var other = createLocal.apply(null, arguments);
	                if (this.isValid() && other.isValid()) {
	                    return other > this ? this : other;
	                } else {
	                    return createInvalid();
	                }
	            }
	        );
	
	    // Pick a moment m from moments so that m[fn](other) is true for all
	    // other. This relies on the function fn to be transitive.
	    //
	    // moments should either be an array of moment objects or an array, whose
	    // first element is an array of moment objects.
	    function pickBy(fn, moments) {
	        var res, i;
	        if (moments.length === 1 && isArray(moments[0])) {
	            moments = moments[0];
	        }
	        if (!moments.length) {
	            return createLocal();
	        }
	        res = moments[0];
	        for (i = 1; i < moments.length; ++i) {
	            if (!moments[i].isValid() || moments[i][fn](res)) {
	                res = moments[i];
	            }
	        }
	        return res;
	    }
	
	    // TODO: Use [].sort instead?
	    function min() {
	        var args = [].slice.call(arguments, 0);
	
	        return pickBy('isBefore', args);
	    }
	
	    function max() {
	        var args = [].slice.call(arguments, 0);
	
	        return pickBy('isAfter', args);
	    }
	
	    var now = function () {
	        return Date.now ? Date.now() : +new Date();
	    };
	
	    var ordering = [
	        'year',
	        'quarter',
	        'month',
	        'week',
	        'day',
	        'hour',
	        'minute',
	        'second',
	        'millisecond',
	    ];
	
	    function isDurationValid(m) {
	        var key,
	            unitHasDecimal = false,
	            i;
	        for (key in m) {
	            if (
	                hasOwnProp(m, key) &&
	                !(
	                    indexOf.call(ordering, key) !== -1 &&
	                    (m[key] == null || !isNaN(m[key]))
	                )
	            ) {
	                return false;
	            }
	        }
	
	        for (i = 0; i < ordering.length; ++i) {
	            if (m[ordering[i]]) {
	                if (unitHasDecimal) {
	                    return false; // only allow non-integers for smallest unit
	                }
	                if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {
	                    unitHasDecimal = true;
	                }
	            }
	        }
	
	        return true;
	    }
	
	    function isValid$1() {
	        return this._isValid;
	    }
	
	    function createInvalid$1() {
	        return createDuration(NaN);
	    }
	
	    function Duration(duration) {
	        var normalizedInput = normalizeObjectUnits(duration),
	            years = normalizedInput.year || 0,
	            quarters = normalizedInput.quarter || 0,
	            months = normalizedInput.month || 0,
	            weeks = normalizedInput.week || normalizedInput.isoWeek || 0,
	            days = normalizedInput.day || 0,
	            hours = normalizedInput.hour || 0,
	            minutes = normalizedInput.minute || 0,
	            seconds = normalizedInput.second || 0,
	            milliseconds = normalizedInput.millisecond || 0;
	
	        this._isValid = isDurationValid(normalizedInput);
	
	        // representation for dateAddRemove
	        this._milliseconds =
	            +milliseconds +
	            seconds * 1e3 + // 1000
	            minutes * 6e4 + // 1000 * 60
	            hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978
	        // Because of dateAddRemove treats 24 hours as different from a
	        // day when working around DST, we need to store them separately
	        this._days = +days + weeks * 7;
	        // It is impossible to translate months into days without knowing
	        // which months you are are talking about, so we have to store
	        // it separately.
	        this._months = +months + quarters * 3 + years * 12;
	
	        this._data = {};
	
	        this._locale = getLocale();
	
	        this._bubble();
	    }
	
	    function isDuration(obj) {
	        return obj instanceof Duration;
	    }
	
	    function absRound(number) {
	        if (number < 0) {
	            return Math.round(-1 * number) * -1;
	        } else {
	            return Math.round(number);
	        }
	    }
	
	    // compare two arrays, return the number of differences
	    function compareArrays(array1, array2, dontConvert) {
	        var len = Math.min(array1.length, array2.length),
	            lengthDiff = Math.abs(array1.length - array2.length),
	            diffs = 0,
	            i;
	        for (i = 0; i < len; i++) {
	            if (
	                (dontConvert && array1[i] !== array2[i]) ||
	                (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))
	            ) {
	                diffs++;
	            }
	        }
	        return diffs + lengthDiff;
	    }
	
	    // FORMATTING
	
	    function offset(token, separator) {
	        addFormatToken(token, 0, 0, function () {
	            var offset = this.utcOffset(),
	                sign = '+';
	            if (offset < 0) {
	                offset = -offset;
	                sign = '-';
	            }
	            return (
	                sign +
	                zeroFill(~~(offset / 60), 2) +
	                separator +
	                zeroFill(~~offset % 60, 2)
	            );
	        });
	    }
	
	    offset('Z', ':');
	    offset('ZZ', '');
	
	    // PARSING
	
	    addRegexToken('Z', matchShortOffset);
	    addRegexToken('ZZ', matchShortOffset);
	    addParseToken(['Z', 'ZZ'], function (input, array, config) {
	        config._useUTC = true;
	        config._tzm = offsetFromString(matchShortOffset, input);
	    });
	
	    // HELPERS
	
	    // timezone chunker
	    // '+10:00' > ['10',  '00']
	    // '-1530'  > ['-15', '30']
	    var chunkOffset = /([\+\-]|\d\d)/gi;
	
	    function offsetFromString(matcher, string) {
	        var matches = (string || '').match(matcher),
	            chunk,
	            parts,
	            minutes;
	
	        if (matches === null) {
	            return null;
	        }
	
	        chunk = matches[matches.length - 1] || [];
	        parts = (chunk + '').match(chunkOffset) || ['-', 0, 0];
	        minutes = +(parts[1] * 60) + toInt(parts[2]);
	
	        return minutes === 0 ? 0 : parts[0] === '+' ? minutes : -minutes;
	    }
	
	    // Return a moment from input, that is local/utc/zone equivalent to model.
	    function cloneWithOffset(input, model) {
	        var res, diff;
	        if (model._isUTC) {
	            res = model.clone();
	            diff =
	                (isMoment(input) || isDate(input)
	                    ? input.valueOf()
	                    : createLocal(input).valueOf()) - res.valueOf();
	            // Use low-level api, because this fn is low-level api.
	            res._d.setTime(res._d.valueOf() + diff);
	            hooks.updateOffset(res, false);
	            return res;
	        } else {
	            return createLocal(input).local();
	        }
	    }
	
	    function getDateOffset(m) {
	        // On Firefox.24 Date#getTimezoneOffset returns a floating point.
	        // https://github.com/moment/moment/pull/1871
	        return -Math.round(m._d.getTimezoneOffset());
	    }
	
	    // HOOKS
	
	    // This function will be called whenever a moment is mutated.
	    // It is intended to keep the offset in sync with the timezone.
	    hooks.updateOffset = function () {};
	
	    // MOMENTS
	
	    // keepLocalTime = true means only change the timezone, without
	    // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->
	    // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset
	    // +0200, so we adjust the time as needed, to be valid.
	    //
	    // Keeping the time actually adds/subtracts (one hour)
	    // from the actual represented time. That is why we call updateOffset
	    // a second time. In case it wants us to change the offset again
	    // _changeInProgress == true case, then we have to adjust, because
	    // there is no such time in the given timezone.
	    function getSetOffset(input, keepLocalTime, keepMinutes) {
	        var offset = this._offset || 0,
	            localAdjust;
	        if (!this.isValid()) {
	            return input != null ? this : NaN;
	        }
	        if (input != null) {
	            if (typeof input === 'string') {
	                input = offsetFromString(matchShortOffset, input);
	                if (input === null) {
	                    return this;
	                }
	            } else if (Math.abs(input) < 16 && !keepMinutes) {
	                input = input * 60;
	            }
	            if (!this._isUTC && keepLocalTime) {
	                localAdjust = getDateOffset(this);
	            }
	            this._offset = input;
	            this._isUTC = true;
	            if (localAdjust != null) {
	                this.add(localAdjust, 'm');
	            }
	            if (offset !== input) {
	                if (!keepLocalTime || this._changeInProgress) {
	                    addSubtract(
	                        this,
	                        createDuration(input - offset, 'm'),
	                        1,
	                        false
	                    );
	                } else if (!this._changeInProgress) {
	                    this._changeInProgress = true;
	                    hooks.updateOffset(this, true);
	                    this._changeInProgress = null;
	                }
	            }
	            return this;
	        } else {
	            return this._isUTC ? offset : getDateOffset(this);
	        }
	    }
	
	    function getSetZone(input, keepLocalTime) {
	        if (input != null) {
	            if (typeof input !== 'string') {
	                input = -input;
	            }
	
	            this.utcOffset(input, keepLocalTime);
	
	            return this;
	        } else {
	            return -this.utcOffset();
	        }
	    }
	
	    function setOffsetToUTC(keepLocalTime) {
	        return this.utcOffset(0, keepLocalTime);
	    }
	
	    function setOffsetToLocal(keepLocalTime) {
	        if (this._isUTC) {
	            this.utcOffset(0, keepLocalTime);
	            this._isUTC = false;
	
	            if (keepLocalTime) {
	                this.subtract(getDateOffset(this), 'm');
	            }
	        }
	        return this;
	    }
	
	    function setOffsetToParsedOffset() {
	        if (this._tzm != null) {
	            this.utcOffset(this._tzm, false, true);
	        } else if (typeof this._i === 'string') {
	            var tZone = offsetFromString(matchOffset, this._i);
	            if (tZone != null) {
	                this.utcOffset(tZone);
	            } else {
	                this.utcOffset(0, true);
	            }
	        }
	        return this;
	    }
	
	    function hasAlignedHourOffset(input) {
	        if (!this.isValid()) {
	            return false;
	        }
	        input = input ? createLocal(input).utcOffset() : 0;
	
	        return (this.utcOffset() - input) % 60 === 0;
	    }
	
	    function isDaylightSavingTime() {
	        return (
	            this.utcOffset() > this.clone().month(0).utcOffset() ||
	            this.utcOffset() > this.clone().month(5).utcOffset()
	        );
	    }
	
	    function isDaylightSavingTimeShifted() {
	        if (!isUndefined(this._isDSTShifted)) {
	            return this._isDSTShifted;
	        }
	
	        var c = {},
	            other;
	
	        copyConfig(c, this);
	        c = prepareConfig(c);
	
	        if (c._a) {
	            other = c._isUTC ? createUTC(c._a) : createLocal(c._a);
	            this._isDSTShifted =
	                this.isValid() && compareArrays(c._a, other.toArray()) > 0;
	        } else {
	            this._isDSTShifted = false;
	        }
	
	        return this._isDSTShifted;
	    }
	
	    function isLocal() {
	        return this.isValid() ? !this._isUTC : false;
	    }
	
	    function isUtcOffset() {
	        return this.isValid() ? this._isUTC : false;
	    }
	
	    function isUtc() {
	        return this.isValid() ? this._isUTC && this._offset === 0 : false;
	    }
	
	    // ASP.NET json date format regex
	    var aspNetRegex = /^(-|\+)?(?:(\d*)[. ])?(\d+):(\d+)(?::(\d+)(\.\d*)?)?$/,
	        // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html
	        // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere
	        // and further modified to allow for strings containing both week and day
	        isoRegex = /^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;
	
	    function createDuration(input, key) {
	        var duration = input,
	            // matching against regexp is expensive, do it on demand
	            match = null,
	            sign,
	            ret,
	            diffRes;
	
	        if (isDuration(input)) {
	            duration = {
	                ms: input._milliseconds,
	                d: input._days,
	                M: input._months,
	            };
	        } else if (isNumber(input) || !isNaN(+input)) {
	            duration = {};
	            if (key) {
	                duration[key] = +input;
	            } else {
	                duration.milliseconds = +input;
	            }
	        } else if ((match = aspNetRegex.exec(input))) {
	            sign = match[1] === '-' ? -1 : 1;
	            duration = {
	                y: 0,
	                d: toInt(match[DATE]) * sign,
	                h: toInt(match[HOUR]) * sign,
	                m: toInt(match[MINUTE]) * sign,
	                s: toInt(match[SECOND]) * sign,
	                ms: toInt(absRound(match[MILLISECOND] * 1000)) * sign, // the millisecond decimal point is included in the match
	            };
	        } else if ((match = isoRegex.exec(input))) {
	            sign = match[1] === '-' ? -1 : 1;
	            duration = {
	                y: parseIso(match[2], sign),
	                M: parseIso(match[3], sign),
	                w: parseIso(match[4], sign),
	                d: parseIso(match[5], sign),
	                h: parseIso(match[6], sign),
	                m: parseIso(match[7], sign),
	                s: parseIso(match[8], sign),
	            };
	        } else if (duration == null) {
	            // checks for null or undefined
	            duration = {};
	        } else if (
	            typeof duration === 'object' &&
	            ('from' in duration || 'to' in duration)
	        ) {
	            diffRes = momentsDifference(
	                createLocal(duration.from),
	                createLocal(duration.to)
	            );
	
	            duration = {};
	            duration.ms = diffRes.milliseconds;
	            duration.M = diffRes.months;
	        }
	
	        ret = new Duration(duration);
	
	        if (isDuration(input) && hasOwnProp(input, '_locale')) {
	            ret._locale = input._locale;
	        }
	
	        if (isDuration(input) && hasOwnProp(input, '_isValid')) {
	            ret._isValid = input._isValid;
	        }
	
	        return ret;
	    }
	
	    createDuration.fn = Duration.prototype;
	    createDuration.invalid = createInvalid$1;
	
	    function parseIso(inp, sign) {
	        // We'd normally use ~~inp for this, but unfortunately it also
	        // converts floats to ints.
	        // inp may be undefined, so careful calling replace on it.
	        var res = inp && parseFloat(inp.replace(',', '.'));
	        // apply sign while we're at it
	        return (isNaN(res) ? 0 : res) * sign;
	    }
	
	    function positiveMomentsDifference(base, other) {
	        var res = {};
	
	        res.months =
	            other.month() - base.month() + (other.year() - base.year()) * 12;
	        if (base.clone().add(res.months, 'M').isAfter(other)) {
	            --res.months;
	        }
	
	        res.milliseconds = +other - +base.clone().add(res.months, 'M');
	
	        return res;
	    }
	
	    function momentsDifference(base, other) {
	        var res;
	        if (!(base.isValid() && other.isValid())) {
	            return { milliseconds: 0, months: 0 };
	        }
	
	        other = cloneWithOffset(other, base);
	        if (base.isBefore(other)) {
	            res = positiveMomentsDifference(base, other);
	        } else {
	            res = positiveMomentsDifference(other, base);
	            res.milliseconds = -res.milliseconds;
	            res.months = -res.months;
	        }
	
	        return res;
	    }
	
	    // TODO: remove 'name' arg after deprecation is removed
	    function createAdder(direction, name) {
	        return function (val, period) {
	            var dur, tmp;
	            //invert the arguments, but complain about it
	            if (period !== null && !isNaN(+period)) {
	                deprecateSimple(
	                    name,
	                    'moment().' +
	                        name +
	                        '(period, number) is deprecated. Please use moment().' +
	                        name +
	                        '(number, period). ' +
	                        'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.'
	                );
	                tmp = val;
	                val = period;
	                period = tmp;
	            }
	
	            dur = createDuration(val, period);
	            addSubtract(this, dur, direction);
	            return this;
	        };
	    }
	
	    function addSubtract(mom, duration, isAdding, updateOffset) {
	        var milliseconds = duration._milliseconds,
	            days = absRound(duration._days),
	            months = absRound(duration._months);
	
	        if (!mom.isValid()) {
	            // No op
	            return;
	        }
	
	        updateOffset = updateOffset == null ? true : updateOffset;
	
	        if (months) {
	            setMonth(mom, get(mom, 'Month') + months * isAdding);
	        }
	        if (days) {
	            set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);
	        }
	        if (milliseconds) {
	            mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);
	        }
	        if (updateOffset) {
	            hooks.updateOffset(mom, days || months);
	        }
	    }
	
	    var add = createAdder(1, 'add'),
	        subtract = createAdder(-1, 'subtract');
	
	    function isString(input) {
	        return typeof input === 'string' || input instanceof String;
	    }
	
	    // type MomentInput = Moment | Date | string | number | (number | string)[] | MomentInputObject | void; // null | undefined
	    function isMomentInput(input) {
	        return (
	            isMoment(input) ||
	            isDate(input) ||
	            isString(input) ||
	            isNumber(input) ||
	            isNumberOrStringArray(input) ||
	            isMomentInputObject(input) ||
	            input === null ||
	            input === undefined
	        );
	    }
	
	    function isMomentInputObject(input) {
	        var objectTest = isObject(input) && !isObjectEmpty(input),
	            propertyTest = false,
	            properties = [
	                'years',
	                'year',
	                'y',
	                'months',
	                'month',
	                'M',
	                'days',
	                'day',
	                'd',
	                'dates',
	                'date',
	                'D',
	                'hours',
	                'hour',
	                'h',
	                'minutes',
	                'minute',
	                'm',
	                'seconds',
	                'second',
	                's',
	                'milliseconds',
	                'millisecond',
	                'ms',
	            ],
	            i,
	            property;
	
	        for (i = 0; i < properties.length; i += 1) {
	            property = properties[i];
	            propertyTest = propertyTest || hasOwnProp(input, property);
	        }
	
	        return objectTest && propertyTest;
	    }
	
	    function isNumberOrStringArray(input) {
	        var arrayTest = isArray(input),
	            dataTypeTest = false;
	        if (arrayTest) {
	            dataTypeTest =
	                input.filter(function (item) {
	                    return !isNumber(item) && isString(input);
	                }).length === 0;
	        }
	        return arrayTest && dataTypeTest;
	    }
	
	    function isCalendarSpec(input) {
	        var objectTest = isObject(input) && !isObjectEmpty(input),
	            propertyTest = false,
	            properties = [
	                'sameDay',
	                'nextDay',
	                'lastDay',
	                'nextWeek',
	                'lastWeek',
	                'sameElse',
	            ],
	            i,
	            property;
	
	        for (i = 0; i < properties.length; i += 1) {
	            property = properties[i];
	            propertyTest = propertyTest || hasOwnProp(input, property);
	        }
	
	        return objectTest && propertyTest;
	    }
	
	    function getCalendarFormat(myMoment, now) {
	        var diff = myMoment.diff(now, 'days', true);
	        return diff < -6
	            ? 'sameElse'
	            : diff < -1
	            ? 'lastWeek'
	            : diff < 0
	            ? 'lastDay'
	            : diff < 1
	            ? 'sameDay'
	            : diff < 2
	            ? 'nextDay'
	            : diff < 7
	            ? 'nextWeek'
	            : 'sameElse';
	    }
	
	    function calendar$1(time, formats) {
	        // Support for single parameter, formats only overload to the calendar function
	        if (arguments.length === 1) {
	            if (isMomentInput(arguments[0])) {
	                time = arguments[0];
	                formats = undefined;
	            } else if (isCalendarSpec(arguments[0])) {
	                formats = arguments[0];
	                time = undefined;
	            }
	        }
	        // We want to compare the start of today, vs this.
	        // Getting start-of-today depends on whether we're local/utc/offset or not.
	        var now = time || createLocal(),
	            sod = cloneWithOffset(now, this).startOf('day'),
	            format = hooks.calendarFormat(this, sod) || 'sameElse',
	            output =
	                formats &&
	                (isFunction(formats[format])
	                    ? formats[format].call(this, now)
	                    : formats[format]);
	
	        return this.format(
	            output || this.localeData().calendar(format, this, createLocal(now))
	        );
	    }
	
	    function clone() {
	        return new Moment(this);
	    }
	
	    function isAfter(input, units) {
	        var localInput = isMoment(input) ? input : createLocal(input);
	        if (!(this.isValid() && localInput.isValid())) {
	            return false;
	        }
	        units = normalizeUnits(units) || 'millisecond';
	        if (units === 'millisecond') {
	            return this.valueOf() > localInput.valueOf();
	        } else {
	            return localInput.valueOf() < this.clone().startOf(units).valueOf();
	        }
	    }
	
	    function isBefore(input, units) {
	        var localInput = isMoment(input) ? input : createLocal(input);
	        if (!(this.isValid() && localInput.isValid())) {
	            return false;
	        }
	        units = normalizeUnits(units) || 'millisecond';
	        if (units === 'millisecond') {
	            return this.valueOf() < localInput.valueOf();
	        } else {
	            return this.clone().endOf(units).valueOf() < localInput.valueOf();
	        }
	    }
	
	    function isBetween(from, to, units, inclusivity) {
	        var localFrom = isMoment(from) ? from : createLocal(from),
	            localTo = isMoment(to) ? to : createLocal(to);
	        if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) {
	            return false;
	        }
	        inclusivity = inclusivity || '()';
	        return (
	            (inclusivity[0] === '('
	                ? this.isAfter(localFrom, units)
	                : !this.isBefore(localFrom, units)) &&
	            (inclusivity[1] === ')'
	                ? this.isBefore(localTo, units)
	                : !this.isAfter(localTo, units))
	        );
	    }
	
	    function isSame(input, units) {
	        var localInput = isMoment(input) ? input : createLocal(input),
	            inputMs;
	        if (!(this.isValid() && localInput.isValid())) {
	            return false;
	        }
	        units = normalizeUnits(units) || 'millisecond';
	        if (units === 'millisecond') {
	            return this.valueOf() === localInput.valueOf();
	        } else {
	            inputMs = localInput.valueOf();
	            return (
	                this.clone().startOf(units).valueOf() <= inputMs &&
	                inputMs <= this.clone().endOf(units).valueOf()
	            );
	        }
	    }
	
	    function isSameOrAfter(input, units) {
	        return this.isSame(input, units) || this.isAfter(input, units);
	    }
	
	    function isSameOrBefore(input, units) {
	        return this.isSame(input, units) || this.isBefore(input, units);
	    }
	
	    function diff(input, units, asFloat) {
	        var that, zoneDelta, output;
	
	        if (!this.isValid()) {
	            return NaN;
	        }
	
	        that = cloneWithOffset(input, this);
	
	        if (!that.isValid()) {
	            return NaN;
	        }
	
	        zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;
	
	        units = normalizeUnits(units);
	
	        switch (units) {
	            case 'year':
	                output = monthDiff(this, that) / 12;
	                break;
	            case 'month':
	                output = monthDiff(this, that);
	                break;
	            case 'quarter':
	                output = monthDiff(this, that) / 3;
	                break;
	            case 'second':
	                output = (this - that) / 1e3;
	                break; // 1000
	            case 'minute':
	                output = (this - that) / 6e4;
	                break; // 1000 * 60
	            case 'hour':
	                output = (this - that) / 36e5;
	                break; // 1000 * 60 * 60
	            case 'day':
	                output = (this - that - zoneDelta) / 864e5;
	                break; // 1000 * 60 * 60 * 24, negate dst
	            case 'week':
	                output = (this - that - zoneDelta) / 6048e5;
	                break; // 1000 * 60 * 60 * 24 * 7, negate dst
	            default:
	                output = this - that;
	        }
	
	        return asFloat ? output : absFloor(output);
	    }
	
	    function monthDiff(a, b) {
	        if (a.date() < b.date()) {
	            // end-of-month calculations work correct when the start month has more
	            // days than the end month.
	            return -monthDiff(b, a);
	        }
	        // difference in months
	        var wholeMonthDiff = (b.year() - a.year()) * 12 + (b.month() - a.month()),
	            // b is in (anchor - 1 month, anchor + 1 month)
	            anchor = a.clone().add(wholeMonthDiff, 'months'),
	            anchor2,
	            adjust;
	
	        if (b - anchor < 0) {
	            anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');
	            // linear across the month
	            adjust = (b - anchor) / (anchor - anchor2);
	        } else {
	            anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');
	            // linear across the month
	            adjust = (b - anchor) / (anchor2 - anchor);
	        }
	
	        //check for negative zero, return zero if negative zero
	        return -(wholeMonthDiff + adjust) || 0;
	    }
	
	    hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';
	    hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';
	
	    function toString() {
	        return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');
	    }
	
	    function toISOString(keepOffset) {
	        if (!this.isValid()) {
	            return null;
	        }
	        var utc = keepOffset !== true,
	            m = utc ? this.clone().utc() : this;
	        if (m.year() < 0 || m.year() > 9999) {
	            return formatMoment(
	                m,
	                utc
	                    ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]'
	                    : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ'
	            );
	        }
	        if (isFunction(Date.prototype.toISOString)) {
	            // native implementation is ~50x faster, use it when we can
	            if (utc) {
	                return this.toDate().toISOString();
	            } else {
	                return new Date(this.valueOf() + this.utcOffset() * 60 * 1000)
	                    .toISOString()
	                    .replace('Z', formatMoment(m, 'Z'));
	            }
	        }
	        return formatMoment(
	            m,
	            utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ'
	        );
	    }
	
	    /**
	     * Return a human readable representation of a moment that can
	     * also be evaluated to get a new moment which is the same
	     *
	     * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects
	     */
	    function inspect() {
	        if (!this.isValid()) {
	            return 'moment.invalid(/* ' + this._i + ' */)';
	        }
	        var func = 'moment',
	            zone = '',
	            prefix,
	            year,
	            datetime,
	            suffix;
	        if (!this.isLocal()) {
	            func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';
	            zone = 'Z';
	        }
	        prefix = '[' + func + '("]';
	        year = 0 <= this.year() && this.year() <= 9999 ? 'YYYY' : 'YYYYYY';
	        datetime = '-MM-DD[T]HH:mm:ss.SSS';
	        suffix = zone + '[")]';
	
	        return this.format(prefix + year + datetime + suffix);
	    }
	
	    function format(inputString) {
	        if (!inputString) {
	            inputString = this.isUtc()
	                ? hooks.defaultFormatUtc
	                : hooks.defaultFormat;
	        }
	        var output = formatMoment(this, inputString);
	        return this.localeData().postformat(output);
	    }
	
	    function from(time, withoutSuffix) {
	        if (
	            this.isValid() &&
	            ((isMoment(time) && time.isValid()) || createLocal(time).isValid())
	        ) {
	            return createDuration({ to: this, from: time })
	                .locale(this.locale())
	                .humanize(!withoutSuffix);
	        } else {
	            return this.localeData().invalidDate();
	        }
	    }
	
	    function fromNow(withoutSuffix) {
	        return this.from(createLocal(), withoutSuffix);
	    }
	
	    function to(time, withoutSuffix) {
	        if (
	            this.isValid() &&
	            ((isMoment(time) && time.isValid()) || createLocal(time).isValid())
	        ) {
	            return createDuration({ from: this, to: time })
	                .locale(this.locale())
	                .humanize(!withoutSuffix);
	        } else {
	            return this.localeData().invalidDate();
	        }
	    }
	
	    function toNow(withoutSuffix) {
	        return this.to(createLocal(), withoutSuffix);
	    }
	
	    // If passed a locale key, it will set the locale for this
	    // instance.  Otherwise, it will return the locale configuration
	    // variables for this instance.
	    function locale(key) {
	        var newLocaleData;
	
	        if (key === undefined) {
	            return this._locale._abbr;
	        } else {
	            newLocaleData = getLocale(key);
	            if (newLocaleData != null) {
	                this._locale = newLocaleData;
	            }
	            return this;
	        }
	    }
	
	    var lang = deprecate(
	        'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',
	        function (key) {
	            if (key === undefined) {
	                return this.localeData();
	            } else {
	                return this.locale(key);
	            }
	        }
	    );
	
	    function localeData() {
	        return this._locale;
	    }
	
	    var MS_PER_SECOND = 1000,
	        MS_PER_MINUTE = 60 * MS_PER_SECOND,
	        MS_PER_HOUR = 60 * MS_PER_MINUTE,
	        MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR;
	
	    // actual modulo - handles negative numbers (for dates before 1970):
	    function mod$1(dividend, divisor) {
	        return ((dividend % divisor) + divisor) % divisor;
	    }
	
	    function localStartOfDate(y, m, d) {
	        // the date constructor remaps years 0-99 to 1900-1999
	        if (y < 100 && y >= 0) {
	            // preserve leap years using a full 400 year cycle, then reset
	            return new Date(y + 400, m, d) - MS_PER_400_YEARS;
	        } else {
	            return new Date(y, m, d).valueOf();
	        }
	    }
	
	    function utcStartOfDate(y, m, d) {
	        // Date.UTC remaps years 0-99 to 1900-1999
	        if (y < 100 && y >= 0) {
	            // preserve leap years using a full 400 year cycle, then reset
	            return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS;
	        } else {
	            return Date.UTC(y, m, d);
	        }
	    }
	
	    function startOf(units) {
	        var time, startOfDate;
	        units = normalizeUnits(units);
	        if (units === undefined || units === 'millisecond' || !this.isValid()) {
	            return this;
	        }
	
	        startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;
	
	        switch (units) {
	            case 'year':
	                time = startOfDate(this.year(), 0, 1);
	                break;
	            case 'quarter':
	                time = startOfDate(
	                    this.year(),
	                    this.month() - (this.month() % 3),
	                    1
	                );
	                break;
	            case 'month':
	                time = startOfDate(this.year(), this.month(), 1);
	                break;
	            case 'week':
	                time = startOfDate(
	                    this.year(),
	                    this.month(),
	                    this.date() - this.weekday()
	                );
	                break;
	            case 'isoWeek':
	                time = startOfDate(
	                    this.year(),
	                    this.month(),
	                    this.date() - (this.isoWeekday() - 1)
	                );
	                break;
	            case 'day':
	            case 'date':
	                time = startOfDate(this.year(), this.month(), this.date());
	                break;
	            case 'hour':
	                time = this._d.valueOf();
	                time -= mod$1(
	                    time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),
	                    MS_PER_HOUR
	                );
	                break;
	            case 'minute':
	                time = this._d.valueOf();
	                time -= mod$1(time, MS_PER_MINUTE);
	                break;
	            case 'second':
	                time = this._d.valueOf();
	                time -= mod$1(time, MS_PER_SECOND);
	                break;
	        }
	
	        this._d.setTime(time);
	        hooks.updateOffset(this, true);
	        return this;
	    }
	
	    function endOf(units) {
	        var time, startOfDate;
	        units = normalizeUnits(units);
	        if (units === undefined || units === 'millisecond' || !this.isValid()) {
	            return this;
	        }
	
	        startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;
	
	        switch (units) {
	            case 'year':
	                time = startOfDate(this.year() + 1, 0, 1) - 1;
	                break;
	            case 'quarter':
	                time =
	                    startOfDate(
	                        this.year(),
	                        this.month() - (this.month() % 3) + 3,
	                        1
	                    ) - 1;
	                break;
	            case 'month':
	                time = startOfDate(this.year(), this.month() + 1, 1) - 1;
	                break;
	            case 'week':
	                time =
	                    startOfDate(
	                        this.year(),
	                        this.month(),
	                        this.date() - this.weekday() + 7
	                    ) - 1;
	                break;
	            case 'isoWeek':
	                time =
	                    startOfDate(
	                        this.year(),
	                        this.month(),
	                        this.date() - (this.isoWeekday() - 1) + 7
	                    ) - 1;
	                break;
	            case 'day':
	            case 'date':
	                time = startOfDate(this.year(), this.month(), this.date() + 1) - 1;
	                break;
	            case 'hour':
	                time = this._d.valueOf();
	                time +=
	                    MS_PER_HOUR -
	                    mod$1(
	                        time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),
	                        MS_PER_HOUR
	                    ) -
	                    1;
	                break;
	            case 'minute':
	                time = this._d.valueOf();
	                time += MS_PER_MINUTE - mod$1(time, MS_PER_MINUTE) - 1;
	                break;
	            case 'second':
	                time = this._d.valueOf();
	                time += MS_PER_SECOND - mod$1(time, MS_PER_SECOND) - 1;
	                break;
	        }
	
	        this._d.setTime(time);
	        hooks.updateOffset(this, true);
	        return this;
	    }
	
	    function valueOf() {
	        return this._d.valueOf() - (this._offset || 0) * 60000;
	    }
	
	    function unix() {
	        return Math.floor(this.valueOf() / 1000);
	    }
	
	    function toDate() {
	        return new Date(this.valueOf());
	    }
	
	    function toArray() {
	        var m = this;
	        return [
	            m.year(),
	            m.month(),
	            m.date(),
	            m.hour(),
	            m.minute(),
	            m.second(),
	            m.millisecond(),
	        ];
	    }
	
	    function toObject() {
	        var m = this;
	        return {
	            years: m.year(),
	            months: m.month(),
	            date: m.date(),
	            hours: m.hours(),
	            minutes: m.minutes(),
	            seconds: m.seconds(),
	            milliseconds: m.milliseconds(),
	        };
	    }
	
	    function toJSON() {
	        // new Date(NaN).toJSON() === null
	        return this.isValid() ? this.toISOString() : null;
	    }
	
	    function isValid$2() {
	        return isValid(this);
	    }
	
	    function parsingFlags() {
	        return extend({}, getParsingFlags(this));
	    }
	
	    function invalidAt() {
	        return getParsingFlags(this).overflow;
	    }
	
	    function creationData() {
	        return {
	            input: this._i,
	            format: this._f,
	            locale: this._locale,
	            isUTC: this._isUTC,
	            strict: this._strict,
	        };
	    }
	
	    addFormatToken('N', 0, 0, 'eraAbbr');
	    addFormatToken('NN', 0, 0, 'eraAbbr');
	    addFormatToken('NNN', 0, 0, 'eraAbbr');
	    addFormatToken('NNNN', 0, 0, 'eraName');
	    addFormatToken('NNNNN', 0, 0, 'eraNarrow');
	
	    addFormatToken('y', ['y', 1], 'yo', 'eraYear');
	    addFormatToken('y', ['yy', 2], 0, 'eraYear');
	    addFormatToken('y', ['yyy', 3], 0, 'eraYear');
	    addFormatToken('y', ['yyyy', 4], 0, 'eraYear');
	
	    addRegexToken('N', matchEraAbbr);
	    addRegexToken('NN', matchEraAbbr);
	    addRegexToken('NNN', matchEraAbbr);
	    addRegexToken('NNNN', matchEraName);
	    addRegexToken('NNNNN', matchEraNarrow);
	
	    addParseToken(['N', 'NN', 'NNN', 'NNNN', 'NNNNN'], function (
	        input,
	        array,
	        config,
	        token
	    ) {
	        var era = config._locale.erasParse(input, token, config._strict);
	        if (era) {
	            getParsingFlags(config).era = era;
	        } else {
	            getParsingFlags(config).invalidEra = input;
	        }
	    });
	
	    addRegexToken('y', matchUnsigned);
	    addRegexToken('yy', matchUnsigned);
	    addRegexToken('yyy', matchUnsigned);
	    addRegexToken('yyyy', matchUnsigned);
	    addRegexToken('yo', matchEraYearOrdinal);
	
	    addParseToken(['y', 'yy', 'yyy', 'yyyy'], YEAR);
	    addParseToken(['yo'], function (input, array, config, token) {
	        var match;
	        if (config._locale._eraYearOrdinalRegex) {
	            match = input.match(config._locale._eraYearOrdinalRegex);
	        }
	
	        if (config._locale.eraYearOrdinalParse) {
	            array[YEAR] = config._locale.eraYearOrdinalParse(input, match);
	        } else {
	            array[YEAR] = parseInt(input, 10);
	        }
	    });
	
	    function localeEras(m, format) {
	        var i,
	            l,
	            date,
	            eras = this._eras || getLocale('en')._eras;
	        for (i = 0, l = eras.length; i < l; ++i) {
	            switch (typeof eras[i].since) {
	                case 'string':
	                    // truncate time
	                    date = hooks(eras[i].since).startOf('day');
	                    eras[i].since = date.valueOf();
	                    break;
	            }
	
	            switch (typeof eras[i].until) {
	                case 'undefined':
	                    eras[i].until = +Infinity;
	                    break;
	                case 'string':
	                    // truncate time
	                    date = hooks(eras[i].until).startOf('day').valueOf();
	                    eras[i].until = date.valueOf();
	                    break;
	            }
	        }
	        return eras;
	    }
	
	    function localeErasParse(eraName, format, strict) {
	        var i,
	            l,
	            eras = this.eras(),
	            name,
	            abbr,
	            narrow;
	        eraName = eraName.toUpperCase();
	
	        for (i = 0, l = eras.length; i < l; ++i) {
	            name = eras[i].name.toUpperCase();
	            abbr = eras[i].abbr.toUpperCase();
	            narrow = eras[i].narrow.toUpperCase();
	
	            if (strict) {
	                switch (format) {
	                    case 'N':
	                    case 'NN':
	                    case 'NNN':
	                        if (abbr === eraName) {
	                            return eras[i];
	                        }
	                        break;
	
	                    case 'NNNN':
	                        if (name === eraName) {
	                            return eras[i];
	                        }
	                        break;
	
	                    case 'NNNNN':
	                        if (narrow === eraName) {
	                            return eras[i];
	                        }
	                        break;
	                }
	            } else if ([name, abbr, narrow].indexOf(eraName) >= 0) {
	                return eras[i];
	            }
	        }
	    }
	
	    function localeErasConvertYear(era, year) {
	        var dir = era.since <= era.until ? +1 : -1;
	        if (year === undefined) {
	            return hooks(era.since).year();
	        } else {
	            return hooks(era.since).year() + (year - era.offset) * dir;
	        }
	    }
	
	    function getEraName() {
	        var i,
	            l,
	            val,
	            eras = this.localeData().eras();
	        for (i = 0, l = eras.length; i < l; ++i) {
	            // truncate time
	            val = this.startOf('day').valueOf();
	
	            if (eras[i].since <= val && val <= eras[i].until) {
	                return eras[i].name;
	            }
	            if (eras[i].until <= val && val <= eras[i].since) {
	                return eras[i].name;
	            }
	        }
	
	        return '';
	    }
	
	    function getEraNarrow() {
	        var i,
	            l,
	            val,
	            eras = this.localeData().eras();
	        for (i = 0, l = eras.length; i < l; ++i) {
	            // truncate time
	            val = this.startOf('day').valueOf();
	
	            if (eras[i].since <= val && val <= eras[i].until) {
	                return eras[i].narrow;
	            }
	            if (eras[i].until <= val && val <= eras[i].since) {
	                return eras[i].narrow;
	            }
	        }
	
	        return '';
	    }
	
	    function getEraAbbr() {
	        var i,
	            l,
	            val,
	            eras = this.localeData().eras();
	        for (i = 0, l = eras.length; i < l; ++i) {
	            // truncate time
	            val = this.startOf('day').valueOf();
	
	            if (eras[i].since <= val && val <= eras[i].until) {
	                return eras[i].abbr;
	            }
	            if (eras[i].until <= val && val <= eras[i].since) {
	                return eras[i].abbr;
	            }
	        }
	
	        return '';
	    }
	
	    function getEraYear() {
	        var i,
	            l,
	            dir,
	            val,
	            eras = this.localeData().eras();
	        for (i = 0, l = eras.length; i < l; ++i) {
	            dir = eras[i].since <= eras[i].until ? +1 : -1;
	
	            // truncate time
	            val = this.startOf('day').valueOf();
	
	            if (
	                (eras[i].since <= val && val <= eras[i].until) ||
	                (eras[i].until <= val && val <= eras[i].since)
	            ) {
	                return (
	                    (this.year() - hooks(eras[i].since).year()) * dir +
	                    eras[i].offset
	                );
	            }
	        }
	
	        return this.year();
	    }
	
	    function erasNameRegex(isStrict) {
	        if (!hasOwnProp(this, '_erasNameRegex')) {
	            computeErasParse.call(this);
	        }
	        return isStrict ? this._erasNameRegex : this._erasRegex;
	    }
	
	    function erasAbbrRegex(isStrict) {
	        if (!hasOwnProp(this, '_erasAbbrRegex')) {
	            computeErasParse.call(this);
	        }
	        return isStrict ? this._erasAbbrRegex : this._erasRegex;
	    }
	
	    function erasNarrowRegex(isStrict) {
	        if (!hasOwnProp(this, '_erasNarrowRegex')) {
	            computeErasParse.call(this);
	        }
	        return isStrict ? this._erasNarrowRegex : this._erasRegex;
	    }
	
	    function matchEraAbbr(isStrict, locale) {
	        return locale.erasAbbrRegex(isStrict);
	    }
	
	    function matchEraName(isStrict, locale) {
	        return locale.erasNameRegex(isStrict);
	    }
	
	    function matchEraNarrow(isStrict, locale) {
	        return locale.erasNarrowRegex(isStrict);
	    }
	
	    function matchEraYearOrdinal(isStrict, locale) {
	        return locale._eraYearOrdinalRegex || matchUnsigned;
	    }
	
	    function computeErasParse() {
	        var abbrPieces = [],
	            namePieces = [],
	            narrowPieces = [],
	            mixedPieces = [],
	            i,
	            l,
	            eras = this.eras();
	
	        for (i = 0, l = eras.length; i < l; ++i) {
	            namePieces.push(regexEscape(eras[i].name));
	            abbrPieces.push(regexEscape(eras[i].abbr));
	            narrowPieces.push(regexEscape(eras[i].narrow));
	
	            mixedPieces.push(regexEscape(eras[i].name));
	            mixedPieces.push(regexEscape(eras[i].abbr));
	            mixedPieces.push(regexEscape(eras[i].narrow));
	        }
	
	        this._erasRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');
	        this._erasNameRegex = new RegExp('^(' + namePieces.join('|') + ')', 'i');
	        this._erasAbbrRegex = new RegExp('^(' + abbrPieces.join('|') + ')', 'i');
	        this._erasNarrowRegex = new RegExp(
	            '^(' + narrowPieces.join('|') + ')',
	            'i'
	        );
	    }
	
	    // FORMATTING
	
	    addFormatToken(0, ['gg', 2], 0, function () {
	        return this.weekYear() % 100;
	    });
	
	    addFormatToken(0, ['GG', 2], 0, function () {
	        return this.isoWeekYear() % 100;
	    });
	
	    function addWeekYearFormatToken(token, getter) {
	        addFormatToken(0, [token, token.length], 0, getter);
	    }
	
	    addWeekYearFormatToken('gggg', 'weekYear');
	    addWeekYearFormatToken('ggggg', 'weekYear');
	    addWeekYearFormatToken('GGGG', 'isoWeekYear');
	    addWeekYearFormatToken('GGGGG', 'isoWeekYear');
	
	    // ALIASES
	
	    addUnitAlias('weekYear', 'gg');
	    addUnitAlias('isoWeekYear', 'GG');
	
	    // PRIORITY
	
	    addUnitPriority('weekYear', 1);
	    addUnitPriority('isoWeekYear', 1);
	
	    // PARSING
	
	    addRegexToken('G', matchSigned);
	    addRegexToken('g', matchSigned);
	    addRegexToken('GG', match1to2, match2);
	    addRegexToken('gg', match1to2, match2);
	    addRegexToken('GGGG', match1to4, match4);
	    addRegexToken('gggg', match1to4, match4);
	    addRegexToken('GGGGG', match1to6, match6);
	    addRegexToken('ggggg', match1to6, match6);
	
	    addWeekParseToken(['gggg', 'ggggg', 'GGGG', 'GGGGG'], function (
	        input,
	        week,
	        config,
	        token
	    ) {
	        week[token.substr(0, 2)] = toInt(input);
	    });
	
	    addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {
	        week[token] = hooks.parseTwoDigitYear(input);
	    });
	
	    // MOMENTS
	
	    function getSetWeekYear(input) {
	        return getSetWeekYearHelper.call(
	            this,
	            input,
	            this.week(),
	            this.weekday(),
	            this.localeData()._week.dow,
	            this.localeData()._week.doy
	        );
	    }
	
	    function getSetISOWeekYear(input) {
	        return getSetWeekYearHelper.call(
	            this,
	            input,
	            this.isoWeek(),
	            this.isoWeekday(),
	            1,
	            4
	        );
	    }
	
	    function getISOWeeksInYear() {
	        return weeksInYear(this.year(), 1, 4);
	    }
	
	    function getISOWeeksInISOWeekYear() {
	        return weeksInYear(this.isoWeekYear(), 1, 4);
	    }
	
	    function getWeeksInYear() {
	        var weekInfo = this.localeData()._week;
	        return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);
	    }
	
	    function getWeeksInWeekYear() {
	        var weekInfo = this.localeData()._week;
	        return weeksInYear(this.weekYear(), weekInfo.dow, weekInfo.doy);
	    }
	
	    function getSetWeekYearHelper(input, week, weekday, dow, doy) {
	        var weeksTarget;
	        if (input == null) {
	            return weekOfYear(this, dow, doy).year;
	        } else {
	            weeksTarget = weeksInYear(input, dow, doy);
	            if (week > weeksTarget) {
	                week = weeksTarget;
	            }
	            return setWeekAll.call(this, input, week, weekday, dow, doy);
	        }
	    }
	
	    function setWeekAll(weekYear, week, weekday, dow, doy) {
	        var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),
	            date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);
	
	        this.year(date.getUTCFullYear());
	        this.month(date.getUTCMonth());
	        this.date(date.getUTCDate());
	        return this;
	    }
	
	    // FORMATTING
	
	    addFormatToken('Q', 0, 'Qo', 'quarter');
	
	    // ALIASES
	
	    addUnitAlias('quarter', 'Q');
	
	    // PRIORITY
	
	    addUnitPriority('quarter', 7);
	
	    // PARSING
	
	    addRegexToken('Q', match1);
	    addParseToken('Q', function (input, array) {
	        array[MONTH] = (toInt(input) - 1) * 3;
	    });
	
	    // MOMENTS
	
	    function getSetQuarter(input) {
	        return input == null
	            ? Math.ceil((this.month() + 1) / 3)
	            : this.month((input - 1) * 3 + (this.month() % 3));
	    }
	
	    // FORMATTING
	
	    addFormatToken('D', ['DD', 2], 'Do', 'date');
	
	    // ALIASES
	
	    addUnitAlias('date', 'D');
	
	    // PRIORITY
	    addUnitPriority('date', 9);
	
	    // PARSING
	
	    addRegexToken('D', match1to2);
	    addRegexToken('DD', match1to2, match2);
	    addRegexToken('Do', function (isStrict, locale) {
	        // TODO: Remove "ordinalParse" fallback in next major release.
	        return isStrict
	            ? locale._dayOfMonthOrdinalParse || locale._ordinalParse
	            : locale._dayOfMonthOrdinalParseLenient;
	    });
	
	    addParseToken(['D', 'DD'], DATE);
	    addParseToken('Do', function (input, array) {
	        array[DATE] = toInt(input.match(match1to2)[0]);
	    });
	
	    // MOMENTS
	
	    var getSetDayOfMonth = makeGetSet('Date', true);
	
	    // FORMATTING
	
	    addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');
	
	    // ALIASES
	
	    addUnitAlias('dayOfYear', 'DDD');
	
	    // PRIORITY
	    addUnitPriority('dayOfYear', 4);
	
	    // PARSING
	
	    addRegexToken('DDD', match1to3);
	    addRegexToken('DDDD', match3);
	    addParseToken(['DDD', 'DDDD'], function (input, array, config) {
	        config._dayOfYear = toInt(input);
	    });
	
	    // HELPERS
	
	    // MOMENTS
	
	    function getSetDayOfYear(input) {
	        var dayOfYear =
	            Math.round(
	                (this.clone().startOf('day') - this.clone().startOf('year')) / 864e5
	            ) + 1;
	        return input == null ? dayOfYear : this.add(input - dayOfYear, 'd');
	    }
	
	    // FORMATTING
	
	    addFormatToken('m', ['mm', 2], 0, 'minute');
	
	    // ALIASES
	
	    addUnitAlias('minute', 'm');
	
	    // PRIORITY
	
	    addUnitPriority('minute', 14);
	
	    // PARSING
	
	    addRegexToken('m', match1to2);
	    addRegexToken('mm', match1to2, match2);
	    addParseToken(['m', 'mm'], MINUTE);
	
	    // MOMENTS
	
	    var getSetMinute = makeGetSet('Minutes', false);
	
	    // FORMATTING
	
	    addFormatToken('s', ['ss', 2], 0, 'second');
	
	    // ALIASES
	
	    addUnitAlias('second', 's');
	
	    // PRIORITY
	
	    addUnitPriority('second', 15);
	
	    // PARSING
	
	    addRegexToken('s', match1to2);
	    addRegexToken('ss', match1to2, match2);
	    addParseToken(['s', 'ss'], SECOND);
	
	    // MOMENTS
	
	    var getSetSecond = makeGetSet('Seconds', false);
	
	    // FORMATTING
	
	    addFormatToken('S', 0, 0, function () {
	        return ~~(this.millisecond() / 100);
	    });
	
	    addFormatToken(0, ['SS', 2], 0, function () {
	        return ~~(this.millisecond() / 10);
	    });
	
	    addFormatToken(0, ['SSS', 3], 0, 'millisecond');
	    addFormatToken(0, ['SSSS', 4], 0, function () {
	        return this.millisecond() * 10;
	    });
	    addFormatToken(0, ['SSSSS', 5], 0, function () {
	        return this.millisecond() * 100;
	    });
	    addFormatToken(0, ['SSSSSS', 6], 0, function () {
	        return this.millisecond() * 1000;
	    });
	    addFormatToken(0, ['SSSSSSS', 7], 0, function () {
	        return this.millisecond() * 10000;
	    });
	    addFormatToken(0, ['SSSSSSSS', 8], 0, function () {
	        return this.millisecond() * 100000;
	    });
	    addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {
	        return this.millisecond() * 1000000;
	    });
	
	    // ALIASES
	
	    addUnitAlias('millisecond', 'ms');
	
	    // PRIORITY
	
	    addUnitPriority('millisecond', 16);
	
	    // PARSING
	
	    addRegexToken('S', match1to3, match1);
	    addRegexToken('SS', match1to3, match2);
	    addRegexToken('SSS', match1to3, match3);
	
	    var token, getSetMillisecond;
	    for (token = 'SSSS'; token.length <= 9; token += 'S') {
	        addRegexToken(token, matchUnsigned);
	    }
	
	    function parseMs(input, array) {
	        array[MILLISECOND] = toInt(('0.' + input) * 1000);
	    }
	
	    for (token = 'S'; token.length <= 9; token += 'S') {
	        addParseToken(token, parseMs);
	    }
	
	    getSetMillisecond = makeGetSet('Milliseconds', false);
	
	    // FORMATTING
	
	    addFormatToken('z', 0, 0, 'zoneAbbr');
	    addFormatToken('zz', 0, 0, 'zoneName');
	
	    // MOMENTS
	
	    function getZoneAbbr() {
	        return this._isUTC ? 'UTC' : '';
	    }
	
	    function getZoneName() {
	        return this._isUTC ? 'Coordinated Universal Time' : '';
	    }
	
	    var proto = Moment.prototype;
	
	    proto.add = add;
	    proto.calendar = calendar$1;
	    proto.clone = clone;
	    proto.diff = diff;
	    proto.endOf = endOf;
	    proto.format = format;
	    proto.from = from;
	    proto.fromNow = fromNow;
	    proto.to = to;
	    proto.toNow = toNow;
	    proto.get = stringGet;
	    proto.invalidAt = invalidAt;
	    proto.isAfter = isAfter;
	    proto.isBefore = isBefore;
	    proto.isBetween = isBetween;
	    proto.isSame = isSame;
	    proto.isSameOrAfter = isSameOrAfter;
	    proto.isSameOrBefore = isSameOrBefore;
	    proto.isValid = isValid$2;
	    proto.lang = lang;
	    proto.locale = locale;
	    proto.localeData = localeData;
	    proto.max = prototypeMax;
	    proto.min = prototypeMin;
	    proto.parsingFlags = parsingFlags;
	    proto.set = stringSet;
	    proto.startOf = startOf;
	    proto.subtract = subtract;
	    proto.toArray = toArray;
	    proto.toObject = toObject;
	    proto.toDate = toDate;
	    proto.toISOString = toISOString;
	    proto.inspect = inspect;
	    if (typeof Symbol !== 'undefined' && Symbol.for != null) {
	        proto[Symbol.for('nodejs.util.inspect.custom')] = function () {
	            return 'Moment<' + this.format() + '>';
	        };
	    }
	    proto.toJSON = toJSON;
	    proto.toString = toString;
	    proto.unix = unix;
	    proto.valueOf = valueOf;
	    proto.creationData = creationData;
	    proto.eraName = getEraName;
	    proto.eraNarrow = getEraNarrow;
	    proto.eraAbbr = getEraAbbr;
	    proto.eraYear = getEraYear;
	    proto.year = getSetYear;
	    proto.isLeapYear = getIsLeapYear;
	    proto.weekYear = getSetWeekYear;
	    proto.isoWeekYear = getSetISOWeekYear;
	    proto.quarter = proto.quarters = getSetQuarter;
	    proto.month = getSetMonth;
	    proto.daysInMonth = getDaysInMonth;
	    proto.week = proto.weeks = getSetWeek;
	    proto.isoWeek = proto.isoWeeks = getSetISOWeek;
	    proto.weeksInYear = getWeeksInYear;
	    proto.weeksInWeekYear = getWeeksInWeekYear;
	    proto.isoWeeksInYear = getISOWeeksInYear;
	    proto.isoWeeksInISOWeekYear = getISOWeeksInISOWeekYear;
	    proto.date = getSetDayOfMonth;
	    proto.day = proto.days = getSetDayOfWeek;
	    proto.weekday = getSetLocaleDayOfWeek;
	    proto.isoWeekday = getSetISODayOfWeek;
	    proto.dayOfYear = getSetDayOfYear;
	    proto.hour = proto.hours = getSetHour;
	    proto.minute = proto.minutes = getSetMinute;
	    proto.second = proto.seconds = getSetSecond;
	    proto.millisecond = proto.milliseconds = getSetMillisecond;
	    proto.utcOffset = getSetOffset;
	    proto.utc = setOffsetToUTC;
	    proto.local = setOffsetToLocal;
	    proto.parseZone = setOffsetToParsedOffset;
	    proto.hasAlignedHourOffset = hasAlignedHourOffset;
	    proto.isDST = isDaylightSavingTime;
	    proto.isLocal = isLocal;
	    proto.isUtcOffset = isUtcOffset;
	    proto.isUtc = isUtc;
	    proto.isUTC = isUtc;
	    proto.zoneAbbr = getZoneAbbr;
	    proto.zoneName = getZoneName;
	    proto.dates = deprecate(
	        'dates accessor is deprecated. Use date instead.',
	        getSetDayOfMonth
	    );
	    proto.months = deprecate(
	        'months accessor is deprecated. Use month instead',
	        getSetMonth
	    );
	    proto.years = deprecate(
	        'years accessor is deprecated. Use year instead',
	        getSetYear
	    );
	    proto.zone = deprecate(
	        'moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/',
	        getSetZone
	    );
	    proto.isDSTShifted = deprecate(
	        'isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information',
	        isDaylightSavingTimeShifted
	    );
	
	    function createUnix(input) {
	        return createLocal(input * 1000);
	    }
	
	    function createInZone() {
	        return createLocal.apply(null, arguments).parseZone();
	    }
	
	    function preParsePostFormat(string) {
	        return string;
	    }
	
	    var proto$1 = Locale.prototype;
	
	    proto$1.calendar = calendar;
	    proto$1.longDateFormat = longDateFormat;
	    proto$1.invalidDate = invalidDate;
	    proto$1.ordinal = ordinal;
	    proto$1.preparse = preParsePostFormat;
	    proto$1.postformat = preParsePostFormat;
	    proto$1.relativeTime = relativeTime;
	    proto$1.pastFuture = pastFuture;
	    proto$1.set = set;
	    proto$1.eras = localeEras;
	    proto$1.erasParse = localeErasParse;
	    proto$1.erasConvertYear = localeErasConvertYear;
	    proto$1.erasAbbrRegex = erasAbbrRegex;
	    proto$1.erasNameRegex = erasNameRegex;
	    proto$1.erasNarrowRegex = erasNarrowRegex;
	
	    proto$1.months = localeMonths;
	    proto$1.monthsShort = localeMonthsShort;
	    proto$1.monthsParse = localeMonthsParse;
	    proto$1.monthsRegex = monthsRegex;
	    proto$1.monthsShortRegex = monthsShortRegex;
	    proto$1.week = localeWeek;
	    proto$1.firstDayOfYear = localeFirstDayOfYear;
	    proto$1.firstDayOfWeek = localeFirstDayOfWeek;
	
	    proto$1.weekdays = localeWeekdays;
	    proto$1.weekdaysMin = localeWeekdaysMin;
	    proto$1.weekdaysShort = localeWeekdaysShort;
	    proto$1.weekdaysParse = localeWeekdaysParse;
	
	    proto$1.weekdaysRegex = weekdaysRegex;
	    proto$1.weekdaysShortRegex = weekdaysShortRegex;
	    proto$1.weekdaysMinRegex = weekdaysMinRegex;
	
	    proto$1.isPM = localeIsPM;
	    proto$1.meridiem = localeMeridiem;
	
	    function get$1(format, index, field, setter) {
	        var locale = getLocale(),
	            utc = createUTC().set(setter, index);
	        return locale[field](utc, format);
	    }
	
	    function listMonthsImpl(format, index, field) {
	        if (isNumber(format)) {
	            index = format;
	            format = undefined;
	        }
	
	        format = format || '';
	
	        if (index != null) {
	            return get$1(format, index, field, 'month');
	        }
	
	        var i,
	            out = [];
	        for (i = 0; i < 12; i++) {
	            out[i] = get$1(format, i, field, 'month');
	        }
	        return out;
	    }
	
	    // ()
	    // (5)
	    // (fmt, 5)
	    // (fmt)
	    // (true)
	    // (true, 5)
	    // (true, fmt, 5)
	    // (true, fmt)
	    function listWeekdaysImpl(localeSorted, format, index, field) {
	        if (typeof localeSorted === 'boolean') {
	            if (isNumber(format)) {
	                index = format;
	                format = undefined;
	            }
	
	            format = format || '';
	        } else {
	            format = localeSorted;
	            index = format;
	            localeSorted = false;
	
	            if (isNumber(format)) {
	                index = format;
	                format = undefined;
	            }
	
	            format = format || '';
	        }
	
	        var locale = getLocale(),
	            shift = localeSorted ? locale._week.dow : 0,
	            i,
	            out = [];
	
	        if (index != null) {
	            return get$1(format, (index + shift) % 7, field, 'day');
	        }
	
	        for (i = 0; i < 7; i++) {
	            out[i] = get$1(format, (i + shift) % 7, field, 'day');
	        }
	        return out;
	    }
	
	    function listMonths(format, index) {
	        return listMonthsImpl(format, index, 'months');
	    }
	
	    function listMonthsShort(format, index) {
	        return listMonthsImpl(format, index, 'monthsShort');
	    }
	
	    function listWeekdays(localeSorted, format, index) {
	        return listWeekdaysImpl(localeSorted, format, index, 'weekdays');
	    }
	
	    function listWeekdaysShort(localeSorted, format, index) {
	        return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');
	    }
	
	    function listWeekdaysMin(localeSorted, format, index) {
	        return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');
	    }
	
	    getSetGlobalLocale('en', {
	        eras: [
	            {
	                since: '0001-01-01',
	                until: +Infinity,
	                offset: 1,
	                name: 'Anno Domini',
	                narrow: 'AD',
	                abbr: 'AD',
	            },
	            {
	                since: '0000-12-31',
	                until: -Infinity,
	                offset: 1,
	                name: 'Before Christ',
	                narrow: 'BC',
	                abbr: 'BC',
	            },
	        ],
	        dayOfMonthOrdinalParse: /\d{1,2}(th|st|nd|rd)/,
	        ordinal: function (number) {
	            var b = number % 10,
	                output =
	                    toInt((number % 100) / 10) === 1
	                        ? 'th'
	                        : b === 1
	                        ? 'st'
	                        : b === 2
	                        ? 'nd'
	                        : b === 3
	                        ? 'rd'
	                        : 'th';
	            return number + output;
	        },
	    });
	
	    // Side effect imports
	
	    hooks.lang = deprecate(
	        'moment.lang is deprecated. Use moment.locale instead.',
	        getSetGlobalLocale
	    );
	    hooks.langData = deprecate(
	        'moment.langData is deprecated. Use moment.localeData instead.',
	        getLocale
	    );
	
	    var mathAbs = Math.abs;
	
	    function abs() {
	        var data = this._data;
	
	        this._milliseconds = mathAbs(this._milliseconds);
	        this._days = mathAbs(this._days);
	        this._months = mathAbs(this._months);
	
	        data.milliseconds = mathAbs(data.milliseconds);
	        data.seconds = mathAbs(data.seconds);
	        data.minutes = mathAbs(data.minutes);
	        data.hours = mathAbs(data.hours);
	        data.months = mathAbs(data.months);
	        data.years = mathAbs(data.years);
	
	        return this;
	    }
	
	    function addSubtract$1(duration, input, value, direction) {
	        var other = createDuration(input, value);
	
	        duration._milliseconds += direction * other._milliseconds;
	        duration._days += direction * other._days;
	        duration._months += direction * other._months;
	
	        return duration._bubble();
	    }
	
	    // supports only 2.0-style add(1, 's') or add(duration)
	    function add$1(input, value) {
	        return addSubtract$1(this, input, value, 1);
	    }
	
	    // supports only 2.0-style subtract(1, 's') or subtract(duration)
	    function subtract$1(input, value) {
	        return addSubtract$1(this, input, value, -1);
	    }
	
	    function absCeil(number) {
	        if (number < 0) {
	            return Math.floor(number);
	        } else {
	            return Math.ceil(number);
	        }
	    }
	
	    function bubble() {
	        var milliseconds = this._milliseconds,
	            days = this._days,
	            months = this._months,
	            data = this._data,
	            seconds,
	            minutes,
	            hours,
	            years,
	            monthsFromDays;
	
	        // if we have a mix of positive and negative values, bubble down first
	        // check: https://github.com/moment/moment/issues/2166
	        if (
	            !(
	                (milliseconds >= 0 && days >= 0 && months >= 0) ||
	                (milliseconds <= 0 && days <= 0 && months <= 0)
	            )
	        ) {
	            milliseconds += absCeil(monthsToDays(months) + days) * 864e5;
	            days = 0;
	            months = 0;
	        }
	
	        // The following code bubbles up values, see the tests for
	        // examples of what that means.
	        data.milliseconds = milliseconds % 1000;
	
	        seconds = absFloor(milliseconds / 1000);
	        data.seconds = seconds % 60;
	
	        minutes = absFloor(seconds / 60);
	        data.minutes = minutes % 60;
	
	        hours = absFloor(minutes / 60);
	        data.hours = hours % 24;
	
	        days += absFloor(hours / 24);
	
	        // convert days to months
	        monthsFromDays = absFloor(daysToMonths(days));
	        months += monthsFromDays;
	        days -= absCeil(monthsToDays(monthsFromDays));
	
	        // 12 months -> 1 year
	        years = absFloor(months / 12);
	        months %= 12;
	
	        data.days = days;
	        data.months = months;
	        data.years = years;
	
	        return this;
	    }
	
	    function daysToMonths(days) {
	        // 400 years have 146097 days (taking into account leap year rules)
	        // 400 years have 12 months === 4800
	        return (days * 4800) / 146097;
	    }
	
	    function monthsToDays(months) {
	        // the reverse of daysToMonths
	        return (months * 146097) / 4800;
	    }
	
	    function as(units) {
	        if (!this.isValid()) {
	            return NaN;
	        }
	        var days,
	            months,
	            milliseconds = this._milliseconds;
	
	        units = normalizeUnits(units);
	
	        if (units === 'month' || units === 'quarter' || units === 'year') {
	            days = this._days + milliseconds / 864e5;
	            months = this._months + daysToMonths(days);
	            switch (units) {
	                case 'month':
	                    return months;
	                case 'quarter':
	                    return months / 3;
	                case 'year':
	                    return months / 12;
	            }
	        } else {
	            // handle milliseconds separately because of floating point math errors (issue #1867)
	            days = this._days + Math.round(monthsToDays(this._months));
	            switch (units) {
	                case 'week':
	                    return days / 7 + milliseconds / 6048e5;
	                case 'day':
	                    return days + milliseconds / 864e5;
	                case 'hour':
	                    return days * 24 + milliseconds / 36e5;
	                case 'minute':
	                    return days * 1440 + milliseconds / 6e4;
	                case 'second':
	                    return days * 86400 + milliseconds / 1000;
	                // Math.floor prevents floating point math errors here
	                case 'millisecond':
	                    return Math.floor(days * 864e5) + milliseconds;
	                default:
	                    throw new Error('Unknown unit ' + units);
	            }
	        }
	    }
	
	    // TODO: Use this.as('ms')?
	    function valueOf$1() {
	        if (!this.isValid()) {
	            return NaN;
	        }
	        return (
	            this._milliseconds +
	            this._days * 864e5 +
	            (this._months % 12) * 2592e6 +
	            toInt(this._months / 12) * 31536e6
	        );
	    }
	
	    function makeAs(alias) {
	        return function () {
	            return this.as(alias);
	        };
	    }
	
	    var asMilliseconds = makeAs('ms'),
	        asSeconds = makeAs('s'),
	        asMinutes = makeAs('m'),
	        asHours = makeAs('h'),
	        asDays = makeAs('d'),
	        asWeeks = makeAs('w'),
	        asMonths = makeAs('M'),
	        asQuarters = makeAs('Q'),
	        asYears = makeAs('y');
	
	    function clone$1() {
	        return createDuration(this);
	    }
	
	    function get$2(units) {
	        units = normalizeUnits(units);
	        return this.isValid() ? this[units + 's']() : NaN;
	    }
	
	    function makeGetter(name) {
	        return function () {
	            return this.isValid() ? this._data[name] : NaN;
	        };
	    }
	
	    var milliseconds = makeGetter('milliseconds'),
	        seconds = makeGetter('seconds'),
	        minutes = makeGetter('minutes'),
	        hours = makeGetter('hours'),
	        days = makeGetter('days'),
	        months = makeGetter('months'),
	        years = makeGetter('years');
	
	    function weeks() {
	        return absFloor(this.days() / 7);
	    }
	
	    var round = Math.round,
	        thresholds = {
	            ss: 44, // a few seconds to seconds
	            s: 45, // seconds to minute
	            m: 45, // minutes to hour
	            h: 22, // hours to day
	            d: 26, // days to month/week
	            w: null, // weeks to month
	            M: 11, // months to year
	        };
	
	    // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize
	    function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {
	        return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);
	    }
	
	    function relativeTime$1(posNegDuration, withoutSuffix, thresholds, locale) {
	        var duration = createDuration(posNegDuration).abs(),
	            seconds = round(duration.as('s')),
	            minutes = round(duration.as('m')),
	            hours = round(duration.as('h')),
	            days = round(duration.as('d')),
	            months = round(duration.as('M')),
	            weeks = round(duration.as('w')),
	            years = round(duration.as('y')),
	            a =
	                (seconds <= thresholds.ss && ['s', seconds]) ||
	                (seconds < thresholds.s && ['ss', seconds]) ||
	                (minutes <= 1 && ['m']) ||
	                (minutes < thresholds.m && ['mm', minutes]) ||
	                (hours <= 1 && ['h']) ||
	                (hours < thresholds.h && ['hh', hours]) ||
	                (days <= 1 && ['d']) ||
	                (days < thresholds.d && ['dd', days]);
	
	        if (thresholds.w != null) {
	            a =
	                a ||
	                (weeks <= 1 && ['w']) ||
	                (weeks < thresholds.w && ['ww', weeks]);
	        }
	        a = a ||
	            (months <= 1 && ['M']) ||
	            (months < thresholds.M && ['MM', months]) ||
	            (years <= 1 && ['y']) || ['yy', years];
	
	        a[2] = withoutSuffix;
	        a[3] = +posNegDuration > 0;
	        a[4] = locale;
	        return substituteTimeAgo.apply(null, a);
	    }
	
	    // This function allows you to set the rounding function for relative time strings
	    function getSetRelativeTimeRounding(roundingFunction) {
	        if (roundingFunction === undefined) {
	            return round;
	        }
	        if (typeof roundingFunction === 'function') {
	            round = roundingFunction;
	            return true;
	        }
	        return false;
	    }
	
	    // This function allows you to set a threshold for relative time strings
	    function getSetRelativeTimeThreshold(threshold, limit) {
	        if (thresholds[threshold] === undefined) {
	            return false;
	        }
	        if (limit === undefined) {
	            return thresholds[threshold];
	        }
	        thresholds[threshold] = limit;
	        if (threshold === 's') {
	            thresholds.ss = limit - 1;
	        }
	        return true;
	    }
	
	    function humanize(argWithSuffix, argThresholds) {
	        if (!this.isValid()) {
	            return this.localeData().invalidDate();
	        }
	
	        var withSuffix = false,
	            th = thresholds,
	            locale,
	            output;
	
	        if (typeof argWithSuffix === 'object') {
	            argThresholds = argWithSuffix;
	            argWithSuffix = false;
	        }
	        if (typeof argWithSuffix === 'boolean') {
	            withSuffix = argWithSuffix;
	        }
	        if (typeof argThresholds === 'object') {
	            th = Object.assign({}, thresholds, argThresholds);
	            if (argThresholds.s != null && argThresholds.ss == null) {
	                th.ss = argThresholds.s - 1;
	            }
	        }
	
	        locale = this.localeData();
	        output = relativeTime$1(this, !withSuffix, th, locale);
	
	        if (withSuffix) {
	            output = locale.pastFuture(+this, output);
	        }
	
	        return locale.postformat(output);
	    }
	
	    var abs$1 = Math.abs;
	
	    function sign(x) {
	        return (x > 0) - (x < 0) || +x;
	    }
	
	    function toISOString$1() {
	        // for ISO strings we do not use the normal bubbling rules:
	        //  * milliseconds bubble up until they become hours
	        //  * days do not bubble at all
	        //  * months bubble up until they become years
	        // This is because there is no context-free conversion between hours and days
	        // (think of clock changes)
	        // and also not between days and months (28-31 days per month)
	        if (!this.isValid()) {
	            return this.localeData().invalidDate();
	        }
	
	        var seconds = abs$1(this._milliseconds) / 1000,
	            days = abs$1(this._days),
	            months = abs$1(this._months),
	            minutes,
	            hours,
	            years,
	            s,
	            total = this.asSeconds(),
	            totalSign,
	            ymSign,
	            daysSign,
	            hmsSign;
	
	        if (!total) {
	            // this is the same as C#'s (Noda) and python (isodate)...
	            // but not other JS (goog.date)
	            return 'P0D';
	        }
	
	        // 3600 seconds -> 60 minutes -> 1 hour
	        minutes = absFloor(seconds / 60);
	        hours = absFloor(minutes / 60);
	        seconds %= 60;
	        minutes %= 60;
	
	        // 12 months -> 1 year
	        years = absFloor(months / 12);
	        months %= 12;
	
	        // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js
	        s = seconds ? seconds.toFixed(3).replace(/\.?0+$/, '') : '';
	
	        totalSign = total < 0 ? '-' : '';
	        ymSign = sign(this._months) !== sign(total) ? '-' : '';
	        daysSign = sign(this._days) !== sign(total) ? '-' : '';
	        hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : '';
	
	        return (
	            totalSign +
	            'P' +
	            (years ? ymSign + years + 'Y' : '') +
	            (months ? ymSign + months + 'M' : '') +
	            (days ? daysSign + days + 'D' : '') +
	            (hours || minutes || seconds ? 'T' : '') +
	            (hours ? hmsSign + hours + 'H' : '') +
	            (minutes ? hmsSign + minutes + 'M' : '') +
	            (seconds ? hmsSign + s + 'S' : '')
	        );
	    }
	
	    var proto$2 = Duration.prototype;
	
	    proto$2.isValid = isValid$1;
	    proto$2.abs = abs;
	    proto$2.add = add$1;
	    proto$2.subtract = subtract$1;
	    proto$2.as = as;
	    proto$2.asMilliseconds = asMilliseconds;
	    proto$2.asSeconds = asSeconds;
	    proto$2.asMinutes = asMinutes;
	    proto$2.asHours = asHours;
	    proto$2.asDays = asDays;
	    proto$2.asWeeks = asWeeks;
	    proto$2.asMonths = asMonths;
	    proto$2.asQuarters = asQuarters;
	    proto$2.asYears = asYears;
	    proto$2.valueOf = valueOf$1;
	    proto$2._bubble = bubble;
	    proto$2.clone = clone$1;
	    proto$2.get = get$2;
	    proto$2.milliseconds = milliseconds;
	    proto$2.seconds = seconds;
	    proto$2.minutes = minutes;
	    proto$2.hours = hours;
	    proto$2.days = days;
	    proto$2.weeks = weeks;
	    proto$2.months = months;
	    proto$2.years = years;
	    proto$2.humanize = humanize;
	    proto$2.toISOString = toISOString$1;
	    proto$2.toString = toISOString$1;
	    proto$2.toJSON = toISOString$1;
	    proto$2.locale = locale;
	    proto$2.localeData = localeData;
	
	    proto$2.toIsoString = deprecate(
	        'toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)',
	        toISOString$1
	    );
	    proto$2.lang = lang;
	
	    // FORMATTING
	
	    addFormatToken('X', 0, 0, 'unix');
	    addFormatToken('x', 0, 0, 'valueOf');
	
	    // PARSING
	
	    addRegexToken('x', matchSigned);
	    addRegexToken('X', matchTimestamp);
	    addParseToken('X', function (input, array, config) {
	        config._d = new Date(parseFloat(input) * 1000);
	    });
	    addParseToken('x', function (input, array, config) {
	        config._d = new Date(toInt(input));
	    });
	
	    //! moment.js
	
	    hooks.version = '2.27.0';
	
	    setHookCallback(createLocal);
	
	    hooks.fn = proto;
	    hooks.min = min;
	    hooks.max = max;
	    hooks.now = now;
	    hooks.utc = createUTC;
	    hooks.unix = createUnix;
	    hooks.months = listMonths;
	    hooks.isDate = isDate;
	    hooks.locale = getSetGlobalLocale;
	    hooks.invalid = createInvalid;
	    hooks.duration = createDuration;
	    hooks.isMoment = isMoment;
	    hooks.weekdays = listWeekdays;
	    hooks.parseZone = createInZone;
	    hooks.localeData = getLocale;
	    hooks.isDuration = isDuration;
	    hooks.monthsShort = listMonthsShort;
	    hooks.weekdaysMin = listWeekdaysMin;
	    hooks.defineLocale = defineLocale;
	    hooks.updateLocale = updateLocale;
	    hooks.locales = listLocales;
	    hooks.weekdaysShort = listWeekdaysShort;
	    hooks.normalizeUnits = normalizeUnits;
	    hooks.relativeTimeRounding = getSetRelativeTimeRounding;
	    hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;
	    hooks.calendarFormat = getCalendarFormat;
	    hooks.prototype = proto;
	
	    // currently HTML5 input type only supports 24-hour formats
	    hooks.HTML5_FMT = {
	        DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm', // <input type="datetime-local" />
	        DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss', // <input type="datetime-local" step="1" />
	        DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS', // <input type="datetime-local" step="0.001" />
	        DATE: 'YYYY-MM-DD', // <input type="date" />
	        TIME: 'HH:mm', // <input type="time" />
	        TIME_SECONDS: 'HH:mm:ss', // <input type="time" step="1" />
	        TIME_MS: 'HH:mm:ss.SSS', // <input type="time" step="0.001" />
	        WEEK: 'GGGG-[W]WW', // <input type="week" />
	        MONTH: 'YYYY-MM', // <input type="month" />
	    };
	
	    return hooks;
	
	})));
	
	/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(520)(module)))

/***/ }),
/* 3 */
/***/ (function(module, exports, __webpack_require__) {

	var global = __webpack_require__(9);
	var core = __webpack_require__(51);
	var hide = __webpack_require__(37);
	var redefine = __webpack_require__(38);
	var ctx = __webpack_require__(52);
	var PROTOTYPE = 'prototype';
	
	var $export = function (type, name, source) {
	  var IS_FORCED = type & $export.F;
	  var IS_GLOBAL = type & $export.G;
	  var IS_STATIC = type & $export.S;
	  var IS_PROTO = type & $export.P;
	  var IS_BIND = type & $export.B;
	  var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];
	  var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});
	  var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});
	  var key, own, out, exp;
	  if (IS_GLOBAL) source = name;
	  for (key in source) {
	    // contains in native
	    own = !IS_FORCED && target && target[key] !== undefined;
	    // export native or passed
	    out = (own ? target : source)[key];
	    // bind timers to global for call from export context
	    exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;
	    // extend global
	    if (target) redefine(target, key, out, type & $export.U);
	    // export
	    if (exports[key] != out) hide(exports, key, exp);
	    if (IS_PROTO && expProto[key] != out) expProto[key] = out;
	  }
	};
	global.core = core;
	// type bitmap
	$export.F = 1;   // forced
	$export.G = 2;   // global
	$export.S = 4;   // static
	$export.P = 8;   // proto
	$export.B = 16;  // bind
	$export.W = 32;  // wrap
	$export.U = 64;  // safe
	$export.R = 128; // real proto method for `library`
	module.exports = $export;


/***/ }),
/* 4 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	exports.boundingExtent = boundingExtent;
	exports.buffer = buffer;
	exports.clone = clone;
	exports.closestSquaredDistanceXY = closestSquaredDistanceXY;
	exports.containsCoordinate = containsCoordinate;
	exports.containsExtent = containsExtent;
	exports.containsXY = containsXY;
	exports.coordinateRelationship = coordinateRelationship;
	exports.createEmpty = createEmpty;
	exports.createOrUpdate = createOrUpdate;
	exports.createOrUpdateEmpty = createOrUpdateEmpty;
	exports.createOrUpdateFromCoordinate = createOrUpdateFromCoordinate;
	exports.createOrUpdateFromCoordinates = createOrUpdateFromCoordinates;
	exports.createOrUpdateFromFlatCoordinates = createOrUpdateFromFlatCoordinates;
	exports.createOrUpdateFromRings = createOrUpdateFromRings;
	exports.equals = equals;
	exports.extend = extend;
	exports.extendCoordinate = extendCoordinate;
	exports.extendCoordinates = extendCoordinates;
	exports.extendFlatCoordinates = extendFlatCoordinates;
	exports.extendRings = extendRings;
	exports.extendXY = extendXY;
	exports.forEachCorner = forEachCorner;
	exports.getArea = getArea;
	exports.getBottomLeft = getBottomLeft;
	exports.getBottomRight = getBottomRight;
	exports.getCenter = getCenter;
	exports.getCorner = getCorner;
	exports.getEnlargedArea = getEnlargedArea;
	exports.getForViewAndSize = getForViewAndSize;
	exports.getHeight = getHeight;
	exports.getIntersectionArea = getIntersectionArea;
	exports.getIntersection = getIntersection;
	exports.getMargin = getMargin;
	exports.getSize = getSize;
	exports.getTopLeft = getTopLeft;
	exports.getTopRight = getTopRight;
	exports.getWidth = getWidth;
	exports.intersects = intersects;
	exports.isEmpty = isEmpty;
	exports.returnOrUpdate = returnOrUpdate;
	exports.scaleFromCenter = scaleFromCenter;
	exports.intersectsSegment = intersectsSegment;
	exports.applyTransform = applyTransform;
	
	var _asserts = __webpack_require__(29);
	
	var _Corner = __webpack_require__(266);
	
	var _Corner2 = _interopRequireDefault(_Corner);
	
	var _Relationship = __webpack_require__(267);
	
	var _Relationship2 = _interopRequireDefault(_Relationship);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	/**
	 * An array of numbers representing an extent: `[minx, miny, maxx, maxy]`.
	 * @typedef {Array<number>} Extent
	 * @api
	 */
	/**
	 * Build an extent that includes all given coordinates.
	 *
	 * @param {Array<import("./coordinate.js").Coordinate>} coordinates Coordinates.
	 * @return {Extent} Bounding extent.
	 * @api
	 */
	function boundingExtent(coordinates) {
	    var extent = createEmpty();
	    for (var i = 0, ii = coordinates.length; i < ii; ++i) {
	        extendCoordinate(extent, coordinates[i]);
	    }
	    return extent;
	}
	/**
	 * @param {Array<number>} xs Xs.
	 * @param {Array<number>} ys Ys.
	 * @param {Extent=} opt_extent Destination extent.
	 * @private
	 * @return {Extent} Extent.
	 */
	/**
	 * @module ol/extent
	 */
	function _boundingExtentXYs(xs, ys, opt_extent) {
	    var minX = Math.min.apply(null, xs);
	    var minY = Math.min.apply(null, ys);
	    var maxX = Math.max.apply(null, xs);
	    var maxY = Math.max.apply(null, ys);
	    return createOrUpdate(minX, minY, maxX, maxY, opt_extent);
	}
	/**
	 * Return extent increased by the provided value.
	 * @param {Extent} extent Extent.
	 * @param {number} value The amount by which the extent should be buffered.
	 * @param {Extent=} opt_extent Extent.
	 * @return {Extent} Extent.
	 * @api
	 */
	function buffer(extent, value, opt_extent) {
	    if (opt_extent) {
	        opt_extent[0] = extent[0] - value;
	        opt_extent[1] = extent[1] - value;
	        opt_extent[2] = extent[2] + value;
	        opt_extent[3] = extent[3] + value;
	        return opt_extent;
	    } else {
	        return [extent[0] - value, extent[1] - value, extent[2] + value, extent[3] + value];
	    }
	}
	/**
	 * Creates a clone of an extent.
	 *
	 * @param {Extent} extent Extent to clone.
	 * @param {Extent=} opt_extent Extent.
	 * @return {Extent} The clone.
	 */
	function clone(extent, opt_extent) {
	    if (opt_extent) {
	        opt_extent[0] = extent[0];
	        opt_extent[1] = extent[1];
	        opt_extent[2] = extent[2];
	        opt_extent[3] = extent[3];
	        return opt_extent;
	    } else {
	        return extent.slice();
	    }
	}
	/**
	 * @param {Extent} extent Extent.
	 * @param {number} x X.
	 * @param {number} y Y.
	 * @return {number} Closest squared distance.
	 */
	function closestSquaredDistanceXY(extent, x, y) {
	    var dx, dy;
	    if (x < extent[0]) {
	        dx = extent[0] - x;
	    } else if (extent[2] < x) {
	        dx = x - extent[2];
	    } else {
	        dx = 0;
	    }
	    if (y < extent[1]) {
	        dy = extent[1] - y;
	    } else if (extent[3] < y) {
	        dy = y - extent[3];
	    } else {
	        dy = 0;
	    }
	    return dx * dx + dy * dy;
	}
	/**
	 * Check if the passed coordinate is contained or on the edge of the extent.
	 *
	 * @param {Extent} extent Extent.
	 * @param {import("./coordinate.js").Coordinate} coordinate Coordinate.
	 * @return {boolean} The coordinate is contained in the extent.
	 * @api
	 */
	function containsCoordinate(extent, coordinate) {
	    return containsXY(extent, coordinate[0], coordinate[1]);
	}
	/**
	 * Check if one extent contains another.
	 *
	 * An extent is deemed contained if it lies completely within the other extent,
	 * including if they share one or more edges.
	 *
	 * @param {Extent} extent1 Extent 1.
	 * @param {Extent} extent2 Extent 2.
	 * @return {boolean} The second extent is contained by or on the edge of the
	 *     first.
	 * @api
	 */
	function containsExtent(extent1, extent2) {
	    return extent1[0] <= extent2[0] && extent2[2] <= extent1[2] && extent1[1] <= extent2[1] && extent2[3] <= extent1[3];
	}
	/**
	 * Check if the passed coordinate is contained or on the edge of the extent.
	 *
	 * @param {Extent} extent Extent.
	 * @param {number} x X coordinate.
	 * @param {number} y Y coordinate.
	 * @return {boolean} The x, y values are contained in the extent.
	 * @api
	 */
	function containsXY(extent, x, y) {
	    return extent[0] <= x && x <= extent[2] && extent[1] <= y && y <= extent[3];
	}
	/**
	 * Get the relationship between a coordinate and extent.
	 * @param {Extent} extent The extent.
	 * @param {import("./coordinate.js").Coordinate} coordinate The coordinate.
	 * @return {Relationship} The relationship (bitwise compare with
	 *     import("./extent/Relationship.js").Relationship).
	 */
	function coordinateRelationship(extent, coordinate) {
	    var minX = extent[0];
	    var minY = extent[1];
	    var maxX = extent[2];
	    var maxY = extent[3];
	    var x = coordinate[0];
	    var y = coordinate[1];
	    var relationship = _Relationship2.default.UNKNOWN;
	    if (x < minX) {
	        relationship = relationship | _Relationship2.default.LEFT;
	    } else if (x > maxX) {
	        relationship = relationship | _Relationship2.default.RIGHT;
	    }
	    if (y < minY) {
	        relationship = relationship | _Relationship2.default.BELOW;
	    } else if (y > maxY) {
	        relationship = relationship | _Relationship2.default.ABOVE;
	    }
	    if (relationship === _Relationship2.default.UNKNOWN) {
	        relationship = _Relationship2.default.INTERSECTING;
	    }
	    return relationship;
	}
	/**
	 * Create an empty extent.
	 * @return {Extent} Empty extent.
	 * @api
	 */
	function createEmpty() {
	    return [Infinity, Infinity, -Infinity, -Infinity];
	}
	/**
	 * Create a new extent or update the provided extent.
	 * @param {number} minX Minimum X.
	 * @param {number} minY Minimum Y.
	 * @param {number} maxX Maximum X.
	 * @param {number} maxY Maximum Y.
	 * @param {Extent=} opt_extent Destination extent.
	 * @return {Extent} Extent.
	 */
	function createOrUpdate(minX, minY, maxX, maxY, opt_extent) {
	    if (opt_extent) {
	        opt_extent[0] = minX;
	        opt_extent[1] = minY;
	        opt_extent[2] = maxX;
	        opt_extent[3] = maxY;
	        return opt_extent;
	    } else {
	        return [minX, minY, maxX, maxY];
	    }
	}
	/**
	 * Create a new empty extent or make the provided one empty.
	 * @param {Extent=} opt_extent Extent.
	 * @return {Extent} Extent.
	 */
	function createOrUpdateEmpty(opt_extent) {
	    return createOrUpdate(Infinity, Infinity, -Infinity, -Infinity, opt_extent);
	}
	/**
	 * @param {import("./coordinate.js").Coordinate} coordinate Coordinate.
	 * @param {Extent=} opt_extent Extent.
	 * @return {Extent} Extent.
	 */
	function createOrUpdateFromCoordinate(coordinate, opt_extent) {
	    var x = coordinate[0];
	    var y = coordinate[1];
	    return createOrUpdate(x, y, x, y, opt_extent);
	}
	/**
	 * @param {Array<import("./coordinate.js").Coordinate>} coordinates Coordinates.
	 * @param {Extent=} opt_extent Extent.
	 * @return {Extent} Extent.
	 */
	function createOrUpdateFromCoordinates(coordinates, opt_extent) {
	    var extent = createOrUpdateEmpty(opt_extent);
	    return extendCoordinates(extent, coordinates);
	}
	/**
	 * @param {Array<number>} flatCoordinates Flat coordinates.
	 * @param {number} offset Offset.
	 * @param {number} end End.
	 * @param {number} stride Stride.
	 * @param {Extent=} opt_extent Extent.
	 * @return {Extent} Extent.
	 */
	function createOrUpdateFromFlatCoordinates(flatCoordinates, offset, end, stride, opt_extent) {
	    var extent = createOrUpdateEmpty(opt_extent);
	    return extendFlatCoordinates(extent, flatCoordinates, offset, end, stride);
	}
	/**
	 * @param {Array<Array<import("./coordinate.js").Coordinate>>} rings Rings.
	 * @param {Extent=} opt_extent Extent.
	 * @return {Extent} Extent.
	 */
	function createOrUpdateFromRings(rings, opt_extent) {
	    var extent = createOrUpdateEmpty(opt_extent);
	    return extendRings(extent, rings);
	}
	/**
	 * Determine if two extents are equivalent.
	 * @param {Extent} extent1 Extent 1.
	 * @param {Extent} extent2 Extent 2.
	 * @return {boolean} The two extents are equivalent.
	 * @api
	 */
	function equals(extent1, extent2) {
	    return extent1[0] == extent2[0] && extent1[2] == extent2[2] && extent1[1] == extent2[1] && extent1[3] == extent2[3];
	}
	/**
	 * Modify an extent to include another extent.
	 * @param {Extent} extent1 The extent to be modified.
	 * @param {Extent} extent2 The extent that will be included in the first.
	 * @return {Extent} A reference to the first (extended) extent.
	 * @api
	 */
	function extend(extent1, extent2) {
	    if (extent2[0] < extent1[0]) {
	        extent1[0] = extent2[0];
	    }
	    if (extent2[2] > extent1[2]) {
	        extent1[2] = extent2[2];
	    }
	    if (extent2[1] < extent1[1]) {
	        extent1[1] = extent2[1];
	    }
	    if (extent2[3] > extent1[3]) {
	        extent1[3] = extent2[3];
	    }
	    return extent1;
	}
	/**
	 * @param {Extent} extent Extent.
	 * @param {import("./coordinate.js").Coordinate} coordinate Coordinate.
	 */
	function extendCoordinate(extent, coordinate) {
	    if (coordinate[0] < extent[0]) {
	        extent[0] = coordinate[0];
	    }
	    if (coordinate[0] > extent[2]) {
	        extent[2] = coordinate[0];
	    }
	    if (coordinate[1] < extent[1]) {
	        extent[1] = coordinate[1];
	    }
	    if (coordinate[1] > extent[3]) {
	        extent[3] = coordinate[1];
	    }
	}
	/**
	 * @param {Extent} extent Extent.
	 * @param {Array<import("./coordinate.js").Coordinate>} coordinates Coordinates.
	 * @return {Extent} Extent.
	 */
	function extendCoordinates(extent, coordinates) {
	    for (var i = 0, ii = coordinates.length; i < ii; ++i) {
	        extendCoordinate(extent, coordinates[i]);
	    }
	    return extent;
	}
	/**
	 * @param {Extent} extent Extent.
	 * @param {Array<number>} flatCoordinates Flat coordinates.
	 * @param {number} offset Offset.
	 * @param {number} end End.
	 * @param {number} stride Stride.
	 * @return {Extent} Extent.
	 */
	function extendFlatCoordinates(extent, flatCoordinates, offset, end, stride) {
	    for (; offset < end; offset += stride) {
	        extendXY(extent, flatCoordinates[offset], flatCoordinates[offset + 1]);
	    }
	    return extent;
	}
	/**
	 * @param {Extent} extent Extent.
	 * @param {Array<Array<import("./coordinate.js").Coordinate>>} rings Rings.
	 * @return {Extent} Extent.
	 */
	function extendRings(extent, rings) {
	    for (var i = 0, ii = rings.length; i < ii; ++i) {
	        extendCoordinates(extent, rings[i]);
	    }
	    return extent;
	}
	/**
	 * @param {Extent} extent Extent.
	 * @param {number} x X.
	 * @param {number} y Y.
	 */
	function extendXY(extent, x, y) {
	    extent[0] = Math.min(extent[0], x);
	    extent[1] = Math.min(extent[1], y);
	    extent[2] = Math.max(extent[2], x);
	    extent[3] = Math.max(extent[3], y);
	}
	/**
	 * This function calls `callback` for each corner of the extent. If the
	 * callback returns a truthy value the function returns that value
	 * immediately. Otherwise the function returns `false`.
	 * @param {Extent} extent Extent.
	 * @param {function(import("./coordinate.js").Coordinate): S} callback Callback.
	 * @return {S|boolean} Value.
	 * @template S
	 */
	function forEachCorner(extent, callback) {
	    var val;
	    val = callback(getBottomLeft(extent));
	    if (val) {
	        return val;
	    }
	    val = callback(getBottomRight(extent));
	    if (val) {
	        return val;
	    }
	    val = callback(getTopRight(extent));
	    if (val) {
	        return val;
	    }
	    val = callback(getTopLeft(extent));
	    if (val) {
	        return val;
	    }
	    return false;
	}
	/**
	 * Get the size of an extent.
	 * @param {Extent} extent Extent.
	 * @return {number} Area.
	 * @api
	 */
	function getArea(extent) {
	    var area = 0;
	    if (!isEmpty(extent)) {
	        area = getWidth(extent) * getHeight(extent);
	    }
	    return area;
	}
	/**
	 * Get the bottom left coordinate of an extent.
	 * @param {Extent} extent Extent.
	 * @return {import("./coordinate.js").Coordinate} Bottom left coordinate.
	 * @api
	 */
	function getBottomLeft(extent) {
	    return [extent[0], extent[1]];
	}
	/**
	 * Get the bottom right coordinate of an extent.
	 * @param {Extent} extent Extent.
	 * @return {import("./coordinate.js").Coordinate} Bottom right coordinate.
	 * @api
	 */
	function getBottomRight(extent) {
	    return [extent[2], extent[1]];
	}
	/**
	 * Get the center coordinate of an extent.
	 * @param {Extent} extent Extent.
	 * @return {import("./coordinate.js").Coordinate} Center.
	 * @api
	 */
	function getCenter(extent) {
	    return [(extent[0] + extent[2]) / 2, (extent[1] + extent[3]) / 2];
	}
	/**
	 * Get a corner coordinate of an extent.
	 * @param {Extent} extent Extent.
	 * @param {Corner} corner Corner.
	 * @return {import("./coordinate.js").Coordinate} Corner coordinate.
	 */
	function getCorner(extent, corner) {
	    var coordinate;
	    if (corner === _Corner2.default.BOTTOM_LEFT) {
	        coordinate = getBottomLeft(extent);
	    } else if (corner === _Corner2.default.BOTTOM_RIGHT) {
	        coordinate = getBottomRight(extent);
	    } else if (corner === _Corner2.default.TOP_LEFT) {
	        coordinate = getTopLeft(extent);
	    } else if (corner === _Corner2.default.TOP_RIGHT) {
	        coordinate = getTopRight(extent);
	    } else {
	        (0, _asserts.assert)(false, 13); // Invalid corner
	    }
	    return coordinate;
	}
	/**
	 * @param {Extent} extent1 Extent 1.
	 * @param {Extent} extent2 Extent 2.
	 * @return {number} Enlarged area.
	 */
	function getEnlargedArea(extent1, extent2) {
	    var minX = Math.min(extent1[0], extent2[0]);
	    var minY = Math.min(extent1[1], extent2[1]);
	    var maxX = Math.max(extent1[2], extent2[2]);
	    var maxY = Math.max(extent1[3], extent2[3]);
	    return (maxX - minX) * (maxY - minY);
	}
	/**
	 * @param {import("./coordinate.js").Coordinate} center Center.
	 * @param {number} resolution Resolution.
	 * @param {number} rotation Rotation.
	 * @param {import("./size.js").Size} size Size.
	 * @param {Extent=} opt_extent Destination extent.
	 * @return {Extent} Extent.
	 */
	function getForViewAndSize(center, resolution, rotation, size, opt_extent) {
	    var dx = resolution * size[0] / 2;
	    var dy = resolution * size[1] / 2;
	    var cosRotation = Math.cos(rotation);
	    var sinRotation = Math.sin(rotation);
	    var xCos = dx * cosRotation;
	    var xSin = dx * sinRotation;
	    var yCos = dy * cosRotation;
	    var ySin = dy * sinRotation;
	    var x = center[0];
	    var y = center[1];
	    var x0 = x - xCos + ySin;
	    var x1 = x - xCos - ySin;
	    var x2 = x + xCos - ySin;
	    var x3 = x + xCos + ySin;
	    var y0 = y - xSin - yCos;
	    var y1 = y - xSin + yCos;
	    var y2 = y + xSin + yCos;
	    var y3 = y + xSin - yCos;
	    return createOrUpdate(Math.min(x0, x1, x2, x3), Math.min(y0, y1, y2, y3), Math.max(x0, x1, x2, x3), Math.max(y0, y1, y2, y3), opt_extent);
	}
	/**
	 * Get the height of an extent.
	 * @param {Extent} extent Extent.
	 * @return {number} Height.
	 * @api
	 */
	function getHeight(extent) {
	    return extent[3] - extent[1];
	}
	/**
	 * @param {Extent} extent1 Extent 1.
	 * @param {Extent} extent2 Extent 2.
	 * @return {number} Intersection area.
	 */
	function getIntersectionArea(extent1, extent2) {
	    var intersection = getIntersection(extent1, extent2);
	    return getArea(intersection);
	}
	/**
	 * Get the intersection of two extents.
	 * @param {Extent} extent1 Extent 1.
	 * @param {Extent} extent2 Extent 2.
	 * @param {Extent=} opt_extent Optional extent to populate with intersection.
	 * @return {Extent} Intersecting extent.
	 * @api
	 */
	function getIntersection(extent1, extent2, opt_extent) {
	    var intersection = opt_extent ? opt_extent : createEmpty();
	    if (intersects(extent1, extent2)) {
	        if (extent1[0] > extent2[0]) {
	            intersection[0] = extent1[0];
	        } else {
	            intersection[0] = extent2[0];
	        }
	        if (extent1[1] > extent2[1]) {
	            intersection[1] = extent1[1];
	        } else {
	            intersection[1] = extent2[1];
	        }
	        if (extent1[2] < extent2[2]) {
	            intersection[2] = extent1[2];
	        } else {
	            intersection[2] = extent2[2];
	        }
	        if (extent1[3] < extent2[3]) {
	            intersection[3] = extent1[3];
	        } else {
	            intersection[3] = extent2[3];
	        }
	    } else {
	        createOrUpdateEmpty(intersection);
	    }
	    return intersection;
	}
	/**
	 * @param {Extent} extent Extent.
	 * @return {number} Margin.
	 */
	function getMargin(extent) {
	    return getWidth(extent) + getHeight(extent);
	}
	/**
	 * Get the size (width, height) of an extent.
	 * @param {Extent} extent The extent.
	 * @return {import("./size.js").Size} The extent size.
	 * @api
	 */
	function getSize(extent) {
	    return [extent[2] - extent[0], extent[3] - extent[1]];
	}
	/**
	 * Get the top left coordinate of an extent.
	 * @param {Extent} extent Extent.
	 * @return {import("./coordinate.js").Coordinate} Top left coordinate.
	 * @api
	 */
	function getTopLeft(extent) {
	    return [extent[0], extent[3]];
	}
	/**
	 * Get the top right coordinate of an extent.
	 * @param {Extent} extent Extent.
	 * @return {import("./coordinate.js").Coordinate} Top right coordinate.
	 * @api
	 */
	function getTopRight(extent) {
	    return [extent[2], extent[3]];
	}
	/**
	 * Get the width of an extent.
	 * @param {Extent} extent Extent.
	 * @return {number} Width.
	 * @api
	 */
	function getWidth(extent) {
	    return extent[2] - extent[0];
	}
	/**
	 * Determine if one extent intersects another.
	 * @param {Extent} extent1 Extent 1.
	 * @param {Extent} extent2 Extent.
	 * @return {boolean} The two extents intersect.
	 * @api
	 */
	function intersects(extent1, extent2) {
	    return extent1[0] <= extent2[2] && extent1[2] >= extent2[0] && extent1[1] <= extent2[3] && extent1[3] >= extent2[1];
	}
	/**
	 * Determine if an extent is empty.
	 * @param {Extent} extent Extent.
	 * @return {boolean} Is empty.
	 * @api
	 */
	function isEmpty(extent) {
	    return extent[2] < extent[0] || extent[3] < extent[1];
	}
	/**
	 * @param {Extent} extent Extent.
	 * @param {Extent=} opt_extent Extent.
	 * @return {Extent} Extent.
	 */
	function returnOrUpdate(extent, opt_extent) {
	    if (opt_extent) {
	        opt_extent[0] = extent[0];
	        opt_extent[1] = extent[1];
	        opt_extent[2] = extent[2];
	        opt_extent[3] = extent[3];
	        return opt_extent;
	    } else {
	        return extent;
	    }
	}
	/**
	 * @param {Extent} extent Extent.
	 * @param {number} value Value.
	 */
	function scaleFromCenter(extent, value) {
	    var deltaX = (extent[2] - extent[0]) / 2 * (value - 1);
	    var deltaY = (extent[3] - extent[1]) / 2 * (value - 1);
	    extent[0] -= deltaX;
	    extent[2] += deltaX;
	    extent[1] -= deltaY;
	    extent[3] += deltaY;
	}
	/**
	 * Determine if the segment between two coordinates intersects (crosses,
	 * touches, or is contained by) the provided extent.
	 * @param {Extent} extent The extent.
	 * @param {import("./coordinate.js").Coordinate} start Segment start coordinate.
	 * @param {import("./coordinate.js").Coordinate} end Segment end coordinate.
	 * @return {boolean} The segment intersects the extent.
	 */
	function intersectsSegment(extent, start, end) {
	    var intersects = false;
	    var startRel = coordinateRelationship(extent, start);
	    var endRel = coordinateRelationship(extent, end);
	    if (startRel === _Relationship2.default.INTERSECTING || endRel === _Relationship2.default.INTERSECTING) {
	        intersects = true;
	    } else {
	        var minX = extent[0];
	        var minY = extent[1];
	        var maxX = extent[2];
	        var maxY = extent[3];
	        var startX = start[0];
	        var startY = start[1];
	        var endX = end[0];
	        var endY = end[1];
	        var slope = (endY - startY) / (endX - startX);
	        var x = void 0,
	            y = void 0;
	        if (!!(endRel & _Relationship2.default.ABOVE) && !(startRel & _Relationship2.default.ABOVE)) {
	            // potentially intersects top
	            x = endX - (endY - maxY) / slope;
	            intersects = x >= minX && x <= maxX;
	        }
	        if (!intersects && !!(endRel & _Relationship2.default.RIGHT) && !(startRel & _Relationship2.default.RIGHT)) {
	            // potentially intersects right
	            y = endY - (endX - maxX) * slope;
	            intersects = y >= minY && y <= maxY;
	        }
	        if (!intersects && !!(endRel & _Relationship2.default.BELOW) && !(startRel & _Relationship2.default.BELOW)) {
	            // potentially intersects bottom
	            x = endX - (endY - minY) / slope;
	            intersects = x >= minX && x <= maxX;
	        }
	        if (!intersects && !!(endRel & _Relationship2.default.LEFT) && !(startRel & _Relationship2.default.LEFT)) {
	            // potentially intersects left
	            y = endY - (endX - minX) * slope;
	            intersects = y >= minY && y <= maxY;
	        }
	    }
	    return intersects;
	}
	/**
	 * Apply a transform function to the extent.
	 * @param {Extent} extent Extent.
	 * @param {import("./proj.js").TransformFunction} transformFn Transform function.
	 * Called with `[minX, minY, maxX, maxY]` extent coordinates.
	 * @param {Extent=} opt_extent Destination extent.
	 * @return {Extent} Extent.
	 * @api
	 */
	function applyTransform(extent, transformFn, opt_extent) {
	    var coordinates = [extent[0], extent[1], extent[0], extent[3], extent[2], extent[1], extent[2], extent[3]];
	    transformFn(coordinates, coordinates, 2);
	    var xs = [coordinates[0], coordinates[2], coordinates[4], coordinates[6]];
	    var ys = [coordinates[1], coordinates[3], coordinates[5], coordinates[7]];
	    return _boundingExtentXYs(xs, ys, opt_extent);
	}
	//# sourceMappingURL=extent.js.map

/***/ }),
/* 5 */
/***/ (function(module, exports, __webpack_require__) {

	// Create a simple path alias to allow browserify to resolve
	// the runtime on a supported path.
	module.exports = __webpack_require__(1031)['default'];


/***/ }),
/* 6 */
/***/ (function(module, exports, __webpack_require__) {

	var isObject = __webpack_require__(15);
	module.exports = function (it) {
	  if (!isObject(it)) throw TypeError(it + ' is not an object!');
	  return it;
	};


/***/ }),
/* 7 */
/***/ (function(module, exports) {

	/*
		MIT License http://www.opensource.org/licenses/mit-license.php
		Author Tobias Koppers @sokra
	*/
	// css base code, injected by the css-loader
	module.exports = function() {
		var list = [];
	
		// return the list of modules as css string
		list.toString = function toString() {
			var result = [];
			for(var i = 0; i < this.length; i++) {
				var item = this[i];
				if(item[2]) {
					result.push("@media " + item[2] + "{" + item[1] + "}");
				} else {
					result.push(item[1]);
				}
			}
			return result.join("");
		};
	
		// import a list of modules into the list
		list.i = function(modules, mediaQuery) {
			if(typeof modules === "string")
				modules = [[null, modules, ""]];
			var alreadyImportedModules = {};
			for(var i = 0; i < this.length; i++) {
				var id = this[i][0];
				if(typeof id === "number")
					alreadyImportedModules[id] = true;
			}
			for(i = 0; i < modules.length; i++) {
				var item = modules[i];
				// skip already imported module
				// this implementation is not 100% perfect for weird media query combinations
				//  when a module is imported multiple times with different media queries.
				//  I hope this will never occur (Hey this way we have smaller bundles)
				if(typeof item[0] !== "number" || !alreadyImportedModules[item[0]]) {
					if(mediaQuery && !item[2]) {
						item[2] = mediaQuery;
					} else if(mediaQuery) {
						item[2] = "(" + item[2] + ") and (" + mediaQuery + ")";
					}
					list.push(item);
				}
			}
		};
		return list;
	};


/***/ }),
/* 8 */
/***/ (function(module, exports, __webpack_require__) {

	/*
		MIT License http://www.opensource.org/licenses/mit-license.php
		Author Tobias Koppers @sokra
	*/
	var stylesInDom = {},
		memoize = function(fn) {
			var memo;
			return function () {
				if (typeof memo === "undefined") memo = fn.apply(this, arguments);
				return memo;
			};
		},
		isOldIE = memoize(function() {
			return /msie [6-9]\b/.test(self.navigator.userAgent.toLowerCase());
		}),
		getHeadElement = memoize(function () {
			return document.head || document.getElementsByTagName("head")[0];
		}),
		singletonElement = null,
		singletonCounter = 0,
		styleElementsInsertedAtTop = [];
	
	module.exports = function(list, options) {
		if(false) {
			if(typeof document !== "object") throw new Error("The style-loader cannot be used in a non-browser environment");
		}
	
		options = options || {};
		// Force single-tag solution on IE6-9, which has a hard limit on the # of <style>
		// tags it will allow on a page
		if (typeof options.singleton === "undefined") options.singleton = isOldIE();
	
		// By default, add <style> tags to the bottom of <head>.
		if (typeof options.insertAt === "undefined") options.insertAt = "bottom";
	
		var styles = listToStyles(list);
		addStylesToDom(styles, options);
	
		return function update(newList) {
			var mayRemove = [];
			for(var i = 0; i < styles.length; i++) {
				var item = styles[i];
				var domStyle = stylesInDom[item.id];
				domStyle.refs--;
				mayRemove.push(domStyle);
			}
			if(newList) {
				var newStyles = listToStyles(newList);
				addStylesToDom(newStyles, options);
			}
			for(var i = 0; i < mayRemove.length; i++) {
				var domStyle = mayRemove[i];
				if(domStyle.refs === 0) {
					for(var j = 0; j < domStyle.parts.length; j++)
						domStyle.parts[j]();
					delete stylesInDom[domStyle.id];
				}
			}
		};
	}
	
	function addStylesToDom(styles, options) {
		for(var i = 0; i < styles.length; i++) {
			var item = styles[i];
			var domStyle = stylesInDom[item.id];
			if(domStyle) {
				domStyle.refs++;
				for(var j = 0; j < domStyle.parts.length; j++) {
					domStyle.parts[j](item.parts[j]);
				}
				for(; j < item.parts.length; j++) {
					domStyle.parts.push(addStyle(item.parts[j], options));
				}
			} else {
				var parts = [];
				for(var j = 0; j < item.parts.length; j++) {
					parts.push(addStyle(item.parts[j], options));
				}
				stylesInDom[item.id] = {id: item.id, refs: 1, parts: parts};
			}
		}
	}
	
	function listToStyles(list) {
		var styles = [];
		var newStyles = {};
		for(var i = 0; i < list.length; i++) {
			var item = list[i];
			var id = item[0];
			var css = item[1];
			var media = item[2];
			var sourceMap = item[3];
			var part = {css: css, media: media, sourceMap: sourceMap};
			if(!newStyles[id])
				styles.push(newStyles[id] = {id: id, parts: [part]});
			else
				newStyles[id].parts.push(part);
		}
		return styles;
	}
	
	function insertStyleElement(options, styleElement) {
		var head = getHeadElement();
		var lastStyleElementInsertedAtTop = styleElementsInsertedAtTop[styleElementsInsertedAtTop.length - 1];
		if (options.insertAt === "top") {
			if(!lastStyleElementInsertedAtTop) {
				head.insertBefore(styleElement, head.firstChild);
			} else if(lastStyleElementInsertedAtTop.nextSibling) {
				head.insertBefore(styleElement, lastStyleElementInsertedAtTop.nextSibling);
			} else {
				head.appendChild(styleElement);
			}
			styleElementsInsertedAtTop.push(styleElement);
		} else if (options.insertAt === "bottom") {
			head.appendChild(styleElement);
		} else {
			throw new Error("Invalid value for parameter 'insertAt'. Must be 'top' or 'bottom'.");
		}
	}
	
	function removeStyleElement(styleElement) {
		styleElement.parentNode.removeChild(styleElement);
		var idx = styleElementsInsertedAtTop.indexOf(styleElement);
		if(idx >= 0) {
			styleElementsInsertedAtTop.splice(idx, 1);
		}
	}
	
	function createStyleElement(options) {
		var styleElement = document.createElement("style");
		styleElement.type = "text/css";
		insertStyleElement(options, styleElement);
		return styleElement;
	}
	
	function createLinkElement(options) {
		var linkElement = document.createElement("link");
		linkElement.rel = "stylesheet";
		insertStyleElement(options, linkElement);
		return linkElement;
	}
	
	function addStyle(obj, options) {
		var styleElement, update, remove;
	
		if (options.singleton) {
			var styleIndex = singletonCounter++;
			styleElement = singletonElement || (singletonElement = createStyleElement(options));
			update = applyToSingletonTag.bind(null, styleElement, styleIndex, false);
			remove = applyToSingletonTag.bind(null, styleElement, styleIndex, true);
		} else if(obj.sourceMap &&
			typeof URL === "function" &&
			typeof URL.createObjectURL === "function" &&
			typeof URL.revokeObjectURL === "function" &&
			typeof Blob === "function" &&
			typeof btoa === "function") {
			styleElement = createLinkElement(options);
			update = updateLink.bind(null, styleElement);
			remove = function() {
				removeStyleElement(styleElement);
				if(styleElement.href)
					URL.revokeObjectURL(styleElement.href);
			};
		} else {
			styleElement = createStyleElement(options);
			update = applyToTag.bind(null, styleElement);
			remove = function() {
				removeStyleElement(styleElement);
			};
		}
	
		update(obj);
	
		return function updateStyle(newObj) {
			if(newObj) {
				if(newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap)
					return;
				update(obj = newObj);
			} else {
				remove();
			}
		};
	}
	
	var replaceText = (function () {
		var textStore = [];
	
		return function (index, replacement) {
			textStore[index] = replacement;
			return textStore.filter(Boolean).join('\n');
		};
	})();
	
	function applyToSingletonTag(styleElement, index, remove, obj) {
		var css = remove ? "" : obj.css;
	
		if (styleElement.styleSheet) {
			styleElement.styleSheet.cssText = replaceText(index, css);
		} else {
			var cssNode = document.createTextNode(css);
			var childNodes = styleElement.childNodes;
			if (childNodes[index]) styleElement.removeChild(childNodes[index]);
			if (childNodes.length) {
				styleElement.insertBefore(cssNode, childNodes[index]);
			} else {
				styleElement.appendChild(cssNode);
			}
		}
	}
	
	function applyToTag(styleElement, obj) {
		var css = obj.css;
		var media = obj.media;
	
		if(media) {
			styleElement.setAttribute("media", media)
		}
	
		if(styleElement.styleSheet) {
			styleElement.styleSheet.cssText = css;
		} else {
			while(styleElement.firstChild) {
				styleElement.removeChild(styleElement.firstChild);
			}
			styleElement.appendChild(document.createTextNode(css));
		}
	}
	
	function updateLink(linkElement, obj) {
		var css = obj.css;
		var sourceMap = obj.sourceMap;
	
		if(sourceMap) {
			// http://stackoverflow.com/a/26603875
			css += "\n/*# sourceMappingURL=data:application/json;base64," + btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))) + " */";
		}
	
		var blob = new Blob([css], { type: "text/css" });
	
		var oldSrc = linkElement.href;
	
		linkElement.href = URL.createObjectURL(blob);
	
		if(oldSrc)
			URL.revokeObjectURL(oldSrc);
	}


/***/ }),
/* 9 */
/***/ (function(module, exports) {

	// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028
	var global = module.exports = typeof window != 'undefined' && window.Math == Math
	  ? window : typeof self != 'undefined' && self.Math == Math ? self
	  // eslint-disable-next-line no-new-func
	  : Function('return this')();
	if (typeof __g == 'number') __g = global; // eslint-disable-line no-undef


/***/ }),
/* 10 */
/***/ (function(module, exports) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	/**
	 * @module ol/events/EventType
	 */
	/**
	 * @enum {string}
	 * @const
	 */
	exports.default = {
	  /**
	   * Generic change event. Triggered when the revision counter is increased.
	   * @event module:ol/events/Event~BaseEvent#change
	   * @api
	   */
	  CHANGE: 'change',
	  /**
	   * Generic error event. Triggered when an error occurs.
	   * @event module:ol/events/Event~BaseEvent#error
	   * @api
	   */
	  ERROR: 'error',
	  BLUR: 'blur',
	  CLEAR: 'clear',
	  CONTEXTMENU: 'contextmenu',
	  CLICK: 'click',
	  DBLCLICK: 'dblclick',
	  DRAGENTER: 'dragenter',
	  DRAGOVER: 'dragover',
	  DROP: 'drop',
	  FOCUS: 'focus',
	  KEYDOWN: 'keydown',
	  KEYPRESS: 'keypress',
	  LOAD: 'load',
	  RESIZE: 'resize',
	  WHEEL: 'wheel'
	};
	//# sourceMappingURL=EventType.js.map

/***/ }),
/* 11 */
/***/ (function(module, exports, __webpack_require__) {

	var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;// MarionetteJS (Backbone.Marionette)
	// ----------------------------------
	// v2.4.7
	//
	// Copyright (c)2016 Derick Bailey, Muted Solutions, LLC.
	// Distributed under MIT license
	//
	// http://marionettejs.com
	
	(function(root, factory) {
	
	  if (true) {
	    !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(24), __webpack_require__(33), __webpack_require__(695), __webpack_require__(694)], __WEBPACK_AMD_DEFINE_RESULT__ = function(Backbone, _) {
	      return (root.Marionette = root.Mn = factory(root, Backbone, _));
	    }.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
	  } else if (typeof exports !== 'undefined') {
	    var Backbone = require('backbone');
	    var _ = require('underscore');
	    var Wreqr = require('backbone.wreqr');
	    var BabySitter = require('backbone.babysitter');
	    module.exports = factory(root, Backbone, _);
	  } else {
	    root.Marionette = root.Mn = factory(root, root.Backbone, root._);
	  }
	
	}(this, function(root, Backbone, _) {
	  'use strict';
	
	  var previousMarionette = root.Marionette;
	  var previousMn = root.Mn;
	
	  var Marionette = Backbone.Marionette = {};
	
	  Marionette.VERSION = '2.4.7';
	
	  Marionette.noConflict = function() {
	    root.Marionette = previousMarionette;
	    root.Mn = previousMn;
	    return this;
	  };
	
	  // Get the Deferred creator for later use
	  Marionette.Deferred = Backbone.$.Deferred;
	
	  Marionette.FEATURES = {
	  };
	  
	  Marionette.isEnabled = function(name) {
	    return !!Marionette.FEATURES[name];
	  };
	  
	  /* jshint unused: false *//* global console */
	  
	  // Helpers
	  // -------
	  
	  // Marionette.extend
	  // -----------------
	  
	  // Borrow the Backbone `extend` method so we can use it as needed
	  Marionette.extend = Backbone.Model.extend;
	  
	  // Marionette.isNodeAttached
	  // -------------------------
	  
	  // Determine if `el` is a child of the document
	  Marionette.isNodeAttached = function(el) {
	    return Backbone.$.contains(document.documentElement, el);
	  };
	  
	  // Merge `keys` from `options` onto `this`
	  Marionette.mergeOptions = function(options, keys) {
	    if (!options) { return; }
	    _.extend(this, _.pick(options, keys));
	  };
	  
	  // Marionette.getOption
	  // --------------------
	  
	  // Retrieve an object, function or other value from a target
	  // object or its `options`, with `options` taking precedence.
	  Marionette.getOption = function(target, optionName) {
	    if (!target || !optionName) { return; }
	    if (target.options && (target.options[optionName] !== undefined)) {
	      return target.options[optionName];
	    } else {
	      return target[optionName];
	    }
	  };
	  
	  // Proxy `Marionette.getOption`
	  Marionette.proxyGetOption = function(optionName) {
	    return Marionette.getOption(this, optionName);
	  };
	  
	  // Similar to `_.result`, this is a simple helper
	  // If a function is provided we call it with context
	  // otherwise just return the value. If the value is
	  // undefined return a default value
	  Marionette._getValue = function(value, context, params) {
	    if (_.isFunction(value)) {
	      value = params ? value.apply(context, params) : value.call(context);
	    }
	    return value;
	  };
	  
	  // Marionette.normalizeMethods
	  // ----------------------
	  
	  // Pass in a mapping of events => functions or function names
	  // and return a mapping of events => functions
	  Marionette.normalizeMethods = function(hash) {
	    return _.reduce(hash, function(normalizedHash, method, name) {
	      if (!_.isFunction(method)) {
	        method = this[method];
	      }
	      if (method) {
	        normalizedHash[name] = method;
	      }
	      return normalizedHash;
	    }, {}, this);
	  };
	  
	  // utility method for parsing @ui. syntax strings
	  // into associated selector
	  Marionette.normalizeUIString = function(uiString, ui) {
	    return uiString.replace(/@ui\.[a-zA-Z-_$0-9]*/g, function(r) {
	      return ui[r.slice(4)];
	    });
	  };
	  
	  // allows for the use of the @ui. syntax within
	  // a given key for triggers and events
	  // swaps the @ui with the associated selector.
	  // Returns a new, non-mutated, parsed events hash.
	  Marionette.normalizeUIKeys = function(hash, ui) {
	    return _.reduce(hash, function(memo, val, key) {
	      var normalizedKey = Marionette.normalizeUIString(key, ui);
	      memo[normalizedKey] = val;
	      return memo;
	    }, {});
	  };
	  
	  // allows for the use of the @ui. syntax within
	  // a given value for regions
	  // swaps the @ui with the associated selector
	  Marionette.normalizeUIValues = function(hash, ui, properties) {
	    _.each(hash, function(val, key) {
	      if (_.isString(val)) {
	        hash[key] = Marionette.normalizeUIString(val, ui);
	      } else if (_.isObject(val) && _.isArray(properties)) {
	        _.extend(val, Marionette.normalizeUIValues(_.pick(val, properties), ui));
	        /* Value is an object, and we got an array of embedded property names to normalize. */
	        _.each(properties, function(property) {
	          var propertyVal = val[property];
	          if (_.isString(propertyVal)) {
	            val[property] = Marionette.normalizeUIString(propertyVal, ui);
	          }
	        });
	      }
	    });
	    return hash;
	  };
	  
	  // Mix in methods from Underscore, for iteration, and other
	  // collection related features.
	  // Borrowing this code from Backbone.Collection:
	  // http://backbonejs.org/docs/backbone.html#section-121
	  Marionette.actAsCollection = function(object, listProperty) {
	    var methods = ['forEach', 'each', 'map', 'find', 'detect', 'filter',
	      'select', 'reject', 'every', 'all', 'some', 'any', 'include',
	      'contains', 'invoke', 'toArray', 'first', 'initial', 'rest',
	      'last', 'without', 'isEmpty', 'pluck'];
	  
	    _.each(methods, function(method) {
	      object[method] = function() {
	        var list = _.values(_.result(this, listProperty));
	        var args = [list].concat(_.toArray(arguments));
	        return _[method].apply(_, args);
	      };
	    });
	  };
	  
	  var deprecate = Marionette.deprecate = function(message, test) {
	    if (_.isObject(message)) {
	      message = (
	        message.prev + ' is going to be removed in the future. ' +
	        'Please use ' + message.next + ' instead.' +
	        (message.url ? ' See: ' + message.url : '')
	      );
	    }
	  
	    if ((test === undefined || !test) && !deprecate._cache[message]) {
	      deprecate._warn('Deprecation warning: ' + message);
	      deprecate._cache[message] = true;
	    }
	  };
	  
	  deprecate._console = typeof console !== 'undefined' ? console : {};
	  deprecate._warn = function() {
	    var warn = deprecate._console.warn || deprecate._console.log || function() {};
	    return warn.apply(deprecate._console, arguments);
	  };
	  deprecate._cache = {};
	  
	  /* jshint maxstatements: 14, maxcomplexity: 7 */
	  
	  // Trigger Method
	  // --------------
	  
	  Marionette._triggerMethod = (function() {
	    // split the event name on the ":"
	    var splitter = /(^|:)(\w)/gi;
	  
	    // take the event section ("section1:section2:section3")
	    // and turn it in to uppercase name
	    function getEventName(match, prefix, eventName) {
	      return eventName.toUpperCase();
	    }
	  
	    return function(context, event, args) {
	      var noEventArg = arguments.length < 3;
	      if (noEventArg) {
	        args = event;
	        event = args[0];
	      }
	  
	      // get the method name from the event name
	      var methodName = 'on' + event.replace(splitter, getEventName);
	      var method = context[methodName];
	      var result;
	  
	      // call the onMethodName if it exists
	      if (_.isFunction(method)) {
	        // pass all args, except the event name
	        result = method.apply(context, noEventArg ? _.rest(args) : args);
	      }
	  
	      // trigger the event, if a trigger method exists
	      if (_.isFunction(context.trigger)) {
	        if (noEventArg + args.length > 1) {
	          context.trigger.apply(context, noEventArg ? args : [event].concat(_.drop(args, 0)));
	        } else {
	          context.trigger(event);
	        }
	      }
	  
	      return result;
	    };
	  })();
	  
	  // Trigger an event and/or a corresponding method name. Examples:
	  //
	  // `this.triggerMethod("foo")` will trigger the "foo" event and
	  // call the "onFoo" method.
	  //
	  // `this.triggerMethod("foo:bar")` will trigger the "foo:bar" event and
	  // call the "onFooBar" method.
	  Marionette.triggerMethod = function(event) {
	    return Marionette._triggerMethod(this, arguments);
	  };
	  
	  // triggerMethodOn invokes triggerMethod on a specific context
	  //
	  // e.g. `Marionette.triggerMethodOn(view, 'show')`
	  // will trigger a "show" event or invoke onShow the view.
	  Marionette.triggerMethodOn = function(context) {
	    var fnc = _.isFunction(context.triggerMethod) ?
	                  context.triggerMethod :
	                  Marionette.triggerMethod;
	  
	    return fnc.apply(context, _.rest(arguments));
	  };
	  
	  // DOM Refresh
	  // -----------
	  
	  // Monitor a view's state, and after it has been rendered and shown
	  // in the DOM, trigger a "dom:refresh" event every time it is
	  // re-rendered.
	  
	  Marionette.MonitorDOMRefresh = function(view) {
	    if (view._isDomRefreshMonitored) { return; }
	    view._isDomRefreshMonitored = true;
	  
	    // track when the view has been shown in the DOM,
	    // using a Marionette.Region (or by other means of triggering "show")
	    function handleShow() {
	      view._isShown = true;
	      triggerDOMRefresh();
	    }
	  
	    // track when the view has been rendered
	    function handleRender() {
	      view._isRendered = true;
	      triggerDOMRefresh();
	    }
	  
	    // Trigger the "dom:refresh" event and corresponding "onDomRefresh" method
	    function triggerDOMRefresh() {
	      if (view._isShown && view._isRendered && Marionette.isNodeAttached(view.el)) {
	        Marionette.triggerMethodOn(view, 'dom:refresh', view);
	      }
	    }
	  
	    view.on({
	      show: handleShow,
	      render: handleRender
	    });
	  };
	  
	  /* jshint maxparams: 5 */
	  
	  // Bind Entity Events & Unbind Entity Events
	  // -----------------------------------------
	  //
	  // These methods are used to bind/unbind a backbone "entity" (e.g. collection/model)
	  // to methods on a target object.
	  //
	  // The first parameter, `target`, must have the Backbone.Events module mixed in.
	  //
	  // The second parameter is the `entity` (Backbone.Model, Backbone.Collection or
	  // any object that has Backbone.Events mixed in) to bind the events from.
	  //
	  // The third parameter is a hash of { "event:name": "eventHandler" }
	  // configuration. Multiple handlers can be separated by a space. A
	  // function can be supplied instead of a string handler name.
	  
	  (function(Marionette) {
	    'use strict';
	  
	    // Bind the event to handlers specified as a string of
	    // handler names on the target object
	    function bindFromStrings(target, entity, evt, methods) {
	      var methodNames = methods.split(/\s+/);
	  
	      _.each(methodNames, function(methodName) {
	  
	        var method = target[methodName];
	        if (!method) {
	          throw new Marionette.Error('Method "' + methodName +
	            '" was configured as an event handler, but does not exist.');
	        }
	  
	        target.listenTo(entity, evt, method);
	      });
	    }
	  
	    // Bind the event to a supplied callback function
	    function bindToFunction(target, entity, evt, method) {
	      target.listenTo(entity, evt, method);
	    }
	  
	    // Bind the event to handlers specified as a string of
	    // handler names on the target object
	    function unbindFromStrings(target, entity, evt, methods) {
	      var methodNames = methods.split(/\s+/);
	  
	      _.each(methodNames, function(methodName) {
	        var method = target[methodName];
	        target.stopListening(entity, evt, method);
	      });
	    }
	  
	    // Bind the event to a supplied callback function
	    function unbindToFunction(target, entity, evt, method) {
	      target.stopListening(entity, evt, method);
	    }
	  
	    // generic looping function
	    function iterateEvents(target, entity, bindings, functionCallback, stringCallback) {
	      if (!entity || !bindings) { return; }
	  
	      // type-check bindings
	      if (!_.isObject(bindings)) {
	        throw new Marionette.Error({
	          message: 'Bindings must be an object or function.',
	          url: 'marionette.functions.html#marionettebindentityevents'
	        });
	      }
	  
	      // allow the bindings to be a function
	      bindings = Marionette._getValue(bindings, target);
	  
	      // iterate the bindings and bind them
	      _.each(bindings, function(methods, evt) {
	  
	        // allow for a function as the handler,
	        // or a list of event names as a string
	        if (_.isFunction(methods)) {
	          functionCallback(target, entity, evt, methods);
	        } else {
	          stringCallback(target, entity, evt, methods);
	        }
	  
	      });
	    }
	  
	    // Export Public API
	    Marionette.bindEntityEvents = function(target, entity, bindings) {
	      iterateEvents(target, entity, bindings, bindToFunction, bindFromStrings);
	    };
	  
	    Marionette.unbindEntityEvents = function(target, entity, bindings) {
	      iterateEvents(target, entity, bindings, unbindToFunction, unbindFromStrings);
	    };
	  
	    // Proxy `bindEntityEvents`
	    Marionette.proxyBindEntityEvents = function(entity, bindings) {
	      return Marionette.bindEntityEvents(this, entity, bindings);
	    };
	  
	    // Proxy `unbindEntityEvents`
	    Marionette.proxyUnbindEntityEvents = function(entity, bindings) {
	      return Marionette.unbindEntityEvents(this, entity, bindings);
	    };
	  })(Marionette);
	  
	
	  // Error
	  // -----
	  
	  var errorProps = ['description', 'fileName', 'lineNumber', 'name', 'message', 'number'];
	  
	  Marionette.Error = Marionette.extend.call(Error, {
	    urlRoot: 'http://marionettejs.com/docs/v' + Marionette.VERSION + '/',
	  
	    constructor: function(message, options) {
	      if (_.isObject(message)) {
	        options = message;
	        message = options.message;
	      } else if (!options) {
	        options = {};
	      }
	  
	      var error = Error.call(this, message);
	      _.extend(this, _.pick(error, errorProps), _.pick(options, errorProps));
	  
	      this.captureStackTrace();
	  
	      if (options.url) {
	        this.url = this.urlRoot + options.url;
	      }
	    },
	  
	    captureStackTrace: function() {
	      if (Error.captureStackTrace) {
	        Error.captureStackTrace(this, Marionette.Error);
	      }
	    },
	  
	    toString: function() {
	      return this.name + ': ' + this.message + (this.url ? ' See: ' + this.url : '');
	    }
	  });
	  
	  Marionette.Error.extend = Marionette.extend;
	  
	  // Callbacks
	  // ---------
	  
	  // A simple way of managing a collection of callbacks
	  // and executing them at a later point in time, using jQuery's
	  // `Deferred` object.
	  Marionette.Callbacks = function() {
	    this._deferred = Marionette.Deferred();
	    this._callbacks = [];
	  };
	  
	  _.extend(Marionette.Callbacks.prototype, {
	  
	    // Add a callback to be executed. Callbacks added here are
	    // guaranteed to execute, even if they are added after the
	    // `run` method is called.
	    add: function(callback, contextOverride) {
	      var promise = _.result(this._deferred, 'promise');
	  
	      this._callbacks.push({cb: callback, ctx: contextOverride});
	  
	      promise.then(function(args) {
	        if (contextOverride) { args.context = contextOverride; }
	        callback.call(args.context, args.options);
	      });
	    },
	  
	    // Run all registered callbacks with the context specified.
	    // Additional callbacks can be added after this has been run
	    // and they will still be executed.
	    run: function(options, context) {
	      this._deferred.resolve({
	        options: options,
	        context: context
	      });
	    },
	  
	    // Resets the list of callbacks to be run, allowing the same list
	    // to be run multiple times - whenever the `run` method is called.
	    reset: function() {
	      var callbacks = this._callbacks;
	      this._deferred = Marionette.Deferred();
	      this._callbacks = [];
	  
	      _.each(callbacks, function(cb) {
	        this.add(cb.cb, cb.ctx);
	      }, this);
	    }
	  });
	  
	  // Controller
	  // ----------
	  
	  // A multi-purpose object to use as a controller for
	  // modules and routers, and as a mediator for workflow
	  // and coordination of other objects, views, and more.
	  Marionette.Controller = function(options) {
	    this.options = options || {};
	  
	    if (_.isFunction(this.initialize)) {
	      this.initialize(this.options);
	    }
	  };
	  
	  Marionette.Controller.extend = Marionette.extend;
	  
	  // Controller Methods
	  // --------------
	  
	  // Ensure it can trigger events with Backbone.Events
	  _.extend(Marionette.Controller.prototype, Backbone.Events, {
	    destroy: function() {
	      Marionette._triggerMethod(this, 'before:destroy', arguments);
	      Marionette._triggerMethod(this, 'destroy', arguments);
	  
	      this.stopListening();
	      this.off();
	      return this;
	    },
	  
	    // import the `triggerMethod` to trigger events with corresponding
	    // methods if the method exists
	    triggerMethod: Marionette.triggerMethod,
	  
	    // A handy way to merge options onto the instance
	    mergeOptions: Marionette.mergeOptions,
	  
	    // Proxy `getOption` to enable getting options from this or this.options by name.
	    getOption: Marionette.proxyGetOption
	  
	  });
	  
	  // Object
	  // ------
	  
	  // A Base Class that other Classes should descend from.
	  // Object borrows many conventions and utilities from Backbone.
	  Marionette.Object = function(options) {
	    this.options = _.extend({}, _.result(this, 'options'), options);
	  
	    this.initialize.apply(this, arguments);
	  };
	  
	  Marionette.Object.extend = Marionette.extend;
	  
	  // Object Methods
	  // --------------
	  
	  // Ensure it can trigger events with Backbone.Events
	  _.extend(Marionette.Object.prototype, Backbone.Events, {
	  
	    //this is a noop method intended to be overridden by classes that extend from this base
	    initialize: function() {},
	  
	    destroy: function(options) {
	      options = options || {};
	  
	      this.triggerMethod('before:destroy', options);
	      this.triggerMethod('destroy', options);
	      this.stopListening();
	  
	      return this;
	    },
	  
	    // Import the `triggerMethod` to trigger events with corresponding
	    // methods if the method exists
	    triggerMethod: Marionette.triggerMethod,
	  
	    // A handy way to merge options onto the instance
	    mergeOptions: Marionette.mergeOptions,
	  
	    // Proxy `getOption` to enable getting options from this or this.options by name.
	    getOption: Marionette.proxyGetOption,
	  
	    // Proxy `bindEntityEvents` to enable binding view's events from another entity.
	    bindEntityEvents: Marionette.proxyBindEntityEvents,
	  
	    // Proxy `unbindEntityEvents` to enable unbinding view's events from another entity.
	    unbindEntityEvents: Marionette.proxyUnbindEntityEvents
	  });
	  
	  /* jshint maxcomplexity: 16, maxstatements: 45, maxlen: 120 */
	  
	  // Region
	  // ------
	  
	  // Manage the visual regions of your composite application. See
	  // http://lostechies.com/derickbailey/2011/12/12/composite-js-apps-regions-and-region-managers/
	  
	  Marionette.Region = Marionette.Object.extend({
	    constructor: function(options) {
	  
	      // set options temporarily so that we can get `el`.
	      // options will be overriden by Object.constructor
	      this.options = options || {};
	      this.el = this.getOption('el');
	  
	      // Handle when this.el is passed in as a $ wrapped element.
	      this.el = this.el instanceof Backbone.$ ? this.el[0] : this.el;
	  
	      if (!this.el) {
	        throw new Marionette.Error({
	          name: 'NoElError',
	          message: 'An "el" must be specified for a region.'
	        });
	      }
	  
	      this.$el = this.getEl(this.el);
	      Marionette.Object.call(this, options);
	    },
	  
	    // Displays a backbone view instance inside of the region.
	    // Handles calling the `render` method for you. Reads content
	    // directly from the `el` attribute. Also calls an optional
	    // `onShow` and `onDestroy` method on your view, just after showing
	    // or just before destroying the view, respectively.
	    // The `preventDestroy` option can be used to prevent a view from
	    // the old view being destroyed on show.
	    // The `forceShow` option can be used to force a view to be
	    // re-rendered if it's already shown in the region.
	    show: function(view, options) {
	      if (!this._ensureElement()) {
	        return;
	      }
	  
	      this._ensureViewIsIntact(view);
	      Marionette.MonitorDOMRefresh(view);
	  
	      var showOptions     = options || {};
	      var isDifferentView = view !== this.currentView;
	      var preventDestroy  = !!showOptions.preventDestroy;
	      var forceShow       = !!showOptions.forceShow;
	  
	      // We are only changing the view if there is a current view to change to begin with
	      var isChangingView = !!this.currentView;
	  
	      // Only destroy the current view if we don't want to `preventDestroy` and if
	      // the view given in the first argument is different than `currentView`
	      var _shouldDestroyView = isDifferentView && !preventDestroy;
	  
	      // Only show the view given in the first argument if it is different than
	      // the current view or if we want to re-show the view. Note that if
	      // `_shouldDestroyView` is true, then `_shouldShowView` is also necessarily true.
	      var _shouldShowView = isDifferentView || forceShow;
	  
	      if (isChangingView) {
	        this.triggerMethod('before:swapOut', this.currentView, this, options);
	      }
	  
	      if (this.currentView && isDifferentView) {
	        delete this.currentView._parent;
	      }
	  
	      if (_shouldDestroyView) {
	        this.empty();
	  
	      // A `destroy` event is attached to the clean up manually removed views.
	      // We need to detach this event when a new view is going to be shown as it
	      // is no longer relevant.
	      } else if (isChangingView && _shouldShowView) {
	        this.currentView.off('destroy', this.empty, this);
	      }
	  
	      if (_shouldShowView) {
	  
	        // We need to listen for if a view is destroyed
	        // in a way other than through the region.
	        // If this happens we need to remove the reference
	        // to the currentView since once a view has been destroyed
	        // we can not reuse it.
	        view.once('destroy', this.empty, this);
	  
	        // make this region the view's parent,
	        // It's important that this parent binding happens before rendering
	        // so that any events the child may trigger during render can also be
	        // triggered on the child's ancestor views
	        view._parent = this;
	        this._renderView(view);
	  
	        if (isChangingView) {
	          this.triggerMethod('before:swap', view, this, options);
	        }
	  
	        this.triggerMethod('before:show', view, this, options);
	        Marionette.triggerMethodOn(view, 'before:show', view, this, options);
	  
	        if (isChangingView) {
	          this.triggerMethod('swapOut', this.currentView, this, options);
	        }
	  
	        // An array of views that we're about to display
	        var attachedRegion = Marionette.isNodeAttached(this.el);
	  
	        // The views that we're about to attach to the document
	        // It's important that we prevent _getNestedViews from being executed unnecessarily
	        // as it's a potentially-slow method
	        var displayedViews = [];
	  
	        var attachOptions = _.extend({
	          triggerBeforeAttach: this.triggerBeforeAttach,
	          triggerAttach: this.triggerAttach
	        }, showOptions);
	  
	        if (attachedRegion && attachOptions.triggerBeforeAttach) {
	          displayedViews = this._displayedViews(view);
	          this._triggerAttach(displayedViews, 'before:');
	        }
	  
	        this.attachHtml(view);
	        this.currentView = view;
	  
	        if (attachedRegion && attachOptions.triggerAttach) {
	          displayedViews = this._displayedViews(view);
	          this._triggerAttach(displayedViews);
	        }
	  
	        if (isChangingView) {
	          this.triggerMethod('swap', view, this, options);
	        }
	  
	        this.triggerMethod('show', view, this, options);
	        Marionette.triggerMethodOn(view, 'show', view, this, options);
	  
	        return this;
	      }
	  
	      return this;
	    },
	  
	    triggerBeforeAttach: true,
	    triggerAttach: true,
	  
	    _triggerAttach: function(views, prefix) {
	      var eventName = (prefix || '') + 'attach';
	      _.each(views, function(view) {
	        Marionette.triggerMethodOn(view, eventName, view, this);
	      }, this);
	    },
	  
	    _displayedViews: function(view) {
	      return _.union([view], _.result(view, '_getNestedViews') || []);
	    },
	  
	    _renderView: function(view) {
	      if (!view.supportsRenderLifecycle) {
	        Marionette.triggerMethodOn(view, 'before:render', view);
	      }
	      view.render();
	      if (!view.supportsRenderLifecycle) {
	        Marionette.triggerMethodOn(view, 'render', view);
	      }
	    },
	  
	    _ensureElement: function() {
	      if (!_.isObject(this.el)) {
	        this.$el = this.getEl(this.el);
	        this.el = this.$el[0];
	      }
	  
	      if (!this.$el || this.$el.length === 0) {
	        if (this.getOption('allowMissingEl')) {
	          return false;
	        } else {
	          throw new Marionette.Error('An "el" ' + this.$el.selector + ' must exist in DOM');
	        }
	      }
	      return true;
	    },
	  
	    _ensureViewIsIntact: function(view) {
	      if (!view) {
	        throw new Marionette.Error({
	          name: 'ViewNotValid',
	          message: 'The view passed is undefined and therefore invalid. You must pass a view instance to show.'
	        });
	      }
	  
	      if (view.isDestroyed) {
	        throw new Marionette.Error({
	          name: 'ViewDestroyedError',
	          message: 'View (cid: "' + view.cid + '") has already been destroyed and cannot be used.'
	        });
	      }
	    },
	  
	    // Override this method to change how the region finds the DOM
	    // element that it manages. Return a jQuery selector object scoped
	    // to a provided parent el or the document if none exists.
	    getEl: function(el) {
	      return Backbone.$(el, Marionette._getValue(this.options.parentEl, this));
	    },
	  
	    // Override this method to change how the new view is
	    // appended to the `$el` that the region is managing
	    attachHtml: function(view) {
	      this.$el.contents().detach();
	  
	      this.el.appendChild(view.el);
	    },
	  
	    // Destroy the current view, if there is one. If there is no
	    // current view, it does nothing and returns immediately.
	    empty: function(options) {
	      var view = this.currentView;
	  
	      var emptyOptions = options || {};
	      var preventDestroy  = !!emptyOptions.preventDestroy;
	      // If there is no view in the region
	      // we should not remove anything
	      if (!view) { return this; }
	  
	      view.off('destroy', this.empty, this);
	      this.triggerMethod('before:empty', view);
	      if (!preventDestroy) {
	        this._destroyView();
	      }
	      this.triggerMethod('empty', view);
	  
	      // Remove region pointer to the currentView
	      delete this.currentView;
	  
	      if (preventDestroy) {
	        this.$el.contents().detach();
	      }
	  
	      return this;
	    },
	  
	    // call 'destroy' or 'remove', depending on which is found
	    // on the view (if showing a raw Backbone view or a Marionette View)
	    _destroyView: function() {
	      var view = this.currentView;
	      if (view.isDestroyed) { return; }
	  
	      if (!view.supportsDestroyLifecycle) {
	        Marionette.triggerMethodOn(view, 'before:destroy', view);
	      }
	      if (view.destroy) {
	        view.destroy();
	      } else {
	        view.remove();
	  
	        // appending isDestroyed to raw Backbone View allows regions
	        // to throw a ViewDestroyedError for this view
	        view.isDestroyed = true;
	      }
	      if (!view.supportsDestroyLifecycle) {
	        Marionette.triggerMethodOn(view, 'destroy', view);
	      }
	    },
	  
	    // Attach an existing view to the region. This
	    // will not call `render` or `onShow` for the new view,
	    // and will not replace the current HTML for the `el`
	    // of the region.
	    attachView: function(view) {
	      if (this.currentView) {
	        delete this.currentView._parent;
	      }
	      view._parent = this;
	      this.currentView = view;
	      return this;
	    },
	  
	    // Checks whether a view is currently present within
	    // the region. Returns `true` if there is and `false` if
	    // no view is present.
	    hasView: function() {
	      return !!this.currentView;
	    },
	  
	    // Reset the region by destroying any existing view and
	    // clearing out the cached `$el`. The next time a view
	    // is shown via this region, the region will re-query the
	    // DOM for the region's `el`.
	    reset: function() {
	      this.empty();
	  
	      if (this.$el) {
	        this.el = this.$el.selector;
	      }
	  
	      delete this.$el;
	      return this;
	    }
	  
	  },
	  
	  // Static Methods
	  {
	  
	    // Build an instance of a region by passing in a configuration object
	    // and a default region class to use if none is specified in the config.
	    //
	    // The config object should either be a string as a jQuery DOM selector,
	    // a Region class directly, or an object literal that specifies a selector,
	    // a custom regionClass, and any options to be supplied to the region:
	    //
	    // ```js
	    // {
	    //   selector: "#foo",
	    //   regionClass: MyCustomRegion,
	    //   allowMissingEl: false
	    // }
	    // ```
	    //
	    buildRegion: function(regionConfig, DefaultRegionClass) {
	      if (_.isString(regionConfig)) {
	        return this._buildRegionFromSelector(regionConfig, DefaultRegionClass);
	      }
	  
	      if (regionConfig.selector || regionConfig.el || regionConfig.regionClass) {
	        return this._buildRegionFromObject(regionConfig, DefaultRegionClass);
	      }
	  
	      if (_.isFunction(regionConfig)) {
	        return this._buildRegionFromRegionClass(regionConfig);
	      }
	  
	      throw new Marionette.Error({
	        message: 'Improper region configuration type.',
	        url: 'marionette.region.html#region-configuration-types'
	      });
	    },
	  
	    // Build the region from a string selector like '#foo-region'
	    _buildRegionFromSelector: function(selector, DefaultRegionClass) {
	      return new DefaultRegionClass({el: selector});
	    },
	  
	    // Build the region from a configuration object
	    // ```js
	    // { selector: '#foo', regionClass: FooRegion, allowMissingEl: false }
	    // ```
	    _buildRegionFromObject: function(regionConfig, DefaultRegionClass) {
	      var RegionClass = regionConfig.regionClass || DefaultRegionClass;
	      var options = _.omit(regionConfig, 'selector', 'regionClass');
	  
	      if (regionConfig.selector && !options.el) {
	        options.el = regionConfig.selector;
	      }
	  
	      return new RegionClass(options);
	    },
	  
	    // Build the region directly from a given `RegionClass`
	    _buildRegionFromRegionClass: function(RegionClass) {
	      return new RegionClass();
	    }
	  });
	  
	  // Region Manager
	  // --------------
	  
	  // Manage one or more related `Marionette.Region` objects.
	  Marionette.RegionManager = Marionette.Controller.extend({
	    constructor: function(options) {
	      this._regions = {};
	      this.length = 0;
	  
	      Marionette.Controller.call(this, options);
	  
	      this.addRegions(this.getOption('regions'));
	    },
	  
	    // Add multiple regions using an object literal or a
	    // function that returns an object literal, where
	    // each key becomes the region name, and each value is
	    // the region definition.
	    addRegions: function(regionDefinitions, defaults) {
	      regionDefinitions = Marionette._getValue(regionDefinitions, this, arguments);
	  
	      return _.reduce(regionDefinitions, function(regions, definition, name) {
	        if (_.isString(definition)) {
	          definition = {selector: definition};
	        }
	        if (definition.selector) {
	          definition = _.defaults({}, definition, defaults);
	        }
	  
	        regions[name] = this.addRegion(name, definition);
	        return regions;
	      }, {}, this);
	    },
	  
	    // Add an individual region to the region manager,
	    // and return the region instance
	    addRegion: function(name, definition) {
	      var region;
	  
	      if (definition instanceof Marionette.Region) {
	        region = definition;
	      } else {
	        region = Marionette.Region.buildRegion(definition, Marionette.Region);
	      }
	  
	      this.triggerMethod('before:add:region', name, region);
	  
	      region._parent = this;
	      this._store(name, region);
	  
	      this.triggerMethod('add:region', name, region);
	      return region;
	    },
	  
	    // Get a region by name
	    get: function(name) {
	      return this._regions[name];
	    },
	  
	    // Gets all the regions contained within
	    // the `regionManager` instance.
	    getRegions: function() {
	      return _.clone(this._regions);
	    },
	  
	    // Remove a region by name
	    removeRegion: function(name) {
	      var region = this._regions[name];
	      this._remove(name, region);
	  
	      return region;
	    },
	  
	    // Empty all regions in the region manager, and
	    // remove them
	    removeRegions: function() {
	      var regions = this.getRegions();
	      _.each(this._regions, function(region, name) {
	        this._remove(name, region);
	      }, this);
	  
	      return regions;
	    },
	  
	    // Empty all regions in the region manager, but
	    // leave them attached
	    emptyRegions: function() {
	      var regions = this.getRegions();
	      _.invoke(regions, 'empty');
	      return regions;
	    },
	  
	    // Destroy all regions and shut down the region
	    // manager entirely
	    destroy: function() {
	      this.removeRegions();
	      return Marionette.Controller.prototype.destroy.apply(this, arguments);
	    },
	  
	    // internal method to store regions
	    _store: function(name, region) {
	      if (!this._regions[name]) {
	        this.length++;
	      }
	  
	      this._regions[name] = region;
	    },
	  
	    // internal method to remove a region
	    _remove: function(name, region) {
	      this.triggerMethod('before:remove:region', name, region);
	      region.empty();
	      region.stopListening();
	  
	      delete region._parent;
	      delete this._regions[name];
	      this.length--;
	      this.triggerMethod('remove:region', name, region);
	    }
	  });
	  
	  Marionette.actAsCollection(Marionette.RegionManager.prototype, '_regions');
	  
	
	  // Template Cache
	  // --------------
	  
	  // Manage templates stored in `<script>` blocks,
	  // caching them for faster access.
	  Marionette.TemplateCache = function(templateId) {
	    this.templateId = templateId;
	  };
	  
	  // TemplateCache object-level methods. Manage the template
	  // caches from these method calls instead of creating
	  // your own TemplateCache instances
	  _.extend(Marionette.TemplateCache, {
	    templateCaches: {},
	  
	    // Get the specified template by id. Either
	    // retrieves the cached version, or loads it
	    // from the DOM.
	    get: function(templateId, options) {
	      var cachedTemplate = this.templateCaches[templateId];
	  
	      if (!cachedTemplate) {
	        cachedTemplate = new Marionette.TemplateCache(templateId);
	        this.templateCaches[templateId] = cachedTemplate;
	      }
	  
	      return cachedTemplate.load(options);
	    },
	  
	    // Clear templates from the cache. If no arguments
	    // are specified, clears all templates:
	    // `clear()`
	    //
	    // If arguments are specified, clears each of the
	    // specified templates from the cache:
	    // `clear("#t1", "#t2", "...")`
	    clear: function() {
	      var i;
	      var args = _.toArray(arguments);
	      var length = args.length;
	  
	      if (length > 0) {
	        for (i = 0; i < length; i++) {
	          delete this.templateCaches[args[i]];
	        }
	      } else {
	        this.templateCaches = {};
	      }
	    }
	  });
	  
	  // TemplateCache instance methods, allowing each
	  // template cache object to manage its own state
	  // and know whether or not it has been loaded
	  _.extend(Marionette.TemplateCache.prototype, {
	  
	    // Internal method to load the template
	    load: function(options) {
	      // Guard clause to prevent loading this template more than once
	      if (this.compiledTemplate) {
	        return this.compiledTemplate;
	      }
	  
	      // Load the template and compile it
	      var template = this.loadTemplate(this.templateId, options);
	      this.compiledTemplate = this.compileTemplate(template, options);
	  
	      return this.compiledTemplate;
	    },
	  
	    // Load a template from the DOM, by default. Override
	    // this method to provide your own template retrieval
	    // For asynchronous loading with AMD/RequireJS, consider
	    // using a template-loader plugin as described here:
	    // https://github.com/marionettejs/backbone.marionette/wiki/Using-marionette-with-requirejs
	    loadTemplate: function(templateId, options) {
	      var $template = Backbone.$(templateId);
	  
	      if (!$template.length) {
	        throw new Marionette.Error({
	          name: 'NoTemplateError',
	          message: 'Could not find template: "' + templateId + '"'
	        });
	      }
	      return $template.html();
	    },
	  
	    // Pre-compile the template before caching it. Override
	    // this method if you do not need to pre-compile a template
	    // (JST / RequireJS for example) or if you want to change
	    // the template engine used (Handebars, etc).
	    compileTemplate: function(rawTemplate, options) {
	      return _.template(rawTemplate, options);
	    }
	  });
	  
	  // Renderer
	  // --------
	  
	  // Render a template with data by passing in the template
	  // selector and the data to render.
	  Marionette.Renderer = {
	  
	    // Render a template with data. The `template` parameter is
	    // passed to the `TemplateCache` object to retrieve the
	    // template function. Override this method to provide your own
	    // custom rendering and template handling for all of Marionette.
	    render: function(template, data) {
	      if (!template) {
	        throw new Marionette.Error({
	          name: 'TemplateNotFoundError',
	          message: 'Cannot render the template since its false, null or undefined.'
	        });
	      }
	  
	      var templateFunc = _.isFunction(template) ? template : Marionette.TemplateCache.get(template);
	  
	      return templateFunc(data);
	    }
	  };
	  
	
	  /* jshint maxlen: 114, nonew: false */
	  // View
	  // ----
	  
	  // The core view class that other Marionette views extend from.
	  Marionette.View = Backbone.View.extend({
	    isDestroyed: false,
	    supportsRenderLifecycle: true,
	    supportsDestroyLifecycle: true,
	  
	    constructor: function(options) {
	      this.render = _.bind(this.render, this);
	  
	      options = Marionette._getValue(options, this);
	  
	      // this exposes view options to the view initializer
	      // this is a backfill since backbone removed the assignment
	      // of this.options
	      // at some point however this may be removed
	      this.options = _.extend({}, _.result(this, 'options'), options);
	  
	      this._behaviors = Marionette.Behaviors(this);
	  
	      Backbone.View.call(this, this.options);
	  
	      Marionette.MonitorDOMRefresh(this);
	    },
	  
	    // Get the template for this view
	    // instance. You can set a `template` attribute in the view
	    // definition or pass a `template: "whatever"` parameter in
	    // to the constructor options.
	    getTemplate: function() {
	      return this.getOption('template');
	    },
	  
	    // Serialize a model by returning its attributes. Clones
	    // the attributes to allow modification.
	    serializeModel: function(model) {
	      return model.toJSON.apply(model, _.rest(arguments));
	    },
	  
	    // Mix in template helper methods. Looks for a
	    // `templateHelpers` attribute, which can either be an
	    // object literal, or a function that returns an object
	    // literal. All methods and attributes from this object
	    // are copies to the object passed in.
	    mixinTemplateHelpers: function(target) {
	      target = target || {};
	      var templateHelpers = this.getOption('templateHelpers');
	      templateHelpers = Marionette._getValue(templateHelpers, this);
	      return _.extend(target, templateHelpers);
	    },
	  
	    // normalize the keys of passed hash with the views `ui` selectors.
	    // `{"@ui.foo": "bar"}`
	    normalizeUIKeys: function(hash) {
	      var uiBindings = _.result(this, '_uiBindings');
	      return Marionette.normalizeUIKeys(hash, uiBindings || _.result(this, 'ui'));
	    },
	  
	    // normalize the values of passed hash with the views `ui` selectors.
	    // `{foo: "@ui.bar"}`
	    normalizeUIValues: function(hash, properties) {
	      var ui = _.result(this, 'ui');
	      var uiBindings = _.result(this, '_uiBindings');
	      return Marionette.normalizeUIValues(hash, uiBindings || ui, properties);
	    },
	  
	    // Configure `triggers` to forward DOM events to view
	    // events. `triggers: {"click .foo": "do:foo"}`
	    configureTriggers: function() {
	      if (!this.triggers) { return; }
	  
	      // Allow `triggers` to be configured as a function
	      var triggers = this.normalizeUIKeys(_.result(this, 'triggers'));
	  
	      // Configure the triggers, prevent default
	      // action and stop propagation of DOM events
	      return _.reduce(triggers, function(events, value, key) {
	        events[key] = this._buildViewTrigger(value);
	        return events;
	      }, {}, this);
	    },
	  
	    // Overriding Backbone.View's delegateEvents to handle
	    // the `triggers`, `modelEvents`, and `collectionEvents` configuration
	    delegateEvents: function(events) {
	      this._delegateDOMEvents(events);
	      this.bindEntityEvents(this.model, this.getOption('modelEvents'));
	      this.bindEntityEvents(this.collection, this.getOption('collectionEvents'));
	  
	      _.each(this._behaviors, function(behavior) {
	        behavior.bindEntityEvents(this.model, behavior.getOption('modelEvents'));
	        behavior.bindEntityEvents(this.collection, behavior.getOption('collectionEvents'));
	      }, this);
	  
	      return this;
	    },
	  
	    // internal method to delegate DOM events and triggers
	    _delegateDOMEvents: function(eventsArg) {
	      var events = Marionette._getValue(eventsArg || this.events, this);
	  
	      // normalize ui keys
	      events = this.normalizeUIKeys(events);
	      if (_.isUndefined(eventsArg)) {this.events = events;}
	  
	      var combinedEvents = {};
	  
	      // look up if this view has behavior events
	      var behaviorEvents = _.result(this, 'behaviorEvents') || {};
	      var triggers = this.configureTriggers();
	      var behaviorTriggers = _.result(this, 'behaviorTriggers') || {};
	  
	      // behavior events will be overriden by view events and or triggers
	      _.extend(combinedEvents, behaviorEvents, events, triggers, behaviorTriggers);
	  
	      Backbone.View.prototype.delegateEvents.call(this, combinedEvents);
	    },
	  
	    // Overriding Backbone.View's undelegateEvents to handle unbinding
	    // the `triggers`, `modelEvents`, and `collectionEvents` config
	    undelegateEvents: function() {
	      Backbone.View.prototype.undelegateEvents.apply(this, arguments);
	  
	      this.unbindEntityEvents(this.model, this.getOption('modelEvents'));
	      this.unbindEntityEvents(this.collection, this.getOption('collectionEvents'));
	  
	      _.each(this._behaviors, function(behavior) {
	        behavior.unbindEntityEvents(this.model, behavior.getOption('modelEvents'));
	        behavior.unbindEntityEvents(this.collection, behavior.getOption('collectionEvents'));
	      }, this);
	  
	      return this;
	    },
	  
	    // Internal helper method to verify whether the view hasn't been destroyed
	    _ensureViewIsIntact: function() {
	      if (this.isDestroyed) {
	        throw new Marionette.Error({
	          name: 'ViewDestroyedError',
	          message: 'View (cid: "' + this.cid + '") has already been destroyed and cannot be used.'
	        });
	      }
	    },
	  
	    // Default `destroy` implementation, for removing a view from the
	    // DOM and unbinding it. Regions will call this method
	    // for you. You can specify an `onDestroy` method in your view to
	    // add custom code that is called after the view is destroyed.
	    destroy: function() {
	      if (this.isDestroyed) { return this; }
	  
	      var args = _.toArray(arguments);
	  
	      this.triggerMethod.apply(this, ['before:destroy'].concat(args));
	  
	      // mark as destroyed before doing the actual destroy, to
	      // prevent infinite loops within "destroy" event handlers
	      // that are trying to destroy other views
	      this.isDestroyed = true;
	      this.triggerMethod.apply(this, ['destroy'].concat(args));
	  
	      // unbind UI elements
	      this.unbindUIElements();
	  
	      this.isRendered = false;
	  
	      // remove the view from the DOM
	      this.remove();
	  
	      // Call destroy on each behavior after
	      // destroying the view.
	      // This unbinds event listeners
	      // that behaviors have registered for.
	      _.invoke(this._behaviors, 'destroy', args);
	  
	      return this;
	    },
	  
	    bindUIElements: function() {
	      this._bindUIElements();
	      _.invoke(this._behaviors, this._bindUIElements);
	    },
	  
	    // This method binds the elements specified in the "ui" hash inside the view's code with
	    // the associated jQuery selectors.
	    _bindUIElements: function() {
	      if (!this.ui) { return; }
	  
	      // store the ui hash in _uiBindings so they can be reset later
	      // and so re-rendering the view will be able to find the bindings
	      if (!this._uiBindings) {
	        this._uiBindings = this.ui;
	      }
	  
	      // get the bindings result, as a function or otherwise
	      var bindings = _.result(this, '_uiBindings');
	  
	      // empty the ui so we don't have anything to start with
	      this.ui = {};
	  
	      // bind each of the selectors
	      _.each(bindings, function(selector, key) {
	        this.ui[key] = this.$(selector);
	      }, this);
	    },
	  
	    // This method unbinds the elements specified in the "ui" hash
	    unbindUIElements: function() {
	      this._unbindUIElements();
	      _.invoke(this._behaviors, this._unbindUIElements);
	    },
	  
	    _unbindUIElements: function() {
	      if (!this.ui || !this._uiBindings) { return; }
	  
	      // delete all of the existing ui bindings
	      _.each(this.ui, function($el, name) {
	        delete this.ui[name];
	      }, this);
	  
	      // reset the ui element to the original bindings configuration
	      this.ui = this._uiBindings;
	      delete this._uiBindings;
	    },
	  
	    // Internal method to create an event handler for a given `triggerDef` like
	    // 'click:foo'
	    _buildViewTrigger: function(triggerDef) {
	  
	      var options = _.defaults({}, triggerDef, {
	        preventDefault: true,
	        stopPropagation: true
	      });
	  
	      var eventName = _.isObject(triggerDef) ? options.event : triggerDef;
	  
	      return function(e) {
	        if (e) {
	          if (e.preventDefault && options.preventDefault) {
	            e.preventDefault();
	          }
	  
	          if (e.stopPropagation && options.stopPropagation) {
	            e.stopPropagation();
	          }
	        }
	  
	        var args = {
	          view: this,
	          model: this.model,
	          collection: this.collection
	        };
	  
	        this.triggerMethod(eventName, args);
	      };
	    },
	  
	    setElement: function() {
	      var ret = Backbone.View.prototype.setElement.apply(this, arguments);
	  
	      // proxy behavior $el to the view's $el.
	      // This is needed because a view's $el proxy
	      // is not set until after setElement is called.
	      _.invoke(this._behaviors, 'proxyViewProperties', this);
	  
	      return ret;
	    },
	  
	    // import the `triggerMethod` to trigger events with corresponding
	    // methods if the method exists
	    triggerMethod: function() {
	      var ret = Marionette._triggerMethod(this, arguments);
	  
	      this._triggerEventOnBehaviors(arguments);
	      this._triggerEventOnParentLayout(arguments[0], _.rest(arguments));
	  
	      return ret;
	    },
	  
	    _triggerEventOnBehaviors: function(args) {
	      var triggerMethod = Marionette._triggerMethod;
	      var behaviors = this._behaviors;
	      // Use good ol' for as this is a very hot function
	      for (var i = 0, length = behaviors && behaviors.length; i < length; i++) {
	        triggerMethod(behaviors[i], args);
	      }
	    },
	  
	    _triggerEventOnParentLayout: function(eventName, args) {
	      var layoutView = this._parentLayoutView();
	      if (!layoutView) {
	        return;
	      }
	  
	      // invoke triggerMethod on parent view
	      var eventPrefix = Marionette.getOption(layoutView, 'childViewEventPrefix');
	      var prefixedEventName = eventPrefix + ':' + eventName;
	      var callArgs = [this].concat(args);
	  
	      Marionette._triggerMethod(layoutView, prefixedEventName, callArgs);
	  
	      // call the parent view's childEvents handler
	      var childEvents = Marionette.getOption(layoutView, 'childEvents');
	  
	      // since childEvents can be an object or a function use Marionette._getValue
	      // to handle the abstaction for us.
	      childEvents = Marionette._getValue(childEvents, layoutView);
	      var normalizedChildEvents = layoutView.normalizeMethods(childEvents);
	  
	      if (normalizedChildEvents && _.isFunction(normalizedChildEvents[eventName])) {
	        normalizedChildEvents[eventName].apply(layoutView, callArgs);
	      }
	    },
	  
	    // This method returns any views that are immediate
	    // children of this view
	    _getImmediateChildren: function() {
	      return [];
	    },
	  
	    // Returns an array of every nested view within this view
	    _getNestedViews: function() {
	      var children = this._getImmediateChildren();
	  
	      if (!children.length) { return children; }
	  
	      return _.reduce(children, function(memo, view) {
	        if (!view._getNestedViews) { return memo; }
	        return memo.concat(view._getNestedViews());
	      }, children);
	    },
	  
	    // Walk the _parent tree until we find a layout view (if one exists).
	    // Returns the parent layout view hierarchically closest to this view.
	    _parentLayoutView: function() {
	      var parent  = this._parent;
	  
	      while (parent) {
	        if (parent instanceof Marionette.LayoutView) {
	          return parent;
	        }
	        parent = parent._parent;
	      }
	    },
	  
	    // Imports the "normalizeMethods" to transform hashes of
	    // events=>function references/names to a hash of events=>function references
	    normalizeMethods: Marionette.normalizeMethods,
	  
	    // A handy way to merge passed-in options onto the instance
	    mergeOptions: Marionette.mergeOptions,
	  
	    // Proxy `getOption` to enable getting options from this or this.options by name.
	    getOption: Marionette.proxyGetOption,
	  
	    // Proxy `bindEntityEvents` to enable binding view's events from another entity.
	    bindEntityEvents: Marionette.proxyBindEntityEvents,
	  
	    // Proxy `unbindEntityEvents` to enable unbinding view's events from another entity.
	    unbindEntityEvents: Marionette.proxyUnbindEntityEvents
	  });
	  
	  // Item View
	  // ---------
	  
	  // A single item view implementation that contains code for rendering
	  // with underscore.js templates, serializing the view's model or collection,
	  // and calling several methods on extended views, such as `onRender`.
	  Marionette.ItemView = Marionette.View.extend({
	  
	    // Setting up the inheritance chain which allows changes to
	    // Marionette.View.prototype.constructor which allows overriding
	    constructor: function() {
	      Marionette.View.apply(this, arguments);
	    },
	  
	    // Serialize the model or collection for the view. If a model is
	    // found, the view's `serializeModel` is called. If a collection is found,
	    // each model in the collection is serialized by calling
	    // the view's `serializeCollection` and put into an `items` array in
	    // the resulting data. If both are found, defaults to the model.
	    // You can override the `serializeData` method in your own view definition,
	    // to provide custom serialization for your view's data.
	    serializeData: function() {
	      if (!this.model && !this.collection) {
	        return {};
	      }
	  
	      var args = [this.model || this.collection];
	      if (arguments.length) {
	        args.push.apply(args, arguments);
	      }
	  
	      if (this.model) {
	        return this.serializeModel.apply(this, args);
	      } else {
	        return {
	          items: this.serializeCollection.apply(this, args)
	        };
	      }
	    },
	  
	    // Serialize a collection by serializing each of its models.
	    serializeCollection: function(collection) {
	      return collection.toJSON.apply(collection, _.rest(arguments));
	    },
	  
	    // Render the view, defaulting to underscore.js templates.
	    // You can override this in your view definition to provide
	    // a very specific rendering for your view. In general, though,
	    // you should override the `Marionette.Renderer` object to
	    // change how Marionette renders views.
	    render: function() {
	      this._ensureViewIsIntact();
	  
	      this.triggerMethod('before:render', this);
	  
	      this._renderTemplate();
	      this.isRendered = true;
	      this.bindUIElements();
	  
	      this.triggerMethod('render', this);
	  
	      return this;
	    },
	  
	    // Internal method to render the template with the serialized data
	    // and template helpers via the `Marionette.Renderer` object.
	    // Throws an `UndefinedTemplateError` error if the template is
	    // any falsely value but literal `false`.
	    _renderTemplate: function() {
	      var template = this.getTemplate();
	  
	      // Allow template-less item views
	      if (template === false) {
	        return;
	      }
	  
	      if (!template) {
	        throw new Marionette.Error({
	          name: 'UndefinedTemplateError',
	          message: 'Cannot render the template since it is null or undefined.'
	        });
	      }
	  
	      // Add in entity data and template helpers
	      var data = this.mixinTemplateHelpers(this.serializeData());
	  
	      // Render and add to el
	      var html = Marionette.Renderer.render(template, data, this);
	      this.attachElContent(html);
	  
	      return this;
	    },
	  
	    // Attaches the content of a given view.
	    // This method can be overridden to optimize rendering,
	    // or to render in a non standard way.
	    //
	    // For example, using `innerHTML` instead of `$el.html`
	    //
	    // ```js
	    // attachElContent: function(html) {
	    //   this.el.innerHTML = html;
	    //   return this;
	    // }
	    // ```
	    attachElContent: function(html) {
	      this.$el.html(html);
	  
	      return this;
	    }
	  });
	  
	  /* jshint maxstatements: 20, maxcomplexity: 7 */
	  
	  // Collection View
	  // ---------------
	  
	  // A view that iterates over a Backbone.Collection
	  // and renders an individual child view for each model.
	  Marionette.CollectionView = Marionette.View.extend({
	  
	    // used as the prefix for child view events
	    // that are forwarded through the collectionview
	    childViewEventPrefix: 'childview',
	  
	    // flag for maintaining the sorted order of the collection
	    sort: true,
	  
	    // constructor
	    // option to pass `{sort: false}` to prevent the `CollectionView` from
	    // maintaining the sorted order of the collection.
	    // This will fallback onto appending childView's to the end.
	    //
	    // option to pass `{comparator: compFunction()}` to allow the `CollectionView`
	    // to use a custom sort order for the collection.
	    constructor: function(options) {
	      this.once('render', this._initialEvents);
	      this._initChildViewStorage();
	  
	      Marionette.View.apply(this, arguments);
	  
	      this.on({
	        'before:show':   this._onBeforeShowCalled,
	        'show':          this._onShowCalled,
	        'before:attach': this._onBeforeAttachCalled,
	        'attach':        this._onAttachCalled
	      });
	      this.initRenderBuffer();
	    },
	  
	    // Instead of inserting elements one by one into the page,
	    // it's much more performant to insert elements into a document
	    // fragment and then insert that document fragment into the page
	    initRenderBuffer: function() {
	      this._bufferedChildren = [];
	    },
	  
	    startBuffering: function() {
	      this.initRenderBuffer();
	      this.isBuffering = true;
	    },
	  
	    endBuffering: function() {
	      // Only trigger attach if already shown and attached, otherwise Region#show() handles this.
	      var canTriggerAttach = this._isShown && Marionette.isNodeAttached(this.el);
	      var nestedViews;
	  
	      this.isBuffering = false;
	  
	      if (this._isShown) {
	        this._triggerMethodMany(this._bufferedChildren, this, 'before:show');
	      }
	      if (canTriggerAttach && this._triggerBeforeAttach) {
	        nestedViews = this._getNestedViews();
	        this._triggerMethodMany(nestedViews, this, 'before:attach');
	      }
	  
	      this.attachBuffer(this, this._createBuffer());
	  
	      if (canTriggerAttach && this._triggerAttach) {
	        nestedViews = this._getNestedViews();
	        this._triggerMethodMany(nestedViews, this, 'attach');
	      }
	      if (this._isShown) {
	        this._triggerMethodMany(this._bufferedChildren, this, 'show');
	      }
	      this.initRenderBuffer();
	    },
	  
	    _triggerMethodMany: function(targets, source, eventName) {
	      var args = _.drop(arguments, 3);
	  
	      _.each(targets, function(target) {
	        Marionette.triggerMethodOn.apply(target, [target, eventName, target, source].concat(args));
	      });
	    },
	  
	    // Configured the initial events that the collection view
	    // binds to.
	    _initialEvents: function() {
	      if (this.collection) {
	        this.listenTo(this.collection, 'add', this._onCollectionAdd);
	        this.listenTo(this.collection, 'remove', this._onCollectionRemove);
	        this.listenTo(this.collection, 'reset', this.render);
	  
	        if (this.getOption('sort')) {
	          this.listenTo(this.collection, 'sort', this._sortViews);
	        }
	      }
	    },
	  
	    // Handle a child added to the collection
	    _onCollectionAdd: function(child, collection, opts) {
	      // `index` is present when adding with `at` since BB 1.2; indexOf fallback for < 1.2
	      var index = opts.at !== undefined && (opts.index || collection.indexOf(child));
	  
	      // When filtered or when there is no initial index, calculate index.
	      if (this.getOption('filter') || index === false) {
	        index = _.indexOf(this._filteredSortedModels(index), child);
	      }
	  
	      if (this._shouldAddChild(child, index)) {
	        this.destroyEmptyView();
	        var ChildView = this.getChildView(child);
	        this.addChild(child, ChildView, index);
	      }
	    },
	  
	    // get the child view by model it holds, and remove it
	    _onCollectionRemove: function(model) {
	      var view = this.children.findByModel(model);
	      this.removeChildView(view);
	      this.checkEmpty();
	    },
	  
	    _onBeforeShowCalled: function() {
	      // Reset attach event flags at the top of the Region#show() event lifecycle; if the Region's
	      // show() options permit onBeforeAttach/onAttach events, these flags will be set true again.
	      this._triggerBeforeAttach = this._triggerAttach = false;
	      this.children.each(function(childView) {
	        Marionette.triggerMethodOn(childView, 'before:show', childView);
	      });
	    },
	  
	    _onShowCalled: function() {
	      this.children.each(function(childView) {
	        Marionette.triggerMethodOn(childView, 'show', childView);
	      });
	    },
	  
	    // If during Region#show() onBeforeAttach was fired, continue firing it for child views
	    _onBeforeAttachCalled: function() {
	      this._triggerBeforeAttach = true;
	    },
	  
	    // If during Region#show() onAttach was fired, continue firing it for child views
	    _onAttachCalled: function() {
	      this._triggerAttach = true;
	    },
	  
	    // Render children views. Override this method to
	    // provide your own implementation of a render function for
	    // the collection view.
	    render: function() {
	      this._ensureViewIsIntact();
	      this.triggerMethod('before:render', this);
	      this._renderChildren();
	      this.isRendered = true;
	      this.triggerMethod('render', this);
	      return this;
	    },
	  
	    // Reorder DOM after sorting. When your element's rendering
	    // do not use their index, you can pass reorderOnSort: true
	    // to only reorder the DOM after a sort instead of rendering
	    // all the collectionView
	    reorder: function() {
	      var children = this.children;
	      var models = this._filteredSortedModels();
	  
	      if (!models.length && this._showingEmptyView) { return this; }
	  
	      var anyModelsAdded = _.some(models, function(model) {
	        return !children.findByModel(model);
	      });
	  
	      // If there are any new models added due to filtering
	      // We need to add child views
	      // So render as normal
	      if (anyModelsAdded) {
	        this.render();
	      } else {
	        // get the DOM nodes in the same order as the models
	        var elsToReorder = _.map(models, function(model, index) {
	          var view = children.findByModel(model);
	          view._index = index;
	          return view.el;
	        });
	  
	        // find the views that were children before but arent in this new ordering
	        var filteredOutViews = children.filter(function(view) {
	          return !_.contains(elsToReorder, view.el);
	        });
	  
	        this.triggerMethod('before:reorder');
	  
	        // since append moves elements that are already in the DOM,
	        // appending the elements will effectively reorder them
	        this._appendReorderedChildren(elsToReorder);
	  
	        // remove any views that have been filtered out
	        _.each(filteredOutViews, this.removeChildView, this);
	        this.checkEmpty();
	  
	        this.triggerMethod('reorder');
	      }
	    },
	  
	    // Render view after sorting. Override this method to
	    // change how the view renders after a `sort` on the collection.
	    // An example of this would be to only `renderChildren` in a `CompositeView`
	    // rather than the full view.
	    resortView: function() {
	      if (Marionette.getOption(this, 'reorderOnSort')) {
	        this.reorder();
	      } else {
	        this.render();
	      }
	    },
	  
	    // Internal method. This checks for any changes in the order of the collection.
	    // If the index of any view doesn't match, it will render.
	    _sortViews: function() {
	      var models = this._filteredSortedModels();
	  
	      // check for any changes in sort order of views
	      var orderChanged = _.find(models, function(item, index) {
	        var view = this.children.findByModel(item);
	        return !view || view._index !== index;
	      }, this);
	  
	      if (orderChanged) {
	        this.resortView();
	      }
	    },
	  
	    // Internal reference to what index a `emptyView` is.
	    _emptyViewIndex: -1,
	  
	    // Internal method. Separated so that CompositeView can append to the childViewContainer
	    // if necessary
	    _appendReorderedChildren: function(children) {
	      this.$el.append(children);
	    },
	  
	    // Internal method. Separated so that CompositeView can have
	    // more control over events being triggered, around the rendering
	    // process
	    _renderChildren: function() {
	      this.destroyEmptyView();
	      this.destroyChildren({checkEmpty: false});
	  
	      if (this.isEmpty(this.collection)) {
	        this.showEmptyView();
	      } else {
	        this.triggerMethod('before:render:collection', this);
	        this.startBuffering();
	        this.showCollection();
	        this.endBuffering();
	        this.triggerMethod('render:collection', this);
	  
	        // If we have shown children and none have passed the filter, show the empty view
	        if (this.children.isEmpty() && this.getOption('filter')) {
	          this.showEmptyView();
	        }
	      }
	    },
	  
	    // Internal method to loop through collection and show each child view.
	    showCollection: function() {
	      var ChildView;
	  
	      var models = this._filteredSortedModels();
	  
	      _.each(models, function(child, index) {
	        ChildView = this.getChildView(child);
	        this.addChild(child, ChildView, index);
	      }, this);
	    },
	  
	    // Allow the collection to be sorted by a custom view comparator
	    _filteredSortedModels: function(addedAt) {
	      var viewComparator = this.getViewComparator();
	      var models = this.collection.models;
	      addedAt = Math.min(Math.max(addedAt, 0), models.length - 1);
	  
	      if (viewComparator) {
	        var addedModel;
	        // Preserve `at` location, even for a sorted view
	        if (addedAt) {
	          addedModel = models[addedAt];
	          models = models.slice(0, addedAt).concat(models.slice(addedAt + 1));
	        }
	        models = this._sortModelsBy(models, viewComparator);
	        if (addedModel) {
	          models.splice(addedAt, 0, addedModel);
	        }
	      }
	  
	      // Filter after sorting in case the filter uses the index
	      if (this.getOption('filter')) {
	        models = _.filter(models, function(model, index) {
	          return this._shouldAddChild(model, index);
	        }, this);
	      }
	  
	      return models;
	    },
	  
	    _sortModelsBy: function(models, comparator) {
	      if (typeof comparator === 'string') {
	        return _.sortBy(models, function(model) {
	          return model.get(comparator);
	        }, this);
	      } else if (comparator.length === 1) {
	        return _.sortBy(models, comparator, this);
	      } else {
	        return models.sort(_.bind(comparator, this));
	      }
	    },
	  
	    // Internal method to show an empty view in place of
	    // a collection of child views, when the collection is empty
	    showEmptyView: function() {
	      var EmptyView = this.getEmptyView();
	  
	      if (EmptyView && !this._showingEmptyView) {
	        this.triggerMethod('before:render:empty');
	  
	        this._showingEmptyView = true;
	        var model = new Backbone.Model();
	        this.addEmptyView(model, EmptyView);
	  
	        this.triggerMethod('render:empty');
	      }
	    },
	  
	    // Internal method to destroy an existing emptyView instance
	    // if one exists. Called when a collection view has been
	    // rendered empty, and then a child is added to the collection.
	    destroyEmptyView: function() {
	      if (this._showingEmptyView) {
	        this.triggerMethod('before:remove:empty');
	  
	        this.destroyChildren();
	        delete this._showingEmptyView;
	  
	        this.triggerMethod('remove:empty');
	      }
	    },
	  
	    // Retrieve the empty view class
	    getEmptyView: function() {
	      return this.getOption('emptyView');
	    },
	  
	    // Render and show the emptyView. Similar to addChild method
	    // but "add:child" events are not fired, and the event from
	    // emptyView are not forwarded
	    addEmptyView: function(child, EmptyView) {
	      // Only trigger attach if already shown, attached, and not buffering, otherwise endBuffer() or
	      // Region#show() handles this.
	      var canTriggerAttach = this._isShown && !this.isBuffering && Marionette.isNodeAttached(this.el);
	      var nestedViews;
	  
	      // get the emptyViewOptions, falling back to childViewOptions
	      var emptyViewOptions = this.getOption('emptyViewOptions') ||
	                            this.getOption('childViewOptions');
	  
	      if (_.isFunction(emptyViewOptions)) {
	        emptyViewOptions = emptyViewOptions.call(this, child, this._emptyViewIndex);
	      }
	  
	      // build the empty view
	      var view = this.buildChildView(child, EmptyView, emptyViewOptions);
	  
	      view._parent = this;
	  
	      // Proxy emptyView events
	      this.proxyChildEvents(view);
	  
	      view.once('render', function() {
	        // trigger the 'before:show' event on `view` if the collection view has already been shown
	        if (this._isShown) {
	          Marionette.triggerMethodOn(view, 'before:show', view);
	        }
	  
	        // Trigger `before:attach` following `render` to avoid adding logic and event triggers
	        // to public method `renderChildView()`.
	        if (canTriggerAttach && this._triggerBeforeAttach) {
	          nestedViews = this._getViewAndNested(view);
	          this._triggerMethodMany(nestedViews, this, 'before:attach');
	        }
	      }, this);
	  
	      // Store the `emptyView` like a `childView` so we can properly remove and/or close it later
	      this.children.add(view);
	      this.renderChildView(view, this._emptyViewIndex);
	  
	      // Trigger `attach`
	      if (canTriggerAttach && this._triggerAttach) {
	        nestedViews = this._getViewAndNested(view);
	        this._triggerMethodMany(nestedViews, this, 'attach');
	      }
	      // call the 'show' method if the collection view has already been shown
	      if (this._isShown) {
	        Marionette.triggerMethodOn(view, 'show', view);
	      }
	    },
	  
	    // Retrieve the `childView` class, either from `this.options.childView`
	    // or from the `childView` in the object definition. The "options"
	    // takes precedence.
	    // This method receives the model that will be passed to the instance
	    // created from this `childView`. Overriding methods may use the child
	    // to determine what `childView` class to return.
	    getChildView: function(child) {
	      var childView = this.getOption('childView');
	  
	      if (!childView) {
	        throw new Marionette.Error({
	          name: 'NoChildViewError',
	          message: 'A "childView" must be specified'
	        });
	      }
	  
	      return childView;
	    },
	  
	    // Render the child's view and add it to the
	    // HTML for the collection view at a given index.
	    // This will also update the indices of later views in the collection
	    // in order to keep the children in sync with the collection.
	    addChild: function(child, ChildView, index) {
	      var childViewOptions = this.getOption('childViewOptions');
	      childViewOptions = Marionette._getValue(childViewOptions, this, [child, index]);
	  
	      var view = this.buildChildView(child, ChildView, childViewOptions);
	  
	      // increment indices of views after this one
	      this._updateIndices(view, true, index);
	  
	      this.triggerMethod('before:add:child', view);
	      this._addChildView(view, index);
	      this.triggerMethod('add:child', view);
	  
	      view._parent = this;
	  
	      return view;
	    },
	  
	    // Internal method. This decrements or increments the indices of views after the
	    // added/removed view to keep in sync with the collection.
	    _updateIndices: function(view, increment, index) {
	      if (!this.getOption('sort')) {
	        return;
	      }
	  
	      if (increment) {
	        // assign the index to the view
	        view._index = index;
	      }
	  
	      // update the indexes of views after this one
	      this.children.each(function(laterView) {
	        if (laterView._index >= view._index) {
	          laterView._index += increment ? 1 : -1;
	        }
	      });
	    },
	  
	    // Internal Method. Add the view to children and render it at
	    // the given index.
	    _addChildView: function(view, index) {
	      // Only trigger attach if already shown, attached, and not buffering, otherwise endBuffer() or
	      // Region#show() handles this.
	      var canTriggerAttach = this._isShown && !this.isBuffering && Marionette.isNodeAttached(this.el);
	      var nestedViews;
	  
	      // set up the child view event forwarding
	      this.proxyChildEvents(view);
	  
	      view.once('render', function() {
	        // trigger the 'before:show' event on `view` if the collection view has already been shown
	        if (this._isShown && !this.isBuffering) {
	          Marionette.triggerMethodOn(view, 'before:show', view);
	        }
	  
	        // Trigger `before:attach` following `render` to avoid adding logic and event triggers
	        // to public method `renderChildView()`.
	        if (canTriggerAttach && this._triggerBeforeAttach) {
	          nestedViews = this._getViewAndNested(view);
	          this._triggerMethodMany(nestedViews, this, 'before:attach');
	        }
	      }, this);
	  
	      // Store the child view itself so we can properly remove and/or destroy it later
	      this.children.add(view);
	      this.renderChildView(view, index);
	  
	      // Trigger `attach`
	      if (canTriggerAttach && this._triggerAttach) {
	        nestedViews = this._getViewAndNested(view);
	        this._triggerMethodMany(nestedViews, this, 'attach');
	      }
	      // Trigger `show`
	      if (this._isShown && !this.isBuffering) {
	        Marionette.triggerMethodOn(view, 'show', view);
	      }
	    },
	  
	    // render the child view
	    renderChildView: function(view, index) {
	      if (!view.supportsRenderLifecycle) {
	        Marionette.triggerMethodOn(view, 'before:render', view);
	      }
	      view.render();
	      if (!view.supportsRenderLifecycle) {
	        Marionette.triggerMethodOn(view, 'render', view);
	      }
	      this.attachHtml(this, view, index);
	      return view;
	    },
	  
	    // Build a `childView` for a model in the collection.
	    buildChildView: function(child, ChildViewClass, childViewOptions) {
	      var options = _.extend({model: child}, childViewOptions);
	      var childView = new ChildViewClass(options);
	      Marionette.MonitorDOMRefresh(childView);
	      return childView;
	    },
	  
	    // Remove the child view and destroy it.
	    // This function also updates the indices of
	    // later views in the collection in order to keep
	    // the children in sync with the collection.
	    removeChildView: function(view) {
	      if (!view) { return view; }
	  
	      this.triggerMethod('before:remove:child', view);
	  
	      if (!view.supportsDestroyLifecycle) {
	        Marionette.triggerMethodOn(view, 'before:destroy', view);
	      }
	      // call 'destroy' or 'remove', depending on which is found
	      if (view.destroy) {
	        view.destroy();
	      } else {
	        view.remove();
	      }
	      if (!view.supportsDestroyLifecycle) {
	        Marionette.triggerMethodOn(view, 'destroy', view);
	      }
	  
	      delete view._parent;
	      this.stopListening(view);
	      this.children.remove(view);
	      this.triggerMethod('remove:child', view);
	  
	      // decrement the index of views after this one
	      this._updateIndices(view, false);
	  
	      return view;
	    },
	  
	    // check if the collection is empty
	    isEmpty: function() {
	      return !this.collection || this.collection.length === 0;
	    },
	  
	    // If empty, show the empty view
	    checkEmpty: function() {
	      if (this.isEmpty(this.collection)) {
	        this.showEmptyView();
	      }
	    },
	  
	    // You might need to override this if you've overridden attachHtml
	    attachBuffer: function(collectionView, buffer) {
	      collectionView.$el.append(buffer);
	    },
	  
	    // Create a fragment buffer from the currently buffered children
	    _createBuffer: function() {
	      var elBuffer = document.createDocumentFragment();
	      _.each(this._bufferedChildren, function(b) {
	        elBuffer.appendChild(b.el);
	      });
	      return elBuffer;
	    },
	  
	    // Append the HTML to the collection's `el`.
	    // Override this method to do something other
	    // than `.append`.
	    attachHtml: function(collectionView, childView, index) {
	      if (collectionView.isBuffering) {
	        // buffering happens on reset events and initial renders
	        // in order to reduce the number of inserts into the
	        // document, which are expensive.
	        collectionView._bufferedChildren.splice(index, 0, childView);
	      } else {
	        // If we've already rendered the main collection, append
	        // the new child into the correct order if we need to. Otherwise
	        // append to the end.
	        if (!collectionView._insertBefore(childView, index)) {
	          collectionView._insertAfter(childView);
	        }
	      }
	    },
	  
	    // Internal method. Check whether we need to insert the view into
	    // the correct position.
	    _insertBefore: function(childView, index) {
	      var currentView;
	      var findPosition = this.getOption('sort') && (index < this.children.length - 1);
	      if (findPosition) {
	        // Find the view after this one
	        currentView = this.children.find(function(view) {
	          return view._index === index + 1;
	        });
	      }
	  
	      if (currentView) {
	        currentView.$el.before(childView.el);
	        return true;
	      }
	  
	      return false;
	    },
	  
	    // Internal method. Append a view to the end of the $el
	    _insertAfter: function(childView) {
	      this.$el.append(childView.el);
	    },
	  
	    // Internal method to set up the `children` object for
	    // storing all of the child views
	    _initChildViewStorage: function() {
	      this.children = new Backbone.ChildViewContainer();
	    },
	  
	    // Handle cleanup and other destroying needs for the collection of views
	    destroy: function() {
	      if (this.isDestroyed) { return this; }
	  
	      this.triggerMethod('before:destroy:collection');
	      this.destroyChildren({checkEmpty: false});
	      this.triggerMethod('destroy:collection');
	  
	      return Marionette.View.prototype.destroy.apply(this, arguments);
	    },
	  
	    // Destroy the child views that this collection view
	    // is holding on to, if any
	    destroyChildren: function(options) {
	      var destroyOptions = options || {};
	      var shouldCheckEmpty = true;
	      var childViews = this.children.map(_.identity);
	  
	      if (!_.isUndefined(destroyOptions.checkEmpty)) {
	        shouldCheckEmpty = destroyOptions.checkEmpty;
	      }
	  
	      this.children.each(this.removeChildView, this);
	  
	      if (shouldCheckEmpty) {
	        this.checkEmpty();
	      }
	      return childViews;
	    },
	  
	    // Return true if the given child should be shown
	    // Return false otherwise
	    // The filter will be passed (child, index, collection)
	    // Where
	    //  'child' is the given model
	    //  'index' is the index of that model in the collection
	    //  'collection' is the collection referenced by this CollectionView
	    _shouldAddChild: function(child, index) {
	      var filter = this.getOption('filter');
	      return !_.isFunction(filter) || filter.call(this, child, index, this.collection);
	    },
	  
	    // Set up the child view event forwarding. Uses a "childview:"
	    // prefix in front of all forwarded events.
	    proxyChildEvents: function(view) {
	      var prefix = this.getOption('childViewEventPrefix');
	  
	      // Forward all child view events through the parent,
	      // prepending "childview:" to the event name
	      this.listenTo(view, 'all', function() {
	        var args = _.toArray(arguments);
	        var rootEvent = args[0];
	        var childEvents = this.normalizeMethods(_.result(this, 'childEvents'));
	  
	        args[0] = prefix + ':' + rootEvent;
	        args.splice(1, 0, view);
	  
	        // call collectionView childEvent if defined
	        if (typeof childEvents !== 'undefined' && _.isFunction(childEvents[rootEvent])) {
	          childEvents[rootEvent].apply(this, args.slice(1));
	        }
	  
	        this.triggerMethod.apply(this, args);
	      });
	    },
	  
	    _getImmediateChildren: function() {
	      return _.values(this.children._views);
	    },
	  
	    _getViewAndNested: function(view) {
	      // This will not fail on Backbone.View which does not have #_getNestedViews.
	      return [view].concat(_.result(view, '_getNestedViews') || []);
	    },
	  
	    getViewComparator: function() {
	      return this.getOption('viewComparator');
	    }
	  });
	  
	  /* jshint maxstatements: 17, maxlen: 117 */
	  
	  // Composite View
	  // --------------
	  
	  // Used for rendering a branch-leaf, hierarchical structure.
	  // Extends directly from CollectionView and also renders an
	  // a child view as `modelView`, for the top leaf
	  Marionette.CompositeView = Marionette.CollectionView.extend({
	  
	    // Setting up the inheritance chain which allows changes to
	    // Marionette.CollectionView.prototype.constructor which allows overriding
	    // option to pass '{sort: false}' to prevent the CompositeView from
	    // maintaining the sorted order of the collection.
	    // This will fallback onto appending childView's to the end.
	    constructor: function() {
	      Marionette.CollectionView.apply(this, arguments);
	    },
	  
	    // Configured the initial events that the composite view
	    // binds to. Override this method to prevent the initial
	    // events, or to add your own initial events.
	    _initialEvents: function() {
	  
	      // Bind only after composite view is rendered to avoid adding child views
	      // to nonexistent childViewContainer
	  
	      if (this.collection) {
	        this.listenTo(this.collection, 'add', this._onCollectionAdd);
	        this.listenTo(this.collection, 'remove', this._onCollectionRemove);
	        this.listenTo(this.collection, 'reset', this._renderChildren);
	  
	        if (this.getOption('sort')) {
	          this.listenTo(this.collection, 'sort', this._sortViews);
	        }
	      }
	    },
	  
	    // Retrieve the `childView` to be used when rendering each of
	    // the items in the collection. The default is to return
	    // `this.childView` or Marionette.CompositeView if no `childView`
	    // has been defined
	    getChildView: function(child) {
	      var childView = this.getOption('childView') || this.constructor;
	  
	      return childView;
	    },
	  
	    // Serialize the model for the view.
	    // You can override the `serializeData` method in your own view
	    // definition, to provide custom serialization for your view's data.
	    serializeData: function() {
	      var data = {};
	  
	      if (this.model) {
	        data = _.partial(this.serializeModel, this.model).apply(this, arguments);
	      }
	  
	      return data;
	    },
	  
	    // Renders the model and the collection.
	    render: function() {
	      this._ensureViewIsIntact();
	      this._isRendering = true;
	      this.resetChildViewContainer();
	  
	      this.triggerMethod('before:render', this);
	  
	      this._renderTemplate();
	      this._renderChildren();
	  
	      this._isRendering = false;
	      this.isRendered = true;
	      this.triggerMethod('render', this);
	      return this;
	    },
	  
	    _renderChildren: function() {
	      if (this.isRendered || this._isRendering) {
	        Marionette.CollectionView.prototype._renderChildren.call(this);
	      }
	    },
	  
	    // Render the root template that the children
	    // views are appended to
	    _renderTemplate: function() {
	      var data = {};
	      data = this.serializeData();
	      data = this.mixinTemplateHelpers(data);
	  
	      this.triggerMethod('before:render:template');
	  
	      var template = this.getTemplate();
	      var html = Marionette.Renderer.render(template, data, this);
	      this.attachElContent(html);
	  
	      // the ui bindings is done here and not at the end of render since they
	      // will not be available until after the model is rendered, but should be
	      // available before the collection is rendered.
	      this.bindUIElements();
	      this.triggerMethod('render:template');
	    },
	  
	    // Attaches the content of the root.
	    // This method can be overridden to optimize rendering,
	    // or to render in a non standard way.
	    //
	    // For example, using `innerHTML` instead of `$el.html`
	    //
	    // ```js
	    // attachElContent: function(html) {
	    //   this.el.innerHTML = html;
	    //   return this;
	    // }
	    // ```
	    attachElContent: function(html) {
	      this.$el.html(html);
	  
	      return this;
	    },
	  
	    // You might need to override this if you've overridden attachHtml
	    attachBuffer: function(compositeView, buffer) {
	      var $container = this.getChildViewContainer(compositeView);
	      $container.append(buffer);
	    },
	  
	    // Internal method. Append a view to the end of the $el.
	    // Overidden from CollectionView to ensure view is appended to
	    // childViewContainer
	    _insertAfter: function(childView) {
	      var $container = this.getChildViewContainer(this, childView);
	      $container.append(childView.el);
	    },
	  
	    // Internal method. Append reordered childView'.
	    // Overidden from CollectionView to ensure reordered views
	    // are appended to childViewContainer
	    _appendReorderedChildren: function(children) {
	      var $container = this.getChildViewContainer(this);
	      $container.append(children);
	    },
	  
	    // Internal method to ensure an `$childViewContainer` exists, for the
	    // `attachHtml` method to use.
	    getChildViewContainer: function(containerView, childView) {
	      if (!!containerView.$childViewContainer) {
	        return containerView.$childViewContainer;
	      }
	  
	      var container;
	      var childViewContainer = Marionette.getOption(containerView, 'childViewContainer');
	      if (childViewContainer) {
	  
	        var selector = Marionette._getValue(childViewContainer, containerView);
	  
	        if (selector.charAt(0) === '@' && containerView.ui) {
	          container = containerView.ui[selector.substr(4)];
	        } else {
	          container = containerView.$(selector);
	        }
	  
	        if (container.length <= 0) {
	          throw new Marionette.Error({
	            name: 'ChildViewContainerMissingError',
	            message: 'The specified "childViewContainer" was not found: ' + containerView.childViewContainer
	          });
	        }
	  
	      } else {
	        container = containerView.$el;
	      }
	  
	      containerView.$childViewContainer = container;
	      return container;
	    },
	  
	    // Internal method to reset the `$childViewContainer` on render
	    resetChildViewContainer: function() {
	      if (this.$childViewContainer) {
	        this.$childViewContainer = undefined;
	      }
	    }
	  });
	  
	  // Layout View
	  // -----------
	  
	  // Used for managing application layoutViews, nested layoutViews and
	  // multiple regions within an application or sub-application.
	  //
	  // A specialized view class that renders an area of HTML and then
	  // attaches `Region` instances to the specified `regions`.
	  // Used for composite view management and sub-application areas.
	  Marionette.LayoutView = Marionette.ItemView.extend({
	    regionClass: Marionette.Region,
	  
	    options: {
	      destroyImmediate: false
	    },
	  
	    // used as the prefix for child view events
	    // that are forwarded through the layoutview
	    childViewEventPrefix: 'childview',
	  
	    // Ensure the regions are available when the `initialize` method
	    // is called.
	    constructor: function(options) {
	      options = options || {};
	  
	      this._firstRender = true;
	      this._initializeRegions(options);
	  
	      Marionette.ItemView.call(this, options);
	    },
	  
	    // LayoutView's render will use the existing region objects the
	    // first time it is called. Subsequent calls will destroy the
	    // views that the regions are showing and then reset the `el`
	    // for the regions to the newly rendered DOM elements.
	    render: function() {
	      this._ensureViewIsIntact();
	  
	      if (this._firstRender) {
	        // if this is the first render, don't do anything to
	        // reset the regions
	        this._firstRender = false;
	      } else {
	        // If this is not the first render call, then we need to
	        // re-initialize the `el` for each region
	        this._reInitializeRegions();
	      }
	  
	      return Marionette.ItemView.prototype.render.apply(this, arguments);
	    },
	  
	    // Handle destroying regions, and then destroy the view itself.
	    destroy: function() {
	      if (this.isDestroyed) { return this; }
	      // #2134: remove parent element before destroying the child views, so
	      // removing the child views doesn't retrigger repaints
	      if (this.getOption('destroyImmediate') === true) {
	        this.$el.remove();
	      }
	      this.regionManager.destroy();
	      return Marionette.ItemView.prototype.destroy.apply(this, arguments);
	    },
	  
	    showChildView: function(regionName, view, options) {
	      var region = this.getRegion(regionName);
	      return region.show.apply(region, _.rest(arguments));
	    },
	  
	    getChildView: function(regionName) {
	      return this.getRegion(regionName).currentView;
	    },
	  
	    // Add a single region, by name, to the layoutView
	    addRegion: function(name, definition) {
	      var regions = {};
	      regions[name] = definition;
	      return this._buildRegions(regions)[name];
	    },
	  
	    // Add multiple regions as a {name: definition, name2: def2} object literal
	    addRegions: function(regions) {
	      this.regions = _.extend({}, this.regions, regions);
	      return this._buildRegions(regions);
	    },
	  
	    // Remove a single region from the LayoutView, by name
	    removeRegion: function(name) {
	      delete this.regions[name];
	      return this.regionManager.removeRegion(name);
	    },
	  
	    // Provides alternative access to regions
	    // Accepts the region name
	    // getRegion('main')
	    getRegion: function(region) {
	      return this.regionManager.get(region);
	    },
	  
	    // Get all regions
	    getRegions: function() {
	      return this.regionManager.getRegions();
	    },
	  
	    // internal method to build regions
	    _buildRegions: function(regions) {
	      var defaults = {
	        regionClass: this.getOption('regionClass'),
	        parentEl: _.partial(_.result, this, 'el')
	      };
	  
	      return this.regionManager.addRegions(regions, defaults);
	    },
	  
	    // Internal method to initialize the regions that have been defined in a
	    // `regions` attribute on this layoutView.
	    _initializeRegions: function(options) {
	      var regions;
	      this._initRegionManager();
	  
	      regions = Marionette._getValue(this.regions, this, [options]) || {};
	  
	      // Enable users to define `regions` as instance options.
	      var regionOptions = this.getOption.call(options, 'regions');
	  
	      // enable region options to be a function
	      regionOptions = Marionette._getValue(regionOptions, this, [options]);
	  
	      _.extend(regions, regionOptions);
	  
	      // Normalize region selectors hash to allow
	      // a user to use the @ui. syntax.
	      regions = this.normalizeUIValues(regions, ['selector', 'el']);
	  
	      this.addRegions(regions);
	    },
	  
	    // Internal method to re-initialize all of the regions by updating the `el` that
	    // they point to
	    _reInitializeRegions: function() {
	      this.regionManager.invoke('reset');
	    },
	  
	    // Enable easy overriding of the default `RegionManager`
	    // for customized region interactions and business specific
	    // view logic for better control over single regions.
	    getRegionManager: function() {
	      return new Marionette.RegionManager();
	    },
	  
	    // Internal method to initialize the region manager
	    // and all regions in it
	    _initRegionManager: function() {
	      this.regionManager = this.getRegionManager();
	      this.regionManager._parent = this;
	  
	      this.listenTo(this.regionManager, 'before:add:region', function(name) {
	        this.triggerMethod('before:add:region', name);
	      });
	  
	      this.listenTo(this.regionManager, 'add:region', function(name, region) {
	        this[name] = region;
	        this.triggerMethod('add:region', name, region);
	      });
	  
	      this.listenTo(this.regionManager, 'before:remove:region', function(name) {
	        this.triggerMethod('before:remove:region', name);
	      });
	  
	      this.listenTo(this.regionManager, 'remove:region', function(name, region) {
	        delete this[name];
	        this.triggerMethod('remove:region', name, region);
	      });
	    },
	  
	    _getImmediateChildren: function() {
	      return _.chain(this.regionManager.getRegions())
	        .pluck('currentView')
	        .compact()
	        .value();
	    }
	  });
	  
	
	  // Behavior
	  // --------
	  
	  // A Behavior is an isolated set of DOM /
	  // user interactions that can be mixed into any View.
	  // Behaviors allow you to blackbox View specific interactions
	  // into portable logical chunks, keeping your views simple and your code DRY.
	  
	  Marionette.Behavior = Marionette.Object.extend({
	    constructor: function(options, view) {
	      // Setup reference to the view.
	      // this comes in handle when a behavior
	      // wants to directly talk up the chain
	      // to the view.
	      this.view = view;
	      this.defaults = _.result(this, 'defaults') || {};
	      this.options  = _.extend({}, this.defaults, options);
	      // Construct an internal UI hash using
	      // the views UI hash and then the behaviors UI hash.
	      // This allows the user to use UI hash elements
	      // defined in the parent view as well as those
	      // defined in the given behavior.
	      this.ui = _.extend({}, _.result(view, 'ui'), _.result(this, 'ui'));
	  
	      Marionette.Object.apply(this, arguments);
	    },
	  
	    // proxy behavior $ method to the view
	    // this is useful for doing jquery DOM lookups
	    // scoped to behaviors view.
	    $: function() {
	      return this.view.$.apply(this.view, arguments);
	    },
	  
	    // Stops the behavior from listening to events.
	    // Overrides Object#destroy to prevent additional events from being triggered.
	    destroy: function() {
	      this.stopListening();
	  
	      return this;
	    },
	  
	    proxyViewProperties: function(view) {
	      this.$el = view.$el;
	      this.el = view.el;
	    }
	  });
	  
	  /* jshint maxlen: 143 */
	  // Behaviors
	  // ---------
	  
	  // Behaviors is a utility class that takes care of
	  // gluing your behavior instances to their given View.
	  // The most important part of this class is that you
	  // **MUST** override the class level behaviorsLookup
	  // method for things to work properly.
	  
	  Marionette.Behaviors = (function(Marionette, _) {
	    // Borrow event splitter from Backbone
	    var delegateEventSplitter = /^(\S+)\s*(.*)$/;
	  
	    function Behaviors(view, behaviors) {
	  
	      if (!_.isObject(view.behaviors)) {
	        return {};
	      }
	  
	      // Behaviors defined on a view can be a flat object literal
	      // or it can be a function that returns an object.
	      behaviors = Behaviors.parseBehaviors(view, behaviors || _.result(view, 'behaviors'));
	  
	      // Wraps several of the view's methods
	      // calling the methods first on each behavior
	      // and then eventually calling the method on the view.
	      Behaviors.wrap(view, behaviors, _.keys(methods));
	      return behaviors;
	    }
	  
	    var methods = {
	      behaviorTriggers: function(behaviorTriggers, behaviors) {
	        var triggerBuilder = new BehaviorTriggersBuilder(this, behaviors);
	        return triggerBuilder.buildBehaviorTriggers();
	      },
	  
	      behaviorEvents: function(behaviorEvents, behaviors) {
	        var _behaviorsEvents = {};
	  
	        _.each(behaviors, function(b, i) {
	          var _events = {};
	          var behaviorEvents = _.clone(_.result(b, 'events')) || {};
	  
	          // Normalize behavior events hash to allow
	          // a user to use the @ui. syntax.
	          behaviorEvents = Marionette.normalizeUIKeys(behaviorEvents, getBehaviorsUI(b));
	  
	          var j = 0;
	          _.each(behaviorEvents, function(behaviour, key) {
	            var match     = key.match(delegateEventSplitter);
	  
	            // Set event name to be namespaced using the view cid,
	            // the behavior index, and the behavior event index
	            // to generate a non colliding event namespace
	            // http://api.jquery.com/event.namespace/
	            var eventName = match[1] + '.' + [this.cid, i, j++, ' '].join('');
	            var selector  = match[2];
	  
	            var eventKey  = eventName + selector;
	            var handler   = _.isFunction(behaviour) ? behaviour : b[behaviour];
	            if (!handler) { return; }
	            _events[eventKey] = _.bind(handler, b);
	          }, this);
	  
	          _behaviorsEvents = _.extend(_behaviorsEvents, _events);
	        }, this);
	  
	        return _behaviorsEvents;
	      }
	    };
	  
	    _.extend(Behaviors, {
	  
	      // Placeholder method to be extended by the user.
	      // The method should define the object that stores the behaviors.
	      // i.e.
	      //
	      // ```js
	      // Marionette.Behaviors.behaviorsLookup: function() {
	      //   return App.Behaviors
	      // }
	      // ```
	      behaviorsLookup: function() {
	        throw new Marionette.Error({
	          message: 'You must define where your behaviors are stored.',
	          url: 'marionette.behaviors.html#behaviorslookup'
	        });
	      },
	  
	      // Takes care of getting the behavior class
	      // given options and a key.
	      // If a user passes in options.behaviorClass
	      // default to using that. Otherwise delegate
	      // the lookup to the users `behaviorsLookup` implementation.
	      getBehaviorClass: function(options, key) {
	        if (options.behaviorClass) {
	          return options.behaviorClass;
	        }
	  
	        // Get behavior class can be either a flat object or a method
	        return Marionette._getValue(Behaviors.behaviorsLookup, this, [options, key])[key];
	      },
	  
	      // Iterate over the behaviors object, for each behavior
	      // instantiate it and get its grouped behaviors.
	      parseBehaviors: function(view, behaviors) {
	        return _.chain(behaviors).map(function(options, key) {
	          var BehaviorClass = Behaviors.getBehaviorClass(options, key);
	  
	          var behavior = new BehaviorClass(options, view);
	          var nestedBehaviors = Behaviors.parseBehaviors(view, _.result(behavior, 'behaviors'));
	  
	          return [behavior].concat(nestedBehaviors);
	        }).flatten().value();
	      },
	  
	      // Wrap view internal methods so that they delegate to behaviors. For example,
	      // `onDestroy` should trigger destroy on all of the behaviors and then destroy itself.
	      // i.e.
	      //
	      // `view.delegateEvents = _.partial(methods.delegateEvents, view.delegateEvents, behaviors);`
	      wrap: function(view, behaviors, methodNames) {
	        _.each(methodNames, function(methodName) {
	          view[methodName] = _.partial(methods[methodName], view[methodName], behaviors);
	        });
	      }
	    });
	  
	    // Class to build handlers for `triggers` on behaviors
	    // for views
	    function BehaviorTriggersBuilder(view, behaviors) {
	      this._view      = view;
	      this._behaviors = behaviors;
	      this._triggers  = {};
	    }
	  
	    _.extend(BehaviorTriggersBuilder.prototype, {
	      // Main method to build the triggers hash with event keys and handlers
	      buildBehaviorTriggers: function() {
	        _.each(this._behaviors, this._buildTriggerHandlersForBehavior, this);
	        return this._triggers;
	      },
	  
	      // Internal method to build all trigger handlers for a given behavior
	      _buildTriggerHandlersForBehavior: function(behavior, i) {
	        var triggersHash = _.clone(_.result(behavior, 'triggers')) || {};
	  
	        triggersHash = Marionette.normalizeUIKeys(triggersHash, getBehaviorsUI(behavior));
	  
	        _.each(triggersHash, _.bind(this._setHandlerForBehavior, this, behavior, i));
	      },
	  
	      // Internal method to create and assign the trigger handler for a given
	      // behavior
	      _setHandlerForBehavior: function(behavior, i, eventName, trigger) {
	        // Unique identifier for the `this._triggers` hash
	        var triggerKey = trigger.replace(/^\S+/, function(triggerName) {
	          return triggerName + '.' + 'behaviortriggers' + i;
	        });
	  
	        this._triggers[triggerKey] = this._view._buildViewTrigger(eventName);
	      }
	    });
	  
	    function getBehaviorsUI(behavior) {
	      return behavior._uiBindings || behavior.ui;
	    }
	  
	    return Behaviors;
	  
	  })(Marionette, _);
	  
	
	  // App Router
	  // ----------
	  
	  // Reduce the boilerplate code of handling route events
	  // and then calling a single method on another object.
	  // Have your routers configured to call the method on
	  // your object, directly.
	  //
	  // Configure an AppRouter with `appRoutes`.
	  //
	  // App routers can only take one `controller` object.
	  // It is recommended that you divide your controller
	  // objects in to smaller pieces of related functionality
	  // and have multiple routers / controllers, instead of
	  // just one giant router and controller.
	  //
	  // You can also add standard routes to an AppRouter.
	  
	  Marionette.AppRouter = Backbone.Router.extend({
	  
	    constructor: function(options) {
	      this.options = options || {};
	  
	      Backbone.Router.apply(this, arguments);
	  
	      var appRoutes = this.getOption('appRoutes');
	      var controller = this._getController();
	      this.processAppRoutes(controller, appRoutes);
	      this.on('route', this._processOnRoute, this);
	    },
	  
	    // Similar to route method on a Backbone Router but
	    // method is called on the controller
	    appRoute: function(route, methodName) {
	      var controller = this._getController();
	      this._addAppRoute(controller, route, methodName);
	    },
	  
	    // process the route event and trigger the onRoute
	    // method call, if it exists
	    _processOnRoute: function(routeName, routeArgs) {
	      // make sure an onRoute before trying to call it
	      if (_.isFunction(this.onRoute)) {
	        // find the path that matches the current route
	        var routePath = _.invert(this.getOption('appRoutes'))[routeName];
	        this.onRoute(routeName, routePath, routeArgs);
	      }
	    },
	  
	    // Internal method to process the `appRoutes` for the
	    // router, and turn them in to routes that trigger the
	    // specified method on the specified `controller`.
	    processAppRoutes: function(controller, appRoutes) {
	      if (!appRoutes) { return; }
	  
	      var routeNames = _.keys(appRoutes).reverse(); // Backbone requires reverted order of routes
	  
	      _.each(routeNames, function(route) {
	        this._addAppRoute(controller, route, appRoutes[route]);
	      }, this);
	    },
	  
	    _getController: function() {
	      return this.getOption('controller');
	    },
	  
	    _addAppRoute: function(controller, route, methodName) {
	      var method = controller[methodName];
	  
	      if (!method) {
	        throw new Marionette.Error('Method "' + methodName + '" was not found on the controller');
	      }
	  
	      this.route(route, methodName, _.bind(method, controller));
	    },
	  
	    mergeOptions: Marionette.mergeOptions,
	  
	    // Proxy `getOption` to enable getting options from this or this.options by name.
	    getOption: Marionette.proxyGetOption,
	  
	    triggerMethod: Marionette.triggerMethod,
	  
	    bindEntityEvents: Marionette.proxyBindEntityEvents,
	  
	    unbindEntityEvents: Marionette.proxyUnbindEntityEvents
	  });
	  
	  // Application
	  // -----------
	  
	  // Contain and manage the composite application as a whole.
	  // Stores and starts up `Region` objects, includes an
	  // event aggregator as `app.vent`
	  Marionette.Application = Marionette.Object.extend({
	    constructor: function(options) {
	      this._initializeRegions(options);
	      this._initCallbacks = new Marionette.Callbacks();
	      this.submodules = {};
	      _.extend(this, options);
	      this._initChannel();
	      Marionette.Object.apply(this, arguments);
	    },
	  
	    // Command execution, facilitated by Backbone.Wreqr.Commands
	    execute: function() {
	      this.commands.execute.apply(this.commands, arguments);
	    },
	  
	    // Request/response, facilitated by Backbone.Wreqr.RequestResponse
	    request: function() {
	      return this.reqres.request.apply(this.reqres, arguments);
	    },
	  
	    // Add an initializer that is either run at when the `start`
	    // method is called, or run immediately if added after `start`
	    // has already been called.
	    addInitializer: function(initializer) {
	      this._initCallbacks.add(initializer);
	    },
	  
	    // kick off all of the application's processes.
	    // initializes all of the regions that have been added
	    // to the app, and runs all of the initializer functions
	    start: function(options) {
	      this.triggerMethod('before:start', options);
	      this._initCallbacks.run(options, this);
	      this.triggerMethod('start', options);
	    },
	  
	    // Add regions to your app.
	    // Accepts a hash of named strings or Region objects
	    // addRegions({something: "#someRegion"})
	    // addRegions({something: Region.extend({el: "#someRegion"}) });
	    addRegions: function(regions) {
	      return this._regionManager.addRegions(regions);
	    },
	  
	    // Empty all regions in the app, without removing them
	    emptyRegions: function() {
	      return this._regionManager.emptyRegions();
	    },
	  
	    // Removes a region from your app, by name
	    // Accepts the regions name
	    // removeRegion('myRegion')
	    removeRegion: function(region) {
	      return this._regionManager.removeRegion(region);
	    },
	  
	    // Provides alternative access to regions
	    // Accepts the region name
	    // getRegion('main')
	    getRegion: function(region) {
	      return this._regionManager.get(region);
	    },
	  
	    // Get all the regions from the region manager
	    getRegions: function() {
	      return this._regionManager.getRegions();
	    },
	  
	    // Create a module, attached to the application
	    module: function(moduleNames, moduleDefinition) {
	  
	      // Overwrite the module class if the user specifies one
	      var ModuleClass = Marionette.Module.getClass(moduleDefinition);
	  
	      var args = _.toArray(arguments);
	      args.unshift(this);
	  
	      // see the Marionette.Module object for more information
	      return ModuleClass.create.apply(ModuleClass, args);
	    },
	  
	    // Enable easy overriding of the default `RegionManager`
	    // for customized region interactions and business-specific
	    // view logic for better control over single regions.
	    getRegionManager: function() {
	      return new Marionette.RegionManager();
	    },
	  
	    // Internal method to initialize the regions that have been defined in a
	    // `regions` attribute on the application instance
	    _initializeRegions: function(options) {
	      var regions = _.isFunction(this.regions) ? this.regions(options) : this.regions || {};
	  
	      this._initRegionManager();
	  
	      // Enable users to define `regions` in instance options.
	      var optionRegions = Marionette.getOption(options, 'regions');
	  
	      // Enable region options to be a function
	      if (_.isFunction(optionRegions)) {
	        optionRegions = optionRegions.call(this, options);
	      }
	  
	      // Overwrite current regions with those passed in options
	      _.extend(regions, optionRegions);
	  
	      this.addRegions(regions);
	  
	      return this;
	    },
	  
	    // Internal method to set up the region manager
	    _initRegionManager: function() {
	      this._regionManager = this.getRegionManager();
	      this._regionManager._parent = this;
	  
	      this.listenTo(this._regionManager, 'before:add:region', function() {
	        Marionette._triggerMethod(this, 'before:add:region', arguments);
	      });
	  
	      this.listenTo(this._regionManager, 'add:region', function(name, region) {
	        this[name] = region;
	        Marionette._triggerMethod(this, 'add:region', arguments);
	      });
	  
	      this.listenTo(this._regionManager, 'before:remove:region', function() {
	        Marionette._triggerMethod(this, 'before:remove:region', arguments);
	      });
	  
	      this.listenTo(this._regionManager, 'remove:region', function(name) {
	        delete this[name];
	        Marionette._triggerMethod(this, 'remove:region', arguments);
	      });
	    },
	  
	    // Internal method to setup the Wreqr.radio channel
	    _initChannel: function() {
	      this.channelName = _.result(this, 'channelName') || 'global';
	      this.channel = _.result(this, 'channel') || Backbone.Wreqr.radio.channel(this.channelName);
	      this.vent = _.result(this, 'vent') || this.channel.vent;
	      this.commands = _.result(this, 'commands') || this.channel.commands;
	      this.reqres = _.result(this, 'reqres') || this.channel.reqres;
	    }
	  });
	  
	  /* jshint maxparams: 9 */
	  
	  // Module
	  // ------
	  
	  // A simple module system, used to create privacy and encapsulation in
	  // Marionette applications
	  Marionette.Module = function(moduleName, app, options) {
	    this.moduleName = moduleName;
	    this.options = _.extend({}, this.options, options);
	    // Allow for a user to overide the initialize
	    // for a given module instance.
	    this.initialize = options.initialize || this.initialize;
	  
	    // Set up an internal store for sub-modules.
	    this.submodules = {};
	  
	    this._setupInitializersAndFinalizers();
	  
	    // Set an internal reference to the app
	    // within a module.
	    this.app = app;
	  
	    if (_.isFunction(this.initialize)) {
	      this.initialize(moduleName, app, this.options);
	    }
	  };
	  
	  Marionette.Module.extend = Marionette.extend;
	  
	  // Extend the Module prototype with events / listenTo, so that the module
	  // can be used as an event aggregator or pub/sub.
	  _.extend(Marionette.Module.prototype, Backbone.Events, {
	  
	    // By default modules start with their parents.
	    startWithParent: true,
	  
	    // Initialize is an empty function by default. Override it with your own
	    // initialization logic when extending Marionette.Module.
	    initialize: function() {},
	  
	    // Initializer for a specific module. Initializers are run when the
	    // module's `start` method is called.
	    addInitializer: function(callback) {
	      this._initializerCallbacks.add(callback);
	    },
	  
	    // Finalizers are run when a module is stopped. They are used to teardown
	    // and finalize any variables, references, events and other code that the
	    // module had set up.
	    addFinalizer: function(callback) {
	      this._finalizerCallbacks.add(callback);
	    },
	  
	    // Start the module, and run all of its initializers
	    start: function(options) {
	      // Prevent re-starting a module that is already started
	      if (this._isInitialized) { return; }
	  
	      // start the sub-modules (depth-first hierarchy)
	      _.each(this.submodules, function(mod) {
	        // check to see if we should start the sub-module with this parent
	        if (mod.startWithParent) {
	          mod.start(options);
	        }
	      });
	  
	      // run the callbacks to "start" the current module
	      this.triggerMethod('before:start', options);
	  
	      this._initializerCallbacks.run(options, this);
	      this._isInitialized = true;
	  
	      this.triggerMethod('start', options);
	    },
	  
	    // Stop this module by running its finalizers and then stop all of
	    // the sub-modules for this module
	    stop: function() {
	      // if we are not initialized, don't bother finalizing
	      if (!this._isInitialized) { return; }
	      this._isInitialized = false;
	  
	      this.triggerMethod('before:stop');
	  
	      // stop the sub-modules; depth-first, to make sure the
	      // sub-modules are stopped / finalized before parents
	      _.invoke(this.submodules, 'stop');
	  
	      // run the finalizers
	      this._finalizerCallbacks.run(undefined, this);
	  
	      // reset the initializers and finalizers
	      this._initializerCallbacks.reset();
	      this._finalizerCallbacks.reset();
	  
	      this.triggerMethod('stop');
	    },
	  
	    // Configure the module with a definition function and any custom args
	    // that are to be passed in to the definition function
	    addDefinition: function(moduleDefinition, customArgs) {
	      this._runModuleDefinition(moduleDefinition, customArgs);
	    },
	  
	    // Internal method: run the module definition function with the correct
	    // arguments
	    _runModuleDefinition: function(definition, customArgs) {
	      // If there is no definition short circut the method.
	      if (!definition) { return; }
	  
	      // build the correct list of arguments for the module definition
	      var args = _.flatten([
	        this,
	        this.app,
	        Backbone,
	        Marionette,
	        Backbone.$, _,
	        customArgs
	      ]);
	  
	      definition.apply(this, args);
	    },
	  
	    // Internal method: set up new copies of initializers and finalizers.
	    // Calling this method will wipe out all existing initializers and
	    // finalizers.
	    _setupInitializersAndFinalizers: function() {
	      this._initializerCallbacks = new Marionette.Callbacks();
	      this._finalizerCallbacks = new Marionette.Callbacks();
	    },
	  
	    // import the `triggerMethod` to trigger events with corresponding
	    // methods if the method exists
	    triggerMethod: Marionette.triggerMethod
	  });
	  
	  // Class methods to create modules
	  _.extend(Marionette.Module, {
	  
	    // Create a module, hanging off the app parameter as the parent object.
	    create: function(app, moduleNames, moduleDefinition) {
	      var module = app;
	  
	      // get the custom args passed in after the module definition and
	      // get rid of the module name and definition function
	      var customArgs = _.drop(arguments, 3);
	  
	      // Split the module names and get the number of submodules.
	      // i.e. an example module name of `Doge.Wow.Amaze` would
	      // then have the potential for 3 module definitions.
	      moduleNames = moduleNames.split('.');
	      var length = moduleNames.length;
	  
	      // store the module definition for the last module in the chain
	      var moduleDefinitions = [];
	      moduleDefinitions[length - 1] = moduleDefinition;
	  
	      // Loop through all the parts of the module definition
	      _.each(moduleNames, function(moduleName, i) {
	        var parentModule = module;
	        module = this._getModule(parentModule, moduleName, app, moduleDefinition);
	        this._addModuleDefinition(parentModule, module, moduleDefinitions[i], customArgs);
	      }, this);
	  
	      // Return the last module in the definition chain
	      return module;
	    },
	  
	    _getModule: function(parentModule, moduleName, app, def, args) {
	      var options = _.extend({}, def);
	      var ModuleClass = this.getClass(def);
	  
	      // Get an existing module of this name if we have one
	      var module = parentModule[moduleName];
	  
	      if (!module) {
	        // Create a new module if we don't have one
	        module = new ModuleClass(moduleName, app, options);
	        parentModule[moduleName] = module;
	        // store the module on the parent
	        parentModule.submodules[moduleName] = module;
	      }
	  
	      return module;
	    },
	  
	    // ## Module Classes
	    //
	    // Module classes can be used as an alternative to the define pattern.
	    // The extend function of a Module is identical to the extend functions
	    // on other Backbone and Marionette classes.
	    // This allows module lifecyle events like `onStart` and `onStop` to be called directly.
	    getClass: function(moduleDefinition) {
	      var ModuleClass = Marionette.Module;
	  
	      if (!moduleDefinition) {
	        return ModuleClass;
	      }
	  
	      // If all of the module's functionality is defined inside its class,
	      // then the class can be passed in directly. `MyApp.module("Foo", FooModule)`.
	      if (moduleDefinition.prototype instanceof ModuleClass) {
	        return moduleDefinition;
	      }
	  
	      return moduleDefinition.moduleClass || ModuleClass;
	    },
	  
	    // Add the module definition and add a startWithParent initializer function.
	    // This is complicated because module definitions are heavily overloaded
	    // and support an anonymous function, module class, or options object
	    _addModuleDefinition: function(parentModule, module, def, args) {
	      var fn = this._getDefine(def);
	      var startWithParent = this._getStartWithParent(def, module);
	  
	      if (fn) {
	        module.addDefinition(fn, args);
	      }
	  
	      this._addStartWithParent(parentModule, module, startWithParent);
	    },
	  
	    _getStartWithParent: function(def, module) {
	      var swp;
	  
	      if (_.isFunction(def) && (def.prototype instanceof Marionette.Module)) {
	        swp = module.constructor.prototype.startWithParent;
	        return _.isUndefined(swp) ? true : swp;
	      }
	  
	      if (_.isObject(def)) {
	        swp = def.startWithParent;
	        return _.isUndefined(swp) ? true : swp;
	      }
	  
	      return true;
	    },
	  
	    _getDefine: function(def) {
	      if (_.isFunction(def) && !(def.prototype instanceof Marionette.Module)) {
	        return def;
	      }
	  
	      if (_.isObject(def)) {
	        return def.define;
	      }
	  
	      return null;
	    },
	  
	    _addStartWithParent: function(parentModule, module, startWithParent) {
	      module.startWithParent = module.startWithParent && startWithParent;
	  
	      if (!module.startWithParent || !!module.startWithParentIsConfigured) {
	        return;
	      }
	  
	      module.startWithParentIsConfigured = true;
	  
	      parentModule.addInitializer(function(options) {
	        if (module.startWithParent) {
	          module.start(options);
	        }
	      });
	    }
	  });
	  
	
	  return Marionette;
	}));


/***/ }),
/* 12 */
/***/ (function(module, exports, __webpack_require__) {

	var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!
	 * jQuery JavaScript Library v2.2.4
	 * http://jquery.com/
	 *
	 * Includes Sizzle.js
	 * http://sizzlejs.com/
	 *
	 * Copyright jQuery Foundation and other contributors
	 * Released under the MIT license
	 * http://jquery.org/license
	 *
	 * Date: 2016-05-20T17:23Z
	 */
	
	(function( global, factory ) {
	
		if ( typeof module === "object" && typeof module.exports === "object" ) {
			// For CommonJS and CommonJS-like environments where a proper `window`
			// is present, execute the factory and get jQuery.
			// For environments that do not have a `window` with a `document`
			// (such as Node.js), expose a factory as module.exports.
			// This accentuates the need for the creation of a real `window`.
			// e.g. var jQuery = require("jquery")(window);
			// See ticket #14549 for more info.
			module.exports = global.document ?
				factory( global, true ) :
				function( w ) {
					if ( !w.document ) {
						throw new Error( "jQuery requires a window with a document" );
					}
					return factory( w );
				};
		} else {
			factory( global );
		}
	
	// Pass this if window is not defined yet
	}(typeof window !== "undefined" ? window : this, function( window, noGlobal ) {
	
	// Support: Firefox 18+
	// Can't be in strict mode, several libs including ASP.NET trace
	// the stack via arguments.caller.callee and Firefox dies if
	// you try to trace through "use strict" call chains. (#13335)
	//"use strict";
	var arr = [];
	
	var document = window.document;
	
	var slice = arr.slice;
	
	var concat = arr.concat;
	
	var push = arr.push;
	
	var indexOf = arr.indexOf;
	
	var class2type = {};
	
	var toString = class2type.toString;
	
	var hasOwn = class2type.hasOwnProperty;
	
	var support = {};
	
	
	
	var
		version = "2.2.4",
	
		// Define a local copy of jQuery
		jQuery = function( selector, context ) {
	
			// The jQuery object is actually just the init constructor 'enhanced'
			// Need init if jQuery is called (just allow error to be thrown if not included)
			return new jQuery.fn.init( selector, context );
		},
	
		// Support: Android<4.1
		// Make sure we trim BOM and NBSP
		rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
	
		// Matches dashed string for camelizing
		rmsPrefix = /^-ms-/,
		rdashAlpha = /-([\da-z])/gi,
	
		// Used by jQuery.camelCase as callback to replace()
		fcamelCase = function( all, letter ) {
			return letter.toUpperCase();
		};
	
	jQuery.fn = jQuery.prototype = {
	
		// The current version of jQuery being used
		jquery: version,
	
		constructor: jQuery,
	
		// Start with an empty selector
		selector: "",
	
		// The default length of a jQuery object is 0
		length: 0,
	
		toArray: function() {
			return slice.call( this );
		},
	
		// Get the Nth element in the matched element set OR
		// Get the whole matched element set as a clean array
		get: function( num ) {
			return num != null ?
	
				// Return just the one element from the set
				( num < 0 ? this[ num + this.length ] : this[ num ] ) :
	
				// Return all the elements in a clean array
				slice.call( this );
		},
	
		// Take an array of elements and push it onto the stack
		// (returning the new matched element set)
		pushStack: function( elems ) {
	
			// Build a new jQuery matched element set
			var ret = jQuery.merge( this.constructor(), elems );
	
			// Add the old object onto the stack (as a reference)
			ret.prevObject = this;
			ret.context = this.context;
	
			// Return the newly-formed element set
			return ret;
		},
	
		// Execute a callback for every element in the matched set.
		each: function( callback ) {
			return jQuery.each( this, callback );
		},
	
		map: function( callback ) {
			return this.pushStack( jQuery.map( this, function( elem, i ) {
				return callback.call( elem, i, elem );
			} ) );
		},
	
		slice: function() {
			return this.pushStack( slice.apply( this, arguments ) );
		},
	
		first: function() {
			return this.eq( 0 );
		},
	
		last: function() {
			return this.eq( -1 );
		},
	
		eq: function( i ) {
			var len = this.length,
				j = +i + ( i < 0 ? len : 0 );
			return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );
		},
	
		end: function() {
			return this.prevObject || this.constructor();
		},
	
		// For internal use only.
		// Behaves like an Array's method, not like a jQuery method.
		push: push,
		sort: arr.sort,
		splice: arr.splice
	};
	
	jQuery.extend = jQuery.fn.extend = function() {
		var options, name, src, copy, copyIsArray, clone,
			target = arguments[ 0 ] || {},
			i = 1,
			length = arguments.length,
			deep = false;
	
		// Handle a deep copy situation
		if ( typeof target === "boolean" ) {
			deep = target;
	
			// Skip the boolean and the target
			target = arguments[ i ] || {};
			i++;
		}
	
		// Handle case when target is a string or something (possible in deep copy)
		if ( typeof target !== "object" && !jQuery.isFunction( target ) ) {
			target = {};
		}
	
		// Extend jQuery itself if only one argument is passed
		if ( i === length ) {
			target = this;
			i--;
		}
	
		for ( ; i < length; i++ ) {
	
			// Only deal with non-null/undefined values
			if ( ( options = arguments[ i ] ) != null ) {
	
				// Extend the base object
				for ( name in options ) {
					src = target[ name ];
					copy = options[ name ];
	
					// Prevent never-ending loop
					if ( target === copy ) {
						continue;
					}
	
					// Recurse if we're merging plain objects or arrays
					if ( deep && copy && ( jQuery.isPlainObject( copy ) ||
						( copyIsArray = jQuery.isArray( copy ) ) ) ) {
	
						if ( copyIsArray ) {
							copyIsArray = false;
							clone = src && jQuery.isArray( src ) ? src : [];
	
						} else {
							clone = src && jQuery.isPlainObject( src ) ? src : {};
						}
	
						// Never move original objects, clone them
						target[ name ] = jQuery.extend( deep, clone, copy );
	
					// Don't bring in undefined values
					} else if ( copy !== undefined ) {
						target[ name ] = copy;
					}
				}
			}
		}
	
		// Return the modified object
		return target;
	};
	
	jQuery.extend( {
	
		// Unique for each copy of jQuery on the page
		expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ),
	
		// Assume jQuery is ready without the ready module
		isReady: true,
	
		error: function( msg ) {
			throw new Error( msg );
		},
	
		noop: function() {},
	
		isFunction: function( obj ) {
			return jQuery.type( obj ) === "function";
		},
	
		isArray: Array.isArray,
	
		isWindow: function( obj ) {
			return obj != null && obj === obj.window;
		},
	
		isNumeric: function( obj ) {
	
			// parseFloat NaNs numeric-cast false positives (null|true|false|"")
			// ...but misinterprets leading-number strings, particularly hex literals ("0x...")
			// subtraction forces infinities to NaN
			// adding 1 corrects loss of precision from parseFloat (#15100)
			var realStringObj = obj && obj.toString();
			return !jQuery.isArray( obj ) && ( realStringObj - parseFloat( realStringObj ) + 1 ) >= 0;
		},
	
		isPlainObject: function( obj ) {
			var key;
	
			// Not plain objects:
			// - Any object or value whose internal [[Class]] property is not "[object Object]"
			// - DOM nodes
			// - window
			if ( jQuery.type( obj ) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
				return false;
			}
	
			// Not own constructor property must be Object
			if ( obj.constructor &&
					!hasOwn.call( obj, "constructor" ) &&
					!hasOwn.call( obj.constructor.prototype || {}, "isPrototypeOf" ) ) {
				return false;
			}
	
			// Own properties are enumerated firstly, so to speed up,
			// if last one is own, then all properties are own
			for ( key in obj ) {}
	
			return key === undefined || hasOwn.call( obj, key );
		},
	
		isEmptyObject: function( obj ) {
			var name;
			for ( name in obj ) {
				return false;
			}
			return true;
		},
	
		type: function( obj ) {
			if ( obj == null ) {
				return obj + "";
			}
	
			// Support: Android<4.0, iOS<6 (functionish RegExp)
			return typeof obj === "object" || typeof obj === "function" ?
				class2type[ toString.call( obj ) ] || "object" :
				typeof obj;
		},
	
		// Evaluates a script in a global context
		globalEval: function( code ) {
			var script,
				indirect = eval;
	
			code = jQuery.trim( code );
	
			if ( code ) {
	
				// If the code includes a valid, prologue position
				// strict mode pragma, execute code by injecting a
				// script tag into the document.
				if ( code.indexOf( "use strict" ) === 1 ) {
					script = document.createElement( "script" );
					script.text = code;
					document.head.appendChild( script ).parentNode.removeChild( script );
				} else {
	
					// Otherwise, avoid the DOM node creation, insertion
					// and removal by using an indirect global eval
	
					indirect( code );
				}
			}
		},
	
		// Convert dashed to camelCase; used by the css and data modules
		// Support: IE9-11+
		// Microsoft forgot to hump their vendor prefix (#9572)
		camelCase: function( string ) {
			return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
		},
	
		nodeName: function( elem, name ) {
			return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
		},
	
		each: function( obj, callback ) {
			var length, i = 0;
	
			if ( isArrayLike( obj ) ) {
				length = obj.length;
				for ( ; i < length; i++ ) {
					if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
						break;
					}
				}
			} else {
				for ( i in obj ) {
					if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
						break;
					}
				}
			}
	
			return obj;
		},
	
		// Support: Android<4.1
		trim: function( text ) {
			return text == null ?
				"" :
				( text + "" ).replace( rtrim, "" );
		},
	
		// results is for internal usage only
		makeArray: function( arr, results ) {
			var ret = results || [];
	
			if ( arr != null ) {
				if ( isArrayLike( Object( arr ) ) ) {
					jQuery.merge( ret,
						typeof arr === "string" ?
						[ arr ] : arr
					);
				} else {
					push.call( ret, arr );
				}
			}
	
			return ret;
		},
	
		inArray: function( elem, arr, i ) {
			return arr == null ? -1 : indexOf.call( arr, elem, i );
		},
	
		merge: function( first, second ) {
			var len = +second.length,
				j = 0,
				i = first.length;
	
			for ( ; j < len; j++ ) {
				first[ i++ ] = second[ j ];
			}
	
			first.length = i;
	
			return first;
		},
	
		grep: function( elems, callback, invert ) {
			var callbackInverse,
				matches = [],
				i = 0,
				length = elems.length,
				callbackExpect = !invert;
	
			// Go through the array, only saving the items
			// that pass the validator function
			for ( ; i < length; i++ ) {
				callbackInverse = !callback( elems[ i ], i );
				if ( callbackInverse !== callbackExpect ) {
					matches.push( elems[ i ] );
				}
			}
	
			return matches;
		},
	
		// arg is for internal usage only
		map: function( elems, callback, arg ) {
			var length, value,
				i = 0,
				ret = [];
	
			// Go through the array, translating each of the items to their new values
			if ( isArrayLike( elems ) ) {
				length = elems.length;
				for ( ; i < length; i++ ) {
					value = callback( elems[ i ], i, arg );
	
					if ( value != null ) {
						ret.push( value );
					}
				}
	
			// Go through every key on the object,
			} else {
				for ( i in elems ) {
					value = callback( elems[ i ], i, arg );
	
					if ( value != null ) {
						ret.push( value );
					}
				}
			}
	
			// Flatten any nested arrays
			return concat.apply( [], ret );
		},
	
		// A global GUID counter for objects
		guid: 1,
	
		// Bind a function to a context, optionally partially applying any
		// arguments.
		proxy: function( fn, context ) {
			var tmp, args, proxy;
	
			if ( typeof context === "string" ) {
				tmp = fn[ context ];
				context = fn;
				fn = tmp;
			}
	
			// Quick check to determine if target is callable, in the spec
			// this throws a TypeError, but we will just return undefined.
			if ( !jQuery.isFunction( fn ) ) {
				return undefined;
			}
	
			// Simulated bind
			args = slice.call( arguments, 2 );
			proxy = function() {
				return fn.apply( context || this, args.concat( slice.call( arguments ) ) );
			};
	
			// Set the guid of unique handler to the same of original handler, so it can be removed
			proxy.guid = fn.guid = fn.guid || jQuery.guid++;
	
			return proxy;
		},
	
		now: Date.now,
	
		// jQuery.support is not used in Core but other projects attach their
		// properties to it so it needs to exist.
		support: support
	} );
	
	// JSHint would error on this code due to the Symbol not being defined in ES5.
	// Defining this global in .jshintrc would create a danger of using the global
	// unguarded in another place, it seems safer to just disable JSHint for these
	// three lines.
	/* jshint ignore: start */
	if ( typeof Symbol === "function" ) {
		jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];
	}
	/* jshint ignore: end */
	
	// Populate the class2type map
	jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ),
	function( i, name ) {
		class2type[ "[object " + name + "]" ] = name.toLowerCase();
	} );
	
	function isArrayLike( obj ) {
	
		// Support: iOS 8.2 (not reproducible in simulator)
		// `in` check used to prevent JIT error (gh-2145)
		// hasOwn isn't used here due to false negatives
		// regarding Nodelist length in IE
		var length = !!obj && "length" in obj && obj.length,
			type = jQuery.type( obj );
	
		if ( type === "function" || jQuery.isWindow( obj ) ) {
			return false;
		}
	
		return type === "array" || length === 0 ||
			typeof length === "number" && length > 0 && ( length - 1 ) in obj;
	}
	var Sizzle =
	/*!
	 * Sizzle CSS Selector Engine v2.2.1
	 * http://sizzlejs.com/
	 *
	 * Copyright jQuery Foundation and other contributors
	 * Released under the MIT license
	 * http://jquery.org/license
	 *
	 * Date: 2015-10-17
	 */
	(function( window ) {
	
	var i,
		support,
		Expr,
		getText,
		isXML,
		tokenize,
		compile,
		select,
		outermostContext,
		sortInput,
		hasDuplicate,
	
		// Local document vars
		setDocument,
		document,
		docElem,
		documentIsHTML,
		rbuggyQSA,
		rbuggyMatches,
		matches,
		contains,
	
		// Instance-specific data
		expando = "sizzle" + 1 * new Date(),
		preferredDoc = window.document,
		dirruns = 0,
		done = 0,
		classCache = createCache(),
		tokenCache = createCache(),
		compilerCache = createCache(),
		sortOrder = function( a, b ) {
			if ( a === b ) {
				hasDuplicate = true;
			}
			return 0;
		},
	
		// General-purpose constants
		MAX_NEGATIVE = 1 << 31,
	
		// Instance methods
		hasOwn = ({}).hasOwnProperty,
		arr = [],
		pop = arr.pop,
		push_native = arr.push,
		push = arr.push,
		slice = arr.slice,
		// Use a stripped-down indexOf as it's faster than native
		// http://jsperf.com/thor-indexof-vs-for/5
		indexOf = function( list, elem ) {
			var i = 0,
				len = list.length;
			for ( ; i < len; i++ ) {
				if ( list[i] === elem ) {
					return i;
				}
			}
			return -1;
		},
	
		booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",
	
		// Regular expressions
	
		// http://www.w3.org/TR/css3-selectors/#whitespace
		whitespace = "[\\x20\\t\\r\\n\\f]",
	
		// http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
		identifier = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",
	
		// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors
		attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace +
			// Operator (capture 2)
			"*([*^$|!~]?=)" + whitespace +
			// "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]"
			"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace +
			"*\\]",
	
		pseudos = ":(" + identifier + ")(?:\\((" +
			// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:
			// 1. quoted (capture 3; capture 4 or capture 5)
			"('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" +
			// 2. simple (capture 6)
			"((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" +
			// 3. anything else (capture 2)
			".*" +
			")\\)|)",
	
		// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
		rwhitespace = new RegExp( whitespace + "+", "g" ),
		rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ),
	
		rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
		rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ),
	
		rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ),
	
		rpseudo = new RegExp( pseudos ),
		ridentifier = new RegExp( "^" + identifier + "$" ),
	
		matchExpr = {
			"ID": new RegExp( "^#(" + identifier + ")" ),
			"CLASS": new RegExp( "^\\.(" + identifier + ")" ),
			"TAG": new RegExp( "^(" + identifier + "|[*])" ),
			"ATTR": new RegExp( "^" + attributes ),
			"PSEUDO": new RegExp( "^" + pseudos ),
			"CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace +
				"*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +
				"*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
			"bool": new RegExp( "^(?:" + booleans + ")$", "i" ),
			// For use in libraries implementing .is()
			// We use this for POS matching in `select`
			"needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" +
				whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
		},
	
		rinputs = /^(?:input|select|textarea|button)$/i,
		rheader = /^h\d$/i,
	
		rnative = /^[^{]+\{\s*\[native \w/,
	
		// Easily-parseable/retrievable ID or TAG or CLASS selectors
		rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
	
		rsibling = /[+~]/,
		rescape = /'|\\/g,
	
		// CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
		runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ),
		funescape = function( _, escaped, escapedWhitespace ) {
			var high = "0x" + escaped - 0x10000;
			// NaN means non-codepoint
			// Support: Firefox<24
			// Workaround erroneous numeric interpretation of +"0x"
			return high !== high || escapedWhitespace ?
				escaped :
				high < 0 ?
					// BMP codepoint
					String.fromCharCode( high + 0x10000 ) :
					// Supplemental Plane codepoint (surrogate pair)
					String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
		},
	
		// Used for iframes
		// See setDocument()
		// Removing the function wrapper causes a "Permission Denied"
		// error in IE
		unloadHandler = function() {
			setDocument();
		};
	
	// Optimize for push.apply( _, NodeList )
	try {
		push.apply(
			(arr = slice.call( preferredDoc.childNodes )),
			preferredDoc.childNodes
		);
		// Support: Android<4.0
		// Detect silently failing push.apply
		arr[ preferredDoc.childNodes.length ].nodeType;
	} catch ( e ) {
		push = { apply: arr.length ?
	
			// Leverage slice if possible
			function( target, els ) {
				push_native.apply( target, slice.call(els) );
			} :
	
			// Support: IE<9
			// Otherwise append directly
			function( target, els ) {
				var j = target.length,
					i = 0;
				// Can't trust NodeList.length
				while ( (target[j++] = els[i++]) ) {}
				target.length = j - 1;
			}
		};
	}
	
	function Sizzle( selector, context, results, seed ) {
		var m, i, elem, nid, nidselect, match, groups, newSelector,
			newContext = context && context.ownerDocument,
	
			// nodeType defaults to 9, since context defaults to document
			nodeType = context ? context.nodeType : 9;
	
		results = results || [];
	
		// Return early from calls with invalid selector or context
		if ( typeof selector !== "string" || !selector ||
			nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {
	
			return results;
		}
	
		// Try to shortcut find operations (as opposed to filters) in HTML documents
		if ( !seed ) {
	
			if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {
				setDocument( context );
			}
			context = context || document;
	
			if ( documentIsHTML ) {
	
				// If the selector is sufficiently simple, try using a "get*By*" DOM method
				// (excepting DocumentFragment context, where the methods don't exist)
				if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {
	
					// ID selector
					if ( (m = match[1]) ) {
	
						// Document context
						if ( nodeType === 9 ) {
							if ( (elem = context.getElementById( m )) ) {
	
								// Support: IE, Opera, Webkit
								// TODO: identify versions
								// getElementById can match elements by name instead of ID
								if ( elem.id === m ) {
									results.push( elem );
									return results;
								}
							} else {
								return results;
							}
	
						// Element context
						} else {
	
							// Support: IE, Opera, Webkit
							// TODO: identify versions
							// getElementById can match elements by name instead of ID
							if ( newContext && (elem = newContext.getElementById( m )) &&
								contains( context, elem ) &&
								elem.id === m ) {
	
								results.push( elem );
								return results;
							}
						}
	
					// Type selector
					} else if ( match[2] ) {
						push.apply( results, context.getElementsByTagName( selector ) );
						return results;
	
					// Class selector
					} else if ( (m = match[3]) && support.getElementsByClassName &&
						context.getElementsByClassName ) {
	
						push.apply( results, context.getElementsByClassName( m ) );
						return results;
					}
				}
	
				// Take advantage of querySelectorAll
				if ( support.qsa &&
					!compilerCache[ selector + " " ] &&
					(!rbuggyQSA || !rbuggyQSA.test( selector )) ) {
	
					if ( nodeType !== 1 ) {
						newContext = context;
						newSelector = selector;
	
					// qSA looks outside Element context, which is not what we want
					// Thanks to Andrew Dupont for this workaround technique
					// Support: IE <=8
					// Exclude object elements
					} else if ( context.nodeName.toLowerCase() !== "object" ) {
	
						// Capture the context ID, setting it first if necessary
						if ( (nid = context.getAttribute( "id" )) ) {
							nid = nid.replace( rescape, "\\$&" );
						} else {
							context.setAttribute( "id", (nid = expando) );
						}
	
						// Prefix every selector in the list
						groups = tokenize( selector );
						i = groups.length;
						nidselect = ridentifier.test( nid ) ? "#" + nid : "[id='" + nid + "']";
						while ( i-- ) {
							groups[i] = nidselect + " " + toSelector( groups[i] );
						}
						newSelector = groups.join( "," );
	
						// Expand context for sibling selectors
						newContext = rsibling.test( selector ) && testContext( context.parentNode ) ||
							context;
					}
	
					if ( newSelector ) {
						try {
							push.apply( results,
								newContext.querySelectorAll( newSelector )
							);
							return results;
						} catch ( qsaError ) {
						} finally {
							if ( nid === expando ) {
								context.removeAttribute( "id" );
							}
						}
					}
				}
			}
		}
	
		// All others
		return select( selector.replace( rtrim, "$1" ), context, results, seed );
	}
	
	/**
	 * Create key-value caches of limited size
	 * @returns {function(string, object)} Returns the Object data after storing it on itself with
	 *	property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
	 *	deleting the oldest entry
	 */
	function createCache() {
		var keys = [];
	
		function cache( key, value ) {
			// Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
			if ( keys.push( key + " " ) > Expr.cacheLength ) {
				// Only keep the most recent entries
				delete cache[ keys.shift() ];
			}
			return (cache[ key + " " ] = value);
		}
		return cache;
	}
	
	/**
	 * Mark a function for special use by Sizzle
	 * @param {Function} fn The function to mark
	 */
	function markFunction( fn ) {
		fn[ expando ] = true;
		return fn;
	}
	
	/**
	 * Support testing using an element
	 * @param {Function} fn Passed the created div and expects a boolean result
	 */
	function assert( fn ) {
		var div = document.createElement("div");
	
		try {
			return !!fn( div );
		} catch (e) {
			return false;
		} finally {
			// Remove from its parent by default
			if ( div.parentNode ) {
				div.parentNode.removeChild( div );
			}
			// release memory in IE
			div = null;
		}
	}
	
	/**
	 * Adds the same handler for all of the specified attrs
	 * @param {String} attrs Pipe-separated list of attributes
	 * @param {Function} handler The method that will be applied
	 */
	function addHandle( attrs, handler ) {
		var arr = attrs.split("|"),
			i = arr.length;
	
		while ( i-- ) {
			Expr.attrHandle[ arr[i] ] = handler;
		}
	}
	
	/**
	 * Checks document order of two siblings
	 * @param {Element} a
	 * @param {Element} b
	 * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b
	 */
	function siblingCheck( a, b ) {
		var cur = b && a,
			diff = cur && a.nodeType === 1 && b.nodeType === 1 &&
				( ~b.sourceIndex || MAX_NEGATIVE ) -
				( ~a.sourceIndex || MAX_NEGATIVE );
	
		// Use IE sourceIndex if available on both nodes
		if ( diff ) {
			return diff;
		}
	
		// Check if b follows a
		if ( cur ) {
			while ( (cur = cur.nextSibling) ) {
				if ( cur === b ) {
					return -1;
				}
			}
		}
	
		return a ? 1 : -1;
	}
	
	/**
	 * Returns a function to use in pseudos for input types
	 * @param {String} type
	 */
	function createInputPseudo( type ) {
		return function( elem ) {
			var name = elem.nodeName.toLowerCase();
			return name === "input" && elem.type === type;
		};
	}
	
	/**
	 * Returns a function to use in pseudos for buttons
	 * @param {String} type
	 */
	function createButtonPseudo( type ) {
		return function( elem ) {
			var name = elem.nodeName.toLowerCase();
			return (name === "input" || name === "button") && elem.type === type;
		};
	}
	
	/**
	 * Returns a function to use in pseudos for positionals
	 * @param {Function} fn
	 */
	function createPositionalPseudo( fn ) {
		return markFunction(function( argument ) {
			argument = +argument;
			return markFunction(function( seed, matches ) {
				var j,
					matchIndexes = fn( [], seed.length, argument ),
					i = matchIndexes.length;
	
				// Match elements found at the specified indexes
				while ( i-- ) {
					if ( seed[ (j = matchIndexes[i]) ] ) {
						seed[j] = !(matches[j] = seed[j]);
					}
				}
			});
		});
	}
	
	/**
	 * Checks a node for validity as a Sizzle context
	 * @param {Element|Object=} context
	 * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value
	 */
	function testContext( context ) {
		return context && typeof context.getElementsByTagName !== "undefined" && context;
	}
	
	// Expose support vars for convenience
	support = Sizzle.support = {};
	
	/**
	 * Detects XML nodes
	 * @param {Element|Object} elem An element or a document
	 * @returns {Boolean} True iff elem is a non-HTML XML node
	 */
	isXML = Sizzle.isXML = function( elem ) {
		// documentElement is verified for cases where it doesn't yet exist
		// (such as loading iframes in IE - #4833)
		var documentElement = elem && (elem.ownerDocument || elem).documentElement;
		return documentElement ? documentElement.nodeName !== "HTML" : false;
	};
	
	/**
	 * Sets document-related variables once based on the current document
	 * @param {Element|Object} [doc] An element or document object to use to set the document
	 * @returns {Object} Returns the current document
	 */
	setDocument = Sizzle.setDocument = function( node ) {
		var hasCompare, parent,
			doc = node ? node.ownerDocument || node : preferredDoc;
	
		// Return early if doc is invalid or already selected
		if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {
			return document;
		}
	
		// Update global variables
		document = doc;
		docElem = document.documentElement;
		documentIsHTML = !isXML( document );
	
		// Support: IE 9-11, Edge
		// Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936)
		if ( (parent = document.defaultView) && parent.top !== parent ) {
			// Support: IE 11
			if ( parent.addEventListener ) {
				parent.addEventListener( "unload", unloadHandler, false );
	
			// Support: IE 9 - 10 only
			} else if ( parent.attachEvent ) {
				parent.attachEvent( "onunload", unloadHandler );
			}
		}
	
		/* Attributes
		---------------------------------------------------------------------- */
	
		// Support: IE<8
		// Verify that getAttribute really returns attributes and not properties
		// (excepting IE8 booleans)
		support.attributes = assert(function( div ) {
			div.className = "i";
			return !div.getAttribute("className");
		});
	
		/* getElement(s)By*
		---------------------------------------------------------------------- */
	
		// Check if getElementsByTagName("*") returns only elements
		support.getElementsByTagName = assert(function( div ) {
			div.appendChild( document.createComment("") );
			return !div.getElementsByTagName("*").length;
		});
	
		// Support: IE<9
		support.getElementsByClassName = rnative.test( document.getElementsByClassName );
	
		// Support: IE<10
		// Check if getElementById returns elements by name
		// The broken getElementById methods don't pick up programatically-set names,
		// so use a roundabout getElementsByName test
		support.getById = assert(function( div ) {
			docElem.appendChild( div ).id = expando;
			return !document.getElementsByName || !document.getElementsByName( expando ).length;
		});
	
		// ID find and filter
		if ( support.getById ) {
			Expr.find["ID"] = function( id, context ) {
				if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
					var m = context.getElementById( id );
					return m ? [ m ] : [];
				}
			};
			Expr.filter["ID"] = function( id ) {
				var attrId = id.replace( runescape, funescape );
				return function( elem ) {
					return elem.getAttribute("id") === attrId;
				};
			};
		} else {
			// Support: IE6/7
			// getElementById is not reliable as a find shortcut
			delete Expr.find["ID"];
	
			Expr.filter["ID"] =  function( id ) {
				var attrId = id.replace( runescape, funescape );
				return function( elem ) {
					var node = typeof elem.getAttributeNode !== "undefined" &&
						elem.getAttributeNode("id");
					return node && node.value === attrId;
				};
			};
		}
	
		// Tag
		Expr.find["TAG"] = support.getElementsByTagName ?
			function( tag, context ) {
				if ( typeof context.getElementsByTagName !== "undefined" ) {
					return context.getElementsByTagName( tag );
	
				// DocumentFragment nodes don't have gEBTN
				} else if ( support.qsa ) {
					return context.querySelectorAll( tag );
				}
			} :
	
			function( tag, context ) {
				var elem,
					tmp = [],
					i = 0,
					// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too
					results = context.getElementsByTagName( tag );
	
				// Filter out possible comments
				if ( tag === "*" ) {
					while ( (elem = results[i++]) ) {
						if ( elem.nodeType === 1 ) {
							tmp.push( elem );
						}
					}
	
					return tmp;
				}
				return results;
			};
	
		// Class
		Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) {
			if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) {
				return context.getElementsByClassName( className );
			}
		};
	
		/* QSA/matchesSelector
		---------------------------------------------------------------------- */
	
		// QSA and matchesSelector support
	
		// matchesSelector(:active) reports false when true (IE9/Opera 11.5)
		rbuggyMatches = [];
	
		// qSa(:focus) reports false when true (Chrome 21)
		// We allow this because of a bug in IE8/9 that throws an error
		// whenever `document.activeElement` is accessed on an iframe
		// So, we allow :focus to pass through QSA all the time to avoid the IE error
		// See http://bugs.jquery.com/ticket/13378
		rbuggyQSA = [];
	
		if ( (support.qsa = rnative.test( document.querySelectorAll )) ) {
			// Build QSA regex
			// Regex strategy adopted from Diego Perini
			assert(function( div ) {
				// Select is set to empty string on purpose
				// This is to test IE's treatment of not explicitly
				// setting a boolean content attribute,
				// since its presence should be enough
				// http://bugs.jquery.com/ticket/12359
				docElem.appendChild( div ).innerHTML = "<a id='" + expando + "'></a>" +
					"<select id='" + expando + "-\r\\' msallowcapture=''>" +
					"<option selected=''></option></select>";
	
				// Support: IE8, Opera 11-12.16
				// Nothing should be selected when empty strings follow ^= or $= or *=
				// The test attribute must be unknown in Opera but "safe" for WinRT
				// http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section
				if ( div.querySelectorAll("[msallowcapture^='']").length ) {
					rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" );
				}
	
				// Support: IE8
				// Boolean attributes and "value" are not treated correctly
				if ( !div.querySelectorAll("[selected]").length ) {
					rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" );
				}
	
				// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+
				if ( !div.querySelectorAll( "[id~=" + expando + "-]" ).length ) {
					rbuggyQSA.push("~=");
				}
	
				// Webkit/Opera - :checked should return selected option elements
				// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
				// IE8 throws error here and will not see later tests
				if ( !div.querySelectorAll(":checked").length ) {
					rbuggyQSA.push(":checked");
				}
	
				// Support: Safari 8+, iOS 8+
				// https://bugs.webkit.org/show_bug.cgi?id=136851
				// In-page `selector#id sibing-combinator selector` fails
				if ( !div.querySelectorAll( "a#" + expando + "+*" ).length ) {
					rbuggyQSA.push(".#.+[+~]");
				}
			});
	
			assert(function( div ) {
				// Support: Windows 8 Native Apps
				// The type and name attributes are restricted during .innerHTML assignment
				var input = document.createElement("input");
				input.setAttribute( "type", "hidden" );
				div.appendChild( input ).setAttribute( "name", "D" );
	
				// Support: IE8
				// Enforce case-sensitivity of name attribute
				if ( div.querySelectorAll("[name=d]").length ) {
					rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" );
				}
	
				// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
				// IE8 throws error here and will not see later tests
				if ( !div.querySelectorAll(":enabled").length ) {
					rbuggyQSA.push( ":enabled", ":disabled" );
				}
	
				// Opera 10-11 does not throw on post-comma invalid pseudos
				div.querySelectorAll("*,:x");
				rbuggyQSA.push(",.*:");
			});
		}
	
		if ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||
			docElem.webkitMatchesSelector ||
			docElem.mozMatchesSelector ||
			docElem.oMatchesSelector ||
			docElem.msMatchesSelector) )) ) {
	
			assert(function( div ) {
				// Check to see if it's possible to do matchesSelector
				// on a disconnected node (IE 9)
				support.disconnectedMatch = matches.call( div, "div" );
	
				// This should fail with an exception
				// Gecko does not error, returns false instead
				matches.call( div, "[s!='']:x" );
				rbuggyMatches.push( "!=", pseudos );
			});
		}
	
		rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") );
		rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") );
	
		/* Contains
		---------------------------------------------------------------------- */
		hasCompare = rnative.test( docElem.compareDocumentPosition );
	
		// Element contains another
		// Purposefully self-exclusive
		// As in, an element does not contain itself
		contains = hasCompare || rnative.test( docElem.contains ) ?
			function( a, b ) {
				var adown = a.nodeType === 9 ? a.documentElement : a,
					bup = b && b.parentNode;
				return a === bup || !!( bup && bup.nodeType === 1 && (
					adown.contains ?
						adown.contains( bup ) :
						a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
				));
			} :
			function( a, b ) {
				if ( b ) {
					while ( (b = b.parentNode) ) {
						if ( b === a ) {
							return true;
						}
					}
				}
				return false;
			};
	
		/* Sorting
		---------------------------------------------------------------------- */
	
		// Document order sorting
		sortOrder = hasCompare ?
		function( a, b ) {
	
			// Flag for duplicate removal
			if ( a === b ) {
				hasDuplicate = true;
				return 0;
			}
	
			// Sort on method existence if only one input has compareDocumentPosition
			var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;
			if ( compare ) {
				return compare;
			}
	
			// Calculate position if both inputs belong to the same document
			compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?
				a.compareDocumentPosition( b ) :
	
				// Otherwise we know they are disconnected
				1;
	
			// Disconnected nodes
			if ( compare & 1 ||
				(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {
	
				// Choose the first element that is related to our preferred document
				if ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {
					return -1;
				}
				if ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {
					return 1;
				}
	
				// Maintain original order
				return sortInput ?
					( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
					0;
			}
	
			return compare & 4 ? -1 : 1;
		} :
		function( a, b ) {
			// Exit early if the nodes are identical
			if ( a === b ) {
				hasDuplicate = true;
				return 0;
			}
	
			var cur,
				i = 0,
				aup = a.parentNode,
				bup = b.parentNode,
				ap = [ a ],
				bp = [ b ];
	
			// Parentless nodes are either documents or disconnected
			if ( !aup || !bup ) {
				return a === document ? -1 :
					b === document ? 1 :
					aup ? -1 :
					bup ? 1 :
					sortInput ?
					( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
					0;
	
			// If the nodes are siblings, we can do a quick check
			} else if ( aup === bup ) {
				return siblingCheck( a, b );
			}
	
			// Otherwise we need full lists of their ancestors for comparison
			cur = a;
			while ( (cur = cur.parentNode) ) {
				ap.unshift( cur );
			}
			cur = b;
			while ( (cur = cur.parentNode) ) {
				bp.unshift( cur );
			}
	
			// Walk down the tree looking for a discrepancy
			while ( ap[i] === bp[i] ) {
				i++;
			}
	
			return i ?
				// Do a sibling check if the nodes have a common ancestor
				siblingCheck( ap[i], bp[i] ) :
	
				// Otherwise nodes in our document sort first
				ap[i] === preferredDoc ? -1 :
				bp[i] === preferredDoc ? 1 :
				0;
		};
	
		return document;
	};
	
	Sizzle.matches = function( expr, elements ) {
		return Sizzle( expr, null, null, elements );
	};
	
	Sizzle.matchesSelector = function( elem, expr ) {
		// Set document vars if needed
		if ( ( elem.ownerDocument || elem ) !== document ) {
			setDocument( elem );
		}
	
		// Make sure that attribute selectors are quoted
		expr = expr.replace( rattributeQuotes, "='$1']" );
	
		if ( support.matchesSelector && documentIsHTML &&
			!compilerCache[ expr + " " ] &&
			( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&
			( !rbuggyQSA     || !rbuggyQSA.test( expr ) ) ) {
	
			try {
				var ret = matches.call( elem, expr );
	
				// IE 9's matchesSelector returns false on disconnected nodes
				if ( ret || support.disconnectedMatch ||
						// As well, disconnected nodes are said to be in a document
						// fragment in IE 9
						elem.document && elem.document.nodeType !== 11 ) {
					return ret;
				}
			} catch (e) {}
		}
	
		return Sizzle( expr, document, null, [ elem ] ).length > 0;
	};
	
	Sizzle.contains = function( context, elem ) {
		// Set document vars if needed
		if ( ( context.ownerDocument || context ) !== document ) {
			setDocument( context );
		}
		return contains( context, elem );
	};
	
	Sizzle.attr = function( elem, name ) {
		// Set document vars if needed
		if ( ( elem.ownerDocument || elem ) !== document ) {
			setDocument( elem );
		}
	
		var fn = Expr.attrHandle[ name.toLowerCase() ],
			// Don't get fooled by Object.prototype properties (jQuery #13807)
			val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?
				fn( elem, name, !documentIsHTML ) :
				undefined;
	
		return val !== undefined ?
			val :
			support.attributes || !documentIsHTML ?
				elem.getAttribute( name ) :
				(val = elem.getAttributeNode(name)) && val.specified ?
					val.value :
					null;
	};
	
	Sizzle.error = function( msg ) {
		throw new Error( "Syntax error, unrecognized expression: " + msg );
	};
	
	/**
	 * Document sorting and removing duplicates
	 * @param {ArrayLike} results
	 */
	Sizzle.uniqueSort = function( results ) {
		var elem,
			duplicates = [],
			j = 0,
			i = 0;
	
		// Unless we *know* we can detect duplicates, assume their presence
		hasDuplicate = !support.detectDuplicates;
		sortInput = !support.sortStable && results.slice( 0 );
		results.sort( sortOrder );
	
		if ( hasDuplicate ) {
			while ( (elem = results[i++]) ) {
				if ( elem === results[ i ] ) {
					j = duplicates.push( i );
				}
			}
			while ( j-- ) {
				results.splice( duplicates[ j ], 1 );
			}
		}
	
		// Clear input after sorting to release objects
		// See https://github.com/jquery/sizzle/pull/225
		sortInput = null;
	
		return results;
	};
	
	/**
	 * Utility function for retrieving the text value of an array of DOM nodes
	 * @param {Array|Element} elem
	 */
	getText = Sizzle.getText = function( elem ) {
		var node,
			ret = "",
			i = 0,
			nodeType = elem.nodeType;
	
		if ( !nodeType ) {
			// If no nodeType, this is expected to be an array
			while ( (node = elem[i++]) ) {
				// Do not traverse comment nodes
				ret += getText( node );
			}
		} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
			// Use textContent for elements
			// innerText usage removed for consistency of new lines (jQuery #11153)
			if ( typeof elem.textContent === "string" ) {
				return elem.textContent;
			} else {
				// Traverse its children
				for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
					ret += getText( elem );
				}
			}
		} else if ( nodeType === 3 || nodeType === 4 ) {
			return elem.nodeValue;
		}
		// Do not include comment or processing instruction nodes
	
		return ret;
	};
	
	Expr = Sizzle.selectors = {
	
		// Can be adjusted by the user
		cacheLength: 50,
	
		createPseudo: markFunction,
	
		match: matchExpr,
	
		attrHandle: {},
	
		find: {},
	
		relative: {
			">": { dir: "parentNode", first: true },
			" ": { dir: "parentNode" },
			"+": { dir: "previousSibling", first: true },
			"~": { dir: "previousSibling" }
		},
	
		preFilter: {
			"ATTR": function( match ) {
				match[1] = match[1].replace( runescape, funescape );
	
				// Move the given value to match[3] whether quoted or unquoted
				match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape );
	
				if ( match[2] === "~=" ) {
					match[3] = " " + match[3] + " ";
				}
	
				return match.slice( 0, 4 );
			},
	
			"CHILD": function( match ) {
				/* matches from matchExpr["CHILD"]
					1 type (only|nth|...)
					2 what (child|of-type)
					3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
					4 xn-component of xn+y argument ([+-]?\d*n|)
					5 sign of xn-component
					6 x of xn-component
					7 sign of y-component
					8 y of y-component
				*/
				match[1] = match[1].toLowerCase();
	
				if ( match[1].slice( 0, 3 ) === "nth" ) {
					// nth-* requires argument
					if ( !match[3] ) {
						Sizzle.error( match[0] );
					}
	
					// numeric x and y parameters for Expr.filter.CHILD
					// remember that false/true cast respectively to 0/1
					match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) );
					match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" );
	
				// other types prohibit arguments
				} else if ( match[3] ) {
					Sizzle.error( match[0] );
				}
	
				return match;
			},
	
			"PSEUDO": function( match ) {
				var excess,
					unquoted = !match[6] && match[2];
	
				if ( matchExpr["CHILD"].test( match[0] ) ) {
					return null;
				}
	
				// Accept quoted arguments as-is
				if ( match[3] ) {
					match[2] = match[4] || match[5] || "";
	
				// Strip excess characters from unquoted arguments
				} else if ( unquoted && rpseudo.test( unquoted ) &&
					// Get excess from tokenize (recursively)
					(excess = tokenize( unquoted, true )) &&
					// advance to the next closing parenthesis
					(excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) {
	
					// excess is a negative index
					match[0] = match[0].slice( 0, excess );
					match[2] = unquoted.slice( 0, excess );
				}
	
				// Return only captures needed by the pseudo filter method (type and argument)
				return match.slice( 0, 3 );
			}
		},
	
		filter: {
	
			"TAG": function( nodeNameSelector ) {
				var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();
				return nodeNameSelector === "*" ?
					function() { return true; } :
					function( elem ) {
						return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
					};
			},
	
			"CLASS": function( className ) {
				var pattern = classCache[ className + " " ];
	
				return pattern ||
					(pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) &&
					classCache( className, function( elem ) {
						return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" );
					});
			},
	
			"ATTR": function( name, operator, check ) {
				return function( elem ) {
					var result = Sizzle.attr( elem, name );
	
					if ( result == null ) {
						return operator === "!=";
					}
					if ( !operator ) {
						return true;
					}
	
					result += "";
	
					return operator === "=" ? result === check :
						operator === "!=" ? result !== check :
						operator === "^=" ? check && result.indexOf( check ) === 0 :
						operator === "*=" ? check && result.indexOf( check ) > -1 :
						operator === "$=" ? check && result.slice( -check.length ) === check :
						operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 :
						operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :
						false;
				};
			},
	
			"CHILD": function( type, what, argument, first, last ) {
				var simple = type.slice( 0, 3 ) !== "nth",
					forward = type.slice( -4 ) !== "last",
					ofType = what === "of-type";
	
				return first === 1 && last === 0 ?
	
					// Shortcut for :nth-*(n)
					function( elem ) {
						return !!elem.parentNode;
					} :
	
					function( elem, context, xml ) {
						var cache, uniqueCache, outerCache, node, nodeIndex, start,
							dir = simple !== forward ? "nextSibling" : "previousSibling",
							parent = elem.parentNode,
							name = ofType && elem.nodeName.toLowerCase(),
							useCache = !xml && !ofType,
							diff = false;
	
						if ( parent ) {
	
							// :(first|last|only)-(child|of-type)
							if ( simple ) {
								while ( dir ) {
									node = elem;
									while ( (node = node[ dir ]) ) {
										if ( ofType ?
											node.nodeName.toLowerCase() === name :
											node.nodeType === 1 ) {
	
											return false;
										}
									}
									// Reverse direction for :only-* (if we haven't yet done so)
									start = dir = type === "only" && !start && "nextSibling";
								}
								return true;
							}
	
							start = [ forward ? parent.firstChild : parent.lastChild ];
	
							// non-xml :nth-child(...) stores cache data on `parent`
							if ( forward && useCache ) {
	
								// Seek `elem` from a previously-cached index
	
								// ...in a gzip-friendly way
								node = parent;
								outerCache = node[ expando ] || (node[ expando ] = {});
	
								// Support: IE <9 only
								// Defend against cloned attroperties (jQuery gh-1709)
								uniqueCache = outerCache[ node.uniqueID ] ||
									(outerCache[ node.uniqueID ] = {});
	
								cache = uniqueCache[ type ] || [];
								nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
								diff = nodeIndex && cache[ 2 ];
								node = nodeIndex && parent.childNodes[ nodeIndex ];
	
								while ( (node = ++nodeIndex && node && node[ dir ] ||
	
									// Fallback to seeking `elem` from the start
									(diff = nodeIndex = 0) || start.pop()) ) {
	
									// When found, cache indexes on `parent` and break
									if ( node.nodeType === 1 && ++diff && node === elem ) {
										uniqueCache[ type ] = [ dirruns, nodeIndex, diff ];
										break;
									}
								}
	
							} else {
								// Use previously-cached element index if available
								if ( useCache ) {
									// ...in a gzip-friendly way
									node = elem;
									outerCache = node[ expando ] || (node[ expando ] = {});
	
									// Support: IE <9 only
									// Defend against cloned attroperties (jQuery gh-1709)
									uniqueCache = outerCache[ node.uniqueID ] ||
										(outerCache[ node.uniqueID ] = {});
	
									cache = uniqueCache[ type ] || [];
									nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
									diff = nodeIndex;
								}
	
								// xml :nth-child(...)
								// or :nth-last-child(...) or :nth(-last)?-of-type(...)
								if ( diff === false ) {
									// Use the same loop as above to seek `elem` from the start
									while ( (node = ++nodeIndex && node && node[ dir ] ||
										(diff = nodeIndex = 0) || start.pop()) ) {
	
										if ( ( ofType ?
											node.nodeName.toLowerCase() === name :
											node.nodeType === 1 ) &&
											++diff ) {
	
											// Cache the index of each encountered element
											if ( useCache ) {
												outerCache = node[ expando ] || (node[ expando ] = {});
	
												// Support: IE <9 only
												// Defend against cloned attroperties (jQuery gh-1709)
												uniqueCache = outerCache[ node.uniqueID ] ||
													(outerCache[ node.uniqueID ] = {});
	
												uniqueCache[ type ] = [ dirruns, diff ];
											}
	
											if ( node === elem ) {
												break;
											}
										}
									}
								}
							}
	
							// Incorporate the offset, then check against cycle size
							diff -= last;
							return diff === first || ( diff % first === 0 && diff / first >= 0 );
						}
					};
			},
	
			"PSEUDO": function( pseudo, argument ) {
				// pseudo-class names are case-insensitive
				// http://www.w3.org/TR/selectors/#pseudo-classes
				// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
				// Remember that setFilters inherits from pseudos
				var args,
					fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
						Sizzle.error( "unsupported pseudo: " + pseudo );
	
				// The user may use createPseudo to indicate that
				// arguments are needed to create the filter function
				// just as Sizzle does
				if ( fn[ expando ] ) {
					return fn( argument );
				}
	
				// But maintain support for old signatures
				if ( fn.length > 1 ) {
					args = [ pseudo, pseudo, "", argument ];
					return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
						markFunction(function( seed, matches ) {
							var idx,
								matched = fn( seed, argument ),
								i = matched.length;
							while ( i-- ) {
								idx = indexOf( seed, matched[i] );
								seed[ idx ] = !( matches[ idx ] = matched[i] );
							}
						}) :
						function( elem ) {
							return fn( elem, 0, args );
						};
				}
	
				return fn;
			}
		},
	
		pseudos: {
			// Potentially complex pseudos
			"not": markFunction(function( selector ) {
				// Trim the selector passed to compile
				// to avoid treating leading and trailing
				// spaces as combinators
				var input = [],
					results = [],
					matcher = compile( selector.replace( rtrim, "$1" ) );
	
				return matcher[ expando ] ?
					markFunction(function( seed, matches, context, xml ) {
						var elem,
							unmatched = matcher( seed, null, xml, [] ),
							i = seed.length;
	
						// Match elements unmatched by `matcher`
						while ( i-- ) {
							if ( (elem = unmatched[i]) ) {
								seed[i] = !(matches[i] = elem);
							}
						}
					}) :
					function( elem, context, xml ) {
						input[0] = elem;
						matcher( input, null, xml, results );
						// Don't keep the element (issue #299)
						input[0] = null;
						return !results.pop();
					};
			}),
	
			"has": markFunction(function( selector ) {
				return function( elem ) {
					return Sizzle( selector, elem ).length > 0;
				};
			}),
	
			"contains": markFunction(function( text ) {
				text = text.replace( runescape, funescape );
				return function( elem ) {
					return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;
				};
			}),
	
			// "Whether an element is represented by a :lang() selector
			// is based solely on the element's language value
			// being equal to the identifier C,
			// or beginning with the identifier C immediately followed by "-".
			// The matching of C against the element's language value is performed case-insensitively.
			// The identifier C does not have to be a valid language name."
			// http://www.w3.org/TR/selectors/#lang-pseudo
			"lang": markFunction( function( lang ) {
				// lang value must be a valid identifier
				if ( !ridentifier.test(lang || "") ) {
					Sizzle.error( "unsupported lang: " + lang );
				}
				lang = lang.replace( runescape, funescape ).toLowerCase();
				return function( elem ) {
					var elemLang;
					do {
						if ( (elemLang = documentIsHTML ?
							elem.lang :
							elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) {
	
							elemLang = elemLang.toLowerCase();
							return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;
						}
					} while ( (elem = elem.parentNode) && elem.nodeType === 1 );
					return false;
				};
			}),
	
			// Miscellaneous
			"target": function( elem ) {
				var hash = window.location && window.location.hash;
				return hash && hash.slice( 1 ) === elem.id;
			},
	
			"root": function( elem ) {
				return elem === docElem;
			},
	
			"focus": function( elem ) {
				return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);
			},
	
			// Boolean properties
			"enabled": function( elem ) {
				return elem.disabled === false;
			},
	
			"disabled": function( elem ) {
				return elem.disabled === true;
			},
	
			"checked": function( elem ) {
				// In CSS3, :checked should return both checked and selected elements
				// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
				var nodeName = elem.nodeName.toLowerCase();
				return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected);
			},
	
			"selected": function( elem ) {
				// Accessing this property makes selected-by-default
				// options in Safari work properly
				if ( elem.parentNode ) {
					elem.parentNode.selectedIndex;
				}
	
				return elem.selected === true;
			},
	
			// Contents
			"empty": function( elem ) {
				// http://www.w3.org/TR/selectors/#empty-pseudo
				// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),
				//   but not by others (comment: 8; processing instruction: 7; etc.)
				// nodeType < 6 works because attributes (2) do not appear as children
				for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
					if ( elem.nodeType < 6 ) {
						return false;
					}
				}
				return true;
			},
	
			"parent": function( elem ) {
				return !Expr.pseudos["empty"]( elem );
			},
	
			// Element/input types
			"header": function( elem ) {
				return rheader.test( elem.nodeName );
			},
	
			"input": function( elem ) {
				return rinputs.test( elem.nodeName );
			},
	
			"button": function( elem ) {
				var name = elem.nodeName.toLowerCase();
				return name === "input" && elem.type === "button" || name === "button";
			},
	
			"text": function( elem ) {
				var attr;
				return elem.nodeName.toLowerCase() === "input" &&
					elem.type === "text" &&
	
					// Support: IE<8
					// New HTML5 attribute values (e.g., "search") appear with elem.type === "text"
					( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" );
			},
	
			// Position-in-collection
			"first": createPositionalPseudo(function() {
				return [ 0 ];
			}),
	
			"last": createPositionalPseudo(function( matchIndexes, length ) {
				return [ length - 1 ];
			}),
	
			"eq": createPositionalPseudo(function( matchIndexes, length, argument ) {
				return [ argument < 0 ? argument + length : argument ];
			}),
	
			"even": createPositionalPseudo(function( matchIndexes, length ) {
				var i = 0;
				for ( ; i < length; i += 2 ) {
					matchIndexes.push( i );
				}
				return matchIndexes;
			}),
	
			"odd": createPositionalPseudo(function( matchIndexes, length ) {
				var i = 1;
				for ( ; i < length; i += 2 ) {
					matchIndexes.push( i );
				}
				return matchIndexes;
			}),
	
			"lt": createPositionalPseudo(function( matchIndexes, length, argument ) {
				var i = argument < 0 ? argument + length : argument;
				for ( ; --i >= 0; ) {
					matchIndexes.push( i );
				}
				return matchIndexes;
			}),
	
			"gt": createPositionalPseudo(function( matchIndexes, length, argument ) {
				var i = argument < 0 ? argument + length : argument;
				for ( ; ++i < length; ) {
					matchIndexes.push( i );
				}
				return matchIndexes;
			})
		}
	};
	
	Expr.pseudos["nth"] = Expr.pseudos["eq"];
	
	// Add button/input type pseudos
	for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
		Expr.pseudos[ i ] = createInputPseudo( i );
	}
	for ( i in { submit: true, reset: true } ) {
		Expr.pseudos[ i ] = createButtonPseudo( i );
	}
	
	// Easy API for creating new setFilters
	function setFilters() {}
	setFilters.prototype = Expr.filters = Expr.pseudos;
	Expr.setFilters = new setFilters();
	
	tokenize = Sizzle.tokenize = function( selector, parseOnly ) {
		var matched, match, tokens, type,
			soFar, groups, preFilters,
			cached = tokenCache[ selector + " " ];
	
		if ( cached ) {
			return parseOnly ? 0 : cached.slice( 0 );
		}
	
		soFar = selector;
		groups = [];
		preFilters = Expr.preFilter;
	
		while ( soFar ) {
	
			// Comma and first run
			if ( !matched || (match = rcomma.exec( soFar )) ) {
				if ( match ) {
					// Don't consume trailing commas as valid
					soFar = soFar.slice( match[0].length ) || soFar;
				}
				groups.push( (tokens = []) );
			}
	
			matched = false;
	
			// Combinators
			if ( (match = rcombinators.exec( soFar )) ) {
				matched = match.shift();
				tokens.push({
					value: matched,
					// Cast descendant combinators to space
					type: match[0].replace( rtrim, " " )
				});
				soFar = soFar.slice( matched.length );
			}
	
			// Filters
			for ( type in Expr.filter ) {
				if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||
					(match = preFilters[ type ]( match ))) ) {
					matched = match.shift();
					tokens.push({
						value: matched,
						type: type,
						matches: match
					});
					soFar = soFar.slice( matched.length );
				}
			}
	
			if ( !matched ) {
				break;
			}
		}
	
		// Return the length of the invalid excess
		// if we're just parsing
		// Otherwise, throw an error or return tokens
		return parseOnly ?
			soFar.length :
			soFar ?
				Sizzle.error( selector ) :
				// Cache the tokens
				tokenCache( selector, groups ).slice( 0 );
	};
	
	function toSelector( tokens ) {
		var i = 0,
			len = tokens.length,
			selector = "";
		for ( ; i < len; i++ ) {
			selector += tokens[i].value;
		}
		return selector;
	}
	
	function addCombinator( matcher, combinator, base ) {
		var dir = combinator.dir,
			checkNonElements = base && dir === "parentNode",
			doneName = done++;
	
		return combinator.first ?
			// Check against closest ancestor/preceding element
			function( elem, context, xml ) {
				while ( (elem = elem[ dir ]) ) {
					if ( elem.nodeType === 1 || checkNonElements ) {
						return matcher( elem, context, xml );
					}
				}
			} :
	
			// Check against all ancestor/preceding elements
			function( elem, context, xml ) {
				var oldCache, uniqueCache, outerCache,
					newCache = [ dirruns, doneName ];
	
				// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching
				if ( xml ) {
					while ( (elem = elem[ dir ]) ) {
						if ( elem.nodeType === 1 || checkNonElements ) {
							if ( matcher( elem, context, xml ) ) {
								return true;
							}
						}
					}
				} else {
					while ( (elem = elem[ dir ]) ) {
						if ( elem.nodeType === 1 || checkNonElements ) {
							outerCache = elem[ expando ] || (elem[ expando ] = {});
	
							// Support: IE <9 only
							// Defend against cloned attroperties (jQuery gh-1709)
							uniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});
	
							if ( (oldCache = uniqueCache[ dir ]) &&
								oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {
	
								// Assign to newCache so results back-propagate to previous elements
								return (newCache[ 2 ] = oldCache[ 2 ]);
							} else {
								// Reuse newcache so results back-propagate to previous elements
								uniqueCache[ dir ] = newCache;
	
								// A match means we're done; a fail means we have to keep checking
								if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {
									return true;
								}
							}
						}
					}
				}
			};
	}
	
	function elementMatcher( matchers ) {
		return matchers.length > 1 ?
			function( elem, context, xml ) {
				var i = matchers.length;
				while ( i-- ) {
					if ( !matchers[i]( elem, context, xml ) ) {
						return false;
					}
				}
				return true;
			} :
			matchers[0];
	}
	
	function multipleContexts( selector, contexts, results ) {
		var i = 0,
			len = contexts.length;
		for ( ; i < len; i++ ) {
			Sizzle( selector, contexts[i], results );
		}
		return results;
	}
	
	function condense( unmatched, map, filter, context, xml ) {
		var elem,
			newUnmatched = [],
			i = 0,
			len = unmatched.length,
			mapped = map != null;
	
		for ( ; i < len; i++ ) {
			if ( (elem = unmatched[i]) ) {
				if ( !filter || filter( elem, context, xml ) ) {
					newUnmatched.push( elem );
					if ( mapped ) {
						map.push( i );
					}
				}
			}
		}
	
		return newUnmatched;
	}
	
	function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
		if ( postFilter && !postFilter[ expando ] ) {
			postFilter = setMatcher( postFilter );
		}
		if ( postFinder && !postFinder[ expando ] ) {
			postFinder = setMatcher( postFinder, postSelector );
		}
		return markFunction(function( seed, results, context, xml ) {
			var temp, i, elem,
				preMap = [],
				postMap = [],
				preexisting = results.length,
	
				// Get initial elements from seed or context
				elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ),
	
				// Prefilter to get matcher input, preserving a map for seed-results synchronization
				matcherIn = preFilter && ( seed || !selector ) ?
					condense( elems, preMap, preFilter, context, xml ) :
					elems,
	
				matcherOut = matcher ?
					// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
					postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
	
						// ...intermediate processing is necessary
						[] :
	
						// ...otherwise use results directly
						results :
					matcherIn;
	
			// Find primary matches
			if ( matcher ) {
				matcher( matcherIn, matcherOut, context, xml );
			}
	
			// Apply postFilter
			if ( postFilter ) {
				temp = condense( matcherOut, postMap );
				postFilter( temp, [], context, xml );
	
				// Un-match failing elements by moving them back to matcherIn
				i = temp.length;
				while ( i-- ) {
					if ( (elem = temp[i]) ) {
						matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);
					}
				}
			}
	
			if ( seed ) {
				if ( postFinder || preFilter ) {
					if ( postFinder ) {
						// Get the final matcherOut by condensing this intermediate into postFinder contexts
						temp = [];
						i = matcherOut.length;
						while ( i-- ) {
							if ( (elem = matcherOut[i]) ) {
								// Restore matcherIn since elem is not yet a final match
								temp.push( (matcherIn[i] = elem) );
							}
						}
						postFinder( null, (matcherOut = []), temp, xml );
					}
	
					// Move matched elements from seed to results to keep them synchronized
					i = matcherOut.length;
					while ( i-- ) {
						if ( (elem = matcherOut[i]) &&
							(temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {
	
							seed[temp] = !(results[temp] = elem);
						}
					}
				}
	
			// Add elements to results, through postFinder if defined
			} else {
				matcherOut = condense(
					matcherOut === results ?
						matcherOut.splice( preexisting, matcherOut.length ) :
						matcherOut
				);
				if ( postFinder ) {
					postFinder( null, results, matcherOut, xml );
				} else {
					push.apply( results, matcherOut );
				}
			}
		});
	}
	
	function matcherFromTokens( tokens ) {
		var checkContext, matcher, j,
			len = tokens.length,
			leadingRelative = Expr.relative[ tokens[0].type ],
			implicitRelative = leadingRelative || Expr.relative[" "],
			i = leadingRelative ? 1 : 0,
	
			// The foundational matcher ensures that elements are reachable from top-level context(s)
			matchContext = addCombinator( function( elem ) {
				return elem === checkContext;
			}, implicitRelative, true ),
			matchAnyContext = addCombinator( function( elem ) {
				return indexOf( checkContext, elem ) > -1;
			}, implicitRelative, true ),
			matchers = [ function( elem, context, xml ) {
				var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
					(checkContext = context).nodeType ?
						matchContext( elem, context, xml ) :
						matchAnyContext( elem, context, xml ) );
				// Avoid hanging onto element (issue #299)
				checkContext = null;
				return ret;
			} ];
	
		for ( ; i < len; i++ ) {
			if ( (matcher = Expr.relative[ tokens[i].type ]) ) {
				matchers = [ addCombinator(elementMatcher( matchers ), matcher) ];
			} else {
				matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );
	
				// Return special upon seeing a positional matcher
				if ( matcher[ expando ] ) {
					// Find the next relative operator (if any) for proper handling
					j = ++i;
					for ( ; j < len; j++ ) {
						if ( Expr.relative[ tokens[j].type ] ) {
							break;
						}
					}
					return setMatcher(
						i > 1 && elementMatcher( matchers ),
						i > 1 && toSelector(
							// If the preceding token was a descendant combinator, insert an implicit any-element `*`
							tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" })
						).replace( rtrim, "$1" ),
						matcher,
						i < j && matcherFromTokens( tokens.slice( i, j ) ),
						j < len && matcherFromTokens( (tokens = tokens.slice( j )) ),
						j < len && toSelector( tokens )
					);
				}
				matchers.push( matcher );
			}
		}
	
		return elementMatcher( matchers );
	}
	
	function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
		var bySet = setMatchers.length > 0,
			byElement = elementMatchers.length > 0,
			superMatcher = function( seed, context, xml, results, outermost ) {
				var elem, j, matcher,
					matchedCount = 0,
					i = "0",
					unmatched = seed && [],
					setMatched = [],
					contextBackup = outermostContext,
					// We must always have either seed elements or outermost context
					elems = seed || byElement && Expr.find["TAG"]( "*", outermost ),
					// Use integer dirruns iff this is the outermost matcher
					dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),
					len = elems.length;
	
				if ( outermost ) {
					outermostContext = context === document || context || outermost;
				}
	
				// Add elements passing elementMatchers directly to results
				// Support: IE<9, Safari
				// Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id
				for ( ; i !== len && (elem = elems[i]) != null; i++ ) {
					if ( byElement && elem ) {
						j = 0;
						if ( !context && elem.ownerDocument !== document ) {
							setDocument( elem );
							xml = !documentIsHTML;
						}
						while ( (matcher = elementMatchers[j++]) ) {
							if ( matcher( elem, context || document, xml) ) {
								results.push( elem );
								break;
							}
						}
						if ( outermost ) {
							dirruns = dirrunsUnique;
						}
					}
	
					// Track unmatched elements for set filters
					if ( bySet ) {
						// They will have gone through all possible matchers
						if ( (elem = !matcher && elem) ) {
							matchedCount--;
						}
	
						// Lengthen the array for every element, matched or not
						if ( seed ) {
							unmatched.push( elem );
						}
					}
				}
	
				// `i` is now the count of elements visited above, and adding it to `matchedCount`
				// makes the latter nonnegative.
				matchedCount += i;
	
				// Apply set filters to unmatched elements
				// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`
				// equals `i`), unless we didn't visit _any_ elements in the above loop because we have
				// no element matchers and no seed.
				// Incrementing an initially-string "0" `i` allows `i` to remain a string only in that
				// case, which will result in a "00" `matchedCount` that differs from `i` but is also
				// numerically zero.
				if ( bySet && i !== matchedCount ) {
					j = 0;
					while ( (matcher = setMatchers[j++]) ) {
						matcher( unmatched, setMatched, context, xml );
					}
	
					if ( seed ) {
						// Reintegrate element matches to eliminate the need for sorting
						if ( matchedCount > 0 ) {
							while ( i-- ) {
								if ( !(unmatched[i] || setMatched[i]) ) {
									setMatched[i] = pop.call( results );
								}
							}
						}
	
						// Discard index placeholder values to get only actual matches
						setMatched = condense( setMatched );
					}
	
					// Add matches to results
					push.apply( results, setMatched );
	
					// Seedless set matches succeeding multiple successful matchers stipulate sorting
					if ( outermost && !seed && setMatched.length > 0 &&
						( matchedCount + setMatchers.length ) > 1 ) {
	
						Sizzle.uniqueSort( results );
					}
				}
	
				// Override manipulation of globals by nested matchers
				if ( outermost ) {
					dirruns = dirrunsUnique;
					outermostContext = contextBackup;
				}
	
				return unmatched;
			};
	
		return bySet ?
			markFunction( superMatcher ) :
			superMatcher;
	}
	
	compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {
		var i,
			setMatchers = [],
			elementMatchers = [],
			cached = compilerCache[ selector + " " ];
	
		if ( !cached ) {
			// Generate a function of recursive functions that can be used to check each element
			if ( !match ) {
				match = tokenize( selector );
			}
			i = match.length;
			while ( i-- ) {
				cached = matcherFromTokens( match[i] );
				if ( cached[ expando ] ) {
					setMatchers.push( cached );
				} else {
					elementMatchers.push( cached );
				}
			}
	
			// Cache the compiled function
			cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );
	
			// Save selector and tokenization
			cached.selector = selector;
		}
		return cached;
	};
	
	/**
	 * A low-level selection function that works with Sizzle's compiled
	 *  selector functions
	 * @param {String|Function} selector A selector or a pre-compiled
	 *  selector function built with Sizzle.compile
	 * @param {Element} context
	 * @param {Array} [results]
	 * @param {Array} [seed] A set of elements to match against
	 */
	select = Sizzle.select = function( selector, context, results, seed ) {
		var i, tokens, token, type, find,
			compiled = typeof selector === "function" && selector,
			match = !seed && tokenize( (selector = compiled.selector || selector) );
	
		results = results || [];
	
		// Try to minimize operations if there is only one selector in the list and no seed
		// (the latter of which guarantees us context)
		if ( match.length === 1 ) {
	
			// Reduce context if the leading compound selector is an ID
			tokens = match[0] = match[0].slice( 0 );
			if ( tokens.length > 2 && (token = tokens[0]).type === "ID" &&
					support.getById && context.nodeType === 9 && documentIsHTML &&
					Expr.relative[ tokens[1].type ] ) {
	
				context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];
				if ( !context ) {
					return results;
	
				// Precompiled matchers will still verify ancestry, so step up a level
				} else if ( compiled ) {
					context = context.parentNode;
				}
	
				selector = selector.slice( tokens.shift().value.length );
			}
	
			// Fetch a seed set for right-to-left matching
			i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length;
			while ( i-- ) {
				token = tokens[i];
	
				// Abort if we hit a combinator
				if ( Expr.relative[ (type = token.type) ] ) {
					break;
				}
				if ( (find = Expr.find[ type ]) ) {
					// Search, expanding context for leading sibling combinators
					if ( (seed = find(
						token.matches[0].replace( runescape, funescape ),
						rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context
					)) ) {
	
						// If seed is empty or no tokens remain, we can return early
						tokens.splice( i, 1 );
						selector = seed.length && toSelector( tokens );
						if ( !selector ) {
							push.apply( results, seed );
							return results;
						}
	
						break;
					}
				}
			}
		}
	
		// Compile and execute a filtering function if one is not provided
		// Provide `match` to avoid retokenization if we modified the selector above
		( compiled || compile( selector, match ) )(
			seed,
			context,
			!documentIsHTML,
			results,
			!context || rsibling.test( selector ) && testContext( context.parentNode ) || context
		);
		return results;
	};
	
	// One-time assignments
	
	// Sort stability
	support.sortStable = expando.split("").sort( sortOrder ).join("") === expando;
	
	// Support: Chrome 14-35+
	// Always assume duplicates if they aren't passed to the comparison function
	support.detectDuplicates = !!hasDuplicate;
	
	// Initialize against the default document
	setDocument();
	
	// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)
	// Detached nodes confoundingly follow *each other*
	support.sortDetached = assert(function( div1 ) {
		// Should return 1, but returns 4 (following)
		return div1.compareDocumentPosition( document.createElement("div") ) & 1;
	});
	
	// Support: IE<8
	// Prevent attribute/property "interpolation"
	// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
	if ( !assert(function( div ) {
		div.innerHTML = "<a href='#'></a>";
		return div.firstChild.getAttribute("href") === "#" ;
	}) ) {
		addHandle( "type|href|height|width", function( elem, name, isXML ) {
			if ( !isXML ) {
				return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 );
			}
		});
	}
	
	// Support: IE<9
	// Use defaultValue in place of getAttribute("value")
	if ( !support.attributes || !assert(function( div ) {
		div.innerHTML = "<input/>";
		div.firstChild.setAttribute( "value", "" );
		return div.firstChild.getAttribute( "value" ) === "";
	}) ) {
		addHandle( "value", function( elem, name, isXML ) {
			if ( !isXML && elem.nodeName.toLowerCase() === "input" ) {
				return elem.defaultValue;
			}
		});
	}
	
	// Support: IE<9
	// Use getAttributeNode to fetch booleans when getAttribute lies
	if ( !assert(function( div ) {
		return div.getAttribute("disabled") == null;
	}) ) {
		addHandle( booleans, function( elem, name, isXML ) {
			var val;
			if ( !isXML ) {
				return elem[ name ] === true ? name.toLowerCase() :
						(val = elem.getAttributeNode( name )) && val.specified ?
						val.value :
					null;
			}
		});
	}
	
	return Sizzle;
	
	})( window );
	
	
	
	jQuery.find = Sizzle;
	jQuery.expr = Sizzle.selectors;
	jQuery.expr[ ":" ] = jQuery.expr.pseudos;
	jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;
	jQuery.text = Sizzle.getText;
	jQuery.isXMLDoc = Sizzle.isXML;
	jQuery.contains = Sizzle.contains;
	
	
	
	var dir = function( elem, dir, until ) {
		var matched = [],
			truncate = until !== undefined;
	
		while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {
			if ( elem.nodeType === 1 ) {
				if ( truncate && jQuery( elem ).is( until ) ) {
					break;
				}
				matched.push( elem );
			}
		}
		return matched;
	};
	
	
	var siblings = function( n, elem ) {
		var matched = [];
	
		for ( ; n; n = n.nextSibling ) {
			if ( n.nodeType === 1 && n !== elem ) {
				matched.push( n );
			}
		}
	
		return matched;
	};
	
	
	var rneedsContext = jQuery.expr.match.needsContext;
	
	var rsingleTag = ( /^<([\w-]+)\s*\/?>(?:<\/\1>|)$/ );
	
	
	
	var risSimple = /^.[^:#\[\.,]*$/;
	
	// Implement the identical functionality for filter and not
	function winnow( elements, qualifier, not ) {
		if ( jQuery.isFunction( qualifier ) ) {
			return jQuery.grep( elements, function( elem, i ) {
				/* jshint -W018 */
				return !!qualifier.call( elem, i, elem ) !== not;
			} );
	
		}
	
		if ( qualifier.nodeType ) {
			return jQuery.grep( elements, function( elem ) {
				return ( elem === qualifier ) !== not;
			} );
	
		}
	
		if ( typeof qualifier === "string" ) {
			if ( risSimple.test( qualifier ) ) {
				return jQuery.filter( qualifier, elements, not );
			}
	
			qualifier = jQuery.filter( qualifier, elements );
		}
	
		return jQuery.grep( elements, function( elem ) {
			return ( indexOf.call( qualifier, elem ) > -1 ) !== not;
		} );
	}
	
	jQuery.filter = function( expr, elems, not ) {
		var elem = elems[ 0 ];
	
		if ( not ) {
			expr = ":not(" + expr + ")";
		}
	
		return elems.length === 1 && elem.nodeType === 1 ?
			jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] :
			jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {
				return elem.nodeType === 1;
			} ) );
	};
	
	jQuery.fn.extend( {
		find: function( selector ) {
			var i,
				len = this.length,
				ret = [],
				self = this;
	
			if ( typeof selector !== "string" ) {
				return this.pushStack( jQuery( selector ).filter( function() {
					for ( i = 0; i < len; i++ ) {
						if ( jQuery.contains( self[ i ], this ) ) {
							return true;
						}
					}
				} ) );
			}
	
			for ( i = 0; i < len; i++ ) {
				jQuery.find( selector, self[ i ], ret );
			}
	
			// Needed because $( selector, context ) becomes $( context ).find( selector )
			ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );
			ret.selector = this.selector ? this.selector + " " + selector : selector;
			return ret;
		},
		filter: function( selector ) {
			return this.pushStack( winnow( this, selector || [], false ) );
		},
		not: function( selector ) {
			return this.pushStack( winnow( this, selector || [], true ) );
		},
		is: function( selector ) {
			return !!winnow(
				this,
	
				// If this is a positional/relative selector, check membership in the returned set
				// so $("p:first").is("p:last") won't return true for a doc with two "p".
				typeof selector === "string" && rneedsContext.test( selector ) ?
					jQuery( selector ) :
					selector || [],
				false
			).length;
		}
	} );
	
	
	// Initialize a jQuery object
	
	
	// A central reference to the root jQuery(document)
	var rootjQuery,
	
		// A simple way to check for HTML strings
		// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
		// Strict HTML recognition (#11290: must start with <)
		rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,
	
		init = jQuery.fn.init = function( selector, context, root ) {
			var match, elem;
	
			// HANDLE: $(""), $(null), $(undefined), $(false)
			if ( !selector ) {
				return this;
			}
	
			// Method init() accepts an alternate rootjQuery
			// so migrate can support jQuery.sub (gh-2101)
			root = root || rootjQuery;
	
			// Handle HTML strings
			if ( typeof selector === "string" ) {
				if ( selector[ 0 ] === "<" &&
					selector[ selector.length - 1 ] === ">" &&
					selector.length >= 3 ) {
	
					// Assume that strings that start and end with <> are HTML and skip the regex check
					match = [ null, selector, null ];
	
				} else {
					match = rquickExpr.exec( selector );
				}
	
				// Match html or make sure no context is specified for #id
				if ( match && ( match[ 1 ] || !context ) ) {
	
					// HANDLE: $(html) -> $(array)
					if ( match[ 1 ] ) {
						context = context instanceof jQuery ? context[ 0 ] : context;
	
						// Option to run scripts is true for back-compat
						// Intentionally let the error be thrown if parseHTML is not present
						jQuery.merge( this, jQuery.parseHTML(
							match[ 1 ],
							context && context.nodeType ? context.ownerDocument || context : document,
							true
						) );
	
						// HANDLE: $(html, props)
						if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {
							for ( match in context ) {
	
								// Properties of context are called as methods if possible
								if ( jQuery.isFunction( this[ match ] ) ) {
									this[ match ]( context[ match ] );
	
								// ...and otherwise set as attributes
								} else {
									this.attr( match, context[ match ] );
								}
							}
						}
	
						return this;
	
					// HANDLE: $(#id)
					} else {
						elem = document.getElementById( match[ 2 ] );
	
						// Support: Blackberry 4.6
						// gEBID returns nodes no longer in the document (#6963)
						if ( elem && elem.parentNode ) {
	
							// Inject the element directly into the jQuery object
							this.length = 1;
							this[ 0 ] = elem;
						}
	
						this.context = document;
						this.selector = selector;
						return this;
					}
	
				// HANDLE: $(expr, $(...))
				} else if ( !context || context.jquery ) {
					return ( context || root ).find( selector );
	
				// HANDLE: $(expr, context)
				// (which is just equivalent to: $(context).find(expr)
				} else {
					return this.constructor( context ).find( selector );
				}
	
			// HANDLE: $(DOMElement)
			} else if ( selector.nodeType ) {
				this.context = this[ 0 ] = selector;
				this.length = 1;
				return this;
	
			// HANDLE: $(function)
			// Shortcut for document ready
			} else if ( jQuery.isFunction( selector ) ) {
				return root.ready !== undefined ?
					root.ready( selector ) :
	
					// Execute immediately if ready is not present
					selector( jQuery );
			}
	
			if ( selector.selector !== undefined ) {
				this.selector = selector.selector;
				this.context = selector.context;
			}
	
			return jQuery.makeArray( selector, this );
		};
	
	// Give the init function the jQuery prototype for later instantiation
	init.prototype = jQuery.fn;
	
	// Initialize central reference
	rootjQuery = jQuery( document );
	
	
	var rparentsprev = /^(?:parents|prev(?:Until|All))/,
	
		// Methods guaranteed to produce a unique set when starting from a unique set
		guaranteedUnique = {
			children: true,
			contents: true,
			next: true,
			prev: true
		};
	
	jQuery.fn.extend( {
		has: function( target ) {
			var targets = jQuery( target, this ),
				l = targets.length;
	
			return this.filter( function() {
				var i = 0;
				for ( ; i < l; i++ ) {
					if ( jQuery.contains( this, targets[ i ] ) ) {
						return true;
					}
				}
			} );
		},
	
		closest: function( selectors, context ) {
			var cur,
				i = 0,
				l = this.length,
				matched = [],
				pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ?
					jQuery( selectors, context || this.context ) :
					0;
	
			for ( ; i < l; i++ ) {
				for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {
	
					// Always skip document fragments
					if ( cur.nodeType < 11 && ( pos ?
						pos.index( cur ) > -1 :
	
						// Don't pass non-elements to Sizzle
						cur.nodeType === 1 &&
							jQuery.find.matchesSelector( cur, selectors ) ) ) {
	
						matched.push( cur );
						break;
					}
				}
			}
	
			return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );
		},
	
		// Determine the position of an element within the set
		index: function( elem ) {
	
			// No argument, return index in parent
			if ( !elem ) {
				return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;
			}
	
			// Index in selector
			if ( typeof elem === "string" ) {
				return indexOf.call( jQuery( elem ), this[ 0 ] );
			}
	
			// Locate the position of the desired element
			return indexOf.call( this,
	
				// If it receives a jQuery object, the first element is used
				elem.jquery ? elem[ 0 ] : elem
			);
		},
	
		add: function( selector, context ) {
			return this.pushStack(
				jQuery.uniqueSort(
					jQuery.merge( this.get(), jQuery( selector, context ) )
				)
			);
		},
	
		addBack: function( selector ) {
			return this.add( selector == null ?
				this.prevObject : this.prevObject.filter( selector )
			);
		}
	} );
	
	function sibling( cur, dir ) {
		while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}
		return cur;
	}
	
	jQuery.each( {
		parent: function( elem ) {
			var parent = elem.parentNode;
			return parent && parent.nodeType !== 11 ? parent : null;
		},
		parents: function( elem ) {
			return dir( elem, "parentNode" );
		},
		parentsUntil: function( elem, i, until ) {
			return dir( elem, "parentNode", until );
		},
		next: function( elem ) {
			return sibling( elem, "nextSibling" );
		},
		prev: function( elem ) {
			return sibling( elem, "previousSibling" );
		},
		nextAll: function( elem ) {
			return dir( elem, "nextSibling" );
		},
		prevAll: function( elem ) {
			return dir( elem, "previousSibling" );
		},
		nextUntil: function( elem, i, until ) {
			return dir( elem, "nextSibling", until );
		},
		prevUntil: function( elem, i, until ) {
			return dir( elem, "previousSibling", until );
		},
		siblings: function( elem ) {
			return siblings( ( elem.parentNode || {} ).firstChild, elem );
		},
		children: function( elem ) {
			return siblings( elem.firstChild );
		},
		contents: function( elem ) {
			return elem.contentDocument || jQuery.merge( [], elem.childNodes );
		}
	}, function( name, fn ) {
		jQuery.fn[ name ] = function( until, selector ) {
			var matched = jQuery.map( this, fn, until );
	
			if ( name.slice( -5 ) !== "Until" ) {
				selector = until;
			}
	
			if ( selector && typeof selector === "string" ) {
				matched = jQuery.filter( selector, matched );
			}
	
			if ( this.length > 1 ) {
	
				// Remove duplicates
				if ( !guaranteedUnique[ name ] ) {
					jQuery.uniqueSort( matched );
				}
	
				// Reverse order for parents* and prev-derivatives
				if ( rparentsprev.test( name ) ) {
					matched.reverse();
				}
			}
	
			return this.pushStack( matched );
		};
	} );
	var rnotwhite = ( /\S+/g );
	
	
	
	// Convert String-formatted options into Object-formatted ones
	function createOptions( options ) {
		var object = {};
		jQuery.each( options.match( rnotwhite ) || [], function( _, flag ) {
			object[ flag ] = true;
		} );
		return object;
	}
	
	/*
	 * Create a callback list using the following parameters:
	 *
	 *	options: an optional list of space-separated options that will change how
	 *			the callback list behaves or a more traditional option object
	 *
	 * By default a callback list will act like an event callback list and can be
	 * "fired" multiple times.
	 *
	 * Possible options:
	 *
	 *	once:			will ensure the callback list can only be fired once (like a Deferred)
	 *
	 *	memory:			will keep track of previous values and will call any callback added
	 *					after the list has been fired right away with the latest "memorized"
	 *					values (like a Deferred)
	 *
	 *	unique:			will ensure a callback can only be added once (no duplicate in the list)
	 *
	 *	stopOnFalse:	interrupt callings when a callback returns false
	 *
	 */
	jQuery.Callbacks = function( options ) {
	
		// Convert options from String-formatted to Object-formatted if needed
		// (we check in cache first)
		options = typeof options === "string" ?
			createOptions( options ) :
			jQuery.extend( {}, options );
	
		var // Flag to know if list is currently firing
			firing,
	
			// Last fire value for non-forgettable lists
			memory,
	
			// Flag to know if list was already fired
			fired,
	
			// Flag to prevent firing
			locked,
	
			// Actual callback list
			list = [],
	
			// Queue of execution data for repeatable lists
			queue = [],
	
			// Index of currently firing callback (modified by add/remove as needed)
			firingIndex = -1,
	
			// Fire callbacks
			fire = function() {
	
				// Enforce single-firing
				locked = options.once;
	
				// Execute callbacks for all pending executions,
				// respecting firingIndex overrides and runtime changes
				fired = firing = true;
				for ( ; queue.length; firingIndex = -1 ) {
					memory = queue.shift();
					while ( ++firingIndex < list.length ) {
	
						// Run callback and check for early termination
						if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&
							options.stopOnFalse ) {
	
							// Jump to end and forget the data so .add doesn't re-fire
							firingIndex = list.length;
							memory = false;
						}
					}
				}
	
				// Forget the data if we're done with it
				if ( !options.memory ) {
					memory = false;
				}
	
				firing = false;
	
				// Clean up if we're done firing for good
				if ( locked ) {
	
					// Keep an empty list if we have data for future add calls
					if ( memory ) {
						list = [];
	
					// Otherwise, this object is spent
					} else {
						list = "";
					}
				}
			},
	
			// Actual Callbacks object
			self = {
	
				// Add a callback or a collection of callbacks to the list
				add: function() {
					if ( list ) {
	
						// If we have memory from a past run, we should fire after adding
						if ( memory && !firing ) {
							firingIndex = list.length - 1;
							queue.push( memory );
						}
	
						( function add( args ) {
							jQuery.each( args, function( _, arg ) {
								if ( jQuery.isFunction( arg ) ) {
									if ( !options.unique || !self.has( arg ) ) {
										list.push( arg );
									}
								} else if ( arg && arg.length && jQuery.type( arg ) !== "string" ) {
	
									// Inspect recursively
									add( arg );
								}
							} );
						} )( arguments );
	
						if ( memory && !firing ) {
							fire();
						}
					}
					return this;
				},
	
				// Remove a callback from the list
				remove: function() {
					jQuery.each( arguments, function( _, arg ) {
						var index;
						while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
							list.splice( index, 1 );
	
							// Handle firing indexes
							if ( index <= firingIndex ) {
								firingIndex--;
							}
						}
					} );
					return this;
				},
	
				// Check if a given callback is in the list.
				// If no argument is given, return whether or not list has callbacks attached.
				has: function( fn ) {
					return fn ?
						jQuery.inArray( fn, list ) > -1 :
						list.length > 0;
				},
	
				// Remove all callbacks from the list
				empty: function() {
					if ( list ) {
						list = [];
					}
					return this;
				},
	
				// Disable .fire and .add
				// Abort any current/pending executions
				// Clear all callbacks and values
				disable: function() {
					locked = queue = [];
					list = memory = "";
					return this;
				},
				disabled: function() {
					return !list;
				},
	
				// Disable .fire
				// Also disable .add unless we have memory (since it would have no effect)
				// Abort any pending executions
				lock: function() {
					locked = queue = [];
					if ( !memory ) {
						list = memory = "";
					}
					return this;
				},
				locked: function() {
					return !!locked;
				},
	
				// Call all callbacks with the given context and arguments
				fireWith: function( context, args ) {
					if ( !locked ) {
						args = args || [];
						args = [ context, args.slice ? args.slice() : args ];
						queue.push( args );
						if ( !firing ) {
							fire();
						}
					}
					return this;
				},
	
				// Call all the callbacks with the given arguments
				fire: function() {
					self.fireWith( this, arguments );
					return this;
				},
	
				// To know if the callbacks have already been called at least once
				fired: function() {
					return !!fired;
				}
			};
	
		return self;
	};
	
	
	jQuery.extend( {
	
		Deferred: function( func ) {
			var tuples = [
	
					// action, add listener, listener list, final state
					[ "resolve", "done", jQuery.Callbacks( "once memory" ), "resolved" ],
					[ "reject", "fail", jQuery.Callbacks( "once memory" ), "rejected" ],
					[ "notify", "progress", jQuery.Callbacks( "memory" ) ]
				],
				state = "pending",
				promise = {
					state: function() {
						return state;
					},
					always: function() {
						deferred.done( arguments ).fail( arguments );
						return this;
					},
					then: function( /* fnDone, fnFail, fnProgress */ ) {
						var fns = arguments;
						return jQuery.Deferred( function( newDefer ) {
							jQuery.each( tuples, function( i, tuple ) {
								var fn = jQuery.isFunction( fns[ i ] ) && fns[ i ];
	
								// deferred[ done | fail | progress ] for forwarding actions to newDefer
								deferred[ tuple[ 1 ] ]( function() {
									var returned = fn && fn.apply( this, arguments );
									if ( returned && jQuery.isFunction( returned.promise ) ) {
										returned.promise()
											.progress( newDefer.notify )
											.done( newDefer.resolve )
											.fail( newDefer.reject );
									} else {
										newDefer[ tuple[ 0 ] + "With" ](
											this === promise ? newDefer.promise() : this,
											fn ? [ returned ] : arguments
										);
									}
								} );
							} );
							fns = null;
						} ).promise();
					},
	
					// Get a promise for this deferred
					// If obj is provided, the promise aspect is added to the object
					promise: function( obj ) {
						return obj != null ? jQuery.extend( obj, promise ) : promise;
					}
				},
				deferred = {};
	
			// Keep pipe for back-compat
			promise.pipe = promise.then;
	
			// Add list-specific methods
			jQuery.each( tuples, function( i, tuple ) {
				var list = tuple[ 2 ],
					stateString = tuple[ 3 ];
	
				// promise[ done | fail | progress ] = list.add
				promise[ tuple[ 1 ] ] = list.add;
	
				// Handle state
				if ( stateString ) {
					list.add( function() {
	
						// state = [ resolved | rejected ]
						state = stateString;
	
					// [ reject_list | resolve_list ].disable; progress_list.lock
					}, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );
				}
	
				// deferred[ resolve | reject | notify ]
				deferred[ tuple[ 0 ] ] = function() {
					deferred[ tuple[ 0 ] + "With" ]( this === deferred ? promise : this, arguments );
					return this;
				};
				deferred[ tuple[ 0 ] + "With" ] = list.fireWith;
			} );
	
			// Make the deferred a promise
			promise.promise( deferred );
	
			// Call given func if any
			if ( func ) {
				func.call( deferred, deferred );
			}
	
			// All done!
			return deferred;
		},
	
		// Deferred helper
		when: function( subordinate /* , ..., subordinateN */ ) {
			var i = 0,
				resolveValues = slice.call( arguments ),
				length = resolveValues.length,
	
				// the count of uncompleted subordinates
				remaining = length !== 1 ||
					( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,
	
				// the master Deferred.
				// If resolveValues consist of only a single Deferred, just use that.
				deferred = remaining === 1 ? subordinate : jQuery.Deferred(),
	
				// Update function for both resolve and progress values
				updateFunc = function( i, contexts, values ) {
					return function( value ) {
						contexts[ i ] = this;
						values[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;
						if ( values === progressValues ) {
							deferred.notifyWith( contexts, values );
						} else if ( !( --remaining ) ) {
							deferred.resolveWith( contexts, values );
						}
					};
				},
	
				progressValues, progressContexts, resolveContexts;
	
			// Add listeners to Deferred subordinates; treat others as resolved
			if ( length > 1 ) {
				progressValues = new Array( length );
				progressContexts = new Array( length );
				resolveContexts = new Array( length );
				for ( ; i < length; i++ ) {
					if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {
						resolveValues[ i ].promise()
							.progress( updateFunc( i, progressContexts, progressValues ) )
							.done( updateFunc( i, resolveContexts, resolveValues ) )
							.fail( deferred.reject );
					} else {
						--remaining;
					}
				}
			}
	
			// If we're not waiting on anything, resolve the master
			if ( !remaining ) {
				deferred.resolveWith( resolveContexts, resolveValues );
			}
	
			return deferred.promise();
		}
	} );
	
	
	// The deferred used on DOM ready
	var readyList;
	
	jQuery.fn.ready = function( fn ) {
	
		// Add the callback
		jQuery.ready.promise().done( fn );
	
		return this;
	};
	
	jQuery.extend( {
	
		// Is the DOM ready to be used? Set to true once it occurs.
		isReady: false,
	
		// A counter to track how many items to wait for before
		// the ready event fires. See #6781
		readyWait: 1,
	
		// Hold (or release) the ready event
		holdReady: function( hold ) {
			if ( hold ) {
				jQuery.readyWait++;
			} else {
				jQuery.ready( true );
			}
		},
	
		// Handle when the DOM is ready
		ready: function( wait ) {
	
			// Abort if there are pending holds or we're already ready
			if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
				return;
			}
	
			// Remember that the DOM is ready
			jQuery.isReady = true;
	
			// If a normal DOM Ready event fired, decrement, and wait if need be
			if ( wait !== true && --jQuery.readyWait > 0 ) {
				return;
			}
	
			// If there are functions bound, to execute
			readyList.resolveWith( document, [ jQuery ] );
	
			// Trigger any bound ready events
			if ( jQuery.fn.triggerHandler ) {
				jQuery( document ).triggerHandler( "ready" );
				jQuery( document ).off( "ready" );
			}
		}
	} );
	
	/**
	 * The ready event handler and self cleanup method
	 */
	function completed() {
		document.removeEventListener( "DOMContentLoaded", completed );
		window.removeEventListener( "load", completed );
		jQuery.ready();
	}
	
	jQuery.ready.promise = function( obj ) {
		if ( !readyList ) {
	
			readyList = jQuery.Deferred();
	
			// Catch cases where $(document).ready() is called
			// after the browser event has already occurred.
			// Support: IE9-10 only
			// Older IE sometimes signals "interactive" too soon
			if ( document.readyState === "complete" ||
				( document.readyState !== "loading" && !document.documentElement.doScroll ) ) {
	
				// Handle it asynchronously to allow scripts the opportunity to delay ready
				window.setTimeout( jQuery.ready );
	
			} else {
	
				// Use the handy event callback
				document.addEventListener( "DOMContentLoaded", completed );
	
				// A fallback to window.onload, that will always work
				window.addEventListener( "load", completed );
			}
		}
		return readyList.promise( obj );
	};
	
	// Kick off the DOM ready check even if the user does not
	jQuery.ready.promise();
	
	
	
	
	// Multifunctional method to get and set values of a collection
	// The value/s can optionally be executed if it's a function
	var access = function( elems, fn, key, value, chainable, emptyGet, raw ) {
		var i = 0,
			len = elems.length,
			bulk = key == null;
	
		// Sets many values
		if ( jQuery.type( key ) === "object" ) {
			chainable = true;
			for ( i in key ) {
				access( elems, fn, i, key[ i ], true, emptyGet, raw );
			}
	
		// Sets one value
		} else if ( value !== undefined ) {
			chainable = true;
	
			if ( !jQuery.isFunction( value ) ) {
				raw = true;
			}
	
			if ( bulk ) {
	
				// Bulk operations run against the entire set
				if ( raw ) {
					fn.call( elems, value );
					fn = null;
	
				// ...except when executing function values
				} else {
					bulk = fn;
					fn = function( elem, key, value ) {
						return bulk.call( jQuery( elem ), value );
					};
				}
			}
	
			if ( fn ) {
				for ( ; i < len; i++ ) {
					fn(
						elems[ i ], key, raw ?
						value :
						value.call( elems[ i ], i, fn( elems[ i ], key ) )
					);
				}
			}
		}
	
		return chainable ?
			elems :
	
			// Gets
			bulk ?
				fn.call( elems ) :
				len ? fn( elems[ 0 ], key ) : emptyGet;
	};
	var acceptData = function( owner ) {
	
		// Accepts only:
		//  - Node
		//    - Node.ELEMENT_NODE
		//    - Node.DOCUMENT_NODE
		//  - Object
		//    - Any
		/* jshint -W018 */
		return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );
	};
	
	
	
	
	function Data() {
		this.expando = jQuery.expando + Data.uid++;
	}
	
	Data.uid = 1;
	
	Data.prototype = {
	
		register: function( owner, initial ) {
			var value = initial || {};
	
			// If it is a node unlikely to be stringify-ed or looped over
			// use plain assignment
			if ( owner.nodeType ) {
				owner[ this.expando ] = value;
	
			// Otherwise secure it in a non-enumerable, non-writable property
			// configurability must be true to allow the property to be
			// deleted with the delete operator
			} else {
				Object.defineProperty( owner, this.expando, {
					value: value,
					writable: true,
					configurable: true
				} );
			}
			return owner[ this.expando ];
		},
		cache: function( owner ) {
	
			// We can accept data for non-element nodes in modern browsers,
			// but we should not, see #8335.
			// Always return an empty object.
			if ( !acceptData( owner ) ) {
				return {};
			}
	
			// Check if the owner object already has a cache
			var value = owner[ this.expando ];
	
			// If not, create one
			if ( !value ) {
				value = {};
	
				// We can accept data for non-element nodes in modern browsers,
				// but we should not, see #8335.
				// Always return an empty object.
				if ( acceptData( owner ) ) {
	
					// If it is a node unlikely to be stringify-ed or looped over
					// use plain assignment
					if ( owner.nodeType ) {
						owner[ this.expando ] = value;
	
					// Otherwise secure it in a non-enumerable property
					// configurable must be true to allow the property to be
					// deleted when data is removed
					} else {
						Object.defineProperty( owner, this.expando, {
							value: value,
							configurable: true
						} );
					}
				}
			}
	
			return value;
		},
		set: function( owner, data, value ) {
			var prop,
				cache = this.cache( owner );
	
			// Handle: [ owner, key, value ] args
			if ( typeof data === "string" ) {
				cache[ data ] = value;
	
			// Handle: [ owner, { properties } ] args
			} else {
	
				// Copy the properties one-by-one to the cache object
				for ( prop in data ) {
					cache[ prop ] = data[ prop ];
				}
			}
			return cache;
		},
		get: function( owner, key ) {
			return key === undefined ?
				this.cache( owner ) :
				owner[ this.expando ] && owner[ this.expando ][ key ];
		},
		access: function( owner, key, value ) {
			var stored;
	
			// In cases where either:
			//
			//   1. No key was specified
			//   2. A string key was specified, but no value provided
			//
			// Take the "read" path and allow the get method to determine
			// which value to return, respectively either:
			//
			//   1. The entire cache object
			//   2. The data stored at the key
			//
			if ( key === undefined ||
					( ( key && typeof key === "string" ) && value === undefined ) ) {
	
				stored = this.get( owner, key );
	
				return stored !== undefined ?
					stored : this.get( owner, jQuery.camelCase( key ) );
			}
	
			// When the key is not a string, or both a key and value
			// are specified, set or extend (existing objects) with either:
			//
			//   1. An object of properties
			//   2. A key and value
			//
			this.set( owner, key, value );
	
			// Since the "set" path can have two possible entry points
			// return the expected data based on which path was taken[*]
			return value !== undefined ? value : key;
		},
		remove: function( owner, key ) {
			var i, name, camel,
				cache = owner[ this.expando ];
	
			if ( cache === undefined ) {
				return;
			}
	
			if ( key === undefined ) {
				this.register( owner );
	
			} else {
	
				// Support array or space separated string of keys
				if ( jQuery.isArray( key ) ) {
	
					// If "name" is an array of keys...
					// When data is initially created, via ("key", "val") signature,
					// keys will be converted to camelCase.
					// Since there is no way to tell _how_ a key was added, remove
					// both plain key and camelCase key. #12786
					// This will only penalize the array argument path.
					name = key.concat( key.map( jQuery.camelCase ) );
				} else {
					camel = jQuery.camelCase( key );
	
					// Try the string as a key before any manipulation
					if ( key in cache ) {
						name = [ key, camel ];
					} else {
	
						// If a key with the spaces exists, use it.
						// Otherwise, create an array by matching non-whitespace
						name = camel;
						name = name in cache ?
							[ name ] : ( name.match( rnotwhite ) || [] );
					}
				}
	
				i = name.length;
	
				while ( i-- ) {
					delete cache[ name[ i ] ];
				}
			}
	
			// Remove the expando if there's no more data
			if ( key === undefined || jQuery.isEmptyObject( cache ) ) {
	
				// Support: Chrome <= 35-45+
				// Webkit & Blink performance suffers when deleting properties
				// from DOM nodes, so set to undefined instead
				// https://code.google.com/p/chromium/issues/detail?id=378607
				if ( owner.nodeType ) {
					owner[ this.expando ] = undefined;
				} else {
					delete owner[ this.expando ];
				}
			}
		},
		hasData: function( owner ) {
			var cache = owner[ this.expando ];
			return cache !== undefined && !jQuery.isEmptyObject( cache );
		}
	};
	var dataPriv = new Data();
	
	var dataUser = new Data();
	
	
	
	//	Implementation Summary
	//
	//	1. Enforce API surface and semantic compatibility with 1.9.x branch
	//	2. Improve the module's maintainability by reducing the storage
	//		paths to a single mechanism.
	//	3. Use the same single mechanism to support "private" and "user" data.
	//	4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData)
	//	5. Avoid exposing implementation details on user objects (eg. expando properties)
	//	6. Provide a clear path for implementation upgrade to WeakMap in 2014
	
	var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
		rmultiDash = /[A-Z]/g;
	
	function dataAttr( elem, key, data ) {
		var name;
	
		// If nothing was found internally, try to fetch any
		// data from the HTML5 data-* attribute
		if ( data === undefined && elem.nodeType === 1 ) {
			name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase();
			data = elem.getAttribute( name );
	
			if ( typeof data === "string" ) {
				try {
					data = data === "true" ? true :
						data === "false" ? false :
						data === "null" ? null :
	
						// Only convert to a number if it doesn't change the string
						+data + "" === data ? +data :
						rbrace.test( data ) ? jQuery.parseJSON( data ) :
						data;
				} catch ( e ) {}
	
				// Make sure we set the data so it isn't changed later
				dataUser.set( elem, key, data );
			} else {
				data = undefined;
			}
		}
		return data;
	}
	
	jQuery.extend( {
		hasData: function( elem ) {
			return dataUser.hasData( elem ) || dataPriv.hasData( elem );
		},
	
		data: function( elem, name, data ) {
			return dataUser.access( elem, name, data );
		},
	
		removeData: function( elem, name ) {
			dataUser.remove( elem, name );
		},
	
		// TODO: Now that all calls to _data and _removeData have been replaced
		// with direct calls to dataPriv methods, these can be deprecated.
		_data: function( elem, name, data ) {
			return dataPriv.access( elem, name, data );
		},
	
		_removeData: function( elem, name ) {
			dataPriv.remove( elem, name );
		}
	} );
	
	jQuery.fn.extend( {
		data: function( key, value ) {
			var i, name, data,
				elem = this[ 0 ],
				attrs = elem && elem.attributes;
	
			// Gets all values
			if ( key === undefined ) {
				if ( this.length ) {
					data = dataUser.get( elem );
	
					if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) {
						i = attrs.length;
						while ( i-- ) {
	
							// Support: IE11+
							// The attrs elements can be null (#14894)
							if ( attrs[ i ] ) {
								name = attrs[ i ].name;
								if ( name.indexOf( "data-" ) === 0 ) {
									name = jQuery.camelCase( name.slice( 5 ) );
									dataAttr( elem, name, data[ name ] );
								}
							}
						}
						dataPriv.set( elem, "hasDataAttrs", true );
					}
				}
	
				return data;
			}
	
			// Sets multiple values
			if ( typeof key === "object" ) {
				return this.each( function() {
					dataUser.set( this, key );
				} );
			}
	
			return access( this, function( value ) {
				var data, camelKey;
	
				// The calling jQuery object (element matches) is not empty
				// (and therefore has an element appears at this[ 0 ]) and the
				// `value` parameter was not undefined. An empty jQuery object
				// will result in `undefined` for elem = this[ 0 ] which will
				// throw an exception if an attempt to read a data cache is made.
				if ( elem && value === undefined ) {
	
					// Attempt to get data from the cache
					// with the key as-is
					data = dataUser.get( elem, key ) ||
	
						// Try to find dashed key if it exists (gh-2779)
						// This is for 2.2.x only
						dataUser.get( elem, key.replace( rmultiDash, "-$&" ).toLowerCase() );
	
					if ( data !== undefined ) {
						return data;
					}
	
					camelKey = jQuery.camelCase( key );
	
					// Attempt to get data from the cache
					// with the key camelized
					data = dataUser.get( elem, camelKey );
					if ( data !== undefined ) {
						return data;
					}
	
					// Attempt to "discover" the data in
					// HTML5 custom data-* attrs
					data = dataAttr( elem, camelKey, undefined );
					if ( data !== undefined ) {
						return data;
					}
	
					// We tried really hard, but the data doesn't exist.
					return;
				}
	
				// Set the data...
				camelKey = jQuery.camelCase( key );
				this.each( function() {
	
					// First, attempt to store a copy or reference of any
					// data that might've been store with a camelCased key.
					var data = dataUser.get( this, camelKey );
	
					// For HTML5 data-* attribute interop, we have to
					// store property names with dashes in a camelCase form.
					// This might not apply to all properties...*
					dataUser.set( this, camelKey, value );
	
					// *... In the case of properties that might _actually_
					// have dashes, we need to also store a copy of that
					// unchanged property.
					if ( key.indexOf( "-" ) > -1 && data !== undefined ) {
						dataUser.set( this, key, value );
					}
				} );
			}, null, value, arguments.length > 1, null, true );
		},
	
		removeData: function( key ) {
			return this.each( function() {
				dataUser.remove( this, key );
			} );
		}
	} );
	
	
	jQuery.extend( {
		queue: function( elem, type, data ) {
			var queue;
	
			if ( elem ) {
				type = ( type || "fx" ) + "queue";
				queue = dataPriv.get( elem, type );
	
				// Speed up dequeue by getting out quickly if this is just a lookup
				if ( data ) {
					if ( !queue || jQuery.isArray( data ) ) {
						queue = dataPriv.access( elem, type, jQuery.makeArray( data ) );
					} else {
						queue.push( data );
					}
				}
				return queue || [];
			}
		},
	
		dequeue: function( elem, type ) {
			type = type || "fx";
	
			var queue = jQuery.queue( elem, type ),
				startLength = queue.length,
				fn = queue.shift(),
				hooks = jQuery._queueHooks( elem, type ),
				next = function() {
					jQuery.dequeue( elem, type );
				};
	
			// If the fx queue is dequeued, always remove the progress sentinel
			if ( fn === "inprogress" ) {
				fn = queue.shift();
				startLength--;
			}
	
			if ( fn ) {
	
				// Add a progress sentinel to prevent the fx queue from being
				// automatically dequeued
				if ( type === "fx" ) {
					queue.unshift( "inprogress" );
				}
	
				// Clear up the last queue stop function
				delete hooks.stop;
				fn.call( elem, next, hooks );
			}
	
			if ( !startLength && hooks ) {
				hooks.empty.fire();
			}
		},
	
		// Not public - generate a queueHooks object, or return the current one
		_queueHooks: function( elem, type ) {
			var key = type + "queueHooks";
			return dataPriv.get( elem, key ) || dataPriv.access( elem, key, {
				empty: jQuery.Callbacks( "once memory" ).add( function() {
					dataPriv.remove( elem, [ type + "queue", key ] );
				} )
			} );
		}
	} );
	
	jQuery.fn.extend( {
		queue: function( type, data ) {
			var setter = 2;
	
			if ( typeof type !== "string" ) {
				data = type;
				type = "fx";
				setter--;
			}
	
			if ( arguments.length < setter ) {
				return jQuery.queue( this[ 0 ], type );
			}
	
			return data === undefined ?
				this :
				this.each( function() {
					var queue = jQuery.queue( this, type, data );
	
					// Ensure a hooks for this queue
					jQuery._queueHooks( this, type );
	
					if ( type === "fx" && queue[ 0 ] !== "inprogress" ) {
						jQuery.dequeue( this, type );
					}
				} );
		},
		dequeue: function( type ) {
			return this.each( function() {
				jQuery.dequeue( this, type );
			} );
		},
		clearQueue: function( type ) {
			return this.queue( type || "fx", [] );
		},
	
		// Get a promise resolved when queues of a certain type
		// are emptied (fx is the type by default)
		promise: function( type, obj ) {
			var tmp,
				count = 1,
				defer = jQuery.Deferred(),
				elements = this,
				i = this.length,
				resolve = function() {
					if ( !( --count ) ) {
						defer.resolveWith( elements, [ elements ] );
					}
				};
	
			if ( typeof type !== "string" ) {
				obj = type;
				type = undefined;
			}
			type = type || "fx";
	
			while ( i-- ) {
				tmp = dataPriv.get( elements[ i ], type + "queueHooks" );
				if ( tmp && tmp.empty ) {
					count++;
					tmp.empty.add( resolve );
				}
			}
			resolve();
			return defer.promise( obj );
		}
	} );
	var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source;
	
	var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" );
	
	
	var cssExpand = [ "Top", "Right", "Bottom", "Left" ];
	
	var isHidden = function( elem, el ) {
	
			// isHidden might be called from jQuery#filter function;
			// in that case, element will be second argument
			elem = el || elem;
			return jQuery.css( elem, "display" ) === "none" ||
				!jQuery.contains( elem.ownerDocument, elem );
		};
	
	
	
	function adjustCSS( elem, prop, valueParts, tween ) {
		var adjusted,
			scale = 1,
			maxIterations = 20,
			currentValue = tween ?
				function() { return tween.cur(); } :
				function() { return jQuery.css( elem, prop, "" ); },
			initial = currentValue(),
			unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ),
	
			// Starting value computation is required for potential unit mismatches
			initialInUnit = ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) &&
				rcssNum.exec( jQuery.css( elem, prop ) );
	
		if ( initialInUnit && initialInUnit[ 3 ] !== unit ) {
	
			// Trust units reported by jQuery.css
			unit = unit || initialInUnit[ 3 ];
	
			// Make sure we update the tween properties later on
			valueParts = valueParts || [];
	
			// Iteratively approximate from a nonzero starting point
			initialInUnit = +initial || 1;
	
			do {
	
				// If previous iteration zeroed out, double until we get *something*.
				// Use string for doubling so we don't accidentally see scale as unchanged below
				scale = scale || ".5";
	
				// Adjust and apply
				initialInUnit = initialInUnit / scale;
				jQuery.style( elem, prop, initialInUnit + unit );
	
			// Update scale, tolerating zero or NaN from tween.cur()
			// Break the loop if scale is unchanged or perfect, or if we've just had enough.
			} while (
				scale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations
			);
		}
	
		if ( valueParts ) {
			initialInUnit = +initialInUnit || +initial || 0;
	
			// Apply relative offset (+=/-=) if specified
			adjusted = valueParts[ 1 ] ?
				initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :
				+valueParts[ 2 ];
			if ( tween ) {
				tween.unit = unit;
				tween.start = initialInUnit;
				tween.end = adjusted;
			}
		}
		return adjusted;
	}
	var rcheckableType = ( /^(?:checkbox|radio)$/i );
	
	var rtagName = ( /<([\w:-]+)/ );
	
	var rscriptType = ( /^$|\/(?:java|ecma)script/i );
	
	
	
	// We have to close these tags to support XHTML (#13200)
	var wrapMap = {
	
		// Support: IE9
		option: [ 1, "<select multiple='multiple'>", "</select>" ],
	
		// XHTML parsers do not magically insert elements in the
		// same way that tag soup parsers do. So we cannot shorten
		// this by omitting <tbody> or other required elements.
		thead: [ 1, "<table>", "</table>" ],
		col: [ 2, "<table><colgroup>", "</colgroup></table>" ],
		tr: [ 2, "<table><tbody>", "</tbody></table>" ],
		td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
	
		_default: [ 0, "", "" ]
	};
	
	// Support: IE9
	wrapMap.optgroup = wrapMap.option;
	
	wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
	wrapMap.th = wrapMap.td;
	
	
	function getAll( context, tag ) {
	
		// Support: IE9-11+
		// Use typeof to avoid zero-argument method invocation on host objects (#15151)
		var ret = typeof context.getElementsByTagName !== "undefined" ?
				context.getElementsByTagName( tag || "*" ) :
				typeof context.querySelectorAll !== "undefined" ?
					context.querySelectorAll( tag || "*" ) :
				[];
	
		return tag === undefined || tag && jQuery.nodeName( context, tag ) ?
			jQuery.merge( [ context ], ret ) :
			ret;
	}
	
	
	// Mark scripts as having already been evaluated
	function setGlobalEval( elems, refElements ) {
		var i = 0,
			l = elems.length;
	
		for ( ; i < l; i++ ) {
			dataPriv.set(
				elems[ i ],
				"globalEval",
				!refElements || dataPriv.get( refElements[ i ], "globalEval" )
			);
		}
	}
	
	
	var rhtml = /<|&#?\w+;/;
	
	function buildFragment( elems, context, scripts, selection, ignored ) {
		var elem, tmp, tag, wrap, contains, j,
			fragment = context.createDocumentFragment(),
			nodes = [],
			i = 0,
			l = elems.length;
	
		for ( ; i < l; i++ ) {
			elem = elems[ i ];
	
			if ( elem || elem === 0 ) {
	
				// Add nodes directly
				if ( jQuery.type( elem ) === "object" ) {
	
					// Support: Android<4.1, PhantomJS<2
					// push.apply(_, arraylike) throws on ancient WebKit
					jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
	
				// Convert non-html into a text node
				} else if ( !rhtml.test( elem ) ) {
					nodes.push( context.createTextNode( elem ) );
	
				// Convert html into DOM nodes
				} else {
					tmp = tmp || fragment.appendChild( context.createElement( "div" ) );
	
					// Deserialize a standard representation
					tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase();
					wrap = wrapMap[ tag ] || wrapMap._default;
					tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];
	
					// Descend through wrappers to the right content
					j = wrap[ 0 ];
					while ( j-- ) {
						tmp = tmp.lastChild;
					}
	
					// Support: Android<4.1, PhantomJS<2
					// push.apply(_, arraylike) throws on ancient WebKit
					jQuery.merge( nodes, tmp.childNodes );
	
					// Remember the top-level container
					tmp = fragment.firstChild;
	
					// Ensure the created nodes are orphaned (#12392)
					tmp.textContent = "";
				}
			}
		}
	
		// Remove wrapper from fragment
		fragment.textContent = "";
	
		i = 0;
		while ( ( elem = nodes[ i++ ] ) ) {
	
			// Skip elements already in the context collection (trac-4087)
			if ( selection && jQuery.inArray( elem, selection ) > -1 ) {
				if ( ignored ) {
					ignored.push( elem );
				}
				continue;
			}
	
			contains = jQuery.contains( elem.ownerDocument, elem );
	
			// Append to fragment
			tmp = getAll( fragment.appendChild( elem ), "script" );
	
			// Preserve script evaluation history
			if ( contains ) {
				setGlobalEval( tmp );
			}
	
			// Capture executables
			if ( scripts ) {
				j = 0;
				while ( ( elem = tmp[ j++ ] ) ) {
					if ( rscriptType.test( elem.type || "" ) ) {
						scripts.push( elem );
					}
				}
			}
		}
	
		return fragment;
	}
	
	
	( function() {
		var fragment = document.createDocumentFragment(),
			div = fragment.appendChild( document.createElement( "div" ) ),
			input = document.createElement( "input" );
	
		// Support: Android 4.0-4.3, Safari<=5.1
		// Check state lost if the name is set (#11217)
		// Support: Windows Web Apps (WWA)
		// `name` and `type` must use .setAttribute for WWA (#14901)
		input.setAttribute( "type", "radio" );
		input.setAttribute( "checked", "checked" );
		input.setAttribute( "name", "t" );
	
		div.appendChild( input );
	
		// Support: Safari<=5.1, Android<4.2
		// Older WebKit doesn't clone checked state correctly in fragments
		support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;
	
		// Support: IE<=11+
		// Make sure textarea (and checkbox) defaultValue is properly cloned
		div.innerHTML = "<textarea>x</textarea>";
		support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;
	} )();
	
	
	var
		rkeyEvent = /^key/,
		rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,
		rtypenamespace = /^([^.]*)(?:\.(.+)|)/;
	
	function returnTrue() {
		return true;
	}
	
	function returnFalse() {
		return false;
	}
	
	// Support: IE9
	// See #13393 for more info
	function safeActiveElement() {
		try {
			return document.activeElement;
		} catch ( err ) { }
	}
	
	function on( elem, types, selector, data, fn, one ) {
		var origFn, type;
	
		// Types can be a map of types/handlers
		if ( typeof types === "object" ) {
	
			// ( types-Object, selector, data )
			if ( typeof selector !== "string" ) {
	
				// ( types-Object, data )
				data = data || selector;
				selector = undefined;
			}
			for ( type in types ) {
				on( elem, type, selector, data, types[ type ], one );
			}
			return elem;
		}
	
		if ( data == null && fn == null ) {
	
			// ( types, fn )
			fn = selector;
			data = selector = undefined;
		} else if ( fn == null ) {
			if ( typeof selector === "string" ) {
	
				// ( types, selector, fn )
				fn = data;
				data = undefined;
			} else {
	
				// ( types, data, fn )
				fn = data;
				data = selector;
				selector = undefined;
			}
		}
		if ( fn === false ) {
			fn = returnFalse;
		} else if ( !fn ) {
			return elem;
		}
	
		if ( one === 1 ) {
			origFn = fn;
			fn = function( event ) {
	
				// Can use an empty set, since event contains the info
				jQuery().off( event );
				return origFn.apply( this, arguments );
			};
	
			// Use same guid so caller can remove using origFn
			fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
		}
		return elem.each( function() {
			jQuery.event.add( this, types, fn, data, selector );
		} );
	}
	
	/*
	 * Helper functions for managing events -- not part of the public interface.
	 * Props to Dean Edwards' addEvent library for many of the ideas.
	 */
	jQuery.event = {
	
		global: {},
	
		add: function( elem, types, handler, data, selector ) {
	
			var handleObjIn, eventHandle, tmp,
				events, t, handleObj,
				special, handlers, type, namespaces, origType,
				elemData = dataPriv.get( elem );
	
			// Don't attach events to noData or text/comment nodes (but allow plain objects)
			if ( !elemData ) {
				return;
			}
	
			// Caller can pass in an object of custom data in lieu of the handler
			if ( handler.handler ) {
				handleObjIn = handler;
				handler = handleObjIn.handler;
				selector = handleObjIn.selector;
			}
	
			// Make sure that the handler has a unique ID, used to find/remove it later
			if ( !handler.guid ) {
				handler.guid = jQuery.guid++;
			}
	
			// Init the element's event structure and main handler, if this is the first
			if ( !( events = elemData.events ) ) {
				events = elemData.events = {};
			}
			if ( !( eventHandle = elemData.handle ) ) {
				eventHandle = elemData.handle = function( e ) {
	
					// Discard the second event of a jQuery.event.trigger() and
					// when an event is called after a page has unloaded
					return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ?
						jQuery.event.dispatch.apply( elem, arguments ) : undefined;
				};
			}
	
			// Handle multiple events separated by a space
			types = ( types || "" ).match( rnotwhite ) || [ "" ];
			t = types.length;
			while ( t-- ) {
				tmp = rtypenamespace.exec( types[ t ] ) || [];
				type = origType = tmp[ 1 ];
				namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
	
				// There *must* be a type, no attaching namespace-only handlers
				if ( !type ) {
					continue;
				}
	
				// If event changes its type, use the special event handlers for the changed type
				special = jQuery.event.special[ type ] || {};
	
				// If selector defined, determine special event api type, otherwise given type
				type = ( selector ? special.delegateType : special.bindType ) || type;
	
				// Update special based on newly reset type
				special = jQuery.event.special[ type ] || {};
	
				// handleObj is passed to all event handlers
				handleObj = jQuery.extend( {
					type: type,
					origType: origType,
					data: data,
					handler: handler,
					guid: handler.guid,
					selector: selector,
					needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
					namespace: namespaces.join( "." )
				}, handleObjIn );
	
				// Init the event handler queue if we're the first
				if ( !( handlers = events[ type ] ) ) {
					handlers = events[ type ] = [];
					handlers.delegateCount = 0;
	
					// Only use addEventListener if the special events handler returns false
					if ( !special.setup ||
						special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
	
						if ( elem.addEventListener ) {
							elem.addEventListener( type, eventHandle );
						}
					}
				}
	
				if ( special.add ) {
					special.add.call( elem, handleObj );
	
					if ( !handleObj.handler.guid ) {
						handleObj.handler.guid = handler.guid;
					}
				}
	
				// Add to the element's handler list, delegates in front
				if ( selector ) {
					handlers.splice( handlers.delegateCount++, 0, handleObj );
				} else {
					handlers.push( handleObj );
				}
	
				// Keep track of which events have ever been used, for event optimization
				jQuery.event.global[ type ] = true;
			}
	
		},
	
		// Detach an event or set of events from an element
		remove: function( elem, types, handler, selector, mappedTypes ) {
	
			var j, origCount, tmp,
				events, t, handleObj,
				special, handlers, type, namespaces, origType,
				elemData = dataPriv.hasData( elem ) && dataPriv.get( elem );
	
			if ( !elemData || !( events = elemData.events ) ) {
				return;
			}
	
			// Once for each type.namespace in types; type may be omitted
			types = ( types || "" ).match( rnotwhite ) || [ "" ];
			t = types.length;
			while ( t-- ) {
				tmp = rtypenamespace.exec( types[ t ] ) || [];
				type = origType = tmp[ 1 ];
				namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
	
				// Unbind all events (on this namespace, if provided) for the element
				if ( !type ) {
					for ( type in events ) {
						jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
					}
					continue;
				}
	
				special = jQuery.event.special[ type ] || {};
				type = ( selector ? special.delegateType : special.bindType ) || type;
				handlers = events[ type ] || [];
				tmp = tmp[ 2 ] &&
					new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" );
	
				// Remove matching events
				origCount = j = handlers.length;
				while ( j-- ) {
					handleObj = handlers[ j ];
	
					if ( ( mappedTypes || origType === handleObj.origType ) &&
						( !handler || handler.guid === handleObj.guid ) &&
						( !tmp || tmp.test( handleObj.namespace ) ) &&
						( !selector || selector === handleObj.selector ||
							selector === "**" && handleObj.selector ) ) {
						handlers.splice( j, 1 );
	
						if ( handleObj.selector ) {
							handlers.delegateCount--;
						}
						if ( special.remove ) {
							special.remove.call( elem, handleObj );
						}
					}
				}
	
				// Remove generic event handler if we removed something and no more handlers exist
				// (avoids potential for endless recursion during removal of special event handlers)
				if ( origCount && !handlers.length ) {
					if ( !special.teardown ||
						special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
	
						jQuery.removeEvent( elem, type, elemData.handle );
					}
	
					delete events[ type ];
				}
			}
	
			// Remove data and the expando if it's no longer used
			if ( jQuery.isEmptyObject( events ) ) {
				dataPriv.remove( elem, "handle events" );
			}
		},
	
		dispatch: function( event ) {
	
			// Make a writable jQuery.Event from the native event object
			event = jQuery.event.fix( event );
	
			var i, j, ret, matched, handleObj,
				handlerQueue = [],
				args = slice.call( arguments ),
				handlers = ( dataPriv.get( this, "events" ) || {} )[ event.type ] || [],
				special = jQuery.event.special[ event.type ] || {};
	
			// Use the fix-ed jQuery.Event rather than the (read-only) native event
			args[ 0 ] = event;
			event.delegateTarget = this;
	
			// Call the preDispatch hook for the mapped type, and let it bail if desired
			if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
				return;
			}
	
			// Determine handlers
			handlerQueue = jQuery.event.handlers.call( this, event, handlers );
	
			// Run delegates first; they may want to stop propagation beneath us
			i = 0;
			while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {
				event.currentTarget = matched.elem;
	
				j = 0;
				while ( ( handleObj = matched.handlers[ j++ ] ) &&
					!event.isImmediatePropagationStopped() ) {
	
					// Triggered event must either 1) have no namespace, or 2) have namespace(s)
					// a subset or equal to those in the bound event (both can have no namespace).
					if ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) {
	
						event.handleObj = handleObj;
						event.data = handleObj.data;
	
						ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||
							handleObj.handler ).apply( matched.elem, args );
	
						if ( ret !== undefined ) {
							if ( ( event.result = ret ) === false ) {
								event.preventDefault();
								event.stopPropagation();
							}
						}
					}
				}
			}
	
			// Call the postDispatch hook for the mapped type
			if ( special.postDispatch ) {
				special.postDispatch.call( this, event );
			}
	
			return event.result;
		},
	
		handlers: function( event, handlers ) {
			var i, matches, sel, handleObj,
				handlerQueue = [],
				delegateCount = handlers.delegateCount,
				cur = event.target;
	
			// Support (at least): Chrome, IE9
			// Find delegate handlers
			// Black-hole SVG <use> instance trees (#13180)
			//
			// Support: Firefox<=42+
			// Avoid non-left-click in FF but don't block IE radio events (#3861, gh-2343)
			if ( delegateCount && cur.nodeType &&
				( event.type !== "click" || isNaN( event.button ) || event.button < 1 ) ) {
	
				for ( ; cur !== this; cur = cur.parentNode || this ) {
	
					// Don't check non-elements (#13208)
					// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
					if ( cur.nodeType === 1 && ( cur.disabled !== true || event.type !== "click" ) ) {
						matches = [];
						for ( i = 0; i < delegateCount; i++ ) {
							handleObj = handlers[ i ];
	
							// Don't conflict with Object.prototype properties (#13203)
							sel = handleObj.selector + " ";
	
							if ( matches[ sel ] === undefined ) {
								matches[ sel ] = handleObj.needsContext ?
									jQuery( sel, this ).index( cur ) > -1 :
									jQuery.find( sel, this, null, [ cur ] ).length;
							}
							if ( matches[ sel ] ) {
								matches.push( handleObj );
							}
						}
						if ( matches.length ) {
							handlerQueue.push( { elem: cur, handlers: matches } );
						}
					}
				}
			}
	
			// Add the remaining (directly-bound) handlers
			if ( delegateCount < handlers.length ) {
				handlerQueue.push( { elem: this, handlers: handlers.slice( delegateCount ) } );
			}
	
			return handlerQueue;
		},
	
		// Includes some event props shared by KeyEvent and MouseEvent
		props: ( "altKey bubbles cancelable ctrlKey currentTarget detail eventPhase " +
			"metaKey relatedTarget shiftKey target timeStamp view which" ).split( " " ),
	
		fixHooks: {},
	
		keyHooks: {
			props: "char charCode key keyCode".split( " " ),
			filter: function( event, original ) {
	
				// Add which for key events
				if ( event.which == null ) {
					event.which = original.charCode != null ? original.charCode : original.keyCode;
				}
	
				return event;
			}
		},
	
		mouseHooks: {
			props: ( "button buttons clientX clientY offsetX offsetY pageX pageY " +
				"screenX screenY toElement" ).split( " " ),
			filter: function( event, original ) {
				var eventDoc, doc, body,
					button = original.button;
	
				// Calculate pageX/Y if missing and clientX/Y available
				if ( event.pageX == null && original.clientX != null ) {
					eventDoc = event.target.ownerDocument || document;
					doc = eventDoc.documentElement;
					body = eventDoc.body;
	
					event.pageX = original.clientX +
						( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) -
						( doc && doc.clientLeft || body && body.clientLeft || 0 );
					event.pageY = original.clientY +
						( doc && doc.scrollTop  || body && body.scrollTop  || 0 ) -
						( doc && doc.clientTop  || body && body.clientTop  || 0 );
				}
	
				// Add which for click: 1 === left; 2 === middle; 3 === right
				// Note: button is not normalized, so don't use it
				if ( !event.which && button !== undefined ) {
					event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );
				}
	
				return event;
			}
		},
	
		fix: function( event ) {
			if ( event[ jQuery.expando ] ) {
				return event;
			}
	
			// Create a writable copy of the event object and normalize some properties
			var i, prop, copy,
				type = event.type,
				originalEvent = event,
				fixHook = this.fixHooks[ type ];
	
			if ( !fixHook ) {
				this.fixHooks[ type ] = fixHook =
					rmouseEvent.test( type ) ? this.mouseHooks :
					rkeyEvent.test( type ) ? this.keyHooks :
					{};
			}
			copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;
	
			event = new jQuery.Event( originalEvent );
	
			i = copy.length;
			while ( i-- ) {
				prop = copy[ i ];
				event[ prop ] = originalEvent[ prop ];
			}
	
			// Support: Cordova 2.5 (WebKit) (#13255)
			// All events should have a target; Cordova deviceready doesn't
			if ( !event.target ) {
				event.target = document;
			}
	
			// Support: Safari 6.0+, Chrome<28
			// Target should not be a text node (#504, #13143)
			if ( event.target.nodeType === 3 ) {
				event.target = event.target.parentNode;
			}
	
			return fixHook.filter ? fixHook.filter( event, originalEvent ) : event;
		},
	
		special: {
			load: {
	
				// Prevent triggered image.load events from bubbling to window.load
				noBubble: true
			},
			focus: {
	
				// Fire native event if possible so blur/focus sequence is correct
				trigger: function() {
					if ( this !== safeActiveElement() && this.focus ) {
						this.focus();
						return false;
					}
				},
				delegateType: "focusin"
			},
			blur: {
				trigger: function() {
					if ( this === safeActiveElement() && this.blur ) {
						this.blur();
						return false;
					}
				},
				delegateType: "focusout"
			},
			click: {
	
				// For checkbox, fire native event so checked state will be right
				trigger: function() {
					if ( this.type === "checkbox" && this.click && jQuery.nodeName( this, "input" ) ) {
						this.click();
						return false;
					}
				},
	
				// For cross-browser consistency, don't fire native .click() on links
				_default: function( event ) {
					return jQuery.nodeName( event.target, "a" );
				}
			},
	
			beforeunload: {
				postDispatch: function( event ) {
	
					// Support: Firefox 20+
					// Firefox doesn't alert if the returnValue field is not set.
					if ( event.result !== undefined && event.originalEvent ) {
						event.originalEvent.returnValue = event.result;
					}
				}
			}
		}
	};
	
	jQuery.removeEvent = function( elem, type, handle ) {
	
		// This "if" is needed for plain objects
		if ( elem.removeEventListener ) {
			elem.removeEventListener( type, handle );
		}
	};
	
	jQuery.Event = function( src, props ) {
	
		// Allow instantiation without the 'new' keyword
		if ( !( this instanceof jQuery.Event ) ) {
			return new jQuery.Event( src, props );
		}
	
		// Event object
		if ( src && src.type ) {
			this.originalEvent = src;
			this.type = src.type;
	
			// Events bubbling up the document may have been marked as prevented
			// by a handler lower down the tree; reflect the correct value.
			this.isDefaultPrevented = src.defaultPrevented ||
					src.defaultPrevented === undefined &&
	
					// Support: Android<4.0
					src.returnValue === false ?
				returnTrue :
				returnFalse;
	
		// Event type
		} else {
			this.type = src;
		}
	
		// Put explicitly provided properties onto the event object
		if ( props ) {
			jQuery.extend( this, props );
		}
	
		// Create a timestamp if incoming event doesn't have one
		this.timeStamp = src && src.timeStamp || jQuery.now();
	
		// Mark it as fixed
		this[ jQuery.expando ] = true;
	};
	
	// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
	// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
	jQuery.Event.prototype = {
		constructor: jQuery.Event,
		isDefaultPrevented: returnFalse,
		isPropagationStopped: returnFalse,
		isImmediatePropagationStopped: returnFalse,
		isSimulated: false,
	
		preventDefault: function() {
			var e = this.originalEvent;
	
			this.isDefaultPrevented = returnTrue;
	
			if ( e && !this.isSimulated ) {
				e.preventDefault();
			}
		},
		stopPropagation: function() {
			var e = this.originalEvent;
	
			this.isPropagationStopped = returnTrue;
	
			if ( e && !this.isSimulated ) {
				e.stopPropagation();
			}
		},
		stopImmediatePropagation: function() {
			var e = this.originalEvent;
	
			this.isImmediatePropagationStopped = returnTrue;
	
			if ( e && !this.isSimulated ) {
				e.stopImmediatePropagation();
			}
	
			this.stopPropagation();
		}
	};
	
	// Create mouseenter/leave events using mouseover/out and event-time checks
	// so that event delegation works in jQuery.
	// Do the same for pointerenter/pointerleave and pointerover/pointerout
	//
	// Support: Safari 7 only
	// Safari sends mouseenter too often; see:
	// https://code.google.com/p/chromium/issues/detail?id=470258
	// for the description of the bug (it existed in older Chrome versions as well).
	jQuery.each( {
		mouseenter: "mouseover",
		mouseleave: "mouseout",
		pointerenter: "pointerover",
		pointerleave: "pointerout"
	}, function( orig, fix ) {
		jQuery.event.special[ orig ] = {
			delegateType: fix,
			bindType: fix,
	
			handle: function( event ) {
				var ret,
					target = this,
					related = event.relatedTarget,
					handleObj = event.handleObj;
	
				// For mouseenter/leave call the handler if related is outside the target.
				// NB: No relatedTarget if the mouse left/entered the browser window
				if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {
					event.type = handleObj.origType;
					ret = handleObj.handler.apply( this, arguments );
					event.type = fix;
				}
				return ret;
			}
		};
	} );
	
	jQuery.fn.extend( {
		on: function( types, selector, data, fn ) {
			return on( this, types, selector, data, fn );
		},
		one: function( types, selector, data, fn ) {
			return on( this, types, selector, data, fn, 1 );
		},
		off: function( types, selector, fn ) {
			var handleObj, type;
			if ( types && types.preventDefault && types.handleObj ) {
	
				// ( event )  dispatched jQuery.Event
				handleObj = types.handleObj;
				jQuery( types.delegateTarget ).off(
					handleObj.namespace ?
						handleObj.origType + "." + handleObj.namespace :
						handleObj.origType,
					handleObj.selector,
					handleObj.handler
				);
				return this;
			}
			if ( typeof types === "object" ) {
	
				// ( types-object [, selector] )
				for ( type in types ) {
					this.off( type, selector, types[ type ] );
				}
				return this;
			}
			if ( selector === false || typeof selector === "function" ) {
	
				// ( types [, fn] )
				fn = selector;
				selector = undefined;
			}
			if ( fn === false ) {
				fn = returnFalse;
			}
			return this.each( function() {
				jQuery.event.remove( this, types, fn, selector );
			} );
		}
	} );
	
	
	var
		rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi,
	
		// Support: IE 10-11, Edge 10240+
		// In IE/Edge using regex groups here causes severe slowdowns.
		// See https://connect.microsoft.com/IE/feedback/details/1736512/
		rnoInnerhtml = /<script|<style|<link/i,
	
		// checked="checked" or checked
		rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
		rscriptTypeMasked = /^true\/(.*)/,
		rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;
	
	// Manipulating tables requires a tbody
	function manipulationTarget( elem, content ) {
		return jQuery.nodeName( elem, "table" ) &&
			jQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ?
	
			elem.getElementsByTagName( "tbody" )[ 0 ] ||
				elem.appendChild( elem.ownerDocument.createElement( "tbody" ) ) :
			elem;
	}
	
	// Replace/restore the type attribute of script elements for safe DOM manipulation
	function disableScript( elem ) {
		elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type;
		return elem;
	}
	function restoreScript( elem ) {
		var match = rscriptTypeMasked.exec( elem.type );
	
		if ( match ) {
			elem.type = match[ 1 ];
		} else {
			elem.removeAttribute( "type" );
		}
	
		return elem;
	}
	
	function cloneCopyEvent( src, dest ) {
		var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;
	
		if ( dest.nodeType !== 1 ) {
			return;
		}
	
		// 1. Copy private data: events, handlers, etc.
		if ( dataPriv.hasData( src ) ) {
			pdataOld = dataPriv.access( src );
			pdataCur = dataPriv.set( dest, pdataOld );
			events = pdataOld.events;
	
			if ( events ) {
				delete pdataCur.handle;
				pdataCur.events = {};
	
				for ( type in events ) {
					for ( i = 0, l = events[ type ].length; i < l; i++ ) {
						jQuery.event.add( dest, type, events[ type ][ i ] );
					}
				}
			}
		}
	
		// 2. Copy user data
		if ( dataUser.hasData( src ) ) {
			udataOld = dataUser.access( src );
			udataCur = jQuery.extend( {}, udataOld );
	
			dataUser.set( dest, udataCur );
		}
	}
	
	// Fix IE bugs, see support tests
	function fixInput( src, dest ) {
		var nodeName = dest.nodeName.toLowerCase();
	
		// Fails to persist the checked state of a cloned checkbox or radio button.
		if ( nodeName === "input" && rcheckableType.test( src.type ) ) {
			dest.checked = src.checked;
	
		// Fails to return the selected option to the default selected state when cloning options
		} else if ( nodeName === "input" || nodeName === "textarea" ) {
			dest.defaultValue = src.defaultValue;
		}
	}
	
	function domManip( collection, args, callback, ignored ) {
	
		// Flatten any nested arrays
		args = concat.apply( [], args );
	
		var fragment, first, scripts, hasScripts, node, doc,
			i = 0,
			l = collection.length,
			iNoClone = l - 1,
			value = args[ 0 ],
			isFunction = jQuery.isFunction( value );
	
		// We can't cloneNode fragments that contain checked, in WebKit
		if ( isFunction ||
				( l > 1 && typeof value === "string" &&
					!support.checkClone && rchecked.test( value ) ) ) {
			return collection.each( function( index ) {
				var self = collection.eq( index );
				if ( isFunction ) {
					args[ 0 ] = value.call( this, index, self.html() );
				}
				domManip( self, args, callback, ignored );
			} );
		}
	
		if ( l ) {
			fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );
			first = fragment.firstChild;
	
			if ( fragment.childNodes.length === 1 ) {
				fragment = first;
			}
	
			// Require either new content or an interest in ignored elements to invoke the callback
			if ( first || ignored ) {
				scripts = jQuery.map( getAll( fragment, "script" ), disableScript );
				hasScripts = scripts.length;
	
				// Use the original fragment for the last item
				// instead of the first because it can end up
				// being emptied incorrectly in certain situations (#8070).
				for ( ; i < l; i++ ) {
					node = fragment;
	
					if ( i !== iNoClone ) {
						node = jQuery.clone( node, true, true );
	
						// Keep references to cloned scripts for later restoration
						if ( hasScripts ) {
	
							// Support: Android<4.1, PhantomJS<2
							// push.apply(_, arraylike) throws on ancient WebKit
							jQuery.merge( scripts, getAll( node, "script" ) );
						}
					}
	
					callback.call( collection[ i ], node, i );
				}
	
				if ( hasScripts ) {
					doc = scripts[ scripts.length - 1 ].ownerDocument;
	
					// Reenable scripts
					jQuery.map( scripts, restoreScript );
	
					// Evaluate executable scripts on first document insertion
					for ( i = 0; i < hasScripts; i++ ) {
						node = scripts[ i ];
						if ( rscriptType.test( node.type || "" ) &&
							!dataPriv.access( node, "globalEval" ) &&
							jQuery.contains( doc, node ) ) {
	
							if ( node.src ) {
	
								// Optional AJAX dependency, but won't run scripts if not present
								if ( jQuery._evalUrl ) {
									jQuery._evalUrl( node.src );
								}
							} else {
								jQuery.globalEval( node.textContent.replace( rcleanScript, "" ) );
							}
						}
					}
				}
			}
		}
	
		return collection;
	}
	
	function remove( elem, selector, keepData ) {
		var node,
			nodes = selector ? jQuery.filter( selector, elem ) : elem,
			i = 0;
	
		for ( ; ( node = nodes[ i ] ) != null; i++ ) {
			if ( !keepData && node.nodeType === 1 ) {
				jQuery.cleanData( getAll( node ) );
			}
	
			if ( node.parentNode ) {
				if ( keepData && jQuery.contains( node.ownerDocument, node ) ) {
					setGlobalEval( getAll( node, "script" ) );
				}
				node.parentNode.removeChild( node );
			}
		}
	
		return elem;
	}
	
	jQuery.extend( {
		htmlPrefilter: function( html ) {
			return html.replace( rxhtmlTag, "<$1></$2>" );
		},
	
		clone: function( elem, dataAndEvents, deepDataAndEvents ) {
			var i, l, srcElements, destElements,
				clone = elem.cloneNode( true ),
				inPage = jQuery.contains( elem.ownerDocument, elem );
	
			// Fix IE cloning issues
			if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&
					!jQuery.isXMLDoc( elem ) ) {
	
				// We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2
				destElements = getAll( clone );
				srcElements = getAll( elem );
	
				for ( i = 0, l = srcElements.length; i < l; i++ ) {
					fixInput( srcElements[ i ], destElements[ i ] );
				}
			}
	
			// Copy the events from the original to the clone
			if ( dataAndEvents ) {
				if ( deepDataAndEvents ) {
					srcElements = srcElements || getAll( elem );
					destElements = destElements || getAll( clone );
	
					for ( i = 0, l = srcElements.length; i < l; i++ ) {
						cloneCopyEvent( srcElements[ i ], destElements[ i ] );
					}
				} else {
					cloneCopyEvent( elem, clone );
				}
			}
	
			// Preserve script evaluation history
			destElements = getAll( clone, "script" );
			if ( destElements.length > 0 ) {
				setGlobalEval( destElements, !inPage && getAll( elem, "script" ) );
			}
	
			// Return the cloned set
			return clone;
		},
	
		cleanData: function( elems ) {
			var data, elem, type,
				special = jQuery.event.special,
				i = 0;
	
			for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {
				if ( acceptData( elem ) ) {
					if ( ( data = elem[ dataPriv.expando ] ) ) {
						if ( data.events ) {
							for ( type in data.events ) {
								if ( special[ type ] ) {
									jQuery.event.remove( elem, type );
	
								// This is a shortcut to avoid jQuery.event.remove's overhead
								} else {
									jQuery.removeEvent( elem, type, data.handle );
								}
							}
						}
	
						// Support: Chrome <= 35-45+
						// Assign undefined instead of using delete, see Data#remove
						elem[ dataPriv.expando ] = undefined;
					}
					if ( elem[ dataUser.expando ] ) {
	
						// Support: Chrome <= 35-45+
						// Assign undefined instead of using delete, see Data#remove
						elem[ dataUser.expando ] = undefined;
					}
				}
			}
		}
	} );
	
	jQuery.fn.extend( {
	
		// Keep domManip exposed until 3.0 (gh-2225)
		domManip: domManip,
	
		detach: function( selector ) {
			return remove( this, selector, true );
		},
	
		remove: function( selector ) {
			return remove( this, selector );
		},
	
		text: function( value ) {
			return access( this, function( value ) {
				return value === undefined ?
					jQuery.text( this ) :
					this.empty().each( function() {
						if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
							this.textContent = value;
						}
					} );
			}, null, value, arguments.length );
		},
	
		append: function() {
			return domManip( this, arguments, function( elem ) {
				if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
					var target = manipulationTarget( this, elem );
					target.appendChild( elem );
				}
			} );
		},
	
		prepend: function() {
			return domManip( this, arguments, function( elem ) {
				if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
					var target = manipulationTarget( this, elem );
					target.insertBefore( elem, target.firstChild );
				}
			} );
		},
	
		before: function() {
			return domManip( this, arguments, function( elem ) {
				if ( this.parentNode ) {
					this.parentNode.insertBefore( elem, this );
				}
			} );
		},
	
		after: function() {
			return domManip( this, arguments, function( elem ) {
				if ( this.parentNode ) {
					this.parentNode.insertBefore( elem, this.nextSibling );
				}
			} );
		},
	
		empty: function() {
			var elem,
				i = 0;
	
			for ( ; ( elem = this[ i ] ) != null; i++ ) {
				if ( elem.nodeType === 1 ) {
	
					// Prevent memory leaks
					jQuery.cleanData( getAll( elem, false ) );
	
					// Remove any remaining nodes
					elem.textContent = "";
				}
			}
	
			return this;
		},
	
		clone: function( dataAndEvents, deepDataAndEvents ) {
			dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
			deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
	
			return this.map( function() {
				return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
			} );
		},
	
		html: function( value ) {
			return access( this, function( value ) {
				var elem = this[ 0 ] || {},
					i = 0,
					l = this.length;
	
				if ( value === undefined && elem.nodeType === 1 ) {
					return elem.innerHTML;
				}
	
				// See if we can take a shortcut and just use innerHTML
				if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
					!wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) {
	
					value = jQuery.htmlPrefilter( value );
	
					try {
						for ( ; i < l; i++ ) {
							elem = this[ i ] || {};
	
							// Remove element nodes and prevent memory leaks
							if ( elem.nodeType === 1 ) {
								jQuery.cleanData( getAll( elem, false ) );
								elem.innerHTML = value;
							}
						}
	
						elem = 0;
	
					// If using innerHTML throws an exception, use the fallback method
					} catch ( e ) {}
				}
	
				if ( elem ) {
					this.empty().append( value );
				}
			}, null, value, arguments.length );
		},
	
		replaceWith: function() {
			var ignored = [];
	
			// Make the changes, replacing each non-ignored context element with the new content
			return domManip( this, arguments, function( elem ) {
				var parent = this.parentNode;
	
				if ( jQuery.inArray( this, ignored ) < 0 ) {
					jQuery.cleanData( getAll( this ) );
					if ( parent ) {
						parent.replaceChild( elem, this );
					}
				}
	
			// Force callback invocation
			}, ignored );
		}
	} );
	
	jQuery.each( {
		appendTo: "append",
		prependTo: "prepend",
		insertBefore: "before",
		insertAfter: "after",
		replaceAll: "replaceWith"
	}, function( name, original ) {
		jQuery.fn[ name ] = function( selector ) {
			var elems,
				ret = [],
				insert = jQuery( selector ),
				last = insert.length - 1,
				i = 0;
	
			for ( ; i <= last; i++ ) {
				elems = i === last ? this : this.clone( true );
				jQuery( insert[ i ] )[ original ]( elems );
	
				// Support: QtWebKit
				// .get() because push.apply(_, arraylike) throws
				push.apply( ret, elems.get() );
			}
	
			return this.pushStack( ret );
		};
	} );
	
	
	var iframe,
		elemdisplay = {
	
			// Support: Firefox
			// We have to pre-define these values for FF (#10227)
			HTML: "block",
			BODY: "block"
		};
	
	/**
	 * Retrieve the actual display of a element
	 * @param {String} name nodeName of the element
	 * @param {Object} doc Document object
	 */
	
	// Called only from within defaultDisplay
	function actualDisplay( name, doc ) {
		var elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),
	
			display = jQuery.css( elem[ 0 ], "display" );
	
		// We don't have any data stored on the element,
		// so use "detach" method as fast way to get rid of the element
		elem.detach();
	
		return display;
	}
	
	/**
	 * Try to determine the default display value of an element
	 * @param {String} nodeName
	 */
	function defaultDisplay( nodeName ) {
		var doc = document,
			display = elemdisplay[ nodeName ];
	
		if ( !display ) {
			display = actualDisplay( nodeName, doc );
	
			// If the simple way fails, read from inside an iframe
			if ( display === "none" || !display ) {
	
				// Use the already-created iframe if possible
				iframe = ( iframe || jQuery( "<iframe frameborder='0' width='0' height='0'/>" ) )
					.appendTo( doc.documentElement );
	
				// Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse
				doc = iframe[ 0 ].contentDocument;
	
				// Support: IE
				doc.write();
				doc.close();
	
				display = actualDisplay( nodeName, doc );
				iframe.detach();
			}
	
			// Store the correct default display
			elemdisplay[ nodeName ] = display;
		}
	
		return display;
	}
	var rmargin = ( /^margin/ );
	
	var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" );
	
	var getStyles = function( elem ) {
	
			// Support: IE<=11+, Firefox<=30+ (#15098, #14150)
			// IE throws on elements created in popups
			// FF meanwhile throws on frame elements through "defaultView.getComputedStyle"
			var view = elem.ownerDocument.defaultView;
	
			if ( !view || !view.opener ) {
				view = window;
			}
	
			return view.getComputedStyle( elem );
		};
	
	var swap = function( elem, options, callback, args ) {
		var ret, name,
			old = {};
	
		// Remember the old values, and insert the new ones
		for ( name in options ) {
			old[ name ] = elem.style[ name ];
			elem.style[ name ] = options[ name ];
		}
	
		ret = callback.apply( elem, args || [] );
	
		// Revert the old values
		for ( name in options ) {
			elem.style[ name ] = old[ name ];
		}
	
		return ret;
	};
	
	
	var documentElement = document.documentElement;
	
	
	
	( function() {
		var pixelPositionVal, boxSizingReliableVal, pixelMarginRightVal, reliableMarginLeftVal,
			container = document.createElement( "div" ),
			div = document.createElement( "div" );
	
		// Finish early in limited (non-browser) environments
		if ( !div.style ) {
			return;
		}
	
		// Support: IE9-11+
		// Style of cloned element affects source element cloned (#8908)
		div.style.backgroundClip = "content-box";
		div.cloneNode( true ).style.backgroundClip = "";
		support.clearCloneStyle = div.style.backgroundClip === "content-box";
	
		container.style.cssText = "border:0;width:8px;height:0;top:0;left:-9999px;" +
			"padding:0;margin-top:1px;position:absolute";
		container.appendChild( div );
	
		// Executing both pixelPosition & boxSizingReliable tests require only one layout
		// so they're executed at the same time to save the second computation.
		function computeStyleTests() {
			div.style.cssText =
	
				// Support: Firefox<29, Android 2.3
				// Vendor-prefix box-sizing
				"-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;" +
				"position:relative;display:block;" +
				"margin:auto;border:1px;padding:1px;" +
				"top:1%;width:50%";
			div.innerHTML = "";
			documentElement.appendChild( container );
	
			var divStyle = window.getComputedStyle( div );
			pixelPositionVal = divStyle.top !== "1%";
			reliableMarginLeftVal = divStyle.marginLeft === "2px";
			boxSizingReliableVal = divStyle.width === "4px";
	
			// Support: Android 4.0 - 4.3 only
			// Some styles come back with percentage values, even though they shouldn't
			div.style.marginRight = "50%";
			pixelMarginRightVal = divStyle.marginRight === "4px";
	
			documentElement.removeChild( container );
		}
	
		jQuery.extend( support, {
			pixelPosition: function() {
	
				// This test is executed only once but we still do memoizing
				// since we can use the boxSizingReliable pre-computing.
				// No need to check if the test was already performed, though.
				computeStyleTests();
				return pixelPositionVal;
			},
			boxSizingReliable: function() {
				if ( boxSizingReliableVal == null ) {
					computeStyleTests();
				}
				return boxSizingReliableVal;
			},
			pixelMarginRight: function() {
	
				// Support: Android 4.0-4.3
				// We're checking for boxSizingReliableVal here instead of pixelMarginRightVal
				// since that compresses better and they're computed together anyway.
				if ( boxSizingReliableVal == null ) {
					computeStyleTests();
				}
				return pixelMarginRightVal;
			},
			reliableMarginLeft: function() {
	
				// Support: IE <=8 only, Android 4.0 - 4.3 only, Firefox <=3 - 37
				if ( boxSizingReliableVal == null ) {
					computeStyleTests();
				}
				return reliableMarginLeftVal;
			},
			reliableMarginRight: function() {
	
				// Support: Android 2.3
				// Check if div with explicit width and no margin-right incorrectly
				// gets computed margin-right based on width of container. (#3333)
				// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
				// This support function is only executed once so no memoizing is needed.
				var ret,
					marginDiv = div.appendChild( document.createElement( "div" ) );
	
				// Reset CSS: box-sizing; display; margin; border; padding
				marginDiv.style.cssText = div.style.cssText =
	
					// Support: Android 2.3
					// Vendor-prefix box-sizing
					"-webkit-box-sizing:content-box;box-sizing:content-box;" +
					"display:block;margin:0;border:0;padding:0";
				marginDiv.style.marginRight = marginDiv.style.width = "0";
				div.style.width = "1px";
				documentElement.appendChild( container );
	
				ret = !parseFloat( window.getComputedStyle( marginDiv ).marginRight );
	
				documentElement.removeChild( container );
				div.removeChild( marginDiv );
	
				return ret;
			}
		} );
	} )();
	
	
	function curCSS( elem, name, computed ) {
		var width, minWidth, maxWidth, ret,
			style = elem.style;
	
		computed = computed || getStyles( elem );
		ret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined;
	
		// Support: Opera 12.1x only
		// Fall back to style even without computed
		// computed is undefined for elems on document fragments
		if ( ( ret === "" || ret === undefined ) && !jQuery.contains( elem.ownerDocument, elem ) ) {
			ret = jQuery.style( elem, name );
		}
	
		// Support: IE9
		// getPropertyValue is only needed for .css('filter') (#12537)
		if ( computed ) {
	
			// A tribute to the "awesome hack by Dean Edwards"
			// Android Browser returns percentage for some values,
			// but width seems to be reliably pixels.
			// This is against the CSSOM draft spec:
			// http://dev.w3.org/csswg/cssom/#resolved-values
			if ( !support.pixelMarginRight() && rnumnonpx.test( ret ) && rmargin.test( name ) ) {
	
				// Remember the original values
				width = style.width;
				minWidth = style.minWidth;
				maxWidth = style.maxWidth;
	
				// Put in the new values to get a computed value out
				style.minWidth = style.maxWidth = style.width = ret;
				ret = computed.width;
	
				// Revert the changed values
				style.width = width;
				style.minWidth = minWidth;
				style.maxWidth = maxWidth;
			}
		}
	
		return ret !== undefined ?
	
			// Support: IE9-11+
			// IE returns zIndex value as an integer.
			ret + "" :
			ret;
	}
	
	
	function addGetHookIf( conditionFn, hookFn ) {
	
		// Define the hook, we'll check on the first run if it's really needed.
		return {
			get: function() {
				if ( conditionFn() ) {
	
					// Hook not needed (or it's not possible to use it due
					// to missing dependency), remove it.
					delete this.get;
					return;
				}
	
				// Hook needed; redefine it so that the support test is not executed again.
				return ( this.get = hookFn ).apply( this, arguments );
			}
		};
	}
	
	
	var
	
		// Swappable if display is none or starts with table
		// except "table", "table-cell", or "table-caption"
		// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
		rdisplayswap = /^(none|table(?!-c[ea]).+)/,
	
		cssShow = { position: "absolute", visibility: "hidden", display: "block" },
		cssNormalTransform = {
			letterSpacing: "0",
			fontWeight: "400"
		},
	
		cssPrefixes = [ "Webkit", "O", "Moz", "ms" ],
		emptyStyle = document.createElement( "div" ).style;
	
	// Return a css property mapped to a potentially vendor prefixed property
	function vendorPropName( name ) {
	
		// Shortcut for names that are not vendor prefixed
		if ( name in emptyStyle ) {
			return name;
		}
	
		// Check for vendor prefixed names
		var capName = name[ 0 ].toUpperCase() + name.slice( 1 ),
			i = cssPrefixes.length;
	
		while ( i-- ) {
			name = cssPrefixes[ i ] + capName;
			if ( name in emptyStyle ) {
				return name;
			}
		}
	}
	
	function setPositiveNumber( elem, value, subtract ) {
	
		// Any relative (+/-) values have already been
		// normalized at this point
		var matches = rcssNum.exec( value );
		return matches ?
	
			// Guard against undefined "subtract", e.g., when used as in cssHooks
			Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) :
			value;
	}
	
	function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {
		var i = extra === ( isBorderBox ? "border" : "content" ) ?
	
			// If we already have the right measurement, avoid augmentation
			4 :
	
			// Otherwise initialize for horizontal or vertical properties
			name === "width" ? 1 : 0,
	
			val = 0;
	
		for ( ; i < 4; i += 2 ) {
	
			// Both box models exclude margin, so add it if we want it
			if ( extra === "margin" ) {
				val += jQuery.css( elem, extra + cssExpand[ i ], true, styles );
			}
	
			if ( isBorderBox ) {
	
				// border-box includes padding, so remove it if we want content
				if ( extra === "content" ) {
					val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
				}
	
				// At this point, extra isn't border nor margin, so remove border
				if ( extra !== "margin" ) {
					val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
				}
			} else {
	
				// At this point, extra isn't content, so add padding
				val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
	
				// At this point, extra isn't content nor padding, so add border
				if ( extra !== "padding" ) {
					val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
				}
			}
		}
	
		return val;
	}
	
	function getWidthOrHeight( elem, name, extra ) {
	
		// Start with offset property, which is equivalent to the border-box value
		var valueIsBorderBox = true,
			val = name === "width" ? elem.offsetWidth : elem.offsetHeight,
			styles = getStyles( elem ),
			isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box";
	
		// Some non-html elements return undefined for offsetWidth, so check for null/undefined
		// svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285
		// MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668
		if ( val <= 0 || val == null ) {
	
			// Fall back to computed then uncomputed css if necessary
			val = curCSS( elem, name, styles );
			if ( val < 0 || val == null ) {
				val = elem.style[ name ];
			}
	
			// Computed unit is not pixels. Stop here and return.
			if ( rnumnonpx.test( val ) ) {
				return val;
			}
	
			// Check for style in case a browser which returns unreliable values
			// for getComputedStyle silently falls back to the reliable elem.style
			valueIsBorderBox = isBorderBox &&
				( support.boxSizingReliable() || val === elem.style[ name ] );
	
			// Normalize "", auto, and prepare for extra
			val = parseFloat( val ) || 0;
		}
	
		// Use the active box-sizing model to add/subtract irrelevant styles
		return ( val +
			augmentWidthOrHeight(
				elem,
				name,
				extra || ( isBorderBox ? "border" : "content" ),
				valueIsBorderBox,
				styles
			)
		) + "px";
	}
	
	function showHide( elements, show ) {
		var display, elem, hidden,
			values = [],
			index = 0,
			length = elements.length;
	
		for ( ; index < length; index++ ) {
			elem = elements[ index ];
			if ( !elem.style ) {
				continue;
			}
	
			values[ index ] = dataPriv.get( elem, "olddisplay" );
			display = elem.style.display;
			if ( show ) {
	
				// Reset the inline display of this element to learn if it is
				// being hidden by cascaded rules or not
				if ( !values[ index ] && display === "none" ) {
					elem.style.display = "";
				}
	
				// Set elements which have been overridden with display: none
				// in a stylesheet to whatever the default browser style is
				// for such an element
				if ( elem.style.display === "" && isHidden( elem ) ) {
					values[ index ] = dataPriv.access(
						elem,
						"olddisplay",
						defaultDisplay( elem.nodeName )
					);
				}
			} else {
				hidden = isHidden( elem );
	
				if ( display !== "none" || !hidden ) {
					dataPriv.set(
						elem,
						"olddisplay",
						hidden ? display : jQuery.css( elem, "display" )
					);
				}
			}
		}
	
		// Set the display of most of the elements in a second loop
		// to avoid the constant reflow
		for ( index = 0; index < length; index++ ) {
			elem = elements[ index ];
			if ( !elem.style ) {
				continue;
			}
			if ( !show || elem.style.display === "none" || elem.style.display === "" ) {
				elem.style.display = show ? values[ index ] || "" : "none";
			}
		}
	
		return elements;
	}
	
	jQuery.extend( {
	
		// Add in style property hooks for overriding the default
		// behavior of getting and setting a style property
		cssHooks: {
			opacity: {
				get: function( elem, computed ) {
					if ( computed ) {
	
						// We should always get a number back from opacity
						var ret = curCSS( elem, "opacity" );
						return ret === "" ? "1" : ret;
					}
				}
			}
		},
	
		// Don't automatically add "px" to these possibly-unitless properties
		cssNumber: {
			"animationIterationCount": true,
			"columnCount": true,
			"fillOpacity": true,
			"flexGrow": true,
			"flexShrink": true,
			"fontWeight": true,
			"lineHeight": true,
			"opacity": true,
			"order": true,
			"orphans": true,
			"widows": true,
			"zIndex": true,
			"zoom": true
		},
	
		// Add in properties whose names you wish to fix before
		// setting or getting the value
		cssProps: {
			"float": "cssFloat"
		},
	
		// Get and set the style property on a DOM Node
		style: function( elem, name, value, extra ) {
	
			// Don't set styles on text and comment nodes
			if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
				return;
			}
	
			// Make sure that we're working with the right name
			var ret, type, hooks,
				origName = jQuery.camelCase( name ),
				style = elem.style;
	
			name = jQuery.cssProps[ origName ] ||
				( jQuery.cssProps[ origName ] = vendorPropName( origName ) || origName );
	
			// Gets hook for the prefixed version, then unprefixed version
			hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
	
			// Check if we're setting a value
			if ( value !== undefined ) {
				type = typeof value;
	
				// Convert "+=" or "-=" to relative numbers (#7345)
				if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {
					value = adjustCSS( elem, name, ret );
	
					// Fixes bug #9237
					type = "number";
				}
	
				// Make sure that null and NaN values aren't set (#7116)
				if ( value == null || value !== value ) {
					return;
				}
	
				// If a number was passed in, add the unit (except for certain CSS properties)
				if ( type === "number" ) {
					value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" );
				}
	
				// Support: IE9-11+
				// background-* props affect original clone's values
				if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) {
					style[ name ] = "inherit";
				}
	
				// If a hook was provided, use that value, otherwise just set the specified value
				if ( !hooks || !( "set" in hooks ) ||
					( value = hooks.set( elem, value, extra ) ) !== undefined ) {
	
					style[ name ] = value;
				}
	
			} else {
	
				// If a hook was provided get the non-computed value from there
				if ( hooks && "get" in hooks &&
					( ret = hooks.get( elem, false, extra ) ) !== undefined ) {
	
					return ret;
				}
	
				// Otherwise just get the value from the style object
				return style[ name ];
			}
		},
	
		css: function( elem, name, extra, styles ) {
			var val, num, hooks,
				origName = jQuery.camelCase( name );
	
			// Make sure that we're working with the right name
			name = jQuery.cssProps[ origName ] ||
				( jQuery.cssProps[ origName ] = vendorPropName( origName ) || origName );
	
			// Try prefixed name followed by the unprefixed name
			hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
	
			// If a hook was provided get the computed value from there
			if ( hooks && "get" in hooks ) {
				val = hooks.get( elem, true, extra );
			}
	
			// Otherwise, if a way to get the computed value exists, use that
			if ( val === undefined ) {
				val = curCSS( elem, name, styles );
			}
	
			// Convert "normal" to computed value
			if ( val === "normal" && name in cssNormalTransform ) {
				val = cssNormalTransform[ name ];
			}
	
			// Make numeric if forced or a qualifier was provided and val looks numeric
			if ( extra === "" || extra ) {
				num = parseFloat( val );
				return extra === true || isFinite( num ) ? num || 0 : val;
			}
			return val;
		}
	} );
	
	jQuery.each( [ "height", "width" ], function( i, name ) {
		jQuery.cssHooks[ name ] = {
			get: function( elem, computed, extra ) {
				if ( computed ) {
	
					// Certain elements can have dimension info if we invisibly show them
					// but it must have a current display style that would benefit
					return rdisplayswap.test( jQuery.css( elem, "display" ) ) &&
						elem.offsetWidth === 0 ?
							swap( elem, cssShow, function() {
								return getWidthOrHeight( elem, name, extra );
							} ) :
							getWidthOrHeight( elem, name, extra );
				}
			},
	
			set: function( elem, value, extra ) {
				var matches,
					styles = extra && getStyles( elem ),
					subtract = extra && augmentWidthOrHeight(
						elem,
						name,
						extra,
						jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
						styles
					);
	
				// Convert to pixels if value adjustment is needed
				if ( subtract && ( matches = rcssNum.exec( value ) ) &&
					( matches[ 3 ] || "px" ) !== "px" ) {
	
					elem.style[ name ] = value;
					value = jQuery.css( elem, name );
				}
	
				return setPositiveNumber( elem, value, subtract );
			}
		};
	} );
	
	jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,
		function( elem, computed ) {
			if ( computed ) {
				return ( parseFloat( curCSS( elem, "marginLeft" ) ) ||
					elem.getBoundingClientRect().left -
						swap( elem, { marginLeft: 0 }, function() {
							return elem.getBoundingClientRect().left;
						} )
					) + "px";
			}
		}
	);
	
	// Support: Android 2.3
	jQuery.cssHooks.marginRight = addGetHookIf( support.reliableMarginRight,
		function( elem, computed ) {
			if ( computed ) {
				return swap( elem, { "display": "inline-block" },
					curCSS, [ elem, "marginRight" ] );
			}
		}
	);
	
	// These hooks are used by animate to expand properties
	jQuery.each( {
		margin: "",
		padding: "",
		border: "Width"
	}, function( prefix, suffix ) {
		jQuery.cssHooks[ prefix + suffix ] = {
			expand: function( value ) {
				var i = 0,
					expanded = {},
	
					// Assumes a single number if not a string
					parts = typeof value === "string" ? value.split( " " ) : [ value ];
	
				for ( ; i < 4; i++ ) {
					expanded[ prefix + cssExpand[ i ] + suffix ] =
						parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
				}
	
				return expanded;
			}
		};
	
		if ( !rmargin.test( prefix ) ) {
			jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;
		}
	} );
	
	jQuery.fn.extend( {
		css: function( name, value ) {
			return access( this, function( elem, name, value ) {
				var styles, len,
					map = {},
					i = 0;
	
				if ( jQuery.isArray( name ) ) {
					styles = getStyles( elem );
					len = name.length;
	
					for ( ; i < len; i++ ) {
						map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );
					}
	
					return map;
				}
	
				return value !== undefined ?
					jQuery.style( elem, name, value ) :
					jQuery.css( elem, name );
			}, name, value, arguments.length > 1 );
		},
		show: function() {
			return showHide( this, true );
		},
		hide: function() {
			return showHide( this );
		},
		toggle: function( state ) {
			if ( typeof state === "boolean" ) {
				return state ? this.show() : this.hide();
			}
	
			return this.each( function() {
				if ( isHidden( this ) ) {
					jQuery( this ).show();
				} else {
					jQuery( this ).hide();
				}
			} );
		}
	} );
	
	
	function Tween( elem, options, prop, end, easing ) {
		return new Tween.prototype.init( elem, options, prop, end, easing );
	}
	jQuery.Tween = Tween;
	
	Tween.prototype = {
		constructor: Tween,
		init: function( elem, options, prop, end, easing, unit ) {
			this.elem = elem;
			this.prop = prop;
			this.easing = easing || jQuery.easing._default;
			this.options = options;
			this.start = this.now = this.cur();
			this.end = end;
			this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );
		},
		cur: function() {
			var hooks = Tween.propHooks[ this.prop ];
	
			return hooks && hooks.get ?
				hooks.get( this ) :
				Tween.propHooks._default.get( this );
		},
		run: function( percent ) {
			var eased,
				hooks = Tween.propHooks[ this.prop ];
	
			if ( this.options.duration ) {
				this.pos = eased = jQuery.easing[ this.easing ](
					percent, this.options.duration * percent, 0, 1, this.options.duration
				);
			} else {
				this.pos = eased = percent;
			}
			this.now = ( this.end - this.start ) * eased + this.start;
	
			if ( this.options.step ) {
				this.options.step.call( this.elem, this.now, this );
			}
	
			if ( hooks && hooks.set ) {
				hooks.set( this );
			} else {
				Tween.propHooks._default.set( this );
			}
			return this;
		}
	};
	
	Tween.prototype.init.prototype = Tween.prototype;
	
	Tween.propHooks = {
		_default: {
			get: function( tween ) {
				var result;
	
				// Use a property on the element directly when it is not a DOM element,
				// or when there is no matching style property that exists.
				if ( tween.elem.nodeType !== 1 ||
					tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {
					return tween.elem[ tween.prop ];
				}
	
				// Passing an empty string as a 3rd parameter to .css will automatically
				// attempt a parseFloat and fallback to a string if the parse fails.
				// Simple values such as "10px" are parsed to Float;
				// complex values such as "rotate(1rad)" are returned as-is.
				result = jQuery.css( tween.elem, tween.prop, "" );
	
				// Empty strings, null, undefined and "auto" are converted to 0.
				return !result || result === "auto" ? 0 : result;
			},
			set: function( tween ) {
	
				// Use step hook for back compat.
				// Use cssHook if its there.
				// Use .style if available and use plain properties where available.
				if ( jQuery.fx.step[ tween.prop ] ) {
					jQuery.fx.step[ tween.prop ]( tween );
				} else if ( tween.elem.nodeType === 1 &&
					( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null ||
						jQuery.cssHooks[ tween.prop ] ) ) {
					jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
				} else {
					tween.elem[ tween.prop ] = tween.now;
				}
			}
		}
	};
	
	// Support: IE9
	// Panic based approach to setting things on disconnected nodes
	Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
		set: function( tween ) {
			if ( tween.elem.nodeType && tween.elem.parentNode ) {
				tween.elem[ tween.prop ] = tween.now;
			}
		}
	};
	
	jQuery.easing = {
		linear: function( p ) {
			return p;
		},
		swing: function( p ) {
			return 0.5 - Math.cos( p * Math.PI ) / 2;
		},
		_default: "swing"
	};
	
	jQuery.fx = Tween.prototype.init;
	
	// Back Compat <1.8 extension point
	jQuery.fx.step = {};
	
	
	
	
	var
		fxNow, timerId,
		rfxtypes = /^(?:toggle|show|hide)$/,
		rrun = /queueHooks$/;
	
	// Animations created synchronously will run synchronously
	function createFxNow() {
		window.setTimeout( function() {
			fxNow = undefined;
		} );
		return ( fxNow = jQuery.now() );
	}
	
	// Generate parameters to create a standard animation
	function genFx( type, includeWidth ) {
		var which,
			i = 0,
			attrs = { height: type };
	
		// If we include width, step value is 1 to do all cssExpand values,
		// otherwise step value is 2 to skip over Left and Right
		includeWidth = includeWidth ? 1 : 0;
		for ( ; i < 4 ; i += 2 - includeWidth ) {
			which = cssExpand[ i ];
			attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;
		}
	
		if ( includeWidth ) {
			attrs.opacity = attrs.width = type;
		}
	
		return attrs;
	}
	
	function createTween( value, prop, animation ) {
		var tween,
			collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ),
			index = 0,
			length = collection.length;
		for ( ; index < length; index++ ) {
			if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {
	
				// We're done with this property
				return tween;
			}
		}
	}
	
	function defaultPrefilter( elem, props, opts ) {
		/* jshint validthis: true */
		var prop, value, toggle, tween, hooks, oldfire, display, checkDisplay,
			anim = this,
			orig = {},
			style = elem.style,
			hidden = elem.nodeType && isHidden( elem ),
			dataShow = dataPriv.get( elem, "fxshow" );
	
		// Handle queue: false promises
		if ( !opts.queue ) {
			hooks = jQuery._queueHooks( elem, "fx" );
			if ( hooks.unqueued == null ) {
				hooks.unqueued = 0;
				oldfire = hooks.empty.fire;
				hooks.empty.fire = function() {
					if ( !hooks.unqueued ) {
						oldfire();
					}
				};
			}
			hooks.unqueued++;
	
			anim.always( function() {
	
				// Ensure the complete handler is called before this completes
				anim.always( function() {
					hooks.unqueued--;
					if ( !jQuery.queue( elem, "fx" ).length ) {
						hooks.empty.fire();
					}
				} );
			} );
		}
	
		// Height/width overflow pass
		if ( elem.nodeType === 1 && ( "height" in props || "width" in props ) ) {
	
			// Make sure that nothing sneaks out
			// Record all 3 overflow attributes because IE9-10 do not
			// change the overflow attribute when overflowX and
			// overflowY are set to the same value
			opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];
	
			// Set display property to inline-block for height/width
			// animations on inline elements that are having width/height animated
			display = jQuery.css( elem, "display" );
	
			// Test default display if display is currently "none"
			checkDisplay = display === "none" ?
				dataPriv.get( elem, "olddisplay" ) || defaultDisplay( elem.nodeName ) : display;
	
			if ( checkDisplay === "inline" && jQuery.css( elem, "float" ) === "none" ) {
				style.display = "inline-block";
			}
		}
	
		if ( opts.overflow ) {
			style.overflow = "hidden";
			anim.always( function() {
				style.overflow = opts.overflow[ 0 ];
				style.overflowX = opts.overflow[ 1 ];
				style.overflowY = opts.overflow[ 2 ];
			} );
		}
	
		// show/hide pass
		for ( prop in props ) {
			value = props[ prop ];
			if ( rfxtypes.exec( value ) ) {
				delete props[ prop ];
				toggle = toggle || value === "toggle";
				if ( value === ( hidden ? "hide" : "show" ) ) {
	
					// If there is dataShow left over from a stopped hide or show
					// and we are going to proceed with show, we should pretend to be hidden
					if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) {
						hidden = true;
					} else {
						continue;
					}
				}
				orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );
	
			// Any non-fx value stops us from restoring the original display value
			} else {
				display = undefined;
			}
		}
	
		if ( !jQuery.isEmptyObject( orig ) ) {
			if ( dataShow ) {
				if ( "hidden" in dataShow ) {
					hidden = dataShow.hidden;
				}
			} else {
				dataShow = dataPriv.access( elem, "fxshow", {} );
			}
	
			// Store state if its toggle - enables .stop().toggle() to "reverse"
			if ( toggle ) {
				dataShow.hidden = !hidden;
			}
			if ( hidden ) {
				jQuery( elem ).show();
			} else {
				anim.done( function() {
					jQuery( elem ).hide();
				} );
			}
			anim.done( function() {
				var prop;
	
				dataPriv.remove( elem, "fxshow" );
				for ( prop in orig ) {
					jQuery.style( elem, prop, orig[ prop ] );
				}
			} );
			for ( prop in orig ) {
				tween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );
	
				if ( !( prop in dataShow ) ) {
					dataShow[ prop ] = tween.start;
					if ( hidden ) {
						tween.end = tween.start;
						tween.start = prop === "width" || prop === "height" ? 1 : 0;
					}
				}
			}
	
		// If this is a noop like .hide().hide(), restore an overwritten display value
		} else if ( ( display === "none" ? defaultDisplay( elem.nodeName ) : display ) === "inline" ) {
			style.display = display;
		}
	}
	
	function propFilter( props, specialEasing ) {
		var index, name, easing, value, hooks;
	
		// camelCase, specialEasing and expand cssHook pass
		for ( index in props ) {
			name = jQuery.camelCase( index );
			easing = specialEasing[ name ];
			value = props[ index ];
			if ( jQuery.isArray( value ) ) {
				easing = value[ 1 ];
				value = props[ index ] = value[ 0 ];
			}
	
			if ( index !== name ) {
				props[ name ] = value;
				delete props[ index ];
			}
	
			hooks = jQuery.cssHooks[ name ];
			if ( hooks && "expand" in hooks ) {
				value = hooks.expand( value );
				delete props[ name ];
	
				// Not quite $.extend, this won't overwrite existing keys.
				// Reusing 'index' because we have the correct "name"
				for ( index in value ) {
					if ( !( index in props ) ) {
						props[ index ] = value[ index ];
						specialEasing[ index ] = easing;
					}
				}
			} else {
				specialEasing[ name ] = easing;
			}
		}
	}
	
	function Animation( elem, properties, options ) {
		var result,
			stopped,
			index = 0,
			length = Animation.prefilters.length,
			deferred = jQuery.Deferred().always( function() {
	
				// Don't match elem in the :animated selector
				delete tick.elem;
			} ),
			tick = function() {
				if ( stopped ) {
					return false;
				}
				var currentTime = fxNow || createFxNow(),
					remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
	
					// Support: Android 2.3
					// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)
					temp = remaining / animation.duration || 0,
					percent = 1 - temp,
					index = 0,
					length = animation.tweens.length;
	
				for ( ; index < length ; index++ ) {
					animation.tweens[ index ].run( percent );
				}
	
				deferred.notifyWith( elem, [ animation, percent, remaining ] );
	
				if ( percent < 1 && length ) {
					return remaining;
				} else {
					deferred.resolveWith( elem, [ animation ] );
					return false;
				}
			},
			animation = deferred.promise( {
				elem: elem,
				props: jQuery.extend( {}, properties ),
				opts: jQuery.extend( true, {
					specialEasing: {},
					easing: jQuery.easing._default
				}, options ),
				originalProperties: properties,
				originalOptions: options,
				startTime: fxNow || createFxNow(),
				duration: options.duration,
				tweens: [],
				createTween: function( prop, end ) {
					var tween = jQuery.Tween( elem, animation.opts, prop, end,
							animation.opts.specialEasing[ prop ] || animation.opts.easing );
					animation.tweens.push( tween );
					return tween;
				},
				stop: function( gotoEnd ) {
					var index = 0,
	
						// If we are going to the end, we want to run all the tweens
						// otherwise we skip this part
						length = gotoEnd ? animation.tweens.length : 0;
					if ( stopped ) {
						return this;
					}
					stopped = true;
					for ( ; index < length ; index++ ) {
						animation.tweens[ index ].run( 1 );
					}
	
					// Resolve when we played the last frame; otherwise, reject
					if ( gotoEnd ) {
						deferred.notifyWith( elem, [ animation, 1, 0 ] );
						deferred.resolveWith( elem, [ animation, gotoEnd ] );
					} else {
						deferred.rejectWith( elem, [ animation, gotoEnd ] );
					}
					return this;
				}
			} ),
			props = animation.props;
	
		propFilter( props, animation.opts.specialEasing );
	
		for ( ; index < length ; index++ ) {
			result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );
			if ( result ) {
				if ( jQuery.isFunction( result.stop ) ) {
					jQuery._queueHooks( animation.elem, animation.opts.queue ).stop =
						jQuery.proxy( result.stop, result );
				}
				return result;
			}
		}
	
		jQuery.map( props, createTween, animation );
	
		if ( jQuery.isFunction( animation.opts.start ) ) {
			animation.opts.start.call( elem, animation );
		}
	
		jQuery.fx.timer(
			jQuery.extend( tick, {
				elem: elem,
				anim: animation,
				queue: animation.opts.queue
			} )
		);
	
		// attach callbacks from options
		return animation.progress( animation.opts.progress )
			.done( animation.opts.done, animation.opts.complete )
			.fail( animation.opts.fail )
			.always( animation.opts.always );
	}
	
	jQuery.Animation = jQuery.extend( Animation, {
		tweeners: {
			"*": [ function( prop, value ) {
				var tween = this.createTween( prop, value );
				adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );
				return tween;
			} ]
		},
	
		tweener: function( props, callback ) {
			if ( jQuery.isFunction( props ) ) {
				callback = props;
				props = [ "*" ];
			} else {
				props = props.match( rnotwhite );
			}
	
			var prop,
				index = 0,
				length = props.length;
	
			for ( ; index < length ; index++ ) {
				prop = props[ index ];
				Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];
				Animation.tweeners[ prop ].unshift( callback );
			}
		},
	
		prefilters: [ defaultPrefilter ],
	
		prefilter: function( callback, prepend ) {
			if ( prepend ) {
				Animation.prefilters.unshift( callback );
			} else {
				Animation.prefilters.push( callback );
			}
		}
	} );
	
	jQuery.speed = function( speed, easing, fn ) {
		var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
			complete: fn || !fn && easing ||
				jQuery.isFunction( speed ) && speed,
			duration: speed,
			easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing
		};
	
		opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ?
			opt.duration : opt.duration in jQuery.fx.speeds ?
				jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;
	
		// Normalize opt.queue - true/undefined/null -> "fx"
		if ( opt.queue == null || opt.queue === true ) {
			opt.queue = "fx";
		}
	
		// Queueing
		opt.old = opt.complete;
	
		opt.complete = function() {
			if ( jQuery.isFunction( opt.old ) ) {
				opt.old.call( this );
			}
	
			if ( opt.queue ) {
				jQuery.dequeue( this, opt.queue );
			}
		};
	
		return opt;
	};
	
	jQuery.fn.extend( {
		fadeTo: function( speed, to, easing, callback ) {
	
			// Show any hidden elements after setting opacity to 0
			return this.filter( isHidden ).css( "opacity", 0 ).show()
	
				// Animate to the value specified
				.end().animate( { opacity: to }, speed, easing, callback );
		},
		animate: function( prop, speed, easing, callback ) {
			var empty = jQuery.isEmptyObject( prop ),
				optall = jQuery.speed( speed, easing, callback ),
				doAnimation = function() {
	
					// Operate on a copy of prop so per-property easing won't be lost
					var anim = Animation( this, jQuery.extend( {}, prop ), optall );
	
					// Empty animations, or finishing resolves immediately
					if ( empty || dataPriv.get( this, "finish" ) ) {
						anim.stop( true );
					}
				};
				doAnimation.finish = doAnimation;
	
			return empty || optall.queue === false ?
				this.each( doAnimation ) :
				this.queue( optall.queue, doAnimation );
		},
		stop: function( type, clearQueue, gotoEnd ) {
			var stopQueue = function( hooks ) {
				var stop = hooks.stop;
				delete hooks.stop;
				stop( gotoEnd );
			};
	
			if ( typeof type !== "string" ) {
				gotoEnd = clearQueue;
				clearQueue = type;
				type = undefined;
			}
			if ( clearQueue && type !== false ) {
				this.queue( type || "fx", [] );
			}
	
			return this.each( function() {
				var dequeue = true,
					index = type != null && type + "queueHooks",
					timers = jQuery.timers,
					data = dataPriv.get( this );
	
				if ( index ) {
					if ( data[ index ] && data[ index ].stop ) {
						stopQueue( data[ index ] );
					}
				} else {
					for ( index in data ) {
						if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {
							stopQueue( data[ index ] );
						}
					}
				}
	
				for ( index = timers.length; index--; ) {
					if ( timers[ index ].elem === this &&
						( type == null || timers[ index ].queue === type ) ) {
	
						timers[ index ].anim.stop( gotoEnd );
						dequeue = false;
						timers.splice( index, 1 );
					}
				}
	
				// Start the next in the queue if the last step wasn't forced.
				// Timers currently will call their complete callbacks, which
				// will dequeue but only if they were gotoEnd.
				if ( dequeue || !gotoEnd ) {
					jQuery.dequeue( this, type );
				}
			} );
		},
		finish: function( type ) {
			if ( type !== false ) {
				type = type || "fx";
			}
			return this.each( function() {
				var index,
					data = dataPriv.get( this ),
					queue = data[ type + "queue" ],
					hooks = data[ type + "queueHooks" ],
					timers = jQuery.timers,
					length = queue ? queue.length : 0;
	
				// Enable finishing flag on private data
				data.finish = true;
	
				// Empty the queue first
				jQuery.queue( this, type, [] );
	
				if ( hooks && hooks.stop ) {
					hooks.stop.call( this, true );
				}
	
				// Look for any active animations, and finish them
				for ( index = timers.length; index--; ) {
					if ( timers[ index ].elem === this && timers[ index ].queue === type ) {
						timers[ index ].anim.stop( true );
						timers.splice( index, 1 );
					}
				}
	
				// Look for any animations in the old queue and finish them
				for ( index = 0; index < length; index++ ) {
					if ( queue[ index ] && queue[ index ].finish ) {
						queue[ index ].finish.call( this );
					}
				}
	
				// Turn off finishing flag
				delete data.finish;
			} );
		}
	} );
	
	jQuery.each( [ "toggle", "show", "hide" ], function( i, name ) {
		var cssFn = jQuery.fn[ name ];
		jQuery.fn[ name ] = function( speed, easing, callback ) {
			return speed == null || typeof speed === "boolean" ?
				cssFn.apply( this, arguments ) :
				this.animate( genFx( name, true ), speed, easing, callback );
		};
	} );
	
	// Generate shortcuts for custom animations
	jQuery.each( {
		slideDown: genFx( "show" ),
		slideUp: genFx( "hide" ),
		slideToggle: genFx( "toggle" ),
		fadeIn: { opacity: "show" },
		fadeOut: { opacity: "hide" },
		fadeToggle: { opacity: "toggle" }
	}, function( name, props ) {
		jQuery.fn[ name ] = function( speed, easing, callback ) {
			return this.animate( props, speed, easing, callback );
		};
	} );
	
	jQuery.timers = [];
	jQuery.fx.tick = function() {
		var timer,
			i = 0,
			timers = jQuery.timers;
	
		fxNow = jQuery.now();
	
		for ( ; i < timers.length; i++ ) {
			timer = timers[ i ];
	
			// Checks the timer has not already been removed
			if ( !timer() && timers[ i ] === timer ) {
				timers.splice( i--, 1 );
			}
		}
	
		if ( !timers.length ) {
			jQuery.fx.stop();
		}
		fxNow = undefined;
	};
	
	jQuery.fx.timer = function( timer ) {
		jQuery.timers.push( timer );
		if ( timer() ) {
			jQuery.fx.start();
		} else {
			jQuery.timers.pop();
		}
	};
	
	jQuery.fx.interval = 13;
	jQuery.fx.start = function() {
		if ( !timerId ) {
			timerId = window.setInterval( jQuery.fx.tick, jQuery.fx.interval );
		}
	};
	
	jQuery.fx.stop = function() {
		window.clearInterval( timerId );
	
		timerId = null;
	};
	
	jQuery.fx.speeds = {
		slow: 600,
		fast: 200,
	
		// Default speed
		_default: 400
	};
	
	
	// Based off of the plugin by Clint Helfers, with permission.
	// http://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/
	jQuery.fn.delay = function( time, type ) {
		time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
		type = type || "fx";
	
		return this.queue( type, function( next, hooks ) {
			var timeout = window.setTimeout( next, time );
			hooks.stop = function() {
				window.clearTimeout( timeout );
			};
		} );
	};
	
	
	( function() {
		var input = document.createElement( "input" ),
			select = document.createElement( "select" ),
			opt = select.appendChild( document.createElement( "option" ) );
	
		input.type = "checkbox";
	
		// Support: iOS<=5.1, Android<=4.2+
		// Default value for a checkbox should be "on"
		support.checkOn = input.value !== "";
	
		// Support: IE<=11+
		// Must access selectedIndex to make default options select
		support.optSelected = opt.selected;
	
		// Support: Android<=2.3
		// Options inside disabled selects are incorrectly marked as disabled
		select.disabled = true;
		support.optDisabled = !opt.disabled;
	
		// Support: IE<=11+
		// An input loses its value after becoming a radio
		input = document.createElement( "input" );
		input.value = "t";
		input.type = "radio";
		support.radioValue = input.value === "t";
	} )();
	
	
	var boolHook,
		attrHandle = jQuery.expr.attrHandle;
	
	jQuery.fn.extend( {
		attr: function( name, value ) {
			return access( this, jQuery.attr, name, value, arguments.length > 1 );
		},
	
		removeAttr: function( name ) {
			return this.each( function() {
				jQuery.removeAttr( this, name );
			} );
		}
	} );
	
	jQuery.extend( {
		attr: function( elem, name, value ) {
			var ret, hooks,
				nType = elem.nodeType;
	
			// Don't get/set attributes on text, comment and attribute nodes
			if ( nType === 3 || nType === 8 || nType === 2 ) {
				return;
			}
	
			// Fallback to prop when attributes are not supported
			if ( typeof elem.getAttribute === "undefined" ) {
				return jQuery.prop( elem, name, value );
			}
	
			// All attributes are lowercase
			// Grab necessary hook if one is defined
			if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
				name = name.toLowerCase();
				hooks = jQuery.attrHooks[ name ] ||
					( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );
			}
	
			if ( value !== undefined ) {
				if ( value === null ) {
					jQuery.removeAttr( elem, name );
					return;
				}
	
				if ( hooks && "set" in hooks &&
					( ret = hooks.set( elem, value, name ) ) !== undefined ) {
					return ret;
				}
	
				elem.setAttribute( name, value + "" );
				return value;
			}
	
			if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
				return ret;
			}
	
			ret = jQuery.find.attr( elem, name );
	
			// Non-existent attributes return null, we normalize to undefined
			return ret == null ? undefined : ret;
		},
	
		attrHooks: {
			type: {
				set: function( elem, value ) {
					if ( !support.radioValue && value === "radio" &&
						jQuery.nodeName( elem, "input" ) ) {
						var val = elem.value;
						elem.setAttribute( "type", value );
						if ( val ) {
							elem.value = val;
						}
						return value;
					}
				}
			}
		},
	
		removeAttr: function( elem, value ) {
			var name, propName,
				i = 0,
				attrNames = value && value.match( rnotwhite );
	
			if ( attrNames && elem.nodeType === 1 ) {
				while ( ( name = attrNames[ i++ ] ) ) {
					propName = jQuery.propFix[ name ] || name;
	
					// Boolean attributes get special treatment (#10870)
					if ( jQuery.expr.match.bool.test( name ) ) {
	
						// Set corresponding property to false
						elem[ propName ] = false;
					}
	
					elem.removeAttribute( name );
				}
			}
		}
	} );
	
	// Hooks for boolean attributes
	boolHook = {
		set: function( elem, value, name ) {
			if ( value === false ) {
	
				// Remove boolean attributes when set to false
				jQuery.removeAttr( elem, name );
			} else {
				elem.setAttribute( name, name );
			}
			return name;
		}
	};
	jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) {
		var getter = attrHandle[ name ] || jQuery.find.attr;
	
		attrHandle[ name ] = function( elem, name, isXML ) {
			var ret, handle;
			if ( !isXML ) {
	
				// Avoid an infinite loop by temporarily removing this function from the getter
				handle = attrHandle[ name ];
				attrHandle[ name ] = ret;
				ret = getter( elem, name, isXML ) != null ?
					name.toLowerCase() :
					null;
				attrHandle[ name ] = handle;
			}
			return ret;
		};
	} );
	
	
	
	
	var rfocusable = /^(?:input|select|textarea|button)$/i,
		rclickable = /^(?:a|area)$/i;
	
	jQuery.fn.extend( {
		prop: function( name, value ) {
			return access( this, jQuery.prop, name, value, arguments.length > 1 );
		},
	
		removeProp: function( name ) {
			return this.each( function() {
				delete this[ jQuery.propFix[ name ] || name ];
			} );
		}
	} );
	
	jQuery.extend( {
		prop: function( elem, name, value ) {
			var ret, hooks,
				nType = elem.nodeType;
	
			// Don't get/set properties on text, comment and attribute nodes
			if ( nType === 3 || nType === 8 || nType === 2 ) {
				return;
			}
	
			if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
	
				// Fix name and attach hooks
				name = jQuery.propFix[ name ] || name;
				hooks = jQuery.propHooks[ name ];
			}
	
			if ( value !== undefined ) {
				if ( hooks && "set" in hooks &&
					( ret = hooks.set( elem, value, name ) ) !== undefined ) {
					return ret;
				}
	
				return ( elem[ name ] = value );
			}
	
			if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
				return ret;
			}
	
			return elem[ name ];
		},
	
		propHooks: {
			tabIndex: {
				get: function( elem ) {
	
					// elem.tabIndex doesn't always return the
					// correct value when it hasn't been explicitly set
					// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
					// Use proper attribute retrieval(#12072)
					var tabindex = jQuery.find.attr( elem, "tabindex" );
	
					return tabindex ?
						parseInt( tabindex, 10 ) :
						rfocusable.test( elem.nodeName ) ||
							rclickable.test( elem.nodeName ) && elem.href ?
								0 :
								-1;
				}
			}
		},
	
		propFix: {
			"for": "htmlFor",
			"class": "className"
		}
	} );
	
	// Support: IE <=11 only
	// Accessing the selectedIndex property
	// forces the browser to respect setting selected
	// on the option
	// The getter ensures a default option is selected
	// when in an optgroup
	if ( !support.optSelected ) {
		jQuery.propHooks.selected = {
			get: function( elem ) {
				var parent = elem.parentNode;
				if ( parent && parent.parentNode ) {
					parent.parentNode.selectedIndex;
				}
				return null;
			},
			set: function( elem ) {
				var parent = elem.parentNode;
				if ( parent ) {
					parent.selectedIndex;
	
					if ( parent.parentNode ) {
						parent.parentNode.selectedIndex;
					}
				}
			}
		};
	}
	
	jQuery.each( [
		"tabIndex",
		"readOnly",
		"maxLength",
		"cellSpacing",
		"cellPadding",
		"rowSpan",
		"colSpan",
		"useMap",
		"frameBorder",
		"contentEditable"
	], function() {
		jQuery.propFix[ this.toLowerCase() ] = this;
	} );
	
	
	
	
	var rclass = /[\t\r\n\f]/g;
	
	function getClass( elem ) {
		return elem.getAttribute && elem.getAttribute( "class" ) || "";
	}
	
	jQuery.fn.extend( {
		addClass: function( value ) {
			var classes, elem, cur, curValue, clazz, j, finalValue,
				i = 0;
	
			if ( jQuery.isFunction( value ) ) {
				return this.each( function( j ) {
					jQuery( this ).addClass( value.call( this, j, getClass( this ) ) );
				} );
			}
	
			if ( typeof value === "string" && value ) {
				classes = value.match( rnotwhite ) || [];
	
				while ( ( elem = this[ i++ ] ) ) {
					curValue = getClass( elem );
					cur = elem.nodeType === 1 &&
						( " " + curValue + " " ).replace( rclass, " " );
	
					if ( cur ) {
						j = 0;
						while ( ( clazz = classes[ j++ ] ) ) {
							if ( cur.indexOf( " " + clazz + " " ) < 0 ) {
								cur += clazz + " ";
							}
						}
	
						// Only assign if different to avoid unneeded rendering.
						finalValue = jQuery.trim( cur );
						if ( curValue !== finalValue ) {
							elem.setAttribute( "class", finalValue );
						}
					}
				}
			}
	
			return this;
		},
	
		removeClass: function( value ) {
			var classes, elem, cur, curValue, clazz, j, finalValue,
				i = 0;
	
			if ( jQuery.isFunction( value ) ) {
				return this.each( function( j ) {
					jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );
				} );
			}
	
			if ( !arguments.length ) {
				return this.attr( "class", "" );
			}
	
			if ( typeof value === "string" && value ) {
				classes = value.match( rnotwhite ) || [];
	
				while ( ( elem = this[ i++ ] ) ) {
					curValue = getClass( elem );
	
					// This expression is here for better compressibility (see addClass)
					cur = elem.nodeType === 1 &&
						( " " + curValue + " " ).replace( rclass, " " );
	
					if ( cur ) {
						j = 0;
						while ( ( clazz = classes[ j++ ] ) ) {
	
							// Remove *all* instances
							while ( cur.indexOf( " " + clazz + " " ) > -1 ) {
								cur = cur.replace( " " + clazz + " ", " " );
							}
						}
	
						// Only assign if different to avoid unneeded rendering.
						finalValue = jQuery.trim( cur );
						if ( curValue !== finalValue ) {
							elem.setAttribute( "class", finalValue );
						}
					}
				}
			}
	
			return this;
		},
	
		toggleClass: function( value, stateVal ) {
			var type = typeof value;
	
			if ( typeof stateVal === "boolean" && type === "string" ) {
				return stateVal ? this.addClass( value ) : this.removeClass( value );
			}
	
			if ( jQuery.isFunction( value ) ) {
				return this.each( function( i ) {
					jQuery( this ).toggleClass(
						value.call( this, i, getClass( this ), stateVal ),
						stateVal
					);
				} );
			}
	
			return this.each( function() {
				var className, i, self, classNames;
	
				if ( type === "string" ) {
	
					// Toggle individual class names
					i = 0;
					self = jQuery( this );
					classNames = value.match( rnotwhite ) || [];
	
					while ( ( className = classNames[ i++ ] ) ) {
	
						// Check each className given, space separated list
						if ( self.hasClass( className ) ) {
							self.removeClass( className );
						} else {
							self.addClass( className );
						}
					}
	
				// Toggle whole class name
				} else if ( value === undefined || type === "boolean" ) {
					className = getClass( this );
					if ( className ) {
	
						// Store className if set
						dataPriv.set( this, "__className__", className );
					}
	
					// If the element has a class name or if we're passed `false`,
					// then remove the whole classname (if there was one, the above saved it).
					// Otherwise bring back whatever was previously saved (if anything),
					// falling back to the empty string if nothing was stored.
					if ( this.setAttribute ) {
						this.setAttribute( "class",
							className || value === false ?
							"" :
							dataPriv.get( this, "__className__" ) || ""
						);
					}
				}
			} );
		},
	
		hasClass: function( selector ) {
			var className, elem,
				i = 0;
	
			className = " " + selector + " ";
			while ( ( elem = this[ i++ ] ) ) {
				if ( elem.nodeType === 1 &&
					( " " + getClass( elem ) + " " ).replace( rclass, " " )
						.indexOf( className ) > -1
				) {
					return true;
				}
			}
	
			return false;
		}
	} );
	
	
	
	
	var rreturn = /\r/g,
		rspaces = /[\x20\t\r\n\f]+/g;
	
	jQuery.fn.extend( {
		val: function( value ) {
			var hooks, ret, isFunction,
				elem = this[ 0 ];
	
			if ( !arguments.length ) {
				if ( elem ) {
					hooks = jQuery.valHooks[ elem.type ] ||
						jQuery.valHooks[ elem.nodeName.toLowerCase() ];
	
					if ( hooks &&
						"get" in hooks &&
						( ret = hooks.get( elem, "value" ) ) !== undefined
					) {
						return ret;
					}
	
					ret = elem.value;
	
					return typeof ret === "string" ?
	
						// Handle most common string cases
						ret.replace( rreturn, "" ) :
	
						// Handle cases where value is null/undef or number
						ret == null ? "" : ret;
				}
	
				return;
			}
	
			isFunction = jQuery.isFunction( value );
	
			return this.each( function( i ) {
				var val;
	
				if ( this.nodeType !== 1 ) {
					return;
				}
	
				if ( isFunction ) {
					val = value.call( this, i, jQuery( this ).val() );
				} else {
					val = value;
				}
	
				// Treat null/undefined as ""; convert numbers to string
				if ( val == null ) {
					val = "";
	
				} else if ( typeof val === "number" ) {
					val += "";
	
				} else if ( jQuery.isArray( val ) ) {
					val = jQuery.map( val, function( value ) {
						return value == null ? "" : value + "";
					} );
				}
	
				hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
	
				// If set returns undefined, fall back to normal setting
				if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) {
					this.value = val;
				}
			} );
		}
	} );
	
	jQuery.extend( {
		valHooks: {
			option: {
				get: function( elem ) {
	
					var val = jQuery.find.attr( elem, "value" );
					return val != null ?
						val :
	
						// Support: IE10-11+
						// option.text throws exceptions (#14686, #14858)
						// Strip and collapse whitespace
						// https://html.spec.whatwg.org/#strip-and-collapse-whitespace
						jQuery.trim( jQuery.text( elem ) ).replace( rspaces, " " );
				}
			},
			select: {
				get: function( elem ) {
					var value, option,
						options = elem.options,
						index = elem.selectedIndex,
						one = elem.type === "select-one" || index < 0,
						values = one ? null : [],
						max = one ? index + 1 : options.length,
						i = index < 0 ?
							max :
							one ? index : 0;
	
					// Loop through all the selected options
					for ( ; i < max; i++ ) {
						option = options[ i ];
	
						// IE8-9 doesn't update selected after form reset (#2551)
						if ( ( option.selected || i === index ) &&
	
								// Don't return options that are disabled or in a disabled optgroup
								( support.optDisabled ?
									!option.disabled : option.getAttribute( "disabled" ) === null ) &&
								( !option.parentNode.disabled ||
									!jQuery.nodeName( option.parentNode, "optgroup" ) ) ) {
	
							// Get the specific value for the option
							value = jQuery( option ).val();
	
							// We don't need an array for one selects
							if ( one ) {
								return value;
							}
	
							// Multi-Selects return an array
							values.push( value );
						}
					}
	
					return values;
				},
	
				set: function( elem, value ) {
					var optionSet, option,
						options = elem.options,
						values = jQuery.makeArray( value ),
						i = options.length;
	
					while ( i-- ) {
						option = options[ i ];
						if ( option.selected =
							jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1
						) {
							optionSet = true;
						}
					}
	
					// Force browsers to behave consistently when non-matching value is set
					if ( !optionSet ) {
						elem.selectedIndex = -1;
					}
					return values;
				}
			}
		}
	} );
	
	// Radios and checkboxes getter/setter
	jQuery.each( [ "radio", "checkbox" ], function() {
		jQuery.valHooks[ this ] = {
			set: function( elem, value ) {
				if ( jQuery.isArray( value ) ) {
					return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );
				}
			}
		};
		if ( !support.checkOn ) {
			jQuery.valHooks[ this ].get = function( elem ) {
				return elem.getAttribute( "value" ) === null ? "on" : elem.value;
			};
		}
	} );
	
	
	
	
	// Return jQuery for attributes-only inclusion
	
	
	var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/;
	
	jQuery.extend( jQuery.event, {
	
		trigger: function( event, data, elem, onlyHandlers ) {
	
			var i, cur, tmp, bubbleType, ontype, handle, special,
				eventPath = [ elem || document ],
				type = hasOwn.call( event, "type" ) ? event.type : event,
				namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : [];
	
			cur = tmp = elem = elem || document;
	
			// Don't do events on text and comment nodes
			if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
				return;
			}
	
			// focus/blur morphs to focusin/out; ensure we're not firing them right now
			if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
				return;
			}
	
			if ( type.indexOf( "." ) > -1 ) {
	
				// Namespaced trigger; create a regexp to match event type in handle()
				namespaces = type.split( "." );
				type = namespaces.shift();
				namespaces.sort();
			}
			ontype = type.indexOf( ":" ) < 0 && "on" + type;
	
			// Caller can pass in a jQuery.Event object, Object, or just an event type string
			event = event[ jQuery.expando ] ?
				event :
				new jQuery.Event( type, typeof event === "object" && event );
	
			// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)
			event.isTrigger = onlyHandlers ? 2 : 3;
			event.namespace = namespaces.join( "." );
			event.rnamespace = event.namespace ?
				new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) :
				null;
	
			// Clean up the event in case it is being reused
			event.result = undefined;
			if ( !event.target ) {
				event.target = elem;
			}
	
			// Clone any incoming data and prepend the event, creating the handler arg list
			data = data == null ?
				[ event ] :
				jQuery.makeArray( data, [ event ] );
	
			// Allow special events to draw outside the lines
			special = jQuery.event.special[ type ] || {};
			if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {
				return;
			}
	
			// Determine event propagation path in advance, per W3C events spec (#9951)
			// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
			if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {
	
				bubbleType = special.delegateType || type;
				if ( !rfocusMorph.test( bubbleType + type ) ) {
					cur = cur.parentNode;
				}
				for ( ; cur; cur = cur.parentNode ) {
					eventPath.push( cur );
					tmp = cur;
				}
	
				// Only add window if we got to document (e.g., not plain obj or detached DOM)
				if ( tmp === ( elem.ownerDocument || document ) ) {
					eventPath.push( tmp.defaultView || tmp.parentWindow || window );
				}
			}
	
			// Fire handlers on the event path
			i = 0;
			while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {
	
				event.type = i > 1 ?
					bubbleType :
					special.bindType || type;
	
				// jQuery handler
				handle = ( dataPriv.get( cur, "events" ) || {} )[ event.type ] &&
					dataPriv.get( cur, "handle" );
				if ( handle ) {
					handle.apply( cur, data );
				}
	
				// Native handler
				handle = ontype && cur[ ontype ];
				if ( handle && handle.apply && acceptData( cur ) ) {
					event.result = handle.apply( cur, data );
					if ( event.result === false ) {
						event.preventDefault();
					}
				}
			}
			event.type = type;
	
			// If nobody prevented the default action, do it now
			if ( !onlyHandlers && !event.isDefaultPrevented() ) {
	
				if ( ( !special._default ||
					special._default.apply( eventPath.pop(), data ) === false ) &&
					acceptData( elem ) ) {
	
					// Call a native DOM method on the target with the same name name as the event.
					// Don't do default actions on window, that's where global variables be (#6170)
					if ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) {
	
						// Don't re-trigger an onFOO event when we call its FOO() method
						tmp = elem[ ontype ];
	
						if ( tmp ) {
							elem[ ontype ] = null;
						}
	
						// Prevent re-triggering of the same event, since we already bubbled it above
						jQuery.event.triggered = type;
						elem[ type ]();
						jQuery.event.triggered = undefined;
	
						if ( tmp ) {
							elem[ ontype ] = tmp;
						}
					}
				}
			}
	
			return event.result;
		},
	
		// Piggyback on a donor event to simulate a different one
		// Used only for `focus(in | out)` events
		simulate: function( type, elem, event ) {
			var e = jQuery.extend(
				new jQuery.Event(),
				event,
				{
					type: type,
					isSimulated: true
				}
			);
	
			jQuery.event.trigger( e, null, elem );
		}
	
	} );
	
	jQuery.fn.extend( {
	
		trigger: function( type, data ) {
			return this.each( function() {
				jQuery.event.trigger( type, data, this );
			} );
		},
		triggerHandler: function( type, data ) {
			var elem = this[ 0 ];
			if ( elem ) {
				return jQuery.event.trigger( type, data, elem, true );
			}
		}
	} );
	
	
	jQuery.each( ( "blur focus focusin focusout load resize scroll unload click dblclick " +
		"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
		"change select submit keydown keypress keyup error contextmenu" ).split( " " ),
		function( i, name ) {
	
		// Handle event binding
		jQuery.fn[ name ] = function( data, fn ) {
			return arguments.length > 0 ?
				this.on( name, null, data, fn ) :
				this.trigger( name );
		};
	} );
	
	jQuery.fn.extend( {
		hover: function( fnOver, fnOut ) {
			return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
		}
	} );
	
	
	
	
	support.focusin = "onfocusin" in window;
	
	
	// Support: Firefox
	// Firefox doesn't have focus(in | out) events
	// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787
	//
	// Support: Chrome, Safari
	// focus(in | out) events fire after focus & blur events,
	// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order
	// Related ticket - https://code.google.com/p/chromium/issues/detail?id=449857
	if ( !support.focusin ) {
		jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) {
	
			// Attach a single capturing handler on the document while someone wants focusin/focusout
			var handler = function( event ) {
				jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );
			};
	
			jQuery.event.special[ fix ] = {
				setup: function() {
					var doc = this.ownerDocument || this,
						attaches = dataPriv.access( doc, fix );
	
					if ( !attaches ) {
						doc.addEventListener( orig, handler, true );
					}
					dataPriv.access( doc, fix, ( attaches || 0 ) + 1 );
				},
				teardown: function() {
					var doc = this.ownerDocument || this,
						attaches = dataPriv.access( doc, fix ) - 1;
	
					if ( !attaches ) {
						doc.removeEventListener( orig, handler, true );
						dataPriv.remove( doc, fix );
	
					} else {
						dataPriv.access( doc, fix, attaches );
					}
				}
			};
		} );
	}
	var location = window.location;
	
	var nonce = jQuery.now();
	
	var rquery = ( /\?/ );
	
	
	
	// Support: Android 2.3
	// Workaround failure to string-cast null input
	jQuery.parseJSON = function( data ) {
		return JSON.parse( data + "" );
	};
	
	
	// Cross-browser xml parsing
	jQuery.parseXML = function( data ) {
		var xml;
		if ( !data || typeof data !== "string" ) {
			return null;
		}
	
		// Support: IE9
		try {
			xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" );
		} catch ( e ) {
			xml = undefined;
		}
	
		if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) {
			jQuery.error( "Invalid XML: " + data );
		}
		return xml;
	};
	
	
	var
		rhash = /#.*$/,
		rts = /([?&])_=[^&]*/,
		rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg,
	
		// #7653, #8125, #8152: local protocol detection
		rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
		rnoContent = /^(?:GET|HEAD)$/,
		rprotocol = /^\/\//,
	
		/* Prefilters
		 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
		 * 2) These are called:
		 *    - BEFORE asking for a transport
		 *    - AFTER param serialization (s.data is a string if s.processData is true)
		 * 3) key is the dataType
		 * 4) the catchall symbol "*" can be used
		 * 5) execution will start with transport dataType and THEN continue down to "*" if needed
		 */
		prefilters = {},
	
		/* Transports bindings
		 * 1) key is the dataType
		 * 2) the catchall symbol "*" can be used
		 * 3) selection will start with transport dataType and THEN go to "*" if needed
		 */
		transports = {},
	
		// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
		allTypes = "*/".concat( "*" ),
	
		// Anchor tag for parsing the document origin
		originAnchor = document.createElement( "a" );
		originAnchor.href = location.href;
	
	// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
	function addToPrefiltersOrTransports( structure ) {
	
		// dataTypeExpression is optional and defaults to "*"
		return function( dataTypeExpression, func ) {
	
			if ( typeof dataTypeExpression !== "string" ) {
				func = dataTypeExpression;
				dataTypeExpression = "*";
			}
	
			var dataType,
				i = 0,
				dataTypes = dataTypeExpression.toLowerCase().match( rnotwhite ) || [];
	
			if ( jQuery.isFunction( func ) ) {
	
				// For each dataType in the dataTypeExpression
				while ( ( dataType = dataTypes[ i++ ] ) ) {
	
					// Prepend if requested
					if ( dataType[ 0 ] === "+" ) {
						dataType = dataType.slice( 1 ) || "*";
						( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );
	
					// Otherwise append
					} else {
						( structure[ dataType ] = structure[ dataType ] || [] ).push( func );
					}
				}
			}
		};
	}
	
	// Base inspection function for prefilters and transports
	function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {
	
		var inspected = {},
			seekingTransport = ( structure === transports );
	
		function inspect( dataType ) {
			var selected;
			inspected[ dataType ] = true;
			jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {
				var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );
				if ( typeof dataTypeOrTransport === "string" &&
					!seekingTransport && !inspected[ dataTypeOrTransport ] ) {
	
					options.dataTypes.unshift( dataTypeOrTransport );
					inspect( dataTypeOrTransport );
					return false;
				} else if ( seekingTransport ) {
					return !( selected = dataTypeOrTransport );
				}
			} );
			return selected;
		}
	
		return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" );
	}
	
	// A special extend for ajax options
	// that takes "flat" options (not to be deep extended)
	// Fixes #9887
	function ajaxExtend( target, src ) {
		var key, deep,
			flatOptions = jQuery.ajaxSettings.flatOptions || {};
	
		for ( key in src ) {
			if ( src[ key ] !== undefined ) {
				( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];
			}
		}
		if ( deep ) {
			jQuery.extend( true, target, deep );
		}
	
		return target;
	}
	
	/* Handles responses to an ajax request:
	 * - finds the right dataType (mediates between content-type and expected dataType)
	 * - returns the corresponding response
	 */
	function ajaxHandleResponses( s, jqXHR, responses ) {
	
		var ct, type, finalDataType, firstDataType,
			contents = s.contents,
			dataTypes = s.dataTypes;
	
		// Remove auto dataType and get content-type in the process
		while ( dataTypes[ 0 ] === "*" ) {
			dataTypes.shift();
			if ( ct === undefined ) {
				ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" );
			}
		}
	
		// Check if we're dealing with a known content-type
		if ( ct ) {
			for ( type in contents ) {
				if ( contents[ type ] && contents[ type ].test( ct ) ) {
					dataTypes.unshift( type );
					break;
				}
			}
		}
	
		// Check to see if we have a response for the expected dataType
		if ( dataTypes[ 0 ] in responses ) {
			finalDataType = dataTypes[ 0 ];
		} else {
	
			// Try convertible dataTypes
			for ( type in responses ) {
				if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) {
					finalDataType = type;
					break;
				}
				if ( !firstDataType ) {
					firstDataType = type;
				}
			}
	
			// Or just use first one
			finalDataType = finalDataType || firstDataType;
		}
	
		// If we found a dataType
		// We add the dataType to the list if needed
		// and return the corresponding response
		if ( finalDataType ) {
			if ( finalDataType !== dataTypes[ 0 ] ) {
				dataTypes.unshift( finalDataType );
			}
			return responses[ finalDataType ];
		}
	}
	
	/* Chain conversions given the request and the original response
	 * Also sets the responseXXX fields on the jqXHR instance
	 */
	function ajaxConvert( s, response, jqXHR, isSuccess ) {
		var conv2, current, conv, tmp, prev,
			converters = {},
	
			// Work with a copy of dataTypes in case we need to modify it for conversion
			dataTypes = s.dataTypes.slice();
	
		// Create converters map with lowercased keys
		if ( dataTypes[ 1 ] ) {
			for ( conv in s.converters ) {
				converters[ conv.toLowerCase() ] = s.converters[ conv ];
			}
		}
	
		current = dataTypes.shift();
	
		// Convert to each sequential dataType
		while ( current ) {
	
			if ( s.responseFields[ current ] ) {
				jqXHR[ s.responseFields[ current ] ] = response;
			}
	
			// Apply the dataFilter if provided
			if ( !prev && isSuccess && s.dataFilter ) {
				response = s.dataFilter( response, s.dataType );
			}
	
			prev = current;
			current = dataTypes.shift();
	
			if ( current ) {
	
			// There's only work to do if current dataType is non-auto
				if ( current === "*" ) {
	
					current = prev;
	
				// Convert response if prev dataType is non-auto and differs from current
				} else if ( prev !== "*" && prev !== current ) {
	
					// Seek a direct converter
					conv = converters[ prev + " " + current ] || converters[ "* " + current ];
	
					// If none found, seek a pair
					if ( !conv ) {
						for ( conv2 in converters ) {
	
							// If conv2 outputs current
							tmp = conv2.split( " " );
							if ( tmp[ 1 ] === current ) {
	
								// If prev can be converted to accepted input
								conv = converters[ prev + " " + tmp[ 0 ] ] ||
									converters[ "* " + tmp[ 0 ] ];
								if ( conv ) {
	
									// Condense equivalence converters
									if ( conv === true ) {
										conv = converters[ conv2 ];
	
									// Otherwise, insert the intermediate dataType
									} else if ( converters[ conv2 ] !== true ) {
										current = tmp[ 0 ];
										dataTypes.unshift( tmp[ 1 ] );
									}
									break;
								}
							}
						}
					}
	
					// Apply converter (if not an equivalence)
					if ( conv !== true ) {
	
						// Unless errors are allowed to bubble, catch and return them
						if ( conv && s.throws ) {
							response = conv( response );
						} else {
							try {
								response = conv( response );
							} catch ( e ) {
								return {
									state: "parsererror",
									error: conv ? e : "No conversion from " + prev + " to " + current
								};
							}
						}
					}
				}
			}
		}
	
		return { state: "success", data: response };
	}
	
	jQuery.extend( {
	
		// Counter for holding the number of active queries
		active: 0,
	
		// Last-Modified header cache for next request
		lastModified: {},
		etag: {},
	
		ajaxSettings: {
			url: location.href,
			type: "GET",
			isLocal: rlocalProtocol.test( location.protocol ),
			global: true,
			processData: true,
			async: true,
			contentType: "application/x-www-form-urlencoded; charset=UTF-8",
			/*
			timeout: 0,
			data: null,
			dataType: null,
			username: null,
			password: null,
			cache: null,
			throws: false,
			traditional: false,
			headers: {},
			*/
	
			accepts: {
				"*": allTypes,
				text: "text/plain",
				html: "text/html",
				xml: "application/xml, text/xml",
				json: "application/json, text/javascript"
			},
	
			contents: {
				xml: /\bxml\b/,
				html: /\bhtml/,
				json: /\bjson\b/
			},
	
			responseFields: {
				xml: "responseXML",
				text: "responseText",
				json: "responseJSON"
			},
	
			// Data converters
			// Keys separate source (or catchall "*") and destination types with a single space
			converters: {
	
				// Convert anything to text
				"* text": String,
	
				// Text to html (true = no transformation)
				"text html": true,
	
				// Evaluate text as a json expression
				"text json": jQuery.parseJSON,
	
				// Parse text as xml
				"text xml": jQuery.parseXML
			},
	
			// For options that shouldn't be deep extended:
			// you can add your own custom options here if
			// and when you create one that shouldn't be
			// deep extended (see ajaxExtend)
			flatOptions: {
				url: true,
				context: true
			}
		},
	
		// Creates a full fledged settings object into target
		// with both ajaxSettings and settings fields.
		// If target is omitted, writes into ajaxSettings.
		ajaxSetup: function( target, settings ) {
			return settings ?
	
				// Building a settings object
				ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :
	
				// Extending ajaxSettings
				ajaxExtend( jQuery.ajaxSettings, target );
		},
	
		ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
		ajaxTransport: addToPrefiltersOrTransports( transports ),
	
		// Main method
		ajax: function( url, options ) {
	
			// If url is an object, simulate pre-1.5 signature
			if ( typeof url === "object" ) {
				options = url;
				url = undefined;
			}
	
			// Force options to be an object
			options = options || {};
	
			var transport,
	
				// URL without anti-cache param
				cacheURL,
	
				// Response headers
				responseHeadersString,
				responseHeaders,
	
				// timeout handle
				timeoutTimer,
	
				// Url cleanup var
				urlAnchor,
	
				// To know if global events are to be dispatched
				fireGlobals,
	
				// Loop variable
				i,
	
				// Create the final options object
				s = jQuery.ajaxSetup( {}, options ),
	
				// Callbacks context
				callbackContext = s.context || s,
	
				// Context for global events is callbackContext if it is a DOM node or jQuery collection
				globalEventContext = s.context &&
					( callbackContext.nodeType || callbackContext.jquery ) ?
						jQuery( callbackContext ) :
						jQuery.event,
	
				// Deferreds
				deferred = jQuery.Deferred(),
				completeDeferred = jQuery.Callbacks( "once memory" ),
	
				// Status-dependent callbacks
				statusCode = s.statusCode || {},
	
				// Headers (they are sent all at once)
				requestHeaders = {},
				requestHeadersNames = {},
	
				// The jqXHR state
				state = 0,
	
				// Default abort message
				strAbort = "canceled",
	
				// Fake xhr
				jqXHR = {
					readyState: 0,
	
					// Builds headers hashtable if needed
					getResponseHeader: function( key ) {
						var match;
						if ( state === 2 ) {
							if ( !responseHeaders ) {
								responseHeaders = {};
								while ( ( match = rheaders.exec( responseHeadersString ) ) ) {
									responseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ];
								}
							}
							match = responseHeaders[ key.toLowerCase() ];
						}
						return match == null ? null : match;
					},
	
					// Raw string
					getAllResponseHeaders: function() {
						return state === 2 ? responseHeadersString : null;
					},
	
					// Caches the header
					setRequestHeader: function( name, value ) {
						var lname = name.toLowerCase();
						if ( !state ) {
							name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;
							requestHeaders[ name ] = value;
						}
						return this;
					},
	
					// Overrides response content-type header
					overrideMimeType: function( type ) {
						if ( !state ) {
							s.mimeType = type;
						}
						return this;
					},
	
					// Status-dependent callbacks
					statusCode: function( map ) {
						var code;
						if ( map ) {
							if ( state < 2 ) {
								for ( code in map ) {
	
									// Lazy-add the new callback in a way that preserves old ones
									statusCode[ code ] = [ statusCode[ code ], map[ code ] ];
								}
							} else {
	
								// Execute the appropriate callbacks
								jqXHR.always( map[ jqXHR.status ] );
							}
						}
						return this;
					},
	
					// Cancel the request
					abort: function( statusText ) {
						var finalText = statusText || strAbort;
						if ( transport ) {
							transport.abort( finalText );
						}
						done( 0, finalText );
						return this;
					}
				};
	
			// Attach deferreds
			deferred.promise( jqXHR ).complete = completeDeferred.add;
			jqXHR.success = jqXHR.done;
			jqXHR.error = jqXHR.fail;
	
			// Remove hash character (#7531: and string promotion)
			// Add protocol if not provided (prefilters might expect it)
			// Handle falsy url in the settings object (#10093: consistency with old signature)
			// We also use the url parameter if available
			s.url = ( ( url || s.url || location.href ) + "" ).replace( rhash, "" )
				.replace( rprotocol, location.protocol + "//" );
	
			// Alias method option to type as per ticket #12004
			s.type = options.method || options.type || s.method || s.type;
	
			// Extract dataTypes list
			s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().match( rnotwhite ) || [ "" ];
	
			// A cross-domain request is in order when the origin doesn't match the current origin.
			if ( s.crossDomain == null ) {
				urlAnchor = document.createElement( "a" );
	
				// Support: IE8-11+
				// IE throws exception if url is malformed, e.g. http://example.com:80x/
				try {
					urlAnchor.href = s.url;
	
					// Support: IE8-11+
					// Anchor's host property isn't correctly set when s.url is relative
					urlAnchor.href = urlAnchor.href;
					s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !==
						urlAnchor.protocol + "//" + urlAnchor.host;
				} catch ( e ) {
	
					// If there is an error parsing the URL, assume it is crossDomain,
					// it can be rejected by the transport if it is invalid
					s.crossDomain = true;
				}
			}
	
			// Convert data if not already a string
			if ( s.data && s.processData && typeof s.data !== "string" ) {
				s.data = jQuery.param( s.data, s.traditional );
			}
	
			// Apply prefilters
			inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
	
			// If request was aborted inside a prefilter, stop there
			if ( state === 2 ) {
				return jqXHR;
			}
	
			// We can fire global events as of now if asked to
			// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)
			fireGlobals = jQuery.event && s.global;
	
			// Watch for a new set of requests
			if ( fireGlobals && jQuery.active++ === 0 ) {
				jQuery.event.trigger( "ajaxStart" );
			}
	
			// Uppercase the type
			s.type = s.type.toUpperCase();
	
			// Determine if request has content
			s.hasContent = !rnoContent.test( s.type );
	
			// Save the URL in case we're toying with the If-Modified-Since
			// and/or If-None-Match header later on
			cacheURL = s.url;
	
			// More options handling for requests with no content
			if ( !s.hasContent ) {
	
				// If data is available, append data to url
				if ( s.data ) {
					cacheURL = ( s.url += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data );
	
					// #9682: remove data so that it's not used in an eventual retry
					delete s.data;
				}
	
				// Add anti-cache in url if needed
				if ( s.cache === false ) {
					s.url = rts.test( cacheURL ) ?
	
						// If there is already a '_' parameter, set its value
						cacheURL.replace( rts, "$1_=" + nonce++ ) :
	
						// Otherwise add one to the end
						cacheURL + ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + nonce++;
				}
			}
	
			// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
			if ( s.ifModified ) {
				if ( jQuery.lastModified[ cacheURL ] ) {
					jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] );
				}
				if ( jQuery.etag[ cacheURL ] ) {
					jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] );
				}
			}
	
			// Set the correct header, if data is being sent
			if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
				jqXHR.setRequestHeader( "Content-Type", s.contentType );
			}
	
			// Set the Accepts header for the server, depending on the dataType
			jqXHR.setRequestHeader(
				"Accept",
				s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?
					s.accepts[ s.dataTypes[ 0 ] ] +
						( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
					s.accepts[ "*" ]
			);
	
			// Check for headers option
			for ( i in s.headers ) {
				jqXHR.setRequestHeader( i, s.headers[ i ] );
			}
	
			// Allow custom headers/mimetypes and early abort
			if ( s.beforeSend &&
				( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {
	
				// Abort if not done already and return
				return jqXHR.abort();
			}
	
			// Aborting is no longer a cancellation
			strAbort = "abort";
	
			// Install callbacks on deferreds
			for ( i in { success: 1, error: 1, complete: 1 } ) {
				jqXHR[ i ]( s[ i ] );
			}
	
			// Get transport
			transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
	
			// If no transport, we auto-abort
			if ( !transport ) {
				done( -1, "No Transport" );
			} else {
				jqXHR.readyState = 1;
	
				// Send global event
				if ( fireGlobals ) {
					globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
				}
	
				// If request was aborted inside ajaxSend, stop there
				if ( state === 2 ) {
					return jqXHR;
				}
	
				// Timeout
				if ( s.async && s.timeout > 0 ) {
					timeoutTimer = window.setTimeout( function() {
						jqXHR.abort( "timeout" );
					}, s.timeout );
				}
	
				try {
					state = 1;
					transport.send( requestHeaders, done );
				} catch ( e ) {
	
					// Propagate exception as error if not done
					if ( state < 2 ) {
						done( -1, e );
	
					// Simply rethrow otherwise
					} else {
						throw e;
					}
				}
			}
	
			// Callback for when everything is done
			function done( status, nativeStatusText, responses, headers ) {
				var isSuccess, success, error, response, modified,
					statusText = nativeStatusText;
	
				// Called once
				if ( state === 2 ) {
					return;
				}
	
				// State is "done" now
				state = 2;
	
				// Clear timeout if it exists
				if ( timeoutTimer ) {
					window.clearTimeout( timeoutTimer );
				}
	
				// Dereference transport for early garbage collection
				// (no matter how long the jqXHR object will be used)
				transport = undefined;
	
				// Cache response headers
				responseHeadersString = headers || "";
	
				// Set readyState
				jqXHR.readyState = status > 0 ? 4 : 0;
	
				// Determine if successful
				isSuccess = status >= 200 && status < 300 || status === 304;
	
				// Get response data
				if ( responses ) {
					response = ajaxHandleResponses( s, jqXHR, responses );
				}
	
				// Convert no matter what (that way responseXXX fields are always set)
				response = ajaxConvert( s, response, jqXHR, isSuccess );
	
				// If successful, handle type chaining
				if ( isSuccess ) {
	
					// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
					if ( s.ifModified ) {
						modified = jqXHR.getResponseHeader( "Last-Modified" );
						if ( modified ) {
							jQuery.lastModified[ cacheURL ] = modified;
						}
						modified = jqXHR.getResponseHeader( "etag" );
						if ( modified ) {
							jQuery.etag[ cacheURL ] = modified;
						}
					}
	
					// if no content
					if ( status === 204 || s.type === "HEAD" ) {
						statusText = "nocontent";
	
					// if not modified
					} else if ( status === 304 ) {
						statusText = "notmodified";
	
					// If we have data, let's convert it
					} else {
						statusText = response.state;
						success = response.data;
						error = response.error;
						isSuccess = !error;
					}
				} else {
	
					// Extract error from statusText and normalize for non-aborts
					error = statusText;
					if ( status || !statusText ) {
						statusText = "error";
						if ( status < 0 ) {
							status = 0;
						}
					}
				}
	
				// Set data for the fake xhr object
				jqXHR.status = status;
				jqXHR.statusText = ( nativeStatusText || statusText ) + "";
	
				// Success/Error
				if ( isSuccess ) {
					deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
				} else {
					deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
				}
	
				// Status-dependent callbacks
				jqXHR.statusCode( statusCode );
				statusCode = undefined;
	
				if ( fireGlobals ) {
					globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError",
						[ jqXHR, s, isSuccess ? success : error ] );
				}
	
				// Complete
				completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
	
				if ( fireGlobals ) {
					globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
	
					// Handle the global AJAX counter
					if ( !( --jQuery.active ) ) {
						jQuery.event.trigger( "ajaxStop" );
					}
				}
			}
	
			return jqXHR;
		},
	
		getJSON: function( url, data, callback ) {
			return jQuery.get( url, data, callback, "json" );
		},
	
		getScript: function( url, callback ) {
			return jQuery.get( url, undefined, callback, "script" );
		}
	} );
	
	jQuery.each( [ "get", "post" ], function( i, method ) {
		jQuery[ method ] = function( url, data, callback, type ) {
	
			// Shift arguments if data argument was omitted
			if ( jQuery.isFunction( data ) ) {
				type = type || callback;
				callback = data;
				data = undefined;
			}
	
			// The url can be an options object (which then must have .url)
			return jQuery.ajax( jQuery.extend( {
				url: url,
				type: method,
				dataType: type,
				data: data,
				success: callback
			}, jQuery.isPlainObject( url ) && url ) );
		};
	} );
	
	
	jQuery._evalUrl = function( url ) {
		return jQuery.ajax( {
			url: url,
	
			// Make this explicit, since user can override this through ajaxSetup (#11264)
			type: "GET",
			dataType: "script",
			async: false,
			global: false,
			"throws": true
		} );
	};
	
	
	jQuery.fn.extend( {
		wrapAll: function( html ) {
			var wrap;
	
			if ( jQuery.isFunction( html ) ) {
				return this.each( function( i ) {
					jQuery( this ).wrapAll( html.call( this, i ) );
				} );
			}
	
			if ( this[ 0 ] ) {
	
				// The elements to wrap the target around
				wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );
	
				if ( this[ 0 ].parentNode ) {
					wrap.insertBefore( this[ 0 ] );
				}
	
				wrap.map( function() {
					var elem = this;
	
					while ( elem.firstElementChild ) {
						elem = elem.firstElementChild;
					}
	
					return elem;
				} ).append( this );
			}
	
			return this;
		},
	
		wrapInner: function( html ) {
			if ( jQuery.isFunction( html ) ) {
				return this.each( function( i ) {
					jQuery( this ).wrapInner( html.call( this, i ) );
				} );
			}
	
			return this.each( function() {
				var self = jQuery( this ),
					contents = self.contents();
	
				if ( contents.length ) {
					contents.wrapAll( html );
	
				} else {
					self.append( html );
				}
			} );
		},
	
		wrap: function( html ) {
			var isFunction = jQuery.isFunction( html );
	
			return this.each( function( i ) {
				jQuery( this ).wrapAll( isFunction ? html.call( this, i ) : html );
			} );
		},
	
		unwrap: function() {
			return this.parent().each( function() {
				if ( !jQuery.nodeName( this, "body" ) ) {
					jQuery( this ).replaceWith( this.childNodes );
				}
			} ).end();
		}
	} );
	
	
	jQuery.expr.filters.hidden = function( elem ) {
		return !jQuery.expr.filters.visible( elem );
	};
	jQuery.expr.filters.visible = function( elem ) {
	
		// Support: Opera <= 12.12
		// Opera reports offsetWidths and offsetHeights less than zero on some elements
		// Use OR instead of AND as the element is not visible if either is true
		// See tickets #10406 and #13132
		return elem.offsetWidth > 0 || elem.offsetHeight > 0 || elem.getClientRects().length > 0;
	};
	
	
	
	
	var r20 = /%20/g,
		rbracket = /\[\]$/,
		rCRLF = /\r?\n/g,
		rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
		rsubmittable = /^(?:input|select|textarea|keygen)/i;
	
	function buildParams( prefix, obj, traditional, add ) {
		var name;
	
		if ( jQuery.isArray( obj ) ) {
	
			// Serialize array item.
			jQuery.each( obj, function( i, v ) {
				if ( traditional || rbracket.test( prefix ) ) {
	
					// Treat each array item as a scalar.
					add( prefix, v );
	
				} else {
	
					// Item is non-scalar (array or object), encode its numeric index.
					buildParams(
						prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]",
						v,
						traditional,
						add
					);
				}
			} );
	
		} else if ( !traditional && jQuery.type( obj ) === "object" ) {
	
			// Serialize object item.
			for ( name in obj ) {
				buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
			}
	
		} else {
	
			// Serialize scalar item.
			add( prefix, obj );
		}
	}
	
	// Serialize an array of form elements or a set of
	// key/values into a query string
	jQuery.param = function( a, traditional ) {
		var prefix,
			s = [],
			add = function( key, value ) {
	
				// If value is a function, invoke it and return its value
				value = jQuery.isFunction( value ) ? value() : ( value == null ? "" : value );
				s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value );
			};
	
		// Set traditional to true for jQuery <= 1.3.2 behavior.
		if ( traditional === undefined ) {
			traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;
		}
	
		// If an array was passed in, assume that it is an array of form elements.
		if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
	
			// Serialize the form elements
			jQuery.each( a, function() {
				add( this.name, this.value );
			} );
	
		} else {
	
			// If traditional, encode the "old" way (the way 1.3.2 or older
			// did it), otherwise encode params recursively.
			for ( prefix in a ) {
				buildParams( prefix, a[ prefix ], traditional, add );
			}
		}
	
		// Return the resulting serialization
		return s.join( "&" ).replace( r20, "+" );
	};
	
	jQuery.fn.extend( {
		serialize: function() {
			return jQuery.param( this.serializeArray() );
		},
		serializeArray: function() {
			return this.map( function() {
	
				// Can add propHook for "elements" to filter or add form elements
				var elements = jQuery.prop( this, "elements" );
				return elements ? jQuery.makeArray( elements ) : this;
			} )
			.filter( function() {
				var type = this.type;
	
				// Use .is( ":disabled" ) so that fieldset[disabled] works
				return this.name && !jQuery( this ).is( ":disabled" ) &&
					rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
					( this.checked || !rcheckableType.test( type ) );
			} )
			.map( function( i, elem ) {
				var val = jQuery( this ).val();
	
				return val == null ?
					null :
					jQuery.isArray( val ) ?
						jQuery.map( val, function( val ) {
							return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
						} ) :
						{ name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
			} ).get();
		}
	} );
	
	
	jQuery.ajaxSettings.xhr = function() {
		try {
			return new window.XMLHttpRequest();
		} catch ( e ) {}
	};
	
	var xhrSuccessStatus = {
	
			// File protocol always yields status code 0, assume 200
			0: 200,
	
			// Support: IE9
			// #1450: sometimes IE returns 1223 when it should be 204
			1223: 204
		},
		xhrSupported = jQuery.ajaxSettings.xhr();
	
	support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
	support.ajax = xhrSupported = !!xhrSupported;
	
	jQuery.ajaxTransport( function( options ) {
		var callback, errorCallback;
	
		// Cross domain only allowed if supported through XMLHttpRequest
		if ( support.cors || xhrSupported && !options.crossDomain ) {
			return {
				send: function( headers, complete ) {
					var i,
						xhr = options.xhr();
	
					xhr.open(
						options.type,
						options.url,
						options.async,
						options.username,
						options.password
					);
	
					// Apply custom fields if provided
					if ( options.xhrFields ) {
						for ( i in options.xhrFields ) {
							xhr[ i ] = options.xhrFields[ i ];
						}
					}
	
					// Override mime type if needed
					if ( options.mimeType && xhr.overrideMimeType ) {
						xhr.overrideMimeType( options.mimeType );
					}
	
					// X-Requested-With header
					// For cross-domain requests, seeing as conditions for a preflight are
					// akin to a jigsaw puzzle, we simply never set it to be sure.
					// (it can always be set on a per-request basis or even using ajaxSetup)
					// For same-domain requests, won't change header if already provided.
					if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) {
						headers[ "X-Requested-With" ] = "XMLHttpRequest";
					}
	
					// Set headers
					for ( i in headers ) {
						xhr.setRequestHeader( i, headers[ i ] );
					}
	
					// Callback
					callback = function( type ) {
						return function() {
							if ( callback ) {
								callback = errorCallback = xhr.onload =
									xhr.onerror = xhr.onabort = xhr.onreadystatechange = null;
	
								if ( type === "abort" ) {
									xhr.abort();
								} else if ( type === "error" ) {
	
									// Support: IE9
									// On a manual native abort, IE9 throws
									// errors on any property access that is not readyState
									if ( typeof xhr.status !== "number" ) {
										complete( 0, "error" );
									} else {
										complete(
	
											// File: protocol always yields status 0; see #8605, #14207
											xhr.status,
											xhr.statusText
										);
									}
								} else {
									complete(
										xhrSuccessStatus[ xhr.status ] || xhr.status,
										xhr.statusText,
	
										// Support: IE9 only
										// IE9 has no XHR2 but throws on binary (trac-11426)
										// For XHR2 non-text, let the caller handle it (gh-2498)
										( xhr.responseType || "text" ) !== "text"  ||
										typeof xhr.responseText !== "string" ?
											{ binary: xhr.response } :
											{ text: xhr.responseText },
										xhr.getAllResponseHeaders()
									);
								}
							}
						};
					};
	
					// Listen to events
					xhr.onload = callback();
					errorCallback = xhr.onerror = callback( "error" );
	
					// Support: IE9
					// Use onreadystatechange to replace onabort
					// to handle uncaught aborts
					if ( xhr.onabort !== undefined ) {
						xhr.onabort = errorCallback;
					} else {
						xhr.onreadystatechange = function() {
	
							// Check readyState before timeout as it changes
							if ( xhr.readyState === 4 ) {
	
								// Allow onerror to be called first,
								// but that will not handle a native abort
								// Also, save errorCallback to a variable
								// as xhr.onerror cannot be accessed
								window.setTimeout( function() {
									if ( callback ) {
										errorCallback();
									}
								} );
							}
						};
					}
	
					// Create the abort callback
					callback = callback( "abort" );
	
					try {
	
						// Do send the request (this may raise an exception)
						xhr.send( options.hasContent && options.data || null );
					} catch ( e ) {
	
						// #14683: Only rethrow if this hasn't been notified as an error yet
						if ( callback ) {
							throw e;
						}
					}
				},
	
				abort: function() {
					if ( callback ) {
						callback();
					}
				}
			};
		}
	} );
	
	
	
	
	// Install script dataType
	jQuery.ajaxSetup( {
		accepts: {
			script: "text/javascript, application/javascript, " +
				"application/ecmascript, application/x-ecmascript"
		},
		contents: {
			script: /\b(?:java|ecma)script\b/
		},
		converters: {
			"text script": function( text ) {
				jQuery.globalEval( text );
				return text;
			}
		}
	} );
	
	// Handle cache's special case and crossDomain
	jQuery.ajaxPrefilter( "script", function( s ) {
		if ( s.cache === undefined ) {
			s.cache = false;
		}
		if ( s.crossDomain ) {
			s.type = "GET";
		}
	} );
	
	// Bind script tag hack transport
	jQuery.ajaxTransport( "script", function( s ) {
	
		// This transport only deals with cross domain requests
		if ( s.crossDomain ) {
			var script, callback;
			return {
				send: function( _, complete ) {
					script = jQuery( "<script>" ).prop( {
						charset: s.scriptCharset,
						src: s.url
					} ).on(
						"load error",
						callback = function( evt ) {
							script.remove();
							callback = null;
							if ( evt ) {
								complete( evt.type === "error" ? 404 : 200, evt.type );
							}
						}
					);
	
					// Use native DOM manipulation to avoid our domManip AJAX trickery
					document.head.appendChild( script[ 0 ] );
				},
				abort: function() {
					if ( callback ) {
						callback();
					}
				}
			};
		}
	} );
	
	
	
	
	var oldCallbacks = [],
		rjsonp = /(=)\?(?=&|$)|\?\?/;
	
	// Default jsonp settings
	jQuery.ajaxSetup( {
		jsonp: "callback",
		jsonpCallback: function() {
			var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) );
			this[ callback ] = true;
			return callback;
		}
	} );
	
	// Detect, normalize options and install callbacks for jsonp requests
	jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
	
		var callbackName, overwritten, responseContainer,
			jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?
				"url" :
				typeof s.data === "string" &&
					( s.contentType || "" )
						.indexOf( "application/x-www-form-urlencoded" ) === 0 &&
					rjsonp.test( s.data ) && "data"
			);
	
		// Handle iff the expected data type is "jsonp" or we have a parameter to set
		if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {
	
			// Get callback name, remembering preexisting value associated with it
			callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?
				s.jsonpCallback() :
				s.jsonpCallback;
	
			// Insert callback into url or form data
			if ( jsonProp ) {
				s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );
			} else if ( s.jsonp !== false ) {
				s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
			}
	
			// Use data converter to retrieve json after script execution
			s.converters[ "script json" ] = function() {
				if ( !responseContainer ) {
					jQuery.error( callbackName + " was not called" );
				}
				return responseContainer[ 0 ];
			};
	
			// Force json dataType
			s.dataTypes[ 0 ] = "json";
	
			// Install callback
			overwritten = window[ callbackName ];
			window[ callbackName ] = function() {
				responseContainer = arguments;
			};
	
			// Clean-up function (fires after converters)
			jqXHR.always( function() {
	
				// If previous value didn't exist - remove it
				if ( overwritten === undefined ) {
					jQuery( window ).removeProp( callbackName );
	
				// Otherwise restore preexisting value
				} else {
					window[ callbackName ] = overwritten;
				}
	
				// Save back as free
				if ( s[ callbackName ] ) {
	
					// Make sure that re-using the options doesn't screw things around
					s.jsonpCallback = originalSettings.jsonpCallback;
	
					// Save the callback name for future use
					oldCallbacks.push( callbackName );
				}
	
				// Call if it was a function and we have a response
				if ( responseContainer && jQuery.isFunction( overwritten ) ) {
					overwritten( responseContainer[ 0 ] );
				}
	
				responseContainer = overwritten = undefined;
			} );
	
			// Delegate to script
			return "script";
		}
	} );
	
	
	
	
	// Argument "data" should be string of html
	// context (optional): If specified, the fragment will be created in this context,
	// defaults to document
	// keepScripts (optional): If true, will include scripts passed in the html string
	jQuery.parseHTML = function( data, context, keepScripts ) {
		if ( !data || typeof data !== "string" ) {
			return null;
		}
		if ( typeof context === "boolean" ) {
			keepScripts = context;
			context = false;
		}
		context = context || document;
	
		var parsed = rsingleTag.exec( data ),
			scripts = !keepScripts && [];
	
		// Single tag
		if ( parsed ) {
			return [ context.createElement( parsed[ 1 ] ) ];
		}
	
		parsed = buildFragment( [ data ], context, scripts );
	
		if ( scripts && scripts.length ) {
			jQuery( scripts ).remove();
		}
	
		return jQuery.merge( [], parsed.childNodes );
	};
	
	
	// Keep a copy of the old load method
	var _load = jQuery.fn.load;
	
	/**
	 * Load a url into a page
	 */
	jQuery.fn.load = function( url, params, callback ) {
		if ( typeof url !== "string" && _load ) {
			return _load.apply( this, arguments );
		}
	
		var selector, type, response,
			self = this,
			off = url.indexOf( " " );
	
		if ( off > -1 ) {
			selector = jQuery.trim( url.slice( off ) );
			url = url.slice( 0, off );
		}
	
		// If it's a function
		if ( jQuery.isFunction( params ) ) {
	
			// We assume that it's the callback
			callback = params;
			params = undefined;
	
		// Otherwise, build a param string
		} else if ( params && typeof params === "object" ) {
			type = "POST";
		}
	
		// If we have elements to modify, make the request
		if ( self.length > 0 ) {
			jQuery.ajax( {
				url: url,
	
				// If "type" variable is undefined, then "GET" method will be used.
				// Make value of this field explicit since
				// user can override it through ajaxSetup method
				type: type || "GET",
				dataType: "html",
				data: params
			} ).done( function( responseText ) {
	
				// Save response for use in complete callback
				response = arguments;
	
				self.html( selector ?
	
					// If a selector was specified, locate the right elements in a dummy div
					// Exclude scripts to avoid IE 'Permission Denied' errors
					jQuery( "<div>" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :
	
					// Otherwise use the full result
					responseText );
	
			// If the request succeeds, this function gets "data", "status", "jqXHR"
			// but they are ignored because response was set above.
			// If it fails, this function gets "jqXHR", "status", "error"
			} ).always( callback && function( jqXHR, status ) {
				self.each( function() {
					callback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );
				} );
			} );
		}
	
		return this;
	};
	
	
	
	
	// Attach a bunch of functions for handling common AJAX events
	jQuery.each( [
		"ajaxStart",
		"ajaxStop",
		"ajaxComplete",
		"ajaxError",
		"ajaxSuccess",
		"ajaxSend"
	], function( i, type ) {
		jQuery.fn[ type ] = function( fn ) {
			return this.on( type, fn );
		};
	} );
	
	
	
	
	jQuery.expr.filters.animated = function( elem ) {
		return jQuery.grep( jQuery.timers, function( fn ) {
			return elem === fn.elem;
		} ).length;
	};
	
	
	
	
	/**
	 * Gets a window from an element
	 */
	function getWindow( elem ) {
		return jQuery.isWindow( elem ) ? elem : elem.nodeType === 9 && elem.defaultView;
	}
	
	jQuery.offset = {
		setOffset: function( elem, options, i ) {
			var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,
				position = jQuery.css( elem, "position" ),
				curElem = jQuery( elem ),
				props = {};
	
			// Set position first, in-case top/left are set even on static elem
			if ( position === "static" ) {
				elem.style.position = "relative";
			}
	
			curOffset = curElem.offset();
			curCSSTop = jQuery.css( elem, "top" );
			curCSSLeft = jQuery.css( elem, "left" );
			calculatePosition = ( position === "absolute" || position === "fixed" ) &&
				( curCSSTop + curCSSLeft ).indexOf( "auto" ) > -1;
	
			// Need to be able to calculate position if either
			// top or left is auto and position is either absolute or fixed
			if ( calculatePosition ) {
				curPosition = curElem.position();
				curTop = curPosition.top;
				curLeft = curPosition.left;
	
			} else {
				curTop = parseFloat( curCSSTop ) || 0;
				curLeft = parseFloat( curCSSLeft ) || 0;
			}
	
			if ( jQuery.isFunction( options ) ) {
	
				// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)
				options = options.call( elem, i, jQuery.extend( {}, curOffset ) );
			}
	
			if ( options.top != null ) {
				props.top = ( options.top - curOffset.top ) + curTop;
			}
			if ( options.left != null ) {
				props.left = ( options.left - curOffset.left ) + curLeft;
			}
	
			if ( "using" in options ) {
				options.using.call( elem, props );
	
			} else {
				curElem.css( props );
			}
		}
	};
	
	jQuery.fn.extend( {
		offset: function( options ) {
			if ( arguments.length ) {
				return options === undefined ?
					this :
					this.each( function( i ) {
						jQuery.offset.setOffset( this, options, i );
					} );
			}
	
			var docElem, win,
				elem = this[ 0 ],
				box = { top: 0, left: 0 },
				doc = elem && elem.ownerDocument;
	
			if ( !doc ) {
				return;
			}
	
			docElem = doc.documentElement;
	
			// Make sure it's not a disconnected DOM node
			if ( !jQuery.contains( docElem, elem ) ) {
				return box;
			}
	
			box = elem.getBoundingClientRect();
			win = getWindow( doc );
			return {
				top: box.top + win.pageYOffset - docElem.clientTop,
				left: box.left + win.pageXOffset - docElem.clientLeft
			};
		},
	
		position: function() {
			if ( !this[ 0 ] ) {
				return;
			}
	
			var offsetParent, offset,
				elem = this[ 0 ],
				parentOffset = { top: 0, left: 0 };
	
			// Fixed elements are offset from window (parentOffset = {top:0, left: 0},
			// because it is its only offset parent
			if ( jQuery.css( elem, "position" ) === "fixed" ) {
	
				// Assume getBoundingClientRect is there when computed position is fixed
				offset = elem.getBoundingClientRect();
	
			} else {
	
				// Get *real* offsetParent
				offsetParent = this.offsetParent();
	
				// Get correct offsets
				offset = this.offset();
				if ( !jQuery.nodeName( offsetParent[ 0 ], "html" ) ) {
					parentOffset = offsetParent.offset();
				}
	
				// Add offsetParent borders
				parentOffset.top += jQuery.css( offsetParent[ 0 ], "borderTopWidth", true );
				parentOffset.left += jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true );
			}
	
			// Subtract parent offsets and element margins
			return {
				top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ),
				left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true )
			};
		},
	
		// This method will return documentElement in the following cases:
		// 1) For the element inside the iframe without offsetParent, this method will return
		//    documentElement of the parent window
		// 2) For the hidden or detached element
		// 3) For body or html element, i.e. in case of the html node - it will return itself
		//
		// but those exceptions were never presented as a real life use-cases
		// and might be considered as more preferable results.
		//
		// This logic, however, is not guaranteed and can change at any point in the future
		offsetParent: function() {
			return this.map( function() {
				var offsetParent = this.offsetParent;
	
				while ( offsetParent && jQuery.css( offsetParent, "position" ) === "static" ) {
					offsetParent = offsetParent.offsetParent;
				}
	
				return offsetParent || documentElement;
			} );
		}
	} );
	
	// Create scrollLeft and scrollTop methods
	jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) {
		var top = "pageYOffset" === prop;
	
		jQuery.fn[ method ] = function( val ) {
			return access( this, function( elem, method, val ) {
				var win = getWindow( elem );
	
				if ( val === undefined ) {
					return win ? win[ prop ] : elem[ method ];
				}
	
				if ( win ) {
					win.scrollTo(
						!top ? val : win.pageXOffset,
						top ? val : win.pageYOffset
					);
	
				} else {
					elem[ method ] = val;
				}
			}, method, val, arguments.length );
		};
	} );
	
	// Support: Safari<7-8+, Chrome<37-44+
	// Add the top/left cssHooks using jQuery.fn.position
	// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
	// Blink bug: https://code.google.com/p/chromium/issues/detail?id=229280
	// getComputedStyle returns percent when specified for top/left/bottom/right;
	// rather than make the css module depend on the offset module, just check for it here
	jQuery.each( [ "top", "left" ], function( i, prop ) {
		jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,
			function( elem, computed ) {
				if ( computed ) {
					computed = curCSS( elem, prop );
	
					// If curCSS returns percentage, fallback to offset
					return rnumnonpx.test( computed ) ?
						jQuery( elem ).position()[ prop ] + "px" :
						computed;
				}
			}
		);
	} );
	
	
	// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
	jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
		jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name },
			function( defaultExtra, funcName ) {
	
			// Margin is only for outerHeight, outerWidth
			jQuery.fn[ funcName ] = function( margin, value ) {
				var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
					extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );
	
				return access( this, function( elem, type, value ) {
					var doc;
	
					if ( jQuery.isWindow( elem ) ) {
	
						// As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there
						// isn't a whole lot we can do. See pull request at this URL for discussion:
						// https://github.com/jquery/jquery/pull/764
						return elem.document.documentElement[ "client" + name ];
					}
	
					// Get document width or height
					if ( elem.nodeType === 9 ) {
						doc = elem.documentElement;
	
						// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],
						// whichever is greatest
						return Math.max(
							elem.body[ "scroll" + name ], doc[ "scroll" + name ],
							elem.body[ "offset" + name ], doc[ "offset" + name ],
							doc[ "client" + name ]
						);
					}
	
					return value === undefined ?
	
						// Get width or height on the element, requesting but not forcing parseFloat
						jQuery.css( elem, type, extra ) :
	
						// Set width or height on the element
						jQuery.style( elem, type, value, extra );
				}, type, chainable ? margin : undefined, chainable, null );
			};
		} );
	} );
	
	
	jQuery.fn.extend( {
	
		bind: function( types, data, fn ) {
			return this.on( types, null, data, fn );
		},
		unbind: function( types, fn ) {
			return this.off( types, null, fn );
		},
	
		delegate: function( selector, types, data, fn ) {
			return this.on( types, selector, data, fn );
		},
		undelegate: function( selector, types, fn ) {
	
			// ( namespace ) or ( selector, types [, fn] )
			return arguments.length === 1 ?
				this.off( selector, "**" ) :
				this.off( types, selector || "**", fn );
		},
		size: function() {
			return this.length;
		}
	} );
	
	jQuery.fn.andSelf = jQuery.fn.addBack;
	
	
	
	
	// Register as a named AMD module, since jQuery can be concatenated with other
	// files that may use define, but not via a proper concatenation script that
	// understands anonymous AMD modules. A named AMD is safest and most robust
	// way to register. Lowercase jquery is used because AMD module names are
	// derived from file names, and jQuery is normally delivered in a lowercase
	// file name. Do this after creating the global so that if an AMD module wants
	// to call noConflict to hide this version of jQuery, it will work.
	
	// Note that for maximum portability, libraries that are not jQuery should
	// declare themselves as anonymous modules, and avoid setting a global if an
	// AMD loader is present. jQuery is a special case. For more information, see
	// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon
	
	if ( true ) {
		!(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = function() {
			return jQuery;
		}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
	}
	
	
	
	var
	
		// Map over jQuery in case of overwrite
		_jQuery = window.jQuery,
	
		// Map over the $ in case of overwrite
		_$ = window.$;
	
	jQuery.noConflict = function( deep ) {
		if ( window.$ === jQuery ) {
			window.$ = _$;
		}
	
		if ( deep && window.jQuery === jQuery ) {
			window.jQuery = _jQuery;
		}
	
		return jQuery;
	};
	
	// Expose jQuery and $ identifiers, even in AMD
	// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)
	// and CommonJS for browser emulators (#13566)
	if ( !noGlobal ) {
		window.jQuery = window.$ = jQuery;
	}
	
	return jQuery;
	}));


/***/ }),
/* 13 */
/***/ (function(module, exports) {

	module.exports = function (exec) {
	  try {
	    return !!exec();
	  } catch (e) {
	    return true;
	  }
	};


/***/ }),
/* 14 */
/***/ (function(module, exports) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	exports.abstract = abstract;
	exports.getUid = getUid;
	/**
	 * @module ol/util
	 */
	/**
	 * @return {?} Any return.
	 */
	function abstract() {
	  return (/** @type {?} */function () {
	      throw new Error('Unimplemented abstract method.');
	    }()
	  );
	}
	/**
	 * Counter for getUid.
	 * @type {number}
	 * @private
	 */
	var uidCounter_ = 0;
	/**
	 * Gets a unique ID for an object. This mutates the object so that further calls
	 * with the same object as a parameter returns the same value. Unique IDs are generated
	 * as a strictly increasing sequence. Adapted from goog.getUid.
	 *
	 * @param {Object} obj The object to get the unique ID for.
	 * @return {string} The unique ID for the object.
	 * @api
	 */
	function getUid(obj) {
	  return obj.ol_uid || (obj.ol_uid = String(++uidCounter_));
	}
	/**
	 * OpenLayers version.
	 * @type {string}
	 */
	var VERSION = exports.VERSION = '6.1.1';
	//# sourceMappingURL=util.js.map

/***/ }),
/* 15 */
/***/ (function(module, exports) {

	module.exports = function (it) {
	  return typeof it === 'object' ? it !== null : typeof it === 'function';
	};


/***/ }),
/* 16 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	exports.Projection = exports.METERS_PER_UNIT = undefined;
	exports.cloneTransform = cloneTransform;
	exports.identityTransform = identityTransform;
	exports.addProjection = addProjection;
	exports.addProjections = addProjections;
	exports.get = get;
	exports.getPointResolution = getPointResolution;
	exports.addEquivalentProjections = addEquivalentProjections;
	exports.addEquivalentTransforms = addEquivalentTransforms;
	exports.clearAllProjections = clearAllProjections;
	exports.createProjection = createProjection;
	exports.createTransformFromCoordinateTransform = createTransformFromCoordinateTransform;
	exports.addCoordinateTransforms = addCoordinateTransforms;
	exports.fromLonLat = fromLonLat;
	exports.toLonLat = toLonLat;
	exports.equivalent = equivalent;
	exports.getTransformFromProjections = getTransformFromProjections;
	exports.getTransform = getTransform;
	exports.transform = transform;
	exports.transformExtent = transformExtent;
	exports.transformWithProjections = transformWithProjections;
	exports.setUserProjection = setUserProjection;
	exports.clearUserProjection = clearUserProjection;
	exports.getUserProjection = getUserProjection;
	exports.useGeographic = useGeographic;
	exports.toUserCoordinate = toUserCoordinate;
	exports.fromUserCoordinate = fromUserCoordinate;
	exports.toUserExtent = toUserExtent;
	exports.fromUserExtent = fromUserExtent;
	exports.addCommon = addCommon;
	
	var _sphere = __webpack_require__(298);
	
	var _extent = __webpack_require__(4);
	
	var _math = __webpack_require__(19);
	
	var _epsg = __webpack_require__(623);
	
	var _epsg2 = __webpack_require__(624);
	
	var _Projection = __webpack_require__(176);
	
	var _Projection2 = _interopRequireDefault(_Projection);
	
	var _Units = __webpack_require__(65);
	
	var _Units2 = _interopRequireDefault(_Units);
	
	var _transforms = __webpack_require__(626);
	
	var _projections = __webpack_require__(625);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	/**
	 * A projection as {@link module:ol/proj/Projection}, SRS identifier
	 * string or undefined.
	 * @typedef {Projection|string|undefined} ProjectionLike
	 * @api
	 */
	/**
	 * A transform function accepts an array of input coordinate values, an optional
	 * output array, and an optional dimension (default should be 2).  The function
	 * transforms the input coordinate values, populates the output array, and
	 * returns the output array.
	 *
	 * @typedef {function(Array<number>, Array<number>=, number=): Array<number>} TransformFunction
	 * @api
	 */
	exports.METERS_PER_UNIT = _Units.METERS_PER_UNIT; /**
	                                                   * @module ol/proj
	                                                   */
	/**
	 * The ol/proj module stores:
	 * * a list of {@link module:ol/proj/Projection}
	 * objects, one for each projection supported by the application
	 * * a list of transform functions needed to convert coordinates in one projection
	 * into another.
	 *
	 * The static functions are the methods used to maintain these.
	 * Each transform function can handle not only simple coordinate pairs, but also
	 * large arrays of coordinates such as vector geometries.
	 *
	 * When loaded, the library adds projection objects for EPSG:4326 (WGS84
	 * geographic coordinates) and EPSG:3857 (Web or Spherical Mercator, as used
	 * for example by Bing Maps or OpenStreetMap), together with the relevant
	 * transform functions.
	 *
	 * Additional transforms may be added by using the http://proj4js.org/
	 * library (version 2.2 or later). You can use the full build supplied by
	 * Proj4js, or create a custom build to support those projections you need; see
	 * the Proj4js website for how to do this. You also need the Proj4js definitions
	 * for the required projections. These definitions can be obtained from
	 * https://epsg.io/, and are a JS function, so can be loaded in a script
	 * tag (as in the examples) or pasted into your application.
	 *
	 * After all required projection definitions are added to proj4's registry (by
	 * using `proj4.defs()`), simply call `register(proj4)` from the `ol/proj/proj4`
	 * package. Existing transforms are not changed by this function. See
	 * examples/wms-image-custom-proj for an example of this.
	 *
	 * Additional projection definitions can be registered with `proj4.defs()` any
	 * time. Just make sure to call `register(proj4)` again; for example, with user-supplied data where you don't
	 * know in advance what projections are needed, you can initially load minimal
	 * support and then load whichever are requested.
	 *
	 * Note that Proj4js does not support projection extents. If you want to add
	 * one for creating default tile grids, you can add it after the Projection
	 * object has been created with `setExtent`, for example,
	 * `get('EPSG:1234').setExtent(extent)`.
	 *
	 * In addition to Proj4js support, any transform functions can be added with
	 * {@link module:ol/proj~addCoordinateTransforms}. To use this, you must first create
	 * a {@link module:ol/proj/Projection} object for the new projection and add it with
	 * {@link module:ol/proj~addProjection}. You can then add the forward and inverse
	 * functions with {@link module:ol/proj~addCoordinateTransforms}. See
	 * examples/wms-custom-proj for an example of this.
	 *
	 * Note that if no transforms are needed and you only need to define the
	 * projection, just add a {@link module:ol/proj/Projection} with
	 * {@link module:ol/proj~addProjection}. See examples/wms-no-proj for an example of
	 * this.
	 */
	
	exports.Projection = _Projection2.default;
	/**
	 * @param {Array<number>} input Input coordinate array.
	 * @param {Array<number>=} opt_output Output array of coordinate values.
	 * @param {number=} opt_dimension Dimension.
	 * @return {Array<number>} Output coordinate array (new array, same coordinate
	 *     values).
	 */
	
	function cloneTransform(input, opt_output, opt_dimension) {
	    var output;
	    if (opt_output !== undefined) {
	        for (var i = 0, ii = input.length; i < ii; ++i) {
	            opt_output[i] = input[i];
	        }
	        output = opt_output;
	    } else {
	        output = input.slice();
	    }
	    return output;
	}
	/**
	 * @param {Array<number>} input Input coordinate array.
	 * @param {Array<number>=} opt_output Output array of coordinate values.
	 * @param {number=} opt_dimension Dimension.
	 * @return {Array<number>} Input coordinate array (same array as input).
	 */
	function identityTransform(input, opt_output, opt_dimension) {
	    if (opt_output !== undefined && input !== opt_output) {
	        for (var i = 0, ii = input.length; i < ii; ++i) {
	            opt_output[i] = input[i];
	        }
	        input = opt_output;
	    }
	    return input;
	}
	/**
	 * Add a Projection object to the list of supported projections that can be
	 * looked up by their code.
	 *
	 * @param {Projection} projection Projection instance.
	 * @api
	 */
	function addProjection(projection) {
	    (0, _projections.add)(projection.getCode(), projection);
	    (0, _transforms.add)(projection, projection, cloneTransform);
	}
	/**
	 * @param {Array<Projection>} projections Projections.
	 */
	function addProjections(projections) {
	    projections.forEach(addProjection);
	}
	/**
	 * Fetches a Projection object for the code specified.
	 *
	 * @param {ProjectionLike} projectionLike Either a code string which is
	 *     a combination of authority and identifier such as "EPSG:4326", or an
	 *     existing projection object, or undefined.
	 * @return {Projection} Projection object, or null if not in list.
	 * @api
	 */
	function get(projectionLike) {
	    return typeof projectionLike === 'string' ? (0, _projections.get)( /** @type {string} */projectionLike) : /** @type {Projection} */projectionLike || null;
	}
	/**
	 * Get the resolution of the point in degrees or distance units.
	 * For projections with degrees as the unit this will simply return the
	 * provided resolution. For other projections the point resolution is
	 * by default estimated by transforming the 'point' pixel to EPSG:4326,
	 * measuring its width and height on the normal sphere,
	 * and taking the average of the width and height.
	 * A custom function can be provided for a specific projection, either
	 * by setting the `getPointResolution` option in the
	 * {@link module:ol/proj/Projection~Projection} constructor or by using
	 * {@link module:ol/proj/Projection~Projection#setGetPointResolution} to change an existing
	 * projection object.
	 * @param {ProjectionLike} projection The projection.
	 * @param {number} resolution Nominal resolution in projection units.
	 * @param {import("./coordinate.js").Coordinate} point Point to find adjusted resolution at.
	 * @param {Units=} opt_units Units to get the point resolution in.
	 * Default is the projection's units.
	 * @return {number} Point resolution.
	 * @api
	 */
	function getPointResolution(projection, resolution, point, opt_units) {
	    projection = get(projection);
	    var pointResolution;
	    var getter = projection.getPointResolutionFunc();
	    if (getter) {
	        pointResolution = getter(resolution, point);
	        if (opt_units && opt_units !== projection.getUnits()) {
	            var metersPerUnit = projection.getMetersPerUnit();
	            if (metersPerUnit) {
	                pointResolution = pointResolution * metersPerUnit / _Units.METERS_PER_UNIT[opt_units];
	            }
	        }
	    } else {
	        var units = projection.getUnits();
	        if (units == _Units2.default.DEGREES && !opt_units || opt_units == _Units2.default.DEGREES) {
	            pointResolution = resolution;
	        } else {
	            // Estimate point resolution by transforming the center pixel to EPSG:4326,
	            // measuring its width and height on the normal sphere, and taking the
	            // average of the width and height.
	            var toEPSG4326_1 = getTransformFromProjections(projection, get('EPSG:4326'));
	            var vertices = [point[0] - resolution / 2, point[1], point[0] + resolution / 2, point[1], point[0], point[1] - resolution / 2, point[0], point[1] + resolution / 2];
	            vertices = toEPSG4326_1(vertices, vertices, 2);
	            var width = (0, _sphere.getDistance)(vertices.slice(0, 2), vertices.slice(2, 4));
	            var height = (0, _sphere.getDistance)(vertices.slice(4, 6), vertices.slice(6, 8));
	            pointResolution = (width + height) / 2;
	            var metersPerUnit = opt_units ? _Units.METERS_PER_UNIT[opt_units] : projection.getMetersPerUnit();
	            if (metersPerUnit !== undefined) {
	                pointResolution /= metersPerUnit;
	            }
	        }
	    }
	    return pointResolution;
	}
	/**
	 * Registers transformation functions that don't alter coordinates. Those allow
	 * to transform between projections with equal meaning.
	 *
	 * @param {Array<Projection>} projections Projections.
	 * @api
	 */
	function addEquivalentProjections(projections) {
	    addProjections(projections);
	    projections.forEach(function (source) {
	        projections.forEach(function (destination) {
	            if (source !== destination) {
	                (0, _transforms.add)(source, destination, cloneTransform);
	            }
	        });
	    });
	}
	/**
	 * Registers transformation functions to convert coordinates in any projection
	 * in projection1 to any projection in projection2.
	 *
	 * @param {Array<Projection>} projections1 Projections with equal
	 *     meaning.
	 * @param {Array<Projection>} projections2 Projections with equal
	 *     meaning.
	 * @param {TransformFunction} forwardTransform Transformation from any
	 *   projection in projection1 to any projection in projection2.
	 * @param {TransformFunction} inverseTransform Transform from any projection
	 *   in projection2 to any projection in projection1..
	 */
	function addEquivalentTransforms(projections1, projections2, forwardTransform, inverseTransform) {
	    projections1.forEach(function (projection1) {
	        projections2.forEach(function (projection2) {
	            (0, _transforms.add)(projection1, projection2, forwardTransform);
	            (0, _transforms.add)(projection2, projection1, inverseTransform);
	        });
	    });
	}
	/**
	 * Clear all cached projections and transforms.
	 */
	function clearAllProjections() {
	    (0, _projections.clear)();
	    (0, _transforms.clear)();
	}
	/**
	 * @param {Projection|string|undefined} projection Projection.
	 * @param {string} defaultCode Default code.
	 * @return {Projection} Projection.
	 */
	function createProjection(projection, defaultCode) {
	    if (!projection) {
	        return get(defaultCode);
	    } else if (typeof projection === 'string') {
	        return get(projection);
	    } else {
	        return (
	            /** @type {Projection} */projection
	        );
	    }
	}
	/**
	 * Creates a {@link module:ol/proj~TransformFunction} from a simple 2D coordinate transform
	 * function.
	 * @param {function(import("./coordinate.js").Coordinate): import("./coordinate.js").Coordinate} coordTransform Coordinate
	 *     transform.
	 * @return {TransformFunction} Transform function.
	 */
	function createTransformFromCoordinateTransform(coordTransform) {
	    return (
	        /**
	         * @param {Array<number>} input Input.
	         * @param {Array<number>=} opt_output Output.
	         * @param {number=} opt_dimension Dimension.
	         * @return {Array<number>} Output.
	         */
	        function (input, opt_output, opt_dimension) {
	            var length = input.length;
	            var dimension = opt_dimension !== undefined ? opt_dimension : 2;
	            var output = opt_output !== undefined ? opt_output : new Array(length);
	            for (var i = 0; i < length; i += dimension) {
	                var point = coordTransform([input[i], input[i + 1]]);
	                output[i] = point[0];
	                output[i + 1] = point[1];
	                for (var j = dimension - 1; j >= 2; --j) {
	                    output[i + j] = input[i + j];
	                }
	            }
	            return output;
	        }
	    );
	}
	/**
	 * Registers coordinate transform functions to convert coordinates between the
	 * source projection and the destination projection.
	 * The forward and inverse functions convert coordinate pairs; this function
	 * converts these into the functions used internally which also handle
	 * extents and coordinate arrays.
	 *
	 * @param {ProjectionLike} source Source projection.
	 * @param {ProjectionLike} destination Destination projection.
	 * @param {function(import("./coordinate.js").Coordinate): import("./coordinate.js").Coordinate} forward The forward transform
	 *     function (that is, from the source projection to the destination
	 *     projection) that takes a {@link module:ol/coordinate~Coordinate} as argument and returns
	 *     the transformed {@link module:ol/coordinate~Coordinate}.
	 * @param {function(import("./coordinate.js").Coordinate): import("./coordinate.js").Coordinate} inverse The inverse transform
	 *     function (that is, from the destination projection to the source
	 *     projection) that takes a {@link module:ol/coordinate~Coordinate} as argument and returns
	 *     the transformed {@link module:ol/coordinate~Coordinate}.
	 * @api
	 */
	function addCoordinateTransforms(source, destination, forward, inverse) {
	    var sourceProj = get(source);
	    var destProj = get(destination);
	    (0, _transforms.add)(sourceProj, destProj, createTransformFromCoordinateTransform(forward));
	    (0, _transforms.add)(destProj, sourceProj, createTransformFromCoordinateTransform(inverse));
	}
	/**
	 * Transforms a coordinate from longitude/latitude to a different projection.
	 * @param {import("./coordinate.js").Coordinate} coordinate Coordinate as longitude and latitude, i.e.
	 *     an array with longitude as 1st and latitude as 2nd element.
	 * @param {ProjectionLike=} opt_projection Target projection. The
	 *     default is Web Mercator, i.e. 'EPSG:3857'.
	 * @return {import("./coordinate.js").Coordinate} Coordinate projected to the target projection.
	 * @api
	 */
	function fromLonLat(coordinate, opt_projection) {
	    return transform(coordinate, 'EPSG:4326', opt_projection !== undefined ? opt_projection : 'EPSG:3857');
	}
	/**
	 * Transforms a coordinate to longitude/latitude.
	 * @param {import("./coordinate.js").Coordinate} coordinate Projected coordinate.
	 * @param {ProjectionLike=} opt_projection Projection of the coordinate.
	 *     The default is Web Mercator, i.e. 'EPSG:3857'.
	 * @return {import("./coordinate.js").Coordinate} Coordinate as longitude and latitude, i.e. an array
	 *     with longitude as 1st and latitude as 2nd element.
	 * @api
	 */
	function toLonLat(coordinate, opt_projection) {
	    var lonLat = transform(coordinate, opt_projection !== undefined ? opt_projection : 'EPSG:3857', 'EPSG:4326');
	    var lon = lonLat[0];
	    if (lon < -180 || lon > 180) {
	        lonLat[0] = (0, _math.modulo)(lon + 180, 360) - 180;
	    }
	    return lonLat;
	}
	/**
	 * Checks if two projections are the same, that is every coordinate in one
	 * projection does represent the same geographic point as the same coordinate in
	 * the other projection.
	 *
	 * @param {Projection} projection1 Projection 1.
	 * @param {Projection} projection2 Projection 2.
	 * @return {boolean} Equivalent.
	 * @api
	 */
	function equivalent(projection1, projection2) {
	    if (projection1 === projection2) {
	        return true;
	    }
	    var equalUnits = projection1.getUnits() === projection2.getUnits();
	    if (projection1.getCode() === projection2.getCode()) {
	        return equalUnits;
	    } else {
	        var transformFunc = getTransformFromProjections(projection1, projection2);
	        return transformFunc === cloneTransform && equalUnits;
	    }
	}
	/**
	 * Searches in the list of transform functions for the function for converting
	 * coordinates from the source projection to the destination projection.
	 *
	 * @param {Projection} sourceProjection Source Projection object.
	 * @param {Projection} destinationProjection Destination Projection
	 *     object.
	 * @return {TransformFunction} Transform function.
	 */
	function getTransformFromProjections(sourceProjection, destinationProjection) {
	    var sourceCode = sourceProjection.getCode();
	    var destinationCode = destinationProjection.getCode();
	    var transformFunc = (0, _transforms.get)(sourceCode, destinationCode);
	    if (!transformFunc) {
	        transformFunc = identityTransform;
	    }
	    return transformFunc;
	}
	/**
	 * Given the projection-like objects, searches for a transformation
	 * function to convert a coordinates array from the source projection to the
	 * destination projection.
	 *
	 * @param {ProjectionLike} source Source.
	 * @param {ProjectionLike} destination Destination.
	 * @return {TransformFunction} Transform function.
	 * @api
	 */
	function getTransform(source, destination) {
	    var sourceProjection = get(source);
	    var destinationProjection = get(destination);
	    return getTransformFromProjections(sourceProjection, destinationProjection);
	}
	/**
	 * Transforms a coordinate from source projection to destination projection.
	 * This returns a new coordinate (and does not modify the original).
	 *
	 * See {@link module:ol/proj~transformExtent} for extent transformation.
	 * See the transform method of {@link module:ol/geom/Geometry~Geometry} and its
	 * subclasses for geometry transforms.
	 *
	 * @param {import("./coordinate.js").Coordinate} coordinate Coordinate.
	 * @param {ProjectionLike} source Source projection-like.
	 * @param {ProjectionLike} destination Destination projection-like.
	 * @return {import("./coordinate.js").Coordinate} Coordinate.
	 * @api
	 */
	function transform(coordinate, source, destination) {
	    var transformFunc = getTransform(source, destination);
	    return transformFunc(coordinate, undefined, coordinate.length);
	}
	/**
	 * Transforms an extent from source projection to destination projection.  This
	 * returns a new extent (and does not modify the original).
	 *
	 * @param {import("./extent.js").Extent} extent The extent to transform.
	 * @param {ProjectionLike} source Source projection-like.
	 * @param {ProjectionLike} destination Destination projection-like.
	 * @return {import("./extent.js").Extent} The transformed extent.
	 * @api
	 */
	function transformExtent(extent, source, destination) {
	    var transformFunc = getTransform(source, destination);
	    return (0, _extent.applyTransform)(extent, transformFunc);
	}
	/**
	 * Transforms the given point to the destination projection.
	 *
	 * @param {import("./coordinate.js").Coordinate} point Point.
	 * @param {Projection} sourceProjection Source projection.
	 * @param {Projection} destinationProjection Destination projection.
	 * @return {import("./coordinate.js").Coordinate} Point.
	 */
	function transformWithProjections(point, sourceProjection, destinationProjection) {
	    var transformFunc = getTransformFromProjections(sourceProjection, destinationProjection);
	    return transformFunc(point);
	}
	/**
	 * @type {?Projection}
	 */
	var userProjection = null;
	/**
	 * Set the projection for coordinates supplied from and returned by API methods.
	 * Note that this method is not yet a part of the stable API.  Support for user
	 * projections is not yet complete and should be considered experimental.
	 * @param {ProjectionLike} projection The user projection.
	 */
	function setUserProjection(projection) {
	    userProjection = get(projection);
	}
	/**
	 * Clear the user projection if set.  Note that this method is not yet a part of
	 * the stable API.  Support for user projections is not yet complete and should
	 * be considered experimental.
	 */
	function clearUserProjection() {
	    userProjection = null;
	}
	/**
	 * Get the projection for coordinates supplied from and returned by API methods.
	 * Note that this method is not yet a part of the stable API.  Support for user
	 * projections is not yet complete and should be considered experimental.
	 * @returns {?Projection} The user projection (or null if not set).
	 */
	function getUserProjection() {
	    return userProjection;
	}
	/**
	 * Use geographic coordinates (WGS-84 datum) in API methods.  Note that this
	 * method is not yet a part of the stable API.  Support for user projections is
	 * not yet complete and should be considered experimental.
	 */
	function useGeographic() {
	    setUserProjection('EPSG:4326');
	}
	/**
	 * Return a coordinate transformed into the user projection.  If no user projection
	 * is set, the original coordinate is returned.
	 * @param {Array<number>} coordinate Input coordinate.
	 * @param {ProjectionLike} sourceProjection The input coordinate projection.
	 * @returns {Array<number>} The input coordinate in the user projection.
	 */
	function toUserCoordinate(coordinate, sourceProjection) {
	    if (!userProjection) {
	        return coordinate;
	    }
	    return transform(coordinate, sourceProjection, userProjection);
	}
	/**
	 * Return a coordinate transformed from the user projection.  If no user projection
	 * is set, the original coordinate is returned.
	 * @param {Array<number>} coordinate Input coordinate.
	 * @param {ProjectionLike} destProjection The destination projection.
	 * @returns {Array<number>} The input coordinate transformed.
	 */
	function fromUserCoordinate(coordinate, destProjection) {
	    if (!userProjection) {
	        return coordinate;
	    }
	    return transform(coordinate, userProjection, destProjection);
	}
	/**
	 * Return an extent transformed into the user projection.  If no user projection
	 * is set, the original extent is returned.
	 * @param {import("./extent.js").Extent} extent Input extent.
	 * @param {ProjectionLike} sourceProjection The input extent projection.
	 * @returns {import("./extent.js").Extent} The input extent in the user projection.
	 */
	function toUserExtent(extent, sourceProjection) {
	    if (!userProjection) {
	        return extent;
	    }
	    return transformExtent(extent, sourceProjection, userProjection);
	}
	/**
	 * Return an extent transformed from the user projection.  If no user projection
	 * is set, the original extent is returned.
	 * @param {import("./extent.js").Extent} extent Input extent.
	 * @param {ProjectionLike} destProjection The destination projection.
	 * @returns {import("./extent.js").Extent} The input extent transformed.
	 */
	function fromUserExtent(extent, destProjection) {
	    if (!userProjection) {
	        return extent;
	    }
	    return transformExtent(extent, userProjection, destProjection);
	}
	/**
	 * Add transforms to and from EPSG:4326 and EPSG:3857.  This function is called
	 * by when this module is executed and should only need to be called again after
	 * `clearAllProjections()` is called (e.g. in tests).
	 */
	function addCommon() {
	    // Add transformations that don't alter coordinates to convert within set of
	    // projections with equal meaning.
	    addEquivalentProjections(_epsg.PROJECTIONS);
	    addEquivalentProjections(_epsg2.PROJECTIONS);
	    // Add transformations to convert EPSG:4326 like coordinates to EPSG:3857 like
	    // coordinates and back.
	    addEquivalentTransforms(_epsg2.PROJECTIONS, _epsg.PROJECTIONS, _epsg.fromEPSG4326, _epsg.toEPSG4326);
	}
	addCommon();
	//# sourceMappingURL=proj.js.map

/***/ }),
/* 17 */
/***/ (function(module, exports, __webpack_require__) {

	/* WEBPACK VAR INJECTION */(function(global, process, Promise) {"use strict";
	var es5 = __webpack_require__(89);
	var canEvaluate = typeof navigator == "undefined";
	
	var errorObj = {e: {}};
	var tryCatchTarget;
	var globalObject = typeof self !== "undefined" ? self :
	    typeof window !== "undefined" ? window :
	    typeof global !== "undefined" ? global :
	    this !== undefined ? this : null;
	
	function tryCatcher() {
	    try {
	        var target = tryCatchTarget;
	        tryCatchTarget = null;
	        return target.apply(this, arguments);
	    } catch (e) {
	        errorObj.e = e;
	        return errorObj;
	    }
	}
	function tryCatch(fn) {
	    tryCatchTarget = fn;
	    return tryCatcher;
	}
	
	var inherits = function(Child, Parent) {
	    var hasProp = {}.hasOwnProperty;
	
	    function T() {
	        this.constructor = Child;
	        this.constructor$ = Parent;
	        for (var propertyName in Parent.prototype) {
	            if (hasProp.call(Parent.prototype, propertyName) &&
	                propertyName.charAt(propertyName.length-1) !== "$"
	           ) {
	                this[propertyName + "$"] = Parent.prototype[propertyName];
	            }
	        }
	    }
	    T.prototype = Parent.prototype;
	    Child.prototype = new T();
	    return Child.prototype;
	};
	
	
	function isPrimitive(val) {
	    return val == null || val === true || val === false ||
	        typeof val === "string" || typeof val === "number";
	
	}
	
	function isObject(value) {
	    return typeof value === "function" ||
	           typeof value === "object" && value !== null;
	}
	
	function maybeWrapAsError(maybeError) {
	    if (!isPrimitive(maybeError)) return maybeError;
	
	    return new Error(safeToString(maybeError));
	}
	
	function withAppended(target, appendee) {
	    var len = target.length;
	    var ret = new Array(len + 1);
	    var i;
	    for (i = 0; i < len; ++i) {
	        ret[i] = target[i];
	    }
	    ret[i] = appendee;
	    return ret;
	}
	
	function getDataPropertyOrDefault(obj, key, defaultValue) {
	    if (es5.isES5) {
	        var desc = Object.getOwnPropertyDescriptor(obj, key);
	
	        if (desc != null) {
	            return desc.get == null && desc.set == null
	                    ? desc.value
	                    : defaultValue;
	        }
	    } else {
	        return {}.hasOwnProperty.call(obj, key) ? obj[key] : undefined;
	    }
	}
	
	function notEnumerableProp(obj, name, value) {
	    if (isPrimitive(obj)) return obj;
	    var descriptor = {
	        value: value,
	        configurable: true,
	        enumerable: false,
	        writable: true
	    };
	    es5.defineProperty(obj, name, descriptor);
	    return obj;
	}
	
	function thrower(r) {
	    throw r;
	}
	
	var inheritedDataKeys = (function() {
	    var excludedPrototypes = [
	        Array.prototype,
	        Object.prototype,
	        Function.prototype
	    ];
	
	    var isExcludedProto = function(val) {
	        for (var i = 0; i < excludedPrototypes.length; ++i) {
	            if (excludedPrototypes[i] === val) {
	                return true;
	            }
	        }
	        return false;
	    };
	
	    if (es5.isES5) {
	        var getKeys = Object.getOwnPropertyNames;
	        return function(obj) {
	            var ret = [];
	            var visitedKeys = Object.create(null);
	            while (obj != null && !isExcludedProto(obj)) {
	                var keys;
	                try {
	                    keys = getKeys(obj);
	                } catch (e) {
	                    return ret;
	                }
	                for (var i = 0; i < keys.length; ++i) {
	                    var key = keys[i];
	                    if (visitedKeys[key]) continue;
	                    visitedKeys[key] = true;
	                    var desc = Object.getOwnPropertyDescriptor(obj, key);
	                    if (desc != null && desc.get == null && desc.set == null) {
	                        ret.push(key);
	                    }
	                }
	                obj = es5.getPrototypeOf(obj);
	            }
	            return ret;
	        };
	    } else {
	        var hasProp = {}.hasOwnProperty;
	        return function(obj) {
	            if (isExcludedProto(obj)) return [];
	            var ret = [];
	
	            /*jshint forin:false */
	            enumeration: for (var key in obj) {
	                if (hasProp.call(obj, key)) {
	                    ret.push(key);
	                } else {
	                    for (var i = 0; i < excludedPrototypes.length; ++i) {
	                        if (hasProp.call(excludedPrototypes[i], key)) {
	                            continue enumeration;
	                        }
	                    }
	                    ret.push(key);
	                }
	            }
	            return ret;
	        };
	    }
	
	})();
	
	var thisAssignmentPattern = /this\s*\.\s*\S+\s*=/;
	function isClass(fn) {
	    try {
	        if (typeof fn === "function") {
	            var keys = es5.names(fn.prototype);
	
	            var hasMethods = es5.isES5 && keys.length > 1;
	            var hasMethodsOtherThanConstructor = keys.length > 0 &&
	                !(keys.length === 1 && keys[0] === "constructor");
	            var hasThisAssignmentAndStaticMethods =
	                thisAssignmentPattern.test(fn + "") && es5.names(fn).length > 0;
	
	            if (hasMethods || hasMethodsOtherThanConstructor ||
	                hasThisAssignmentAndStaticMethods) {
	                return true;
	            }
	        }
	        return false;
	    } catch (e) {
	        return false;
	    }
	}
	
	function toFastProperties(obj) {
	    /*jshint -W027,-W055,-W031*/
	    function FakeConstructor() {}
	    FakeConstructor.prototype = obj;
	    var receiver = new FakeConstructor();
	    function ic() {
	        return typeof receiver.foo;
	    }
	    ic();
	    ic();
	    return obj;
	    eval(obj);
	}
	
	var rident = /^[a-z$_][a-z$_0-9]*$/i;
	function isIdentifier(str) {
	    return rident.test(str);
	}
	
	function filledRange(count, prefix, suffix) {
	    var ret = new Array(count);
	    for(var i = 0; i < count; ++i) {
	        ret[i] = prefix + i + suffix;
	    }
	    return ret;
	}
	
	function safeToString(obj) {
	    try {
	        return obj + "";
	    } catch (e) {
	        return "[no string representation]";
	    }
	}
	
	function isError(obj) {
	    return obj instanceof Error ||
	        (obj !== null &&
	           typeof obj === "object" &&
	           typeof obj.message === "string" &&
	           typeof obj.name === "string");
	}
	
	function markAsOriginatingFromRejection(e) {
	    try {
	        notEnumerableProp(e, "isOperational", true);
	    }
	    catch(ignore) {}
	}
	
	function originatesFromRejection(e) {
	    if (e == null) return false;
	    return ((e instanceof Error["__BluebirdErrorTypes__"].OperationalError) ||
	        e["isOperational"] === true);
	}
	
	function canAttachTrace(obj) {
	    return isError(obj) && es5.propertyIsWritable(obj, "stack");
	}
	
	var ensureErrorObject = (function() {
	    if (!("stack" in new Error())) {
	        return function(value) {
	            if (canAttachTrace(value)) return value;
	            try {throw new Error(safeToString(value));}
	            catch(err) {return err;}
	        };
	    } else {
	        return function(value) {
	            if (canAttachTrace(value)) return value;
	            return new Error(safeToString(value));
	        };
	    }
	})();
	
	function classString(obj) {
	    return {}.toString.call(obj);
	}
	
	function copyDescriptors(from, to, filter) {
	    var keys = es5.names(from);
	    for (var i = 0; i < keys.length; ++i) {
	        var key = keys[i];
	        if (filter(key)) {
	            try {
	                es5.defineProperty(to, key, es5.getDescriptor(from, key));
	            } catch (ignore) {}
	        }
	    }
	}
	
	var asArray = function(v) {
	    if (es5.isArray(v)) {
	        return v;
	    }
	    return null;
	};
	
	if (typeof Symbol !== "undefined" && Symbol.iterator) {
	    var ArrayFrom = typeof Array.from === "function" ? function(v) {
	        return Array.from(v);
	    } : function(v) {
	        var ret = [];
	        var it = v[Symbol.iterator]();
	        var itResult;
	        while (!((itResult = it.next()).done)) {
	            ret.push(itResult.value);
	        }
	        return ret;
	    };
	
	    asArray = function(v) {
	        if (es5.isArray(v)) {
	            return v;
	        } else if (v != null && typeof v[Symbol.iterator] === "function") {
	            return ArrayFrom(v);
	        }
	        return null;
	    };
	}
	
	var isNode = typeof process !== "undefined" &&
	        classString(process).toLowerCase() === "[object process]";
	
	var hasEnvVariables = typeof process !== "undefined" &&
	    typeof process.env !== "undefined";
	
	function env(key) {
	    return hasEnvVariables ? process.env[key] : undefined;
	}
	
	function getNativePromise() {
	    if (typeof Promise === "function") {
	        try {
	            var promise = new Promise(function(){});
	            if ({}.toString.call(promise) === "[object Promise]") {
	                return Promise;
	            }
	        } catch (e) {}
	    }
	}
	
	function domainBind(self, cb) {
	    return self.bind(cb);
	}
	
	var ret = {
	    isClass: isClass,
	    isIdentifier: isIdentifier,
	    inheritedDataKeys: inheritedDataKeys,
	    getDataPropertyOrDefault: getDataPropertyOrDefault,
	    thrower: thrower,
	    isArray: es5.isArray,
	    asArray: asArray,
	    notEnumerableProp: notEnumerableProp,
	    isPrimitive: isPrimitive,
	    isObject: isObject,
	    isError: isError,
	    canEvaluate: canEvaluate,
	    errorObj: errorObj,
	    tryCatch: tryCatch,
	    inherits: inherits,
	    withAppended: withAppended,
	    maybeWrapAsError: maybeWrapAsError,
	    toFastProperties: toFastProperties,
	    filledRange: filledRange,
	    toString: safeToString,
	    canAttachTrace: canAttachTrace,
	    ensureErrorObject: ensureErrorObject,
	    originatesFromRejection: originatesFromRejection,
	    markAsOriginatingFromRejection: markAsOriginatingFromRejection,
	    classString: classString,
	    copyDescriptors: copyDescriptors,
	    hasDevTools: typeof chrome !== "undefined" && chrome &&
	                 typeof chrome.loadTimes === "function",
	    isNode: isNode,
	    hasEnvVariables: hasEnvVariables,
	    env: env,
	    global: globalObject,
	    getNativePromise: getNativePromise,
	    domainBind: domainBind
	};
	ret.isRecentNode = ret.isNode && (function() {
	    var version;
	    if (process.versions && process.versions.node) {    
	        version = process.versions.node.split(".").map(Number);
	    } else if (process.version) {
	        version = process.version.split(".").map(Number);
	    }
	    return (version[0] === 0 && version[1] > 10) || (version[0] > 0);
	})();
	
	if (ret.isNode) ret.toFastProperties(process);
	
	try {throw new Error(); } catch (e) {ret.lastLineError = e;}
	module.exports = ret;
	
	/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }()), __webpack_require__(116), __webpack_require__(27)))

/***/ }),
/* 18 */
/***/ (function(module, exports) {

	"use strict";
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	exports.binarySearch = binarySearch;
	exports.numberSafeCompareFunction = numberSafeCompareFunction;
	exports.includes = includes;
	exports.linearFindNearest = linearFindNearest;
	exports.reverseSubArray = reverseSubArray;
	exports.extend = extend;
	exports.remove = remove;
	exports.find = find;
	exports.equals = equals;
	exports.stableSort = stableSort;
	exports.findIndex = findIndex;
	exports.isSorted = isSorted;
	/**
	 * @module ol/array
	 */
	/**
	 * Performs a binary search on the provided sorted list and returns the index of the item if found. If it can't be found it'll return -1.
	 * https://github.com/darkskyapp/binary-search
	 *
	 * @param {Array<*>} haystack Items to search through.
	 * @param {*} needle The item to look for.
	 * @param {Function=} opt_comparator Comparator function.
	 * @return {number} The index of the item if found, -1 if not.
	 */
	function binarySearch(haystack, needle, opt_comparator) {
	    var mid, cmp;
	    var comparator = opt_comparator || numberSafeCompareFunction;
	    var low = 0;
	    var high = haystack.length;
	    var found = false;
	    while (low < high) {
	        /* Note that "(low + high) >>> 1" may overflow, and results in a typecast
	         * to double (which gives the wrong results). */
	        mid = low + (high - low >> 1);
	        cmp = +comparator(haystack[mid], needle);
	        if (cmp < 0.0) {
	            /* Too low. */
	            low = mid + 1;
	        } else {
	            /* Key found or too high */
	            high = mid;
	            found = !cmp;
	        }
	    }
	    /* Key not found. */
	    return found ? low : ~low;
	}
	/**
	 * Compare function for array sort that is safe for numbers.
	 * @param {*} a The first object to be compared.
	 * @param {*} b The second object to be compared.
	 * @return {number} A negative number, zero, or a positive number as the first
	 *     argument is less than, equal to, or greater than the second.
	 */
	function numberSafeCompareFunction(a, b) {
	    return a > b ? 1 : a < b ? -1 : 0;
	}
	/**
	 * Whether the array contains the given object.
	 * @param {Array<*>} arr The array to test for the presence of the element.
	 * @param {*} obj The object for which to test.
	 * @return {boolean} The object is in the array.
	 */
	function includes(arr, obj) {
	    return arr.indexOf(obj) >= 0;
	}
	/**
	 * @param {Array<number>} arr Array.
	 * @param {number} target Target.
	 * @param {number} direction 0 means return the nearest, > 0
	 *    means return the largest nearest, < 0 means return the
	 *    smallest nearest.
	 * @return {number} Index.
	 */
	function linearFindNearest(arr, target, direction) {
	    var n = arr.length;
	    if (arr[0] <= target) {
	        return 0;
	    } else if (target <= arr[n - 1]) {
	        return n - 1;
	    } else {
	        var i = void 0;
	        if (direction > 0) {
	            for (i = 1; i < n; ++i) {
	                if (arr[i] < target) {
	                    return i - 1;
	                }
	            }
	        } else if (direction < 0) {
	            for (i = 1; i < n; ++i) {
	                if (arr[i] <= target) {
	                    return i;
	                }
	            }
	        } else {
	            for (i = 1; i < n; ++i) {
	                if (arr[i] == target) {
	                    return i;
	                } else if (arr[i] < target) {
	                    if (arr[i - 1] - target < target - arr[i]) {
	                        return i - 1;
	                    } else {
	                        return i;
	                    }
	                }
	            }
	        }
	        return n - 1;
	    }
	}
	/**
	 * @param {Array<*>} arr Array.
	 * @param {number} begin Begin index.
	 * @param {number} end End index.
	 */
	function reverseSubArray(arr, begin, end) {
	    while (begin < end) {
	        var tmp = arr[begin];
	        arr[begin] = arr[end];
	        arr[end] = tmp;
	        ++begin;
	        --end;
	    }
	}
	/**
	 * @param {Array<VALUE>} arr The array to modify.
	 * @param {!Array<VALUE>|VALUE} data The elements or arrays of elements to add to arr.
	 * @template VALUE
	 */
	function extend(arr, data) {
	    var extension = Array.isArray(data) ? data : [data];
	    var length = extension.length;
	    for (var i = 0; i < length; i++) {
	        arr[arr.length] = extension[i];
	    }
	}
	/**
	 * @param {Array<VALUE>} arr The array to modify.
	 * @param {VALUE} obj The element to remove.
	 * @template VALUE
	 * @return {boolean} If the element was removed.
	 */
	function remove(arr, obj) {
	    var i = arr.indexOf(obj);
	    var found = i > -1;
	    if (found) {
	        arr.splice(i, 1);
	    }
	    return found;
	}
	/**
	 * @param {Array<VALUE>} arr The array to search in.
	 * @param {function(VALUE, number, ?) : boolean} func The function to compare.
	 * @template VALUE
	 * @return {VALUE|null} The element found or null.
	 */
	function find(arr, func) {
	    var length = arr.length >>> 0;
	    var value;
	    for (var i = 0; i < length; i++) {
	        value = arr[i];
	        if (func(value, i, arr)) {
	            return value;
	        }
	    }
	    return null;
	}
	/**
	 * @param {Array|Uint8ClampedArray} arr1 The first array to compare.
	 * @param {Array|Uint8ClampedArray} arr2 The second array to compare.
	 * @return {boolean} Whether the two arrays are equal.
	 */
	function equals(arr1, arr2) {
	    var len1 = arr1.length;
	    if (len1 !== arr2.length) {
	        return false;
	    }
	    for (var i = 0; i < len1; i++) {
	        if (arr1[i] !== arr2[i]) {
	            return false;
	        }
	    }
	    return true;
	}
	/**
	 * Sort the passed array such that the relative order of equal elements is preverved.
	 * See https://en.wikipedia.org/wiki/Sorting_algorithm#Stability for details.
	 * @param {Array<*>} arr The array to sort (modifies original).
	 * @param {!function(*, *): number} compareFnc Comparison function.
	 * @api
	 */
	function stableSort(arr, compareFnc) {
	    var length = arr.length;
	    var tmp = Array(arr.length);
	    var i;
	    for (i = 0; i < length; i++) {
	        tmp[i] = { index: i, value: arr[i] };
	    }
	    tmp.sort(function (a, b) {
	        return compareFnc(a.value, b.value) || a.index - b.index;
	    });
	    for (i = 0; i < arr.length; i++) {
	        arr[i] = tmp[i].value;
	    }
	}
	/**
	 * @param {Array<*>} arr The array to search in.
	 * @param {Function} func Comparison function.
	 * @return {number} Return index.
	 */
	function findIndex(arr, func) {
	    var index;
	    var found = !arr.every(function (el, idx) {
	        index = idx;
	        return !func(el, idx, arr);
	    });
	    return found ? index : -1;
	}
	/**
	 * @param {Array<*>} arr The array to test.
	 * @param {Function=} opt_func Comparison function.
	 * @param {boolean=} opt_strict Strictly sorted (default false).
	 * @return {boolean} Return index.
	 */
	function isSorted(arr, opt_func, opt_strict) {
	    var compare = opt_func || numberSafeCompareFunction;
	    return arr.every(function (currentVal, index) {
	        if (index === 0) {
	            return true;
	        }
	        var res = compare(arr[index - 1], currentVal);
	        return !(res > 0 || opt_strict && res === 0);
	    });
	}
	//# sourceMappingURL=array.js.map

/***/ }),
/* 19 */
/***/ (function(module, exports) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	exports.clamp = clamp;
	exports.squaredSegmentDistance = squaredSegmentDistance;
	exports.squaredDistance = squaredDistance;
	exports.solveLinearSystem = solveLinearSystem;
	exports.toDegrees = toDegrees;
	exports.toRadians = toRadians;
	exports.modulo = modulo;
	exports.lerp = lerp;
	/**
	 * @module ol/math
	 */
	/**
	 * Takes a number and clamps it to within the provided bounds.
	 * @param {number} value The input number.
	 * @param {number} min The minimum value to return.
	 * @param {number} max The maximum value to return.
	 * @return {number} The input number if it is within bounds, or the nearest
	 *     number within the bounds.
	 */
	function clamp(value, min, max) {
	    return Math.min(Math.max(value, min), max);
	}
	/**
	 * Return the hyperbolic cosine of a given number. The method will use the
	 * native `Math.cosh` function if it is available, otherwise the hyperbolic
	 * cosine will be calculated via the reference implementation of the Mozilla
	 * developer network.
	 *
	 * @param {number} x X.
	 * @return {number} Hyperbolic cosine of x.
	 */
	var cosh = exports.cosh = function () {
	    // Wrapped in a iife, to save the overhead of checking for the native
	    // implementation on every invocation.
	    var cosh;
	    if ('cosh' in Math) {
	        // The environment supports the native Math.cosh function, use it…
	        cosh = Math.cosh;
	    } else {
	        // … else, use the reference implementation of MDN:
	        cosh = function cosh(x) {
	            var y = /** @type {Math} */Math.exp(x);
	            return (y + 1 / y) / 2;
	        };
	    }
	    return cosh;
	}();
	/**
	 * Returns the square of the closest distance between the point (x, y) and the
	 * line segment (x1, y1) to (x2, y2).
	 * @param {number} x X.
	 * @param {number} y Y.
	 * @param {number} x1 X1.
	 * @param {number} y1 Y1.
	 * @param {number} x2 X2.
	 * @param {number} y2 Y2.
	 * @return {number} Squared distance.
	 */
	function squaredSegmentDistance(x, y, x1, y1, x2, y2) {
	    var dx = x2 - x1;
	    var dy = y2 - y1;
	    if (dx !== 0 || dy !== 0) {
	        var t = ((x - x1) * dx + (y - y1) * dy) / (dx * dx + dy * dy);
	        if (t > 1) {
	            x1 = x2;
	            y1 = y2;
	        } else if (t > 0) {
	            x1 += dx * t;
	            y1 += dy * t;
	        }
	    }
	    return squaredDistance(x, y, x1, y1);
	}
	/**
	 * Returns the square of the distance between the points (x1, y1) and (x2, y2).
	 * @param {number} x1 X1.
	 * @param {number} y1 Y1.
	 * @param {number} x2 X2.
	 * @param {number} y2 Y2.
	 * @return {number} Squared distance.
	 */
	function squaredDistance(x1, y1, x2, y2) {
	    var dx = x2 - x1;
	    var dy = y2 - y1;
	    return dx * dx + dy * dy;
	}
	/**
	 * Solves system of linear equations using Gaussian elimination method.
	 *
	 * @param {Array<Array<number>>} mat Augmented matrix (n x n + 1 column)
	 *                                     in row-major order.
	 * @return {Array<number>} The resulting vector.
	 */
	function solveLinearSystem(mat) {
	    var n = mat.length;
	    for (var i = 0; i < n; i++) {
	        // Find max in the i-th column (ignoring i - 1 first rows)
	        var maxRow = i;
	        var maxEl = Math.abs(mat[i][i]);
	        for (var r = i + 1; r < n; r++) {
	            var absValue = Math.abs(mat[r][i]);
	            if (absValue > maxEl) {
	                maxEl = absValue;
	                maxRow = r;
	            }
	        }
	        if (maxEl === 0) {
	            return null; // matrix is singular
	        }
	        // Swap max row with i-th (current) row
	        var tmp = mat[maxRow];
	        mat[maxRow] = mat[i];
	        mat[i] = tmp;
	        // Subtract the i-th row to make all the remaining rows 0 in the i-th column
	        for (var j = i + 1; j < n; j++) {
	            var coef = -mat[j][i] / mat[i][i];
	            for (var k = i; k < n + 1; k++) {
	                if (i == k) {
	                    mat[j][k] = 0;
	                } else {
	                    mat[j][k] += coef * mat[i][k];
	                }
	            }
	        }
	    }
	    // Solve Ax=b for upper triangular matrix A (mat)
	    var x = new Array(n);
	    for (var l = n - 1; l >= 0; l--) {
	        x[l] = mat[l][n] / mat[l][l];
	        for (var m = l - 1; m >= 0; m--) {
	            mat[m][n] -= mat[m][l] * x[l];
	        }
	    }
	    return x;
	}
	/**
	 * Converts radians to to degrees.
	 *
	 * @param {number} angleInRadians Angle in radians.
	 * @return {number} Angle in degrees.
	 */
	function toDegrees(angleInRadians) {
	    return angleInRadians * 180 / Math.PI;
	}
	/**
	 * Converts degrees to radians.
	 *
	 * @param {number} angleInDegrees Angle in degrees.
	 * @return {number} Angle in radians.
	 */
	function toRadians(angleInDegrees) {
	    return angleInDegrees * Math.PI / 180;
	}
	/**
	 * Returns the modulo of a / b, depending on the sign of b.
	 *
	 * @param {number} a Dividend.
	 * @param {number} b Divisor.
	 * @return {number} Modulo.
	 */
	function modulo(a, b) {
	    var r = a % b;
	    return r * b < 0 ? r + b : r;
	}
	/**
	 * Calculates the linearly interpolated value of x between a and b.
	 *
	 * @param {number} a Number
	 * @param {number} b Number
	 * @param {number} x Value to be interpolated.
	 * @return {number} Interpolated value.
	 */
	function lerp(a, b, x) {
	    return a + x * (b - a);
	}
	//# sourceMappingURL=math.js.map

/***/ }),
/* 20 */
/***/ (function(module, exports, __webpack_require__) {

	var store = __webpack_require__(132)('wks');
	var uid = __webpack_require__(98);
	var Symbol = __webpack_require__(9).Symbol;
	var USE_SYMBOL = typeof Symbol == 'function';
	
	var $exports = module.exports = function (name) {
	  return store[name] || (store[name] =
	    USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));
	};
	
	$exports.store = store;


/***/ }),
/* 21 */
/***/ (function(module, exports, __webpack_require__) {

	// 7.1.15 ToLength
	var toInteger = __webpack_require__(54);
	var min = Math.min;
	module.exports = function (it) {
	  return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991
	};


/***/ }),
/* 22 */
/***/ (function(module, exports) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	/**
	 * @module ol/geom/GeometryType
	 */
	/**
	 * The geometry type. One of `'Point'`, `'LineString'`, `'LinearRing'`,
	 * `'Polygon'`, `'MultiPoint'`, `'MultiLineString'`, `'MultiPolygon'`,
	 * `'GeometryCollection'`, `'Circle'`.
	 * @enum {string}
	 */
	exports.default = {
	  POINT: 'Point',
	  LINE_STRING: 'LineString',
	  LINEAR_RING: 'LinearRing',
	  POLYGON: 'Polygon',
	  MULTI_POINT: 'MultiPoint',
	  MULTI_LINE_STRING: 'MultiLineString',
	  MULTI_POLYGON: 'MultiPolygon',
	  GEOMETRY_COLLECTION: 'GeometryCollection',
	  CIRCLE: 'Circle'
	};
	//# sourceMappingURL=GeometryType.js.map

/***/ }),
/* 23 */
/***/ (function(module, exports) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	exports.clear = clear;
	exports.isEmpty = isEmpty;
	/**
	 * @module ol/obj
	 */
	/**
	 * Polyfill for Object.assign().  Assigns enumerable and own properties from
	 * one or more source objects to a target object.
	 * See https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/assign.
	 *
	 * @param {!Object} target The target object.
	 * @param {...Object} var_sources The source object(s).
	 * @return {!Object} The modified target object.
	 */
	var assign = exports.assign = typeof Object.assign === 'function' ? Object.assign : function (target, var_sources) {
	    if (target === undefined || target === null) {
	        throw new TypeError('Cannot convert undefined or null to object');
	    }
	    var output = Object(target);
	    for (var i = 1, ii = arguments.length; i < ii; ++i) {
	        var source = arguments[i];
	        if (source !== undefined && source !== null) {
	            for (var key in source) {
	                if (source.hasOwnProperty(key)) {
	                    output[key] = source[key];
	                }
	            }
	        }
	    }
	    return output;
	};
	/**
	 * Removes all properties from an object.
	 * @param {Object} object The object to clear.
	 */
	function clear(object) {
	    for (var property in object) {
	        delete object[property];
	    }
	}
	/**
	 * Polyfill for Object.values().  Get an array of property values from an object.
	 * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/values
	 *
	 * @param {!Object<K,V>} object The object from which to get the values.
	 * @return {!Array<V>} The property values.
	 * @template K,V
	 */
	var getValues = exports.getValues = typeof Object.values === 'function' ? Object.values : function (object) {
	    var values = [];
	    for (var property in object) {
	        values.push(object[property]);
	    }
	    return values;
	};
	/**
	 * Determine if an object has any properties.
	 * @param {Object} object The object to check.
	 * @return {boolean} The object is empty.
	 */
	function isEmpty(object) {
	    var property;
	    for (property in object) {
	        return false;
	    }
	    return !property;
	}
	//# sourceMappingURL=obj.js.map

/***/ }),
/* 24 */
/***/ (function(module, exports, __webpack_require__) {

	var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/* WEBPACK VAR INJECTION */(function(global) {//     Backbone.js 1.3.3
	
	//     (c) 2010-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
	//     Backbone may be freely distributed under the MIT license.
	//     For all details and documentation:
	//     http://backbonejs.org
	
	(function(factory) {
	
	  // Establish the root object, `window` (`self`) in the browser, or `global` on the server.
	  // We use `self` instead of `window` for `WebWorker` support.
	  var root = (typeof self == 'object' && self.self === self && self) ||
	            (typeof global == 'object' && global.global === global && global);
	
	  // Set up Backbone appropriately for the environment. Start with AMD.
	  if (true) {
	    !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(33), __webpack_require__(12), exports], __WEBPACK_AMD_DEFINE_RESULT__ = function(_, $, exports) {
	      // Export global even in AMD case in case this script is loaded with
	      // others that may still expect a global Backbone.
	      root.Backbone = factory(root, exports, _, $);
	    }.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
	
	  // Next for Node.js or CommonJS. jQuery may not be needed as a module.
	  } else if (typeof exports !== 'undefined') {
	    var _ = require('underscore'), $;
	    try { $ = require('jquery'); } catch (e) {}
	    factory(root, exports, _, $);
	
	  // Finally, as a browser global.
	  } else {
	    root.Backbone = factory(root, {}, root._, (root.jQuery || root.Zepto || root.ender || root.$));
	  }
	
	})(function(root, Backbone, _, $) {
	
	  // Initial Setup
	  // -------------
	
	  // Save the previous value of the `Backbone` variable, so that it can be
	  // restored later on, if `noConflict` is used.
	  var previousBackbone = root.Backbone;
	
	  // Create a local reference to a common array method we'll want to use later.
	  var slice = Array.prototype.slice;
	
	  // Current version of the library. Keep in sync with `package.json`.
	  Backbone.VERSION = '1.3.3';
	
	  // For Backbone's purposes, jQuery, Zepto, Ender, or My Library (kidding) owns
	  // the `$` variable.
	  Backbone.$ = $;
	
	  // Runs Backbone.js in *noConflict* mode, returning the `Backbone` variable
	  // to its previous owner. Returns a reference to this Backbone object.
	  Backbone.noConflict = function() {
	    root.Backbone = previousBackbone;
	    return this;
	  };
	
	  // Turn on `emulateHTTP` to support legacy HTTP servers. Setting this option
	  // will fake `"PATCH"`, `"PUT"` and `"DELETE"` requests via the `_method` parameter and
	  // set a `X-Http-Method-Override` header.
	  Backbone.emulateHTTP = false;
	
	  // Turn on `emulateJSON` to support legacy servers that can't deal with direct
	  // `application/json` requests ... this will encode the body as
	  // `application/x-www-form-urlencoded` instead and will send the model in a
	  // form param named `model`.
	  Backbone.emulateJSON = false;
	
	  // Proxy Backbone class methods to Underscore functions, wrapping the model's
	  // `attributes` object or collection's `models` array behind the scenes.
	  //
	  // collection.filter(function(model) { return model.get('age') > 10 });
	  // collection.each(this.addView);
	  //
	  // `Function#apply` can be slow so we use the method's arg count, if we know it.
	  var addMethod = function(length, method, attribute) {
	    switch (length) {
	      case 1: return function() {
	        return _[method](this[attribute]);
	      };
	      case 2: return function(value) {
	        return _[method](this[attribute], value);
	      };
	      case 3: return function(iteratee, context) {
	        return _[method](this[attribute], cb(iteratee, this), context);
	      };
	      case 4: return function(iteratee, defaultVal, context) {
	        return _[method](this[attribute], cb(iteratee, this), defaultVal, context);
	      };
	      default: return function() {
	        var args = slice.call(arguments);
	        args.unshift(this[attribute]);
	        return _[method].apply(_, args);
	      };
	    }
	  };
	  var addUnderscoreMethods = function(Class, methods, attribute) {
	    _.each(methods, function(length, method) {
	      if (_[method]) Class.prototype[method] = addMethod(length, method, attribute);
	    });
	  };
	
	  // Support `collection.sortBy('attr')` and `collection.findWhere({id: 1})`.
	  var cb = function(iteratee, instance) {
	    if (_.isFunction(iteratee)) return iteratee;
	    if (_.isObject(iteratee) && !instance._isModel(iteratee)) return modelMatcher(iteratee);
	    if (_.isString(iteratee)) return function(model) { return model.get(iteratee); };
	    return iteratee;
	  };
	  var modelMatcher = function(attrs) {
	    var matcher = _.matches(attrs);
	    return function(model) {
	      return matcher(model.attributes);
	    };
	  };
	
	  // Backbone.Events
	  // ---------------
	
	  // A module that can be mixed in to *any object* in order to provide it with
	  // a custom event channel. You may bind a callback to an event with `on` or
	  // remove with `off`; `trigger`-ing an event fires all callbacks in
	  // succession.
	  //
	  //     var object = {};
	  //     _.extend(object, Backbone.Events);
	  //     object.on('expand', function(){ alert('expanded'); });
	  //     object.trigger('expand');
	  //
	  var Events = Backbone.Events = {};
	
	  // Regular expression used to split event strings.
	  var eventSplitter = /\s+/;
	
	  // Iterates over the standard `event, callback` (as well as the fancy multiple
	  // space-separated events `"change blur", callback` and jQuery-style event
	  // maps `{event: callback}`).
	  var eventsApi = function(iteratee, events, name, callback, opts) {
	    var i = 0, names;
	    if (name && typeof name === 'object') {
	      // Handle event maps.
	      if (callback !== void 0 && 'context' in opts && opts.context === void 0) opts.context = callback;
	      for (names = _.keys(name); i < names.length ; i++) {
	        events = eventsApi(iteratee, events, names[i], name[names[i]], opts);
	      }
	    } else if (name && eventSplitter.test(name)) {
	      // Handle space-separated event names by delegating them individually.
	      for (names = name.split(eventSplitter); i < names.length; i++) {
	        events = iteratee(events, names[i], callback, opts);
	      }
	    } else {
	      // Finally, standard events.
	      events = iteratee(events, name, callback, opts);
	    }
	    return events;
	  };
	
	  // Bind an event to a `callback` function. Passing `"all"` will bind
	  // the callback to all events fired.
	  Events.on = function(name, callback, context) {
	    return internalOn(this, name, callback, context);
	  };
	
	  // Guard the `listening` argument from the public API.
	  var internalOn = function(obj, name, callback, context, listening) {
	    obj._events = eventsApi(onApi, obj._events || {}, name, callback, {
	      context: context,
	      ctx: obj,
	      listening: listening
	    });
	
	    if (listening) {
	      var listeners = obj._listeners || (obj._listeners = {});
	      listeners[listening.id] = listening;
	    }
	
	    return obj;
	  };
	
	  // Inversion-of-control versions of `on`. Tell *this* object to listen to
	  // an event in another object... keeping track of what it's listening to
	  // for easier unbinding later.
	  Events.listenTo = function(obj, name, callback) {
	    if (!obj) return this;
	    var id = obj._listenId || (obj._listenId = _.uniqueId('l'));
	    var listeningTo = this._listeningTo || (this._listeningTo = {});
	    var listening = listeningTo[id];
	
	    // This object is not listening to any other events on `obj` yet.
	    // Setup the necessary references to track the listening callbacks.
	    if (!listening) {
	      var thisId = this._listenId || (this._listenId = _.uniqueId('l'));
	      listening = listeningTo[id] = {obj: obj, objId: id, id: thisId, listeningTo: listeningTo, count: 0};
	    }
	
	    // Bind callbacks on obj, and keep track of them on listening.
	    internalOn(obj, name, callback, this, listening);
	    return this;
	  };
	
	  // The reducing API that adds a callback to the `events` object.
	  var onApi = function(events, name, callback, options) {
	    if (callback) {
	      var handlers = events[name] || (events[name] = []);
	      var context = options.context, ctx = options.ctx, listening = options.listening;
	      if (listening) listening.count++;
	
	      handlers.push({callback: callback, context: context, ctx: context || ctx, listening: listening});
	    }
	    return events;
	  };
	
	  // Remove one or many callbacks. If `context` is null, removes all
	  // callbacks with that function. If `callback` is null, removes all
	  // callbacks for the event. If `name` is null, removes all bound
	  // callbacks for all events.
	  Events.off = function(name, callback, context) {
	    if (!this._events) return this;
	    this._events = eventsApi(offApi, this._events, name, callback, {
	      context: context,
	      listeners: this._listeners
	    });
	    return this;
	  };
	
	  // Tell this object to stop listening to either specific events ... or
	  // to every object it's currently listening to.
	  Events.stopListening = function(obj, name, callback) {
	    var listeningTo = this._listeningTo;
	    if (!listeningTo) return this;
	
	    var ids = obj ? [obj._listenId] : _.keys(listeningTo);
	
	    for (var i = 0; i < ids.length; i++) {
	      var listening = listeningTo[ids[i]];
	
	      // If listening doesn't exist, this object is not currently
	      // listening to obj. Break out early.
	      if (!listening) break;
	
	      listening.obj.off(name, callback, this);
	    }
	
	    return this;
	  };
	
	  // The reducing API that removes a callback from the `events` object.
	  var offApi = function(events, name, callback, options) {
	    if (!events) return;
	
	    var i = 0, listening;
	    var context = options.context, listeners = options.listeners;
	
	    // Delete all events listeners and "drop" events.
	    if (!name && !callback && !context) {
	      var ids = _.keys(listeners);
	      for (; i < ids.length; i++) {
	        listening = listeners[ids[i]];
	        delete listeners[listening.id];
	        delete listening.listeningTo[listening.objId];
	      }
	      return;
	    }
	
	    var names = name ? [name] : _.keys(events);
	    for (; i < names.length; i++) {
	      name = names[i];
	      var handlers = events[name];
	
	      // Bail out if there are no events stored.
	      if (!handlers) break;
	
	      // Replace events if there are any remaining.  Otherwise, clean up.
	      var remaining = [];
	      for (var j = 0; j < handlers.length; j++) {
	        var handler = handlers[j];
	        if (
	          callback && callback !== handler.callback &&
	            callback !== handler.callback._callback ||
	              context && context !== handler.context
	        ) {
	          remaining.push(handler);
	        } else {
	          listening = handler.listening;
	          if (listening && --listening.count === 0) {
	            delete listeners[listening.id];
	            delete listening.listeningTo[listening.objId];
	          }
	        }
	      }
	
	      // Update tail event if the list has any events.  Otherwise, clean up.
	      if (remaining.length) {
	        events[name] = remaining;
	      } else {
	        delete events[name];
	      }
	    }
	    return events;
	  };
	
	  // Bind an event to only be triggered a single time. After the first time
	  // the callback is invoked, its listener will be removed. If multiple events
	  // are passed in using the space-separated syntax, the handler will fire
	  // once for each event, not once for a combination of all events.
	  Events.once = function(name, callback, context) {
	    // Map the event into a `{event: once}` object.
	    var events = eventsApi(onceMap, {}, name, callback, _.bind(this.off, this));
	    if (typeof name === 'string' && context == null) callback = void 0;
	    return this.on(events, callback, context);
	  };
	
	  // Inversion-of-control versions of `once`.
	  Events.listenToOnce = function(obj, name, callback) {
	    // Map the event into a `{event: once}` object.
	    var events = eventsApi(onceMap, {}, name, callback, _.bind(this.stopListening, this, obj));
	    return this.listenTo(obj, events);
	  };
	
	  // Reduces the event callbacks into a map of `{event: onceWrapper}`.
	  // `offer` unbinds the `onceWrapper` after it has been called.
	  var onceMap = function(map, name, callback, offer) {
	    if (callback) {
	      var once = map[name] = _.once(function() {
	        offer(name, once);
	        callback.apply(this, arguments);
	      });
	      once._callback = callback;
	    }
	    return map;
	  };
	
	  // Trigger one or many events, firing all bound callbacks. Callbacks are
	  // passed the same arguments as `trigger` is, apart from the event name
	  // (unless you're listening on `"all"`, which will cause your callback to
	  // receive the true name of the event as the first argument).
	  Events.trigger = function(name) {
	    if (!this._events) return this;
	
	    var length = Math.max(0, arguments.length - 1);
	    var args = Array(length);
	    for (var i = 0; i < length; i++) args[i] = arguments[i + 1];
	
	    eventsApi(triggerApi, this._events, name, void 0, args);
	    return this;
	  };
	
	  // Handles triggering the appropriate event callbacks.
	  var triggerApi = function(objEvents, name, callback, args) {
	    if (objEvents) {
	      var events = objEvents[name];
	      var allEvents = objEvents.all;
	      if (events && allEvents) allEvents = allEvents.slice();
	      if (events) triggerEvents(events, args);
	      if (allEvents) triggerEvents(allEvents, [name].concat(args));
	    }
	    return objEvents;
	  };
	
	  // A difficult-to-believe, but optimized internal dispatch function for
	  // triggering events. Tries to keep the usual cases speedy (most internal
	  // Backbone events have 3 arguments).
	  var triggerEvents = function(events, args) {
	    var ev, i = -1, l = events.length, a1 = args[0], a2 = args[1], a3 = args[2];
	    switch (args.length) {
	      case 0: while (++i < l) (ev = events[i]).callback.call(ev.ctx); return;
	      case 1: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1); return;
	      case 2: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1, a2); return;
	      case 3: while (++i < l) (ev = events[i]).callback.call(ev.ctx, a1, a2, a3); return;
	      default: while (++i < l) (ev = events[i]).callback.apply(ev.ctx, args); return;
	    }
	  };
	
	  // Aliases for backwards compatibility.
	  Events.bind   = Events.on;
	  Events.unbind = Events.off;
	
	  // Allow the `Backbone` object to serve as a global event bus, for folks who
	  // want global "pubsub" in a convenient place.
	  _.extend(Backbone, Events);
	
	  // Backbone.Model
	  // --------------
	
	  // Backbone **Models** are the basic data object in the framework --
	  // frequently representing a row in a table in a database on your server.
	  // A discrete chunk of data and a bunch of useful, related methods for
	  // performing computations and transformations on that data.
	
	  // Create a new model with the specified attributes. A client id (`cid`)
	  // is automatically generated and assigned for you.
	  var Model = Backbone.Model = function(attributes, options) {
	    var attrs = attributes || {};
	    options || (options = {});
	    this.cid = _.uniqueId(this.cidPrefix);
	    this.attributes = {};
	    if (options.collection) this.collection = options.collection;
	    if (options.parse) attrs = this.parse(attrs, options) || {};
	    var defaults = _.result(this, 'defaults');
	    attrs = _.defaults(_.extend({}, defaults, attrs), defaults);
	    this.set(attrs, options);
	    this.changed = {};
	    this.initialize.apply(this, arguments);
	  };
	
	  // Attach all inheritable methods to the Model prototype.
	  _.extend(Model.prototype, Events, {
	
	    // A hash of attributes whose current and previous value differ.
	    changed: null,
	
	    // The value returned during the last failed validation.
	    validationError: null,
	
	    // The default name for the JSON `id` attribute is `"id"`. MongoDB and
	    // CouchDB users may want to set this to `"_id"`.
	    idAttribute: 'id',
	
	    // The prefix is used to create the client id which is used to identify models locally.
	    // You may want to override this if you're experiencing name clashes with model ids.
	    cidPrefix: 'c',
	
	    // Initialize is an empty function by default. Override it with your own
	    // initialization logic.
	    initialize: function(){},
	
	    // Return a copy of the model's `attributes` object.
	    toJSON: function(options) {
	      return _.clone(this.attributes);
	    },
	
	    // Proxy `Backbone.sync` by default -- but override this if you need
	    // custom syncing semantics for *this* particular model.
	    sync: function() {
	      return Backbone.sync.apply(this, arguments);
	    },
	
	    // Get the value of an attribute.
	    get: function(attr) {
	      return this.attributes[attr];
	    },
	
	    // Get the HTML-escaped value of an attribute.
	    escape: function(attr) {
	      return _.escape(this.get(attr));
	    },
	
	    // Returns `true` if the attribute contains a value that is not null
	    // or undefined.
	    has: function(attr) {
	      return this.get(attr) != null;
	    },
	
	    // Special-cased proxy to underscore's `_.matches` method.
	    matches: function(attrs) {
	      return !!_.iteratee(attrs, this)(this.attributes);
	    },
	
	    // Set a hash of model attributes on the object, firing `"change"`. This is
	    // the core primitive operation of a model, updating the data and notifying
	    // anyone who needs to know about the change in state. The heart of the beast.
	    set: function(key, val, options) {
	      if (key == null) return this;
	
	      // Handle both `"key", value` and `{key: value}` -style arguments.
	      var attrs;
	      if (typeof key === 'object') {
	        attrs = key;
	        options = val;
	      } else {
	        (attrs = {})[key] = val;
	      }
	
	      options || (options = {});
	
	      // Run validation.
	      if (!this._validate(attrs, options)) return false;
	
	      // Extract attributes and options.
	      var unset      = options.unset;
	      var silent     = options.silent;
	      var changes    = [];
	      var changing   = this._changing;
	      this._changing = true;
	
	      if (!changing) {
	        this._previousAttributes = _.clone(this.attributes);
	        this.changed = {};
	      }
	
	      var current = this.attributes;
	      var changed = this.changed;
	      var prev    = this._previousAttributes;
	
	      // For each `set` attribute, update or delete the current value.
	      for (var attr in attrs) {
	        val = attrs[attr];
	        if (!_.isEqual(current[attr], val)) changes.push(attr);
	        if (!_.isEqual(prev[attr], val)) {
	          changed[attr] = val;
	        } else {
	          delete changed[attr];
	        }
	        unset ? delete current[attr] : current[attr] = val;
	      }
	
	      // Update the `id`.
	      if (this.idAttribute in attrs) this.id = this.get(this.idAttribute);
	
	      // Trigger all relevant attribute changes.
	      if (!silent) {
	        if (changes.length) this._pending = options;
	        for (var i = 0; i < changes.length; i++) {
	          this.trigger('change:' + changes[i], this, current[changes[i]], options);
	        }
	      }
	
	      // You might be wondering why there's a `while` loop here. Changes can
	      // be recursively nested within `"change"` events.
	      if (changing) return this;
	      if (!silent) {
	        while (this._pending) {
	          options = this._pending;
	          this._pending = false;
	          this.trigger('change', this, options);
	        }
	      }
	      this._pending = false;
	      this._changing = false;
	      return this;
	    },
	
	    // Remove an attribute from the model, firing `"change"`. `unset` is a noop
	    // if the attribute doesn't exist.
	    unset: function(attr, options) {
	      return this.set(attr, void 0, _.extend({}, options, {unset: true}));
	    },
	
	    // Clear all attributes on the model, firing `"change"`.
	    clear: function(options) {
	      var attrs = {};
	      for (var key in this.attributes) attrs[key] = void 0;
	      return this.set(attrs, _.extend({}, options, {unset: true}));
	    },
	
	    // Determine if the model has changed since the last `"change"` event.
	    // If you specify an attribute name, determine if that attribute has changed.
	    hasChanged: function(attr) {
	      if (attr == null) return !_.isEmpty(this.changed);
	      return _.has(this.changed, attr);
	    },
	
	    // Return an object containing all the attributes that have changed, or
	    // false if there are no changed attributes. Useful for determining what
	    // parts of a view need to be updated and/or what attributes need to be
	    // persisted to the server. Unset attributes will be set to undefined.
	    // You can also pass an attributes object to diff against the model,
	    // determining if there *would be* a change.
	    changedAttributes: function(diff) {
	      if (!diff) return this.hasChanged() ? _.clone(this.changed) : false;
	      var old = this._changing ? this._previousAttributes : this.attributes;
	      var changed = {};
	      for (var attr in diff) {
	        var val = diff[attr];
	        if (_.isEqual(old[attr], val)) continue;
	        changed[attr] = val;
	      }
	      return _.size(changed) ? changed : false;
	    },
	
	    // Get the previous value of an attribute, recorded at the time the last
	    // `"change"` event was fired.
	    previous: function(attr) {
	      if (attr == null || !this._previousAttributes) return null;
	      return this._previousAttributes[attr];
	    },
	
	    // Get all of the attributes of the model at the time of the previous
	    // `"change"` event.
	    previousAttributes: function() {
	      return _.clone(this._previousAttributes);
	    },
	
	    // Fetch the model from the server, merging the response with the model's
	    // local attributes. Any changed attributes will trigger a "change" event.
	    fetch: function(options) {
	      options = _.extend({parse: true}, options);
	      var model = this;
	      var success = options.success;
	      options.success = function(resp) {
	        var serverAttrs = options.parse ? model.parse(resp, options) : resp;
	        if (!model.set(serverAttrs, options)) return false;
	        if (success) success.call(options.context, model, resp, options);
	        model.trigger('sync', model, resp, options);
	      };
	      wrapError(this, options);
	      return this.sync('read', this, options);
	    },
	
	    // Set a hash of model attributes, and sync the model to the server.
	    // If the server returns an attributes hash that differs, the model's
	    // state will be `set` again.
	    save: function(key, val, options) {
	      // Handle both `"key", value` and `{key: value}` -style arguments.
	      var attrs;
	      if (key == null || typeof key === 'object') {
	        attrs = key;
	        options = val;
	      } else {
	        (attrs = {})[key] = val;
	      }
	
	      options = _.extend({validate: true, parse: true}, options);
	      var wait = options.wait;
	
	      // If we're not waiting and attributes exist, save acts as
	      // `set(attr).save(null, opts)` with validation. Otherwise, check if
	      // the model will be valid when the attributes, if any, are set.
	      if (attrs && !wait) {
	        if (!this.set(attrs, options)) return false;
	      } else if (!this._validate(attrs, options)) {
	        return false;
	      }
	
	      // After a successful server-side save, the client is (optionally)
	      // updated with the server-side state.
	      var model = this;
	      var success = options.success;
	      var attributes = this.attributes;
	      options.success = function(resp) {
	        // Ensure attributes are restored during synchronous saves.
	        model.attributes = attributes;
	        var serverAttrs = options.parse ? model.parse(resp, options) : resp;
	        if (wait) serverAttrs = _.extend({}, attrs, serverAttrs);
	        if (serverAttrs && !model.set(serverAttrs, options)) return false;
	        if (success) success.call(options.context, model, resp, options);
	        model.trigger('sync', model, resp, options);
	      };
	      wrapError(this, options);
	
	      // Set temporary attributes if `{wait: true}` to properly find new ids.
	      if (attrs && wait) this.attributes = _.extend({}, attributes, attrs);
	
	      var method = this.isNew() ? 'create' : (options.patch ? 'patch' : 'update');
	      if (method === 'patch' && !options.attrs) options.attrs = attrs;
	      var xhr = this.sync(method, this, options);
	
	      // Restore attributes.
	      this.attributes = attributes;
	
	      return xhr;
	    },
	
	    // Destroy this model on the server if it was already persisted.
	    // Optimistically removes the model from its collection, if it has one.
	    // If `wait: true` is passed, waits for the server to respond before removal.
	    destroy: function(options) {
	      options = options ? _.clone(options) : {};
	      var model = this;
	      var success = options.success;
	      var wait = options.wait;
	
	      var destroy = function() {
	        model.stopListening();
	        model.trigger('destroy', model, model.collection, options);
	      };
	
	      options.success = function(resp) {
	        if (wait) destroy();
	        if (success) success.call(options.context, model, resp, options);
	        if (!model.isNew()) model.trigger('sync', model, resp, options);
	      };
	
	      var xhr = false;
	      if (this.isNew()) {
	        _.defer(options.success);
	      } else {
	        wrapError(this, options);
	        xhr = this.sync('delete', this, options);
	      }
	      if (!wait) destroy();
	      return xhr;
	    },
	
	    // Default URL for the model's representation on the server -- if you're
	    // using Backbone's restful methods, override this to change the endpoint
	    // that will be called.
	    url: function() {
	      var base =
	        _.result(this, 'urlRoot') ||
	        _.result(this.collection, 'url') ||
	        urlError();
	      if (this.isNew()) return base;
	      var id = this.get(this.idAttribute);
	      return base.replace(/[^\/]$/, '$&/') + encodeURIComponent(id);
	    },
	
	    // **parse** converts a response into the hash of attributes to be `set` on
	    // the model. The default implementation is just to pass the response along.
	    parse: function(resp, options) {
	      return resp;
	    },
	
	    // Create a new model with identical attributes to this one.
	    clone: function() {
	      return new this.constructor(this.attributes);
	    },
	
	    // A model is new if it has never been saved to the server, and lacks an id.
	    isNew: function() {
	      return !this.has(this.idAttribute);
	    },
	
	    // Check if the model is currently in a valid state.
	    isValid: function(options) {
	      return this._validate({}, _.extend({}, options, {validate: true}));
	    },
	
	    // Run validation against the next complete set of model attributes,
	    // returning `true` if all is well. Otherwise, fire an `"invalid"` event.
	    _validate: function(attrs, options) {
	      if (!options.validate || !this.validate) return true;
	      attrs = _.extend({}, this.attributes, attrs);
	      var error = this.validationError = this.validate(attrs, options) || null;
	      if (!error) return true;
	      this.trigger('invalid', this, error, _.extend(options, {validationError: error}));
	      return false;
	    }
	
	  });
	
	  // Underscore methods that we want to implement on the Model, mapped to the
	  // number of arguments they take.
	  var modelMethods = {keys: 1, values: 1, pairs: 1, invert: 1, pick: 0,
	      omit: 0, chain: 1, isEmpty: 1};
	
	  // Mix in each Underscore method as a proxy to `Model#attributes`.
	  addUnderscoreMethods(Model, modelMethods, 'attributes');
	
	  // Backbone.Collection
	  // -------------------
	
	  // If models tend to represent a single row of data, a Backbone Collection is
	  // more analogous to a table full of data ... or a small slice or page of that
	  // table, or a collection of rows that belong together for a particular reason
	  // -- all of the messages in this particular folder, all of the documents
	  // belonging to this particular author, and so on. Collections maintain
	  // indexes of their models, both in order, and for lookup by `id`.
	
	  // Create a new **Collection**, perhaps to contain a specific type of `model`.
	  // If a `comparator` is specified, the Collection will maintain
	  // its models in sort order, as they're added and removed.
	  var Collection = Backbone.Collection = function(models, options) {
	    options || (options = {});
	    if (options.model) this.model = options.model;
	    if (options.comparator !== void 0) this.comparator = options.comparator;
	    this._reset();
	    this.initialize.apply(this, arguments);
	    if (models) this.reset(models, _.extend({silent: true}, options));
	  };
	
	  // Default options for `Collection#set`.
	  var setOptions = {add: true, remove: true, merge: true};
	  var addOptions = {add: true, remove: false};
	
	  // Splices `insert` into `array` at index `at`.
	  var splice = function(array, insert, at) {
	    at = Math.min(Math.max(at, 0), array.length);
	    var tail = Array(array.length - at);
	    var length = insert.length;
	    var i;
	    for (i = 0; i < tail.length; i++) tail[i] = array[i + at];
	    for (i = 0; i < length; i++) array[i + at] = insert[i];
	    for (i = 0; i < tail.length; i++) array[i + length + at] = tail[i];
	  };
	
	  // Define the Collection's inheritable methods.
	  _.extend(Collection.prototype, Events, {
	
	    // The default model for a collection is just a **Backbone.Model**.
	    // This should be overridden in most cases.
	    model: Model,
	
	    // Initialize is an empty function by default. Override it with your own
	    // initialization logic.
	    initialize: function(){},
	
	    // The JSON representation of a Collection is an array of the
	    // models' attributes.
	    toJSON: function(options) {
	      return this.map(function(model) { return model.toJSON(options); });
	    },
	
	    // Proxy `Backbone.sync` by default.
	    sync: function() {
	      return Backbone.sync.apply(this, arguments);
	    },
	
	    // Add a model, or list of models to the set. `models` may be Backbone
	    // Models or raw JavaScript objects to be converted to Models, or any
	    // combination of the two.
	    add: function(models, options) {
	      return this.set(models, _.extend({merge: false}, options, addOptions));
	    },
	
	    // Remove a model, or a list of models from the set.
	    remove: function(models, options) {
	      options = _.extend({}, options);
	      var singular = !_.isArray(models);
	      models = singular ? [models] : models.slice();
	      var removed = this._removeModels(models, options);
	      if (!options.silent && removed.length) {
	        options.changes = {added: [], merged: [], removed: removed};
	        this.trigger('update', this, options);
	      }
	      return singular ? removed[0] : removed;
	    },
	
	    // Update a collection by `set`-ing a new list of models, adding new ones,
	    // removing models that are no longer present, and merging models that
	    // already exist in the collection, as necessary. Similar to **Model#set**,
	    // the core operation for updating the data contained by the collection.
	    set: function(models, options) {
	      if (models == null) return;
	
	      options = _.extend({}, setOptions, options);
	      if (options.parse && !this._isModel(models)) {
	        models = this.parse(models, options) || [];
	      }
	
	      var singular = !_.isArray(models);
	      models = singular ? [models] : models.slice();
	
	      var at = options.at;
	      if (at != null) at = +at;
	      if (at > this.length) at = this.length;
	      if (at < 0) at += this.length + 1;
	
	      var set = [];
	      var toAdd = [];
	      var toMerge = [];
	      var toRemove = [];
	      var modelMap = {};
	
	      var add = options.add;
	      var merge = options.merge;
	      var remove = options.remove;
	
	      var sort = false;
	      var sortable = this.comparator && at == null && options.sort !== false;
	      var sortAttr = _.isString(this.comparator) ? this.comparator : null;
	
	      // Turn bare objects into model references, and prevent invalid models
	      // from being added.
	      var model, i;
	      for (i = 0; i < models.length; i++) {
	        model = models[i];
	
	        // If a duplicate is found, prevent it from being added and
	        // optionally merge it into the existing model.
	        var existing = this.get(model);
	        if (existing) {
	          if (merge && model !== existing) {
	            var attrs = this._isModel(model) ? model.attributes : model;
	            if (options.parse) attrs = existing.parse(attrs, options);
	            existing.set(attrs, options);
	            toMerge.push(existing);
	            if (sortable && !sort) sort = existing.hasChanged(sortAttr);
	          }
	          if (!modelMap[existing.cid]) {
	            modelMap[existing.cid] = true;
	            set.push(existing);
	          }
	          models[i] = existing;
	
	        // If this is a new, valid model, push it to the `toAdd` list.
	        } else if (add) {
	          model = models[i] = this._prepareModel(model, options);
	          if (model) {
	            toAdd.push(model);
	            this._addReference(model, options);
	            modelMap[model.cid] = true;
	            set.push(model);
	          }
	        }
	      }
	
	      // Remove stale models.
	      if (remove) {
	        for (i = 0; i < this.length; i++) {
	          model = this.models[i];
	          if (!modelMap[model.cid]) toRemove.push(model);
	        }
	        if (toRemove.length) this._removeModels(toRemove, options);
	      }
	
	      // See if sorting is needed, update `length` and splice in new models.
	      var orderChanged = false;
	      var replace = !sortable && add && remove;
	      if (set.length && replace) {
	        orderChanged = this.length !== set.length || _.some(this.models, function(m, index) {
	          return m !== set[index];
	        });
	        this.models.length = 0;
	        splice(this.models, set, 0);
	        this.length = this.models.length;
	      } else if (toAdd.length) {
	        if (sortable) sort = true;
	        splice(this.models, toAdd, at == null ? this.length : at);
	        this.length = this.models.length;
	      }
	
	      // Silently sort the collection if appropriate.
	      if (sort) this.sort({silent: true});
	
	      // Unless silenced, it's time to fire all appropriate add/sort/update events.
	      if (!options.silent) {
	        for (i = 0; i < toAdd.length; i++) {
	          if (at != null) options.index = at + i;
	          model = toAdd[i];
	          model.trigger('add', model, this, options);
	        }
	        if (sort || orderChanged) this.trigger('sort', this, options);
	        if (toAdd.length || toRemove.length || toMerge.length) {
	          options.changes = {
	            added: toAdd,
	            removed: toRemove,
	            merged: toMerge
	          };
	          this.trigger('update', this, options);
	        }
	      }
	
	      // Return the added (or merged) model (or models).
	      return singular ? models[0] : models;
	    },
	
	    // When you have more items than you want to add or remove individually,
	    // you can reset the entire set with a new list of models, without firing
	    // any granular `add` or `remove` events. Fires `reset` when finished.
	    // Useful for bulk operations and optimizations.
	    reset: function(models, options) {
	      options = options ? _.clone(options) : {};
	      for (var i = 0; i < this.models.length; i++) {
	        this._removeReference(this.models[i], options);
	      }
	      options.previousModels = this.models;
	      this._reset();
	      models = this.add(models, _.extend({silent: true}, options));
	      if (!options.silent) this.trigger('reset', this, options);
	      return models;
	    },
	
	    // Add a model to the end of the collection.
	    push: function(model, options) {
	      return this.add(model, _.extend({at: this.length}, options));
	    },
	
	    // Remove a model from the end of the collection.
	    pop: function(options) {
	      var model = this.at(this.length - 1);
	      return this.remove(model, options);
	    },
	
	    // Add a model to the beginning of the collection.
	    unshift: function(model, options) {
	      return this.add(model, _.extend({at: 0}, options));
	    },
	
	    // Remove a model from the beginning of the collection.
	    shift: function(options) {
	      var model = this.at(0);
	      return this.remove(model, options);
	    },
	
	    // Slice out a sub-array of models from the collection.
	    slice: function() {
	      return slice.apply(this.models, arguments);
	    },
	
	    // Get a model from the set by id, cid, model object with id or cid
	    // properties, or an attributes object that is transformed through modelId.
	    get: function(obj) {
	      if (obj == null) return void 0;
	      return this._byId[obj] ||
	        this._byId[this.modelId(obj.attributes || obj)] ||
	        obj.cid && this._byId[obj.cid];
	    },
	
	    // Returns `true` if the model is in the collection.
	    has: function(obj) {
	      return this.get(obj) != null;
	    },
	
	    // Get the model at the given index.
	    at: function(index) {
	      if (index < 0) index += this.length;
	      return this.models[index];
	    },
	
	    // Return models with matching attributes. Useful for simple cases of
	    // `filter`.
	    where: function(attrs, first) {
	      return this[first ? 'find' : 'filter'](attrs);
	    },
	
	    // Return the first model with matching attributes. Useful for simple cases
	    // of `find`.
	    findWhere: function(attrs) {
	      return this.where(attrs, true);
	    },
	
	    // Force the collection to re-sort itself. You don't need to call this under
	    // normal circumstances, as the set will maintain sort order as each item
	    // is added.
	    sort: function(options) {
	      var comparator = this.comparator;
	      if (!comparator) throw new Error('Cannot sort a set without a comparator');
	      options || (options = {});
	
	      var length = comparator.length;
	      if (_.isFunction(comparator)) comparator = _.bind(comparator, this);
	
	      // Run sort based on type of `comparator`.
	      if (length === 1 || _.isString(comparator)) {
	        this.models = this.sortBy(comparator);
	      } else {
	        this.models.sort(comparator);
	      }
	      if (!options.silent) this.trigger('sort', this, options);
	      return this;
	    },
	
	    // Pluck an attribute from each model in the collection.
	    pluck: function(attr) {
	      return this.map(attr + '');
	    },
	
	    // Fetch the default set of models for this collection, resetting the
	    // collection when they arrive. If `reset: true` is passed, the response
	    // data will be passed through the `reset` method instead of `set`.
	    fetch: function(options) {
	      options = _.extend({parse: true}, options);
	      var success = options.success;
	      var collection = this;
	      options.success = function(resp) {
	        var method = options.reset ? 'reset' : 'set';
	        collection[method](resp, options);
	        if (success) success.call(options.context, collection, resp, options);
	        collection.trigger('sync', collection, resp, options);
	      };
	      wrapError(this, options);
	      return this.sync('read', this, options);
	    },
	
	    // Create a new instance of a model in this collection. Add the model to the
	    // collection immediately, unless `wait: true` is passed, in which case we
	    // wait for the server to agree.
	    create: function(model, options) {
	      options = options ? _.clone(options) : {};
	      var wait = options.wait;
	      model = this._prepareModel(model, options);
	      if (!model) return false;
	      if (!wait) this.add(model, options);
	      var collection = this;
	      var success = options.success;
	      options.success = function(m, resp, callbackOpts) {
	        if (wait) collection.add(m, callbackOpts);
	        if (success) success.call(callbackOpts.context, m, resp, callbackOpts);
	      };
	      model.save(null, options);
	      return model;
	    },
	
	    // **parse** converts a response into a list of models to be added to the
	    // collection. The default implementation is just to pass it through.
	    parse: function(resp, options) {
	      return resp;
	    },
	
	    // Create a new collection with an identical list of models as this one.
	    clone: function() {
	      return new this.constructor(this.models, {
	        model: this.model,
	        comparator: this.comparator
	      });
	    },
	
	    // Define how to uniquely identify models in the collection.
	    modelId: function(attrs) {
	      return attrs[this.model.prototype.idAttribute || 'id'];
	    },
	
	    // Private method to reset all internal state. Called when the collection
	    // is first initialized or reset.
	    _reset: function() {
	      this.length = 0;
	      this.models = [];
	      this._byId  = {};
	    },
	
	    // Prepare a hash of attributes (or other model) to be added to this
	    // collection.
	    _prepareModel: function(attrs, options) {
	      if (this._isModel(attrs)) {
	        if (!attrs.collection) attrs.collection = this;
	        return attrs;
	      }
	      options = options ? _.clone(options) : {};
	      options.collection = this;
	      var model = new this.model(attrs, options);
	      if (!model.validationError) return model;
	      this.trigger('invalid', this, model.validationError, options);
	      return false;
	    },
	
	    // Internal method called by both remove and set.
	    _removeModels: function(models, options) {
	      var removed = [];
	      for (var i = 0; i < models.length; i++) {
	        var model = this.get(models[i]);
	        if (!model) continue;
	
	        var index = this.indexOf(model);
	        this.models.splice(index, 1);
	        this.length--;
	
	        // Remove references before triggering 'remove' event to prevent an
	        // infinite loop. #3693
	        delete this._byId[model.cid];
	        var id = this.modelId(model.attributes);
	        if (id != null) delete this._byId[id];
	
	        if (!options.silent) {
	          options.index = index;
	          model.trigger('remove', model, this, options);
	        }
	
	        removed.push(model);
	        this._removeReference(model, options);
	      }
	      return removed;
	    },
	
	    // Method for checking whether an object should be considered a model for
	    // the purposes of adding to the collection.
	    _isModel: function(model) {
	      return model instanceof Model;
	    },
	
	    // Internal method to create a model's ties to a collection.
	    _addReference: function(model, options) {
	      this._byId[model.cid] = model;
	      var id = this.modelId(model.attributes);
	      if (id != null) this._byId[id] = model;
	      model.on('all', this._onModelEvent, this);
	    },
	
	    // Internal method to sever a model's ties to a collection.
	    _removeReference: function(model, options) {
	      delete this._byId[model.cid];
	      var id = this.modelId(model.attributes);
	      if (id != null) delete this._byId[id];
	      if (this === model.collection) delete model.collection;
	      model.off('all', this._onModelEvent, this);
	    },
	
	    // Internal method called every time a model in the set fires an event.
	    // Sets need to update their indexes when models change ids. All other
	    // events simply proxy through. "add" and "remove" events that originate
	    // in other collections are ignored.
	    _onModelEvent: function(event, model, collection, options) {
	      if (model) {
	        if ((event === 'add' || event === 'remove') && collection !== this) return;
	        if (event === 'destroy') this.remove(model, options);
	        if (event === 'change') {
	          var prevId = this.modelId(model.previousAttributes());
	          var id = this.modelId(model.attributes);
	          if (prevId !== id) {
	            if (prevId != null) delete this._byId[prevId];
	            if (id != null) this._byId[id] = model;
	          }
	        }
	      }
	      this.trigger.apply(this, arguments);
	    }
	
	  });
	
	  // Underscore methods that we want to implement on the Collection.
	  // 90% of the core usefulness of Backbone Collections is actually implemented
	  // right here:
	  var collectionMethods = {forEach: 3, each: 3, map: 3, collect: 3, reduce: 0,
	      foldl: 0, inject: 0, reduceRight: 0, foldr: 0, find: 3, detect: 3, filter: 3,
	      select: 3, reject: 3, every: 3, all: 3, some: 3, any: 3, include: 3, includes: 3,
	      contains: 3, invoke: 0, max: 3, min: 3, toArray: 1, size: 1, first: 3,
	      head: 3, take: 3, initial: 3, rest: 3, tail: 3, drop: 3, last: 3,
	      without: 0, difference: 0, indexOf: 3, shuffle: 1, lastIndexOf: 3,
	      isEmpty: 1, chain: 1, sample: 3, partition: 3, groupBy: 3, countBy: 3,
	      sortBy: 3, indexBy: 3, findIndex: 3, findLastIndex: 3};
	
	  // Mix in each Underscore method as a proxy to `Collection#models`.
	  addUnderscoreMethods(Collection, collectionMethods, 'models');
	
	  // Backbone.View
	  // -------------
	
	  // Backbone Views are almost more convention than they are actual code. A View
	  // is simply a JavaScript object that represents a logical chunk of UI in the
	  // DOM. This might be a single item, an entire list, a sidebar or panel, or
	  // even the surrounding frame which wraps your whole app. Defining a chunk of
	  // UI as a **View** allows you to define your DOM events declaratively, without
	  // having to worry about render order ... and makes it easy for the view to
	  // react to specific changes in the state of your models.
	
	  // Creating a Backbone.View creates its initial element outside of the DOM,
	  // if an existing element is not provided...
	  var View = Backbone.View = function(options) {
	    this.cid = _.uniqueId('view');
	    _.extend(this, _.pick(options, viewOptions));
	    this._ensureElement();
	    this.initialize.apply(this, arguments);
	  };
	
	  // Cached regex to split keys for `delegate`.
	  var delegateEventSplitter = /^(\S+)\s*(.*)$/;
	
	  // List of view options to be set as properties.
	  var viewOptions = ['model', 'collection', 'el', 'id', 'attributes', 'className', 'tagName', 'events'];
	
	  // Set up all inheritable **Backbone.View** properties and methods.
	  _.extend(View.prototype, Events, {
	
	    // The default `tagName` of a View's element is `"div"`.
	    tagName: 'div',
	
	    // jQuery delegate for element lookup, scoped to DOM elements within the
	    // current view. This should be preferred to global lookups where possible.
	    $: function(selector) {
	      return this.$el.find(selector);
	    },
	
	    // Initialize is an empty function by default. Override it with your own
	    // initialization logic.
	    initialize: function(){},
	
	    // **render** is the core function that your view should override, in order
	    // to populate its element (`this.el`), with the appropriate HTML. The
	    // convention is for **render** to always return `this`.
	    render: function() {
	      return this;
	    },
	
	    // Remove this view by taking the element out of the DOM, and removing any
	    // applicable Backbone.Events listeners.
	    remove: function() {
	      this._removeElement();
	      this.stopListening();
	      return this;
	    },
	
	    // Remove this view's element from the document and all event listeners
	    // attached to it. Exposed for subclasses using an alternative DOM
	    // manipulation API.
	    _removeElement: function() {
	      this.$el.remove();
	    },
	
	    // Change the view's element (`this.el` property) and re-delegate the
	    // view's events on the new element.
	    setElement: function(element) {
	      this.undelegateEvents();
	      this._setElement(element);
	      this.delegateEvents();
	      return this;
	    },
	
	    // Creates the `this.el` and `this.$el` references for this view using the
	    // given `el`. `el` can be a CSS selector or an HTML string, a jQuery
	    // context or an element. Subclasses can override this to utilize an
	    // alternative DOM manipulation API and are only required to set the
	    // `this.el` property.
	    _setElement: function(el) {
	      this.$el = el instanceof Backbone.$ ? el : Backbone.$(el);
	      this.el = this.$el[0];
	    },
	
	    // Set callbacks, where `this.events` is a hash of
	    //
	    // *{"event selector": "callback"}*
	    //
	    //     {
	    //       'mousedown .title':  'edit',
	    //       'click .button':     'save',
	    //       'click .open':       function(e) { ... }
	    //     }
	    //
	    // pairs. Callbacks will be bound to the view, with `this` set properly.
	    // Uses event delegation for efficiency.
	    // Omitting the selector binds the event to `this.el`.
	    delegateEvents: function(events) {
	      events || (events = _.result(this, 'events'));
	      if (!events) return this;
	      this.undelegateEvents();
	      for (var key in events) {
	        var method = events[key];
	        if (!_.isFunction(method)) method = this[method];
	        if (!method) continue;
	        var match = key.match(delegateEventSplitter);
	        this.delegate(match[1], match[2], _.bind(method, this));
	      }
	      return this;
	    },
	
	    // Add a single event listener to the view's element (or a child element
	    // using `selector`). This only works for delegate-able events: not `focus`,
	    // `blur`, and not `change`, `submit`, and `reset` in Internet Explorer.
	    delegate: function(eventName, selector, listener) {
	      this.$el.on(eventName + '.delegateEvents' + this.cid, selector, listener);
	      return this;
	    },
	
	    // Clears all callbacks previously bound to the view by `delegateEvents`.
	    // You usually don't need to use this, but may wish to if you have multiple
	    // Backbone views attached to the same DOM element.
	    undelegateEvents: function() {
	      if (this.$el) this.$el.off('.delegateEvents' + this.cid);
	      return this;
	    },
	
	    // A finer-grained `undelegateEvents` for removing a single delegated event.
	    // `selector` and `listener` are both optional.
	    undelegate: function(eventName, selector, listener) {
	      this.$el.off(eventName + '.delegateEvents' + this.cid, selector, listener);
	      return this;
	    },
	
	    // Produces a DOM element to be assigned to your view. Exposed for
	    // subclasses using an alternative DOM manipulation API.
	    _createElement: function(tagName) {
	      return document.createElement(tagName);
	    },
	
	    // Ensure that the View has a DOM element to render into.
	    // If `this.el` is a string, pass it through `$()`, take the first
	    // matching element, and re-assign it to `el`. Otherwise, create
	    // an element from the `id`, `className` and `tagName` properties.
	    _ensureElement: function() {
	      if (!this.el) {
	        var attrs = _.extend({}, _.result(this, 'attributes'));
	        if (this.id) attrs.id = _.result(this, 'id');
	        if (this.className) attrs['class'] = _.result(this, 'className');
	        this.setElement(this._createElement(_.result(this, 'tagName')));
	        this._setAttributes(attrs);
	      } else {
	        this.setElement(_.result(this, 'el'));
	      }
	    },
	
	    // Set attributes from a hash on this view's element.  Exposed for
	    // subclasses using an alternative DOM manipulation API.
	    _setAttributes: function(attributes) {
	      this.$el.attr(attributes);
	    }
	
	  });
	
	  // Backbone.sync
	  // -------------
	
	  // Override this function to change the manner in which Backbone persists
	  // models to the server. You will be passed the type of request, and the
	  // model in question. By default, makes a RESTful Ajax request
	  // to the model's `url()`. Some possible customizations could be:
	  //
	  // * Use `setTimeout` to batch rapid-fire updates into a single request.
	  // * Send up the models as XML instead of JSON.
	  // * Persist models via WebSockets instead of Ajax.
	  //
	  // Turn on `Backbone.emulateHTTP` in order to send `PUT` and `DELETE` requests
	  // as `POST`, with a `_method` parameter containing the true HTTP method,
	  // as well as all requests with the body as `application/x-www-form-urlencoded`
	  // instead of `application/json` with the model in a param named `model`.
	  // Useful when interfacing with server-side languages like **PHP** that make
	  // it difficult to read the body of `PUT` requests.
	  Backbone.sync = function(method, model, options) {
	    var type = methodMap[method];
	
	    // Default options, unless specified.
	    _.defaults(options || (options = {}), {
	      emulateHTTP: Backbone.emulateHTTP,
	      emulateJSON: Backbone.emulateJSON
	    });
	
	    // Default JSON-request options.
	    var params = {type: type, dataType: 'json'};
	
	    // Ensure that we have a URL.
	    if (!options.url) {
	      params.url = _.result(model, 'url') || urlError();
	    }
	
	    // Ensure that we have the appropriate request data.
	    if (options.data == null && model && (method === 'create' || method === 'update' || method === 'patch')) {
	      params.contentType = 'application/json';
	      params.data = JSON.stringify(options.attrs || model.toJSON(options));
	    }
	
	    // For older servers, emulate JSON by encoding the request into an HTML-form.
	    if (options.emulateJSON) {
	      params.contentType = 'application/x-www-form-urlencoded';
	      params.data = params.data ? {model: params.data} : {};
	    }
	
	    // For older servers, emulate HTTP by mimicking the HTTP method with `_method`
	    // And an `X-HTTP-Method-Override` header.
	    if (options.emulateHTTP && (type === 'PUT' || type === 'DELETE' || type === 'PATCH')) {
	      params.type = 'POST';
	      if (options.emulateJSON) params.data._method = type;
	      var beforeSend = options.beforeSend;
	      options.beforeSend = function(xhr) {
	        xhr.setRequestHeader('X-HTTP-Method-Override', type);
	        if (beforeSend) return beforeSend.apply(this, arguments);
	      };
	    }
	
	    // Don't process data on a non-GET request.
	    if (params.type !== 'GET' && !options.emulateJSON) {
	      params.processData = false;
	    }
	
	    // Pass along `textStatus` and `errorThrown` from jQuery.
	    var error = options.error;
	    options.error = function(xhr, textStatus, errorThrown) {
	      options.textStatus = textStatus;
	      options.errorThrown = errorThrown;
	      if (error) error.call(options.context, xhr, textStatus, errorThrown);
	    };
	
	    // Make the request, allowing the user to override any Ajax options.
	    var xhr = options.xhr = Backbone.ajax(_.extend(params, options));
	    model.trigger('request', model, xhr, options);
	    return xhr;
	  };
	
	  // Map from CRUD to HTTP for our default `Backbone.sync` implementation.
	  var methodMap = {
	    'create': 'POST',
	    'update': 'PUT',
	    'patch': 'PATCH',
	    'delete': 'DELETE',
	    'read': 'GET'
	  };
	
	  // Set the default implementation of `Backbone.ajax` to proxy through to `$`.
	  // Override this if you'd like to use a different library.
	  Backbone.ajax = function() {
	    return Backbone.$.ajax.apply(Backbone.$, arguments);
	  };
	
	  // Backbone.Router
	  // ---------------
	
	  // Routers map faux-URLs to actions, and fire events when routes are
	  // matched. Creating a new one sets its `routes` hash, if not set statically.
	  var Router = Backbone.Router = function(options) {
	    options || (options = {});
	    if (options.routes) this.routes = options.routes;
	    this._bindRoutes();
	    this.initialize.apply(this, arguments);
	  };
	
	  // Cached regular expressions for matching named param parts and splatted
	  // parts of route strings.
	  var optionalParam = /\((.*?)\)/g;
	  var namedParam    = /(\(\?)?:\w+/g;
	  var splatParam    = /\*\w+/g;
	  var escapeRegExp  = /[\-{}\[\]+?.,\\\^$|#\s]/g;
	
	  // Set up all inheritable **Backbone.Router** properties and methods.
	  _.extend(Router.prototype, Events, {
	
	    // Initialize is an empty function by default. Override it with your own
	    // initialization logic.
	    initialize: function(){},
	
	    // Manually bind a single named route to a callback. For example:
	    //
	    //     this.route('search/:query/p:num', 'search', function(query, num) {
	    //       ...
	    //     });
	    //
	    route: function(route, name, callback) {
	      if (!_.isRegExp(route)) route = this._routeToRegExp(route);
	      if (_.isFunction(name)) {
	        callback = name;
	        name = '';
	      }
	      if (!callback) callback = this[name];
	      var router = this;
	      Backbone.history.route(route, function(fragment) {
	        var args = router._extractParameters(route, fragment);
	        if (router.execute(callback, args, name) !== false) {
	          router.trigger.apply(router, ['route:' + name].concat(args));
	          router.trigger('route', name, args);
	          Backbone.history.trigger('route', router, name, args);
	        }
	      });
	      return this;
	    },
	
	    // Execute a route handler with the provided parameters.  This is an
	    // excellent place to do pre-route setup or post-route cleanup.
	    execute: function(callback, args, name) {
	      if (callback) callback.apply(this, args);
	    },
	
	    // Simple proxy to `Backbone.history` to save a fragment into the history.
	    navigate: function(fragment, options) {
	      Backbone.history.navigate(fragment, options);
	      return this;
	    },
	
	    // Bind all defined routes to `Backbone.history`. We have to reverse the
	    // order of the routes here to support behavior where the most general
	    // routes can be defined at the bottom of the route map.
	    _bindRoutes: function() {
	      if (!this.routes) return;
	      this.routes = _.result(this, 'routes');
	      var route, routes = _.keys(this.routes);
	      while ((route = routes.pop()) != null) {
	        this.route(route, this.routes[route]);
	      }
	    },
	
	    // Convert a route string into a regular expression, suitable for matching
	    // against the current location hash.
	    _routeToRegExp: function(route) {
	      route = route.replace(escapeRegExp, '\\$&')
	                   .replace(optionalParam, '(?:$1)?')
	                   .replace(namedParam, function(match, optional) {
	                     return optional ? match : '([^/?]+)';
	                   })
	                   .replace(splatParam, '([^?]*?)');
	      return new RegExp('^' + route + '(?:\\?([\\s\\S]*))?$');
	    },
	
	    // Given a route, and a URL fragment that it matches, return the array of
	    // extracted decoded parameters. Empty or unmatched parameters will be
	    // treated as `null` to normalize cross-browser behavior.
	    _extractParameters: function(route, fragment) {
	      var params = route.exec(fragment).slice(1);
	      return _.map(params, function(param, i) {
	        // Don't decode the search params.
	        if (i === params.length - 1) return param || null;
	        return param ? decodeURIComponent(param) : null;
	      });
	    }
	
	  });
	
	  // Backbone.History
	  // ----------------
	
	  // Handles cross-browser history management, based on either
	  // [pushState](http://diveintohtml5.info/history.html) and real URLs, or
	  // [onhashchange](https://developer.mozilla.org/en-US/docs/DOM/window.onhashchange)
	  // and URL fragments. If the browser supports neither (old IE, natch),
	  // falls back to polling.
	  var History = Backbone.History = function() {
	    this.handlers = [];
	    this.checkUrl = _.bind(this.checkUrl, this);
	
	    // Ensure that `History` can be used outside of the browser.
	    if (typeof window !== 'undefined') {
	      this.location = window.location;
	      this.history = window.history;
	    }
	  };
	
	  // Cached regex for stripping a leading hash/slash and trailing space.
	  var routeStripper = /^[#\/]|\s+$/g;
	
	  // Cached regex for stripping leading and trailing slashes.
	  var rootStripper = /^\/+|\/+$/g;
	
	  // Cached regex for stripping urls of hash.
	  var pathStripper = /#.*$/;
	
	  // Has the history handling already been started?
	  History.started = false;
	
	  // Set up all inheritable **Backbone.History** properties and methods.
	  _.extend(History.prototype, Events, {
	
	    // The default interval to poll for hash changes, if necessary, is
	    // twenty times a second.
	    interval: 50,
	
	    // Are we at the app root?
	    atRoot: function() {
	      var path = this.location.pathname.replace(/[^\/]$/, '$&/');
	      return path === this.root && !this.getSearch();
	    },
	
	    // Does the pathname match the root?
	    matchRoot: function() {
	      var path = this.decodeFragment(this.location.pathname);
	      var rootPath = path.slice(0, this.root.length - 1) + '/';
	      return rootPath === this.root;
	    },
	
	    // Unicode characters in `location.pathname` are percent encoded so they're
	    // decoded for comparison. `%25` should not be decoded since it may be part
	    // of an encoded parameter.
	    decodeFragment: function(fragment) {
	      return decodeURI(fragment.replace(/%25/g, '%2525'));
	    },
	
	    // In IE6, the hash fragment and search params are incorrect if the
	    // fragment contains `?`.
	    getSearch: function() {
	      var match = this.location.href.replace(/#.*/, '').match(/\?.+/);
	      return match ? match[0] : '';
	    },
	
	    // Gets the true hash value. Cannot use location.hash directly due to bug
	    // in Firefox where location.hash will always be decoded.
	    getHash: function(window) {
	      var match = (window || this).location.href.match(/#(.*)$/);
	      return match ? match[1] : '';
	    },
	
	    // Get the pathname and search params, without the root.
	    getPath: function() {
	      var path = this.decodeFragment(
	        this.location.pathname + this.getSearch()
	      ).slice(this.root.length - 1);
	      return path.charAt(0) === '/' ? path.slice(1) : path;
	    },
	
	    // Get the cross-browser normalized URL fragment from the path or hash.
	    getFragment: function(fragment) {
	      if (fragment == null) {
	        if (this._usePushState || !this._wantsHashChange) {
	          fragment = this.getPath();
	        } else {
	          fragment = this.getHash();
	        }
	      }
	      return fragment.replace(routeStripper, '');
	    },
	
	    // Start the hash change handling, returning `true` if the current URL matches
	    // an existing route, and `false` otherwise.
	    start: function(options) {
	      if (History.started) throw new Error('Backbone.history has already been started');
	      History.started = true;
	
	      // Figure out the initial configuration. Do we need an iframe?
	      // Is pushState desired ... is it available?
	      this.options          = _.extend({root: '/'}, this.options, options);
	      this.root             = this.options.root;
	      this._wantsHashChange = this.options.hashChange !== false;
	      this._hasHashChange   = 'onhashchange' in window && (document.documentMode === void 0 || document.documentMode > 7);
	      this._useHashChange   = this._wantsHashChange && this._hasHashChange;
	      this._wantsPushState  = !!this.options.pushState;
	      this._hasPushState    = !!(this.history && this.history.pushState);
	      this._usePushState    = this._wantsPushState && this._hasPushState;
	      this.fragment         = this.getFragment();
	
	      // Normalize root to always include a leading and trailing slash.
	      this.root = ('/' + this.root + '/').replace(rootStripper, '/');
	
	      // Transition from hashChange to pushState or vice versa if both are
	      // requested.
	      if (this._wantsHashChange && this._wantsPushState) {
	
	        // If we've started off with a route from a `pushState`-enabled
	        // browser, but we're currently in a browser that doesn't support it...
	        if (!this._hasPushState && !this.atRoot()) {
	          var rootPath = this.root.slice(0, -1) || '/';
	          this.location.replace(rootPath + '#' + this.getPath());
	          // Return immediately as browser will do redirect to new url
	          return true;
	
	        // Or if we've started out with a hash-based route, but we're currently
	        // in a browser where it could be `pushState`-based instead...
	        } else if (this._hasPushState && this.atRoot()) {
	          this.navigate(this.getHash(), {replace: true});
	        }
	
	      }
	
	      // Proxy an iframe to handle location events if the browser doesn't
	      // support the `hashchange` event, HTML5 history, or the user wants
	      // `hashChange` but not `pushState`.
	      if (!this._hasHashChange && this._wantsHashChange && !this._usePushState) {
	        this.iframe = document.createElement('iframe');
	        this.iframe.src = 'javascript:0';
	        this.iframe.style.display = 'none';
	        this.iframe.tabIndex = -1;
	        var body = document.body;
	        // Using `appendChild` will throw on IE < 9 if the document is not ready.
	        var iWindow = body.insertBefore(this.iframe, body.firstChild).contentWindow;
	        iWindow.document.open();
	        iWindow.document.close();
	        iWindow.location.hash = '#' + this.fragment;
	      }
	
	      // Add a cross-platform `addEventListener` shim for older browsers.
	      var addEventListener = window.addEventListener || function(eventName, listener) {
	        return attachEvent('on' + eventName, listener);
	      };
	
	      // Depending on whether we're using pushState or hashes, and whether
	      // 'onhashchange' is supported, determine how we check the URL state.
	      if (this._usePushState) {
	        addEventListener('popstate', this.checkUrl, false);
	      } else if (this._useHashChange && !this.iframe) {
	        addEventListener('hashchange', this.checkUrl, false);
	      } else if (this._wantsHashChange) {
	        this._checkUrlInterval = setInterval(this.checkUrl, this.interval);
	      }
	
	      if (!this.options.silent) return this.loadUrl();
	    },
	
	    // Disable Backbone.history, perhaps temporarily. Not useful in a real app,
	    // but possibly useful for unit testing Routers.
	    stop: function() {
	      // Add a cross-platform `removeEventListener` shim for older browsers.
	      var removeEventListener = window.removeEventListener || function(eventName, listener) {
	        return detachEvent('on' + eventName, listener);
	      };
	
	      // Remove window listeners.
	      if (this._usePushState) {
	        removeEventListener('popstate', this.checkUrl, false);
	      } else if (this._useHashChange && !this.iframe) {
	        removeEventListener('hashchange', this.checkUrl, false);
	      }
	
	      // Clean up the iframe if necessary.
	      if (this.iframe) {
	        document.body.removeChild(this.iframe);
	        this.iframe = null;
	      }
	
	      // Some environments will throw when clearing an undefined interval.
	      if (this._checkUrlInterval) clearInterval(this._checkUrlInterval);
	      History.started = false;
	    },
	
	    // Add a route to be tested when the fragment changes. Routes added later
	    // may override previous routes.
	    route: function(route, callback) {
	      this.handlers.unshift({route: route, callback: callback});
	    },
	
	    // Checks the current URL to see if it has changed, and if it has,
	    // calls `loadUrl`, normalizing across the hidden iframe.
	    checkUrl: function(e) {
	      var current = this.getFragment();
	
	      // If the user pressed the back button, the iframe's hash will have
	      // changed and we should use that for comparison.
	      if (current === this.fragment && this.iframe) {
	        current = this.getHash(this.iframe.contentWindow);
	      }
	
	      if (current === this.fragment) return false;
	      if (this.iframe) this.navigate(current);
	      this.loadUrl();
	    },
	
	    // Attempt to load the current URL fragment. If a route succeeds with a
	    // match, returns `true`. If no defined routes matches the fragment,
	    // returns `false`.
	    loadUrl: function(fragment) {
	      // If the root doesn't match, no routes can match either.
	      if (!this.matchRoot()) return false;
	      fragment = this.fragment = this.getFragment(fragment);
	      return _.some(this.handlers, function(handler) {
	        if (handler.route.test(fragment)) {
	          handler.callback(fragment);
	          return true;
	        }
	      });
	    },
	
	    // Save a fragment into the hash history, or replace the URL state if the
	    // 'replace' option is passed. You are responsible for properly URL-encoding
	    // the fragment in advance.
	    //
	    // The options object can contain `trigger: true` if you wish to have the
	    // route callback be fired (not usually desirable), or `replace: true`, if
	    // you wish to modify the current URL without adding an entry to the history.
	    navigate: function(fragment, options) {
	      if (!History.started) return false;
	      if (!options || options === true) options = {trigger: !!options};
	
	      // Normalize the fragment.
	      fragment = this.getFragment(fragment || '');
	
	      // Don't include a trailing slash on the root.
	      var rootPath = this.root;
	      if (fragment === '' || fragment.charAt(0) === '?') {
	        rootPath = rootPath.slice(0, -1) || '/';
	      }
	      var url = rootPath + fragment;
	
	      // Strip the hash and decode for matching.
	      fragment = this.decodeFragment(fragment.replace(pathStripper, ''));
	
	      if (this.fragment === fragment) return;
	      this.fragment = fragment;
	
	      // If pushState is available, we use it to set the fragment as a real URL.
	      if (this._usePushState) {
	        this.history[options.replace ? 'replaceState' : 'pushState']({}, document.title, url);
	
	      // If hash changes haven't been explicitly disabled, update the hash
	      // fragment to store history.
	      } else if (this._wantsHashChange) {
	        this._updateHash(this.location, fragment, options.replace);
	        if (this.iframe && fragment !== this.getHash(this.iframe.contentWindow)) {
	          var iWindow = this.iframe.contentWindow;
	
	          // Opening and closing the iframe tricks IE7 and earlier to push a
	          // history entry on hash-tag change.  When replace is true, we don't
	          // want this.
	          if (!options.replace) {
	            iWindow.document.open();
	            iWindow.document.close();
	          }
	
	          this._updateHash(iWindow.location, fragment, options.replace);
	        }
	
	      // If you've told us that you explicitly don't want fallback hashchange-
	      // based history, then `navigate` becomes a page refresh.
	      } else {
	        return this.location.assign(url);
	      }
	      if (options.trigger) return this.loadUrl(fragment);
	    },
	
	    // Update the hash location, either replacing the current entry, or adding
	    // a new one to the browser history.
	    _updateHash: function(location, fragment, replace) {
	      if (replace) {
	        var href = location.href.replace(/(javascript:|#).*$/, '');
	        location.replace(href + '#' + fragment);
	      } else {
	        // Some browsers require that `hash` contains a leading #.
	        location.hash = '#' + fragment;
	      }
	    }
	
	  });
	
	  // Create the default Backbone.history.
	  Backbone.history = new History;
	
	  // Helpers
	  // -------
	
	  // Helper function to correctly set up the prototype chain for subclasses.
	  // Similar to `goog.inherits`, but uses a hash of prototype properties and
	  // class properties to be extended.
	  var extend = function(protoProps, staticProps) {
	    var parent = this;
	    var child;
	
	    // The constructor function for the new subclass is either defined by you
	    // (the "constructor" property in your `extend` definition), or defaulted
	    // by us to simply call the parent constructor.
	    if (protoProps && _.has(protoProps, 'constructor')) {
	      child = protoProps.constructor;
	    } else {
	      child = function(){ return parent.apply(this, arguments); };
	    }
	
	    // Add static properties to the constructor function, if supplied.
	    _.extend(child, parent, staticProps);
	
	    // Set the prototype chain to inherit from `parent`, without calling
	    // `parent`'s constructor function and add the prototype properties.
	    child.prototype = _.create(parent.prototype, protoProps);
	    child.prototype.constructor = child;
	
	    // Set a convenience property in case the parent's prototype is needed
	    // later.
	    child.__super__ = parent.prototype;
	
	    return child;
	  };
	
	  // Set up inheritance for the model, collection, router, view and history.
	  Model.extend = Collection.extend = Router.extend = View.extend = History.extend = extend;
	
	  // Throw an error when a URL is needed, and none is supplied.
	  var urlError = function() {
	    throw new Error('A "url" property or function must be specified');
	  };
	
	  // Wrap an optional error callback with a fallback error event.
	  var wrapError = function(model, options) {
	    var error = options.error;
	    options.error = function(resp) {
	      if (error) error.call(options.context, model, resp, options);
	      model.trigger('error', model, resp, options);
	    };
	  };
	
	  return Backbone;
	});
	
	/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))

/***/ }),
/* 25 */
/***/ (function(module, exports, __webpack_require__) {

	// Thank's IE8 for his funny defineProperty
	module.exports = !__webpack_require__(13)(function () {
	  return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;
	});


/***/ }),
/* 26 */
/***/ (function(module, exports, __webpack_require__) {

	var anObject = __webpack_require__(6);
	var IE8_DOM_DEFINE = __webpack_require__(324);
	var toPrimitive = __webpack_require__(61);
	var dP = Object.defineProperty;
	
	exports.f = __webpack_require__(25) ? Object.defineProperty : function defineProperty(O, P, Attributes) {
	  anObject(O);
	  P = toPrimitive(P, true);
	  anObject(Attributes);
	  if (IE8_DOM_DEFINE) try {
	    return dP(O, P, Attributes);
	  } catch (e) { /* empty */ }
	  if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');
	  if ('value' in Attributes) O[P] = Attributes.value;
	  return O;
	};


/***/ }),
/* 27 */
/***/ (function(module, exports, __webpack_require__) {

	/* WEBPACK VAR INJECTION */(function(Promise) {"use strict";
	var old;
	if (typeof Promise !== "undefined") old = Promise;
	function noConflict() {
	    try { if (Promise === bluebird) Promise = old; }
	    catch (e) {}
	    return bluebird;
	}
	var bluebird = __webpack_require__(712)();
	bluebird.noConflict = noConflict;
	module.exports = bluebird;
	
	/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(27)))

/***/ }),
/* 28 */
/***/ (function(module, exports, __webpack_require__) {

	// 7.1.13 ToObject(argument)
	var defined = __webpack_require__(59);
	module.exports = function (it) {
	  return Object(defined(it));
	};


/***/ }),
/* 29 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	exports.assert = assert;
	
	var _AssertionError = __webpack_require__(248);
	
	var _AssertionError2 = _interopRequireDefault(_AssertionError);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	/**
	 * @param {*} assertion Assertion we expected to be truthy.
	 * @param {number} errorCode Error code.
	 */
	function assert(assertion, errorCode) {
	  if (!assertion) {
	    throw new _AssertionError2.default(errorCode);
	  }
	}
	//# sourceMappingURL=asserts.js.map
	/**
	 * @module ol/asserts
	 */

/***/ }),
/* 30 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	exports.listen = undefined;
	exports.listenOnce = listenOnce;
	exports.unlistenByKey = unlistenByKey;
	
	var _obj = __webpack_require__(23);
	
	/**
	 * Key to use with {@link module:ol/Observable~Observable#unByKey}.
	 * @typedef {Object} EventsKey
	 * @property {ListenerFunction} listener
	 * @property {import("./events/Target.js").EventTargetLike} target
	 * @property {string} type
	 * @api
	 */
	/**
	 * Listener function. This function is called with an event object as argument.
	 * When the function returns `false`, event propagation will stop.
	 *
	 * @typedef {function((Event|import("./events/Event.js").default)): (void|boolean)} ListenerFunction
	 * @api
	 */
	/**
	 * Registers an event listener on an event target. Inspired by
	 * https://google.github.io/closure-library/api/source/closure/goog/events/events.js.src.html
	 *
	 * This function efficiently binds a `listener` to a `this` object, and returns
	 * a key for use with {@link module:ol/events~unlistenByKey}.
	 *
	 * @param {import("./events/Target.js").EventTargetLike} target Event target.
	 * @param {string} type Event type.
	 * @param {ListenerFunction} listener Listener.
	 * @param {Object=} opt_this Object referenced by the `this` keyword in the
	 *     listener. Default is the `target`.
	 * @param {boolean=} opt_once If true, add the listener as one-off listener.
	 * @return {EventsKey} Unique key for the listener.
	 */
	function listen(target, type, _listener, opt_this, opt_once) {
	    if (opt_this && opt_this !== target) {
	        _listener = _listener.bind(opt_this);
	    }
	    if (opt_once) {
	        var originalListener_1 = _listener;
	        _listener = function listener() {
	            target.removeEventListener(type, _listener);
	            originalListener_1.apply(this, arguments);
	        };
	    }
	    var eventsKey = {
	        target: target,
	        type: type,
	        listener: _listener
	    };
	    target.addEventListener(type, _listener);
	    return eventsKey;
	}
	/**
	 * Registers a one-off event listener on an event target. Inspired by
	 * https://google.github.io/closure-library/api/source/closure/goog/events/events.js.src.html
	 *
	 * This function efficiently binds a `listener` as self-unregistering listener
	 * to a `this` object, and returns a key for use with
	 * {@link module:ol/events~unlistenByKey} in case the listener needs to be
	 * unregistered before it is called.
	 *
	 * When {@link module:ol/events~listen} is called with the same arguments after this
	 * function, the self-unregistering listener will be turned into a permanent
	 * listener.
	 *
	 * @param {import("./events/Target.js").EventTargetLike} target Event target.
	 * @param {string} type Event type.
	 * @param {ListenerFunction} listener Listener.
	 * @param {Object=} opt_this Object referenced by the `this` keyword in the
	 *     listener. Default is the `target`.
	 * @return {EventsKey} Key for unlistenByKey.
	 */
	/**
	 * @module ol/events
	 */
	exports.listen = listen;
	function listenOnce(target, type, listener, opt_this) {
	    return listen(target, type, listener, opt_this, true);
	}
	/**
	 * Unregisters event listeners on an event target. Inspired by
	 * https://google.github.io/closure-library/api/source/closure/goog/events/events.js.src.html
	 *
	 * The argument passed to this function is the key returned from
	 * {@link module:ol/events~listen} or {@link module:ol/events~listenOnce}.
	 *
	 * @param {EventsKey} key The key.
	 */
	function unlistenByKey(key) {
	    if (key && key.target) {
	        key.target.removeEventListener(key.type, key.listener);
	        (0, _obj.clear)(key);
	    }
	}
	//# sourceMappingURL=events.js.map

/***/ }),
/* 31 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	exports.TRUE = TRUE;
	exports.FALSE = FALSE;
	exports.VOID = VOID;
	exports.memoizeOne = memoizeOne;
	
	var _array = __webpack_require__(18);
	
	/**
	 * Always returns true.
	 * @returns {boolean} true.
	 */
	function TRUE() {
	  return true;
	}
	/**
	 * Always returns false.
	 * @returns {boolean} false.
	 */
	/**
	 * @module ol/functions
	 */
	function FALSE() {
	  return false;
	}
	/**
	 * A reusable function, used e.g. as a default for callbacks.
	 *
	 * @return {void} Nothing.
	 */
	function VOID() {}
	/**
	 * Wrap a function in another function that remembers the last return.  If the
	 * returned function is called twice in a row with the same arguments and the same
	 * this object, it will return the value from the first call in the second call.
	 *
	 * @param {function(...any): ReturnType} fn The function to memoize.
	 * @return {function(...any): ReturnType} The memoized function.
	 * @template ReturnType
	 */
	function memoizeOne(fn) {
	  var called = false;
	  /** @type {ReturnType} */
	  var lastResult;
	  /** @type {Array<any>} */
	  var lastArgs;
	  var lastThis;
	  return function () {
	    var nextArgs = Array.prototype.slice.call(arguments);
	    if (!called || this !== lastThis || !(0, _array.equals)(nextArgs, lastArgs)) {
	      called = true;
	      lastThis = this;
	      lastArgs = nextArgs;
	      lastResult = fn.apply(this, arguments);
	    }
	    return lastResult;
	  };
	}
	//# sourceMappingURL=functions.js.map

/***/ }),
/* 32 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	exports.ObjectEvent = undefined;
	exports.getChangeEventType = getChangeEventType;
	
	var _util = __webpack_require__(14);
	
	var _ObjectEventType = __webpack_require__(124);
	
	var _ObjectEventType2 = _interopRequireDefault(_ObjectEventType);
	
	var _Observable = __webpack_require__(254);
	
	var _Observable2 = _interopRequireDefault(_Observable);
	
	var _Event = __webpack_require__(35);
	
	var _Event2 = _interopRequireDefault(_Event);
	
	var _obj = __webpack_require__(23);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var __extends = undefined && undefined.__extends || function () {
	    var _extendStatics = function extendStatics(d, b) {
	        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	            d.__proto__ = b;
	        } || function (d, b) {
	            for (var p in b) {
	                if (b.hasOwnProperty(p)) d[p] = b[p];
	            }
	        };
	        return _extendStatics(d, b);
	    };
	    return function (d, b) {
	        _extendStatics(d, b);
	        function __() {
	            this.constructor = d;
	        }
	        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	    };
	}();
	/**
	 * @module ol/Object
	 */
	
	/**
	 * @classdesc
	 * Events emitted by {@link module:ol/Object~BaseObject} instances are instances of this type.
	 */
	var ObjectEvent = /** @class */function (_super) {
	    __extends(ObjectEvent, _super);
	    /**
	     * @param {string} type The event type.
	     * @param {string} key The property name.
	     * @param {*} oldValue The old value for `key`.
	     */
	    function ObjectEvent(type, key, oldValue) {
	        var _this = _super.call(this, type) || this;
	        /**
	         * The name of the property whose value is changing.
	         * @type {string}
	         * @api
	         */
	        _this.key = key;
	        /**
	         * The old value. To get the new value use `e.target.get(e.key)` where
	         * `e` is the event object.
	         * @type {*}
	         * @api
	         */
	        _this.oldValue = oldValue;
	        return _this;
	    }
	    return ObjectEvent;
	}(_Event2.default);
	exports.ObjectEvent = ObjectEvent;
	/**
	 * @classdesc
	 * Abstract base class; normally only used for creating subclasses and not
	 * instantiated in apps.
	 * Most non-trivial classes inherit from this.
	 *
	 * This extends {@link module:ol/Observable} with observable
	 * properties, where each property is observable as well as the object as a
	 * whole.
	 *
	 * Classes that inherit from this have pre-defined properties, to which you can
	 * add your owns. The pre-defined properties are listed in this documentation as
	 * 'Observable Properties', and have their own accessors; for example,
	 * {@link module:ol/Map~Map} has a `target` property, accessed with
	 * `getTarget()` and changed with `setTarget()`. Not all properties are however
	 * settable. There are also general-purpose accessors `get()` and `set()`. For
	 * example, `get('target')` is equivalent to `getTarget()`.
	 *
	 * The `set` accessors trigger a change event, and you can monitor this by
	 * registering a listener. For example, {@link module:ol/View~View} has a
	 * `center` property, so `view.on('change:center', function(evt) {...});` would
	 * call the function whenever the value of the center property changes. Within
	 * the function, `evt.target` would be the view, so `evt.target.getCenter()`
	 * would return the new center.
	 *
	 * You can add your own observable properties with
	 * `object.set('prop', 'value')`, and retrieve that with `object.get('prop')`.
	 * You can listen for changes on that property value with
	 * `object.on('change:prop', listener)`. You can get a list of all
	 * properties with {@link module:ol/Object~BaseObject#getProperties}.
	 *
	 * Note that the observable properties are separate from standard JS properties.
	 * You can, for example, give your map object a title with
	 * `map.title='New title'` and with `map.set('title', 'Another title')`. The
	 * first will be a `hasOwnProperty`; the second will appear in
	 * `getProperties()`. Only the second is observable.
	 *
	 * Properties can be deleted by using the unset method. E.g.
	 * object.unset('foo').
	 *
	 * @fires ObjectEvent
	 * @api
	 */
	
	var BaseObject = /** @class */function (_super) {
	    __extends(BaseObject, _super);
	    /**
	     * @param {Object<string, *>=} opt_values An object with key-value pairs.
	     */
	    function BaseObject(opt_values) {
	        var _this = _super.call(this) || this;
	        // Call {@link module:ol/util~getUid} to ensure that the order of objects' ids is
	        // the same as the order in which they were created.  This also helps to
	        // ensure that object properties are always added in the same order, which
	        // helps many JavaScript engines generate faster code.
	        (0, _util.getUid)(_this);
	        /**
	         * @private
	         * @type {!Object<string, *>}
	         */
	        _this.values_ = {};
	        if (opt_values !== undefined) {
	            _this.setProperties(opt_values);
	        }
	        return _this;
	    }
	    /**
	     * Gets a value.
	     * @param {string} key Key name.
	     * @return {*} Value.
	     * @api
	     */
	    BaseObject.prototype.get = function (key) {
	        var value;
	        if (this.values_.hasOwnProperty(key)) {
	            value = this.values_[key];
	        }
	        return value;
	    };
	    /**
	     * Get a list of object property names.
	     * @return {Array<string>} List of property names.
	     * @api
	     */
	    BaseObject.prototype.getKeys = function () {
	        return Object.keys(this.values_);
	    };
	    /**
	     * Get an object of all property names and values.
	     * @return {Object<string, *>} Object.
	     * @api
	     */
	    BaseObject.prototype.getProperties = function () {
	        return (0, _obj.assign)({}, this.values_);
	    };
	    /**
	     * @param {string} key Key name.
	     * @param {*} oldValue Old value.
	     */
	    BaseObject.prototype.notify = function (key, oldValue) {
	        var eventType;
	        eventType = getChangeEventType(key);
	        this.dispatchEvent(new ObjectEvent(eventType, key, oldValue));
	        eventType = _ObjectEventType2.default.PROPERTYCHANGE;
	        this.dispatchEvent(new ObjectEvent(eventType, key, oldValue));
	    };
	    /**
	     * Sets a value.
	     * @param {string} key Key name.
	     * @param {*} value Value.
	     * @param {boolean=} opt_silent Update without triggering an event.
	     * @api
	     */
	    BaseObject.prototype.set = function (key, value, opt_silent) {
	        if (opt_silent) {
	            this.values_[key] = value;
	        } else {
	            var oldValue = this.values_[key];
	            this.values_[key] = value;
	            if (oldValue !== value) {
	                this.notify(key, oldValue);
	            }
	        }
	    };
	    /**
	     * Sets a collection of key-value pairs.  Note that this changes any existing
	     * properties and adds new ones (it does not remove any existing properties).
	     * @param {Object<string, *>} values Values.
	     * @param {boolean=} opt_silent Update without triggering an event.
	     * @api
	     */
	    BaseObject.prototype.setProperties = function (values, opt_silent) {
	        for (var key in values) {
	            this.set(key, values[key], opt_silent);
	        }
	    };
	    /**
	     * Unsets a property.
	     * @param {string} key Key name.
	     * @param {boolean=} opt_silent Unset without triggering an event.
	     * @api
	     */
	    BaseObject.prototype.unset = function (key, opt_silent) {
	        if (key in this.values_) {
	            var oldValue = this.values_[key];
	            delete this.values_[key];
	            if (!opt_silent) {
	                this.notify(key, oldValue);
	            }
	        }
	    };
	    return BaseObject;
	}(_Observable2.default);
	/**
	 * @type {Object<string, string>}
	 */
	var changeEventTypeCache = {};
	/**
	 * @param {string} key Key name.
	 * @return {string} Change name.
	 */
	function getChangeEventType(key) {
	    return changeEventTypeCache.hasOwnProperty(key) ? changeEventTypeCache[key] : changeEventTypeCache[key] = 'change:' + key;
	}
	exports.default = BaseObject;
	//# sourceMappingURL=Object.js.map

/***/ }),
/* 33 */
/***/ (function(module, exports, __webpack_require__) {

	var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;//     Underscore.js 1.8.3
	//     http://underscorejs.org
	//     (c) 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
	//     Underscore may be freely distributed under the MIT license.
	
	(function() {
	
	  // Baseline setup
	  // --------------
	
	  // Establish the root object, `window` in the browser, or `exports` on the server.
	  var root = this;
	
	  // Save the previous value of the `_` variable.
	  var previousUnderscore = root._;
	
	  // Save bytes in the minified (but not gzipped) version:
	  var ArrayProto = Array.prototype, ObjProto = Object.prototype, FuncProto = Function.prototype;
	
	  // Create quick reference variables for speed access to core prototypes.
	  var
	    push             = ArrayProto.push,
	    slice            = ArrayProto.slice,
	    toString         = ObjProto.toString,
	    hasOwnProperty   = ObjProto.hasOwnProperty;
	
	  // All **ECMAScript 5** native function implementations that we hope to use
	  // are declared here.
	  var
	    nativeIsArray      = Array.isArray,
	    nativeKeys         = Object.keys,
	    nativeBind         = FuncProto.bind,
	    nativeCreate       = Object.create;
	
	  // Naked function reference for surrogate-prototype-swapping.
	  var Ctor = function(){};
	
	  // Create a safe reference to the Underscore object for use below.
	  var _ = function(obj) {
	    if (obj instanceof _) return obj;
	    if (!(this instanceof _)) return new _(obj);
	    this._wrapped = obj;
	  };
	
	  // Export the Underscore object for **Node.js**, with
	  // backwards-compatibility for the old `require()` API. If we're in
	  // the browser, add `_` as a global object.
	  if (true) {
	    if (typeof module !== 'undefined' && module.exports) {
	      exports = module.exports = _;
	    }
	    exports._ = _;
	  } else {
	    root._ = _;
	  }
	
	  // Current version.
	  _.VERSION = '1.8.3';
	
	  // Internal function that returns an efficient (for current engines) version
	  // of the passed-in callback, to be repeatedly applied in other Underscore
	  // functions.
	  var optimizeCb = function(func, context, argCount) {
	    if (context === void 0) return func;
	    switch (argCount == null ? 3 : argCount) {
	      case 1: return function(value) {
	        return func.call(context, value);
	      };
	      case 2: return function(value, other) {
	        return func.call(context, value, other);
	      };
	      case 3: return function(value, index, collection) {
	        return func.call(context, value, index, collection);
	      };
	      case 4: return function(accumulator, value, index, collection) {
	        return func.call(context, accumulator, value, index, collection);
	      };
	    }
	    return function() {
	      return func.apply(context, arguments);
	    };
	  };
	
	  // A mostly-internal function to generate callbacks that can be applied
	  // to each element in a collection, returning the desired result — either
	  // identity, an arbitrary callback, a property matcher, or a property accessor.
	  var cb = function(value, context, argCount) {
	    if (value == null) return _.identity;
	    if (_.isFunction(value)) return optimizeCb(value, context, argCount);
	    if (_.isObject(value)) return _.matcher(value);
	    return _.property(value);
	  };
	  _.iteratee = function(value, context) {
	    return cb(value, context, Infinity);
	  };
	
	  // An internal function for creating assigner functions.
	  var createAssigner = function(keysFunc, undefinedOnly) {
	    return function(obj) {
	      var length = arguments.length;
	      if (length < 2 || obj == null) return obj;
	      for (var index = 1; index < length; index++) {
	        var source = arguments[index],
	            keys = keysFunc(source),
	            l = keys.length;
	        for (var i = 0; i < l; i++) {
	          var key = keys[i];
	          if (!undefinedOnly || obj[key] === void 0) obj[key] = source[key];
	        }
	      }
	      return obj;
	    };
	  };
	
	  // An internal function for creating a new object that inherits from another.
	  var baseCreate = function(prototype) {
	    if (!_.isObject(prototype)) return {};
	    if (nativeCreate) return nativeCreate(prototype);
	    Ctor.prototype = prototype;
	    var result = new Ctor;
	    Ctor.prototype = null;
	    return result;
	  };
	
	  var property = function(key) {
	    return function(obj) {
	      return obj == null ? void 0 : obj[key];
	    };
	  };
	
	  // Helper for collection methods to determine whether a collection
	  // should be iterated as an array or as an object
	  // Related: http://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength
	  // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094
	  var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1;
	  var getLength = property('length');
	  var isArrayLike = function(collection) {
	    var length = getLength(collection);
	    return typeof length == 'number' && length >= 0 && length <= MAX_ARRAY_INDEX;
	  };
	
	  // Collection Functions
	  // --------------------
	
	  // The cornerstone, an `each` implementation, aka `forEach`.
	  // Handles raw objects in addition to array-likes. Treats all
	  // sparse array-likes as if they were dense.
	  _.each = _.forEach = function(obj, iteratee, context) {
	    iteratee = optimizeCb(iteratee, context);
	    var i, length;
	    if (isArrayLike(obj)) {
	      for (i = 0, length = obj.length; i < length; i++) {
	        iteratee(obj[i], i, obj);
	      }
	    } else {
	      var keys = _.keys(obj);
	      for (i = 0, length = keys.length; i < length; i++) {
	        iteratee(obj[keys[i]], keys[i], obj);
	      }
	    }
	    return obj;
	  };
	
	  // Return the results of applying the iteratee to each element.
	  _.map = _.collect = function(obj, iteratee, context) {
	    iteratee = cb(iteratee, context);
	    var keys = !isArrayLike(obj) && _.keys(obj),
	        length = (keys || obj).length,
	        results = Array(length);
	    for (var index = 0; index < length; index++) {
	      var currentKey = keys ? keys[index] : index;
	      results[index] = iteratee(obj[currentKey], currentKey, obj);
	    }
	    return results;
	  };
	
	  // Create a reducing function iterating left or right.
	  function createReduce(dir) {
	    // Optimized iterator function as using arguments.length
	    // in the main function will deoptimize the, see #1991.
	    function iterator(obj, iteratee, memo, keys, index, length) {
	      for (; index >= 0 && index < length; index += dir) {
	        var currentKey = keys ? keys[index] : index;
	        memo = iteratee(memo, obj[currentKey], currentKey, obj);
	      }
	      return memo;
	    }
	
	    return function(obj, iteratee, memo, context) {
	      iteratee = optimizeCb(iteratee, context, 4);
	      var keys = !isArrayLike(obj) && _.keys(obj),
	          length = (keys || obj).length,
	          index = dir > 0 ? 0 : length - 1;
	      // Determine the initial value if none is provided.
	      if (arguments.length < 3) {
	        memo = obj[keys ? keys[index] : index];
	        index += dir;
	      }
	      return iterator(obj, iteratee, memo, keys, index, length);
	    };
	  }
	
	  // **Reduce** builds up a single result from a list of values, aka `inject`,
	  // or `foldl`.
	  _.reduce = _.foldl = _.inject = createReduce(1);
	
	  // The right-associative version of reduce, also known as `foldr`.
	  _.reduceRight = _.foldr = createReduce(-1);
	
	  // Return the first value which passes a truth test. Aliased as `detect`.
	  _.find = _.detect = function(obj, predicate, context) {
	    var key;
	    if (isArrayLike(obj)) {
	      key = _.findIndex(obj, predicate, context);
	    } else {
	      key = _.findKey(obj, predicate, context);
	    }
	    if (key !== void 0 && key !== -1) return obj[key];
	  };
	
	  // Return all the elements that pass a truth test.
	  // Aliased as `select`.
	  _.filter = _.select = function(obj, predicate, context) {
	    var results = [];
	    predicate = cb(predicate, context);
	    _.each(obj, function(value, index, list) {
	      if (predicate(value, index, list)) results.push(value);
	    });
	    return results;
	  };
	
	  // Return all the elements for which a truth test fails.
	  _.reject = function(obj, predicate, context) {
	    return _.filter(obj, _.negate(cb(predicate)), context);
	  };
	
	  // Determine whether all of the elements match a truth test.
	  // Aliased as `all`.
	  _.every = _.all = function(obj, predicate, context) {
	    predicate = cb(predicate, context);
	    var keys = !isArrayLike(obj) && _.keys(obj),
	        length = (keys || obj).length;
	    for (var index = 0; index < length; index++) {
	      var currentKey = keys ? keys[index] : index;
	      if (!predicate(obj[currentKey], currentKey, obj)) return false;
	    }
	    return true;
	  };
	
	  // Determine if at least one element in the object matches a truth test.
	  // Aliased as `any`.
	  _.some = _.any = function(obj, predicate, context) {
	    predicate = cb(predicate, context);
	    var keys = !isArrayLike(obj) && _.keys(obj),
	        length = (keys || obj).length;
	    for (var index = 0; index < length; index++) {
	      var currentKey = keys ? keys[index] : index;
	      if (predicate(obj[currentKey], currentKey, obj)) return true;
	    }
	    return false;
	  };
	
	  // Determine if the array or object contains a given item (using `===`).
	  // Aliased as `includes` and `include`.
	  _.contains = _.includes = _.include = function(obj, item, fromIndex, guard) {
	    if (!isArrayLike(obj)) obj = _.values(obj);
	    if (typeof fromIndex != 'number' || guard) fromIndex = 0;
	    return _.indexOf(obj, item, fromIndex) >= 0;
	  };
	
	  // Invoke a method (with arguments) on every item in a collection.
	  _.invoke = function(obj, method) {
	    var args = slice.call(arguments, 2);
	    var isFunc = _.isFunction(method);
	    return _.map(obj, function(value) {
	      var func = isFunc ? method : value[method];
	      return func == null ? func : func.apply(value, args);
	    });
	  };
	
	  // Convenience version of a common use case of `map`: fetching a property.
	  _.pluck = function(obj, key) {
	    return _.map(obj, _.property(key));
	  };
	
	  // Convenience version of a common use case of `filter`: selecting only objects
	  // containing specific `key:value` pairs.
	  _.where = function(obj, attrs) {
	    return _.filter(obj, _.matcher(attrs));
	  };
	
	  // Convenience version of a common use case of `find`: getting the first object
	  // containing specific `key:value` pairs.
	  _.findWhere = function(obj, attrs) {
	    return _.find(obj, _.matcher(attrs));
	  };
	
	  // Return the maximum element (or element-based computation).
	  _.max = function(obj, iteratee, context) {
	    var result = -Infinity, lastComputed = -Infinity,
	        value, computed;
	    if (iteratee == null && obj != null) {
	      obj = isArrayLike(obj) ? obj : _.values(obj);
	      for (var i = 0, length = obj.length; i < length; i++) {
	        value = obj[i];
	        if (value > result) {
	          result = value;
	        }
	      }
	    } else {
	      iteratee = cb(iteratee, context);
	      _.each(obj, function(value, index, list) {
	        computed = iteratee(value, index, list);
	        if (computed > lastComputed || computed === -Infinity && result === -Infinity) {
	          result = value;
	          lastComputed = computed;
	        }
	      });
	    }
	    return result;
	  };
	
	  // Return the minimum element (or element-based computation).
	  _.min = function(obj, iteratee, context) {
	    var result = Infinity, lastComputed = Infinity,
	        value, computed;
	    if (iteratee == null && obj != null) {
	      obj = isArrayLike(obj) ? obj : _.values(obj);
	      for (var i = 0, length = obj.length; i < length; i++) {
	        value = obj[i];
	        if (value < result) {
	          result = value;
	        }
	      }
	    } else {
	      iteratee = cb(iteratee, context);
	      _.each(obj, function(value, index, list) {
	        computed = iteratee(value, index, list);
	        if (computed < lastComputed || computed === Infinity && result === Infinity) {
	          result = value;
	          lastComputed = computed;
	        }
	      });
	    }
	    return result;
	  };
	
	  // Shuffle a collection, using the modern version of the
	  // [Fisher-Yates shuffle](http://en.wikipedia.org/wiki/Fisher–Yates_shuffle).
	  _.shuffle = function(obj) {
	    var set = isArrayLike(obj) ? obj : _.values(obj);
	    var length = set.length;
	    var shuffled = Array(length);
	    for (var index = 0, rand; index < length; index++) {
	      rand = _.random(0, index);
	      if (rand !== index) shuffled[index] = shuffled[rand];
	      shuffled[rand] = set[index];
	    }
	    return shuffled;
	  };
	
	  // Sample **n** random values from a collection.
	  // If **n** is not specified, returns a single random element.
	  // The internal `guard` argument allows it to work with `map`.
	  _.sample = function(obj, n, guard) {
	    if (n == null || guard) {
	      if (!isArrayLike(obj)) obj = _.values(obj);
	      return obj[_.random(obj.length - 1)];
	    }
	    return _.shuffle(obj).slice(0, Math.max(0, n));
	  };
	
	  // Sort the object's values by a criterion produced by an iteratee.
	  _.sortBy = function(obj, iteratee, context) {
	    iteratee = cb(iteratee, context);
	    return _.pluck(_.map(obj, function(value, index, list) {
	      return {
	        value: value,
	        index: index,
	        criteria: iteratee(value, index, list)
	      };
	    }).sort(function(left, right) {
	      var a = left.criteria;
	      var b = right.criteria;
	      if (a !== b) {
	        if (a > b || a === void 0) return 1;
	        if (a < b || b === void 0) return -1;
	      }
	      return left.index - right.index;
	    }), 'value');
	  };
	
	  // An internal function used for aggregate "group by" operations.
	  var group = function(behavior) {
	    return function(obj, iteratee, context) {
	      var result = {};
	      iteratee = cb(iteratee, context);
	      _.each(obj, function(value, index) {
	        var key = iteratee(value, index, obj);
	        behavior(result, value, key);
	      });
	      return result;
	    };
	  };
	
	  // Groups the object's values by a criterion. Pass either a string attribute
	  // to group by, or a function that returns the criterion.
	  _.groupBy = group(function(result, value, key) {
	    if (_.has(result, key)) result[key].push(value); else result[key] = [value];
	  });
	
	  // Indexes the object's values by a criterion, similar to `groupBy`, but for
	  // when you know that your index values will be unique.
	  _.indexBy = group(function(result, value, key) {
	    result[key] = value;
	  });
	
	  // Counts instances of an object that group by a certain criterion. Pass
	  // either a string attribute to count by, or a function that returns the
	  // criterion.
	  _.countBy = group(function(result, value, key) {
	    if (_.has(result, key)) result[key]++; else result[key] = 1;
	  });
	
	  // Safely create a real, live array from anything iterable.
	  _.toArray = function(obj) {
	    if (!obj) return [];
	    if (_.isArray(obj)) return slice.call(obj);
	    if (isArrayLike(obj)) return _.map(obj, _.identity);
	    return _.values(obj);
	  };
	
	  // Return the number of elements in an object.
	  _.size = function(obj) {
	    if (obj == null) return 0;
	    return isArrayLike(obj) ? obj.length : _.keys(obj).length;
	  };
	
	  // Split a collection into two arrays: one whose elements all satisfy the given
	  // predicate, and one whose elements all do not satisfy the predicate.
	  _.partition = function(obj, predicate, context) {
	    predicate = cb(predicate, context);
	    var pass = [], fail = [];
	    _.each(obj, function(value, key, obj) {
	      (predicate(value, key, obj) ? pass : fail).push(value);
	    });
	    return [pass, fail];
	  };
	
	  // Array Functions
	  // ---------------
	
	  // Get the first element of an array. Passing **n** will return the first N
	  // values in the array. Aliased as `head` and `take`. The **guard** check
	  // allows it to work with `_.map`.
	  _.first = _.head = _.take = function(array, n, guard) {
	    if (array == null) return void 0;
	    if (n == null || guard) return array[0];
	    return _.initial(array, array.length - n);
	  };
	
	  // Returns everything but the last entry of the array. Especially useful on
	  // the arguments object. Passing **n** will return all the values in
	  // the array, excluding the last N.
	  _.initial = function(array, n, guard) {
	    return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n)));
	  };
	
	  // Get the last element of an array. Passing **n** will return the last N
	  // values in the array.
	  _.last = function(array, n, guard) {
	    if (array == null) return void 0;
	    if (n == null || guard) return array[array.length - 1];
	    return _.rest(array, Math.max(0, array.length - n));
	  };
	
	  // Returns everything but the first entry of the array. Aliased as `tail` and `drop`.
	  // Especially useful on the arguments object. Passing an **n** will return
	  // the rest N values in the array.
	  _.rest = _.tail = _.drop = function(array, n, guard) {
	    return slice.call(array, n == null || guard ? 1 : n);
	  };
	
	  // Trim out all falsy values from an array.
	  _.compact = function(array) {
	    return _.filter(array, _.identity);
	  };
	
	  // Internal implementation of a recursive `flatten` function.
	  var flatten = function(input, shallow, strict, startIndex) {
	    var output = [], idx = 0;
	    for (var i = startIndex || 0, length = getLength(input); i < length; i++) {
	      var value = input[i];
	      if (isArrayLike(value) && (_.isArray(value) || _.isArguments(value))) {
	        //flatten current level of array or arguments object
	        if (!shallow) value = flatten(value, shallow, strict);
	        var j = 0, len = value.length;
	        output.length += len;
	        while (j < len) {
	          output[idx++] = value[j++];
	        }
	      } else if (!strict) {
	        output[idx++] = value;
	      }
	    }
	    return output;
	  };
	
	  // Flatten out an array, either recursively (by default), or just one level.
	  _.flatten = function(array, shallow) {
	    return flatten(array, shallow, false);
	  };
	
	  // Return a version of the array that does not contain the specified value(s).
	  _.without = function(array) {
	    return _.difference(array, slice.call(arguments, 1));
	  };
	
	  // Produce a duplicate-free version of the array. If the array has already
	  // been sorted, you have the option of using a faster algorithm.
	  // Aliased as `unique`.
	  _.uniq = _.unique = function(array, isSorted, iteratee, context) {
	    if (!_.isBoolean(isSorted)) {
	      context = iteratee;
	      iteratee = isSorted;
	      isSorted = false;
	    }
	    if (iteratee != null) iteratee = cb(iteratee, context);
	    var result = [];
	    var seen = [];
	    for (var i = 0, length = getLength(array); i < length; i++) {
	      var value = array[i],
	          computed = iteratee ? iteratee(value, i, array) : value;
	      if (isSorted) {
	        if (!i || seen !== computed) result.push(value);
	        seen = computed;
	      } else if (iteratee) {
	        if (!_.contains(seen, computed)) {
	          seen.push(computed);
	          result.push(value);
	        }
	      } else if (!_.contains(result, value)) {
	        result.push(value);
	      }
	    }
	    return result;
	  };
	
	  // Produce an array that contains the union: each distinct element from all of
	  // the passed-in arrays.
	  _.union = function() {
	    return _.uniq(flatten(arguments, true, true));
	  };
	
	  // Produce an array that contains every item shared between all the
	  // passed-in arrays.
	  _.intersection = function(array) {
	    var result = [];
	    var argsLength = arguments.length;
	    for (var i = 0, length = getLength(array); i < length; i++) {
	      var item = array[i];
	      if (_.contains(result, item)) continue;
	      for (var j = 1; j < argsLength; j++) {
	        if (!_.contains(arguments[j], item)) break;
	      }
	      if (j === argsLength) result.push(item);
	    }
	    return result;
	  };
	
	  // Take the difference between one array and a number of other arrays.
	  // Only the elements present in just the first array will remain.
	  _.difference = function(array) {
	    var rest = flatten(arguments, true, true, 1);
	    return _.filter(array, function(value){
	      return !_.contains(rest, value);
	    });
	  };
	
	  // Zip together multiple lists into a single array -- elements that share
	  // an index go together.
	  _.zip = function() {
	    return _.unzip(arguments);
	  };
	
	  // Complement of _.zip. Unzip accepts an array of arrays and groups
	  // each array's elements on shared indices
	  _.unzip = function(array) {
	    var length = array && _.max(array, getLength).length || 0;
	    var result = Array(length);
	
	    for (var index = 0; index < length; index++) {
	      result[index] = _.pluck(array, index);
	    }
	    return result;
	  };
	
	  // Converts lists into objects. Pass either a single array of `[key, value]`
	  // pairs, or two parallel arrays of the same length -- one of keys, and one of
	  // the corresponding values.
	  _.object = function(list, values) {
	    var result = {};
	    for (var i = 0, length = getLength(list); i < length; i++) {
	      if (values) {
	        result[list[i]] = values[i];
	      } else {
	        result[list[i][0]] = list[i][1];
	      }
	    }
	    return result;
	  };
	
	  // Generator function to create the findIndex and findLastIndex functions
	  function createPredicateIndexFinder(dir) {
	    return function(array, predicate, context) {
	      predicate = cb(predicate, context);
	      var length = getLength(array);
	      var index = dir > 0 ? 0 : length - 1;
	      for (; index >= 0 && index < length; index += dir) {
	        if (predicate(array[index], index, array)) return index;
	      }
	      return -1;
	    };
	  }
	
	  // Returns the first index on an array-like that passes a predicate test
	  _.findIndex = createPredicateIndexFinder(1);
	  _.findLastIndex = createPredicateIndexFinder(-1);
	
	  // Use a comparator function to figure out the smallest index at which
	  // an object should be inserted so as to maintain order. Uses binary search.
	  _.sortedIndex = function(array, obj, iteratee, context) {
	    iteratee = cb(iteratee, context, 1);
	    var value = iteratee(obj);
	    var low = 0, high = getLength(array);
	    while (low < high) {
	      var mid = Math.floor((low + high) / 2);
	      if (iteratee(array[mid]) < value) low = mid + 1; else high = mid;
	    }
	    return low;
	  };
	
	  // Generator function to create the indexOf and lastIndexOf functions
	  function createIndexFinder(dir, predicateFind, sortedIndex) {
	    return function(array, item, idx) {
	      var i = 0, length = getLength(array);
	      if (typeof idx == 'number') {
	        if (dir > 0) {
	            i = idx >= 0 ? idx : Math.max(idx + length, i);
	        } else {
	            length = idx >= 0 ? Math.min(idx + 1, length) : idx + length + 1;
	        }
	      } else if (sortedIndex && idx && length) {
	        idx = sortedIndex(array, item);
	        return array[idx] === item ? idx : -1;
	      }
	      if (item !== item) {
	        idx = predicateFind(slice.call(array, i, length), _.isNaN);
	        return idx >= 0 ? idx + i : -1;
	      }
	      for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) {
	        if (array[idx] === item) return idx;
	      }
	      return -1;
	    };
	  }
	
	  // Return the position of the first occurrence of an item in an array,
	  // or -1 if the item is not included in the array.
	  // If the array is large and already in sort order, pass `true`
	  // for **isSorted** to use binary search.
	  _.indexOf = createIndexFinder(1, _.findIndex, _.sortedIndex);
	  _.lastIndexOf = createIndexFinder(-1, _.findLastIndex);
	
	  // Generate an integer Array containing an arithmetic progression. A port of
	  // the native Python `range()` function. See
	  // [the Python documentation](http://docs.python.org/library/functions.html#range).
	  _.range = function(start, stop, step) {
	    if (stop == null) {
	      stop = start || 0;
	      start = 0;
	    }
	    step = step || 1;
	
	    var length = Math.max(Math.ceil((stop - start) / step), 0);
	    var range = Array(length);
	
	    for (var idx = 0; idx < length; idx++, start += step) {
	      range[idx] = start;
	    }
	
	    return range;
	  };
	
	  // Function (ahem) Functions
	  // ------------------
	
	  // Determines whether to execute a function as a constructor
	  // or a normal function with the provided arguments
	  var executeBound = function(sourceFunc, boundFunc, context, callingContext, args) {
	    if (!(callingContext instanceof boundFunc)) return sourceFunc.apply(context, args);
	    var self = baseCreate(sourceFunc.prototype);
	    var result = sourceFunc.apply(self, args);
	    if (_.isObject(result)) return result;
	    return self;
	  };
	
	  // Create a function bound to a given object (assigning `this`, and arguments,
	  // optionally). Delegates to **ECMAScript 5**'s native `Function.bind` if
	  // available.
	  _.bind = function(func, context) {
	    if (nativeBind && func.bind === nativeBind) return nativeBind.apply(func, slice.call(arguments, 1));
	    if (!_.isFunction(func)) throw new TypeError('Bind must be called on a function');
	    var args = slice.call(arguments, 2);
	    var bound = function() {
	      return executeBound(func, bound, context, this, args.concat(slice.call(arguments)));
	    };
	    return bound;
	  };
	
	  // Partially apply a function by creating a version that has had some of its
	  // arguments pre-filled, without changing its dynamic `this` context. _ acts
	  // as a placeholder, allowing any combination of arguments to be pre-filled.
	  _.partial = function(func) {
	    var boundArgs = slice.call(arguments, 1);
	    var bound = function() {
	      var position = 0, length = boundArgs.length;
	      var args = Array(length);
	      for (var i = 0; i < length; i++) {
	        args[i] = boundArgs[i] === _ ? arguments[position++] : boundArgs[i];
	      }
	      while (position < arguments.length) args.push(arguments[position++]);
	      return executeBound(func, bound, this, this, args);
	    };
	    return bound;
	  };
	
	  // Bind a number of an object's methods to that object. Remaining arguments
	  // are the method names to be bound. Useful for ensuring that all callbacks
	  // defined on an object belong to it.
	  _.bindAll = function(obj) {
	    var i, length = arguments.length, key;
	    if (length <= 1) throw new Error('bindAll must be passed function names');
	    for (i = 1; i < length; i++) {
	      key = arguments[i];
	      obj[key] = _.bind(obj[key], obj);
	    }
	    return obj;
	  };
	
	  // Memoize an expensive function by storing its results.
	  _.memoize = function(func, hasher) {
	    var memoize = function(key) {
	      var cache = memoize.cache;
	      var address = '' + (hasher ? hasher.apply(this, arguments) : key);
	      if (!_.has(cache, address)) cache[address] = func.apply(this, arguments);
	      return cache[address];
	    };
	    memoize.cache = {};
	    return memoize;
	  };
	
	  // Delays a function for the given number of milliseconds, and then calls
	  // it with the arguments supplied.
	  _.delay = function(func, wait) {
	    var args = slice.call(arguments, 2);
	    return setTimeout(function(){
	      return func.apply(null, args);
	    }, wait);
	  };
	
	  // Defers a function, scheduling it to run after the current call stack has
	  // cleared.
	  _.defer = _.partial(_.delay, _, 1);
	
	  // Returns a function, that, when invoked, will only be triggered at most once
	  // during a given window of time. Normally, the throttled function will run
	  // as much as it can, without ever going more than once per `wait` duration;
	  // but if you'd like to disable the execution on the leading edge, pass
	  // `{leading: false}`. To disable execution on the trailing edge, ditto.
	  _.throttle = function(func, wait, options) {
	    var context, args, result;
	    var timeout = null;
	    var previous = 0;
	    if (!options) options = {};
	    var later = function() {
	      previous = options.leading === false ? 0 : _.now();
	      timeout = null;
	      result = func.apply(context, args);
	      if (!timeout) context = args = null;
	    };
	    return function() {
	      var now = _.now();
	      if (!previous && options.leading === false) previous = now;
	      var remaining = wait - (now - previous);
	      context = this;
	      args = arguments;
	      if (remaining <= 0 || remaining > wait) {
	        if (timeout) {
	          clearTimeout(timeout);
	          timeout = null;
	        }
	        previous = now;
	        result = func.apply(context, args);
	        if (!timeout) context = args = null;
	      } else if (!timeout && options.trailing !== false) {
	        timeout = setTimeout(later, remaining);
	      }
	      return result;
	    };
	  };
	
	  // Returns a function, that, as long as it continues to be invoked, will not
	  // be triggered. The function will be called after it stops being called for
	  // N milliseconds. If `immediate` is passed, trigger the function on the
	  // leading edge, instead of the trailing.
	  _.debounce = function(func, wait, immediate) {
	    var timeout, args, context, timestamp, result;
	
	    var later = function() {
	      var last = _.now() - timestamp;
	
	      if (last < wait && last >= 0) {
	        timeout = setTimeout(later, wait - last);
	      } else {
	        timeout = null;
	        if (!immediate) {
	          result = func.apply(context, args);
	          if (!timeout) context = args = null;
	        }
	      }
	    };
	
	    return function() {
	      context = this;
	      args = arguments;
	      timestamp = _.now();
	      var callNow = immediate && !timeout;
	      if (!timeout) timeout = setTimeout(later, wait);
	      if (callNow) {
	        result = func.apply(context, args);
	        context = args = null;
	      }
	
	      return result;
	    };
	  };
	
	  // Returns the first function passed as an argument to the second,
	  // allowing you to adjust arguments, run code before and after, and
	  // conditionally execute the original function.
	  _.wrap = function(func, wrapper) {
	    return _.partial(wrapper, func);
	  };
	
	  // Returns a negated version of the passed-in predicate.
	  _.negate = function(predicate) {
	    return function() {
	      return !predicate.apply(this, arguments);
	    };
	  };
	
	  // Returns a function that is the composition of a list of functions, each
	  // consuming the return value of the function that follows.
	  _.compose = function() {
	    var args = arguments;
	    var start = args.length - 1;
	    return function() {
	      var i = start;
	      var result = args[start].apply(this, arguments);
	      while (i--) result = args[i].call(this, result);
	      return result;
	    };
	  };
	
	  // Returns a function that will only be executed on and after the Nth call.
	  _.after = function(times, func) {
	    return function() {
	      if (--times < 1) {
	        return func.apply(this, arguments);
	      }
	    };
	  };
	
	  // Returns a function that will only be executed up to (but not including) the Nth call.
	  _.before = function(times, func) {
	    var memo;
	    return function() {
	      if (--times > 0) {
	        memo = func.apply(this, arguments);
	      }
	      if (times <= 1) func = null;
	      return memo;
	    };
	  };
	
	  // Returns a function that will be executed at most one time, no matter how
	  // often you call it. Useful for lazy initialization.
	  _.once = _.partial(_.before, 2);
	
	  // Object Functions
	  // ----------------
	
	  // Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed.
	  var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString');
	  var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString',
	                      'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString'];
	
	  function collectNonEnumProps(obj, keys) {
	    var nonEnumIdx = nonEnumerableProps.length;
	    var constructor = obj.constructor;
	    var proto = (_.isFunction(constructor) && constructor.prototype) || ObjProto;
	
	    // Constructor is a special case.
	    var prop = 'constructor';
	    if (_.has(obj, prop) && !_.contains(keys, prop)) keys.push(prop);
	
	    while (nonEnumIdx--) {
	      prop = nonEnumerableProps[nonEnumIdx];
	      if (prop in obj && obj[prop] !== proto[prop] && !_.contains(keys, prop)) {
	        keys.push(prop);
	      }
	    }
	  }
	
	  // Retrieve the names of an object's own properties.
	  // Delegates to **ECMAScript 5**'s native `Object.keys`
	  _.keys = function(obj) {
	    if (!_.isObject(obj)) return [];
	    if (nativeKeys) return nativeKeys(obj);
	    var keys = [];
	    for (var key in obj) if (_.has(obj, key)) keys.push(key);
	    // Ahem, IE < 9.
	    if (hasEnumBug) collectNonEnumProps(obj, keys);
	    return keys;
	  };
	
	  // Retrieve all the property names of an object.
	  _.allKeys = function(obj) {
	    if (!_.isObject(obj)) return [];
	    var keys = [];
	    for (var key in obj) keys.push(key);
	    // Ahem, IE < 9.
	    if (hasEnumBug) collectNonEnumProps(obj, keys);
	    return keys;
	  };
	
	  // Retrieve the values of an object's properties.
	  _.values = function(obj) {
	    var keys = _.keys(obj);
	    var length = keys.length;
	    var values = Array(length);
	    for (var i = 0; i < length; i++) {
	      values[i] = obj[keys[i]];
	    }
	    return values;
	  };
	
	  // Returns the results of applying the iteratee to each element of the object
	  // In contrast to _.map it returns an object
	  _.mapObject = function(obj, iteratee, context) {
	    iteratee = cb(iteratee, context);
	    var keys =  _.keys(obj),
	          length = keys.length,
	          results = {},
	          currentKey;
	      for (var index = 0; index < length; index++) {
	        currentKey = keys[index];
	        results[currentKey] = iteratee(obj[currentKey], currentKey, obj);
	      }
	      return results;
	  };
	
	  // Convert an object into a list of `[key, value]` pairs.
	  _.pairs = function(obj) {
	    var keys = _.keys(obj);
	    var length = keys.length;
	    var pairs = Array(length);
	    for (var i = 0; i < length; i++) {
	      pairs[i] = [keys[i], obj[keys[i]]];
	    }
	    return pairs;
	  };
	
	  // Invert the keys and values of an object. The values must be serializable.
	  _.invert = function(obj) {
	    var result = {};
	    var keys = _.keys(obj);
	    for (var i = 0, length = keys.length; i < length; i++) {
	      result[obj[keys[i]]] = keys[i];
	    }
	    return result;
	  };
	
	  // Return a sorted list of the function names available on the object.
	  // Aliased as `methods`
	  _.functions = _.methods = function(obj) {
	    var names = [];
	    for (var key in obj) {
	      if (_.isFunction(obj[key])) names.push(key);
	    }
	    return names.sort();
	  };
	
	  // Extend a given object with all the properties in passed-in object(s).
	  _.extend = createAssigner(_.allKeys);
	
	  // Assigns a given object with all the own properties in the passed-in object(s)
	  // (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign)
	  _.extendOwn = _.assign = createAssigner(_.keys);
	
	  // Returns the first key on an object that passes a predicate test
	  _.findKey = function(obj, predicate, context) {
	    predicate = cb(predicate, context);
	    var keys = _.keys(obj), key;
	    for (var i = 0, length = keys.length; i < length; i++) {
	      key = keys[i];
	      if (predicate(obj[key], key, obj)) return key;
	    }
	  };
	
	  // Return a copy of the object only containing the whitelisted properties.
	  _.pick = function(object, oiteratee, context) {
	    var result = {}, obj = object, iteratee, keys;
	    if (obj == null) return result;
	    if (_.isFunction(oiteratee)) {
	      keys = _.allKeys(obj);
	      iteratee = optimizeCb(oiteratee, context);
	    } else {
	      keys = flatten(arguments, false, false, 1);
	      iteratee = function(value, key, obj) { return key in obj; };
	      obj = Object(obj);
	    }
	    for (var i = 0, length = keys.length; i < length; i++) {
	      var key = keys[i];
	      var value = obj[key];
	      if (iteratee(value, key, obj)) result[key] = value;
	    }
	    return result;
	  };
	
	   // Return a copy of the object without the blacklisted properties.
	  _.omit = function(obj, iteratee, context) {
	    if (_.isFunction(iteratee)) {
	      iteratee = _.negate(iteratee);
	    } else {
	      var keys = _.map(flatten(arguments, false, false, 1), String);
	      iteratee = function(value, key) {
	        return !_.contains(keys, key);
	      };
	    }
	    return _.pick(obj, iteratee, context);
	  };
	
	  // Fill in a given object with default properties.
	  _.defaults = createAssigner(_.allKeys, true);
	
	  // Creates an object that inherits from the given prototype object.
	  // If additional properties are provided then they will be added to the
	  // created object.
	  _.create = function(prototype, props) {
	    var result = baseCreate(prototype);
	    if (props) _.extendOwn(result, props);
	    return result;
	  };
	
	  // Create a (shallow-cloned) duplicate of an object.
	  _.clone = function(obj) {
	    if (!_.isObject(obj)) return obj;
	    return _.isArray(obj) ? obj.slice() : _.extend({}, obj);
	  };
	
	  // Invokes interceptor with the obj, and then returns obj.
	  // The primary purpose of this method is to "tap into" a method chain, in
	  // order to perform operations on intermediate results within the chain.
	  _.tap = function(obj, interceptor) {
	    interceptor(obj);
	    return obj;
	  };
	
	  // Returns whether an object has a given set of `key:value` pairs.
	  _.isMatch = function(object, attrs) {
	    var keys = _.keys(attrs), length = keys.length;
	    if (object == null) return !length;
	    var obj = Object(object);
	    for (var i = 0; i < length; i++) {
	      var key = keys[i];
	      if (attrs[key] !== obj[key] || !(key in obj)) return false;
	    }
	    return true;
	  };
	
	
	  // Internal recursive comparison function for `isEqual`.
	  var eq = function(a, b, aStack, bStack) {
	    // Identical objects are equal. `0 === -0`, but they aren't identical.
	    // See the [Harmony `egal` proposal](http://wiki.ecmascript.org/doku.php?id=harmony:egal).
	    if (a === b) return a !== 0 || 1 / a === 1 / b;
	    // A strict comparison is necessary because `null == undefined`.
	    if (a == null || b == null) return a === b;
	    // Unwrap any wrapped objects.
	    if (a instanceof _) a = a._wrapped;
	    if (b instanceof _) b = b._wrapped;
	    // Compare `[[Class]]` names.
	    var className = toString.call(a);
	    if (className !== toString.call(b)) return false;
	    switch (className) {
	      // Strings, numbers, regular expressions, dates, and booleans are compared by value.
	      case '[object RegExp]':
	      // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i')
	      case '[object String]':
	        // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is
	        // equivalent to `new String("5")`.
	        return '' + a === '' + b;
	      case '[object Number]':
	        // `NaN`s are equivalent, but non-reflexive.
	        // Object(NaN) is equivalent to NaN
	        if (+a !== +a) return +b !== +b;
	        // An `egal` comparison is performed for other numeric values.
	        return +a === 0 ? 1 / +a === 1 / b : +a === +b;
	      case '[object Date]':
	      case '[object Boolean]':
	        // Coerce dates and booleans to numeric primitive values. Dates are compared by their
	        // millisecond representations. Note that invalid dates with millisecond representations
	        // of `NaN` are not equivalent.
	        return +a === +b;
	    }
	
	    var areArrays = className === '[object Array]';
	    if (!areArrays) {
	      if (typeof a != 'object' || typeof b != 'object') return false;
	
	      // Objects with different constructors are not equivalent, but `Object`s or `Array`s
	      // from different frames are.
	      var aCtor = a.constructor, bCtor = b.constructor;
	      if (aCtor !== bCtor && !(_.isFunction(aCtor) && aCtor instanceof aCtor &&
	                               _.isFunction(bCtor) && bCtor instanceof bCtor)
	                          && ('constructor' in a && 'constructor' in b)) {
	        return false;
	      }
	    }
	    // Assume equality for cyclic structures. The algorithm for detecting cyclic
	    // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.
	
	    // Initializing stack of traversed objects.
	    // It's done here since we only need them for objects and arrays comparison.
	    aStack = aStack || [];
	    bStack = bStack || [];
	    var length = aStack.length;
	    while (length--) {
	      // Linear search. Performance is inversely proportional to the number of
	      // unique nested structures.
	      if (aStack[length] === a) return bStack[length] === b;
	    }
	
	    // Add the first object to the stack of traversed objects.
	    aStack.push(a);
	    bStack.push(b);
	
	    // Recursively compare objects and arrays.
	    if (areArrays) {
	      // Compare array lengths to determine if a deep comparison is necessary.
	      length = a.length;
	      if (length !== b.length) return false;
	      // Deep compare the contents, ignoring non-numeric properties.
	      while (length--) {
	        if (!eq(a[length], b[length], aStack, bStack)) return false;
	      }
	    } else {
	      // Deep compare objects.
	      var keys = _.keys(a), key;
	      length = keys.length;
	      // Ensure that both objects contain the same number of properties before comparing deep equality.
	      if (_.keys(b).length !== length) return false;
	      while (length--) {
	        // Deep compare each member
	        key = keys[length];
	        if (!(_.has(b, key) && eq(a[key], b[key], aStack, bStack))) return false;
	      }
	    }
	    // Remove the first object from the stack of traversed objects.
	    aStack.pop();
	    bStack.pop();
	    return true;
	  };
	
	  // Perform a deep comparison to check if two objects are equal.
	  _.isEqual = function(a, b) {
	    return eq(a, b);
	  };
	
	  // Is a given array, string, or object empty?
	  // An "empty" object has no enumerable own-properties.
	  _.isEmpty = function(obj) {
	    if (obj == null) return true;
	    if (isArrayLike(obj) && (_.isArray(obj) || _.isString(obj) || _.isArguments(obj))) return obj.length === 0;
	    return _.keys(obj).length === 0;
	  };
	
	  // Is a given value a DOM element?
	  _.isElement = function(obj) {
	    return !!(obj && obj.nodeType === 1);
	  };
	
	  // Is a given value an array?
	  // Delegates to ECMA5's native Array.isArray
	  _.isArray = nativeIsArray || function(obj) {
	    return toString.call(obj) === '[object Array]';
	  };
	
	  // Is a given variable an object?
	  _.isObject = function(obj) {
	    var type = typeof obj;
	    return type === 'function' || type === 'object' && !!obj;
	  };
	
	  // Add some isType methods: isArguments, isFunction, isString, isNumber, isDate, isRegExp, isError.
	  _.each(['Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp', 'Error'], function(name) {
	    _['is' + name] = function(obj) {
	      return toString.call(obj) === '[object ' + name + ']';
	    };
	  });
	
	  // Define a fallback version of the method in browsers (ahem, IE < 9), where
	  // there isn't any inspectable "Arguments" type.
	  if (!_.isArguments(arguments)) {
	    _.isArguments = function(obj) {
	      return _.has(obj, 'callee');
	    };
	  }
	
	  // Optimize `isFunction` if appropriate. Work around some typeof bugs in old v8,
	  // IE 11 (#1621), and in Safari 8 (#1929).
	  if (typeof /./ != 'function' && typeof Int8Array != 'object') {
	    _.isFunction = function(obj) {
	      return typeof obj == 'function' || false;
	    };
	  }
	
	  // Is a given object a finite number?
	  _.isFinite = function(obj) {
	    return isFinite(obj) && !isNaN(parseFloat(obj));
	  };
	
	  // Is the given value `NaN`? (NaN is the only number which does not equal itself).
	  _.isNaN = function(obj) {
	    return _.isNumber(obj) && obj !== +obj;
	  };
	
	  // Is a given value a boolean?
	  _.isBoolean = function(obj) {
	    return obj === true || obj === false || toString.call(obj) === '[object Boolean]';
	  };
	
	  // Is a given value equal to null?
	  _.isNull = function(obj) {
	    return obj === null;
	  };
	
	  // Is a given variable undefined?
	  _.isUndefined = function(obj) {
	    return obj === void 0;
	  };
	
	  // Shortcut function for checking if an object has a given property directly
	  // on itself (in other words, not on a prototype).
	  _.has = function(obj, key) {
	    return obj != null && hasOwnProperty.call(obj, key);
	  };
	
	  // Utility Functions
	  // -----------------
	
	  // Run Underscore.js in *noConflict* mode, returning the `_` variable to its
	  // previous owner. Returns a reference to the Underscore object.
	  _.noConflict = function() {
	    root._ = previousUnderscore;
	    return this;
	  };
	
	  // Keep the identity function around for default iteratees.
	  _.identity = function(value) {
	    return value;
	  };
	
	  // Predicate-generating functions. Often useful outside of Underscore.
	  _.constant = function(value) {
	    return function() {
	      return value;
	    };
	  };
	
	  _.noop = function(){};
	
	  _.property = property;
	
	  // Generates a function for a given object that returns a given property.
	  _.propertyOf = function(obj) {
	    return obj == null ? function(){} : function(key) {
	      return obj[key];
	    };
	  };
	
	  // Returns a predicate for checking whether an object has a given set of
	  // `key:value` pairs.
	  _.matcher = _.matches = function(attrs) {
	    attrs = _.extendOwn({}, attrs);
	    return function(obj) {
	      return _.isMatch(obj, attrs);
	    };
	  };
	
	  // Run a function **n** times.
	  _.times = function(n, iteratee, context) {
	    var accum = Array(Math.max(0, n));
	    iteratee = optimizeCb(iteratee, context, 1);
	    for (var i = 0; i < n; i++) accum[i] = iteratee(i);
	    return accum;
	  };
	
	  // Return a random integer between min and max (inclusive).
	  _.random = function(min, max) {
	    if (max == null) {
	      max = min;
	      min = 0;
	    }
	    return min + Math.floor(Math.random() * (max - min + 1));
	  };
	
	  // A (possibly faster) way to get the current timestamp as an integer.
	  _.now = Date.now || function() {
	    return new Date().getTime();
	  };
	
	   // List of HTML entities for escaping.
	  var escapeMap = {
	    '&': '&amp;',
	    '<': '&lt;',
	    '>': '&gt;',
	    '"': '&quot;',
	    "'": '&#x27;',
	    '`': '&#x60;'
	  };
	  var unescapeMap = _.invert(escapeMap);
	
	  // Functions for escaping and unescaping strings to/from HTML interpolation.
	  var createEscaper = function(map) {
	    var escaper = function(match) {
	      return map[match];
	    };
	    // Regexes for identifying a key that needs to be escaped
	    var source = '(?:' + _.keys(map).join('|') + ')';
	    var testRegexp = RegExp(source);
	    var replaceRegexp = RegExp(source, 'g');
	    return function(string) {
	      string = string == null ? '' : '' + string;
	      return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string;
	    };
	  };
	  _.escape = createEscaper(escapeMap);
	  _.unescape = createEscaper(unescapeMap);
	
	  // If the value of the named `property` is a function then invoke it with the
	  // `object` as context; otherwise, return it.
	  _.result = function(object, property, fallback) {
	    var value = object == null ? void 0 : object[property];
	    if (value === void 0) {
	      value = fallback;
	    }
	    return _.isFunction(value) ? value.call(object) : value;
	  };
	
	  // Generate a unique integer id (unique within the entire client session).
	  // Useful for temporary DOM ids.
	  var idCounter = 0;
	  _.uniqueId = function(prefix) {
	    var id = ++idCounter + '';
	    return prefix ? prefix + id : id;
	  };
	
	  // By default, Underscore uses ERB-style template delimiters, change the
	  // following template settings to use alternative delimiters.
	  _.templateSettings = {
	    evaluate    : /<%([\s\S]+?)%>/g,
	    interpolate : /<%=([\s\S]+?)%>/g,
	    escape      : /<%-([\s\S]+?)%>/g
	  };
	
	  // When customizing `templateSettings`, if you don't want to define an
	  // interpolation, evaluation or escaping regex, we need one that is
	  // guaranteed not to match.
	  var noMatch = /(.)^/;
	
	  // Certain characters need to be escaped so that they can be put into a
	  // string literal.
	  var escapes = {
	    "'":      "'",
	    '\\':     '\\',
	    '\r':     'r',
	    '\n':     'n',
	    '\u2028': 'u2028',
	    '\u2029': 'u2029'
	  };
	
	  var escaper = /\\|'|\r|\n|\u2028|\u2029/g;
	
	  var escapeChar = function(match) {
	    return '\\' + escapes[match];
	  };
	
	  // JavaScript micro-templating, similar to John Resig's implementation.
	  // Underscore templating handles arbitrary delimiters, preserves whitespace,
	  // and correctly escapes quotes within interpolated code.
	  // NB: `oldSettings` only exists for backwards compatibility.
	  _.template = function(text, settings, oldSettings) {
	    if (!settings && oldSettings) settings = oldSettings;
	    settings = _.defaults({}, settings, _.templateSettings);
	
	    // Combine delimiters into one regular expression via alternation.
	    var matcher = RegExp([
	      (settings.escape || noMatch).source,
	      (settings.interpolate || noMatch).source,
	      (settings.evaluate || noMatch).source
	    ].join('|') + '|$', 'g');
	
	    // Compile the template source, escaping string literals appropriately.
	    var index = 0;
	    var source = "__p+='";
	    text.replace(matcher, function(match, escape, interpolate, evaluate, offset) {
	      source += text.slice(index, offset).replace(escaper, escapeChar);
	      index = offset + match.length;
	
	      if (escape) {
	        source += "'+\n((__t=(" + escape + "))==null?'':_.escape(__t))+\n'";
	      } else if (interpolate) {
	        source += "'+\n((__t=(" + interpolate + "))==null?'':__t)+\n'";
	      } else if (evaluate) {
	        source += "';\n" + evaluate + "\n__p+='";
	      }
	
	      // Adobe VMs need the match returned to produce the correct offest.
	      return match;
	    });
	    source += "';\n";
	
	    // If a variable is not specified, place data values in local scope.
	    if (!settings.variable) source = 'with(obj||{}){\n' + source + '}\n';
	
	    source = "var __t,__p='',__j=Array.prototype.join," +
	      "print=function(){__p+=__j.call(arguments,'');};\n" +
	      source + 'return __p;\n';
	
	    try {
	      var render = new Function(settings.variable || 'obj', '_', source);
	    } catch (e) {
	      e.source = source;
	      throw e;
	    }
	
	    var template = function(data) {
	      return render.call(this, data, _);
	    };
	
	    // Provide the compiled source as a convenience for precompilation.
	    var argument = settings.variable || 'obj';
	    template.source = 'function(' + argument + '){\n' + source + '}';
	
	    return template;
	  };
	
	  // Add a "chain" function. Start chaining a wrapped Underscore object.
	  _.chain = function(obj) {
	    var instance = _(obj);
	    instance._chain = true;
	    return instance;
	  };
	
	  // OOP
	  // ---------------
	  // If Underscore is called as a function, it returns a wrapped object that
	  // can be used OO-style. This wrapper holds altered versions of all the
	  // underscore functions. Wrapped objects may be chained.
	
	  // Helper function to continue chaining intermediate results.
	  var result = function(instance, obj) {
	    return instance._chain ? _(obj).chain() : obj;
	  };
	
	  // Add your own custom functions to the Underscore object.
	  _.mixin = function(obj) {
	    _.each(_.functions(obj), function(name) {
	      var func = _[name] = obj[name];
	      _.prototype[name] = function() {
	        var args = [this._wrapped];
	        push.apply(args, arguments);
	        return result(this, func.apply(_, args));
	      };
	    });
	  };
	
	  // Add all of the Underscore functions to the wrapper object.
	  _.mixin(_);
	
	  // Add all mutator Array functions to the wrapper.
	  _.each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {
	    var method = ArrayProto[name];
	    _.prototype[name] = function() {
	      var obj = this._wrapped;
	      method.apply(obj, arguments);
	      if ((name === 'shift' || name === 'splice') && obj.length === 0) delete obj[0];
	      return result(this, obj);
	    };
	  });
	
	  // Add all accessor Array functions to the wrapper.
	  _.each(['concat', 'join', 'slice'], function(name) {
	    var method = ArrayProto[name];
	    _.prototype[name] = function() {
	      return result(this, method.apply(this._wrapped, arguments));
	    };
	  });
	
	  // Extracts the result from a wrapped and chained object.
	  _.prototype.value = function() {
	    return this._wrapped;
	  };
	
	  // Provide unwrapping proxy for some methods used in engine operations
	  // such as arithmetic and JSON stringification.
	  _.prototype.valueOf = _.prototype.toJSON = _.prototype.value;
	
	  _.prototype.toString = function() {
	    return '' + this._wrapped;
	  };
	
	  // AMD registration happens at the end for compatibility with AMD loaders
	  // that may not enforce next-turn semantics on modules. Even though general
	  // practice for AMD registration is to be anonymous, underscore registers
	  // as a named module because, like jQuery, it is a base library that is
	  // popular enough to be bundled in a third party lib, but not be part of
	  // an AMD load request. Those cases could generate an error when an
	  // anonymous define() is called outside of a loader request.
	  if (true) {
	    !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = function() {
	      return _;
	    }.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
	  }
	}.call(this));


/***/ }),
/* 34 */
/***/ (function(module, exports) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	exports.createCanvasContext2D = createCanvasContext2D;
	exports.outerWidth = outerWidth;
	exports.outerHeight = outerHeight;
	exports.replaceNode = replaceNode;
	exports.removeNode = removeNode;
	exports.removeChildren = removeChildren;
	exports.replaceChildren = replaceChildren;
	/**
	 * @module ol/dom
	 */
	/**
	 * Create an html canvas element and returns its 2d context.
	 * @param {number=} opt_width Canvas width.
	 * @param {number=} opt_height Canvas height.
	 * @return {CanvasRenderingContext2D} The context.
	 */
	function createCanvasContext2D(opt_width, opt_height) {
	    var canvas = document.createElement('canvas');
	    if (opt_width) {
	        canvas.width = opt_width;
	    }
	    if (opt_height) {
	        canvas.height = opt_height;
	    }
	    return canvas.getContext('2d');
	}
	/**
	 * Get the current computed width for the given element including margin,
	 * padding and border.
	 * Equivalent to jQuery's `$(el).outerWidth(true)`.
	 * @param {!HTMLElement} element Element.
	 * @return {number} The width.
	 */
	function outerWidth(element) {
	    var width = element.offsetWidth;
	    var style = getComputedStyle(element);
	    width += parseInt(style.marginLeft, 10) + parseInt(style.marginRight, 10);
	    return width;
	}
	/**
	 * Get the current computed height for the given element including margin,
	 * padding and border.
	 * Equivalent to jQuery's `$(el).outerHeight(true)`.
	 * @param {!HTMLElement} element Element.
	 * @return {number} The height.
	 */
	function outerHeight(element) {
	    var height = element.offsetHeight;
	    var style = getComputedStyle(element);
	    height += parseInt(style.marginTop, 10) + parseInt(style.marginBottom, 10);
	    return height;
	}
	/**
	 * @param {Node} newNode Node to replace old node
	 * @param {Node} oldNode The node to be replaced
	 */
	function replaceNode(newNode, oldNode) {
	    var parent = oldNode.parentNode;
	    if (parent) {
	        parent.replaceChild(newNode, oldNode);
	    }
	}
	/**
	 * @param {Node} node The node to remove.
	 * @returns {Node} The node that was removed or null.
	 */
	function removeNode(node) {
	    return node && node.parentNode ? node.parentNode.removeChild(node) : null;
	}
	/**
	 * @param {Node} node The node to remove the children from.
	 */
	function removeChildren(node) {
	    while (node.lastChild) {
	        node.removeChild(node.lastChild);
	    }
	}
	/**
	 * Transform the children of a parent node so they match the
	 * provided list of children.  This function aims to efficiently
	 * remove, add, and reorder child nodes while maintaining a simple
	 * implementation (it is not guaranteed to minimize DOM operations).
	 * @param {Node} node The parent node whose children need reworking.
	 * @param {Array<Node>} children The desired children.
	 */
	function replaceChildren(node, children) {
	    var oldChildren = node.childNodes;
	    for (var i = 0; true; ++i) {
	        var oldChild = oldChildren[i];
	        var newChild = children[i];
	        // check if our work is done
	        if (!oldChild && !newChild) {
	            break;
	        }
	        // check if children match
	        if (oldChild === newChild) {
	            continue;
	        }
	        // check if a new child needs to be added
	        if (!oldChild) {
	            node.appendChild(newChild);
	            continue;
	        }
	        // check if an old child needs to be removed
	        if (!newChild) {
	            node.removeChild(oldChild);
	            --i;
	            continue;
	        }
	        // reorder
	        node.insertBefore(newChild, oldChild);
	    }
	}
	//# sourceMappingURL=dom.js.map

/***/ }),
/* 35 */
/***/ (function(module, exports) {

	"use strict";
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	exports.stopPropagation = stopPropagation;
	exports.preventDefault = preventDefault;
	/**
	 * @module ol/events/Event
	 */
	/**
	 * @classdesc
	 * Stripped down implementation of the W3C DOM Level 2 Event interface.
	 * See https://www.w3.org/TR/DOM-Level-2-Events/events.html#Events-interface.
	 *
	 * This implementation only provides `type` and `target` properties, and
	 * `stopPropagation` and `preventDefault` methods. It is meant as base class
	 * for higher level events defined in the library, and works with
	 * {@link module:ol/events/Target~Target}.
	 */
	var BaseEvent = /** @class */function () {
	  /**
	   * @param {string} type Type.
	   */
	  function BaseEvent(type) {
	    /**
	     * @type {boolean}
	     */
	    this.propagationStopped;
	    /**
	     * The event type.
	     * @type {string}
	     * @api
	     */
	    this.type = type;
	    /**
	     * The event target.
	     * @type {Object}
	     * @api
	     */
	    this.target = null;
	  }
	  /**
	   * Stop event propagation.
	   * @api
	   */
	  BaseEvent.prototype.preventDefault = function () {
	    this.propagationStopped = true;
	  };
	  /**
	   * Stop event propagation.
	   * @api
	   */
	  BaseEvent.prototype.stopPropagation = function () {
	    this.propagationStopped = true;
	  };
	  return BaseEvent;
	}();
	/**
	 * @param {Event|import("./Event.js").default} evt Event
	 */
	function stopPropagation(evt) {
	  evt.stopPropagation();
	}
	/**
	 * @param {Event|import("./Event.js").default} evt Event
	 */
	function preventDefault(evt) {
	  evt.preventDefault();
	}
	exports.default = BaseEvent;
	//# sourceMappingURL=Event.js.map

/***/ }),
/* 36 */
/***/ (function(module, exports) {

	module.exports = function (it) {
	  if (typeof it != 'function') throw TypeError(it + ' is not a function!');
	  return it;
	};


/***/ }),
/* 37 */
/***/ (function(module, exports, __webpack_require__) {

	var dP = __webpack_require__(26);
	var createDesc = __webpack_require__(95);
	module.exports = __webpack_require__(25) ? function (object, key, value) {
	  return dP.f(object, key, createDesc(1, value));
	} : function (object, key, value) {
	  object[key] = value;
	  return object;
	};


/***/ }),
/* 38 */
/***/ (function(module, exports, __webpack_require__) {

	var global = __webpack_require__(9);
	var hide = __webpack_require__(37);
	var has = __webpack_require__(42);
	var SRC = __webpack_require__(98)('src');
	var $toString = __webpack_require__(740);
	var TO_STRING = 'toString';
	var TPL = ('' + $toString).split(TO_STRING);
	
	__webpack_require__(51).inspectSource = function (it) {
	  return $toString.call(it);
	};
	
	(module.exports = function (O, key, val, safe) {
	  var isFunction = typeof val == 'function';
	  if (isFunction) has(val, 'name') || hide(val, 'name', key);
	  if (O[key] === val) return;
	  if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));
	  if (O === global) {
	    O[key] = val;
	  } else if (!safe) {
	    delete O[key];
	    hide(O, key, val);
	  } else if (O[key]) {
	    O[key] = val;
	  } else {
	    hide(O, key, val);
	  }
	// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative
	})(Function.prototype, TO_STRING, function toString() {
	  return typeof this == 'function' && this[SRC] || $toString.call(this);
	});


/***/ }),
/* 39 */
/***/ (function(module, exports, __webpack_require__) {

	var $export = __webpack_require__(3);
	var fails = __webpack_require__(13);
	var defined = __webpack_require__(59);
	var quot = /"/g;
	// B.2.3.2.1 CreateHTML(string, tag, attribute, value)
	var createHTML = function (string, tag, attribute, value) {
	  var S = String(defined(string));
	  var p1 = '<' + tag;
	  if (attribute !== '') p1 += ' ' + attribute + '="' + String(value).replace(quot, '&quot;') + '"';
	  return p1 + '>' + S + '</' + tag + '>';
	};
	module.exports = function (NAME, exec) {
	  var O = {};
	  O[NAME] = exec(createHTML);
	  $export($export.P + $export.F * fails(function () {
	    var test = ''[NAME]('"');
	    return test !== test.toLowerCase() || test.split('"').length > 3;
	  }), 'String', O);
	};


/***/ }),
/* 40 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	exports.primaryAction = exports.penOnly = exports.touchOnly = exports.mouseOnly = exports.targetNotEditable = exports.shiftKeyOnly = exports.platformModifierKeyOnly = exports.noModifierKeys = exports.doubleClick = exports.singleClick = exports.pointerMove = exports.never = exports.mouseActionButton = exports.click = exports.always = exports.focus = exports.altShiftKeysOnly = exports.altKeyOnly = undefined;
	
	var _MapBrowserEventType = __webpack_require__(69);
	
	var _MapBrowserEventType2 = _interopRequireDefault(_MapBrowserEventType);
	
	var _asserts = __webpack_require__(29);
	
	var _functions = __webpack_require__(31);
	
	var _has = __webpack_require__(105);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	/**
	 * A function that takes an {@link module:ol/MapBrowserEvent} and returns a
	 * `{boolean}`. If the condition is met, true should be returned.
	 *
	 * @typedef {function(this: ?, import("../MapBrowserEvent.js").default): boolean} Condition
	 */
	/**
	 * Return `true` if only the alt-key is pressed, `false` otherwise (e.g. when
	 * additionally the shift-key is pressed).
	 *
	 * @param {import("../MapBrowserEvent.js").default} mapBrowserEvent Map browser event.
	 * @return {boolean} True if only the alt key is pressed.
	 * @api
	 */
	/**
	 * @module ol/events/condition
	 */
	var altKeyOnly = exports.altKeyOnly = function altKeyOnly(mapBrowserEvent) {
	  var originalEvent = /** @type {KeyboardEvent|MouseEvent|TouchEvent} */mapBrowserEvent.originalEvent;
	  return originalEvent.altKey && !(originalEvent.metaKey || originalEvent.ctrlKey) && !originalEvent.shiftKey;
	};
	/**
	 * Return `true` if only the alt-key and shift-key is pressed, `false` otherwise
	 * (e.g. when additionally the platform-modifier-key is pressed).
	 *
	 * @param {import("../MapBrowserEvent.js").default} mapBrowserEvent Map browser event.
	 * @return {boolean} True if only the alt and shift keys are pressed.
	 * @api
	 */
	var altShiftKeysOnly = exports.altShiftKeysOnly = function altShiftKeysOnly(mapBrowserEvent) {
	  var originalEvent = /** @type {KeyboardEvent|MouseEvent|TouchEvent} */mapBrowserEvent.originalEvent;
	  return originalEvent.altKey && !(originalEvent.metaKey || originalEvent.ctrlKey) && originalEvent.shiftKey;
	};
	/**
	 * Return `true` if the map has the focus. This condition requires a map target
	 * element with a `tabindex` attribute, e.g. `<div id="map" tabindex="1">`.
	 *
	 * @param {import("../MapBrowserEvent.js").default} event Map browser event.
	 * @return {boolean} The map has the focus.
	 * @api
	 */
	var focus = exports.focus = function focus(event) {
	  return event.target.getTargetElement() === document.activeElement;
	};
	/**
	 * Return always true.
	 *
	 * @param {import("../MapBrowserEvent.js").default} mapBrowserEvent Map browser event.
	 * @return {boolean} True.
	 * @api
	 */
	var always = exports.always = _functions.TRUE;
	/**
	 * Return `true` if the event is a `click` event, `false` otherwise.
	 *
	 * @param {import("../MapBrowserEvent.js").default} mapBrowserEvent Map browser event.
	 * @return {boolean} True if the event is a map `click` event.
	 * @api
	 */
	var click = exports.click = function click(mapBrowserEvent) {
	  return mapBrowserEvent.type == _MapBrowserEventType2.default.CLICK;
	};
	/**
	 * Return `true` if the event has an "action"-producing mouse button.
	 *
	 * By definition, this includes left-click on windows/linux, and left-click
	 * without the ctrl key on Macs.
	 *
	 * @param {import("../MapBrowserEvent.js").default} mapBrowserEvent Map browser event.
	 * @return {boolean} The result.
	 */
	var mouseActionButton = exports.mouseActionButton = function mouseActionButton(mapBrowserEvent) {
	  var originalEvent = /** @type {MouseEvent} */mapBrowserEvent.originalEvent;
	  return originalEvent.button == 0 && !(_has.WEBKIT && _has.MAC && originalEvent.ctrlKey);
	};
	/**
	 * Return always false.
	 *
	 * @param {import("../MapBrowserEvent.js").default} mapBrowserEvent Map browser event.
	 * @return {boolean} False.
	 * @api
	 */
	var never = exports.never = _functions.FALSE;
	/**
	 * Return `true` if the browser event is a `pointermove` event, `false`
	 * otherwise.
	 *
	 * @param {import("../MapBrowserEvent.js").default} mapBrowserEvent Map browser event.
	 * @return {boolean} True if the browser event is a `pointermove` event.
	 * @api
	 */
	var pointerMove = exports.pointerMove = function pointerMove(mapBrowserEvent) {
	  return mapBrowserEvent.type == 'pointermove';
	};
	/**
	 * Return `true` if the event is a map `singleclick` event, `false` otherwise.
	 *
	 * @param {import("../MapBrowserEvent.js").default} mapBrowserEvent Map browser event.
	 * @return {boolean} True if the event is a map `singleclick` event.
	 * @api
	 */
	var singleClick = exports.singleClick = function singleClick(mapBrowserEvent) {
	  return mapBrowserEvent.type == _MapBrowserEventType2.default.SINGLECLICK;
	};
	/**
	 * Return `true` if the event is a map `dblclick` event, `false` otherwise.
	 *
	 * @param {import("../MapBrowserEvent.js").default} mapBrowserEvent Map browser event.
	 * @return {boolean} True if the event is a map `dblclick` event.
	 * @api
	 */
	var doubleClick = exports.doubleClick = function doubleClick(mapBrowserEvent) {
	  return mapBrowserEvent.type == _MapBrowserEventType2.default.DBLCLICK;
	};
	/**
	 * Return `true` if no modifier key (alt-, shift- or platform-modifier-key) is
	 * pressed.
	 *
	 * @param {import("../MapBrowserEvent.js").default} mapBrowserEvent Map browser event.
	 * @return {boolean} True only if there no modifier keys are pressed.
	 * @api
	 */
	var noModifierKeys = exports.noModifierKeys = function noModifierKeys(mapBrowserEvent) {
	  var originalEvent = /** @type {KeyboardEvent|MouseEvent|TouchEvent} */mapBrowserEvent.originalEvent;
	  return !originalEvent.altKey && !(originalEvent.metaKey || originalEvent.ctrlKey) && !originalEvent.shiftKey;
	};
	/**
	 * Return `true` if only the platform-modifier-key (the meta-key on Mac,
	 * ctrl-key otherwise) is pressed, `false` otherwise (e.g. when additionally
	 * the shift-key is pressed).
	 *
	 * @param {import("../MapBrowserEvent.js").default} mapBrowserEvent Map browser event.
	 * @return {boolean} True if only the platform modifier key is pressed.
	 * @api
	 */
	var platformModifierKeyOnly = exports.platformModifierKeyOnly = function platformModifierKeyOnly(mapBrowserEvent) {
	  var originalEvent = /** @type {KeyboardEvent|MouseEvent|TouchEvent} */mapBrowserEvent.originalEvent;
	  return !originalEvent.altKey && (_has.MAC ? originalEvent.metaKey : originalEvent.ctrlKey) && !originalEvent.shiftKey;
	};
	/**
	 * Return `true` if only the shift-key is pressed, `false` otherwise (e.g. when
	 * additionally the alt-key is pressed).
	 *
	 * @param {import("../MapBrowserEvent.js").default} mapBrowserEvent Map browser event.
	 * @return {boolean} True if only the shift key is pressed.
	 * @api
	 */
	var shiftKeyOnly = exports.shiftKeyOnly = function shiftKeyOnly(mapBrowserEvent) {
	  var originalEvent = /** @type {KeyboardEvent|MouseEvent|TouchEvent} */mapBrowserEvent.originalEvent;
	  return !originalEvent.altKey && !(originalEvent.metaKey || originalEvent.ctrlKey) && originalEvent.shiftKey;
	};
	/**
	 * Return `true` if the target element is not editable, i.e. not a `<input>`-,
	 * `<select>`- or `<textarea>`-element, `false` otherwise.
	 *
	 * @param {import("../MapBrowserEvent.js").default} mapBrowserEvent Map browser event.
	 * @return {boolean} True only if the target element is not editable.
	 * @api
	 */
	var targetNotEditable = exports.targetNotEditable = function targetNotEditable(mapBrowserEvent) {
	  var target = mapBrowserEvent.target;
	  var tagName = /** @type {Element} */target.tagName;
	  return tagName !== 'INPUT' && tagName !== 'SELECT' && tagName !== 'TEXTAREA';
	};
	/**
	 * Return `true` if the event originates from a mouse device.
	 *
	 * @param {import("../MapBrowserEvent.js").default} mapBrowserEvent Map browser event.
	 * @return {boolean} True if the event originates from a mouse device.
	 * @api
	 */
	var mouseOnly = exports.mouseOnly = function mouseOnly(mapBrowserEvent) {
	  var pointerEvent = /** @type {import("../MapBrowserPointerEvent").default} */mapBrowserEvent.pointerEvent;
	  (0, _asserts.assert)(pointerEvent !== undefined, 56); // mapBrowserEvent must originate from a pointer event
	  // see http://www.w3.org/TR/pointerevents/#widl-PointerEvent-pointerType
	  return pointerEvent.pointerType == 'mouse';
	};
	/**
	 * Return `true` if the event originates from a touchable device.
	 *
	 * @param {import("../MapBrowserEvent.js").default} mapBrowserEvent Map browser event.
	 * @return {boolean} True if the event originates from a touchable device.
	 * @api
	 */
	var touchOnly = exports.touchOnly = function touchOnly(mapBrowserEvent) {
	  var pointerEvt = /** @type {import("../MapBrowserPointerEvent").default} */mapBrowserEvent.pointerEvent;
	  (0, _asserts.assert)(pointerEvt !== undefined, 56); // mapBrowserEvent must originate from a pointer event
	  // see http://www.w3.org/TR/pointerevents/#widl-PointerEvent-pointerType
	  return pointerEvt.pointerType === 'touch';
	};
	/**
	 * Return `true` if the event originates from a digital pen.
	 *
	 * @param {import("../MapBrowserEvent.js").default} mapBrowserEvent Map browser event.
	 * @return {boolean} True if the event originates from a digital pen.
	 * @api
	 */
	var penOnly = exports.penOnly = function penOnly(mapBrowserEvent) {
	  var pointerEvt = /** @type {import("../MapBrowserPointerEvent").default} */mapBrowserEvent.pointerEvent;
	  (0, _asserts.assert)(pointerEvt !== undefined, 56); // mapBrowserEvent must originate from a pointer event
	  // see http://www.w3.org/TR/pointerevents/#widl-PointerEvent-pointerType
	  return pointerEvt.pointerType === 'pen';
	};
	/**
	 * Return `true` if the event originates from a primary pointer in
	 * contact with the surface or if the left mouse button is pressed.
	 * See http://www.w3.org/TR/pointerevents/#button-states.
	 *
	 * @param {import("../MapBrowserEvent.js").default} mapBrowserEvent Map browser event.
	 * @return {boolean} True if the event originates from a primary pointer.
	 * @api
	 */
	var primaryAction = exports.primaryAction = function primaryAction(mapBrowserEvent) {
	  var pointerEvent = /** @type {import("../MapBrowserPointerEvent").default} */mapBrowserEvent.pointerEvent;
	  (0, _asserts.assert)(pointerEvent !== undefined, 56); // mapBrowserEvent must originate from a pointer event
	  return pointerEvent.isPrimary && pointerEvent.button === 0;
	};
	//# sourceMappingURL=condition.js.map

/***/ }),
/* 41 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	exports.centroid = centroid;
	
	var _MapBrowserEventType = __webpack_require__(69);
	
	var _MapBrowserEventType2 = _interopRequireDefault(_MapBrowserEventType);
	
	var _Interaction = __webpack_require__(73);
	
	var _Interaction2 = _interopRequireDefault(_Interaction);
	
	var _obj = __webpack_require__(23);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var __extends = undefined && undefined.__extends || function () {
	    var _extendStatics = function extendStatics(d, b) {
	        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	            d.__proto__ = b;
	        } || function (d, b) {
	            for (var p in b) {
	                if (b.hasOwnProperty(p)) d[p] = b[p];
	            }
	        };
	        return _extendStatics(d, b);
	    };
	    return function (d, b) {
	        _extendStatics(d, b);
	        function __() {
	            this.constructor = d;
	        }
	        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	    };
	}();
	/**
	 * @module ol/interaction/Pointer
	 */
	
	/**
	 * @typedef {Object} Options
	 * @property {function(import("../MapBrowserPointerEvent.js").default):boolean} [handleDownEvent]
	 * Function handling "down" events. If the function returns `true` then a drag
	 * sequence is started.
	 * @property {function(import("../MapBrowserPointerEvent.js").default)} [handleDragEvent]
	 * Function handling "drag" events. This function is called on "move" events
	 * during a drag sequence.
	 * @property {function(import("../MapBrowserEvent.js").default):boolean} [handleEvent]
	 * Method called by the map to notify the interaction that a browser event was
	 * dispatched to the map. The function may return `false` to prevent the
	 * propagation of the event to other interactions in the map's interactions
	 * chain.
	 * @property {function(import("../MapBrowserPointerEvent.js").default)} [handleMoveEvent]
	 * Function handling "move" events. This function is called on "move" events.
	 * This functions is also called during a drag sequence, so during a drag
	 * sequence both the `handleDragEvent` function and this function are called.
	 * If `handleDownEvent` is defined and it returns true this function will not
	 * be called during a drag sequence.
	 * @property {function(import("../MapBrowserPointerEvent.js").default):boolean} [handleUpEvent]
	 *  Function handling "up" events. If the function returns `false` then the
	 * current drag sequence is stopped.
	 * @property {function(boolean):boolean} [stopDown]
	 * Should the down event be propagated to other interactions, or should be
	 * stopped?
	 */
	/**
	 * @classdesc
	 * Base class that calls user-defined functions on `down`, `move` and `up`
	 * events. This class also manages "drag sequences".
	 *
	 * When the `handleDownEvent` user function returns `true` a drag sequence is
	 * started. During a drag sequence the `handleDragEvent` user function is
	 * called on `move` events. The drag sequence ends when the `handleUpEvent`
	 * user function is called and returns `false`.
	 * @api
	 */
	var PointerInteraction = /** @class */function (_super) {
	    __extends(PointerInteraction, _super);
	    /**
	     * @param {Options=} opt_options Options.
	     */
	    function PointerInteraction(opt_options) {
	        var _this = this;
	        var options = opt_options ? opt_options : {};
	        _this = _super.call(this, /** @type {import("./Interaction.js").InteractionOptions} */options) || this;
	        if (options.handleDownEvent) {
	            _this.handleDownEvent = options.handleDownEvent;
	        }
	        if (options.handleDragEvent) {
	            _this.handleDragEvent = options.handleDragEvent;
	        }
	        if (options.handleMoveEvent) {
	            _this.handleMoveEvent = options.handleMoveEvent;
	        }
	        if (options.handleUpEvent) {
	            _this.handleUpEvent = options.handleUpEvent;
	        }
	        if (options.stopDown) {
	            _this.stopDown = options.stopDown;
	        }
	        /**
	         * @type {boolean}
	         * @protected
	         */
	        _this.handlingDownUpSequence = false;
	        /**
	         * @type {!Object<string, PointerEvent>}
	         * @private
	         */
	        _this.trackedPointers_ = {};
	        /**
	         * @type {Array<PointerEvent>}
	         * @protected
	         */
	        _this.targetPointers = [];
	        return _this;
	    }
	    /**
	     * Handle pointer down events.
	     * @param {import("../MapBrowserPointerEvent.js").default} mapBrowserEvent Event.
	     * @return {boolean} If the event was consumed.
	     * @protected
	     */
	    PointerInteraction.prototype.handleDownEvent = function (mapBrowserEvent) {
	        return false;
	    };
	    /**
	     * Handle pointer drag events.
	     * @param {import("../MapBrowserPointerEvent.js").default} mapBrowserEvent Event.
	     * @protected
	     */
	    PointerInteraction.prototype.handleDragEvent = function (mapBrowserEvent) {};
	    /**
	     * Handles the {@link module:ol/MapBrowserEvent map browser event} and may call into
	     * other functions, if event sequences like e.g. 'drag' or 'down-up' etc. are
	     * detected.
	     * @override
	     * @api
	     */
	    PointerInteraction.prototype.handleEvent = function (mapBrowserEvent) {
	        if (! /** @type {import("../MapBrowserPointerEvent.js").default} */mapBrowserEvent.pointerEvent) {
	            return true;
	        }
	        var stopEvent = false;
	        this.updateTrackedPointers_(mapBrowserEvent);
	        if (this.handlingDownUpSequence) {
	            if (mapBrowserEvent.type == _MapBrowserEventType2.default.POINTERDRAG) {
	                this.handleDragEvent(mapBrowserEvent);
	            } else if (mapBrowserEvent.type == _MapBrowserEventType2.default.POINTERUP) {
	                var handledUp = this.handleUpEvent(mapBrowserEvent);
	                this.handlingDownUpSequence = handledUp && this.targetPointers.length > 0;
	            }
	        } else {
	            if (mapBrowserEvent.type == _MapBrowserEventType2.default.POINTERDOWN) {
	                var handled = this.handleDownEvent(mapBrowserEvent);
	                if (handled) {
	                    mapBrowserEvent.preventDefault();
	                }
	                this.handlingDownUpSequence = handled;
	                stopEvent = this.stopDown(handled);
	            } else if (mapBrowserEvent.type == _MapBrowserEventType2.default.POINTERMOVE) {
	                this.handleMoveEvent(mapBrowserEvent);
	            }
	        }
	        return !stopEvent;
	    };
	    /**
	     * Handle pointer move events.
	     * @param {import("../MapBrowserPointerEvent.js").default} mapBrowserEvent Event.
	     * @protected
	     */
	    PointerInteraction.prototype.handleMoveEvent = function (mapBrowserEvent) {};
	    /**
	     * Handle pointer up events.
	     * @param {import("../MapBrowserPointerEvent.js").default} mapBrowserEvent Event.
	     * @return {boolean} If the event was consumed.
	     * @protected
	     */
	    PointerInteraction.prototype.handleUpEvent = function (mapBrowserEvent) {
	        return false;
	    };
	    /**
	     * This function is used to determine if "down" events should be propagated
	     * to other interactions or should be stopped.
	     * @param {boolean} handled Was the event handled by the interaction?
	     * @return {boolean} Should the `down` event be stopped?
	     */
	    PointerInteraction.prototype.stopDown = function (handled) {
	        return handled;
	    };
	    /**
	     * @param {import("../MapBrowserPointerEvent.js").default} mapBrowserEvent Event.
	     * @private
	     */
	    PointerInteraction.prototype.updateTrackedPointers_ = function (mapBrowserEvent) {
	        if (isPointerDraggingEvent(mapBrowserEvent)) {
	            var event_1 = mapBrowserEvent.pointerEvent;
	            var id = event_1.pointerId.toString();
	            if (mapBrowserEvent.type == _MapBrowserEventType2.default.POINTERUP) {
	                delete this.trackedPointers_[id];
	            } else if (mapBrowserEvent.type == _MapBrowserEventType2.default.POINTERDOWN) {
	                this.trackedPointers_[id] = event_1;
	            } else if (id in this.trackedPointers_) {
	                // update only when there was a pointerdown event for this pointer
	                this.trackedPointers_[id] = event_1;
	            }
	            this.targetPointers = (0, _obj.getValues)(this.trackedPointers_);
	        }
	    };
	    return PointerInteraction;
	}(_Interaction2.default);
	/**
	 * @param {Array<PointerEvent>} pointerEvents List of events.
	 * @return {import("../pixel.js").Pixel} Centroid pixel.
	 */
	function centroid(pointerEvents) {
	    var length = pointerEvents.length;
	    var clientX = 0;
	    var clientY = 0;
	    for (var i = 0; i < length; i++) {
	        clientX += pointerEvents[i].clientX;
	        clientY += pointerEvents[i].clientY;
	    }
	    return [clientX / length, clientY / length];
	}
	/**
	 * @param {import("../MapBrowserPointerEvent.js").default} mapBrowserEvent Event.
	 * @return {boolean} Whether the event is a pointerdown, pointerdrag
	 *     or pointerup event.
	 */
	function isPointerDraggingEvent(mapBrowserEvent) {
	    var type = mapBrowserEvent.type;
	    return type === _MapBrowserEventType2.default.POINTERDOWN || type === _MapBrowserEventType2.default.POINTERDRAG || type === _MapBrowserEventType2.default.POINTERUP;
	}
	exports.default = PointerInteraction;
	//# sourceMappingURL=Pointer.js.map

/***/ }),
/* 42 */
/***/ (function(module, exports) {

	var hasOwnProperty = {}.hasOwnProperty;
	module.exports = function (it, key) {
	  return hasOwnProperty.call(it, key);
	};


/***/ }),
/* 43 */
/***/ (function(module, exports, __webpack_require__) {

	var pIE = __webpack_require__(131);
	var createDesc = __webpack_require__(95);
	var toIObject = __webpack_require__(45);
	var toPrimitive = __webpack_require__(61);
	var has = __webpack_require__(42);
	var IE8_DOM_DEFINE = __webpack_require__(324);
	var gOPD = Object.getOwnPropertyDescriptor;
	
	exports.f = __webpack_require__(25) ? gOPD : function getOwnPropertyDescriptor(O, P) {
	  O = toIObject(O);
	  P = toPrimitive(P, true);
	  if (IE8_DOM_DEFINE) try {
	    return gOPD(O, P);
	  } catch (e) { /* empty */ }
	  if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);
	};


/***/ }),
/* 44 */
/***/ (function(module, exports, __webpack_require__) {

	// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)
	var has = __webpack_require__(42);
	var toObject = __webpack_require__(28);
	var IE_PROTO = __webpack_require__(212)('IE_PROTO');
	var ObjectProto = Object.prototype;
	
	module.exports = Object.getPrototypeOf || function (O) {
	  O = toObject(O);
	  if (has(O, IE_PROTO)) return O[IE_PROTO];
	  if (typeof O.constructor == 'function' && O instanceof O.constructor) {
	    return O.constructor.prototype;
	  } return O instanceof Object ? ObjectProto : null;
	};


/***/ }),
/* 45 */
/***/ (function(module, exports, __webpack_require__) {

	// to indexed object, toObject with fallback for non-array-like ES3 strings
	var IObject = __webpack_require__(130);
	var defined = __webpack_require__(59);
	module.exports = function (it) {
	  return IObject(defined(it));
	};


/***/ }),
/* 46 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	exports.isRecordDownloadable = isRecordDownloadable;
	exports.downloadRecord = downloadRecord;
	exports.downloadFullResolutionWCS = downloadFullResolutionWCS;
	exports.downloadCustom = downloadCustom;
	exports.getDownloadInfos = getDownloadInfos;
	
	var _jquery = __webpack_require__(12);
	
	var _jquery2 = _interopRequireDefault(_jquery);
	
	var _fileSaver = __webpack_require__(986);
	
	var _eowcs = __webpack_require__(557);
	
	var _url = __webpack_require__(560);
	
	var _s = __webpack_require__(559);
	
	var _rewrite = __webpack_require__(243);
	
	var _rewrite2 = _interopRequireDefault(_rewrite);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	function isRecordDownloadable(layerModel, recordModel) {
	  if (layerModel.get('download.protocol') === 'EO-WCS') {
	    return true;
	  }
	  var properties = recordModel.get('properties');
	  if (properties && properties.links) {
	    var url = properties.links.find(function (link) {
	      return link.rel === 'enclosure';
	    });
	    if (url) {
	      return true;
	    }
	  }
	  return false;
	}
	
	function downloadUrl(url) {
	  var a = document.createElement('a');
	  // This works in Chrome and Firefox
	  if (typeof a.download !== 'undefined') {
	    var ia = document.createElement('a');
	    ia.style.display = 'none';
	    ia.setAttribute('target', '_blank');
	    ia.setAttribute('href', url);
	
	    // Needed for multiple downloads in Chrome.
	    // Adding 'noreferrer' breaks multiple downloads in Firefox
	    ia.setAttribute('rel', 'noopener');
	
	    document.body.appendChild(ia);
	    ia.click();
	
	    setTimeout(function () {
	      return document.body.removeChild(ia);
	    }, 10000);
	  } else {
	    // This works in IE11, but not for SSO
	    var $iframe = (0, _jquery2.default)('<iframe style="visibility: collapse;"></iframe>');
	    (0, _jquery2.default)('body').append($iframe);
	    var content = $iframe[0].contentDocument;
	    var form = '<form action="' + url + '" method="GET"></form>';
	    content.write(form);
	    (0, _jquery2.default)('form', content).submit();
	    setTimeout(function () {
	      $iframe.remove();
	    }, 20000);
	  }
	}
	
	function downloadRecord(layerModel, filtersModel, recordModel, options) {
	  var rewriteRule = layerModel.get('download.rewrite');
	
	  if (layerModel.get('download.protocol') === 'EO-WCS') {
	    var urlOrElement = (0, _eowcs.download)(layerModel, filtersModel, recordModel, options);
	    if (urlOrElement) {
	      if (layerModel.get('download.method') === 'GET') {
	        downloadUrl((0, _rewrite2.default)(urlOrElement, rewriteRule, recordModel));
	      } else {
	        var xmlRewritten = (0, _rewrite2.default)(urlOrElement, rewriteRule, recordModel);
	        var urlRewritten = (0, _rewrite2.default)(layerModel.get('download.url'), rewriteRule, recordModel);
	        var form = (0, _jquery2.default)('<form method="post" action="' + urlRewritten + '" enctype="text/plain" target="_blank">\n          <input type="hidden" name=\'<?xml version\' value=\'"1.0"?>' + xmlRewritten + '\'></input>\n        </form>');
	        if (form) {
	          var elem = form[0];
	          document.body.appendChild(elem);
	          elem.submit();
	          setTimeout(function () {
	            return elem.remove();
	          }, 10000);
	        }
	      }
	    }
	  } else {
	    (0, _url.getDownloadInfos)(recordModel).then(function (infos) {
	      return infos.forEach(function (info) {
	        downloadUrl((0, _rewrite2.default)(info.href, rewriteRule, recordModel));
	      });
	    });
	  }
	}
	
	function downloadFullResolutionWCS(layerModel, mapModel, filtersModel, options) {
	  var url = (0, _eowcs.downloadFullResolution)(layerModel, mapModel, filtersModel, options);
	  downloadUrl((0, _rewrite2.default)(url, layerModel.get('download.rewrite')));
	}
	
	function downloadCustom(filename, mediaType, content) {
	  (0, _fileSaver.saveAs)(new Blob([content], { type: mediaType }), filename);
	}
	
	function getDownloadInfos(layerModel, filtersModel, recordModel, options) {
	  var downloadInfos = void 0;
	  if (layerModel.get('download.protocol') === 'EO-WCS') {
	    downloadInfos = (0, _eowcs.getDownloadInfos)(layerModel, filtersModel, recordModel, options);
	  } else if (layerModel.get('download.protocol') === 'S3') {
	    downloadInfos = (0, _s.getDownloadInfos)(layerModel, recordModel);
	  } else {
	    downloadInfos = (0, _url.getDownloadInfos)(recordModel);
	  }
	
	  return downloadInfos.then(function (infos) {
	    return infos.map(function (item) {
	      return Object.assign({}, item, {
	        href: (0, _rewrite2.default)(item.href, layerModel.get('download.rewrite'), recordModel)
	      });
	    }).map(function (item) {
	      return Object.assign({}, item, {
	        href: item.href.startsWith('//') ? location.protocol + item.href : item.href
	      });
	    });
	  });
	}

/***/ }),
/* 47 */
/***/ (function(module, exports) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	/**
	 * @module ol/css
	 */
	/**
	 * @typedef {Object} FontParameters
	 * @property {Array<string>} families
	 * @property {string} style
	 * @property {string} weight
	 */
	/**
	 * The CSS class for hidden feature.
	 *
	 * @const
	 * @type {string}
	 */
	var CLASS_HIDDEN = exports.CLASS_HIDDEN = 'ol-hidden';
	/**
	 * The CSS class that we'll give the DOM elements to have them selectable.
	 *
	 * @const
	 * @type {string}
	 */
	var CLASS_SELECTABLE = exports.CLASS_SELECTABLE = 'ol-selectable';
	/**
	 * The CSS class that we'll give the DOM elements to have them unselectable.
	 *
	 * @const
	 * @type {string}
	 */
	var CLASS_UNSELECTABLE = exports.CLASS_UNSELECTABLE = 'ol-unselectable';
	/**
	 * The CSS class for unsupported feature.
	 *
	 * @const
	 * @type {string}
	 */
	var CLASS_UNSUPPORTED = exports.CLASS_UNSUPPORTED = 'ol-unsupported';
	/**
	 * The CSS class for controls.
	 *
	 * @const
	 * @type {string}
	 */
	var CLASS_CONTROL = exports.CLASS_CONTROL = 'ol-control';
	/**
	 * The CSS class that we'll give the DOM elements that are collapsed, i.e.
	 * to those elements which usually can be expanded.
	 *
	 * @const
	 * @type {string}
	 */
	var CLASS_COLLAPSED = exports.CLASS_COLLAPSED = 'ol-collapsed';
	/**
	 * Get the list of font families from a font spec.  Note that this doesn't work
	 * for font families that have commas in them.
	 * @param {string} The CSS font property.
	 * @return {FontParameters} The font families (or null if the input spec is invalid).
	 */
	var getFontParameters = exports.getFontParameters = function () {
	  /**
	   * @type {CSSStyleDeclaration}
	   */
	  var style;
	  /**
	   * @type {Object<string, FontParameters>}
	   */
	  var cache = {};
	  return function (font) {
	    if (!style) {
	      style = document.createElement('div').style;
	    }
	    if (!(font in cache)) {
	      style.font = font;
	      var family = style.fontFamily;
	      var fontWeight = style.fontWeight;
	      var fontStyle = style.fontStyle;
	      style.font = '';
	      if (!family) {
	        return null;
	      }
	      var families = family.split(/,\s?/);
	      cache[font] = {
	        families: families,
	        weight: fontWeight,
	        style: fontStyle
	      };
	    }
	    return cache[font];
	  };
	}();
	//# sourceMappingURL=css.js.map

/***/ }),
/* 48 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	exports.create = create;
	exports.reset = reset;
	exports.multiply = multiply;
	exports.set = set;
	exports.setFromArray = setFromArray;
	exports.apply = apply;
	exports.rotate = rotate;
	exports.scale = scale;
	exports.makeScale = makeScale;
	exports.translate = translate;
	exports.compose = compose;
	exports.invert = invert;
	exports.makeInverse = makeInverse;
	exports.determinant = determinant;
	exports.toString = toString;
	
	var _asserts = __webpack_require__(29);
	
	/**
	 * An array representing an affine 2d transformation for use with
	 * {@link module:ol/transform} functions. The array has 6 elements.
	 * @typedef {!Array<number>} Transform
	 */
	/**
	 * Collection of affine 2d transformation functions. The functions work on an
	 * array of 6 elements. The element order is compatible with the [SVGMatrix
	 * interface](https://developer.mozilla.org/en-US/docs/Web/API/SVGMatrix) and is
	 * a subset (elements a to f) of a 3×3 matrix:
	 * ```
	 * [ a c e ]
	 * [ b d f ]
	 * [ 0 0 1 ]
	 * ```
	 */
	/**
	 * @private
	 * @type {Transform}
	 */
	var tmp_ = new Array(6);
	/**
	 * Create an identity transform.
	 * @return {!Transform} Identity transform.
	 */
	/**
	 * @module ol/transform
	 */
	function create() {
	  return [1, 0, 0, 1, 0, 0];
	}
	/**
	 * Resets the given transform to an identity transform.
	 * @param {!Transform} transform Transform.
	 * @return {!Transform} Transform.
	 */
	function reset(transform) {
	  return set(transform, 1, 0, 0, 1, 0, 0);
	}
	/**
	 * Multiply the underlying matrices of two transforms and return the result in
	 * the first transform.
	 * @param {!Transform} transform1 Transform parameters of matrix 1.
	 * @param {!Transform} transform2 Transform parameters of matrix 2.
	 * @return {!Transform} transform1 multiplied with transform2.
	 */
	function multiply(transform1, transform2) {
	  var a1 = transform1[0];
	  var b1 = transform1[1];
	  var c1 = transform1[2];
	  var d1 = transform1[3];
	  var e1 = transform1[4];
	  var f1 = transform1[5];
	  var a2 = transform2[0];
	  var b2 = transform2[1];
	  var c2 = transform2[2];
	  var d2 = transform2[3];
	  var e2 = transform2[4];
	  var f2 = transform2[5];
	  transform1[0] = a1 * a2 + c1 * b2;
	  transform1[1] = b1 * a2 + d1 * b2;
	  transform1[2] = a1 * c2 + c1 * d2;
	  transform1[3] = b1 * c2 + d1 * d2;
	  transform1[4] = a1 * e2 + c1 * f2 + e1;
	  transform1[5] = b1 * e2 + d1 * f2 + f1;
	  return transform1;
	}
	/**
	 * Set the transform components a-f on a given transform.
	 * @param {!Transform} transform Transform.
	 * @param {number} a The a component of the transform.
	 * @param {number} b The b component of the transform.
	 * @param {number} c The c component of the transform.
	 * @param {number} d The d component of the transform.
	 * @param {number} e The e component of the transform.
	 * @param {number} f The f component of the transform.
	 * @return {!Transform} Matrix with transform applied.
	 */
	function set(transform, a, b, c, d, e, f) {
	  transform[0] = a;
	  transform[1] = b;
	  transform[2] = c;
	  transform[3] = d;
	  transform[4] = e;
	  transform[5] = f;
	  return transform;
	}
	/**
	 * Set transform on one matrix from another matrix.
	 * @param {!Transform} transform1 Matrix to set transform to.
	 * @param {!Transform} transform2 Matrix to set transform from.
	 * @return {!Transform} transform1 with transform from transform2 applied.
	 */
	function setFromArray(transform1, transform2) {
	  transform1[0] = transform2[0];
	  transform1[1] = transform2[1];
	  transform1[2] = transform2[2];
	  transform1[3] = transform2[3];
	  transform1[4] = transform2[4];
	  transform1[5] = transform2[5];
	  return transform1;
	}
	/**
	 * Transforms the given coordinate with the given transform returning the
	 * resulting, transformed coordinate. The coordinate will be modified in-place.
	 *
	 * @param {Transform} transform The transformation.
	 * @param {import("./coordinate.js").Coordinate|import("./pixel.js").Pixel} coordinate The coordinate to transform.
	 * @return {import("./coordinate.js").Coordinate|import("./pixel.js").Pixel} return coordinate so that operations can be
	 *     chained together.
	 */
	function apply(transform, coordinate) {
	  var x = coordinate[0];
	  var y = coordinate[1];
	  coordinate[0] = transform[0] * x + transform[2] * y + transform[4];
	  coordinate[1] = transform[1] * x + transform[3] * y + transform[5];
	  return coordinate;
	}
	/**
	 * Applies rotation to the given transform.
	 * @param {!Transform} transform Transform.
	 * @param {number} angle Angle in radians.
	 * @return {!Transform} The rotated transform.
	 */
	function rotate(transform, angle) {
	  var cos = Math.cos(angle);
	  var sin = Math.sin(angle);
	  return multiply(transform, set(tmp_, cos, sin, -sin, cos, 0, 0));
	}
	/**
	 * Applies scale to a given transform.
	 * @param {!Transform} transform Transform.
	 * @param {number} x Scale factor x.
	 * @param {number} y Scale factor y.
	 * @return {!Transform} The scaled transform.
	 */
	function scale(transform, x, y) {
	  return multiply(transform, set(tmp_, x, 0, 0, y, 0, 0));
	}
	/**
	 * Creates a scale transform.
	 * @param {!Transform} target Transform to overwrite.
	 * @param {number} x Scale factor x.
	 * @param {number} y Scale factor y.
	 * @return {!Transform} The scale transform.
	 */
	function makeScale(target, x, y) {
	  return set(target, x, 0, 0, y, 0, 0);
	}
	/**
	 * Applies translation to the given transform.
	 * @param {!Transform} transform Transform.
	 * @param {number} dx Translation x.
	 * @param {number} dy Translation y.
	 * @return {!Transform} The translated transform.
	 */
	function translate(transform, dx, dy) {
	  return multiply(transform, set(tmp_, 1, 0, 0, 1, dx, dy));
	}
	/**
	 * Creates a composite transform given an initial translation, scale, rotation, and
	 * final translation (in that order only, not commutative).
	 * @param {!Transform} transform The transform (will be modified in place).
	 * @param {number} dx1 Initial translation x.
	 * @param {number} dy1 Initial translation y.
	 * @param {number} sx Scale factor x.
	 * @param {number} sy Scale factor y.
	 * @param {number} angle Rotation (in counter-clockwise radians).
	 * @param {number} dx2 Final translation x.
	 * @param {number} dy2 Final translation y.
	 * @return {!Transform} The composite transform.
	 */
	function compose(transform, dx1, dy1, sx, sy, angle, dx2, dy2) {
	  var sin = Math.sin(angle);
	  var cos = Math.cos(angle);
	  transform[0] = sx * cos;
	  transform[1] = sy * sin;
	  transform[2] = -sx * sin;
	  transform[3] = sy * cos;
	  transform[4] = dx2 * sx * cos - dy2 * sx * sin + dx1;
	  transform[5] = dx2 * sy * sin + dy2 * sy * cos + dy1;
	  return transform;
	}
	/**
	 * Invert the given transform.
	 * @param {!Transform} source The source transform to invert.
	 * @return {!Transform} The inverted (source) transform.
	 */
	function invert(source) {
	  return makeInverse(source, source);
	}
	/**
	 * Invert the given transform.
	 * @param {!Transform} target Transform to be set as the inverse of
	 *     the source transform.
	 * @param {!Transform} source The source transform to invert.
	 * @return {!Transform} The inverted (target) transform.
	 */
	function makeInverse(target, source) {
	  var det = determinant(source);
	  (0, _asserts.assert)(det !== 0, 32); // Transformation matrix cannot be inverted
	  var a = source[0];
	  var b = source[1];
	  var c = source[2];
	  var d = source[3];
	  var e = source[4];
	  var f = source[5];
	  target[0] = d / det;
	  target[1] = -b / det;
	  target[2] = -c / det;
	  target[3] = a / det;
	  target[4] = (c * f - d * e) / det;
	  target[5] = -(a * f - b * e) / det;
	  return target;
	}
	/**
	 * Returns the determinant of the given matrix.
	 * @param {!Transform} mat Matrix.
	 * @return {number} Determinant.
	 */
	function determinant(mat) {
	  return mat[0] * mat[3] - mat[1] * mat[2];
	}
	/**
	 * A string version of the transform.  This can be used
	 * for CSS transforms.
	 * @param {!Transform} mat Matrix.
	 * @return {string} The transform as a string.
	 */
	function toString(mat) {
	  return 'matrix(' + mat.join(', ') + ')';
	}
	//# sourceMappingURL=transform.js.map

/***/ }),
/* 49 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	var _typeof2 = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	exports.namespaces = undefined;
	
	var _typeof = typeof Symbol === "function" && _typeof2(Symbol.iterator) === "symbol" ? function (obj) {
	  return typeof obj === "undefined" ? "undefined" : _typeof2(obj);
	} : function (obj) {
	  return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj === "undefined" ? "undefined" : _typeof2(obj);
	};
	
	var _slicedToArray = function () {
	  function sliceIterator(arr, i) {
	    var _arr = [];var _n = true;var _d = false;var _e = undefined;try {
	      for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {
	        _arr.push(_s.value);if (i && _arr.length === i) break;
	      }
	    } catch (err) {
	      _d = true;_e = err;
	    } finally {
	      try {
	        if (!_n && _i["return"]) _i["return"]();
	      } finally {
	        if (_d) throw _e;
	      }
	    }return _arr;
	  }return function (arr, i) {
	    if (Array.isArray(arr)) {
	      return arr;
	    } else if (Symbol.iterator in Object(arr)) {
	      return sliceIterator(arr, i);
	    } else {
	      throw new TypeError("Invalid attempt to destructure non-iterable instance");
	    }
	  };
	}();
	
	exports.parseURLQuery = parseURLQuery;
	exports.parseXml = parseXml;
	exports.getElements = getElements;
	exports.getFirstElement = getFirstElement;
	exports.getText = getText;
	exports.getAttributeNS = getAttributeNS;
	exports.simplePath = simplePath;
	exports.lookupPrefix = lookupPrefix;
	exports.fetchAndCheck = fetchAndCheck;
	exports.isNullOrUndefined = isNullOrUndefined;
	exports.toWKT = toWKT;
	exports.createRequest = createRequest;
	exports.createXHR = createXHR;
	exports.find = find;
	exports.assign = assign;
	
	__webpack_require__(360);
	
	/**
	 * @module opensearch/utils
	 */
	
	function parseURLQuery(url) {
	  var search = url.indexOf('?') === -1 ? url : url.substring(url.indexOf('?'));
	  var vars = search.split('&');
	  var parsed = {};
	  for (var i = 0; i < vars.length; i++) {
	    var pair = vars[i].split('=');
	    parsed[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]);
	  }
	  return parsed;
	}
	
	function parseXml(xmlStr) {
	  if (typeof DOMParser !== 'undefined') {
	    return new DOMParser().parseFromString(xmlStr, 'text/xml');
	  } else if (typeof ActiveXObject !== 'undefined') {
	    var xmlDoc = new ActiveXObject('Microsoft.XMLDOM'); // eslint-disable-line no-undef
	    xmlDoc.async = 'false';
	    xmlDoc.loadXML(xmlStr);
	    return xmlDoc;
	  }
	  throw new Error('Could not parse XML document.');
	}
	
	/*
	 * Some common namespace definitions
	 */
	var namespaces = exports.namespaces = {
	  os: 'http://a9.com/-/spec/opensearch/1.1/',
	  parameters: 'http://a9.com/-/spec/opensearch/extensions/parameters/1.0/',
	  atom: 'http://www.w3.org/2005/Atom',
	  georss: 'http://www.georss.org/georss',
	  dc: 'http://purl.org/dc/elements/1.1/',
	  media: 'http://search.yahoo.com/mrss/',
	
	  // EOP and OM related namespaces
	  opt: 'http://www.opengis.net/opt/2.1',
	  om: 'http://www.opengis.net/om/2.0',
	  eop: 'http://www.opengis.net/eop/2.0'
	};
	
	/*
	 * Get an array of all child elements
	 */
	function getChildren(element) {
	  if (element.children) {
	    return Array.from(element.children);
	  }
	  return Array.from(element.childNodes).filter(function (node) {
	    return node.nodeType === 1;
	  }); // Node.ELEMENT_NODE
	}
	
	/*
	 * Get an array of all *direct* descendants (in contrast to getElementsByTagName)
	 * of an element with a certain namespace URI and tag name.
	 */
	function getElements(element, namespace, tagName) {
	  var usedNamespaces = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : namespaces;
	
	  if (!element) {
	    return [];
	  }
	  var namespaceURI = usedNamespaces[namespace] || namespace;
	  var children = getChildren(element);
	  if (tagName && namespaceURI) {
	    return children.filter(function (child) {
	      return child.localName === tagName && child.namespaceURI === namespaceURI;
	    });
	  } else if (tagName) {
	    return children.filter(function (child) {
	      return child.localName === tagName;
	    });
	  }
	  return children;
	}
	
	/*
	 * Get the first direct descendant element with the given namespace URI and tag name.
	 */
	function getFirstElement(element, namespace, tagName, usedNamespaces) {
	  // use shortcut; when available
	  if (!namespace && !tagName && element.firstElementChild) {
	    return element.firstElementChild;
	  }
	  var elements = getElements(element, namespace, tagName, usedNamespaces);
	  if (elements.length) {
	    return elements[0];
	  }
	  return null;
	}
	
	/*
	 * Get the text of the first direct descendant element with the given namespace
	 * URI and tag name.
	 */
	function getText(element, namespace, tagName, usedNamespaces) {
	  var first = getFirstElement(element, namespace, tagName, usedNamespaces);
	  return first ? first.textContent : null;
	}
	
	/*
	 * Get the value of the namespaced attribute or return a default.
	 */
	function getAttributeNS(node, namespace, name, defaultValue) {
	  var usedNamespaces = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : namespaces;
	
	  var namespaceURI = usedNamespaces[namespace] || namespace;
	  if (node.hasAttributeNS(namespaceURI, name)) {
	    return node.getAttributeNS(namespaceURI, name);
	  }
	  return defaultValue;
	}
	
	function splitNamespace(name) {
	  return name.indexOf(':') !== -1 ? name.split(':') : [null, name];
	}
	
	/**
	 * Resolves an xPath like query with the given element as basis. All parts of
	 * the path must be specified, none may be omitted. Allows to select attributes
	 * using the `@attrName` postfix or the text of an element using the `text()`
	 * as the last path part.
	 * @param {object} element The root element to start the query on. Must be a DOM
	 *                         compliant object.
	 * @param {string} path The search path: parts are separated by the `/` character
	 *                      and may contain a supported namespace prefix (separated
	 *                      by the color character).
	 *                      Examples: `os:Url@type`, `atom:entry/atom:title/text()`,
	 *                      `channel/item/georss:box/text()`
	 * @param {boolean} [single=false] Whether multiple elements are expected. When
	 *                                 false, an array is returned, otherwise single
	 *                                 values.
	 * @returns {object|string|object[]|string[]} Depending on the query and the
	 *                                            single parameter, either a DOM Node
	 *                                            or a string, or arrays thereof.
	 */
	function simplePath(element, path) {
	  var single = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
	  var usedNamespaces = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : undefined;
	
	  // split path and discard empty parts
	  var parts = path.split('/').filter(function (part) {
	    return part.length;
	  });
	  var current = single ? element : [element];
	
	  for (var i = 0; i < parts.length; ++i) {
	    var part = parts[i];
	
	    // single values are treated differently
	    if (single) {
	      if (part === 'text()') {
	        return current.textContent;
	      } else if (part.indexOf('@') !== -1) {
	        var _part$split = part.split('@'),
	            _part$split2 = _slicedToArray(_part$split, 2),
	            nodePart = _part$split2[0],
	            attrPart = _part$split2[1];
	
	        var _splitNamespace = splitNamespace(nodePart),
	            _splitNamespace2 = _slicedToArray(_splitNamespace, 2),
	            _namespace = _splitNamespace2[0],
	            _tagName = _splitNamespace2[1];
	
	        var _splitNamespace3 = splitNamespace(attrPart),
	            _splitNamespace4 = _slicedToArray(_splitNamespace3, 2),
	            attrNamespace = _splitNamespace4[0],
	            attrName = _splitNamespace4[1];
	
	        current = getFirstElement(current, _namespace, _tagName, usedNamespaces);
	        return current ? getAttributeNS(current, attrNamespace, attrName, undefined, usedNamespaces) : null;
	      }
	
	      var _splitNamespace5 = splitNamespace(part),
	          _splitNamespace6 = _slicedToArray(_splitNamespace5, 2),
	          namespace = _splitNamespace6[0],
	          tagName = _splitNamespace6[1];
	
	      current = getFirstElement(current, namespace, tagName, usedNamespaces);
	      if (!current) {
	        return null;
	      }
	    } else if (part === 'text()') {
	      return current.map(function (currentElement) {
	        return currentElement.textContent;
	      });
	    } else if (part.indexOf('@') !== -1) {
	      var _ret = function () {
	        var _part$split3 = part.split('@'),
	            _part$split4 = _slicedToArray(_part$split3, 2),
	            nodePart = _part$split4[0],
	            attrPart = _part$split4[1];
	
	        var _splitNamespace7 = splitNamespace(nodePart),
	            _splitNamespace8 = _slicedToArray(_splitNamespace7, 2),
	            namespace = _splitNamespace8[0],
	            tagName = _splitNamespace8[1];
	
	        var _splitNamespace9 = splitNamespace(attrPart),
	            _splitNamespace10 = _slicedToArray(_splitNamespace9, 2),
	            attrNamespace = _splitNamespace10[0],
	            attrName = _splitNamespace10[1];
	
	        return {
	          v: current.map(function (currentElement) {
	            return getElements(currentElement, namespace, tagName, usedNamespaces);
	          }).reduce(function (acc, value) {
	            return acc.concat(value);
	          }, []).map(function (finalElement) {
	            return getAttributeNS(finalElement, attrNamespace, attrName, undefined, usedNamespaces);
	          })
	        };
	      }();
	
	      if ((typeof _ret === 'undefined' ? 'undefined' : _typeof(_ret)) === "object") return _ret.v;
	    } else {
	      (function () {
	        var _splitNamespace11 = splitNamespace(part),
	            _splitNamespace12 = _slicedToArray(_splitNamespace11, 2),
	            namespace = _splitNamespace12[0],
	            tagName = _splitNamespace12[1];
	
	        current = current.map(function (currentElement) {
	          return getElements(currentElement, namespace, tagName, usedNamespaces);
	        }).reduce(function (acc, value) {
	          return acc.concat(value);
	        }, []);
	      })();
	    }
	  }
	
	  return current;
	}
	
	// adapted from https://developer.mozilla.org/en-US/Add-ons/Code_snippets/LookupPrefix
	// Private function for lookupPrefix only
	// eslint-disable-next-line no-underscore-dangle
	function _lookupNamespacePrefix(namespaceURI, originalElement) {
	  var xmlnsPattern = /^xmlns:(.*)$/;
	  if (originalElement.namespaceURI && originalElement.namespaceURI === namespaceURI && originalElement.lookupNamespaceURI(originalElement.prefix) === namespaceURI) {
	    return originalElement.prefix;
	  }
	  if (originalElement.attributes && originalElement.attributes.length) {
	    for (var i = 0; i < originalElement.attributes.length; i++) {
	      var att = originalElement.attributes[i];
	      xmlnsPattern.lastIndex = 0;
	      var localName = att.localName || att.name.substr(att.name.indexOf(':') + 1); // latter test for IE which doesn't support localName
	      if (localName.indexOf(':') !== -1) {
	        // For Firefox when in HTML mode
	        localName = localName.substr(att.name.indexOf(':') + 1);
	      }
	      if (xmlnsPattern.test(att.name) && att.value === namespaceURI) {
	        return localName;
	      }
	    }
	  }
	  if (originalElement.parentNode) {
	    // EntityReferences may have to be skipped to get to it
	    return _lookupNamespacePrefix(namespaceURI, originalElement.parentNode);
	  }
	  return null;
	}
	
	/**
	 * Looks up the the namespace prefix on the given DOM Node and the given namespace
	 * @param {DOMNode} node The node to look up the namespace prefix
	 * @param {String} namespaceURI The namespace URI to look up the namespace definition
	 * @returns {String} The namespace prefix
	 */
	function lookupPrefix(node, namespaceURI) {
	  // Depends on private function _lookupNamespacePrefix() below and on https://developer.mozilla.org/En/Code_snippets/LookupNamespaceURI
	  // http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-lookupNamespacePrefix
	  // http://www.w3.org/TR/DOM-Level-3-Core/namespaces-algorithms.html#lookupNamespacePrefixAlgo
	  // (The above had a few apparent 'bugs' in the pseudo-code which were corrected here)
	  if (node.lookupPrefix) {
	    // Shouldn't use this in text/html for Mozilla as will return null
	    return node.lookupPrefix(namespaceURI);
	  }
	  if (namespaceURI === null || namespaceURI === '') {
	    return null;
	  }
	  switch (node.nodeType) {
	    case 1:
	      // Node.ELEMENT_NODE
	      return _lookupNamespacePrefix(namespaceURI, node);
	    case 9:
	      // Node.DOCUMENT_NODE
	      return _lookupNamespacePrefix(namespaceURI, node.documentElement);
	    case 6: // Node.ENTITY_NODE
	    case 12: // Node.NOTATION_NODE
	    case 11: // Node.DOCUMENT_FRAGMENT_NODE
	    case 10:
	      // Node.DOCUMENT_TYPE_NODE
	      return null; // type is unknown
	    case 2:
	      // Node.ATTRIBUTE_NODE
	      if (node.ownerElement) {
	        return _lookupNamespacePrefix(namespaceURI, node.ownerElement);
	      }
	      return null;
	    default:
	      if (node.parentNode) {
	        // EntityReferences may have to be skipped to get to it
	        return _lookupNamespacePrefix(namespaceURI, node.parentNode);
	      }
	      return null;
	  }
	}
	
	function fetchAndCheck() {
	  return fetch.apply(undefined, arguments).then(function (response) {
	    if (response.status >= 400) {
	      throw new Error('Bad response from server');
	    }
	    return response;
	  });
	}
	
	function isNullOrUndefined(value) {
	  return typeof value === 'undefined' || value === null;
	}
	
	/*
	 * Forked from https://github.com/mapbox/wellknown/blob/87965f6f46ee38355e7e1f82107aa832ea29bc6c/wellknown.js
	 * Removed whitespaces after geometry type to be more robust with some (FedEO)
	 * services.
	 */
	
	/* eslint-disable no-param-reassign, prefer-template */
	
	function toWKT(gj) {
	  if (gj.type === 'Feature') {
	    gj = gj.geometry;
	  }
	
	  function wrapParens(s) {
	    return '(' + s + ')';
	  }
	
	  function pairWKT(c) {
	    return c.join(' ');
	  }
	
	  function ringWKT(r) {
	    return r.map(pairWKT).join(', ');
	  }
	
	  function ringsWKT(r) {
	    return r.map(ringWKT).map(wrapParens).join(', ');
	  }
	
	  function multiRingsWKT(r) {
	    return r.map(ringsWKT).map(wrapParens).join(', ');
	  }
	
	  switch (gj.type) {
	    case 'Point':
	      return 'POINT(' + pairWKT(gj.coordinates) + ')';
	    case 'LineString':
	      return 'LINESTRING(' + ringWKT(gj.coordinates) + ')';
	    case 'Polygon':
	      return 'POLYGON(' + ringsWKT(gj.coordinates) + ')';
	    case 'MultiPoint':
	      return 'MULTIPOINT(' + ringWKT(gj.coordinates) + ')';
	    case 'MultiPolygon':
	      return 'MULTIPOLYGON(' + multiRingsWKT(gj.coordinates) + ')';
	    case 'MultiLineString':
	      return 'MULTILINESTRING(' + ringsWKT(gj.coordinates) + ')';
	    case 'GeometryCollection':
	      return 'GEOMETRYCOLLECTION(' + gj.geometries.map(toWKT).join(', ') + ')';
	    default:
	      throw new Error('stringify requires a valid GeoJSON Feature or geometry object as input');
	  }
	}
	
	/* eslint-enable no-param-reassign, prefer-template */
	
	/**
	 * Returns a [Request]{@link https://developer.mozilla.org/en-US/docs/Web/API/Request}
	 * object for the fetch API.
	 * @param {string} url The request URL
	 * @param {object} [baseRequest] the baseRequest
	 * @returns {Request} The constructed request.
	 */
	function createRequest(url, baseRequest) {
	  return new Request(url, baseRequest);
	}
	
	/**
	 * Creates (and sends) an [XMLHttpRequest]{@link https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest}.
	 * @param {string} url The request URL
	 * @param {object} [baseRequest] the baseRequest
	 * @returns {XMLHttpRequest} The constructed request.
	 */
	function createXHR(url) {
	  var baseRequest = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
	
	  var xhr = new XMLHttpRequest();
	  xhr.open(baseRequest.method || 'GET', url);
	  if (baseRequest.headers) {
	    Object.keys(baseRequest.headers).forEach(function (key) {
	      xhr.setRequestHeader(key, baseRequest.headers[key]);
	    });
	  }
	  xhr.send(baseRequest.body ? baseRequest.body : null);
	  return xhr;
	}
	
	/**
	 * Sort of polyfill for [Array.prototype.find]{@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find}
	 * @param {Array} arr the array to find the entry on.
	 * @param {function} predicate the callback to find the value.
	 * @param {*} thisArg the `this` for the predicate function.
	 * @returns {*} the found item or undefined
	 */
	function find(arr, predicate, thisArg) {
	  if (Array.prototype.find) {
	    return arr.find(predicate, thisArg);
	  }
	  for (var i = 0; i < arr.length; ++i) {
	    var v = arr[i];
	    if (predicate(v, i, arr)) {
	      return v;
	    }
	  }
	  return undefined;
	}
	
	/**
	 * Sort of polyfill for [Object.assign]{@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign}
	 * @param {object} target the target to set the properties on.
	 * @param {...object} sources the source objects to copy properties from.
	 * @returns {object} the target
	 */
	function assign(target) {
	  for (var _len = arguments.length, sources = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
	    sources[_key - 1] = arguments[_key];
	  }
	
	  if (Object.assign) {
	    return Object.assign.apply(Object, [target].concat(sources));
	  }
	  for (var i = 0; i < sources.length; ++i) {
	    var source = sources[i];
	    if (source) {
	      for (var key in source) {
	        if (Object.prototype.hasOwnProperty.call(source, key)) {
	          target[key] = source[key]; // eslint-disable-line no-param-reassign
	        }
	      }
	    }
	  }
	  return target;
	}

/***/ }),
/* 50 */
/***/ (function(module, exports) {

	var toString = {}.toString;
	
	module.exports = function (it) {
	  return toString.call(it).slice(8, -1);
	};


/***/ }),
/* 51 */
/***/ (function(module, exports) {

	var core = module.exports = { version: '2.6.11' };
	if (typeof __e == 'number') __e = core; // eslint-disable-line no-undef


/***/ }),
/* 52 */
/***/ (function(module, exports, __webpack_require__) {

	// optional / simple context binding
	var aFunction = __webpack_require__(36);
	module.exports = function (fn, that, length) {
	  aFunction(fn);
	  if (that === undefined) return fn;
	  switch (length) {
	    case 1: return function (a) {
	      return fn.call(that, a);
	    };
	    case 2: return function (a, b) {
	      return fn.call(that, a, b);
	    };
	    case 3: return function (a, b, c) {
	      return fn.call(that, a, b, c);
	    };
	  }
	  return function (/* ...args */) {
	    return fn.apply(that, arguments);
	  };
	};


/***/ }),
/* 53 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	var fails = __webpack_require__(13);
	
	module.exports = function (method, arg) {
	  return !!method && fails(function () {
	    // eslint-disable-next-line no-useless-call
	    arg ? method.call(null, function () { /* empty */ }, 1) : method.call(null);
	  });
	};


/***/ }),
/* 54 */
/***/ (function(module, exports) {

	// 7.1.4 ToInteger
	var ceil = Math.ceil;
	var floor = Math.floor;
	module.exports = function (it) {
	  return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);
	};


/***/ }),
/* 55 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	var support = __webpack_require__(115);
	var compressions = __webpack_require__(225);
	var nodeBuffer = __webpack_require__(226);
	/**
	 * Convert a string to a "binary string" : a string containing only char codes between 0 and 255.
	 * @param {string} str the string to transform.
	 * @return {String} the binary string.
	 */
	exports.string2binary = function(str) {
	    var result = "";
	    for (var i = 0; i < str.length; i++) {
	        result += String.fromCharCode(str.charCodeAt(i) & 0xff);
	    }
	    return result;
	};
	exports.arrayBuffer2Blob = function(buffer, mimeType) {
	    exports.checkSupport("blob");
		mimeType = mimeType || 'application/zip';
	
	    try {
	        // Blob constructor
	        return new Blob([buffer], {
	            type: mimeType
	        });
	    }
	    catch (e) {
	
	        try {
	            // deprecated, browser only, old way
	            var Builder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder || window.MSBlobBuilder;
	            var builder = new Builder();
	            builder.append(buffer);
	            return builder.getBlob(mimeType);
	        }
	        catch (e) {
	
	            // well, fuck ?!
	            throw new Error("Bug : can't construct the Blob.");
	        }
	    }
	
	
	};
	/**
	 * The identity function.
	 * @param {Object} input the input.
	 * @return {Object} the same input.
	 */
	function identity(input) {
	    return input;
	}
	
	/**
	 * Fill in an array with a string.
	 * @param {String} str the string to use.
	 * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to fill in (will be mutated).
	 * @return {Array|ArrayBuffer|Uint8Array|Buffer} the updated array.
	 */
	function stringToArrayLike(str, array) {
	    for (var i = 0; i < str.length; ++i) {
	        array[i] = str.charCodeAt(i) & 0xFF;
	    }
	    return array;
	}
	
	/**
	 * Transform an array-like object to a string.
	 * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to transform.
	 * @return {String} the result.
	 */
	function arrayLikeToString(array) {
	    // Performances notes :
	    // --------------------
	    // String.fromCharCode.apply(null, array) is the fastest, see
	    // see http://jsperf.com/converting-a-uint8array-to-a-string/2
	    // but the stack is limited (and we can get huge arrays !).
	    //
	    // result += String.fromCharCode(array[i]); generate too many strings !
	    //
	    // This code is inspired by http://jsperf.com/arraybuffer-to-string-apply-performance/2
	    var chunk = 65536;
	    var result = [],
	        len = array.length,
	        type = exports.getTypeOf(array),
	        k = 0,
	        canUseApply = true;
	      try {
	         switch(type) {
	            case "uint8array":
	               String.fromCharCode.apply(null, new Uint8Array(0));
	               break;
	            case "nodebuffer":
	               String.fromCharCode.apply(null, nodeBuffer(0));
	               break;
	         }
	      } catch(e) {
	         canUseApply = false;
	      }
	
	      // no apply : slow and painful algorithm
	      // default browser on android 4.*
	      if (!canUseApply) {
	         var resultStr = "";
	         for(var i = 0; i < array.length;i++) {
	            resultStr += String.fromCharCode(array[i]);
	         }
	    return resultStr;
	    }
	    while (k < len && chunk > 1) {
	        try {
	            if (type === "array" || type === "nodebuffer") {
	                result.push(String.fromCharCode.apply(null, array.slice(k, Math.min(k + chunk, len))));
	            }
	            else {
	                result.push(String.fromCharCode.apply(null, array.subarray(k, Math.min(k + chunk, len))));
	            }
	            k += chunk;
	        }
	        catch (e) {
	            chunk = Math.floor(chunk / 2);
	        }
	    }
	    return result.join("");
	}
	
	exports.applyFromCharCode = arrayLikeToString;
	
	
	/**
	 * Copy the data from an array-like to an other array-like.
	 * @param {Array|ArrayBuffer|Uint8Array|Buffer} arrayFrom the origin array.
	 * @param {Array|ArrayBuffer|Uint8Array|Buffer} arrayTo the destination array which will be mutated.
	 * @return {Array|ArrayBuffer|Uint8Array|Buffer} the updated destination array.
	 */
	function arrayLikeToArrayLike(arrayFrom, arrayTo) {
	    for (var i = 0; i < arrayFrom.length; i++) {
	        arrayTo[i] = arrayFrom[i];
	    }
	    return arrayTo;
	}
	
	// a matrix containing functions to transform everything into everything.
	var transform = {};
	
	// string to ?
	transform["string"] = {
	    "string": identity,
	    "array": function(input) {
	        return stringToArrayLike(input, new Array(input.length));
	    },
	    "arraybuffer": function(input) {
	        return transform["string"]["uint8array"](input).buffer;
	    },
	    "uint8array": function(input) {
	        return stringToArrayLike(input, new Uint8Array(input.length));
	    },
	    "nodebuffer": function(input) {
	        return stringToArrayLike(input, nodeBuffer(input.length));
	    }
	};
	
	// array to ?
	transform["array"] = {
	    "string": arrayLikeToString,
	    "array": identity,
	    "arraybuffer": function(input) {
	        return (new Uint8Array(input)).buffer;
	    },
	    "uint8array": function(input) {
	        return new Uint8Array(input);
	    },
	    "nodebuffer": function(input) {
	        return nodeBuffer(input);
	    }
	};
	
	// arraybuffer to ?
	transform["arraybuffer"] = {
	    "string": function(input) {
	        return arrayLikeToString(new Uint8Array(input));
	    },
	    "array": function(input) {
	        return arrayLikeToArrayLike(new Uint8Array(input), new Array(input.byteLength));
	    },
	    "arraybuffer": identity,
	    "uint8array": function(input) {
	        return new Uint8Array(input);
	    },
	    "nodebuffer": function(input) {
	        return nodeBuffer(new Uint8Array(input));
	    }
	};
	
	// uint8array to ?
	transform["uint8array"] = {
	    "string": arrayLikeToString,
	    "array": function(input) {
	        return arrayLikeToArrayLike(input, new Array(input.length));
	    },
	    "arraybuffer": function(input) {
	        return input.buffer;
	    },
	    "uint8array": identity,
	    "nodebuffer": function(input) {
	        return nodeBuffer(input);
	    }
	};
	
	// nodebuffer to ?
	transform["nodebuffer"] = {
	    "string": arrayLikeToString,
	    "array": function(input) {
	        return arrayLikeToArrayLike(input, new Array(input.length));
	    },
	    "arraybuffer": function(input) {
	        return transform["nodebuffer"]["uint8array"](input).buffer;
	    },
	    "uint8array": function(input) {
	        return arrayLikeToArrayLike(input, new Uint8Array(input.length));
	    },
	    "nodebuffer": identity
	};
	
	/**
	 * Transform an input into any type.
	 * The supported output type are : string, array, uint8array, arraybuffer, nodebuffer.
	 * If no output type is specified, the unmodified input will be returned.
	 * @param {String} outputType the output type.
	 * @param {String|Array|ArrayBuffer|Uint8Array|Buffer} input the input to convert.
	 * @throws {Error} an Error if the browser doesn't support the requested output type.
	 */
	exports.transformTo = function(outputType, input) {
	    if (!input) {
	        // undefined, null, etc
	        // an empty string won't harm.
	        input = "";
	    }
	    if (!outputType) {
	        return input;
	    }
	    exports.checkSupport(outputType);
	    var inputType = exports.getTypeOf(input);
	    var result = transform[inputType][outputType](input);
	    return result;
	};
	
	/**
	 * Return the type of the input.
	 * The type will be in a format valid for JSZip.utils.transformTo : string, array, uint8array, arraybuffer.
	 * @param {Object} input the input to identify.
	 * @return {String} the (lowercase) type of the input.
	 */
	exports.getTypeOf = function(input) {
	    if (typeof input === "string") {
	        return "string";
	    }
	    if (Object.prototype.toString.call(input) === "[object Array]") {
	        return "array";
	    }
	    if (support.nodebuffer && nodeBuffer.test(input)) {
	        return "nodebuffer";
	    }
	    if (support.uint8array && input instanceof Uint8Array) {
	        return "uint8array";
	    }
	    if (support.arraybuffer && input instanceof ArrayBuffer) {
	        return "arraybuffer";
	    }
	};
	
	/**
	 * Throw an exception if the type is not supported.
	 * @param {String} type the type to check.
	 * @throws {Error} an Error if the browser doesn't support the requested type.
	 */
	exports.checkSupport = function(type) {
	    var supported = support[type.toLowerCase()];
	    if (!supported) {
	        throw new Error(type + " is not supported by this browser");
	    }
	};
	exports.MAX_VALUE_16BITS = 65535;
	exports.MAX_VALUE_32BITS = -1; // well, "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF" is parsed as -1
	
	/**
	 * Prettify a string read as binary.
	 * @param {string} str the string to prettify.
	 * @return {string} a pretty string.
	 */
	exports.pretty = function(str) {
	    var res = '',
	        code, i;
	    for (i = 0; i < (str || "").length; i++) {
	        code = str.charCodeAt(i);
	        res += '\\x' + (code < 16 ? "0" : "") + code.toString(16).toUpperCase();
	    }
	    return res;
	};
	
	/**
	 * Find a compression registered in JSZip.
	 * @param {string} compressionMethod the method magic to find.
	 * @return {Object|null} the JSZip compression object, null if none found.
	 */
	exports.findCompression = function(compressionMethod) {
	    for (var method in compressions) {
	        if (!compressions.hasOwnProperty(method)) {
	            continue;
	        }
	        if (compressions[method].magic === compressionMethod) {
	            return compressions[method];
	        }
	    }
	    return null;
	};
	/**
	* Cross-window, cross-Node-context regular expression detection
	* @param  {Object}  object Anything
	* @return {Boolean}        true if the object is a regular expression,
	* false otherwise
	*/
	exports.isRegExp = function (object) {
	    return Object.prototype.toString.call(object) === "[object RegExp]";
	};
	
	/**
	 * Merge the objects passed as parameters into a new one.
	 * @private
	 * @param {...Object} var_args All objects to merge.
	 * @return {Object} a new object with the data of the others.
	 */
	exports.extend = function() {
	    var result = {}, i, attr;
	    for (i = 0; i < arguments.length; i++) { // arguments is not enumerable in some browsers
	        for (attr in arguments[i]) {
	            if (arguments[i].hasOwnProperty(attr) && typeof result[attr] === "undefined") {
	                result[attr] = arguments[i][attr];
	            }
	        }
	    }
	    return result;
	};
	


/***/ }),
/* 56 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	
	var _functions = __webpack_require__(31);
	
	var _MapEventType = __webpack_require__(142);
	
	var _MapEventType2 = _interopRequireDefault(_MapEventType);
	
	var _Object = __webpack_require__(32);
	
	var _Object2 = _interopRequireDefault(_Object);
	
	var _dom = __webpack_require__(34);
	
	var _events = __webpack_require__(30);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var __extends = undefined && undefined.__extends || function () {
	    var _extendStatics = function extendStatics(d, b) {
	        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	            d.__proto__ = b;
	        } || function (d, b) {
	            for (var p in b) {
	                if (b.hasOwnProperty(p)) d[p] = b[p];
	            }
	        };
	        return _extendStatics(d, b);
	    };
	    return function (d, b) {
	        _extendStatics(d, b);
	        function __() {
	            this.constructor = d;
	        }
	        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	    };
	}();
	/**
	 * @module ol/control/Control
	 */
	
	/**
	 * @typedef {Object} Options
	 * @property {HTMLElement} [element] The element is the control's
	 * container element. This only needs to be specified if you're developing
	 * a custom control.
	 * @property {function(import("../MapEvent.js").default)} [render] Function called when
	 * the control should be re-rendered. This is called in a `requestAnimationFrame`
	 * callback.
	 * @property {HTMLElement|string} [target] Specify a target if you want
	 * the control to be rendered outside of the map's viewport.
	 */
	/**
	 * @classdesc
	 * A control is a visible widget with a DOM element in a fixed position on the
	 * screen. They can involve user input (buttons), or be informational only;
	 * the position is determined using CSS. By default these are placed in the
	 * container with CSS class name `ol-overlaycontainer-stopevent`, but can use
	 * any outside DOM element.
	 *
	 * This is the base class for controls. You can use it for simple custom
	 * controls by creating the element with listeners, creating an instance:
	 * ```js
	 * var myControl = new Control({element: myElement});
	 * ```
	 * and then adding this to the map.
	 *
	 * The main advantage of having this as a control rather than a simple separate
	 * DOM element is that preventing propagation is handled for you. Controls
	 * will also be objects in a {@link module:ol/Collection~Collection}, so you can use their methods.
	 *
	 * You can also extend this base for your own control class. See
	 * examples/custom-controls for an example of how to do this.
	 *
	 * @api
	 */
	var Control = /** @class */function (_super) {
	    __extends(Control, _super);
	    /**
	     * @param {Options} options Control options.
	     */
	    function Control(options) {
	        var _this = _super.call(this) || this;
	        /**
	         * @protected
	         * @type {HTMLElement}
	         */
	        _this.element = options.element ? options.element : null;
	        /**
	         * @private
	         * @type {HTMLElement}
	         */
	        _this.target_ = null;
	        /**
	         * @private
	         * @type {import("../PluggableMap.js").default}
	         */
	        _this.map_ = null;
	        /**
	         * @protected
	         * @type {!Array<import("../events.js").EventsKey>}
	         */
	        _this.listenerKeys = [];
	        /**
	         * @type {function(import("../MapEvent.js").default): void}
	         */
	        _this.render = options.render ? options.render : _functions.VOID;
	        if (options.target) {
	            _this.setTarget(options.target);
	        }
	        return _this;
	    }
	    /**
	     * @inheritDoc
	     */
	    Control.prototype.disposeInternal = function () {
	        (0, _dom.removeNode)(this.element);
	        _super.prototype.disposeInternal.call(this);
	    };
	    /**
	     * Get the map associated with this control.
	     * @return {import("../PluggableMap.js").default} Map.
	     * @api
	     */
	    Control.prototype.getMap = function () {
	        return this.map_;
	    };
	    /**
	     * Remove the control from its current map and attach it to the new map.
	     * Subclasses may set up event handlers to get notified about changes to
	     * the map here.
	     * @param {import("../PluggableMap.js").default} map Map.
	     * @api
	     */
	    Control.prototype.setMap = function (map) {
	        if (this.map_) {
	            (0, _dom.removeNode)(this.element);
	        }
	        for (var i = 0, ii = this.listenerKeys.length; i < ii; ++i) {
	            (0, _events.unlistenByKey)(this.listenerKeys[i]);
	        }
	        this.listenerKeys.length = 0;
	        this.map_ = map;
	        if (this.map_) {
	            var target = this.target_ ? this.target_ : map.getOverlayContainerStopEvent();
	            target.appendChild(this.element);
	            if (this.render !== _functions.VOID) {
	                this.listenerKeys.push((0, _events.listen)(map, _MapEventType2.default.POSTRENDER, this.render, this));
	            }
	            map.render();
	        }
	    };
	    /**
	     * This function is used to set a target element for the control. It has no
	     * effect if it is called after the control has been added to the map (i.e.
	     * after `setMap` is called on the control). If no `target` is set in the
	     * options passed to the control constructor and if `setTarget` is not called
	     * then the control is added to the map's overlay container.
	     * @param {HTMLElement|string} target Target.
	     * @api
	     */
	    Control.prototype.setTarget = function (target) {
	        this.target_ = typeof target === 'string' ? document.getElementById(target) : target;
	    };
	    return Control;
	}(_Object2.default);
	exports.default = Control;
	//# sourceMappingURL=Control.js.map

/***/ }),
/* 57 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	exports.circular = circular;
	exports.fromExtent = fromExtent;
	exports.fromCircle = fromCircle;
	exports.makeRegular = makeRegular;
	
	var _array = __webpack_require__(18);
	
	var _extent = __webpack_require__(4);
	
	var _GeometryLayout = __webpack_require__(102);
	
	var _GeometryLayout2 = _interopRequireDefault(_GeometryLayout);
	
	var _GeometryType = __webpack_require__(22);
	
	var _GeometryType2 = _interopRequireDefault(_GeometryType);
	
	var _LinearRing = __webpack_require__(596);
	
	var _LinearRing2 = _interopRequireDefault(_LinearRing);
	
	var _Point = __webpack_require__(85);
	
	var _Point2 = _interopRequireDefault(_Point);
	
	var _SimpleGeometry = __webpack_require__(64);
	
	var _SimpleGeometry2 = _interopRequireDefault(_SimpleGeometry);
	
	var _sphere = __webpack_require__(298);
	
	var _area = __webpack_require__(173);
	
	var _closest = __webpack_require__(125);
	
	var _contains = __webpack_require__(145);
	
	var _deflate = __webpack_require__(72);
	
	var _inflate = __webpack_require__(86);
	
	var _interiorpoint = __webpack_require__(277);
	
	var _intersectsextent = __webpack_require__(146);
	
	var _orient = __webpack_require__(280);
	
	var _simplify = __webpack_require__(103);
	
	var _math = __webpack_require__(19);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var __extends = undefined && undefined.__extends || function () {
	    var _extendStatics = function extendStatics(d, b) {
	        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	            d.__proto__ = b;
	        } || function (d, b) {
	            for (var p in b) {
	                if (b.hasOwnProperty(p)) d[p] = b[p];
	            }
	        };
	        return _extendStatics(d, b);
	    };
	    return function (d, b) {
	        _extendStatics(d, b);
	        function __() {
	            this.constructor = d;
	        }
	        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	    };
	}();
	/**
	 * @module ol/geom/Polygon
	 */
	
	/**
	 * @classdesc
	 * Polygon geometry.
	 *
	 * @api
	 */
	var Polygon = /** @class */function (_super) {
	    __extends(Polygon, _super);
	    /**
	     * @param {!Array<Array<import("../coordinate.js").Coordinate>>|!Array<number>} coordinates
	     *     Array of linear rings that define the polygon. The first linear ring of the
	     *     array defines the outer-boundary or surface of the polygon. Each subsequent
	     *     linear ring defines a hole in the surface of the polygon. A linear ring is
	     *     an array of vertices' coordinates where the first coordinate and the last are
	     *     equivalent. (For internal use, flat coordinates in combination with
	     *     `opt_layout` and `opt_ends` are also accepted.)
	     * @param {GeometryLayout=} opt_layout Layout.
	     * @param {Array<number>=} opt_ends Ends (for internal use with flat coordinates).
	     */
	    function Polygon(coordinates, opt_layout, opt_ends) {
	        var _this = _super.call(this) || this;
	        /**
	         * @type {Array<number>}
	         * @private
	         */
	        _this.ends_ = [];
	        /**
	         * @private
	         * @type {number}
	         */
	        _this.flatInteriorPointRevision_ = -1;
	        /**
	         * @private
	         * @type {import("../coordinate.js").Coordinate}
	         */
	        _this.flatInteriorPoint_ = null;
	        /**
	         * @private
	         * @type {number}
	         */
	        _this.maxDelta_ = -1;
	        /**
	         * @private
	         * @type {number}
	         */
	        _this.maxDeltaRevision_ = -1;
	        /**
	         * @private
	         * @type {number}
	         */
	        _this.orientedRevision_ = -1;
	        /**
	         * @private
	         * @type {Array<number>}
	         */
	        _this.orientedFlatCoordinates_ = null;
	        if (opt_layout !== undefined && opt_ends) {
	            _this.setFlatCoordinates(opt_layout, /** @type {Array<number>} */coordinates);
	            _this.ends_ = opt_ends;
	        } else {
	            _this.setCoordinates( /** @type {Array<Array<import("../coordinate.js").Coordinate>>} */coordinates, opt_layout);
	        }
	        return _this;
	    }
	    /**
	     * Append the passed linear ring to this polygon.
	     * @param {LinearRing} linearRing Linear ring.
	     * @api
	     */
	    Polygon.prototype.appendLinearRing = function (linearRing) {
	        if (!this.flatCoordinates) {
	            this.flatCoordinates = linearRing.getFlatCoordinates().slice();
	        } else {
	            (0, _array.extend)(this.flatCoordinates, linearRing.getFlatCoordinates());
	        }
	        this.ends_.push(this.flatCoordinates.length);
	        this.changed();
	    };
	    /**
	     * Make a complete copy of the geometry.
	     * @return {!Polygon} Clone.
	     * @override
	     * @api
	     */
	    Polygon.prototype.clone = function () {
	        return new Polygon(this.flatCoordinates.slice(), this.layout, this.ends_.slice());
	    };
	    /**
	     * @inheritDoc
	     */
	    Polygon.prototype.closestPointXY = function (x, y, closestPoint, minSquaredDistance) {
	        if (minSquaredDistance < (0, _extent.closestSquaredDistanceXY)(this.getExtent(), x, y)) {
	            return minSquaredDistance;
	        }
	        if (this.maxDeltaRevision_ != this.getRevision()) {
	            this.maxDelta_ = Math.sqrt((0, _closest.arrayMaxSquaredDelta)(this.flatCoordinates, 0, this.ends_, this.stride, 0));
	            this.maxDeltaRevision_ = this.getRevision();
	        }
	        return (0, _closest.assignClosestArrayPoint)(this.flatCoordinates, 0, this.ends_, this.stride, this.maxDelta_, true, x, y, closestPoint, minSquaredDistance);
	    };
	    /**
	     * @inheritDoc
	     */
	    Polygon.prototype.containsXY = function (x, y) {
	        return (0, _contains.linearRingsContainsXY)(this.getOrientedFlatCoordinates(), 0, this.ends_, this.stride, x, y);
	    };
	    /**
	     * Return the area of the polygon on projected plane.
	     * @return {number} Area (on projected plane).
	     * @api
	     */
	    Polygon.prototype.getArea = function () {
	        return (0, _area.linearRings)(this.getOrientedFlatCoordinates(), 0, this.ends_, this.stride);
	    };
	    /**
	     * Get the coordinate array for this geometry.  This array has the structure
	     * of a GeoJSON coordinate array for polygons.
	     *
	     * @param {boolean=} opt_right Orient coordinates according to the right-hand
	     *     rule (counter-clockwise for exterior and clockwise for interior rings).
	     *     If `false`, coordinates will be oriented according to the left-hand rule
	     *     (clockwise for exterior and counter-clockwise for interior rings).
	     *     By default, coordinate orientation will depend on how the geometry was
	     *     constructed.
	     * @return {Array<Array<import("../coordinate.js").Coordinate>>} Coordinates.
	     * @override
	     * @api
	     */
	    Polygon.prototype.getCoordinates = function (opt_right) {
	        var flatCoordinates;
	        if (opt_right !== undefined) {
	            flatCoordinates = this.getOrientedFlatCoordinates().slice();
	            (0, _orient.orientLinearRings)(flatCoordinates, 0, this.ends_, this.stride, opt_right);
	        } else {
	            flatCoordinates = this.flatCoordinates;
	        }
	        return (0, _inflate.inflateCoordinatesArray)(flatCoordinates, 0, this.ends_, this.stride);
	    };
	    /**
	     * @return {Array<number>} Ends.
	     */
	    Polygon.prototype.getEnds = function () {
	        return this.ends_;
	    };
	    /**
	     * @return {Array<number>} Interior point.
	     */
	    Polygon.prototype.getFlatInteriorPoint = function () {
	        if (this.flatInteriorPointRevision_ != this.getRevision()) {
	            var flatCenter = (0, _extent.getCenter)(this.getExtent());
	            this.flatInteriorPoint_ = (0, _interiorpoint.getInteriorPointOfArray)(this.getOrientedFlatCoordinates(), 0, this.ends_, this.stride, flatCenter, 0);
	            this.flatInteriorPointRevision_ = this.getRevision();
	        }
	        return this.flatInteriorPoint_;
	    };
	    /**
	     * Return an interior point of the polygon.
	     * @return {Point} Interior point as XYM coordinate, where M is the
	     * length of the horizontal intersection that the point belongs to.
	     * @api
	     */
	    Polygon.prototype.getInteriorPoint = function () {
	        return new _Point2.default(this.getFlatInteriorPoint(), _GeometryLayout2.default.XYM);
	    };
	    /**
	     * Return the number of rings of the polygon,  this includes the exterior
	     * ring and any interior rings.
	     *
	     * @return {number} Number of rings.
	     * @api
	     */
	    Polygon.prototype.getLinearRingCount = function () {
	        return this.ends_.length;
	    };
	    /**
	     * Return the Nth linear ring of the polygon geometry. Return `null` if the
	     * given index is out of range.
	     * The exterior linear ring is available at index `0` and the interior rings
	     * at index `1` and beyond.
	     *
	     * @param {number} index Index.
	     * @return {LinearRing} Linear ring.
	     * @api
	     */
	    Polygon.prototype.getLinearRing = function (index) {
	        if (index < 0 || this.ends_.length <= index) {
	            return null;
	        }
	        return new _LinearRing2.default(this.flatCoordinates.slice(index === 0 ? 0 : this.ends_[index - 1], this.ends_[index]), this.layout);
	    };
	    /**
	     * Return the linear rings of the polygon.
	     * @return {Array<LinearRing>} Linear rings.
	     * @api
	     */
	    Polygon.prototype.getLinearRings = function () {
	        var layout = this.layout;
	        var flatCoordinates = this.flatCoordinates;
	        var ends = this.ends_;
	        var linearRings = [];
	        var offset = 0;
	        for (var i = 0, ii = ends.length; i < ii; ++i) {
	            var end = ends[i];
	            var linearRing = new _LinearRing2.default(flatCoordinates.slice(offset, end), layout);
	            linearRings.push(linearRing);
	            offset = end;
	        }
	        return linearRings;
	    };
	    /**
	     * @return {Array<number>} Oriented flat coordinates.
	     */
	    Polygon.prototype.getOrientedFlatCoordinates = function () {
	        if (this.orientedRevision_ != this.getRevision()) {
	            var flatCoordinates = this.flatCoordinates;
	            if ((0, _orient.linearRingsAreOriented)(flatCoordinates, 0, this.ends_, this.stride)) {
	                this.orientedFlatCoordinates_ = flatCoordinates;
	            } else {
	                this.orientedFlatCoordinates_ = flatCoordinates.slice();
	                this.orientedFlatCoordinates_.length = (0, _orient.orientLinearRings)(this.orientedFlatCoordinates_, 0, this.ends_, this.stride);
	            }
	            this.orientedRevision_ = this.getRevision();
	        }
	        return this.orientedFlatCoordinates_;
	    };
	    /**
	     * @inheritDoc
	     */
	    Polygon.prototype.getSimplifiedGeometryInternal = function (squaredTolerance) {
	        var simplifiedFlatCoordinates = [];
	        var simplifiedEnds = [];
	        simplifiedFlatCoordinates.length = (0, _simplify.quantizeArray)(this.flatCoordinates, 0, this.ends_, this.stride, Math.sqrt(squaredTolerance), simplifiedFlatCoordinates, 0, simplifiedEnds);
	        return new Polygon(simplifiedFlatCoordinates, _GeometryLayout2.default.XY, simplifiedEnds);
	    };
	    /**
	     * @inheritDoc
	     * @api
	     */
	    Polygon.prototype.getType = function () {
	        return _GeometryType2.default.POLYGON;
	    };
	    /**
	     * @inheritDoc
	     * @api
	     */
	    Polygon.prototype.intersectsExtent = function (extent) {
	        return (0, _intersectsextent.intersectsLinearRingArray)(this.getOrientedFlatCoordinates(), 0, this.ends_, this.stride, extent);
	    };
	    /**
	     * Set the coordinates of the polygon.
	     * @param {!Array<Array<import("../coordinate.js").Coordinate>>} coordinates Coordinates.
	     * @param {GeometryLayout=} opt_layout Layout.
	     * @override
	     * @api
	     */
	    Polygon.prototype.setCoordinates = function (coordinates, opt_layout) {
	        this.setLayout(opt_layout, coordinates, 2);
	        if (!this.flatCoordinates) {
	            this.flatCoordinates = [];
	        }
	        var ends = (0, _deflate.deflateCoordinatesArray)(this.flatCoordinates, 0, coordinates, this.stride, this.ends_);
	        this.flatCoordinates.length = ends.length === 0 ? 0 : ends[ends.length - 1];
	        this.changed();
	    };
	    return Polygon;
	}(_SimpleGeometry2.default);
	exports.default = Polygon;
	/**
	 * Create an approximation of a circle on the surface of a sphere.
	 * @param {import("../coordinate.js").Coordinate} center Center (`[lon, lat]` in degrees).
	 * @param {number} radius The great-circle distance from the center to
	 *     the polygon vertices.
	 * @param {number=} opt_n Optional number of vertices for the resulting
	 *     polygon. Default is `32`.
	 * @param {number=} opt_sphereRadius Optional radius for the sphere (defaults to
	 *     the Earth's mean radius using the WGS84 ellipsoid).
	 * @return {Polygon} The "circular" polygon.
	 * @api
	 */
	
	function circular(center, radius, opt_n, opt_sphereRadius) {
	    var n = opt_n ? opt_n : 32;
	    /** @type {Array<number>} */
	    var flatCoordinates = [];
	    for (var i = 0; i < n; ++i) {
	        (0, _array.extend)(flatCoordinates, (0, _sphere.offset)(center, radius, 2 * Math.PI * i / n, opt_sphereRadius));
	    }
	    flatCoordinates.push(flatCoordinates[0], flatCoordinates[1]);
	    return new Polygon(flatCoordinates, _GeometryLayout2.default.XY, [flatCoordinates.length]);
	}
	/**
	 * Create a polygon from an extent. The layout used is `XY`.
	 * @param {import("../extent.js").Extent} extent The extent.
	 * @return {Polygon} The polygon.
	 * @api
	 */
	function fromExtent(extent) {
	    var minX = extent[0];
	    var minY = extent[1];
	    var maxX = extent[2];
	    var maxY = extent[3];
	    var flatCoordinates = [minX, minY, minX, maxY, maxX, maxY, maxX, minY, minX, minY];
	    return new Polygon(flatCoordinates, _GeometryLayout2.default.XY, [flatCoordinates.length]);
	}
	/**
	 * Create a regular polygon from a circle.
	 * @param {import("./Circle.js").default} circle Circle geometry.
	 * @param {number=} opt_sides Number of sides of the polygon. Default is 32.
	 * @param {number=} opt_angle Start angle for the first vertex of the polygon in
	 *     radians. Default is 0.
	 * @return {Polygon} Polygon geometry.
	 * @api
	 */
	function fromCircle(circle, opt_sides, opt_angle) {
	    var sides = opt_sides ? opt_sides : 32;
	    var stride = circle.getStride();
	    var layout = circle.getLayout();
	    var center = circle.getCenter();
	    var arrayLength = stride * (sides + 1);
	    var flatCoordinates = new Array(arrayLength);
	    for (var i = 0; i < arrayLength; i += stride) {
	        flatCoordinates[i] = 0;
	        flatCoordinates[i + 1] = 0;
	        for (var j = 2; j < stride; j++) {
	            flatCoordinates[i + j] = center[j];
	        }
	    }
	    var ends = [flatCoordinates.length];
	    var polygon = new Polygon(flatCoordinates, layout, ends);
	    makeRegular(polygon, center, circle.getRadius(), opt_angle);
	    return polygon;
	}
	/**
	 * Modify the coordinates of a polygon to make it a regular polygon.
	 * @param {Polygon} polygon Polygon geometry.
	 * @param {import("../coordinate.js").Coordinate} center Center of the regular polygon.
	 * @param {number} radius Radius of the regular polygon.
	 * @param {number=} opt_angle Start angle for the first vertex of the polygon in
	 *     radians. Default is 0.
	 */
	function makeRegular(polygon, center, radius, opt_angle) {
	    var flatCoordinates = polygon.getFlatCoordinates();
	    var stride = polygon.getStride();
	    var sides = flatCoordinates.length / stride - 1;
	    var startAngle = opt_angle ? opt_angle : 0;
	    for (var i = 0; i <= sides; ++i) {
	        var offset = i * stride;
	        var angle = startAngle + (0, _math.modulo)(i, sides) * 2 * Math.PI / sides;
	        flatCoordinates[offset] = center[0] + radius * Math.cos(angle);
	        flatCoordinates[offset + 1] = center[1] + radius * Math.sin(angle);
	    }
	    polygon.changed();
	}
	//# sourceMappingURL=Polygon.js.map

/***/ }),
/* 58 */
/***/ (function(module, exports, __webpack_require__) {

	// 0 -> Array#forEach
	// 1 -> Array#map
	// 2 -> Array#filter
	// 3 -> Array#some
	// 4 -> Array#every
	// 5 -> Array#find
	// 6 -> Array#findIndex
	var ctx = __webpack_require__(52);
	var IObject = __webpack_require__(130);
	var toObject = __webpack_require__(28);
	var toLength = __webpack_require__(21);
	var asc = __webpack_require__(196);
	module.exports = function (TYPE, $create) {
	  var IS_MAP = TYPE == 1;
	  var IS_FILTER = TYPE == 2;
	  var IS_SOME = TYPE == 3;
	  var IS_EVERY = TYPE == 4;
	  var IS_FIND_INDEX = TYPE == 6;
	  var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;
	  var create = $create || asc;
	  return function ($this, callbackfn, that) {
	    var O = toObject($this);
	    var self = IObject(O);
	    var f = ctx(callbackfn, that, 3);
	    var length = toLength(self.length);
	    var index = 0;
	    var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;
	    var val, res;
	    for (;length > index; index++) if (NO_HOLES || index in self) {
	      val = self[index];
	      res = f(val, index, O);
	      if (TYPE) {
	        if (IS_MAP) result[index] = res;   // map
	        else if (res) switch (TYPE) {
	          case 3: return true;             // some
	          case 5: return val;              // find
	          case 6: return index;            // findIndex
	          case 2: result.push(val);        // filter
	        } else if (IS_EVERY) return false; // every
	      }
	    }
	    return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;
	  };
	};


/***/ }),
/* 59 */
/***/ (function(module, exports) {

	// 7.2.1 RequireObjectCoercible(argument)
	module.exports = function (it) {
	  if (it == undefined) throw TypeError("Can't call method on  " + it);
	  return it;
	};


/***/ }),
/* 60 */
/***/ (function(module, exports, __webpack_require__) {

	// most Object methods by ES6 should accept primitives
	var $export = __webpack_require__(3);
	var core = __webpack_require__(51);
	var fails = __webpack_require__(13);
	module.exports = function (KEY, exec) {
	  var fn = (core.Object || {})[KEY] || Object[KEY];
	  var exp = {};
	  exp[KEY] = exec(fn);
	  $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);
	};


/***/ }),
/* 61 */
/***/ (function(module, exports, __webpack_require__) {

	// 7.1.1 ToPrimitive(input [, PreferredType])
	var isObject = __webpack_require__(15);
	// instead of the ES6 spec version, we didn't implement @@toPrimitive case
	// and the second argument - flag - preferred type is a string
	module.exports = function (it, S) {
	  if (!isObject(it)) return it;
	  var fn, val;
	  if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;
	  if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;
	  if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;
	  throw TypeError("Can't convert object to primitive value");
	};


/***/ }),
/* 62 */
/***/ (function(module, exports) {

	'use strict';
	
	exports.__esModule = true;
	exports.extend = extend;
	exports.indexOf = indexOf;
	exports.escapeExpression = escapeExpression;
	exports.isEmpty = isEmpty;
	exports.createFrame = createFrame;
	exports.blockParams = blockParams;
	exports.appendContextPath = appendContextPath;
	var escape = {
	  '&': '&amp;',
	  '<': '&lt;',
	  '>': '&gt;',
	  '"': '&quot;',
	  "'": '&#x27;',
	  '`': '&#x60;',
	  '=': '&#x3D;'
	};
	
	var badChars = /[&<>"'`=]/g,
	    possible = /[&<>"'`=]/;
	
	function escapeChar(chr) {
	  return escape[chr];
	}
	
	function extend(obj /* , ...source */) {
	  for (var i = 1; i < arguments.length; i++) {
	    for (var key in arguments[i]) {
	      if (Object.prototype.hasOwnProperty.call(arguments[i], key)) {
	        obj[key] = arguments[i][key];
	      }
	    }
	  }
	
	  return obj;
	}
	
	var toString = Object.prototype.toString;
	
	exports.toString = toString;
	// Sourced from lodash
	// https://github.com/bestiejs/lodash/blob/master/LICENSE.txt
	/* eslint-disable func-style */
	var isFunction = function isFunction(value) {
	  return typeof value === 'function';
	};
	// fallback for older versions of Chrome and Safari
	/* istanbul ignore next */
	if (isFunction(/x/)) {
	  exports.isFunction = isFunction = function (value) {
	    return typeof value === 'function' && toString.call(value) === '[object Function]';
	  };
	}
	exports.isFunction = isFunction;
	
	/* eslint-enable func-style */
	
	/* istanbul ignore next */
	var isArray = Array.isArray || function (value) {
	  return value && typeof value === 'object' ? toString.call(value) === '[object Array]' : false;
	};
	
	exports.isArray = isArray;
	// Older IE versions do not directly support indexOf so we must implement our own, sadly.
	
	function indexOf(array, value) {
	  for (var i = 0, len = array.length; i < len; i++) {
	    if (array[i] === value) {
	      return i;
	    }
	  }
	  return -1;
	}
	
	function escapeExpression(string) {
	  if (typeof string !== 'string') {
	    // don't escape SafeStrings, since they're already safe
	    if (string && string.toHTML) {
	      return string.toHTML();
	    } else if (string == null) {
	      return '';
	    } else if (!string) {
	      return string + '';
	    }
	
	    // Force a string conversion as this will be done by the append regardless and
	    // the regex test will do this transparently behind the scenes, causing issues if
	    // an object's to string has escaped characters in it.
	    string = '' + string;
	  }
	
	  if (!possible.test(string)) {
	    return string;
	  }
	  return string.replace(badChars, escapeChar);
	}
	
	function isEmpty(value) {
	  if (!value && value !== 0) {
	    return true;
	  } else if (isArray(value) && value.length === 0) {
	    return true;
	  } else {
	    return false;
	  }
	}
	
	function createFrame(object) {
	  var frame = extend({}, object);
	  frame._parent = object;
	  return frame;
	}
	
	function blockParams(params, ids) {
	  params.path = ids;
	  return params;
	}
	
	function appendContextPath(contextPath, id) {
	  return (contextPath ? contextPath + '.' : '') + id;
	}
	//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL3V0aWxzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQSxJQUFNLE1BQU0sR0FBRztBQUNiLEtBQUcsRUFBRSxPQUFPO0FBQ1osS0FBRyxFQUFFLE1BQU07QUFDWCxLQUFHLEVBQUUsTUFBTTtBQUNYLEtBQUcsRUFBRSxRQUFRO0FBQ2IsS0FBRyxFQUFFLFFBQVE7QUFDYixLQUFHLEVBQUUsUUFBUTtBQUNiLEtBQUcsRUFBRSxRQUFRO0NBQ2QsQ0FBQzs7QUFFRixJQUFNLFFBQVEsR0FBRyxZQUFZO0lBQzNCLFFBQVEsR0FBRyxXQUFXLENBQUM7O0FBRXpCLFNBQVMsVUFBVSxDQUFDLEdBQUcsRUFBRTtBQUN2QixTQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUNwQjs7QUFFTSxTQUFTLE1BQU0sQ0FBQyxHQUFHLG9CQUFvQjtBQUM1QyxPQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN6QyxTQUFLLElBQUksR0FBRyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUM1QixVQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUU7QUFDM0QsV0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztPQUM5QjtLQUNGO0dBQ0Y7O0FBRUQsU0FBTyxHQUFHLENBQUM7Q0FDWjs7QUFFTSxJQUFJLFFBQVEsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQzs7Ozs7O0FBS2hELElBQUksVUFBVSxHQUFHLG9CQUFTLEtBQUssRUFBRTtBQUMvQixTQUFPLE9BQU8sS0FBSyxLQUFLLFVBQVUsQ0FBQztDQUNwQyxDQUFDOzs7QUFHRixJQUFJLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUNuQixVQU9PLFVBQVUsR0FQakIsVUFBVSxHQUFHLFVBQVMsS0FBSyxFQUFFO0FBQzNCLFdBQ0UsT0FBTyxLQUFLLEtBQUssVUFBVSxJQUMzQixRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLG1CQUFtQixDQUM1QztHQUNILENBQUM7Q0FDSDtRQUNRLFVBQVUsR0FBVixVQUFVOzs7OztBQUlaLElBQU0sT0FBTyxHQUNsQixLQUFLLENBQUMsT0FBTyxJQUNiLFVBQVMsS0FBSyxFQUFFO0FBQ2QsU0FBTyxLQUFLLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxHQUNyQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLGdCQUFnQixHQUN6QyxLQUFLLENBQUM7Q0FDWCxDQUFDOzs7OztBQUdHLFNBQVMsT0FBTyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUU7QUFDcEMsT0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNoRCxRQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLEVBQUU7QUFDdEIsYUFBTyxDQUFDLENBQUM7S0FDVjtHQUNGO0FBQ0QsU0FBTyxDQUFDLENBQUMsQ0FBQztDQUNYOztBQUVNLFNBQVMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFO0FBQ3ZDLE1BQUksT0FBTyxNQUFNLEtBQUssUUFBUSxFQUFFOztBQUU5QixRQUFJLE1BQU0sSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFO0FBQzNCLGFBQU8sTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO0tBQ3hCLE1BQU0sSUFBSSxNQUFNLElBQUksSUFBSSxFQUFFO0FBQ3pCLGFBQU8sRUFBRSxDQUFDO0tBQ1gsTUFBTSxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ2xCLGFBQU8sTUFBTSxHQUFHLEVBQUUsQ0FBQztLQUNwQjs7Ozs7QUFLRCxVQUFNLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQztHQUN0Qjs7QUFFRCxNQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRTtBQUMxQixXQUFPLE1BQU0sQ0FBQztHQUNmO0FBQ0QsU0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztDQUM3Qzs7QUFFTSxTQUFTLE9BQU8sQ0FBQyxLQUFLLEVBQUU7QUFDN0IsTUFBSSxDQUFDLEtBQUssSUFBSSxLQUFLLEtBQUssQ0FBQyxFQUFFO0FBQ3pCLFdBQU8sSUFBSSxDQUFDO0dBQ2IsTUFBTSxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtBQUMvQyxXQUFPLElBQUksQ0FBQztHQUNiLE1BQU07QUFDTCxXQUFPLEtBQUssQ0FBQztHQUNkO0NBQ0Y7O0FBRU0sU0FBUyxXQUFXLENBQUMsTUFBTSxFQUFFO0FBQ2xDLE1BQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDL0IsT0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7QUFDdkIsU0FBTyxLQUFLLENBQUM7Q0FDZDs7QUFFTSxTQUFTLFdBQVcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFO0FBQ3ZDLFFBQU0sQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2xCLFNBQU8sTUFBTSxDQUFDO0NBQ2Y7O0FBRU0sU0FBUyxpQkFBaUIsQ0FBQyxXQUFXLEVBQUUsRUFBRSxFQUFFO0FBQ2pELFNBQU8sQ0FBQyxXQUFXLEdBQUcsV0FBVyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUEsR0FBSSxFQUFFLENBQUM7Q0FDcEQiLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBlc2NhcGUgPSB7XG4gICcmJzogJyZhbXA7JyxcbiAgJzwnOiAnJmx0OycsXG4gICc+JzogJyZndDsnLFxuICAnXCInOiAnJnF1b3Q7JyxcbiAgXCInXCI6ICcmI3gyNzsnLFxuICAnYCc6ICcmI3g2MDsnLFxuICAnPSc6ICcmI3gzRDsnXG59O1xuXG5jb25zdCBiYWRDaGFycyA9IC9bJjw+XCInYD1dL2csXG4gIHBvc3NpYmxlID0gL1smPD5cIidgPV0vO1xuXG5mdW5jdGlvbiBlc2NhcGVDaGFyKGNocikge1xuICByZXR1cm4gZXNjYXBlW2Nocl07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHRlbmQob2JqIC8qICwgLi4uc291cmNlICovKSB7XG4gIGZvciAobGV0IGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgZm9yIChsZXQga2V5IGluIGFyZ3VtZW50c1tpXSkge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhcmd1bWVudHNbaV0sIGtleSkpIHtcbiAgICAgICAgb2JqW2tleV0gPSBhcmd1bWVudHNbaV1ba2V5XTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gb2JqO1xufVxuXG5leHBvcnQgbGV0IHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuLy8gU291cmNlZCBmcm9tIGxvZGFzaFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2Jlc3RpZWpzL2xvZGFzaC9ibG9iL21hc3Rlci9MSUNFTlNFLnR4dFxuLyogZXNsaW50LWRpc2FibGUgZnVuYy1zdHlsZSAqL1xubGV0IGlzRnVuY3Rpb24gPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nO1xufTtcbi8vIGZhbGxiYWNrIGZvciBvbGRlciB2ZXJzaW9ucyBvZiBDaHJvbWUgYW5kIFNhZmFyaVxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmlmIChpc0Z1bmN0aW9uKC94LykpIHtcbiAgaXNGdW5jdGlvbiA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgdG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSdcbiAgICApO1xuICB9O1xufVxuZXhwb3J0IHsgaXNGdW5jdGlvbiB9O1xuLyogZXNsaW50LWVuYWJsZSBmdW5jLXN0eWxlICovXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5leHBvcnQgY29uc3QgaXNBcnJheSA9XG4gIEFycmF5LmlzQXJyYXkgfHxcbiAgZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0J1xuICAgICAgPyB0b1N0cmluZy5jYWxsKHZhbHVlKSA9PT0gJ1tvYmplY3QgQXJyYXldJ1xuICAgICAgOiBmYWxzZTtcbiAgfTtcblxuLy8gT2xkZXIgSUUgdmVyc2lvbnMgZG8gbm90IGRpcmVjdGx5IHN1cHBvcnQgaW5kZXhPZiBzbyB3ZSBtdXN0IGltcGxlbWVudCBvdXIgb3duLCBzYWRseS5cbmV4cG9ydCBmdW5jdGlvbiBpbmRleE9mKGFycmF5LCB2YWx1ZSkge1xuICBmb3IgKGxldCBpID0gMCwgbGVuID0gYXJyYXkubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICBpZiAoYXJyYXlbaV0gPT09IHZhbHVlKSB7XG4gICAgICByZXR1cm4gaTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXNjYXBlRXhwcmVzc2lvbihzdHJpbmcpIHtcbiAgaWYgKHR5cGVvZiBzdHJpbmcgIT09ICdzdHJpbmcnKSB7XG4gICAgLy8gZG9uJ3QgZXNjYXBlIFNhZmVTdHJpbmdzLCBzaW5jZSB0aGV5J3JlIGFscmVhZHkgc2FmZVxuICAgIGlmIChzdHJpbmcgJiYgc3RyaW5nLnRvSFRNTCkge1xuICAgICAgcmV0dXJuIHN0cmluZy50b0hUTUwoKTtcbiAgICB9IGVsc2UgaWYgKHN0cmluZyA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfSBlbHNlIGlmICghc3RyaW5nKSB7XG4gICAgICByZXR1cm4gc3RyaW5nICsgJyc7XG4gICAgfVxuXG4gICAgLy8gRm9yY2UgYSBzdHJpbmcgY29udmVyc2lvbiBhcyB0aGlzIHdpbGwgYmUgZG9uZSBieSB0aGUgYXBwZW5kIHJlZ2FyZGxlc3MgYW5kXG4gICAgLy8gdGhlIHJlZ2V4IHRlc3Qgd2lsbCBkbyB0aGlzIHRyYW5zcGFyZW50bHkgYmVoaW5kIHRoZSBzY2VuZXMsIGNhdXNpbmcgaXNzdWVzIGlmXG4gICAgLy8gYW4gb2JqZWN0J3MgdG8gc3RyaW5nIGhhcyBlc2NhcGVkIGNoYXJhY3RlcnMgaW4gaXQuXG4gICAgc3RyaW5nID0gJycgKyBzdHJpbmc7XG4gIH1cblxuICBpZiAoIXBvc3NpYmxlLnRlc3Qoc3RyaW5nKSkge1xuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cbiAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKGJhZENoYXJzLCBlc2NhcGVDaGFyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRW1wdHkodmFsdWUpIHtcbiAgaWYgKCF2YWx1ZSAmJiB2YWx1ZSAhPT0gMCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2UgaWYgKGlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRnJhbWUob2JqZWN0KSB7XG4gIGxldCBmcmFtZSA9IGV4dGVuZCh7fSwgb2JqZWN0KTtcbiAgZnJhbWUuX3BhcmVudCA9IG9iamVjdDtcbiAgcmV0dXJuIGZyYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmxvY2tQYXJhbXMocGFyYW1zLCBpZHMpIHtcbiAgcGFyYW1zLnBhdGggPSBpZHM7XG4gIHJldHVybiBwYXJhbXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBlbmRDb250ZXh0UGF0aChjb250ZXh0UGF0aCwgaWQpIHtcbiAgcmV0dXJuIChjb250ZXh0UGF0aCA/IGNvbnRleHRQYXRoICsgJy4nIDogJycpICsgaWQ7XG59XG4iXX0=


/***/ }),
/* 63 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	exports.CollectionEvent = undefined;
	
	var _AssertionError = __webpack_require__(248);
	
	var _AssertionError2 = _interopRequireDefault(_AssertionError);
	
	var _CollectionEventType = __webpack_require__(83);
	
	var _CollectionEventType2 = _interopRequireDefault(_CollectionEventType);
	
	var _Object = __webpack_require__(32);
	
	var _Object2 = _interopRequireDefault(_Object);
	
	var _Event = __webpack_require__(35);
	
	var _Event2 = _interopRequireDefault(_Event);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var __extends = undefined && undefined.__extends || function () {
	    var _extendStatics = function extendStatics(d, b) {
	        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	            d.__proto__ = b;
	        } || function (d, b) {
	            for (var p in b) {
	                if (b.hasOwnProperty(p)) d[p] = b[p];
	            }
	        };
	        return _extendStatics(d, b);
	    };
	    return function (d, b) {
	        _extendStatics(d, b);
	        function __() {
	            this.constructor = d;
	        }
	        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	    };
	}();
	/**
	 * @module ol/Collection
	 */
	
	/**
	 * @enum {string}
	 * @private
	 */
	var Property = {
	    LENGTH: 'length'
	};
	/**
	 * @classdesc
	 * Events emitted by {@link module:ol/Collection~Collection} instances are instances of this
	 * type.
	 */
	var CollectionEvent = /** @class */function (_super) {
	    __extends(CollectionEvent, _super);
	    /**
	     * @param {CollectionEventType} type Type.
	     * @param {*=} opt_element Element.
	     * @param {number} opt_index The index of the added or removed element.
	     */
	    function CollectionEvent(type, opt_element, opt_index) {
	        var _this = _super.call(this, type) || this;
	        /**
	         * The element that is added to or removed from the collection.
	         * @type {*}
	         * @api
	         */
	        _this.element = opt_element;
	        /**
	         * The index of the added or removed element.
	         * @type {number}
	         * @api
	         */
	        _this.index = opt_index;
	        return _this;
	    }
	    return CollectionEvent;
	}(_Event2.default);
	exports.CollectionEvent = CollectionEvent;
	/**
	 * @typedef {Object} Options
	 * @property {boolean} [unique=false] Disallow the same item from being added to
	 * the collection twice.
	 */
	/**
	 * @classdesc
	 * An expanded version of standard JS Array, adding convenience methods for
	 * manipulation. Add and remove changes to the Collection trigger a Collection
	 * event. Note that this does not cover changes to the objects _within_ the
	 * Collection; they trigger events on the appropriate object, not on the
	 * Collection as a whole.
	 *
	 * @fires CollectionEvent
	 *
	 * @template T
	 * @api
	 */
	
	var Collection = /** @class */function (_super) {
	    __extends(Collection, _super);
	    /**
	     * @param {Array<T>=} opt_array Array.
	     * @param {Options=} opt_options Collection options.
	     */
	    function Collection(opt_array, opt_options) {
	        var _this = _super.call(this) || this;
	        var options = opt_options || {};
	        /**
	         * @private
	         * @type {boolean}
	         */
	        _this.unique_ = !!options.unique;
	        /**
	         * @private
	         * @type {!Array<T>}
	         */
	        _this.array_ = opt_array ? opt_array : [];
	        if (_this.unique_) {
	            for (var i = 0, ii = _this.array_.length; i < ii; ++i) {
	                _this.assertUnique_(_this.array_[i], i);
	            }
	        }
	        _this.updateLength_();
	        return _this;
	    }
	    /**
	     * Remove all elements from the collection.
	     * @api
	     */
	    Collection.prototype.clear = function () {
	        while (this.getLength() > 0) {
	            this.pop();
	        }
	    };
	    /**
	     * Add elements to the collection.  This pushes each item in the provided array
	     * to the end of the collection.
	     * @param {!Array<T>} arr Array.
	     * @return {Collection<T>} This collection.
	     * @api
	     */
	    Collection.prototype.extend = function (arr) {
	        for (var i = 0, ii = arr.length; i < ii; ++i) {
	            this.push(arr[i]);
	        }
	        return this;
	    };
	    /**
	     * Iterate over each element, calling the provided callback.
	     * @param {function(T, number, Array<T>): *} f The function to call
	     *     for every element. This function takes 3 arguments (the element, the
	     *     index and the array). The return value is ignored.
	     * @api
	     */
	    Collection.prototype.forEach = function (f) {
	        var array = this.array_;
	        for (var i = 0, ii = array.length; i < ii; ++i) {
	            f(array[i], i, array);
	        }
	    };
	    /**
	     * Get a reference to the underlying Array object. Warning: if the array
	     * is mutated, no events will be dispatched by the collection, and the
	     * collection's "length" property won't be in sync with the actual length
	     * of the array.
	     * @return {!Array<T>} Array.
	     * @api
	     */
	    Collection.prototype.getArray = function () {
	        return this.array_;
	    };
	    /**
	     * Get the element at the provided index.
	     * @param {number} index Index.
	     * @return {T} Element.
	     * @api
	     */
	    Collection.prototype.item = function (index) {
	        return this.array_[index];
	    };
	    /**
	     * Get the length of this collection.
	     * @return {number} The length of the array.
	     * @observable
	     * @api
	     */
	    Collection.prototype.getLength = function () {
	        return this.get(Property.LENGTH);
	    };
	    /**
	     * Insert an element at the provided index.
	     * @param {number} index Index.
	     * @param {T} elem Element.
	     * @api
	     */
	    Collection.prototype.insertAt = function (index, elem) {
	        if (this.unique_) {
	            this.assertUnique_(elem);
	        }
	        this.array_.splice(index, 0, elem);
	        this.updateLength_();
	        this.dispatchEvent(new CollectionEvent(_CollectionEventType2.default.ADD, elem, index));
	    };
	    /**
	     * Remove the last element of the collection and return it.
	     * Return `undefined` if the collection is empty.
	     * @return {T|undefined} Element.
	     * @api
	     */
	    Collection.prototype.pop = function () {
	        return this.removeAt(this.getLength() - 1);
	    };
	    /**
	     * Insert the provided element at the end of the collection.
	     * @param {T} elem Element.
	     * @return {number} New length of the collection.
	     * @api
	     */
	    Collection.prototype.push = function (elem) {
	        if (this.unique_) {
	            this.assertUnique_(elem);
	        }
	        var n = this.getLength();
	        this.insertAt(n, elem);
	        return this.getLength();
	    };
	    /**
	     * Remove the first occurrence of an element from the collection.
	     * @param {T} elem Element.
	     * @return {T|undefined} The removed element or undefined if none found.
	     * @api
	     */
	    Collection.prototype.remove = function (elem) {
	        var arr = this.array_;
	        for (var i = 0, ii = arr.length; i < ii; ++i) {
	            if (arr[i] === elem) {
	                return this.removeAt(i);
	            }
	        }
	        return undefined;
	    };
	    /**
	     * Remove the element at the provided index and return it.
	     * Return `undefined` if the collection does not contain this index.
	     * @param {number} index Index.
	     * @return {T|undefined} Value.
	     * @api
	     */
	    Collection.prototype.removeAt = function (index) {
	        var prev = this.array_[index];
	        this.array_.splice(index, 1);
	        this.updateLength_();
	        this.dispatchEvent(new CollectionEvent(_CollectionEventType2.default.REMOVE, prev, index));
	        return prev;
	    };
	    /**
	     * Set the element at the provided index.
	     * @param {number} index Index.
	     * @param {T} elem Element.
	     * @api
	     */
	    Collection.prototype.setAt = function (index, elem) {
	        var n = this.getLength();
	        if (index < n) {
	            if (this.unique_) {
	                this.assertUnique_(elem, index);
	            }
	            var prev = this.array_[index];
	            this.array_[index] = elem;
	            this.dispatchEvent(new CollectionEvent(_CollectionEventType2.default.REMOVE, prev, index));
	            this.dispatchEvent(new CollectionEvent(_CollectionEventType2.default.ADD, elem, index));
	        } else {
	            for (var j = n; j < index; ++j) {
	                this.insertAt(j, undefined);
	            }
	            this.insertAt(index, elem);
	        }
	    };
	    /**
	     * @private
	     */
	    Collection.prototype.updateLength_ = function () {
	        this.set(Property.LENGTH, this.array_.length);
	    };
	    /**
	     * @private
	     * @param {T} elem Element.
	     * @param {number=} opt_except Optional index to ignore.
	     */
	    Collection.prototype.assertUnique_ = function (elem, opt_except) {
	        for (var i = 0, ii = this.array_.length; i < ii; ++i) {
	            if (this.array_[i] === elem && i !== opt_except) {
	                throw new _AssertionError2.default(58);
	            }
	        }
	    };
	    return Collection;
	}(_Object2.default);
	exports.default = Collection;
	//# sourceMappingURL=Collection.js.map

/***/ }),
/* 64 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	exports.getStrideForLayout = getStrideForLayout;
	exports.transformGeom2D = transformGeom2D;
	
	var _util = __webpack_require__(14);
	
	var _extent = __webpack_require__(4);
	
	var _Geometry = __webpack_require__(274);
	
	var _Geometry2 = _interopRequireDefault(_Geometry);
	
	var _GeometryLayout = __webpack_require__(102);
	
	var _GeometryLayout2 = _interopRequireDefault(_GeometryLayout);
	
	var _transform = __webpack_require__(104);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var __extends = undefined && undefined.__extends || function () {
	    var _extendStatics = function extendStatics(d, b) {
	        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	            d.__proto__ = b;
	        } || function (d, b) {
	            for (var p in b) {
	                if (b.hasOwnProperty(p)) d[p] = b[p];
	            }
	        };
	        return _extendStatics(d, b);
	    };
	    return function (d, b) {
	        _extendStatics(d, b);
	        function __() {
	            this.constructor = d;
	        }
	        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	    };
	}();
	/**
	 * @module ol/geom/SimpleGeometry
	 */
	
	/**
	 * @classdesc
	 * Abstract base class; only used for creating subclasses; do not instantiate
	 * in apps, as cannot be rendered.
	 *
	 * @abstract
	 * @api
	 */
	var SimpleGeometry = /** @class */function (_super) {
	    __extends(SimpleGeometry, _super);
	    function SimpleGeometry() {
	        var _this = _super.call(this) || this;
	        /**
	         * @protected
	         * @type {GeometryLayout}
	         */
	        _this.layout = _GeometryLayout2.default.XY;
	        /**
	         * @protected
	         * @type {number}
	         */
	        _this.stride = 2;
	        /**
	         * @protected
	         * @type {Array<number>}
	         */
	        _this.flatCoordinates = null;
	        return _this;
	    }
	    /**
	     * @inheritDoc
	     */
	    SimpleGeometry.prototype.computeExtent = function (extent) {
	        return (0, _extent.createOrUpdateFromFlatCoordinates)(this.flatCoordinates, 0, this.flatCoordinates.length, this.stride, extent);
	    };
	    /**
	     * @abstract
	     * @return {Array<*>} Coordinates.
	     */
	    SimpleGeometry.prototype.getCoordinates = function () {
	        return (0, _util.abstract)();
	    };
	    /**
	     * Return the first coordinate of the geometry.
	     * @return {import("../coordinate.js").Coordinate} First coordinate.
	     * @api
	     */
	    SimpleGeometry.prototype.getFirstCoordinate = function () {
	        return this.flatCoordinates.slice(0, this.stride);
	    };
	    /**
	     * @return {Array<number>} Flat coordinates.
	     */
	    SimpleGeometry.prototype.getFlatCoordinates = function () {
	        return this.flatCoordinates;
	    };
	    /**
	     * Return the last coordinate of the geometry.
	     * @return {import("../coordinate.js").Coordinate} Last point.
	     * @api
	     */
	    SimpleGeometry.prototype.getLastCoordinate = function () {
	        return this.flatCoordinates.slice(this.flatCoordinates.length - this.stride);
	    };
	    /**
	     * Return the {@link module:ol/geom/GeometryLayout layout} of the geometry.
	     * @return {GeometryLayout} Layout.
	     * @api
	     */
	    SimpleGeometry.prototype.getLayout = function () {
	        return this.layout;
	    };
	    /**
	     * @inheritDoc
	     */
	    SimpleGeometry.prototype.getSimplifiedGeometry = function (squaredTolerance) {
	        if (this.simplifiedGeometryRevision !== this.getRevision()) {
	            this.simplifiedGeometryMaxMinSquaredTolerance = 0;
	            this.simplifiedGeometryRevision = this.getRevision();
	        }
	        // If squaredTolerance is negative or if we know that simplification will not
	        // have any effect then just return this.
	        if (squaredTolerance < 0 || this.simplifiedGeometryMaxMinSquaredTolerance !== 0 && squaredTolerance <= this.simplifiedGeometryMaxMinSquaredTolerance) {
	            return this;
	        }
	        var simplifiedGeometry = this.getSimplifiedGeometryInternal(squaredTolerance);
	        var simplifiedFlatCoordinates = simplifiedGeometry.getFlatCoordinates();
	        if (simplifiedFlatCoordinates.length < this.flatCoordinates.length) {
	            return simplifiedGeometry;
	        } else {
	            // Simplification did not actually remove any coordinates.  We now know
	            // that any calls to getSimplifiedGeometry with a squaredTolerance less
	            // than or equal to the current squaredTolerance will also not have any
	            // effect.  This allows us to short circuit simplification (saving CPU
	            // cycles) and prevents the cache of simplified geometries from filling
	            // up with useless identical copies of this geometry (saving memory).
	            this.simplifiedGeometryMaxMinSquaredTolerance = squaredTolerance;
	            return this;
	        }
	    };
	    /**
	     * @param {number} squaredTolerance Squared tolerance.
	     * @return {SimpleGeometry} Simplified geometry.
	     * @protected
	     */
	    SimpleGeometry.prototype.getSimplifiedGeometryInternal = function (squaredTolerance) {
	        return this;
	    };
	    /**
	     * @return {number} Stride.
	     */
	    SimpleGeometry.prototype.getStride = function () {
	        return this.stride;
	    };
	    /**
	     * @param {GeometryLayout} layout Layout.
	     * @param {Array<number>} flatCoordinates Flat coordinates.
	     */
	    SimpleGeometry.prototype.setFlatCoordinates = function (layout, flatCoordinates) {
	        this.stride = getStrideForLayout(layout);
	        this.layout = layout;
	        this.flatCoordinates = flatCoordinates;
	    };
	    /**
	     * @abstract
	     * @param {!Array<*>} coordinates Coordinates.
	     * @param {GeometryLayout=} opt_layout Layout.
	     */
	    SimpleGeometry.prototype.setCoordinates = function (coordinates, opt_layout) {
	        (0, _util.abstract)();
	    };
	    /**
	     * @param {GeometryLayout|undefined} layout Layout.
	     * @param {Array<*>} coordinates Coordinates.
	     * @param {number} nesting Nesting.
	     * @protected
	     */
	    SimpleGeometry.prototype.setLayout = function (layout, coordinates, nesting) {
	        /** @type {number} */
	        var stride;
	        if (layout) {
	            stride = getStrideForLayout(layout);
	        } else {
	            for (var i = 0; i < nesting; ++i) {
	                if (coordinates.length === 0) {
	                    this.layout = _GeometryLayout2.default.XY;
	                    this.stride = 2;
	                    return;
	                } else {
	                    coordinates = /** @type {Array} */coordinates[0];
	                }
	            }
	            stride = coordinates.length;
	            layout = getLayoutForStride(stride);
	        }
	        this.layout = layout;
	        this.stride = stride;
	    };
	    /**
	     * Apply a transform function to the coordinates of the geometry.
	     * The geometry is modified in place.
	     * If you do not want the geometry modified in place, first `clone()` it and
	     * then use this function on the clone.
	     * @param {import("../proj.js").TransformFunction} transformFn Transform function.
	     * Called with a flat array of geometry coordinates.
	     * @api
	     */
	    SimpleGeometry.prototype.applyTransform = function (transformFn) {
	        if (this.flatCoordinates) {
	            transformFn(this.flatCoordinates, this.flatCoordinates, this.stride);
	            this.changed();
	        }
	    };
	    /**
	     * Rotate the geometry around a given coordinate. This modifies the geometry
	     * coordinates in place.
	     * @param {number} angle Rotation angle in radians.
	     * @param {import("../coordinate.js").Coordinate} anchor The rotation center.
	     * @api
	     */
	    SimpleGeometry.prototype.rotate = function (angle, anchor) {
	        var flatCoordinates = this.getFlatCoordinates();
	        if (flatCoordinates) {
	            var stride = this.getStride();
	            (0, _transform.rotate)(flatCoordinates, 0, flatCoordinates.length, stride, angle, anchor, flatCoordinates);
	            this.changed();
	        }
	    };
	    /**
	     * Scale the geometry (with an optional origin).  This modifies the geometry
	     * coordinates in place.
	      * @param {number} sx The scaling factor in the x-direction.
	     * @param {number=} opt_sy The scaling factor in the y-direction (defaults to
	     *     sx).
	     * @param {import("../coordinate.js").Coordinate=} opt_anchor The scale origin (defaults to the center
	     *     of the geometry extent).
	     * @api
	     */
	    SimpleGeometry.prototype.scale = function (sx, opt_sy, opt_anchor) {
	        var sy = opt_sy;
	        if (sy === undefined) {
	            sy = sx;
	        }
	        var anchor = opt_anchor;
	        if (!anchor) {
	            anchor = (0, _extent.getCenter)(this.getExtent());
	        }
	        var flatCoordinates = this.getFlatCoordinates();
	        if (flatCoordinates) {
	            var stride = this.getStride();
	            (0, _transform.scale)(flatCoordinates, 0, flatCoordinates.length, stride, sx, sy, anchor, flatCoordinates);
	            this.changed();
	        }
	    };
	    /**
	     * Translate the geometry.  This modifies the geometry coordinates in place.  If
	     * instead you want a new geometry, first `clone()` this geometry.
	     * @param {number} deltaX Delta X.
	     * @param {number} deltaY Delta Y.
	     * @api
	     */
	    SimpleGeometry.prototype.translate = function (deltaX, deltaY) {
	        var flatCoordinates = this.getFlatCoordinates();
	        if (flatCoordinates) {
	            var stride = this.getStride();
	            (0, _transform.translate)(flatCoordinates, 0, flatCoordinates.length, stride, deltaX, deltaY, flatCoordinates);
	            this.changed();
	        }
	    };
	    return SimpleGeometry;
	}(_Geometry2.default);
	/**
	 * @param {number} stride Stride.
	 * @return {GeometryLayout} layout Layout.
	 */
	function getLayoutForStride(stride) {
	    var layout;
	    if (stride == 2) {
	        layout = _GeometryLayout2.default.XY;
	    } else if (stride == 3) {
	        layout = _GeometryLayout2.default.XYZ;
	    } else if (stride == 4) {
	        layout = _GeometryLayout2.default.XYZM;
	    }
	    return (
	        /** @type {GeometryLayout} */layout
	    );
	}
	/**
	 * @param {GeometryLayout} layout Layout.
	 * @return {number} Stride.
	 */
	function getStrideForLayout(layout) {
	    var stride;
	    if (layout == _GeometryLayout2.default.XY) {
	        stride = 2;
	    } else if (layout == _GeometryLayout2.default.XYZ || layout == _GeometryLayout2.default.XYM) {
	        stride = 3;
	    } else if (layout == _GeometryLayout2.default.XYZM) {
	        stride = 4;
	    }
	    return (/** @type {number} */stride
	    );
	}
	/**
	 * @param {SimpleGeometry} simpleGeometry Simple geometry.
	 * @param {import("../transform.js").Transform} transform Transform.
	 * @param {Array<number>=} opt_dest Destination.
	 * @return {Array<number>} Transformed flat coordinates.
	 */
	function transformGeom2D(simpleGeometry, transform, opt_dest) {
	    var flatCoordinates = simpleGeometry.getFlatCoordinates();
	    if (!flatCoordinates) {
	        return null;
	    } else {
	        var stride = simpleGeometry.getStride();
	        return (0, _transform.transform2D)(flatCoordinates, 0, flatCoordinates.length, stride, transform, opt_dest);
	    }
	}
	exports.default = SimpleGeometry;
	//# sourceMappingURL=SimpleGeometry.js.map

/***/ }),
/* 65 */
/***/ (function(module, exports) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	/**
	 * @module ol/proj/Units
	 */
	/**
	 * Projection units: `'degrees'`, `'ft'`, `'m'`, `'pixels'`, `'tile-pixels'` or
	 * `'us-ft'`.
	 * @enum {string}
	 */
	var Units = {
	  DEGREES: 'degrees',
	  FEET: 'ft',
	  METERS: 'm',
	  PIXELS: 'pixels',
	  TILE_PIXELS: 'tile-pixels',
	  USFEET: 'us-ft'
	};
	/**
	 * Meters per unit lookup table.
	 * @const
	 * @type {Object<Units, number>}
	 * @api
	 */
	var METERS_PER_UNIT = exports.METERS_PER_UNIT = {};
	// use the radius of the Normal sphere
	METERS_PER_UNIT[Units.DEGREES] = 2 * Math.PI * 6370997 / 360;
	METERS_PER_UNIT[Units.FEET] = 0.3048;
	METERS_PER_UNIT[Units.METERS] = 1;
	METERS_PER_UNIT[Units.USFEET] = 1200 / 3937;
	exports.default = Units;
	//# sourceMappingURL=Units.js.map

/***/ }),
/* 66 */
/***/ (function(module, exports, __webpack_require__) {

	var Map = __webpack_require__(345);
	var $export = __webpack_require__(3);
	var shared = __webpack_require__(132)('metadata');
	var store = shared.store || (shared.store = new (__webpack_require__(349))());
	
	var getOrCreateMetadataMap = function (target, targetKey, create) {
	  var targetMetadata = store.get(target);
	  if (!targetMetadata) {
	    if (!create) return undefined;
	    store.set(target, targetMetadata = new Map());
	  }
	  var keyMetadata = targetMetadata.get(targetKey);
	  if (!keyMetadata) {
	    if (!create) return undefined;
	    targetMetadata.set(targetKey, keyMetadata = new Map());
	  } return keyMetadata;
	};
	var ordinaryHasOwnMetadata = function (MetadataKey, O, P) {
	  var metadataMap = getOrCreateMetadataMap(O, P, false);
	  return metadataMap === undefined ? false : metadataMap.has(MetadataKey);
	};
	var ordinaryGetOwnMetadata = function (MetadataKey, O, P) {
	  var metadataMap = getOrCreateMetadataMap(O, P, false);
	  return metadataMap === undefined ? undefined : metadataMap.get(MetadataKey);
	};
	var ordinaryDefineOwnMetadata = function (MetadataKey, MetadataValue, O, P) {
	  getOrCreateMetadataMap(O, P, true).set(MetadataKey, MetadataValue);
	};
	var ordinaryOwnMetadataKeys = function (target, targetKey) {
	  var metadataMap = getOrCreateMetadataMap(target, targetKey, false);
	  var keys = [];
	  if (metadataMap) metadataMap.forEach(function (_, key) { keys.push(key); });
	  return keys;
	};
	var toMetaKey = function (it) {
	  return it === undefined || typeof it == 'symbol' ? it : String(it);
	};
	var exp = function (O) {
	  $export($export.S, 'Reflect', O);
	};
	
	module.exports = {
	  store: store,
	  map: getOrCreateMetadataMap,
	  has: ordinaryHasOwnMetadata,
	  get: ordinaryGetOwnMetadata,
	  set: ordinaryDefineOwnMetadata,
	  keys: ordinaryOwnMetadataKeys,
	  key: toMetaKey,
	  exp: exp
	};


/***/ }),
/* 67 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	if (__webpack_require__(25)) {
	  var LIBRARY = __webpack_require__(77);
	  var global = __webpack_require__(9);
	  var fails = __webpack_require__(13);
	  var $export = __webpack_require__(3);
	  var $typed = __webpack_require__(161);
	  var $buffer = __webpack_require__(217);
	  var ctx = __webpack_require__(52);
	  var anInstance = __webpack_require__(90);
	  var propertyDesc = __webpack_require__(95);
	  var hide = __webpack_require__(37);
	  var redefineAll = __webpack_require__(96);
	  var toInteger = __webpack_require__(54);
	  var toLength = __webpack_require__(21);
	  var toIndex = __webpack_require__(343);
	  var toAbsoluteIndex = __webpack_require__(81);
	  var toPrimitive = __webpack_require__(61);
	  var has = __webpack_require__(42);
	  var classof = __webpack_require__(110);
	  var isObject = __webpack_require__(15);
	  var toObject = __webpack_require__(28);
	  var isArrayIter = __webpack_require__(203);
	  var create = __webpack_require__(92);
	  var getPrototypeOf = __webpack_require__(44);
	  var gOPN = __webpack_require__(93).f;
	  var getIterFn = __webpack_require__(219);
	  var uid = __webpack_require__(98);
	  var wks = __webpack_require__(20);
	  var createArrayMethod = __webpack_require__(58);
	  var createArrayIncludes = __webpack_require__(152);
	  var speciesConstructor = __webpack_require__(133);
	  var ArrayIterators = __webpack_require__(220);
	  var Iterators = __webpack_require__(111);
	  var $iterDetect = __webpack_require__(156);
	  var setSpecies = __webpack_require__(97);
	  var arrayFill = __webpack_require__(195);
	  var arrayCopyWithin = __webpack_require__(319);
	  var $DP = __webpack_require__(26);
	  var $GOPD = __webpack_require__(43);
	  var dP = $DP.f;
	  var gOPD = $GOPD.f;
	  var RangeError = global.RangeError;
	  var TypeError = global.TypeError;
	  var Uint8Array = global.Uint8Array;
	  var ARRAY_BUFFER = 'ArrayBuffer';
	  var SHARED_BUFFER = 'Shared' + ARRAY_BUFFER;
	  var BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT';
	  var PROTOTYPE = 'prototype';
	  var ArrayProto = Array[PROTOTYPE];
	  var $ArrayBuffer = $buffer.ArrayBuffer;
	  var $DataView = $buffer.DataView;
	  var arrayForEach = createArrayMethod(0);
	  var arrayFilter = createArrayMethod(2);
	  var arraySome = createArrayMethod(3);
	  var arrayEvery = createArrayMethod(4);
	  var arrayFind = createArrayMethod(5);
	  var arrayFindIndex = createArrayMethod(6);
	  var arrayIncludes = createArrayIncludes(true);
	  var arrayIndexOf = createArrayIncludes(false);
	  var arrayValues = ArrayIterators.values;
	  var arrayKeys = ArrayIterators.keys;
	  var arrayEntries = ArrayIterators.entries;
	  var arrayLastIndexOf = ArrayProto.lastIndexOf;
	  var arrayReduce = ArrayProto.reduce;
	  var arrayReduceRight = ArrayProto.reduceRight;
	  var arrayJoin = ArrayProto.join;
	  var arraySort = ArrayProto.sort;
	  var arraySlice = ArrayProto.slice;
	  var arrayToString = ArrayProto.toString;
	  var arrayToLocaleString = ArrayProto.toLocaleString;
	  var ITERATOR = wks('iterator');
	  var TAG = wks('toStringTag');
	  var TYPED_CONSTRUCTOR = uid('typed_constructor');
	  var DEF_CONSTRUCTOR = uid('def_constructor');
	  var ALL_CONSTRUCTORS = $typed.CONSTR;
	  var TYPED_ARRAY = $typed.TYPED;
	  var VIEW = $typed.VIEW;
	  var WRONG_LENGTH = 'Wrong length!';
	
	  var $map = createArrayMethod(1, function (O, length) {
	    return allocate(speciesConstructor(O, O[DEF_CONSTRUCTOR]), length);
	  });
	
	  var LITTLE_ENDIAN = fails(function () {
	    // eslint-disable-next-line no-undef
	    return new Uint8Array(new Uint16Array([1]).buffer)[0] === 1;
	  });
	
	  var FORCED_SET = !!Uint8Array && !!Uint8Array[PROTOTYPE].set && fails(function () {
	    new Uint8Array(1).set({});
	  });
	
	  var toOffset = function (it, BYTES) {
	    var offset = toInteger(it);
	    if (offset < 0 || offset % BYTES) throw RangeError('Wrong offset!');
	    return offset;
	  };
	
	  var validate = function (it) {
	    if (isObject(it) && TYPED_ARRAY in it) return it;
	    throw TypeError(it + ' is not a typed array!');
	  };
	
	  var allocate = function (C, length) {
	    if (!(isObject(C) && TYPED_CONSTRUCTOR in C)) {
	      throw TypeError('It is not a typed array constructor!');
	    } return new C(length);
	  };
	
	  var speciesFromList = function (O, list) {
	    return fromList(speciesConstructor(O, O[DEF_CONSTRUCTOR]), list);
	  };
	
	  var fromList = function (C, list) {
	    var index = 0;
	    var length = list.length;
	    var result = allocate(C, length);
	    while (length > index) result[index] = list[index++];
	    return result;
	  };
	
	  var addGetter = function (it, key, internal) {
	    dP(it, key, { get: function () { return this._d[internal]; } });
	  };
	
	  var $from = function from(source /* , mapfn, thisArg */) {
	    var O = toObject(source);
	    var aLen = arguments.length;
	    var mapfn = aLen > 1 ? arguments[1] : undefined;
	    var mapping = mapfn !== undefined;
	    var iterFn = getIterFn(O);
	    var i, length, values, result, step, iterator;
	    if (iterFn != undefined && !isArrayIter(iterFn)) {
	      for (iterator = iterFn.call(O), values = [], i = 0; !(step = iterator.next()).done; i++) {
	        values.push(step.value);
	      } O = values;
	    }
	    if (mapping && aLen > 2) mapfn = ctx(mapfn, arguments[2], 2);
	    for (i = 0, length = toLength(O.length), result = allocate(this, length); length > i; i++) {
	      result[i] = mapping ? mapfn(O[i], i) : O[i];
	    }
	    return result;
	  };
	
	  var $of = function of(/* ...items */) {
	    var index = 0;
	    var length = arguments.length;
	    var result = allocate(this, length);
	    while (length > index) result[index] = arguments[index++];
	    return result;
	  };
	
	  // iOS Safari 6.x fails here
	  var TO_LOCALE_BUG = !!Uint8Array && fails(function () { arrayToLocaleString.call(new Uint8Array(1)); });
	
	  var $toLocaleString = function toLocaleString() {
	    return arrayToLocaleString.apply(TO_LOCALE_BUG ? arraySlice.call(validate(this)) : validate(this), arguments);
	  };
	
	  var proto = {
	    copyWithin: function copyWithin(target, start /* , end */) {
	      return arrayCopyWithin.call(validate(this), target, start, arguments.length > 2 ? arguments[2] : undefined);
	    },
	    every: function every(callbackfn /* , thisArg */) {
	      return arrayEvery(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);
	    },
	    fill: function fill(value /* , start, end */) { // eslint-disable-line no-unused-vars
	      return arrayFill.apply(validate(this), arguments);
	    },
	    filter: function filter(callbackfn /* , thisArg */) {
	      return speciesFromList(this, arrayFilter(validate(this), callbackfn,
	        arguments.length > 1 ? arguments[1] : undefined));
	    },
	    find: function find(predicate /* , thisArg */) {
	      return arrayFind(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);
	    },
	    findIndex: function findIndex(predicate /* , thisArg */) {
	      return arrayFindIndex(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);
	    },
	    forEach: function forEach(callbackfn /* , thisArg */) {
	      arrayForEach(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);
	    },
	    indexOf: function indexOf(searchElement /* , fromIndex */) {
	      return arrayIndexOf(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);
	    },
	    includes: function includes(searchElement /* , fromIndex */) {
	      return arrayIncludes(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);
	    },
	    join: function join(separator) { // eslint-disable-line no-unused-vars
	      return arrayJoin.apply(validate(this), arguments);
	    },
	    lastIndexOf: function lastIndexOf(searchElement /* , fromIndex */) { // eslint-disable-line no-unused-vars
	      return arrayLastIndexOf.apply(validate(this), arguments);
	    },
	    map: function map(mapfn /* , thisArg */) {
	      return $map(validate(this), mapfn, arguments.length > 1 ? arguments[1] : undefined);
	    },
	    reduce: function reduce(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars
	      return arrayReduce.apply(validate(this), arguments);
	    },
	    reduceRight: function reduceRight(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars
	      return arrayReduceRight.apply(validate(this), arguments);
	    },
	    reverse: function reverse() {
	      var that = this;
	      var length = validate(that).length;
	      var middle = Math.floor(length / 2);
	      var index = 0;
	      var value;
	      while (index < middle) {
	        value = that[index];
	        that[index++] = that[--length];
	        that[length] = value;
	      } return that;
	    },
	    some: function some(callbackfn /* , thisArg */) {
	      return arraySome(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);
	    },
	    sort: function sort(comparefn) {
	      return arraySort.call(validate(this), comparefn);
	    },
	    subarray: function subarray(begin, end) {
	      var O = validate(this);
	      var length = O.length;
	      var $begin = toAbsoluteIndex(begin, length);
	      return new (speciesConstructor(O, O[DEF_CONSTRUCTOR]))(
	        O.buffer,
	        O.byteOffset + $begin * O.BYTES_PER_ELEMENT,
	        toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - $begin)
	      );
	    }
	  };
	
	  var $slice = function slice(start, end) {
	    return speciesFromList(this, arraySlice.call(validate(this), start, end));
	  };
	
	  var $set = function set(arrayLike /* , offset */) {
	    validate(this);
	    var offset = toOffset(arguments[1], 1);
	    var length = this.length;
	    var src = toObject(arrayLike);
	    var len = toLength(src.length);
	    var index = 0;
	    if (len + offset > length) throw RangeError(WRONG_LENGTH);
	    while (index < len) this[offset + index] = src[index++];
	  };
	
	  var $iterators = {
	    entries: function entries() {
	      return arrayEntries.call(validate(this));
	    },
	    keys: function keys() {
	      return arrayKeys.call(validate(this));
	    },
	    values: function values() {
	      return arrayValues.call(validate(this));
	    }
	  };
	
	  var isTAIndex = function (target, key) {
	    return isObject(target)
	      && target[TYPED_ARRAY]
	      && typeof key != 'symbol'
	      && key in target
	      && String(+key) == String(key);
	  };
	  var $getDesc = function getOwnPropertyDescriptor(target, key) {
	    return isTAIndex(target, key = toPrimitive(key, true))
	      ? propertyDesc(2, target[key])
	      : gOPD(target, key);
	  };
	  var $setDesc = function defineProperty(target, key, desc) {
	    if (isTAIndex(target, key = toPrimitive(key, true))
	      && isObject(desc)
	      && has(desc, 'value')
	      && !has(desc, 'get')
	      && !has(desc, 'set')
	      // TODO: add validation descriptor w/o calling accessors
	      && !desc.configurable
	      && (!has(desc, 'writable') || desc.writable)
	      && (!has(desc, 'enumerable') || desc.enumerable)
	    ) {
	      target[key] = desc.value;
	      return target;
	    } return dP(target, key, desc);
	  };
	
	  if (!ALL_CONSTRUCTORS) {
	    $GOPD.f = $getDesc;
	    $DP.f = $setDesc;
	  }
	
	  $export($export.S + $export.F * !ALL_CONSTRUCTORS, 'Object', {
	    getOwnPropertyDescriptor: $getDesc,
	    defineProperty: $setDesc
	  });
	
	  if (fails(function () { arrayToString.call({}); })) {
	    arrayToString = arrayToLocaleString = function toString() {
	      return arrayJoin.call(this);
	    };
	  }
	
	  var $TypedArrayPrototype$ = redefineAll({}, proto);
	  redefineAll($TypedArrayPrototype$, $iterators);
	  hide($TypedArrayPrototype$, ITERATOR, $iterators.values);
	  redefineAll($TypedArrayPrototype$, {
	    slice: $slice,
	    set: $set,
	    constructor: function () { /* noop */ },
	    toString: arrayToString,
	    toLocaleString: $toLocaleString
	  });
	  addGetter($TypedArrayPrototype$, 'buffer', 'b');
	  addGetter($TypedArrayPrototype$, 'byteOffset', 'o');
	  addGetter($TypedArrayPrototype$, 'byteLength', 'l');
	  addGetter($TypedArrayPrototype$, 'length', 'e');
	  dP($TypedArrayPrototype$, TAG, {
	    get: function () { return this[TYPED_ARRAY]; }
	  });
	
	  // eslint-disable-next-line max-statements
	  module.exports = function (KEY, BYTES, wrapper, CLAMPED) {
	    CLAMPED = !!CLAMPED;
	    var NAME = KEY + (CLAMPED ? 'Clamped' : '') + 'Array';
	    var GETTER = 'get' + KEY;
	    var SETTER = 'set' + KEY;
	    var TypedArray = global[NAME];
	    var Base = TypedArray || {};
	    var TAC = TypedArray && getPrototypeOf(TypedArray);
	    var FORCED = !TypedArray || !$typed.ABV;
	    var O = {};
	    var TypedArrayPrototype = TypedArray && TypedArray[PROTOTYPE];
	    var getter = function (that, index) {
	      var data = that._d;
	      return data.v[GETTER](index * BYTES + data.o, LITTLE_ENDIAN);
	    };
	    var setter = function (that, index, value) {
	      var data = that._d;
	      if (CLAMPED) value = (value = Math.round(value)) < 0 ? 0 : value > 0xff ? 0xff : value & 0xff;
	      data.v[SETTER](index * BYTES + data.o, value, LITTLE_ENDIAN);
	    };
	    var addElement = function (that, index) {
	      dP(that, index, {
	        get: function () {
	          return getter(this, index);
	        },
	        set: function (value) {
	          return setter(this, index, value);
	        },
	        enumerable: true
	      });
	    };
	    if (FORCED) {
	      TypedArray = wrapper(function (that, data, $offset, $length) {
	        anInstance(that, TypedArray, NAME, '_d');
	        var index = 0;
	        var offset = 0;
	        var buffer, byteLength, length, klass;
	        if (!isObject(data)) {
	          length = toIndex(data);
	          byteLength = length * BYTES;
	          buffer = new $ArrayBuffer(byteLength);
	        } else if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {
	          buffer = data;
	          offset = toOffset($offset, BYTES);
	          var $len = data.byteLength;
	          if ($length === undefined) {
	            if ($len % BYTES) throw RangeError(WRONG_LENGTH);
	            byteLength = $len - offset;
	            if (byteLength < 0) throw RangeError(WRONG_LENGTH);
	          } else {
	            byteLength = toLength($length) * BYTES;
	            if (byteLength + offset > $len) throw RangeError(WRONG_LENGTH);
	          }
	          length = byteLength / BYTES;
	        } else if (TYPED_ARRAY in data) {
	          return fromList(TypedArray, data);
	        } else {
	          return $from.call(TypedArray, data);
	        }
	        hide(that, '_d', {
	          b: buffer,
	          o: offset,
	          l: byteLength,
	          e: length,
	          v: new $DataView(buffer)
	        });
	        while (index < length) addElement(that, index++);
	      });
	      TypedArrayPrototype = TypedArray[PROTOTYPE] = create($TypedArrayPrototype$);
	      hide(TypedArrayPrototype, 'constructor', TypedArray);
	    } else if (!fails(function () {
	      TypedArray(1);
	    }) || !fails(function () {
	      new TypedArray(-1); // eslint-disable-line no-new
	    }) || !$iterDetect(function (iter) {
	      new TypedArray(); // eslint-disable-line no-new
	      new TypedArray(null); // eslint-disable-line no-new
	      new TypedArray(1.5); // eslint-disable-line no-new
	      new TypedArray(iter); // eslint-disable-line no-new
	    }, true)) {
	      TypedArray = wrapper(function (that, data, $offset, $length) {
	        anInstance(that, TypedArray, NAME);
	        var klass;
	        // `ws` module bug, temporarily remove validation length for Uint8Array
	        // https://github.com/websockets/ws/pull/645
	        if (!isObject(data)) return new Base(toIndex(data));
	        if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {
	          return $length !== undefined
	            ? new Base(data, toOffset($offset, BYTES), $length)
	            : $offset !== undefined
	              ? new Base(data, toOffset($offset, BYTES))
	              : new Base(data);
	        }
	        if (TYPED_ARRAY in data) return fromList(TypedArray, data);
	        return $from.call(TypedArray, data);
	      });
	      arrayForEach(TAC !== Function.prototype ? gOPN(Base).concat(gOPN(TAC)) : gOPN(Base), function (key) {
	        if (!(key in TypedArray)) hide(TypedArray, key, Base[key]);
	      });
	      TypedArray[PROTOTYPE] = TypedArrayPrototype;
	      if (!LIBRARY) TypedArrayPrototype.constructor = TypedArray;
	    }
	    var $nativeIterator = TypedArrayPrototype[ITERATOR];
	    var CORRECT_ITER_NAME = !!$nativeIterator
	      && ($nativeIterator.name == 'values' || $nativeIterator.name == undefined);
	    var $iterator = $iterators.values;
	    hide(TypedArray, TYPED_CONSTRUCTOR, true);
	    hide(TypedArrayPrototype, TYPED_ARRAY, NAME);
	    hide(TypedArrayPrototype, VIEW, true);
	    hide(TypedArrayPrototype, DEF_CONSTRUCTOR, TypedArray);
	
	    if (CLAMPED ? new TypedArray(1)[TAG] != NAME : !(TAG in TypedArrayPrototype)) {
	      dP(TypedArrayPrototype, TAG, {
	        get: function () { return NAME; }
	      });
	    }
	
	    O[NAME] = TypedArray;
	
	    $export($export.G + $export.W + $export.F * (TypedArray != Base), O);
	
	    $export($export.S, NAME, {
	      BYTES_PER_ELEMENT: BYTES
	    });
	
	    $export($export.S + $export.F * fails(function () { Base.of.call(TypedArray, 1); }), NAME, {
	      from: $from,
	      of: $of
	    });
	
	    if (!(BYTES_PER_ELEMENT in TypedArrayPrototype)) hide(TypedArrayPrototype, BYTES_PER_ELEMENT, BYTES);
	
	    $export($export.P, NAME, proto);
	
	    setSpecies(NAME);
	
	    $export($export.P + $export.F * FORCED_SET, NAME, { set: $set });
	
	    $export($export.P + $export.F * !CORRECT_ITER_NAME, NAME, $iterators);
	
	    if (!LIBRARY && TypedArrayPrototype.toString != arrayToString) TypedArrayPrototype.toString = arrayToString;
	
	    $export($export.P + $export.F * fails(function () {
	      new TypedArray(1).slice();
	    }), NAME, { slice: $slice });
	
	    $export($export.P + $export.F * (fails(function () {
	      return [1, 2].toLocaleString() != new TypedArray([1, 2]).toLocaleString();
	    }) || !fails(function () {
	      TypedArrayPrototype.toLocaleString.call([1, 2]);
	    })), NAME, { toLocaleString: $toLocaleString });
	
	    Iterators[NAME] = CORRECT_ITER_NAME ? $nativeIterator : $iterator;
	    if (!LIBRARY && !CORRECT_ITER_NAME) hide(TypedArrayPrototype, ITERATOR, $iterator);
	  };
	} else module.exports = function () { /* empty */ };


/***/ }),
/* 68 */
/***/ (function(module, exports) {

	'use strict';
	
	Object.defineProperty(exports, '__esModule', { value: true });
	
	/**
	 * Earth Radius used with the Harvesine formula and approximates using a spherical (non-ellipsoid) Earth.
	 */
	var earthRadius = 6371008.8;
	
	/**
	 * Unit of measurement factors using a spherical (non-ellipsoid) earth radius.
	 */
	var factors = {
	    meters: earthRadius,
	    metres: earthRadius,
	    millimeters: earthRadius * 1000,
	    millimetres: earthRadius * 1000,
	    centimeters: earthRadius * 100,
	    centimetres: earthRadius * 100,
	    kilometers: earthRadius / 1000,
	    kilometres: earthRadius / 1000,
	    miles: earthRadius / 1609.344,
	    nauticalmiles: earthRadius / 1852,
	    inches: earthRadius * 39.370,
	    yards: earthRadius / 1.0936,
	    feet: earthRadius * 3.28084,
	    radians: 1,
	    degrees: earthRadius / 111325,
	};
	
	/**
	 * Units of measurement factors based on 1 meter.
	 */
	var unitsFactors = {
	    meters: 1,
	    metres: 1,
	    millimeters: 1000,
	    millimetres: 1000,
	    centimeters: 100,
	    centimetres: 100,
	    kilometers: 1 / 1000,
	    kilometres: 1 / 1000,
	    miles: 1 / 1609.344,
	    nauticalmiles: 1 / 1852,
	    inches: 39.370,
	    yards: 1 / 1.0936,
	    feet: 3.28084,
	    radians: 1 / earthRadius,
	    degrees: 1 / 111325,
	};
	
	/**
	 * Area of measurement factors based on 1 square meter.
	 */
	var areaFactors = {
	    meters: 1,
	    metres: 1,
	    millimeters: 1000000,
	    millimetres: 1000000,
	    centimeters: 10000,
	    centimetres: 10000,
	    kilometers: 0.000001,
	    kilometres: 0.000001,
	    acres: 0.000247105,
	    miles: 3.86e-7,
	    yards: 1.195990046,
	    feet: 10.763910417,
	    inches: 1550.003100006
	};
	
	/**
	 * Wraps a GeoJSON {@link Geometry} in a GeoJSON {@link Feature}.
	 *
	 * @name feature
	 * @param {Geometry} geometry input geometry
	 * @param {Object} [properties={}] an Object of key-value pairs to add as properties
	 * @param {Object} [options={}] Optional Parameters
	 * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
	 * @param {string|number} [options.id] Identifier associated with the Feature
	 * @returns {Feature} a GeoJSON Feature
	 * @example
	 * var geometry = {
	 *   "type": "Point",
	 *   "coordinates": [110, 50]
	 * };
	 *
	 * var feature = turf.feature(geometry);
	 *
	 * //=feature
	 */
	function feature(geometry, properties, options) {
	    // Optional Parameters
	    options = options || {};
	    if (!isObject(options)) throw new Error('options is invalid');
	    var bbox = options.bbox;
	    var id = options.id;
	
	    // Validation
	    if (geometry === undefined) throw new Error('geometry is required');
	    if (properties && properties.constructor !== Object) throw new Error('properties must be an Object');
	    if (bbox) validateBBox(bbox);
	    if (id) validateId(id);
	
	    // Main
	    var feat = {type: 'Feature'};
	    if (id) feat.id = id;
	    if (bbox) feat.bbox = bbox;
	    feat.properties = properties || {};
	    feat.geometry = geometry;
	    return feat;
	}
	
	/**
	 * Creates a GeoJSON {@link Geometry} from a Geometry string type & coordinates.
	 * For GeometryCollection type use `helpers.geometryCollection`
	 *
	 * @name geometry
	 * @param {string} type Geometry Type
	 * @param {Array<number>} coordinates Coordinates
	 * @param {Object} [options={}] Optional Parameters
	 * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Geometry
	 * @returns {Geometry} a GeoJSON Geometry
	 * @example
	 * var type = 'Point';
	 * var coordinates = [110, 50];
	 *
	 * var geometry = turf.geometry(type, coordinates);
	 *
	 * //=geometry
	 */
	function geometry(type, coordinates, options) {
	    // Optional Parameters
	    options = options || {};
	    if (!isObject(options)) throw new Error('options is invalid');
	    var bbox = options.bbox;
	
	    // Validation
	    if (!type) throw new Error('type is required');
	    if (!coordinates) throw new Error('coordinates is required');
	    if (!Array.isArray(coordinates)) throw new Error('coordinates must be an Array');
	    if (bbox) validateBBox(bbox);
	
	    // Main
	    var geom;
	    switch (type) {
	    case 'Point': geom = point(coordinates).geometry; break;
	    case 'LineString': geom = lineString(coordinates).geometry; break;
	    case 'Polygon': geom = polygon(coordinates).geometry; break;
	    case 'MultiPoint': geom = multiPoint(coordinates).geometry; break;
	    case 'MultiLineString': geom = multiLineString(coordinates).geometry; break;
	    case 'MultiPolygon': geom = multiPolygon(coordinates).geometry; break;
	    default: throw new Error(type + ' is invalid');
	    }
	    if (bbox) geom.bbox = bbox;
	    return geom;
	}
	
	/**
	 * Creates a {@link Point} {@link Feature} from a Position.
	 *
	 * @name point
	 * @param {Array<number>} coordinates longitude, latitude position (each in decimal degrees)
	 * @param {Object} [properties={}] an Object of key-value pairs to add as properties
	 * @param {Object} [options={}] Optional Parameters
	 * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
	 * @param {string|number} [options.id] Identifier associated with the Feature
	 * @returns {Feature<Point>} a Point feature
	 * @example
	 * var point = turf.point([-75.343, 39.984]);
	 *
	 * //=point
	 */
	function point(coordinates, properties, options) {
	    if (!coordinates) throw new Error('coordinates is required');
	    if (!Array.isArray(coordinates)) throw new Error('coordinates must be an Array');
	    if (coordinates.length < 2) throw new Error('coordinates must be at least 2 numbers long');
	    if (!isNumber(coordinates[0]) || !isNumber(coordinates[1])) throw new Error('coordinates must contain numbers');
	
	    return feature({
	        type: 'Point',
	        coordinates: coordinates
	    }, properties, options);
	}
	
	/**
	 * Creates a {@link Point} {@link FeatureCollection} from an Array of Point coordinates.
	 *
	 * @name points
	 * @param {Array<Array<number>>} coordinates an array of Points
	 * @param {Object} [properties={}] Translate these properties to each Feature
	 * @param {Object} [options={}] Optional Parameters
	 * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the FeatureCollection
	 * @param {string|number} [options.id] Identifier associated with the FeatureCollection
	 * @returns {FeatureCollection<Point>} Point Feature
	 * @example
	 * var points = turf.points([
	 *   [-75, 39],
	 *   [-80, 45],
	 *   [-78, 50]
	 * ]);
	 *
	 * //=points
	 */
	function points(coordinates, properties, options) {
	    if (!coordinates) throw new Error('coordinates is required');
	    if (!Array.isArray(coordinates)) throw new Error('coordinates must be an Array');
	
	    return featureCollection(coordinates.map(function (coords) {
	        return point(coords, properties);
	    }), options);
	}
	
	/**
	 * Creates a {@link Polygon} {@link Feature} from an Array of LinearRings.
	 *
	 * @name polygon
	 * @param {Array<Array<Array<number>>>} coordinates an array of LinearRings
	 * @param {Object} [properties={}] an Object of key-value pairs to add as properties
	 * @param {Object} [options={}] Optional Parameters
	 * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
	 * @param {string|number} [options.id] Identifier associated with the Feature
	 * @returns {Feature<Polygon>} Polygon Feature
	 * @example
	 * var polygon = turf.polygon([[[-5, 52], [-4, 56], [-2, 51], [-7, 54], [-5, 52]]], { name: 'poly1' });
	 *
	 * //=polygon
	 */
	function polygon(coordinates, properties, options) {
	    if (!coordinates) throw new Error('coordinates is required');
	
	    for (var i = 0; i < coordinates.length; i++) {
	        var ring = coordinates[i];
	        if (ring.length < 4) {
	            throw new Error('Each LinearRing of a Polygon must have 4 or more Positions.');
	        }
	        for (var j = 0; j < ring[ring.length - 1].length; j++) {
	            // Check if first point of Polygon contains two numbers
	            if (i === 0 && j === 0 && !isNumber(ring[0][0]) || !isNumber(ring[0][1])) throw new Error('coordinates must contain numbers');
	            if (ring[ring.length - 1][j] !== ring[0][j]) {
	                throw new Error('First and last Position are not equivalent.');
	            }
	        }
	    }
	
	    return feature({
	        type: 'Polygon',
	        coordinates: coordinates
	    }, properties, options);
	}
	
	/**
	 * Creates a {@link Polygon} {@link FeatureCollection} from an Array of Polygon coordinates.
	 *
	 * @name polygons
	 * @param {Array<Array<Array<Array<number>>>>} coordinates an array of Polygon coordinates
	 * @param {Object} [properties={}] an Object of key-value pairs to add as properties
	 * @param {Object} [options={}] Optional Parameters
	 * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
	 * @param {string|number} [options.id] Identifier associated with the FeatureCollection
	 * @returns {FeatureCollection<Polygon>} Polygon FeatureCollection
	 * @example
	 * var polygons = turf.polygons([
	 *   [[[-5, 52], [-4, 56], [-2, 51], [-7, 54], [-5, 52]]],
	 *   [[[-15, 42], [-14, 46], [-12, 41], [-17, 44], [-15, 42]]],
	 * ]);
	 *
	 * //=polygons
	 */
	function polygons(coordinates, properties, options) {
	    if (!coordinates) throw new Error('coordinates is required');
	    if (!Array.isArray(coordinates)) throw new Error('coordinates must be an Array');
	
	    return featureCollection(coordinates.map(function (coords) {
	        return polygon(coords, properties);
	    }), options);
	}
	
	/**
	 * Creates a {@link LineString} {@link Feature} from an Array of Positions.
	 *
	 * @name lineString
	 * @param {Array<Array<number>>} coordinates an array of Positions
	 * @param {Object} [properties={}] an Object of key-value pairs to add as properties
	 * @param {Object} [options={}] Optional Parameters
	 * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
	 * @param {string|number} [options.id] Identifier associated with the Feature
	 * @returns {Feature<LineString>} LineString Feature
	 * @example
	 * var linestring1 = turf.lineString([[-24, 63], [-23, 60], [-25, 65], [-20, 69]], {name: 'line 1'});
	 * var linestring2 = turf.lineString([[-14, 43], [-13, 40], [-15, 45], [-10, 49]], {name: 'line 2'});
	 *
	 * //=linestring1
	 * //=linestring2
	 */
	function lineString(coordinates, properties, options) {
	    if (!coordinates) throw new Error('coordinates is required');
	    if (coordinates.length < 2) throw new Error('coordinates must be an array of two or more positions');
	    // Check if first point of LineString contains two numbers
	    if (!isNumber(coordinates[0][1]) || !isNumber(coordinates[0][1])) throw new Error('coordinates must contain numbers');
	
	    return feature({
	        type: 'LineString',
	        coordinates: coordinates
	    }, properties, options);
	}
	
	/**
	 * Creates a {@link LineString} {@link FeatureCollection} from an Array of LineString coordinates.
	 *
	 * @name lineStrings
	 * @param {Array<Array<number>>} coordinates an array of LinearRings
	 * @param {Object} [properties={}] an Object of key-value pairs to add as properties
	 * @param {Object} [options={}] Optional Parameters
	 * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the FeatureCollection
	 * @param {string|number} [options.id] Identifier associated with the FeatureCollection
	 * @returns {FeatureCollection<LineString>} LineString FeatureCollection
	 * @example
	 * var linestrings = turf.lineStrings([
	 *   [[-24, 63], [-23, 60], [-25, 65], [-20, 69]],
	 *   [[-14, 43], [-13, 40], [-15, 45], [-10, 49]]
	 * ]);
	 *
	 * //=linestrings
	 */
	function lineStrings(coordinates, properties, options) {
	    if (!coordinates) throw new Error('coordinates is required');
	    if (!Array.isArray(coordinates)) throw new Error('coordinates must be an Array');
	
	    return featureCollection(coordinates.map(function (coords) {
	        return lineString(coords, properties);
	    }), options);
	}
	
	/**
	 * Takes one or more {@link Feature|Features} and creates a {@link FeatureCollection}.
	 *
	 * @name featureCollection
	 * @param {Feature[]} features input features
	 * @param {Object} [options={}] Optional Parameters
	 * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
	 * @param {string|number} [options.id] Identifier associated with the Feature
	 * @returns {FeatureCollection} FeatureCollection of Features
	 * @example
	 * var locationA = turf.point([-75.343, 39.984], {name: 'Location A'});
	 * var locationB = turf.point([-75.833, 39.284], {name: 'Location B'});
	 * var locationC = turf.point([-75.534, 39.123], {name: 'Location C'});
	 *
	 * var collection = turf.featureCollection([
	 *   locationA,
	 *   locationB,
	 *   locationC
	 * ]);
	 *
	 * //=collection
	 */
	function featureCollection(features, options) {
	    // Optional Parameters
	    options = options || {};
	    if (!isObject(options)) throw new Error('options is invalid');
	    var bbox = options.bbox;
	    var id = options.id;
	
	    // Validation
	    if (!features) throw new Error('No features passed');
	    if (!Array.isArray(features)) throw new Error('features must be an Array');
	    if (bbox) validateBBox(bbox);
	    if (id) validateId(id);
	
	    // Main
	    var fc = {type: 'FeatureCollection'};
	    if (id) fc.id = id;
	    if (bbox) fc.bbox = bbox;
	    fc.features = features;
	    return fc;
	}
	
	/**
	 * Creates a {@link Feature<MultiLineString>} based on a
	 * coordinate array. Properties can be added optionally.
	 *
	 * @name multiLineString
	 * @param {Array<Array<Array<number>>>} coordinates an array of LineStrings
	 * @param {Object} [properties={}] an Object of key-value pairs to add as properties
	 * @param {Object} [options={}] Optional Parameters
	 * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
	 * @param {string|number} [options.id] Identifier associated with the Feature
	 * @returns {Feature<MultiLineString>} a MultiLineString feature
	 * @throws {Error} if no coordinates are passed
	 * @example
	 * var multiLine = turf.multiLineString([[[0,0],[10,10]]]);
	 *
	 * //=multiLine
	 */
	function multiLineString(coordinates, properties, options) {
	    if (!coordinates) throw new Error('coordinates is required');
	
	    return feature({
	        type: 'MultiLineString',
	        coordinates: coordinates
	    }, properties, options);
	}
	
	/**
	 * Creates a {@link Feature<MultiPoint>} based on a
	 * coordinate array. Properties can be added optionally.
	 *
	 * @name multiPoint
	 * @param {Array<Array<number>>} coordinates an array of Positions
	 * @param {Object} [properties={}] an Object of key-value pairs to add as properties
	 * @param {Object} [options={}] Optional Parameters
	 * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
	 * @param {string|number} [options.id] Identifier associated with the Feature
	 * @returns {Feature<MultiPoint>} a MultiPoint feature
	 * @throws {Error} if no coordinates are passed
	 * @example
	 * var multiPt = turf.multiPoint([[0,0],[10,10]]);
	 *
	 * //=multiPt
	 */
	function multiPoint(coordinates, properties, options) {
	    if (!coordinates) throw new Error('coordinates is required');
	
	    return feature({
	        type: 'MultiPoint',
	        coordinates: coordinates
	    }, properties, options);
	}
	
	/**
	 * Creates a {@link Feature<MultiPolygon>} based on a
	 * coordinate array. Properties can be added optionally.
	 *
	 * @name multiPolygon
	 * @param {Array<Array<Array<Array<number>>>>} coordinates an array of Polygons
	 * @param {Object} [properties={}] an Object of key-value pairs to add as properties
	 * @param {Object} [options={}] Optional Parameters
	 * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
	 * @param {string|number} [options.id] Identifier associated with the Feature
	 * @returns {Feature<MultiPolygon>} a multipolygon feature
	 * @throws {Error} if no coordinates are passed
	 * @example
	 * var multiPoly = turf.multiPolygon([[[[0,0],[0,10],[10,10],[10,0],[0,0]]]]);
	 *
	 * //=multiPoly
	 *
	 */
	function multiPolygon(coordinates, properties, options) {
	    if (!coordinates) throw new Error('coordinates is required');
	
	    return feature({
	        type: 'MultiPolygon',
	        coordinates: coordinates
	    }, properties, options);
	}
	
	/**
	 * Creates a {@link Feature<GeometryCollection>} based on a
	 * coordinate array. Properties can be added optionally.
	 *
	 * @name geometryCollection
	 * @param {Array<Geometry>} geometries an array of GeoJSON Geometries
	 * @param {Object} [properties={}] an Object of key-value pairs to add as properties
	 * @param {Object} [options={}] Optional Parameters
	 * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
	 * @param {string|number} [options.id] Identifier associated with the Feature
	 * @returns {Feature<GeometryCollection>} a GeoJSON GeometryCollection Feature
	 * @example
	 * var pt = {
	 *     "type": "Point",
	 *       "coordinates": [100, 0]
	 *     };
	 * var line = {
	 *     "type": "LineString",
	 *     "coordinates": [ [101, 0], [102, 1] ]
	 *   };
	 * var collection = turf.geometryCollection([pt, line]);
	 *
	 * //=collection
	 */
	function geometryCollection(geometries, properties, options) {
	    if (!geometries) throw new Error('geometries is required');
	    if (!Array.isArray(geometries)) throw new Error('geometries must be an Array');
	
	    return feature({
	        type: 'GeometryCollection',
	        geometries: geometries
	    }, properties, options);
	}
	
	/**
	 * Round number to precision
	 *
	 * @param {number} num Number
	 * @param {number} [precision=0] Precision
	 * @returns {number} rounded number
	 * @example
	 * turf.round(120.4321)
	 * //=120
	 *
	 * turf.round(120.4321, 2)
	 * //=120.43
	 */
	function round(num, precision) {
	    if (num === undefined || num === null || isNaN(num)) throw new Error('num is required');
	    if (precision && !(precision >= 0)) throw new Error('precision must be a positive number');
	    var multiplier = Math.pow(10, precision || 0);
	    return Math.round(num * multiplier) / multiplier;
	}
	
	/**
	 * Convert a distance measurement (assuming a spherical Earth) from radians to a more friendly unit.
	 * Valid units: miles, nauticalmiles, inches, yards, meters, metres, kilometers, centimeters, feet
	 *
	 * @name radiansToLength
	 * @param {number} radians in radians across the sphere
	 * @param {string} [units='kilometers'] can be degrees, radians, miles, or kilometers inches, yards, metres, meters, kilometres, kilometers.
	 * @returns {number} distance
	 */
	function radiansToLength(radians, units) {
	    if (radians === undefined || radians === null) throw new Error('radians is required');
	
	    if (units && typeof units !== 'string') throw new Error('units must be a string');
	    var factor = factors[units || 'kilometers'];
	    if (!factor) throw new Error(units + ' units is invalid');
	    return radians * factor;
	}
	
	/**
	 * Convert a distance measurement (assuming a spherical Earth) from a real-world unit into radians
	 * Valid units: miles, nauticalmiles, inches, yards, meters, metres, kilometers, centimeters, feet
	 *
	 * @name lengthToRadians
	 * @param {number} distance in real units
	 * @param {string} [units='kilometers'] can be degrees, radians, miles, or kilometers inches, yards, metres, meters, kilometres, kilometers.
	 * @returns {number} radians
	 */
	function lengthToRadians(distance, units) {
	    if (distance === undefined || distance === null) throw new Error('distance is required');
	
	    if (units && typeof units !== 'string') throw new Error('units must be a string');
	    var factor = factors[units || 'kilometers'];
	    if (!factor) throw new Error(units + ' units is invalid');
	    return distance / factor;
	}
	
	/**
	 * Convert a distance measurement (assuming a spherical Earth) from a real-world unit into degrees
	 * Valid units: miles, nauticalmiles, inches, yards, meters, metres, centimeters, kilometres, feet
	 *
	 * @name lengthToDegrees
	 * @param {number} distance in real units
	 * @param {string} [units='kilometers'] can be degrees, radians, miles, or kilometers inches, yards, metres, meters, kilometres, kilometers.
	 * @returns {number} degrees
	 */
	function lengthToDegrees(distance, units) {
	    return radiansToDegrees(lengthToRadians(distance, units));
	}
	
	/**
	 * Converts any bearing angle from the north line direction (positive clockwise)
	 * and returns an angle between 0-360 degrees (positive clockwise), 0 being the north line
	 *
	 * @name bearingToAzimuth
	 * @param {number} bearing angle, between -180 and +180 degrees
	 * @returns {number} angle between 0 and 360 degrees
	 */
	function bearingToAzimuth(bearing) {
	    if (bearing === null || bearing === undefined) throw new Error('bearing is required');
	
	    var angle = bearing % 360;
	    if (angle < 0) angle += 360;
	    return angle;
	}
	
	/**
	 * Converts an angle in radians to degrees
	 *
	 * @name radiansToDegrees
	 * @param {number} radians angle in radians
	 * @returns {number} degrees between 0 and 360 degrees
	 */
	function radiansToDegrees(radians) {
	    if (radians === null || radians === undefined) throw new Error('radians is required');
	
	    var degrees = radians % (2 * Math.PI);
	    return degrees * 180 / Math.PI;
	}
	
	/**
	 * Converts an angle in degrees to radians
	 *
	 * @name degreesToRadians
	 * @param {number} degrees angle between 0 and 360 degrees
	 * @returns {number} angle in radians
	 */
	function degreesToRadians(degrees) {
	    if (degrees === null || degrees === undefined) throw new Error('degrees is required');
	
	    var radians = degrees % 360;
	    return radians * Math.PI / 180;
	}
	
	/**
	 * Converts a length to the requested unit.
	 * Valid units: miles, nauticalmiles, inches, yards, meters, metres, kilometers, centimeters, feet
	 *
	 * @param {number} length to be converted
	 * @param {string} originalUnit of the length
	 * @param {string} [finalUnit='kilometers'] returned unit
	 * @returns {number} the converted length
	 */
	function convertLength(length, originalUnit, finalUnit) {
	    if (length === null || length === undefined) throw new Error('length is required');
	    if (!(length >= 0)) throw new Error('length must be a positive number');
	
	    return radiansToLength(lengthToRadians(length, originalUnit), finalUnit || 'kilometers');
	}
	
	/**
	 * Converts a area to the requested unit.
	 * Valid units: kilometers, kilometres, meters, metres, centimetres, millimeters, acres, miles, yards, feet, inches
	 * @param {number} area to be converted
	 * @param {string} [originalUnit='meters'] of the distance
	 * @param {string} [finalUnit='kilometers'] returned unit
	 * @returns {number} the converted distance
	 */
	function convertArea(area, originalUnit, finalUnit) {
	    if (area === null || area === undefined) throw new Error('area is required');
	    if (!(area >= 0)) throw new Error('area must be a positive number');
	
	    var startFactor = areaFactors[originalUnit || 'meters'];
	    if (!startFactor) throw new Error('invalid original units');
	
	    var finalFactor = areaFactors[finalUnit || 'kilometers'];
	    if (!finalFactor) throw new Error('invalid final units');
	
	    return (area / startFactor) * finalFactor;
	}
	
	/**
	 * isNumber
	 *
	 * @param {*} num Number to validate
	 * @returns {boolean} true/false
	 * @example
	 * turf.isNumber(123)
	 * //=true
	 * turf.isNumber('foo')
	 * //=false
	 */
	function isNumber(num) {
	    return !isNaN(num) && num !== null && !Array.isArray(num);
	}
	
	/**
	 * isObject
	 *
	 * @param {*} input variable to validate
	 * @returns {boolean} true/false
	 * @example
	 * turf.isObject({elevation: 10})
	 * //=true
	 * turf.isObject('foo')
	 * //=false
	 */
	function isObject(input) {
	    return (!!input) && (input.constructor === Object);
	}
	
	/**
	 * Validate BBox
	 *
	 * @private
	 * @param {Array<number>} bbox BBox to validate
	 * @returns {void}
	 * @throws Error if BBox is not valid
	 * @example
	 * validateBBox([-180, -40, 110, 50])
	 * //=OK
	 * validateBBox([-180, -40])
	 * //=Error
	 * validateBBox('Foo')
	 * //=Error
	 * validateBBox(5)
	 * //=Error
	 * validateBBox(null)
	 * //=Error
	 * validateBBox(undefined)
	 * //=Error
	 */
	function validateBBox(bbox) {
	    if (!bbox) throw new Error('bbox is required');
	    if (!Array.isArray(bbox)) throw new Error('bbox must be an Array');
	    if (bbox.length !== 4 && bbox.length !== 6) throw new Error('bbox must be an Array of 4 or 6 numbers');
	    bbox.forEach(function (num) {
	        if (!isNumber(num)) throw new Error('bbox must only contain numbers');
	    });
	}
	
	/**
	 * Validate Id
	 *
	 * @private
	 * @param {string|number} id Id to validate
	 * @returns {void}
	 * @throws Error if Id is not valid
	 * @example
	 * validateId([-180, -40, 110, 50])
	 * //=Error
	 * validateId([-180, -40])
	 * //=Error
	 * validateId('Foo')
	 * //=OK
	 * validateId(5)
	 * //=OK
	 * validateId(null)
	 * //=Error
	 * validateId(undefined)
	 * //=Error
	 */
	function validateId(id) {
	    if (!id) throw new Error('id is required');
	    if (['string', 'number'].indexOf(typeof id) === -1) throw new Error('id must be a number or a string');
	}
	
	// Deprecated methods
	function radians2degrees() {
	    throw new Error('method has been renamed to `radiansToDegrees`');
	}
	
	function degrees2radians() {
	    throw new Error('method has been renamed to `degreesToRadians`');
	}
	
	function distanceToDegrees() {
	    throw new Error('method has been renamed to `lengthToDegrees`');
	}
	
	function distanceToRadians() {
	    throw new Error('method has been renamed to `lengthToRadians`');
	}
	
	function radiansToDistance() {
	    throw new Error('method has been renamed to `radiansToLength`');
	}
	
	function bearingToAngle() {
	    throw new Error('method has been renamed to `bearingToAzimuth`');
	}
	
	function convertDistance() {
	    throw new Error('method has been renamed to `convertLength`');
	}
	
	exports.earthRadius = earthRadius;
	exports.factors = factors;
	exports.unitsFactors = unitsFactors;
	exports.areaFactors = areaFactors;
	exports.feature = feature;
	exports.geometry = geometry;
	exports.point = point;
	exports.points = points;
	exports.polygon = polygon;
	exports.polygons = polygons;
	exports.lineString = lineString;
	exports.lineStrings = lineStrings;
	exports.featureCollection = featureCollection;
	exports.multiLineString = multiLineString;
	exports.multiPoint = multiPoint;
	exports.multiPolygon = multiPolygon;
	exports.geometryCollection = geometryCollection;
	exports.round = round;
	exports.radiansToLength = radiansToLength;
	exports.lengthToRadians = lengthToRadians;
	exports.lengthToDegrees = lengthToDegrees;
	exports.bearingToAzimuth = bearingToAzimuth;
	exports.radiansToDegrees = radiansToDegrees;
	exports.degreesToRadians = degreesToRadians;
	exports.convertLength = convertLength;
	exports.convertArea = convertArea;
	exports.isNumber = isNumber;
	exports.isObject = isObject;
	exports.validateBBox = validateBBox;
	exports.validateId = validateId;
	exports.radians2degrees = radians2degrees;
	exports.degrees2radians = degrees2radians;
	exports.distanceToDegrees = distanceToDegrees;
	exports.distanceToRadians = distanceToRadians;
	exports.radiansToDistance = radiansToDistance;
	exports.bearingToAngle = bearingToAngle;
	exports.convertDistance = convertDistance;


/***/ }),
/* 69 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	
	var _EventType = __webpack_require__(10);
	
	var _EventType2 = _interopRequireDefault(_EventType);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	/**
	 * Constants for event names.
	 * @enum {string}
	 */
	exports.default = {
	  /**
	   * A true single click with no dragging and no double click. Note that this
	   * event is delayed by 250 ms to ensure that it is not a double click.
	   * @event module:ol/MapBrowserEvent~MapBrowserEvent#singleclick
	   * @api
	   */
	  SINGLECLICK: 'singleclick',
	  /**
	   * A click with no dragging. A double click will fire two of this.
	   * @event module:ol/MapBrowserEvent~MapBrowserEvent#click
	   * @api
	   */
	  CLICK: _EventType2.default.CLICK,
	  /**
	   * A true double click, with no dragging.
	   * @event module:ol/MapBrowserEvent~MapBrowserEvent#dblclick
	   * @api
	   */
	  DBLCLICK: _EventType2.default.DBLCLICK,
	  /**
	   * Triggered when a pointer is dragged.
	   * @event module:ol/MapBrowserEvent~MapBrowserEvent#pointerdrag
	   * @api
	   */
	  POINTERDRAG: 'pointerdrag',
	  /**
	   * Triggered when a pointer is moved. Note that on touch devices this is
	   * triggered when the map is panned, so is not the same as mousemove.
	   * @event module:ol/MapBrowserEvent~MapBrowserEvent#pointermove
	   * @api
	   */
	  POINTERMOVE: 'pointermove',
	  POINTERDOWN: 'pointerdown',
	  POINTERUP: 'pointerup',
	  POINTEROVER: 'pointerover',
	  POINTEROUT: 'pointerout',
	  POINTERENTER: 'pointerenter',
	  POINTERLEAVE: 'pointerleave',
	  POINTERCANCEL: 'pointercancel'
	};
	//# sourceMappingURL=MapBrowserEventType.js.map
	/**
	 * @module ol/MapBrowserEventType
	 */

/***/ }),
/* 70 */
/***/ (function(module, exports) {

	"use strict";
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	/**
	 * @module ol/TileState
	 */
	/**
	 * @enum {number}
	 */
	exports.default = {
	  IDLE: 0,
	  LOADING: 1,
	  LOADED: 2,
	  /**
	   * Indicates that tile loading failed
	   * @type {number}
	   */
	  ERROR: 3,
	  EMPTY: 4,
	  ABORT: 5
	};
	//# sourceMappingURL=TileState.js.map

/***/ }),
/* 71 */
/***/ (function(module, exports) {

	"use strict";
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	exports.easeIn = easeIn;
	exports.easeOut = easeOut;
	exports.inAndOut = inAndOut;
	exports.linear = linear;
	exports.upAndDown = upAndDown;
	/**
	 * @module ol/easing
	 */
	/**
	 * Start slow and speed up.
	 * @param {number} t Input between 0 and 1.
	 * @return {number} Output between 0 and 1.
	 * @api
	 */
	function easeIn(t) {
	    return Math.pow(t, 3);
	}
	/**
	 * Start fast and slow down.
	 * @param {number} t Input between 0 and 1.
	 * @return {number} Output between 0 and 1.
	 * @api
	 */
	function easeOut(t) {
	    return 1 - easeIn(1 - t);
	}
	/**
	 * Start slow, speed up, and then slow down again.
	 * @param {number} t Input between 0 and 1.
	 * @return {number} Output between 0 and 1.
	 * @api
	 */
	function inAndOut(t) {
	    return 3 * t * t - 2 * t * t * t;
	}
	/**
	 * Maintain a constant speed over time.
	 * @param {number} t Input between 0 and 1.
	 * @return {number} Output between 0 and 1.
	 * @api
	 */
	function linear(t) {
	    return t;
	}
	/**
	 * Start slow, speed up, and at the very end slow down again.  This has the
	 * same general behavior as {@link module:ol/easing~inAndOut}, but the final
	 * slowdown is delayed.
	 * @param {number} t Input between 0 and 1.
	 * @return {number} Output between 0 and 1.
	 * @api
	 */
	function upAndDown(t) {
	    if (t < 0.5) {
	        return inAndOut(2 * t);
	    } else {
	        return 1 - inAndOut(2 * (t - 0.5));
	    }
	}
	//# sourceMappingURL=easing.js.map

/***/ }),
/* 72 */
/***/ (function(module, exports) {

	"use strict";
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	exports.deflateCoordinate = deflateCoordinate;
	exports.deflateCoordinates = deflateCoordinates;
	exports.deflateCoordinatesArray = deflateCoordinatesArray;
	exports.deflateMultiCoordinatesArray = deflateMultiCoordinatesArray;
	/**
	 * @module ol/geom/flat/deflate
	 */
	/**
	 * @param {Array<number>} flatCoordinates Flat coordinates.
	 * @param {number} offset Offset.
	 * @param {import("../../coordinate.js").Coordinate} coordinate Coordinate.
	 * @param {number} stride Stride.
	 * @return {number} offset Offset.
	 */
	function deflateCoordinate(flatCoordinates, offset, coordinate, stride) {
	    for (var i = 0, ii = coordinate.length; i < ii; ++i) {
	        flatCoordinates[offset++] = coordinate[i];
	    }
	    return offset;
	}
	/**
	 * @param {Array<number>} flatCoordinates Flat coordinates.
	 * @param {number} offset Offset.
	 * @param {Array<import("../../coordinate.js").Coordinate>} coordinates Coordinates.
	 * @param {number} stride Stride.
	 * @return {number} offset Offset.
	 */
	function deflateCoordinates(flatCoordinates, offset, coordinates, stride) {
	    for (var i = 0, ii = coordinates.length; i < ii; ++i) {
	        var coordinate = coordinates[i];
	        for (var j = 0; j < stride; ++j) {
	            flatCoordinates[offset++] = coordinate[j];
	        }
	    }
	    return offset;
	}
	/**
	 * @param {Array<number>} flatCoordinates Flat coordinates.
	 * @param {number} offset Offset.
	 * @param {Array<Array<import("../../coordinate.js").Coordinate>>} coordinatess Coordinatess.
	 * @param {number} stride Stride.
	 * @param {Array<number>=} opt_ends Ends.
	 * @return {Array<number>} Ends.
	 */
	function deflateCoordinatesArray(flatCoordinates, offset, coordinatess, stride, opt_ends) {
	    var ends = opt_ends ? opt_ends : [];
	    var i = 0;
	    for (var j = 0, jj = coordinatess.length; j < jj; ++j) {
	        var end = deflateCoordinates(flatCoordinates, offset, coordinatess[j], stride);
	        ends[i++] = end;
	        offset = end;
	    }
	    ends.length = i;
	    return ends;
	}
	/**
	 * @param {Array<number>} flatCoordinates Flat coordinates.
	 * @param {number} offset Offset.
	 * @param {Array<Array<Array<import("../../coordinate.js").Coordinate>>>} coordinatesss Coordinatesss.
	 * @param {number} stride Stride.
	 * @param {Array<Array<number>>=} opt_endss Endss.
	 * @return {Array<Array<number>>} Endss.
	 */
	function deflateMultiCoordinatesArray(flatCoordinates, offset, coordinatesss, stride, opt_endss) {
	    var endss = opt_endss ? opt_endss : [];
	    var i = 0;
	    for (var j = 0, jj = coordinatesss.length; j < jj; ++j) {
	        var ends = deflateCoordinatesArray(flatCoordinates, offset, coordinatesss[j], stride, endss[i]);
	        endss[i++] = ends;
	        offset = ends[ends.length - 1];
	    }
	    endss.length = i;
	    return endss;
	}
	//# sourceMappingURL=deflate.js.map

/***/ }),
/* 73 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	exports.pan = pan;
	exports.zoomByDelta = zoomByDelta;
	
	var _Object = __webpack_require__(32);
	
	var _Object2 = _interopRequireDefault(_Object);
	
	var _easing = __webpack_require__(71);
	
	var _Property = __webpack_require__(174);
	
	var _Property2 = _interopRequireDefault(_Property);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var __extends = undefined && undefined.__extends || function () {
	    var _extendStatics = function extendStatics(d, b) {
	        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	            d.__proto__ = b;
	        } || function (d, b) {
	            for (var p in b) {
	                if (b.hasOwnProperty(p)) d[p] = b[p];
	            }
	        };
	        return _extendStatics(d, b);
	    };
	    return function (d, b) {
	        _extendStatics(d, b);
	        function __() {
	            this.constructor = d;
	        }
	        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	    };
	}();
	/**
	 * @module ol/interaction/Interaction
	 */
	
	/**
	 * Object literal with config options for interactions.
	 * @typedef {Object} InteractionOptions
	 * @property {function(import("../MapBrowserEvent.js").default):boolean} handleEvent
	 * Method called by the map to notify the interaction that a browser event was
	 * dispatched to the map. If the function returns a falsy value, propagation of
	 * the event to other interactions in the map's interactions chain will be
	 * prevented (this includes functions with no explicit return). The interactions
	 * are traversed in reverse order of the interactions collection of the map.
	 */
	/**
	 * @classdesc
	 * Abstract base class; normally only used for creating subclasses and not
	 * instantiated in apps.
	 * User actions that change the state of the map. Some are similar to controls,
	 * but are not associated with a DOM element.
	 * For example, {@link module:ol/interaction/KeyboardZoom~KeyboardZoom} is
	 * functionally the same as {@link module:ol/control/Zoom~Zoom}, but triggered
	 * by a keyboard event not a button element event.
	 * Although interactions do not have a DOM element, some of them do render
	 * vectors and so are visible on the screen.
	 * @api
	 */
	var Interaction = /** @class */function (_super) {
	    __extends(Interaction, _super);
	    /**
	     * @param {InteractionOptions} options Options.
	     */
	    function Interaction(options) {
	        var _this = _super.call(this) || this;
	        if (options.handleEvent) {
	            _this.handleEvent = options.handleEvent;
	        }
	        /**
	         * @private
	         * @type {import("../PluggableMap.js").default}
	         */
	        _this.map_ = null;
	        _this.setActive(true);
	        return _this;
	    }
	    /**
	     * Return whether the interaction is currently active.
	     * @return {boolean} `true` if the interaction is active, `false` otherwise.
	     * @observable
	     * @api
	     */
	    Interaction.prototype.getActive = function () {
	        return (/** @type {boolean} */this.get(_Property2.default.ACTIVE)
	        );
	    };
	    /**
	     * Get the map associated with this interaction.
	     * @return {import("../PluggableMap.js").default} Map.
	     * @api
	     */
	    Interaction.prototype.getMap = function () {
	        return this.map_;
	    };
	    /**
	     * Handles the {@link module:ol/MapBrowserEvent map browser event}.
	     * @param {import("../MapBrowserEvent.js").default} mapBrowserEvent Map browser event.
	     * @return {boolean} `false` to stop event propagation.
	     * @api
	     */
	    Interaction.prototype.handleEvent = function (mapBrowserEvent) {
	        return true;
	    };
	    /**
	     * Activate or deactivate the interaction.
	     * @param {boolean} active Active.
	     * @observable
	     * @api
	     */
	    Interaction.prototype.setActive = function (active) {
	        this.set(_Property2.default.ACTIVE, active);
	    };
	    /**
	     * Remove the interaction from its current map and attach it to the new map.
	     * Subclasses may set up event handlers to get notified about changes to
	     * the map here.
	     * @param {import("../PluggableMap.js").default} map Map.
	     */
	    Interaction.prototype.setMap = function (map) {
	        this.map_ = map;
	    };
	    return Interaction;
	}(_Object2.default);
	/**
	 * @param {import("../View.js").default} view View.
	 * @param {import("../coordinate.js").Coordinate} delta Delta.
	 * @param {number=} opt_duration Duration.
	 */
	function pan(view, delta, opt_duration) {
	    var currentCenter = view.getCenterInternal();
	    if (currentCenter) {
	        var center = [currentCenter[0] + delta[0], currentCenter[1] + delta[1]];
	        view.animateInternal({
	            duration: opt_duration !== undefined ? opt_duration : 250,
	            easing: _easing.linear,
	            center: view.getConstrainedCenter(center)
	        });
	    }
	}
	/**
	 * @param {import("../View.js").default} view View.
	 * @param {number} delta Delta from previous zoom level.
	 * @param {import("../coordinate.js").Coordinate=} opt_anchor Anchor coordinate in the user projection.
	 * @param {number=} opt_duration Duration.
	 */
	function zoomByDelta(view, delta, opt_anchor, opt_duration) {
	    var currentZoom = view.getZoom();
	    if (currentZoom === undefined) {
	        return;
	    }
	    var newZoom = view.getConstrainedZoom(currentZoom + delta);
	    var newResolution = view.getResolutionForZoom(newZoom);
	    if (view.getAnimating()) {
	        view.cancelAnimations();
	    }
	    view.animate({
	        resolution: newResolution,
	        anchor: opt_anchor,
	        duration: opt_duration !== undefined ? opt_duration : 250,
	        easing: _easing.easeOut
	    });
	}
	exports.default = Interaction;
	//# sourceMappingURL=Interaction.js.map

/***/ }),
/* 74 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	exports.resetTransform = exports.measureTextHeight = exports.checkFont = exports.textHeights = exports.checkedFonts = exports.labelCache = exports.defaultLineWidth = exports.defaultPadding = exports.defaultTextBaseline = exports.defaultTextAlign = exports.defaultStrokeStyle = exports.defaultMiterLimit = exports.defaultLineJoin = exports.defaultLineDashOffset = exports.defaultLineDash = exports.defaultLineCap = exports.defaultFillStyle = exports.defaultFont = undefined;
	exports.measureTextWidth = measureTextWidth;
	exports.measureAndCacheTextWidth = measureAndCacheTextWidth;
	exports.measureTextWidths = measureTextWidths;
	exports.rotateAtOffset = rotateAtOffset;
	exports.drawImage = drawImage;
	
	var _css = __webpack_require__(47);
	
	var _dom = __webpack_require__(34);
	
	var _obj = __webpack_require__(23);
	
	var _transform = __webpack_require__(48);
	
	var _LabelCache = __webpack_require__(633);
	
	var _LabelCache2 = _interopRequireDefault(_LabelCache);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	/**
	 * @typedef {Object} FillState
	 * @property {import("../colorlike.js").ColorLike} fillStyle
	 */
	/**
	 * @typedef {Object} FillStrokeState
	 * @property {import("../colorlike.js").ColorLike} [currentFillStyle]
	 * @property {import("../colorlike.js").ColorLike} [currentStrokeStyle]
	 * @property {CanvasLineCap} [currentLineCap]
	 * @property {Array<number>} currentLineDash
	 * @property {number} [currentLineDashOffset]
	 * @property {CanvasLineJoin} [currentLineJoin]
	 * @property {number} [currentLineWidth]
	 * @property {number} [currentMiterLimit]
	 * @property {number} [lastStroke]
	 * @property {import("../colorlike.js").ColorLike} [fillStyle]
	 * @property {import("../colorlike.js").ColorLike} [strokeStyle]
	 * @property {CanvasLineCap} [lineCap]
	 * @property {Array<number>} lineDash
	 * @property {number} [lineDashOffset]
	 * @property {CanvasLineJoin} [lineJoin]
	 * @property {number} [lineWidth]
	 * @property {number} [miterLimit]
	 */
	/**
	 * @typedef {Object} StrokeState
	 * @property {CanvasLineCap} lineCap
	 * @property {Array<number>} lineDash
	 * @property {number} lineDashOffset
	 * @property {CanvasLineJoin} lineJoin
	 * @property {number} lineWidth
	 * @property {number} miterLimit
	 * @property {import("../colorlike.js").ColorLike} strokeStyle
	 */
	/**
	 * @typedef {Object} TextState
	 * @property {string} font
	 * @property {string} [textAlign]
	 * @property {string} textBaseline
	 * @property {string} [placement]
	 * @property {number} [maxAngle]
	 * @property {boolean} [overflow]
	 * @property {import("../style/Fill.js").default} [backgroundFill]
	 * @property {import("../style/Stroke.js").default} [backgroundStroke]
	 * @property {number} [scale]
	 * @property {Array<number>} [padding]
	 */
	/**
	 * Container for decluttered replay instructions that need to be rendered or
	 * omitted together, i.e. when styles render both an image and text, or for the
	 * characters that form text along lines. The basic elements of this array are
	 * `[minX, minY, maxX, maxY, count]`, where the first four entries are the
	 * rendered extent of the group in pixel space. `count` is the number of styles
	 * in the group, i.e. 2 when an image and a text are grouped, or 1 otherwise.
	 * In addition to these four elements, declutter instruction arrays (i.e. the
	 * arguments to {@link module:ol/render/canvas~drawImage} are appended to the array.
	 * @typedef {Array<*>} DeclutterGroup
	 */
	/**
	 * Declutter groups for support of multi geometries.
	 * @typedef {Array<DeclutterGroup>} DeclutterGroups
	 */
	/**
	 * @const
	 * @type {string}
	 */
	var defaultFont = exports.defaultFont = '10px sans-serif';
	/**
	 * @const
	 * @type {import("../colorlike.js").ColorLike}
	 */
	/**
	 * @module ol/render/canvas
	 */
	var defaultFillStyle = exports.defaultFillStyle = '#000';
	/**
	 * @const
	 * @type {CanvasLineCap}
	 */
	var defaultLineCap = exports.defaultLineCap = 'round';
	/**
	 * @const
	 * @type {Array<number>}
	 */
	var defaultLineDash = exports.defaultLineDash = [];
	/**
	 * @const
	 * @type {number}
	 */
	var defaultLineDashOffset = exports.defaultLineDashOffset = 0;
	/**
	 * @const
	 * @type {CanvasLineJoin}
	 */
	var defaultLineJoin = exports.defaultLineJoin = 'round';
	/**
	 * @const
	 * @type {number}
	 */
	var defaultMiterLimit = exports.defaultMiterLimit = 10;
	/**
	 * @const
	 * @type {import("../colorlike.js").ColorLike}
	 */
	var defaultStrokeStyle = exports.defaultStrokeStyle = '#000';
	/**
	 * @const
	 * @type {string}
	 */
	var defaultTextAlign = exports.defaultTextAlign = 'center';
	/**
	 * @const
	 * @type {string}
	 */
	var defaultTextBaseline = exports.defaultTextBaseline = 'middle';
	/**
	 * @const
	 * @type {Array<number>}
	 */
	var defaultPadding = exports.defaultPadding = [0, 0, 0, 0];
	/**
	 * @const
	 * @type {number}
	 */
	var defaultLineWidth = exports.defaultLineWidth = 1;
	/**
	 * The label cache for text rendering. To change the default cache size of 2048
	 * entries, use {@link module:ol/structs/LRUCache#setSize}.
	 * @type {LabelCache}
	 * @api
	 */
	var labelCache = exports.labelCache = new _LabelCache2.default();
	/**
	 * @type {!Object<string, number>}
	 */
	var checkedFonts = exports.checkedFonts = {};
	/**
	 * @type {CanvasRenderingContext2D}
	 */
	var measureContext = null;
	/**
	 * @type {string}
	 */
	var measureFont;
	/**
	 * @type {!Object<string, number>}
	 */
	var textHeights = exports.textHeights = {};
	/**
	 * Clears the label cache when a font becomes available.
	 * @param {string} fontSpec CSS font spec.
	 */
	var checkFont = exports.checkFont = function () {
	    var retries = 100;
	    var checked = checkedFonts;
	    var size = '32px ';
	    var referenceFonts = ['monospace', 'serif'];
	    var len = referenceFonts.length;
	    var text = 'wmytzilWMYTZIL@#/&?$%10\uF013';
	    var interval, referenceWidth;
	    /**
	     * @param {string} fontStyle Css font-style
	     * @param {string} fontWeight Css font-weight
	     * @param {*} fontFamily Css font-family
	     * @return {boolean} Font with style and weight is available
	     */
	    function isAvailable(fontStyle, fontWeight, fontFamily) {
	        var context = getMeasureContext();
	        var available = true;
	        for (var i = 0; i < len; ++i) {
	            var referenceFont = referenceFonts[i];
	            context.font = fontStyle + ' ' + fontWeight + ' ' + size + referenceFont;
	            referenceWidth = context.measureText(text).width;
	            if (fontFamily != referenceFont) {
	                context.font = fontStyle + ' ' + fontWeight + ' ' + size + fontFamily + ',' + referenceFont;
	                var width = context.measureText(text).width;
	                // If width and referenceWidth are the same, then the fallback was used
	                // instead of the font we wanted, so the font is not available.
	                available = available && width != referenceWidth;
	            }
	        }
	        if (available) {
	            return true;
	        }
	        return false;
	    }
	    function check() {
	        var done = true;
	        for (var font in checked) {
	            if (checked[font] < retries) {
	                if (isAvailable.apply(this, font.split('\n'))) {
	                    checked[font] = retries;
	                    (0, _obj.clear)(textHeights);
	                    // Make sure that loaded fonts are picked up by Safari
	                    measureContext = null;
	                    measureFont = undefined;
	                    if (labelCache.getCount()) {
	                        labelCache.clear();
	                    }
	                } else {
	                    ++checked[font];
	                    done = false;
	                }
	            }
	        }
	        if (done) {
	            clearInterval(interval);
	            interval = undefined;
	        }
	    }
	    return function (fontSpec) {
	        var font = (0, _css.getFontParameters)(fontSpec);
	        if (!font) {
	            return;
	        }
	        var families = font.families;
	        for (var i = 0, ii = families.length; i < ii; ++i) {
	            var family = families[i];
	            var key = font.style + '\n' + font.weight + '\n' + family;
	            if (!(key in checked)) {
	                checked[key] = retries;
	                if (!isAvailable(font.style, font.weight, family)) {
	                    checked[key] = 0;
	                    if (interval === undefined) {
	                        interval = setInterval(check, 32);
	                    }
	                }
	            }
	        }
	    };
	}();
	/**
	 * @return {CanvasRenderingContext2D} Measure context.
	 */
	function getMeasureContext() {
	    if (!measureContext) {
	        measureContext = (0, _dom.createCanvasContext2D)(1, 1);
	    }
	    return measureContext;
	}
	/**
	 * @param {string} font Font to use for measuring.
	 * @return {import("../size.js").Size} Measurement.
	 */
	var measureTextHeight = exports.measureTextHeight = function () {
	    /**
	     * @type {HTMLDivElement}
	     */
	    var div;
	    var heights = textHeights;
	    return function (font) {
	        var height = heights[font];
	        if (height == undefined) {
	            if (!div) {
	                div = document.createElement('div');
	                div.innerHTML = 'M';
	                div.style.margin = '0 !important';
	                div.style.padding = '0 !important';
	                div.style.position = 'absolute !important';
	                div.style.left = '-99999px !important';
	            }
	            div.style.font = font;
	            document.body.appendChild(div);
	            height = div.offsetHeight;
	            heights[font] = height;
	            document.body.removeChild(div);
	        }
	        return height;
	    };
	}();
	/**
	 * @param {string} font Font.
	 * @param {string} text Text.
	 * @return {number} Width.
	 */
	function measureTextWidth(font, text) {
	    var measureContext = getMeasureContext();
	    if (font != measureFont) {
	        measureContext.font = font;
	        measureFont = measureContext.font;
	    }
	    return measureContext.measureText(text).width;
	}
	/**
	 * Measure text width using a cache.
	 * @param {string} font The font.
	 * @param {string} text The text to measure.
	 * @param {Object<string, number>} cache A lookup of cached widths by text.
	 * @returns {number} The text width.
	 */
	function measureAndCacheTextWidth(font, text, cache) {
	    if (text in cache) {
	        return cache[text];
	    }
	    var width = measureTextWidth(font, text);
	    cache[text] = width;
	    return width;
	}
	/**
	 * @param {string} font Font to use for measuring.
	 * @param {Array<string>} lines Lines to measure.
	 * @param {Array<number>} widths Array will be populated with the widths of
	 * each line.
	 * @return {number} Width of the whole text.
	 */
	function measureTextWidths(font, lines, widths) {
	    var numLines = lines.length;
	    var width = 0;
	    for (var i = 0; i < numLines; ++i) {
	        var currentWidth = measureTextWidth(font, lines[i]);
	        width = Math.max(width, currentWidth);
	        widths.push(currentWidth);
	    }
	    return width;
	}
	/**
	 * @param {CanvasRenderingContext2D} context Context.
	 * @param {number} rotation Rotation.
	 * @param {number} offsetX X offset.
	 * @param {number} offsetY Y offset.
	 */
	function rotateAtOffset(context, rotation, offsetX, offsetY) {
	    if (rotation !== 0) {
	        context.translate(offsetX, offsetY);
	        context.rotate(rotation);
	        context.translate(-offsetX, -offsetY);
	    }
	}
	var resetTransform = exports.resetTransform = (0, _transform.create)();
	/**
	 * @param {CanvasRenderingContext2D} context Context.
	 * @param {import("../transform.js").Transform|null} transform Transform.
	 * @param {number} opacity Opacity.
	 * @param {HTMLImageElement|HTMLCanvasElement|HTMLVideoElement} image Image.
	 * @param {number} originX Origin X.
	 * @param {number} originY Origin Y.
	 * @param {number} w Width.
	 * @param {number} h Height.
	 * @param {number} x X.
	 * @param {number} y Y.
	 * @param {number} scale Scale.
	 */
	function drawImage(context, transform, opacity, image, originX, originY, w, h, x, y, scale) {
	    var alpha;
	    if (opacity != 1) {
	        alpha = context.globalAlpha;
	        context.globalAlpha = alpha * opacity;
	    }
	    if (transform) {
	        context.setTransform.apply(context, transform);
	    }
	    context.drawImage(image, originX, originY, w, h, x, y, w * scale, h * scale);
	    if (opacity != 1) {
	        context.globalAlpha = alpha;
	    }
	    if (transform) {
	        context.setTransform.apply(context, resetTransform);
	    }
	}
	//# sourceMappingURL=canvas.js.map

/***/ }),
/* 75 */
/***/ (function(module, exports, __webpack_require__) {

	"use strict";
	var es5 = __webpack_require__(89);
	var Objectfreeze = es5.freeze;
	var util = __webpack_require__(17);
	var inherits = util.inherits;
	var notEnumerableProp = util.notEnumerableProp;
	
	function subError(nameProperty, defaultMessage) {
	    function SubError(message) {
	        if (!(this instanceof SubError)) return new SubError(message);
	        notEnumerableProp(this, "message",
	            typeof message === "string" ? message : defaultMessage);
	        notEnumerableProp(this, "name", nameProperty);
	        if (Error.captureStackTrace) {
	            Error.captureStackTrace(this, this.constructor);
	        } else {
	            Error.call(this);
	        }
	    }
	    inherits(SubError, Error);
	    return SubError;
	}
	
	var _TypeError, _RangeError;
	var Warning = subError("Warning", "warning");
	var CancellationError = subError("CancellationError", "cancellation error");
	var TimeoutError = subError("TimeoutError", "timeout error");
	var AggregateError = subError("AggregateError", "aggregate error");
	try {
	    _TypeError = TypeError;
	    _RangeError = RangeError;
	} catch(e) {
	    _TypeError = subError("TypeError", "type error");
	    _RangeError = subError("RangeError", "range error");
	}
	
	var methods = ("join pop push shift unshift slice filter forEach some " +
	    "every map indexOf lastIndexOf reduce reduceRight sort reverse").split(" ");
	
	for (var i = 0; i < methods.length; ++i) {
	    if (typeof Array.prototype[methods[i]] === "function") {
	        AggregateError.prototype[methods[i]] = Array.prototype[methods[i]];
	    }
	}
	
	es5.defineProperty(AggregateError.prototype, "length", {
	    value: 0,
	    configurable: false,
	    writable: true,
	    enumerable: true
	});
	AggregateError.prototype["isOperational"] = true;
	var level = 0;
	AggregateError.prototype.toString = function() {
	    var indent = Array(level * 4 + 1).join(" ");
	    var ret = "\n" + indent + "AggregateError of:" + "\n";
	    level++;
	    indent = Array(level * 4 + 1).join(" ");
	    for (var i = 0; i < this.length; ++i) {
	        var str = this[i] === this ? "[Circular AggregateError]" : this[i] + "";
	        var lines = str.split("\n");
	        for (var j = 0; j < lines.length; ++j) {
	            lines[j] = indent + lines[j];
	        }
	        str = lines.join("\n");
	        ret += str + "\n";
	    }
	    level--;
	    return ret;
	};
	
	function OperationalError(message) {
	    if (!(this instanceof OperationalError))
	        return new OperationalError(message);
	    notEnumerableProp(this, "name", "OperationalError");
	    notEnumerableProp(this, "message", message);
	    this.cause = message;
	    this["isOperational"] = true;
	
	    if (message instanceof Error) {
	        notEnumerableProp(this, "message", message.message);
	        notEnumerableProp(this, "stack", message.stack);
	    } else if (Error.captureStackTrace) {
	        Error.captureStackTrace(this, this.constructor);
	    }
	
	}
	inherits(OperationalError, Error);
	
	var errorTypes = Error["__BluebirdErrorTypes__"];
	if (!errorTypes) {
	    errorTypes = Objectfreeze({
	        CancellationError: CancellationError,
	        TimeoutError: TimeoutError,
	        OperationalError: OperationalError,
	        RejectionError: OperationalError,
	        AggregateError: AggregateError
	    });
	    es5.defineProperty(Error, "__BluebirdErrorTypes__", {
	        value: errorTypes,
	        writable: false,
	        enumerable: false,
	        configurable: false
	    });
	}
	
	module.exports = {
	    Error: Error,
	    TypeError: _TypeError,
	    RangeError: _RangeError,
	    CancellationError: errorTypes.CancellationError,
	    OperationalError: errorTypes.OperationalError,
	    TimeoutError: errorTypes.TimeoutError,
	    AggregateError: errorTypes.AggregateError,
	    Warning: Warning
	};


/***/ }),
/* 76 */
/***/ (function(module, exports, __webpack_require__) {

	// 22.1.3.31 Array.prototype[@@unscopables]
	var UNSCOPABLES = __webpack_require__(20)('unscopables');
	var ArrayProto = Array.prototype;
	if (ArrayProto[UNSCOPABLES] == undefined) __webpack_require__(37)(ArrayProto, UNSCOPABLES, {});
	module.exports = function (key) {
	  ArrayProto[UNSCOPABLES][key] = true;
	};


/***/ }),
/* 77 */
/***/ (function(module, exports) {

	module.exports = false;


/***/ }),
/* 78 */
/***/ (function(module, exports, __webpack_require__) {

	var META = __webpack_require__(98)('meta');
	var isObject = __webpack_require__(15);
	var has = __webpack_require__(42);
	var setDesc = __webpack_require__(26).f;
	var id = 0;
	var isExtensible = Object.isExtensible || function () {
	  return true;
	};
	var FREEZE = !__webpack_require__(13)(function () {
	  return isExtensible(Object.preventExtensions({}));
	});
	var setMeta = function (it) {
	  setDesc(it, META, { value: {
	    i: 'O' + ++id, // object ID
	    w: {}          // weak collections IDs
	  } });
	};
	var fastKey = function (it, create) {
	  // return primitive with prefix
	  if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;
	  if (!has(it, META)) {
	    // can't set metadata to uncaught frozen object
	    if (!isExtensible(it)) return 'F';
	    // not necessary to add metadata
	    if (!create) return 'E';
	    // add missing metadata
	    setMeta(it);
	  // return object ID
	  } return it[META].i;
	};
	var getWeak = function (it, create) {
	  if (!has(it, META)) {
	    // can't set metadata to uncaught frozen object
	    if (!isExtensible(it)) return true;
	    // not necessary to add metadata
	    if (!create) return false;
	    // add missing metadata
	    setMeta(it);
	  // return hash weak collections IDs
	  } return it[META].w;
	};
	// add metadata on freeze-family methods calling
	var onFreeze = function (it) {
	  if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);
	  return it;
	};
	var meta = module.exports = {
	  KEY: META,
	  NEED: false,
	  fastKey: fastKey,
	  getWeak: getWeak,
	  onFreeze: onFreeze
	};


/***/ }),
/* 79 */
/***/ (function(module, exports) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	
	var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
	
	function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
	
	var consoleLogger = {
	  type: 'logger',
	
	  log: function log(args) {
	    this._output('log', args);
	  },
	  warn: function warn(args) {
	    this._output('warn', args);
	  },
	  error: function error(args) {
	    this._output('error', args);
	  },
	  _output: function _output(type, args) {
	    if (console && console[type]) console[type].apply(console, Array.prototype.slice.call(args));
	  }
	};
	
	var Logger = function () {
	  function Logger(concreteLogger) {
	    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
	
	    _classCallCheck(this, Logger);
	
	    this.subs = [];
	    this.init(concreteLogger, options);
	  }
	
	  Logger.prototype.init = function init(concreteLogger) {
	    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
	
	    this.prefix = options.prefix || 'i18next:';
	    this.logger = concreteLogger || consoleLogger;
	    this.options = options;
	    this.debug = options.debug === false ? false : true;
	  };
	
	  Logger.prototype.setDebug = function setDebug(bool) {
	    this.debug = bool;
	    this.subs.forEach(function (sub) {
	      sub.setDebug(bool);
	    });
	  };
	
	  Logger.prototype.log = function log() {
	    this.forward(arguments, 'log', '', true);
	  };
	
	  Logger.prototype.warn = function warn() {
	    this.forward(arguments, 'warn', '', true);
	  };
	
	  Logger.prototype.error = function error() {
	    this.forward(arguments, 'error', '');
	  };
	
	  Logger.prototype.deprecate = function deprecate() {
	    this.forward(arguments, 'warn', 'WARNING DEPRECATED: ', true);
	  };
	
	  Logger.prototype.forward = function forward(args, lvl, prefix, debugOnly) {
	    if (debugOnly && !this.debug) return;
	    if (typeof args[0] === 'string') args[0] = prefix + this.prefix + ' ' + args[0];
	    this.logger[lvl](args);
	  };
	
	  Logger.prototype.create = function create(moduleName) {
	    var sub = new Logger(this.logger, _extends({ prefix: this.prefix + ':' + moduleName + ':' }, this.options));
	    this.subs.push(sub);
	
	    return sub;
	  };
	
	  // createInstance(options = {}) {
	  //   return new Logger(options, callback);
	  // }
	
	  return Logger;
	}();
	
	;
	
	exports.default = new Logger();

/***/ }),
/* 80 */
/***/ (function(module, exports) {

	'use strict';
	
	
	var TYPED_OK =  (typeof Uint8Array !== 'undefined') &&
	                (typeof Uint16Array !== 'undefined') &&
	                (typeof Int32Array !== 'undefined');
	
	function _has(obj, key) {
	  return Object.prototype.hasOwnProperty.call(obj, key);
	}
	
	exports.assign = function (obj /*from1, from2, from3, ...*/) {
	  var sources = Array.prototype.slice.call(arguments, 1);
	  while (sources.length) {
	    var source = sources.shift();
	    if (!source) { continue; }
	
	    if (typeof source !== 'object') {
	      throw new TypeError(source + 'must be non-object');
	    }
	
	    for (var p in source) {
	      if (_has(source, p)) {
	        obj[p] = source[p];
	      }
	    }
	  }
	
	  return obj;
	};
	
	
	// reduce buffer size, avoiding mem copy
	exports.shrinkBuf = function (buf, size) {
	  if (buf.length === size) { return buf; }
	  if (buf.subarray) { return buf.subarray(0, size); }
	  buf.length = size;
	  return buf;
	};
	
	
	var fnTyped = {
	  arraySet: function (dest, src, src_offs, len, dest_offs) {
	    if (src.subarray && dest.subarray) {
	      dest.set(src.subarray(src_offs, src_offs + len), dest_offs);
	      return;
	    }
	    // Fallback to ordinary array
	    for (var i = 0; i < len; i++) {
	      dest[dest_offs + i] = src[src_offs + i];
	    }
	  },
	  // Join array of chunks to single array.
	  flattenChunks: function (chunks) {
	    var i, l, len, pos, chunk, result;
	
	    // calculate data length
	    len = 0;
	    for (i = 0, l = chunks.length; i < l; i++) {
	      len += chunks[i].length;
	    }
	
	    // join chunks
	    result = new Uint8Array(len);
	    pos = 0;
	    for (i = 0, l = chunks.length; i < l; i++) {
	      chunk = chunks[i];
	      result.set(chunk, pos);
	      pos += chunk.length;
	    }
	
	    return result;
	  }
	};
	
	var fnUntyped = {
	  arraySet: function (dest, src, src_offs, len, dest_offs) {
	    for (var i = 0; i < len; i++) {
	      dest[dest_offs + i] = src[src_offs + i];
	    }
	  },
	  // Join array of chunks to single array.
	  flattenChunks: function (chunks) {
	    return [].concat.apply([], chunks);
	  }
	};
	
	
	// Enable/Disable typed arrays use, for testing
	//
	exports.setTyped = function (on) {
	  if (on) {
	    exports.Buf8  = Uint8Array;
	    exports.Buf16 = Uint16Array;
	    exports.Buf32 = Int32Array;
	    exports.assign(exports, fnTyped);
	  } else {
	    exports.Buf8  = Array;
	    exports.Buf16 = Array;
	    exports.Buf32 = Array;
	    exports.assign(exports, fnUntyped);
	  }
	};
	
	exports.setTyped(TYPED_OK);


/***/ }),
/* 81 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	var toInteger = __webpack_require__(54);
	var max = Math.max;
	var min = Math.min;
	module.exports = function (index, length) {
	  index = toInteger(index);
	  return index < 0 ? max(index + length, 0) : min(index, length);
	};

/***/ }),
/* 82 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	var isObject = __webpack_require__(15);
	module.exports = function (it, TYPE) {
	  if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');
	  return it;
	};

/***/ }),
/* 83 */
/***/ (function(module, exports) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	/**
	 * @module ol/CollectionEventType
	 */
	/**
	 * @enum {string}
	 */
	exports.default = {
	  /**
	   * Triggered when an item is added to the collection.
	   * @event module:ol/Collection.CollectionEvent#add
	   * @api
	   */
	  ADD: 'add',
	  /**
	   * Triggered when an item is removed from the collection.
	   * @event module:ol/Collection.CollectionEvent#remove
	   * @api
	   */
	  REMOVE: 'remove'
	};
	//# sourceMappingURL=CollectionEventType.js.map

/***/ }),
/* 84 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	exports.add = add;
	exports.closestOnCircle = closestOnCircle;
	exports.closestOnSegment = closestOnSegment;
	exports.createStringXY = createStringXY;
	exports.degreesToStringHDMS = degreesToStringHDMS;
	exports.format = format;
	exports.equals = equals;
	exports.rotate = rotate;
	exports.scale = scale;
	exports.squaredDistance = squaredDistance;
	exports.distance = distance;
	exports.squaredDistanceToSegment = squaredDistanceToSegment;
	exports.toStringHDMS = toStringHDMS;
	exports.toStringXY = toStringXY;
	
	var _math = __webpack_require__(19);
	
	var _string = __webpack_require__(180);
	
	/**
	 * An array of numbers representing an xy coordinate. Example: `[16, 48]`.
	 * @typedef {Array<number>} Coordinate
	 * @api
	 */
	/**
	 * A function that takes a {@link module:ol/coordinate~Coordinate} and
	 * transforms it into a `{string}`.
	 *
	 * @typedef {function((Coordinate|undefined)): string} CoordinateFormat
	 * @api
	 */
	/**
	 * Add `delta` to `coordinate`. `coordinate` is modified in place and returned
	 * by the function.
	 *
	 * Example:
	 *
	 *     import {add} from 'ol/coordinate';
	 *
	 *     var coord = [7.85, 47.983333];
	 *     add(coord, [-2, 4]);
	 *     // coord is now [5.85, 51.983333]
	 *
	 * @param {Coordinate} coordinate Coordinate.
	 * @param {Coordinate} delta Delta.
	 * @return {Coordinate} The input coordinate adjusted by
	 * the given delta.
	 * @api
	 */
	/**
	 * @module ol/coordinate
	 */
	function add(coordinate, delta) {
	    coordinate[0] += +delta[0];
	    coordinate[1] += +delta[1];
	    return coordinate;
	}
	/**
	 * Calculates the point closest to the passed coordinate on the passed circle.
	 *
	 * @param {Coordinate} coordinate The coordinate.
	 * @param {import("./geom/Circle.js").default} circle The circle.
	 * @return {Coordinate} Closest point on the circumference.
	 */
	function closestOnCircle(coordinate, circle) {
	    var r = circle.getRadius();
	    var center = circle.getCenter();
	    var x0 = center[0];
	    var y0 = center[1];
	    var x1 = coordinate[0];
	    var y1 = coordinate[1];
	    var dx = x1 - x0;
	    var dy = y1 - y0;
	    if (dx === 0 && dy === 0) {
	        dx = 1;
	    }
	    var d = Math.sqrt(dx * dx + dy * dy);
	    var x = x0 + r * dx / d;
	    var y = y0 + r * dy / d;
	    return [x, y];
	}
	/**
	 * Calculates the point closest to the passed coordinate on the passed segment.
	 * This is the foot of the perpendicular of the coordinate to the segment when
	 * the foot is on the segment, or the closest segment coordinate when the foot
	 * is outside the segment.
	 *
	 * @param {Coordinate} coordinate The coordinate.
	 * @param {Array<Coordinate>} segment The two coordinates
	 * of the segment.
	 * @return {Coordinate} The foot of the perpendicular of
	 * the coordinate to the segment.
	 */
	function closestOnSegment(coordinate, segment) {
	    var x0 = coordinate[0];
	    var y0 = coordinate[1];
	    var start = segment[0];
	    var end = segment[1];
	    var x1 = start[0];
	    var y1 = start[1];
	    var x2 = end[0];
	    var y2 = end[1];
	    var dx = x2 - x1;
	    var dy = y2 - y1;
	    var along = dx === 0 && dy === 0 ? 0 : (dx * (x0 - x1) + dy * (y0 - y1)) / (dx * dx + dy * dy || 0);
	    var x, y;
	    if (along <= 0) {
	        x = x1;
	        y = y1;
	    } else if (along >= 1) {
	        x = x2;
	        y = y2;
	    } else {
	        x = x1 + along * dx;
	        y = y1 + along * dy;
	    }
	    return [x, y];
	}
	/**
	 * Returns a {@link module:ol/coordinate~CoordinateFormat} function that can be
	 * used to format
	 * a {Coordinate} to a string.
	 *
	 * Example without specifying the fractional digits:
	 *
	 *     import {createStringXY} from 'ol/coordinate';
	 *
	 *     var coord = [7.85, 47.983333];
	 *     var stringifyFunc = createStringXY();
	 *     var out = stringifyFunc(coord);
	 *     // out is now '8, 48'
	 *
	 * Example with explicitly specifying 2 fractional digits:
	 *
	 *     import {createStringXY} from 'ol/coordinate';
	 *
	 *     var coord = [7.85, 47.983333];
	 *     var stringifyFunc = createStringXY(2);
	 *     var out = stringifyFunc(coord);
	 *     // out is now '7.85, 47.98'
	 *
	 * @param {number=} opt_fractionDigits The number of digits to include
	 *    after the decimal point. Default is `0`.
	 * @return {CoordinateFormat} Coordinate format.
	 * @api
	 */
	function createStringXY(opt_fractionDigits) {
	    return (
	        /**
	         * @param {Coordinate} coordinate Coordinate.
	         * @return {string} String XY.
	         */
	        function (coordinate) {
	            return toStringXY(coordinate, opt_fractionDigits);
	        }
	    );
	}
	/**
	 * @param {string} hemispheres Hemispheres.
	 * @param {number} degrees Degrees.
	 * @param {number=} opt_fractionDigits The number of digits to include
	 *    after the decimal point. Default is `0`.
	 * @return {string} String.
	 */
	function degreesToStringHDMS(hemispheres, degrees, opt_fractionDigits) {
	    var normalizedDegrees = (0, _math.modulo)(degrees + 180, 360) - 180;
	    var x = Math.abs(3600 * normalizedDegrees);
	    var dflPrecision = opt_fractionDigits || 0;
	    var precision = Math.pow(10, dflPrecision);
	    var deg = Math.floor(x / 3600);
	    var min = Math.floor((x - deg * 3600) / 60);
	    var sec = x - deg * 3600 - min * 60;
	    sec = Math.ceil(sec * precision) / precision;
	    if (sec >= 60) {
	        sec = 0;
	        min += 1;
	    }
	    if (min >= 60) {
	        min = 0;
	        deg += 1;
	    }
	    return deg + '\xB0 ' + (0, _string.padNumber)(min, 2) + '\u2032 ' + (0, _string.padNumber)(sec, 2, dflPrecision) + '\u2033' + (normalizedDegrees == 0 ? '' : ' ' + hemispheres.charAt(normalizedDegrees < 0 ? 1 : 0));
	}
	/**
	 * Transforms the given {@link module:ol/coordinate~Coordinate} to a string
	 * using the given string template. The strings `{x}` and `{y}` in the template
	 * will be replaced with the first and second coordinate values respectively.
	 *
	 * Example without specifying the fractional digits:
	 *
	 *     import {format} from 'ol/coordinate';
	 *
	 *     var coord = [7.85, 47.983333];
	 *     var template = 'Coordinate is ({x}|{y}).';
	 *     var out = format(coord, template);
	 *     // out is now 'Coordinate is (8|48).'
	 *
	 * Example explicitly specifying the fractional digits:
	 *
	 *     import {format} from 'ol/coordinate';
	 *
	 *     var coord = [7.85, 47.983333];
	 *     var template = 'Coordinate is ({x}|{y}).';
	 *     var out = format(coord, template, 2);
	 *     // out is now 'Coordinate is (7.85|47.98).'
	 *
	 * @param {Coordinate} coordinate Coordinate.
	 * @param {string} template A template string with `{x}` and `{y}` placeholders
	 *     that will be replaced by first and second coordinate values.
	 * @param {number=} opt_fractionDigits The number of digits to include
	 *    after the decimal point. Default is `0`.
	 * @return {string} Formatted coordinate.
	 * @api
	 */
	function format(coordinate, template, opt_fractionDigits) {
	    if (coordinate) {
	        return template.replace('{x}', coordinate[0].toFixed(opt_fractionDigits)).replace('{y}', coordinate[1].toFixed(opt_fractionDigits));
	    } else {
	        return '';
	    }
	}
	/**
	 * @param {Coordinate} coordinate1 First coordinate.
	 * @param {Coordinate} coordinate2 Second coordinate.
	 * @return {boolean} The two coordinates are equal.
	 */
	function equals(coordinate1, coordinate2) {
	    var equals = true;
	    for (var i = coordinate1.length - 1; i >= 0; --i) {
	        if (coordinate1[i] != coordinate2[i]) {
	            equals = false;
	            break;
	        }
	    }
	    return equals;
	}
	/**
	 * Rotate `coordinate` by `angle`. `coordinate` is modified in place and
	 * returned by the function.
	 *
	 * Example:
	 *
	 *     import {rotate} from 'ol/coordinate';
	 *
	 *     var coord = [7.85, 47.983333];
	 *     var rotateRadians = Math.PI / 2; // 90 degrees
	 *     rotate(coord, rotateRadians);
	 *     // coord is now [-47.983333, 7.85]
	 *
	 * @param {Coordinate} coordinate Coordinate.
	 * @param {number} angle Angle in radian.
	 * @return {Coordinate} Coordinate.
	 * @api
	 */
	function rotate(coordinate, angle) {
	    var cosAngle = Math.cos(angle);
	    var sinAngle = Math.sin(angle);
	    var x = coordinate[0] * cosAngle - coordinate[1] * sinAngle;
	    var y = coordinate[1] * cosAngle + coordinate[0] * sinAngle;
	    coordinate[0] = x;
	    coordinate[1] = y;
	    return coordinate;
	}
	/**
	 * Scale `coordinate` by `scale`. `coordinate` is modified in place and returned
	 * by the function.
	 *
	 * Example:
	 *
	 *     import {scale as scaleCoordinate} from 'ol/coordinate';
	 *
	 *     var coord = [7.85, 47.983333];
	 *     var scale = 1.2;
	 *     scaleCoordinate(coord, scale);
	 *     // coord is now [9.42, 57.5799996]
	 *
	 * @param {Coordinate} coordinate Coordinate.
	 * @param {number} scale Scale factor.
	 * @return {Coordinate} Coordinate.
	 */
	function scale(coordinate, scale) {
	    coordinate[0] *= scale;
	    coordinate[1] *= scale;
	    return coordinate;
	}
	/**
	 * @param {Coordinate} coord1 First coordinate.
	 * @param {Coordinate} coord2 Second coordinate.
	 * @return {number} Squared distance between coord1 and coord2.
	 */
	function squaredDistance(coord1, coord2) {
	    var dx = coord1[0] - coord2[0];
	    var dy = coord1[1] - coord2[1];
	    return dx * dx + dy * dy;
	}
	/**
	 * @param {Coordinate} coord1 First coordinate.
	 * @param {Coordinate} coord2 Second coordinate.
	 * @return {number} Distance between coord1 and coord2.
	 */
	function distance(coord1, coord2) {
	    return Math.sqrt(squaredDistance(coord1, coord2));
	}
	/**
	 * Calculate the squared distance from a coordinate to a line segment.
	 *
	 * @param {Coordinate} coordinate Coordinate of the point.
	 * @param {Array<Coordinate>} segment Line segment (2
	 * coordinates).
	 * @return {number} Squared distance from the point to the line segment.
	 */
	function squaredDistanceToSegment(coordinate, segment) {
	    return squaredDistance(coordinate, closestOnSegment(coordinate, segment));
	}
	/**
	 * Format a geographic coordinate with the hemisphere, degrees, minutes, and
	 * seconds.
	 *
	 * Example without specifying fractional digits:
	 *
	 *     import {toStringHDMS} from 'ol/coordinate';
	 *
	 *     var coord = [7.85, 47.983333];
	 *     var out = toStringHDMS(coord);
	 *     // out is now '47° 58′ 60″ N 7° 50′ 60″ E'
	 *
	 * Example explicitly specifying 1 fractional digit:
	 *
	 *     import {toStringHDMS} from 'ol/coordinate';
	 *
	 *     var coord = [7.85, 47.983333];
	 *     var out = toStringHDMS(coord, 1);
	 *     // out is now '47° 58′ 60.0″ N 7° 50′ 60.0″ E'
	 *
	 * @param {Coordinate} coordinate Coordinate.
	 * @param {number=} opt_fractionDigits The number of digits to include
	 *    after the decimal point. Default is `0`.
	 * @return {string} Hemisphere, degrees, minutes and seconds.
	 * @api
	 */
	function toStringHDMS(coordinate, opt_fractionDigits) {
	    if (coordinate) {
	        return degreesToStringHDMS('NS', coordinate[1], opt_fractionDigits) + ' ' + degreesToStringHDMS('EW', coordinate[0], opt_fractionDigits);
	    } else {
	        return '';
	    }
	}
	/**
	 * Format a coordinate as a comma delimited string.
	 *
	 * Example without specifying fractional digits:
	 *
	 *     import {toStringXY} from 'ol/coordinate';
	 *
	 *     var coord = [7.85, 47.983333];
	 *     var out = toStringXY(coord);
	 *     // out is now '8, 48'
	 *
	 * Example explicitly specifying 1 fractional digit:
	 *
	 *     import {toStringXY} from 'ol/coordinate';
	 *
	 *     var coord = [7.85, 47.983333];
	 *     var out = toStringXY(coord, 1);
	 *     // out is now '7.8, 48.0'
	 *
	 * @param {Coordinate} coordinate Coordinate.
	 * @param {number=} opt_fractionDigits The number of digits to include
	 *    after the decimal point. Default is `0`.
	 * @return {string} XY.
	 * @api
	 */
	function toStringXY(coordinate, opt_fractionDigits) {
	    return format(coordinate, '{x}, {y}', opt_fractionDigits);
	}
	//# sourceMappingURL=coordinate.js.map

/***/ }),
/* 85 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	
	var _extent = __webpack_require__(4);
	
	var _GeometryType = __webpack_require__(22);
	
	var _GeometryType2 = _interopRequireDefault(_GeometryType);
	
	var _SimpleGeometry = __webpack_require__(64);
	
	var _SimpleGeometry2 = _interopRequireDefault(_SimpleGeometry);
	
	var _deflate = __webpack_require__(72);
	
	var _math = __webpack_require__(19);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var __extends = undefined && undefined.__extends || function () {
	    var _extendStatics = function extendStatics(d, b) {
	        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	            d.__proto__ = b;
	        } || function (d, b) {
	            for (var p in b) {
	                if (b.hasOwnProperty(p)) d[p] = b[p];
	            }
	        };
	        return _extendStatics(d, b);
	    };
	    return function (d, b) {
	        _extendStatics(d, b);
	        function __() {
	            this.constructor = d;
	        }
	        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	    };
	}();
	/**
	 * @module ol/geom/Point
	 */
	
	/**
	 * @classdesc
	 * Point geometry.
	 *
	 * @api
	 */
	var Point = /** @class */function (_super) {
	    __extends(Point, _super);
	    /**
	     * @param {import("../coordinate.js").Coordinate} coordinates Coordinates.
	     * @param {import("./GeometryLayout.js").default=} opt_layout Layout.
	     */
	    function Point(coordinates, opt_layout) {
	        var _this = _super.call(this) || this;
	        _this.setCoordinates(coordinates, opt_layout);
	        return _this;
	    }
	    /**
	     * Make a complete copy of the geometry.
	     * @return {!Point} Clone.
	     * @override
	     * @api
	     */
	    Point.prototype.clone = function () {
	        var point = new Point(this.flatCoordinates.slice(), this.layout);
	        return point;
	    };
	    /**
	     * @inheritDoc
	     */
	    Point.prototype.closestPointXY = function (x, y, closestPoint, minSquaredDistance) {
	        var flatCoordinates = this.flatCoordinates;
	        var squaredDistance = (0, _math.squaredDistance)(x, y, flatCoordinates[0], flatCoordinates[1]);
	        if (squaredDistance < minSquaredDistance) {
	            var stride = this.stride;
	            for (var i = 0; i < stride; ++i) {
	                closestPoint[i] = flatCoordinates[i];
	            }
	            closestPoint.length = stride;
	            return squaredDistance;
	        } else {
	            return minSquaredDistance;
	        }
	    };
	    /**
	     * Return the coordinate of the point.
	     * @return {import("../coordinate.js").Coordinate} Coordinates.
	     * @override
	     * @api
	     */
	    Point.prototype.getCoordinates = function () {
	        return !this.flatCoordinates ? [] : this.flatCoordinates.slice();
	    };
	    /**
	     * @inheritDoc
	     */
	    Point.prototype.computeExtent = function (extent) {
	        return (0, _extent.createOrUpdateFromCoordinate)(this.flatCoordinates, extent);
	    };
	    /**
	     * @inheritDoc
	     * @api
	     */
	    Point.prototype.getType = function () {
	        return _GeometryType2.default.POINT;
	    };
	    /**
	     * @inheritDoc
	     * @api
	     */
	    Point.prototype.intersectsExtent = function (extent) {
	        return (0, _extent.containsXY)(extent, this.flatCoordinates[0], this.flatCoordinates[1]);
	    };
	    /**
	     * @inheritDoc
	     * @api
	     */
	    Point.prototype.setCoordinates = function (coordinates, opt_layout) {
	        this.setLayout(opt_layout, coordinates, 0);
	        if (!this.flatCoordinates) {
	            this.flatCoordinates = [];
	        }
	        this.flatCoordinates.length = (0, _deflate.deflateCoordinate)(this.flatCoordinates, 0, coordinates, this.stride);
	        this.changed();
	    };
	    return Point;
	}(_SimpleGeometry2.default);
	exports.default = Point;
	//# sourceMappingURL=Point.js.map

/***/ }),
/* 86 */
/***/ (function(module, exports) {

	"use strict";
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	exports.inflateCoordinates = inflateCoordinates;
	exports.inflateCoordinatesArray = inflateCoordinatesArray;
	exports.inflateMultiCoordinatesArray = inflateMultiCoordinatesArray;
	/**
	 * @module ol/geom/flat/inflate
	 */
	/**
	 * @param {Array<number>} flatCoordinates Flat coordinates.
	 * @param {number} offset Offset.
	 * @param {number} end End.
	 * @param {number} stride Stride.
	 * @param {Array<import("../../coordinate.js").Coordinate>=} opt_coordinates Coordinates.
	 * @return {Array<import("../../coordinate.js").Coordinate>} Coordinates.
	 */
	function inflateCoordinates(flatCoordinates, offset, end, stride, opt_coordinates) {
	    var coordinates = opt_coordinates !== undefined ? opt_coordinates : [];
	    var i = 0;
	    for (var j = offset; j < end; j += stride) {
	        coordinates[i++] = flatCoordinates.slice(j, j + stride);
	    }
	    coordinates.length = i;
	    return coordinates;
	}
	/**
	 * @param {Array<number>} flatCoordinates Flat coordinates.
	 * @param {number} offset Offset.
	 * @param {Array<number>} ends Ends.
	 * @param {number} stride Stride.
	 * @param {Array<Array<import("../../coordinate.js").Coordinate>>=} opt_coordinatess Coordinatess.
	 * @return {Array<Array<import("../../coordinate.js").Coordinate>>} Coordinatess.
	 */
	function inflateCoordinatesArray(flatCoordinates, offset, ends, stride, opt_coordinatess) {
	    var coordinatess = opt_coordinatess !== undefined ? opt_coordinatess : [];
	    var i = 0;
	    for (var j = 0, jj = ends.length; j < jj; ++j) {
	        var end = ends[j];
	        coordinatess[i++] = inflateCoordinates(flatCoordinates, offset, end, stride, coordinatess[i]);
	        offset = end;
	    }
	    coordinatess.length = i;
	    return coordinatess;
	}
	/**
	 * @param {Array<number>} flatCoordinates Flat coordinates.
	 * @param {number} offset Offset.
	 * @param {Array<Array<number>>} endss Endss.
	 * @param {number} stride Stride.
	 * @param {Array<Array<Array<import("../../coordinate.js").Coordinate>>>=} opt_coordinatesss
	 *     Coordinatesss.
	 * @return {Array<Array<Array<import("../../coordinate.js").Coordinate>>>} Coordinatesss.
	 */
	function inflateMultiCoordinatesArray(flatCoordinates, offset, endss, stride, opt_coordinatesss) {
	    var coordinatesss = opt_coordinatesss !== undefined ? opt_coordinatesss : [];
	    var i = 0;
	    for (var j = 0, jj = endss.length; j < jj; ++j) {
	        var ends = endss[j];
	        coordinatesss[i++] = inflateCoordinatesArray(flatCoordinates, offset, ends, stride, coordinatesss[i]);
	        offset = ends[ends.length - 1];
	    }
	    coordinatesss.length = i;
	    return coordinatesss;
	}
	//# sourceMappingURL=inflate.js.map

/***/ }),
/* 87 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	
	var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; /**
	                                                                                                                                                                                                                                                                               * @module ol/style/Style
	                                                                                                                                                                                                                                                                               */
	
	
	exports.toFunction = toFunction;
	exports.createDefaultStyle = createDefaultStyle;
	exports.createEditingStyle = createEditingStyle;
	
	var _asserts = __webpack_require__(29);
	
	var _GeometryType = __webpack_require__(22);
	
	var _GeometryType2 = _interopRequireDefault(_GeometryType);
	
	var _Circle = __webpack_require__(182);
	
	var _Circle2 = _interopRequireDefault(_Circle);
	
	var _Fill = __webpack_require__(149);
	
	var _Fill2 = _interopRequireDefault(_Fill);
	
	var _Stroke = __webpack_require__(184);
	
	var _Stroke2 = _interopRequireDefault(_Stroke);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	/**
	 * A function that takes an {@link module:ol/Feature} and a `{number}`
	 * representing the view's resolution. The function should return a
	 * {@link module:ol/style/Style} or an array of them. This way e.g. a
	 * vector layer can be styled.
	 *
	 * @typedef {function(import("../Feature.js").FeatureLike, number):(Style|Array<Style>)} StyleFunction
	 */
	/**
	 * A {@link Style}, an array of {@link Style}, or a {@link StyleFunction}.
	 * @typedef {Style|Array<Style>|StyleFunction} StyleLike
	 */
	/**
	 * A function that takes an {@link module:ol/Feature} as argument and returns an
	 * {@link module:ol/geom/Geometry} that will be rendered and styled for the feature.
	 *
	 * @typedef {function(import("../Feature.js").FeatureLike):
	 *     (import("../geom/Geometry.js").default|import("../render/Feature.js").default|undefined)} GeometryFunction
	 */
	/**
	 * Custom renderer function. Takes two arguments:
	 *
	 * 1. The pixel coordinates of the geometry in GeoJSON notation.
	 * 2. The {@link module:ol/render~State} of the layer renderer.
	 *
	 * @typedef {function((import("../coordinate.js").Coordinate|Array<import("../coordinate.js").Coordinate>|Array<Array<import("../coordinate.js").Coordinate>>),import("../render.js").State): void}
	 * RenderFunction
	 */
	/**
	 * @typedef {Object} Options
	 * @property {string|import("../geom/Geometry.js").default|GeometryFunction} [geometry] Feature property or geometry
	 * or function returning a geometry to render for this style.
	 * @property {import("./Fill.js").default} [fill] Fill style.
	 * @property {import("./Image.js").default} [image] Image style.
	 * @property {RenderFunction} [renderer] Custom renderer. When configured, `fill`, `stroke` and `image` will be
	 * ignored, and the provided function will be called with each render frame for each geometry.
	 * @property {import("./Stroke.js").default} [stroke] Stroke style.
	 * @property {import("./Text.js").default} [text] Text style.
	 * @property {number} [zIndex] Z index.
	 */
	/**
	 * @classdesc
	 * Container for vector feature rendering styles. Any changes made to the style
	 * or its children through `set*()` methods will not take effect until the
	 * feature or layer that uses the style is re-rendered.
	 *
	 * ## Feature styles
	 *
	 * If no style is defined, the following default style is used:
	 * ```js
	 *  import {Fill, Stroke, Circle, Style} from 'ol/style';
	 *
	 *  var fill = new Fill({
	 *    color: 'rgba(255,255,255,0.4)'
	 *  });
	 *  var stroke = new Stroke({
	 *    color: '#3399CC',
	 *    width: 1.25
	 *  });
	 *  var styles = [
	 *    new Style({
	 *      image: new Circle({
	 *        fill: fill,
	 *        stroke: stroke,
	 *        radius: 5
	 *      }),
	 *      fill: fill,
	 *      stroke: stroke
	 *    })
	 *  ];
	 * ```
	 *
	 * A separate editing style has the following defaults:
	 * ```js
	 *  import {Fill, Stroke, Circle, Style} from 'ol/style';
	 *  import GeometryType from 'ol/geom/GeometryType';
	 *
	 *  var white = [255, 255, 255, 1];
	 *  var blue = [0, 153, 255, 1];
	 *  var width = 3;
	 *  styles[GeometryType.POLYGON] = [
	 *    new Style({
	 *      fill: new Fill({
	 *        color: [255, 255, 255, 0.5]
	 *      })
	 *    })
	 *  ];
	 *  styles[GeometryType.MULTI_POLYGON] =
	 *      styles[GeometryType.POLYGON];
	 *  styles[GeometryType.LINE_STRING] = [
	 *    new Style({
	 *      stroke: new Stroke({
	 *        color: white,
	 *        width: width + 2
	 *      })
	 *    }),
	 *    new Style({
	 *      stroke: new Stroke({
	 *        color: blue,
	 *        width: width
	 *      })
	 *    })
	 *  ];
	 *  styles[GeometryType.MULTI_LINE_STRING] =
	 *      styles[GeometryType.LINE_STRING];
	 *  styles[GeometryType.POINT] = [
	 *    new Style({
	 *      image: new Circle({
	 *        radius: width * 2,
	 *        fill: new Fill({
	 *          color: blue
	 *        }),
	 *        stroke: new Stroke({
	 *          color: white,
	 *          width: width / 2
	 *        })
	 *      }),
	 *      zIndex: Infinity
	 *    })
	 *  ];
	 *  styles[GeometryType.MULTI_POINT] =
	 *      styles[GeometryType.POINT];
	 *  styles[GeometryType.GEOMETRY_COLLECTION] =
	 *      styles[GeometryType.POLYGON].concat(
	 *          styles[GeometryType.LINE_STRING],
	 *          styles[GeometryType.POINT]
	 *      );
	 * ```
	 *
	 * @api
	 */
	var Style = /** @class */function () {
	    /**
	     * @param {Options=} opt_options Style options.
	     */
	    function Style(opt_options) {
	        var options = opt_options || {};
	        /**
	         * @private
	         * @type {string|import("../geom/Geometry.js").default|GeometryFunction}
	         */
	        this.geometry_ = null;
	        /**
	         * @private
	         * @type {!GeometryFunction}
	         */
	        this.geometryFunction_ = defaultGeometryFunction;
	        if (options.geometry !== undefined) {
	            this.setGeometry(options.geometry);
	        }
	        /**
	         * @private
	         * @type {import("./Fill.js").default}
	         */
	        this.fill_ = options.fill !== undefined ? options.fill : null;
	        /**
	           * @private
	           * @type {import("./Image.js").default}
	           */
	        this.image_ = options.image !== undefined ? options.image : null;
	        /**
	         * @private
	         * @type {RenderFunction|null}
	         */
	        this.renderer_ = options.renderer !== undefined ? options.renderer : null;
	        /**
	         * @private
	         * @type {import("./Stroke.js").default}
	         */
	        this.stroke_ = options.stroke !== undefined ? options.stroke : null;
	        /**
	         * @private
	         * @type {import("./Text.js").default}
	         */
	        this.text_ = options.text !== undefined ? options.text : null;
	        /**
	         * @private
	         * @type {number|undefined}
	         */
	        this.zIndex_ = options.zIndex;
	    }
	    /**
	     * Clones the style.
	     * @return {Style} The cloned style.
	     * @api
	     */
	    Style.prototype.clone = function () {
	        var geometry = this.getGeometry();
	        if (geometry && (typeof geometry === 'undefined' ? 'undefined' : _typeof(geometry)) === 'object') {
	            geometry = /** @type {import("../geom/Geometry.js").default} */geometry.clone();
	        }
	        return new Style({
	            geometry: geometry,
	            fill: this.getFill() ? this.getFill().clone() : undefined,
	            image: this.getImage() ? this.getImage().clone() : undefined,
	            stroke: this.getStroke() ? this.getStroke().clone() : undefined,
	            text: this.getText() ? this.getText().clone() : undefined,
	            zIndex: this.getZIndex()
	        });
	    };
	    /**
	     * Get the custom renderer function that was configured with
	     * {@link #setRenderer} or the `renderer` constructor option.
	     * @return {RenderFunction|null} Custom renderer function.
	     * @api
	     */
	    Style.prototype.getRenderer = function () {
	        return this.renderer_;
	    };
	    /**
	     * Sets a custom renderer function for this style. When set, `fill`, `stroke`
	     * and `image` options of the style will be ignored.
	     * @param {RenderFunction|null} renderer Custom renderer function.
	     * @api
	     */
	    Style.prototype.setRenderer = function (renderer) {
	        this.renderer_ = renderer;
	    };
	    /**
	     * Get the geometry to be rendered.
	     * @return {string|import("../geom/Geometry.js").default|GeometryFunction}
	     * Feature property or geometry or function that returns the geometry that will
	     * be rendered with this style.
	     * @api
	     */
	    Style.prototype.getGeometry = function () {
	        return this.geometry_;
	    };
	    /**
	     * Get the function used to generate a geometry for rendering.
	     * @return {!GeometryFunction} Function that is called with a feature
	     * and returns the geometry to render instead of the feature's geometry.
	     * @api
	     */
	    Style.prototype.getGeometryFunction = function () {
	        return this.geometryFunction_;
	    };
	    /**
	     * Get the fill style.
	     * @return {import("./Fill.js").default} Fill style.
	     * @api
	     */
	    Style.prototype.getFill = function () {
	        return this.fill_;
	    };
	    /**
	     * Set the fill style.
	     * @param {import("./Fill.js").default} fill Fill style.
	     * @api
	     */
	    Style.prototype.setFill = function (fill) {
	        this.fill_ = fill;
	    };
	    /**
	     * Get the image style.
	     * @return {import("./Image.js").default} Image style.
	     * @api
	     */
	    Style.prototype.getImage = function () {
	        return this.image_;
	    };
	    /**
	     * Set the image style.
	     * @param {import("./Image.js").default} image Image style.
	     * @api
	     */
	    Style.prototype.setImage = function (image) {
	        this.image_ = image;
	    };
	    /**
	     * Get the stroke style.
	     * @return {import("./Stroke.js").default} Stroke style.
	     * @api
	     */
	    Style.prototype.getStroke = function () {
	        return this.stroke_;
	    };
	    /**
	     * Set the stroke style.
	     * @param {import("./Stroke.js").default} stroke Stroke style.
	     * @api
	     */
	    Style.prototype.setStroke = function (stroke) {
	        this.stroke_ = stroke;
	    };
	    /**
	     * Get the text style.
	     * @return {import("./Text.js").default} Text style.
	     * @api
	     */
	    Style.prototype.getText = function () {
	        return this.text_;
	    };
	    /**
	     * Set the text style.
	     * @param {import("./Text.js").default} text Text style.
	     * @api
	     */
	    Style.prototype.setText = function (text) {
	        this.text_ = text;
	    };
	    /**
	     * Get the z-index for the style.
	     * @return {number|undefined} ZIndex.
	     * @api
	     */
	    Style.prototype.getZIndex = function () {
	        return this.zIndex_;
	    };
	    /**
	     * Set a geometry that is rendered instead of the feature's geometry.
	     *
	     * @param {string|import("../geom/Geometry.js").default|GeometryFunction} geometry
	     *     Feature property or geometry or function returning a geometry to render
	     *     for this style.
	     * @api
	     */
	    Style.prototype.setGeometry = function (geometry) {
	        if (typeof geometry === 'function') {
	            this.geometryFunction_ = geometry;
	        } else if (typeof geometry === 'string') {
	            this.geometryFunction_ = function (feature) {
	                return (
	                    /** @type {import("../geom/Geometry.js").default} */feature.get(geometry)
	                );
	            };
	        } else if (!geometry) {
	            this.geometryFunction_ = defaultGeometryFunction;
	        } else if (geometry !== undefined) {
	            this.geometryFunction_ = function () {
	                return (
	                    /** @type {import("../geom/Geometry.js").default} */geometry
	                );
	            };
	        }
	        this.geometry_ = geometry;
	    };
	    /**
	     * Set the z-index.
	     *
	     * @param {number|undefined} zIndex ZIndex.
	     * @api
	     */
	    Style.prototype.setZIndex = function (zIndex) {
	        this.zIndex_ = zIndex;
	    };
	    return Style;
	}();
	/**
	 * Convert the provided object into a style function.  Functions passed through
	 * unchanged.  Arrays of Style or single style objects wrapped in a
	 * new style function.
	 * @param {StyleFunction|Array<Style>|Style} obj
	 *     A style function, a single style, or an array of styles.
	 * @return {StyleFunction} A style function.
	 */
	function toFunction(obj) {
	    var styleFunction;
	    if (typeof obj === 'function') {
	        styleFunction = obj;
	    } else {
	        /**
	         * @type {Array<Style>}
	         */
	        var styles_1;
	        if (Array.isArray(obj)) {
	            styles_1 = obj;
	        } else {
	            (0, _asserts.assert)(typeof /** @type {?} */obj.getZIndex === 'function', 41); // Expected an `Style` or an array of `Style`
	            var style = /** @type {Style} */obj;
	            styles_1 = [style];
	        }
	        styleFunction = function styleFunction() {
	            return styles_1;
	        };
	    }
	    return styleFunction;
	}
	/**
	 * @type {Array<Style>}
	 */
	var defaultStyles = null;
	/**
	 * @param {import("../Feature.js").FeatureLike} feature Feature.
	 * @param {number} resolution Resolution.
	 * @return {Array<Style>} Style.
	 */
	function createDefaultStyle(feature, resolution) {
	    // We don't use an immediately-invoked function
	    // and a closure so we don't get an error at script evaluation time in
	    // browsers that do not support Canvas. (import("./Circle.js").CircleStyle does
	    // canvas.getContext('2d') at construction time, which will cause an.error
	    // in such browsers.)
	    if (!defaultStyles) {
	        var fill = new _Fill2.default({
	            color: 'rgba(255,255,255,0.4)'
	        });
	        var stroke = new _Stroke2.default({
	            color: '#3399CC',
	            width: 1.25
	        });
	        defaultStyles = [new Style({
	            image: new _Circle2.default({
	                fill: fill,
	                stroke: stroke,
	                radius: 5
	            }),
	            fill: fill,
	            stroke: stroke
	        })];
	    }
	    return defaultStyles;
	}
	/**
	 * Default styles for editing features.
	 * @return {Object<import("../geom/GeometryType.js").default, Array<Style>>} Styles
	 */
	function createEditingStyle() {
	    /** @type {Object<import("../geom/GeometryType.js").default, Array<Style>>} */
	    var styles = {};
	    var white = [255, 255, 255, 1];
	    var blue = [0, 153, 255, 1];
	    var width = 3;
	    styles[_GeometryType2.default.POLYGON] = [new Style({
	        fill: new _Fill2.default({
	            color: [255, 255, 255, 0.5]
	        })
	    })];
	    styles[_GeometryType2.default.MULTI_POLYGON] = styles[_GeometryType2.default.POLYGON];
	    styles[_GeometryType2.default.LINE_STRING] = [new Style({
	        stroke: new _Stroke2.default({
	            color: white,
	            width: width + 2
	        })
	    }), new Style({
	        stroke: new _Stroke2.default({
	            color: blue,
	            width: width
	        })
	    })];
	    styles[_GeometryType2.default.MULTI_LINE_STRING] = styles[_GeometryType2.default.LINE_STRING];
	    styles[_GeometryType2.default.CIRCLE] = styles[_GeometryType2.default.POLYGON].concat(styles[_GeometryType2.default.LINE_STRING]);
	    styles[_GeometryType2.default.POINT] = [new Style({
	        image: new _Circle2.default({
	            radius: width * 2,
	            fill: new _Fill2.default({
	                color: blue
	            }),
	            stroke: new _Stroke2.default({
	                color: white,
	                width: width / 2
	            })
	        }),
	        zIndex: Infinity
	    })];
	    styles[_GeometryType2.default.MULTI_POINT] = styles[_GeometryType2.default.POINT];
	    styles[_GeometryType2.default.GEOMETRY_COLLECTION] = styles[_GeometryType2.default.POLYGON].concat(styles[_GeometryType2.default.LINE_STRING], styles[_GeometryType2.default.POINT]);
	    return styles;
	}
	/**
	 * Function that is called with a feature and returns its default geometry.
	 * @param {import("../Feature.js").FeatureLike} feature Feature to get the geometry for.
	 * @return {import("../geom/Geometry.js").default|import("../render/Feature.js").default|undefined} Geometry to render.
	 */
	function defaultGeometryFunction(feature) {
	    return feature.getGeometry();
	}
	exports.default = Style;
	//# sourceMappingURL=Style.js.map

/***/ }),
/* 88 */
/***/ (function(module, exports) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	exports.createOrUpdate = createOrUpdate;
	exports.getKeyZXY = getKeyZXY;
	exports.getKey = getKey;
	exports.fromKey = fromKey;
	exports.hash = hash;
	exports.withinExtentAndZ = withinExtentAndZ;
	/**
	 * @module ol/tilecoord
	 */
	/**
	 * An array of three numbers representing the location of a tile in a tile
	 * grid. The order is `z` (zoom level), `x` (column), and `y` (row).
	 * @typedef {Array<number>} TileCoord
	 * @api
	 */
	/**
	 * @param {number} z Z.
	 * @param {number} x X.
	 * @param {number} y Y.
	 * @param {TileCoord=} opt_tileCoord Tile coordinate.
	 * @return {TileCoord} Tile coordinate.
	 */
	function createOrUpdate(z, x, y, opt_tileCoord) {
	    if (opt_tileCoord !== undefined) {
	        opt_tileCoord[0] = z;
	        opt_tileCoord[1] = x;
	        opt_tileCoord[2] = y;
	        return opt_tileCoord;
	    } else {
	        return [z, x, y];
	    }
	}
	/**
	 * @param {number} z Z.
	 * @param {number} x X.
	 * @param {number} y Y.
	 * @return {string} Key.
	 */
	function getKeyZXY(z, x, y) {
	    return z + '/' + x + '/' + y;
	}
	/**
	 * Get the key for a tile coord.
	 * @param {TileCoord} tileCoord The tile coord.
	 * @return {string} Key.
	 */
	function getKey(tileCoord) {
	    return getKeyZXY(tileCoord[0], tileCoord[1], tileCoord[2]);
	}
	/**
	 * Get a tile coord given a key.
	 * @param {string} key The tile coord key.
	 * @return {TileCoord} The tile coord.
	 */
	function fromKey(key) {
	    return key.split('/').map(Number);
	}
	/**
	 * @param {TileCoord} tileCoord Tile coord.
	 * @return {number} Hash.
	 */
	function hash(tileCoord) {
	    return (tileCoord[1] << tileCoord[0]) + tileCoord[2];
	}
	/**
	 * @param {TileCoord} tileCoord Tile coordinate.
	 * @param {!import("./tilegrid/TileGrid.js").default} tileGrid Tile grid.
	 * @return {boolean} Tile coordinate is within extent and zoom level range.
	 */
	function withinExtentAndZ(tileCoord, tileGrid) {
	    var z = tileCoord[0];
	    var x = tileCoord[1];
	    var y = tileCoord[2];
	    if (tileGrid.getMinZoom() > z || z > tileGrid.getMaxZoom()) {
	        return false;
	    }
	    var extent = tileGrid.getExtent();
	    var tileRange;
	    if (!extent) {
	        tileRange = tileGrid.getFullTileRange(z);
	    } else {
	        tileRange = tileGrid.getTileRangeForExtentAndZ(extent, z);
	    }
	    if (!tileRange) {
	        return true;
	    } else {
	        return tileRange.containsXY(x, y);
	    }
	}
	//# sourceMappingURL=tilecoord.js.map

/***/ }),
/* 89 */
/***/ (function(module, exports) {

	var isES5 = (function(){
	    "use strict";
	    return this === undefined;
	})();
	
	if (isES5) {
	    module.exports = {
	        freeze: Object.freeze,
	        defineProperty: Object.defineProperty,
	        getDescriptor: Object.getOwnPropertyDescriptor,
	        keys: Object.keys,
	        names: Object.getOwnPropertyNames,
	        getPrototypeOf: Object.getPrototypeOf,
	        isArray: Array.isArray,
	        isES5: isES5,
	        propertyIsWritable: function(obj, prop) {
	            var descriptor = Object.getOwnPropertyDescriptor(obj, prop);
	            return !!(!descriptor || descriptor.writable || descriptor.set);
	        }
	    };
	} else {
	    var has = {}.hasOwnProperty;
	    var str = {}.toString;
	    var proto = {}.constructor.prototype;
	
	    var ObjectKeys = function (o) {
	        var ret = [];
	        for (var key in o) {
	            if (has.call(o, key)) {
	                ret.push(key);
	            }
	        }
	        return ret;
	    };
	
	    var ObjectGetDescriptor = function(o, key) {
	        return {value: o[key]};
	    };
	
	    var ObjectDefineProperty = function (o, key, desc) {
	        o[key] = desc.value;
	        return o;
	    };
	
	    var ObjectFreeze = function (obj) {
	        return obj;
	    };
	
	    var ObjectGetPrototypeOf = function (obj) {
	        try {
	            return Object(obj).constructor.prototype;
	        }
	        catch (e) {
	            return proto;
	        }
	    };
	
	    var ArrayIsArray = function (obj) {
	        try {
	            return str.call(obj) === "[object Array]";
	        }
	        catch(e) {
	            return false;
	        }
	    };
	
	    module.exports = {
	        isArray: ArrayIsArray,
	        keys: ObjectKeys,
	        names: ObjectKeys,
	        defineProperty: ObjectDefineProperty,
	        getDescriptor: ObjectGetDescriptor,
	        freeze: ObjectFreeze,
	        getPrototypeOf: ObjectGetPrototypeOf,
	        isES5: isES5,
	        propertyIsWritable: function() {
	            return true;
	        }
	    };
	}


/***/ }),
/* 90 */
/***/ (function(module, exports) {

	module.exports = function (it, Constructor, name, forbiddenField) {
	  if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {
	    throw TypeError(name + ': incorrect invocation!');
	  } return it;
	};


/***/ }),
/* 91 */
/***/ (function(module, exports, __webpack_require__) {

	var ctx = __webpack_require__(52);
	var call = __webpack_require__(327);
	var isArrayIter = __webpack_require__(203);
	var anObject = __webpack_require__(6);
	var toLength = __webpack_require__(21);
	var getIterFn = __webpack_require__(219);
	var BREAK = {};
	var RETURN = {};
	var exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {
	  var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);
	  var f = ctx(fn, that, entries ? 2 : 1);
	  var index = 0;
	  var length, step, iterator, result;
	  if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');
	  // fast case for arrays with default iterator
	  if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {
	    result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);
	    if (result === BREAK || result === RETURN) return result;
	  } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {
	    result = call(iterator, f, step.value, entries);
	    if (result === BREAK || result === RETURN) return result;
	  }
	};
	exports.BREAK = BREAK;
	exports.RETURN = RETURN;


/***/ }),
/* 92 */
/***/ (function(module, exports, __webpack_require__) {

	// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])
	var anObject = __webpack_require__(6);
	var dPs = __webpack_require__(333);
	var enumBugKeys = __webpack_require__(199);
	var IE_PROTO = __webpack_require__(212)('IE_PROTO');
	var Empty = function () { /* empty */ };
	var PROTOTYPE = 'prototype';
	
	// Create object with fake `null` prototype: use iframe Object with cleared prototype
	var createDict = function () {
	  // Thrash, waste and sodomy: IE GC bug
	  var iframe = __webpack_require__(198)('iframe');
	  var i = enumBugKeys.length;
	  var lt = '<';
	  var gt = '>';
	  var iframeDocument;
	  iframe.style.display = 'none';
	  __webpack_require__(201).appendChild(iframe);
	  iframe.src = 'javascript:'; // eslint-disable-line no-script-url
	  // createDict = iframe.contentWindow.Object;
	  // html.removeChild(iframe);
	  iframeDocument = iframe.contentWindow.document;
	  iframeDocument.open();
	  iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);
	  iframeDocument.close();
	  createDict = iframeDocument.F;
	  while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];
	  return createDict();
	};
	
	module.exports = Object.create || function create(O, Properties) {
	  var result;
	  if (O !== null) {
	    Empty[PROTOTYPE] = anObject(O);
	    result = new Empty();
	    Empty[PROTOTYPE] = null;
	    // add "__proto__" for Object.getPrototypeOf polyfill
	    result[IE_PROTO] = O;
	  } else result = createDict();
	  return Properties === undefined ? result : dPs(result, Properties);
	};


/***/ }),
/* 93 */
/***/ (function(module, exports, __webpack_require__) {

	// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)
	var $keys = __webpack_require__(335);
	var hiddenKeys = __webpack_require__(199).concat('length', 'prototype');
	
	exports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {
	  return $keys(O, hiddenKeys);
	};


/***/ }),
/* 94 */
/***/ (function(module, exports, __webpack_require__) {

	// 19.1.2.14 / 15.2.3.14 Object.keys(O)
	var $keys = __webpack_require__(335);
	var enumBugKeys = __webpack_require__(199);
	
	module.exports = Object.keys || function keys(O) {
	  return $keys(O, enumBugKeys);
	};


/***/ }),
/* 95 */
/***/ (function(module, exports) {

	module.exports = function (bitmap, value) {
	  return {
	    enumerable: !(bitmap & 1),
	    configurable: !(bitmap & 2),
	    writable: !(bitmap & 4),
	    value: value
	  };
	};


/***/ }),
/* 96 */
/***/ (function(module, exports, __webpack_require__) {

	var redefine = __webpack_require__(38);
	module.exports = function (target, src, safe) {
	  for (var key in src) redefine(target, key, src[key], safe);
	  return target;
	};


/***/ }),
/* 97 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	var global = __webpack_require__(9);
	var dP = __webpack_require__(26);
	var DESCRIPTORS = __webpack_require__(25);
	var SPECIES = __webpack_require__(20)('species');
	
	module.exports = function (KEY) {
	  var C = global[KEY];
	  if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {
	    configurable: true,
	    get: function () { return this; }
	  });
	};


/***/ }),
/* 98 */
/***/ (function(module, exports) {

	var id = 0;
	var px = Math.random();
	module.exports = function (key) {
	  return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));
	};


/***/ }),
/* 99 */
/***/ (function(module, exports) {

	'use strict';
	
	exports.__esModule = true;
	var errorProps = ['description', 'fileName', 'lineNumber', 'endLineNumber', 'message', 'name', 'number', 'stack'];
	
	function Exception(message, node) {
	  var loc = node && node.loc,
	      line = undefined,
	      endLineNumber = undefined,
	      column = undefined,
	      endColumn = undefined;
	
	  if (loc) {
	    line = loc.start.line;
	    endLineNumber = loc.end.line;
	    column = loc.start.column;
	    endColumn = loc.end.column;
	
	    message += ' - ' + line + ':' + column;
	  }
	
	  var tmp = Error.prototype.constructor.call(this, message);
	
	  // Unfortunately errors are not enumerable in Chrome (at least), so `for prop in tmp` doesn't work.
	  for (var idx = 0; idx < errorProps.length; idx++) {
	    this[errorProps[idx]] = tmp[errorProps[idx]];
	  }
	
	  /* istanbul ignore else */
	  if (Error.captureStackTrace) {
	    Error.captureStackTrace(this, Exception);
	  }
	
	  try {
	    if (loc) {
	      this.lineNumber = line;
	      this.endLineNumber = endLineNumber;
	
	      // Work around issue under safari where we can't directly set the column value
	      /* istanbul ignore next */
	      if (Object.defineProperty) {
	        Object.defineProperty(this, 'column', {
	          value: column,
	          enumerable: true
	        });
	        Object.defineProperty(this, 'endColumn', {
	          value: endColumn,
	          enumerable: true
	        });
	      } else {
	        this.column = column;
	        this.endColumn = endColumn;
	      }
	    }
	  } catch (nop) {
	    /* Ignore if the browser is very particular */
	  }
	}
	
	Exception.prototype = new Error();
	
	exports['default'] = Exception;
	module.exports = exports['default'];
	//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2V4Y2VwdGlvbi5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxJQUFNLFVBQVUsR0FBRyxDQUNqQixhQUFhLEVBQ2IsVUFBVSxFQUNWLFlBQVksRUFDWixlQUFlLEVBQ2YsU0FBUyxFQUNULE1BQU0sRUFDTixRQUFRLEVBQ1IsT0FBTyxDQUNSLENBQUM7O0FBRUYsU0FBUyxTQUFTLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRTtBQUNoQyxNQUFJLEdBQUcsR0FBRyxJQUFJLElBQUksSUFBSSxDQUFDLEdBQUc7TUFDeEIsSUFBSSxZQUFBO01BQ0osYUFBYSxZQUFBO01BQ2IsTUFBTSxZQUFBO01BQ04sU0FBUyxZQUFBLENBQUM7O0FBRVosTUFBSSxHQUFHLEVBQUU7QUFDUCxRQUFJLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7QUFDdEIsaUJBQWEsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQztBQUM3QixVQUFNLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7QUFDMUIsYUFBUyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDOztBQUUzQixXQUFPLElBQUksS0FBSyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsTUFBTSxDQUFDO0dBQ3hDOztBQUVELE1BQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7OztBQUcxRCxPQUFLLElBQUksR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsVUFBVSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsRUFBRTtBQUNoRCxRQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0dBQzlDOzs7QUFHRCxNQUFJLEtBQUssQ0FBQyxpQkFBaUIsRUFBRTtBQUMzQixTQUFLLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0dBQzFDOztBQUVELE1BQUk7QUFDRixRQUFJLEdBQUcsRUFBRTtBQUNQLFVBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO0FBQ3ZCLFVBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDOzs7O0FBSW5DLFVBQUksTUFBTSxDQUFDLGNBQWMsRUFBRTtBQUN6QixjQUFNLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUU7QUFDcEMsZUFBSyxFQUFFLE1BQU07QUFDYixvQkFBVSxFQUFFLElBQUk7U0FDakIsQ0FBQyxDQUFDO0FBQ0gsY0FBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFO0FBQ3ZDLGVBQUssRUFBRSxTQUFTO0FBQ2hCLG9CQUFVLEVBQUUsSUFBSTtTQUNqQixDQUFDLENBQUM7T0FDSixNQUFNO0FBQ0wsWUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7QUFDckIsWUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7T0FDNUI7S0FDRjtHQUNGLENBQUMsT0FBTyxHQUFHLEVBQUU7O0dBRWI7Q0FDRjs7QUFFRCxTQUFTLENBQUMsU0FBUyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7O3FCQUVuQixTQUFTIiwiZmlsZSI6ImV4Y2VwdGlvbi5qcyIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IGVycm9yUHJvcHMgPSBbXG4gICdkZXNjcmlwdGlvbicsXG4gICdmaWxlTmFtZScsXG4gICdsaW5lTnVtYmVyJyxcbiAgJ2VuZExpbmVOdW1iZXInLFxuICAnbWVzc2FnZScsXG4gICduYW1lJyxcbiAgJ251bWJlcicsXG4gICdzdGFjaydcbl07XG5cbmZ1bmN0aW9uIEV4Y2VwdGlvbihtZXNzYWdlLCBub2RlKSB7XG4gIGxldCBsb2MgPSBub2RlICYmIG5vZGUubG9jLFxuICAgIGxpbmUsXG4gICAgZW5kTGluZU51bWJlcixcbiAgICBjb2x1bW4sXG4gICAgZW5kQ29sdW1uO1xuXG4gIGlmIChsb2MpIHtcbiAgICBsaW5lID0gbG9jLnN0YXJ0LmxpbmU7XG4gICAgZW5kTGluZU51bWJlciA9IGxvYy5lbmQubGluZTtcbiAgICBjb2x1bW4gPSBsb2Muc3RhcnQuY29sdW1uO1xuICAgIGVuZENvbHVtbiA9IGxvYy5lbmQuY29sdW1uO1xuXG4gICAgbWVzc2FnZSArPSAnIC0gJyArIGxpbmUgKyAnOicgKyBjb2x1bW47XG4gIH1cblxuICBsZXQgdG1wID0gRXJyb3IucHJvdG90eXBlLmNvbnN0cnVjdG9yLmNhbGwodGhpcywgbWVzc2FnZSk7XG5cbiAgLy8gVW5mb3J0dW5hdGVseSBlcnJvcnMgYXJlIG5vdCBlbnVtZXJhYmxlIGluIENocm9tZSAoYXQgbGVhc3QpLCBzbyBgZm9yIHByb3AgaW4gdG1wYCBkb2Vzbid0IHdvcmsuXG4gIGZvciAobGV0IGlkeCA9IDA7IGlkeCA8IGVycm9yUHJvcHMubGVuZ3RoOyBpZHgrKykge1xuICAgIHRoaXNbZXJyb3JQcm9wc1tpZHhdXSA9IHRtcFtlcnJvclByb3BzW2lkeF1dO1xuICB9XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKSB7XG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgRXhjZXB0aW9uKTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgaWYgKGxvYykge1xuICAgICAgdGhpcy5saW5lTnVtYmVyID0gbGluZTtcbiAgICAgIHRoaXMuZW5kTGluZU51bWJlciA9IGVuZExpbmVOdW1iZXI7XG5cbiAgICAgIC8vIFdvcmsgYXJvdW5kIGlzc3VlIHVuZGVyIHNhZmFyaSB3aGVyZSB3ZSBjYW4ndCBkaXJlY3RseSBzZXQgdGhlIGNvbHVtbiB2YWx1ZVxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgIGlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdjb2x1bW4nLCB7XG4gICAgICAgICAgdmFsdWU6IGNvbHVtbixcbiAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ2VuZENvbHVtbicsIHtcbiAgICAgICAgICB2YWx1ZTogZW5kQ29sdW1uLFxuICAgICAgICAgIGVudW1lcmFibGU6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNvbHVtbiA9IGNvbHVtbjtcbiAgICAgICAgdGhpcy5lbmRDb2x1bW4gPSBlbmRDb2x1bW47XG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIChub3ApIHtcbiAgICAvKiBJZ25vcmUgaWYgdGhlIGJyb3dzZXIgaXMgdmVyeSBwYXJ0aWN1bGFyICovXG4gIH1cbn1cblxuRXhjZXB0aW9uLnByb3RvdHlwZSA9IG5ldyBFcnJvcigpO1xuXG5leHBvcnQgZGVmYXVsdCBFeGNlcHRpb247XG4iXX0=


/***/ }),
/* 100 */
/***/ (function(module, exports) {

	"use strict";
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	/**
	 * @module ol/ImageState
	 */
	/**
	 * @enum {number}
	 */
	exports.default = {
	  IDLE: 0,
	  LOADING: 1,
	  LOADED: 2,
	  ERROR: 3,
	  EMPTY: 4
	};
	//# sourceMappingURL=ImageState.js.map

/***/ }),
/* 101 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	
	var _Disposable = __webpack_require__(122);
	
	var _Disposable2 = _interopRequireDefault(_Disposable);
	
	var _functions = __webpack_require__(31);
	
	var _Event = __webpack_require__(35);
	
	var _Event2 = _interopRequireDefault(_Event);
	
	var _obj = __webpack_require__(23);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var __extends = undefined && undefined.__extends || function () {
	    var _extendStatics = function extendStatics(d, b) {
	        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	            d.__proto__ = b;
	        } || function (d, b) {
	            for (var p in b) {
	                if (b.hasOwnProperty(p)) d[p] = b[p];
	            }
	        };
	        return _extendStatics(d, b);
	    };
	    return function (d, b) {
	        _extendStatics(d, b);
	        function __() {
	            this.constructor = d;
	        }
	        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	    };
	}();
	/**
	 * @module ol/events/Target
	 */
	
	/**
	 * @typedef {EventTarget|Target} EventTargetLike
	 */
	/**
	 * @classdesc
	 * A simplified implementation of the W3C DOM Level 2 EventTarget interface.
	 * See https://www.w3.org/TR/2000/REC-DOM-Level-2-Events-20001113/events.html#Events-EventTarget.
	 *
	 * There are two important simplifications compared to the specification:
	 *
	 * 1. The handling of `useCapture` in `addEventListener` and
	 *    `removeEventListener`. There is no real capture model.
	 * 2. The handling of `stopPropagation` and `preventDefault` on `dispatchEvent`.
	 *    There is no event target hierarchy. When a listener calls
	 *    `stopPropagation` or `preventDefault` on an event object, it means that no
	 *    more listeners after this one will be called. Same as when the listener
	 *    returns false.
	 */
	var Target = /** @class */function (_super) {
	    __extends(Target, _super);
	    /**
	     * @param {*=} opt_target Default event target for dispatched events.
	     */
	    function Target(opt_target) {
	        var _this = _super.call(this) || this;
	        /**
	         * @private
	         * @type {*}
	         */
	        _this.eventTarget_ = opt_target;
	        /**
	         * @private
	         * @type {!Object<string, number>}
	         */
	        _this.pendingRemovals_ = {};
	        /**
	         * @private
	         * @type {!Object<string, number>}
	         */
	        _this.dispatching_ = {};
	        /**
	         * @private
	         * @type {!Object<string, Array<import("../events.js").ListenerFunction>>}
	         */
	        _this.listeners_ = {};
	        return _this;
	    }
	    /**
	     * @param {string} type Type.
	     * @param {import("../events.js").ListenerFunction} listener Listener.
	     */
	    Target.prototype.addEventListener = function (type, listener) {
	        if (!type || !listener) {
	            return;
	        }
	        var listeners = this.listeners_[type];
	        if (!listeners) {
	            listeners = [];
	            this.listeners_[type] = listeners;
	        }
	        if (listeners.indexOf(listener) === -1) {
	            listeners.push(listener);
	        }
	    };
	    /**
	     * Dispatches an event and calls all listeners listening for events
	     * of this type. The event parameter can either be a string or an
	     * Object with a `type` property.
	     *
	     * @param {{type: string,
	     *     target: (EventTargetLike|undefined),
	     *     propagationStopped: (boolean|undefined)}|
	     *     import("./Event.js").default|string} event Event object.
	     * @return {boolean|undefined} `false` if anyone called preventDefault on the
	     *     event object or if any of the listeners returned false.
	     * @api
	     */
	    Target.prototype.dispatchEvent = function (event) {
	        var evt = typeof event === 'string' ? new _Event2.default(event) : event;
	        var type = evt.type;
	        if (!evt.target) {
	            evt.target = this.eventTarget_ || this;
	        }
	        var listeners = this.listeners_[type];
	        var propagate;
	        if (listeners) {
	            if (!(type in this.dispatching_)) {
	                this.dispatching_[type] = 0;
	                this.pendingRemovals_[type] = 0;
	            }
	            ++this.dispatching_[type];
	            for (var i = 0, ii = listeners.length; i < ii; ++i) {
	                if (listeners[i].call(this, evt) === false || evt.propagationStopped) {
	                    propagate = false;
	                    break;
	                }
	            }
	            --this.dispatching_[type];
	            if (this.dispatching_[type] === 0) {
	                var pendingRemovals = this.pendingRemovals_[type];
	                delete this.pendingRemovals_[type];
	                while (pendingRemovals--) {
	                    this.removeEventListener(type, _functions.VOID);
	                }
	                delete this.dispatching_[type];
	            }
	            return propagate;
	        }
	    };
	    /**
	     * @inheritDoc
	     */
	    Target.prototype.disposeInternal = function () {
	        (0, _obj.clear)(this.listeners_);
	    };
	    /**
	     * Get the listeners for a specified event type. Listeners are returned in the
	     * order that they will be called in.
	     *
	     * @param {string} type Type.
	     * @return {Array<import("../events.js").ListenerFunction>} Listeners.
	     */
	    Target.prototype.getListeners = function (type) {
	        return this.listeners_[type];
	    };
	    /**
	     * @param {string=} opt_type Type. If not provided,
	     *     `true` will be returned if this event target has any listeners.
	     * @return {boolean} Has listeners.
	     */
	    Target.prototype.hasListener = function (opt_type) {
	        return opt_type ? opt_type in this.listeners_ : Object.keys(this.listeners_).length > 0;
	    };
	    /**
	     * @param {string} type Type.
	     * @param {import("../events.js").ListenerFunction} listener Listener.
	     */
	    Target.prototype.removeEventListener = function (type, listener) {
	        var listeners = this.listeners_[type];
	        if (listeners) {
	            var index = listeners.indexOf(listener);
	            if (index !== -1) {
	                if (type in this.pendingRemovals_) {
	                    // make listener a no-op, and remove later in #dispatchEvent()
	                    listeners[index] = _functions.VOID;
	                    ++this.pendingRemovals_[type];
	                } else {
	                    listeners.splice(index, 1);
	                    if (listeners.length === 0) {
	                        delete this.listeners_[type];
	                    }
	                }
	            }
	        }
	    };
	    return Target;
	}(_Disposable2.default);
	exports.default = Target;
	//# sourceMappingURL=Target.js.map

/***/ }),
/* 102 */
/***/ (function(module, exports) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	/**
	 * @module ol/geom/GeometryLayout
	 */
	/**
	 * The coordinate layout for geometries, indicating whether a 3rd or 4th z ('Z')
	 * or measure ('M') coordinate is available. Supported values are `'XY'`,
	 * `'XYZ'`, `'XYM'`, `'XYZM'`.
	 * @enum {string}
	 */
	exports.default = {
	  XY: 'XY',
	  XYZ: 'XYZ',
	  XYM: 'XYM',
	  XYZM: 'XYZM'
	};
	//# sourceMappingURL=GeometryLayout.js.map

/***/ }),
/* 103 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	exports.simplifyLineString = simplifyLineString;
	exports.douglasPeucker = douglasPeucker;
	exports.douglasPeuckerArray = douglasPeuckerArray;
	exports.douglasPeuckerMultiArray = douglasPeuckerMultiArray;
	exports.radialDistance = radialDistance;
	exports.snap = snap;
	exports.quantize = quantize;
	exports.quantizeArray = quantizeArray;
	exports.quantizeMultiArray = quantizeMultiArray;
	
	var _math = __webpack_require__(19);
	
	/**
	 * @param {Array<number>} flatCoordinates Flat coordinates.
	 * @param {number} offset Offset.
	 * @param {number} end End.
	 * @param {number} stride Stride.
	 * @param {number} squaredTolerance Squared tolerance.
	 * @param {boolean} highQuality Highest quality.
	 * @param {Array<number>=} opt_simplifiedFlatCoordinates Simplified flat
	 *     coordinates.
	 * @return {Array<number>} Simplified line string.
	 */
	function simplifyLineString(flatCoordinates, offset, end, stride, squaredTolerance, highQuality, opt_simplifiedFlatCoordinates) {
	    var simplifiedFlatCoordinates = opt_simplifiedFlatCoordinates !== undefined ? opt_simplifiedFlatCoordinates : [];
	    if (!highQuality) {
	        end = radialDistance(flatCoordinates, offset, end, stride, squaredTolerance, simplifiedFlatCoordinates, 0);
	        flatCoordinates = simplifiedFlatCoordinates;
	        offset = 0;
	        stride = 2;
	    }
	    simplifiedFlatCoordinates.length = douglasPeucker(flatCoordinates, offset, end, stride, squaredTolerance, simplifiedFlatCoordinates, 0);
	    return simplifiedFlatCoordinates;
	}
	/**
	 * @param {Array<number>} flatCoordinates Flat coordinates.
	 * @param {number} offset Offset.
	 * @param {number} end End.
	 * @param {number} stride Stride.
	 * @param {number} squaredTolerance Squared tolerance.
	 * @param {Array<number>} simplifiedFlatCoordinates Simplified flat
	 *     coordinates.
	 * @param {number} simplifiedOffset Simplified offset.
	 * @return {number} Simplified offset.
	 */
	/**
	 * @module ol/geom/flat/simplify
	 */
	// Based on simplify-js https://github.com/mourner/simplify-js
	// Copyright (c) 2012, Vladimir Agafonkin
	// All rights reserved.
	//
	// Redistribution and use in source and binary forms, with or without
	// modification, are permitted provided that the following conditions are met:
	//
	//    1. Redistributions of source code must retain the above copyright notice,
	//       this list of conditions and the following disclaimer.
	//
	//    2. 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 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 HOLDER 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.
	function douglasPeucker(flatCoordinates, offset, end, stride, squaredTolerance, simplifiedFlatCoordinates, simplifiedOffset) {
	    var n = (end - offset) / stride;
	    if (n < 3) {
	        for (; offset < end; offset += stride) {
	            simplifiedFlatCoordinates[simplifiedOffset++] = flatCoordinates[offset];
	            simplifiedFlatCoordinates[simplifiedOffset++] = flatCoordinates[offset + 1];
	        }
	        return simplifiedOffset;
	    }
	    /** @type {Array<number>} */
	    var markers = new Array(n);
	    markers[0] = 1;
	    markers[n - 1] = 1;
	    /** @type {Array<number>} */
	    var stack = [offset, end - stride];
	    var index = 0;
	    while (stack.length > 0) {
	        var last = stack.pop();
	        var first = stack.pop();
	        var maxSquaredDistance = 0;
	        var x1 = flatCoordinates[first];
	        var y1 = flatCoordinates[first + 1];
	        var x2 = flatCoordinates[last];
	        var y2 = flatCoordinates[last + 1];
	        for (var i = first + stride; i < last; i += stride) {
	            var x = flatCoordinates[i];
	            var y = flatCoordinates[i + 1];
	            var squaredDistance_1 = (0, _math.squaredSegmentDistance)(x, y, x1, y1, x2, y2);
	            if (squaredDistance_1 > maxSquaredDistance) {
	                index = i;
	                maxSquaredDistance = squaredDistance_1;
	            }
	        }
	        if (maxSquaredDistance > squaredTolerance) {
	            markers[(index - offset) / stride] = 1;
	            if (first + stride < index) {
	                stack.push(first, index);
	            }
	            if (index + stride < last) {
	                stack.push(index, last);
	            }
	        }
	    }
	    for (var i = 0; i < n; ++i) {
	        if (markers[i]) {
	            simplifiedFlatCoordinates[simplifiedOffset++] = flatCoordinates[offset + i * stride];
	            simplifiedFlatCoordinates[simplifiedOffset++] = flatCoordinates[offset + i * stride + 1];
	        }
	    }
	    return simplifiedOffset;
	}
	/**
	 * @param {Array<number>} flatCoordinates Flat coordinates.
	 * @param {number} offset Offset.
	 * @param {Array<number>} ends Ends.
	 * @param {number} stride Stride.
	 * @param {number} squaredTolerance Squared tolerance.
	 * @param {Array<number>} simplifiedFlatCoordinates Simplified flat
	 *     coordinates.
	 * @param {number} simplifiedOffset Simplified offset.
	 * @param {Array<number>} simplifiedEnds Simplified ends.
	 * @return {number} Simplified offset.
	 */
	function douglasPeuckerArray(flatCoordinates, offset, ends, stride, squaredTolerance, simplifiedFlatCoordinates, simplifiedOffset, simplifiedEnds) {
	    for (var i = 0, ii = ends.length; i < ii; ++i) {
	        var end = ends[i];
	        simplifiedOffset = douglasPeucker(flatCoordinates, offset, end, stride, squaredTolerance, simplifiedFlatCoordinates, simplifiedOffset);
	        simplifiedEnds.push(simplifiedOffset);
	        offset = end;
	    }
	    return simplifiedOffset;
	}
	/**
	 * @param {Array<number>} flatCoordinates Flat coordinates.
	 * @param {number} offset Offset.
	 * @param {Array<Array<number>>} endss Endss.
	 * @param {number} stride Stride.
	 * @param {number} squaredTolerance Squared tolerance.
	 * @param {Array<number>} simplifiedFlatCoordinates Simplified flat
	 *     coordinates.
	 * @param {number} simplifiedOffset Simplified offset.
	 * @param {Array<Array<number>>} simplifiedEndss Simplified endss.
	 * @return {number} Simplified offset.
	 */
	function douglasPeuckerMultiArray(flatCoordinates, offset, endss, stride, squaredTolerance, simplifiedFlatCoordinates, simplifiedOffset, simplifiedEndss) {
	    for (var i = 0, ii = endss.length; i < ii; ++i) {
	        var ends = endss[i];
	        var simplifiedEnds = [];
	        simplifiedOffset = douglasPeuckerArray(flatCoordinates, offset, ends, stride, squaredTolerance, simplifiedFlatCoordinates, simplifiedOffset, simplifiedEnds);
	        simplifiedEndss.push(simplifiedEnds);
	        offset = ends[ends.length - 1];
	    }
	    return simplifiedOffset;
	}
	/**
	 * @param {Array<number>} flatCoordinates Flat coordinates.
	 * @param {number} offset Offset.
	 * @param {number} end End.
	 * @param {number} stride Stride.
	 * @param {number} squaredTolerance Squared tolerance.
	 * @param {Array<number>} simplifiedFlatCoordinates Simplified flat
	 *     coordinates.
	 * @param {number} simplifiedOffset Simplified offset.
	 * @return {number} Simplified offset.
	 */
	function radialDistance(flatCoordinates, offset, end, stride, squaredTolerance, simplifiedFlatCoordinates, simplifiedOffset) {
	    if (end <= offset + stride) {
	        // zero or one point, no simplification possible, so copy and return
	        for (; offset < end; offset += stride) {
	            simplifiedFlatCoordinates[simplifiedOffset++] = flatCoordinates[offset];
	            simplifiedFlatCoordinates[simplifiedOffset++] = flatCoordinates[offset + 1];
	        }
	        return simplifiedOffset;
	    }
	    var x1 = flatCoordinates[offset];
	    var y1 = flatCoordinates[offset + 1];
	    // copy first point
	    simplifiedFlatCoordinates[simplifiedOffset++] = x1;
	    simplifiedFlatCoordinates[simplifiedOffset++] = y1;
	    var x2 = x1;
	    var y2 = y1;
	    for (offset += stride; offset < end; offset += stride) {
	        x2 = flatCoordinates[offset];
	        y2 = flatCoordinates[offset + 1];
	        if ((0, _math.squaredDistance)(x1, y1, x2, y2) > squaredTolerance) {
	            // copy point at offset
	            simplifiedFlatCoordinates[simplifiedOffset++] = x2;
	            simplifiedFlatCoordinates[simplifiedOffset++] = y2;
	            x1 = x2;
	            y1 = y2;
	        }
	    }
	    if (x2 != x1 || y2 != y1) {
	        // copy last point
	        simplifiedFlatCoordinates[simplifiedOffset++] = x2;
	        simplifiedFlatCoordinates[simplifiedOffset++] = y2;
	    }
	    return simplifiedOffset;
	}
	/**
	 * @param {number} value Value.
	 * @param {number} tolerance Tolerance.
	 * @return {number} Rounded value.
	 */
	function snap(value, tolerance) {
	    return tolerance * Math.round(value / tolerance);
	}
	/**
	 * Simplifies a line string using an algorithm designed by Tim Schaub.
	 * Coordinates are snapped to the nearest value in a virtual grid and
	 * consecutive duplicate coordinates are discarded.  This effectively preserves
	 * topology as the simplification of any subsection of a line string is
	 * independent of the rest of the line string.  This means that, for examples,
	 * the common edge between two polygons will be simplified to the same line
	 * string independently in both polygons.  This implementation uses a single
	 * pass over the coordinates and eliminates intermediate collinear points.
	 * @param {Array<number>} flatCoordinates Flat coordinates.
	 * @param {number} offset Offset.
	 * @param {number} end End.
	 * @param {number} stride Stride.
	 * @param {number} tolerance Tolerance.
	 * @param {Array<number>} simplifiedFlatCoordinates Simplified flat
	 *     coordinates.
	 * @param {number} simplifiedOffset Simplified offset.
	 * @return {number} Simplified offset.
	 */
	function quantize(flatCoordinates, offset, end, stride, tolerance, simplifiedFlatCoordinates, simplifiedOffset) {
	    // do nothing if the line is empty
	    if (offset == end) {
	        return simplifiedOffset;
	    }
	    // snap the first coordinate (P1)
	    var x1 = snap(flatCoordinates[offset], tolerance);
	    var y1 = snap(flatCoordinates[offset + 1], tolerance);
	    offset += stride;
	    // add the first coordinate to the output
	    simplifiedFlatCoordinates[simplifiedOffset++] = x1;
	    simplifiedFlatCoordinates[simplifiedOffset++] = y1;
	    // find the next coordinate that does not snap to the same value as the first
	    // coordinate (P2)
	    var x2, y2;
	    do {
	        x2 = snap(flatCoordinates[offset], tolerance);
	        y2 = snap(flatCoordinates[offset + 1], tolerance);
	        offset += stride;
	        if (offset == end) {
	            // all coordinates snap to the same value, the line collapses to a point
	            // push the last snapped value anyway to ensure that the output contains
	            // at least two points
	            // FIXME should we really return at least two points anyway?
	            simplifiedFlatCoordinates[simplifiedOffset++] = x2;
	            simplifiedFlatCoordinates[simplifiedOffset++] = y2;
	            return simplifiedOffset;
	        }
	    } while (x2 == x1 && y2 == y1);
	    while (offset < end) {
	        // snap the next coordinate (P3)
	        var x3 = snap(flatCoordinates[offset], tolerance);
	        var y3 = snap(flatCoordinates[offset + 1], tolerance);
	        offset += stride;
	        // skip P3 if it is equal to P2
	        if (x3 == x2 && y3 == y2) {
	            continue;
	        }
	        // calculate the delta between P1 and P2
	        var dx1 = x2 - x1;
	        var dy1 = y2 - y1;
	        // calculate the delta between P3 and P1
	        var dx2 = x3 - x1;
	        var dy2 = y3 - y1;
	        // if P1, P2, and P3 are colinear and P3 is further from P1 than P2 is from
	        // P1 in the same direction then P2 is on the straight line between P1 and
	        // P3
	        if (dx1 * dy2 == dy1 * dx2 && (dx1 < 0 && dx2 < dx1 || dx1 == dx2 || dx1 > 0 && dx2 > dx1) && (dy1 < 0 && dy2 < dy1 || dy1 == dy2 || dy1 > 0 && dy2 > dy1)) {
	            // discard P2 and set P2 = P3
	            x2 = x3;
	            y2 = y3;
	            continue;
	        }
	        // either P1, P2, and P3 are not colinear, or they are colinear but P3 is
	        // between P3 and P1 or on the opposite half of the line to P2.  add P2,
	        // and continue with P1 = P2 and P2 = P3
	        simplifiedFlatCoordinates[simplifiedOffset++] = x2;
	        simplifiedFlatCoordinates[simplifiedOffset++] = y2;
	        x1 = x2;
	        y1 = y2;
	        x2 = x3;
	        y2 = y3;
	    }
	    // add the last point (P2)
	    simplifiedFlatCoordinates[simplifiedOffset++] = x2;
	    simplifiedFlatCoordinates[simplifiedOffset++] = y2;
	    return simplifiedOffset;
	}
	/**
	 * @param {Array<number>} flatCoordinates Flat coordinates.
	 * @param {number} offset Offset.
	 * @param {Array<number>} ends Ends.
	 * @param {number} stride Stride.
	 * @param {number} tolerance Tolerance.
	 * @param {Array<number>} simplifiedFlatCoordinates Simplified flat
	 *     coordinates.
	 * @param {number} simplifiedOffset Simplified offset.
	 * @param {Array<number>} simplifiedEnds Simplified ends.
	 * @return {number} Simplified offset.
	 */
	function quantizeArray(flatCoordinates, offset, ends, stride, tolerance, simplifiedFlatCoordinates, simplifiedOffset, simplifiedEnds) {
	    for (var i = 0, ii = ends.length; i < ii; ++i) {
	        var end = ends[i];
	        simplifiedOffset = quantize(flatCoordinates, offset, end, stride, tolerance, simplifiedFlatCoordinates, simplifiedOffset);
	        simplifiedEnds.push(simplifiedOffset);
	        offset = end;
	    }
	    return simplifiedOffset;
	}
	/**
	 * @param {Array<number>} flatCoordinates Flat coordinates.
	 * @param {number} offset Offset.
	 * @param {Array<Array<number>>} endss Endss.
	 * @param {number} stride Stride.
	 * @param {number} tolerance Tolerance.
	 * @param {Array<number>} simplifiedFlatCoordinates Simplified flat
	 *     coordinates.
	 * @param {number} simplifiedOffset Simplified offset.
	 * @param {Array<Array<number>>} simplifiedEndss Simplified endss.
	 * @return {number} Simplified offset.
	 */
	function quantizeMultiArray(flatCoordinates, offset, endss, stride, tolerance, simplifiedFlatCoordinates, simplifiedOffset, simplifiedEndss) {
	    for (var i = 0, ii = endss.length; i < ii; ++i) {
	        var ends = endss[i];
	        var simplifiedEnds = [];
	        simplifiedOffset = quantizeArray(flatCoordinates, offset, ends, stride, tolerance, simplifiedFlatCoordinates, simplifiedOffset, simplifiedEnds);
	        simplifiedEndss.push(simplifiedEnds);
	        offset = ends[ends.length - 1];
	    }
	    return simplifiedOffset;
	}
	//# sourceMappingURL=simplify.js.map

/***/ }),
/* 104 */
/***/ (function(module, exports) {

	"use strict";
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	exports.transform2D = transform2D;
	exports.rotate = rotate;
	exports.scale = scale;
	exports.translate = translate;
	/**
	 * @module ol/geom/flat/transform
	 */
	/**
	 * @param {Array<number>} flatCoordinates Flat coordinates.
	 * @param {number} offset Offset.
	 * @param {number} end End.
	 * @param {number} stride Stride.
	 * @param {import("../../transform.js").Transform} transform Transform.
	 * @param {Array<number>=} opt_dest Destination.
	 * @return {Array<number>} Transformed coordinates.
	 */
	function transform2D(flatCoordinates, offset, end, stride, transform, opt_dest) {
	    var dest = opt_dest ? opt_dest : [];
	    var i = 0;
	    for (var j = offset; j < end; j += stride) {
	        var x = flatCoordinates[j];
	        var y = flatCoordinates[j + 1];
	        dest[i++] = transform[0] * x + transform[2] * y + transform[4];
	        dest[i++] = transform[1] * x + transform[3] * y + transform[5];
	    }
	    if (opt_dest && dest.length != i) {
	        dest.length = i;
	    }
	    return dest;
	}
	/**
	 * @param {Array<number>} flatCoordinates Flat coordinates.
	 * @param {number} offset Offset.
	 * @param {number} end End.
	 * @param {number} stride Stride.
	 * @param {number} angle Angle.
	 * @param {Array<number>} anchor Rotation anchor point.
	 * @param {Array<number>=} opt_dest Destination.
	 * @return {Array<number>} Transformed coordinates.
	 */
	function rotate(flatCoordinates, offset, end, stride, angle, anchor, opt_dest) {
	    var dest = opt_dest ? opt_dest : [];
	    var cos = Math.cos(angle);
	    var sin = Math.sin(angle);
	    var anchorX = anchor[0];
	    var anchorY = anchor[1];
	    var i = 0;
	    for (var j = offset; j < end; j += stride) {
	        var deltaX = flatCoordinates[j] - anchorX;
	        var deltaY = flatCoordinates[j + 1] - anchorY;
	        dest[i++] = anchorX + deltaX * cos - deltaY * sin;
	        dest[i++] = anchorY + deltaX * sin + deltaY * cos;
	        for (var k = j + 2; k < j + stride; ++k) {
	            dest[i++] = flatCoordinates[k];
	        }
	    }
	    if (opt_dest && dest.length != i) {
	        dest.length = i;
	    }
	    return dest;
	}
	/**
	 * Scale the coordinates.
	 * @param {Array<number>} flatCoordinates Flat coordinates.
	 * @param {number} offset Offset.
	 * @param {number} end End.
	 * @param {number} stride Stride.
	 * @param {number} sx Scale factor in the x-direction.
	 * @param {number} sy Scale factor in the y-direction.
	 * @param {Array<number>} anchor Scale anchor point.
	 * @param {Array<number>=} opt_dest Destination.
	 * @return {Array<number>} Transformed coordinates.
	 */
	function scale(flatCoordinates, offset, end, stride, sx, sy, anchor, opt_dest) {
	    var dest = opt_dest ? opt_dest : [];
	    var anchorX = anchor[0];
	    var anchorY = anchor[1];
	    var i = 0;
	    for (var j = offset; j < end; j += stride) {
	        var deltaX = flatCoordinates[j] - anchorX;
	        var deltaY = flatCoordinates[j + 1] - anchorY;
	        dest[i++] = anchorX + sx * deltaX;
	        dest[i++] = anchorY + sy * deltaY;
	        for (var k = j + 2; k < j + stride; ++k) {
	            dest[i++] = flatCoordinates[k];
	        }
	    }
	    if (opt_dest && dest.length != i) {
	        dest.length = i;
	    }
	    return dest;
	}
	/**
	 * @param {Array<number>} flatCoordinates Flat coordinates.
	 * @param {number} offset Offset.
	 * @param {number} end End.
	 * @param {number} stride Stride.
	 * @param {number} deltaX Delta X.
	 * @param {number} deltaY Delta Y.
	 * @param {Array<number>=} opt_dest Destination.
	 * @return {Array<number>} Transformed coordinates.
	 */
	function translate(flatCoordinates, offset, end, stride, deltaX, deltaY, opt_dest) {
	    var dest = opt_dest ? opt_dest : [];
	    var i = 0;
	    for (var j = offset; j < end; j += stride) {
	        dest[i++] = flatCoordinates[j] + deltaX;
	        dest[i++] = flatCoordinates[j + 1] + deltaY;
	        for (var k = j + 2; k < j + stride; ++k) {
	            dest[i++] = flatCoordinates[k];
	        }
	    }
	    if (opt_dest && dest.length != i) {
	        dest.length = i;
	    }
	    return dest;
	}
	//# sourceMappingURL=transform.js.map

/***/ }),
/* 105 */
/***/ (function(module, exports) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	/**
	 * @module ol/has
	 */
	var ua = typeof navigator !== 'undefined' ? navigator.userAgent.toLowerCase() : '';
	/**
	 * User agent string says we are dealing with Firefox as browser.
	 * @type {boolean}
	 */
	var FIREFOX = exports.FIREFOX = ua.indexOf('firefox') !== -1;
	/**
	 * User agent string says we are dealing with Safari as browser.
	 * @type {boolean}
	 */
	var SAFARI = exports.SAFARI = ua.indexOf('safari') !== -1 && ua.indexOf('chrom') == -1;
	/**
	 * User agent string says we are dealing with a WebKit engine.
	 * @type {boolean}
	 */
	var WEBKIT = exports.WEBKIT = ua.indexOf('webkit') !== -1 && ua.indexOf('edge') == -1;
	/**
	 * User agent string says we are dealing with a Mac as platform.
	 * @type {boolean}
	 */
	var MAC = exports.MAC = ua.indexOf('macintosh') !== -1;
	/**
	 * The ratio between physical pixels and device-independent pixels
	 * (dips) on the device (`window.devicePixelRatio`).
	 * @const
	 * @type {number}
	 * @api
	 */
	var DEVICE_PIXEL_RATIO = exports.DEVICE_PIXEL_RATIO = window.devicePixelRatio || 1;
	/**
	 * Image.prototype.decode() is supported.
	 * @type {boolean}
	 */
	var IMAGE_DECODE = exports.IMAGE_DECODE = typeof Image !== 'undefined' && Image.prototype.decode;
	//# sourceMappingURL=has.js.map

/***/ }),
/* 106 */
/***/ (function(module, exports) {

	"use strict";
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	/**
	 * @module ol/render/canvas/Instruction
	 */
	/**
	 * @enum {number}
	 */
	var Instruction = {
	  BEGIN_GEOMETRY: 0,
	  BEGIN_PATH: 1,
	  CIRCLE: 2,
	  CLOSE_PATH: 3,
	  CUSTOM: 4,
	  DRAW_CHARS: 5,
	  DRAW_IMAGE: 6,
	  END_GEOMETRY: 7,
	  FILL: 8,
	  MOVE_TO_LINE_TO: 9,
	  SET_FILL_STYLE: 10,
	  SET_STROKE_STYLE: 11,
	  STROKE: 12
	};
	/**
	 * @type {Array<Instruction>}
	 */
	var fillInstruction = exports.fillInstruction = [Instruction.FILL];
	/**
	 * @type {Array<Instruction>}
	 */
	var strokeInstruction = exports.strokeInstruction = [Instruction.STROKE];
	/**
	 * @type {Array<Instruction>}
	 */
	var beginPathInstruction = exports.beginPathInstruction = [Instruction.BEGIN_PATH];
	/**
	 * @type {Array<Instruction>}
	 */
	var closePathInstruction = exports.closePathInstruction = [Instruction.CLOSE_PATH];
	exports.default = Instruction;
	//# sourceMappingURL=Instruction.js.map

/***/ }),
/* 107 */
/***/ (function(module, exports) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	/**
	 * @module ol/source/State
	 */
	/**
	 * @enum {string}
	 * State of the source, one of 'undefined', 'loading', 'ready' or 'error'.
	 */
	exports.default = {
	  UNDEFINED: 'undefined',
	  LOADING: 'loading',
	  READY: 'ready',
	  ERROR: 'error'
	};
	//# sourceMappingURL=State.js.map

/***/ }),
/* 108 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	exports.VectorSourceEvent = undefined;
	
	var _util = __webpack_require__(14);
	
	var _Collection = __webpack_require__(63);
	
	var _Collection2 = _interopRequireDefault(_Collection);
	
	var _CollectionEventType = __webpack_require__(83);
	
	var _CollectionEventType2 = _interopRequireDefault(_CollectionEventType);
	
	var _ObjectEventType = __webpack_require__(124);
	
	var _ObjectEventType2 = _interopRequireDefault(_ObjectEventType);
	
	var _array = __webpack_require__(18);
	
	var _asserts = __webpack_require__(29);
	
	var _events = __webpack_require__(30);
	
	var _Event = __webpack_require__(35);
	
	var _Event2 = _interopRequireDefault(_Event);
	
	var _EventType = __webpack_require__(10);
	
	var _EventType2 = _interopRequireDefault(_EventType);
	
	var _extent = __webpack_require__(4);
	
	var _featureloader = __webpack_require__(590);
	
	var _functions = __webpack_require__(31);
	
	var _loadingstrategy = __webpack_require__(622);
	
	var _obj = __webpack_require__(23);
	
	var _Source = __webpack_require__(297);
	
	var _Source2 = _interopRequireDefault(_Source);
	
	var _State = __webpack_require__(107);
	
	var _State2 = _interopRequireDefault(_State);
	
	var _VectorEventType = __webpack_require__(179);
	
	var _VectorEventType2 = _interopRequireDefault(_VectorEventType);
	
	var _RBush = __webpack_require__(181);
	
	var _RBush2 = _interopRequireDefault(_RBush);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	/**
	 * @module ol/source/Vector
	 */
	var __extends = undefined && undefined.__extends || function () {
	    var _extendStatics = function extendStatics(d, b) {
	        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	            d.__proto__ = b;
	        } || function (d, b) {
	            for (var p in b) {
	                if (b.hasOwnProperty(p)) d[p] = b[p];
	            }
	        };
	        return _extendStatics(d, b);
	    };
	    return function (d, b) {
	        _extendStatics(d, b);
	        function __() {
	            this.constructor = d;
	        }
	        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	    };
	}();
	
	/**
	 * A function that takes an {@link module:ol/extent~Extent} and a resolution as arguments, and
	 * returns an array of {@link module:ol/extent~Extent} with the extents to load. Usually this
	 * is one of the standard {@link module:ol/loadingstrategy} strategies.
	 *
	 * @typedef {function(import("../extent.js").Extent, number): Array<import("../extent.js").Extent>} LoadingStrategy
	 * @api
	 */
	/**
	 * @classdesc
	 * Events emitted by {@link module:ol/source/Vector} instances are instances of this
	 * type.
	 * @template {import("../geom/Geometry.js").default} Geometry
	 */
	var VectorSourceEvent = /** @class */function (_super) {
	    __extends(VectorSourceEvent, _super);
	    /**
	     * @param {string} type Type.
	     * @param {import("../Feature.js").default<Geometry>=} opt_feature Feature.
	     */
	    function VectorSourceEvent(type, opt_feature) {
	        var _this = _super.call(this, type) || this;
	        /**
	         * The feature being added or removed.
	         * @type {import("../Feature.js").default<Geometry>|undefined}
	         * @api
	         */
	        _this.feature = opt_feature;
	        return _this;
	    }
	    return VectorSourceEvent;
	}(_Event2.default);
	exports.VectorSourceEvent = VectorSourceEvent;
	/**
	 * @typedef {Object} Options
	 * @property {import("./Source.js").AttributionLike} [attributions] Attributions.
	 * @property {Array<import("../Feature.js").default>|Collection<import("../Feature.js").default>} [features]
	 * Features. If provided as {@link module:ol/Collection}, the features in the source
	 * and the collection will stay in sync.
	 * @property {import("../format/Feature.js").default} [format] The feature format used by the XHR
	 * feature loader when `url` is set. Required if `url` is set, otherwise ignored.
	 * @property {import("../featureloader.js").FeatureLoader} [loader]
	 * The loader function used to load features, from a remote source for example.
	 * If this is not set and `url` is set, the source will create and use an XHR
	 * feature loader.
	 *
	 * Example:
	 *
	 * ```js
	 * import {Vector} from 'ol/source';
	 * import {GeoJSON} from 'ol/format';
	 * import {bbox} from 'ol/loadingstrategy';
	 *
	 * var vectorSource = new Vector({
	 *   format: new GeoJSON(),
	 *   loader: function(extent, resolution, projection) {
	 *      var proj = projection.getCode();
	 *      var url = 'https://ahocevar.com/geoserver/wfs?service=WFS&' +
	 *          'version=1.1.0&request=GetFeature&typename=osm:water_areas&' +
	 *          'outputFormat=application/json&srsname=' + proj + '&' +
	 *          'bbox=' + extent.join(',') + ',' + proj;
	 *      var xhr = new XMLHttpRequest();
	 *      xhr.open('GET', url);
	 *      var onError = function() {
	 *        vectorSource.removeLoadedExtent(extent);
	 *      }
	 *      xhr.onerror = onError;
	 *      xhr.onload = function() {
	 *        if (xhr.status == 200) {
	 *          vectorSource.addFeatures(
	 *              vectorSource.getFormat().readFeatures(xhr.responseText));
	 *        } else {
	 *          onError();
	 *        }
	 *      }
	 *      xhr.send();
	 *    },
	 *    strategy: bbox
	 *  });
	 * ```
	 * @property {boolean} [overlaps=true] This source may have overlapping geometries.
	 * Setting this to `false` (e.g. for sources with polygons that represent administrative
	 * boundaries or TopoJSON sources) allows the renderer to optimise fill and
	 * stroke operations.
	 * @property {LoadingStrategy} [strategy] The loading strategy to use.
	 * By default an {@link module:ol/loadingstrategy~all}
	 * strategy is used, a one-off strategy which loads all features at once.
	 * @property {string|import("../featureloader.js").FeatureUrlFunction} [url]
	 * Setting this option instructs the source to load features using an XHR loader
	 * (see {@link module:ol/featureloader~xhr}). Use a `string` and an
	 * {@link module:ol/loadingstrategy~all} for a one-off download of all features from
	 * the given URL. Use a {@link module:ol/featureloader~FeatureUrlFunction} to generate the url with
	 * other loading strategies.
	 * Requires `format` to be set as well.
	 * When default XHR feature loader is provided, the features will
	 * be transformed from the data projection to the view projection
	 * during parsing. If your remote data source does not advertise its projection
	 * properly, this transformation will be incorrect. For some formats, the
	 * default projection (usually EPSG:4326) can be overridden by setting the
	 * dataProjection constructor option on the format.
	 * Note that if a source contains non-feature data, such as a GeoJSON geometry
	 * or a KML NetworkLink, these will be ignored. Use a custom loader to load these.
	 * @property {boolean} [useSpatialIndex=true]
	 * By default, an RTree is used as spatial index. When features are removed and
	 * added frequently, and the total number of features is low, setting this to
	 * `false` may improve performance.
	 *
	 * Note that
	 * {@link module:ol/source/Vector~VectorSource#getFeaturesInExtent},
	 * {@link module:ol/source/Vector~VectorSource#getClosestFeatureToCoordinate} and
	 * {@link module:ol/source/Vector~VectorSource#getExtent} cannot be used when `useSpatialIndex` is
	 * set to `false`, and {@link module:ol/source/Vector~VectorSource#forEachFeatureInExtent} will loop
	 * through all features.
	 *
	 * When set to `false`, the features will be maintained in an
	 * {@link module:ol/Collection}, which can be retrieved through
	 * {@link module:ol/source/Vector~VectorSource#getFeaturesCollection}.
	 * @property {boolean} [wrapX=true] Wrap the world horizontally. For vector editing across the
	 * -180° and 180° meridians to work properly, this should be set to `false`. The
	 * resulting geometry coordinates will then exceed the world bounds.
	 */
	/**
	 * @classdesc
	 * Provides a source of features for vector layers. Vector features provided
	 * by this source are suitable for editing. See {@link module:ol/source/VectorTile~VectorTile} for
	 * vector data that is optimized for rendering.
	 *
	 * @fires VectorSourceEvent
	 * @api
	 * @template {import("../geom/Geometry.js").default} Geometry
	 */
	
	var VectorSource = /** @class */function (_super) {
	    __extends(VectorSource, _super);
	    /**
	     * @param {Options=} opt_options Vector source options.
	     */
	    function VectorSource(opt_options) {
	        var _this = this;
	        var options = opt_options || {};
	        _this = _super.call(this, {
	            attributions: options.attributions,
	            projection: undefined,
	            state: _State2.default.READY,
	            wrapX: options.wrapX !== undefined ? options.wrapX : true
	        }) || this;
	        /**
	         * @private
	         * @type {import("../featureloader.js").FeatureLoader}
	         */
	        _this.loader_ = _functions.VOID;
	        /**
	         * @private
	         * @type {import("../format/Feature.js").default|undefined}
	         */
	        _this.format_ = options.format;
	        /**
	         * @private
	         * @type {boolean}
	         */
	        _this.overlaps_ = options.overlaps == undefined ? true : options.overlaps;
	        /**
	         * @private
	         * @type {string|import("../featureloader.js").FeatureUrlFunction|undefined}
	         */
	        _this.url_ = options.url;
	        if (options.loader !== undefined) {
	            _this.loader_ = options.loader;
	        } else if (_this.url_ !== undefined) {
	            (0, _asserts.assert)(_this.format_, 7); // `format` must be set when `url` is set
	            // create a XHR feature loader for "url" and "format"
	            _this.loader_ = (0, _featureloader.xhr)(_this.url_, /** @type {import("../format/Feature.js").default} */_this.format_);
	        }
	        /**
	         * @private
	         * @type {LoadingStrategy}
	         */
	        _this.strategy_ = options.strategy !== undefined ? options.strategy : _loadingstrategy.all;
	        var useSpatialIndex = options.useSpatialIndex !== undefined ? options.useSpatialIndex : true;
	        /**
	         * @private
	         * @type {RBush<import("../Feature.js").default<Geometry>>}
	         */
	        _this.featuresRtree_ = useSpatialIndex ? new _RBush2.default() : null;
	        /**
	         * @private
	         * @type {RBush<{extent: import("../extent.js").Extent}>}
	         */
	        _this.loadedExtentsRtree_ = new _RBush2.default();
	        /**
	         * @private
	         * @type {!Object<string, import("../Feature.js").default<Geometry>>}
	         */
	        _this.nullGeometryFeatures_ = {};
	        /**
	         * A lookup of features by id (the return from feature.getId()).
	         * @private
	         * @type {!Object<string, import("../Feature.js").default<Geometry>>}
	         */
	        _this.idIndex_ = {};
	        /**
	         * A lookup of features by uid (using getUid(feature)).
	         * @private
	         * @type {!Object<string, import("../Feature.js").default<Geometry>>}
	         */
	        _this.uidIndex_ = {};
	        /**
	         * @private
	         * @type {Object<string, Array<import("../events.js").EventsKey>>}
	         */
	        _this.featureChangeKeys_ = {};
	        /**
	         * @private
	         * @type {Collection<import("../Feature.js").default<Geometry>>}
	         */
	        _this.featuresCollection_ = null;
	        var collection, features;
	        if (Array.isArray(options.features)) {
	            features = options.features;
	        } else if (options.features) {
	            collection = options.features;
	            features = collection.getArray();
	        }
	        if (!useSpatialIndex && collection === undefined) {
	            collection = new _Collection2.default(features);
	        }
	        if (features !== undefined) {
	            _this.addFeaturesInternal(features);
	        }
	        if (collection !== undefined) {
	            _this.bindFeaturesCollection_(collection);
	        }
	        return _this;
	    }
	    /**
	     * Add a single feature to the source.  If you want to add a batch of features
	     * at once, call {@link module:ol/source/Vector~VectorSource#addFeatures #addFeatures()}
	     * instead. A feature will not be added to the source if feature with
	     * the same id is already there. The reason for this behavior is to avoid
	     * feature duplication when using bbox or tile loading strategies.
	     * Note: this also applies if an {@link module:ol/Collection} is used for features,
	     * meaning that if a feature with a duplicate id is added in the collection, it will
	     * be removed from it right away.
	     * @param {import("../Feature.js").default<Geometry>} feature Feature to add.
	     * @api
	     */
	    VectorSource.prototype.addFeature = function (feature) {
	        this.addFeatureInternal(feature);
	        this.changed();
	    };
	    /**
	     * Add a feature without firing a `change` event.
	     * @param {import("../Feature.js").default<Geometry>} feature Feature.
	     * @protected
	     */
	    VectorSource.prototype.addFeatureInternal = function (feature) {
	        var featureKey = (0, _util.getUid)(feature);
	        if (!this.addToIndex_(featureKey, feature)) {
	            if (this.featuresCollection_) {
	                this.featuresCollection_.remove(feature);
	            }
	            return;
	        }
	        this.setupChangeEvents_(featureKey, feature);
	        var geometry = feature.getGeometry();
	        if (geometry) {
	            var extent = geometry.getExtent();
	            if (this.featuresRtree_) {
	                this.featuresRtree_.insert(extent, feature);
	            }
	        } else {
	            this.nullGeometryFeatures_[featureKey] = feature;
	        }
	        this.dispatchEvent(new VectorSourceEvent(_VectorEventType2.default.ADDFEATURE, feature));
	    };
	    /**
	     * @param {string} featureKey Unique identifier for the feature.
	     * @param {import("../Feature.js").default<Geometry>} feature The feature.
	     * @private
	     */
	    VectorSource.prototype.setupChangeEvents_ = function (featureKey, feature) {
	        this.featureChangeKeys_[featureKey] = [(0, _events.listen)(feature, _EventType2.default.CHANGE, this.handleFeatureChange_, this), (0, _events.listen)(feature, _ObjectEventType2.default.PROPERTYCHANGE, this.handleFeatureChange_, this)];
	    };
	    /**
	     * @param {string} featureKey Unique identifier for the feature.
	     * @param {import("../Feature.js").default<Geometry>} feature The feature.
	     * @return {boolean} The feature is "valid", in the sense that it is also a
	     *     candidate for insertion into the Rtree.
	     * @private
	     */
	    VectorSource.prototype.addToIndex_ = function (featureKey, feature) {
	        var valid = true;
	        var id = feature.getId();
	        if (id !== undefined) {
	            if (!(id.toString() in this.idIndex_)) {
	                this.idIndex_[id.toString()] = feature;
	            } else {
	                valid = false;
	            }
	        }
	        if (valid) {
	            (0, _asserts.assert)(!(featureKey in this.uidIndex_), 30); // The passed `feature` was already added to the source
	            this.uidIndex_[featureKey] = feature;
	        }
	        return valid;
	    };
	    /**
	     * Add a batch of features to the source.
	     * @param {Array<import("../Feature.js").default<Geometry>>} features Features to add.
	     * @api
	     */
	    VectorSource.prototype.addFeatures = function (features) {
	        this.addFeaturesInternal(features);
	        this.changed();
	    };
	    /**
	     * Add features without firing a `change` event.
	     * @param {Array<import("../Feature.js").default<Geometry>>} features Features.
	     * @protected
	     */
	    VectorSource.prototype.addFeaturesInternal = function (features) {
	        var extents = [];
	        var newFeatures = [];
	        var geometryFeatures = [];
	        for (var i = 0, length_1 = features.length; i < length_1; i++) {
	            var feature = features[i];
	            var featureKey = (0, _util.getUid)(feature);
	            if (this.addToIndex_(featureKey, feature)) {
	                newFeatures.push(feature);
	            }
	        }
	        for (var i = 0, length_2 = newFeatures.length; i < length_2; i++) {
	            var feature = newFeatures[i];
	            var featureKey = (0, _util.getUid)(feature);
	            this.setupChangeEvents_(featureKey, feature);
	            var geometry = feature.getGeometry();
	            if (geometry) {
	                var extent = geometry.getExtent();
	                extents.push(extent);
	                geometryFeatures.push(feature);
	            } else {
	                this.nullGeometryFeatures_[featureKey] = feature;
	            }
	        }
	        if (this.featuresRtree_) {
	            this.featuresRtree_.load(extents, geometryFeatures);
	        }
	        for (var i = 0, length_3 = newFeatures.length; i < length_3; i++) {
	            this.dispatchEvent(new VectorSourceEvent(_VectorEventType2.default.ADDFEATURE, newFeatures[i]));
	        }
	    };
	    /**
	     * @param {!Collection<import("../Feature.js").default<Geometry>>} collection Collection.
	     * @private
	     */
	    VectorSource.prototype.bindFeaturesCollection_ = function (collection) {
	        var modifyingCollection = false;
	        this.addEventListener(_VectorEventType2.default.ADDFEATURE,
	        /**
	         * @param {VectorSourceEvent<Geometry>} evt The vector source event
	         */
	        function (evt) {
	            if (!modifyingCollection) {
	                modifyingCollection = true;
	                collection.push(evt.feature);
	                modifyingCollection = false;
	            }
	        });
	        this.addEventListener(_VectorEventType2.default.REMOVEFEATURE,
	        /**
	         * @param {VectorSourceEvent<Geometry>} evt The vector source event
	         */
	        function (evt) {
	            if (!modifyingCollection) {
	                modifyingCollection = true;
	                collection.remove(evt.feature);
	                modifyingCollection = false;
	            }
	        });
	        collection.addEventListener(_CollectionEventType2.default.ADD,
	        /**
	         * @param {import("../Collection.js").CollectionEvent} evt The collection event
	         */
	        function (evt) {
	            if (!modifyingCollection) {
	                modifyingCollection = true;
	                this.addFeature( /** @type {import("../Feature.js").default<Geometry>} */evt.element);
	                modifyingCollection = false;
	            }
	        }.bind(this));
	        collection.addEventListener(_CollectionEventType2.default.REMOVE,
	        /**
	         * @param {import("../Collection.js").CollectionEvent} evt The collection event
	         */
	        function (evt) {
	            if (!modifyingCollection) {
	                modifyingCollection = true;
	                this.removeFeature( /** @type {import("../Feature.js").default<Geometry>} */evt.element);
	                modifyingCollection = false;
	            }
	        }.bind(this));
	        this.featuresCollection_ = collection;
	    };
	    /**
	     * Remove all features from the source.
	     * @param {boolean=} opt_fast Skip dispatching of {@link module:ol/source/Vector.VectorSourceEvent#removefeature} events.
	     * @api
	     */
	    VectorSource.prototype.clear = function (opt_fast) {
	        if (opt_fast) {
	            for (var featureId in this.featureChangeKeys_) {
	                var keys = this.featureChangeKeys_[featureId];
	                keys.forEach(_events.unlistenByKey);
	            }
	            if (!this.featuresCollection_) {
	                this.featureChangeKeys_ = {};
	                this.idIndex_ = {};
	                this.uidIndex_ = {};
	            }
	        } else {
	            if (this.featuresRtree_) {
	                this.featuresRtree_.forEach(this.removeFeatureInternal.bind(this));
	                for (var id in this.nullGeometryFeatures_) {
	                    this.removeFeatureInternal(this.nullGeometryFeatures_[id]);
	                }
	            }
	        }
	        if (this.featuresCollection_) {
	            this.featuresCollection_.clear();
	        }
	        if (this.featuresRtree_) {
	            this.featuresRtree_.clear();
	        }
	        this.nullGeometryFeatures_ = {};
	        var clearEvent = new VectorSourceEvent(_VectorEventType2.default.CLEAR);
	        this.dispatchEvent(clearEvent);
	        this.changed();
	    };
	    /**
	     * Iterate through all features on the source, calling the provided callback
	     * with each one.  If the callback returns any "truthy" value, iteration will
	     * stop and the function will return the same value.
	     * Note: this function only iterate through the feature that have a defined geometry.
	     *
	     * @param {function(import("../Feature.js").default<Geometry>): T} callback Called with each feature
	     *     on the source.  Return a truthy value to stop iteration.
	     * @return {T|undefined} The return value from the last call to the callback.
	     * @template T
	     * @api
	     */
	    VectorSource.prototype.forEachFeature = function (callback) {
	        if (this.featuresRtree_) {
	            return this.featuresRtree_.forEach(callback);
	        } else if (this.featuresCollection_) {
	            this.featuresCollection_.forEach(callback);
	        }
	    };
	    /**
	     * Iterate through all features whose geometries contain the provided
	     * coordinate, calling the callback with each feature.  If the callback returns
	     * a "truthy" value, iteration will stop and the function will return the same
	     * value.
	     *
	     * @param {import("../coordinate.js").Coordinate} coordinate Coordinate.
	     * @param {function(import("../Feature.js").default<Geometry>): T} callback Called with each feature
	     *     whose goemetry contains the provided coordinate.
	     * @return {T|undefined} The return value from the last call to the callback.
	     * @template T
	     */
	    VectorSource.prototype.forEachFeatureAtCoordinateDirect = function (coordinate, callback) {
	        var extent = [coordinate[0], coordinate[1], coordinate[0], coordinate[1]];
	        return this.forEachFeatureInExtent(extent, function (feature) {
	            var geometry = feature.getGeometry();
	            if (geometry.intersectsCoordinate(coordinate)) {
	                return callback(feature);
	            } else {
	                return undefined;
	            }
	        });
	    };
	    /**
	     * Iterate through all features whose bounding box intersects the provided
	     * extent (note that the feature's geometry may not intersect the extent),
	     * calling the callback with each feature.  If the callback returns a "truthy"
	     * value, iteration will stop and the function will return the same value.
	     *
	     * If you are interested in features whose geometry intersects an extent, call
	     * the {@link module:ol/source/Vector~VectorSource#forEachFeatureIntersectingExtent #forEachFeatureIntersectingExtent()} method instead.
	     *
	     * When `useSpatialIndex` is set to false, this method will loop through all
	     * features, equivalent to {@link module:ol/source/Vector~VectorSource#forEachFeature #forEachFeature()}.
	     *
	     * @param {import("../extent.js").Extent} extent Extent.
	     * @param {function(import("../Feature.js").default<Geometry>): T} callback Called with each feature
	     *     whose bounding box intersects the provided extent.
	     * @return {T|undefined} The return value from the last call to the callback.
	     * @template T
	     * @api
	     */
	    VectorSource.prototype.forEachFeatureInExtent = function (extent, callback) {
	        if (this.featuresRtree_) {
	            return this.featuresRtree_.forEachInExtent(extent, callback);
	        } else if (this.featuresCollection_) {
	            this.featuresCollection_.forEach(callback);
	        }
	    };
	    /**
	     * Iterate through all features whose geometry intersects the provided extent,
	     * calling the callback with each feature.  If the callback returns a "truthy"
	     * value, iteration will stop and the function will return the same value.
	     *
	     * If you only want to test for bounding box intersection, call the
	     * {@link module:ol/source/Vector~VectorSource#forEachFeatureInExtent #forEachFeatureInExtent()} method instead.
	     *
	     * @param {import("../extent.js").Extent} extent Extent.
	     * @param {function(import("../Feature.js").default<Geometry>): T} callback Called with each feature
	     *     whose geometry intersects the provided extent.
	     * @return {T|undefined} The return value from the last call to the callback.
	     * @template T
	     * @api
	     */
	    VectorSource.prototype.forEachFeatureIntersectingExtent = function (extent, callback) {
	        return this.forEachFeatureInExtent(extent,
	        /**
	         * @param {import("../Feature.js").default<Geometry>} feature Feature.
	         * @return {T|undefined} The return value from the last call to the callback.
	         */
	        function (feature) {
	            var geometry = feature.getGeometry();
	            if (geometry.intersectsExtent(extent)) {
	                var result = callback(feature);
	                if (result) {
	                    return result;
	                }
	            }
	        });
	    };
	    /**
	     * Get the features collection associated with this source. Will be `null`
	     * unless the source was configured with `useSpatialIndex` set to `false`, or
	     * with an {@link module:ol/Collection} as `features`.
	     * @return {Collection<import("../Feature.js").default<Geometry>>} The collection of features.
	     * @api
	     */
	    VectorSource.prototype.getFeaturesCollection = function () {
	        return this.featuresCollection_;
	    };
	    /**
	     * Get all features on the source in random order.
	     * @return {Array<import("../Feature.js").default<Geometry>>} Features.
	     * @api
	     */
	    VectorSource.prototype.getFeatures = function () {
	        var features;
	        if (this.featuresCollection_) {
	            features = this.featuresCollection_.getArray();
	        } else if (this.featuresRtree_) {
	            features = this.featuresRtree_.getAll();
	            if (!(0, _obj.isEmpty)(this.nullGeometryFeatures_)) {
	                (0, _array.extend)(features, (0, _obj.getValues)(this.nullGeometryFeatures_));
	            }
	        }
	        return (
	            /** @type {Array<import("../Feature.js").default<Geometry>>} */features
	        );
	    };
	    /**
	     * Get all features whose geometry intersects the provided coordinate.
	     * @param {import("../coordinate.js").Coordinate} coordinate Coordinate.
	     * @return {Array<import("../Feature.js").default<Geometry>>} Features.
	     * @api
	     */
	    VectorSource.prototype.getFeaturesAtCoordinate = function (coordinate) {
	        var features = [];
	        this.forEachFeatureAtCoordinateDirect(coordinate, function (feature) {
	            features.push(feature);
	        });
	        return features;
	    };
	    /**
	     * Get all features whose bounding box intersects the provided extent.  Note that this returns an array of
	     * all features intersecting the given extent in random order (so it may include
	     * features whose geometries do not intersect the extent).
	     *
	     * When `useSpatialIndex` is set to false, this method will return all
	     * features.
	     *
	     * @param {import("../extent.js").Extent} extent Extent.
	     * @return {Array<import("../Feature.js").default<Geometry>>} Features.
	     * @api
	     */
	    VectorSource.prototype.getFeaturesInExtent = function (extent) {
	        if (this.featuresRtree_) {
	            return this.featuresRtree_.getInExtent(extent);
	        } else if (this.featuresCollection_) {
	            return this.featuresCollection_.getArray();
	        } else {
	            return [];
	        }
	    };
	    /**
	     * Get the closest feature to the provided coordinate.
	     *
	     * This method is not available when the source is configured with
	     * `useSpatialIndex` set to `false`.
	     * @param {import("../coordinate.js").Coordinate} coordinate Coordinate.
	     * @param {function(import("../Feature.js").default<Geometry>):boolean=} opt_filter Feature filter function.
	     *     The filter function will receive one argument, the {@link module:ol/Feature feature}
	     *     and it should return a boolean value. By default, no filtering is made.
	     * @return {import("../Feature.js").default<Geometry>} Closest feature.
	     * @api
	     */
	    VectorSource.prototype.getClosestFeatureToCoordinate = function (coordinate, opt_filter) {
	        // Find the closest feature using branch and bound.  We start searching an
	        // infinite extent, and find the distance from the first feature found.  This
	        // becomes the closest feature.  We then compute a smaller extent which any
	        // closer feature must intersect.  We continue searching with this smaller
	        // extent, trying to find a closer feature.  Every time we find a closer
	        // feature, we update the extent being searched so that any even closer
	        // feature must intersect it.  We continue until we run out of features.
	        var x = coordinate[0];
	        var y = coordinate[1];
	        var closestFeature = null;
	        var closestPoint = [NaN, NaN];
	        var minSquaredDistance = Infinity;
	        var extent = [-Infinity, -Infinity, Infinity, Infinity];
	        var filter = opt_filter ? opt_filter : _functions.TRUE;
	        this.featuresRtree_.forEachInExtent(extent,
	        /**
	         * @param {import("../Feature.js").default<Geometry>} feature Feature.
	         */
	        function (feature) {
	            if (filter(feature)) {
	                var geometry = feature.getGeometry();
	                var previousMinSquaredDistance = minSquaredDistance;
	                minSquaredDistance = geometry.closestPointXY(x, y, closestPoint, minSquaredDistance);
	                if (minSquaredDistance < previousMinSquaredDistance) {
	                    closestFeature = feature;
	                    // This is sneaky.  Reduce the extent that it is currently being
	                    // searched while the R-Tree traversal using this same extent object
	                    // is still in progress.  This is safe because the new extent is
	                    // strictly contained by the old extent.
	                    var minDistance = Math.sqrt(minSquaredDistance);
	                    extent[0] = x - minDistance;
	                    extent[1] = y - minDistance;
	                    extent[2] = x + minDistance;
	                    extent[3] = y + minDistance;
	                }
	            }
	        });
	        return closestFeature;
	    };
	    /**
	     * Get the extent of the features currently in the source.
	     *
	     * This method is not available when the source is configured with
	     * `useSpatialIndex` set to `false`.
	     * @param {import("../extent.js").Extent=} opt_extent Destination extent. If provided, no new extent
	     *     will be created. Instead, that extent's coordinates will be overwritten.
	     * @return {import("../extent.js").Extent} Extent.
	     * @api
	     */
	    VectorSource.prototype.getExtent = function (opt_extent) {
	        return this.featuresRtree_.getExtent(opt_extent);
	    };
	    /**
	     * Get a feature by its identifier (the value returned by feature.getId()).
	     * Note that the index treats string and numeric identifiers as the same.  So
	     * `source.getFeatureById(2)` will return a feature with id `'2'` or `2`.
	     *
	     * @param {string|number} id Feature identifier.
	     * @return {import("../Feature.js").default<Geometry>} The feature (or `null` if not found).
	     * @api
	     */
	    VectorSource.prototype.getFeatureById = function (id) {
	        var feature = this.idIndex_[id.toString()];
	        return feature !== undefined ? feature : null;
	    };
	    /**
	     * Get a feature by its internal unique identifier (using `getUid`).
	     *
	     * @param {string} uid Feature identifier.
	     * @return {import("../Feature.js").default<Geometry>} The feature (or `null` if not found).
	     */
	    VectorSource.prototype.getFeatureByUid = function (uid) {
	        var feature = this.uidIndex_[uid];
	        return feature !== undefined ? feature : null;
	    };
	    /**
	     * Get the format associated with this source.
	     *
	     * @return {import("../format/Feature.js").default|undefined} The feature format.
	     * @api
	     */
	    VectorSource.prototype.getFormat = function () {
	        return this.format_;
	    };
	    /**
	     * @return {boolean} The source can have overlapping geometries.
	     */
	    VectorSource.prototype.getOverlaps = function () {
	        return this.overlaps_;
	    };
	    /**
	     * Get the url associated with this source.
	     *
	     * @return {string|import("../featureloader.js").FeatureUrlFunction|undefined} The url.
	     * @api
	     */
	    VectorSource.prototype.getUrl = function () {
	        return this.url_;
	    };
	    /**
	     * @param {Event} event Event.
	     * @private
	     */
	    VectorSource.prototype.handleFeatureChange_ = function (event) {
	        var feature = /** @type {import("../Feature.js").default<Geometry>} */event.target;
	        var featureKey = (0, _util.getUid)(feature);
	        var geometry = feature.getGeometry();
	        if (!geometry) {
	            if (!(featureKey in this.nullGeometryFeatures_)) {
	                if (this.featuresRtree_) {
	                    this.featuresRtree_.remove(feature);
	                }
	                this.nullGeometryFeatures_[featureKey] = feature;
	            }
	        } else {
	            var extent = geometry.getExtent();
	            if (featureKey in this.nullGeometryFeatures_) {
	                delete this.nullGeometryFeatures_[featureKey];
	                if (this.featuresRtree_) {
	                    this.featuresRtree_.insert(extent, feature);
	                }
	            } else {
	                if (this.featuresRtree_) {
	                    this.featuresRtree_.update(extent, feature);
	                }
	            }
	        }
	        var id = feature.getId();
	        if (id !== undefined) {
	            var sid = id.toString();
	            if (this.idIndex_[sid] !== feature) {
	                this.removeFromIdIndex_(feature);
	                this.idIndex_[sid] = feature;
	            }
	        } else {
	            this.removeFromIdIndex_(feature);
	            this.uidIndex_[featureKey] = feature;
	        }
	        this.changed();
	        this.dispatchEvent(new VectorSourceEvent(_VectorEventType2.default.CHANGEFEATURE, feature));
	    };
	    /**
	     * Returns true if the feature is contained within the source.
	     * @param {import("../Feature.js").default<Geometry>} feature Feature.
	     * @return {boolean} Has feature.
	     * @api
	     */
	    VectorSource.prototype.hasFeature = function (feature) {
	        var id = feature.getId();
	        if (id !== undefined) {
	            return id in this.idIndex_;
	        } else {
	            return (0, _util.getUid)(feature) in this.uidIndex_;
	        }
	    };
	    /**
	     * @return {boolean} Is empty.
	     */
	    VectorSource.prototype.isEmpty = function () {
	        return this.featuresRtree_.isEmpty() && (0, _obj.isEmpty)(this.nullGeometryFeatures_);
	    };
	    /**
	     * @param {import("../extent.js").Extent} extent Extent.
	     * @param {number} resolution Resolution.
	     * @param {import("../proj/Projection.js").default} projection Projection.
	     */
	    VectorSource.prototype.loadFeatures = function (extent, resolution, projection) {
	        var loadedExtentsRtree = this.loadedExtentsRtree_;
	        var extentsToLoad = this.strategy_(extent, resolution);
	        this.loading = false;
	        var _loop_1 = function _loop_1(i, ii) {
	            var extentToLoad = extentsToLoad[i];
	            var alreadyLoaded = loadedExtentsRtree.forEachInExtent(extentToLoad,
	            /**
	             * @param {{extent: import("../extent.js").Extent}} object Object.
	             * @return {boolean} Contains.
	             */
	            function (object) {
	                return (0, _extent.containsExtent)(object.extent, extentToLoad);
	            });
	            if (!alreadyLoaded) {
	                this_1.loader_.call(this_1, extentToLoad, resolution, projection);
	                loadedExtentsRtree.insert(extentToLoad, { extent: extentToLoad.slice() });
	                this_1.loading = this_1.loader_ !== _functions.VOID;
	            }
	        };
	        var this_1 = this;
	        for (var i = 0, ii = extentsToLoad.length; i < ii; ++i) {
	            _loop_1(i, ii);
	        }
	    };
	    /**
	     * @inheritDoc
	     */
	    VectorSource.prototype.refresh = function () {
	        this.clear(true);
	        this.loadedExtentsRtree_.clear();
	        _super.prototype.refresh.call(this);
	    };
	    /**
	     * Remove an extent from the list of loaded extents.
	     * @param {import("../extent.js").Extent} extent Extent.
	     * @api
	     */
	    VectorSource.prototype.removeLoadedExtent = function (extent) {
	        var loadedExtentsRtree = this.loadedExtentsRtree_;
	        var obj;
	        loadedExtentsRtree.forEachInExtent(extent, function (object) {
	            if ((0, _extent.equals)(object.extent, extent)) {
	                obj = object;
	                return true;
	            }
	        });
	        if (obj) {
	            loadedExtentsRtree.remove(obj);
	        }
	    };
	    /**
	     * Remove a single feature from the source.  If you want to remove all features
	     * at once, use the {@link module:ol/source/Vector~VectorSource#clear #clear()} method
	     * instead.
	     * @param {import("../Feature.js").default<Geometry>} feature Feature to remove.
	     * @api
	     */
	    VectorSource.prototype.removeFeature = function (feature) {
	        var featureKey = (0, _util.getUid)(feature);
	        if (featureKey in this.nullGeometryFeatures_) {
	            delete this.nullGeometryFeatures_[featureKey];
	        } else {
	            if (this.featuresRtree_) {
	                this.featuresRtree_.remove(feature);
	            }
	        }
	        this.removeFeatureInternal(feature);
	        this.changed();
	    };
	    /**
	     * Remove feature without firing a `change` event.
	     * @param {import("../Feature.js").default<Geometry>} feature Feature.
	     * @protected
	     */
	    VectorSource.prototype.removeFeatureInternal = function (feature) {
	        var featureKey = (0, _util.getUid)(feature);
	        this.featureChangeKeys_[featureKey].forEach(_events.unlistenByKey);
	        delete this.featureChangeKeys_[featureKey];
	        var id = feature.getId();
	        if (id !== undefined) {
	            delete this.idIndex_[id.toString()];
	        }
	        delete this.uidIndex_[featureKey];
	        this.dispatchEvent(new VectorSourceEvent(_VectorEventType2.default.REMOVEFEATURE, feature));
	    };
	    /**
	     * Remove a feature from the id index.  Called internally when the feature id
	     * may have changed.
	     * @param {import("../Feature.js").default<Geometry>} feature The feature.
	     * @return {boolean} Removed the feature from the index.
	     * @private
	     */
	    VectorSource.prototype.removeFromIdIndex_ = function (feature) {
	        var removed = false;
	        for (var id in this.idIndex_) {
	            if (this.idIndex_[id] === feature) {
	                delete this.idIndex_[id];
	                removed = true;
	                break;
	            }
	        }
	        return removed;
	    };
	    /**
	     * Set the new loader of the source. The next render cycle will use the
	     * new loader.
	     * @param {import("../featureloader.js").FeatureLoader} loader The loader to set.
	     * @api
	     */
	    VectorSource.prototype.setLoader = function (loader) {
	        this.loader_ = loader;
	    };
	    /**
	     * Points the source to a new url. The next render cycle will use the new url.
	     * @param {string|import("../featureloader.js").FeatureUrlFunction} url Url.
	     * @api
	     */
	    VectorSource.prototype.setUrl = function (url) {
	        (0, _asserts.assert)(this.format_, 7); // `format` must be set when `url` is set
	        this.setLoader((0, _featureloader.xhr)(url, this.format_));
	    };
	    return VectorSource;
	}(_Source2.default);
	exports.default = VectorSource;
	//# sourceMappingURL=Vector.js.map

/***/ }),
/* 109 */
/***/ (function(module, exports) {

	var after, bisect, centerTooltipOn, insort, intersects, merged, offsetDate, parseDuration, pixelDistance, pixelMaxDifference, pixelWidth, split, subtract,
	  slice = [].slice;
	
	split = function(list, predicate) {
	  var a, b, i, item, len;
	  a = [];
	  b = [];
	  for (i = 0, len = list.length; i < len; i++) {
	    item = list[i];
	    if (predicate(item)) {
	      a.push(item);
	    } else {
	      b.push(item);
	    }
	  }
	  return [a, b];
	};
	
	bisect = function(array, x, lo, hi) {
	  var mid;
	  if (lo == null) {
	    lo = 0;
	  }
	  if (hi == null) {
	    hi = array.length;
	  }
	  while (lo < hi) {
	    mid = Math.floor((lo + hi) / 2);
	    if (x < array[mid]) {
	      hi = mid;
	    } else {
	      lo = mid + 1;
	    }
	  }
	  return lo;
	};
	
	insort = function(array, x) {
	  return array.splice(bisect(array, x), 0, x);
	};
	
	intersects = function(a, b) {
	  return a[0] <= b[1] && b[0] <= a[1];
	};
	
	pixelDistance = function(a, b, scale) {
	  if (intersects(a, b)) {
	    return 0;
	  } else {
	    return Math.min(Math.abs(scale(a[0]) - scale(b[0])), Math.abs(scale(a[1]) - scale(b[1])));
	  }
	};
	
	pixelWidth = function(interval, scale) {
	  if (interval[1] instanceof Date) {
	    return scale(interval[1]) - scale(interval[0]);
	  }
	  return 0;
	};
	
	pixelMaxDifference = function(a, b, scale) {
	  var diffs;
	  diffs = subtract(a, b);
	  if (diffs.length === 0) {
	    return 0;
	  } else {
	    return Math.max.apply(Math, diffs.map(function(diff) {
	      return pixelWidth(diff, scale);
	    }));
	  }
	};
	
	merged = function(a, b, predicate) {
	  var i, len, out, r2;
	  out = a.slice(0);
	  for (i = 0, len = b.length; i < len; i++) {
	    r2 = b[i];
	    if (!a.find(function(r1) {
	      return predicate(r1, r2);
	    })) {
	      out.push(r2);
	    }
	  }
	  return out;
	};
	
	after = function(n, callback) {
	  var count;
	  count = 0;
	  return function() {
	    var args;
	    args = 1 <= arguments.length ? slice.call(arguments, 0) : [];
	    ++count;
	    if (count === n) {
	      return callback.apply(null, args);
	    }
	  };
	};
	
	subtract = function(a, b) {
	  if (!intersects(a, b)) {
	    return [a];
	  } else if (a[0] < b[0] && a[1] > b[1]) {
	    return [[a[0], b[0]], [b[1], a[1]]];
	  } else if (a[0] < b[0]) {
	    return [[a[0], b[0]]];
	  } else if (a[1] > b[1]) {
	    return [[b[1], a[1]]];
	  } else {
	    return [];
	  }
	};
	
	parseDuration = function(duration) {
	  var days, hours, matches, minutes, months, years;
	  if (!isNaN(parseFloat(duration))) {
	    return parseFloat(duration);
	  }
	  matches = duration.match(/^P(?:([0-9]+)Y|)?(?:([0-9]+)M|)?(?:([0-9]+)D|)?T?(?:([0-9]+)H|)?(?:([0-9]+)M|)?(?:([0-9]+)S|)?$/);
	  if (matches) {
	    years = parseInt(matches[1]) || 0;
	    months = (parseInt(matches[2]) || 0) + years * 12;
	    days = (parseInt(matches[3]) || 0) + months * 30;
	    hours = (parseInt(matches[4]) || 0) + days * 24;
	    minutes = (parseInt(matches[5]) || 0) + hours * 60;
	    return (parseInt(matches[6]) || 0) + minutes * 60;
	  }
	};
	
	offsetDate = function(date, seconds) {
	  return new Date(date.getTime() + seconds * 1000);
	};
	
	centerTooltipOn = function(tooltip, target, dir, offset) {
	  var rect, tooltipRect, xOff;
	  if (dir == null) {
	    dir = 'center';
	  }
	  if (offset == null) {
	    offset = [0, 0];
	  }
	  rect = target.getBoundingClientRect();
	  tooltipRect = tooltip[0][0].getBoundingClientRect();
	  if (dir === 'left') {
	    xOff = rect.left;
	  } else if (dir === 'right') {
	    xOff = rect.right;
	  } else {
	    xOff = rect.left + rect.width / 2;
	  }
	  return tooltip.style('left', xOff - tooltipRect.width / 2 + offset[0] + "px").style('top', (rect.top - tooltipRect.height) + offset[1] + "px");
	};
	
	module.exports = {
	  split: split,
	  bisect: bisect,
	  insort: insort,
	  intersects: intersects,
	  pixelDistance: pixelDistance,
	  pixelWidth: pixelWidth,
	  pixelMaxDifference: pixelMaxDifference,
	  merged: merged,
	  after: after,
	  subtract: subtract,
	  parseDuration: parseDuration,
	  offsetDate: offsetDate,
	  centerTooltipOn: centerTooltipOn
	};


/***/ }),
/* 110 */
/***/ (function(module, exports, __webpack_require__) {

	// getting tag from 19.1.3.6 Object.prototype.toString()
	var cof = __webpack_require__(50);
	var TAG = __webpack_require__(20)('toStringTag');
	// ES3 wrong here
	var ARG = cof(function () { return arguments; }()) == 'Arguments';
	
	// fallback for IE11 Script Access Denied error
	var tryGet = function (it, key) {
	  try {
	    return it[key];
	  } catch (e) { /* empty */ }
	};
	
	module.exports = function (it) {
	  var O, T, B;
	  return it === undefined ? 'Undefined' : it === null ? 'Null'
	    // @@toStringTag case
	    : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T
	    // builtinTag case
	    : ARG ? cof(O)
	    // ES3 arguments fallback
	    : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;
	};


/***/ }),
/* 111 */
/***/ (function(module, exports) {

	module.exports = {};


/***/ }),
/* 112 */
/***/ (function(module, exports, __webpack_require__) {

	var def = __webpack_require__(26).f;
	var has = __webpack_require__(42);
	var TAG = __webpack_require__(20)('toStringTag');
	
	module.exports = function (it, tag, stat) {
	  if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });
	};


/***/ }),
/* 113 */
/***/ (function(module, exports, __webpack_require__) {

	var $export = __webpack_require__(3);
	var defined = __webpack_require__(59);
	var fails = __webpack_require__(13);
	var spaces = __webpack_require__(215);
	var space = '[' + spaces + ']';
	var non = '\u200b\u0085';
	var ltrim = RegExp('^' + space + space + '*');
	var rtrim = RegExp(space + space + '*$');
	
	var exporter = function (KEY, exec, ALIAS) {
	  var exp = {};
	  var FORCE = fails(function () {
	    return !!spaces[KEY]() || non[KEY]() != non;
	  });
	  var fn = exp[KEY] = FORCE ? exec(trim) : spaces[KEY];
	  if (ALIAS) exp[ALIAS] = fn;
	  $export($export.P + $export.F * FORCE, 'String', exp);
	};
	
	// 1 -> String#trimLeft
	// 2 -> String#trimRight
	// 3 -> String#trim
	var trim = exporter.trim = function (string, TYPE) {
	  string = String(defined(string));
	  if (TYPE & 1) string = string.replace(ltrim, '');
	  if (TYPE & 2) string = string.replace(rtrim, '');
	  return string;
	};
	
	module.exports = exporter;


/***/ }),
/* 114 */
/***/ (function(module, exports, __webpack_require__) {

	var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;( function( factory ) {
		if ( true ) {
	
			// AMD. Register as an anonymous module.
			!(__WEBPACK_AMD_DEFINE_ARRAY__ = [ __webpack_require__(12) ], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
		} else {
	
			// Browser globals
			factory( jQuery );
		}
	} ( function( $ ) {
	
	$.ui = $.ui || {};
	
	return $.ui.version = "1.12.1";
	
	} ) );


/***/ }),
/* 115 */
/***/ (function(module, exports, __webpack_require__) {

	/* WEBPACK VAR INJECTION */(function(Buffer) {'use strict';
	exports.base64 = true;
	exports.array = true;
	exports.string = true;
	exports.arraybuffer = typeof ArrayBuffer !== "undefined" && typeof Uint8Array !== "undefined";
	// contains true if JSZip can read/generate nodejs Buffer, false otherwise.
	// Browserify will provide a Buffer implementation for browsers, which is
	// an augmented Uint8Array (i.e., can be used as either Buffer or U8).
	exports.nodebuffer = typeof Buffer !== "undefined";
	// contains true if JSZip can read/generate Uint8Array, false otherwise.
	exports.uint8array = typeof Uint8Array !== "undefined";
	
	if (typeof ArrayBuffer === "undefined") {
	    exports.blob = false;
	}
	else {
	    var buffer = new ArrayBuffer(0);
	    try {
	        exports.blob = new Blob([buffer], {
	            type: "application/zip"
	        }).size === 0;
	    }
	    catch (e) {
	        try {
	            var Builder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder || window.MSBlobBuilder;
	            var builder = new Builder();
	            builder.append(buffer);
	            exports.blob = builder.getBlob('application/zip').size === 0;
	        }
	        catch (e) {
	            exports.blob = false;
	        }
	    }
	}
	
	/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(193).Buffer))

/***/ }),
/* 116 */
/***/ (function(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; };


/***/ }),
/* 117 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, '__esModule', { value: true });
	
	var helpers = __webpack_require__(68);
	
	/**
	 * Unwrap a coordinate from a Point Feature, Geometry or a single coordinate.
	 *
	 * @name getCoord
	 * @param {Array<number>|Geometry<Point>|Feature<Point>} coord GeoJSON Point or an Array of numbers
	 * @returns {Array<number>} coordinates
	 * @example
	 * var pt = turf.point([10, 10]);
	 *
	 * var coord = turf.getCoord(pt);
	 * //= [10, 10]
	 */
	function getCoord(coord) {
	    if (!coord) throw new Error('coord is required');
	    if (coord.type === 'Feature' && coord.geometry !== null && coord.geometry.type === 'Point') return coord.geometry.coordinates;
	    if (coord.type === 'Point') return coord.coordinates;
	    if (Array.isArray(coord) && coord.length >= 2 && coord[0].length === undefined && coord[1].length === undefined) return coord;
	
	    throw new Error('coord must be GeoJSON Point or an Array of numbers');
	}
	
	/**
	 * Unwrap coordinates from a Feature, Geometry Object or an Array
	 *
	 * @name getCoords
	 * @param {Array<any>|Geometry|Feature} coords Feature, Geometry Object or an Array
	 * @returns {Array<any>} coordinates
	 * @example
	 * var poly = turf.polygon([[[119.32, -8.7], [119.55, -8.69], [119.51, -8.54], [119.32, -8.7]]]);
	 *
	 * var coords = turf.getCoords(poly);
	 * //= [[[119.32, -8.7], [119.55, -8.69], [119.51, -8.54], [119.32, -8.7]]]
	 */
	function getCoords(coords) {
	    if (!coords) throw new Error('coords is required');
	
	    // Feature
	    if (coords.type === 'Feature' && coords.geometry !== null) return coords.geometry.coordinates;
	
	    // Geometry
	    if (coords.coordinates) return coords.coordinates;
	
	    // Array of numbers
	    if (Array.isArray(coords)) return coords;
	
	    throw new Error('coords must be GeoJSON Feature, Geometry Object or an Array');
	}
	
	/**
	 * Checks if coordinates contains a number
	 *
	 * @name containsNumber
	 * @param {Array<any>} coordinates GeoJSON Coordinates
	 * @returns {boolean} true if Array contains a number
	 */
	function containsNumber(coordinates) {
	    if (coordinates.length > 1 && helpers.isNumber(coordinates[0]) && helpers.isNumber(coordinates[1])) {
	        return true;
	    }
	
	    if (Array.isArray(coordinates[0]) && coordinates[0].length) {
	        return containsNumber(coordinates[0]);
	    }
	    throw new Error('coordinates must only contain numbers');
	}
	
	/**
	 * Enforce expectations about types of GeoJSON objects for Turf.
	 *
	 * @name geojsonType
	 * @param {GeoJSON} value any GeoJSON object
	 * @param {string} type expected GeoJSON type
	 * @param {string} name name of calling function
	 * @throws {Error} if value is not the expected type.
	 */
	function geojsonType(value, type, name) {
	    if (!type || !name) throw new Error('type and name required');
	
	    if (!value || value.type !== type) {
	        throw new Error('Invalid input to ' + name + ': must be a ' + type + ', given ' + value.type);
	    }
	}
	
	/**
	 * Enforce expectations about types of {@link Feature} inputs for Turf.
	 * Internally this uses {@link geojsonType} to judge geometry types.
	 *
	 * @name featureOf
	 * @param {Feature} feature a feature with an expected geometry type
	 * @param {string} type expected GeoJSON type
	 * @param {string} name name of calling function
	 * @throws {Error} error if value is not the expected type.
	 */
	function featureOf(feature, type, name) {
	    if (!feature) throw new Error('No feature passed');
	    if (!name) throw new Error('.featureOf() requires a name');
	    if (!feature || feature.type !== 'Feature' || !feature.geometry) {
	        throw new Error('Invalid input to ' + name + ', Feature with geometry required');
	    }
	    if (!feature.geometry || feature.geometry.type !== type) {
	        throw new Error('Invalid input to ' + name + ': must be a ' + type + ', given ' + feature.geometry.type);
	    }
	}
	
	/**
	 * Enforce expectations about types of {@link FeatureCollection} inputs for Turf.
	 * Internally this uses {@link geojsonType} to judge geometry types.
	 *
	 * @name collectionOf
	 * @param {FeatureCollection} featureCollection a FeatureCollection for which features will be judged
	 * @param {string} type expected GeoJSON type
	 * @param {string} name name of calling function
	 * @throws {Error} if value is not the expected type.
	 */
	function collectionOf(featureCollection, type, name) {
	    if (!featureCollection) throw new Error('No featureCollection passed');
	    if (!name) throw new Error('.collectionOf() requires a name');
	    if (!featureCollection || featureCollection.type !== 'FeatureCollection') {
	        throw new Error('Invalid input to ' + name + ', FeatureCollection required');
	    }
	    for (var i = 0; i < featureCollection.features.length; i++) {
	        var feature = featureCollection.features[i];
	        if (!feature || feature.type !== 'Feature' || !feature.geometry) {
	            throw new Error('Invalid input to ' + name + ', Feature with geometry required');
	        }
	        if (!feature.geometry || feature.geometry.type !== type) {
	            throw new Error('Invalid input to ' + name + ': must be a ' + type + ', given ' + feature.geometry.type);
	        }
	    }
	}
	
	/**
	 * Get Geometry from Feature or Geometry Object
	 *
	 * @param {Feature|Geometry} geojson GeoJSON Feature or Geometry Object
	 * @returns {Geometry|null} GeoJSON Geometry Object
	 * @throws {Error} if geojson is not a Feature or Geometry Object
	 * @example
	 * var point = {
	 *   "type": "Feature",
	 *   "properties": {},
	 *   "geometry": {
	 *     "type": "Point",
	 *     "coordinates": [110, 40]
	 *   }
	 * }
	 * var geom = turf.getGeom(point)
	 * //={"type": "Point", "coordinates": [110, 40]}
	 */
	function getGeom(geojson) {
	    if (!geojson) throw new Error('geojson is required');
	    if (geojson.geometry !== undefined) return geojson.geometry;
	    if (geojson.coordinates || geojson.geometries) return geojson;
	    throw new Error('geojson must be a valid Feature or Geometry Object');
	}
	
	/**
	 * Get Geometry Type from Feature or Geometry Object
	 *
	 * @throws {Error} **DEPRECATED** in v5.0.0 in favor of getType
	 */
	function getGeomType() {
	    throw new Error('invariant.getGeomType has been deprecated in v5.0 in favor of invariant.getType');
	}
	
	/**
	 * Get GeoJSON object's type, Geometry type is prioritize.
	 *
	 * @param {GeoJSON} geojson GeoJSON object
	 * @param {string} [name="geojson"] name of the variable to display in error message
	 * @returns {string} GeoJSON type
	 * @example
	 * var point = {
	 *   "type": "Feature",
	 *   "properties": {},
	 *   "geometry": {
	 *     "type": "Point",
	 *     "coordinates": [110, 40]
	 *   }
	 * }
	 * var geom = turf.getType(point)
	 * //="Point"
	 */
	function getType(geojson, name) {
	    if (!geojson) throw new Error((name || 'geojson') + ' is required');
	    // GeoJSON Feature & GeometryCollection
	    if (geojson.geometry && geojson.geometry.type) return geojson.geometry.type;
	    // GeoJSON Geometry & FeatureCollection
	    if (geojson.type) return geojson.type;
	    throw new Error((name || 'geojson') + ' is invalid');
	}
	
	exports.getCoord = getCoord;
	exports.getCoords = getCoords;
	exports.containsNumber = containsNumber;
	exports.geojsonType = geojsonType;
	exports.featureOf = featureOf;
	exports.collectionOf = collectionOf;
	exports.getGeom = getGeom;
	exports.getGeomType = getGeomType;
	exports.getType = getType;


/***/ }),
/* 118 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, '__esModule', { value: true });
	
	var helpers = __webpack_require__(68);
	
	/**
	 * Callback for coordEach
	 *
	 * @callback coordEachCallback
	 * @param {Array<number>} currentCoord The current coordinate being processed.
	 * @param {number} coordIndex The current index of the coordinate being processed.
	 * @param {number} featureIndex The current index of the Feature being processed.
	 * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed.
	 * @param {number} geometryIndex The current index of the Geometry being processed.
	 */
	
	/**
	 * Iterate over coordinates in any GeoJSON object, similar to Array.forEach()
	 *
	 * @name coordEach
	 * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object
	 * @param {Function} callback a method that takes (currentCoord, coordIndex, featureIndex, multiFeatureIndex)
	 * @param {boolean} [excludeWrapCoord=false] whether or not to include the final coordinate of LinearRings that wraps the ring in its iteration.
	 * @returns {void}
	 * @example
	 * var features = turf.featureCollection([
	 *   turf.point([26, 37], {"foo": "bar"}),
	 *   turf.point([36, 53], {"hello": "world"})
	 * ]);
	 *
	 * turf.coordEach(features, function (currentCoord, coordIndex, featureIndex, multiFeatureIndex, geometryIndex) {
	 *   //=currentCoord
	 *   //=coordIndex
	 *   //=featureIndex
	 *   //=multiFeatureIndex
	 *   //=geometryIndex
	 * });
	 */
	function coordEach(geojson, callback, excludeWrapCoord) {
	    // Handles null Geometry -- Skips this GeoJSON
	    if (geojson === null) return;
	    var j, k, l, geometry, stopG, coords,
	        geometryMaybeCollection,
	        wrapShrink = 0,
	        coordIndex = 0,
	        isGeometryCollection,
	        type = geojson.type,
	        isFeatureCollection = type === 'FeatureCollection',
	        isFeature = type === 'Feature',
	        stop = isFeatureCollection ? geojson.features.length : 1;
	
	    // This logic may look a little weird. The reason why it is that way
	    // is because it's trying to be fast. GeoJSON supports multiple kinds
	    // of objects at its root: FeatureCollection, Features, Geometries.
	    // This function has the responsibility of handling all of them, and that
	    // means that some of the `for` loops you see below actually just don't apply
	    // to certain inputs. For instance, if you give this just a
	    // Point geometry, then both loops are short-circuited and all we do
	    // is gradually rename the input until it's called 'geometry'.
	    //
	    // This also aims to allocate as few resources as possible: just a
	    // few numbers and booleans, rather than any temporary arrays as would
	    // be required with the normalization approach.
	    for (var featureIndex = 0; featureIndex < stop; featureIndex++) {
	        geometryMaybeCollection = (isFeatureCollection ? geojson.features[featureIndex].geometry :
	            (isFeature ? geojson.geometry : geojson));
	        isGeometryCollection = (geometryMaybeCollection) ? geometryMaybeCollection.type === 'GeometryCollection' : false;
	        stopG = isGeometryCollection ? geometryMaybeCollection.geometries.length : 1;
	
	        for (var geomIndex = 0; geomIndex < stopG; geomIndex++) {
	            var multiFeatureIndex = 0;
	            var geometryIndex = 0;
	            geometry = isGeometryCollection ?
	                geometryMaybeCollection.geometries[geomIndex] : geometryMaybeCollection;
	
	            // Handles null Geometry -- Skips this geometry
	            if (geometry === null) continue;
	            coords = geometry.coordinates;
	            var geomType = geometry.type;
	
	            wrapShrink = (excludeWrapCoord && (geomType === 'Polygon' || geomType === 'MultiPolygon')) ? 1 : 0;
	
	            switch (geomType) {
	            case null:
	                break;
	            case 'Point':
	                if (callback(coords, coordIndex, featureIndex, multiFeatureIndex, geometryIndex) === false) return false;
	                coordIndex++;
	                multiFeatureIndex++;
	                break;
	            case 'LineString':
	            case 'MultiPoint':
	                for (j = 0; j < coords.length; j++) {
	                    if (callback(coords[j], coordIndex, featureIndex, multiFeatureIndex, geometryIndex) === false) return false;
	                    coordIndex++;
	                    if (geomType === 'MultiPoint') multiFeatureIndex++;
	                }
	                if (geomType === 'LineString') multiFeatureIndex++;
	                break;
	            case 'Polygon':
	            case 'MultiLineString':
	                for (j = 0; j < coords.length; j++) {
	                    for (k = 0; k < coords[j].length - wrapShrink; k++) {
	                        if (callback(coords[j][k], coordIndex, featureIndex, multiFeatureIndex, geometryIndex) === false) return false;
	                        coordIndex++;
	                    }
	                    if (geomType === 'MultiLineString') multiFeatureIndex++;
	                    if (geomType === 'Polygon') geometryIndex++;
	                }
	                if (geomType === 'Polygon') multiFeatureIndex++;
	                break;
	            case 'MultiPolygon':
	                for (j = 0; j < coords.length; j++) {
	                    if (geomType === 'MultiPolygon') geometryIndex = 0;
	                    for (k = 0; k < coords[j].length; k++) {
	                        for (l = 0; l < coords[j][k].length - wrapShrink; l++) {
	                            if (callback(coords[j][k][l], coordIndex, featureIndex, multiFeatureIndex, geometryIndex) === false) return false;
	                            coordIndex++;
	                        }
	                        geometryIndex++;
	                    }
	                    multiFeatureIndex++;
	                }
	                break;
	            case 'GeometryCollection':
	                for (j = 0; j < geometry.geometries.length; j++)
	                    if (coordEach(geometry.geometries[j], callback, excludeWrapCoord) === false) return false;
	                break;
	            default:
	                throw new Error('Unknown Geometry Type');
	            }
	        }
	    }
	}
	
	/**
	 * Callback for coordReduce
	 *
	 * The first time the callback function is called, the values provided as arguments depend
	 * on whether the reduce method has an initialValue argument.
	 *
	 * If an initialValue is provided to the reduce method:
	 *  - The previousValue argument is initialValue.
	 *  - The currentValue argument is the value of the first element present in the array.
	 *
	 * If an initialValue is not provided:
	 *  - The previousValue argument is the value of the first element present in the array.
	 *  - The currentValue argument is the value of the second element present in the array.
	 *
	 * @callback coordReduceCallback
	 * @param {*} previousValue The accumulated value previously returned in the last invocation
	 * of the callback, or initialValue, if supplied.
	 * @param {Array<number>} currentCoord The current coordinate being processed.
	 * @param {number} coordIndex The current index of the coordinate being processed.
	 * Starts at index 0, if an initialValue is provided, and at index 1 otherwise.
	 * @param {number} featureIndex The current index of the Feature being processed.
	 * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed.
	 * @param {number} geometryIndex The current index of the Geometry being processed.
	 */
	
	/**
	 * Reduce coordinates in any GeoJSON object, similar to Array.reduce()
	 *
	 * @name coordReduce
	 * @param {FeatureCollection|Geometry|Feature} geojson any GeoJSON object
	 * @param {Function} callback a method that takes (previousValue, currentCoord, coordIndex)
	 * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.
	 * @param {boolean} [excludeWrapCoord=false] whether or not to include the final coordinate of LinearRings that wraps the ring in its iteration.
	 * @returns {*} The value that results from the reduction.
	 * @example
	 * var features = turf.featureCollection([
	 *   turf.point([26, 37], {"foo": "bar"}),
	 *   turf.point([36, 53], {"hello": "world"})
	 * ]);
	 *
	 * turf.coordReduce(features, function (previousValue, currentCoord, coordIndex, featureIndex, multiFeatureIndex, geometryIndex) {
	 *   //=previousValue
	 *   //=currentCoord
	 *   //=coordIndex
	 *   //=featureIndex
	 *   //=multiFeatureIndex
	 *   //=geometryIndex
	 *   return currentCoord;
	 * });
	 */
	function coordReduce(geojson, callback, initialValue, excludeWrapCoord) {
	    var previousValue = initialValue;
	    coordEach(geojson, function (currentCoord, coordIndex, featureIndex, multiFeatureIndex, geometryIndex) {
	        if (coordIndex === 0 && initialValue === undefined) previousValue = currentCoord;
	        else previousValue = callback(previousValue, currentCoord, coordIndex, featureIndex, multiFeatureIndex, geometryIndex);
	    }, excludeWrapCoord);
	    return previousValue;
	}
	
	/**
	 * Callback for propEach
	 *
	 * @callback propEachCallback
	 * @param {Object} currentProperties The current Properties being processed.
	 * @param {number} featureIndex The current index of the Feature being processed.
	 */
	
	/**
	 * Iterate over properties in any GeoJSON object, similar to Array.forEach()
	 *
	 * @name propEach
	 * @param {FeatureCollection|Feature} geojson any GeoJSON object
	 * @param {Function} callback a method that takes (currentProperties, featureIndex)
	 * @returns {void}
	 * @example
	 * var features = turf.featureCollection([
	 *     turf.point([26, 37], {foo: 'bar'}),
	 *     turf.point([36, 53], {hello: 'world'})
	 * ]);
	 *
	 * turf.propEach(features, function (currentProperties, featureIndex) {
	 *   //=currentProperties
	 *   //=featureIndex
	 * });
	 */
	function propEach(geojson, callback) {
	    var i;
	    switch (geojson.type) {
	    case 'FeatureCollection':
	        for (i = 0; i < geojson.features.length; i++) {
	            if (callback(geojson.features[i].properties, i) === false) break;
	        }
	        break;
	    case 'Feature':
	        callback(geojson.properties, 0);
	        break;
	    }
	}
	
	
	/**
	 * Callback for propReduce
	 *
	 * The first time the callback function is called, the values provided as arguments depend
	 * on whether the reduce method has an initialValue argument.
	 *
	 * If an initialValue is provided to the reduce method:
	 *  - The previousValue argument is initialValue.
	 *  - The currentValue argument is the value of the first element present in the array.
	 *
	 * If an initialValue is not provided:
	 *  - The previousValue argument is the value of the first element present in the array.
	 *  - The currentValue argument is the value of the second element present in the array.
	 *
	 * @callback propReduceCallback
	 * @param {*} previousValue The accumulated value previously returned in the last invocation
	 * of the callback, or initialValue, if supplied.
	 * @param {*} currentProperties The current Properties being processed.
	 * @param {number} featureIndex The current index of the Feature being processed.
	 */
	
	/**
	 * Reduce properties in any GeoJSON object into a single value,
	 * similar to how Array.reduce works. However, in this case we lazily run
	 * the reduction, so an array of all properties is unnecessary.
	 *
	 * @name propReduce
	 * @param {FeatureCollection|Feature} geojson any GeoJSON object
	 * @param {Function} callback a method that takes (previousValue, currentProperties, featureIndex)
	 * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.
	 * @returns {*} The value that results from the reduction.
	 * @example
	 * var features = turf.featureCollection([
	 *     turf.point([26, 37], {foo: 'bar'}),
	 *     turf.point([36, 53], {hello: 'world'})
	 * ]);
	 *
	 * turf.propReduce(features, function (previousValue, currentProperties, featureIndex) {
	 *   //=previousValue
	 *   //=currentProperties
	 *   //=featureIndex
	 *   return currentProperties
	 * });
	 */
	function propReduce(geojson, callback, initialValue) {
	    var previousValue = initialValue;
	    propEach(geojson, function (currentProperties, featureIndex) {
	        if (featureIndex === 0 && initialValue === undefined) previousValue = currentProperties;
	        else previousValue = callback(previousValue, currentProperties, featureIndex);
	    });
	    return previousValue;
	}
	
	/**
	 * Callback for featureEach
	 *
	 * @callback featureEachCallback
	 * @param {Feature<any>} currentFeature The current Feature being processed.
	 * @param {number} featureIndex The current index of the Feature being processed.
	 */
	
	/**
	 * Iterate over features in any GeoJSON object, similar to
	 * Array.forEach.
	 *
	 * @name featureEach
	 * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object
	 * @param {Function} callback a method that takes (currentFeature, featureIndex)
	 * @returns {void}
	 * @example
	 * var features = turf.featureCollection([
	 *   turf.point([26, 37], {foo: 'bar'}),
	 *   turf.point([36, 53], {hello: 'world'})
	 * ]);
	 *
	 * turf.featureEach(features, function (currentFeature, featureIndex) {
	 *   //=currentFeature
	 *   //=featureIndex
	 * });
	 */
	function featureEach(geojson, callback) {
	    if (geojson.type === 'Feature') {
	        callback(geojson, 0);
	    } else if (geojson.type === 'FeatureCollection') {
	        for (var i = 0; i < geojson.features.length; i++) {
	            if (callback(geojson.features[i], i) === false) break;
	        }
	    }
	}
	
	/**
	 * Callback for featureReduce
	 *
	 * The first time the callback function is called, the values provided as arguments depend
	 * on whether the reduce method has an initialValue argument.
	 *
	 * If an initialValue is provided to the reduce method:
	 *  - The previousValue argument is initialValue.
	 *  - The currentValue argument is the value of the first element present in the array.
	 *
	 * If an initialValue is not provided:
	 *  - The previousValue argument is the value of the first element present in the array.
	 *  - The currentValue argument is the value of the second element present in the array.
	 *
	 * @callback featureReduceCallback
	 * @param {*} previousValue The accumulated value previously returned in the last invocation
	 * of the callback, or initialValue, if supplied.
	 * @param {Feature} currentFeature The current Feature being processed.
	 * @param {number} featureIndex The current index of the Feature being processed.
	 */
	
	/**
	 * Reduce features in any GeoJSON object, similar to Array.reduce().
	 *
	 * @name featureReduce
	 * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object
	 * @param {Function} callback a method that takes (previousValue, currentFeature, featureIndex)
	 * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.
	 * @returns {*} The value that results from the reduction.
	 * @example
	 * var features = turf.featureCollection([
	 *   turf.point([26, 37], {"foo": "bar"}),
	 *   turf.point([36, 53], {"hello": "world"})
	 * ]);
	 *
	 * turf.featureReduce(features, function (previousValue, currentFeature, featureIndex) {
	 *   //=previousValue
	 *   //=currentFeature
	 *   //=featureIndex
	 *   return currentFeature
	 * });
	 */
	function featureReduce(geojson, callback, initialValue) {
	    var previousValue = initialValue;
	    featureEach(geojson, function (currentFeature, featureIndex) {
	        if (featureIndex === 0 && initialValue === undefined) previousValue = currentFeature;
	        else previousValue = callback(previousValue, currentFeature, featureIndex);
	    });
	    return previousValue;
	}
	
	/**
	 * Get all coordinates from any GeoJSON object.
	 *
	 * @name coordAll
	 * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object
	 * @returns {Array<Array<number>>} coordinate position array
	 * @example
	 * var features = turf.featureCollection([
	 *   turf.point([26, 37], {foo: 'bar'}),
	 *   turf.point([36, 53], {hello: 'world'})
	 * ]);
	 *
	 * var coords = turf.coordAll(features);
	 * //= [[26, 37], [36, 53]]
	 */
	function coordAll(geojson) {
	    var coords = [];
	    coordEach(geojson, function (coord) {
	        coords.push(coord);
	    });
	    return coords;
	}
	
	/**
	 * Callback for geomEach
	 *
	 * @callback geomEachCallback
	 * @param {Geometry} currentGeometry The current Geometry being processed.
	 * @param {number} featureIndex The current index of the Feature being processed.
	 * @param {Object} featureProperties The current Feature Properties being processed.
	 * @param {Array<number>} featureBBox The current Feature BBox being processed.
	 * @param {number|string} featureId The current Feature Id being processed.
	 */
	
	/**
	 * Iterate over each geometry in any GeoJSON object, similar to Array.forEach()
	 *
	 * @name geomEach
	 * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object
	 * @param {Function} callback a method that takes (currentGeometry, featureIndex, featureProperties, featureBBox, featureId)
	 * @returns {void}
	 * @example
	 * var features = turf.featureCollection([
	 *     turf.point([26, 37], {foo: 'bar'}),
	 *     turf.point([36, 53], {hello: 'world'})
	 * ]);
	 *
	 * turf.geomEach(features, function (currentGeometry, featureIndex, featureProperties, featureBBox, featureId) {
	 *   //=currentGeometry
	 *   //=featureIndex
	 *   //=featureProperties
	 *   //=featureBBox
	 *   //=featureId
	 * });
	 */
	function geomEach(geojson, callback) {
	    var i, j, g, geometry, stopG,
	        geometryMaybeCollection,
	        isGeometryCollection,
	        featureProperties,
	        featureBBox,
	        featureId,
	        featureIndex = 0,
	        isFeatureCollection = geojson.type === 'FeatureCollection',
	        isFeature = geojson.type === 'Feature',
	        stop = isFeatureCollection ? geojson.features.length : 1;
	
	    // This logic may look a little weird. The reason why it is that way
	    // is because it's trying to be fast. GeoJSON supports multiple kinds
	    // of objects at its root: FeatureCollection, Features, Geometries.
	    // This function has the responsibility of handling all of them, and that
	    // means that some of the `for` loops you see below actually just don't apply
	    // to certain inputs. For instance, if you give this just a
	    // Point geometry, then both loops are short-circuited and all we do
	    // is gradually rename the input until it's called 'geometry'.
	    //
	    // This also aims to allocate as few resources as possible: just a
	    // few numbers and booleans, rather than any temporary arrays as would
	    // be required with the normalization approach.
	    for (i = 0; i < stop; i++) {
	
	        geometryMaybeCollection = (isFeatureCollection ? geojson.features[i].geometry :
	            (isFeature ? geojson.geometry : geojson));
	        featureProperties = (isFeatureCollection ? geojson.features[i].properties :
	            (isFeature ? geojson.properties : {}));
	        featureBBox = (isFeatureCollection ? geojson.features[i].bbox :
	            (isFeature ? geojson.bbox : undefined));
	        featureId = (isFeatureCollection ? geojson.features[i].id :
	            (isFeature ? geojson.id : undefined));
	        isGeometryCollection = (geometryMaybeCollection) ? geometryMaybeCollection.type === 'GeometryCollection' : false;
	        stopG = isGeometryCollection ? geometryMaybeCollection.geometries.length : 1;
	
	        for (g = 0; g < stopG; g++) {
	            geometry = isGeometryCollection ?
	                geometryMaybeCollection.geometries[g] : geometryMaybeCollection;
	
	            // Handle null Geometry
	            if (geometry === null) {
	                if (callback(null, featureIndex, featureProperties, featureBBox, featureId) === false) return false;
	                continue;
	            }
	            switch (geometry.type) {
	            case 'Point':
	            case 'LineString':
	            case 'MultiPoint':
	            case 'Polygon':
	            case 'MultiLineString':
	            case 'MultiPolygon': {
	                if (callback(geometry, featureIndex, featureProperties, featureBBox, featureId) === false) return false;
	                break;
	            }
	            case 'GeometryCollection': {
	                for (j = 0; j < geometry.geometries.length; j++) {
	                    if (callback(geometry.geometries[j], featureIndex, featureProperties, featureBBox, featureId) === false) return false;
	                }
	                break;
	            }
	            default:
	                throw new Error('Unknown Geometry Type');
	            }
	        }
	        // Only increase `featureIndex` per each feature
	        featureIndex++;
	    }
	}
	
	/**
	 * Callback for geomReduce
	 *
	 * The first time the callback function is called, the values provided as arguments depend
	 * on whether the reduce method has an initialValue argument.
	 *
	 * If an initialValue is provided to the reduce method:
	 *  - The previousValue argument is initialValue.
	 *  - The currentValue argument is the value of the first element present in the array.
	 *
	 * If an initialValue is not provided:
	 *  - The previousValue argument is the value of the first element present in the array.
	 *  - The currentValue argument is the value of the second element present in the array.
	 *
	 * @callback geomReduceCallback
	 * @param {*} previousValue The accumulated value previously returned in the last invocation
	 * of the callback, or initialValue, if supplied.
	 * @param {Geometry} currentGeometry The current Geometry being processed.
	 * @param {number} featureIndex The current index of the Feature being processed.
	 * @param {Object} featureProperties The current Feature Properties being processed.
	 * @param {Array<number>} featureBBox The current Feature BBox being processed.
	 * @param {number|string} featureId The current Feature Id being processed.
	 */
	
	/**
	 * Reduce geometry in any GeoJSON object, similar to Array.reduce().
	 *
	 * @name geomReduce
	 * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object
	 * @param {Function} callback a method that takes (previousValue, currentGeometry, featureIndex, featureProperties, featureBBox, featureId)
	 * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.
	 * @returns {*} The value that results from the reduction.
	 * @example
	 * var features = turf.featureCollection([
	 *     turf.point([26, 37], {foo: 'bar'}),
	 *     turf.point([36, 53], {hello: 'world'})
	 * ]);
	 *
	 * turf.geomReduce(features, function (previousValue, currentGeometry, featureIndex, featureProperties, featureBBox, featureId) {
	 *   //=previousValue
	 *   //=currentGeometry
	 *   //=featureIndex
	 *   //=featureProperties
	 *   //=featureBBox
	 *   //=featureId
	 *   return currentGeometry
	 * });
	 */
	function geomReduce(geojson, callback, initialValue) {
	    var previousValue = initialValue;
	    geomEach(geojson, function (currentGeometry, featureIndex, featureProperties, featureBBox, featureId) {
	        if (featureIndex === 0 && initialValue === undefined) previousValue = currentGeometry;
	        else previousValue = callback(previousValue, currentGeometry, featureIndex, featureProperties, featureBBox, featureId);
	    });
	    return previousValue;
	}
	
	/**
	 * Callback for flattenEach
	 *
	 * @callback flattenEachCallback
	 * @param {Feature} currentFeature The current flattened feature being processed.
	 * @param {number} featureIndex The current index of the Feature being processed.
	 * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed.
	 */
	
	/**
	 * Iterate over flattened features in any GeoJSON object, similar to
	 * Array.forEach.
	 *
	 * @name flattenEach
	 * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object
	 * @param {Function} callback a method that takes (currentFeature, featureIndex, multiFeatureIndex)
	 * @example
	 * var features = turf.featureCollection([
	 *     turf.point([26, 37], {foo: 'bar'}),
	 *     turf.multiPoint([[40, 30], [36, 53]], {hello: 'world'})
	 * ]);
	 *
	 * turf.flattenEach(features, function (currentFeature, featureIndex, multiFeatureIndex) {
	 *   //=currentFeature
	 *   //=featureIndex
	 *   //=multiFeatureIndex
	 * });
	 */
	function flattenEach(geojson, callback) {
	    geomEach(geojson, function (geometry, featureIndex, properties, bbox, id) {
	        // Callback for single geometry
	        var type = (geometry === null) ? null : geometry.type;
	        switch (type) {
	        case null:
	        case 'Point':
	        case 'LineString':
	        case 'Polygon':
	            if (callback(helpers.feature(geometry, properties, {bbox: bbox, id: id}), featureIndex, 0) === false) return false;
	            return;
	        }
	
	        var geomType;
	
	        // Callback for multi-geometry
	        switch (type) {
	        case 'MultiPoint':
	            geomType = 'Point';
	            break;
	        case 'MultiLineString':
	            geomType = 'LineString';
	            break;
	        case 'MultiPolygon':
	            geomType = 'Polygon';
	            break;
	        }
	
	        for (var multiFeatureIndex = 0; multiFeatureIndex < geometry.coordinates.length; multiFeatureIndex++) {
	            var coordinate = geometry.coordinates[multiFeatureIndex];
	            var geom = {
	                type: geomType,
	                coordinates: coordinate
	            };
	            if (callback(helpers.feature(geom, properties), featureIndex, multiFeatureIndex) === false) return false;
	        }
	    });
	}
	
	/**
	 * Callback for flattenReduce
	 *
	 * The first time the callback function is called, the values provided as arguments depend
	 * on whether the reduce method has an initialValue argument.
	 *
	 * If an initialValue is provided to the reduce method:
	 *  - The previousValue argument is initialValue.
	 *  - The currentValue argument is the value of the first element present in the array.
	 *
	 * If an initialValue is not provided:
	 *  - The previousValue argument is the value of the first element present in the array.
	 *  - The currentValue argument is the value of the second element present in the array.
	 *
	 * @callback flattenReduceCallback
	 * @param {*} previousValue The accumulated value previously returned in the last invocation
	 * of the callback, or initialValue, if supplied.
	 * @param {Feature} currentFeature The current Feature being processed.
	 * @param {number} featureIndex The current index of the Feature being processed.
	 * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed.
	 */
	
	/**
	 * Reduce flattened features in any GeoJSON object, similar to Array.reduce().
	 *
	 * @name flattenReduce
	 * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object
	 * @param {Function} callback a method that takes (previousValue, currentFeature, featureIndex, multiFeatureIndex)
	 * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.
	 * @returns {*} The value that results from the reduction.
	 * @example
	 * var features = turf.featureCollection([
	 *     turf.point([26, 37], {foo: 'bar'}),
	 *     turf.multiPoint([[40, 30], [36, 53]], {hello: 'world'})
	 * ]);
	 *
	 * turf.flattenReduce(features, function (previousValue, currentFeature, featureIndex, multiFeatureIndex) {
	 *   //=previousValue
	 *   //=currentFeature
	 *   //=featureIndex
	 *   //=multiFeatureIndex
	 *   return currentFeature
	 * });
	 */
	function flattenReduce(geojson, callback, initialValue) {
	    var previousValue = initialValue;
	    flattenEach(geojson, function (currentFeature, featureIndex, multiFeatureIndex) {
	        if (featureIndex === 0 && multiFeatureIndex === 0 && initialValue === undefined) previousValue = currentFeature;
	        else previousValue = callback(previousValue, currentFeature, featureIndex, multiFeatureIndex);
	    });
	    return previousValue;
	}
	
	/**
	 * Callback for segmentEach
	 *
	 * @callback segmentEachCallback
	 * @param {Feature<LineString>} currentSegment The current Segment being processed.
	 * @param {number} featureIndex The current index of the Feature being processed.
	 * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed.
	 * @param {number} geometryIndex The current index of the Geometry being processed.
	 * @param {number} segmentIndex The current index of the Segment being processed.
	 * @returns {void}
	 */
	
	/**
	 * Iterate over 2-vertex line segment in any GeoJSON object, similar to Array.forEach()
	 * (Multi)Point geometries do not contain segments therefore they are ignored during this operation.
	 *
	 * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON
	 * @param {Function} callback a method that takes (currentSegment, featureIndex, multiFeatureIndex, geometryIndex, segmentIndex)
	 * @returns {void}
	 * @example
	 * var polygon = turf.polygon([[[-50, 5], [-40, -10], [-50, -10], [-40, 5], [-50, 5]]]);
	 *
	 * // Iterate over GeoJSON by 2-vertex segments
	 * turf.segmentEach(polygon, function (currentSegment, featureIndex, multiFeatureIndex, geometryIndex, segmentIndex) {
	 *   //=currentSegment
	 *   //=featureIndex
	 *   //=multiFeatureIndex
	 *   //=geometryIndex
	 *   //=segmentIndex
	 * });
	 *
	 * // Calculate the total number of segments
	 * var total = 0;
	 * turf.segmentEach(polygon, function () {
	 *     total++;
	 * });
	 */
	function segmentEach(geojson, callback) {
	    flattenEach(geojson, function (feature$$1, featureIndex, multiFeatureIndex) {
	        var segmentIndex = 0;
	
	        // Exclude null Geometries
	        if (!feature$$1.geometry) return;
	        // (Multi)Point geometries do not contain segments therefore they are ignored during this operation.
	        var type = feature$$1.geometry.type;
	        if (type === 'Point' || type === 'MultiPoint') return;
	
	        // Generate 2-vertex line segments
	        var previousCoords;
	        if (coordEach(feature$$1, function (currentCoord, coordIndex, featureIndexCoord, mutliPartIndexCoord, geometryIndex) {
	            // Simulating a meta.coordReduce() since `reduce` operations cannot be stopped by returning `false`
	            if (previousCoords === undefined) {
	                previousCoords = currentCoord;
	                return;
	            }
	            var currentSegment = helpers.lineString([previousCoords, currentCoord], feature$$1.properties);
	            if (callback(currentSegment, featureIndex, multiFeatureIndex, geometryIndex, segmentIndex) === false) return false;
	            segmentIndex++;
	            previousCoords = currentCoord;
	        }) === false) return false;
	    });
	}
	
	/**
	 * Callback for segmentReduce
	 *
	 * The first time the callback function is called, the values provided as arguments depend
	 * on whether the reduce method has an initialValue argument.
	 *
	 * If an initialValue is provided to the reduce method:
	 *  - The previousValue argument is initialValue.
	 *  - The currentValue argument is the value of the first element present in the array.
	 *
	 * If an initialValue is not provided:
	 *  - The previousValue argument is the value of the first element present in the array.
	 *  - The currentValue argument is the value of the second element present in the array.
	 *
	 * @callback segmentReduceCallback
	 * @param {*} previousValue The accumulated value previously returned in the last invocation
	 * of the callback, or initialValue, if supplied.
	 * @param {Feature<LineString>} currentSegment The current Segment being processed.
	 * @param {number} featureIndex The current index of the Feature being processed.
	 * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed.
	 * @param {number} geometryIndex The current index of the Geometry being processed.
	 * @param {number} segmentIndex The current index of the Segment being processed.
	 */
	
	/**
	 * Reduce 2-vertex line segment in any GeoJSON object, similar to Array.reduce()
	 * (Multi)Point geometries do not contain segments therefore they are ignored during this operation.
	 *
	 * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON
	 * @param {Function} callback a method that takes (previousValue, currentSegment, currentIndex)
	 * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.
	 * @returns {void}
	 * @example
	 * var polygon = turf.polygon([[[-50, 5], [-40, -10], [-50, -10], [-40, 5], [-50, 5]]]);
	 *
	 * // Iterate over GeoJSON by 2-vertex segments
	 * turf.segmentReduce(polygon, function (previousSegment, currentSegment, featureIndex, multiFeatureIndex, geometryIndex, segmentIndex) {
	 *   //= previousSegment
	 *   //= currentSegment
	 *   //= featureIndex
	 *   //= multiFeatureIndex
	 *   //= geometryIndex
	 *   //= segmentInex
	 *   return currentSegment
	 * });
	 *
	 * // Calculate the total number of segments
	 * var initialValue = 0
	 * var total = turf.segmentReduce(polygon, function (previousValue) {
	 *     previousValue++;
	 *     return previousValue;
	 * }, initialValue);
	 */
	function segmentReduce(geojson, callback, initialValue) {
	    var previousValue = initialValue;
	    var started = false;
	    segmentEach(geojson, function (currentSegment, featureIndex, multiFeatureIndex, geometryIndex, segmentIndex) {
	        if (started === false && initialValue === undefined) previousValue = currentSegment;
	        else previousValue = callback(previousValue, currentSegment, featureIndex, multiFeatureIndex, geometryIndex, segmentIndex);
	        started = true;
	    });
	    return previousValue;
	}
	
	/**
	 * Callback for lineEach
	 *
	 * @callback lineEachCallback
	 * @param {Feature<LineString>} currentLine The current LineString|LinearRing being processed
	 * @param {number} featureIndex The current index of the Feature being processed
	 * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed
	 * @param {number} geometryIndex The current index of the Geometry being processed
	 */
	
	/**
	 * Iterate over line or ring coordinates in LineString, Polygon, MultiLineString, MultiPolygon Features or Geometries,
	 * similar to Array.forEach.
	 *
	 * @name lineEach
	 * @param {Geometry|Feature<LineString|Polygon|MultiLineString|MultiPolygon>} geojson object
	 * @param {Function} callback a method that takes (currentLine, featureIndex, multiFeatureIndex, geometryIndex)
	 * @example
	 * var multiLine = turf.multiLineString([
	 *   [[26, 37], [35, 45]],
	 *   [[36, 53], [38, 50], [41, 55]]
	 * ]);
	 *
	 * turf.lineEach(multiLine, function (currentLine, featureIndex, multiFeatureIndex, geometryIndex) {
	 *   //=currentLine
	 *   //=featureIndex
	 *   //=multiFeatureIndex
	 *   //=geometryIndex
	 * });
	 */
	function lineEach(geojson, callback) {
	    // validation
	    if (!geojson) throw new Error('geojson is required');
	
	    flattenEach(geojson, function (feature$$1, featureIndex, multiFeatureIndex) {
	        if (feature$$1.geometry === null) return;
	        var type = feature$$1.geometry.type;
	        var coords = feature$$1.geometry.coordinates;
	        switch (type) {
	        case 'LineString':
	            if (callback(feature$$1, featureIndex, multiFeatureIndex, 0, 0) === false) return false;
	            break;
	        case 'Polygon':
	            for (var geometryIndex = 0; geometryIndex < coords.length; geometryIndex++) {
	                if (callback(helpers.lineString(coords[geometryIndex], feature$$1.properties), featureIndex, multiFeatureIndex, geometryIndex) === false) return false;
	            }
	            break;
	        }
	    });
	}
	
	/**
	 * Callback for lineReduce
	 *
	 * The first time the callback function is called, the values provided as arguments depend
	 * on whether the reduce method has an initialValue argument.
	 *
	 * If an initialValue is provided to the reduce method:
	 *  - The previousValue argument is initialValue.
	 *  - The currentValue argument is the value of the first element present in the array.
	 *
	 * If an initialValue is not provided:
	 *  - The previousValue argument is the value of the first element present in the array.
	 *  - The currentValue argument is the value of the second element present in the array.
	 *
	 * @callback lineReduceCallback
	 * @param {*} previousValue The accumulated value previously returned in the last invocation
	 * of the callback, or initialValue, if supplied.
	 * @param {Feature<LineString>} currentLine The current LineString|LinearRing being processed.
	 * @param {number} featureIndex The current index of the Feature being processed
	 * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed
	 * @param {number} geometryIndex The current index of the Geometry being processed
	 */
	
	/**
	 * Reduce features in any GeoJSON object, similar to Array.reduce().
	 *
	 * @name lineReduce
	 * @param {Geometry|Feature<LineString|Polygon|MultiLineString|MultiPolygon>} geojson object
	 * @param {Function} callback a method that takes (previousValue, currentLine, featureIndex, multiFeatureIndex, geometryIndex)
	 * @param {*} [initialValue] Value to use as the first argument to the first call of the callback.
	 * @returns {*} The value that results from the reduction.
	 * @example
	 * var multiPoly = turf.multiPolygon([
	 *   turf.polygon([[[12,48],[2,41],[24,38],[12,48]], [[9,44],[13,41],[13,45],[9,44]]]),
	 *   turf.polygon([[[5, 5], [0, 0], [2, 2], [4, 4], [5, 5]]])
	 * ]);
	 *
	 * turf.lineReduce(multiPoly, function (previousValue, currentLine, featureIndex, multiFeatureIndex, geometryIndex) {
	 *   //=previousValue
	 *   //=currentLine
	 *   //=featureIndex
	 *   //=multiFeatureIndex
	 *   //=geometryIndex
	 *   return currentLine
	 * });
	 */
	function lineReduce(geojson, callback, initialValue) {
	    var previousValue = initialValue;
	    lineEach(geojson, function (currentLine, featureIndex, multiFeatureIndex, geometryIndex) {
	        if (featureIndex === 0 && initialValue === undefined) previousValue = currentLine;
	        else previousValue = callback(previousValue, currentLine, featureIndex, multiFeatureIndex, geometryIndex);
	    });
	    return previousValue;
	}
	
	/**
	 * Finds a particular 2-vertex LineString Segment from a GeoJSON using `@turf/meta` indexes.
	 *
	 * Negative indexes are permitted.
	 * Point & MultiPoint will always return null.
	 *
	 * @param {FeatureCollection|Feature|Geometry} geojson Any GeoJSON Feature or Geometry
	 * @param {Object} [options={}] Optional parameters
	 * @param {number} [options.featureIndex=0] Feature Index
	 * @param {number} [options.multiFeatureIndex=0] Multi-Feature Index
	 * @param {number} [options.geometryIndex=0] Geometry Index
	 * @param {number} [options.segmentIndex=0] Segment Index
	 * @param {Object} [options.properties={}] Translate Properties to output LineString
	 * @param {BBox} [options.bbox={}] Translate BBox to output LineString
	 * @param {number|string} [options.id={}] Translate Id to output LineString
	 * @returns {Feature<LineString>} 2-vertex GeoJSON Feature LineString
	 * @example
	 * var multiLine = turf.multiLineString([
	 *     [[10, 10], [50, 30], [30, 40]],
	 *     [[-10, -10], [-50, -30], [-30, -40]]
	 * ]);
	 *
	 * // First Segment (defaults are 0)
	 * turf.findSegment(multiLine);
	 * // => Feature<LineString<[[10, 10], [50, 30]]>>
	 *
	 * // First Segment of 2nd Multi Feature
	 * turf.findSegment(multiLine, {multiFeatureIndex: 1});
	 * // => Feature<LineString<[[-10, -10], [-50, -30]]>>
	 *
	 * // Last Segment of Last Multi Feature
	 * turf.findSegment(multiLine, {multiFeatureIndex: -1, segmentIndex: -1});
	 * // => Feature<LineString<[[-50, -30], [-30, -40]]>>
	 */
	function findSegment(geojson, options) {
	    // Optional Parameters
	    options = options || {};
	    if (!helpers.isObject(options)) throw new Error('options is invalid');
	    var featureIndex = options.featureIndex || 0;
	    var multiFeatureIndex = options.multiFeatureIndex || 0;
	    var geometryIndex = options.geometryIndex || 0;
	    var segmentIndex = options.segmentIndex || 0;
	
	    // Find FeatureIndex
	    var properties = options.properties;
	    var geometry;
	
	    switch (geojson.type) {
	    case 'FeatureCollection':
	        if (featureIndex < 0) featureIndex = geojson.features.length + featureIndex;
	        properties = properties || geojson.features[featureIndex].properties;
	        geometry = geojson.features[featureIndex].geometry;
	        break;
	    case 'Feature':
	        properties = properties || geojson.properties;
	        geometry = geojson.geometry;
	        break;
	    case 'Point':
	    case 'MultiPoint':
	        return null;
	    case 'LineString':
	    case 'Polygon':
	    case 'MultiLineString':
	    case 'MultiPolygon':
	        geometry = geojson;
	        break;
	    default:
	        throw new Error('geojson is invalid');
	    }
	
	    // Find SegmentIndex
	    if (geometry === null) return null;
	    var coords = geometry.coordinates;
	    switch (geometry.type) {
	    case 'Point':
	    case 'MultiPoint':
	        return null;
	    case 'LineString':
	        if (segmentIndex < 0) segmentIndex = coords.length + segmentIndex - 1;
	        return helpers.lineString([coords[segmentIndex], coords[segmentIndex + 1]], properties, options);
	    case 'Polygon':
	        if (geometryIndex < 0) geometryIndex = coords.length + geometryIndex;
	        if (segmentIndex < 0) segmentIndex = coords[geometryIndex].length + segmentIndex - 1;
	        return helpers.lineString([coords[geometryIndex][segmentIndex], coords[geometryIndex][segmentIndex + 1]], properties, options);
	    case 'MultiLineString':
	        if (multiFeatureIndex < 0) multiFeatureIndex = coords.length + multiFeatureIndex;
	        if (segmentIndex < 0) segmentIndex = coords[multiFeatureIndex].length + segmentIndex - 1;
	        return helpers.lineString([coords[multiFeatureIndex][segmentIndex], coords[multiFeatureIndex][segmentIndex + 1]], properties, options);
	    case 'MultiPolygon':
	        if (multiFeatureIndex < 0) multiFeatureIndex = coords.length + multiFeatureIndex;
	        if (geometryIndex < 0) geometryIndex = coords[multiFeatureIndex].length + geometryIndex;
	        if (segmentIndex < 0) segmentIndex = coords[multiFeatureIndex][geometryIndex].length - segmentIndex - 1;
	        return helpers.lineString([coords[multiFeatureIndex][geometryIndex][segmentIndex], coords[multiFeatureIndex][geometryIndex][segmentIndex + 1]], properties, options);
	    }
	    throw new Error('geojson is invalid');
	}
	
	/**
	 * Finds a particular Point from a GeoJSON using `@turf/meta` indexes.
	 *
	 * Negative indexes are permitted.
	 *
	 * @param {FeatureCollection|Feature|Geometry} geojson Any GeoJSON Feature or Geometry
	 * @param {Object} [options={}] Optional parameters
	 * @param {number} [options.featureIndex=0] Feature Index
	 * @param {number} [options.multiFeatureIndex=0] Multi-Feature Index
	 * @param {number} [options.geometryIndex=0] Geometry Index
	 * @param {number} [options.coordIndex=0] Coord Index
	 * @param {Object} [options.properties={}] Translate Properties to output Point
	 * @param {BBox} [options.bbox={}] Translate BBox to output Point
	 * @param {number|string} [options.id={}] Translate Id to output Point
	 * @returns {Feature<Point>} 2-vertex GeoJSON Feature Point
	 * @example
	 * var multiLine = turf.multiLineString([
	 *     [[10, 10], [50, 30], [30, 40]],
	 *     [[-10, -10], [-50, -30], [-30, -40]]
	 * ]);
	 *
	 * // First Segment (defaults are 0)
	 * turf.findPoint(multiLine);
	 * // => Feature<Point<[10, 10]>>
	 *
	 * // First Segment of the 2nd Multi-Feature
	 * turf.findPoint(multiLine, {multiFeatureIndex: 1});
	 * // => Feature<Point<[-10, -10]>>
	 *
	 * // Last Segment of last Multi-Feature
	 * turf.findPoint(multiLine, {multiFeatureIndex: -1, coordIndex: -1});
	 * // => Feature<Point<[-30, -40]>>
	 */
	function findPoint(geojson, options) {
	    // Optional Parameters
	    options = options || {};
	    if (!helpers.isObject(options)) throw new Error('options is invalid');
	    var featureIndex = options.featureIndex || 0;
	    var multiFeatureIndex = options.multiFeatureIndex || 0;
	    var geometryIndex = options.geometryIndex || 0;
	    var coordIndex = options.coordIndex || 0;
	
	    // Find FeatureIndex
	    var properties = options.properties;
	    var geometry;
	
	    switch (geojson.type) {
	    case 'FeatureCollection':
	        if (featureIndex < 0) featureIndex = geojson.features.length + featureIndex;
	        properties = properties || geojson.features[featureIndex].properties;
	        geometry = geojson.features[featureIndex].geometry;
	        break;
	    case 'Feature':
	        properties = properties || geojson.properties;
	        geometry = geojson.geometry;
	        break;
	    case 'Point':
	    case 'MultiPoint':
	        return null;
	    case 'LineString':
	    case 'Polygon':
	    case 'MultiLineString':
	    case 'MultiPolygon':
	        geometry = geojson;
	        break;
	    default:
	        throw new Error('geojson is invalid');
	    }
	
	    // Find Coord Index
	    if (geometry === null) return null;
	    var coords = geometry.coordinates;
	    switch (geometry.type) {
	    case 'Point':
	        return helpers.point(coords, properties, options);
	    case 'MultiPoint':
	        if (multiFeatureIndex < 0) multiFeatureIndex = coords.length + multiFeatureIndex;
	        return helpers.point(coords[multiFeatureIndex], properties, options);
	    case 'LineString':
	        if (coordIndex < 0) coordIndex = coords.length + coordIndex;
	        return helpers.point(coords[coordIndex], properties, options);
	    case 'Polygon':
	        if (geometryIndex < 0) geometryIndex = coords.length + geometryIndex;
	        if (coordIndex < 0) coordIndex = coords[geometryIndex].length + coordIndex;
	        return helpers.point(coords[geometryIndex][coordIndex], properties, options);
	    case 'MultiLineString':
	        if (multiFeatureIndex < 0) multiFeatureIndex = coords.length + multiFeatureIndex;
	        if (coordIndex < 0) coordIndex = coords[multiFeatureIndex].length + coordIndex;
	        return helpers.point(coords[multiFeatureIndex][coordIndex], properties, options);
	    case 'MultiPolygon':
	        if (multiFeatureIndex < 0) multiFeatureIndex = coords.length + multiFeatureIndex;
	        if (geometryIndex < 0) geometryIndex = coords[multiFeatureIndex].length + geometryIndex;
	        if (coordIndex < 0) coordIndex = coords[multiFeatureIndex][geometryIndex].length - coordIndex;
	        return helpers.point(coords[multiFeatureIndex][geometryIndex][coordIndex], properties, options);
	    }
	    throw new Error('geojson is invalid');
	}
	
	exports.coordEach = coordEach;
	exports.coordReduce = coordReduce;
	exports.propEach = propEach;
	exports.propReduce = propReduce;
	exports.featureEach = featureEach;
	exports.featureReduce = featureReduce;
	exports.coordAll = coordAll;
	exports.geomEach = geomEach;
	exports.geomReduce = geomReduce;
	exports.flattenEach = flattenEach;
	exports.flattenReduce = flattenReduce;
	exports.segmentEach = segmentEach;
	exports.segmentReduce = segmentReduce;
	exports.lineEach = lineEach;
	exports.lineReduce = lineReduce;
	exports.findSegment = findSegment;
	exports.findPoint = findPoint;


/***/ }),
/* 119 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	
	var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
	
	var _backbone = __webpack_require__(24);
	
	var _backbone2 = _interopRequireDefault(_backbone);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
	
	function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
	
	function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
	
	/**
	 * @memberof core/models
	 */
	
	var FiltersModel = function (_Backbone$Model) {
	  _inherits(FiltersModel, _Backbone$Model);
	
	  function FiltersModel() {
	    _classCallCheck(this, FiltersModel);
	
	    return _possibleConstructorReturn(this, (FiltersModel.__proto__ || Object.getPrototypeOf(FiltersModel)).apply(this, arguments));
	  }
	
	  _createClass(FiltersModel, [{
	    key: 'validate',
	
	    /**
	     * Validation function for Filter models.
	     */
	
	    value: function validate(attrs) {
	      var area = attrs.area;
	      var time = attrs.time;
	
	      if (area) {
	        if (area.length !== 4) {
	          return 'invalid area specification';
	        } else if (area[0] > area[2]) {
	          return 'minX larger than maxX';
	        } else if (area[1] > area[3]) {
	          return 'minX larger than maxX';
	        }
	      }
	
	      if (time) {
	        if (Array.isArray(time)) {
	          if (time.length !== 2) {
	            return 'invalid time span specification';
	          } else if (time[0] > time[1]) {
	            return 'min time larger than max time';
	          }
	        }
	      }
	      return null;
	    }
	  }, {
	    key: 'show',
	    value: function show(time) {
	      this.trigger('show:time', time || this.get('time'));
	    }
	  }]);
	
	  return FiltersModel;
	}(_backbone2.default.Model);
	
	/**
	 *
	 */
	
	
	FiltersModel.prototype.defaults = {
	  area: null, // shall either be an array of 4 values [left, bottom, top, right] or null
	  time: null // shall either be a Date, an array of two Dates or null
	};
	
	exports.default = FiltersModel;

/***/ }),
/* 120 */
/***/ (function(module, exports) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	
	var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
	
	exports.padLeft = padLeft;
	exports.getDateString = getDateString;
	exports.getISODateString = getISODateString;
	exports.getISODateTimeString = getISODateTimeString;
	exports.uniqueBy = uniqueBy;
	exports.filtersToCQL = filtersToCQL;
	exports.setSearchParam = setSearchParam;
	/**
	  @namespace core/util
	 */
	
	/**
	  left pad a string with a fill value
	  @memberof core/util
	  @param str The string to pad
	  @param pad The character to pad with
	  @param size The tital size the string shall have
	  @returns The padded string
	 */
	
	function padLeft(str, pad, size) {
	  var out = str;
	  while (out.length < size) {
	    out = pad + str;
	  }
	  return out;
	}
	
	/**
	  Transform a Date object into a string.
	  @memberof core/util
	  @param {Date} date The date object
	  @returns {string} The resulting date string.
	 */
	
	function getDateString(date) {
	  var year = date.getUTCFullYear();
	  var month = padLeft(String(date.getUTCMonth() + 1), '0', 2);
	  var day = padLeft(String(date.getUTCDate()), '0', 2);
	  return year + '-' + month + '-' + day;
	}
	
	/**
	  Transform a Date object into an ISO 8601 conformant date string.
	  @memberof core/util
	  @param {Date} date The date object
	  @returns {string} The resulting date string.
	 */
	
	function getISODateString(date) {
	  return getDateString(date) + 'T';
	}
	
	/**
	  Transform a Date object into an ISO 8601 conformant datetime string.
	  @memberof core/util
	  @param {Date} date The date object
	  @returns {string} The resulting datetime string.
	 */
	
	function getISODateTimeString(date) {
	  var useMilliseconds = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
	
	  var hours = padLeft(String(date.getUTCHours()), '0', 2);
	  var minutes = padLeft(String(date.getUTCMinutes()), '0', 2);
	  var seconds = padLeft(String(date.getUTCSeconds()), '0', 2);
	
	  var ms = date.getUTCMilliseconds();
	  if (ms !== 0 && useMilliseconds) {
	    var milliseconds = padLeft(String(ms), '0', 3);
	    return '' + getISODateString(date) + hours + ':' + minutes + ':' + seconds + '.' + milliseconds + 'Z';
	  }
	  return '' + getISODateString(date) + hours + ':' + minutes + ':' + seconds + 'Z';
	}
	
	/*
	*/
	function uniqueBy(arr, cmp) {
	  var out = [];
	  for (var i = 0; i < arr.length; ++i) {
	    var curr = arr[i];
	    var found = false;
	    for (var j = 0; j < out.length; ++j) {
	      if (cmp(out[j], curr)) {
	        found = true;
	        break;
	      }
	    }
	    if (!found) {
	      out.push(curr);
	    }
	  }
	  return out;
	}
	
	/**
	 * Converts the filters of a filters model to the CQL expressions. When a mapping
	 * is provided, the filter names are translated and only filters of entailed
	 * name are used. When no mapping is passed, only filters with types of 'eo:...'
	 * are used and the name (without namespace prefix) is used as the CQL attribute
	 * name.
	 */
	function filtersToCQL(filtersModel) {
	  var mapping = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
	
	
	  function serializeValue(value) {
	    if (value instanceof Date) {
	      return getISODateTimeString(value);
	    }
	    return value;
	  }
	
	  var attributes = filtersModel.attributes;
	  return Object.keys(attributes).map(function (key) {
	    if (mapping && mapping.hasOwnProperty(key)) {
	      return [mapping[key], attributes[key]];
	    } else if (mapping) {
	      return null;
	    }
	    if (key.startsWith('eo:')) {
	      return [key.split(':')[1], attributes[key]];
	    }
	    return null;
	  }).filter(function (keyValue) {
	    return !!keyValue;
	  }).map(function (_ref) {
	    var _ref2 = _slicedToArray(_ref, 2),
	        key = _ref2[0],
	        value = _ref2[1];
	
	    if (value.min && value.max) {
	      if (value.min instanceof Date && value.max instanceof Date) {
	        return key + ' DURING ' + serializeValue(value.min) + '/' + serializeValue(value.max);
	      }
	      return key + ' BETWEEN ' + serializeValue(value.min) + ' AND ' + serializeValue(value.max);
	    } else if (value.min) {
	      if (value.min instanceof Date) {
	        return key + ' AFTER ' + serializeValue(value.min);
	      }
	      return key + ' >= ' + serializeValue(value.min);
	    } else if (value.max) {
	      if (value.max instanceof Date) {
	        return key + ' BEFORE ' + serializeValue(value.min);
	      }
	      return key + ' <= ' + serializeValue(value.max);
	    }
	    if (typeof value === 'string') {
	      return key + ' = \'' + value + '\'';
	    }
	    return key + ' = ' + serializeValue(value);
	  }).join(' AND ');
	}
	
	function setSearchParam(key, value) {
	  var actualWindowObject = window;
	  if (window.self !== window.top) {
	    // checking if it is an iframe
	    actualWindowObject = window.parent;
	  }
	  if (!actualWindowObject.history.pushState || !key) {
	    return;
	  }
	  var url = new URL(actualWindowObject.location.href);
	  var params = new actualWindowObject.URLSearchParams(actualWindowObject.location.search);
	  if (value === undefined || value === null) {
	    params.delete(key);
	  } else {
	    params.set(key, value);
	  }
	  url.search = params;
	  var urlStr = url.toString();
	  actualWindowObject.history.replaceState({ url: urlStr }, null, urlStr);
	}

/***/ }),
/* 121 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	
	var _backbone = __webpack_require__(11);
	
	var _backbone2 = _interopRequireDefault(_backbone);
	
	__webpack_require__(1114);
	
	var _ModalView = __webpack_require__(992);
	
	var _ModalView2 = _interopRequireDefault(_ModalView);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var PanelView = _backbone2.default.LayoutView.extend( /** @lends core/views.PanelView# */{
	  template: _ModalView2.default,
	
	  className: 'modal fade',
	
	  regions: {
	    content: '.modal-body'
	  },
	
	  events: function events() {
	    var baseEvents = {
	      'click .close': 'close',
	      'shown.bs.modal': 'onModalShown'
	    };
	
	    var buttons = this.options.buttons || [];
	    for (var i = 0; i < buttons.length; ++i) {
	      baseEvents['click .modal-footer button:eq(' + i + ')'] = buttons[i][1];
	    }
	
	    return baseEvents;
	  },
	  initialize: function initialize(options) {
	    this.view = options.view;
	    this.title = options.title;
	    this.icon = options.icon;
	    this.closed = options.closed;
	    this.closeable = typeof options.closeable === 'undefined' ? true : options.closeable;
	    this.buttonDescs = options.buttons || [];
	  },
	  templateHelpers: function templateHelpers() {
	    return {
	      title: this.title,
	      icon: this.icon,
	      closeable: this.closeable,
	      hasButtons: this.buttonDescs.length > 0,
	      buttons: this.buttonDescs.map(function (buttonDesc) {
	        return buttonDesc[0];
	      })
	    };
	  },
	  useBackdrop: function useBackdrop() {
	    return true;
	  },
	  onAttach: function onAttach() {
	    this.initialDisplay = this.$el.css('display');
	    this.$el.modal({ backdrop: this.useBackdrop() });
	    this.$el.modal('show');
	  },
	  onModalShown: function onModalShown() {
	    if (this.view) {
	      this.showChildView('content', this.view);
	    }
	  },
	
	
	  /**
	    Show the Panel when it was not visible before.
	   */
	  open: function open() {
	    this.$el.modal('show');
	    this.closed = false;
	  },
	
	
	  /**
	    Close the Panel when open before.
	   */
	  close: function close() {
	    this.$el.modal('hide');
	    this.closed = true;
	  },
	
	
	  /**
	    Toggle the visibility of the Panel.
	   */
	  toggleOpen: function toggleOpen() {
	    if (this.closed) {
	      this.open();
	    } else {
	      this.close();
	    }
	  },
	  getView: function getView() {
	    return this.view;
	  }
	});
	
	exports.default = PanelView;

/***/ }),
/* 122 */
/***/ (function(module, exports) {

	"use strict";
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	/**
	 * @module ol/Disposable
	 */
	/**
	 * @classdesc
	 * Objects that need to clean up after themselves.
	 */
	var Disposable = /** @class */function () {
	  function Disposable() {
	    /**
	     * The object has already been disposed.
	     * @type {boolean}
	     * @private
	     */
	    this.disposed_ = false;
	  }
	  /**
	   * Clean up.
	   */
	  Disposable.prototype.dispose = function () {
	    if (!this.disposed_) {
	      this.disposed_ = true;
	      this.disposeInternal();
	    }
	  };
	  /**
	   * Extension point for disposable objects.
	   * @protected
	   */
	  Disposable.prototype.disposeInternal = function () {};
	  return Disposable;
	}();
	exports.default = Disposable;
	//# sourceMappingURL=Disposable.js.map

/***/ }),
/* 123 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	exports.createStyleFunction = createStyleFunction;
	
	var _asserts = __webpack_require__(29);
	
	var _events = __webpack_require__(30);
	
	var _EventType = __webpack_require__(10);
	
	var _EventType2 = _interopRequireDefault(_EventType);
	
	var _Object = __webpack_require__(32);
	
	var _Object2 = _interopRequireDefault(_Object);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var __extends = undefined && undefined.__extends || function () {
	    var _extendStatics = function extendStatics(d, b) {
	        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	            d.__proto__ = b;
	        } || function (d, b) {
	            for (var p in b) {
	                if (b.hasOwnProperty(p)) d[p] = b[p];
	            }
	        };
	        return _extendStatics(d, b);
	    };
	    return function (d, b) {
	        _extendStatics(d, b);
	        function __() {
	            this.constructor = d;
	        }
	        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	    };
	}();
	/**
	 * @module ol/Feature
	 */
	
	/**
	 * @typedef {typeof Feature|typeof import("./render/Feature.js").default} FeatureClass
	 */
	/**
	 * @typedef {Feature|import("./render/Feature.js").default} FeatureLike
	 */
	/**
	 * @classdesc
	 * A vector object for geographic features with a geometry and other
	 * attribute properties, similar to the features in vector file formats like
	 * GeoJSON.
	 *
	 * Features can be styled individually with `setStyle`; otherwise they use the
	 * style of their vector layer.
	 *
	 * Note that attribute properties are set as {@link module:ol/Object} properties on
	 * the feature object, so they are observable, and have get/set accessors.
	 *
	 * Typically, a feature has a single geometry property. You can set the
	 * geometry using the `setGeometry` method and get it with `getGeometry`.
	 * It is possible to store more than one geometry on a feature using attribute
	 * properties. By default, the geometry used for rendering is identified by
	 * the property name `geometry`. If you want to use another geometry property
	 * for rendering, use the `setGeometryName` method to change the attribute
	 * property associated with the geometry for the feature.  For example:
	 *
	 * ```js
	 *
	 * import Feature from 'ol/Feature';
	 * import Polygon from 'ol/geom/Polygon';
	 * import Point from 'ol/geom/Point';
	 *
	 * var feature = new Feature({
	 *   geometry: new Polygon(polyCoords),
	 *   labelPoint: new Point(labelCoords),
	 *   name: 'My Polygon'
	 * });
	 *
	 * // get the polygon geometry
	 * var poly = feature.getGeometry();
	 *
	 * // Render the feature as a point using the coordinates from labelPoint
	 * feature.setGeometryName('labelPoint');
	 *
	 * // get the point geometry
	 * var point = feature.getGeometry();
	 * ```
	 *
	 * @api
	 * @template {import("./geom/Geometry.js").default} Geometry
	 */
	var Feature = /** @class */function (_super) {
	    __extends(Feature, _super);
	    /**
	     * @param {Geometry|Object<string, *>=} opt_geometryOrProperties
	     *     You may pass a Geometry object directly, or an object literal containing
	     *     properties. If you pass an object literal, you may include a Geometry
	     *     associated with a `geometry` key.
	     */
	    function Feature(opt_geometryOrProperties) {
	        var _this = _super.call(this) || this;
	        /**
	         * @private
	         * @type {number|string|undefined}
	         */
	        _this.id_ = undefined;
	        /**
	         * @type {string}
	         * @private
	         */
	        _this.geometryName_ = 'geometry';
	        /**
	         * User provided style.
	         * @private
	         * @type {import("./style/Style.js").StyleLike}
	         */
	        _this.style_ = null;
	        /**
	         * @private
	         * @type {import("./style/Style.js").StyleFunction|undefined}
	         */
	        _this.styleFunction_ = undefined;
	        /**
	         * @private
	         * @type {?import("./events.js").EventsKey}
	         */
	        _this.geometryChangeKey_ = null;
	        _this.addEventListener((0, _Object.getChangeEventType)(_this.geometryName_), _this.handleGeometryChanged_);
	        if (opt_geometryOrProperties) {
	            if (typeof /** @type {?} */opt_geometryOrProperties.getSimplifiedGeometry === 'function') {
	                var geometry = /** @type {Geometry} */opt_geometryOrProperties;
	                _this.setGeometry(geometry);
	            } else {
	                /** @type {Object<string, *>} */
	                var properties = opt_geometryOrProperties;
	                _this.setProperties(properties);
	            }
	        }
	        return _this;
	    }
	    /**
	     * Clone this feature. If the original feature has a geometry it
	     * is also cloned. The feature id is not set in the clone.
	     * @return {Feature} The clone.
	     * @api
	     */
	    Feature.prototype.clone = function () {
	        var clone = new Feature(this.getProperties());
	        clone.setGeometryName(this.getGeometryName());
	        var geometry = this.getGeometry();
	        if (geometry) {
	            clone.setGeometry(geometry.clone());
	        }
	        var style = this.getStyle();
	        if (style) {
	            clone.setStyle(style);
	        }
	        return clone;
	    };
	    /**
	     * Get the feature's default geometry.  A feature may have any number of named
	     * geometries.  The "default" geometry (the one that is rendered by default) is
	     * set when calling {@link module:ol/Feature~Feature#setGeometry}.
	     * @return {Geometry|undefined} The default geometry for the feature.
	     * @api
	     * @observable
	     */
	    Feature.prototype.getGeometry = function () {
	        return (
	            /** @type {Geometry|undefined} */this.get(this.geometryName_)
	        );
	    };
	    /**
	     * Get the feature identifier.  This is a stable identifier for the feature and
	     * is either set when reading data from a remote source or set explicitly by
	     * calling {@link module:ol/Feature~Feature#setId}.
	     * @return {number|string|undefined} Id.
	     * @api
	     */
	    Feature.prototype.getId = function () {
	        return this.id_;
	    };
	    /**
	     * Get the name of the feature's default geometry.  By default, the default
	     * geometry is named `geometry`.
	     * @return {string} Get the property name associated with the default geometry
	     *     for this feature.
	     * @api
	     */
	    Feature.prototype.getGeometryName = function () {
	        return this.geometryName_;
	    };
	    /**
	     * Get the feature's style. Will return what was provided to the
	     * {@link module:ol/Feature~Feature#setStyle} method.
	     * @return {import("./style/Style.js").StyleLike} The feature style.
	     * @api
	     */
	    Feature.prototype.getStyle = function () {
	        return this.style_;
	    };
	    /**
	     * Get the feature's style function.
	     * @return {import("./style/Style.js").StyleFunction|undefined} Return a function
	     * representing the current style of this feature.
	     * @api
	     */
	    Feature.prototype.getStyleFunction = function () {
	        return this.styleFunction_;
	    };
	    /**
	     * @private
	     */
	    Feature.prototype.handleGeometryChange_ = function () {
	        this.changed();
	    };
	    /**
	     * @private
	     */
	    Feature.prototype.handleGeometryChanged_ = function () {
	        if (this.geometryChangeKey_) {
	            (0, _events.unlistenByKey)(this.geometryChangeKey_);
	            this.geometryChangeKey_ = null;
	        }
	        var geometry = this.getGeometry();
	        if (geometry) {
	            this.geometryChangeKey_ = (0, _events.listen)(geometry, _EventType2.default.CHANGE, this.handleGeometryChange_, this);
	        }
	        this.changed();
	    };
	    /**
	     * Set the default geometry for the feature.  This will update the property
	     * with the name returned by {@link module:ol/Feature~Feature#getGeometryName}.
	     * @param {Geometry|undefined} geometry The new geometry.
	     * @api
	     * @observable
	     */
	    Feature.prototype.setGeometry = function (geometry) {
	        this.set(this.geometryName_, geometry);
	    };
	    /**
	     * Set the style for the feature.  This can be a single style object, an array
	     * of styles, or a function that takes a resolution and returns an array of
	     * styles. If it is `null` the feature has no style (a `null` style).
	     * @param {import("./style/Style.js").StyleLike} style Style for this feature.
	     * @api
	     * @fires module:ol/events/Event~BaseEvent#event:change
	     */
	    Feature.prototype.setStyle = function (style) {
	        this.style_ = style;
	        this.styleFunction_ = !style ? undefined : createStyleFunction(style);
	        this.changed();
	    };
	    /**
	     * Set the feature id.  The feature id is considered stable and may be used when
	     * requesting features or comparing identifiers returned from a remote source.
	     * The feature id can be used with the
	     * {@link module:ol/source/Vector~VectorSource#getFeatureById} method.
	     * @param {number|string|undefined} id The feature id.
	     * @api
	     * @fires module:ol/events/Event~BaseEvent#event:change
	     */
	    Feature.prototype.setId = function (id) {
	        this.id_ = id;
	        this.changed();
	    };
	    /**
	     * Set the property name to be used when getting the feature's default geometry.
	     * When calling {@link module:ol/Feature~Feature#getGeometry}, the value of the property with
	     * this name will be returned.
	     * @param {string} name The property name of the default geometry.
	     * @api
	     */
	    Feature.prototype.setGeometryName = function (name) {
	        this.removeEventListener((0, _Object.getChangeEventType)(this.geometryName_), this.handleGeometryChanged_);
	        this.geometryName_ = name;
	        this.addEventListener((0, _Object.getChangeEventType)(this.geometryName_), this.handleGeometryChanged_);
	        this.handleGeometryChanged_();
	    };
	    return Feature;
	}(_Object2.default);
	/**
	 * Convert the provided object into a feature style function.  Functions passed
	 * through unchanged.  Arrays of Style or single style objects wrapped
	 * in a new feature style function.
	 * @param {!import("./style/Style.js").StyleFunction|!Array<import("./style/Style.js").default>|!import("./style/Style.js").default} obj
	 *     A feature style function, a single style, or an array of styles.
	 * @return {import("./style/Style.js").StyleFunction} A style function.
	 */
	function createStyleFunction(obj) {
	    if (typeof obj === 'function') {
	        return obj;
	    } else {
	        /**
	         * @type {Array<import("./style/Style.js").default>}
	         */
	        var styles_1;
	        if (Array.isArray(obj)) {
	            styles_1 = obj;
	        } else {
	            (0, _asserts.assert)(typeof /** @type {?} */obj.getZIndex === 'function', 41); // Expected an `import("./style/Style.js").Style` or an array of `import("./style/Style.js").Style`
	            var style = /** @type {import("./style/Style.js").default} */obj;
	            styles_1 = [style];
	        }
	        return function () {
	            return styles_1;
	        };
	    }
	}
	exports.default = Feature;
	//# sourceMappingURL=Feature.js.map

/***/ }),
/* 124 */
/***/ (function(module, exports) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	/**
	 * @module ol/ObjectEventType
	 */
	/**
	 * @enum {string}
	 */
	exports.default = {
	  /**
	   * Triggered when a property is changed.
	   * @event module:ol/Object.ObjectEvent#propertychange
	   * @api
	   */
	  PROPERTYCHANGE: 'propertychange'
	};
	//# sourceMappingURL=ObjectEventType.js.map

/***/ }),
/* 125 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	exports.maxSquaredDelta = maxSquaredDelta;
	exports.arrayMaxSquaredDelta = arrayMaxSquaredDelta;
	exports.multiArrayMaxSquaredDelta = multiArrayMaxSquaredDelta;
	exports.assignClosestPoint = assignClosestPoint;
	exports.assignClosestArrayPoint = assignClosestArrayPoint;
	exports.assignClosestMultiArrayPoint = assignClosestMultiArrayPoint;
	
	var _math = __webpack_require__(19);
	
	/**
	 * Returns the point on the 2D line segment flatCoordinates[offset1] to
	 * flatCoordinates[offset2] that is closest to the point (x, y).  Extra
	 * dimensions are linearly interpolated.
	 * @param {Array<number>} flatCoordinates Flat coordinates.
	 * @param {number} offset1 Offset 1.
	 * @param {number} offset2 Offset 2.
	 * @param {number} stride Stride.
	 * @param {number} x X.
	 * @param {number} y Y.
	 * @param {Array<number>} closestPoint Closest point.
	 */
	function assignClosest(flatCoordinates, offset1, offset2, stride, x, y, closestPoint) {
	    var x1 = flatCoordinates[offset1];
	    var y1 = flatCoordinates[offset1 + 1];
	    var dx = flatCoordinates[offset2] - x1;
	    var dy = flatCoordinates[offset2 + 1] - y1;
	    var offset;
	    if (dx === 0 && dy === 0) {
	        offset = offset1;
	    } else {
	        var t = ((x - x1) * dx + (y - y1) * dy) / (dx * dx + dy * dy);
	        if (t > 1) {
	            offset = offset2;
	        } else if (t > 0) {
	            for (var i = 0; i < stride; ++i) {
	                closestPoint[i] = (0, _math.lerp)(flatCoordinates[offset1 + i], flatCoordinates[offset2 + i], t);
	            }
	            closestPoint.length = stride;
	            return;
	        } else {
	            offset = offset1;
	        }
	    }
	    for (var i = 0; i < stride; ++i) {
	        closestPoint[i] = flatCoordinates[offset + i];
	    }
	    closestPoint.length = stride;
	}
	/**
	 * Return the squared of the largest distance between any pair of consecutive
	 * coordinates.
	 * @param {Array<number>} flatCoordinates Flat coordinates.
	 * @param {number} offset Offset.
	 * @param {number} end End.
	 * @param {number} stride Stride.
	 * @param {number} max Max squared delta.
	 * @return {number} Max squared delta.
	 */
	/**
	 * @module ol/geom/flat/closest
	 */
	function maxSquaredDelta(flatCoordinates, offset, end, stride, max) {
	    var x1 = flatCoordinates[offset];
	    var y1 = flatCoordinates[offset + 1];
	    for (offset += stride; offset < end; offset += stride) {
	        var x2 = flatCoordinates[offset];
	        var y2 = flatCoordinates[offset + 1];
	        var squaredDelta = (0, _math.squaredDistance)(x1, y1, x2, y2);
	        if (squaredDelta > max) {
	            max = squaredDelta;
	        }
	        x1 = x2;
	        y1 = y2;
	    }
	    return max;
	}
	/**
	 * @param {Array<number>} flatCoordinates Flat coordinates.
	 * @param {number} offset Offset.
	 * @param {Array<number>} ends Ends.
	 * @param {number} stride Stride.
	 * @param {number} max Max squared delta.
	 * @return {number} Max squared delta.
	 */
	function arrayMaxSquaredDelta(flatCoordinates, offset, ends, stride, max) {
	    for (var i = 0, ii = ends.length; i < ii; ++i) {
	        var end = ends[i];
	        max = maxSquaredDelta(flatCoordinates, offset, end, stride, max);
	        offset = end;
	    }
	    return max;
	}
	/**
	 * @param {Array<number>} flatCoordinates Flat coordinates.
	 * @param {number} offset Offset.
	 * @param {Array<Array<number>>} endss Endss.
	 * @param {number} stride Stride.
	 * @param {number} max Max squared delta.
	 * @return {number} Max squared delta.
	 */
	function multiArrayMaxSquaredDelta(flatCoordinates, offset, endss, stride, max) {
	    for (var i = 0, ii = endss.length; i < ii; ++i) {
	        var ends = endss[i];
	        max = arrayMaxSquaredDelta(flatCoordinates, offset, ends, stride, max);
	        offset = ends[ends.length - 1];
	    }
	    return max;
	}
	/**
	 * @param {Array<number>} flatCoordinates Flat coordinates.
	 * @param {number} offset Offset.
	 * @param {number} end End.
	 * @param {number} stride Stride.
	 * @param {number} maxDelta Max delta.
	 * @param {boolean} isRing Is ring.
	 * @param {number} x X.
	 * @param {number} y Y.
	 * @param {Array<number>} closestPoint Closest point.
	 * @param {number} minSquaredDistance Minimum squared distance.
	 * @param {Array<number>=} opt_tmpPoint Temporary point object.
	 * @return {number} Minimum squared distance.
	 */
	function assignClosestPoint(flatCoordinates, offset, end, stride, maxDelta, isRing, x, y, closestPoint, minSquaredDistance, opt_tmpPoint) {
	    if (offset == end) {
	        return minSquaredDistance;
	    }
	    var i, squaredDistance;
	    if (maxDelta === 0) {
	        // All points are identical, so just test the first point.
	        squaredDistance = (0, _math.squaredDistance)(x, y, flatCoordinates[offset], flatCoordinates[offset + 1]);
	        if (squaredDistance < minSquaredDistance) {
	            for (i = 0; i < stride; ++i) {
	                closestPoint[i] = flatCoordinates[offset + i];
	            }
	            closestPoint.length = stride;
	            return squaredDistance;
	        } else {
	            return minSquaredDistance;
	        }
	    }
	    var tmpPoint = opt_tmpPoint ? opt_tmpPoint : [NaN, NaN];
	    var index = offset + stride;
	    while (index < end) {
	        assignClosest(flatCoordinates, index - stride, index, stride, x, y, tmpPoint);
	        squaredDistance = (0, _math.squaredDistance)(x, y, tmpPoint[0], tmpPoint[1]);
	        if (squaredDistance < minSquaredDistance) {
	            minSquaredDistance = squaredDistance;
	            for (i = 0; i < stride; ++i) {
	                closestPoint[i] = tmpPoint[i];
	            }
	            closestPoint.length = stride;
	            index += stride;
	        } else {
	            // Skip ahead multiple points, because we know that all the skipped
	            // points cannot be any closer than the closest point we have found so
	            // far.  We know this because we know how close the current point is, how
	            // close the closest point we have found so far is, and the maximum
	            // distance between consecutive points.  For example, if we're currently
	            // at distance 10, the best we've found so far is 3, and that the maximum
	            // distance between consecutive points is 2, then we'll need to skip at
	            // least (10 - 3) / 2 == 3 (rounded down) points to have any chance of
	            // finding a closer point.  We use Math.max(..., 1) to ensure that we
	            // always advance at least one point, to avoid an infinite loop.
	            index += stride * Math.max((Math.sqrt(squaredDistance) - Math.sqrt(minSquaredDistance)) / maxDelta | 0, 1);
	        }
	    }
	    if (isRing) {
	        // Check the closing segment.
	        assignClosest(flatCoordinates, end - stride, offset, stride, x, y, tmpPoint);
	        squaredDistance = (0, _math.squaredDistance)(x, y, tmpPoint[0], tmpPoint[1]);
	        if (squaredDistance < minSquaredDistance) {
	            minSquaredDistance = squaredDistance;
	            for (i = 0; i < stride; ++i) {
	                closestPoint[i] = tmpPoint[i];
	            }
	            closestPoint.length = stride;
	        }
	    }
	    return minSquaredDistance;
	}
	/**
	 * @param {Array<number>} flatCoordinates Flat coordinates.
	 * @param {number} offset Offset.
	 * @param {Array<number>} ends Ends.
	 * @param {number} stride Stride.
	 * @param {number} maxDelta Max delta.
	 * @param {boolean} isRing Is ring.
	 * @param {number} x X.
	 * @param {number} y Y.
	 * @param {Array<number>} closestPoint Closest point.
	 * @param {number} minSquaredDistance Minimum squared distance.
	 * @param {Array<number>=} opt_tmpPoint Temporary point object.
	 * @return {number} Minimum squared distance.
	 */
	function assignClosestArrayPoint(flatCoordinates, offset, ends, stride, maxDelta, isRing, x, y, closestPoint, minSquaredDistance, opt_tmpPoint) {
	    var tmpPoint = opt_tmpPoint ? opt_tmpPoint : [NaN, NaN];
	    for (var i = 0, ii = ends.length; i < ii; ++i) {
	        var end = ends[i];
	        minSquaredDistance = assignClosestPoint(flatCoordinates, offset, end, stride, maxDelta, isRing, x, y, closestPoint, minSquaredDistance, tmpPoint);
	        offset = end;
	    }
	    return minSquaredDistance;
	}
	/**
	 * @param {Array<number>} flatCoordinates Flat coordinates.
	 * @param {number} offset Offset.
	 * @param {Array<Array<number>>} endss Endss.
	 * @param {number} stride Stride.
	 * @param {number} maxDelta Max delta.
	 * @param {boolean} isRing Is ring.
	 * @param {number} x X.
	 * @param {number} y Y.
	 * @param {Array<number>} closestPoint Closest point.
	 * @param {number} minSquaredDistance Minimum squared distance.
	 * @param {Array<number>=} opt_tmpPoint Temporary point object.
	 * @return {number} Minimum squared distance.
	 */
	function assignClosestMultiArrayPoint(flatCoordinates, offset, endss, stride, maxDelta, isRing, x, y, closestPoint, minSquaredDistance, opt_tmpPoint) {
	    var tmpPoint = opt_tmpPoint ? opt_tmpPoint : [NaN, NaN];
	    for (var i = 0, ii = endss.length; i < ii; ++i) {
	        var ends = endss[i];
	        minSquaredDistance = assignClosestArrayPoint(flatCoordinates, offset, ends, stride, maxDelta, isRing, x, y, closestPoint, minSquaredDistance, tmpPoint);
	        offset = ends[ends.length - 1];
	    }
	    return minSquaredDistance;
	}
	//# sourceMappingURL=closest.js.map

/***/ }),
/* 126 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	exports.inView = inView;
	
	var _events = __webpack_require__(30);
	
	var _EventType = __webpack_require__(10);
	
	var _EventType2 = _interopRequireDefault(_EventType);
	
	var _Object = __webpack_require__(32);
	
	var _Base = __webpack_require__(284);
	
	var _Base2 = _interopRequireDefault(_Base);
	
	var _Property = __webpack_require__(286);
	
	var _Property2 = _interopRequireDefault(_Property);
	
	var _obj = __webpack_require__(23);
	
	var _EventType3 = __webpack_require__(148);
	
	var _EventType4 = _interopRequireDefault(_EventType3);
	
	var _State = __webpack_require__(107);
	
	var _State2 = _interopRequireDefault(_State);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var __extends = undefined && undefined.__extends || function () {
	    var _extendStatics = function extendStatics(d, b) {
	        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	            d.__proto__ = b;
	        } || function (d, b) {
	            for (var p in b) {
	                if (b.hasOwnProperty(p)) d[p] = b[p];
	            }
	        };
	        return _extendStatics(d, b);
	    };
	    return function (d, b) {
	        _extendStatics(d, b);
	        function __() {
	            this.constructor = d;
	        }
	        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	    };
	}();
	/**
	 * @module ol/layer/Layer
	 */
	
	/**
	 * @typedef {function(import("../PluggableMap.js").FrameState):HTMLElement} RenderFunction
	 */
	/**
	 * @typedef {Object} Options
	 * @property {string} [className='ol-layer'] A CSS class name to set to the layer element.
	 * @property {number} [opacity=1] Opacity (0, 1).
	 * @property {boolean} [visible=true] Visibility.
	 * @property {import("../extent.js").Extent} [extent] The bounding extent for layer rendering.  The layer will not be
	 * rendered outside of this extent.
	 * @property {number} [zIndex] The z-index for layer rendering.  At rendering time, the layers
	 * will be ordered, first by Z-index and then by position. When `undefined`, a `zIndex` of 0 is assumed
	 * for layers that are added to the map's `layers` collection, or `Infinity` when the layer's `setMap()`
	 * method was used.
	 * @property {number} [minResolution] The minimum resolution (inclusive) at which this layer will be
	 * visible.
	 * @property {number} [maxResolution] The maximum resolution (exclusive) below which this layer will
	 * be visible.
	 * @property {import("../source/Source.js").default} [source] Source for this layer.  If not provided to the constructor,
	 * the source can be set by calling {@link module:ol/layer/Layer#setSource layer.setSource(source)} after
	 * construction.
	 * @property {import("../PluggableMap.js").default} [map] Map.
	 * @property {RenderFunction} [render] Render function. Takes the frame state as input and is expected to return an
	 * HTML element. Will overwrite the default rendering for the layer.
	 */
	/**
	 * @typedef {Object} State
	 * @property {import("./Base.js").default} layer
	 * @property {number} opacity Opacity, the value is rounded to two digits to appear after the decimal point.
	 * @property {SourceState} sourceState
	 * @property {boolean} visible
	 * @property {boolean} managed
	 * @property {import("../extent.js").Extent} [extent]
	 * @property {number} zIndex
	 * @property {number} maxResolution
	 * @property {number} minResolution
	 * @property {number} minZoom
	 * @property {number} maxZoom
	 */
	/**
	 * @classdesc
	 * Base class from which all layer types are derived. This should only be instantiated
	 * in the case where a custom layer is be added to the map with a custom `render` function.
	 * Such a function can be specified in the `options` object, and is expected to return an HTML element.
	 *
	 * A visual representation of raster or vector map data.
	 * Layers group together those properties that pertain to how the data is to be
	 * displayed, irrespective of the source of that data.
	 *
	 * Layers are usually added to a map with {@link module:ol/Map#addLayer}. Components
	 * like {@link module:ol/interaction/Select~Select} use unmanaged layers
	 * internally. These unmanaged layers are associated with the map using
	 * {@link module:ol/layer/Layer~Layer#setMap} instead.
	 *
	 * A generic `change` event is fired when the state of the source changes.
	 *
	 * Please note that for performance reasons several layers might get rendered to
	 * the same HTML element, which will cause {@link module:ol/Map~Map#forEachLayerAtPixel} to
	 * give false positives. To avoid this, apply different `className` properties to the
	 * layers at creation time.
	 *
	 * @fires import("../render/Event.js").RenderEvent#prerender
	 * @fires import("../render/Event.js").RenderEvent#postrender
	 *
	 * @template {import("../source/Source.js").default} SourceType
	 * @api
	 */
	var Layer = /** @class */function (_super) {
	    __extends(Layer, _super);
	    /**
	     * @param {Options} options Layer options.
	     */
	    function Layer(options) {
	        var _this = this;
	        var baseOptions = (0, _obj.assign)({}, options);
	        delete baseOptions.source;
	        _this = _super.call(this, baseOptions) || this;
	        /**
	         * @private
	         * @type {?import("../events.js").EventsKey}
	         */
	        _this.mapPrecomposeKey_ = null;
	        /**
	         * @private
	         * @type {?import("../events.js").EventsKey}
	         */
	        _this.mapRenderKey_ = null;
	        /**
	         * @private
	         * @type {?import("../events.js").EventsKey}
	         */
	        _this.sourceChangeKey_ = null;
	        /**
	         * @private
	         * @type {import("../renderer/Layer.js").default}
	         */
	        _this.renderer_ = null;
	        // Overwrite default render method with a custom one
	        if (options.render) {
	            _this.render = options.render;
	        }
	        if (options.map) {
	            _this.setMap(options.map);
	        }
	        _this.addEventListener((0, _Object.getChangeEventType)(_Property2.default.SOURCE), _this.handleSourcePropertyChange_);
	        var source = options.source ? /** @type {SourceType} */options.source : null;
	        _this.setSource(source);
	        return _this;
	    }
	    /**
	     * @inheritDoc
	     */
	    Layer.prototype.getLayersArray = function (opt_array) {
	        var array = opt_array ? opt_array : [];
	        array.push(this);
	        return array;
	    };
	    /**
	     * @inheritDoc
	     */
	    Layer.prototype.getLayerStatesArray = function (opt_states) {
	        var states = opt_states ? opt_states : [];
	        states.push(this.getLayerState());
	        return states;
	    };
	    /**
	     * Get the layer source.
	     * @return {SourceType} The layer source (or `null` if not yet set).
	     * @observable
	     * @api
	     */
	    Layer.prototype.getSource = function () {
	        return (/** @type {SourceType} */this.get(_Property2.default.SOURCE) || null
	        );
	    };
	    /**
	      * @inheritDoc
	      */
	    Layer.prototype.getSourceState = function () {
	        var source = this.getSource();
	        return !source ? _State2.default.UNDEFINED : source.getState();
	    };
	    /**
	     * @private
	     */
	    Layer.prototype.handleSourceChange_ = function () {
	        this.changed();
	    };
	    /**
	     * @private
	     */
	    Layer.prototype.handleSourcePropertyChange_ = function () {
	        if (this.sourceChangeKey_) {
	            (0, _events.unlistenByKey)(this.sourceChangeKey_);
	            this.sourceChangeKey_ = null;
	        }
	        var source = this.getSource();
	        if (source) {
	            this.sourceChangeKey_ = (0, _events.listen)(source, _EventType2.default.CHANGE, this.handleSourceChange_, this);
	        }
	        this.changed();
	    };
	    /**
	     * @param {import("../pixel").Pixel} pixel Pixel.
	     * @return {Promise<Array<import("../Feature").default>>} Promise that resolves with
	     * an array of features.
	     */
	    Layer.prototype.getFeatures = function (pixel) {
	        return this.renderer_.getFeatures(pixel);
	    };
	    /**
	     * In charge to manage the rendering of the layer. One layer type is
	     * bounded with one layer renderer.
	     * @param {?import("../PluggableMap.js").FrameState} frameState Frame state.
	     * @param {HTMLElement} target Target which the renderer may (but need not) use
	     * for rendering its content.
	     * @return {HTMLElement} The rendered element.
	     */
	    Layer.prototype.render = function (frameState, target) {
	        var layerRenderer = this.getRenderer();
	        if (layerRenderer.prepareFrame(frameState)) {
	            return layerRenderer.renderFrame(frameState, target);
	        }
	    };
	    /**
	     * Sets the layer to be rendered on top of other layers on a map. The map will
	     * not manage this layer in its layers collection, and the callback in
	     * {@link module:ol/Map#forEachLayerAtPixel} will receive `null` as layer. This
	     * is useful for temporary layers. To remove an unmanaged layer from the map,
	     * use `#setMap(null)`.
	     *
	     * To add the layer to a map and have it managed by the map, use
	     * {@link module:ol/Map#addLayer} instead.
	     * @param {import("../PluggableMap.js").default} map Map.
	     * @api
	     */
	    Layer.prototype.setMap = function (map) {
	        if (this.mapPrecomposeKey_) {
	            (0, _events.unlistenByKey)(this.mapPrecomposeKey_);
	            this.mapPrecomposeKey_ = null;
	        }
	        if (!map) {
	            this.changed();
	        }
	        if (this.mapRenderKey_) {
	            (0, _events.unlistenByKey)(this.mapRenderKey_);
	            this.mapRenderKey_ = null;
	        }
	        if (map) {
	            this.mapPrecomposeKey_ = (0, _events.listen)(map, _EventType4.default.PRECOMPOSE, function (evt) {
	                var renderEvent = /** @type {import("../render/Event.js").default} */evt;
	                renderEvent.frameState.layerStatesArray.push(this.getLayerState(false));
	            }, this);
	            this.mapRenderKey_ = (0, _events.listen)(this, _EventType2.default.CHANGE, map.render, map);
	            this.changed();
	        }
	    };
	    /**
	     * Set the layer source.
	     * @param {SourceType} source The layer source.
	     * @observable
	     * @api
	     */
	    Layer.prototype.setSource = function (source) {
	        this.set(_Property2.default.SOURCE, source);
	    };
	    /**
	     * Get the renderer for this layer.
	     * @return {import("../renderer/Layer.js").default} The layer renderer.
	     */
	    Layer.prototype.getRenderer = function () {
	        if (!this.renderer_) {
	            this.renderer_ = this.createRenderer();
	        }
	        return this.renderer_;
	    };
	    /**
	     * @return {boolean} The layer has a renderer.
	     */
	    Layer.prototype.hasRenderer = function () {
	        return !!this.renderer_;
	    };
	    /**
	     * Create a renderer for this layer.
	     * @return {import("../renderer/Layer.js").default} A layer renderer.
	     * @protected
	     */
	    Layer.prototype.createRenderer = function () {
	        return null;
	    };
	    /**
	     * @inheritDoc
	     */
	    Layer.prototype.disposeInternal = function () {
	        this.setSource(null);
	        _super.prototype.disposeInternal.call(this);
	    };
	    return Layer;
	}(_Base2.default);
	/**
	 * Return `true` if the layer is visible and if the provided view state
	 * has resolution and zoom levels that are in range of the layer's min/max.
	 * @param {State} layerState Layer state.
	 * @param {import("../View.js").State} viewState View state.
	 * @return {boolean} The layer is visible at the given view state.
	 */
	function inView(layerState, viewState) {
	    if (!layerState.visible) {
	        return false;
	    }
	    var resolution = viewState.resolution;
	    if (resolution < layerState.minResolution || resolution >= layerState.maxResolution) {
	        return false;
	    }
	    var zoom = viewState.zoom;
	    return zoom > layerState.minZoom && zoom <= layerState.maxZoom;
	}
	exports.default = Layer;
	//# sourceMappingURL=Layer.js.map

/***/ }),
/* 127 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	
	var _array = __webpack_require__(18);
	
	var _colorlike = __webpack_require__(144);
	
	var _extent = __webpack_require__(4);
	
	var _Relationship = __webpack_require__(267);
	
	var _Relationship2 = _interopRequireDefault(_Relationship);
	
	var _GeometryType = __webpack_require__(22);
	
	var _GeometryType2 = _interopRequireDefault(_GeometryType);
	
	var _inflate = __webpack_require__(86);
	
	var _VectorContext = __webpack_require__(288);
	
	var _VectorContext2 = _interopRequireDefault(_VectorContext);
	
	var _canvas = __webpack_require__(74);
	
	var _Instruction = __webpack_require__(106);
	
	var _Instruction2 = _interopRequireDefault(_Instruction);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var __extends = undefined && undefined.__extends || function () {
	    var _extendStatics = function extendStatics(d, b) {
	        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	            d.__proto__ = b;
	        } || function (d, b) {
	            for (var p in b) {
	                if (b.hasOwnProperty(p)) d[p] = b[p];
	            }
	        };
	        return _extendStatics(d, b);
	    };
	    return function (d, b) {
	        _extendStatics(d, b);
	        function __() {
	            this.constructor = d;
	        }
	        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	    };
	}();
	/**
	 * @module ol/render/canvas/Builder
	 */
	
	/**
	 * @typedef {Object} SerializableInstructions
	 * @property {Array<*>} instructions The rendering instructions.
	 * @property {Array<*>} hitDetectionInstructions The rendering hit detection instructions.
	 * @property {Array<number>} coordinates The array of all coordinates.
	 * @property {!Object<string, import("../canvas.js").TextState>} [textStates] The text states (decluttering).
	 * @property {!Object<string, import("../canvas.js").FillState>} [fillStates] The fill states (decluttering).
	 * @property {!Object<string, import("../canvas.js").StrokeState>} [strokeStates] The stroke states (decluttering).
	 */
	var CanvasBuilder = /** @class */function (_super) {
	    __extends(CanvasBuilder, _super);
	    /**
	     * @param {number} tolerance Tolerance.
	     * @param {import("../../extent.js").Extent} maxExtent Maximum extent.
	     * @param {number} resolution Resolution.
	     * @param {number} pixelRatio Pixel ratio.
	     */
	    function CanvasBuilder(tolerance, maxExtent, resolution, pixelRatio) {
	        var _this = _super.call(this) || this;
	        /**
	         * @protected
	         * @type {number}
	         */
	        _this.tolerance = tolerance;
	        /**
	         * @protected
	         * @const
	         * @type {import("../../extent.js").Extent}
	         */
	        _this.maxExtent = maxExtent;
	        /**
	         * @protected
	         * @type {number}
	         */
	        _this.pixelRatio = pixelRatio;
	        /**
	         * @protected
	         * @type {number}
	         */
	        _this.maxLineWidth = 0;
	        /**
	         * @protected
	         * @const
	         * @type {number}
	         */
	        _this.resolution = resolution;
	        /**
	         * @private
	         * @type {Array<*>}
	         */
	        _this.beginGeometryInstruction1_ = null;
	        /**
	         * @private
	         * @type {Array<*>}
	         */
	        _this.beginGeometryInstruction2_ = null;
	        /**
	         * @private
	         * @type {import("../../extent.js").Extent}
	         */
	        _this.bufferedMaxExtent_ = null;
	        /**
	         * @protected
	         * @type {Array<*>}
	         */
	        _this.instructions = [];
	        /**
	         * @protected
	         * @type {Array<number>}
	         */
	        _this.coordinates = [];
	        /**
	         * @private
	         * @type {import("../../coordinate.js").Coordinate}
	         */
	        _this.tmpCoordinate_ = [];
	        /**
	         * @protected
	         * @type {Array<*>}
	         */
	        _this.hitDetectionInstructions = [];
	        /**
	         * @protected
	         * @type {import("../canvas.js").FillStrokeState}
	         */
	        _this.state = /** @type {import("../canvas.js").FillStrokeState} */{};
	        return _this;
	    }
	    /**
	     * @protected
	     * @param {Array<number>} dashArray Dash array.
	     * @return {Array<number>} Dash array with pixel ratio applied
	     */
	    CanvasBuilder.prototype.applyPixelRatio = function (dashArray) {
	        var pixelRatio = this.pixelRatio;
	        return pixelRatio == 1 ? dashArray : dashArray.map(function (dash) {
	            return dash * pixelRatio;
	        });
	    };
	    /**
	     * @param {Array<number>} flatCoordinates Flat coordinates.
	     * @param {number} offset Offset.
	     * @param {number} end End.
	     * @param {number} stride Stride.
	     * @param {boolean} closed Last input coordinate equals first.
	     * @param {boolean} skipFirst Skip first coordinate.
	     * @protected
	     * @return {number} My end.
	     */
	    CanvasBuilder.prototype.appendFlatCoordinates = function (flatCoordinates, offset, end, stride, closed, skipFirst) {
	        var myEnd = this.coordinates.length;
	        var extent = this.getBufferedMaxExtent();
	        if (skipFirst) {
	            offset += stride;
	        }
	        var lastXCoord = flatCoordinates[offset];
	        var lastYCoord = flatCoordinates[offset + 1];
	        var nextCoord = this.tmpCoordinate_;
	        var skipped = true;
	        var i, lastRel, nextRel;
	        for (i = offset + stride; i < end; i += stride) {
	            nextCoord[0] = flatCoordinates[i];
	            nextCoord[1] = flatCoordinates[i + 1];
	            nextRel = (0, _extent.coordinateRelationship)(extent, nextCoord);
	            if (nextRel !== lastRel) {
	                if (skipped) {
	                    this.coordinates[myEnd++] = lastXCoord;
	                    this.coordinates[myEnd++] = lastYCoord;
	                }
	                this.coordinates[myEnd++] = nextCoord[0];
	                this.coordinates[myEnd++] = nextCoord[1];
	                skipped = false;
	            } else if (nextRel === _Relationship2.default.INTERSECTING) {
	                this.coordinates[myEnd++] = nextCoord[0];
	                this.coordinates[myEnd++] = nextCoord[1];
	                skipped = false;
	            } else {
	                skipped = true;
	            }
	            lastXCoord = nextCoord[0];
	            lastYCoord = nextCoord[1];
	            lastRel = nextRel;
	        }
	        // Last coordinate equals first or only one point to append:
	        if (closed && skipped || i === offset + stride) {
	            this.coordinates[myEnd++] = lastXCoord;
	            this.coordinates[myEnd++] = lastYCoord;
	        }
	        return myEnd;
	    };
	    /**
	     * @param {Array<number>} flatCoordinates Flat coordinates.
	     * @param {number} offset Offset.
	     * @param {Array<number>} ends Ends.
	     * @param {number} stride Stride.
	     * @param {Array<number>} builderEnds Builder ends.
	     * @return {number} Offset.
	     */
	    CanvasBuilder.prototype.drawCustomCoordinates_ = function (flatCoordinates, offset, ends, stride, builderEnds) {
	        for (var i = 0, ii = ends.length; i < ii; ++i) {
	            var end = ends[i];
	            var builderEnd = this.appendFlatCoordinates(flatCoordinates, offset, end, stride, false, false);
	            builderEnds.push(builderEnd);
	            offset = end;
	        }
	        return offset;
	    };
	    /**
	     * @inheritDoc.
	     */
	    CanvasBuilder.prototype.drawCustom = function (geometry, feature, renderer) {
	        this.beginGeometry(geometry, feature);
	        var type = geometry.getType();
	        var stride = geometry.getStride();
	        var builderBegin = this.coordinates.length;
	        var flatCoordinates, builderEnd, builderEnds, builderEndss;
	        var offset;
	        if (type == _GeometryType2.default.MULTI_POLYGON) {
	            geometry = /** @type {import("../../geom/MultiPolygon.js").default} */geometry;
	            flatCoordinates = geometry.getOrientedFlatCoordinates();
	            builderEndss = [];
	            var endss = geometry.getEndss();
	            offset = 0;
	            for (var i = 0, ii = endss.length; i < ii; ++i) {
	                var myEnds = [];
	                offset = this.drawCustomCoordinates_(flatCoordinates, offset, endss[i], stride, myEnds);
	                builderEndss.push(myEnds);
	            }
	            this.instructions.push([_Instruction2.default.CUSTOM, builderBegin, builderEndss, geometry, renderer, _inflate.inflateMultiCoordinatesArray]);
	        } else if (type == _GeometryType2.default.POLYGON || type == _GeometryType2.default.MULTI_LINE_STRING) {
	            builderEnds = [];
	            flatCoordinates = type == _GeometryType2.default.POLYGON ?
	            /** @type {import("../../geom/Polygon.js").default} */geometry.getOrientedFlatCoordinates() : geometry.getFlatCoordinates();
	            offset = this.drawCustomCoordinates_(flatCoordinates, 0,
	            /** @type {import("../../geom/Polygon.js").default|import("../../geom/MultiLineString.js").default} */geometry.getEnds(), stride, builderEnds);
	            this.instructions.push([_Instruction2.default.CUSTOM, builderBegin, builderEnds, geometry, renderer, _inflate.inflateCoordinatesArray]);
	        } else if (type == _GeometryType2.default.LINE_STRING || type == _GeometryType2.default.MULTI_POINT) {
	            flatCoordinates = geometry.getFlatCoordinates();
	            builderEnd = this.appendFlatCoordinates(flatCoordinates, 0, flatCoordinates.length, stride, false, false);
	            this.instructions.push([_Instruction2.default.CUSTOM, builderBegin, builderEnd, geometry, renderer, _inflate.inflateCoordinates]);
	        } else if (type == _GeometryType2.default.POINT) {
	            flatCoordinates = geometry.getFlatCoordinates();
	            this.coordinates.push(flatCoordinates[0], flatCoordinates[1]);
	            builderEnd = this.coordinates.length;
	            this.instructions.push([_Instruction2.default.CUSTOM, builderBegin, builderEnd, geometry, renderer]);
	        }
	        this.endGeometry(feature);
	    };
	    /**
	     * @protected
	     * @param {import("../../geom/Geometry").default|import("../Feature.js").default} geometry The geometry.
	     * @param {import("../../Feature.js").FeatureLike} feature Feature.
	     */
	    CanvasBuilder.prototype.beginGeometry = function (geometry, feature) {
	        var extent = geometry.getExtent();
	        this.beginGeometryInstruction1_ = [_Instruction2.default.BEGIN_GEOMETRY, feature, 0, extent];
	        this.instructions.push(this.beginGeometryInstruction1_);
	        this.beginGeometryInstruction2_ = [_Instruction2.default.BEGIN_GEOMETRY, feature, 0, extent];
	        this.hitDetectionInstructions.push(this.beginGeometryInstruction2_);
	    };
	    /**
	     * @return {SerializableInstructions} the serializable instructions.
	     */
	    CanvasBuilder.prototype.finish = function () {
	        return {
	            instructions: this.instructions,
	            hitDetectionInstructions: this.hitDetectionInstructions,
	            coordinates: this.coordinates
	        };
	    };
	    /**
	     * Reverse the hit detection instructions.
	     */
	    CanvasBuilder.prototype.reverseHitDetectionInstructions = function () {
	        var hitDetectionInstructions = this.hitDetectionInstructions;
	        // step 1 - reverse array
	        hitDetectionInstructions.reverse();
	        // step 2 - reverse instructions within geometry blocks
	        var i;
	        var n = hitDetectionInstructions.length;
	        var instruction;
	        var type;
	        var begin = -1;
	        for (i = 0; i < n; ++i) {
	            instruction = hitDetectionInstructions[i];
	            type = /** @type {CanvasInstruction} */instruction[0];
	            if (type == _Instruction2.default.END_GEOMETRY) {
	                begin = i;
	            } else if (type == _Instruction2.default.BEGIN_GEOMETRY) {
	                instruction[2] = i;
	                (0, _array.reverseSubArray)(this.hitDetectionInstructions, begin, i);
	                begin = -1;
	            }
	        }
	    };
	    /**
	     * @inheritDoc
	     */
	    CanvasBuilder.prototype.setFillStrokeStyle = function (fillStyle, strokeStyle) {
	        var state = this.state;
	        if (fillStyle) {
	            var fillStyleColor = fillStyle.getColor();
	            state.fillStyle = (0, _colorlike.asColorLike)(fillStyleColor ? fillStyleColor : _canvas.defaultFillStyle);
	        } else {
	            state.fillStyle = undefined;
	        }
	        if (strokeStyle) {
	            var strokeStyleColor = strokeStyle.getColor();
	            state.strokeStyle = (0, _colorlike.asColorLike)(strokeStyleColor ? strokeStyleColor : _canvas.defaultStrokeStyle);
	            var strokeStyleLineCap = strokeStyle.getLineCap();
	            state.lineCap = strokeStyleLineCap !== undefined ? strokeStyleLineCap : _canvas.defaultLineCap;
	            var strokeStyleLineDash = strokeStyle.getLineDash();
	            state.lineDash = strokeStyleLineDash ? strokeStyleLineDash.slice() : _canvas.defaultLineDash;
	            var strokeStyleLineDashOffset = strokeStyle.getLineDashOffset();
	            state.lineDashOffset = strokeStyleLineDashOffset ? strokeStyleLineDashOffset : _canvas.defaultLineDashOffset;
	            var strokeStyleLineJoin = strokeStyle.getLineJoin();
	            state.lineJoin = strokeStyleLineJoin !== undefined ? strokeStyleLineJoin : _canvas.defaultLineJoin;
	            var strokeStyleWidth = strokeStyle.getWidth();
	            state.lineWidth = strokeStyleWidth !== undefined ? strokeStyleWidth : _canvas.defaultLineWidth;
	            var strokeStyleMiterLimit = strokeStyle.getMiterLimit();
	            state.miterLimit = strokeStyleMiterLimit !== undefined ? strokeStyleMiterLimit : _canvas.defaultMiterLimit;
	            if (state.lineWidth > this.maxLineWidth) {
	                this.maxLineWidth = state.lineWidth;
	                // invalidate the buffered max extent cache
	                this.bufferedMaxExtent_ = null;
	            }
	        } else {
	            state.strokeStyle = undefined;
	            state.lineCap = undefined;
	            state.lineDash = null;
	            state.lineDashOffset = undefined;
	            state.lineJoin = undefined;
	            state.lineWidth = undefined;
	            state.miterLimit = undefined;
	        }
	    };
	    /**
	     * @param {import("../canvas.js").FillStrokeState} state State.
	     * @return {Array<*>} Fill instruction.
	     */
	    CanvasBuilder.prototype.createFill = function (state) {
	        var fillStyle = state.fillStyle;
	        /** @type {Array<*>} */
	        var fillInstruction = [_Instruction2.default.SET_FILL_STYLE, fillStyle];
	        if (typeof fillStyle !== 'string') {
	            // Fill is a pattern or gradient - align it!
	            fillInstruction.push(true);
	        }
	        return fillInstruction;
	    };
	    /**
	     * @param {import("../canvas.js").FillStrokeState} state State.
	     */
	    CanvasBuilder.prototype.applyStroke = function (state) {
	        this.instructions.push(this.createStroke(state));
	    };
	    /**
	     * @param {import("../canvas.js").FillStrokeState} state State.
	     * @return {Array<*>} Stroke instruction.
	     */
	    CanvasBuilder.prototype.createStroke = function (state) {
	        return [_Instruction2.default.SET_STROKE_STYLE, state.strokeStyle, state.lineWidth * this.pixelRatio, state.lineCap, state.lineJoin, state.miterLimit, this.applyPixelRatio(state.lineDash), state.lineDashOffset * this.pixelRatio];
	    };
	    /**
	     * @param {import("../canvas.js").FillStrokeState} state State.
	     * @param {function(this:CanvasBuilder, import("../canvas.js").FillStrokeState):Array<*>} createFill Create fill.
	     */
	    CanvasBuilder.prototype.updateFillStyle = function (state, createFill) {
	        var fillStyle = state.fillStyle;
	        if (typeof fillStyle !== 'string' || state.currentFillStyle != fillStyle) {
	            if (fillStyle !== undefined) {
	                this.instructions.push(createFill.call(this, state));
	            }
	            state.currentFillStyle = fillStyle;
	        }
	    };
	    /**
	     * @param {import("../canvas.js").FillStrokeState} state State.
	     * @param {function(this:CanvasBuilder, import("../canvas.js").FillStrokeState): void} applyStroke Apply stroke.
	     */
	    CanvasBuilder.prototype.updateStrokeStyle = function (state, applyStroke) {
	        var strokeStyle = state.strokeStyle;
	        var lineCap = state.lineCap;
	        var lineDash = state.lineDash;
	        var lineDashOffset = state.lineDashOffset;
	        var lineJoin = state.lineJoin;
	        var lineWidth = state.lineWidth;
	        var miterLimit = state.miterLimit;
	        if (state.currentStrokeStyle != strokeStyle || state.currentLineCap != lineCap || lineDash != state.currentLineDash && !(0, _array.equals)(state.currentLineDash, lineDash) || state.currentLineDashOffset != lineDashOffset || state.currentLineJoin != lineJoin || state.currentLineWidth != lineWidth || state.currentMiterLimit != miterLimit) {
	            if (strokeStyle !== undefined) {
	                applyStroke.call(this, state);
	            }
	            state.currentStrokeStyle = strokeStyle;
	            state.currentLineCap = lineCap;
	            state.currentLineDash = lineDash;
	            state.currentLineDashOffset = lineDashOffset;
	            state.currentLineJoin = lineJoin;
	            state.currentLineWidth = lineWidth;
	            state.currentMiterLimit = miterLimit;
	        }
	    };
	    /**
	     * @param {import("../../Feature.js").FeatureLike} feature Feature.
	     */
	    CanvasBuilder.prototype.endGeometry = function (feature) {
	        this.beginGeometryInstruction1_[2] = this.instructions.length;
	        this.beginGeometryInstruction1_ = null;
	        this.beginGeometryInstruction2_[2] = this.hitDetectionInstructions.length;
	        this.beginGeometryInstruction2_ = null;
	        var endGeometryInstruction = [_Instruction2.default.END_GEOMETRY, feature];
	        this.instructions.push(endGeometryInstruction);
	        this.hitDetectionInstructions.push(endGeometryInstruction);
	    };
	    /**
	     * Get the buffered rendering extent.  Rendering will be clipped to the extent
	     * provided to the constructor.  To account for symbolizers that may intersect
	     * this extent, we calculate a buffered extent (e.g. based on stroke width).
	     * @return {import("../../extent.js").Extent} The buffered rendering extent.
	     * @protected
	     */
	    CanvasBuilder.prototype.getBufferedMaxExtent = function () {
	        if (!this.bufferedMaxExtent_) {
	            this.bufferedMaxExtent_ = (0, _extent.clone)(this.maxExtent);
	            if (this.maxLineWidth > 0) {
	                var width = this.resolution * (this.maxLineWidth + 1) / 2;
	                (0, _extent.buffer)(this.bufferedMaxExtent_, width, this.bufferedMaxExtent_);
	            }
	        }
	        return this.bufferedMaxExtent_;
	    };
	    return CanvasBuilder;
	}(_VectorContext2.default);
	exports.default = CanvasBuilder;
	//# sourceMappingURL=Builder.js.map

/***/ }),
/* 128 */
/***/ (function(module, exports) {

	"use strict";
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	exports.buffer = buffer;
	exports.hasArea = hasArea;
	exports.scale = scale;
	exports.toSize = toSize;
	/**
	 * @module ol/size
	 */
	/**
	 * An array of numbers representing a size: `[width, height]`.
	 * @typedef {Array<number>} Size
	 * @api
	 */
	/**
	 * Returns a buffered size.
	 * @param {Size} size Size.
	 * @param {number} num The amount by which to buffer.
	 * @param {Size=} opt_size Optional reusable size array.
	 * @return {Size} The buffered size.
	 */
	function buffer(size, num, opt_size) {
	    if (opt_size === undefined) {
	        opt_size = [0, 0];
	    }
	    opt_size[0] = size[0] + 2 * num;
	    opt_size[1] = size[1] + 2 * num;
	    return opt_size;
	}
	/**
	 * Determines if a size has a positive area.
	 * @param {Size} size The size to test.
	 * @return {boolean} The size has a positive area.
	 */
	function hasArea(size) {
	    return size[0] > 0 && size[1] > 0;
	}
	/**
	 * Returns a size scaled by a ratio. The result will be an array of integers.
	 * @param {Size} size Size.
	 * @param {number} ratio Ratio.
	 * @param {Size=} opt_size Optional reusable size array.
	 * @return {Size} The scaled size.
	 */
	function scale(size, ratio, opt_size) {
	    if (opt_size === undefined) {
	        opt_size = [0, 0];
	    }
	    opt_size[0] = size[0] * ratio + 0.5 | 0;
	    opt_size[1] = size[1] * ratio + 0.5 | 0;
	    return opt_size;
	}
	/**
	 * Returns an `Size` array for the passed in number (meaning: square) or
	 * `Size` array.
	 * (meaning: non-square),
	 * @param {number|Size} size Width and height.
	 * @param {Size=} opt_size Optional reusable size array.
	 * @return {Size} Size.
	 * @api
	 */
	function toSize(size, opt_size) {
	    if (Array.isArray(size)) {
	        return size;
	    } else {
	        if (opt_size === undefined) {
	            opt_size = [size, size];
	        } else {
	            opt_size[0] = size;
	            opt_size[1] = size;
	        }
	        return opt_size;
	    }
	}
	//# sourceMappingURL=size.js.map

/***/ }),
/* 129 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	// 21.2.5.3 get RegExp.prototype.flags
	var anObject = __webpack_require__(6);
	module.exports = function () {
	  var that = anObject(this);
	  var result = '';
	  if (that.global) result += 'g';
	  if (that.ignoreCase) result += 'i';
	  if (that.multiline) result += 'm';
	  if (that.unicode) result += 'u';
	  if (that.sticky) result += 'y';
	  return result;
	};


/***/ }),
/* 130 */
/***/ (function(module, exports, __webpack_require__) {

	// fallback for non-array-like ES3 and non-enumerable old V8 strings
	var cof = __webpack_require__(50);
	// eslint-disable-next-line no-prototype-builtins
	module.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {
	  return cof(it) == 'String' ? it.split('') : Object(it);
	};


/***/ }),
/* 131 */
/***/ (function(module, exports) {

	exports.f = {}.propertyIsEnumerable;


/***/ }),
/* 132 */
/***/ (function(module, exports, __webpack_require__) {

	var core = __webpack_require__(51);
	var global = __webpack_require__(9);
	var SHARED = '__core-js_shared__';
	var store = global[SHARED] || (global[SHARED] = {});
	
	(module.exports = function (key, value) {
	  return store[key] || (store[key] = value !== undefined ? value : {});
	})('versions', []).push({
	  version: core.version,
	  mode: __webpack_require__(77) ? 'pure' : 'global',
	  copyright: '© 2019 Denis Pushkarev (zloirock.ru)'
	});


/***/ }),
/* 133 */
/***/ (function(module, exports, __webpack_require__) {

	// 7.3.20 SpeciesConstructor(O, defaultConstructor)
	var anObject = __webpack_require__(6);
	var aFunction = __webpack_require__(36);
	var SPECIES = __webpack_require__(20)('species');
	module.exports = function (O, D) {
	  var C = anObject(O).constructor;
	  var S;
	  return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);
	};


/***/ }),
/* 134 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	var keys = __webpack_require__(507);
	var hasSymbols = typeof Symbol === 'function' && typeof Symbol('foo') === 'symbol';
	
	var toStr = Object.prototype.toString;
	var concat = Array.prototype.concat;
	var origDefineProperty = Object.defineProperty;
	
	var isFunction = function (fn) {
		return typeof fn === 'function' && toStr.call(fn) === '[object Function]';
	};
	
	var arePropertyDescriptorsSupported = function () {
		var obj = {};
		try {
			origDefineProperty(obj, 'x', { enumerable: false, value: obj });
			// eslint-disable-next-line no-unused-vars, no-restricted-syntax
			for (var _ in obj) { // jscs:ignore disallowUnusedVariables
				return false;
			}
			return obj.x === obj;
		} catch (e) { /* this is IE 8. */
			return false;
		}
	};
	var supportsDescriptors = origDefineProperty && arePropertyDescriptorsSupported();
	
	var defineProperty = function (object, name, value, predicate) {
		if (name in object && (!isFunction(predicate) || !predicate())) {
			return;
		}
		if (supportsDescriptors) {
			origDefineProperty(object, name, {
				configurable: true,
				enumerable: false,
				value: value,
				writable: true
			});
		} else {
			object[name] = value;
		}
	};
	
	var defineProperties = function (object, map) {
		var predicates = arguments.length > 2 ? arguments[2] : {};
		var props = keys(map);
		if (hasSymbols) {
			props = concat.call(props, Object.getOwnPropertySymbols(map));
		}
		for (var i = 0; i < props.length; i += 1) {
			defineProperty(object, props[i], map[props[i]], predicates[props[i]]);
		}
	};
	
	defineProperties.supportsDescriptors = !!supportsDescriptors;
	
	module.exports = defineProperties;


/***/ }),
/* 135 */
/***/ (function(module, exports) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
		value: true
	});
	
	function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
	
	var EventEmitter = function () {
		function EventEmitter() {
			_classCallCheck(this, EventEmitter);
	
			this.observers = {};
		}
	
		EventEmitter.prototype.on = function on(events, listener) {
			var _this = this;
	
			events.split(' ').forEach(function (event) {
				_this.observers[event] = _this.observers[event] || [];
				_this.observers[event].push(listener);
			});
		};
	
		EventEmitter.prototype.off = function off(event, listener) {
			var _this2 = this;
	
			if (!this.observers[event]) {
				return;
			}
	
			this.observers[event].forEach(function () {
				if (!listener) {
					delete _this2.observers[event];
				} else {
					var index = _this2.observers[event].indexOf(listener);
					if (index > -1) {
						_this2.observers[event].splice(index, 1);
					}
				}
			});
		};
	
		EventEmitter.prototype.emit = function emit(event) {
			for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
				args[_key - 1] = arguments[_key];
			}
	
			if (this.observers[event]) {
				this.observers[event].forEach(function (observer) {
					observer.apply(undefined, args);
				});
			}
	
			if (this.observers['*']) {
				this.observers['*'].forEach(function (observer) {
					var _ref;
	
					observer.apply(observer, (_ref = [event]).concat.apply(_ref, args));
				});
			}
		};
	
		return EventEmitter;
	}();
	
	exports.default = EventEmitter;

/***/ }),
/* 136 */
/***/ (function(module, exports) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	exports.makeString = makeString;
	exports.copy = copy;
	exports.setPath = setPath;
	exports.pushPath = pushPath;
	exports.getPath = getPath;
	exports.deepExtend = deepExtend;
	exports.regexEscape = regexEscape;
	exports.escape = escape;
	function makeString(object) {
	  if (object == null) return '';
	  return '' + object;
	}
	
	function copy(a, s, t) {
	  a.forEach(function (m) {
	    if (s[m]) t[m] = s[m];
	  });
	}
	
	function getLastOfPath(object, path, Empty) {
	  function cleanKey(key) {
	    return key && key.indexOf('###') > -1 ? key.replace(/###/g, '.') : key;
	  }
	
	  var stack = typeof path !== 'string' ? [].concat(path) : path.split('.');
	  while (stack.length > 1) {
	    if (!object) return {};
	
	    var key = cleanKey(stack.shift());
	    if (!object[key] && Empty) object[key] = new Empty();
	    object = object[key];
	  }
	
	  if (!object) return {};
	  return {
	    obj: object,
	    k: cleanKey(stack.shift())
	  };
	}
	
	function setPath(object, path, newValue) {
	  var _getLastOfPath = getLastOfPath(object, path, Object),
	      obj = _getLastOfPath.obj,
	      k = _getLastOfPath.k;
	
	  obj[k] = newValue;
	}
	
	function pushPath(object, path, newValue, concat) {
	  var _getLastOfPath2 = getLastOfPath(object, path, Object),
	      obj = _getLastOfPath2.obj,
	      k = _getLastOfPath2.k;
	
	  obj[k] = obj[k] || [];
	  if (concat) obj[k] = obj[k].concat(newValue);
	  if (!concat) obj[k].push(newValue);
	}
	
	function getPath(object, path) {
	  var _getLastOfPath3 = getLastOfPath(object, path),
	      obj = _getLastOfPath3.obj,
	      k = _getLastOfPath3.k;
	
	  if (!obj) return undefined;
	  return obj[k];
	}
	
	function deepExtend(target, source, overwrite) {
	  for (var prop in source) {
	    if (prop in target) {
	      // If we reached a leaf string in target or source then replace with source or skip depending on the 'overwrite' switch
	      if (typeof target[prop] === 'string' || target[prop] instanceof String || typeof source[prop] === 'string' || source[prop] instanceof String) {
	        if (overwrite) target[prop] = source[prop];
	      } else {
	        deepExtend(target[prop], source[prop], overwrite);
	      }
	    } else {
	      target[prop] = source[prop];
	    }
	  }return target;
	}
	
	function regexEscape(str) {
	  return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, '\\$&');
	}
	
	/* eslint-disable */
	var _entityMap = {
	  "&": "&amp;",
	  "<": "&lt;",
	  ">": "&gt;",
	  '"': '&quot;',
	  "'": '&#39;',
	  "/": '&#x2F;'
	};
	/* eslint-enable */
	
	function escape(data) {
	  if (typeof data === 'string') {
	    return data.replace(/[&<>"'\/]/g, function (s) {
	      return _entityMap[s];
	    });
	  } else {
	    return data;
	  }
	}

/***/ }),
/* 137 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	var meta = __webpack_require__(118);
	
	/**
	 * Takes a set of features, calculates the bbox of all input features, and returns a bounding box.
	 *
	 * @name bbox
	 * @param {GeoJSON} geojson any GeoJSON object
	 * @returns {BBox} bbox extent in [minX, minY, maxX, maxY] order
	 * @example
	 * var line = turf.lineString([[-74, 40], [-78, 42], [-82, 35]]);
	 * var bbox = turf.bbox(line);
	 * var bboxPolygon = turf.bboxPolygon(bbox);
	 *
	 * //addToMap
	 * var addToMap = [line, bboxPolygon]
	 */
	function bbox(geojson) {
	    var BBox = [Infinity, Infinity, -Infinity, -Infinity];
	    meta.coordEach(geojson, function (coord) {
	        if (BBox[0] > coord[0]) BBox[0] = coord[0];
	        if (BBox[1] > coord[1]) BBox[1] = coord[1];
	        if (BBox[2] < coord[0]) BBox[2] = coord[0];
	        if (BBox[3] < coord[1]) BBox[3] = coord[1];
	    });
	    return BBox;
	}
	
	module.exports = bbox;
	module.exports.default = bbox;


/***/ }),
/* 138 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	var global = __webpack_require__(9);
	var $export = __webpack_require__(3);
	var redefine = __webpack_require__(38);
	var redefineAll = __webpack_require__(96);
	var meta = __webpack_require__(78);
	var forOf = __webpack_require__(91);
	var anInstance = __webpack_require__(90);
	var isObject = __webpack_require__(15);
	var fails = __webpack_require__(13);
	var $iterDetect = __webpack_require__(156);
	var setToStringTag = __webpack_require__(112);
	var inheritIfRequired = __webpack_require__(202);
	
	module.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {
	  var Base = global[NAME];
	  var C = Base;
	  var ADDER = IS_MAP ? 'set' : 'add';
	  var proto = C && C.prototype;
	  var O = {};
	  var fixMethod = function fixMethod(KEY) {
	    var fn = proto[KEY];
	    redefine(proto, KEY, KEY == 'delete' ? function (a) {
	      return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);
	    } : KEY == 'has' ? function has(a) {
	      return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);
	    } : KEY == 'get' ? function get(a) {
	      return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);
	    } : KEY == 'add' ? function add(a) {
	      fn.call(this, a === 0 ? 0 : a);return this;
	    } : function set(a, b) {
	      fn.call(this, a === 0 ? 0 : a, b);return this;
	    });
	  };
	  if (typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () {
	    new C().entries().next();
	  }))) {
	    // create collection constructor
	    C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);
	    redefineAll(C.prototype, methods);
	    meta.NEED = true;
	  } else {
	    var instance = new C();
	    // early implementations not supports chaining
	    var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;
	    // V8 ~  Chromium 40- weak-collections throws on primitives, but should return false
	    var THROWS_ON_PRIMITIVES = fails(function () {
	      instance.has(1);
	    });
	    // most early implementations doesn't supports iterables, most modern - not close it correctly
	    var ACCEPT_ITERABLES = $iterDetect(function (iter) {
	      new C(iter);
	    }); // eslint-disable-line no-new
	    // for early implementations -0 and +0 not the same
	    var BUGGY_ZERO = !IS_WEAK && fails(function () {
	      // V8 ~ Chromium 42- fails only with 5+ elements
	      var $instance = new C();
	      var index = 5;
	      while (index--) {
	        $instance[ADDER](index, index);
	      }return !$instance.has(-0);
	    });
	    if (!ACCEPT_ITERABLES) {
	      C = wrapper(function (target, iterable) {
	        anInstance(target, C, NAME);
	        var that = inheritIfRequired(new Base(), target, C);
	        if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);
	        return that;
	      });
	      C.prototype = proto;
	      proto.constructor = C;
	    }
	    if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {
	      fixMethod('delete');
	      fixMethod('has');
	      IS_MAP && fixMethod('get');
	    }
	    if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);
	    // weak collections should not contains .clear method
	    if (IS_WEAK && proto.clear) delete proto.clear;
	  }
	
	  setToStringTag(C, NAME);
	
	  O[NAME] = C;
	  $export($export.G + $export.W + $export.F * (C != Base), O);
	
	  if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);
	
	  return C;
	};

/***/ }),
/* 139 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	// https://tc39.github.io/proposal-setmap-offrom/
	
	var $export = __webpack_require__(3);
	var aFunction = __webpack_require__(36);
	var ctx = __webpack_require__(52);
	var forOf = __webpack_require__(91);
	
	module.exports = function (COLLECTION) {
	  $export($export.S, COLLECTION, { from: function from(source /* , mapFn, thisArg */) {
	      var mapFn = arguments[1];
	      var mapping, A, n, cb;
	      aFunction(this);
	      mapping = mapFn !== undefined;
	      if (mapping) aFunction(mapFn);
	      if (source == undefined) return new this();
	      A = [];
	      if (mapping) {
	        n = 0;
	        cb = ctx(mapFn, arguments[2], 2);
	        forOf(source, false, function (nextItem) {
	          A.push(cb(nextItem, n++));
	        });
	      } else {
	        forOf(source, false, A.push, A);
	      }
	      return new this(A);
	    } });
	};

/***/ }),
/* 140 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	// https://tc39.github.io/proposal-setmap-offrom/
	
	var $export = __webpack_require__(3);
	
	module.exports = function (COLLECTION) {
	  $export($export.S, COLLECTION, { of: function of() {
	      var length = arguments.length;
	      var A = new Array(length);
	      while (length--) {
	        A[length] = arguments[length];
	      }return new this(A);
	    } });
	};

/***/ }),
/* 141 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	
	var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
	
	var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); // eslint-disable-line import/no-extraneous-dependencies
	
	// import Attribution from 'ol/attribution';
	
	exports.createMap = createMap;
	exports.createRasterLayer = createRasterLayer;
	exports.parseDuration = parseDuration;
	exports.validateTimeInterval = validateTimeInterval;
	exports.updateLayerParams = updateLayerParams;
	exports.createVectorLayer = createVectorLayer;
	exports.createCollectionVectorLayer = createCollectionVectorLayer;
	exports.sortLayers = sortLayers;
	exports.featureFromExtent = featureFromExtent;
	exports.moveBy = moveBy;
	exports.toNormalizedFeature = toNormalizedFeature;
	exports.featureCoordsToBounds = featureCoordsToBounds;
	exports.wrapToBounds = wrapToBounds;
	exports.createCutOut = createCutOut;
	
	var _underscore = __webpack_require__(33);
	
	var _underscore2 = _interopRequireDefault(_underscore);
	
	var _difference = __webpack_require__(525);
	
	var _difference2 = _interopRequireDefault(_difference);
	
	var _bbox = __webpack_require__(137);
	
	var _bbox2 = _interopRequireDefault(_bbox);
	
	var _intersect = __webpack_require__(526);
	
	var _intersect2 = _interopRequireDefault(_intersect);
	
	var _rewind = __webpack_require__(527);
	
	var _rewind2 = _interopRequireDefault(_rewind);
	
	var _jquery = __webpack_require__(12);
	
	var _jquery2 = _interopRequireDefault(_jquery);
	
	var _Map = __webpack_require__(578);
	
	var _Map2 = _interopRequireDefault(_Map);
	
	var _View = __webpack_require__(261);
	
	var _View2 = _interopRequireDefault(_View);
	
	var _proj = __webpack_require__(16);
	
	var _extent = __webpack_require__(4);
	
	var _Attribution = __webpack_require__(263);
	
	var _Attribution2 = _interopRequireDefault(_Attribution);
	
	var _Zoom = __webpack_require__(265);
	
	var _Zoom2 = _interopRequireDefault(_Zoom);
	
	var _MousePosition = __webpack_require__(264);
	
	var _MousePosition2 = _interopRequireDefault(_MousePosition);
	
	var _Tile = __webpack_require__(620);
	
	var _Tile2 = _interopRequireDefault(_Tile);
	
	var _Vector = __webpack_require__(147);
	
	var _Vector2 = _interopRequireDefault(_Vector);
	
	var _WMTSCapabilities = __webpack_require__(593);
	
	var _WMTSCapabilities2 = _interopRequireDefault(_WMTSCapabilities);
	
	var _WMTS = __webpack_require__(649);
	
	var _WMTS2 = _interopRequireDefault(_WMTS);
	
	var _TileWMS = __webpack_require__(646);
	
	var _TileWMS2 = _interopRequireDefault(_TileWMS);
	
	var _XYZ = __webpack_require__(651);
	
	var _XYZ2 = _interopRequireDefault(_XYZ);
	
	var _Vector3 = __webpack_require__(108);
	
	var _Vector4 = _interopRequireDefault(_Vector3);
	
	var _TileGrid = __webpack_require__(186);
	
	var _TileGrid2 = _interopRequireDefault(_TileGrid);
	
	var _WMTS3 = __webpack_require__(306);
	
	var _WMTS4 = _interopRequireDefault(_WMTS3);
	
	var _Style = __webpack_require__(87);
	
	var _Style2 = _interopRequireDefault(_Style);
	
	var _Fill = __webpack_require__(149);
	
	var _Fill2 = _interopRequireDefault(_Fill);
	
	var _Stroke = __webpack_require__(184);
	
	var _Stroke2 = _interopRequireDefault(_Stroke);
	
	var _Circle = __webpack_require__(182);
	
	var _Circle2 = _interopRequireDefault(_Circle);
	
	var _GeoJSON = __webpack_require__(270);
	
	var _GeoJSON2 = _interopRequireDefault(_GeoJSON);
	
	var _deepEqual = __webpack_require__(969);
	
	var _deepEqual2 = _interopRequireDefault(_deepEqual);
	
	var _CollectionSource = __webpack_require__(232);
	
	var _CollectionSource2 = _interopRequireDefault(_CollectionSource);
	
	var _util = __webpack_require__(120);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	function createMap(center, zoom, renderer, minZoom, maxZoom, projection) {
	  return new _Map2.default({
	    controls: [new _Attribution2.default(), new _Zoom2.default(), new _MousePosition2.default({
	      className: 'ol-mouse-position-eoxc',
	      coordinateFormat: function coordinateFormat(_ref) {
	        var _ref2 = _slicedToArray(_ref, 2),
	            x = _ref2[0],
	            y = _ref2[1];
	
	        while (x > 180) {
	          x -= 360; // eslint-disable-line no-param-reassign
	        }
	        while (x < -180) {
	          x += 360; // eslint-disable-line no-param-reassign
	        }
	        return x.toFixed(2) + ', ' + y.toFixed(2);
	      },
	
	      // hardcoding mouse position tooltip crs
	      projection: (0, _proj.get)('EPSG:4326'),
	      undefinedHTML: ''
	    })],
	    renderer: renderer || 'canvas',
	    view: new _View2.default({
	      projection: projection,
	      center: center,
	      zoom: zoom,
	      enableRotation: false,
	      minZoom: minZoom,
	      maxZoom: maxZoom
	    }),
	    logo: false
	  });
	}
	
	/**
	 * Creates an OpenLayers layer from a given LayerModel.
	 *
	 * @param {core/models.LayerModel} layerModel The layerModel to create a layer for.
	 * @returns {ol.Layer} The OpenLayers layer object
	 */
	function createRasterLayer(layerModel) {
	  var useDetailsDisplay = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
	
	  var displayParams = useDetailsDisplay ? layerModel.get('detailsDisplay') || layerModel.get('display') : layerModel.get('display');
	
	  var layer = void 0;
	
	  var projection = (0, _proj.get)(displayParams.projection || 'EPSG:4326');
	  var projectionExtent = projection.getExtent();
	  var size = (0, _extent.getWidth)(projectionExtent) / (displayParams.tileSize || 256);
	  var resolutions = new Array(18);
	  var matrixIds = new Array(18);
	  var customAdditionBasedOnProj = projection.getCode() === 'EPSG:4326' ? 1 : 0;
	  for (var z = 0; z < 18; ++z) {
	    // generate resolutions and matrixIds arrays for this WMTS
	    // eslint-disable-next-line no-restricted-properties
	    resolutions[z] = size / Math.pow(2, z + customAdditionBasedOnProj);
	    var id = z;
	
	    if (displayParams.matrixIdPrefix) {
	      id = displayParams.matrixIdPrefix + id;
	    }
	    if (displayParams.matrixIdPostfix) {
	      id += displayParams.matrixIdPostfix;
	    }
	    matrixIds[z] = id;
	  }
	
	  var tileSize = displayParams.tileSize;
	  if (typeof displayParams.tileSize === 'number') {
	    tileSize = [displayParams.tileSize, displayParams.tileSize];
	  }
	
	  var layerId = displayParams.id ? displayParams.id : displayParams.ids.join(',');
	  var opacity = typeof displayParams.opacity === 'number' ? displayParams.opacity : 1;
	  var urls = typeof displayParams.url !== 'undefined' ? [displayParams.url] : displayParams.urls;
	  if (urls.length === 0) {
	    // to avoid errors, empty string needs to be inserted if empty in ol6
	    urls.push('');
	  }
	
	  if (displayParams.capabilitiesUrl) {
	    layer = new _Tile2.default({
	      visible: displayParams.visible
	    });
	
	    fetch(displayParams.capabilitiesUrl).then(function (response) {
	      return response.text();
	    }).then(function (text) {
	      var parser = new _WMTSCapabilities2.default();
	      var result = parser.read(text);
	      var options = (0, _WMTS.optionsFromCapabilities)(result, {
	        layer: displayParams.id,
	        matrixSet: displayParams.matrixSet,
	        transition: 0
	      });
	      layer.setSource(new _WMTS2.default(options));
	    });
	  } else {
	    switch (displayParams.protocol) {
	      case 'WMTS':
	        layer = new _Tile2.default({
	          visible: displayParams.visible,
	          opacity: opacity,
	          source: new _WMTS2.default({
	            transition: 0,
	            urls: urls,
	            layer: displayParams.id,
	            matrixSet: displayParams.matrixSet,
	            format: displayParams.format,
	            projection: projection,
	            tileGrid: new _WMTS4.default({
	              origin: (0, _extent.getTopLeft)(projectionExtent),
	              resolutions: resolutions,
	              matrixIds: matrixIds
	            }),
	            style: displayParams.style,
	            attributions: displayParams.attribution,
	            wrapX: true,
	            dimensions: {
	              time: ''
	            },
	            version: displayParams.version,
	            requestEncoding: displayParams.requestEncoding
	          })
	        });
	        break;
	      case 'WMS':
	        layer = new _Tile2.default({
	          visible: displayParams.visible,
	          opacity: opacity,
	          source: new _TileWMS2.default({
	            projection: projection,
	            transition: 0,
	            crossOrigin: 'anonymous',
	            params: Object.assign({
	              LAYERS: layerId,
	              VERSION: displayParams.version || '1.1.0',
	              FORMAT: displayParams.format, // TODO: use format here?
	              STYLES: displayParams.style
	            }, displayParams.extraParameters),
	            tileGrid: new _TileGrid2.default({
	              resolutions: resolutions,
	              tileSize: tileSize || [256, 256],
	              extent: projectionExtent
	            }),
	            urls: urls,
	            wrapX: true,
	            attributions: displayParams.attribution
	          })
	        });
	        break;
	      case 'XYZ':
	        layer = new _Tile2.default({
	          visible: displayParams.visible,
	          opacity: opacity,
	          source: new _XYZ2.default({
	            transition: 0,
	            crossOrigin: 'anonymous',
	            projection: projection,
	            tileSize: tileSize || [256, 256],
	            urls: urls,
	            attributions: displayParams.attribution,
	            minZoom: displayParams.minZoom,
	            maxZoom: displayParams.maxZoom
	          })
	        });
	        break;
	      default:
	        throw new Error('Unsupported view protocol');
	    }
	  }
	  layer.id = layerModel.get('id');
	  layer.layerModel = layerModel;
	  if (displayParams.noAntialiasing === true) {
	    layer.on('prerender', function (event) {
	      // eslint-disable-next-line no-param-reassign
	      event.context.imageSmoothingEnabled = false;
	    });
	  }
	  return layer;
	}
	
	function parseDuration(duration) {
	  // using code from EOX-A/d3.TimeSlider
	  if (!isNaN(parseFloat(duration))) {
	    return parseFloat(duration);
	  }
	  var regex = RegExp(/^P(?:([0-9]+)Y|)?(?:([0-9]+)M|)?(?:([0-9]+)D|)?T?(?:([0-9]+)H|)?(?:([0-9]+)M|)?(?:([0-9]+)S|)?$/, 'g');
	  var matches = regex.exec(duration);
	  if (matches) {
	    var years = parseInt(matches[1], 10) || 0; // years
	    var months = (parseInt(matches[2], 10) || 0) + years * 12; // months with days fixed to 30
	    var days = (parseInt(matches[3], 10) || 0) + months * 30; // days
	    var hours = (parseInt(matches[4], 10) || 0) + days * 24; // hours
	    var minutes = (parseInt(matches[5], 10) || 0) + hours * 60; // minutes
	    return (parseInt(matches[6], 10) || 0) + minutes * 60; // returns seconds in the end
	  }
	  // should not happen
	  return duration;
	}
	
	function validateTimeInterval(mapModel, time) {
	  // checks if interval does not exceed maximum interval
	  // if yes, returns modified interval of [end - maxInterval, end]
	  var maxIntervalSeconds = mapModel.get('maxMapInterval');
	  var result = time[1] > time[0] ? [time[0], time[1]] : [time[1], time[0]];
	  if (result[1] - result[0] > maxIntervalSeconds * 1000) {
	    result = [new Date(time[1] - maxIntervalSeconds * 1000), time[1]];
	    // communicating with time filter tool
	    mapModel.set('exceedMaxMapInterval', result);
	  } else {
	    mapModel.set('exceedMaxMapInterval', false);
	  }
	  return result;
	}
	
	function getLayerParams(mapModel, displayParams, filtersModel) {
	  var params = {};
	  var time = mapModel.get('time');
	  if (Array.isArray(time)) {
	    time = time[0] < time[1] ? time : [time[1], time[0]];
	  } else if (time instanceof Date) {
	    time = [time, time];
	  }
	
	  if (mapModel.get('maxMapInterval')) {
	    time = validateTimeInterval(mapModel, time);
	  }
	  if (displayParams.adjustTime) {
	    var offset = Array.isArray(displayParams.adjustTime) ? displayParams.adjustTime : [-displayParams.adjustTime, displayParams.adjustTime];
	    time = [new Date(time[0].getTime() + offset[0] * 1000), new Date(time[1].getTime() + offset[1] * 1000)];
	  }
	
	  var isoTime = null;
	  if (time !== null) {
	    var beginISO = (0, _util.getISODateTimeString)(time[0], displayParams.useMilliseconds);
	    var endISO = (0, _util.getISODateTimeString)(time[1], displayParams.useMilliseconds);
	
	    if (displayParams.discardZulu) {
	      beginISO = beginISO.slice(0, -1);
	      endISO = endISO.slice(0, -1);
	    }
	
	    isoTime = beginISO + '/' + endISO;
	  }
	
	  if (isoTime !== null) {
	    params.time = isoTime;
	  } else {
	    delete params.time;
	  }
	
	  // CQL filters
	  var cqlParameterName = displayParams.cqlParameterName;
	  if (cqlParameterName && filtersModel) {
	    var cql = (0, _util.filtersToCQL)(filtersModel, displayParams.cqlMapping);
	    var origCql = cql;
	
	    var layerIds = displayParams.ids;
	    if (layerIds && layerIds.length > 1) {
	      for (var i = 1; i < layerIds.length; ++i) {
	        cql = cql + ';' + origCql;
	      }
	    }
	
	    if (origCql && origCql.length) {
	      params[cqlParameterName] = cql;
	    } else {
	      delete params[cqlParameterName];
	    }
	  }
	
	  // extra parameters
	  var extraParameters = displayParams.extraParameters;
	  if (extraParameters) {
	    Object.keys(extraParameters).forEach(function (key) {
	      if (typeof extraParameters[key] === 'string') {
	        params[key] = extraParameters[key];
	      } else if (extraParameters[key].template) {
	        params[key] = _underscore2.default.template(extraParameters[key].template, {
	          interpolate: /\{\{(.+?)\}\}/g
	        })(extraParameters[key]);
	      }
	    });
	  }
	
	  return params;
	}
	
	/**
	 *
	 */
	function updateLayerParams(layer, mapModel, layerModel, filtersModel) {
	  var useDetailsDisplay = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
	
	  var displayParams = useDetailsDisplay ? layerModel.get('detailsDisplay') || layerModel.get('display') : layerModel.get('display');
	
	  layer.setVisible(displayParams.visible);
	  var opacity = typeof displayParams.opacity === 'number' ? displayParams.opacity : 1;
	  layer.setOpacity(opacity);
	  var source = layer.getSource();
	  var previousParams = void 0;
	  if (source.getParams) {
	    previousParams = source.getParams();
	  } else if (source.getDimensions) {
	    previousParams = source.getDimensions();
	  } else {
	    previousParams = {};
	  }
	
	  var params = Object.assign({}, previousParams, getLayerParams(mapModel, displayParams, filtersModel));
	
	  if (!(0, _deepEqual2.default)(params, previousParams)) {
	    if (source instanceof _TileWMS2.default) {
	      params.STYLES = displayParams.style;
	      source.params_ = {}; // eslint-disable-line no-underscore-dangle
	      source.updateParams(params);
	      // Workaround to make sure tiles are reloaded when parameters change
	      source.setTileLoadFunction(source.getTileLoadFunction());
	    } else if (source instanceof _WMTS2.default) {
	      var newDimensions = { time: params.time };
	      source.updateDimensions(newDimensions);
	      var newLayer = params.layer ? params.layer : params.LAYERS;
	      var newStyle = params.style ? params.style : params.STYLES;
	      if (newLayer || newStyle) {
	        // in case layer or style needs to be changed for WMTS, a source needs to be recreated
	        var newSource = new _WMTS2.default({
	          style: newStyle || source.getStyle(),
	          layer: newLayer || source.getLayer(),
	          transition: 0,
	          urls: source.getUrls(),
	          matrixSet: source.getMatrixSet(),
	          format: source.getFormat(),
	          projection: source.getProjection(),
	          tileGrid: source.getTileGrid(),
	          attributions: displayParams.attribution,
	          wrapX: true,
	          dimensions: source.getDimensions(),
	          version: source.getVersion(),
	          requestEncoding: source.getRequestEncoding()
	        });
	        layer.setSource(newSource);
	      } else {
	        source.setTileLoadFunction(source.getTileLoadFunction());
	      }
	    }
	  }
	}
	
	function createStyle() {
	  var _ref3 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
	      fillColor = _ref3.fillColor,
	      strokeColor = _ref3.strokeColor,
	      _ref3$strokeWidth = _ref3.strokeWidth,
	      strokeWidth = _ref3$strokeWidth === undefined ? 1 : _ref3$strokeWidth,
	      _ref3$circleRadius = _ref3.circleRadius,
	      circleRadius = _ref3$circleRadius === undefined ? 0 : _ref3$circleRadius;
	
	  var definition = {
	    fill: new _Fill2.default({
	      color: fillColor || 'rgba(0, 0, 0, 0)'
	    }),
	    stroke: new _Stroke2.default({
	      color: strokeColor || 'rgba(0, 0, 0, 0)',
	      width: strokeWidth
	    })
	  };
	
	  if (circleRadius) {
	    definition.image = new _Circle2.default({
	      radius: circleRadius,
	      fill: new _Fill2.default({
	        color: fillColor || 'rgba(0, 0, 0, 0)'
	      })
	    });
	  }
	  return new _Style2.default(definition);
	}
	
	function createVectorLayer() {
	  var styleDefinition = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
	  var source = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
	
	  return new _Vector2.default({
	    source: source || new _Vector4.default(),
	    style: createStyle(styleDefinition),
	    wrapX: true
	  });
	}
	
	function createCollectionVectorLayer(collection, searchModel, fillColor, strokeColor) {
	  var strokeWidth = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1;
	  var circleRadius = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0;
	
	  var layer = createVectorLayer(fillColor, strokeColor, strokeWidth, circleRadius, new _CollectionSource2.default({
	    collection: collection,
	    searchModel: searchModel,
	    format: new _GeoJSON2.default()
	  }));
	  return layer;
	}
	
	function sortLayers(collection, layers) {
	  var ids = collection.pluck('id').reverse();
	  return layers.sort(function (a, b) {
	    var ia = ids.indexOf(a.id);
	    var ib = ids.indexOf(b.id);
	    if (ia < ib) {
	      return -1;
	    } else if (ia > ib) {
	      return 1;
	    }
	    return 0;
	  });
	}
	
	function featureFromExtent(extentArray) {
	  var _extentArray = _slicedToArray(extentArray, 4),
	      minx = _extentArray[0],
	      miny = _extentArray[1],
	      maxx = _extentArray[2],
	      maxy = _extentArray[3];
	
	  return {
	    type: 'Feature',
	    geometry: {
	      type: 'Polygon',
	      coordinates: [[[minx, miny], [maxx, miny], [maxx, maxy], [minx, maxy], [minx, miny]]]
	    }
	  };
	}
	
	function linesFromExtent(extentArray) {
	  var _extentArray2 = _slicedToArray(extentArray, 4),
	      minx = _extentArray2[0],
	      miny = _extentArray2[1],
	      maxx = _extentArray2[2],
	      maxy = _extentArray2[3];
	
	  return {
	    type: 'Feature',
	    geometry: {
	      type: 'MultiLineString',
	      coordinates: [[[minx, miny], [maxx, miny]], [[minx, maxy], [maxx, maxy]]]
	    }
	  };
	}
	
	function moveCoordinates(coords, dx, dy) {
	  return [coords[0] + dx, coords[1] + dy];
	}
	
	function moveBy(feature, dx, dy) {
	  // special case for extents
	  if (Array.isArray(feature) && feature.length === 4) {
	    return [feature[0] + dx, feature[1] + dy, feature[2] + dx, feature[3] + dy];
	  }
	
	  var geom = feature.geometry;
	  var newCoordinates = null;
	  if (geom.type === 'Point') {
	    newCoordinates = moveCoordinates(geom.coordinates, dx, dy);
	  } else if (geom.type === 'LineString' || geom.type === 'MultiPoint') {
	    newCoordinates = geom.coordinates.map(function (coord) {
	      return moveCoordinates(coord, dx, dy);
	    });
	  } else if (geom.type === 'Polygon' || geom.type === 'MultiLineString') {
	    newCoordinates = geom.coordinates.map(function (line) {
	      return line.map(function (coord) {
	        return moveCoordinates(coord, dx, dy);
	      });
	    });
	  } else if (geom.type === 'MultiPolygon') {
	    newCoordinates = geom.coordinates.map(function (polygon) {
	      return polygon.map(function (line) {
	        return line.map(function (coord) {
	          return moveCoordinates(coord, dx, dy);
	        });
	      });
	    });
	  }
	  return {
	    type: 'Feature',
	    geometry: {
	      type: geom.type,
	      coordinates: newCoordinates
	    }
	  };
	}
	
	/*
	 * Normalize a given geometry, extent, or feature to a feature. The feature will
	 * be wrapped so that the minx value is between -180/180. Y values will be cut to
	 * -90/90.
	 * It returns two features: the normalized one and one optimized for display.
	 */
	function toNormalizedFeature(geometry) {
	  if (Array.isArray(geometry) && geometry.length === 4) {
	    var _geometry = _slicedToArray(geometry, 4),
	        minx = _geometry[0],
	        miny = _geometry[1],
	        maxx = _geometry[2],
	        maxy = _geometry[3];
	
	    if (maxx - minx >= 360) {
	      minx = -180;
	      maxx = 180;
	    } else if (minx < -180) {
	      var _dx = Math.floor((minx - 180) / -360) * 360;
	      minx += _dx;
	      maxx += _dx;
	    } else if (minx > 180) {
	      var _dx2 = Math.ceil((minx + 180) / 360) * 360;
	      minx += _dx2;
	      maxx += _dx2;
	    }
	    if (maxx < minx) {
	      maxx += 360;
	    }
	    miny = Math.max(miny, -90);
	    maxy = Math.min(maxy, 90);
	    var newExtent = featureFromExtent([minx, miny, maxx, maxy]);
	    var optimized = newExtent;
	    if (minx === -180 && maxx === 180) {
	      optimized = linesFromExtent([minx, miny, maxx, maxy]);
	    }
	    return [newExtent, optimized];
	  }
	
	  var feature = geometry;
	  if (geometry.type !== 'Feature') {
	    feature = {
	      type: 'Feature',
	      geometry: geometry
	    };
	  }
	  var bbox = (0, _bbox2.default)(feature);
	  var dx = 0;
	  if (bbox[0] < -180) {
	    dx = Math.floor((bbox[0] - 180) / -360) * 360;
	    feature = moveBy(feature, dx, 0);
	  } else if (bbox[0] >= 180) {
	    dx = Math.ceil((bbox[0] + 180) / 360) * 360;
	    feature = moveBy(feature, dx, 0);
	  }
	  return [feature, feature];
	}
	
	var globalPolygon = featureFromExtent([-180, -90, 180, 90]);
	
	function featureCoordsToBounds(feature, bounds) {
	  // transforms all feature coordinates to crs bounds by subtracting or adding bounds until it fits, returns [new feature, original feature]
	  // assuming bounds is bbox array(4)
	  if (bounds.length !== 4) {
	    return [feature, feature];
	  }
	  var maxWidth = bounds[2] - bounds[0];
	  var maxHeight = bounds[3] - bounds[1];
	  if (feature && feature.type === 'Feature' && feature.geometry && feature.geometry.type === 'Polygon' && _typeof(Array.isArray(feature.geometry.coordinates))) {
	    var newGeom = _jquery2.default.extend(true, {}, feature);
	    _underscore2.default.each(newGeom.geometry.coordinates[0], function (coordPair) {
	      var coords = coordPair;
	      if (coords.length === 2) {
	        while (coords[0] > bounds[2]) {
	          coords[0] -= maxWidth;
	        }
	        while (coords[0] < bounds[0]) {
	          coords[0] += maxWidth;
	        }
	        while (coords[1] > bounds[3]) {
	          coords[1] -= maxHeight;
	        }
	        while (coords[1] < bounds[1]) {
	          coords[1] += maxHeight;
	        }
	      }
	    });
	    return [newGeom, feature];
	  }
	  return [feature, feature];
	}
	
	function wrapToBounds(featureOrExtent, bounds) {
	  var geom = void 0;
	  var extentArray = void 0;
	  var maxWidth = bounds[2] - bounds[0];
	
	  if (Array.isArray(featureOrExtent)) {
	    extentArray = featureOrExtent;
	    // check that bbox is within bounds and adjust
	    if (extentArray[2] - extentArray[0] >= maxWidth) {
	      extentArray[0] = bounds[0];
	      extentArray[2] = bounds[2];
	    }
	    extentArray[1] = Math.max(extentArray[1], bounds[1]);
	    extentArray[3] = Math.min(extentArray[3], bounds[3]);
	    if (extentArray[1] > extentArray[3]) {
	      geom = null;
	    } else {
	      geom = extentArray;
	    }
	  } else {
	    // check that feature is within bounds
	    geom = featureOrExtent;
	    extentArray = (0, _bbox2.default)(geom);
	  }
	
	  if (geom) {
	    var dx = Math.ceil((extentArray[0] + 180) / -maxWidth) * maxWidth;
	    geom = moveBy(geom, dx, 0);
	  }
	
	  if (geom && geom.type === 'Feature') {
	    var boundsFeature = featureFromExtent(bounds);
	    // check that geom is within bounds
	    if (!(0, _intersect2.default)(geom, boundsFeature)) {
	      geom = null;
	    }
	
	    // enforce counter-clockwise polygon/multipolygon as opensearch standard requires
	    if (geom.geometry && (geom.geometry.type === 'Polygon' || geom.geometry.type === 'MultiPolygon')) {
	      (0, _rewind2.default)(geom, {
	        mutate: true
	      });
	    }
	  } else if (Array.isArray(geom)) {
	    if (geom[2] > 180) {
	      geom[2] -= 360;
	    }
	  }
	  return geom;
	}
	
	/*
	 * Create OL coutout features.
	 */
	// eslint-disable-next-line max-len
	function createCutOut(geometry, format, fillColor, outerColor, strokeColor) {
	  var strokeWidth = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 1;
	
	  var _toNormalizedFeature = toNormalizedFeature(geometry),
	      _toNormalizedFeature2 = _slicedToArray(_toNormalizedFeature, 2),
	      origFeature = _toNormalizedFeature2[0],
	      optimized = _toNormalizedFeature2[1];
	
	  var bbox = (0, _bbox2.default)(origFeature);
	  var diffFeature = globalPolygon;
	  for (var maxx = bbox[2]; maxx > -180; maxx -= 360) {
	    var dx = maxx - bbox[2];
	    var feature = origFeature;
	    if (dx !== 0) {
	      feature = moveBy(origFeature, dx, 0);
	    }
	    try {
	      diffFeature = (0, _difference2.default)(diffFeature, feature);
	    } catch (error) {
	      return [null, null];
	    }
	  }
	
	  var outerFeature = null;
	  var innerFeature = null;
	
	  if (diffFeature) {
	    outerFeature = format.readFeature(diffFeature);
	    outerFeature.setStyle(new _Style2.default({
	      stroke: new _Stroke2.default({
	        color: 'transparent',
	        width: 0
	      }),
	      fill: new _Fill2.default({
	        color: outerColor
	      })
	    }));
	  }
	
	  if (optimized) {
	    innerFeature = format.readFeature(optimized);
	    innerFeature.setStyle(new _Style2.default({
	      stroke: new _Stroke2.default({
	        color: strokeColor,
	        width: strokeWidth
	      }),
	      fill: new _Fill2.default({
	        color: fillColor
	      }),
	      image: new _Circle2.default({
	        radius: 5,
	        fill: new _Fill2.default({
	          color: strokeColor
	        })
	      })
	    }));
	  }
	
	  return [outerFeature, innerFeature];
	}

/***/ }),
/* 142 */
/***/ (function(module, exports) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	/**
	 * @module ol/MapEventType
	 */
	/**
	 * @enum {string}
	 */
	exports.default = {
	  /**
	   * Triggered after a map frame is rendered.
	   * @event module:ol/MapEvent~MapEvent#postrender
	   * @api
	   */
	  POSTRENDER: 'postrender',
	  /**
	   * Triggered when the map starts moving.
	   * @event module:ol/MapEvent~MapEvent#movestart
	   * @api
	   */
	  MOVESTART: 'movestart',
	  /**
	   * Triggered after the map is moved.
	   * @event module:ol/MapEvent~MapEvent#moveend
	   * @api
	   */
	  MOVEEND: 'moveend'
	};
	//# sourceMappingURL=MapEventType.js.map

/***/ }),
/* 143 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	exports.fromString = undefined;
	exports.asString = asString;
	exports.asArray = asArray;
	exports.normalize = normalize;
	exports.toString = toString;
	exports.isStringColor = isStringColor;
	
	var _asserts = __webpack_require__(29);
	
	var _math = __webpack_require__(19);
	
	/**
	 * A color represented as a short array [red, green, blue, alpha].
	 * red, green, and blue should be integers in the range 0..255 inclusive.
	 * alpha should be a float in the range 0..1 inclusive. If no alpha value is
	 * given then `1` will be used.
	 * @typedef {Array<number>} Color
	 * @api
	 */
	/**
	 * This RegExp matches # followed by 3, 4, 6, or 8 hex digits.
	 * @const
	 * @type {RegExp}
	 * @private
	 */
	/**
	 * @module ol/color
	 */
	var HEX_COLOR_RE_ = /^#([a-f0-9]{3}|[a-f0-9]{4}(?:[a-f0-9]{2}){0,2})$/i;
	/**
	 * Regular expression for matching potential named color style strings.
	 * @const
	 * @type {RegExp}
	 * @private
	 */
	var NAMED_COLOR_RE_ = /^([a-z]*)$|^hsla?\(.*\)$/i;
	/**
	 * Return the color as an rgba string.
	 * @param {Color|string} color Color.
	 * @return {string} Rgba string.
	 * @api
	 */
	function asString(color) {
	    if (typeof color === 'string') {
	        return color;
	    } else {
	        return toString(color);
	    }
	}
	/**
	 * Return named color as an rgba string.
	 * @param {string} color Named color.
	 * @return {string} Rgb string.
	 */
	function fromNamed(color) {
	    var el = document.createElement('div');
	    el.style.color = color;
	    if (el.style.color !== '') {
	        document.body.appendChild(el);
	        var rgb = getComputedStyle(el).color;
	        document.body.removeChild(el);
	        return rgb;
	    } else {
	        return '';
	    }
	}
	/**
	 * @param {string} s String.
	 * @return {Color} Color.
	 */
	var fromString = exports.fromString = function () {
	    // We maintain a small cache of parsed strings.  To provide cheap LRU-like
	    // semantics, whenever the cache grows too large we simply delete an
	    // arbitrary 25% of the entries.
	    /**
	     * @const
	     * @type {number}
	     */
	    var MAX_CACHE_SIZE = 1024;
	    /**
	     * @type {Object<string, Color>}
	     */
	    var cache = {};
	    /**
	     * @type {number}
	     */
	    var cacheSize = 0;
	    return (
	        /**
	         * @param {string} s String.
	         * @return {Color} Color.
	         */
	        function (s) {
	            var color;
	            if (cache.hasOwnProperty(s)) {
	                color = cache[s];
	            } else {
	                if (cacheSize >= MAX_CACHE_SIZE) {
	                    var i = 0;
	                    for (var key in cache) {
	                        if ((i++ & 3) === 0) {
	                            delete cache[key];
	                            --cacheSize;
	                        }
	                    }
	                }
	                color = fromStringInternal_(s);
	                cache[s] = color;
	                ++cacheSize;
	            }
	            return color;
	        }
	    );
	}();
	/**
	 * Return the color as an array. This function maintains a cache of calculated
	 * arrays which means the result should not be modified.
	 * @param {Color|string} color Color.
	 * @return {Color} Color.
	 * @api
	 */
	function asArray(color) {
	    if (Array.isArray(color)) {
	        return color;
	    } else {
	        return fromString(color);
	    }
	}
	/**
	 * @param {string} s String.
	 * @private
	 * @return {Color} Color.
	 */
	function fromStringInternal_(s) {
	    var r, g, b, a, color;
	    if (NAMED_COLOR_RE_.exec(s)) {
	        s = fromNamed(s);
	    }
	    if (HEX_COLOR_RE_.exec(s)) {
	        // hex
	        var n = s.length - 1; // number of hex digits
	        var d = // number of digits per channel
	        void 0; // number of digits per channel
	        if (n <= 4) {
	            d = 1;
	        } else {
	            d = 2;
	        }
	        var hasAlpha = n === 4 || n === 8;
	        r = parseInt(s.substr(1 + 0 * d, d), 16);
	        g = parseInt(s.substr(1 + 1 * d, d), 16);
	        b = parseInt(s.substr(1 + 2 * d, d), 16);
	        if (hasAlpha) {
	            a = parseInt(s.substr(1 + 3 * d, d), 16);
	        } else {
	            a = 255;
	        }
	        if (d == 1) {
	            r = (r << 4) + r;
	            g = (g << 4) + g;
	            b = (b << 4) + b;
	            if (hasAlpha) {
	                a = (a << 4) + a;
	            }
	        }
	        color = [r, g, b, a / 255];
	    } else if (s.indexOf('rgba(') == 0) {
	        // rgba()
	        color = s.slice(5, -1).split(',').map(Number);
	        normalize(color);
	    } else if (s.indexOf('rgb(') == 0) {
	        // rgb()
	        color = s.slice(4, -1).split(',').map(Number);
	        color.push(1);
	        normalize(color);
	    } else {
	        (0, _asserts.assert)(false, 14); // Invalid color
	    }
	    return color;
	}
	/**
	 * TODO this function is only used in the test, we probably shouldn't export it
	 * @param {Color} color Color.
	 * @return {Color} Clamped color.
	 */
	function normalize(color) {
	    color[0] = (0, _math.clamp)(color[0] + 0.5 | 0, 0, 255);
	    color[1] = (0, _math.clamp)(color[1] + 0.5 | 0, 0, 255);
	    color[2] = (0, _math.clamp)(color[2] + 0.5 | 0, 0, 255);
	    color[3] = (0, _math.clamp)(color[3], 0, 1);
	    return color;
	}
	/**
	 * @param {Color} color Color.
	 * @return {string} String.
	 */
	function toString(color) {
	    var r = color[0];
	    if (r != (r | 0)) {
	        r = r + 0.5 | 0;
	    }
	    var g = color[1];
	    if (g != (g | 0)) {
	        g = g + 0.5 | 0;
	    }
	    var b = color[2];
	    if (b != (b | 0)) {
	        b = b + 0.5 | 0;
	    }
	    var a = color[3] === undefined ? 1 : color[3];
	    return 'rgba(' + r + ',' + g + ',' + b + ',' + a + ')';
	}
	/**
	 * @param {string} s String.
	 * @return {boolean} Whether the string is actually a valid color
	 */
	function isStringColor(s) {
	    if (NAMED_COLOR_RE_.test(s)) {
	        s = fromNamed(s);
	    }
	    return HEX_COLOR_RE_.test(s) || s.indexOf('rgba(') === 0 || s.indexOf('rgb(') === 0;
	}
	//# sourceMappingURL=color.js.map

/***/ }),
/* 144 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	exports.asColorLike = asColorLike;
	
	var _color = __webpack_require__(143);
	
	/**
	 * A type accepted by CanvasRenderingContext2D.fillStyle
	 * or CanvasRenderingContext2D.strokeStyle.
	 * Represents a color, pattern, or gradient. The origin for patterns and
	 * gradients as fill style is an increment of 512 css pixels from map coordinate
	 * `[0, 0]`. For seamless repeat patterns, width and height of the pattern image
	 * must be a factor of two (2, 4, 8, ..., 512).
	 *
	 * @typedef {string|CanvasPattern|CanvasGradient} ColorLike
	 * @api
	 */
	/**
	 * @param {import("./color.js").Color|ColorLike} color Color.
	 * @return {ColorLike} The color as an {@link ol/colorlike~ColorLike}.
	 * @api
	 */
	function asColorLike(color) {
	  if (Array.isArray(color)) {
	    return (0, _color.toString)(color);
	  } else {
	    return color;
	  }
	}
	//# sourceMappingURL=colorlike.js.map
	/**
	 * @module ol/colorlike
	 */

/***/ }),
/* 145 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	exports.linearRingContainsExtent = linearRingContainsExtent;
	exports.linearRingContainsXY = linearRingContainsXY;
	exports.linearRingsContainsXY = linearRingsContainsXY;
	exports.linearRingssContainsXY = linearRingssContainsXY;
	
	var _extent = __webpack_require__(4);
	
	/**
	 * @param {Array<number>} flatCoordinates Flat coordinates.
	 * @param {number} offset Offset.
	 * @param {number} end End.
	 * @param {number} stride Stride.
	 * @param {import("../../extent.js").Extent} extent Extent.
	 * @return {boolean} Contains extent.
	 */
	function linearRingContainsExtent(flatCoordinates, offset, end, stride, extent) {
	    var outside = (0, _extent.forEachCorner)(extent,
	    /**
	     * @param {import("../../coordinate.js").Coordinate} coordinate Coordinate.
	     * @return {boolean} Contains (x, y).
	     */
	    function (coordinate) {
	        return !linearRingContainsXY(flatCoordinates, offset, end, stride, coordinate[0], coordinate[1]);
	    });
	    return !outside;
	}
	/**
	 * @param {Array<number>} flatCoordinates Flat coordinates.
	 * @param {number} offset Offset.
	 * @param {number} end End.
	 * @param {number} stride Stride.
	 * @param {number} x X.
	 * @param {number} y Y.
	 * @return {boolean} Contains (x, y).
	 */
	/**
	 * @module ol/geom/flat/contains
	 */
	function linearRingContainsXY(flatCoordinates, offset, end, stride, x, y) {
	    // http://geomalgorithms.com/a03-_inclusion.html
	    // Copyright 2000 softSurfer, 2012 Dan Sunday
	    // This code may be freely used and modified for any purpose
	    // providing that this copyright notice is included with it.
	    // SoftSurfer makes no warranty for this code, and cannot be held
	    // liable for any real or imagined damage resulting from its use.
	    // Users of this code must verify correctness for their application.
	    var wn = 0;
	    var x1 = flatCoordinates[end - stride];
	    var y1 = flatCoordinates[end - stride + 1];
	    for (; offset < end; offset += stride) {
	        var x2 = flatCoordinates[offset];
	        var y2 = flatCoordinates[offset + 1];
	        if (y1 <= y) {
	            if (y2 > y && (x2 - x1) * (y - y1) - (x - x1) * (y2 - y1) > 0) {
	                wn++;
	            }
	        } else if (y2 <= y && (x2 - x1) * (y - y1) - (x - x1) * (y2 - y1) < 0) {
	            wn--;
	        }
	        x1 = x2;
	        y1 = y2;
	    }
	    return wn !== 0;
	}
	/**
	 * @param {Array<number>} flatCoordinates Flat coordinates.
	 * @param {number} offset Offset.
	 * @param {Array<number>} ends Ends.
	 * @param {number} stride Stride.
	 * @param {number} x X.
	 * @param {number} y Y.
	 * @return {boolean} Contains (x, y).
	 */
	function linearRingsContainsXY(flatCoordinates, offset, ends, stride, x, y) {
	    if (ends.length === 0) {
	        return false;
	    }
	    if (!linearRingContainsXY(flatCoordinates, offset, ends[0], stride, x, y)) {
	        return false;
	    }
	    for (var i = 1, ii = ends.length; i < ii; ++i) {
	        if (linearRingContainsXY(flatCoordinates, ends[i - 1], ends[i], stride, x, y)) {
	            return false;
	        }
	    }
	    return true;
	}
	/**
	 * @param {Array<number>} flatCoordinates Flat coordinates.
	 * @param {number} offset Offset.
	 * @param {Array<Array<number>>} endss Endss.
	 * @param {number} stride Stride.
	 * @param {number} x X.
	 * @param {number} y Y.
	 * @return {boolean} Contains (x, y).
	 */
	function linearRingssContainsXY(flatCoordinates, offset, endss, stride, x, y) {
	    if (endss.length === 0) {
	        return false;
	    }
	    for (var i = 0, ii = endss.length; i < ii; ++i) {
	        var ends = endss[i];
	        if (linearRingsContainsXY(flatCoordinates, offset, ends, stride, x, y)) {
	            return true;
	        }
	        offset = ends[ends.length - 1];
	    }
	    return false;
	}
	//# sourceMappingURL=contains.js.map

/***/ }),
/* 146 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	exports.intersectsLineString = intersectsLineString;
	exports.intersectsLineStringArray = intersectsLineStringArray;
	exports.intersectsLinearRing = intersectsLinearRing;
	exports.intersectsLinearRingArray = intersectsLinearRingArray;
	exports.intersectsLinearRingMultiArray = intersectsLinearRingMultiArray;
	
	var _extent = __webpack_require__(4);
	
	var _contains = __webpack_require__(145);
	
	var _segments = __webpack_require__(281);
	
	/**
	 * @param {Array<number>} flatCoordinates Flat coordinates.
	 * @param {number} offset Offset.
	 * @param {number} end End.
	 * @param {number} stride Stride.
	 * @param {import("../../extent.js").Extent} extent Extent.
	 * @return {boolean} True if the geometry and the extent intersect.
	 */
	function intersectsLineString(flatCoordinates, offset, end, stride, extent) {
	    var coordinatesExtent = (0, _extent.extendFlatCoordinates)((0, _extent.createEmpty)(), flatCoordinates, offset, end, stride);
	    if (!(0, _extent.intersects)(extent, coordinatesExtent)) {
	        return false;
	    }
	    if ((0, _extent.containsExtent)(extent, coordinatesExtent)) {
	        return true;
	    }
	    if (coordinatesExtent[0] >= extent[0] && coordinatesExtent[2] <= extent[2]) {
	        return true;
	    }
	    if (coordinatesExtent[1] >= extent[1] && coordinatesExtent[3] <= extent[3]) {
	        return true;
	    }
	    return (0, _segments.forEach)(flatCoordinates, offset, end, stride,
	    /**
	     * @param {import("../../coordinate.js").Coordinate} point1 Start point.
	     * @param {import("../../coordinate.js").Coordinate} point2 End point.
	     * @return {boolean} `true` if the segment and the extent intersect,
	     *     `false` otherwise.
	     */
	    function (point1, point2) {
	        return (0, _extent.intersectsSegment)(extent, point1, point2);
	    });
	}
	/**
	 * @param {Array<number>} flatCoordinates Flat coordinates.
	 * @param {number} offset Offset.
	 * @param {Array<number>} ends Ends.
	 * @param {number} stride Stride.
	 * @param {import("../../extent.js").Extent} extent Extent.
	 * @return {boolean} True if the geometry and the extent intersect.
	 */
	/**
	 * @module ol/geom/flat/intersectsextent
	 */
	function intersectsLineStringArray(flatCoordinates, offset, ends, stride, extent) {
	    for (var i = 0, ii = ends.length; i < ii; ++i) {
	        if (intersectsLineString(flatCoordinates, offset, ends[i], stride, extent)) {
	            return true;
	        }
	        offset = ends[i];
	    }
	    return false;
	}
	/**
	 * @param {Array<number>} flatCoordinates Flat coordinates.
	 * @param {number} offset Offset.
	 * @param {number} end End.
	 * @param {number} stride Stride.
	 * @param {import("../../extent.js").Extent} extent Extent.
	 * @return {boolean} True if the geometry and the extent intersect.
	 */
	function intersectsLinearRing(flatCoordinates, offset, end, stride, extent) {
	    if (intersectsLineString(flatCoordinates, offset, end, stride, extent)) {
	        return true;
	    }
	    if ((0, _contains.linearRingContainsXY)(flatCoordinates, offset, end, stride, extent[0], extent[1])) {
	        return true;
	    }
	    if ((0, _contains.linearRingContainsXY)(flatCoordinates, offset, end, stride, extent[0], extent[3])) {
	        return true;
	    }
	    if ((0, _contains.linearRingContainsXY)(flatCoordinates, offset, end, stride, extent[2], extent[1])) {
	        return true;
	    }
	    if ((0, _contains.linearRingContainsXY)(flatCoordinates, offset, end, stride, extent[2], extent[3])) {
	        return true;
	    }
	    return false;
	}
	/**
	 * @param {Array<number>} flatCoordinates Flat coordinates.
	 * @param {number} offset Offset.
	 * @param {Array<number>} ends Ends.
	 * @param {number} stride Stride.
	 * @param {import("../../extent.js").Extent} extent Extent.
	 * @return {boolean} True if the geometry and the extent intersect.
	 */
	function intersectsLinearRingArray(flatCoordinates, offset, ends, stride, extent) {
	    if (!intersectsLinearRing(flatCoordinates, offset, ends[0], stride, extent)) {
	        return false;
	    }
	    if (ends.length === 1) {
	        return true;
	    }
	    for (var i = 1, ii = ends.length; i < ii; ++i) {
	        if ((0, _contains.linearRingContainsExtent)(flatCoordinates, ends[i - 1], ends[i], stride, extent)) {
	            if (!intersectsLineString(flatCoordinates, ends[i - 1], ends[i], stride, extent)) {
	                return false;
	            }
	        }
	    }
	    return true;
	}
	/**
	 * @param {Array<number>} flatCoordinates Flat coordinates.
	 * @param {number} offset Offset.
	 * @param {Array<Array<number>>} endss Endss.
	 * @param {number} stride Stride.
	 * @param {import("../../extent.js").Extent} extent Extent.
	 * @return {boolean} True if the geometry and the extent intersect.
	 */
	function intersectsLinearRingMultiArray(flatCoordinates, offset, endss, stride, extent) {
	    for (var i = 0, ii = endss.length; i < ii; ++i) {
	        var ends = endss[i];
	        if (intersectsLinearRingArray(flatCoordinates, offset, ends, stride, extent)) {
	            return true;
	        }
	        offset = ends[ends.length - 1];
	    }
	    return false;
	}
	//# sourceMappingURL=intersectsextent.js.map

/***/ }),
/* 147 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	
	var _BaseVector = __webpack_require__(619);
	
	var _BaseVector2 = _interopRequireDefault(_BaseVector);
	
	var _VectorLayer = __webpack_require__(640);
	
	var _VectorLayer2 = _interopRequireDefault(_VectorLayer);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var __extends = undefined && undefined.__extends || function () {
	    var _extendStatics = function extendStatics(d, b) {
	        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	            d.__proto__ = b;
	        } || function (d, b) {
	            for (var p in b) {
	                if (b.hasOwnProperty(p)) d[p] = b[p];
	            }
	        };
	        return _extendStatics(d, b);
	    };
	    return function (d, b) {
	        _extendStatics(d, b);
	        function __() {
	            this.constructor = d;
	        }
	        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	    };
	}();
	/**
	 * @module ol/layer/Vector
	 */
	
	/**
	 * @classdesc
	 * Vector data that is rendered client-side.
	 * Note that any property set in the options is set as a {@link module:ol/Object~BaseObject}
	 * property on the layer object; for example, setting `title: 'My Title'` in the
	 * options means that `title` is observable, and has get/set accessors.
	 *
	 * @extends {BaseVectorLayer<import("../source/Vector.js").default>}
	 * @api
	 */
	var VectorLayer = /** @class */function (_super) {
	    __extends(VectorLayer, _super);
	    /**
	     * @param {import("./BaseVector.js").Options=} opt_options Options.
	     */
	    function VectorLayer(opt_options) {
	        return _super.call(this, opt_options) || this;
	    }
	    /**
	     * Create a renderer for this layer.
	     * @return {import("../renderer/Layer.js").default} A layer renderer.
	     * @protected
	     */
	    VectorLayer.prototype.createRenderer = function () {
	        return new _VectorLayer2.default(this);
	    };
	    return VectorLayer;
	}(_BaseVector2.default);
	exports.default = VectorLayer;
	//# sourceMappingURL=Vector.js.map

/***/ }),
/* 148 */
/***/ (function(module, exports) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	/**
	 * @module ol/render/EventType
	 */
	/**
	 * @enum {string}
	 */
	exports.default = {
	  /**
	   * Triggered before a layer is rendered.
	   * @event module:ol/render/Event~RenderEvent#prerender
	   * @api
	   */
	  PRERENDER: 'prerender',
	  /**
	   * Triggered after a layer is rendered.
	   * @event module:ol/render/Event~RenderEvent#postrender
	   * @api
	   */
	  POSTRENDER: 'postrender',
	  /**
	   * Triggered before layers are rendered.
	   * The event object will not have a `context` set.
	   * @event module:ol/render/Event~RenderEvent#precompose
	   * @api
	   */
	  PRECOMPOSE: 'precompose',
	  /**
	   * Triggered after all layers are rendered.
	   * The event object will not have a `context` set.
	   * @event module:ol/render/Event~RenderEvent#postcompose
	   * @api
	   */
	  POSTCOMPOSE: 'postcompose',
	  /**
	   * Triggered when rendering is complete, i.e. all sources and tiles have
	   * finished loading for the current viewport, and all tiles are faded in.
	   * The event object will not have a `context` set.
	   * @event module:ol/render/Event~RenderEvent#rendercomplete
	   * @api
	   */
	  RENDERCOMPLETE: 'rendercomplete'
	};
	//# sourceMappingURL=EventType.js.map

/***/ }),
/* 149 */
/***/ (function(module, exports) {

	"use strict";
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	/**
	 * @module ol/style/Fill
	 */
	/**
	 * @typedef {Object} Options
	 * @property {import("../color.js").Color|import("../colorlike.js").ColorLike} [color=null] A color, gradient or pattern.
	 * See {@link module:ol/color~Color} and {@link module:ol/colorlike~ColorLike} for possible formats.
	 * Default null; if null, the Canvas/renderer default black will be used.
	 */
	/**
	 * @classdesc
	 * Set fill style for vector features.
	 * @api
	 */
	var Fill = /** @class */function () {
	  /**
	   * @param {Options=} opt_options Options.
	   */
	  function Fill(opt_options) {
	    var options = opt_options || {};
	    /**
	     * @private
	     * @type {import("../color.js").Color|import("../colorlike.js").ColorLike}
	     */
	    this.color_ = options.color !== undefined ? options.color : null;
	  }
	  /**
	   * Clones the style. The color is not cloned if it is an {@link module:ol/colorlike~ColorLike}.
	   * @return {Fill} The cloned style.
	   * @api
	   */
	  Fill.prototype.clone = function () {
	    var color = this.getColor();
	    return new Fill({
	      color: Array.isArray(color) ? color.slice() : color || undefined
	    });
	  };
	  /**
	   * Get the fill color.
	   * @return {import("../color.js").Color|import("../colorlike.js").ColorLike} Color.
	   * @api
	   */
	  Fill.prototype.getColor = function () {
	    return this.color_;
	  };
	  /**
	   * Set the color.
	   *
	   * @param {import("../color.js").Color|import("../colorlike.js").ColorLike} color Color.
	   * @api
	   */
	  Fill.prototype.setColor = function (color) {
	    this.color_ = color;
	  };
	  return Fill;
	}();
	exports.default = Fill;
	//# sourceMappingURL=Fill.js.map

/***/ }),
/* 150 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	exports.OBJECT_PROPERTY_NODE_FACTORY = exports.XML_SCHEMA_INSTANCE_URI = exports.DOCUMENT = undefined;
	exports.createElementNS = createElementNS;
	exports.getAllTextContent = getAllTextContent;
	exports.getAllTextContent_ = getAllTextContent_;
	exports.isDocument = isDocument;
	exports.getAttributeNS = getAttributeNS;
	exports.parse = parse;
	exports.makeArrayExtender = makeArrayExtender;
	exports.makeArrayPusher = makeArrayPusher;
	exports.makeReplacer = makeReplacer;
	exports.makeObjectPropertyPusher = makeObjectPropertyPusher;
	exports.makeObjectPropertySetter = makeObjectPropertySetter;
	exports.makeChildAppender = makeChildAppender;
	exports.makeArraySerializer = makeArraySerializer;
	exports.makeSimpleNodeFactory = makeSimpleNodeFactory;
	exports.makeSequence = makeSequence;
	exports.makeStructureNS = makeStructureNS;
	exports.parseNode = parseNode;
	exports.pushParseAndPop = pushParseAndPop;
	exports.serialize = serialize;
	exports.pushSerializeAndPop = pushSerializeAndPop;
	
	var _array = __webpack_require__(18);
	
	/**
	 * When using {@link module:ol/xml~makeChildAppender} or
	 * {@link module:ol/xml~makeSimpleNodeFactory}, the top `objectStack` item needs
	 * to have this structure.
	 * @typedef {Object} NodeStackItem
	 * @property {Node} node
	 */
	/**
	 * @typedef {function(Element, Array<*>): void} Parser
	 */
	/**
	 * @typedef {function(Element, *, Array<*>): void} Serializer
	 */
	/**
	 * This document should be used when creating nodes for XML serializations. This
	 * document is also used by {@link module:ol/xml~createElementNS}
	 * @const
	 * @type {Document}
	 */
	var DOCUMENT = exports.DOCUMENT = document.implementation.createDocument('', '', null);
	/**
	 * @type {string}
	 */
	/**
	 * @module ol/xml
	 */
	var XML_SCHEMA_INSTANCE_URI = exports.XML_SCHEMA_INSTANCE_URI = 'http://www.w3.org/2001/XMLSchema-instance';
	/**
	 * @param {string} namespaceURI Namespace URI.
	 * @param {string} qualifiedName Qualified name.
	 * @return {Element} Node.
	 */
	function createElementNS(namespaceURI, qualifiedName) {
	    return DOCUMENT.createElementNS(namespaceURI, qualifiedName);
	}
	/**
	 * Recursively grab all text content of child nodes into a single string.
	 * @param {Node} node Node.
	 * @param {boolean} normalizeWhitespace Normalize whitespace: remove all line
	 * breaks.
	 * @return {string} All text content.
	 * @api
	 */
	function getAllTextContent(node, normalizeWhitespace) {
	    return getAllTextContent_(node, normalizeWhitespace, []).join('');
	}
	/**
	 * Recursively grab all text content of child nodes into a single string.
	 * @param {Node} node Node.
	 * @param {boolean} normalizeWhitespace Normalize whitespace: remove all line
	 * breaks.
	 * @param {Array<string>} accumulator Accumulator.
	 * @private
	 * @return {Array<string>} Accumulator.
	 */
	function getAllTextContent_(node, normalizeWhitespace, accumulator) {
	    if (node.nodeType == Node.CDATA_SECTION_NODE || node.nodeType == Node.TEXT_NODE) {
	        if (normalizeWhitespace) {
	            accumulator.push(String(node.nodeValue).replace(/(\r\n|\r|\n)/g, ''));
	        } else {
	            accumulator.push(node.nodeValue);
	        }
	    } else {
	        var n = void 0;
	        for (n = node.firstChild; n; n = n.nextSibling) {
	            getAllTextContent_(n, normalizeWhitespace, accumulator);
	        }
	    }
	    return accumulator;
	}
	/**
	 * @param {Object} object Object.
	 * @return {boolean} Is a document.
	 */
	function isDocument(object) {
	    return 'documentElement' in object;
	}
	/**
	 * @param {Element} node Node.
	 * @param {?string} namespaceURI Namespace URI.
	 * @param {string} name Attribute name.
	 * @return {string} Value
	 */
	function getAttributeNS(node, namespaceURI, name) {
	    return node.getAttributeNS(namespaceURI, name) || '';
	}
	/**
	 * Parse an XML string to an XML Document.
	 * @param {string} xml XML.
	 * @return {Document} Document.
	 * @api
	 */
	function parse(xml) {
	    return new DOMParser().parseFromString(xml, 'application/xml');
	}
	/**
	 * Make an array extender function for extending the array at the top of the
	 * object stack.
	 * @param {function(this: T, Node, Array<*>): (Array<*>|undefined)} valueReader Value reader.
	 * @param {T=} opt_this The object to use as `this` in `valueReader`.
	 * @return {Parser} Parser.
	 * @template T
	 */
	function makeArrayExtender(valueReader, opt_this) {
	    return (
	        /**
	         * @param {Node} node Node.
	         * @param {Array<*>} objectStack Object stack.
	         */
	        function (node, objectStack) {
	            var value = valueReader.call(opt_this !== undefined ? opt_this : this, node, objectStack);
	            if (value !== undefined) {
	                var array = /** @type {Array<*>} */objectStack[objectStack.length - 1];
	                (0, _array.extend)(array, value);
	            }
	        }
	    );
	}
	/**
	 * Make an array pusher function for pushing to the array at the top of the
	 * object stack.
	 * @param {function(this: T, Element, Array<*>): *} valueReader Value reader.
	 * @param {T=} opt_this The object to use as `this` in `valueReader`.
	 * @return {Parser} Parser.
	 * @template T
	 */
	function makeArrayPusher(valueReader, opt_this) {
	    return (
	        /**
	         * @param {Element} node Node.
	         * @param {Array<*>} objectStack Object stack.
	         */
	        function (node, objectStack) {
	            var value = valueReader.call(opt_this !== undefined ? opt_this : this, node, objectStack);
	            if (value !== undefined) {
	                var array = /** @type {Array<*>} */objectStack[objectStack.length - 1];
	                array.push(value);
	            }
	        }
	    );
	}
	/**
	 * Make an object stack replacer function for replacing the object at the
	 * top of the stack.
	 * @param {function(this: T, Node, Array<*>): *} valueReader Value reader.
	 * @param {T=} opt_this The object to use as `this` in `valueReader`.
	 * @return {Parser} Parser.
	 * @template T
	 */
	function makeReplacer(valueReader, opt_this) {
	    return (
	        /**
	         * @param {Node} node Node.
	         * @param {Array<*>} objectStack Object stack.
	         */
	        function (node, objectStack) {
	            var value = valueReader.call(opt_this !== undefined ? opt_this : this, node, objectStack);
	            if (value !== undefined) {
	                objectStack[objectStack.length - 1] = value;
	            }
	        }
	    );
	}
	/**
	 * Make an object property pusher function for adding a property to the
	 * object at the top of the stack.
	 * @param {function(this: T, Element, Array<*>): *} valueReader Value reader.
	 * @param {string=} opt_property Property.
	 * @param {T=} opt_this The object to use as `this` in `valueReader`.
	 * @return {Parser} Parser.
	 * @template T
	 */
	function makeObjectPropertyPusher(valueReader, opt_property, opt_this) {
	    return (
	        /**
	         * @param {Element} node Node.
	         * @param {Array<*>} objectStack Object stack.
	         */
	        function (node, objectStack) {
	            var value = valueReader.call(opt_this !== undefined ? opt_this : this, node, objectStack);
	            if (value !== undefined) {
	                var object = /** @type {!Object} */objectStack[objectStack.length - 1];
	                var property = opt_property !== undefined ? opt_property : node.localName;
	                var array = void 0;
	                if (property in object) {
	                    array = object[property];
	                } else {
	                    array = [];
	                    object[property] = array;
	                }
	                array.push(value);
	            }
	        }
	    );
	}
	/**
	 * Make an object property setter function.
	 * @param {function(this: T, Element, Array<*>): *} valueReader Value reader.
	 * @param {string=} opt_property Property.
	 * @param {T=} opt_this The object to use as `this` in `valueReader`.
	 * @return {Parser} Parser.
	 * @template T
	 */
	function makeObjectPropertySetter(valueReader, opt_property, opt_this) {
	    return (
	        /**
	         * @param {Element} node Node.
	         * @param {Array<*>} objectStack Object stack.
	         */
	        function (node, objectStack) {
	            var value = valueReader.call(opt_this !== undefined ? opt_this : this, node, objectStack);
	            if (value !== undefined) {
	                var object = /** @type {!Object} */objectStack[objectStack.length - 1];
	                var property = opt_property !== undefined ? opt_property : node.localName;
	                object[property] = value;
	            }
	        }
	    );
	}
	/**
	 * Create a serializer that appends nodes written by its `nodeWriter` to its
	 * designated parent. The parent is the `node` of the
	 * {@link module:ol/xml~NodeStackItem} at the top of the `objectStack`.
	 * @param {function(this: T, Node, V, Array<*>): void} nodeWriter Node writer.
	 * @param {T=} opt_this The object to use as `this` in `nodeWriter`.
	 * @return {Serializer} Serializer.
	 * @template T, V
	 */
	function makeChildAppender(nodeWriter, opt_this) {
	    return function (node, value, objectStack) {
	        nodeWriter.call(opt_this !== undefined ? opt_this : this, node, value, objectStack);
	        var parent = /** @type {NodeStackItem} */objectStack[objectStack.length - 1];
	        var parentNode = parent.node;
	        parentNode.appendChild(node);
	    };
	}
	/**
	 * Create a serializer that calls the provided `nodeWriter` from
	 * {@link module:ol/xml~serialize}. This can be used by the parent writer to have the
	 * 'nodeWriter' called with an array of values when the `nodeWriter` was
	 * designed to serialize a single item. An example would be a LineString
	 * geometry writer, which could be reused for writing MultiLineString
	 * geometries.
	 * @param {function(this: T, Element, V, Array<*>): void} nodeWriter Node writer.
	 * @param {T=} opt_this The object to use as `this` in `nodeWriter`.
	 * @return {Serializer} Serializer.
	 * @template T, V
	 */
	function makeArraySerializer(nodeWriter, opt_this) {
	    var serializersNS, nodeFactory;
	    return function (node, value, objectStack) {
	        if (serializersNS === undefined) {
	            serializersNS = {};
	            var serializers = {};
	            serializers[node.localName] = nodeWriter;
	            serializersNS[node.namespaceURI] = serializers;
	            nodeFactory = makeSimpleNodeFactory(node.localName);
	        }
	        serialize(serializersNS, nodeFactory, value, objectStack);
	    };
	}
	/**
	 * Create a node factory which can use the `opt_keys` passed to
	 * {@link module:ol/xml~serialize} or {@link module:ol/xml~pushSerializeAndPop} as node names,
	 * or a fixed node name. The namespace of the created nodes can either be fixed,
	 * or the parent namespace will be used.
	 * @param {string=} opt_nodeName Fixed node name which will be used for all
	 *     created nodes. If not provided, the 3rd argument to the resulting node
	 *     factory needs to be provided and will be the nodeName.
	 * @param {string=} opt_namespaceURI Fixed namespace URI which will be used for
	 *     all created nodes. If not provided, the namespace of the parent node will
	 *     be used.
	 * @return {function(*, Array<*>, string=): (Node|undefined)} Node factory.
	 */
	function makeSimpleNodeFactory(opt_nodeName, opt_namespaceURI) {
	    var fixedNodeName = opt_nodeName;
	    return (
	        /**
	         * @param {*} value Value.
	         * @param {Array<*>} objectStack Object stack.
	         * @param {string=} opt_nodeName Node name.
	         * @return {Node} Node.
	         */
	        function (value, objectStack, opt_nodeName) {
	            var context = /** @type {NodeStackItem} */objectStack[objectStack.length - 1];
	            var node = context.node;
	            var nodeName = fixedNodeName;
	            if (nodeName === undefined) {
	                nodeName = opt_nodeName;
	            }
	            var namespaceURI = opt_namespaceURI !== undefined ? opt_namespaceURI : node.namespaceURI;
	            return createElementNS(namespaceURI, /** @type {string} */nodeName);
	        }
	    );
	}
	/**
	 * A node factory that creates a node using the parent's `namespaceURI` and the
	 * `nodeName` passed by {@link module:ol/xml~serialize} or
	 * {@link module:ol/xml~pushSerializeAndPop} to the node factory.
	 * @const
	 * @type {function(*, Array<*>, string=): (Node|undefined)}
	 */
	var OBJECT_PROPERTY_NODE_FACTORY = exports.OBJECT_PROPERTY_NODE_FACTORY = makeSimpleNodeFactory();
	/**
	 * Create an array of `values` to be used with {@link module:ol/xml~serialize} or
	 * {@link module:ol/xml~pushSerializeAndPop}, where `orderedKeys` has to be provided as
	 * `opt_key` argument.
	 * @param {Object<string, *>} object Key-value pairs for the sequence. Keys can
	 *     be a subset of the `orderedKeys`.
	 * @param {Array<string>} orderedKeys Keys in the order of the sequence.
	 * @return {Array<*>} Values in the order of the sequence. The resulting array
	 *     has the same length as the `orderedKeys` array. Values that are not
	 *     present in `object` will be `undefined` in the resulting array.
	 */
	function makeSequence(object, orderedKeys) {
	    var length = orderedKeys.length;
	    var sequence = new Array(length);
	    for (var i = 0; i < length; ++i) {
	        sequence[i] = object[orderedKeys[i]];
	    }
	    return sequence;
	}
	/**
	 * Create a namespaced structure, using the same values for each namespace.
	 * This can be used as a starting point for versioned parsers, when only a few
	 * values are version specific.
	 * @param {Array<string>} namespaceURIs Namespace URIs.
	 * @param {T} structure Structure.
	 * @param {Object<string, T>=} opt_structureNS Namespaced structure to add to.
	 * @return {Object<string, T>} Namespaced structure.
	 * @template T
	 */
	function makeStructureNS(namespaceURIs, structure, opt_structureNS) {
	    /**
	     * @type {Object<string, T>}
	     */
	    var structureNS = opt_structureNS !== undefined ? opt_structureNS : {};
	    var i, ii;
	    for (i = 0, ii = namespaceURIs.length; i < ii; ++i) {
	        structureNS[namespaceURIs[i]] = structure;
	    }
	    return structureNS;
	}
	/**
	 * Parse a node using the parsers and object stack.
	 * @param {Object<string, Object<string, Parser>>} parsersNS
	 *     Parsers by namespace.
	 * @param {Element} node Node.
	 * @param {Array<*>} objectStack Object stack.
	 * @param {*=} opt_this The object to use as `this`.
	 */
	function parseNode(parsersNS, node, objectStack, opt_this) {
	    var n;
	    for (n = node.firstElementChild; n; n = n.nextElementSibling) {
	        var parsers = parsersNS[n.namespaceURI];
	        if (parsers !== undefined) {
	            var parser = parsers[n.localName];
	            if (parser !== undefined) {
	                parser.call(opt_this, n, objectStack);
	            }
	        }
	    }
	}
	/**
	 * Push an object on top of the stack, parse and return the popped object.
	 * @param {T} object Object.
	 * @param {Object<string, Object<string, Parser>>} parsersNS
	 *     Parsers by namespace.
	 * @param {Element} node Node.
	 * @param {Array<*>} objectStack Object stack.
	 * @param {*=} opt_this The object to use as `this`.
	 * @return {T} Object.
	 * @template T
	 */
	function pushParseAndPop(object, parsersNS, node, objectStack, opt_this) {
	    objectStack.push(object);
	    parseNode(parsersNS, node, objectStack, opt_this);
	    return (/** @type {T} */objectStack.pop()
	    );
	}
	/**
	 * Walk through an array of `values` and call a serializer for each value.
	 * @param {Object<string, Object<string, Serializer>>} serializersNS
	 *     Namespaced serializers.
	 * @param {function(this: T, *, Array<*>, (string|undefined)): (Node|undefined)} nodeFactory
	 *     Node factory. The `nodeFactory` creates the node whose namespace and name
	 *     will be used to choose a node writer from `serializersNS`. This
	 *     separation allows us to decide what kind of node to create, depending on
	 *     the value we want to serialize. An example for this would be different
	 *     geometry writers based on the geometry type.
	 * @param {Array<*>} values Values to serialize. An example would be an array
	 *     of {@link module:ol/Feature~Feature} instances.
	 * @param {Array<*>} objectStack Node stack.
	 * @param {Array<string>=} opt_keys Keys of the `values`. Will be passed to the
	 *     `nodeFactory`. This is used for serializing object literals where the
	 *     node name relates to the property key. The array length of `opt_keys` has
	 *     to match the length of `values`. For serializing a sequence, `opt_keys`
	 *     determines the order of the sequence.
	 * @param {T=} opt_this The object to use as `this` for the node factory and
	 *     serializers.
	 * @template T
	 */
	function serialize(serializersNS, nodeFactory, values, objectStack, opt_keys, opt_this) {
	    var length = (opt_keys !== undefined ? opt_keys : values).length;
	    var value, node;
	    for (var i = 0; i < length; ++i) {
	        value = values[i];
	        if (value !== undefined) {
	            node = nodeFactory.call(opt_this !== undefined ? opt_this : this, value, objectStack, opt_keys !== undefined ? opt_keys[i] : undefined);
	            if (node !== undefined) {
	                serializersNS[node.namespaceURI][node.localName].call(opt_this, node, value, objectStack);
	            }
	        }
	    }
	}
	/**
	 * @param {O} object Object.
	 * @param {Object<string, Object<string, Serializer>>} serializersNS
	 *     Namespaced serializers.
	 * @param {function(this: T, *, Array<*>, (string|undefined)): (Node|undefined)} nodeFactory
	 *     Node factory. The `nodeFactory` creates the node whose namespace and name
	 *     will be used to choose a node writer from `serializersNS`. This
	 *     separation allows us to decide what kind of node to create, depending on
	 *     the value we want to serialize. An example for this would be different
	 *     geometry writers based on the geometry type.
	 * @param {Array<*>} values Values to serialize. An example would be an array
	 *     of {@link module:ol/Feature~Feature} instances.
	 * @param {Array<*>} objectStack Node stack.
	 * @param {Array<string>=} opt_keys Keys of the `values`. Will be passed to the
	 *     `nodeFactory`. This is used for serializing object literals where the
	 *     node name relates to the property key. The array length of `opt_keys` has
	 *     to match the length of `values`. For serializing a sequence, `opt_keys`
	 *     determines the order of the sequence.
	 * @param {T=} opt_this The object to use as `this` for the node factory and
	 *     serializers.
	 * @return {O|undefined} Object.
	 * @template O, T
	 */
	function pushSerializeAndPop(object, serializersNS, nodeFactory, values, objectStack, opt_keys, opt_this) {
	    objectStack.push(object);
	    serialize(serializersNS, nodeFactory, values, objectStack, opt_keys, opt_this);
	    return (/** @type {O|undefined} */objectStack.pop()
	    );
	}
	//# sourceMappingURL=xml.js.map

/***/ }),
/* 151 */
/***/ (function(module, exports, __webpack_require__) {

	/* WEBPACK VAR INJECTION */(function(Promise) {"use strict";
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	exports.config = config;
	/**
	 * @module opensearch/config
	 */
	
	/**
	 * The global configuration.
	 */
	var globalConfig = {
	  useXHR: false,
	  Promise: Promise
	};
	
	/**
	 * Retrieve config values or set one or more config values at once.
	 * @param {object} [values] The new values to set. If omitted, just return the
	 *                          current configuration.
	 * @returns {object} The current configuration.
	 */
	function config() {
	  var values = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
	
	  if (!values) {
	    return globalConfig;
	  }
	  for (var key in values) {
	    if (Object.prototype.hasOwnProperty.call(values, key)) {
	      globalConfig[key] = values[key];
	    }
	  }
	  return globalConfig;
	}
	/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(27)))

/***/ }),
/* 152 */
/***/ (function(module, exports, __webpack_require__) {

	// false -> Array#indexOf
	// true  -> Array#includes
	var toIObject = __webpack_require__(45);
	var toLength = __webpack_require__(21);
	var toAbsoluteIndex = __webpack_require__(81);
	module.exports = function (IS_INCLUDES) {
	  return function ($this, el, fromIndex) {
	    var O = toIObject($this);
	    var length = toLength(O.length);
	    var index = toAbsoluteIndex(fromIndex, length);
	    var value;
	    // Array#includes uses SameValueZero equality algorithm
	    // eslint-disable-next-line no-self-compare
	    if (IS_INCLUDES && el != el) while (length > index) {
	      value = O[index++];
	      // eslint-disable-next-line no-self-compare
	      if (value != value) return true;
	    // Array#indexOf ignores holes, Array#includes - not
	    } else for (;length > index; index++) if (IS_INCLUDES || index in O) {
	      if (O[index] === el) return IS_INCLUDES || index || 0;
	    } return !IS_INCLUDES && -1;
	  };
	};


/***/ }),
/* 153 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	__webpack_require__(346);
	var redefine = __webpack_require__(38);
	var hide = __webpack_require__(37);
	var fails = __webpack_require__(13);
	var defined = __webpack_require__(59);
	var wks = __webpack_require__(20);
	var regexpExec = __webpack_require__(210);
	
	var SPECIES = wks('species');
	
	var REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () {
	  // #replace needs built-in support for named groups.
	  // #match works fine because it just return the exec results, even if it has
	  // a "grops" property.
	  var re = /./;
	  re.exec = function () {
	    var result = [];
	    result.groups = { a: '7' };
	    return result;
	  };
	  return ''.replace(re, '$<a>') !== '7';
	});
	
	var SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = (function () {
	  // Chrome 51 has a buggy "split" implementation when RegExp#exec !== nativeExec
	  var re = /(?:)/;
	  var originalExec = re.exec;
	  re.exec = function () { return originalExec.apply(this, arguments); };
	  var result = 'ab'.split(re);
	  return result.length === 2 && result[0] === 'a' && result[1] === 'b';
	})();
	
	module.exports = function (KEY, length, exec) {
	  var SYMBOL = wks(KEY);
	
	  var DELEGATES_TO_SYMBOL = !fails(function () {
	    // String methods call symbol-named RegEp methods
	    var O = {};
	    O[SYMBOL] = function () { return 7; };
	    return ''[KEY](O) != 7;
	  });
	
	  var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL ? !fails(function () {
	    // Symbol-named RegExp methods call .exec
	    var execCalled = false;
	    var re = /a/;
	    re.exec = function () { execCalled = true; return null; };
	    if (KEY === 'split') {
	      // RegExp[@@split] doesn't call the regex's exec method, but first creates
	      // a new one. We need to return the patched regex when creating the new one.
	      re.constructor = {};
	      re.constructor[SPECIES] = function () { return re; };
	    }
	    re[SYMBOL]('');
	    return !execCalled;
	  }) : undefined;
	
	  if (
	    !DELEGATES_TO_SYMBOL ||
	    !DELEGATES_TO_EXEC ||
	    (KEY === 'replace' && !REPLACE_SUPPORTS_NAMED_GROUPS) ||
	    (KEY === 'split' && !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC)
	  ) {
	    var nativeRegExpMethod = /./[SYMBOL];
	    var fns = exec(
	      defined,
	      SYMBOL,
	      ''[KEY],
	      function maybeCallNative(nativeMethod, regexp, str, arg2, forceStringMethod) {
	        if (regexp.exec === regexpExec) {
	          if (DELEGATES_TO_SYMBOL && !forceStringMethod) {
	            // The native String method already delegates to @@method (this
	            // polyfilled function), leasing to infinite recursion.
	            // We avoid it by directly calling the native @@method method.
	            return { done: true, value: nativeRegExpMethod.call(regexp, str, arg2) };
	          }
	          return { done: true, value: nativeMethod.call(str, regexp, arg2) };
	        }
	        return { done: false };
	      }
	    );
	    var strfn = fns[0];
	    var rxfn = fns[1];
	
	    redefine(String.prototype, KEY, strfn);
	    hide(RegExp.prototype, SYMBOL, length == 2
	      // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)
	      // 21.2.5.11 RegExp.prototype[@@split](string, limit)
	      ? function (string, arg) { return rxfn.call(string, this, arg); }
	      // 21.2.5.6 RegExp.prototype[@@match](string)
	      // 21.2.5.9 RegExp.prototype[@@search](string)
	      : function (string) { return rxfn.call(string, this); }
	    );
	  }
	};


/***/ }),
/* 154 */
/***/ (function(module, exports, __webpack_require__) {

	// 7.2.2 IsArray(argument)
	var cof = __webpack_require__(50);
	module.exports = Array.isArray || function isArray(arg) {
	  return cof(arg) == 'Array';
	};


/***/ }),
/* 155 */
/***/ (function(module, exports, __webpack_require__) {

	// 7.2.8 IsRegExp(argument)
	var isObject = __webpack_require__(15);
	var cof = __webpack_require__(50);
	var MATCH = __webpack_require__(20)('match');
	module.exports = function (it) {
	  var isRegExp;
	  return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');
	};


/***/ }),
/* 156 */
/***/ (function(module, exports, __webpack_require__) {

	var ITERATOR = __webpack_require__(20)('iterator');
	var SAFE_CLOSING = false;
	
	try {
	  var riter = [7][ITERATOR]();
	  riter['return'] = function () { SAFE_CLOSING = true; };
	  // eslint-disable-next-line no-throw-literal
	  Array.from(riter, function () { throw 2; });
	} catch (e) { /* empty */ }
	
	module.exports = function (exec, skipClosing) {
	  if (!skipClosing && !SAFE_CLOSING) return false;
	  var safe = false;
	  try {
	    var arr = [7];
	    var iter = arr[ITERATOR]();
	    iter.next = function () { return { done: safe = true }; };
	    arr[ITERATOR] = function () { return iter; };
	    exec(arr);
	  } catch (e) { /* empty */ }
	  return safe;
	};


/***/ }),
/* 157 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	// Forced replacement prototype accessors methods
	module.exports = __webpack_require__(77) || !__webpack_require__(13)(function () {
	  var K = Math.random();
	  // In FF throws only define methods
	  // eslint-disable-next-line no-undef, no-useless-call
	  __defineSetter__.call(null, K, function () { /* empty */ });
	  delete __webpack_require__(9)[K];
	});


/***/ }),
/* 158 */
/***/ (function(module, exports) {

	exports.f = Object.getOwnPropertySymbols;


/***/ }),
/* 159 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	var classof = __webpack_require__(110);
	var builtinExec = RegExp.prototype.exec;
	
	 // `RegExpExec` abstract operation
	// https://tc39.github.io/ecma262/#sec-regexpexec
	module.exports = function (R, S) {
	  var exec = R.exec;
	  if (typeof exec === 'function') {
	    var result = exec.call(R, S);
	    if (typeof result !== 'object') {
	      throw new TypeError('RegExp exec method returned something other than an Object or null');
	    }
	    return result;
	  }
	  if (classof(R) !== 'RegExp') {
	    throw new TypeError('RegExp#exec called on incompatible receiver');
	  }
	  return builtinExec.call(R, S);
	};


/***/ }),
/* 160 */
/***/ (function(module, exports, __webpack_require__) {

	var toInteger = __webpack_require__(54);
	var defined = __webpack_require__(59);
	// true  -> String#at
	// false -> String#codePointAt
	module.exports = function (TO_STRING) {
	  return function (that, pos) {
	    var s = String(defined(that));
	    var i = toInteger(pos);
	    var l = s.length;
	    var a, b;
	    if (i < 0 || i >= l) return TO_STRING ? '' : undefined;
	    a = s.charCodeAt(i);
	    return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff
	      ? TO_STRING ? s.charAt(i) : a
	      : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;
	  };
	};


/***/ }),
/* 161 */
/***/ (function(module, exports, __webpack_require__) {

	var global = __webpack_require__(9);
	var hide = __webpack_require__(37);
	var uid = __webpack_require__(98);
	var TYPED = uid('typed_array');
	var VIEW = uid('view');
	var ABV = !!(global.ArrayBuffer && global.DataView);
	var CONSTR = ABV;
	var i = 0;
	var l = 9;
	var Typed;
	
	var TypedArrayConstructors = (
	  'Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array'
	).split(',');
	
	while (i < l) {
	  if (Typed = global[TypedArrayConstructors[i++]]) {
	    hide(Typed.prototype, TYPED, true);
	    hide(Typed.prototype, VIEW, true);
	  } else CONSTR = false;
	}
	
	module.exports = {
	  ABV: ABV,
	  CONSTR: CONSTR,
	  TYPED: TYPED,
	  VIEW: VIEW
	};


/***/ }),
/* 162 */
/***/ (function(module, exports, __webpack_require__) {

	var global = __webpack_require__(9);
	var navigator = global.navigator;
	
	module.exports = navigator && navigator.userAgent || '';


/***/ }),
/* 163 */
/***/ (function(module, exports, __webpack_require__) {

	module.exports = __webpack_require__(1053).default;


/***/ }),
/* 164 */
/***/ (function(module, exports, __webpack_require__) {

	/* WEBPACK VAR INJECTION */(function(global) {'use strict';
	
	var required = __webpack_require__(1100)
	  , qs = __webpack_require__(1097)
	  , slashes = /^[A-Za-z][A-Za-z0-9+-.]*:\/\//
	  , protocolre = /^([a-z][a-z0-9.+-]*:)?(\/\/)?([\S\s]*)/i
	  , whitespace = '[\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF]'
	  , left = new RegExp('^'+ whitespace +'+');
	
	/**
	 * Trim a given string.
	 *
	 * @param {String} str String to trim.
	 * @public
	 */
	function trimLeft(str) {
	  return (str ? str : '').toString().replace(left, '');
	}
	
	/**
	 * These are the parse rules for the URL parser, it informs the parser
	 * about:
	 *
	 * 0. The char it Needs to parse, if it's a string it should be done using
	 *    indexOf, RegExp using exec and NaN means set as current value.
	 * 1. The property we should set when parsing this value.
	 * 2. Indication if it's backwards or forward parsing, when set as number it's
	 *    the value of extra chars that should be split off.
	 * 3. Inherit from location if non existing in the parser.
	 * 4. `toLowerCase` the resulting value.
	 */
	var rules = [
	  ['#', 'hash'],                        // Extract from the back.
	  ['?', 'query'],                       // Extract from the back.
	  function sanitize(address) {          // Sanitize what is left of the address
	    return address.replace('\\', '/');
	  },
	  ['/', 'pathname'],                    // Extract from the back.
	  ['@', 'auth', 1],                     // Extract from the front.
	  [NaN, 'host', undefined, 1, 1],       // Set left over value.
	  [/:(\d+)$/, 'port', undefined, 1],    // RegExp the back.
	  [NaN, 'hostname', undefined, 1, 1]    // Set left over.
	];
	
	/**
	 * These properties should not be copied or inherited from. This is only needed
	 * for all non blob URL's as a blob URL does not include a hash, only the
	 * origin.
	 *
	 * @type {Object}
	 * @private
	 */
	var ignore = { hash: 1, query: 1 };
	
	/**
	 * The location object differs when your code is loaded through a normal page,
	 * Worker or through a worker using a blob. And with the blobble begins the
	 * trouble as the location object will contain the URL of the blob, not the
	 * location of the page where our code is loaded in. The actual origin is
	 * encoded in the `pathname` so we can thankfully generate a good "default"
	 * location from it so we can generate proper relative URL's again.
	 *
	 * @param {Object|String} loc Optional default location object.
	 * @returns {Object} lolcation object.
	 * @public
	 */
	function lolcation(loc) {
	  var globalVar;
	
	  if (typeof window !== 'undefined') globalVar = window;
	  else if (typeof global !== 'undefined') globalVar = global;
	  else if (typeof self !== 'undefined') globalVar = self;
	  else globalVar = {};
	
	  var location = globalVar.location || {};
	  loc = loc || location;
	
	  var finaldestination = {}
	    , type = typeof loc
	    , key;
	
	  if ('blob:' === loc.protocol) {
	    finaldestination = new Url(unescape(loc.pathname), {});
	  } else if ('string' === type) {
	    finaldestination = new Url(loc, {});
	    for (key in ignore) delete finaldestination[key];
	  } else if ('object' === type) {
	    for (key in loc) {
	      if (key in ignore) continue;
	      finaldestination[key] = loc[key];
	    }
	
	    if (finaldestination.slashes === undefined) {
	      finaldestination.slashes = slashes.test(loc.href);
	    }
	  }
	
	  return finaldestination;
	}
	
	/**
	 * @typedef ProtocolExtract
	 * @type Object
	 * @property {String} protocol Protocol matched in the URL, in lowercase.
	 * @property {Boolean} slashes `true` if protocol is followed by "//", else `false`.
	 * @property {String} rest Rest of the URL that is not part of the protocol.
	 */
	
	/**
	 * Extract protocol information from a URL with/without double slash ("//").
	 *
	 * @param {String} address URL we want to extract from.
	 * @return {ProtocolExtract} Extracted information.
	 * @private
	 */
	function extractProtocol(address) {
	  address = trimLeft(address);
	  var match = protocolre.exec(address);
	
	  return {
	    protocol: match[1] ? match[1].toLowerCase() : '',
	    slashes: !!match[2],
	    rest: match[3]
	  };
	}
	
	/**
	 * Resolve a relative URL pathname against a base URL pathname.
	 *
	 * @param {String} relative Pathname of the relative URL.
	 * @param {String} base Pathname of the base URL.
	 * @return {String} Resolved pathname.
	 * @private
	 */
	function resolve(relative, base) {
	  if (relative === '') return base;
	
	  var path = (base || '/').split('/').slice(0, -1).concat(relative.split('/'))
	    , i = path.length
	    , last = path[i - 1]
	    , unshift = false
	    , up = 0;
	
	  while (i--) {
	    if (path[i] === '.') {
	      path.splice(i, 1);
	    } else if (path[i] === '..') {
	      path.splice(i, 1);
	      up++;
	    } else if (up) {
	      if (i === 0) unshift = true;
	      path.splice(i, 1);
	      up--;
	    }
	  }
	
	  if (unshift) path.unshift('');
	  if (last === '.' || last === '..') path.push('');
	
	  return path.join('/');
	}
	
	/**
	 * The actual URL instance. Instead of returning an object we've opted-in to
	 * create an actual constructor as it's much more memory efficient and
	 * faster and it pleases my OCD.
	 *
	 * It is worth noting that we should not use `URL` as class name to prevent
	 * clashes with the global URL instance that got introduced in browsers.
	 *
	 * @constructor
	 * @param {String} address URL we want to parse.
	 * @param {Object|String} [location] Location defaults for relative paths.
	 * @param {Boolean|Function} [parser] Parser for the query string.
	 * @private
	 */
	function Url(address, location, parser) {
	  address = trimLeft(address);
	
	  if (!(this instanceof Url)) {
	    return new Url(address, location, parser);
	  }
	
	  var relative, extracted, parse, instruction, index, key
	    , instructions = rules.slice()
	    , type = typeof location
	    , url = this
	    , i = 0;
	
	  //
	  // The following if statements allows this module two have compatibility with
	  // 2 different API:
	  //
	  // 1. Node.js's `url.parse` api which accepts a URL, boolean as arguments
	  //    where the boolean indicates that the query string should also be parsed.
	  //
	  // 2. The `URL` interface of the browser which accepts a URL, object as
	  //    arguments. The supplied object will be used as default values / fall-back
	  //    for relative paths.
	  //
	  if ('object' !== type && 'string' !== type) {
	    parser = location;
	    location = null;
	  }
	
	  if (parser && 'function' !== typeof parser) parser = qs.parse;
	
	  location = lolcation(location);
	
	  //
	  // Extract protocol information before running the instructions.
	  //
	  extracted = extractProtocol(address || '');
	  relative = !extracted.protocol && !extracted.slashes;
	  url.slashes = extracted.slashes || relative && location.slashes;
	  url.protocol = extracted.protocol || location.protocol || '';
	  address = extracted.rest;
	
	  //
	  // When the authority component is absent the URL starts with a path
	  // component.
	  //
	  if (!extracted.slashes) instructions[3] = [/(.*)/, 'pathname'];
	
	  for (; i < instructions.length; i++) {
	    instruction = instructions[i];
	
	    if (typeof instruction === 'function') {
	      address = instruction(address);
	      continue;
	    }
	
	    parse = instruction[0];
	    key = instruction[1];
	
	    if (parse !== parse) {
	      url[key] = address;
	    } else if ('string' === typeof parse) {
	      if (~(index = address.indexOf(parse))) {
	        if ('number' === typeof instruction[2]) {
	          url[key] = address.slice(0, index);
	          address = address.slice(index + instruction[2]);
	        } else {
	          url[key] = address.slice(index);
	          address = address.slice(0, index);
	        }
	      }
	    } else if ((index = parse.exec(address))) {
	      url[key] = index[1];
	      address = address.slice(0, index.index);
	    }
	
	    url[key] = url[key] || (
	      relative && instruction[3] ? location[key] || '' : ''
	    );
	
	    //
	    // Hostname, host and protocol should be lowercased so they can be used to
	    // create a proper `origin`.
	    //
	    if (instruction[4]) url[key] = url[key].toLowerCase();
	  }
	
	  //
	  // Also parse the supplied query string in to an object. If we're supplied
	  // with a custom parser as function use that instead of the default build-in
	  // parser.
	  //
	  if (parser) url.query = parser(url.query);
	
	  //
	  // If the URL is relative, resolve the pathname against the base URL.
	  //
	  if (
	      relative
	    && location.slashes
	    && url.pathname.charAt(0) !== '/'
	    && (url.pathname !== '' || location.pathname !== '')
	  ) {
	    url.pathname = resolve(url.pathname, location.pathname);
	  }
	
	  //
	  // We should not add port numbers if they are already the default port number
	  // for a given protocol. As the host also contains the port number we're going
	  // override it with the hostname which contains no port number.
	  //
	  if (!required(url.port, url.protocol)) {
	    url.host = url.hostname;
	    url.port = '';
	  }
	
	  //
	  // Parse down the `auth` for the username and password.
	  //
	  url.username = url.password = '';
	  if (url.auth) {
	    instruction = url.auth.split(':');
	    url.username = instruction[0] || '';
	    url.password = instruction[1] || '';
	  }
	
	  url.origin = url.protocol && url.host && url.protocol !== 'file:'
	    ? url.protocol +'//'+ url.host
	    : 'null';
	
	  //
	  // The href is just the compiled result.
	  //
	  url.href = url.toString();
	}
	
	/**
	 * This is convenience method for changing properties in the URL instance to
	 * insure that they all propagate correctly.
	 *
	 * @param {String} part          Property we need to adjust.
	 * @param {Mixed} value          The newly assigned value.
	 * @param {Boolean|Function} fn  When setting the query, it will be the function
	 *                               used to parse the query.
	 *                               When setting the protocol, double slash will be
	 *                               removed from the final url if it is true.
	 * @returns {URL} URL instance for chaining.
	 * @public
	 */
	function set(part, value, fn) {
	  var url = this;
	
	  switch (part) {
	    case 'query':
	      if ('string' === typeof value && value.length) {
	        value = (fn || qs.parse)(value);
	      }
	
	      url[part] = value;
	      break;
	
	    case 'port':
	      url[part] = value;
	
	      if (!required(value, url.protocol)) {
	        url.host = url.hostname;
	        url[part] = '';
	      } else if (value) {
	        url.host = url.hostname +':'+ value;
	      }
	
	      break;
	
	    case 'hostname':
	      url[part] = value;
	
	      if (url.port) value += ':'+ url.port;
	      url.host = value;
	      break;
	
	    case 'host':
	      url[part] = value;
	
	      if (/:\d+$/.test(value)) {
	        value = value.split(':');
	        url.port = value.pop();
	        url.hostname = value.join(':');
	      } else {
	        url.hostname = value;
	        url.port = '';
	      }
	
	      break;
	
	    case 'protocol':
	      url.protocol = value.toLowerCase();
	      url.slashes = !fn;
	      break;
	
	    case 'pathname':
	    case 'hash':
	      if (value) {
	        var char = part === 'pathname' ? '/' : '#';
	        url[part] = value.charAt(0) !== char ? char + value : value;
	      } else {
	        url[part] = value;
	      }
	      break;
	
	    default:
	      url[part] = value;
	  }
	
	  for (var i = 0; i < rules.length; i++) {
	    var ins = rules[i];
	
	    if (ins[4]) url[ins[1]] = url[ins[1]].toLowerCase();
	  }
	
	  url.origin = url.protocol && url.host && url.protocol !== 'file:'
	    ? url.protocol +'//'+ url.host
	    : 'null';
	
	  url.href = url.toString();
	
	  return url;
	}
	
	/**
	 * Transform the properties back in to a valid and full URL string.
	 *
	 * @param {Function} stringify Optional query stringify function.
	 * @returns {String} Compiled version of the URL.
	 * @public
	 */
	function toString(stringify) {
	  if (!stringify || 'function' !== typeof stringify) stringify = qs.stringify;
	
	  var query
	    , url = this
	    , protocol = url.protocol;
	
	  if (protocol && protocol.charAt(protocol.length - 1) !== ':') protocol += ':';
	
	  var result = protocol + (url.slashes ? '//' : '');
	
	  if (url.username) {
	    result += url.username;
	    if (url.password) result += ':'+ url.password;
	    result += '@';
	  }
	
	  result += url.host + url.pathname;
	
	  query = 'object' === typeof url.query ? stringify(url.query) : url.query;
	  if (query) result += '?' !== query.charAt(0) ? '?'+ query : query;
	
	  if (url.hash) result += url.hash;
	
	  return result;
	}
	
	Url.prototype = { set: set, toString: toString };
	
	//
	// Expose the URL parser and some additional properties that might be useful for
	// others or testing.
	//
	Url.extractProtocol = extractProtocol;
	Url.location = lolcation;
	Url.trimLeft = trimLeft;
	Url.qs = qs;
	
	module.exports = Url;
	
	/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))

/***/ }),
/* 165 */
/***/ (function(module, exports, __webpack_require__) {

	/*!
	 * PEP v0.5.1 | https://github.com/jquery/PEP
	 * Copyright jQuery Foundation and other contributors | http://jquery.org/license
	 */
	
	(function (global, factory) {
	   true ? module.exports = factory() :
	  typeof define === 'function' && define.amd ? define(factory) :
	  (global.PointerEventsPolyfill = factory());
	}(this, function () { 'use strict';
	
	  /**
	   * This is the constructor for new PointerEvents.
	   *
	   * New Pointer Events must be given a type, and an optional dictionary of
	   * initialization properties.
	   *
	   * Due to certain platform requirements, events returned from the constructor
	   * identify as MouseEvents.
	   *
	   * @constructor
	   * @param {String} inType The type of the event to create.
	   * @param {Object} [inDict] An optional dictionary of initial event properties.
	   * @return {Event} A new PointerEvent of type `inType`, initialized with properties from `inDict`.
	   */
	  var MOUSE_PROPS = [
	    'bubbles',
	    'cancelable',
	    'view',
	    'screenX',
	    'screenY',
	    'clientX',
	    'clientY',
	    'ctrlKey',
	    'altKey',
	    'shiftKey',
	    'metaKey',
	    'button',
	    'relatedTarget',
	    'pageX',
	    'pageY'
	  ];
	
	  var MOUSE_DEFAULTS = [
	    false,
	    false,
	    null,
	    0,
	    0,
	    0,
	    0,
	    false,
	    false,
	    false,
	    false,
	    0,
	    null,
	    0,
	    0
	  ];
	
	  function PointerEvent(inType, inDict) {
	    inDict = inDict || Object.create(null);
	
	    var e = document.createEvent('Event');
	    e.initEvent(inType, inDict.bubbles || false, inDict.cancelable || false);
	
	    // define inherited MouseEvent properties
	    // skip bubbles and cancelable since they're set above in initEvent()
	    for (var i = 2, p; i < MOUSE_PROPS.length; i++) {
	      p = MOUSE_PROPS[i];
	      e[p] = inDict[p] || MOUSE_DEFAULTS[i];
	    }
	    e.buttons = inDict.buttons || 0;
	
	    // Spec requires that pointers without pressure specified use 0.5 for down
	    // state and 0 for up state.
	    var pressure = 0;
	
	    if (inDict.pressure !== undefined && e.buttons) {
	      pressure = inDict.pressure;
	    } else {
	      pressure = e.buttons ? 0.5 : 0;
	    }
	
	    // add x/y properties aliased to clientX/Y
	    e.x = e.clientX;
	    e.y = e.clientY;
	
	    // define the properties of the PointerEvent interface
	    e.pointerId = inDict.pointerId || 0;
	    e.width = inDict.width || 1;
	    e.height = inDict.height || 1;
	    e.pressure = pressure;
	    e.tiltX = inDict.tiltX || 0;
	    e.tiltY = inDict.tiltY || 0;
	    e.twist = inDict.twist || 0;
	    e.tangentialPressure = inDict.tangentialPressure || 0;
	    e.pointerType = inDict.pointerType || '';
	    e.hwTimestamp = inDict.hwTimestamp || 0;
	    e.isPrimary = inDict.isPrimary || false;
	    e.detail = 0;
	    return e;
	  }
	
	  /**
	   * This module implements a map of pointer states
	   */
	  var USE_MAP = window.Map && window.Map.prototype.forEach;
	  var PointerMap = USE_MAP ? Map : SparseArrayMap;
	
	  function SparseArrayMap() {
	    this.array = [];
	    this.size = 0;
	  }
	
	  SparseArrayMap.prototype = {
	    set: function(k, v) {
	      if (v === undefined) {
	        return this.delete(k);
	      }
	      if (!this.has(k)) {
	        this.size++;
	      }
	      this.array[k] = v;
	    },
	    has: function(k) {
	      return this.array[k] !== undefined;
	    },
	    delete: function(k) {
	      if (this.has(k)) {
	        delete this.array[k];
	        this.size--;
	      }
	    },
	    get: function(k) {
	      return this.array[k];
	    },
	    clear: function() {
	      this.array.length = 0;
	      this.size = 0;
	    },
	
	    // return value, key, map
	    forEach: function(callback, thisArg) {
	      return this.array.forEach(function(v, k) {
	        callback.call(thisArg, v, k, this);
	      }, this);
	    }
	  };
	
	  var CLONE_PROPS = [
	
	    // MouseEvent
	    'bubbles',
	    'cancelable',
	    'view',
	    'detail',
	    'screenX',
	    'screenY',
	    'clientX',
	    'clientY',
	    'ctrlKey',
	    'altKey',
	    'shiftKey',
	    'metaKey',
	    'button',
	    'relatedTarget',
	
	    // DOM Level 3
	    'buttons',
	
	    // PointerEvent
	    'pointerId',
	    'width',
	    'height',
	    'pressure',
	    'tiltX',
	    'tiltY',
	    'pointerType',
	    'hwTimestamp',
	    'isPrimary',
	
	    // event instance
	    'type',
	    'target',
	    'currentTarget',
	    'which',
	    'pageX',
	    'pageY',
	    'timeStamp'
	  ];
	
	  var CLONE_DEFAULTS = [
	
	    // MouseEvent
	    false,
	    false,
	    null,
	    null,
	    0,
	    0,
	    0,
	    0,
	    false,
	    false,
	    false,
	    false,
	    0,
	    null,
	
	    // DOM Level 3
	    0,
	
	    // PointerEvent
	    0,
	    0,
	    0,
	    0,
	    0,
	    0,
	    '',
	    0,
	    false,
	
	    // event instance
	    '',
	    null,
	    null,
	    0,
	    0,
	    0,
	    0
	  ];
	
	  var BOUNDARY_EVENTS = {
	    'pointerover': 1,
	    'pointerout': 1,
	    'pointerenter': 1,
	    'pointerleave': 1
	  };
	
	  var HAS_SVG_INSTANCE = (typeof SVGElementInstance !== 'undefined');
	
	  /**
	   * This module is for normalizing events. Mouse and Touch events will be
	   * collected here, and fire PointerEvents that have the same semantics, no
	   * matter the source.
	   * Events fired:
	   *   - pointerdown: a pointing is added
	   *   - pointerup: a pointer is removed
	   *   - pointermove: a pointer is moved
	   *   - pointerover: a pointer crosses into an element
	   *   - pointerout: a pointer leaves an element
	   *   - pointercancel: a pointer will no longer generate events
	   */
	  var dispatcher = {
	    pointermap: new PointerMap(),
	    eventMap: Object.create(null),
	    captureInfo: Object.create(null),
	
	    // Scope objects for native events.
	    // This exists for ease of testing.
	    eventSources: Object.create(null),
	    eventSourceList: [],
	    /**
	     * Add a new event source that will generate pointer events.
	     *
	     * `inSource` must contain an array of event names named `events`, and
	     * functions with the names specified in the `events` array.
	     * @param {string} name A name for the event source
	     * @param {Object} source A new source of platform events.
	     */
	    registerSource: function(name, source) {
	      var s = source;
	      var newEvents = s.events;
	      if (newEvents) {
	        newEvents.forEach(function(e) {
	          if (s[e]) {
	            this.eventMap[e] = s[e].bind(s);
	          }
	        }, this);
	        this.eventSources[name] = s;
	        this.eventSourceList.push(s);
	      }
	    },
	    register: function(element) {
	      var l = this.eventSourceList.length;
	      for (var i = 0, es; (i < l) && (es = this.eventSourceList[i]); i++) {
	
	        // call eventsource register
	        es.register.call(es, element);
	      }
	    },
	    unregister: function(element) {
	      var l = this.eventSourceList.length;
	      for (var i = 0, es; (i < l) && (es = this.eventSourceList[i]); i++) {
	
	        // call eventsource register
	        es.unregister.call(es, element);
	      }
	    },
	    contains: /*scope.external.contains || */function(container, contained) {
	      try {
	        return container.contains(contained);
	      } catch (ex) {
	
	        // most likely: https://bugzilla.mozilla.org/show_bug.cgi?id=208427
	        return false;
	      }
	    },
	
	    // EVENTS
	    down: function(inEvent) {
	      inEvent.bubbles = true;
	      this.fireEvent('pointerdown', inEvent);
	    },
	    move: function(inEvent) {
	      inEvent.bubbles = true;
	      this.fireEvent('pointermove', inEvent);
	    },
	    up: function(inEvent) {
	      inEvent.bubbles = true;
	      this.fireEvent('pointerup', inEvent);
	    },
	    enter: function(inEvent) {
	      inEvent.bubbles = false;
	      this.fireEvent('pointerenter', inEvent);
	    },
	    leave: function(inEvent) {
	      inEvent.bubbles = false;
	      this.fireEvent('pointerleave', inEvent);
	    },
	    over: function(inEvent) {
	      inEvent.bubbles = true;
	      this.fireEvent('pointerover', inEvent);
	    },
	    out: function(inEvent) {
	      inEvent.bubbles = true;
	      this.fireEvent('pointerout', inEvent);
	    },
	    cancel: function(inEvent) {
	      inEvent.bubbles = true;
	      this.fireEvent('pointercancel', inEvent);
	    },
	    leaveOut: function(event) {
	      this.out(event);
	      this.propagate(event, this.leave, false);
	    },
	    enterOver: function(event) {
	      this.over(event);
	      this.propagate(event, this.enter, true);
	    },
	
	    // LISTENER LOGIC
	    eventHandler: function(inEvent) {
	
	      // This is used to prevent multiple dispatch of pointerevents from
	      // platform events. This can happen when two elements in different scopes
	      // are set up to create pointer events, which is relevant to Shadow DOM.
	      if (inEvent._handledByPE) {
	        return;
	      }
	      var type = inEvent.type;
	      var fn = this.eventMap && this.eventMap[type];
	      if (fn) {
	        fn(inEvent);
	      }
	      inEvent._handledByPE = true;
	    },
	
	    // set up event listeners
	    listen: function(target, events) {
	      events.forEach(function(e) {
	        this.addEvent(target, e);
	      }, this);
	    },
	
	    // remove event listeners
	    unlisten: function(target, events) {
	      events.forEach(function(e) {
	        this.removeEvent(target, e);
	      }, this);
	    },
	    addEvent: /*scope.external.addEvent || */function(target, eventName) {
	      target.addEventListener(eventName, this.boundHandler);
	    },
	    removeEvent: /*scope.external.removeEvent || */function(target, eventName) {
	      target.removeEventListener(eventName, this.boundHandler);
	    },
	
	    // EVENT CREATION AND TRACKING
	    /**
	     * Creates a new Event of type `inType`, based on the information in
	     * `inEvent`.
	     *
	     * @param {string} inType A string representing the type of event to create
	     * @param {Event} inEvent A platform event with a target
	     * @return {Event} A PointerEvent of type `inType`
	     */
	    makeEvent: function(inType, inEvent) {
	
	      // relatedTarget must be null if pointer is captured
	      if (this.captureInfo[inEvent.pointerId]) {
	        inEvent.relatedTarget = null;
	      }
	      var e = new PointerEvent(inType, inEvent);
	      if (inEvent.preventDefault) {
	        e.preventDefault = inEvent.preventDefault;
	      }
	      e._target = e._target || inEvent.target;
	      return e;
	    },
	
	    // make and dispatch an event in one call
	    fireEvent: function(inType, inEvent) {
	      var e = this.makeEvent(inType, inEvent);
	      return this.dispatchEvent(e);
	    },
	    /**
	     * Returns a snapshot of inEvent, with writable properties.
	     *
	     * @param {Event} inEvent An event that contains properties to copy.
	     * @return {Object} An object containing shallow copies of `inEvent`'s
	     *    properties.
	     */
	    cloneEvent: function(inEvent) {
	      var eventCopy = Object.create(null);
	      var p;
	      for (var i = 0; i < CLONE_PROPS.length; i++) {
	        p = CLONE_PROPS[i];
	        eventCopy[p] = inEvent[p] || CLONE_DEFAULTS[i];
	
	        // Work around SVGInstanceElement shadow tree
	        // Return the <use> element that is represented by the instance for Safari, Chrome, IE.
	        // This is the behavior implemented by Firefox.
	        if (HAS_SVG_INSTANCE && (p === 'target' || p === 'relatedTarget')) {
	          if (eventCopy[p] instanceof SVGElementInstance) {
	            eventCopy[p] = eventCopy[p].correspondingUseElement;
	          }
	        }
	      }
	
	      // keep the semantics of preventDefault
	      if (inEvent.preventDefault) {
	        eventCopy.preventDefault = function() {
	          inEvent.preventDefault();
	        };
	      }
	      return eventCopy;
	    },
	    getTarget: function(inEvent) {
	      var capture = this.captureInfo[inEvent.pointerId];
	      if (!capture) {
	        return inEvent._target;
	      }
	      if (inEvent._target === capture || !(inEvent.type in BOUNDARY_EVENTS)) {
	        return capture;
	      }
	    },
	    propagate: function(event, fn, propagateDown) {
	      var target = event.target;
	      var targets = [];
	
	      // Order of conditions due to document.contains() missing in IE.
	      while (target != null && target !== document && !target.contains(event.relatedTarget)) {
	        targets.push(target);
	        target = target.parentNode;
	
	        // Touch: Do not propagate if node is detached.
	        if (!target) {
	          return;
	        }
	      }
	      if (propagateDown) {
	        targets.reverse();
	      }
	      targets.forEach(function(target) {
	        event.target = target;
	        fn.call(this, event);
	      }, this);
	    },
	    setCapture: function(inPointerId, inTarget, skipDispatch) {
	      if (this.captureInfo[inPointerId]) {
	        this.releaseCapture(inPointerId, skipDispatch);
	      }
	
	      this.captureInfo[inPointerId] = inTarget;
	      this.implicitRelease = this.releaseCapture.bind(this, inPointerId, skipDispatch);
	      document.addEventListener('pointerup', this.implicitRelease);
	      document.addEventListener('pointercancel', this.implicitRelease);
	
	      var e = new PointerEvent('gotpointercapture', { bubbles: true });
	      e.pointerId = inPointerId;
	      e._target = inTarget;
	
	      if (!skipDispatch) {
	        this.asyncDispatchEvent(e);
	      }
	    },
	    releaseCapture: function(inPointerId, skipDispatch) {
	      var t = this.captureInfo[inPointerId];
	      if (!t) {
	        return;
	      }
	
	      this.captureInfo[inPointerId] = undefined;
	      document.removeEventListener('pointerup', this.implicitRelease);
	      document.removeEventListener('pointercancel', this.implicitRelease);
	
	      var e = new PointerEvent('lostpointercapture', { bubbles: true });
	      e.pointerId = inPointerId;
	      e._target = t;
	
	      if (!skipDispatch) {
	        this.asyncDispatchEvent(e);
	      }
	    },
	    /**
	     * Dispatches the event to its target.
	     *
	     * @param {Event} inEvent The event to be dispatched.
	     * @return {Boolean} True if an event handler returns true, false otherwise.
	     */
	    dispatchEvent: /*scope.external.dispatchEvent || */function(inEvent) {
	      var t = this.getTarget(inEvent);
	      if (t) {
	        return t.dispatchEvent(inEvent);
	      }
	    },
	    asyncDispatchEvent: function(inEvent) {
	      requestAnimationFrame(this.dispatchEvent.bind(this, inEvent));
	    }
	  };
	  dispatcher.boundHandler = dispatcher.eventHandler.bind(dispatcher);
	
	  var targeting = {
	    shadow: function(inEl) {
	      if (inEl) {
	        return inEl.shadowRoot || inEl.webkitShadowRoot;
	      }
	    },
	    canTarget: function(shadow) {
	      return shadow && Boolean(shadow.elementFromPoint);
	    },
	    targetingShadow: function(inEl) {
	      var s = this.shadow(inEl);
	      if (this.canTarget(s)) {
	        return s;
	      }
	    },
	    olderShadow: function(shadow) {
	      var os = shadow.olderShadowRoot;
	      if (!os) {
	        var se = shadow.querySelector('shadow');
	        if (se) {
	          os = se.olderShadowRoot;
	        }
	      }
	      return os;
	    },
	    allShadows: function(element) {
	      var shadows = [];
	      var s = this.shadow(element);
	      while (s) {
	        shadows.push(s);
	        s = this.olderShadow(s);
	      }
	      return shadows;
	    },
	    searchRoot: function(inRoot, x, y) {
	      if (inRoot) {
	        var t = inRoot.elementFromPoint(x, y);
	        var st, sr;
	
	        // is element a shadow host?
	        sr = this.targetingShadow(t);
	        while (sr) {
	
	          // find the the element inside the shadow root
	          st = sr.elementFromPoint(x, y);
	          if (!st) {
	
	            // check for older shadows
	            sr = this.olderShadow(sr);
	          } else {
	
	            // shadowed element may contain a shadow root
	            var ssr = this.targetingShadow(st);
	            return this.searchRoot(ssr, x, y) || st;
	          }
	        }
	
	        // light dom element is the target
	        return t;
	      }
	    },
	    owner: function(element) {
	      var s = element;
	
	      // walk up until you hit the shadow root or document
	      while (s.parentNode) {
	        s = s.parentNode;
	      }
	
	      // the owner element is expected to be a Document or ShadowRoot
	      if (s.nodeType !== Node.DOCUMENT_NODE && s.nodeType !== Node.DOCUMENT_FRAGMENT_NODE) {
	        s = document;
	      }
	      return s;
	    },
	    findTarget: function(inEvent) {
	      var x = inEvent.clientX;
	      var y = inEvent.clientY;
	
	      // if the listener is in the shadow root, it is much faster to start there
	      var s = this.owner(inEvent.target);
	
	      // if x, y is not in this root, fall back to document search
	      if (!s.elementFromPoint(x, y)) {
	        s = document;
	      }
	      return this.searchRoot(s, x, y);
	    }
	  };
	
	  var forEach = Array.prototype.forEach.call.bind(Array.prototype.forEach);
	  var map = Array.prototype.map.call.bind(Array.prototype.map);
	  var toArray = Array.prototype.slice.call.bind(Array.prototype.slice);
	  var filter = Array.prototype.filter.call.bind(Array.prototype.filter);
	  var MO = window.MutationObserver || window.WebKitMutationObserver;
	  var SELECTOR = '[touch-action]';
	  var OBSERVER_INIT = {
	    subtree: true,
	    childList: true,
	    attributes: true,
	    attributeOldValue: true,
	    attributeFilter: ['touch-action']
	  };
	
	  function Installer(add, remove, changed, binder) {
	    this.addCallback = add.bind(binder);
	    this.removeCallback = remove.bind(binder);
	    this.changedCallback = changed.bind(binder);
	    if (MO) {
	      this.observer = new MO(this.mutationWatcher.bind(this));
	    }
	  }
	
	  Installer.prototype = {
	    watchSubtree: function(target) {
	
	      // Only watch scopes that can target find, as these are top-level.
	      // Otherwise we can see duplicate additions and removals that add noise.
	      //
	      // TODO(dfreedman): For some instances with ShadowDOMPolyfill, we can see
	      // a removal without an insertion when a node is redistributed among
	      // shadows. Since it all ends up correct in the document, watching only
	      // the document will yield the correct mutations to watch.
	      if (this.observer && targeting.canTarget(target)) {
	        this.observer.observe(target, OBSERVER_INIT);
	      }
	    },
	    enableOnSubtree: function(target) {
	      this.watchSubtree(target);
	      if (target === document && document.readyState !== 'complete') {
	        this.installOnLoad();
	      } else {
	        this.installNewSubtree(target);
	      }
	    },
	    installNewSubtree: function(target) {
	      forEach(this.findElements(target), this.addElement, this);
	    },
	    findElements: function(target) {
	      if (target.querySelectorAll) {
	        return target.querySelectorAll(SELECTOR);
	      }
	      return [];
	    },
	    removeElement: function(el) {
	      this.removeCallback(el);
	    },
	    addElement: function(el) {
	      this.addCallback(el);
	    },
	    elementChanged: function(el, oldValue) {
	      this.changedCallback(el, oldValue);
	    },
	    concatLists: function(accum, list) {
	      return accum.concat(toArray(list));
	    },
	
	    // register all touch-action = none nodes on document load
	    installOnLoad: function() {
	      document.addEventListener('readystatechange', function() {
	        if (document.readyState === 'complete') {
	          this.installNewSubtree(document);
	        }
	      }.bind(this));
	    },
	    isElement: function(n) {
	      return n.nodeType === Node.ELEMENT_NODE;
	    },
	    flattenMutationTree: function(inNodes) {
	
	      // find children with touch-action
	      var tree = map(inNodes, this.findElements, this);
	
	      // make sure the added nodes are accounted for
	      tree.push(filter(inNodes, this.isElement));
	
	      // flatten the list
	      return tree.reduce(this.concatLists, []);
	    },
	    mutationWatcher: function(mutations) {
	      mutations.forEach(this.mutationHandler, this);
	    },
	    mutationHandler: function(m) {
	      if (m.type === 'childList') {
	        var added = this.flattenMutationTree(m.addedNodes);
	        added.forEach(this.addElement, this);
	        var removed = this.flattenMutationTree(m.removedNodes);
	        removed.forEach(this.removeElement, this);
	      } else if (m.type === 'attributes') {
	        this.elementChanged(m.target, m.oldValue);
	      }
	    }
	  };
	
	  function shadowSelector(s) {
	    return 'body /shadow-deep/ ' + s;
	  }
	  function rule(v) {
	    return '{ -ms-touch-action: ' + v + '; touch-action: ' + v + '; }';
	  }
	  var attrib2css = [
	    { selector: '[touch-action="none"]', value: 'none' },
	    { selector: '[touch-action="auto"]', value: 'auto' },
	    { selector: '[touch-action~="pan-x"]', value: 'pan-x' },
	    { selector: '[touch-action~="pan-y"]', value: 'pan-y' },
	    { selector: '[touch-action~="pan-up"]', value: 'pan-up' },
	    { selector: '[touch-action~="pan-down"]', value: 'pan-down' },
	    { selector: '[touch-action~="pan-left"]', value: 'pan-left' },
	    { selector: '[touch-action~="pan-right"]', value: 'pan-right' }
	  ];
	  var styles = '';
	
	  // only install stylesheet if the browser has touch action support
	  var hasNativePE = window.PointerEvent || window.MSPointerEvent;
	
	  // only add shadow selectors if shadowdom is supported
	  var hasShadowRoot = !window.ShadowDOMPolyfill && document.head.createShadowRoot;
	
	  function applyAttributeStyles() {
	    if (hasNativePE) {
	      attrib2css.forEach(function(r) {
	        styles += r.selector + rule(r.value) + '\n';
	        if (hasShadowRoot) {
	          styles += shadowSelector(r.selector) + rule(r.value) + '\n';
	        }
	      });
	
	      var el = document.createElement('style');
	      el.textContent = styles;
	      document.head.appendChild(el);
	    }
	  }
	
	  var pointermap = dispatcher.pointermap;
	
	  // radius around touchend that swallows mouse events
	  var DEDUP_DIST = 25;
	
	  // left, middle, right, back, forward
	  var BUTTON_TO_BUTTONS = [1, 4, 2, 8, 16];
	
	  var HAS_BUTTONS = false;
	  try {
	    HAS_BUTTONS = new MouseEvent('test', { buttons: 1 }).buttons === 1;
	  } catch (e) {}
	
	  // handler block for native mouse events
	  var mouseEvents = {
	    POINTER_ID: 1,
	    POINTER_TYPE: 'mouse',
	    events: [
	      'mousedown',
	      'webkitmouseforcechanged',
	      'mousemove',
	      'mouseup',
	      'mouseover',
	      'mouseout'
	    ],
	    register: function(target) {
	      dispatcher.listen(target, this.events);
	    },
	    unregister: function(target) {
	      dispatcher.unlisten(target, this.events);
	    },
	    lastTouches: [],
	
	    // collide with the global mouse listener
	    isEventSimulatedFromTouch: function(inEvent) {
	      var lts = this.lastTouches;
	      var x = inEvent.clientX;
	      var y = inEvent.clientY;
	      for (var i = 0, l = lts.length, t; i < l && (t = lts[i]); i++) {
	
	        // simulated mouse events will be swallowed near a primary touchend
	        var dx = Math.abs(x - t.x);
	        var dy = Math.abs(y - t.y);
	        if (dx <= DEDUP_DIST && dy <= DEDUP_DIST) {
	          return true;
	        }
	      }
	    },
	    prepareEvent: function(inEvent) {
	      var e = dispatcher.cloneEvent(inEvent);
	
	      // forward mouse preventDefault
	      var pd = e.preventDefault;
	      e.preventDefault = function() {
	        inEvent.preventDefault();
	        pd();
	      };
	      e.pointerId = this.POINTER_ID;
	      e.isPrimary = true;
	      e.pointerType = this.POINTER_TYPE;
	      if ('webkitForce' in inEvent) {
	        e.pressure = inEvent.webkitForce - MouseEvent.WEBKIT_FORCE_AT_MOUSE_DOWN;
	      }
	      return e;
	    },
	    prepareButtonsForMove: function(e, inEvent) {
	      var p = pointermap.get(this.POINTER_ID);
	
	      // Update buttons state after possible out-of-document mouseup.
	      if (inEvent.which === 0 || !p) {
	        e.buttons = 0;
	      } else {
	        e.buttons = p.buttons;
	      }
	      inEvent.buttons = e.buttons;
	    },
	    mousedown: function(inEvent) {
	      if (!this.isEventSimulatedFromTouch(inEvent)) {
	        var p = pointermap.get(this.POINTER_ID);
	        var e = this.prepareEvent(inEvent);
	        if (!HAS_BUTTONS) {
	          e.buttons = BUTTON_TO_BUTTONS[e.button];
	          if (p) { e.buttons |= p.buttons; }
	          inEvent.buttons = e.buttons;
	        }
	        pointermap.set(this.POINTER_ID, inEvent);
	        if (!p || p.buttons === 0) {
	          dispatcher.down(e);
	        } else {
	          dispatcher.move(e);
	        }
	      }
	    },
	
	    // This is called when the user force presses without moving x/y
	    webkitmouseforcechanged: function(inEvent) {
	      this.mousemove(inEvent);
	    },
	    mousemove: function(inEvent) {
	      if (!this.isEventSimulatedFromTouch(inEvent)) {
	        var e = this.prepareEvent(inEvent);
	        if (!HAS_BUTTONS) { this.prepareButtonsForMove(e, inEvent); }
	        e.button = -1;
	        pointermap.set(this.POINTER_ID, inEvent);
	        dispatcher.move(e);
	      }
	    },
	    mouseup: function(inEvent) {
	      if (!this.isEventSimulatedFromTouch(inEvent)) {
	        var p = pointermap.get(this.POINTER_ID);
	        var e = this.prepareEvent(inEvent);
	        if (!HAS_BUTTONS) {
	          var up = BUTTON_TO_BUTTONS[e.button];
	
	          // Produces wrong state of buttons in Browsers without `buttons` support
	          // when a mouse button that was pressed outside the document is released
	          // inside and other buttons are still pressed down.
	          e.buttons = p ? p.buttons & ~up : 0;
	          inEvent.buttons = e.buttons;
	        }
	        pointermap.set(this.POINTER_ID, inEvent);
	
	        // Support: Firefox <=44 only
	        // FF Ubuntu includes the lifted button in the `buttons` property on
	        // mouseup.
	        // https://bugzilla.mozilla.org/show_bug.cgi?id=1223366
	        e.buttons &= ~BUTTON_TO_BUTTONS[e.button];
	        if (e.buttons === 0) {
	          dispatcher.up(e);
	        } else {
	          dispatcher.move(e);
	        }
	      }
	    },
	    mouseover: function(inEvent) {
	      if (!this.isEventSimulatedFromTouch(inEvent)) {
	        var e = this.prepareEvent(inEvent);
	        if (!HAS_BUTTONS) { this.prepareButtonsForMove(e, inEvent); }
	        e.button = -1;
	        pointermap.set(this.POINTER_ID, inEvent);
	        dispatcher.enterOver(e);
	      }
	    },
	    mouseout: function(inEvent) {
	      if (!this.isEventSimulatedFromTouch(inEvent)) {
	        var e = this.prepareEvent(inEvent);
	        if (!HAS_BUTTONS) { this.prepareButtonsForMove(e, inEvent); }
	        e.button = -1;
	        dispatcher.leaveOut(e);
	      }
	    },
	    cancel: function(inEvent) {
	      var e = this.prepareEvent(inEvent);
	      dispatcher.cancel(e);
	      this.deactivateMouse();
	    },
	    deactivateMouse: function() {
	      pointermap.delete(this.POINTER_ID);
	    }
	  };
	
	  var captureInfo = dispatcher.captureInfo;
	  var findTarget = targeting.findTarget.bind(targeting);
	  var allShadows = targeting.allShadows.bind(targeting);
	  var pointermap$1 = dispatcher.pointermap;
	
	  // this should be long enough to ignore compat mouse events made by touch
	  var DEDUP_TIMEOUT = 2500;
	  var ATTRIB = 'touch-action';
	  var INSTALLER;
	
	  // bitmask for _scrollType
	  var UP = 1;
	  var DOWN = 2;
	  var LEFT = 4;
	  var RIGHT = 8;
	  var AUTO = UP | DOWN | LEFT | RIGHT;
	
	  // handler block for native touch events
	  var touchEvents = {
	    events: [
	      'touchstart',
	      'touchmove',
	      'touchforcechange',
	      'touchend',
	      'touchcancel'
	    ],
	    register: function(target) {
	      INSTALLER.enableOnSubtree(target);
	    },
	    unregister: function() {
	
	      // TODO(dfreedman): is it worth it to disconnect the MO?
	    },
	    elementAdded: function(el) {
	      var a = el.getAttribute(ATTRIB);
	      var st = this.touchActionToScrollType(a);
	      if (typeof st === "number") {
	        el._scrollType = st;
	        dispatcher.listen(el, this.events);
	
	        // set touch-action on shadows as well
	        allShadows(el).forEach(function(s) {
	          s._scrollType = st;
	          dispatcher.listen(s, this.events);
	        }, this);
	      }
	    },
	    elementRemoved: function(el) {
	
	      // In some cases, an element is removed before a touchend.
	      // When this is the case, we should wait for the touchend before unlistening,
	      // because we still want pointer events to bubble up after removing from DOM.
	      if (pointermap$1.size > 0) {
	        var evts = this.events;
	        el.addEventListener('touchend', function() {
	          el._scrollType = undefined;
	          dispatcher.unlisten(el, evts);
	        });
	      } else {
	        el._scrollType = undefined;
	        dispatcher.unlisten(el, this.events);
	      }
	
	      // remove touch-action from shadow
	      allShadows(el).forEach(function(s) {
	        s._scrollType = undefined;
	        dispatcher.unlisten(s, this.events);
	      }, this);
	    },
	    elementChanged: function(el, oldValue) {
	      var a = el.getAttribute(ATTRIB);
	      var st = this.touchActionToScrollType(a);
	      var oldSt = this.touchActionToScrollType(oldValue);
	
	      // simply update scrollType if listeners are already established
	      if (typeof st === "number" && typeof oldSt === "number") {
	        el._scrollType = st;
	        allShadows(el).forEach(function(s) {
	          s._scrollType = st;
	        }, this);
	      } else if (typeof oldSt === "number") {
	        this.elementRemoved(el);
	      } else if (typeof st === "number") {
	        this.elementAdded(el);
	      }
	    },
	    scrollTypes: {
	      UP: function(s) {
	        return s.includes('pan-y') || s.includes('pan-up') ? UP : 0;
	      },
	      DOWN: function(s) {
	        return s.includes('pan-y') || s.includes('pan-down') ? DOWN : 0;
	      },
	      LEFT: function(s) {
	        return s.includes('pan-x') || s.includes('pan-left') ? LEFT : 0;
	      },
	      RIGHT: function(s) {
	        return s.includes('pan-x') || s.includes('pan-right') ? RIGHT : 0;
	      }
	    },
	    touchActionToScrollType: function(touchAction) {
	      if (!touchAction) {
	        return;
	      }
	
	      if (touchAction === "auto") {
	        return AUTO;
	      }
	
	      if (touchAction === "none") {
	        return 0;
	      }
	
	      var s = touchAction.split(' ');
	      var st = this.scrollTypes;
	
	      // construct a bitmask of allowed scroll directions
	      return st.UP(s) | st.DOWN(s) | st.LEFT(s) | st.RIGHT(s);
	    },
	    POINTER_TYPE: 'touch',
	    firstTouch: null,
	    isPrimaryTouch: function(inTouch) {
	      return this.firstTouch === inTouch.identifier;
	    },
	    setPrimaryTouch: function(inTouch) {
	
	      // set primary touch if there no pointers, or the only pointer is the mouse
	      if (pointermap$1.size === 0 || (pointermap$1.size === 1 && pointermap$1.has(1))) {
	        this.firstTouch = inTouch.identifier;
	        this.firstXY = { X: inTouch.clientX, Y: inTouch.clientY };
	        this.scrolling = false;
	      }
	    },
	    removePrimaryPointer: function(inPointer) {
	      if (inPointer.isPrimary) {
	        this.firstTouch = null;
	        this.firstXY = null;
	      }
	    },
	    typeToButtons: function(type) {
	      var ret = 0;
	      if (type === 'touchstart' || type === 'touchmove' || type === 'touchforcechange') {
	        ret = 1;
	      }
	      return ret;
	    },
	    touchToPointer: function(inTouch) {
	      var cte = this.currentTouchEvent;
	      var e = dispatcher.cloneEvent(inTouch);
	
	      // We reserve pointerId 1 for Mouse.
	      // Touch identifiers can start at 0.
	      // Add 2 to the touch identifier for compatibility.
	      var id = e.pointerId = inTouch.identifier + 2;
	      e.target = captureInfo[id] || findTarget(e);
	      e.bubbles = true;
	      e.cancelable = true;
	      e.button = 0;
	      e.buttons = this.typeToButtons(cte.type);
	      e.width = (inTouch.radiusX || inTouch.webkitRadiusX || 0) * 2;
	      e.height = (inTouch.radiusY || inTouch.webkitRadiusY || 0) * 2;
	      e.pressure = inTouch.force !== undefined ?
	        inTouch.force :
	        inTouch.webkitForce !== undefined ?
	          inTouch.webkitForce : undefined;
	      e.isPrimary = this.isPrimaryTouch(inTouch);
	      if (inTouch.altitudeAngle) {
	        var tan = Math.tan(inTouch.altitudeAngle);
	        var radToDeg = 180 / Math.PI;
	        e.tiltX = Math.atan(Math.cos(inTouch.azimuthAngle) / tan) * radToDeg;
	        e.tiltY = Math.atan(Math.sin(inTouch.azimuthAngle) / tan) * radToDeg;
	      } else {
	        e.tiltX = 0;
	        e.tiltY = 0;
	      }
	      if (inTouch.touchType === 'stylus') {
	        e.pointerType = 'pen';
	      } else {
	        e.pointerType = this.POINTER_TYPE;
	      }
	
	      // forward modifier keys
	      e.altKey = cte.altKey;
	      e.ctrlKey = cte.ctrlKey;
	      e.metaKey = cte.metaKey;
	      e.shiftKey = cte.shiftKey;
	
	      // forward touch preventDefaults
	      var self = this;
	      e.preventDefault = function() {
	        self.scrolling = false;
	        self.firstXY = null;
	        cte.preventDefault();
	      };
	      return e;
	    },
	    processTouches: function(inEvent, inFunction) {
	      var tl = inEvent.changedTouches;
	      this.currentTouchEvent = inEvent;
	      for (var i = 0, t; i < tl.length; i++) {
	        t = tl[i];
	        inFunction.call(this, this.touchToPointer(t));
	      }
	    },
	
	    // For single axis scrollers, determines whether the element should emit
	    // pointer events or behave as a scroller
	    shouldScroll: function(inEvent) {
	      if (this.firstXY) {
	        var ret;
	        var st = inEvent.currentTarget._scrollType;
	        if (st === 0) {
	
	          // this element is a `touch-action: none`, should never scroll
	          ret = false;
	        } else if (st === AUTO) {
	
	          // this element is a `touch-action: auto`, should always scroll
	          ret = true;
	        } else {
	          var t = inEvent.changedTouches[0];
	
	          var dy = t.clientY - this.firstXY.Y;
	          var dya = Math.abs(dy);
	          var dx = t.clientX - this.firstXY.X;
	          var dxa = Math.abs(dx);
	
	          var up = st & UP;
	          var down = st & DOWN;
	          var left = st & LEFT;
	          var right = st & RIGHT;
	
	          if (left && right) {
	
	            // should scroll on the x axis
	            ret = dxa > dya;
	          } else if (left) {
	
	            // should scroll left
	            ret = dxa > dya && dx > 0;
	          } else if (right) {
	
	            // should scroll right
	            ret = dxa > dya && dx < 0;
	          }
	
	          if (!ret) {
	            if (up && down) {
	
	              // should scroll on the y axis
	              ret = dxa < dya;
	            } else if (up) {
	
	              // should scroll up
	              ret = dxa < dya && dy > 0;
	            } else if (down) {
	
	              // should scroll down
	              ret = dxa < dya && dy < 0;
	            }
	          }
	
	        }
	        this.firstXY = null;
	        return ret;
	      }
	    },
	    findTouch: function(inTL, inId) {
	      for (var i = 0, l = inTL.length, t; i < l && (t = inTL[i]); i++) {
	        if (t.identifier === inId) {
	          return true;
	        }
	      }
	    },
	
	    // In some instances, a touchstart can happen without a touchend. This
	    // leaves the pointermap in a broken state.
	    // Therefore, on every touchstart, we remove the touches that did not fire a
	    // touchend event.
	    // To keep state globally consistent, we fire a
	    // pointercancel for this "abandoned" touch
	    vacuumTouches: function(inEvent) {
	      var tl = inEvent.touches;
	
	      // pointermap.size should be < tl.length here, as the touchstart has not
	      // been processed yet.
	      if (pointermap$1.size >= tl.length) {
	        var d = [];
	        pointermap$1.forEach(function(value, key) {
	
	          // Never remove pointerId == 1, which is mouse.
	          // Touch identifiers are 2 smaller than their pointerId, which is the
	          // index in pointermap.
	          if (key !== 1 && !this.findTouch(tl, key - 2)) {
	            var p = value.out;
	            d.push(p);
	          }
	        }, this);
	        d.forEach(this.cancelOut, this);
	      }
	    },
	    touchstart: function(inEvent) {
	      this.vacuumTouches(inEvent);
	      this.setPrimaryTouch(inEvent.changedTouches[0]);
	      this.dedupSynthMouse(inEvent);
	      if (!this.scrolling) {
	        this.processTouches(inEvent, this.overDown);
	      }
	    },
	    overDown: function(inPointer) {
	      pointermap$1.set(inPointer.pointerId, {
	        target: inPointer.target,
	        out: inPointer,
	        outTarget: inPointer.target
	      });
	      dispatcher.enterOver(inPointer);
	      dispatcher.down(inPointer);
	    },
	
	    // Called when pressure or tilt changes without the x/y changing
	    touchforcechange: function(inEvent) {
	      this.touchmove(inEvent);
	    },
	    touchmove: function(inEvent) {
	      if (!this.scrolling) {
	        if (this.shouldScroll(inEvent)) {
	          this.scrolling = true;
	          this.touchcancel(inEvent);
	        } else {
	          if (inEvent.type !== 'touchforcechange') {
	            inEvent.preventDefault();
	          }
	          this.processTouches(inEvent, this.moveOverOut);
	        }
	      }
	    },
	    moveOverOut: function(inPointer) {
	      var event = inPointer;
	      var pointer = pointermap$1.get(event.pointerId);
	
	      // a finger drifted off the screen, ignore it
	      if (!pointer) {
	        return;
	      }
	      var outEvent = pointer.out;
	      var outTarget = pointer.outTarget;
	      dispatcher.move(event);
	      if (outEvent && outTarget !== event.target) {
	        outEvent.relatedTarget = event.target;
	        event.relatedTarget = outTarget;
	
	        // recover from retargeting by shadow
	        outEvent.target = outTarget;
	        if (event.target) {
	          dispatcher.leaveOut(outEvent);
	          dispatcher.enterOver(event);
	        } else {
	
	          // clean up case when finger leaves the screen
	          event.target = outTarget;
	          event.relatedTarget = null;
	          this.cancelOut(event);
	        }
	      }
	      pointer.out = event;
	      pointer.outTarget = event.target;
	    },
	    touchend: function(inEvent) {
	      this.dedupSynthMouse(inEvent);
	      this.processTouches(inEvent, this.upOut);
	    },
	    upOut: function(inPointer) {
	      if (!this.scrolling) {
	        dispatcher.up(inPointer);
	        dispatcher.leaveOut(inPointer);
	      }
	      this.cleanUpPointer(inPointer);
	    },
	    touchcancel: function(inEvent) {
	      this.processTouches(inEvent, this.cancelOut);
	    },
	    cancelOut: function(inPointer) {
	      dispatcher.cancel(inPointer);
	      dispatcher.leaveOut(inPointer);
	      this.cleanUpPointer(inPointer);
	    },
	    cleanUpPointer: function(inPointer) {
	      pointermap$1.delete(inPointer.pointerId);
	      this.removePrimaryPointer(inPointer);
	    },
	
	    // prevent synth mouse events from creating pointer events
	    dedupSynthMouse: function(inEvent) {
	      var lts = mouseEvents.lastTouches;
	      var t = inEvent.changedTouches[0];
	
	      // only the primary finger will synth mouse events
	      if (this.isPrimaryTouch(t)) {
	
	        // remember x/y of last touch
	        var lt = { x: t.clientX, y: t.clientY };
	        lts.push(lt);
	        var fn = (function(lts, lt) {
	          var i = lts.indexOf(lt);
	          if (i > -1) {
	            lts.splice(i, 1);
	          }
	        }).bind(null, lts, lt);
	        setTimeout(fn, DEDUP_TIMEOUT);
	      }
	    }
	  };
	
	  INSTALLER = new Installer(touchEvents.elementAdded, touchEvents.elementRemoved,
	    touchEvents.elementChanged, touchEvents);
	
	  var pointermap$2 = dispatcher.pointermap;
	  var HAS_BITMAP_TYPE = window.MSPointerEvent &&
	    typeof window.MSPointerEvent.MSPOINTER_TYPE_MOUSE === 'number';
	  var msEvents = {
	    events: [
	      'MSPointerDown',
	      'MSPointerMove',
	      'MSPointerUp',
	      'MSPointerOut',
	      'MSPointerOver',
	      'MSPointerCancel',
	      'MSGotPointerCapture',
	      'MSLostPointerCapture'
	    ],
	    register: function(target) {
	      dispatcher.listen(target, this.events);
	    },
	    unregister: function(target) {
	      dispatcher.unlisten(target, this.events);
	    },
	    POINTER_TYPES: [
	      '',
	      'unavailable',
	      'touch',
	      'pen',
	      'mouse'
	    ],
	    prepareEvent: function(inEvent) {
	      var e = inEvent;
	      if (HAS_BITMAP_TYPE) {
	        e = dispatcher.cloneEvent(inEvent);
	        e.pointerType = this.POINTER_TYPES[inEvent.pointerType];
	      }
	      return e;
	    },
	    cleanup: function(id) {
	      pointermap$2.delete(id);
	    },
	    MSPointerDown: function(inEvent) {
	      pointermap$2.set(inEvent.pointerId, inEvent);
	      var e = this.prepareEvent(inEvent);
	      dispatcher.down(e);
	    },
	    MSPointerMove: function(inEvent) {
	      var e = this.prepareEvent(inEvent);
	      dispatcher.move(e);
	    },
	    MSPointerUp: function(inEvent) {
	      var e = this.prepareEvent(inEvent);
	      dispatcher.up(e);
	      this.cleanup(inEvent.pointerId);
	    },
	    MSPointerOut: function(inEvent) {
	      var e = this.prepareEvent(inEvent);
	      dispatcher.leaveOut(e);
	    },
	    MSPointerOver: function(inEvent) {
	      var e = this.prepareEvent(inEvent);
	      dispatcher.enterOver(e);
	    },
	    MSPointerCancel: function(inEvent) {
	      var e = this.prepareEvent(inEvent);
	      dispatcher.cancel(e);
	      this.cleanup(inEvent.pointerId);
	    },
	    MSLostPointerCapture: function(inEvent) {
	      var e = dispatcher.makeEvent('lostpointercapture', inEvent);
	      dispatcher.dispatchEvent(e);
	    },
	    MSGotPointerCapture: function(inEvent) {
	      var e = dispatcher.makeEvent('gotpointercapture', inEvent);
	      dispatcher.dispatchEvent(e);
	    }
	  };
	
	  function applyPolyfill() {
	
	    // only activate if this platform does not have pointer events
	    if (!window.PointerEvent) {
	      window.PointerEvent = PointerEvent;
	
	      if (window.navigator.msPointerEnabled) {
	        var tp = window.navigator.msMaxTouchPoints;
	        Object.defineProperty(window.navigator, 'maxTouchPoints', {
	          value: tp,
	          enumerable: true
	        });
	        dispatcher.registerSource('ms', msEvents);
	      } else {
	        Object.defineProperty(window.navigator, 'maxTouchPoints', {
	          value: 0,
	          enumerable: true
	        });
	        dispatcher.registerSource('mouse', mouseEvents);
	        if (window.ontouchstart !== undefined) {
	          dispatcher.registerSource('touch', touchEvents);
	        }
	      }
	
	      dispatcher.register(document);
	    }
	  }
	
	  var n = window.navigator;
	  var s;
	  var r;
	  var h;
	  function assertActive(id) {
	    if (!dispatcher.pointermap.has(id)) {
	      var error = new Error('NotFoundError');
	      error.name = 'NotFoundError';
	      throw error;
	    }
	  }
	  function assertConnected(elem) {
	    var parent = elem.parentNode;
	    while (parent && parent !== elem.ownerDocument) {
	      parent = parent.parentNode;
	    }
	    if (!parent) {
	      var error = new Error('InvalidStateError');
	      error.name = 'InvalidStateError';
	      throw error;
	    }
	  }
	  function inActiveButtonState(id) {
	    var p = dispatcher.pointermap.get(id);
	    return p.buttons !== 0;
	  }
	  if (n.msPointerEnabled) {
	    s = function(pointerId) {
	      assertActive(pointerId);
	      assertConnected(this);
	      if (inActiveButtonState(pointerId)) {
	        dispatcher.setCapture(pointerId, this, true);
	        this.msSetPointerCapture(pointerId);
	      }
	    };
	    r = function(pointerId) {
	      assertActive(pointerId);
	      dispatcher.releaseCapture(pointerId, true);
	      this.msReleasePointerCapture(pointerId);
	    };
	  } else {
	    s = function setPointerCapture(pointerId) {
	      assertActive(pointerId);
	      assertConnected(this);
	      if (inActiveButtonState(pointerId)) {
	        dispatcher.setCapture(pointerId, this);
	      }
	    };
	    r = function releasePointerCapture(pointerId) {
	      assertActive(pointerId);
	      dispatcher.releaseCapture(pointerId);
	    };
	  }
	  h = function hasPointerCapture(pointerId) {
	    return !!dispatcher.captureInfo[pointerId];
	  };
	
	  function applyPolyfill$1() {
	    if (window.Element && !window.Element.prototype.setPointerCapture) {
	      Object.defineProperties(window.Element.prototype, {
	        'setPointerCapture': {
	          value: s
	        },
	        'releasePointerCapture': {
	          value: r
	        },
	        'hasPointerCapture': {
	          value: h
	        }
	      });
	    }
	  }
	
	  applyAttributeStyles();
	  applyPolyfill();
	  applyPolyfill$1();
	
	  var pointerevents = {
	    dispatcher: dispatcher,
	    Installer: Installer,
	    PointerEvent: PointerEvent,
	    PointerMap: PointerMap,
	    targetFinding: targeting
	  };
	
	  return pointerevents;
	
	}));

/***/ }),
/* 166 */
/***/ (function(module, exports, __webpack_require__) {

	var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!
	 * jQuery JavaScript Library v2.1.1
	 * http://jquery.com/
	 *
	 * Includes Sizzle.js
	 * http://sizzlejs.com/
	 *
	 * Copyright 2005, 2014 jQuery Foundation, Inc. and other contributors
	 * Released under the MIT license
	 * http://jquery.org/license
	 *
	 * Date: 2014-05-01T17:11Z
	 */
	
	(function( global, factory ) {
	
		if ( typeof module === "object" && typeof module.exports === "object" ) {
			// For CommonJS and CommonJS-like environments where a proper window is present,
			// execute the factory and get jQuery
			// For environments that do not inherently posses a window with a document
			// (such as Node.js), expose a jQuery-making factory as module.exports
			// This accentuates the need for the creation of a real window
			// e.g. var jQuery = require("jquery")(window);
			// See ticket #14549 for more info
			module.exports = global.document ?
				factory( global, true ) :
				function( w ) {
					if ( !w.document ) {
						throw new Error( "jQuery requires a window with a document" );
					}
					return factory( w );
				};
		} else {
			factory( global );
		}
	
	// Pass this if window is not defined yet
	}(typeof window !== "undefined" ? window : this, function( window, noGlobal ) {
	
	// Can't do this because several apps including ASP.NET trace
	// the stack via arguments.caller.callee and Firefox dies if
	// you try to trace through "use strict" call chains. (#13335)
	// Support: Firefox 18+
	//
	
	var arr = [];
	
	var slice = arr.slice;
	
	var concat = arr.concat;
	
	var push = arr.push;
	
	var indexOf = arr.indexOf;
	
	var class2type = {};
	
	var toString = class2type.toString;
	
	var hasOwn = class2type.hasOwnProperty;
	
	var support = {};
	
	
	
	var
		// Use the correct document accordingly with window argument (sandbox)
		document = window.document,
	
		version = "2.1.1",
	
		// Define a local copy of jQuery
		jQuery = function( selector, context ) {
			// The jQuery object is actually just the init constructor 'enhanced'
			// Need init if jQuery is called (just allow error to be thrown if not included)
			return new jQuery.fn.init( selector, context );
		},
	
		// Support: Android<4.1
		// Make sure we trim BOM and NBSP
		rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
	
		// Matches dashed string for camelizing
		rmsPrefix = /^-ms-/,
		rdashAlpha = /-([\da-z])/gi,
	
		// Used by jQuery.camelCase as callback to replace()
		fcamelCase = function( all, letter ) {
			return letter.toUpperCase();
		};
	
	jQuery.fn = jQuery.prototype = {
		// The current version of jQuery being used
		jquery: version,
	
		constructor: jQuery,
	
		// Start with an empty selector
		selector: "",
	
		// The default length of a jQuery object is 0
		length: 0,
	
		toArray: function() {
			return slice.call( this );
		},
	
		// Get the Nth element in the matched element set OR
		// Get the whole matched element set as a clean array
		get: function( num ) {
			return num != null ?
	
				// Return just the one element from the set
				( num < 0 ? this[ num + this.length ] : this[ num ] ) :
	
				// Return all the elements in a clean array
				slice.call( this );
		},
	
		// Take an array of elements and push it onto the stack
		// (returning the new matched element set)
		pushStack: function( elems ) {
	
			// Build a new jQuery matched element set
			var ret = jQuery.merge( this.constructor(), elems );
	
			// Add the old object onto the stack (as a reference)
			ret.prevObject = this;
			ret.context = this.context;
	
			// Return the newly-formed element set
			return ret;
		},
	
		// Execute a callback for every element in the matched set.
		// (You can seed the arguments with an array of args, but this is
		// only used internally.)
		each: function( callback, args ) {
			return jQuery.each( this, callback, args );
		},
	
		map: function( callback ) {
			return this.pushStack( jQuery.map(this, function( elem, i ) {
				return callback.call( elem, i, elem );
			}));
		},
	
		slice: function() {
			return this.pushStack( slice.apply( this, arguments ) );
		},
	
		first: function() {
			return this.eq( 0 );
		},
	
		last: function() {
			return this.eq( -1 );
		},
	
		eq: function( i ) {
			var len = this.length,
				j = +i + ( i < 0 ? len : 0 );
			return this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] );
		},
	
		end: function() {
			return this.prevObject || this.constructor(null);
		},
	
		// For internal use only.
		// Behaves like an Array's method, not like a jQuery method.
		push: push,
		sort: arr.sort,
		splice: arr.splice
	};
	
	jQuery.extend = jQuery.fn.extend = function() {
		var options, name, src, copy, copyIsArray, clone,
			target = arguments[0] || {},
			i = 1,
			length = arguments.length,
			deep = false;
	
		// Handle a deep copy situation
		if ( typeof target === "boolean" ) {
			deep = target;
	
			// skip the boolean and the target
			target = arguments[ i ] || {};
			i++;
		}
	
		// Handle case when target is a string or something (possible in deep copy)
		if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
			target = {};
		}
	
		// extend jQuery itself if only one argument is passed
		if ( i === length ) {
			target = this;
			i--;
		}
	
		for ( ; i < length; i++ ) {
			// Only deal with non-null/undefined values
			if ( (options = arguments[ i ]) != null ) {
				// Extend the base object
				for ( name in options ) {
					src = target[ name ];
					copy = options[ name ];
	
					// Prevent never-ending loop
					if ( target === copy ) {
						continue;
					}
	
					// Recurse if we're merging plain objects or arrays
					if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {
						if ( copyIsArray ) {
							copyIsArray = false;
							clone = src && jQuery.isArray(src) ? src : [];
	
						} else {
							clone = src && jQuery.isPlainObject(src) ? src : {};
						}
	
						// Never move original objects, clone them
						target[ name ] = jQuery.extend( deep, clone, copy );
	
					// Don't bring in undefined values
					} else if ( copy !== undefined ) {
						target[ name ] = copy;
					}
				}
			}
		}
	
		// Return the modified object
		return target;
	};
	
	jQuery.extend({
		// Unique for each copy of jQuery on the page
		expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ),
	
		// Assume jQuery is ready without the ready module
		isReady: true,
	
		error: function( msg ) {
			throw new Error( msg );
		},
	
		noop: function() {},
	
		// See test/unit/core.js for details concerning isFunction.
		// Since version 1.3, DOM methods and functions like alert
		// aren't supported. They return false on IE (#2968).
		isFunction: function( obj ) {
			return jQuery.type(obj) === "function";
		},
	
		isArray: Array.isArray,
	
		isWindow: function( obj ) {
			return obj != null && obj === obj.window;
		},
	
		isNumeric: function( obj ) {
			// parseFloat NaNs numeric-cast false positives (null|true|false|"")
			// ...but misinterprets leading-number strings, particularly hex literals ("0x...")
			// subtraction forces infinities to NaN
			return !jQuery.isArray( obj ) && obj - parseFloat( obj ) >= 0;
		},
	
		isPlainObject: function( obj ) {
			// Not plain objects:
			// - Any object or value whose internal [[Class]] property is not "[object Object]"
			// - DOM nodes
			// - window
			if ( jQuery.type( obj ) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
				return false;
			}
	
			if ( obj.constructor &&
					!hasOwn.call( obj.constructor.prototype, "isPrototypeOf" ) ) {
				return false;
			}
	
			// If the function hasn't returned already, we're confident that
			// |obj| is a plain object, created by {} or constructed with new Object
			return true;
		},
	
		isEmptyObject: function( obj ) {
			var name;
			for ( name in obj ) {
				return false;
			}
			return true;
		},
	
		type: function( obj ) {
			if ( obj == null ) {
				return obj + "";
			}
			// Support: Android < 4.0, iOS < 6 (functionish RegExp)
			return typeof obj === "object" || typeof obj === "function" ?
				class2type[ toString.call(obj) ] || "object" :
				typeof obj;
		},
	
		// Evaluates a script in a global context
		globalEval: function( code ) {
			var script,
				indirect = eval;
	
			code = jQuery.trim( code );
	
			if ( code ) {
				// If the code includes a valid, prologue position
				// strict mode pragma, execute code by injecting a
				// script tag into the document.
				if ( code.indexOf("use strict") === 1 ) {
					script = document.createElement("script");
					script.text = code;
					document.head.appendChild( script ).parentNode.removeChild( script );
				} else {
				// Otherwise, avoid the DOM node creation, insertion
				// and removal by using an indirect global eval
					indirect( code );
				}
			}
		},
	
		// Convert dashed to camelCase; used by the css and data modules
		// Microsoft forgot to hump their vendor prefix (#9572)
		camelCase: function( string ) {
			return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
		},
	
		nodeName: function( elem, name ) {
			return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
		},
	
		// args is for internal usage only
		each: function( obj, callback, args ) {
			var value,
				i = 0,
				length = obj.length,
				isArray = isArraylike( obj );
	
			if ( args ) {
				if ( isArray ) {
					for ( ; i < length; i++ ) {
						value = callback.apply( obj[ i ], args );
	
						if ( value === false ) {
							break;
						}
					}
				} else {
					for ( i in obj ) {
						value = callback.apply( obj[ i ], args );
	
						if ( value === false ) {
							break;
						}
					}
				}
	
			// A special, fast, case for the most common use of each
			} else {
				if ( isArray ) {
					for ( ; i < length; i++ ) {
						value = callback.call( obj[ i ], i, obj[ i ] );
	
						if ( value === false ) {
							break;
						}
					}
				} else {
					for ( i in obj ) {
						value = callback.call( obj[ i ], i, obj[ i ] );
	
						if ( value === false ) {
							break;
						}
					}
				}
			}
	
			return obj;
		},
	
		// Support: Android<4.1
		trim: function( text ) {
			return text == null ?
				"" :
				( text + "" ).replace( rtrim, "" );
		},
	
		// results is for internal usage only
		makeArray: function( arr, results ) {
			var ret = results || [];
	
			if ( arr != null ) {
				if ( isArraylike( Object(arr) ) ) {
					jQuery.merge( ret,
						typeof arr === "string" ?
						[ arr ] : arr
					);
				} else {
					push.call( ret, arr );
				}
			}
	
			return ret;
		},
	
		inArray: function( elem, arr, i ) {
			return arr == null ? -1 : indexOf.call( arr, elem, i );
		},
	
		merge: function( first, second ) {
			var len = +second.length,
				j = 0,
				i = first.length;
	
			for ( ; j < len; j++ ) {
				first[ i++ ] = second[ j ];
			}
	
			first.length = i;
	
			return first;
		},
	
		grep: function( elems, callback, invert ) {
			var callbackInverse,
				matches = [],
				i = 0,
				length = elems.length,
				callbackExpect = !invert;
	
			// Go through the array, only saving the items
			// that pass the validator function
			for ( ; i < length; i++ ) {
				callbackInverse = !callback( elems[ i ], i );
				if ( callbackInverse !== callbackExpect ) {
					matches.push( elems[ i ] );
				}
			}
	
			return matches;
		},
	
		// arg is for internal usage only
		map: function( elems, callback, arg ) {
			var value,
				i = 0,
				length = elems.length,
				isArray = isArraylike( elems ),
				ret = [];
	
			// Go through the array, translating each of the items to their new values
			if ( isArray ) {
				for ( ; i < length; i++ ) {
					value = callback( elems[ i ], i, arg );
	
					if ( value != null ) {
						ret.push( value );
					}
				}
	
			// Go through every key on the object,
			} else {
				for ( i in elems ) {
					value = callback( elems[ i ], i, arg );
	
					if ( value != null ) {
						ret.push( value );
					}
				}
			}
	
			// Flatten any nested arrays
			return concat.apply( [], ret );
		},
	
		// A global GUID counter for objects
		guid: 1,
	
		// Bind a function to a context, optionally partially applying any
		// arguments.
		proxy: function( fn, context ) {
			var tmp, args, proxy;
	
			if ( typeof context === "string" ) {
				tmp = fn[ context ];
				context = fn;
				fn = tmp;
			}
	
			// Quick check to determine if target is callable, in the spec
			// this throws a TypeError, but we will just return undefined.
			if ( !jQuery.isFunction( fn ) ) {
				return undefined;
			}
	
			// Simulated bind
			args = slice.call( arguments, 2 );
			proxy = function() {
				return fn.apply( context || this, args.concat( slice.call( arguments ) ) );
			};
	
			// Set the guid of unique handler to the same of original handler, so it can be removed
			proxy.guid = fn.guid = fn.guid || jQuery.guid++;
	
			return proxy;
		},
	
		now: Date.now,
	
		// jQuery.support is not used in Core but other projects attach their
		// properties to it so it needs to exist.
		support: support
	});
	
	// Populate the class2type map
	jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) {
		class2type[ "[object " + name + "]" ] = name.toLowerCase();
	});
	
	function isArraylike( obj ) {
		var length = obj.length,
			type = jQuery.type( obj );
	
		if ( type === "function" || jQuery.isWindow( obj ) ) {
			return false;
		}
	
		if ( obj.nodeType === 1 && length ) {
			return true;
		}
	
		return type === "array" || length === 0 ||
			typeof length === "number" && length > 0 && ( length - 1 ) in obj;
	}
	var Sizzle =
	/*!
	 * Sizzle CSS Selector Engine v1.10.19
	 * http://sizzlejs.com/
	 *
	 * Copyright 2013 jQuery Foundation, Inc. and other contributors
	 * Released under the MIT license
	 * http://jquery.org/license
	 *
	 * Date: 2014-04-18
	 */
	(function( window ) {
	
	var i,
		support,
		Expr,
		getText,
		isXML,
		tokenize,
		compile,
		select,
		outermostContext,
		sortInput,
		hasDuplicate,
	
		// Local document vars
		setDocument,
		document,
		docElem,
		documentIsHTML,
		rbuggyQSA,
		rbuggyMatches,
		matches,
		contains,
	
		// Instance-specific data
		expando = "sizzle" + -(new Date()),
		preferredDoc = window.document,
		dirruns = 0,
		done = 0,
		classCache = createCache(),
		tokenCache = createCache(),
		compilerCache = createCache(),
		sortOrder = function( a, b ) {
			if ( a === b ) {
				hasDuplicate = true;
			}
			return 0;
		},
	
		// General-purpose constants
		strundefined = typeof undefined,
		MAX_NEGATIVE = 1 << 31,
	
		// Instance methods
		hasOwn = ({}).hasOwnProperty,
		arr = [],
		pop = arr.pop,
		push_native = arr.push,
		push = arr.push,
		slice = arr.slice,
		// Use a stripped-down indexOf if we can't use a native one
		indexOf = arr.indexOf || function( elem ) {
			var i = 0,
				len = this.length;
			for ( ; i < len; i++ ) {
				if ( this[i] === elem ) {
					return i;
				}
			}
			return -1;
		},
	
		booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",
	
		// Regular expressions
	
		// Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace
		whitespace = "[\\x20\\t\\r\\n\\f]",
		// http://www.w3.org/TR/css3-syntax/#characters
		characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",
	
		// Loosely modeled on CSS identifier characters
		// An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors
		// Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
		identifier = characterEncoding.replace( "w", "w#" ),
	
		// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors
		attributes = "\\[" + whitespace + "*(" + characterEncoding + ")(?:" + whitespace +
			// Operator (capture 2)
			"*([*^$|!~]?=)" + whitespace +
			// "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]"
			"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace +
			"*\\]",
	
		pseudos = ":(" + characterEncoding + ")(?:\\((" +
			// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:
			// 1. quoted (capture 3; capture 4 or capture 5)
			"('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" +
			// 2. simple (capture 6)
			"((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" +
			// 3. anything else (capture 2)
			".*" +
			")\\)|)",
	
		// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
		rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ),
	
		rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
		rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ),
	
		rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ),
	
		rpseudo = new RegExp( pseudos ),
		ridentifier = new RegExp( "^" + identifier + "$" ),
	
		matchExpr = {
			"ID": new RegExp( "^#(" + characterEncoding + ")" ),
			"CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ),
			"TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ),
			"ATTR": new RegExp( "^" + attributes ),
			"PSEUDO": new RegExp( "^" + pseudos ),
			"CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace +
				"*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +
				"*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
			"bool": new RegExp( "^(?:" + booleans + ")$", "i" ),
			// For use in libraries implementing .is()
			// We use this for POS matching in `select`
			"needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" +
				whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
		},
	
		rinputs = /^(?:input|select|textarea|button)$/i,
		rheader = /^h\d$/i,
	
		rnative = /^[^{]+\{\s*\[native \w/,
	
		// Easily-parseable/retrievable ID or TAG or CLASS selectors
		rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
	
		rsibling = /[+~]/,
		rescape = /'|\\/g,
	
		// CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
		runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ),
		funescape = function( _, escaped, escapedWhitespace ) {
			var high = "0x" + escaped - 0x10000;
			// NaN means non-codepoint
			// Support: Firefox<24
			// Workaround erroneous numeric interpretation of +"0x"
			return high !== high || escapedWhitespace ?
				escaped :
				high < 0 ?
					// BMP codepoint
					String.fromCharCode( high + 0x10000 ) :
					// Supplemental Plane codepoint (surrogate pair)
					String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
		};
	
	// Optimize for push.apply( _, NodeList )
	try {
		push.apply(
			(arr = slice.call( preferredDoc.childNodes )),
			preferredDoc.childNodes
		);
		// Support: Android<4.0
		// Detect silently failing push.apply
		arr[ preferredDoc.childNodes.length ].nodeType;
	} catch ( e ) {
		push = { apply: arr.length ?
	
			// Leverage slice if possible
			function( target, els ) {
				push_native.apply( target, slice.call(els) );
			} :
	
			// Support: IE<9
			// Otherwise append directly
			function( target, els ) {
				var j = target.length,
					i = 0;
				// Can't trust NodeList.length
				while ( (target[j++] = els[i++]) ) {}
				target.length = j - 1;
			}
		};
	}
	
	function Sizzle( selector, context, results, seed ) {
		var match, elem, m, nodeType,
			// QSA vars
			i, groups, old, nid, newContext, newSelector;
	
		if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {
			setDocument( context );
		}
	
		context = context || document;
		results = results || [];
	
		if ( !selector || typeof selector !== "string" ) {
			return results;
		}
	
		if ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) {
			return [];
		}
	
		if ( documentIsHTML && !seed ) {
	
			// Shortcuts
			if ( (match = rquickExpr.exec( selector )) ) {
				// Speed-up: Sizzle("#ID")
				if ( (m = match[1]) ) {
					if ( nodeType === 9 ) {
						elem = context.getElementById( m );
						// Check parentNode to catch when Blackberry 4.6 returns
						// nodes that are no longer in the document (jQuery #6963)
						if ( elem && elem.parentNode ) {
							// Handle the case where IE, Opera, and Webkit return items
							// by name instead of ID
							if ( elem.id === m ) {
								results.push( elem );
								return results;
							}
						} else {
							return results;
						}
					} else {
						// Context is not a document
						if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) &&
							contains( context, elem ) && elem.id === m ) {
							results.push( elem );
							return results;
						}
					}
	
				// Speed-up: Sizzle("TAG")
				} else if ( match[2] ) {
					push.apply( results, context.getElementsByTagName( selector ) );
					return results;
	
				// Speed-up: Sizzle(".CLASS")
				} else if ( (m = match[3]) && support.getElementsByClassName && context.getElementsByClassName ) {
					push.apply( results, context.getElementsByClassName( m ) );
					return results;
				}
			}
	
			// QSA path
			if ( support.qsa && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) {
				nid = old = expando;
				newContext = context;
				newSelector = nodeType === 9 && selector;
	
				// qSA works strangely on Element-rooted queries
				// We can work around this by specifying an extra ID on the root
				// and working up from there (Thanks to Andrew Dupont for the technique)
				// IE 8 doesn't work on object elements
				if ( nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {
					groups = tokenize( selector );
	
					if ( (old = context.getAttribute("id")) ) {
						nid = old.replace( rescape, "\\$&" );
					} else {
						context.setAttribute( "id", nid );
					}
					nid = "[id='" + nid + "'] ";
	
					i = groups.length;
					while ( i-- ) {
						groups[i] = nid + toSelector( groups[i] );
					}
					newContext = rsibling.test( selector ) && testContext( context.parentNode ) || context;
					newSelector = groups.join(",");
				}
	
				if ( newSelector ) {
					try {
						push.apply( results,
							newContext.querySelectorAll( newSelector )
						);
						return results;
					} catch(qsaError) {
					} finally {
						if ( !old ) {
							context.removeAttribute("id");
						}
					}
				}
			}
		}
	
		// All others
		return select( selector.replace( rtrim, "$1" ), context, results, seed );
	}
	
	/**
	 * Create key-value caches of limited size
	 * @returns {Function(string, Object)} Returns the Object data after storing it on itself with
	 *	property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
	 *	deleting the oldest entry
	 */
	function createCache() {
		var keys = [];
	
		function cache( key, value ) {
			// Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
			if ( keys.push( key + " " ) > Expr.cacheLength ) {
				// Only keep the most recent entries
				delete cache[ keys.shift() ];
			}
			return (cache[ key + " " ] = value);
		}
		return cache;
	}
	
	/**
	 * Mark a function for special use by Sizzle
	 * @param {Function} fn The function to mark
	 */
	function markFunction( fn ) {
		fn[ expando ] = true;
		return fn;
	}
	
	/**
	 * Support testing using an element
	 * @param {Function} fn Passed the created div and expects a boolean result
	 */
	function assert( fn ) {
		var div = document.createElement("div");
	
		try {
			return !!fn( div );
		} catch (e) {
			return false;
		} finally {
			// Remove from its parent by default
			if ( div.parentNode ) {
				div.parentNode.removeChild( div );
			}
			// release memory in IE
			div = null;
		}
	}
	
	/**
	 * Adds the same handler for all of the specified attrs
	 * @param {String} attrs Pipe-separated list of attributes
	 * @param {Function} handler The method that will be applied
	 */
	function addHandle( attrs, handler ) {
		var arr = attrs.split("|"),
			i = attrs.length;
	
		while ( i-- ) {
			Expr.attrHandle[ arr[i] ] = handler;
		}
	}
	
	/**
	 * Checks document order of two siblings
	 * @param {Element} a
	 * @param {Element} b
	 * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b
	 */
	function siblingCheck( a, b ) {
		var cur = b && a,
			diff = cur && a.nodeType === 1 && b.nodeType === 1 &&
				( ~b.sourceIndex || MAX_NEGATIVE ) -
				( ~a.sourceIndex || MAX_NEGATIVE );
	
		// Use IE sourceIndex if available on both nodes
		if ( diff ) {
			return diff;
		}
	
		// Check if b follows a
		if ( cur ) {
			while ( (cur = cur.nextSibling) ) {
				if ( cur === b ) {
					return -1;
				}
			}
		}
	
		return a ? 1 : -1;
	}
	
	/**
	 * Returns a function to use in pseudos for input types
	 * @param {String} type
	 */
	function createInputPseudo( type ) {
		return function( elem ) {
			var name = elem.nodeName.toLowerCase();
			return name === "input" && elem.type === type;
		};
	}
	
	/**
	 * Returns a function to use in pseudos for buttons
	 * @param {String} type
	 */
	function createButtonPseudo( type ) {
		return function( elem ) {
			var name = elem.nodeName.toLowerCase();
			return (name === "input" || name === "button") && elem.type === type;
		};
	}
	
	/**
	 * Returns a function to use in pseudos for positionals
	 * @param {Function} fn
	 */
	function createPositionalPseudo( fn ) {
		return markFunction(function( argument ) {
			argument = +argument;
			return markFunction(function( seed, matches ) {
				var j,
					matchIndexes = fn( [], seed.length, argument ),
					i = matchIndexes.length;
	
				// Match elements found at the specified indexes
				while ( i-- ) {
					if ( seed[ (j = matchIndexes[i]) ] ) {
						seed[j] = !(matches[j] = seed[j]);
					}
				}
			});
		});
	}
	
	/**
	 * Checks a node for validity as a Sizzle context
	 * @param {Element|Object=} context
	 * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value
	 */
	function testContext( context ) {
		return context && typeof context.getElementsByTagName !== strundefined && context;
	}
	
	// Expose support vars for convenience
	support = Sizzle.support = {};
	
	/**
	 * Detects XML nodes
	 * @param {Element|Object} elem An element or a document
	 * @returns {Boolean} True iff elem is a non-HTML XML node
	 */
	isXML = Sizzle.isXML = function( elem ) {
		// documentElement is verified for cases where it doesn't yet exist
		// (such as loading iframes in IE - #4833)
		var documentElement = elem && (elem.ownerDocument || elem).documentElement;
		return documentElement ? documentElement.nodeName !== "HTML" : false;
	};
	
	/**
	 * Sets document-related variables once based on the current document
	 * @param {Element|Object} [doc] An element or document object to use to set the document
	 * @returns {Object} Returns the current document
	 */
	setDocument = Sizzle.setDocument = function( node ) {
		var hasCompare,
			doc = node ? node.ownerDocument || node : preferredDoc,
			parent = doc.defaultView;
	
		// If no document and documentElement is available, return
		if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {
			return document;
		}
	
		// Set our document
		document = doc;
		docElem = doc.documentElement;
	
		// Support tests
		documentIsHTML = !isXML( doc );
	
		// Support: IE>8
		// If iframe document is assigned to "document" variable and if iframe has been reloaded,
		// IE will throw "permission denied" error when accessing "document" variable, see jQuery #13936
		// IE6-8 do not support the defaultView property so parent will be undefined
		if ( parent && parent !== parent.top ) {
			// IE11 does not have attachEvent, so all must suffer
			if ( parent.addEventListener ) {
				parent.addEventListener( "unload", function() {
					setDocument();
				}, false );
			} else if ( parent.attachEvent ) {
				parent.attachEvent( "onunload", function() {
					setDocument();
				});
			}
		}
	
		/* Attributes
		---------------------------------------------------------------------- */
	
		// Support: IE<8
		// Verify that getAttribute really returns attributes and not properties (excepting IE8 booleans)
		support.attributes = assert(function( div ) {
			div.className = "i";
			return !div.getAttribute("className");
		});
	
		/* getElement(s)By*
		---------------------------------------------------------------------- */
	
		// Check if getElementsByTagName("*") returns only elements
		support.getElementsByTagName = assert(function( div ) {
			div.appendChild( doc.createComment("") );
			return !div.getElementsByTagName("*").length;
		});
	
		// Check if getElementsByClassName can be trusted
		support.getElementsByClassName = rnative.test( doc.getElementsByClassName ) && assert(function( div ) {
			div.innerHTML = "<div class='a'></div><div class='a i'></div>";
	
			// Support: Safari<4
			// Catch class over-caching
			div.firstChild.className = "i";
			// Support: Opera<10
			// Catch gEBCN failure to find non-leading classes
			return div.getElementsByClassName("i").length === 2;
		});
	
		// Support: IE<10
		// Check if getElementById returns elements by name
		// The broken getElementById methods don't pick up programatically-set names,
		// so use a roundabout getElementsByName test
		support.getById = assert(function( div ) {
			docElem.appendChild( div ).id = expando;
			return !doc.getElementsByName || !doc.getElementsByName( expando ).length;
		});
	
		// ID find and filter
		if ( support.getById ) {
			Expr.find["ID"] = function( id, context ) {
				if ( typeof context.getElementById !== strundefined && documentIsHTML ) {
					var m = context.getElementById( id );
					// Check parentNode to catch when Blackberry 4.6 returns
					// nodes that are no longer in the document #6963
					return m && m.parentNode ? [ m ] : [];
				}
			};
			Expr.filter["ID"] = function( id ) {
				var attrId = id.replace( runescape, funescape );
				return function( elem ) {
					return elem.getAttribute("id") === attrId;
				};
			};
		} else {
			// Support: IE6/7
			// getElementById is not reliable as a find shortcut
			delete Expr.find["ID"];
	
			Expr.filter["ID"] =  function( id ) {
				var attrId = id.replace( runescape, funescape );
				return function( elem ) {
					var node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode("id");
					return node && node.value === attrId;
				};
			};
		}
	
		// Tag
		Expr.find["TAG"] = support.getElementsByTagName ?
			function( tag, context ) {
				if ( typeof context.getElementsByTagName !== strundefined ) {
					return context.getElementsByTagName( tag );
				}
			} :
			function( tag, context ) {
				var elem,
					tmp = [],
					i = 0,
					results = context.getElementsByTagName( tag );
	
				// Filter out possible comments
				if ( tag === "*" ) {
					while ( (elem = results[i++]) ) {
						if ( elem.nodeType === 1 ) {
							tmp.push( elem );
						}
					}
	
					return tmp;
				}
				return results;
			};
	
		// Class
		Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) {
			if ( typeof context.getElementsByClassName !== strundefined && documentIsHTML ) {
				return context.getElementsByClassName( className );
			}
		};
	
		/* QSA/matchesSelector
		---------------------------------------------------------------------- */
	
		// QSA and matchesSelector support
	
		// matchesSelector(:active) reports false when true (IE9/Opera 11.5)
		rbuggyMatches = [];
	
		// qSa(:focus) reports false when true (Chrome 21)
		// We allow this because of a bug in IE8/9 that throws an error
		// whenever `document.activeElement` is accessed on an iframe
		// So, we allow :focus to pass through QSA all the time to avoid the IE error
		// See http://bugs.jquery.com/ticket/13378
		rbuggyQSA = [];
	
		if ( (support.qsa = rnative.test( doc.querySelectorAll )) ) {
			// Build QSA regex
			// Regex strategy adopted from Diego Perini
			assert(function( div ) {
				// Select is set to empty string on purpose
				// This is to test IE's treatment of not explicitly
				// setting a boolean content attribute,
				// since its presence should be enough
				// http://bugs.jquery.com/ticket/12359
				div.innerHTML = "<select msallowclip=''><option selected=''></option></select>";
	
				// Support: IE8, Opera 11-12.16
				// Nothing should be selected when empty strings follow ^= or $= or *=
				// The test attribute must be unknown in Opera but "safe" for WinRT
				// http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section
				if ( div.querySelectorAll("[msallowclip^='']").length ) {
					rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" );
				}
	
				// Support: IE8
				// Boolean attributes and "value" are not treated correctly
				if ( !div.querySelectorAll("[selected]").length ) {
					rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" );
				}
	
				// Webkit/Opera - :checked should return selected option elements
				// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
				// IE8 throws error here and will not see later tests
				if ( !div.querySelectorAll(":checked").length ) {
					rbuggyQSA.push(":checked");
				}
			});
	
			assert(function( div ) {
				// Support: Windows 8 Native Apps
				// The type and name attributes are restricted during .innerHTML assignment
				var input = doc.createElement("input");
				input.setAttribute( "type", "hidden" );
				div.appendChild( input ).setAttribute( "name", "D" );
	
				// Support: IE8
				// Enforce case-sensitivity of name attribute
				if ( div.querySelectorAll("[name=d]").length ) {
					rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" );
				}
	
				// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
				// IE8 throws error here and will not see later tests
				if ( !div.querySelectorAll(":enabled").length ) {
					rbuggyQSA.push( ":enabled", ":disabled" );
				}
	
				// Opera 10-11 does not throw on post-comma invalid pseudos
				div.querySelectorAll("*,:x");
				rbuggyQSA.push(",.*:");
			});
		}
	
		if ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||
			docElem.webkitMatchesSelector ||
			docElem.mozMatchesSelector ||
			docElem.oMatchesSelector ||
			docElem.msMatchesSelector) )) ) {
	
			assert(function( div ) {
				// Check to see if it's possible to do matchesSelector
				// on a disconnected node (IE 9)
				support.disconnectedMatch = matches.call( div, "div" );
	
				// This should fail with an exception
				// Gecko does not error, returns false instead
				matches.call( div, "[s!='']:x" );
				rbuggyMatches.push( "!=", pseudos );
			});
		}
	
		rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") );
		rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") );
	
		/* Contains
		---------------------------------------------------------------------- */
		hasCompare = rnative.test( docElem.compareDocumentPosition );
	
		// Element contains another
		// Purposefully does not implement inclusive descendent
		// As in, an element does not contain itself
		contains = hasCompare || rnative.test( docElem.contains ) ?
			function( a, b ) {
				var adown = a.nodeType === 9 ? a.documentElement : a,
					bup = b && b.parentNode;
				return a === bup || !!( bup && bup.nodeType === 1 && (
					adown.contains ?
						adown.contains( bup ) :
						a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
				));
			} :
			function( a, b ) {
				if ( b ) {
					while ( (b = b.parentNode) ) {
						if ( b === a ) {
							return true;
						}
					}
				}
				return false;
			};
	
		/* Sorting
		---------------------------------------------------------------------- */
	
		// Document order sorting
		sortOrder = hasCompare ?
		function( a, b ) {
	
			// Flag for duplicate removal
			if ( a === b ) {
				hasDuplicate = true;
				return 0;
			}
	
			// Sort on method existence if only one input has compareDocumentPosition
			var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;
			if ( compare ) {
				return compare;
			}
	
			// Calculate position if both inputs belong to the same document
			compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?
				a.compareDocumentPosition( b ) :
	
				// Otherwise we know they are disconnected
				1;
	
			// Disconnected nodes
			if ( compare & 1 ||
				(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {
	
				// Choose the first element that is related to our preferred document
				if ( a === doc || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {
					return -1;
				}
				if ( b === doc || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {
					return 1;
				}
	
				// Maintain original order
				return sortInput ?
					( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :
					0;
			}
	
			return compare & 4 ? -1 : 1;
		} :
		function( a, b ) {
			// Exit early if the nodes are identical
			if ( a === b ) {
				hasDuplicate = true;
				return 0;
			}
	
			var cur,
				i = 0,
				aup = a.parentNode,
				bup = b.parentNode,
				ap = [ a ],
				bp = [ b ];
	
			// Parentless nodes are either documents or disconnected
			if ( !aup || !bup ) {
				return a === doc ? -1 :
					b === doc ? 1 :
					aup ? -1 :
					bup ? 1 :
					sortInput ?
					( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :
					0;
	
			// If the nodes are siblings, we can do a quick check
			} else if ( aup === bup ) {
				return siblingCheck( a, b );
			}
	
			// Otherwise we need full lists of their ancestors for comparison
			cur = a;
			while ( (cur = cur.parentNode) ) {
				ap.unshift( cur );
			}
			cur = b;
			while ( (cur = cur.parentNode) ) {
				bp.unshift( cur );
			}
	
			// Walk down the tree looking for a discrepancy
			while ( ap[i] === bp[i] ) {
				i++;
			}
	
			return i ?
				// Do a sibling check if the nodes have a common ancestor
				siblingCheck( ap[i], bp[i] ) :
	
				// Otherwise nodes in our document sort first
				ap[i] === preferredDoc ? -1 :
				bp[i] === preferredDoc ? 1 :
				0;
		};
	
		return doc;
	};
	
	Sizzle.matches = function( expr, elements ) {
		return Sizzle( expr, null, null, elements );
	};
	
	Sizzle.matchesSelector = function( elem, expr ) {
		// Set document vars if needed
		if ( ( elem.ownerDocument || elem ) !== document ) {
			setDocument( elem );
		}
	
		// Make sure that attribute selectors are quoted
		expr = expr.replace( rattributeQuotes, "='$1']" );
	
		if ( support.matchesSelector && documentIsHTML &&
			( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&
			( !rbuggyQSA     || !rbuggyQSA.test( expr ) ) ) {
	
			try {
				var ret = matches.call( elem, expr );
	
				// IE 9's matchesSelector returns false on disconnected nodes
				if ( ret || support.disconnectedMatch ||
						// As well, disconnected nodes are said to be in a document
						// fragment in IE 9
						elem.document && elem.document.nodeType !== 11 ) {
					return ret;
				}
			} catch(e) {}
		}
	
		return Sizzle( expr, document, null, [ elem ] ).length > 0;
	};
	
	Sizzle.contains = function( context, elem ) {
		// Set document vars if needed
		if ( ( context.ownerDocument || context ) !== document ) {
			setDocument( context );
		}
		return contains( context, elem );
	};
	
	Sizzle.attr = function( elem, name ) {
		// Set document vars if needed
		if ( ( elem.ownerDocument || elem ) !== document ) {
			setDocument( elem );
		}
	
		var fn = Expr.attrHandle[ name.toLowerCase() ],
			// Don't get fooled by Object.prototype properties (jQuery #13807)
			val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?
				fn( elem, name, !documentIsHTML ) :
				undefined;
	
		return val !== undefined ?
			val :
			support.attributes || !documentIsHTML ?
				elem.getAttribute( name ) :
				(val = elem.getAttributeNode(name)) && val.specified ?
					val.value :
					null;
	};
	
	Sizzle.error = function( msg ) {
		throw new Error( "Syntax error, unrecognized expression: " + msg );
	};
	
	/**
	 * Document sorting and removing duplicates
	 * @param {ArrayLike} results
	 */
	Sizzle.uniqueSort = function( results ) {
		var elem,
			duplicates = [],
			j = 0,
			i = 0;
	
		// Unless we *know* we can detect duplicates, assume their presence
		hasDuplicate = !support.detectDuplicates;
		sortInput = !support.sortStable && results.slice( 0 );
		results.sort( sortOrder );
	
		if ( hasDuplicate ) {
			while ( (elem = results[i++]) ) {
				if ( elem === results[ i ] ) {
					j = duplicates.push( i );
				}
			}
			while ( j-- ) {
				results.splice( duplicates[ j ], 1 );
			}
		}
	
		// Clear input after sorting to release objects
		// See https://github.com/jquery/sizzle/pull/225
		sortInput = null;
	
		return results;
	};
	
	/**
	 * Utility function for retrieving the text value of an array of DOM nodes
	 * @param {Array|Element} elem
	 */
	getText = Sizzle.getText = function( elem ) {
		var node,
			ret = "",
			i = 0,
			nodeType = elem.nodeType;
	
		if ( !nodeType ) {
			// If no nodeType, this is expected to be an array
			while ( (node = elem[i++]) ) {
				// Do not traverse comment nodes
				ret += getText( node );
			}
		} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
			// Use textContent for elements
			// innerText usage removed for consistency of new lines (jQuery #11153)
			if ( typeof elem.textContent === "string" ) {
				return elem.textContent;
			} else {
				// Traverse its children
				for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
					ret += getText( elem );
				}
			}
		} else if ( nodeType === 3 || nodeType === 4 ) {
			return elem.nodeValue;
		}
		// Do not include comment or processing instruction nodes
	
		return ret;
	};
	
	Expr = Sizzle.selectors = {
	
		// Can be adjusted by the user
		cacheLength: 50,
	
		createPseudo: markFunction,
	
		match: matchExpr,
	
		attrHandle: {},
	
		find: {},
	
		relative: {
			">": { dir: "parentNode", first: true },
			" ": { dir: "parentNode" },
			"+": { dir: "previousSibling", first: true },
			"~": { dir: "previousSibling" }
		},
	
		preFilter: {
			"ATTR": function( match ) {
				match[1] = match[1].replace( runescape, funescape );
	
				// Move the given value to match[3] whether quoted or unquoted
				match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape );
	
				if ( match[2] === "~=" ) {
					match[3] = " " + match[3] + " ";
				}
	
				return match.slice( 0, 4 );
			},
	
			"CHILD": function( match ) {
				/* matches from matchExpr["CHILD"]
					1 type (only|nth|...)
					2 what (child|of-type)
					3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
					4 xn-component of xn+y argument ([+-]?\d*n|)
					5 sign of xn-component
					6 x of xn-component
					7 sign of y-component
					8 y of y-component
				*/
				match[1] = match[1].toLowerCase();
	
				if ( match[1].slice( 0, 3 ) === "nth" ) {
					// nth-* requires argument
					if ( !match[3] ) {
						Sizzle.error( match[0] );
					}
	
					// numeric x and y parameters for Expr.filter.CHILD
					// remember that false/true cast respectively to 0/1
					match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) );
					match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" );
	
				// other types prohibit arguments
				} else if ( match[3] ) {
					Sizzle.error( match[0] );
				}
	
				return match;
			},
	
			"PSEUDO": function( match ) {
				var excess,
					unquoted = !match[6] && match[2];
	
				if ( matchExpr["CHILD"].test( match[0] ) ) {
					return null;
				}
	
				// Accept quoted arguments as-is
				if ( match[3] ) {
					match[2] = match[4] || match[5] || "";
	
				// Strip excess characters from unquoted arguments
				} else if ( unquoted && rpseudo.test( unquoted ) &&
					// Get excess from tokenize (recursively)
					(excess = tokenize( unquoted, true )) &&
					// advance to the next closing parenthesis
					(excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) {
	
					// excess is a negative index
					match[0] = match[0].slice( 0, excess );
					match[2] = unquoted.slice( 0, excess );
				}
	
				// Return only captures needed by the pseudo filter method (type and argument)
				return match.slice( 0, 3 );
			}
		},
	
		filter: {
	
			"TAG": function( nodeNameSelector ) {
				var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();
				return nodeNameSelector === "*" ?
					function() { return true; } :
					function( elem ) {
						return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
					};
			},
	
			"CLASS": function( className ) {
				var pattern = classCache[ className + " " ];
	
				return pattern ||
					(pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) &&
					classCache( className, function( elem ) {
						return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== strundefined && elem.getAttribute("class") || "" );
					});
			},
	
			"ATTR": function( name, operator, check ) {
				return function( elem ) {
					var result = Sizzle.attr( elem, name );
	
					if ( result == null ) {
						return operator === "!=";
					}
					if ( !operator ) {
						return true;
					}
	
					result += "";
	
					return operator === "=" ? result === check :
						operator === "!=" ? result !== check :
						operator === "^=" ? check && result.indexOf( check ) === 0 :
						operator === "*=" ? check && result.indexOf( check ) > -1 :
						operator === "$=" ? check && result.slice( -check.length ) === check :
						operator === "~=" ? ( " " + result + " " ).indexOf( check ) > -1 :
						operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :
						false;
				};
			},
	
			"CHILD": function( type, what, argument, first, last ) {
				var simple = type.slice( 0, 3 ) !== "nth",
					forward = type.slice( -4 ) !== "last",
					ofType = what === "of-type";
	
				return first === 1 && last === 0 ?
	
					// Shortcut for :nth-*(n)
					function( elem ) {
						return !!elem.parentNode;
					} :
	
					function( elem, context, xml ) {
						var cache, outerCache, node, diff, nodeIndex, start,
							dir = simple !== forward ? "nextSibling" : "previousSibling",
							parent = elem.parentNode,
							name = ofType && elem.nodeName.toLowerCase(),
							useCache = !xml && !ofType;
	
						if ( parent ) {
	
							// :(first|last|only)-(child|of-type)
							if ( simple ) {
								while ( dir ) {
									node = elem;
									while ( (node = node[ dir ]) ) {
										if ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) {
											return false;
										}
									}
									// Reverse direction for :only-* (if we haven't yet done so)
									start = dir = type === "only" && !start && "nextSibling";
								}
								return true;
							}
	
							start = [ forward ? parent.firstChild : parent.lastChild ];
	
							// non-xml :nth-child(...) stores cache data on `parent`
							if ( forward && useCache ) {
								// Seek `elem` from a previously-cached index
								outerCache = parent[ expando ] || (parent[ expando ] = {});
								cache = outerCache[ type ] || [];
								nodeIndex = cache[0] === dirruns && cache[1];
								diff = cache[0] === dirruns && cache[2];
								node = nodeIndex && parent.childNodes[ nodeIndex ];
	
								while ( (node = ++nodeIndex && node && node[ dir ] ||
	
									// Fallback to seeking `elem` from the start
									(diff = nodeIndex = 0) || start.pop()) ) {
	
									// When found, cache indexes on `parent` and break
									if ( node.nodeType === 1 && ++diff && node === elem ) {
										outerCache[ type ] = [ dirruns, nodeIndex, diff ];
										break;
									}
								}
	
							// Use previously-cached element index if available
							} else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) {
								diff = cache[1];
	
							// xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...)
							} else {
								// Use the same loop as above to seek `elem` from the start
								while ( (node = ++nodeIndex && node && node[ dir ] ||
									(diff = nodeIndex = 0) || start.pop()) ) {
	
									if ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) {
										// Cache the index of each encountered element
										if ( useCache ) {
											(node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ];
										}
	
										if ( node === elem ) {
											break;
										}
									}
								}
							}
	
							// Incorporate the offset, then check against cycle size
							diff -= last;
							return diff === first || ( diff % first === 0 && diff / first >= 0 );
						}
					};
			},
	
			"PSEUDO": function( pseudo, argument ) {
				// pseudo-class names are case-insensitive
				// http://www.w3.org/TR/selectors/#pseudo-classes
				// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
				// Remember that setFilters inherits from pseudos
				var args,
					fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
						Sizzle.error( "unsupported pseudo: " + pseudo );
	
				// The user may use createPseudo to indicate that
				// arguments are needed to create the filter function
				// just as Sizzle does
				if ( fn[ expando ] ) {
					return fn( argument );
				}
	
				// But maintain support for old signatures
				if ( fn.length > 1 ) {
					args = [ pseudo, pseudo, "", argument ];
					return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
						markFunction(function( seed, matches ) {
							var idx,
								matched = fn( seed, argument ),
								i = matched.length;
							while ( i-- ) {
								idx = indexOf.call( seed, matched[i] );
								seed[ idx ] = !( matches[ idx ] = matched[i] );
							}
						}) :
						function( elem ) {
							return fn( elem, 0, args );
						};
				}
	
				return fn;
			}
		},
	
		pseudos: {
			// Potentially complex pseudos
			"not": markFunction(function( selector ) {
				// Trim the selector passed to compile
				// to avoid treating leading and trailing
				// spaces as combinators
				var input = [],
					results = [],
					matcher = compile( selector.replace( rtrim, "$1" ) );
	
				return matcher[ expando ] ?
					markFunction(function( seed, matches, context, xml ) {
						var elem,
							unmatched = matcher( seed, null, xml, [] ),
							i = seed.length;
	
						// Match elements unmatched by `matcher`
						while ( i-- ) {
							if ( (elem = unmatched[i]) ) {
								seed[i] = !(matches[i] = elem);
							}
						}
					}) :
					function( elem, context, xml ) {
						input[0] = elem;
						matcher( input, null, xml, results );
						return !results.pop();
					};
			}),
	
			"has": markFunction(function( selector ) {
				return function( elem ) {
					return Sizzle( selector, elem ).length > 0;
				};
			}),
	
			"contains": markFunction(function( text ) {
				return function( elem ) {
					return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;
				};
			}),
	
			// "Whether an element is represented by a :lang() selector
			// is based solely on the element's language value
			// being equal to the identifier C,
			// or beginning with the identifier C immediately followed by "-".
			// The matching of C against the element's language value is performed case-insensitively.
			// The identifier C does not have to be a valid language name."
			// http://www.w3.org/TR/selectors/#lang-pseudo
			"lang": markFunction( function( lang ) {
				// lang value must be a valid identifier
				if ( !ridentifier.test(lang || "") ) {
					Sizzle.error( "unsupported lang: " + lang );
				}
				lang = lang.replace( runescape, funescape ).toLowerCase();
				return function( elem ) {
					var elemLang;
					do {
						if ( (elemLang = documentIsHTML ?
							elem.lang :
							elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) {
	
							elemLang = elemLang.toLowerCase();
							return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;
						}
					} while ( (elem = elem.parentNode) && elem.nodeType === 1 );
					return false;
				};
			}),
	
			// Miscellaneous
			"target": function( elem ) {
				var hash = window.location && window.location.hash;
				return hash && hash.slice( 1 ) === elem.id;
			},
	
			"root": function( elem ) {
				return elem === docElem;
			},
	
			"focus": function( elem ) {
				return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);
			},
	
			// Boolean properties
			"enabled": function( elem ) {
				return elem.disabled === false;
			},
	
			"disabled": function( elem ) {
				return elem.disabled === true;
			},
	
			"checked": function( elem ) {
				// In CSS3, :checked should return both checked and selected elements
				// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
				var nodeName = elem.nodeName.toLowerCase();
				return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected);
			},
	
			"selected": function( elem ) {
				// Accessing this property makes selected-by-default
				// options in Safari work properly
				if ( elem.parentNode ) {
					elem.parentNode.selectedIndex;
				}
	
				return elem.selected === true;
			},
	
			// Contents
			"empty": function( elem ) {
				// http://www.w3.org/TR/selectors/#empty-pseudo
				// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),
				//   but not by others (comment: 8; processing instruction: 7; etc.)
				// nodeType < 6 works because attributes (2) do not appear as children
				for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
					if ( elem.nodeType < 6 ) {
						return false;
					}
				}
				return true;
			},
	
			"parent": function( elem ) {
				return !Expr.pseudos["empty"]( elem );
			},
	
			// Element/input types
			"header": function( elem ) {
				return rheader.test( elem.nodeName );
			},
	
			"input": function( elem ) {
				return rinputs.test( elem.nodeName );
			},
	
			"button": function( elem ) {
				var name = elem.nodeName.toLowerCase();
				return name === "input" && elem.type === "button" || name === "button";
			},
	
			"text": function( elem ) {
				var attr;
				return elem.nodeName.toLowerCase() === "input" &&
					elem.type === "text" &&
	
					// Support: IE<8
					// New HTML5 attribute values (e.g., "search") appear with elem.type === "text"
					( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" );
			},
	
			// Position-in-collection
			"first": createPositionalPseudo(function() {
				return [ 0 ];
			}),
	
			"last": createPositionalPseudo(function( matchIndexes, length ) {
				return [ length - 1 ];
			}),
	
			"eq": createPositionalPseudo(function( matchIndexes, length, argument ) {
				return [ argument < 0 ? argument + length : argument ];
			}),
	
			"even": createPositionalPseudo(function( matchIndexes, length ) {
				var i = 0;
				for ( ; i < length; i += 2 ) {
					matchIndexes.push( i );
				}
				return matchIndexes;
			}),
	
			"odd": createPositionalPseudo(function( matchIndexes, length ) {
				var i = 1;
				for ( ; i < length; i += 2 ) {
					matchIndexes.push( i );
				}
				return matchIndexes;
			}),
	
			"lt": createPositionalPseudo(function( matchIndexes, length, argument ) {
				var i = argument < 0 ? argument + length : argument;
				for ( ; --i >= 0; ) {
					matchIndexes.push( i );
				}
				return matchIndexes;
			}),
	
			"gt": createPositionalPseudo(function( matchIndexes, length, argument ) {
				var i = argument < 0 ? argument + length : argument;
				for ( ; ++i < length; ) {
					matchIndexes.push( i );
				}
				return matchIndexes;
			})
		}
	};
	
	Expr.pseudos["nth"] = Expr.pseudos["eq"];
	
	// Add button/input type pseudos
	for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
		Expr.pseudos[ i ] = createInputPseudo( i );
	}
	for ( i in { submit: true, reset: true } ) {
		Expr.pseudos[ i ] = createButtonPseudo( i );
	}
	
	// Easy API for creating new setFilters
	function setFilters() {}
	setFilters.prototype = Expr.filters = Expr.pseudos;
	Expr.setFilters = new setFilters();
	
	tokenize = Sizzle.tokenize = function( selector, parseOnly ) {
		var matched, match, tokens, type,
			soFar, groups, preFilters,
			cached = tokenCache[ selector + " " ];
	
		if ( cached ) {
			return parseOnly ? 0 : cached.slice( 0 );
		}
	
		soFar = selector;
		groups = [];
		preFilters = Expr.preFilter;
	
		while ( soFar ) {
	
			// Comma and first run
			if ( !matched || (match = rcomma.exec( soFar )) ) {
				if ( match ) {
					// Don't consume trailing commas as valid
					soFar = soFar.slice( match[0].length ) || soFar;
				}
				groups.push( (tokens = []) );
			}
	
			matched = false;
	
			// Combinators
			if ( (match = rcombinators.exec( soFar )) ) {
				matched = match.shift();
				tokens.push({
					value: matched,
					// Cast descendant combinators to space
					type: match[0].replace( rtrim, " " )
				});
				soFar = soFar.slice( matched.length );
			}
	
			// Filters
			for ( type in Expr.filter ) {
				if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||
					(match = preFilters[ type ]( match ))) ) {
					matched = match.shift();
					tokens.push({
						value: matched,
						type: type,
						matches: match
					});
					soFar = soFar.slice( matched.length );
				}
			}
	
			if ( !matched ) {
				break;
			}
		}
	
		// Return the length of the invalid excess
		// if we're just parsing
		// Otherwise, throw an error or return tokens
		return parseOnly ?
			soFar.length :
			soFar ?
				Sizzle.error( selector ) :
				// Cache the tokens
				tokenCache( selector, groups ).slice( 0 );
	};
	
	function toSelector( tokens ) {
		var i = 0,
			len = tokens.length,
			selector = "";
		for ( ; i < len; i++ ) {
			selector += tokens[i].value;
		}
		return selector;
	}
	
	function addCombinator( matcher, combinator, base ) {
		var dir = combinator.dir,
			checkNonElements = base && dir === "parentNode",
			doneName = done++;
	
		return combinator.first ?
			// Check against closest ancestor/preceding element
			function( elem, context, xml ) {
				while ( (elem = elem[ dir ]) ) {
					if ( elem.nodeType === 1 || checkNonElements ) {
						return matcher( elem, context, xml );
					}
				}
			} :
	
			// Check against all ancestor/preceding elements
			function( elem, context, xml ) {
				var oldCache, outerCache,
					newCache = [ dirruns, doneName ];
	
				// We can't set arbitrary data on XML nodes, so they don't benefit from dir caching
				if ( xml ) {
					while ( (elem = elem[ dir ]) ) {
						if ( elem.nodeType === 1 || checkNonElements ) {
							if ( matcher( elem, context, xml ) ) {
								return true;
							}
						}
					}
				} else {
					while ( (elem = elem[ dir ]) ) {
						if ( elem.nodeType === 1 || checkNonElements ) {
							outerCache = elem[ expando ] || (elem[ expando ] = {});
							if ( (oldCache = outerCache[ dir ]) &&
								oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {
	
								// Assign to newCache so results back-propagate to previous elements
								return (newCache[ 2 ] = oldCache[ 2 ]);
							} else {
								// Reuse newcache so results back-propagate to previous elements
								outerCache[ dir ] = newCache;
	
								// A match means we're done; a fail means we have to keep checking
								if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {
									return true;
								}
							}
						}
					}
				}
			};
	}
	
	function elementMatcher( matchers ) {
		return matchers.length > 1 ?
			function( elem, context, xml ) {
				var i = matchers.length;
				while ( i-- ) {
					if ( !matchers[i]( elem, context, xml ) ) {
						return false;
					}
				}
				return true;
			} :
			matchers[0];
	}
	
	function multipleContexts( selector, contexts, results ) {
		var i = 0,
			len = contexts.length;
		for ( ; i < len; i++ ) {
			Sizzle( selector, contexts[i], results );
		}
		return results;
	}
	
	function condense( unmatched, map, filter, context, xml ) {
		var elem,
			newUnmatched = [],
			i = 0,
			len = unmatched.length,
			mapped = map != null;
	
		for ( ; i < len; i++ ) {
			if ( (elem = unmatched[i]) ) {
				if ( !filter || filter( elem, context, xml ) ) {
					newUnmatched.push( elem );
					if ( mapped ) {
						map.push( i );
					}
				}
			}
		}
	
		return newUnmatched;
	}
	
	function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
		if ( postFilter && !postFilter[ expando ] ) {
			postFilter = setMatcher( postFilter );
		}
		if ( postFinder && !postFinder[ expando ] ) {
			postFinder = setMatcher( postFinder, postSelector );
		}
		return markFunction(function( seed, results, context, xml ) {
			var temp, i, elem,
				preMap = [],
				postMap = [],
				preexisting = results.length,
	
				// Get initial elements from seed or context
				elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ),
	
				// Prefilter to get matcher input, preserving a map for seed-results synchronization
				matcherIn = preFilter && ( seed || !selector ) ?
					condense( elems, preMap, preFilter, context, xml ) :
					elems,
	
				matcherOut = matcher ?
					// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
					postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
	
						// ...intermediate processing is necessary
						[] :
	
						// ...otherwise use results directly
						results :
					matcherIn;
	
			// Find primary matches
			if ( matcher ) {
				matcher( matcherIn, matcherOut, context, xml );
			}
	
			// Apply postFilter
			if ( postFilter ) {
				temp = condense( matcherOut, postMap );
				postFilter( temp, [], context, xml );
	
				// Un-match failing elements by moving them back to matcherIn
				i = temp.length;
				while ( i-- ) {
					if ( (elem = temp[i]) ) {
						matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);
					}
				}
			}
	
			if ( seed ) {
				if ( postFinder || preFilter ) {
					if ( postFinder ) {
						// Get the final matcherOut by condensing this intermediate into postFinder contexts
						temp = [];
						i = matcherOut.length;
						while ( i-- ) {
							if ( (elem = matcherOut[i]) ) {
								// Restore matcherIn since elem is not yet a final match
								temp.push( (matcherIn[i] = elem) );
							}
						}
						postFinder( null, (matcherOut = []), temp, xml );
					}
	
					// Move matched elements from seed to results to keep them synchronized
					i = matcherOut.length;
					while ( i-- ) {
						if ( (elem = matcherOut[i]) &&
							(temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) {
	
							seed[temp] = !(results[temp] = elem);
						}
					}
				}
	
			// Add elements to results, through postFinder if defined
			} else {
				matcherOut = condense(
					matcherOut === results ?
						matcherOut.splice( preexisting, matcherOut.length ) :
						matcherOut
				);
				if ( postFinder ) {
					postFinder( null, results, matcherOut, xml );
				} else {
					push.apply( results, matcherOut );
				}
			}
		});
	}
	
	function matcherFromTokens( tokens ) {
		var checkContext, matcher, j,
			len = tokens.length,
			leadingRelative = Expr.relative[ tokens[0].type ],
			implicitRelative = leadingRelative || Expr.relative[" "],
			i = leadingRelative ? 1 : 0,
	
			// The foundational matcher ensures that elements are reachable from top-level context(s)
			matchContext = addCombinator( function( elem ) {
				return elem === checkContext;
			}, implicitRelative, true ),
			matchAnyContext = addCombinator( function( elem ) {
				return indexOf.call( checkContext, elem ) > -1;
			}, implicitRelative, true ),
			matchers = [ function( elem, context, xml ) {
				return ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
					(checkContext = context).nodeType ?
						matchContext( elem, context, xml ) :
						matchAnyContext( elem, context, xml ) );
			} ];
	
		for ( ; i < len; i++ ) {
			if ( (matcher = Expr.relative[ tokens[i].type ]) ) {
				matchers = [ addCombinator(elementMatcher( matchers ), matcher) ];
			} else {
				matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );
	
				// Return special upon seeing a positional matcher
				if ( matcher[ expando ] ) {
					// Find the next relative operator (if any) for proper handling
					j = ++i;
					for ( ; j < len; j++ ) {
						if ( Expr.relative[ tokens[j].type ] ) {
							break;
						}
					}
					return setMatcher(
						i > 1 && elementMatcher( matchers ),
						i > 1 && toSelector(
							// If the preceding token was a descendant combinator, insert an implicit any-element `*`
							tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" })
						).replace( rtrim, "$1" ),
						matcher,
						i < j && matcherFromTokens( tokens.slice( i, j ) ),
						j < len && matcherFromTokens( (tokens = tokens.slice( j )) ),
						j < len && toSelector( tokens )
					);
				}
				matchers.push( matcher );
			}
		}
	
		return elementMatcher( matchers );
	}
	
	function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
		var bySet = setMatchers.length > 0,
			byElement = elementMatchers.length > 0,
			superMatcher = function( seed, context, xml, results, outermost ) {
				var elem, j, matcher,
					matchedCount = 0,
					i = "0",
					unmatched = seed && [],
					setMatched = [],
					contextBackup = outermostContext,
					// We must always have either seed elements or outermost context
					elems = seed || byElement && Expr.find["TAG"]( "*", outermost ),
					// Use integer dirruns iff this is the outermost matcher
					dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),
					len = elems.length;
	
				if ( outermost ) {
					outermostContext = context !== document && context;
				}
	
				// Add elements passing elementMatchers directly to results
				// Keep `i` a string if there are no elements so `matchedCount` will be "00" below
				// Support: IE<9, Safari
				// Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id
				for ( ; i !== len && (elem = elems[i]) != null; i++ ) {
					if ( byElement && elem ) {
						j = 0;
						while ( (matcher = elementMatchers[j++]) ) {
							if ( matcher( elem, context, xml ) ) {
								results.push( elem );
								break;
							}
						}
						if ( outermost ) {
							dirruns = dirrunsUnique;
						}
					}
	
					// Track unmatched elements for set filters
					if ( bySet ) {
						// They will have gone through all possible matchers
						if ( (elem = !matcher && elem) ) {
							matchedCount--;
						}
	
						// Lengthen the array for every element, matched or not
						if ( seed ) {
							unmatched.push( elem );
						}
					}
				}
	
				// Apply set filters to unmatched elements
				matchedCount += i;
				if ( bySet && i !== matchedCount ) {
					j = 0;
					while ( (matcher = setMatchers[j++]) ) {
						matcher( unmatched, setMatched, context, xml );
					}
	
					if ( seed ) {
						// Reintegrate element matches to eliminate the need for sorting
						if ( matchedCount > 0 ) {
							while ( i-- ) {
								if ( !(unmatched[i] || setMatched[i]) ) {
									setMatched[i] = pop.call( results );
								}
							}
						}
	
						// Discard index placeholder values to get only actual matches
						setMatched = condense( setMatched );
					}
	
					// Add matches to results
					push.apply( results, setMatched );
	
					// Seedless set matches succeeding multiple successful matchers stipulate sorting
					if ( outermost && !seed && setMatched.length > 0 &&
						( matchedCount + setMatchers.length ) > 1 ) {
	
						Sizzle.uniqueSort( results );
					}
				}
	
				// Override manipulation of globals by nested matchers
				if ( outermost ) {
					dirruns = dirrunsUnique;
					outermostContext = contextBackup;
				}
	
				return unmatched;
			};
	
		return bySet ?
			markFunction( superMatcher ) :
			superMatcher;
	}
	
	compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {
		var i,
			setMatchers = [],
			elementMatchers = [],
			cached = compilerCache[ selector + " " ];
	
		if ( !cached ) {
			// Generate a function of recursive functions that can be used to check each element
			if ( !match ) {
				match = tokenize( selector );
			}
			i = match.length;
			while ( i-- ) {
				cached = matcherFromTokens( match[i] );
				if ( cached[ expando ] ) {
					setMatchers.push( cached );
				} else {
					elementMatchers.push( cached );
				}
			}
	
			// Cache the compiled function
			cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );
	
			// Save selector and tokenization
			cached.selector = selector;
		}
		return cached;
	};
	
	/**
	 * A low-level selection function that works with Sizzle's compiled
	 *  selector functions
	 * @param {String|Function} selector A selector or a pre-compiled
	 *  selector function built with Sizzle.compile
	 * @param {Element} context
	 * @param {Array} [results]
	 * @param {Array} [seed] A set of elements to match against
	 */
	select = Sizzle.select = function( selector, context, results, seed ) {
		var i, tokens, token, type, find,
			compiled = typeof selector === "function" && selector,
			match = !seed && tokenize( (selector = compiled.selector || selector) );
	
		results = results || [];
	
		// Try to minimize operations if there is no seed and only one group
		if ( match.length === 1 ) {
	
			// Take a shortcut and set the context if the root selector is an ID
			tokens = match[0] = match[0].slice( 0 );
			if ( tokens.length > 2 && (token = tokens[0]).type === "ID" &&
					support.getById && context.nodeType === 9 && documentIsHTML &&
					Expr.relative[ tokens[1].type ] ) {
	
				context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];
				if ( !context ) {
					return results;
	
				// Precompiled matchers will still verify ancestry, so step up a level
				} else if ( compiled ) {
					context = context.parentNode;
				}
	
				selector = selector.slice( tokens.shift().value.length );
			}
	
			// Fetch a seed set for right-to-left matching
			i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length;
			while ( i-- ) {
				token = tokens[i];
	
				// Abort if we hit a combinator
				if ( Expr.relative[ (type = token.type) ] ) {
					break;
				}
				if ( (find = Expr.find[ type ]) ) {
					// Search, expanding context for leading sibling combinators
					if ( (seed = find(
						token.matches[0].replace( runescape, funescape ),
						rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context
					)) ) {
	
						// If seed is empty or no tokens remain, we can return early
						tokens.splice( i, 1 );
						selector = seed.length && toSelector( tokens );
						if ( !selector ) {
							push.apply( results, seed );
							return results;
						}
	
						break;
					}
				}
			}
		}
	
		// Compile and execute a filtering function if one is not provided
		// Provide `match` to avoid retokenization if we modified the selector above
		( compiled || compile( selector, match ) )(
			seed,
			context,
			!documentIsHTML,
			results,
			rsibling.test( selector ) && testContext( context.parentNode ) || context
		);
		return results;
	};
	
	// One-time assignments
	
	// Sort stability
	support.sortStable = expando.split("").sort( sortOrder ).join("") === expando;
	
	// Support: Chrome<14
	// Always assume duplicates if they aren't passed to the comparison function
	support.detectDuplicates = !!hasDuplicate;
	
	// Initialize against the default document
	setDocument();
	
	// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)
	// Detached nodes confoundingly follow *each other*
	support.sortDetached = assert(function( div1 ) {
		// Should return 1, but returns 4 (following)
		return div1.compareDocumentPosition( document.createElement("div") ) & 1;
	});
	
	// Support: IE<8
	// Prevent attribute/property "interpolation"
	// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
	if ( !assert(function( div ) {
		div.innerHTML = "<a href='#'></a>";
		return div.firstChild.getAttribute("href") === "#" ;
	}) ) {
		addHandle( "type|href|height|width", function( elem, name, isXML ) {
			if ( !isXML ) {
				return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 );
			}
		});
	}
	
	// Support: IE<9
	// Use defaultValue in place of getAttribute("value")
	if ( !support.attributes || !assert(function( div ) {
		div.innerHTML = "<input/>";
		div.firstChild.setAttribute( "value", "" );
		return div.firstChild.getAttribute( "value" ) === "";
	}) ) {
		addHandle( "value", function( elem, name, isXML ) {
			if ( !isXML && elem.nodeName.toLowerCase() === "input" ) {
				return elem.defaultValue;
			}
		});
	}
	
	// Support: IE<9
	// Use getAttributeNode to fetch booleans when getAttribute lies
	if ( !assert(function( div ) {
		return div.getAttribute("disabled") == null;
	}) ) {
		addHandle( booleans, function( elem, name, isXML ) {
			var val;
			if ( !isXML ) {
				return elem[ name ] === true ? name.toLowerCase() :
						(val = elem.getAttributeNode( name )) && val.specified ?
						val.value :
					null;
			}
		});
	}
	
	return Sizzle;
	
	})( window );
	
	
	
	jQuery.find = Sizzle;
	jQuery.expr = Sizzle.selectors;
	jQuery.expr[":"] = jQuery.expr.pseudos;
	jQuery.unique = Sizzle.uniqueSort;
	jQuery.text = Sizzle.getText;
	jQuery.isXMLDoc = Sizzle.isXML;
	jQuery.contains = Sizzle.contains;
	
	
	
	var rneedsContext = jQuery.expr.match.needsContext;
	
	var rsingleTag = (/^<(\w+)\s*\/?>(?:<\/\1>|)$/);
	
	
	
	var risSimple = /^.[^:#\[\.,]*$/;
	
	// Implement the identical functionality for filter and not
	function winnow( elements, qualifier, not ) {
		if ( jQuery.isFunction( qualifier ) ) {
			return jQuery.grep( elements, function( elem, i ) {
				/* jshint -W018 */
				return !!qualifier.call( elem, i, elem ) !== not;
			});
	
		}
	
		if ( qualifier.nodeType ) {
			return jQuery.grep( elements, function( elem ) {
				return ( elem === qualifier ) !== not;
			});
	
		}
	
		if ( typeof qualifier === "string" ) {
			if ( risSimple.test( qualifier ) ) {
				return jQuery.filter( qualifier, elements, not );
			}
	
			qualifier = jQuery.filter( qualifier, elements );
		}
	
		return jQuery.grep( elements, function( elem ) {
			return ( indexOf.call( qualifier, elem ) >= 0 ) !== not;
		});
	}
	
	jQuery.filter = function( expr, elems, not ) {
		var elem = elems[ 0 ];
	
		if ( not ) {
			expr = ":not(" + expr + ")";
		}
	
		return elems.length === 1 && elem.nodeType === 1 ?
			jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] :
			jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {
				return elem.nodeType === 1;
			}));
	};
	
	jQuery.fn.extend({
		find: function( selector ) {
			var i,
				len = this.length,
				ret = [],
				self = this;
	
			if ( typeof selector !== "string" ) {
				return this.pushStack( jQuery( selector ).filter(function() {
					for ( i = 0; i < len; i++ ) {
						if ( jQuery.contains( self[ i ], this ) ) {
							return true;
						}
					}
				}) );
			}
	
			for ( i = 0; i < len; i++ ) {
				jQuery.find( selector, self[ i ], ret );
			}
	
			// Needed because $( selector, context ) becomes $( context ).find( selector )
			ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );
			ret.selector = this.selector ? this.selector + " " + selector : selector;
			return ret;
		},
		filter: function( selector ) {
			return this.pushStack( winnow(this, selector || [], false) );
		},
		not: function( selector ) {
			return this.pushStack( winnow(this, selector || [], true) );
		},
		is: function( selector ) {
			return !!winnow(
				this,
	
				// If this is a positional/relative selector, check membership in the returned set
				// so $("p:first").is("p:last") won't return true for a doc with two "p".
				typeof selector === "string" && rneedsContext.test( selector ) ?
					jQuery( selector ) :
					selector || [],
				false
			).length;
		}
	});
	
	
	// Initialize a jQuery object
	
	
	// A central reference to the root jQuery(document)
	var rootjQuery,
	
		// A simple way to check for HTML strings
		// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
		// Strict HTML recognition (#11290: must start with <)
		rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,
	
		init = jQuery.fn.init = function( selector, context ) {
			var match, elem;
	
			// HANDLE: $(""), $(null), $(undefined), $(false)
			if ( !selector ) {
				return this;
			}
	
			// Handle HTML strings
			if ( typeof selector === "string" ) {
				if ( selector[0] === "<" && selector[ selector.length - 1 ] === ">" && selector.length >= 3 ) {
					// Assume that strings that start and end with <> are HTML and skip the regex check
					match = [ null, selector, null ];
	
				} else {
					match = rquickExpr.exec( selector );
				}
	
				// Match html or make sure no context is specified for #id
				if ( match && (match[1] || !context) ) {
	
					// HANDLE: $(html) -> $(array)
					if ( match[1] ) {
						context = context instanceof jQuery ? context[0] : context;
	
						// scripts is true for back-compat
						// Intentionally let the error be thrown if parseHTML is not present
						jQuery.merge( this, jQuery.parseHTML(
							match[1],
							context && context.nodeType ? context.ownerDocument || context : document,
							true
						) );
	
						// HANDLE: $(html, props)
						if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) {
							for ( match in context ) {
								// Properties of context are called as methods if possible
								if ( jQuery.isFunction( this[ match ] ) ) {
									this[ match ]( context[ match ] );
	
								// ...and otherwise set as attributes
								} else {
									this.attr( match, context[ match ] );
								}
							}
						}
	
						return this;
	
					// HANDLE: $(#id)
					} else {
						elem = document.getElementById( match[2] );
	
						// Check parentNode to catch when Blackberry 4.6 returns
						// nodes that are no longer in the document #6963
						if ( elem && elem.parentNode ) {
							// Inject the element directly into the jQuery object
							this.length = 1;
							this[0] = elem;
						}
	
						this.context = document;
						this.selector = selector;
						return this;
					}
	
				// HANDLE: $(expr, $(...))
				} else if ( !context || context.jquery ) {
					return ( context || rootjQuery ).find( selector );
	
				// HANDLE: $(expr, context)
				// (which is just equivalent to: $(context).find(expr)
				} else {
					return this.constructor( context ).find( selector );
				}
	
			// HANDLE: $(DOMElement)
			} else if ( selector.nodeType ) {
				this.context = this[0] = selector;
				this.length = 1;
				return this;
	
			// HANDLE: $(function)
			// Shortcut for document ready
			} else if ( jQuery.isFunction( selector ) ) {
				return typeof rootjQuery.ready !== "undefined" ?
					rootjQuery.ready( selector ) :
					// Execute immediately if ready is not present
					selector( jQuery );
			}
	
			if ( selector.selector !== undefined ) {
				this.selector = selector.selector;
				this.context = selector.context;
			}
	
			return jQuery.makeArray( selector, this );
		};
	
	// Give the init function the jQuery prototype for later instantiation
	init.prototype = jQuery.fn;
	
	// Initialize central reference
	rootjQuery = jQuery( document );
	
	
	var rparentsprev = /^(?:parents|prev(?:Until|All))/,
		// methods guaranteed to produce a unique set when starting from a unique set
		guaranteedUnique = {
			children: true,
			contents: true,
			next: true,
			prev: true
		};
	
	jQuery.extend({
		dir: function( elem, dir, until ) {
			var matched = [],
				truncate = until !== undefined;
	
			while ( (elem = elem[ dir ]) && elem.nodeType !== 9 ) {
				if ( elem.nodeType === 1 ) {
					if ( truncate && jQuery( elem ).is( until ) ) {
						break;
					}
					matched.push( elem );
				}
			}
			return matched;
		},
	
		sibling: function( n, elem ) {
			var matched = [];
	
			for ( ; n; n = n.nextSibling ) {
				if ( n.nodeType === 1 && n !== elem ) {
					matched.push( n );
				}
			}
	
			return matched;
		}
	});
	
	jQuery.fn.extend({
		has: function( target ) {
			var targets = jQuery( target, this ),
				l = targets.length;
	
			return this.filter(function() {
				var i = 0;
				for ( ; i < l; i++ ) {
					if ( jQuery.contains( this, targets[i] ) ) {
						return true;
					}
				}
			});
		},
	
		closest: function( selectors, context ) {
			var cur,
				i = 0,
				l = this.length,
				matched = [],
				pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ?
					jQuery( selectors, context || this.context ) :
					0;
	
			for ( ; i < l; i++ ) {
				for ( cur = this[i]; cur && cur !== context; cur = cur.parentNode ) {
					// Always skip document fragments
					if ( cur.nodeType < 11 && (pos ?
						pos.index(cur) > -1 :
	
						// Don't pass non-elements to Sizzle
						cur.nodeType === 1 &&
							jQuery.find.matchesSelector(cur, selectors)) ) {
	
						matched.push( cur );
						break;
					}
				}
			}
	
			return this.pushStack( matched.length > 1 ? jQuery.unique( matched ) : matched );
		},
	
		// Determine the position of an element within
		// the matched set of elements
		index: function( elem ) {
	
			// No argument, return index in parent
			if ( !elem ) {
				return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;
			}
	
			// index in selector
			if ( typeof elem === "string" ) {
				return indexOf.call( jQuery( elem ), this[ 0 ] );
			}
	
			// Locate the position of the desired element
			return indexOf.call( this,
	
				// If it receives a jQuery object, the first element is used
				elem.jquery ? elem[ 0 ] : elem
			);
		},
	
		add: function( selector, context ) {
			return this.pushStack(
				jQuery.unique(
					jQuery.merge( this.get(), jQuery( selector, context ) )
				)
			);
		},
	
		addBack: function( selector ) {
			return this.add( selector == null ?
				this.prevObject : this.prevObject.filter(selector)
			);
		}
	});
	
	function sibling( cur, dir ) {
		while ( (cur = cur[dir]) && cur.nodeType !== 1 ) {}
		return cur;
	}
	
	jQuery.each({
		parent: function( elem ) {
			var parent = elem.parentNode;
			return parent && parent.nodeType !== 11 ? parent : null;
		},
		parents: function( elem ) {
			return jQuery.dir( elem, "parentNode" );
		},
		parentsUntil: function( elem, i, until ) {
			return jQuery.dir( elem, "parentNode", until );
		},
		next: function( elem ) {
			return sibling( elem, "nextSibling" );
		},
		prev: function( elem ) {
			return sibling( elem, "previousSibling" );
		},
		nextAll: function( elem ) {
			return jQuery.dir( elem, "nextSibling" );
		},
		prevAll: function( elem ) {
			return jQuery.dir( elem, "previousSibling" );
		},
		nextUntil: function( elem, i, until ) {
			return jQuery.dir( elem, "nextSibling", until );
		},
		prevUntil: function( elem, i, until ) {
			return jQuery.dir( elem, "previousSibling", until );
		},
		siblings: function( elem ) {
			return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem );
		},
		children: function( elem ) {
			return jQuery.sibling( elem.firstChild );
		},
		contents: function( elem ) {
			return elem.contentDocument || jQuery.merge( [], elem.childNodes );
		}
	}, function( name, fn ) {
		jQuery.fn[ name ] = function( until, selector ) {
			var matched = jQuery.map( this, fn, until );
	
			if ( name.slice( -5 ) !== "Until" ) {
				selector = until;
			}
	
			if ( selector && typeof selector === "string" ) {
				matched = jQuery.filter( selector, matched );
			}
	
			if ( this.length > 1 ) {
				// Remove duplicates
				if ( !guaranteedUnique[ name ] ) {
					jQuery.unique( matched );
				}
	
				// Reverse order for parents* and prev-derivatives
				if ( rparentsprev.test( name ) ) {
					matched.reverse();
				}
			}
	
			return this.pushStack( matched );
		};
	});
	var rnotwhite = (/\S+/g);
	
	
	
	// String to Object options format cache
	var optionsCache = {};
	
	// Convert String-formatted options into Object-formatted ones and store in cache
	function createOptions( options ) {
		var object = optionsCache[ options ] = {};
		jQuery.each( options.match( rnotwhite ) || [], function( _, flag ) {
			object[ flag ] = true;
		});
		return object;
	}
	
	/*
	 * Create a callback list using the following parameters:
	 *
	 *	options: an optional list of space-separated options that will change how
	 *			the callback list behaves or a more traditional option object
	 *
	 * By default a callback list will act like an event callback list and can be
	 * "fired" multiple times.
	 *
	 * Possible options:
	 *
	 *	once:			will ensure the callback list can only be fired once (like a Deferred)
	 *
	 *	memory:			will keep track of previous values and will call any callback added
	 *					after the list has been fired right away with the latest "memorized"
	 *					values (like a Deferred)
	 *
	 *	unique:			will ensure a callback can only be added once (no duplicate in the list)
	 *
	 *	stopOnFalse:	interrupt callings when a callback returns false
	 *
	 */
	jQuery.Callbacks = function( options ) {
	
		// Convert options from String-formatted to Object-formatted if needed
		// (we check in cache first)
		options = typeof options === "string" ?
			( optionsCache[ options ] || createOptions( options ) ) :
			jQuery.extend( {}, options );
	
		var // Last fire value (for non-forgettable lists)
			memory,
			// Flag to know if list was already fired
			fired,
			// Flag to know if list is currently firing
			firing,
			// First callback to fire (used internally by add and fireWith)
			firingStart,
			// End of the loop when firing
			firingLength,
			// Index of currently firing callback (modified by remove if needed)
			firingIndex,
			// Actual callback list
			list = [],
			// Stack of fire calls for repeatable lists
			stack = !options.once && [],
			// Fire callbacks
			fire = function( data ) {
				memory = options.memory && data;
				fired = true;
				firingIndex = firingStart || 0;
				firingStart = 0;
				firingLength = list.length;
				firing = true;
				for ( ; list && firingIndex < firingLength; firingIndex++ ) {
					if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) {
						memory = false; // To prevent further calls using add
						break;
					}
				}
				firing = false;
				if ( list ) {
					if ( stack ) {
						if ( stack.length ) {
							fire( stack.shift() );
						}
					} else if ( memory ) {
						list = [];
					} else {
						self.disable();
					}
				}
			},
			// Actual Callbacks object
			self = {
				// Add a callback or a collection of callbacks to the list
				add: function() {
					if ( list ) {
						// First, we save the current length
						var start = list.length;
						(function add( args ) {
							jQuery.each( args, function( _, arg ) {
								var type = jQuery.type( arg );
								if ( type === "function" ) {
									if ( !options.unique || !self.has( arg ) ) {
										list.push( arg );
									}
								} else if ( arg && arg.length && type !== "string" ) {
									// Inspect recursively
									add( arg );
								}
							});
						})( arguments );
						// Do we need to add the callbacks to the
						// current firing batch?
						if ( firing ) {
							firingLength = list.length;
						// With memory, if we're not firing then
						// we should call right away
						} else if ( memory ) {
							firingStart = start;
							fire( memory );
						}
					}
					return this;
				},
				// Remove a callback from the list
				remove: function() {
					if ( list ) {
						jQuery.each( arguments, function( _, arg ) {
							var index;
							while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
								list.splice( index, 1 );
								// Handle firing indexes
								if ( firing ) {
									if ( index <= firingLength ) {
										firingLength--;
									}
									if ( index <= firingIndex ) {
										firingIndex--;
									}
								}
							}
						});
					}
					return this;
				},
				// Check if a given callback is in the list.
				// If no argument is given, return whether or not list has callbacks attached.
				has: function( fn ) {
					return fn ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length );
				},
				// Remove all callbacks from the list
				empty: function() {
					list = [];
					firingLength = 0;
					return this;
				},
				// Have the list do nothing anymore
				disable: function() {
					list = stack = memory = undefined;
					return this;
				},
				// Is it disabled?
				disabled: function() {
					return !list;
				},
				// Lock the list in its current state
				lock: function() {
					stack = undefined;
					if ( !memory ) {
						self.disable();
					}
					return this;
				},
				// Is it locked?
				locked: function() {
					return !stack;
				},
				// Call all callbacks with the given context and arguments
				fireWith: function( context, args ) {
					if ( list && ( !fired || stack ) ) {
						args = args || [];
						args = [ context, args.slice ? args.slice() : args ];
						if ( firing ) {
							stack.push( args );
						} else {
							fire( args );
						}
					}
					return this;
				},
				// Call all the callbacks with the given arguments
				fire: function() {
					self.fireWith( this, arguments );
					return this;
				},
				// To know if the callbacks have already been called at least once
				fired: function() {
					return !!fired;
				}
			};
	
		return self;
	};
	
	
	jQuery.extend({
	
		Deferred: function( func ) {
			var tuples = [
					// action, add listener, listener list, final state
					[ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ],
					[ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ],
					[ "notify", "progress", jQuery.Callbacks("memory") ]
				],
				state = "pending",
				promise = {
					state: function() {
						return state;
					},
					always: function() {
						deferred.done( arguments ).fail( arguments );
						return this;
					},
					then: function( /* fnDone, fnFail, fnProgress */ ) {
						var fns = arguments;
						return jQuery.Deferred(function( newDefer ) {
							jQuery.each( tuples, function( i, tuple ) {
								var fn = jQuery.isFunction( fns[ i ] ) && fns[ i ];
								// deferred[ done | fail | progress ] for forwarding actions to newDefer
								deferred[ tuple[1] ](function() {
									var returned = fn && fn.apply( this, arguments );
									if ( returned && jQuery.isFunction( returned.promise ) ) {
										returned.promise()
											.done( newDefer.resolve )
											.fail( newDefer.reject )
											.progress( newDefer.notify );
									} else {
										newDefer[ tuple[ 0 ] + "With" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments );
									}
								});
							});
							fns = null;
						}).promise();
					},
					// Get a promise for this deferred
					// If obj is provided, the promise aspect is added to the object
					promise: function( obj ) {
						return obj != null ? jQuery.extend( obj, promise ) : promise;
					}
				},
				deferred = {};
	
			// Keep pipe for back-compat
			promise.pipe = promise.then;
	
			// Add list-specific methods
			jQuery.each( tuples, function( i, tuple ) {
				var list = tuple[ 2 ],
					stateString = tuple[ 3 ];
	
				// promise[ done | fail | progress ] = list.add
				promise[ tuple[1] ] = list.add;
	
				// Handle state
				if ( stateString ) {
					list.add(function() {
						// state = [ resolved | rejected ]
						state = stateString;
	
					// [ reject_list | resolve_list ].disable; progress_list.lock
					}, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );
				}
	
				// deferred[ resolve | reject | notify ]
				deferred[ tuple[0] ] = function() {
					deferred[ tuple[0] + "With" ]( this === deferred ? promise : this, arguments );
					return this;
				};
				deferred[ tuple[0] + "With" ] = list.fireWith;
			});
	
			// Make the deferred a promise
			promise.promise( deferred );
	
			// Call given func if any
			if ( func ) {
				func.call( deferred, deferred );
			}
	
			// All done!
			return deferred;
		},
	
		// Deferred helper
		when: function( subordinate /* , ..., subordinateN */ ) {
			var i = 0,
				resolveValues = slice.call( arguments ),
				length = resolveValues.length,
	
				// the count of uncompleted subordinates
				remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,
	
				// the master Deferred. If resolveValues consist of only a single Deferred, just use that.
				deferred = remaining === 1 ? subordinate : jQuery.Deferred(),
	
				// Update function for both resolve and progress values
				updateFunc = function( i, contexts, values ) {
					return function( value ) {
						contexts[ i ] = this;
						values[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;
						if ( values === progressValues ) {
							deferred.notifyWith( contexts, values );
						} else if ( !( --remaining ) ) {
							deferred.resolveWith( contexts, values );
						}
					};
				},
	
				progressValues, progressContexts, resolveContexts;
	
			// add listeners to Deferred subordinates; treat others as resolved
			if ( length > 1 ) {
				progressValues = new Array( length );
				progressContexts = new Array( length );
				resolveContexts = new Array( length );
				for ( ; i < length; i++ ) {
					if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {
						resolveValues[ i ].promise()
							.done( updateFunc( i, resolveContexts, resolveValues ) )
							.fail( deferred.reject )
							.progress( updateFunc( i, progressContexts, progressValues ) );
					} else {
						--remaining;
					}
				}
			}
	
			// if we're not waiting on anything, resolve the master
			if ( !remaining ) {
				deferred.resolveWith( resolveContexts, resolveValues );
			}
	
			return deferred.promise();
		}
	});
	
	
	// The deferred used on DOM ready
	var readyList;
	
	jQuery.fn.ready = function( fn ) {
		// Add the callback
		jQuery.ready.promise().done( fn );
	
		return this;
	};
	
	jQuery.extend({
		// Is the DOM ready to be used? Set to true once it occurs.
		isReady: false,
	
		// A counter to track how many items to wait for before
		// the ready event fires. See #6781
		readyWait: 1,
	
		// Hold (or release) the ready event
		holdReady: function( hold ) {
			if ( hold ) {
				jQuery.readyWait++;
			} else {
				jQuery.ready( true );
			}
		},
	
		// Handle when the DOM is ready
		ready: function( wait ) {
	
			// Abort if there are pending holds or we're already ready
			if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
				return;
			}
	
			// Remember that the DOM is ready
			jQuery.isReady = true;
	
			// If a normal DOM Ready event fired, decrement, and wait if need be
			if ( wait !== true && --jQuery.readyWait > 0 ) {
				return;
			}
	
			// If there are functions bound, to execute
			readyList.resolveWith( document, [ jQuery ] );
	
			// Trigger any bound ready events
			if ( jQuery.fn.triggerHandler ) {
				jQuery( document ).triggerHandler( "ready" );
				jQuery( document ).off( "ready" );
			}
		}
	});
	
	/**
	 * The ready event handler and self cleanup method
	 */
	function completed() {
		document.removeEventListener( "DOMContentLoaded", completed, false );
		window.removeEventListener( "load", completed, false );
		jQuery.ready();
	}
	
	jQuery.ready.promise = function( obj ) {
		if ( !readyList ) {
	
			readyList = jQuery.Deferred();
	
			// Catch cases where $(document).ready() is called after the browser event has already occurred.
			// we once tried to use readyState "interactive" here, but it caused issues like the one
			// discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15
			if ( document.readyState === "complete" ) {
				// Handle it asynchronously to allow scripts the opportunity to delay ready
				setTimeout( jQuery.ready );
	
			} else {
	
				// Use the handy event callback
				document.addEventListener( "DOMContentLoaded", completed, false );
	
				// A fallback to window.onload, that will always work
				window.addEventListener( "load", completed, false );
			}
		}
		return readyList.promise( obj );
	};
	
	// Kick off the DOM ready check even if the user does not
	jQuery.ready.promise();
	
	
	
	
	// Multifunctional method to get and set values of a collection
	// The value/s can optionally be executed if it's a function
	var access = jQuery.access = function( elems, fn, key, value, chainable, emptyGet, raw ) {
		var i = 0,
			len = elems.length,
			bulk = key == null;
	
		// Sets many values
		if ( jQuery.type( key ) === "object" ) {
			chainable = true;
			for ( i in key ) {
				jQuery.access( elems, fn, i, key[i], true, emptyGet, raw );
			}
	
		// Sets one value
		} else if ( value !== undefined ) {
			chainable = true;
	
			if ( !jQuery.isFunction( value ) ) {
				raw = true;
			}
	
			if ( bulk ) {
				// Bulk operations run against the entire set
				if ( raw ) {
					fn.call( elems, value );
					fn = null;
	
				// ...except when executing function values
				} else {
					bulk = fn;
					fn = function( elem, key, value ) {
						return bulk.call( jQuery( elem ), value );
					};
				}
			}
	
			if ( fn ) {
				for ( ; i < len; i++ ) {
					fn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) );
				}
			}
		}
	
		return chainable ?
			elems :
	
			// Gets
			bulk ?
				fn.call( elems ) :
				len ? fn( elems[0], key ) : emptyGet;
	};
	
	
	/**
	 * Determines whether an object can have data
	 */
	jQuery.acceptData = function( owner ) {
		// Accepts only:
		//  - Node
		//    - Node.ELEMENT_NODE
		//    - Node.DOCUMENT_NODE
		//  - Object
		//    - Any
		/* jshint -W018 */
		return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );
	};
	
	
	function Data() {
		// Support: Android < 4,
		// Old WebKit does not have Object.preventExtensions/freeze method,
		// return new empty object instead with no [[set]] accessor
		Object.defineProperty( this.cache = {}, 0, {
			get: function() {
				return {};
			}
		});
	
		this.expando = jQuery.expando + Math.random();
	}
	
	Data.uid = 1;
	Data.accepts = jQuery.acceptData;
	
	Data.prototype = {
		key: function( owner ) {
			// We can accept data for non-element nodes in modern browsers,
			// but we should not, see #8335.
			// Always return the key for a frozen object.
			if ( !Data.accepts( owner ) ) {
				return 0;
			}
	
			var descriptor = {},
				// Check if the owner object already has a cache key
				unlock = owner[ this.expando ];
	
			// If not, create one
			if ( !unlock ) {
				unlock = Data.uid++;
	
				// Secure it in a non-enumerable, non-writable property
				try {
					descriptor[ this.expando ] = { value: unlock };
					Object.defineProperties( owner, descriptor );
	
				// Support: Android < 4
				// Fallback to a less secure definition
				} catch ( e ) {
					descriptor[ this.expando ] = unlock;
					jQuery.extend( owner, descriptor );
				}
			}
	
			// Ensure the cache object
			if ( !this.cache[ unlock ] ) {
				this.cache[ unlock ] = {};
			}
	
			return unlock;
		},
		set: function( owner, data, value ) {
			var prop,
				// There may be an unlock assigned to this node,
				// if there is no entry for this "owner", create one inline
				// and set the unlock as though an owner entry had always existed
				unlock = this.key( owner ),
				cache = this.cache[ unlock ];
	
			// Handle: [ owner, key, value ] args
			if ( typeof data === "string" ) {
				cache[ data ] = value;
	
			// Handle: [ owner, { properties } ] args
			} else {
				// Fresh assignments by object are shallow copied
				if ( jQuery.isEmptyObject( cache ) ) {
					jQuery.extend( this.cache[ unlock ], data );
				// Otherwise, copy the properties one-by-one to the cache object
				} else {
					for ( prop in data ) {
						cache[ prop ] = data[ prop ];
					}
				}
			}
			return cache;
		},
		get: function( owner, key ) {
			// Either a valid cache is found, or will be created.
			// New caches will be created and the unlock returned,
			// allowing direct access to the newly created
			// empty data object. A valid owner object must be provided.
			var cache = this.cache[ this.key( owner ) ];
	
			return key === undefined ?
				cache : cache[ key ];
		},
		access: function( owner, key, value ) {
			var stored;
			// In cases where either:
			//
			//   1. No key was specified
			//   2. A string key was specified, but no value provided
			//
			// Take the "read" path and allow the get method to determine
			// which value to return, respectively either:
			//
			//   1. The entire cache object
			//   2. The data stored at the key
			//
			if ( key === undefined ||
					((key && typeof key === "string") && value === undefined) ) {
	
				stored = this.get( owner, key );
	
				return stored !== undefined ?
					stored : this.get( owner, jQuery.camelCase(key) );
			}
	
			// [*]When the key is not a string, or both a key and value
			// are specified, set or extend (existing objects) with either:
			//
			//   1. An object of properties
			//   2. A key and value
			//
			this.set( owner, key, value );
	
			// Since the "set" path can have two possible entry points
			// return the expected data based on which path was taken[*]
			return value !== undefined ? value : key;
		},
		remove: function( owner, key ) {
			var i, name, camel,
				unlock = this.key( owner ),
				cache = this.cache[ unlock ];
	
			if ( key === undefined ) {
				this.cache[ unlock ] = {};
	
			} else {
				// Support array or space separated string of keys
				if ( jQuery.isArray( key ) ) {
					// If "name" is an array of keys...
					// When data is initially created, via ("key", "val") signature,
					// keys will be converted to camelCase.
					// Since there is no way to tell _how_ a key was added, remove
					// both plain key and camelCase key. #12786
					// This will only penalize the array argument path.
					name = key.concat( key.map( jQuery.camelCase ) );
				} else {
					camel = jQuery.camelCase( key );
					// Try the string as a key before any manipulation
					if ( key in cache ) {
						name = [ key, camel ];
					} else {
						// If a key with the spaces exists, use it.
						// Otherwise, create an array by matching non-whitespace
						name = camel;
						name = name in cache ?
							[ name ] : ( name.match( rnotwhite ) || [] );
					}
				}
	
				i = name.length;
				while ( i-- ) {
					delete cache[ name[ i ] ];
				}
			}
		},
		hasData: function( owner ) {
			return !jQuery.isEmptyObject(
				this.cache[ owner[ this.expando ] ] || {}
			);
		},
		discard: function( owner ) {
			if ( owner[ this.expando ] ) {
				delete this.cache[ owner[ this.expando ] ];
			}
		}
	};
	var data_priv = new Data();
	
	var data_user = new Data();
	
	
	
	/*
		Implementation Summary
	
		1. Enforce API surface and semantic compatibility with 1.9.x branch
		2. Improve the module's maintainability by reducing the storage
			paths to a single mechanism.
		3. Use the same single mechanism to support "private" and "user" data.
		4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData)
		5. Avoid exposing implementation details on user objects (eg. expando properties)
		6. Provide a clear path for implementation upgrade to WeakMap in 2014
	*/
	var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
		rmultiDash = /([A-Z])/g;
	
	function dataAttr( elem, key, data ) {
		var name;
	
		// If nothing was found internally, try to fetch any
		// data from the HTML5 data-* attribute
		if ( data === undefined && elem.nodeType === 1 ) {
			name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase();
			data = elem.getAttribute( name );
	
			if ( typeof data === "string" ) {
				try {
					data = data === "true" ? true :
						data === "false" ? false :
						data === "null" ? null :
						// Only convert to a number if it doesn't change the string
						+data + "" === data ? +data :
						rbrace.test( data ) ? jQuery.parseJSON( data ) :
						data;
				} catch( e ) {}
	
				// Make sure we set the data so it isn't changed later
				data_user.set( elem, key, data );
			} else {
				data = undefined;
			}
		}
		return data;
	}
	
	jQuery.extend({
		hasData: function( elem ) {
			return data_user.hasData( elem ) || data_priv.hasData( elem );
		},
	
		data: function( elem, name, data ) {
			return data_user.access( elem, name, data );
		},
	
		removeData: function( elem, name ) {
			data_user.remove( elem, name );
		},
	
		// TODO: Now that all calls to _data and _removeData have been replaced
		// with direct calls to data_priv methods, these can be deprecated.
		_data: function( elem, name, data ) {
			return data_priv.access( elem, name, data );
		},
	
		_removeData: function( elem, name ) {
			data_priv.remove( elem, name );
		}
	});
	
	jQuery.fn.extend({
		data: function( key, value ) {
			var i, name, data,
				elem = this[ 0 ],
				attrs = elem && elem.attributes;
	
			// Gets all values
			if ( key === undefined ) {
				if ( this.length ) {
					data = data_user.get( elem );
	
					if ( elem.nodeType === 1 && !data_priv.get( elem, "hasDataAttrs" ) ) {
						i = attrs.length;
						while ( i-- ) {
	
							// Support: IE11+
							// The attrs elements can be null (#14894)
							if ( attrs[ i ] ) {
								name = attrs[ i ].name;
								if ( name.indexOf( "data-" ) === 0 ) {
									name = jQuery.camelCase( name.slice(5) );
									dataAttr( elem, name, data[ name ] );
								}
							}
						}
						data_priv.set( elem, "hasDataAttrs", true );
					}
				}
	
				return data;
			}
	
			// Sets multiple values
			if ( typeof key === "object" ) {
				return this.each(function() {
					data_user.set( this, key );
				});
			}
	
			return access( this, function( value ) {
				var data,
					camelKey = jQuery.camelCase( key );
	
				// The calling jQuery object (element matches) is not empty
				// (and therefore has an element appears at this[ 0 ]) and the
				// `value` parameter was not undefined. An empty jQuery object
				// will result in `undefined` for elem = this[ 0 ] which will
				// throw an exception if an attempt to read a data cache is made.
				if ( elem && value === undefined ) {
					// Attempt to get data from the cache
					// with the key as-is
					data = data_user.get( elem, key );
					if ( data !== undefined ) {
						return data;
					}
	
					// Attempt to get data from the cache
					// with the key camelized
					data = data_user.get( elem, camelKey );
					if ( data !== undefined ) {
						return data;
					}
	
					// Attempt to "discover" the data in
					// HTML5 custom data-* attrs
					data = dataAttr( elem, camelKey, undefined );
					if ( data !== undefined ) {
						return data;
					}
	
					// We tried really hard, but the data doesn't exist.
					return;
				}
	
				// Set the data...
				this.each(function() {
					// First, attempt to store a copy or reference of any
					// data that might've been store with a camelCased key.
					var data = data_user.get( this, camelKey );
	
					// For HTML5 data-* attribute interop, we have to
					// store property names with dashes in a camelCase form.
					// This might not apply to all properties...*
					data_user.set( this, camelKey, value );
	
					// *... In the case of properties that might _actually_
					// have dashes, we need to also store a copy of that
					// unchanged property.
					if ( key.indexOf("-") !== -1 && data !== undefined ) {
						data_user.set( this, key, value );
					}
				});
			}, null, value, arguments.length > 1, null, true );
		},
	
		removeData: function( key ) {
			return this.each(function() {
				data_user.remove( this, key );
			});
		}
	});
	
	
	jQuery.extend({
		queue: function( elem, type, data ) {
			var queue;
	
			if ( elem ) {
				type = ( type || "fx" ) + "queue";
				queue = data_priv.get( elem, type );
	
				// Speed up dequeue by getting out quickly if this is just a lookup
				if ( data ) {
					if ( !queue || jQuery.isArray( data ) ) {
						queue = data_priv.access( elem, type, jQuery.makeArray(data) );
					} else {
						queue.push( data );
					}
				}
				return queue || [];
			}
		},
	
		dequeue: function( elem, type ) {
			type = type || "fx";
	
			var queue = jQuery.queue( elem, type ),
				startLength = queue.length,
				fn = queue.shift(),
				hooks = jQuery._queueHooks( elem, type ),
				next = function() {
					jQuery.dequeue( elem, type );
				};
	
			// If the fx queue is dequeued, always remove the progress sentinel
			if ( fn === "inprogress" ) {
				fn = queue.shift();
				startLength--;
			}
	
			if ( fn ) {
	
				// Add a progress sentinel to prevent the fx queue from being
				// automatically dequeued
				if ( type === "fx" ) {
					queue.unshift( "inprogress" );
				}
	
				// clear up the last queue stop function
				delete hooks.stop;
				fn.call( elem, next, hooks );
			}
	
			if ( !startLength && hooks ) {
				hooks.empty.fire();
			}
		},
	
		// not intended for public consumption - generates a queueHooks object, or returns the current one
		_queueHooks: function( elem, type ) {
			var key = type + "queueHooks";
			return data_priv.get( elem, key ) || data_priv.access( elem, key, {
				empty: jQuery.Callbacks("once memory").add(function() {
					data_priv.remove( elem, [ type + "queue", key ] );
				})
			});
		}
	});
	
	jQuery.fn.extend({
		queue: function( type, data ) {
			var setter = 2;
	
			if ( typeof type !== "string" ) {
				data = type;
				type = "fx";
				setter--;
			}
	
			if ( arguments.length < setter ) {
				return jQuery.queue( this[0], type );
			}
	
			return data === undefined ?
				this :
				this.each(function() {
					var queue = jQuery.queue( this, type, data );
	
					// ensure a hooks for this queue
					jQuery._queueHooks( this, type );
	
					if ( type === "fx" && queue[0] !== "inprogress" ) {
						jQuery.dequeue( this, type );
					}
				});
		},
		dequeue: function( type ) {
			return this.each(function() {
				jQuery.dequeue( this, type );
			});
		},
		clearQueue: function( type ) {
			return this.queue( type || "fx", [] );
		},
		// Get a promise resolved when queues of a certain type
		// are emptied (fx is the type by default)
		promise: function( type, obj ) {
			var tmp,
				count = 1,
				defer = jQuery.Deferred(),
				elements = this,
				i = this.length,
				resolve = function() {
					if ( !( --count ) ) {
						defer.resolveWith( elements, [ elements ] );
					}
				};
	
			if ( typeof type !== "string" ) {
				obj = type;
				type = undefined;
			}
			type = type || "fx";
	
			while ( i-- ) {
				tmp = data_priv.get( elements[ i ], type + "queueHooks" );
				if ( tmp && tmp.empty ) {
					count++;
					tmp.empty.add( resolve );
				}
			}
			resolve();
			return defer.promise( obj );
		}
	});
	var pnum = (/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/).source;
	
	var cssExpand = [ "Top", "Right", "Bottom", "Left" ];
	
	var isHidden = function( elem, el ) {
			// isHidden might be called from jQuery#filter function;
			// in that case, element will be second argument
			elem = el || elem;
			return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem );
		};
	
	var rcheckableType = (/^(?:checkbox|radio)$/i);
	
	
	
	(function() {
		var fragment = document.createDocumentFragment(),
			div = fragment.appendChild( document.createElement( "div" ) ),
			input = document.createElement( "input" );
	
		// #11217 - WebKit loses check when the name is after the checked attribute
		// Support: Windows Web Apps (WWA)
		// `name` and `type` need .setAttribute for WWA
		input.setAttribute( "type", "radio" );
		input.setAttribute( "checked", "checked" );
		input.setAttribute( "name", "t" );
	
		div.appendChild( input );
	
		// Support: Safari 5.1, iOS 5.1, Android 4.x, Android 2.3
		// old WebKit doesn't clone checked state correctly in fragments
		support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;
	
		// Make sure textarea (and checkbox) defaultValue is properly cloned
		// Support: IE9-IE11+
		div.innerHTML = "<textarea>x</textarea>";
		support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;
	})();
	var strundefined = typeof undefined;
	
	
	
	support.focusinBubbles = "onfocusin" in window;
	
	
	var
		rkeyEvent = /^key/,
		rmouseEvent = /^(?:mouse|pointer|contextmenu)|click/,
		rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
		rtypenamespace = /^([^.]*)(?:\.(.+)|)$/;
	
	function returnTrue() {
		return true;
	}
	
	function returnFalse() {
		return false;
	}
	
	function safeActiveElement() {
		try {
			return document.activeElement;
		} catch ( err ) { }
	}
	
	/*
	 * Helper functions for managing events -- not part of the public interface.
	 * Props to Dean Edwards' addEvent library for many of the ideas.
	 */
	jQuery.event = {
	
		global: {},
	
		add: function( elem, types, handler, data, selector ) {
	
			var handleObjIn, eventHandle, tmp,
				events, t, handleObj,
				special, handlers, type, namespaces, origType,
				elemData = data_priv.get( elem );
	
			// Don't attach events to noData or text/comment nodes (but allow plain objects)
			if ( !elemData ) {
				return;
			}
	
			// Caller can pass in an object of custom data in lieu of the handler
			if ( handler.handler ) {
				handleObjIn = handler;
				handler = handleObjIn.handler;
				selector = handleObjIn.selector;
			}
	
			// Make sure that the handler has a unique ID, used to find/remove it later
			if ( !handler.guid ) {
				handler.guid = jQuery.guid++;
			}
	
			// Init the element's event structure and main handler, if this is the first
			if ( !(events = elemData.events) ) {
				events = elemData.events = {};
			}
			if ( !(eventHandle = elemData.handle) ) {
				eventHandle = elemData.handle = function( e ) {
					// Discard the second event of a jQuery.event.trigger() and
					// when an event is called after a page has unloaded
					return typeof jQuery !== strundefined && jQuery.event.triggered !== e.type ?
						jQuery.event.dispatch.apply( elem, arguments ) : undefined;
				};
			}
	
			// Handle multiple events separated by a space
			types = ( types || "" ).match( rnotwhite ) || [ "" ];
			t = types.length;
			while ( t-- ) {
				tmp = rtypenamespace.exec( types[t] ) || [];
				type = origType = tmp[1];
				namespaces = ( tmp[2] || "" ).split( "." ).sort();
	
				// There *must* be a type, no attaching namespace-only handlers
				if ( !type ) {
					continue;
				}
	
				// If event changes its type, use the special event handlers for the changed type
				special = jQuery.event.special[ type ] || {};
	
				// If selector defined, determine special event api type, otherwise given type
				type = ( selector ? special.delegateType : special.bindType ) || type;
	
				// Update special based on newly reset type
				special = jQuery.event.special[ type ] || {};
	
				// handleObj is passed to all event handlers
				handleObj = jQuery.extend({
					type: type,
					origType: origType,
					data: data,
					handler: handler,
					guid: handler.guid,
					selector: selector,
					needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
					namespace: namespaces.join(".")
				}, handleObjIn );
	
				// Init the event handler queue if we're the first
				if ( !(handlers = events[ type ]) ) {
					handlers = events[ type ] = [];
					handlers.delegateCount = 0;
	
					// Only use addEventListener if the special events handler returns false
					if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
						if ( elem.addEventListener ) {
							elem.addEventListener( type, eventHandle, false );
						}
					}
				}
	
				if ( special.add ) {
					special.add.call( elem, handleObj );
	
					if ( !handleObj.handler.guid ) {
						handleObj.handler.guid = handler.guid;
					}
				}
	
				// Add to the element's handler list, delegates in front
				if ( selector ) {
					handlers.splice( handlers.delegateCount++, 0, handleObj );
				} else {
					handlers.push( handleObj );
				}
	
				// Keep track of which events have ever been used, for event optimization
				jQuery.event.global[ type ] = true;
			}
	
		},
	
		// Detach an event or set of events from an element
		remove: function( elem, types, handler, selector, mappedTypes ) {
	
			var j, origCount, tmp,
				events, t, handleObj,
				special, handlers, type, namespaces, origType,
				elemData = data_priv.hasData( elem ) && data_priv.get( elem );
	
			if ( !elemData || !(events = elemData.events) ) {
				return;
			}
	
			// Once for each type.namespace in types; type may be omitted
			types = ( types || "" ).match( rnotwhite ) || [ "" ];
			t = types.length;
			while ( t-- ) {
				tmp = rtypenamespace.exec( types[t] ) || [];
				type = origType = tmp[1];
				namespaces = ( tmp[2] || "" ).split( "." ).sort();
	
				// Unbind all events (on this namespace, if provided) for the element
				if ( !type ) {
					for ( type in events ) {
						jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
					}
					continue;
				}
	
				special = jQuery.event.special[ type ] || {};
				type = ( selector ? special.delegateType : special.bindType ) || type;
				handlers = events[ type ] || [];
				tmp = tmp[2] && new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" );
	
				// Remove matching events
				origCount = j = handlers.length;
				while ( j-- ) {
					handleObj = handlers[ j ];
	
					if ( ( mappedTypes || origType === handleObj.origType ) &&
						( !handler || handler.guid === handleObj.guid ) &&
						( !tmp || tmp.test( handleObj.namespace ) ) &&
						( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) {
						handlers.splice( j, 1 );
	
						if ( handleObj.selector ) {
							handlers.delegateCount--;
						}
						if ( special.remove ) {
							special.remove.call( elem, handleObj );
						}
					}
				}
	
				// Remove generic event handler if we removed something and no more handlers exist
				// (avoids potential for endless recursion during removal of special event handlers)
				if ( origCount && !handlers.length ) {
					if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
						jQuery.removeEvent( elem, type, elemData.handle );
					}
	
					delete events[ type ];
				}
			}
	
			// Remove the expando if it's no longer used
			if ( jQuery.isEmptyObject( events ) ) {
				delete elemData.handle;
				data_priv.remove( elem, "events" );
			}
		},
	
		trigger: function( event, data, elem, onlyHandlers ) {
	
			var i, cur, tmp, bubbleType, ontype, handle, special,
				eventPath = [ elem || document ],
				type = hasOwn.call( event, "type" ) ? event.type : event,
				namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split(".") : [];
	
			cur = tmp = elem = elem || document;
	
			// Don't do events on text and comment nodes
			if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
				return;
			}
	
			// focus/blur morphs to focusin/out; ensure we're not firing them right now
			if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
				return;
			}
	
			if ( type.indexOf(".") >= 0 ) {
				// Namespaced trigger; create a regexp to match event type in handle()
				namespaces = type.split(".");
				type = namespaces.shift();
				namespaces.sort();
			}
			ontype = type.indexOf(":") < 0 && "on" + type;
	
			// Caller can pass in a jQuery.Event object, Object, or just an event type string
			event = event[ jQuery.expando ] ?
				event :
				new jQuery.Event( type, typeof event === "object" && event );
	
			// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)
			event.isTrigger = onlyHandlers ? 2 : 3;
			event.namespace = namespaces.join(".");
			event.namespace_re = event.namespace ?
				new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ) :
				null;
	
			// Clean up the event in case it is being reused
			event.result = undefined;
			if ( !event.target ) {
				event.target = elem;
			}
	
			// Clone any incoming data and prepend the event, creating the handler arg list
			data = data == null ?
				[ event ] :
				jQuery.makeArray( data, [ event ] );
	
			// Allow special events to draw outside the lines
			special = jQuery.event.special[ type ] || {};
			if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {
				return;
			}
	
			// Determine event propagation path in advance, per W3C events spec (#9951)
			// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
			if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {
	
				bubbleType = special.delegateType || type;
				if ( !rfocusMorph.test( bubbleType + type ) ) {
					cur = cur.parentNode;
				}
				for ( ; cur; cur = cur.parentNode ) {
					eventPath.push( cur );
					tmp = cur;
				}
	
				// Only add window if we got to document (e.g., not plain obj or detached DOM)
				if ( tmp === (elem.ownerDocument || document) ) {
					eventPath.push( tmp.defaultView || tmp.parentWindow || window );
				}
			}
	
			// Fire handlers on the event path
			i = 0;
			while ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) {
	
				event.type = i > 1 ?
					bubbleType :
					special.bindType || type;
	
				// jQuery handler
				handle = ( data_priv.get( cur, "events" ) || {} )[ event.type ] && data_priv.get( cur, "handle" );
				if ( handle ) {
					handle.apply( cur, data );
				}
	
				// Native handler
				handle = ontype && cur[ ontype ];
				if ( handle && handle.apply && jQuery.acceptData( cur ) ) {
					event.result = handle.apply( cur, data );
					if ( event.result === false ) {
						event.preventDefault();
					}
				}
			}
			event.type = type;
	
			// If nobody prevented the default action, do it now
			if ( !onlyHandlers && !event.isDefaultPrevented() ) {
	
				if ( (!special._default || special._default.apply( eventPath.pop(), data ) === false) &&
					jQuery.acceptData( elem ) ) {
	
					// Call a native DOM method on the target with the same name name as the event.
					// Don't do default actions on window, that's where global variables be (#6170)
					if ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) {
	
						// Don't re-trigger an onFOO event when we call its FOO() method
						tmp = elem[ ontype ];
	
						if ( tmp ) {
							elem[ ontype ] = null;
						}
	
						// Prevent re-triggering of the same event, since we already bubbled it above
						jQuery.event.triggered = type;
						elem[ type ]();
						jQuery.event.triggered = undefined;
	
						if ( tmp ) {
							elem[ ontype ] = tmp;
						}
					}
				}
			}
	
			return event.result;
		},
	
		dispatch: function( event ) {
	
			// Make a writable jQuery.Event from the native event object
			event = jQuery.event.fix( event );
	
			var i, j, ret, matched, handleObj,
				handlerQueue = [],
				args = slice.call( arguments ),
				handlers = ( data_priv.get( this, "events" ) || {} )[ event.type ] || [],
				special = jQuery.event.special[ event.type ] || {};
	
			// Use the fix-ed jQuery.Event rather than the (read-only) native event
			args[0] = event;
			event.delegateTarget = this;
	
			// Call the preDispatch hook for the mapped type, and let it bail if desired
			if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
				return;
			}
	
			// Determine handlers
			handlerQueue = jQuery.event.handlers.call( this, event, handlers );
	
			// Run delegates first; they may want to stop propagation beneath us
			i = 0;
			while ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) {
				event.currentTarget = matched.elem;
	
				j = 0;
				while ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) {
	
					// Triggered event must either 1) have no namespace, or
					// 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace).
					if ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) {
	
						event.handleObj = handleObj;
						event.data = handleObj.data;
	
						ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler )
								.apply( matched.elem, args );
	
						if ( ret !== undefined ) {
							if ( (event.result = ret) === false ) {
								event.preventDefault();
								event.stopPropagation();
							}
						}
					}
				}
			}
	
			// Call the postDispatch hook for the mapped type
			if ( special.postDispatch ) {
				special.postDispatch.call( this, event );
			}
	
			return event.result;
		},
	
		handlers: function( event, handlers ) {
			var i, matches, sel, handleObj,
				handlerQueue = [],
				delegateCount = handlers.delegateCount,
				cur = event.target;
	
			// Find delegate handlers
			// Black-hole SVG <use> instance trees (#13180)
			// Avoid non-left-click bubbling in Firefox (#3861)
			if ( delegateCount && cur.nodeType && (!event.button || event.type !== "click") ) {
	
				for ( ; cur !== this; cur = cur.parentNode || this ) {
	
					// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
					if ( cur.disabled !== true || event.type !== "click" ) {
						matches = [];
						for ( i = 0; i < delegateCount; i++ ) {
							handleObj = handlers[ i ];
	
							// Don't conflict with Object.prototype properties (#13203)
							sel = handleObj.selector + " ";
	
							if ( matches[ sel ] === undefined ) {
								matches[ sel ] = handleObj.needsContext ?
									jQuery( sel, this ).index( cur ) >= 0 :
									jQuery.find( sel, this, null, [ cur ] ).length;
							}
							if ( matches[ sel ] ) {
								matches.push( handleObj );
							}
						}
						if ( matches.length ) {
							handlerQueue.push({ elem: cur, handlers: matches });
						}
					}
				}
			}
	
			// Add the remaining (directly-bound) handlers
			if ( delegateCount < handlers.length ) {
				handlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) });
			}
	
			return handlerQueue;
		},
	
		// Includes some event props shared by KeyEvent and MouseEvent
		props: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),
	
		fixHooks: {},
	
		keyHooks: {
			props: "char charCode key keyCode".split(" "),
			filter: function( event, original ) {
	
				// Add which for key events
				if ( event.which == null ) {
					event.which = original.charCode != null ? original.charCode : original.keyCode;
				}
	
				return event;
			}
		},
	
		mouseHooks: {
			props: "button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(" "),
			filter: function( event, original ) {
				var eventDoc, doc, body,
					button = original.button;
	
				// Calculate pageX/Y if missing and clientX/Y available
				if ( event.pageX == null && original.clientX != null ) {
					eventDoc = event.target.ownerDocument || document;
					doc = eventDoc.documentElement;
					body = eventDoc.body;
	
					event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 );
					event.pageY = original.clientY + ( doc && doc.scrollTop  || body && body.scrollTop  || 0 ) - ( doc && doc.clientTop  || body && body.clientTop  || 0 );
				}
	
				// Add which for click: 1 === left; 2 === middle; 3 === right
				// Note: button is not normalized, so don't use it
				if ( !event.which && button !== undefined ) {
					event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );
				}
	
				return event;
			}
		},
	
		fix: function( event ) {
			if ( event[ jQuery.expando ] ) {
				return event;
			}
	
			// Create a writable copy of the event object and normalize some properties
			var i, prop, copy,
				type = event.type,
				originalEvent = event,
				fixHook = this.fixHooks[ type ];
	
			if ( !fixHook ) {
				this.fixHooks[ type ] = fixHook =
					rmouseEvent.test( type ) ? this.mouseHooks :
					rkeyEvent.test( type ) ? this.keyHooks :
					{};
			}
			copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;
	
			event = new jQuery.Event( originalEvent );
	
			i = copy.length;
			while ( i-- ) {
				prop = copy[ i ];
				event[ prop ] = originalEvent[ prop ];
			}
	
			// Support: Cordova 2.5 (WebKit) (#13255)
			// All events should have a target; Cordova deviceready doesn't
			if ( !event.target ) {
				event.target = document;
			}
	
			// Support: Safari 6.0+, Chrome < 28
			// Target should not be a text node (#504, #13143)
			if ( event.target.nodeType === 3 ) {
				event.target = event.target.parentNode;
			}
	
			return fixHook.filter ? fixHook.filter( event, originalEvent ) : event;
		},
	
		special: {
			load: {
				// Prevent triggered image.load events from bubbling to window.load
				noBubble: true
			},
			focus: {
				// Fire native event if possible so blur/focus sequence is correct
				trigger: function() {
					if ( this !== safeActiveElement() && this.focus ) {
						this.focus();
						return false;
					}
				},
				delegateType: "focusin"
			},
			blur: {
				trigger: function() {
					if ( this === safeActiveElement() && this.blur ) {
						this.blur();
						return false;
					}
				},
				delegateType: "focusout"
			},
			click: {
				// For checkbox, fire native event so checked state will be right
				trigger: function() {
					if ( this.type === "checkbox" && this.click && jQuery.nodeName( this, "input" ) ) {
						this.click();
						return false;
					}
				},
	
				// For cross-browser consistency, don't fire native .click() on links
				_default: function( event ) {
					return jQuery.nodeName( event.target, "a" );
				}
			},
	
			beforeunload: {
				postDispatch: function( event ) {
	
					// Support: Firefox 20+
					// Firefox doesn't alert if the returnValue field is not set.
					if ( event.result !== undefined && event.originalEvent ) {
						event.originalEvent.returnValue = event.result;
					}
				}
			}
		},
	
		simulate: function( type, elem, event, bubble ) {
			// Piggyback on a donor event to simulate a different one.
			// Fake originalEvent to avoid donor's stopPropagation, but if the
			// simulated event prevents default then we do the same on the donor.
			var e = jQuery.extend(
				new jQuery.Event(),
				event,
				{
					type: type,
					isSimulated: true,
					originalEvent: {}
				}
			);
			if ( bubble ) {
				jQuery.event.trigger( e, null, elem );
			} else {
				jQuery.event.dispatch.call( elem, e );
			}
			if ( e.isDefaultPrevented() ) {
				event.preventDefault();
			}
		}
	};
	
	jQuery.removeEvent = function( elem, type, handle ) {
		if ( elem.removeEventListener ) {
			elem.removeEventListener( type, handle, false );
		}
	};
	
	jQuery.Event = function( src, props ) {
		// Allow instantiation without the 'new' keyword
		if ( !(this instanceof jQuery.Event) ) {
			return new jQuery.Event( src, props );
		}
	
		// Event object
		if ( src && src.type ) {
			this.originalEvent = src;
			this.type = src.type;
	
			// Events bubbling up the document may have been marked as prevented
			// by a handler lower down the tree; reflect the correct value.
			this.isDefaultPrevented = src.defaultPrevented ||
					src.defaultPrevented === undefined &&
					// Support: Android < 4.0
					src.returnValue === false ?
				returnTrue :
				returnFalse;
	
		// Event type
		} else {
			this.type = src;
		}
	
		// Put explicitly provided properties onto the event object
		if ( props ) {
			jQuery.extend( this, props );
		}
	
		// Create a timestamp if incoming event doesn't have one
		this.timeStamp = src && src.timeStamp || jQuery.now();
	
		// Mark it as fixed
		this[ jQuery.expando ] = true;
	};
	
	// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
	// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
	jQuery.Event.prototype = {
		isDefaultPrevented: returnFalse,
		isPropagationStopped: returnFalse,
		isImmediatePropagationStopped: returnFalse,
	
		preventDefault: function() {
			var e = this.originalEvent;
	
			this.isDefaultPrevented = returnTrue;
	
			if ( e && e.preventDefault ) {
				e.preventDefault();
			}
		},
		stopPropagation: function() {
			var e = this.originalEvent;
	
			this.isPropagationStopped = returnTrue;
	
			if ( e && e.stopPropagation ) {
				e.stopPropagation();
			}
		},
		stopImmediatePropagation: function() {
			var e = this.originalEvent;
	
			this.isImmediatePropagationStopped = returnTrue;
	
			if ( e && e.stopImmediatePropagation ) {
				e.stopImmediatePropagation();
			}
	
			this.stopPropagation();
		}
	};
	
	// Create mouseenter/leave events using mouseover/out and event-time checks
	// Support: Chrome 15+
	jQuery.each({
		mouseenter: "mouseover",
		mouseleave: "mouseout",
		pointerenter: "pointerover",
		pointerleave: "pointerout"
	}, function( orig, fix ) {
		jQuery.event.special[ orig ] = {
			delegateType: fix,
			bindType: fix,
	
			handle: function( event ) {
				var ret,
					target = this,
					related = event.relatedTarget,
					handleObj = event.handleObj;
	
				// For mousenter/leave call the handler if related is outside the target.
				// NB: No relatedTarget if the mouse left/entered the browser window
				if ( !related || (related !== target && !jQuery.contains( target, related )) ) {
					event.type = handleObj.origType;
					ret = handleObj.handler.apply( this, arguments );
					event.type = fix;
				}
				return ret;
			}
		};
	});
	
	// Create "bubbling" focus and blur events
	// Support: Firefox, Chrome, Safari
	if ( !support.focusinBubbles ) {
		jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {
	
			// Attach a single capturing handler on the document while someone wants focusin/focusout
			var handler = function( event ) {
					jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true );
				};
	
			jQuery.event.special[ fix ] = {
				setup: function() {
					var doc = this.ownerDocument || this,
						attaches = data_priv.access( doc, fix );
	
					if ( !attaches ) {
						doc.addEventListener( orig, handler, true );
					}
					data_priv.access( doc, fix, ( attaches || 0 ) + 1 );
				},
				teardown: function() {
					var doc = this.ownerDocument || this,
						attaches = data_priv.access( doc, fix ) - 1;
	
					if ( !attaches ) {
						doc.removeEventListener( orig, handler, true );
						data_priv.remove( doc, fix );
	
					} else {
						data_priv.access( doc, fix, attaches );
					}
				}
			};
		});
	}
	
	jQuery.fn.extend({
	
		on: function( types, selector, data, fn, /*INTERNAL*/ one ) {
			var origFn, type;
	
			// Types can be a map of types/handlers
			if ( typeof types === "object" ) {
				// ( types-Object, selector, data )
				if ( typeof selector !== "string" ) {
					// ( types-Object, data )
					data = data || selector;
					selector = undefined;
				}
				for ( type in types ) {
					this.on( type, selector, data, types[ type ], one );
				}
				return this;
			}
	
			if ( data == null && fn == null ) {
				// ( types, fn )
				fn = selector;
				data = selector = undefined;
			} else if ( fn == null ) {
				if ( typeof selector === "string" ) {
					// ( types, selector, fn )
					fn = data;
					data = undefined;
				} else {
					// ( types, data, fn )
					fn = data;
					data = selector;
					selector = undefined;
				}
			}
			if ( fn === false ) {
				fn = returnFalse;
			} else if ( !fn ) {
				return this;
			}
	
			if ( one === 1 ) {
				origFn = fn;
				fn = function( event ) {
					// Can use an empty set, since event contains the info
					jQuery().off( event );
					return origFn.apply( this, arguments );
				};
				// Use same guid so caller can remove using origFn
				fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
			}
			return this.each( function() {
				jQuery.event.add( this, types, fn, data, selector );
			});
		},
		one: function( types, selector, data, fn ) {
			return this.on( types, selector, data, fn, 1 );
		},
		off: function( types, selector, fn ) {
			var handleObj, type;
			if ( types && types.preventDefault && types.handleObj ) {
				// ( event )  dispatched jQuery.Event
				handleObj = types.handleObj;
				jQuery( types.delegateTarget ).off(
					handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType,
					handleObj.selector,
					handleObj.handler
				);
				return this;
			}
			if ( typeof types === "object" ) {
				// ( types-object [, selector] )
				for ( type in types ) {
					this.off( type, selector, types[ type ] );
				}
				return this;
			}
			if ( selector === false || typeof selector === "function" ) {
				// ( types [, fn] )
				fn = selector;
				selector = undefined;
			}
			if ( fn === false ) {
				fn = returnFalse;
			}
			return this.each(function() {
				jQuery.event.remove( this, types, fn, selector );
			});
		},
	
		trigger: function( type, data ) {
			return this.each(function() {
				jQuery.event.trigger( type, data, this );
			});
		},
		triggerHandler: function( type, data ) {
			var elem = this[0];
			if ( elem ) {
				return jQuery.event.trigger( type, data, elem, true );
			}
		}
	});
	
	
	var
		rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,
		rtagName = /<([\w:]+)/,
		rhtml = /<|&#?\w+;/,
		rnoInnerhtml = /<(?:script|style|link)/i,
		// checked="checked" or checked
		rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
		rscriptType = /^$|\/(?:java|ecma)script/i,
		rscriptTypeMasked = /^true\/(.*)/,
		rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,
	
		// We have to close these tags to support XHTML (#13200)
		wrapMap = {
	
			// Support: IE 9
			option: [ 1, "<select multiple='multiple'>", "</select>" ],
	
			thead: [ 1, "<table>", "</table>" ],
			col: [ 2, "<table><colgroup>", "</colgroup></table>" ],
			tr: [ 2, "<table><tbody>", "</tbody></table>" ],
			td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
	
			_default: [ 0, "", "" ]
		};
	
	// Support: IE 9
	wrapMap.optgroup = wrapMap.option;
	
	wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
	wrapMap.th = wrapMap.td;
	
	// Support: 1.x compatibility
	// Manipulating tables requires a tbody
	function manipulationTarget( elem, content ) {
		return jQuery.nodeName( elem, "table" ) &&
			jQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ?
	
			elem.getElementsByTagName("tbody")[0] ||
				elem.appendChild( elem.ownerDocument.createElement("tbody") ) :
			elem;
	}
	
	// Replace/restore the type attribute of script elements for safe DOM manipulation
	function disableScript( elem ) {
		elem.type = (elem.getAttribute("type") !== null) + "/" + elem.type;
		return elem;
	}
	function restoreScript( elem ) {
		var match = rscriptTypeMasked.exec( elem.type );
	
		if ( match ) {
			elem.type = match[ 1 ];
		} else {
			elem.removeAttribute("type");
		}
	
		return elem;
	}
	
	// Mark scripts as having already been evaluated
	function setGlobalEval( elems, refElements ) {
		var i = 0,
			l = elems.length;
	
		for ( ; i < l; i++ ) {
			data_priv.set(
				elems[ i ], "globalEval", !refElements || data_priv.get( refElements[ i ], "globalEval" )
			);
		}
	}
	
	function cloneCopyEvent( src, dest ) {
		var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;
	
		if ( dest.nodeType !== 1 ) {
			return;
		}
	
		// 1. Copy private data: events, handlers, etc.
		if ( data_priv.hasData( src ) ) {
			pdataOld = data_priv.access( src );
			pdataCur = data_priv.set( dest, pdataOld );
			events = pdataOld.events;
	
			if ( events ) {
				delete pdataCur.handle;
				pdataCur.events = {};
	
				for ( type in events ) {
					for ( i = 0, l = events[ type ].length; i < l; i++ ) {
						jQuery.event.add( dest, type, events[ type ][ i ] );
					}
				}
			}
		}
	
		// 2. Copy user data
		if ( data_user.hasData( src ) ) {
			udataOld = data_user.access( src );
			udataCur = jQuery.extend( {}, udataOld );
	
			data_user.set( dest, udataCur );
		}
	}
	
	function getAll( context, tag ) {
		var ret = context.getElementsByTagName ? context.getElementsByTagName( tag || "*" ) :
				context.querySelectorAll ? context.querySelectorAll( tag || "*" ) :
				[];
	
		return tag === undefined || tag && jQuery.nodeName( context, tag ) ?
			jQuery.merge( [ context ], ret ) :
			ret;
	}
	
	// Support: IE >= 9
	function fixInput( src, dest ) {
		var nodeName = dest.nodeName.toLowerCase();
	
		// Fails to persist the checked state of a cloned checkbox or radio button.
		if ( nodeName === "input" && rcheckableType.test( src.type ) ) {
			dest.checked = src.checked;
	
		// Fails to return the selected option to the default selected state when cloning options
		} else if ( nodeName === "input" || nodeName === "textarea" ) {
			dest.defaultValue = src.defaultValue;
		}
	}
	
	jQuery.extend({
		clone: function( elem, dataAndEvents, deepDataAndEvents ) {
			var i, l, srcElements, destElements,
				clone = elem.cloneNode( true ),
				inPage = jQuery.contains( elem.ownerDocument, elem );
	
			// Support: IE >= 9
			// Fix Cloning issues
			if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&
					!jQuery.isXMLDoc( elem ) ) {
	
				// We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2
				destElements = getAll( clone );
				srcElements = getAll( elem );
	
				for ( i = 0, l = srcElements.length; i < l; i++ ) {
					fixInput( srcElements[ i ], destElements[ i ] );
				}
			}
	
			// Copy the events from the original to the clone
			if ( dataAndEvents ) {
				if ( deepDataAndEvents ) {
					srcElements = srcElements || getAll( elem );
					destElements = destElements || getAll( clone );
	
					for ( i = 0, l = srcElements.length; i < l; i++ ) {
						cloneCopyEvent( srcElements[ i ], destElements[ i ] );
					}
				} else {
					cloneCopyEvent( elem, clone );
				}
			}
	
			// Preserve script evaluation history
			destElements = getAll( clone, "script" );
			if ( destElements.length > 0 ) {
				setGlobalEval( destElements, !inPage && getAll( elem, "script" ) );
			}
	
			// Return the cloned set
			return clone;
		},
	
		buildFragment: function( elems, context, scripts, selection ) {
			var elem, tmp, tag, wrap, contains, j,
				fragment = context.createDocumentFragment(),
				nodes = [],
				i = 0,
				l = elems.length;
	
			for ( ; i < l; i++ ) {
				elem = elems[ i ];
	
				if ( elem || elem === 0 ) {
	
					// Add nodes directly
					if ( jQuery.type( elem ) === "object" ) {
						// Support: QtWebKit
						// jQuery.merge because push.apply(_, arraylike) throws
						jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
	
					// Convert non-html into a text node
					} else if ( !rhtml.test( elem ) ) {
						nodes.push( context.createTextNode( elem ) );
	
					// Convert html into DOM nodes
					} else {
						tmp = tmp || fragment.appendChild( context.createElement("div") );
	
						// Deserialize a standard representation
						tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase();
						wrap = wrapMap[ tag ] || wrapMap._default;
						tmp.innerHTML = wrap[ 1 ] + elem.replace( rxhtmlTag, "<$1></$2>" ) + wrap[ 2 ];
	
						// Descend through wrappers to the right content
						j = wrap[ 0 ];
						while ( j-- ) {
							tmp = tmp.lastChild;
						}
	
						// Support: QtWebKit
						// jQuery.merge because push.apply(_, arraylike) throws
						jQuery.merge( nodes, tmp.childNodes );
	
						// Remember the top-level container
						tmp = fragment.firstChild;
	
						// Fixes #12346
						// Support: Webkit, IE
						tmp.textContent = "";
					}
				}
			}
	
			// Remove wrapper from fragment
			fragment.textContent = "";
	
			i = 0;
			while ( (elem = nodes[ i++ ]) ) {
	
				// #4087 - If origin and destination elements are the same, and this is
				// that element, do not do anything
				if ( selection && jQuery.inArray( elem, selection ) !== -1 ) {
					continue;
				}
	
				contains = jQuery.contains( elem.ownerDocument, elem );
	
				// Append to fragment
				tmp = getAll( fragment.appendChild( elem ), "script" );
	
				// Preserve script evaluation history
				if ( contains ) {
					setGlobalEval( tmp );
				}
	
				// Capture executables
				if ( scripts ) {
					j = 0;
					while ( (elem = tmp[ j++ ]) ) {
						if ( rscriptType.test( elem.type || "" ) ) {
							scripts.push( elem );
						}
					}
				}
			}
	
			return fragment;
		},
	
		cleanData: function( elems ) {
			var data, elem, type, key,
				special = jQuery.event.special,
				i = 0;
	
			for ( ; (elem = elems[ i ]) !== undefined; i++ ) {
				if ( jQuery.acceptData( elem ) ) {
					key = elem[ data_priv.expando ];
	
					if ( key && (data = data_priv.cache[ key ]) ) {
						if ( data.events ) {
							for ( type in data.events ) {
								if ( special[ type ] ) {
									jQuery.event.remove( elem, type );
	
								// This is a shortcut to avoid jQuery.event.remove's overhead
								} else {
									jQuery.removeEvent( elem, type, data.handle );
								}
							}
						}
						if ( data_priv.cache[ key ] ) {
							// Discard any remaining `private` data
							delete data_priv.cache[ key ];
						}
					}
				}
				// Discard any remaining `user` data
				delete data_user.cache[ elem[ data_user.expando ] ];
			}
		}
	});
	
	jQuery.fn.extend({
		text: function( value ) {
			return access( this, function( value ) {
				return value === undefined ?
					jQuery.text( this ) :
					this.empty().each(function() {
						if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
							this.textContent = value;
						}
					});
			}, null, value, arguments.length );
		},
	
		append: function() {
			return this.domManip( arguments, function( elem ) {
				if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
					var target = manipulationTarget( this, elem );
					target.appendChild( elem );
				}
			});
		},
	
		prepend: function() {
			return this.domManip( arguments, function( elem ) {
				if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
					var target = manipulationTarget( this, elem );
					target.insertBefore( elem, target.firstChild );
				}
			});
		},
	
		before: function() {
			return this.domManip( arguments, function( elem ) {
				if ( this.parentNode ) {
					this.parentNode.insertBefore( elem, this );
				}
			});
		},
	
		after: function() {
			return this.domManip( arguments, function( elem ) {
				if ( this.parentNode ) {
					this.parentNode.insertBefore( elem, this.nextSibling );
				}
			});
		},
	
		remove: function( selector, keepData /* Internal Use Only */ ) {
			var elem,
				elems = selector ? jQuery.filter( selector, this ) : this,
				i = 0;
	
			for ( ; (elem = elems[i]) != null; i++ ) {
				if ( !keepData && elem.nodeType === 1 ) {
					jQuery.cleanData( getAll( elem ) );
				}
	
				if ( elem.parentNode ) {
					if ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) {
						setGlobalEval( getAll( elem, "script" ) );
					}
					elem.parentNode.removeChild( elem );
				}
			}
	
			return this;
		},
	
		empty: function() {
			var elem,
				i = 0;
	
			for ( ; (elem = this[i]) != null; i++ ) {
				if ( elem.nodeType === 1 ) {
	
					// Prevent memory leaks
					jQuery.cleanData( getAll( elem, false ) );
	
					// Remove any remaining nodes
					elem.textContent = "";
				}
			}
	
			return this;
		},
	
		clone: function( dataAndEvents, deepDataAndEvents ) {
			dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
			deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
	
			return this.map(function() {
				return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
			});
		},
	
		html: function( value ) {
			return access( this, function( value ) {
				var elem = this[ 0 ] || {},
					i = 0,
					l = this.length;
	
				if ( value === undefined && elem.nodeType === 1 ) {
					return elem.innerHTML;
				}
	
				// See if we can take a shortcut and just use innerHTML
				if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
					!wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) {
	
					value = value.replace( rxhtmlTag, "<$1></$2>" );
	
					try {
						for ( ; i < l; i++ ) {
							elem = this[ i ] || {};
	
							// Remove element nodes and prevent memory leaks
							if ( elem.nodeType === 1 ) {
								jQuery.cleanData( getAll( elem, false ) );
								elem.innerHTML = value;
							}
						}
	
						elem = 0;
	
					// If using innerHTML throws an exception, use the fallback method
					} catch( e ) {}
				}
	
				if ( elem ) {
					this.empty().append( value );
				}
			}, null, value, arguments.length );
		},
	
		replaceWith: function() {
			var arg = arguments[ 0 ];
	
			// Make the changes, replacing each context element with the new content
			this.domManip( arguments, function( elem ) {
				arg = this.parentNode;
	
				jQuery.cleanData( getAll( this ) );
	
				if ( arg ) {
					arg.replaceChild( elem, this );
				}
			});
	
			// Force removal if there was no new content (e.g., from empty arguments)
			return arg && (arg.length || arg.nodeType) ? this : this.remove();
		},
	
		detach: function( selector ) {
			return this.remove( selector, true );
		},
	
		domManip: function( args, callback ) {
	
			// Flatten any nested arrays
			args = concat.apply( [], args );
	
			var fragment, first, scripts, hasScripts, node, doc,
				i = 0,
				l = this.length,
				set = this,
				iNoClone = l - 1,
				value = args[ 0 ],
				isFunction = jQuery.isFunction( value );
	
			// We can't cloneNode fragments that contain checked, in WebKit
			if ( isFunction ||
					( l > 1 && typeof value === "string" &&
						!support.checkClone && rchecked.test( value ) ) ) {
				return this.each(function( index ) {
					var self = set.eq( index );
					if ( isFunction ) {
						args[ 0 ] = value.call( this, index, self.html() );
					}
					self.domManip( args, callback );
				});
			}
	
			if ( l ) {
				fragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, this );
				first = fragment.firstChild;
	
				if ( fragment.childNodes.length === 1 ) {
					fragment = first;
				}
	
				if ( first ) {
					scripts = jQuery.map( getAll( fragment, "script" ), disableScript );
					hasScripts = scripts.length;
	
					// Use the original fragment for the last item instead of the first because it can end up
					// being emptied incorrectly in certain situations (#8070).
					for ( ; i < l; i++ ) {
						node = fragment;
	
						if ( i !== iNoClone ) {
							node = jQuery.clone( node, true, true );
	
							// Keep references to cloned scripts for later restoration
							if ( hasScripts ) {
								// Support: QtWebKit
								// jQuery.merge because push.apply(_, arraylike) throws
								jQuery.merge( scripts, getAll( node, "script" ) );
							}
						}
	
						callback.call( this[ i ], node, i );
					}
	
					if ( hasScripts ) {
						doc = scripts[ scripts.length - 1 ].ownerDocument;
	
						// Reenable scripts
						jQuery.map( scripts, restoreScript );
	
						// Evaluate executable scripts on first document insertion
						for ( i = 0; i < hasScripts; i++ ) {
							node = scripts[ i ];
							if ( rscriptType.test( node.type || "" ) &&
								!data_priv.access( node, "globalEval" ) && jQuery.contains( doc, node ) ) {
	
								if ( node.src ) {
									// Optional AJAX dependency, but won't run scripts if not present
									if ( jQuery._evalUrl ) {
										jQuery._evalUrl( node.src );
									}
								} else {
									jQuery.globalEval( node.textContent.replace( rcleanScript, "" ) );
								}
							}
						}
					}
				}
			}
	
			return this;
		}
	});
	
	jQuery.each({
		appendTo: "append",
		prependTo: "prepend",
		insertBefore: "before",
		insertAfter: "after",
		replaceAll: "replaceWith"
	}, function( name, original ) {
		jQuery.fn[ name ] = function( selector ) {
			var elems,
				ret = [],
				insert = jQuery( selector ),
				last = insert.length - 1,
				i = 0;
	
			for ( ; i <= last; i++ ) {
				elems = i === last ? this : this.clone( true );
				jQuery( insert[ i ] )[ original ]( elems );
	
				// Support: QtWebKit
				// .get() because push.apply(_, arraylike) throws
				push.apply( ret, elems.get() );
			}
	
			return this.pushStack( ret );
		};
	});
	
	
	var iframe,
		elemdisplay = {};
	
	/**
	 * Retrieve the actual display of a element
	 * @param {String} name nodeName of the element
	 * @param {Object} doc Document object
	 */
	// Called only from within defaultDisplay
	function actualDisplay( name, doc ) {
		var style,
			elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),
	
			// getDefaultComputedStyle might be reliably used only on attached element
			display = window.getDefaultComputedStyle && ( style = window.getDefaultComputedStyle( elem[ 0 ] ) ) ?
	
				// Use of this method is a temporary fix (more like optmization) until something better comes along,
				// since it was removed from specification and supported only in FF
				style.display : jQuery.css( elem[ 0 ], "display" );
	
		// We don't have any data stored on the element,
		// so use "detach" method as fast way to get rid of the element
		elem.detach();
	
		return display;
	}
	
	/**
	 * Try to determine the default display value of an element
	 * @param {String} nodeName
	 */
	function defaultDisplay( nodeName ) {
		var doc = document,
			display = elemdisplay[ nodeName ];
	
		if ( !display ) {
			display = actualDisplay( nodeName, doc );
	
			// If the simple way fails, read from inside an iframe
			if ( display === "none" || !display ) {
	
				// Use the already-created iframe if possible
				iframe = (iframe || jQuery( "<iframe frameborder='0' width='0' height='0'/>" )).appendTo( doc.documentElement );
	
				// Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse
				doc = iframe[ 0 ].contentDocument;
	
				// Support: IE
				doc.write();
				doc.close();
	
				display = actualDisplay( nodeName, doc );
				iframe.detach();
			}
	
			// Store the correct default display
			elemdisplay[ nodeName ] = display;
		}
	
		return display;
	}
	var rmargin = (/^margin/);
	
	var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" );
	
	var getStyles = function( elem ) {
			return elem.ownerDocument.defaultView.getComputedStyle( elem, null );
		};
	
	
	
	function curCSS( elem, name, computed ) {
		var width, minWidth, maxWidth, ret,
			style = elem.style;
	
		computed = computed || getStyles( elem );
	
		// Support: IE9
		// getPropertyValue is only needed for .css('filter') in IE9, see #12537
		if ( computed ) {
			ret = computed.getPropertyValue( name ) || computed[ name ];
		}
	
		if ( computed ) {
	
			if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) {
				ret = jQuery.style( elem, name );
			}
	
			// Support: iOS < 6
			// A tribute to the "awesome hack by Dean Edwards"
			// iOS < 6 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels
			// this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values
			if ( rnumnonpx.test( ret ) && rmargin.test( name ) ) {
	
				// Remember the original values
				width = style.width;
				minWidth = style.minWidth;
				maxWidth = style.maxWidth;
	
				// Put in the new values to get a computed value out
				style.minWidth = style.maxWidth = style.width = ret;
				ret = computed.width;
	
				// Revert the changed values
				style.width = width;
				style.minWidth = minWidth;
				style.maxWidth = maxWidth;
			}
		}
	
		return ret !== undefined ?
			// Support: IE
			// IE returns zIndex value as an integer.
			ret + "" :
			ret;
	}
	
	
	function addGetHookIf( conditionFn, hookFn ) {
		// Define the hook, we'll check on the first run if it's really needed.
		return {
			get: function() {
				if ( conditionFn() ) {
					// Hook not needed (or it's not possible to use it due to missing dependency),
					// remove it.
					// Since there are no other hooks for marginRight, remove the whole object.
					delete this.get;
					return;
				}
	
				// Hook needed; redefine it so that the support test is not executed again.
	
				return (this.get = hookFn).apply( this, arguments );
			}
		};
	}
	
	
	(function() {
		var pixelPositionVal, boxSizingReliableVal,
			docElem = document.documentElement,
			container = document.createElement( "div" ),
			div = document.createElement( "div" );
	
		if ( !div.style ) {
			return;
		}
	
		div.style.backgroundClip = "content-box";
		div.cloneNode( true ).style.backgroundClip = "";
		support.clearCloneStyle = div.style.backgroundClip === "content-box";
	
		container.style.cssText = "border:0;width:0;height:0;top:0;left:-9999px;margin-top:1px;" +
			"position:absolute";
		container.appendChild( div );
	
		// Executing both pixelPosition & boxSizingReliable tests require only one layout
		// so they're executed at the same time to save the second computation.
		function computePixelPositionAndBoxSizingReliable() {
			div.style.cssText =
				// Support: Firefox<29, Android 2.3
				// Vendor-prefix box-sizing
				"-webkit-box-sizing:border-box;-moz-box-sizing:border-box;" +
				"box-sizing:border-box;display:block;margin-top:1%;top:1%;" +
				"border:1px;padding:1px;width:4px;position:absolute";
			div.innerHTML = "";
			docElem.appendChild( container );
	
			var divStyle = window.getComputedStyle( div, null );
			pixelPositionVal = divStyle.top !== "1%";
			boxSizingReliableVal = divStyle.width === "4px";
	
			docElem.removeChild( container );
		}
	
		// Support: node.js jsdom
		// Don't assume that getComputedStyle is a property of the global object
		if ( window.getComputedStyle ) {
			jQuery.extend( support, {
				pixelPosition: function() {
					// This test is executed only once but we still do memoizing
					// since we can use the boxSizingReliable pre-computing.
					// No need to check if the test was already performed, though.
					computePixelPositionAndBoxSizingReliable();
					return pixelPositionVal;
				},
				boxSizingReliable: function() {
					if ( boxSizingReliableVal == null ) {
						computePixelPositionAndBoxSizingReliable();
					}
					return boxSizingReliableVal;
				},
				reliableMarginRight: function() {
					// Support: Android 2.3
					// Check if div with explicit width and no margin-right incorrectly
					// gets computed margin-right based on width of container. (#3333)
					// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
					// This support function is only executed once so no memoizing is needed.
					var ret,
						marginDiv = div.appendChild( document.createElement( "div" ) );
	
					// Reset CSS: box-sizing; display; margin; border; padding
					marginDiv.style.cssText = div.style.cssText =
						// Support: Firefox<29, Android 2.3
						// Vendor-prefix box-sizing
						"-webkit-box-sizing:content-box;-moz-box-sizing:content-box;" +
						"box-sizing:content-box;display:block;margin:0;border:0;padding:0";
					marginDiv.style.marginRight = marginDiv.style.width = "0";
					div.style.width = "1px";
					docElem.appendChild( container );
	
					ret = !parseFloat( window.getComputedStyle( marginDiv, null ).marginRight );
	
					docElem.removeChild( container );
	
					return ret;
				}
			});
		}
	})();
	
	
	// A method for quickly swapping in/out CSS properties to get correct calculations.
	jQuery.swap = function( elem, options, callback, args ) {
		var ret, name,
			old = {};
	
		// Remember the old values, and insert the new ones
		for ( name in options ) {
			old[ name ] = elem.style[ name ];
			elem.style[ name ] = options[ name ];
		}
	
		ret = callback.apply( elem, args || [] );
	
		// Revert the old values
		for ( name in options ) {
			elem.style[ name ] = old[ name ];
		}
	
		return ret;
	};
	
	
	var
		// swappable if display is none or starts with table except "table", "table-cell", or "table-caption"
		// see here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
		rdisplayswap = /^(none|table(?!-c[ea]).+)/,
		rnumsplit = new RegExp( "^(" + pnum + ")(.*)$", "i" ),
		rrelNum = new RegExp( "^([+-])=(" + pnum + ")", "i" ),
	
		cssShow = { position: "absolute", visibility: "hidden", display: "block" },
		cssNormalTransform = {
			letterSpacing: "0",
			fontWeight: "400"
		},
	
		cssPrefixes = [ "Webkit", "O", "Moz", "ms" ];
	
	// return a css property mapped to a potentially vendor prefixed property
	function vendorPropName( style, name ) {
	
		// shortcut for names that are not vendor prefixed
		if ( name in style ) {
			return name;
		}
	
		// check for vendor prefixed names
		var capName = name[0].toUpperCase() + name.slice(1),
			origName = name,
			i = cssPrefixes.length;
	
		while ( i-- ) {
			name = cssPrefixes[ i ] + capName;
			if ( name in style ) {
				return name;
			}
		}
	
		return origName;
	}
	
	function setPositiveNumber( elem, value, subtract ) {
		var matches = rnumsplit.exec( value );
		return matches ?
			// Guard against undefined "subtract", e.g., when used as in cssHooks
			Math.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || "px" ) :
			value;
	}
	
	function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {
		var i = extra === ( isBorderBox ? "border" : "content" ) ?
			// If we already have the right measurement, avoid augmentation
			4 :
			// Otherwise initialize for horizontal or vertical properties
			name === "width" ? 1 : 0,
	
			val = 0;
	
		for ( ; i < 4; i += 2 ) {
			// both box models exclude margin, so add it if we want it
			if ( extra === "margin" ) {
				val += jQuery.css( elem, extra + cssExpand[ i ], true, styles );
			}
	
			if ( isBorderBox ) {
				// border-box includes padding, so remove it if we want content
				if ( extra === "content" ) {
					val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
				}
	
				// at this point, extra isn't border nor margin, so remove border
				if ( extra !== "margin" ) {
					val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
				}
			} else {
				// at this point, extra isn't content, so add padding
				val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
	
				// at this point, extra isn't content nor padding, so add border
				if ( extra !== "padding" ) {
					val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
				}
			}
		}
	
		return val;
	}
	
	function getWidthOrHeight( elem, name, extra ) {
	
		// Start with offset property, which is equivalent to the border-box value
		var valueIsBorderBox = true,
			val = name === "width" ? elem.offsetWidth : elem.offsetHeight,
			styles = getStyles( elem ),
			isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box";
	
		// some non-html elements return undefined for offsetWidth, so check for null/undefined
		// svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285
		// MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668
		if ( val <= 0 || val == null ) {
			// Fall back to computed then uncomputed css if necessary
			val = curCSS( elem, name, styles );
			if ( val < 0 || val == null ) {
				val = elem.style[ name ];
			}
	
			// Computed unit is not pixels. Stop here and return.
			if ( rnumnonpx.test(val) ) {
				return val;
			}
	
			// we need the check for style in case a browser which returns unreliable values
			// for getComputedStyle silently falls back to the reliable elem.style
			valueIsBorderBox = isBorderBox &&
				( support.boxSizingReliable() || val === elem.style[ name ] );
	
			// Normalize "", auto, and prepare for extra
			val = parseFloat( val ) || 0;
		}
	
		// use the active box-sizing model to add/subtract irrelevant styles
		return ( val +
			augmentWidthOrHeight(
				elem,
				name,
				extra || ( isBorderBox ? "border" : "content" ),
				valueIsBorderBox,
				styles
			)
		) + "px";
	}
	
	function showHide( elements, show ) {
		var display, elem, hidden,
			values = [],
			index = 0,
			length = elements.length;
	
		for ( ; index < length; index++ ) {
			elem = elements[ index ];
			if ( !elem.style ) {
				continue;
			}
	
			values[ index ] = data_priv.get( elem, "olddisplay" );
			display = elem.style.display;
			if ( show ) {
				// Reset the inline display of this element to learn if it is
				// being hidden by cascaded rules or not
				if ( !values[ index ] && display === "none" ) {
					elem.style.display = "";
				}
	
				// Set elements which have been overridden with display: none
				// in a stylesheet to whatever the default browser style is
				// for such an element
				if ( elem.style.display === "" && isHidden( elem ) ) {
					values[ index ] = data_priv.access( elem, "olddisplay", defaultDisplay(elem.nodeName) );
				}
			} else {
				hidden = isHidden( elem );
	
				if ( display !== "none" || !hidden ) {
					data_priv.set( elem, "olddisplay", hidden ? display : jQuery.css( elem, "display" ) );
				}
			}
		}
	
		// Set the display of most of the elements in a second loop
		// to avoid the constant reflow
		for ( index = 0; index < length; index++ ) {
			elem = elements[ index ];
			if ( !elem.style ) {
				continue;
			}
			if ( !show || elem.style.display === "none" || elem.style.display === "" ) {
				elem.style.display = show ? values[ index ] || "" : "none";
			}
		}
	
		return elements;
	}
	
	jQuery.extend({
		// Add in style property hooks for overriding the default
		// behavior of getting and setting a style property
		cssHooks: {
			opacity: {
				get: function( elem, computed ) {
					if ( computed ) {
						// We should always get a number back from opacity
						var ret = curCSS( elem, "opacity" );
						return ret === "" ? "1" : ret;
					}
				}
			}
		},
	
		// Don't automatically add "px" to these possibly-unitless properties
		cssNumber: {
			"columnCount": true,
			"fillOpacity": true,
			"flexGrow": true,
			"flexShrink": true,
			"fontWeight": true,
			"lineHeight": true,
			"opacity": true,
			"order": true,
			"orphans": true,
			"widows": true,
			"zIndex": true,
			"zoom": true
		},
	
		// Add in properties whose names you wish to fix before
		// setting or getting the value
		cssProps: {
			// normalize float css property
			"float": "cssFloat"
		},
	
		// Get and set the style property on a DOM Node
		style: function( elem, name, value, extra ) {
			// Don't set styles on text and comment nodes
			if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
				return;
			}
	
			// Make sure that we're working with the right name
			var ret, type, hooks,
				origName = jQuery.camelCase( name ),
				style = elem.style;
	
			name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) );
	
			// gets hook for the prefixed version
			// followed by the unprefixed version
			hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
	
			// Check if we're setting a value
			if ( value !== undefined ) {
				type = typeof value;
	
				// convert relative number strings (+= or -=) to relative numbers. #7345
				if ( type === "string" && (ret = rrelNum.exec( value )) ) {
					value = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) );
					// Fixes bug #9237
					type = "number";
				}
	
				// Make sure that null and NaN values aren't set. See: #7116
				if ( value == null || value !== value ) {
					return;
				}
	
				// If a number was passed in, add 'px' to the (except for certain CSS properties)
				if ( type === "number" && !jQuery.cssNumber[ origName ] ) {
					value += "px";
				}
	
				// Fixes #8908, it can be done more correctly by specifying setters in cssHooks,
				// but it would mean to define eight (for every problematic property) identical functions
				if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) {
					style[ name ] = "inherit";
				}
	
				// If a hook was provided, use that value, otherwise just set the specified value
				if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) {
					style[ name ] = value;
				}
	
			} else {
				// If a hook was provided get the non-computed value from there
				if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {
					return ret;
				}
	
				// Otherwise just get the value from the style object
				return style[ name ];
			}
		},
	
		css: function( elem, name, extra, styles ) {
			var val, num, hooks,
				origName = jQuery.camelCase( name );
	
			// Make sure that we're working with the right name
			name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) );
	
			// gets hook for the prefixed version
			// followed by the unprefixed version
			hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
	
			// If a hook was provided get the computed value from there
			if ( hooks && "get" in hooks ) {
				val = hooks.get( elem, true, extra );
			}
	
			// Otherwise, if a way to get the computed value exists, use that
			if ( val === undefined ) {
				val = curCSS( elem, name, styles );
			}
	
			//convert "normal" to computed value
			if ( val === "normal" && name in cssNormalTransform ) {
				val = cssNormalTransform[ name ];
			}
	
			// Return, converting to number if forced or a qualifier was provided and val looks numeric
			if ( extra === "" || extra ) {
				num = parseFloat( val );
				return extra === true || jQuery.isNumeric( num ) ? num || 0 : val;
			}
			return val;
		}
	});
	
	jQuery.each([ "height", "width" ], function( i, name ) {
		jQuery.cssHooks[ name ] = {
			get: function( elem, computed, extra ) {
				if ( computed ) {
					// certain elements can have dimension info if we invisibly show them
					// however, it must have a current display style that would benefit from this
					return rdisplayswap.test( jQuery.css( elem, "display" ) ) && elem.offsetWidth === 0 ?
						jQuery.swap( elem, cssShow, function() {
							return getWidthOrHeight( elem, name, extra );
						}) :
						getWidthOrHeight( elem, name, extra );
				}
			},
	
			set: function( elem, value, extra ) {
				var styles = extra && getStyles( elem );
				return setPositiveNumber( elem, value, extra ?
					augmentWidthOrHeight(
						elem,
						name,
						extra,
						jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
						styles
					) : 0
				);
			}
		};
	});
	
	// Support: Android 2.3
	jQuery.cssHooks.marginRight = addGetHookIf( support.reliableMarginRight,
		function( elem, computed ) {
			if ( computed ) {
				// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
				// Work around by temporarily setting element display to inline-block
				return jQuery.swap( elem, { "display": "inline-block" },
					curCSS, [ elem, "marginRight" ] );
			}
		}
	);
	
	// These hooks are used by animate to expand properties
	jQuery.each({
		margin: "",
		padding: "",
		border: "Width"
	}, function( prefix, suffix ) {
		jQuery.cssHooks[ prefix + suffix ] = {
			expand: function( value ) {
				var i = 0,
					expanded = {},
	
					// assumes a single number if not a string
					parts = typeof value === "string" ? value.split(" ") : [ value ];
	
				for ( ; i < 4; i++ ) {
					expanded[ prefix + cssExpand[ i ] + suffix ] =
						parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
				}
	
				return expanded;
			}
		};
	
		if ( !rmargin.test( prefix ) ) {
			jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;
		}
	});
	
	jQuery.fn.extend({
		css: function( name, value ) {
			return access( this, function( elem, name, value ) {
				var styles, len,
					map = {},
					i = 0;
	
				if ( jQuery.isArray( name ) ) {
					styles = getStyles( elem );
					len = name.length;
	
					for ( ; i < len; i++ ) {
						map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );
					}
	
					return map;
				}
	
				return value !== undefined ?
					jQuery.style( elem, name, value ) :
					jQuery.css( elem, name );
			}, name, value, arguments.length > 1 );
		},
		show: function() {
			return showHide( this, true );
		},
		hide: function() {
			return showHide( this );
		},
		toggle: function( state ) {
			if ( typeof state === "boolean" ) {
				return state ? this.show() : this.hide();
			}
	
			return this.each(function() {
				if ( isHidden( this ) ) {
					jQuery( this ).show();
				} else {
					jQuery( this ).hide();
				}
			});
		}
	});
	
	
	function Tween( elem, options, prop, end, easing ) {
		return new Tween.prototype.init( elem, options, prop, end, easing );
	}
	jQuery.Tween = Tween;
	
	Tween.prototype = {
		constructor: Tween,
		init: function( elem, options, prop, end, easing, unit ) {
			this.elem = elem;
			this.prop = prop;
			this.easing = easing || "swing";
			this.options = options;
			this.start = this.now = this.cur();
			this.end = end;
			this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );
		},
		cur: function() {
			var hooks = Tween.propHooks[ this.prop ];
	
			return hooks && hooks.get ?
				hooks.get( this ) :
				Tween.propHooks._default.get( this );
		},
		run: function( percent ) {
			var eased,
				hooks = Tween.propHooks[ this.prop ];
	
			if ( this.options.duration ) {
				this.pos = eased = jQuery.easing[ this.easing ](
					percent, this.options.duration * percent, 0, 1, this.options.duration
				);
			} else {
				this.pos = eased = percent;
			}
			this.now = ( this.end - this.start ) * eased + this.start;
	
			if ( this.options.step ) {
				this.options.step.call( this.elem, this.now, this );
			}
	
			if ( hooks && hooks.set ) {
				hooks.set( this );
			} else {
				Tween.propHooks._default.set( this );
			}
			return this;
		}
	};
	
	Tween.prototype.init.prototype = Tween.prototype;
	
	Tween.propHooks = {
		_default: {
			get: function( tween ) {
				var result;
	
				if ( tween.elem[ tween.prop ] != null &&
					(!tween.elem.style || tween.elem.style[ tween.prop ] == null) ) {
					return tween.elem[ tween.prop ];
				}
	
				// passing an empty string as a 3rd parameter to .css will automatically
				// attempt a parseFloat and fallback to a string if the parse fails
				// so, simple values such as "10px" are parsed to Float.
				// complex values such as "rotate(1rad)" are returned as is.
				result = jQuery.css( tween.elem, tween.prop, "" );
				// Empty strings, null, undefined and "auto" are converted to 0.
				return !result || result === "auto" ? 0 : result;
			},
			set: function( tween ) {
				// use step hook for back compat - use cssHook if its there - use .style if its
				// available and use plain properties where available
				if ( jQuery.fx.step[ tween.prop ] ) {
					jQuery.fx.step[ tween.prop ]( tween );
				} else if ( tween.elem.style && ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || jQuery.cssHooks[ tween.prop ] ) ) {
					jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
				} else {
					tween.elem[ tween.prop ] = tween.now;
				}
			}
		}
	};
	
	// Support: IE9
	// Panic based approach to setting things on disconnected nodes
	
	Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
		set: function( tween ) {
			if ( tween.elem.nodeType && tween.elem.parentNode ) {
				tween.elem[ tween.prop ] = tween.now;
			}
		}
	};
	
	jQuery.easing = {
		linear: function( p ) {
			return p;
		},
		swing: function( p ) {
			return 0.5 - Math.cos( p * Math.PI ) / 2;
		}
	};
	
	jQuery.fx = Tween.prototype.init;
	
	// Back Compat <1.8 extension point
	jQuery.fx.step = {};
	
	
	
	
	var
		fxNow, timerId,
		rfxtypes = /^(?:toggle|show|hide)$/,
		rfxnum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ),
		rrun = /queueHooks$/,
		animationPrefilters = [ defaultPrefilter ],
		tweeners = {
			"*": [ function( prop, value ) {
				var tween = this.createTween( prop, value ),
					target = tween.cur(),
					parts = rfxnum.exec( value ),
					unit = parts && parts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ),
	
					// Starting value computation is required for potential unit mismatches
					start = ( jQuery.cssNumber[ prop ] || unit !== "px" && +target ) &&
						rfxnum.exec( jQuery.css( tween.elem, prop ) ),
					scale = 1,
					maxIterations = 20;
	
				if ( start && start[ 3 ] !== unit ) {
					// Trust units reported by jQuery.css
					unit = unit || start[ 3 ];
	
					// Make sure we update the tween properties later on
					parts = parts || [];
	
					// Iteratively approximate from a nonzero starting point
					start = +target || 1;
	
					do {
						// If previous iteration zeroed out, double until we get *something*
						// Use a string for doubling factor so we don't accidentally see scale as unchanged below
						scale = scale || ".5";
	
						// Adjust and apply
						start = start / scale;
						jQuery.style( tween.elem, prop, start + unit );
	
					// Update scale, tolerating zero or NaN from tween.cur()
					// And breaking the loop if scale is unchanged or perfect, or if we've just had enough
					} while ( scale !== (scale = tween.cur() / target) && scale !== 1 && --maxIterations );
				}
	
				// Update tween properties
				if ( parts ) {
					start = tween.start = +start || +target || 0;
					tween.unit = unit;
					// If a +=/-= token was provided, we're doing a relative animation
					tween.end = parts[ 1 ] ?
						start + ( parts[ 1 ] + 1 ) * parts[ 2 ] :
						+parts[ 2 ];
				}
	
				return tween;
			} ]
		};
	
	// Animations created synchronously will run synchronously
	function createFxNow() {
		setTimeout(function() {
			fxNow = undefined;
		});
		return ( fxNow = jQuery.now() );
	}
	
	// Generate parameters to create a standard animation
	function genFx( type, includeWidth ) {
		var which,
			i = 0,
			attrs = { height: type };
	
		// if we include width, step value is 1 to do all cssExpand values,
		// if we don't include width, step value is 2 to skip over Left and Right
		includeWidth = includeWidth ? 1 : 0;
		for ( ; i < 4 ; i += 2 - includeWidth ) {
			which = cssExpand[ i ];
			attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;
		}
	
		if ( includeWidth ) {
			attrs.opacity = attrs.width = type;
		}
	
		return attrs;
	}
	
	function createTween( value, prop, animation ) {
		var tween,
			collection = ( tweeners[ prop ] || [] ).concat( tweeners[ "*" ] ),
			index = 0,
			length = collection.length;
		for ( ; index < length; index++ ) {
			if ( (tween = collection[ index ].call( animation, prop, value )) ) {
	
				// we're done with this property
				return tween;
			}
		}
	}
	
	function defaultPrefilter( elem, props, opts ) {
		/* jshint validthis: true */
		var prop, value, toggle, tween, hooks, oldfire, display, checkDisplay,
			anim = this,
			orig = {},
			style = elem.style,
			hidden = elem.nodeType && isHidden( elem ),
			dataShow = data_priv.get( elem, "fxshow" );
	
		// handle queue: false promises
		if ( !opts.queue ) {
			hooks = jQuery._queueHooks( elem, "fx" );
			if ( hooks.unqueued == null ) {
				hooks.unqueued = 0;
				oldfire = hooks.empty.fire;
				hooks.empty.fire = function() {
					if ( !hooks.unqueued ) {
						oldfire();
					}
				};
			}
			hooks.unqueued++;
	
			anim.always(function() {
				// doing this makes sure that the complete handler will be called
				// before this completes
				anim.always(function() {
					hooks.unqueued--;
					if ( !jQuery.queue( elem, "fx" ).length ) {
						hooks.empty.fire();
					}
				});
			});
		}
	
		// height/width overflow pass
		if ( elem.nodeType === 1 && ( "height" in props || "width" in props ) ) {
			// Make sure that nothing sneaks out
			// Record all 3 overflow attributes because IE9-10 do not
			// change the overflow attribute when overflowX and
			// overflowY are set to the same value
			opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];
	
			// Set display property to inline-block for height/width
			// animations on inline elements that are having width/height animated
			display = jQuery.css( elem, "display" );
	
			// Test default display if display is currently "none"
			checkDisplay = display === "none" ?
				data_priv.get( elem, "olddisplay" ) || defaultDisplay( elem.nodeName ) : display;
	
			if ( checkDisplay === "inline" && jQuery.css( elem, "float" ) === "none" ) {
				style.display = "inline-block";
			}
		}
	
		if ( opts.overflow ) {
			style.overflow = "hidden";
			anim.always(function() {
				style.overflow = opts.overflow[ 0 ];
				style.overflowX = opts.overflow[ 1 ];
				style.overflowY = opts.overflow[ 2 ];
			});
		}
	
		// show/hide pass
		for ( prop in props ) {
			value = props[ prop ];
			if ( rfxtypes.exec( value ) ) {
				delete props[ prop ];
				toggle = toggle || value === "toggle";
				if ( value === ( hidden ? "hide" : "show" ) ) {
	
					// If there is dataShow left over from a stopped hide or show and we are going to proceed with show, we should pretend to be hidden
					if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) {
						hidden = true;
					} else {
						continue;
					}
				}
				orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );
	
			// Any non-fx value stops us from restoring the original display value
			} else {
				display = undefined;
			}
		}
	
		if ( !jQuery.isEmptyObject( orig ) ) {
			if ( dataShow ) {
				if ( "hidden" in dataShow ) {
					hidden = dataShow.hidden;
				}
			} else {
				dataShow = data_priv.access( elem, "fxshow", {} );
			}
	
			// store state if its toggle - enables .stop().toggle() to "reverse"
			if ( toggle ) {
				dataShow.hidden = !hidden;
			}
			if ( hidden ) {
				jQuery( elem ).show();
			} else {
				anim.done(function() {
					jQuery( elem ).hide();
				});
			}
			anim.done(function() {
				var prop;
	
				data_priv.remove( elem, "fxshow" );
				for ( prop in orig ) {
					jQuery.style( elem, prop, orig[ prop ] );
				}
			});
			for ( prop in orig ) {
				tween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );
	
				if ( !( prop in dataShow ) ) {
					dataShow[ prop ] = tween.start;
					if ( hidden ) {
						tween.end = tween.start;
						tween.start = prop === "width" || prop === "height" ? 1 : 0;
					}
				}
			}
	
		// If this is a noop like .hide().hide(), restore an overwritten display value
		} else if ( (display === "none" ? defaultDisplay( elem.nodeName ) : display) === "inline" ) {
			style.display = display;
		}
	}
	
	function propFilter( props, specialEasing ) {
		var index, name, easing, value, hooks;
	
		// camelCase, specialEasing and expand cssHook pass
		for ( index in props ) {
			name = jQuery.camelCase( index );
			easing = specialEasing[ name ];
			value = props[ index ];
			if ( jQuery.isArray( value ) ) {
				easing = value[ 1 ];
				value = props[ index ] = value[ 0 ];
			}
	
			if ( index !== name ) {
				props[ name ] = value;
				delete props[ index ];
			}
	
			hooks = jQuery.cssHooks[ name ];
			if ( hooks && "expand" in hooks ) {
				value = hooks.expand( value );
				delete props[ name ];
	
				// not quite $.extend, this wont overwrite keys already present.
				// also - reusing 'index' from above because we have the correct "name"
				for ( index in value ) {
					if ( !( index in props ) ) {
						props[ index ] = value[ index ];
						specialEasing[ index ] = easing;
					}
				}
			} else {
				specialEasing[ name ] = easing;
			}
		}
	}
	
	function Animation( elem, properties, options ) {
		var result,
			stopped,
			index = 0,
			length = animationPrefilters.length,
			deferred = jQuery.Deferred().always( function() {
				// don't match elem in the :animated selector
				delete tick.elem;
			}),
			tick = function() {
				if ( stopped ) {
					return false;
				}
				var currentTime = fxNow || createFxNow(),
					remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
					// archaic crash bug won't allow us to use 1 - ( 0.5 || 0 ) (#12497)
					temp = remaining / animation.duration || 0,
					percent = 1 - temp,
					index = 0,
					length = animation.tweens.length;
	
				for ( ; index < length ; index++ ) {
					animation.tweens[ index ].run( percent );
				}
	
				deferred.notifyWith( elem, [ animation, percent, remaining ]);
	
				if ( percent < 1 && length ) {
					return remaining;
				} else {
					deferred.resolveWith( elem, [ animation ] );
					return false;
				}
			},
			animation = deferred.promise({
				elem: elem,
				props: jQuery.extend( {}, properties ),
				opts: jQuery.extend( true, { specialEasing: {} }, options ),
				originalProperties: properties,
				originalOptions: options,
				startTime: fxNow || createFxNow(),
				duration: options.duration,
				tweens: [],
				createTween: function( prop, end ) {
					var tween = jQuery.Tween( elem, animation.opts, prop, end,
							animation.opts.specialEasing[ prop ] || animation.opts.easing );
					animation.tweens.push( tween );
					return tween;
				},
				stop: function( gotoEnd ) {
					var index = 0,
						// if we are going to the end, we want to run all the tweens
						// otherwise we skip this part
						length = gotoEnd ? animation.tweens.length : 0;
					if ( stopped ) {
						return this;
					}
					stopped = true;
					for ( ; index < length ; index++ ) {
						animation.tweens[ index ].run( 1 );
					}
	
					// resolve when we played the last frame
					// otherwise, reject
					if ( gotoEnd ) {
						deferred.resolveWith( elem, [ animation, gotoEnd ] );
					} else {
						deferred.rejectWith( elem, [ animation, gotoEnd ] );
					}
					return this;
				}
			}),
			props = animation.props;
	
		propFilter( props, animation.opts.specialEasing );
	
		for ( ; index < length ; index++ ) {
			result = animationPrefilters[ index ].call( animation, elem, props, animation.opts );
			if ( result ) {
				return result;
			}
		}
	
		jQuery.map( props, createTween, animation );
	
		if ( jQuery.isFunction( animation.opts.start ) ) {
			animation.opts.start.call( elem, animation );
		}
	
		jQuery.fx.timer(
			jQuery.extend( tick, {
				elem: elem,
				anim: animation,
				queue: animation.opts.queue
			})
		);
	
		// attach callbacks from options
		return animation.progress( animation.opts.progress )
			.done( animation.opts.done, animation.opts.complete )
			.fail( animation.opts.fail )
			.always( animation.opts.always );
	}
	
	jQuery.Animation = jQuery.extend( Animation, {
	
		tweener: function( props, callback ) {
			if ( jQuery.isFunction( props ) ) {
				callback = props;
				props = [ "*" ];
			} else {
				props = props.split(" ");
			}
	
			var prop,
				index = 0,
				length = props.length;
	
			for ( ; index < length ; index++ ) {
				prop = props[ index ];
				tweeners[ prop ] = tweeners[ prop ] || [];
				tweeners[ prop ].unshift( callback );
			}
		},
	
		prefilter: function( callback, prepend ) {
			if ( prepend ) {
				animationPrefilters.unshift( callback );
			} else {
				animationPrefilters.push( callback );
			}
		}
	});
	
	jQuery.speed = function( speed, easing, fn ) {
		var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
			complete: fn || !fn && easing ||
				jQuery.isFunction( speed ) && speed,
			duration: speed,
			easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing
		};
	
		opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
			opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;
	
		// normalize opt.queue - true/undefined/null -> "fx"
		if ( opt.queue == null || opt.queue === true ) {
			opt.queue = "fx";
		}
	
		// Queueing
		opt.old = opt.complete;
	
		opt.complete = function() {
			if ( jQuery.isFunction( opt.old ) ) {
				opt.old.call( this );
			}
	
			if ( opt.queue ) {
				jQuery.dequeue( this, opt.queue );
			}
		};
	
		return opt;
	};
	
	jQuery.fn.extend({
		fadeTo: function( speed, to, easing, callback ) {
	
			// show any hidden elements after setting opacity to 0
			return this.filter( isHidden ).css( "opacity", 0 ).show()
	
				// animate to the value specified
				.end().animate({ opacity: to }, speed, easing, callback );
		},
		animate: function( prop, speed, easing, callback ) {
			var empty = jQuery.isEmptyObject( prop ),
				optall = jQuery.speed( speed, easing, callback ),
				doAnimation = function() {
					// Operate on a copy of prop so per-property easing won't be lost
					var anim = Animation( this, jQuery.extend( {}, prop ), optall );
	
					// Empty animations, or finishing resolves immediately
					if ( empty || data_priv.get( this, "finish" ) ) {
						anim.stop( true );
					}
				};
				doAnimation.finish = doAnimation;
	
			return empty || optall.queue === false ?
				this.each( doAnimation ) :
				this.queue( optall.queue, doAnimation );
		},
		stop: function( type, clearQueue, gotoEnd ) {
			var stopQueue = function( hooks ) {
				var stop = hooks.stop;
				delete hooks.stop;
				stop( gotoEnd );
			};
	
			if ( typeof type !== "string" ) {
				gotoEnd = clearQueue;
				clearQueue = type;
				type = undefined;
			}
			if ( clearQueue && type !== false ) {
				this.queue( type || "fx", [] );
			}
	
			return this.each(function() {
				var dequeue = true,
					index = type != null && type + "queueHooks",
					timers = jQuery.timers,
					data = data_priv.get( this );
	
				if ( index ) {
					if ( data[ index ] && data[ index ].stop ) {
						stopQueue( data[ index ] );
					}
				} else {
					for ( index in data ) {
						if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {
							stopQueue( data[ index ] );
						}
					}
				}
	
				for ( index = timers.length; index--; ) {
					if ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) {
						timers[ index ].anim.stop( gotoEnd );
						dequeue = false;
						timers.splice( index, 1 );
					}
				}
	
				// start the next in the queue if the last step wasn't forced
				// timers currently will call their complete callbacks, which will dequeue
				// but only if they were gotoEnd
				if ( dequeue || !gotoEnd ) {
					jQuery.dequeue( this, type );
				}
			});
		},
		finish: function( type ) {
			if ( type !== false ) {
				type = type || "fx";
			}
			return this.each(function() {
				var index,
					data = data_priv.get( this ),
					queue = data[ type + "queue" ],
					hooks = data[ type + "queueHooks" ],
					timers = jQuery.timers,
					length = queue ? queue.length : 0;
	
				// enable finishing flag on private data
				data.finish = true;
	
				// empty the queue first
				jQuery.queue( this, type, [] );
	
				if ( hooks && hooks.stop ) {
					hooks.stop.call( this, true );
				}
	
				// look for any active animations, and finish them
				for ( index = timers.length; index--; ) {
					if ( timers[ index ].elem === this && timers[ index ].queue === type ) {
						timers[ index ].anim.stop( true );
						timers.splice( index, 1 );
					}
				}
	
				// look for any animations in the old queue and finish them
				for ( index = 0; index < length; index++ ) {
					if ( queue[ index ] && queue[ index ].finish ) {
						queue[ index ].finish.call( this );
					}
				}
	
				// turn off finishing flag
				delete data.finish;
			});
		}
	});
	
	jQuery.each([ "toggle", "show", "hide" ], function( i, name ) {
		var cssFn = jQuery.fn[ name ];
		jQuery.fn[ name ] = function( speed, easing, callback ) {
			return speed == null || typeof speed === "boolean" ?
				cssFn.apply( this, arguments ) :
				this.animate( genFx( name, true ), speed, easing, callback );
		};
	});
	
	// Generate shortcuts for custom animations
	jQuery.each({
		slideDown: genFx("show"),
		slideUp: genFx("hide"),
		slideToggle: genFx("toggle"),
		fadeIn: { opacity: "show" },
		fadeOut: { opacity: "hide" },
		fadeToggle: { opacity: "toggle" }
	}, function( name, props ) {
		jQuery.fn[ name ] = function( speed, easing, callback ) {
			return this.animate( props, speed, easing, callback );
		};
	});
	
	jQuery.timers = [];
	jQuery.fx.tick = function() {
		var timer,
			i = 0,
			timers = jQuery.timers;
	
		fxNow = jQuery.now();
	
		for ( ; i < timers.length; i++ ) {
			timer = timers[ i ];
			// Checks the timer has not already been removed
			if ( !timer() && timers[ i ] === timer ) {
				timers.splice( i--, 1 );
			}
		}
	
		if ( !timers.length ) {
			jQuery.fx.stop();
		}
		fxNow = undefined;
	};
	
	jQuery.fx.timer = function( timer ) {
		jQuery.timers.push( timer );
		if ( timer() ) {
			jQuery.fx.start();
		} else {
			jQuery.timers.pop();
		}
	};
	
	jQuery.fx.interval = 13;
	
	jQuery.fx.start = function() {
		if ( !timerId ) {
			timerId = setInterval( jQuery.fx.tick, jQuery.fx.interval );
		}
	};
	
	jQuery.fx.stop = function() {
		clearInterval( timerId );
		timerId = null;
	};
	
	jQuery.fx.speeds = {
		slow: 600,
		fast: 200,
		// Default speed
		_default: 400
	};
	
	
	// Based off of the plugin by Clint Helfers, with permission.
	// http://blindsignals.com/index.php/2009/07/jquery-delay/
	jQuery.fn.delay = function( time, type ) {
		time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
		type = type || "fx";
	
		return this.queue( type, function( next, hooks ) {
			var timeout = setTimeout( next, time );
			hooks.stop = function() {
				clearTimeout( timeout );
			};
		});
	};
	
	
	(function() {
		var input = document.createElement( "input" ),
			select = document.createElement( "select" ),
			opt = select.appendChild( document.createElement( "option" ) );
	
		input.type = "checkbox";
	
		// Support: iOS 5.1, Android 4.x, Android 2.3
		// Check the default checkbox/radio value ("" on old WebKit; "on" elsewhere)
		support.checkOn = input.value !== "";
	
		// Must access the parent to make an option select properly
		// Support: IE9, IE10
		support.optSelected = opt.selected;
	
		// Make sure that the options inside disabled selects aren't marked as disabled
		// (WebKit marks them as disabled)
		select.disabled = true;
		support.optDisabled = !opt.disabled;
	
		// Check if an input maintains its value after becoming a radio
		// Support: IE9, IE10
		input = document.createElement( "input" );
		input.value = "t";
		input.type = "radio";
		support.radioValue = input.value === "t";
	})();
	
	
	var nodeHook, boolHook,
		attrHandle = jQuery.expr.attrHandle;
	
	jQuery.fn.extend({
		attr: function( name, value ) {
			return access( this, jQuery.attr, name, value, arguments.length > 1 );
		},
	
		removeAttr: function( name ) {
			return this.each(function() {
				jQuery.removeAttr( this, name );
			});
		}
	});
	
	jQuery.extend({
		attr: function( elem, name, value ) {
			var hooks, ret,
				nType = elem.nodeType;
	
			// don't get/set attributes on text, comment and attribute nodes
			if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
				return;
			}
	
			// Fallback to prop when attributes are not supported
			if ( typeof elem.getAttribute === strundefined ) {
				return jQuery.prop( elem, name, value );
			}
	
			// All attributes are lowercase
			// Grab necessary hook if one is defined
			if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
				name = name.toLowerCase();
				hooks = jQuery.attrHooks[ name ] ||
					( jQuery.expr.match.bool.test( name ) ? boolHook : nodeHook );
			}
	
			if ( value !== undefined ) {
	
				if ( value === null ) {
					jQuery.removeAttr( elem, name );
	
				} else if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {
					return ret;
	
				} else {
					elem.setAttribute( name, value + "" );
					return value;
				}
	
			} else if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) {
				return ret;
	
			} else {
				ret = jQuery.find.attr( elem, name );
	
				// Non-existent attributes return null, we normalize to undefined
				return ret == null ?
					undefined :
					ret;
			}
		},
	
		removeAttr: function( elem, value ) {
			var name, propName,
				i = 0,
				attrNames = value && value.match( rnotwhite );
	
			if ( attrNames && elem.nodeType === 1 ) {
				while ( (name = attrNames[i++]) ) {
					propName = jQuery.propFix[ name ] || name;
	
					// Boolean attributes get special treatment (#10870)
					if ( jQuery.expr.match.bool.test( name ) ) {
						// Set corresponding property to false
						elem[ propName ] = false;
					}
	
					elem.removeAttribute( name );
				}
			}
		},
	
		attrHooks: {
			type: {
				set: function( elem, value ) {
					if ( !support.radioValue && value === "radio" &&
						jQuery.nodeName( elem, "input" ) ) {
						// Setting the type on a radio button after the value resets the value in IE6-9
						// Reset value to default in case type is set after value during creation
						var val = elem.value;
						elem.setAttribute( "type", value );
						if ( val ) {
							elem.value = val;
						}
						return value;
					}
				}
			}
		}
	});
	
	// Hooks for boolean attributes
	boolHook = {
		set: function( elem, value, name ) {
			if ( value === false ) {
				// Remove boolean attributes when set to false
				jQuery.removeAttr( elem, name );
			} else {
				elem.setAttribute( name, name );
			}
			return name;
		}
	};
	jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) {
		var getter = attrHandle[ name ] || jQuery.find.attr;
	
		attrHandle[ name ] = function( elem, name, isXML ) {
			var ret, handle;
			if ( !isXML ) {
				// Avoid an infinite loop by temporarily removing this function from the getter
				handle = attrHandle[ name ];
				attrHandle[ name ] = ret;
				ret = getter( elem, name, isXML ) != null ?
					name.toLowerCase() :
					null;
				attrHandle[ name ] = handle;
			}
			return ret;
		};
	});
	
	
	
	
	var rfocusable = /^(?:input|select|textarea|button)$/i;
	
	jQuery.fn.extend({
		prop: function( name, value ) {
			return access( this, jQuery.prop, name, value, arguments.length > 1 );
		},
	
		removeProp: function( name ) {
			return this.each(function() {
				delete this[ jQuery.propFix[ name ] || name ];
			});
		}
	});
	
	jQuery.extend({
		propFix: {
			"for": "htmlFor",
			"class": "className"
		},
	
		prop: function( elem, name, value ) {
			var ret, hooks, notxml,
				nType = elem.nodeType;
	
			// don't get/set properties on text, comment and attribute nodes
			if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
				return;
			}
	
			notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
	
			if ( notxml ) {
				// Fix name and attach hooks
				name = jQuery.propFix[ name ] || name;
				hooks = jQuery.propHooks[ name ];
			}
	
			if ( value !== undefined ) {
				return hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ?
					ret :
					( elem[ name ] = value );
	
			} else {
				return hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ?
					ret :
					elem[ name ];
			}
		},
	
		propHooks: {
			tabIndex: {
				get: function( elem ) {
					return elem.hasAttribute( "tabindex" ) || rfocusable.test( elem.nodeName ) || elem.href ?
						elem.tabIndex :
						-1;
				}
			}
		}
	});
	
	// Support: IE9+
	// Selectedness for an option in an optgroup can be inaccurate
	if ( !support.optSelected ) {
		jQuery.propHooks.selected = {
			get: function( elem ) {
				var parent = elem.parentNode;
				if ( parent && parent.parentNode ) {
					parent.parentNode.selectedIndex;
				}
				return null;
			}
		};
	}
	
	jQuery.each([
		"tabIndex",
		"readOnly",
		"maxLength",
		"cellSpacing",
		"cellPadding",
		"rowSpan",
		"colSpan",
		"useMap",
		"frameBorder",
		"contentEditable"
	], function() {
		jQuery.propFix[ this.toLowerCase() ] = this;
	});
	
	
	
	
	var rclass = /[\t\r\n\f]/g;
	
	jQuery.fn.extend({
		addClass: function( value ) {
			var classes, elem, cur, clazz, j, finalValue,
				proceed = typeof value === "string" && value,
				i = 0,
				len = this.length;
	
			if ( jQuery.isFunction( value ) ) {
				return this.each(function( j ) {
					jQuery( this ).addClass( value.call( this, j, this.className ) );
				});
			}
	
			if ( proceed ) {
				// The disjunction here is for better compressibility (see removeClass)
				classes = ( value || "" ).match( rnotwhite ) || [];
	
				for ( ; i < len; i++ ) {
					elem = this[ i ];
					cur = elem.nodeType === 1 && ( elem.className ?
						( " " + elem.className + " " ).replace( rclass, " " ) :
						" "
					);
	
					if ( cur ) {
						j = 0;
						while ( (clazz = classes[j++]) ) {
							if ( cur.indexOf( " " + clazz + " " ) < 0 ) {
								cur += clazz + " ";
							}
						}
	
						// only assign if different to avoid unneeded rendering.
						finalValue = jQuery.trim( cur );
						if ( elem.className !== finalValue ) {
							elem.className = finalValue;
						}
					}
				}
			}
	
			return this;
		},
	
		removeClass: function( value ) {
			var classes, elem, cur, clazz, j, finalValue,
				proceed = arguments.length === 0 || typeof value === "string" && value,
				i = 0,
				len = this.length;
	
			if ( jQuery.isFunction( value ) ) {
				return this.each(function( j ) {
					jQuery( this ).removeClass( value.call( this, j, this.className ) );
				});
			}
			if ( proceed ) {
				classes = ( value || "" ).match( rnotwhite ) || [];
	
				for ( ; i < len; i++ ) {
					elem = this[ i ];
					// This expression is here for better compressibility (see addClass)
					cur = elem.nodeType === 1 && ( elem.className ?
						( " " + elem.className + " " ).replace( rclass, " " ) :
						""
					);
	
					if ( cur ) {
						j = 0;
						while ( (clazz = classes[j++]) ) {
							// Remove *all* instances
							while ( cur.indexOf( " " + clazz + " " ) >= 0 ) {
								cur = cur.replace( " " + clazz + " ", " " );
							}
						}
	
						// only assign if different to avoid unneeded rendering.
						finalValue = value ? jQuery.trim( cur ) : "";
						if ( elem.className !== finalValue ) {
							elem.className = finalValue;
						}
					}
				}
			}
	
			return this;
		},
	
		toggleClass: function( value, stateVal ) {
			var type = typeof value;
	
			if ( typeof stateVal === "boolean" && type === "string" ) {
				return stateVal ? this.addClass( value ) : this.removeClass( value );
			}
	
			if ( jQuery.isFunction( value ) ) {
				return this.each(function( i ) {
					jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );
				});
			}
	
			return this.each(function() {
				if ( type === "string" ) {
					// toggle individual class names
					var className,
						i = 0,
						self = jQuery( this ),
						classNames = value.match( rnotwhite ) || [];
	
					while ( (className = classNames[ i++ ]) ) {
						// check each className given, space separated list
						if ( self.hasClass( className ) ) {
							self.removeClass( className );
						} else {
							self.addClass( className );
						}
					}
	
				// Toggle whole class name
				} else if ( type === strundefined || type === "boolean" ) {
					if ( this.className ) {
						// store className if set
						data_priv.set( this, "__className__", this.className );
					}
	
					// If the element has a class name or if we're passed "false",
					// then remove the whole classname (if there was one, the above saved it).
					// Otherwise bring back whatever was previously saved (if anything),
					// falling back to the empty string if nothing was stored.
					this.className = this.className || value === false ? "" : data_priv.get( this, "__className__" ) || "";
				}
			});
		},
	
		hasClass: function( selector ) {
			var className = " " + selector + " ",
				i = 0,
				l = this.length;
			for ( ; i < l; i++ ) {
				if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) >= 0 ) {
					return true;
				}
			}
	
			return false;
		}
	});
	
	
	
	
	var rreturn = /\r/g;
	
	jQuery.fn.extend({
		val: function( value ) {
			var hooks, ret, isFunction,
				elem = this[0];
	
			if ( !arguments.length ) {
				if ( elem ) {
					hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ];
	
					if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) {
						return ret;
					}
	
					ret = elem.value;
	
					return typeof ret === "string" ?
						// handle most common string cases
						ret.replace(rreturn, "") :
						// handle cases where value is null/undef or number
						ret == null ? "" : ret;
				}
	
				return;
			}
	
			isFunction = jQuery.isFunction( value );
	
			return this.each(function( i ) {
				var val;
	
				if ( this.nodeType !== 1 ) {
					return;
				}
	
				if ( isFunction ) {
					val = value.call( this, i, jQuery( this ).val() );
				} else {
					val = value;
				}
	
				// Treat null/undefined as ""; convert numbers to string
				if ( val == null ) {
					val = "";
	
				} else if ( typeof val === "number" ) {
					val += "";
	
				} else if ( jQuery.isArray( val ) ) {
					val = jQuery.map( val, function( value ) {
						return value == null ? "" : value + "";
					});
				}
	
				hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
	
				// If set returns undefined, fall back to normal setting
				if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) {
					this.value = val;
				}
			});
		}
	});
	
	jQuery.extend({
		valHooks: {
			option: {
				get: function( elem ) {
					var val = jQuery.find.attr( elem, "value" );
					return val != null ?
						val :
						// Support: IE10-11+
						// option.text throws exceptions (#14686, #14858)
						jQuery.trim( jQuery.text( elem ) );
				}
			},
			select: {
				get: function( elem ) {
					var value, option,
						options = elem.options,
						index = elem.selectedIndex,
						one = elem.type === "select-one" || index < 0,
						values = one ? null : [],
						max = one ? index + 1 : options.length,
						i = index < 0 ?
							max :
							one ? index : 0;
	
					// Loop through all the selected options
					for ( ; i < max; i++ ) {
						option = options[ i ];
	
						// IE6-9 doesn't update selected after form reset (#2551)
						if ( ( option.selected || i === index ) &&
								// Don't return options that are disabled or in a disabled optgroup
								( support.optDisabled ? !option.disabled : option.getAttribute( "disabled" ) === null ) &&
								( !option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" ) ) ) {
	
							// Get the specific value for the option
							value = jQuery( option ).val();
	
							// We don't need an array for one selects
							if ( one ) {
								return value;
							}
	
							// Multi-Selects return an array
							values.push( value );
						}
					}
	
					return values;
				},
	
				set: function( elem, value ) {
					var optionSet, option,
						options = elem.options,
						values = jQuery.makeArray( value ),
						i = options.length;
	
					while ( i-- ) {
						option = options[ i ];
						if ( (option.selected = jQuery.inArray( option.value, values ) >= 0) ) {
							optionSet = true;
						}
					}
	
					// force browsers to behave consistently when non-matching value is set
					if ( !optionSet ) {
						elem.selectedIndex = -1;
					}
					return values;
				}
			}
		}
	});
	
	// Radios and checkboxes getter/setter
	jQuery.each([ "radio", "checkbox" ], function() {
		jQuery.valHooks[ this ] = {
			set: function( elem, value ) {
				if ( jQuery.isArray( value ) ) {
					return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 );
				}
			}
		};
		if ( !support.checkOn ) {
			jQuery.valHooks[ this ].get = function( elem ) {
				// Support: Webkit
				// "" is returned instead of "on" if a value isn't specified
				return elem.getAttribute("value") === null ? "on" : elem.value;
			};
		}
	});
	
	
	
	
	// Return jQuery for attributes-only inclusion
	
	
	jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " +
		"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
		"change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) {
	
		// Handle event binding
		jQuery.fn[ name ] = function( data, fn ) {
			return arguments.length > 0 ?
				this.on( name, null, data, fn ) :
				this.trigger( name );
		};
	});
	
	jQuery.fn.extend({
		hover: function( fnOver, fnOut ) {
			return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
		},
	
		bind: function( types, data, fn ) {
			return this.on( types, null, data, fn );
		},
		unbind: function( types, fn ) {
			return this.off( types, null, fn );
		},
	
		delegate: function( selector, types, data, fn ) {
			return this.on( types, selector, data, fn );
		},
		undelegate: function( selector, types, fn ) {
			// ( namespace ) or ( selector, types [, fn] )
			return arguments.length === 1 ? this.off( selector, "**" ) : this.off( types, selector || "**", fn );
		}
	});
	
	
	var nonce = jQuery.now();
	
	var rquery = (/\?/);
	
	
	
	// Support: Android 2.3
	// Workaround failure to string-cast null input
	jQuery.parseJSON = function( data ) {
		return JSON.parse( data + "" );
	};
	
	
	// Cross-browser xml parsing
	jQuery.parseXML = function( data ) {
		var xml, tmp;
		if ( !data || typeof data !== "string" ) {
			return null;
		}
	
		// Support: IE9
		try {
			tmp = new DOMParser();
			xml = tmp.parseFromString( data, "text/xml" );
		} catch ( e ) {
			xml = undefined;
		}
	
		if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) {
			jQuery.error( "Invalid XML: " + data );
		}
		return xml;
	};
	
	
	var
		// Document location
		ajaxLocParts,
		ajaxLocation,
	
		rhash = /#.*$/,
		rts = /([?&])_=[^&]*/,
		rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg,
		// #7653, #8125, #8152: local protocol detection
		rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
		rnoContent = /^(?:GET|HEAD)$/,
		rprotocol = /^\/\//,
		rurl = /^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,
	
		/* Prefilters
		 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
		 * 2) These are called:
		 *    - BEFORE asking for a transport
		 *    - AFTER param serialization (s.data is a string if s.processData is true)
		 * 3) key is the dataType
		 * 4) the catchall symbol "*" can be used
		 * 5) execution will start with transport dataType and THEN continue down to "*" if needed
		 */
		prefilters = {},
	
		/* Transports bindings
		 * 1) key is the dataType
		 * 2) the catchall symbol "*" can be used
		 * 3) selection will start with transport dataType and THEN go to "*" if needed
		 */
		transports = {},
	
		// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
		allTypes = "*/".concat("*");
	
	// #8138, IE may throw an exception when accessing
	// a field from window.location if document.domain has been set
	try {
		ajaxLocation = location.href;
	} catch( e ) {
		// Use the href attribute of an A element
		// since IE will modify it given document.location
		ajaxLocation = document.createElement( "a" );
		ajaxLocation.href = "";
		ajaxLocation = ajaxLocation.href;
	}
	
	// Segment location into parts
	ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];
	
	// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
	function addToPrefiltersOrTransports( structure ) {
	
		// dataTypeExpression is optional and defaults to "*"
		return function( dataTypeExpression, func ) {
	
			if ( typeof dataTypeExpression !== "string" ) {
				func = dataTypeExpression;
				dataTypeExpression = "*";
			}
	
			var dataType,
				i = 0,
				dataTypes = dataTypeExpression.toLowerCase().match( rnotwhite ) || [];
	
			if ( jQuery.isFunction( func ) ) {
				// For each dataType in the dataTypeExpression
				while ( (dataType = dataTypes[i++]) ) {
					// Prepend if requested
					if ( dataType[0] === "+" ) {
						dataType = dataType.slice( 1 ) || "*";
						(structure[ dataType ] = structure[ dataType ] || []).unshift( func );
	
					// Otherwise append
					} else {
						(structure[ dataType ] = structure[ dataType ] || []).push( func );
					}
				}
			}
		};
	}
	
	// Base inspection function for prefilters and transports
	function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {
	
		var inspected = {},
			seekingTransport = ( structure === transports );
	
		function inspect( dataType ) {
			var selected;
			inspected[ dataType ] = true;
			jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {
				var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );
				if ( typeof dataTypeOrTransport === "string" && !seekingTransport && !inspected[ dataTypeOrTransport ] ) {
					options.dataTypes.unshift( dataTypeOrTransport );
					inspect( dataTypeOrTransport );
					return false;
				} else if ( seekingTransport ) {
					return !( selected = dataTypeOrTransport );
				}
			});
			return selected;
		}
	
		return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" );
	}
	
	// A special extend for ajax options
	// that takes "flat" options (not to be deep extended)
	// Fixes #9887
	function ajaxExtend( target, src ) {
		var key, deep,
			flatOptions = jQuery.ajaxSettings.flatOptions || {};
	
		for ( key in src ) {
			if ( src[ key ] !== undefined ) {
				( flatOptions[ key ] ? target : ( deep || (deep = {}) ) )[ key ] = src[ key ];
			}
		}
		if ( deep ) {
			jQuery.extend( true, target, deep );
		}
	
		return target;
	}
	
	/* Handles responses to an ajax request:
	 * - finds the right dataType (mediates between content-type and expected dataType)
	 * - returns the corresponding response
	 */
	function ajaxHandleResponses( s, jqXHR, responses ) {
	
		var ct, type, finalDataType, firstDataType,
			contents = s.contents,
			dataTypes = s.dataTypes;
	
		// Remove auto dataType and get content-type in the process
		while ( dataTypes[ 0 ] === "*" ) {
			dataTypes.shift();
			if ( ct === undefined ) {
				ct = s.mimeType || jqXHR.getResponseHeader("Content-Type");
			}
		}
	
		// Check if we're dealing with a known content-type
		if ( ct ) {
			for ( type in contents ) {
				if ( contents[ type ] && contents[ type ].test( ct ) ) {
					dataTypes.unshift( type );
					break;
				}
			}
		}
	
		// Check to see if we have a response for the expected dataType
		if ( dataTypes[ 0 ] in responses ) {
			finalDataType = dataTypes[ 0 ];
		} else {
			// Try convertible dataTypes
			for ( type in responses ) {
				if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) {
					finalDataType = type;
					break;
				}
				if ( !firstDataType ) {
					firstDataType = type;
				}
			}
			// Or just use first one
			finalDataType = finalDataType || firstDataType;
		}
	
		// If we found a dataType
		// We add the dataType to the list if needed
		// and return the corresponding response
		if ( finalDataType ) {
			if ( finalDataType !== dataTypes[ 0 ] ) {
				dataTypes.unshift( finalDataType );
			}
			return responses[ finalDataType ];
		}
	}
	
	/* Chain conversions given the request and the original response
	 * Also sets the responseXXX fields on the jqXHR instance
	 */
	function ajaxConvert( s, response, jqXHR, isSuccess ) {
		var conv2, current, conv, tmp, prev,
			converters = {},
			// Work with a copy of dataTypes in case we need to modify it for conversion
			dataTypes = s.dataTypes.slice();
	
		// Create converters map with lowercased keys
		if ( dataTypes[ 1 ] ) {
			for ( conv in s.converters ) {
				converters[ conv.toLowerCase() ] = s.converters[ conv ];
			}
		}
	
		current = dataTypes.shift();
	
		// Convert to each sequential dataType
		while ( current ) {
	
			if ( s.responseFields[ current ] ) {
				jqXHR[ s.responseFields[ current ] ] = response;
			}
	
			// Apply the dataFilter if provided
			if ( !prev && isSuccess && s.dataFilter ) {
				response = s.dataFilter( response, s.dataType );
			}
	
			prev = current;
			current = dataTypes.shift();
	
			if ( current ) {
	
			// There's only work to do if current dataType is non-auto
				if ( current === "*" ) {
	
					current = prev;
	
				// Convert response if prev dataType is non-auto and differs from current
				} else if ( prev !== "*" && prev !== current ) {
	
					// Seek a direct converter
					conv = converters[ prev + " " + current ] || converters[ "* " + current ];
	
					// If none found, seek a pair
					if ( !conv ) {
						for ( conv2 in converters ) {
	
							// If conv2 outputs current
							tmp = conv2.split( " " );
							if ( tmp[ 1 ] === current ) {
	
								// If prev can be converted to accepted input
								conv = converters[ prev + " " + tmp[ 0 ] ] ||
									converters[ "* " + tmp[ 0 ] ];
								if ( conv ) {
									// Condense equivalence converters
									if ( conv === true ) {
										conv = converters[ conv2 ];
	
									// Otherwise, insert the intermediate dataType
									} else if ( converters[ conv2 ] !== true ) {
										current = tmp[ 0 ];
										dataTypes.unshift( tmp[ 1 ] );
									}
									break;
								}
							}
						}
					}
	
					// Apply converter (if not an equivalence)
					if ( conv !== true ) {
	
						// Unless errors are allowed to bubble, catch and return them
						if ( conv && s[ "throws" ] ) {
							response = conv( response );
						} else {
							try {
								response = conv( response );
							} catch ( e ) {
								return { state: "parsererror", error: conv ? e : "No conversion from " + prev + " to " + current };
							}
						}
					}
				}
			}
		}
	
		return { state: "success", data: response };
	}
	
	jQuery.extend({
	
		// Counter for holding the number of active queries
		active: 0,
	
		// Last-Modified header cache for next request
		lastModified: {},
		etag: {},
	
		ajaxSettings: {
			url: ajaxLocation,
			type: "GET",
			isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),
			global: true,
			processData: true,
			async: true,
			contentType: "application/x-www-form-urlencoded; charset=UTF-8",
			/*
			timeout: 0,
			data: null,
			dataType: null,
			username: null,
			password: null,
			cache: null,
			throws: false,
			traditional: false,
			headers: {},
			*/
	
			accepts: {
				"*": allTypes,
				text: "text/plain",
				html: "text/html",
				xml: "application/xml, text/xml",
				json: "application/json, text/javascript"
			},
	
			contents: {
				xml: /xml/,
				html: /html/,
				json: /json/
			},
	
			responseFields: {
				xml: "responseXML",
				text: "responseText",
				json: "responseJSON"
			},
	
			// Data converters
			// Keys separate source (or catchall "*") and destination types with a single space
			converters: {
	
				// Convert anything to text
				"* text": String,
	
				// Text to html (true = no transformation)
				"text html": true,
	
				// Evaluate text as a json expression
				"text json": jQuery.parseJSON,
	
				// Parse text as xml
				"text xml": jQuery.parseXML
			},
	
			// For options that shouldn't be deep extended:
			// you can add your own custom options here if
			// and when you create one that shouldn't be
			// deep extended (see ajaxExtend)
			flatOptions: {
				url: true,
				context: true
			}
		},
	
		// Creates a full fledged settings object into target
		// with both ajaxSettings and settings fields.
		// If target is omitted, writes into ajaxSettings.
		ajaxSetup: function( target, settings ) {
			return settings ?
	
				// Building a settings object
				ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :
	
				// Extending ajaxSettings
				ajaxExtend( jQuery.ajaxSettings, target );
		},
	
		ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
		ajaxTransport: addToPrefiltersOrTransports( transports ),
	
		// Main method
		ajax: function( url, options ) {
	
			// If url is an object, simulate pre-1.5 signature
			if ( typeof url === "object" ) {
				options = url;
				url = undefined;
			}
	
			// Force options to be an object
			options = options || {};
	
			var transport,
				// URL without anti-cache param
				cacheURL,
				// Response headers
				responseHeadersString,
				responseHeaders,
				// timeout handle
				timeoutTimer,
				// Cross-domain detection vars
				parts,
				// To know if global events are to be dispatched
				fireGlobals,
				// Loop variable
				i,
				// Create the final options object
				s = jQuery.ajaxSetup( {}, options ),
				// Callbacks context
				callbackContext = s.context || s,
				// Context for global events is callbackContext if it is a DOM node or jQuery collection
				globalEventContext = s.context && ( callbackContext.nodeType || callbackContext.jquery ) ?
					jQuery( callbackContext ) :
					jQuery.event,
				// Deferreds
				deferred = jQuery.Deferred(),
				completeDeferred = jQuery.Callbacks("once memory"),
				// Status-dependent callbacks
				statusCode = s.statusCode || {},
				// Headers (they are sent all at once)
				requestHeaders = {},
				requestHeadersNames = {},
				// The jqXHR state
				state = 0,
				// Default abort message
				strAbort = "canceled",
				// Fake xhr
				jqXHR = {
					readyState: 0,
	
					// Builds headers hashtable if needed
					getResponseHeader: function( key ) {
						var match;
						if ( state === 2 ) {
							if ( !responseHeaders ) {
								responseHeaders = {};
								while ( (match = rheaders.exec( responseHeadersString )) ) {
									responseHeaders[ match[1].toLowerCase() ] = match[ 2 ];
								}
							}
							match = responseHeaders[ key.toLowerCase() ];
						}
						return match == null ? null : match;
					},
	
					// Raw string
					getAllResponseHeaders: function() {
						return state === 2 ? responseHeadersString : null;
					},
	
					// Caches the header
					setRequestHeader: function( name, value ) {
						var lname = name.toLowerCase();
						if ( !state ) {
							name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;
							requestHeaders[ name ] = value;
						}
						return this;
					},
	
					// Overrides response content-type header
					overrideMimeType: function( type ) {
						if ( !state ) {
							s.mimeType = type;
						}
						return this;
					},
	
					// Status-dependent callbacks
					statusCode: function( map ) {
						var code;
						if ( map ) {
							if ( state < 2 ) {
								for ( code in map ) {
									// Lazy-add the new callback in a way that preserves old ones
									statusCode[ code ] = [ statusCode[ code ], map[ code ] ];
								}
							} else {
								// Execute the appropriate callbacks
								jqXHR.always( map[ jqXHR.status ] );
							}
						}
						return this;
					},
	
					// Cancel the request
					abort: function( statusText ) {
						var finalText = statusText || strAbort;
						if ( transport ) {
							transport.abort( finalText );
						}
						done( 0, finalText );
						return this;
					}
				};
	
			// Attach deferreds
			deferred.promise( jqXHR ).complete = completeDeferred.add;
			jqXHR.success = jqXHR.done;
			jqXHR.error = jqXHR.fail;
	
			// Remove hash character (#7531: and string promotion)
			// Add protocol if not provided (prefilters might expect it)
			// Handle falsy url in the settings object (#10093: consistency with old signature)
			// We also use the url parameter if available
			s.url = ( ( url || s.url || ajaxLocation ) + "" ).replace( rhash, "" )
				.replace( rprotocol, ajaxLocParts[ 1 ] + "//" );
	
			// Alias method option to type as per ticket #12004
			s.type = options.method || options.type || s.method || s.type;
	
			// Extract dataTypes list
			s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().match( rnotwhite ) || [ "" ];
	
			// A cross-domain request is in order when we have a protocol:host:port mismatch
			if ( s.crossDomain == null ) {
				parts = rurl.exec( s.url.toLowerCase() );
				s.crossDomain = !!( parts &&
					( parts[ 1 ] !== ajaxLocParts[ 1 ] || parts[ 2 ] !== ajaxLocParts[ 2 ] ||
						( parts[ 3 ] || ( parts[ 1 ] === "http:" ? "80" : "443" ) ) !==
							( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? "80" : "443" ) ) )
				);
			}
	
			// Convert data if not already a string
			if ( s.data && s.processData && typeof s.data !== "string" ) {
				s.data = jQuery.param( s.data, s.traditional );
			}
	
			// Apply prefilters
			inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
	
			// If request was aborted inside a prefilter, stop there
			if ( state === 2 ) {
				return jqXHR;
			}
	
			// We can fire global events as of now if asked to
			fireGlobals = s.global;
	
			// Watch for a new set of requests
			if ( fireGlobals && jQuery.active++ === 0 ) {
				jQuery.event.trigger("ajaxStart");
			}
	
			// Uppercase the type
			s.type = s.type.toUpperCase();
	
			// Determine if request has content
			s.hasContent = !rnoContent.test( s.type );
	
			// Save the URL in case we're toying with the If-Modified-Since
			// and/or If-None-Match header later on
			cacheURL = s.url;
	
			// More options handling for requests with no content
			if ( !s.hasContent ) {
	
				// If data is available, append data to url
				if ( s.data ) {
					cacheURL = ( s.url += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data );
					// #9682: remove data so that it's not used in an eventual retry
					delete s.data;
				}
	
				// Add anti-cache in url if needed
				if ( s.cache === false ) {
					s.url = rts.test( cacheURL ) ?
	
						// If there is already a '_' parameter, set its value
						cacheURL.replace( rts, "$1_=" + nonce++ ) :
	
						// Otherwise add one to the end
						cacheURL + ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + nonce++;
				}
			}
	
			// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
			if ( s.ifModified ) {
				if ( jQuery.lastModified[ cacheURL ] ) {
					jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] );
				}
				if ( jQuery.etag[ cacheURL ] ) {
					jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] );
				}
			}
	
			// Set the correct header, if data is being sent
			if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
				jqXHR.setRequestHeader( "Content-Type", s.contentType );
			}
	
			// Set the Accepts header for the server, depending on the dataType
			jqXHR.setRequestHeader(
				"Accept",
				s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?
					s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
					s.accepts[ "*" ]
			);
	
			// Check for headers option
			for ( i in s.headers ) {
				jqXHR.setRequestHeader( i, s.headers[ i ] );
			}
	
			// Allow custom headers/mimetypes and early abort
			if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {
				// Abort if not done already and return
				return jqXHR.abort();
			}
	
			// aborting is no longer a cancellation
			strAbort = "abort";
	
			// Install callbacks on deferreds
			for ( i in { success: 1, error: 1, complete: 1 } ) {
				jqXHR[ i ]( s[ i ] );
			}
	
			// Get transport
			transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
	
			// If no transport, we auto-abort
			if ( !transport ) {
				done( -1, "No Transport" );
			} else {
				jqXHR.readyState = 1;
	
				// Send global event
				if ( fireGlobals ) {
					globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
				}
				// Timeout
				if ( s.async && s.timeout > 0 ) {
					timeoutTimer = setTimeout(function() {
						jqXHR.abort("timeout");
					}, s.timeout );
				}
	
				try {
					state = 1;
					transport.send( requestHeaders, done );
				} catch ( e ) {
					// Propagate exception as error if not done
					if ( state < 2 ) {
						done( -1, e );
					// Simply rethrow otherwise
					} else {
						throw e;
					}
				}
			}
	
			// Callback for when everything is done
			function done( status, nativeStatusText, responses, headers ) {
				var isSuccess, success, error, response, modified,
					statusText = nativeStatusText;
	
				// Called once
				if ( state === 2 ) {
					return;
				}
	
				// State is "done" now
				state = 2;
	
				// Clear timeout if it exists
				if ( timeoutTimer ) {
					clearTimeout( timeoutTimer );
				}
	
				// Dereference transport for early garbage collection
				// (no matter how long the jqXHR object will be used)
				transport = undefined;
	
				// Cache response headers
				responseHeadersString = headers || "";
	
				// Set readyState
				jqXHR.readyState = status > 0 ? 4 : 0;
	
				// Determine if successful
				isSuccess = status >= 200 && status < 300 || status === 304;
	
				// Get response data
				if ( responses ) {
					response = ajaxHandleResponses( s, jqXHR, responses );
				}
	
				// Convert no matter what (that way responseXXX fields are always set)
				response = ajaxConvert( s, response, jqXHR, isSuccess );
	
				// If successful, handle type chaining
				if ( isSuccess ) {
	
					// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
					if ( s.ifModified ) {
						modified = jqXHR.getResponseHeader("Last-Modified");
						if ( modified ) {
							jQuery.lastModified[ cacheURL ] = modified;
						}
						modified = jqXHR.getResponseHeader("etag");
						if ( modified ) {
							jQuery.etag[ cacheURL ] = modified;
						}
					}
	
					// if no content
					if ( status === 204 || s.type === "HEAD" ) {
						statusText = "nocontent";
	
					// if not modified
					} else if ( status === 304 ) {
						statusText = "notmodified";
	
					// If we have data, let's convert it
					} else {
						statusText = response.state;
						success = response.data;
						error = response.error;
						isSuccess = !error;
					}
				} else {
					// We extract error from statusText
					// then normalize statusText and status for non-aborts
					error = statusText;
					if ( status || !statusText ) {
						statusText = "error";
						if ( status < 0 ) {
							status = 0;
						}
					}
				}
	
				// Set data for the fake xhr object
				jqXHR.status = status;
				jqXHR.statusText = ( nativeStatusText || statusText ) + "";
	
				// Success/Error
				if ( isSuccess ) {
					deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
				} else {
					deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
				}
	
				// Status-dependent callbacks
				jqXHR.statusCode( statusCode );
				statusCode = undefined;
	
				if ( fireGlobals ) {
					globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError",
						[ jqXHR, s, isSuccess ? success : error ] );
				}
	
				// Complete
				completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
	
				if ( fireGlobals ) {
					globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
					// Handle the global AJAX counter
					if ( !( --jQuery.active ) ) {
						jQuery.event.trigger("ajaxStop");
					}
				}
			}
	
			return jqXHR;
		},
	
		getJSON: function( url, data, callback ) {
			return jQuery.get( url, data, callback, "json" );
		},
	
		getScript: function( url, callback ) {
			return jQuery.get( url, undefined, callback, "script" );
		}
	});
	
	jQuery.each( [ "get", "post" ], function( i, method ) {
		jQuery[ method ] = function( url, data, callback, type ) {
			// shift arguments if data argument was omitted
			if ( jQuery.isFunction( data ) ) {
				type = type || callback;
				callback = data;
				data = undefined;
			}
	
			return jQuery.ajax({
				url: url,
				type: method,
				dataType: type,
				data: data,
				success: callback
			});
		};
	});
	
	// Attach a bunch of functions for handling common AJAX events
	jQuery.each( [ "ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend" ], function( i, type ) {
		jQuery.fn[ type ] = function( fn ) {
			return this.on( type, fn );
		};
	});
	
	
	jQuery._evalUrl = function( url ) {
		return jQuery.ajax({
			url: url,
			type: "GET",
			dataType: "script",
			async: false,
			global: false,
			"throws": true
		});
	};
	
	
	jQuery.fn.extend({
		wrapAll: function( html ) {
			var wrap;
	
			if ( jQuery.isFunction( html ) ) {
				return this.each(function( i ) {
					jQuery( this ).wrapAll( html.call(this, i) );
				});
			}
	
			if ( this[ 0 ] ) {
	
				// The elements to wrap the target around
				wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );
	
				if ( this[ 0 ].parentNode ) {
					wrap.insertBefore( this[ 0 ] );
				}
	
				wrap.map(function() {
					var elem = this;
	
					while ( elem.firstElementChild ) {
						elem = elem.firstElementChild;
					}
	
					return elem;
				}).append( this );
			}
	
			return this;
		},
	
		wrapInner: function( html ) {
			if ( jQuery.isFunction( html ) ) {
				return this.each(function( i ) {
					jQuery( this ).wrapInner( html.call(this, i) );
				});
			}
	
			return this.each(function() {
				var self = jQuery( this ),
					contents = self.contents();
	
				if ( contents.length ) {
					contents.wrapAll( html );
	
				} else {
					self.append( html );
				}
			});
		},
	
		wrap: function( html ) {
			var isFunction = jQuery.isFunction( html );
	
			return this.each(function( i ) {
				jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html );
			});
		},
	
		unwrap: function() {
			return this.parent().each(function() {
				if ( !jQuery.nodeName( this, "body" ) ) {
					jQuery( this ).replaceWith( this.childNodes );
				}
			}).end();
		}
	});
	
	
	jQuery.expr.filters.hidden = function( elem ) {
		// Support: Opera <= 12.12
		// Opera reports offsetWidths and offsetHeights less than zero on some elements
		return elem.offsetWidth <= 0 && elem.offsetHeight <= 0;
	};
	jQuery.expr.filters.visible = function( elem ) {
		return !jQuery.expr.filters.hidden( elem );
	};
	
	
	
	
	var r20 = /%20/g,
		rbracket = /\[\]$/,
		rCRLF = /\r?\n/g,
		rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
		rsubmittable = /^(?:input|select|textarea|keygen)/i;
	
	function buildParams( prefix, obj, traditional, add ) {
		var name;
	
		if ( jQuery.isArray( obj ) ) {
			// Serialize array item.
			jQuery.each( obj, function( i, v ) {
				if ( traditional || rbracket.test( prefix ) ) {
					// Treat each array item as a scalar.
					add( prefix, v );
	
				} else {
					// Item is non-scalar (array or object), encode its numeric index.
					buildParams( prefix + "[" + ( typeof v === "object" ? i : "" ) + "]", v, traditional, add );
				}
			});
	
		} else if ( !traditional && jQuery.type( obj ) === "object" ) {
			// Serialize object item.
			for ( name in obj ) {
				buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
			}
	
		} else {
			// Serialize scalar item.
			add( prefix, obj );
		}
	}
	
	// Serialize an array of form elements or a set of
	// key/values into a query string
	jQuery.param = function( a, traditional ) {
		var prefix,
			s = [],
			add = function( key, value ) {
				// If value is a function, invoke it and return its value
				value = jQuery.isFunction( value ) ? value() : ( value == null ? "" : value );
				s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value );
			};
	
		// Set traditional to true for jQuery <= 1.3.2 behavior.
		if ( traditional === undefined ) {
			traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;
		}
	
		// If an array was passed in, assume that it is an array of form elements.
		if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
			// Serialize the form elements
			jQuery.each( a, function() {
				add( this.name, this.value );
			});
	
		} else {
			// If traditional, encode the "old" way (the way 1.3.2 or older
			// did it), otherwise encode params recursively.
			for ( prefix in a ) {
				buildParams( prefix, a[ prefix ], traditional, add );
			}
		}
	
		// Return the resulting serialization
		return s.join( "&" ).replace( r20, "+" );
	};
	
	jQuery.fn.extend({
		serialize: function() {
			return jQuery.param( this.serializeArray() );
		},
		serializeArray: function() {
			return this.map(function() {
				// Can add propHook for "elements" to filter or add form elements
				var elements = jQuery.prop( this, "elements" );
				return elements ? jQuery.makeArray( elements ) : this;
			})
			.filter(function() {
				var type = this.type;
	
				// Use .is( ":disabled" ) so that fieldset[disabled] works
				return this.name && !jQuery( this ).is( ":disabled" ) &&
					rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
					( this.checked || !rcheckableType.test( type ) );
			})
			.map(function( i, elem ) {
				var val = jQuery( this ).val();
	
				return val == null ?
					null :
					jQuery.isArray( val ) ?
						jQuery.map( val, function( val ) {
							return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
						}) :
						{ name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
			}).get();
		}
	});
	
	
	jQuery.ajaxSettings.xhr = function() {
		try {
			return new XMLHttpRequest();
		} catch( e ) {}
	};
	
	var xhrId = 0,
		xhrCallbacks = {},
		xhrSuccessStatus = {
			// file protocol always yields status code 0, assume 200
			0: 200,
			// Support: IE9
			// #1450: sometimes IE returns 1223 when it should be 204
			1223: 204
		},
		xhrSupported = jQuery.ajaxSettings.xhr();
	
	// Support: IE9
	// Open requests must be manually aborted on unload (#5280)
	if ( window.ActiveXObject ) {
		jQuery( window ).on( "unload", function() {
			for ( var key in xhrCallbacks ) {
				xhrCallbacks[ key ]();
			}
		});
	}
	
	support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
	support.ajax = xhrSupported = !!xhrSupported;
	
	jQuery.ajaxTransport(function( options ) {
		var callback;
	
		// Cross domain only allowed if supported through XMLHttpRequest
		if ( support.cors || xhrSupported && !options.crossDomain ) {
			return {
				send: function( headers, complete ) {
					var i,
						xhr = options.xhr(),
						id = ++xhrId;
	
					xhr.open( options.type, options.url, options.async, options.username, options.password );
	
					// Apply custom fields if provided
					if ( options.xhrFields ) {
						for ( i in options.xhrFields ) {
							xhr[ i ] = options.xhrFields[ i ];
						}
					}
	
					// Override mime type if needed
					if ( options.mimeType && xhr.overrideMimeType ) {
						xhr.overrideMimeType( options.mimeType );
					}
	
					// X-Requested-With header
					// For cross-domain requests, seeing as conditions for a preflight are
					// akin to a jigsaw puzzle, we simply never set it to be sure.
					// (it can always be set on a per-request basis or even using ajaxSetup)
					// For same-domain requests, won't change header if already provided.
					if ( !options.crossDomain && !headers["X-Requested-With"] ) {
						headers["X-Requested-With"] = "XMLHttpRequest";
					}
	
					// Set headers
					for ( i in headers ) {
						xhr.setRequestHeader( i, headers[ i ] );
					}
	
					// Callback
					callback = function( type ) {
						return function() {
							if ( callback ) {
								delete xhrCallbacks[ id ];
								callback = xhr.onload = xhr.onerror = null;
	
								if ( type === "abort" ) {
									xhr.abort();
								} else if ( type === "error" ) {
									complete(
										// file: protocol always yields status 0; see #8605, #14207
										xhr.status,
										xhr.statusText
									);
								} else {
									complete(
										xhrSuccessStatus[ xhr.status ] || xhr.status,
										xhr.statusText,
										// Support: IE9
										// Accessing binary-data responseText throws an exception
										// (#11426)
										typeof xhr.responseText === "string" ? {
											text: xhr.responseText
										} : undefined,
										xhr.getAllResponseHeaders()
									);
								}
							}
						};
					};
	
					// Listen to events
					xhr.onload = callback();
					xhr.onerror = callback("error");
	
					// Create the abort callback
					callback = xhrCallbacks[ id ] = callback("abort");
	
					try {
						// Do send the request (this may raise an exception)
						xhr.send( options.hasContent && options.data || null );
					} catch ( e ) {
						// #14683: Only rethrow if this hasn't been notified as an error yet
						if ( callback ) {
							throw e;
						}
					}
				},
	
				abort: function() {
					if ( callback ) {
						callback();
					}
				}
			};
		}
	});
	
	
	
	
	// Install script dataType
	jQuery.ajaxSetup({
		accepts: {
			script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
		},
		contents: {
			script: /(?:java|ecma)script/
		},
		converters: {
			"text script": function( text ) {
				jQuery.globalEval( text );
				return text;
			}
		}
	});
	
	// Handle cache's special case and crossDomain
	jQuery.ajaxPrefilter( "script", function( s ) {
		if ( s.cache === undefined ) {
			s.cache = false;
		}
		if ( s.crossDomain ) {
			s.type = "GET";
		}
	});
	
	// Bind script tag hack transport
	jQuery.ajaxTransport( "script", function( s ) {
		// This transport only deals with cross domain requests
		if ( s.crossDomain ) {
			var script, callback;
			return {
				send: function( _, complete ) {
					script = jQuery("<script>").prop({
						async: true,
						charset: s.scriptCharset,
						src: s.url
					}).on(
						"load error",
						callback = function( evt ) {
							script.remove();
							callback = null;
							if ( evt ) {
								complete( evt.type === "error" ? 404 : 200, evt.type );
							}
						}
					);
					document.head.appendChild( script[ 0 ] );
				},
				abort: function() {
					if ( callback ) {
						callback();
					}
				}
			};
		}
	});
	
	
	
	
	var oldCallbacks = [],
		rjsonp = /(=)\?(?=&|$)|\?\?/;
	
	// Default jsonp settings
	jQuery.ajaxSetup({
		jsonp: "callback",
		jsonpCallback: function() {
			var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) );
			this[ callback ] = true;
			return callback;
		}
	});
	
	// Detect, normalize options and install callbacks for jsonp requests
	jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
	
		var callbackName, overwritten, responseContainer,
			jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?
				"url" :
				typeof s.data === "string" && !( s.contentType || "" ).indexOf("application/x-www-form-urlencoded") && rjsonp.test( s.data ) && "data"
			);
	
		// Handle iff the expected data type is "jsonp" or we have a parameter to set
		if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {
	
			// Get callback name, remembering preexisting value associated with it
			callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?
				s.jsonpCallback() :
				s.jsonpCallback;
	
			// Insert callback into url or form data
			if ( jsonProp ) {
				s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );
			} else if ( s.jsonp !== false ) {
				s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
			}
	
			// Use data converter to retrieve json after script execution
			s.converters["script json"] = function() {
				if ( !responseContainer ) {
					jQuery.error( callbackName + " was not called" );
				}
				return responseContainer[ 0 ];
			};
	
			// force json dataType
			s.dataTypes[ 0 ] = "json";
	
			// Install callback
			overwritten = window[ callbackName ];
			window[ callbackName ] = function() {
				responseContainer = arguments;
			};
	
			// Clean-up function (fires after converters)
			jqXHR.always(function() {
				// Restore preexisting value
				window[ callbackName ] = overwritten;
	
				// Save back as free
				if ( s[ callbackName ] ) {
					// make sure that re-using the options doesn't screw things around
					s.jsonpCallback = originalSettings.jsonpCallback;
	
					// save the callback name for future use
					oldCallbacks.push( callbackName );
				}
	
				// Call if it was a function and we have a response
				if ( responseContainer && jQuery.isFunction( overwritten ) ) {
					overwritten( responseContainer[ 0 ] );
				}
	
				responseContainer = overwritten = undefined;
			});
	
			// Delegate to script
			return "script";
		}
	});
	
	
	
	
	// data: string of html
	// context (optional): If specified, the fragment will be created in this context, defaults to document
	// keepScripts (optional): If true, will include scripts passed in the html string
	jQuery.parseHTML = function( data, context, keepScripts ) {
		if ( !data || typeof data !== "string" ) {
			return null;
		}
		if ( typeof context === "boolean" ) {
			keepScripts = context;
			context = false;
		}
		context = context || document;
	
		var parsed = rsingleTag.exec( data ),
			scripts = !keepScripts && [];
	
		// Single tag
		if ( parsed ) {
			return [ context.createElement( parsed[1] ) ];
		}
	
		parsed = jQuery.buildFragment( [ data ], context, scripts );
	
		if ( scripts && scripts.length ) {
			jQuery( scripts ).remove();
		}
	
		return jQuery.merge( [], parsed.childNodes );
	};
	
	
	// Keep a copy of the old load method
	var _load = jQuery.fn.load;
	
	/**
	 * Load a url into a page
	 */
	jQuery.fn.load = function( url, params, callback ) {
		if ( typeof url !== "string" && _load ) {
			return _load.apply( this, arguments );
		}
	
		var selector, type, response,
			self = this,
			off = url.indexOf(" ");
	
		if ( off >= 0 ) {
			selector = jQuery.trim( url.slice( off ) );
			url = url.slice( 0, off );
		}
	
		// If it's a function
		if ( jQuery.isFunction( params ) ) {
	
			// We assume that it's the callback
			callback = params;
			params = undefined;
	
		// Otherwise, build a param string
		} else if ( params && typeof params === "object" ) {
			type = "POST";
		}
	
		// If we have elements to modify, make the request
		if ( self.length > 0 ) {
			jQuery.ajax({
				url: url,
	
				// if "type" variable is undefined, then "GET" method will be used
				type: type,
				dataType: "html",
				data: params
			}).done(function( responseText ) {
	
				// Save response for use in complete callback
				response = arguments;
	
				self.html( selector ?
	
					// If a selector was specified, locate the right elements in a dummy div
					// Exclude scripts to avoid IE 'Permission Denied' errors
					jQuery("<div>").append( jQuery.parseHTML( responseText ) ).find( selector ) :
	
					// Otherwise use the full result
					responseText );
	
			}).complete( callback && function( jqXHR, status ) {
				self.each( callback, response || [ jqXHR.responseText, status, jqXHR ] );
			});
		}
	
		return this;
	};
	
	
	
	
	jQuery.expr.filters.animated = function( elem ) {
		return jQuery.grep(jQuery.timers, function( fn ) {
			return elem === fn.elem;
		}).length;
	};
	
	
	
	
	var docElem = window.document.documentElement;
	
	/**
	 * Gets a window from an element
	 */
	function getWindow( elem ) {
		return jQuery.isWindow( elem ) ? elem : elem.nodeType === 9 && elem.defaultView;
	}
	
	jQuery.offset = {
		setOffset: function( elem, options, i ) {
			var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,
				position = jQuery.css( elem, "position" ),
				curElem = jQuery( elem ),
				props = {};
	
			// Set position first, in-case top/left are set even on static elem
			if ( position === "static" ) {
				elem.style.position = "relative";
			}
	
			curOffset = curElem.offset();
			curCSSTop = jQuery.css( elem, "top" );
			curCSSLeft = jQuery.css( elem, "left" );
			calculatePosition = ( position === "absolute" || position === "fixed" ) &&
				( curCSSTop + curCSSLeft ).indexOf("auto") > -1;
	
			// Need to be able to calculate position if either top or left is auto and position is either absolute or fixed
			if ( calculatePosition ) {
				curPosition = curElem.position();
				curTop = curPosition.top;
				curLeft = curPosition.left;
	
			} else {
				curTop = parseFloat( curCSSTop ) || 0;
				curLeft = parseFloat( curCSSLeft ) || 0;
			}
	
			if ( jQuery.isFunction( options ) ) {
				options = options.call( elem, i, curOffset );
			}
	
			if ( options.top != null ) {
				props.top = ( options.top - curOffset.top ) + curTop;
			}
			if ( options.left != null ) {
				props.left = ( options.left - curOffset.left ) + curLeft;
			}
	
			if ( "using" in options ) {
				options.using.call( elem, props );
	
			} else {
				curElem.css( props );
			}
		}
	};
	
	jQuery.fn.extend({
		offset: function( options ) {
			if ( arguments.length ) {
				return options === undefined ?
					this :
					this.each(function( i ) {
						jQuery.offset.setOffset( this, options, i );
					});
			}
	
			var docElem, win,
				elem = this[ 0 ],
				box = { top: 0, left: 0 },
				doc = elem && elem.ownerDocument;
	
			if ( !doc ) {
				return;
			}
	
			docElem = doc.documentElement;
	
			// Make sure it's not a disconnected DOM node
			if ( !jQuery.contains( docElem, elem ) ) {
				return box;
			}
	
			// If we don't have gBCR, just use 0,0 rather than error
			// BlackBerry 5, iOS 3 (original iPhone)
			if ( typeof elem.getBoundingClientRect !== strundefined ) {
				box = elem.getBoundingClientRect();
			}
			win = getWindow( doc );
			return {
				top: box.top + win.pageYOffset - docElem.clientTop,
				left: box.left + win.pageXOffset - docElem.clientLeft
			};
		},
	
		position: function() {
			if ( !this[ 0 ] ) {
				return;
			}
	
			var offsetParent, offset,
				elem = this[ 0 ],
				parentOffset = { top: 0, left: 0 };
	
			// Fixed elements are offset from window (parentOffset = {top:0, left: 0}, because it is its only offset parent
			if ( jQuery.css( elem, "position" ) === "fixed" ) {
				// We assume that getBoundingClientRect is available when computed position is fixed
				offset = elem.getBoundingClientRect();
	
			} else {
				// Get *real* offsetParent
				offsetParent = this.offsetParent();
	
				// Get correct offsets
				offset = this.offset();
				if ( !jQuery.nodeName( offsetParent[ 0 ], "html" ) ) {
					parentOffset = offsetParent.offset();
				}
	
				// Add offsetParent borders
				parentOffset.top += jQuery.css( offsetParent[ 0 ], "borderTopWidth", true );
				parentOffset.left += jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true );
			}
	
			// Subtract parent offsets and element margins
			return {
				top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ),
				left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true )
			};
		},
	
		offsetParent: function() {
			return this.map(function() {
				var offsetParent = this.offsetParent || docElem;
	
				while ( offsetParent && ( !jQuery.nodeName( offsetParent, "html" ) && jQuery.css( offsetParent, "position" ) === "static" ) ) {
					offsetParent = offsetParent.offsetParent;
				}
	
				return offsetParent || docElem;
			});
		}
	});
	
	// Create scrollLeft and scrollTop methods
	jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) {
		var top = "pageYOffset" === prop;
	
		jQuery.fn[ method ] = function( val ) {
			return access( this, function( elem, method, val ) {
				var win = getWindow( elem );
	
				if ( val === undefined ) {
					return win ? win[ prop ] : elem[ method ];
				}
	
				if ( win ) {
					win.scrollTo(
						!top ? val : window.pageXOffset,
						top ? val : window.pageYOffset
					);
	
				} else {
					elem[ method ] = val;
				}
			}, method, val, arguments.length, null );
		};
	});
	
	// Add the top/left cssHooks using jQuery.fn.position
	// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
	// getComputedStyle returns percent when specified for top/left/bottom/right
	// rather than make the css module depend on the offset module, we just check for it here
	jQuery.each( [ "top", "left" ], function( i, prop ) {
		jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,
			function( elem, computed ) {
				if ( computed ) {
					computed = curCSS( elem, prop );
					// if curCSS returns percentage, fallback to offset
					return rnumnonpx.test( computed ) ?
						jQuery( elem ).position()[ prop ] + "px" :
						computed;
				}
			}
		);
	});
	
	
	// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
	jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
		jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name }, function( defaultExtra, funcName ) {
			// margin is only for outerHeight, outerWidth
			jQuery.fn[ funcName ] = function( margin, value ) {
				var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
					extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );
	
				return access( this, function( elem, type, value ) {
					var doc;
	
					if ( jQuery.isWindow( elem ) ) {
						// As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there
						// isn't a whole lot we can do. See pull request at this URL for discussion:
						// https://github.com/jquery/jquery/pull/764
						return elem.document.documentElement[ "client" + name ];
					}
	
					// Get document width or height
					if ( elem.nodeType === 9 ) {
						doc = elem.documentElement;
	
						// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],
						// whichever is greatest
						return Math.max(
							elem.body[ "scroll" + name ], doc[ "scroll" + name ],
							elem.body[ "offset" + name ], doc[ "offset" + name ],
							doc[ "client" + name ]
						);
					}
	
					return value === undefined ?
						// Get width or height on the element, requesting but not forcing parseFloat
						jQuery.css( elem, type, extra ) :
	
						// Set width or height on the element
						jQuery.style( elem, type, value, extra );
				}, type, chainable ? margin : undefined, chainable, null );
			};
		});
	});
	
	
	// The number of elements contained in the matched element set
	jQuery.fn.size = function() {
		return this.length;
	};
	
	jQuery.fn.andSelf = jQuery.fn.addBack;
	
	
	
	
	// Register as a named AMD module, since jQuery can be concatenated with other
	// files that may use define, but not via a proper concatenation script that
	// understands anonymous AMD modules. A named AMD is safest and most robust
	// way to register. Lowercase jquery is used because AMD module names are
	// derived from file names, and jQuery is normally delivered in a lowercase
	// file name. Do this after creating the global so that if an AMD module wants
	// to call noConflict to hide this version of jQuery, it will work.
	
	// Note that for maximum portability, libraries that are not jQuery should
	// declare themselves as anonymous modules, and avoid setting a global if an
	// AMD loader is present. jQuery is a special case. For more information, see
	// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon
	
	if ( true ) {
		!(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = function() {
			return jQuery;
		}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
	}
	
	
	
	
	var
		// Map over jQuery in case of overwrite
		_jQuery = window.jQuery,
	
		// Map over the $ in case of overwrite
		_$ = window.$;
	
	jQuery.noConflict = function( deep ) {
		if ( window.$ === jQuery ) {
			window.$ = _$;
		}
	
		if ( deep && window.jQuery === jQuery ) {
			window.jQuery = _jQuery;
		}
	
		return jQuery;
	};
	
	// Expose jQuery and $ identifiers, even in
	// AMD (#7102#comment:10, https://github.com/jquery/jquery/pull/557)
	// and CommonJS for browser emulators (#13566)
	if ( typeof noGlobal === strundefined ) {
		window.jQuery = window.$ = jQuery;
	}
	
	
	
	
	return jQuery;
	
	}));


/***/ }),
/* 167 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	
	var _backbone = __webpack_require__(11);
	
	var _backbone2 = _interopRequireDefault(_backbone);
	
	var _RecordItemView = __webpack_require__(993);
	
	var _RecordItemView2 = _interopRequireDefault(_RecordItemView);
	
	__webpack_require__(1115);
	
	var _RecordItemViewImageError = __webpack_require__(994);
	
	var _RecordItemViewImageError2 = _interopRequireDefault(_RecordItemViewImageError);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var RecordItemView = _backbone2.default.ItemView.extend( /** @lends core/views/layers.RecordItemView# */{
	  template: _RecordItemView2.default,
	  tagName: 'li',
	  className: 'record-item',
	
	  events: {
	    'click .record-info': 'onItemInfoClicked',
	    mouseover: 'onItemMouseOver',
	    mouseout: 'onItemMouseOut'
	  },
	
	  initialize: function initialize(options) {
	    this.highlightModel = options.highlightModel;
	    this.collection = this.model.collection || options.collection;
	    this.thumbnailUrlPattern = options.thumbnailUrlPattern;
	    this.fallbackThumbnailUrl = options.fallbackThumbnailUrl;
	  },
	  templateHelpers: function templateHelpers() {
	    var time = this.model.get('properties').time;
	    var start = Array.isArray(time) ? time[0] : time;
	    var thumbnailUrl = this.model.getThumbnailUrl(this.collection ? this.collection.searchModel.get('layerModel').get('search.thumbnailUrlTemplate') : undefined);
	    if (this.thumbnailUrlPattern && !new RegExp(this.thumbnailUrlPattern).test(thumbnailUrl)) {
	      thumbnailUrl = '';
	    }
	    return {
	      thumbnailUrl: thumbnailUrl,
	      date: start.toISOString().substring(0, 10),
	      time: start.toISOString().substring(11, 19)
	    };
	  },
	  onRender: function onRender() {
	    var _this = this;
	
	    var $img = this.$('img');
	    $img.one('load', function () {
	      return _this.$('img').fadeIn('slow');
	    }).one('error', function () {
	      var quickLookUrl = _this.model.getQuickLookUrl(_this.collection ? _this.collection.searchModel.get('layerModel').get('search.quickLookUrlTemplate') : undefined);
	      if (quickLookUrl) {
	        $img.attr('src', quickLookUrl).one('load', function () {
	          return _this.$('img').fadeIn('slow');
	        }).one('error', function () {});
	      } else if (_this.fallbackThumbnailUrl) {
	        $img.one('error', function () {
	          return $img.attr('alt', (0, _RecordItemViewImageError2.default)());
	        }).attr('src', _this.fallbackThumbnailUrl).addClass('error');
	      } else {
	        $img.attr('alt', (0, _RecordItemViewImageError2.default)());
	      }
	    });
	  },
	  onAttach: function onAttach() {
	    var _this2 = this;
	
	    this.listenTo(this.highlightModel, 'change:highlightFeature', function (model, feature) {
	      var isHighlighted = false;
	      if (feature) {
	        var id = _this2.model.get('id');
	        if (Array.isArray(feature)) {
	          isHighlighted = !!feature.find(function (f) {
	            return f.id === id;
	          });
	        } else {
	          isHighlighted = id === feature.id;
	        }
	      }
	      _this2.$el.toggleClass('highlighted', isHighlighted);
	    });
	  },
	  onItemInfoClicked: function onItemInfoClicked() {
	    this.model.triggerShowInfo(this.collection);
	  },
	  onItemMouseOver: function onItemMouseOver() {
	    var feature = this.model.toJSON();
	    feature.layerId = this.collection.searchModel.get('layerModel').get('id');
	    this.highlightModel.highlight(feature);
	  },
	  onItemMouseOut: function onItemMouseOut() {
	    this.highlightModel.unHighlight(this.model.attributes);
	  }
	});
	
	exports.default = RecordItemView;

/***/ }),
/* 168 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	exports.search = search;
	exports.getCount = getCount;
	exports.searchAllRecords = searchAllRecords;
	exports.getParameters = getParameters;
	exports.getSearchRequest = getSearchRequest;
	// import eowcs from './eowcs';
	// import opensearch from './opensearch';
	
	// does not seem to work with above imports...
	var eowcs = __webpack_require__(565);
	var opensearch = __webpack_require__(537);
	
	function search(layerModel, filtersModel, mapModel, options) {
	  switch (layerModel.get('search.protocol')) {
	    case 'EO-WCS':
	      return eowcs.search(layerModel, filtersModel, mapModel, options);
	    case 'OpenSearch':
	      return opensearch.search(layerModel, filtersModel, mapModel, options);
	    default:
	      throw new Error('Unsupported search protocol \'' + layerModel.get('search.protocol') + '\'.');
	  }
	}
	
	function getCount(layerModel, filtersModel, mapModel, options) {
	  var itemsPerPage = layerModel.get('search.countZeroRecords') ? 0 : 1;
	  var skipCoordinateCheck = true;
	  var newOptions = Object.assign({}, options, { itemsPerPage: itemsPerPage, skipCoordinateCheck: skipCoordinateCheck });
	  switch (layerModel.get('search.protocol')) {
	    case 'EO-WCS':
	      return eowcs.search(layerModel, filtersModel, mapModel, newOptions).then(function (result) {
	        return result.totalResults;
	      });
	    case 'OpenSearch':
	      return opensearch.search(layerModel, filtersModel, mapModel, newOptions).then(function (result) {
	        return result.totalResults;
	      });
	    default:
	      throw new Error('Unsupported search protocol \'' + layerModel.get('search.protocol') + '\'.');
	  }
	}
	
	function searchAllRecords(layerModel, filtersModel, mapModel, options) {
	  switch (layerModel.get('search.protocol')) {
	    case 'EO-WCS':
	      return eowcs.search(layerModel, filtersModel, mapModel, options);
	    case 'OpenSearch':
	      return opensearch.searchAllRecords(layerModel, filtersModel, mapModel, options);
	    default:
	      throw new Error('Unsupported search protocol \'' + layerModel.get('search.protocol') + '\'.');
	  }
	}
	
	function getParameters(layerModel) {
	  switch (layerModel.get('search.protocol')) {
	    case 'EO-WCS':
	      return eowcs.getParameters(layerModel);
	    case 'OpenSearch':
	      return opensearch.getParameters(layerModel);
	    default:
	      throw new Error('Unsupported search protocol \'' + layerModel.get('search.protocol') + '\'.');
	  }
	}
	
	function getSearchRequest(layerModel, filtersModel, mapModel, options) {
	  switch (layerModel.get('search.protocol')) {
	    case 'EO-WCS':
	      return eowcs.getSearchRequest(layerModel, filtersModel, mapModel, options);
	    case 'OpenSearch':
	      return opensearch.getSearchRequest(layerModel, filtersModel, mapModel, options);
	    default:
	      throw new Error('Unsupported search protocol \'' + layerModel.get('search.protocol') + '\'.');
	  }
	}

/***/ }),
/* 169 */
/***/ (function(module, exports) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	exports.setSlice = setSlice;
	function calculateItemsSize(numItems, itemHeight) {
	  return Math.ceil(numItems / 3) * itemHeight;
	}
	
	function calculateSize(view, headerHeight, footerHeight, itemHeight) {
	  return calculateItemsSize(view.referenceCollection.length, itemHeight) + headerHeight + footerHeight;
	}
	
	function setSlice(offset, sliceHeight, view, headerHeight, footerHeight, itemHeight) {
	  // search results and download list items get rendered only if in visible area
	  // variable height transparent spacer on top and bottom is updated to allow scrolling through a list
	  // using a concept of referenceCollection (all results) and actual rendered collection
	  var size = calculateSize(view, headerHeight, footerHeight, itemHeight);
	  var numItems = view.referenceCollection.length;
	  var first = 0;
	  var last = 0;
	  if (offset + size < 0 // this view is completely above the current window
	  || offset > sliceHeight) {
	    // this view is completely below the current window
	    first = last = numItems;
	  } else {
	    var firstOffset = offset + headerHeight;
	    if (firstOffset < -itemHeight) {
	      var firstRow = Math.floor(Math.abs(firstOffset) / itemHeight);
	      first = firstRow * 3;
	    }
	    var lastRow = Math.ceil(Math.abs(-firstOffset + sliceHeight) / itemHeight);
	    last = lastRow * 3;
	  }
	  view.collection.set(view.referenceCollection.slice(first, last));
	  view.$('.spacer-top').css('height', Math.ceil(first / 3) * itemHeight);
	  view.$('.spacer-bottom').css('height', Math.ceil((numItems - last) / 3) * itemHeight);
	}
	/*
	                  /----------\        -
	  headerHeight    |  title   |        |
	                  |          |        |- scrollTop
	                  |          |        |
	                /----------------\    - -
	                | |          |   |    | |
	                | |          | = |    | |- offset
	                | |          | = |    | |
	                | \----------/ = |    | -
	                | /----------\ = |    |
	                | |  title   | = |    |- sliceHeight
	                | \----------/ = |    |
	                | /----------\   |    |
	                | |  title   |   |    |
	                | |          |   |    |
	                \----------------/    -
	                  |          |
	                  |          |
	                  \----------/


	                  /----------\        -
	  headerHeight    |  title   |        |
	                  |          |        |- scrollTop
	                  |          |        |
	                /----------------\    - -
	                | |          |   |    | |
	                | |          | = |    | |- offset + titleHeight
	                | |          | = |    | |
	                | \----------/ = |    | |
	                | /----------\ = |    | |
	                | |  title   | = |    | |
	                | |          |   |    | -
	                | |          |   |    |
	                | |          |   |    |
	                | |          |   |    |
	                | \----------/   |    |
	                | /----------\   |    |
	                | |  title   |   |    |
	                | |          |   |    |
	                \----------------/    -
	                  |          |
	                  |          |
	                  \----------/
	*/

/***/ }),
/* 170 */
/***/ (function(module, exports) {

	"use strict";
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	/**
	 * @module ol/ViewHint
	 */
	/**
	 * @enum {number}
	 */
	exports.default = {
	  ANIMATING: 0,
	  INTERACTING: 1
	};
	//# sourceMappingURL=ViewHint.js.map

/***/ }),
/* 171 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	
	var _array = __webpack_require__(18);
	
	var _extent = __webpack_require__(4);
	
	var _GeometryLayout = __webpack_require__(102);
	
	var _GeometryLayout2 = _interopRequireDefault(_GeometryLayout);
	
	var _GeometryType = __webpack_require__(22);
	
	var _GeometryType2 = _interopRequireDefault(_GeometryType);
	
	var _SimpleGeometry = __webpack_require__(64);
	
	var _SimpleGeometry2 = _interopRequireDefault(_SimpleGeometry);
	
	var _closest = __webpack_require__(125);
	
	var _deflate = __webpack_require__(72);
	
	var _inflate = __webpack_require__(86);
	
	var _interpolate = __webpack_require__(278);
	
	var _intersectsextent = __webpack_require__(146);
	
	var _length = __webpack_require__(279);
	
	var _segments = __webpack_require__(281);
	
	var _simplify = __webpack_require__(103);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var __extends = undefined && undefined.__extends || function () {
	    var _extendStatics = function extendStatics(d, b) {
	        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	            d.__proto__ = b;
	        } || function (d, b) {
	            for (var p in b) {
	                if (b.hasOwnProperty(p)) d[p] = b[p];
	            }
	        };
	        return _extendStatics(d, b);
	    };
	    return function (d, b) {
	        _extendStatics(d, b);
	        function __() {
	            this.constructor = d;
	        }
	        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	    };
	}();
	/**
	 * @module ol/geom/LineString
	 */
	
	/**
	 * @classdesc
	 * Linestring geometry.
	 *
	 * @api
	 */
	var LineString = /** @class */function (_super) {
	    __extends(LineString, _super);
	    /**
	     * @param {Array<import("../coordinate.js").Coordinate>|Array<number>} coordinates Coordinates.
	     *     For internal use, flat coordinates in combination with `opt_layout` are also accepted.
	     * @param {GeometryLayout=} opt_layout Layout.
	     */
	    function LineString(coordinates, opt_layout) {
	        var _this = _super.call(this) || this;
	        /**
	         * @private
	         * @type {import("../coordinate.js").Coordinate}
	         */
	        _this.flatMidpoint_ = null;
	        /**
	         * @private
	         * @type {number}
	         */
	        _this.flatMidpointRevision_ = -1;
	        /**
	         * @private
	         * @type {number}
	         */
	        _this.maxDelta_ = -1;
	        /**
	         * @private
	         * @type {number}
	         */
	        _this.maxDeltaRevision_ = -1;
	        if (opt_layout !== undefined && !Array.isArray(coordinates[0])) {
	            _this.setFlatCoordinates(opt_layout, /** @type {Array<number>} */coordinates);
	        } else {
	            _this.setCoordinates( /** @type {Array<import("../coordinate.js").Coordinate>} */coordinates, opt_layout);
	        }
	        return _this;
	    }
	    /**
	     * Append the passed coordinate to the coordinates of the linestring.
	     * @param {import("../coordinate.js").Coordinate} coordinate Coordinate.
	     * @api
	     */
	    LineString.prototype.appendCoordinate = function (coordinate) {
	        if (!this.flatCoordinates) {
	            this.flatCoordinates = coordinate.slice();
	        } else {
	            (0, _array.extend)(this.flatCoordinates, coordinate);
	        }
	        this.changed();
	    };
	    /**
	     * Make a complete copy of the geometry.
	     * @return {!LineString} Clone.
	     * @override
	     * @api
	     */
	    LineString.prototype.clone = function () {
	        return new LineString(this.flatCoordinates.slice(), this.layout);
	    };
	    /**
	     * @inheritDoc
	     */
	    LineString.prototype.closestPointXY = function (x, y, closestPoint, minSquaredDistance) {
	        if (minSquaredDistance < (0, _extent.closestSquaredDistanceXY)(this.getExtent(), x, y)) {
	            return minSquaredDistance;
	        }
	        if (this.maxDeltaRevision_ != this.getRevision()) {
	            this.maxDelta_ = Math.sqrt((0, _closest.maxSquaredDelta)(this.flatCoordinates, 0, this.flatCoordinates.length, this.stride, 0));
	            this.maxDeltaRevision_ = this.getRevision();
	        }
	        return (0, _closest.assignClosestPoint)(this.flatCoordinates, 0, this.flatCoordinates.length, this.stride, this.maxDelta_, false, x, y, closestPoint, minSquaredDistance);
	    };
	    /**
	     * Iterate over each segment, calling the provided callback.
	     * If the callback returns a truthy value the function returns that
	     * value immediately. Otherwise the function returns `false`.
	     *
	     * @param {function(this: S, import("../coordinate.js").Coordinate, import("../coordinate.js").Coordinate): T} callback Function
	     *     called for each segment. The function will receive two arguments, the start and end coordinates of the segment.
	     * @return {T|boolean} Value.
	     * @template T,S
	     * @api
	     */
	    LineString.prototype.forEachSegment = function (callback) {
	        return (0, _segments.forEach)(this.flatCoordinates, 0, this.flatCoordinates.length, this.stride, callback);
	    };
	    /**
	     * Returns the coordinate at `m` using linear interpolation, or `null` if no
	     * such coordinate exists.
	     *
	     * `opt_extrapolate` controls extrapolation beyond the range of Ms in the
	     * MultiLineString. If `opt_extrapolate` is `true` then Ms less than the first
	     * M will return the first coordinate and Ms greater than the last M will
	     * return the last coordinate.
	     *
	     * @param {number} m M.
	     * @param {boolean=} opt_extrapolate Extrapolate. Default is `false`.
	     * @return {import("../coordinate.js").Coordinate} Coordinate.
	     * @api
	     */
	    LineString.prototype.getCoordinateAtM = function (m, opt_extrapolate) {
	        if (this.layout != _GeometryLayout2.default.XYM && this.layout != _GeometryLayout2.default.XYZM) {
	            return null;
	        }
	        var extrapolate = opt_extrapolate !== undefined ? opt_extrapolate : false;
	        return (0, _interpolate.lineStringCoordinateAtM)(this.flatCoordinates, 0, this.flatCoordinates.length, this.stride, m, extrapolate);
	    };
	    /**
	     * Return the coordinates of the linestring.
	     * @return {Array<import("../coordinate.js").Coordinate>} Coordinates.
	     * @override
	     * @api
	     */
	    LineString.prototype.getCoordinates = function () {
	        return (0, _inflate.inflateCoordinates)(this.flatCoordinates, 0, this.flatCoordinates.length, this.stride);
	    };
	    /**
	     * Return the coordinate at the provided fraction along the linestring.
	     * The `fraction` is a number between 0 and 1, where 0 is the start of the
	     * linestring and 1 is the end.
	     * @param {number} fraction Fraction.
	     * @param {import("../coordinate.js").Coordinate=} opt_dest Optional coordinate whose values will
	     *     be modified. If not provided, a new coordinate will be returned.
	     * @return {import("../coordinate.js").Coordinate} Coordinate of the interpolated point.
	     * @api
	     */
	    LineString.prototype.getCoordinateAt = function (fraction, opt_dest) {
	        return (0, _interpolate.interpolatePoint)(this.flatCoordinates, 0, this.flatCoordinates.length, this.stride, fraction, opt_dest);
	    };
	    /**
	     * Return the length of the linestring on projected plane.
	     * @return {number} Length (on projected plane).
	     * @api
	     */
	    LineString.prototype.getLength = function () {
	        return (0, _length.lineStringLength)(this.flatCoordinates, 0, this.flatCoordinates.length, this.stride);
	    };
	    /**
	     * @return {Array<number>} Flat midpoint.
	     */
	    LineString.prototype.getFlatMidpoint = function () {
	        if (this.flatMidpointRevision_ != this.getRevision()) {
	            this.flatMidpoint_ = this.getCoordinateAt(0.5, this.flatMidpoint_);
	            this.flatMidpointRevision_ = this.getRevision();
	        }
	        return this.flatMidpoint_;
	    };
	    /**
	     * @inheritDoc
	     */
	    LineString.prototype.getSimplifiedGeometryInternal = function (squaredTolerance) {
	        var simplifiedFlatCoordinates = [];
	        simplifiedFlatCoordinates.length = (0, _simplify.douglasPeucker)(this.flatCoordinates, 0, this.flatCoordinates.length, this.stride, squaredTolerance, simplifiedFlatCoordinates, 0);
	        return new LineString(simplifiedFlatCoordinates, _GeometryLayout2.default.XY);
	    };
	    /**
	     * @inheritDoc
	     * @api
	     */
	    LineString.prototype.getType = function () {
	        return _GeometryType2.default.LINE_STRING;
	    };
	    /**
	     * @inheritDoc
	     * @api
	     */
	    LineString.prototype.intersectsExtent = function (extent) {
	        return (0, _intersectsextent.intersectsLineString)(this.flatCoordinates, 0, this.flatCoordinates.length, this.stride, extent);
	    };
	    /**
	     * Set the coordinates of the linestring.
	     * @param {!Array<import("../coordinate.js").Coordinate>} coordinates Coordinates.
	     * @param {GeometryLayout=} opt_layout Layout.
	     * @override
	     * @api
	     */
	    LineString.prototype.setCoordinates = function (coordinates, opt_layout) {
	        this.setLayout(opt_layout, coordinates, 1);
	        if (!this.flatCoordinates) {
	            this.flatCoordinates = [];
	        }
	        this.flatCoordinates.length = (0, _deflate.deflateCoordinates)(this.flatCoordinates, 0, coordinates, this.stride);
	        this.changed();
	    };
	    return LineString;
	}(_SimpleGeometry2.default);
	exports.default = LineString;
	//# sourceMappingURL=LineString.js.map

/***/ }),
/* 172 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	
	var _array = __webpack_require__(18);
	
	var _extent = __webpack_require__(4);
	
	var _GeometryType = __webpack_require__(22);
	
	var _GeometryType2 = _interopRequireDefault(_GeometryType);
	
	var _Point = __webpack_require__(85);
	
	var _Point2 = _interopRequireDefault(_Point);
	
	var _SimpleGeometry = __webpack_require__(64);
	
	var _SimpleGeometry2 = _interopRequireDefault(_SimpleGeometry);
	
	var _deflate = __webpack_require__(72);
	
	var _inflate = __webpack_require__(86);
	
	var _math = __webpack_require__(19);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var __extends = undefined && undefined.__extends || function () {
	    var _extendStatics = function extendStatics(d, b) {
	        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	            d.__proto__ = b;
	        } || function (d, b) {
	            for (var p in b) {
	                if (b.hasOwnProperty(p)) d[p] = b[p];
	            }
	        };
	        return _extendStatics(d, b);
	    };
	    return function (d, b) {
	        _extendStatics(d, b);
	        function __() {
	            this.constructor = d;
	        }
	        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	    };
	}();
	/**
	 * @module ol/geom/MultiPoint
	 */
	
	/**
	 * @classdesc
	 * Multi-point geometry.
	 *
	 * @api
	 */
	var MultiPoint = /** @class */function (_super) {
	    __extends(MultiPoint, _super);
	    /**
	     * @param {Array<import("../coordinate.js").Coordinate>|Array<number>} coordinates Coordinates.
	     *     For internal use, flat coordinates in combination with `opt_layout` are also accepted.
	     * @param {import("./GeometryLayout.js").default=} opt_layout Layout.
	     */
	    function MultiPoint(coordinates, opt_layout) {
	        var _this = _super.call(this) || this;
	        if (opt_layout && !Array.isArray(coordinates[0])) {
	            _this.setFlatCoordinates(opt_layout, /** @type {Array<number>} */coordinates);
	        } else {
	            _this.setCoordinates( /** @type {Array<import("../coordinate.js").Coordinate>} */coordinates, opt_layout);
	        }
	        return _this;
	    }
	    /**
	     * Append the passed point to this multipoint.
	     * @param {Point} point Point.
	     * @api
	     */
	    MultiPoint.prototype.appendPoint = function (point) {
	        if (!this.flatCoordinates) {
	            this.flatCoordinates = point.getFlatCoordinates().slice();
	        } else {
	            (0, _array.extend)(this.flatCoordinates, point.getFlatCoordinates());
	        }
	        this.changed();
	    };
	    /**
	     * Make a complete copy of the geometry.
	     * @return {!MultiPoint} Clone.
	     * @override
	     * @api
	     */
	    MultiPoint.prototype.clone = function () {
	        var multiPoint = new MultiPoint(this.flatCoordinates.slice(), this.layout);
	        return multiPoint;
	    };
	    /**
	     * @inheritDoc
	     */
	    MultiPoint.prototype.closestPointXY = function (x, y, closestPoint, minSquaredDistance) {
	        if (minSquaredDistance < (0, _extent.closestSquaredDistanceXY)(this.getExtent(), x, y)) {
	            return minSquaredDistance;
	        }
	        var flatCoordinates = this.flatCoordinates;
	        var stride = this.stride;
	        for (var i = 0, ii = flatCoordinates.length; i < ii; i += stride) {
	            var squaredDistance = (0, _math.squaredDistance)(x, y, flatCoordinates[i], flatCoordinates[i + 1]);
	            if (squaredDistance < minSquaredDistance) {
	                minSquaredDistance = squaredDistance;
	                for (var j = 0; j < stride; ++j) {
	                    closestPoint[j] = flatCoordinates[i + j];
	                }
	                closestPoint.length = stride;
	            }
	        }
	        return minSquaredDistance;
	    };
	    /**
	     * Return the coordinates of the multipoint.
	     * @return {Array<import("../coordinate.js").Coordinate>} Coordinates.
	     * @override
	     * @api
	     */
	    MultiPoint.prototype.getCoordinates = function () {
	        return (0, _inflate.inflateCoordinates)(this.flatCoordinates, 0, this.flatCoordinates.length, this.stride);
	    };
	    /**
	     * Return the point at the specified index.
	     * @param {number} index Index.
	     * @return {Point} Point.
	     * @api
	     */
	    MultiPoint.prototype.getPoint = function (index) {
	        var n = !this.flatCoordinates ? 0 : this.flatCoordinates.length / this.stride;
	        if (index < 0 || n <= index) {
	            return null;
	        }
	        return new _Point2.default(this.flatCoordinates.slice(index * this.stride, (index + 1) * this.stride), this.layout);
	    };
	    /**
	     * Return the points of this multipoint.
	     * @return {Array<Point>} Points.
	     * @api
	     */
	    MultiPoint.prototype.getPoints = function () {
	        var flatCoordinates = this.flatCoordinates;
	        var layout = this.layout;
	        var stride = this.stride;
	        /** @type {Array<Point>} */
	        var points = [];
	        for (var i = 0, ii = flatCoordinates.length; i < ii; i += stride) {
	            var point = new _Point2.default(flatCoordinates.slice(i, i + stride), layout);
	            points.push(point);
	        }
	        return points;
	    };
	    /**
	     * @inheritDoc
	     * @api
	     */
	    MultiPoint.prototype.getType = function () {
	        return _GeometryType2.default.MULTI_POINT;
	    };
	    /**
	     * @inheritDoc
	     * @api
	     */
	    MultiPoint.prototype.intersectsExtent = function (extent) {
	        var flatCoordinates = this.flatCoordinates;
	        var stride = this.stride;
	        for (var i = 0, ii = flatCoordinates.length; i < ii; i += stride) {
	            var x = flatCoordinates[i];
	            var y = flatCoordinates[i + 1];
	            if ((0, _extent.containsXY)(extent, x, y)) {
	                return true;
	            }
	        }
	        return false;
	    };
	    /**
	     * Set the coordinates of the multipoint.
	     * @param {!Array<import("../coordinate.js").Coordinate>} coordinates Coordinates.
	     * @param {import("./GeometryLayout.js").default=} opt_layout Layout.
	     * @override
	     * @api
	     */
	    MultiPoint.prototype.setCoordinates = function (coordinates, opt_layout) {
	        this.setLayout(opt_layout, coordinates, 1);
	        if (!this.flatCoordinates) {
	            this.flatCoordinates = [];
	        }
	        this.flatCoordinates.length = (0, _deflate.deflateCoordinates)(this.flatCoordinates, 0, coordinates, this.stride);
	        this.changed();
	    };
	    return MultiPoint;
	}(_SimpleGeometry2.default);
	exports.default = MultiPoint;
	//# sourceMappingURL=MultiPoint.js.map

/***/ }),
/* 173 */
/***/ (function(module, exports) {

	"use strict";
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	exports.linearRing = linearRing;
	exports.linearRings = linearRings;
	exports.linearRingss = linearRingss;
	/**
	 * @module ol/geom/flat/area
	 */
	/**
	 * @param {Array<number>} flatCoordinates Flat coordinates.
	 * @param {number} offset Offset.
	 * @param {number} end End.
	 * @param {number} stride Stride.
	 * @return {number} Area.
	 */
	function linearRing(flatCoordinates, offset, end, stride) {
	    var twiceArea = 0;
	    var x1 = flatCoordinates[end - stride];
	    var y1 = flatCoordinates[end - stride + 1];
	    for (; offset < end; offset += stride) {
	        var x2 = flatCoordinates[offset];
	        var y2 = flatCoordinates[offset + 1];
	        twiceArea += y1 * x2 - x1 * y2;
	        x1 = x2;
	        y1 = y2;
	    }
	    return twiceArea / 2;
	}
	/**
	 * @param {Array<number>} flatCoordinates Flat coordinates.
	 * @param {number} offset Offset.
	 * @param {Array<number>} ends Ends.
	 * @param {number} stride Stride.
	 * @return {number} Area.
	 */
	function linearRings(flatCoordinates, offset, ends, stride) {
	    var area = 0;
	    for (var i = 0, ii = ends.length; i < ii; ++i) {
	        var end = ends[i];
	        area += linearRing(flatCoordinates, offset, end, stride);
	        offset = end;
	    }
	    return area;
	}
	/**
	 * @param {Array<number>} flatCoordinates Flat coordinates.
	 * @param {number} offset Offset.
	 * @param {Array<Array<number>>} endss Endss.
	 * @param {number} stride Stride.
	 * @return {number} Area.
	 */
	function linearRingss(flatCoordinates, offset, endss, stride) {
	    var area = 0;
	    for (var i = 0, ii = endss.length; i < ii; ++i) {
	        var ends = endss[i];
	        area += linearRings(flatCoordinates, offset, ends, stride);
	        offset = ends[ends.length - 1];
	    }
	    return area;
	}
	//# sourceMappingURL=area.js.map

/***/ }),
/* 174 */
/***/ (function(module, exports) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	/**
	 * @module ol/interaction/Property
	 */
	/**
	 * @enum {string}
	 */
	exports.default = {
	  ACTIVE: 'active'
	};
	//# sourceMappingURL=Property.js.map

/***/ }),
/* 175 */
/***/ (function(module, exports) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	/**
	 * @module ol/pointer/EventType
	 */
	/**
	 * Constants for event names.
	 * @enum {string}
	 */
	exports.default = {
	  POINTERMOVE: 'pointermove',
	  POINTERDOWN: 'pointerdown',
	  POINTERUP: 'pointerup',
	  POINTEROVER: 'pointerover',
	  POINTEROUT: 'pointerout',
	  POINTERENTER: 'pointerenter',
	  POINTERLEAVE: 'pointerleave',
	  POINTERCANCEL: 'pointercancel'
	};
	//# sourceMappingURL=EventType.js.map

/***/ }),
/* 176 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	
	var _Units = __webpack_require__(65);
	
	/**
	 * @typedef {Object} Options
	 * @property {string} code The SRS identifier code, e.g. `EPSG:4326`.
	 * @property {import("./Units.js").default|string} [units] Units. Required unless a
	 * proj4 projection is defined for `code`.
	 * @property {import("../extent.js").Extent} [extent] The validity extent for the SRS.
	 * @property {string} [axisOrientation='enu'] The axis orientation as specified in Proj4.
	 * @property {boolean} [global=false] Whether the projection is valid for the whole globe.
	 * @property {number} [metersPerUnit] The meters per unit for the SRS.
	 * If not provided, the `units` are used to get the meters per unit from the {@link module:ol/proj/Units~METERS_PER_UNIT}
	 * lookup table.
	 * @property {import("../extent.js").Extent} [worldExtent] The world extent for the SRS.
	 * @property {function(number, import("../coordinate.js").Coordinate):number} [getPointResolution]
	 * Function to determine resolution at a point. The function is called with a
	 * `{number}` view resolution and an `{import("../coordinate.js").Coordinate}` as arguments, and returns
	 * the `{number}` resolution in projection units at the passed coordinate. If this is `undefined`,
	 * the default {@link module:ol/proj#getPointResolution} function will be used.
	 */
	/**
	 * @classdesc
	 * Projection definition class. One of these is created for each projection
	 * supported in the application and stored in the {@link module:ol/proj} namespace.
	 * You can use these in applications, but this is not required, as API params
	 * and options use {@link module:ol/proj~ProjectionLike} which means the simple string
	 * code will suffice.
	 *
	 * You can use {@link module:ol/proj~get} to retrieve the object for a particular
	 * projection.
	 *
	 * The library includes definitions for `EPSG:4326` and `EPSG:3857`, together
	 * with the following aliases:
	 * * `EPSG:4326`: CRS:84, urn:ogc:def:crs:EPSG:6.6:4326,
	 *     urn:ogc:def:crs:OGC:1.3:CRS84, urn:ogc:def:crs:OGC:2:84,
	 *     http://www.opengis.net/gml/srs/epsg.xml#4326,
	 *     urn:x-ogc:def:crs:EPSG:4326
	 * * `EPSG:3857`: EPSG:102100, EPSG:102113, EPSG:900913,
	 *     urn:ogc:def:crs:EPSG:6.18:3:3857,
	 *     http://www.opengis.net/gml/srs/epsg.xml#3857
	 *
	 * If you use [proj4js](https://github.com/proj4js/proj4js), aliases can
	 * be added using `proj4.defs()`. After all required projection definitions are
	 * added, call the {@link module:ol/proj/proj4~register} function.
	 *
	 * @api
	 */
	var Projection = /** @class */function () {
	  /**
	   * @param {Options} options Projection options.
	   */
	  function Projection(options) {
	    /**
	     * @private
	     * @type {string}
	     */
	    this.code_ = options.code;
	    /**
	     * Units of projected coordinates. When set to `TILE_PIXELS`, a
	     * `this.extent_` and `this.worldExtent_` must be configured properly for each
	     * tile.
	     * @private
	     * @type {import("./Units.js").default}
	     */
	    this.units_ = /** @type {import("./Units.js").default} */options.units;
	    /**
	     * Validity extent of the projection in projected coordinates. For projections
	     * with `TILE_PIXELS` units, this is the extent of the tile in
	     * tile pixel space.
	     * @private
	     * @type {import("../extent.js").Extent}
	     */
	    this.extent_ = options.extent !== undefined ? options.extent : null;
	    /**
	     * Extent of the world in EPSG:4326. For projections with
	     * `TILE_PIXELS` units, this is the extent of the tile in
	     * projected coordinate space.
	     * @private
	     * @type {import("../extent.js").Extent}
	     */
	    this.worldExtent_ = options.worldExtent !== undefined ? options.worldExtent : null;
	    /**
	     * @private
	     * @type {string}
	     */
	    this.axisOrientation_ = options.axisOrientation !== undefined ? options.axisOrientation : 'enu';
	    /**
	     * @private
	     * @type {boolean}
	     */
	    this.global_ = options.global !== undefined ? options.global : false;
	    /**
	     * @private
	     * @type {boolean}
	     */
	    this.canWrapX_ = !!(this.global_ && this.extent_);
	    /**
	     * @private
	     * @type {function(number, import("../coordinate.js").Coordinate):number|undefined}
	     */
	    this.getPointResolutionFunc_ = options.getPointResolution;
	    /**
	     * @private
	     * @type {import("../tilegrid/TileGrid.js").default}
	     */
	    this.defaultTileGrid_ = null;
	    /**
	     * @private
	     * @type {number|undefined}
	     */
	    this.metersPerUnit_ = options.metersPerUnit;
	  }
	  /**
	   * @return {boolean} The projection is suitable for wrapping the x-axis
	   */
	  Projection.prototype.canWrapX = function () {
	    return this.canWrapX_;
	  };
	  /**
	   * Get the code for this projection, e.g. 'EPSG:4326'.
	   * @return {string} Code.
	   * @api
	   */
	  Projection.prototype.getCode = function () {
	    return this.code_;
	  };
	  /**
	   * Get the validity extent for this projection.
	   * @return {import("../extent.js").Extent} Extent.
	   * @api
	   */
	  Projection.prototype.getExtent = function () {
	    return this.extent_;
	  };
	  /**
	   * Get the units of this projection.
	   * @return {import("./Units.js").default} Units.
	   * @api
	   */
	  Projection.prototype.getUnits = function () {
	    return this.units_;
	  };
	  /**
	   * Get the amount of meters per unit of this projection.  If the projection is
	   * not configured with `metersPerUnit` or a units identifier, the return is
	   * `undefined`.
	   * @return {number|undefined} Meters.
	   * @api
	   */
	  Projection.prototype.getMetersPerUnit = function () {
	    return this.metersPerUnit_ || _Units.METERS_PER_UNIT[this.units_];
	  };
	  /**
	   * Get the world extent for this projection.
	   * @return {import("../extent.js").Extent} Extent.
	   * @api
	   */
	  Projection.prototype.getWorldExtent = function () {
	    return this.worldExtent_;
	  };
	  /**
	   * Get the axis orientation of this projection.
	   * Example values are:
	   * enu - the default easting, northing, elevation.
	   * neu - northing, easting, up - useful for "lat/long" geographic coordinates,
	   *     or south orientated transverse mercator.
	   * wnu - westing, northing, up - some planetary coordinate systems have
	   *     "west positive" coordinate systems
	   * @return {string} Axis orientation.
	   * @api
	   */
	  Projection.prototype.getAxisOrientation = function () {
	    return this.axisOrientation_;
	  };
	  /**
	   * Is this projection a global projection which spans the whole world?
	   * @return {boolean} Whether the projection is global.
	   * @api
	   */
	  Projection.prototype.isGlobal = function () {
	    return this.global_;
	  };
	  /**
	   * Set if the projection is a global projection which spans the whole world
	   * @param {boolean} global Whether the projection is global.
	   * @api
	   */
	  Projection.prototype.setGlobal = function (global) {
	    this.global_ = global;
	    this.canWrapX_ = !!(global && this.extent_);
	  };
	  /**
	   * @return {import("../tilegrid/TileGrid.js").default} The default tile grid.
	   */
	  Projection.prototype.getDefaultTileGrid = function () {
	    return this.defaultTileGrid_;
	  };
	  /**
	   * @param {import("../tilegrid/TileGrid.js").default} tileGrid The default tile grid.
	   */
	  Projection.prototype.setDefaultTileGrid = function (tileGrid) {
	    this.defaultTileGrid_ = tileGrid;
	  };
	  /**
	   * Set the validity extent for this projection.
	   * @param {import("../extent.js").Extent} extent Extent.
	   * @api
	   */
	  Projection.prototype.setExtent = function (extent) {
	    this.extent_ = extent;
	    this.canWrapX_ = !!(this.global_ && extent);
	  };
	  /**
	   * Set the world extent for this projection.
	   * @param {import("../extent.js").Extent} worldExtent World extent
	   *     [minlon, minlat, maxlon, maxlat].
	   * @api
	   */
	  Projection.prototype.setWorldExtent = function (worldExtent) {
	    this.worldExtent_ = worldExtent;
	  };
	  /**
	   * Set the getPointResolution function (see {@link module:ol/proj~getPointResolution}
	   * for this projection.
	   * @param {function(number, import("../coordinate.js").Coordinate):number} func Function
	   * @api
	   */
	  Projection.prototype.setGetPointResolution = function (func) {
	    this.getPointResolutionFunc_ = func;
	  };
	  /**
	   * Get the custom point resolution function for this projection (if set).
	   * @return {function(number, import("../coordinate.js").Coordinate):number|undefined} The custom point
	   * resolution function (if set).
	   */
	  Projection.prototype.getPointResolutionFunc = function () {
	    return this.getPointResolutionFunc_;
	  };
	  return Projection;
	}(); /**
	      * @module ol/proj/Projection
	      */
	exports.default = Projection;
	//# sourceMappingURL=Projection.js.map

/***/ }),
/* 177 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	exports.disable = disable;
	exports.none = none;
	exports.createSnapToN = createSnapToN;
	exports.createSnapToZero = createSnapToZero;
	
	var _math = __webpack_require__(19);
	
	/**
	 * @typedef {function((number|undefined), boolean=): (number|undefined)} Type
	 */
	/**
	 * @param {number|undefined} rotation Rotation.
	 * @return {number|undefined} Rotation.
	 */
	function disable(rotation) {
	    if (rotation !== undefined) {
	        return 0;
	    } else {
	        return undefined;
	    }
	}
	/**
	 * @param {number|undefined} rotation Rotation.
	 * @return {number|undefined} Rotation.
	 */
	/**
	 * @module ol/rotationconstraint
	 */
	function none(rotation) {
	    if (rotation !== undefined) {
	        return rotation;
	    } else {
	        return undefined;
	    }
	}
	/**
	 * @param {number} n N.
	 * @return {Type} Rotation constraint.
	 */
	function createSnapToN(n) {
	    var theta = 2 * Math.PI / n;
	    return (
	        /**
	         * @param {number|undefined} rotation Rotation.
	         * @param {boolean=} opt_isMoving True if an interaction or animation is in progress.
	         * @return {number|undefined} Rotation.
	         */
	        function (rotation, opt_isMoving) {
	            if (opt_isMoving) {
	                return rotation;
	            }
	            if (rotation !== undefined) {
	                rotation = Math.floor(rotation / theta + 0.5) * theta;
	                return rotation;
	            } else {
	                return undefined;
	            }
	        }
	    );
	}
	/**
	 * @param {number=} opt_tolerance Tolerance.
	 * @return {Type} Rotation constraint.
	 */
	function createSnapToZero(opt_tolerance) {
	    var tolerance = opt_tolerance || (0, _math.toRadians)(5);
	    return (
	        /**
	         * @param {number|undefined} rotation Rotation.
	         * @param {boolean} opt_isMoving True if an interaction or animation is in progress.
	         * @return {number|undefined} Rotation.
	         */
	        function (rotation, opt_isMoving) {
	            if (opt_isMoving) {
	                return rotation;
	            }
	            if (rotation !== undefined) {
	                if (Math.abs(rotation) <= tolerance) {
	                    return 0;
	                } else {
	                    return rotation;
	                }
	            } else {
	                return undefined;
	            }
	        }
	    );
	}
	//# sourceMappingURL=rotationconstraint.js.map

/***/ }),
/* 178 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	
	var _common = __webpack_require__(296);
	
	var _util = __webpack_require__(14);
	
	var _ImageTile = __webpack_require__(576);
	
	var _ImageTile2 = _interopRequireDefault(_ImageTile);
	
	var _TileCache = __webpack_require__(259);
	
	var _TileCache2 = _interopRequireDefault(_TileCache);
	
	var _TileState = __webpack_require__(70);
	
	var _TileState2 = _interopRequireDefault(_TileState);
	
	var _EventType = __webpack_require__(10);
	
	var _EventType2 = _interopRequireDefault(_EventType);
	
	var _proj = __webpack_require__(16);
	
	var _Tile = __webpack_require__(641);
	
	var _Tile2 = _interopRequireDefault(_Tile);
	
	var _UrlTile = __webpack_require__(647);
	
	var _UrlTile2 = _interopRequireDefault(_UrlTile);
	
	var _tilecoord = __webpack_require__(88);
	
	var _tilegrid = __webpack_require__(185);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var __extends = undefined && undefined.__extends || function () {
	    var _extendStatics = function extendStatics(d, b) {
	        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	            d.__proto__ = b;
	        } || function (d, b) {
	            for (var p in b) {
	                if (b.hasOwnProperty(p)) d[p] = b[p];
	            }
	        };
	        return _extendStatics(d, b);
	    };
	    return function (d, b) {
	        _extendStatics(d, b);
	        function __() {
	            this.constructor = d;
	        }
	        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	    };
	}();
	/**
	 * @module ol/source/TileImage
	 */
	
	/**
	 * @typedef {Object} Options
	 * @property {import("./Source.js").AttributionLike} [attributions] Attributions.
	 * @property {boolean} [attributionsCollapsible=true] Attributions are collapsible.
	 * @property {number} [cacheSize] Tile cache size. The default depends on the screen size. Will increase if too small.
	 * @property {null|string} [crossOrigin] The `crossOrigin` attribute for loaded images.  Note that
	 * you must provide a `crossOrigin` value if you want to access pixel data with the Canvas renderer.
	 * See https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_enabled_image for more detail.
	 * @property {boolean} [opaque=true] Whether the layer is opaque.
	 * @property {import("../proj.js").ProjectionLike} [projection] Projection. Default is the view projection.
	 * @property {number} [reprojectionErrorThreshold=0.5] Maximum allowed reprojection error (in pixels).
	 * Higher values can increase reprojection performance, but decrease precision.
	 * @property {import("./State.js").default} [state] Source state.
	 * @property {typeof import("../ImageTile.js").default} [tileClass] Class used to instantiate image tiles.
	 * Default is {@link module:ol/ImageTile~ImageTile}.
	 * @property {import("../tilegrid/TileGrid.js").default} [tileGrid] Tile grid.
	 * @property {import("../Tile.js").LoadFunction} [tileLoadFunction] Optional function to load a tile given a URL. The default is
	 * ```js
	 * function(imageTile, src) {
	 *   imageTile.getImage().src = src;
	 * };
	 * ```
	 * @property {number} [tilePixelRatio=1] The pixel ratio used by the tile service. For example, if the tile
	 * service advertizes 256px by 256px tiles but actually sends 512px
	 * by 512px images (for retina/hidpi devices) then `tilePixelRatio`
	 * should be set to `2`.
	 * @property {import("../Tile.js").UrlFunction} [tileUrlFunction] Optional function to get tile URL given a tile coordinate and the projection.
	 * @property {string} [url] URL template. Must include `{x}`, `{y}` or `{-y}`, and `{z}` placeholders.
	 * A `{?-?}` template pattern, for example `subdomain{a-f}.domain.com`, may be
	 * used instead of defining each one separately in the `urls` option.
	 * @property {Array<string>} [urls] An array of URL templates.
	 * @property {boolean} [wrapX] Whether to wrap the world horizontally. The default, is to
	 * request out-of-bounds tiles from the server. When set to `false`, only one
	 * world will be rendered. When set to `true`, tiles will be requested for one
	 * world only, but they will be wrapped horizontally to render multiple worlds.
	 * @property {number} [transition] Duration of the opacity transition for rendering.
	 * To disable the opacity transition, pass `transition: 0`.
	 * @property {string} [key] Optional tile key for proper cache fetching
	 * @property {number} [zDirection=0] Indicate which resolution should be used
	 * by a renderer if the view resolution does not match any resolution of the tile source.
	 * If 0, the nearest resolution will be used. If 1, the nearest lower resolution
	 * will be used. If -1, the nearest higher resolution will be used.
	 */
	/**
	 * @classdesc
	 * Base class for sources providing images divided into a tile grid.
	 *
	 * @fires import("./Tile.js").TileSourceEvent
	 * @api
	 */
	var TileImage = /** @class */function (_super) {
	    __extends(TileImage, _super);
	    /**
	     * @param {!Options} options Image tile options.
	     */
	    function TileImage(options) {
	        var _this = _super.call(this, {
	            attributions: options.attributions,
	            cacheSize: options.cacheSize,
	            opaque: options.opaque,
	            projection: options.projection,
	            state: options.state,
	            tileGrid: options.tileGrid,
	            tileLoadFunction: options.tileLoadFunction ? options.tileLoadFunction : defaultTileLoadFunction,
	            tilePixelRatio: options.tilePixelRatio,
	            tileUrlFunction: options.tileUrlFunction,
	            url: options.url,
	            urls: options.urls,
	            wrapX: options.wrapX,
	            transition: options.transition,
	            key: options.key,
	            attributionsCollapsible: options.attributionsCollapsible,
	            zDirection: options.zDirection
	        }) || this;
	        /**
	         * @protected
	         * @type {?string}
	         */
	        _this.crossOrigin = options.crossOrigin !== undefined ? options.crossOrigin : null;
	        /**
	         * @protected
	         * @type {typeof ImageTile}
	         */
	        _this.tileClass = options.tileClass !== undefined ? options.tileClass : _ImageTile2.default;
	        /**
	         * @protected
	         * @type {!Object<string, TileCache>}
	         */
	        _this.tileCacheForProjection = {};
	        /**
	         * @protected
	         * @type {!Object<string, import("../tilegrid/TileGrid.js").default>}
	         */
	        _this.tileGridForProjection = {};
	        /**
	         * @private
	         * @type {number|undefined}
	         */
	        _this.reprojectionErrorThreshold_ = options.reprojectionErrorThreshold;
	        /**
	         * @private
	         * @type {boolean}
	         */
	        _this.renderReprojectionEdges_ = false;
	        return _this;
	    }
	    /**
	     * @inheritDoc
	     */
	    TileImage.prototype.canExpireCache = function () {
	        if (!_common.ENABLE_RASTER_REPROJECTION) {
	            return _super.prototype.canExpireCache.call(this);
	        }
	        if (this.tileCache.canExpireCache()) {
	            return true;
	        } else {
	            for (var key in this.tileCacheForProjection) {
	                if (this.tileCacheForProjection[key].canExpireCache()) {
	                    return true;
	                }
	            }
	        }
	        return false;
	    };
	    /**
	     * @inheritDoc
	     */
	    TileImage.prototype.expireCache = function (projection, usedTiles) {
	        if (!_common.ENABLE_RASTER_REPROJECTION) {
	            _super.prototype.expireCache.call(this, projection, usedTiles);
	            return;
	        }
	        var usedTileCache = this.getTileCacheForProjection(projection);
	        this.tileCache.expireCache(this.tileCache == usedTileCache ? usedTiles : {});
	        for (var id in this.tileCacheForProjection) {
	            var tileCache = this.tileCacheForProjection[id];
	            tileCache.expireCache(tileCache == usedTileCache ? usedTiles : {});
	        }
	    };
	    /**
	     * @inheritDoc
	     */
	    TileImage.prototype.getGutterForProjection = function (projection) {
	        if (_common.ENABLE_RASTER_REPROJECTION && this.getProjection() && projection && !(0, _proj.equivalent)(this.getProjection(), projection)) {
	            return 0;
	        } else {
	            return this.getGutter();
	        }
	    };
	    /**
	     * @return {number} Gutter.
	     */
	    TileImage.prototype.getGutter = function () {
	        return 0;
	    };
	    /**
	     * @inheritDoc
	     */
	    TileImage.prototype.getOpaque = function (projection) {
	        if (_common.ENABLE_RASTER_REPROJECTION && this.getProjection() && projection && !(0, _proj.equivalent)(this.getProjection(), projection)) {
	            return false;
	        } else {
	            return _super.prototype.getOpaque.call(this, projection);
	        }
	    };
	    /**
	     * @inheritDoc
	     */
	    TileImage.prototype.getTileGridForProjection = function (projection) {
	        if (!_common.ENABLE_RASTER_REPROJECTION) {
	            return _super.prototype.getTileGridForProjection.call(this, projection);
	        }
	        var thisProj = this.getProjection();
	        if (this.tileGrid && (!thisProj || (0, _proj.equivalent)(thisProj, projection))) {
	            return this.tileGrid;
	        } else {
	            var projKey = (0, _util.getUid)(projection);
	            if (!(projKey in this.tileGridForProjection)) {
	                this.tileGridForProjection[projKey] = (0, _tilegrid.getForProjection)(projection);
	            }
	            return (
	                /** @type {!import("../tilegrid/TileGrid.js").default} */this.tileGridForProjection[projKey]
	            );
	        }
	    };
	    /**
	     * @inheritDoc
	     */
	    TileImage.prototype.getTileCacheForProjection = function (projection) {
	        if (!_common.ENABLE_RASTER_REPROJECTION) {
	            return _super.prototype.getTileCacheForProjection.call(this, projection);
	        }
	        var thisProj = this.getProjection();
	        if (!thisProj || (0, _proj.equivalent)(thisProj, projection)) {
	            return this.tileCache;
	        } else {
	            var projKey = (0, _util.getUid)(projection);
	            if (!(projKey in this.tileCacheForProjection)) {
	                this.tileCacheForProjection[projKey] = new _TileCache2.default(this.tileCache.highWaterMark);
	            }
	            return this.tileCacheForProjection[projKey];
	        }
	    };
	    /**
	     * @param {number} z Tile coordinate z.
	     * @param {number} x Tile coordinate x.
	     * @param {number} y Tile coordinate y.
	     * @param {number} pixelRatio Pixel ratio.
	     * @param {import("../proj/Projection.js").default} projection Projection.
	     * @param {string} key The key set on the tile.
	     * @return {!import("../Tile.js").default} Tile.
	     * @private
	     */
	    TileImage.prototype.createTile_ = function (z, x, y, pixelRatio, projection, key) {
	        var tileCoord = [z, x, y];
	        var urlTileCoord = this.getTileCoordForTileUrlFunction(tileCoord, projection);
	        var tileUrl = urlTileCoord ? this.tileUrlFunction(urlTileCoord, pixelRatio, projection) : undefined;
	        var tile = new this.tileClass(tileCoord, tileUrl !== undefined ? _TileState2.default.IDLE : _TileState2.default.EMPTY, tileUrl !== undefined ? tileUrl : '', this.crossOrigin, this.tileLoadFunction, this.tileOptions);
	        tile.key = key;
	        tile.addEventListener(_EventType2.default.CHANGE, this.handleTileChange.bind(this));
	        return tile;
	    };
	    /**
	     * @inheritDoc
	     */
	    TileImage.prototype.getTile = function (z, x, y, pixelRatio, projection) {
	        var sourceProjection = /** @type {!import("../proj/Projection.js").default} */this.getProjection();
	        if (!_common.ENABLE_RASTER_REPROJECTION || !sourceProjection || !projection || (0, _proj.equivalent)(sourceProjection, projection)) {
	            return this.getTileInternal(z, x, y, pixelRatio, sourceProjection || projection);
	        } else {
	            var cache = this.getTileCacheForProjection(projection);
	            var tileCoord = [z, x, y];
	            var tile = void 0;
	            var tileCoordKey = (0, _tilecoord.getKey)(tileCoord);
	            if (cache.containsKey(tileCoordKey)) {
	                tile = /** @type {!import("../Tile.js").default} */cache.get(tileCoordKey);
	            }
	            var key = this.getKey();
	            if (tile && tile.key == key) {
	                return tile;
	            } else {
	                var sourceTileGrid = this.getTileGridForProjection(sourceProjection);
	                var targetTileGrid = this.getTileGridForProjection(projection);
	                var wrappedTileCoord = this.getTileCoordForTileUrlFunction(tileCoord, projection);
	                var newTile = new _Tile2.default(sourceProjection, sourceTileGrid, projection, targetTileGrid, tileCoord, wrappedTileCoord, this.getTilePixelRatio(pixelRatio), this.getGutter(), function (z, x, y, pixelRatio) {
	                    return this.getTileInternal(z, x, y, pixelRatio, sourceProjection);
	                }.bind(this), this.reprojectionErrorThreshold_, this.renderReprojectionEdges_);
	                newTile.key = key;
	                if (tile) {
	                    newTile.interimTile = tile;
	                    newTile.refreshInterimChain();
	                    cache.replace(tileCoordKey, newTile);
	                } else {
	                    cache.set(tileCoordKey, newTile);
	                }
	                return newTile;
	            }
	        }
	    };
	    /**
	     * @param {number} z Tile coordinate z.
	     * @param {number} x Tile coordinate x.
	     * @param {number} y Tile coordinate y.
	     * @param {number} pixelRatio Pixel ratio.
	     * @param {!import("../proj/Projection.js").default} projection Projection.
	     * @return {!import("../Tile.js").default} Tile.
	     * @protected
	     */
	    TileImage.prototype.getTileInternal = function (z, x, y, pixelRatio, projection) {
	        var tile = null;
	        var tileCoordKey = (0, _tilecoord.getKeyZXY)(z, x, y);
	        var key = this.getKey();
	        if (!this.tileCache.containsKey(tileCoordKey)) {
	            tile = this.createTile_(z, x, y, pixelRatio, projection, key);
	            this.tileCache.set(tileCoordKey, tile);
	        } else {
	            tile = this.tileCache.get(tileCoordKey);
	            if (tile.key != key) {
	                // The source's params changed. If the tile has an interim tile and if we
	                // can use it then we use it. Otherwise we create a new tile.  In both
	                // cases we attempt to assign an interim tile to the new tile.
	                var interimTile = tile;
	                tile = this.createTile_(z, x, y, pixelRatio, projection, key);
	                //make the new tile the head of the list,
	                if (interimTile.getState() == _TileState2.default.IDLE) {
	                    //the old tile hasn't begun loading yet, and is now outdated, so we can simply discard it
	                    tile.interimTile = interimTile.interimTile;
	                } else {
	                    tile.interimTile = interimTile;
	                }
	                tile.refreshInterimChain();
	                this.tileCache.replace(tileCoordKey, tile);
	            }
	        }
	        return tile;
	    };
	    /**
	     * Sets whether to render reprojection edges or not (usually for debugging).
	     * @param {boolean} render Render the edges.
	     * @api
	     */
	    TileImage.prototype.setRenderReprojectionEdges = function (render) {
	        if (!_common.ENABLE_RASTER_REPROJECTION || this.renderReprojectionEdges_ == render) {
	            return;
	        }
	        this.renderReprojectionEdges_ = render;
	        for (var id in this.tileCacheForProjection) {
	            this.tileCacheForProjection[id].clear();
	        }
	        this.changed();
	    };
	    /**
	     * Sets the tile grid to use when reprojecting the tiles to the given
	     * projection instead of the default tile grid for the projection.
	     *
	     * This can be useful when the default tile grid cannot be created
	     * (e.g. projection has no extent defined) or
	     * for optimization reasons (custom tile size, resolutions, ...).
	     *
	     * @param {import("../proj.js").ProjectionLike} projection Projection.
	     * @param {import("../tilegrid/TileGrid.js").default} tilegrid Tile grid to use for the projection.
	     * @api
	     */
	    TileImage.prototype.setTileGridForProjection = function (projection, tilegrid) {
	        if (_common.ENABLE_RASTER_REPROJECTION) {
	            var proj = (0, _proj.get)(projection);
	            if (proj) {
	                var projKey = (0, _util.getUid)(proj);
	                if (!(projKey in this.tileGridForProjection)) {
	                    this.tileGridForProjection[projKey] = tilegrid;
	                }
	            }
	        }
	    };
	    return TileImage;
	}(_UrlTile2.default);
	/**
	 * @param {ImageTile} imageTile Image tile.
	 * @param {string} src Source.
	 */
	function defaultTileLoadFunction(imageTile, src) {
	    /** @type {HTMLImageElement|HTMLVideoElement} */imageTile.getImage().src = src;
	}
	exports.default = TileImage;
	//# sourceMappingURL=TileImage.js.map

/***/ }),
/* 179 */
/***/ (function(module, exports) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	/**
	 * @module ol/source/VectorEventType
	 */
	/**
	 * @enum {string}
	 */
	exports.default = {
	  /**
	   * Triggered when a feature is added to the source.
	   * @event module:ol/source/Vector.VectorSourceEvent#addfeature
	   * @api
	   */
	  ADDFEATURE: 'addfeature',
	  /**
	   * Triggered when a feature is updated.
	   * @event module:ol/source/Vector.VectorSourceEvent#changefeature
	   * @api
	   */
	  CHANGEFEATURE: 'changefeature',
	  /**
	   * Triggered when the clear method is called on the source.
	   * @event module:ol/source/Vector.VectorSourceEvent#clear
	   * @api
	   */
	  CLEAR: 'clear',
	  /**
	   * Triggered when a feature is removed from the source.
	   * See {@link module:ol/source/Vector#clear source.clear()} for exceptions.
	   * @event module:ol/source/Vector.VectorSourceEvent#removefeature
	   * @api
	   */
	  REMOVEFEATURE: 'removefeature'
	};
	//# sourceMappingURL=VectorEventType.js.map

/***/ }),
/* 180 */
/***/ (function(module, exports) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	exports.padNumber = padNumber;
	exports.compareVersions = compareVersions;
	/**
	 * @module ol/string
	 */
	/**
	 * @param {number} number Number to be formatted
	 * @param {number} width The desired width
	 * @param {number=} opt_precision Precision of the output string (i.e. number of decimal places)
	 * @returns {string} Formatted string
	 */
	function padNumber(number, width, opt_precision) {
	    var numberString = opt_precision !== undefined ? number.toFixed(opt_precision) : '' + number;
	    var decimal = numberString.indexOf('.');
	    decimal = decimal === -1 ? numberString.length : decimal;
	    return decimal > width ? numberString : new Array(1 + width - decimal).join('0') + numberString;
	}
	/**
	 * Adapted from https://github.com/omichelsen/compare-versions/blob/master/index.js
	 * @param {string|number} v1 First version
	 * @param {string|number} v2 Second version
	 * @returns {number} Value
	 */
	function compareVersions(v1, v2) {
	    var s1 = ('' + v1).split('.');
	    var s2 = ('' + v2).split('.');
	    for (var i = 0; i < Math.max(s1.length, s2.length); i++) {
	        var n1 = parseInt(s1[i] || '0', 10);
	        var n2 = parseInt(s2[i] || '0', 10);
	        if (n1 > n2) {
	            return 1;
	        }
	        if (n2 > n1) {
	            return -1;
	        }
	    }
	    return 0;
	}
	//# sourceMappingURL=string.js.map

/***/ }),
/* 181 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	
	var _util = __webpack_require__(14);
	
	var _rbush = __webpack_require__(514);
	
	var _rbush2 = _interopRequireDefault(_rbush);
	
	var _extent = __webpack_require__(4);
	
	var _obj = __webpack_require__(23);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	/**
	 * @typedef {Object} Entry
	 * @property {number} minX
	 * @property {number} minY
	 * @property {number} maxX
	 * @property {number} maxY
	 * @property {Object} [value]
	 */
	/**
	 * @classdesc
	 * Wrapper around the RBush by Vladimir Agafonkin.
	 * See https://github.com/mourner/rbush.
	 *
	 * @template T
	 */
	/**
	 * @module ol/structs/RBush
	 */
	var RBush = /** @class */function () {
	    /**
	     * @param {number=} opt_maxEntries Max entries.
	     */
	    function RBush(opt_maxEntries) {
	        /**
	         * @private
	         */
	        this.rbush_ = new _rbush2.default(opt_maxEntries);
	        /**
	         * A mapping between the objects added to this rbush wrapper
	         * and the objects that are actually added to the internal rbush.
	         * @private
	         * @type {Object<string, Entry>}
	         */
	        this.items_ = {};
	    }
	    /**
	     * Insert a value into the RBush.
	     * @param {import("../extent.js").Extent} extent Extent.
	     * @param {T} value Value.
	     */
	    RBush.prototype.insert = function (extent, value) {
	        /** @type {Entry} */
	        var item = {
	            minX: extent[0],
	            minY: extent[1],
	            maxX: extent[2],
	            maxY: extent[3],
	            value: value
	        };
	        this.rbush_.insert(item);
	        this.items_[(0, _util.getUid)(value)] = item;
	    };
	    /**
	     * Bulk-insert values into the RBush.
	     * @param {Array<import("../extent.js").Extent>} extents Extents.
	     * @param {Array<T>} values Values.
	     */
	    RBush.prototype.load = function (extents, values) {
	        var items = new Array(values.length);
	        for (var i = 0, l = values.length; i < l; i++) {
	            var extent = extents[i];
	            var value = values[i];
	            /** @type {Entry} */
	            var item = {
	                minX: extent[0],
	                minY: extent[1],
	                maxX: extent[2],
	                maxY: extent[3],
	                value: value
	            };
	            items[i] = item;
	            this.items_[(0, _util.getUid)(value)] = item;
	        }
	        this.rbush_.load(items);
	    };
	    /**
	     * Remove a value from the RBush.
	     * @param {T} value Value.
	     * @return {boolean} Removed.
	     */
	    RBush.prototype.remove = function (value) {
	        var uid = (0, _util.getUid)(value);
	        // get the object in which the value was wrapped when adding to the
	        // internal rbush. then use that object to do the removal.
	        var item = this.items_[uid];
	        delete this.items_[uid];
	        return this.rbush_.remove(item) !== null;
	    };
	    /**
	     * Update the extent of a value in the RBush.
	     * @param {import("../extent.js").Extent} extent Extent.
	     * @param {T} value Value.
	     */
	    RBush.prototype.update = function (extent, value) {
	        var item = this.items_[(0, _util.getUid)(value)];
	        var bbox = [item.minX, item.minY, item.maxX, item.maxY];
	        if (!(0, _extent.equals)(bbox, extent)) {
	            this.remove(value);
	            this.insert(extent, value);
	        }
	    };
	    /**
	     * Return all values in the RBush.
	     * @return {Array<T>} All.
	     */
	    RBush.prototype.getAll = function () {
	        var items = this.rbush_.all();
	        return items.map(function (item) {
	            return item.value;
	        });
	    };
	    /**
	     * Return all values in the given extent.
	     * @param {import("../extent.js").Extent} extent Extent.
	     * @return {Array<T>} All in extent.
	     */
	    RBush.prototype.getInExtent = function (extent) {
	        /** @type {Entry} */
	        var bbox = {
	            minX: extent[0],
	            minY: extent[1],
	            maxX: extent[2],
	            maxY: extent[3]
	        };
	        var items = this.rbush_.search(bbox);
	        return items.map(function (item) {
	            return item.value;
	        });
	    };
	    /**
	     * Calls a callback function with each value in the tree.
	     * If the callback returns a truthy value, this value is returned without
	     * checking the rest of the tree.
	     * @param {function(T): *} callback Callback.
	     * @return {*} Callback return value.
	     */
	    RBush.prototype.forEach = function (callback) {
	        return this.forEach_(this.getAll(), callback);
	    };
	    /**
	     * Calls a callback function with each value in the provided extent.
	     * @param {import("../extent.js").Extent} extent Extent.
	     * @param {function(T): *} callback Callback.
	     * @return {*} Callback return value.
	     */
	    RBush.prototype.forEachInExtent = function (extent, callback) {
	        return this.forEach_(this.getInExtent(extent), callback);
	    };
	    /**
	     * @param {Array<T>} values Values.
	     * @param {function(T): *} callback Callback.
	     * @private
	     * @return {*} Callback return value.
	     */
	    RBush.prototype.forEach_ = function (values, callback) {
	        var result;
	        for (var i = 0, l = values.length; i < l; i++) {
	            result = callback(values[i]);
	            if (result) {
	                return result;
	            }
	        }
	        return result;
	    };
	    /**
	     * @return {boolean} Is empty.
	     */
	    RBush.prototype.isEmpty = function () {
	        return (0, _obj.isEmpty)(this.items_);
	    };
	    /**
	     * Remove all values from the RBush.
	     */
	    RBush.prototype.clear = function () {
	        this.rbush_.clear();
	        this.items_ = {};
	    };
	    /**
	     * @param {import("../extent.js").Extent=} opt_extent Extent.
	     * @return {import("../extent.js").Extent} Extent.
	     */
	    RBush.prototype.getExtent = function (opt_extent) {
	        var data = this.rbush_.toJSON();
	        return (0, _extent.createOrUpdate)(data.minX, data.minY, data.maxX, data.maxY, opt_extent);
	    };
	    /**
	     * @param {RBush} rbush R-Tree.
	     */
	    RBush.prototype.concat = function (rbush) {
	        this.rbush_.load(rbush.rbush_.all());
	        for (var i in rbush.items_) {
	            this.items_[i] = rbush.items_[i];
	        }
	    };
	    return RBush;
	}();
	exports.default = RBush;
	//# sourceMappingURL=RBush.js.map

/***/ }),
/* 182 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	
	var _RegularShape = __webpack_require__(304);
	
	var _RegularShape2 = _interopRequireDefault(_RegularShape);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	/**
	 * @module ol/style/Circle
	 */
	var __extends = undefined && undefined.__extends || function () {
	    var _extendStatics = function extendStatics(d, b) {
	        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	            d.__proto__ = b;
	        } || function (d, b) {
	            for (var p in b) {
	                if (b.hasOwnProperty(p)) d[p] = b[p];
	            }
	        };
	        return _extendStatics(d, b);
	    };
	    return function (d, b) {
	        _extendStatics(d, b);
	        function __() {
	            this.constructor = d;
	        }
	        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	    };
	}();
	
	/**
	 * @typedef {Object} Options
	 * @property {import("./Fill.js").default} [fill] Fill style.
	 * @property {number} radius Circle radius.
	 * @property {import("./Stroke.js").default} [stroke] Stroke style.
	 */
	/**
	 * @classdesc
	 * Set circle style for vector features.
	 * @api
	 */
	var CircleStyle = /** @class */function (_super) {
	    __extends(CircleStyle, _super);
	    /**
	     * @param {Options=} opt_options Options.
	     */
	    function CircleStyle(opt_options) {
	        var _this = this;
	        var options = opt_options ? opt_options : {};
	        _this = _super.call(this, {
	            points: Infinity,
	            fill: options.fill,
	            radius: options.radius,
	            stroke: options.stroke
	        }) || this;
	        return _this;
	    }
	    /**
	    * Clones the style.
	    * @return {CircleStyle} The cloned style.
	    * @override
	    * @api
	    */
	    CircleStyle.prototype.clone = function () {
	        var style = new CircleStyle({
	            fill: this.getFill() ? this.getFill().clone() : undefined,
	            stroke: this.getStroke() ? this.getStroke().clone() : undefined,
	            radius: this.getRadius()
	        });
	        style.setOpacity(this.getOpacity());
	        style.setScale(this.getScale());
	        return style;
	    };
	    /**
	     * Set the circle radius.
	     *
	     * @param {number} radius Circle radius.
	     * @api
	     */
	    CircleStyle.prototype.setRadius = function (radius) {
	        this.radius_ = radius;
	        this.render();
	    };
	    return CircleStyle;
	}(_RegularShape2.default);
	exports.default = CircleStyle;
	//# sourceMappingURL=Circle.js.map

/***/ }),
/* 183 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	
	var _util = __webpack_require__(14);
	
	/**
	 * @typedef {Object} Options
	 * @property {number} opacity
	 * @property {boolean} rotateWithView
	 * @property {number} rotation
	 * @property {number} scale
	 */
	/**
	 * @classdesc
	 * A base class used for creating subclasses and not instantiated in
	 * apps. Base class for {@link module:ol/style/Icon~Icon}, {@link module:ol/style/Circle~CircleStyle} and
	 * {@link module:ol/style/RegularShape~RegularShape}.
	 * @abstract
	 * @api
	 */
	var ImageStyle = /** @class */function () {
	  /**
	   * @param {Options} options Options.
	   */
	  function ImageStyle(options) {
	    /**
	     * @private
	     * @type {number}
	     */
	    this.opacity_ = options.opacity;
	    /**
	     * @private
	     * @type {boolean}
	     */
	    this.rotateWithView_ = options.rotateWithView;
	    /**
	     * @private
	     * @type {number}
	     */
	    this.rotation_ = options.rotation;
	    /**
	     * @private
	     * @type {number}
	     */
	    this.scale_ = options.scale;
	  }
	  /**
	   * Clones the style.
	   * @return {ImageStyle} The cloned style.
	   * @api
	   */
	  ImageStyle.prototype.clone = function () {
	    return new ImageStyle({
	      opacity: this.getOpacity(),
	      scale: this.getScale(),
	      rotation: this.getRotation(),
	      rotateWithView: this.getRotateWithView()
	    });
	  };
	  /**
	   * Get the symbolizer opacity.
	   * @return {number} Opacity.
	   * @api
	   */
	  ImageStyle.prototype.getOpacity = function () {
	    return this.opacity_;
	  };
	  /**
	   * Determine whether the symbolizer rotates with the map.
	   * @return {boolean} Rotate with map.
	   * @api
	   */
	  ImageStyle.prototype.getRotateWithView = function () {
	    return this.rotateWithView_;
	  };
	  /**
	   * Get the symoblizer rotation.
	   * @return {number} Rotation.
	   * @api
	   */
	  ImageStyle.prototype.getRotation = function () {
	    return this.rotation_;
	  };
	  /**
	   * Get the symbolizer scale.
	   * @return {number} Scale.
	   * @api
	   */
	  ImageStyle.prototype.getScale = function () {
	    return this.scale_;
	  };
	  /**
	   * Get the anchor point in pixels. The anchor determines the center point for the
	   * symbolizer.
	   * @abstract
	   * @return {Array<number>} Anchor.
	   */
	  ImageStyle.prototype.getAnchor = function () {
	    return (0, _util.abstract)();
	  };
	  /**
	   * Get the image element for the symbolizer.
	   * @abstract
	   * @param {number} pixelRatio Pixel ratio.
	   * @return {HTMLCanvasElement|HTMLVideoElement|HTMLImageElement} Image element.
	   */
	  ImageStyle.prototype.getImage = function (pixelRatio) {
	    return (0, _util.abstract)();
	  };
	  /**
	   * @abstract
	   * @param {number} pixelRatio Pixel ratio.
	   * @return {HTMLCanvasElement|HTMLVideoElement|HTMLImageElement} Image element.
	   */
	  ImageStyle.prototype.getHitDetectionImage = function (pixelRatio) {
	    return (0, _util.abstract)();
	  };
	  /**
	   * @abstract
	   * @return {import("../ImageState.js").default} Image state.
	   */
	  ImageStyle.prototype.getImageState = function () {
	    return (0, _util.abstract)();
	  };
	  /**
	   * @abstract
	   * @return {import("../size.js").Size} Image size.
	   */
	  ImageStyle.prototype.getImageSize = function () {
	    return (0, _util.abstract)();
	  };
	  /**
	   * @abstract
	   * @return {import("../size.js").Size} Size of the hit-detection image.
	   */
	  ImageStyle.prototype.getHitDetectionImageSize = function () {
	    return (0, _util.abstract)();
	  };
	  /**
	   * Get the origin of the symbolizer.
	   * @abstract
	   * @return {Array<number>} Origin.
	   */
	  ImageStyle.prototype.getOrigin = function () {
	    return (0, _util.abstract)();
	  };
	  /**
	   * Get the size of the symbolizer (in pixels).
	   * @abstract
	   * @return {import("../size.js").Size} Size.
	   */
	  ImageStyle.prototype.getSize = function () {
	    return (0, _util.abstract)();
	  };
	  /**
	   * Set the opacity.
	   *
	   * @param {number} opacity Opacity.
	   * @api
	   */
	  ImageStyle.prototype.setOpacity = function (opacity) {
	    this.opacity_ = opacity;
	  };
	  /**
	   * Set whether to rotate the style with the view.
	   *
	   * @param {boolean} rotateWithView Rotate with map.
	   * @api
	   */
	  ImageStyle.prototype.setRotateWithView = function (rotateWithView) {
	    this.rotateWithView_ = rotateWithView;
	  };
	  /**
	   * Set the rotation.
	   *
	   * @param {number} rotation Rotation.
	   * @api
	   */
	  ImageStyle.prototype.setRotation = function (rotation) {
	    this.rotation_ = rotation;
	  };
	  /**
	   * Set the scale.
	   *
	   * @param {number} scale Scale.
	   * @api
	   */
	  ImageStyle.prototype.setScale = function (scale) {
	    this.scale_ = scale;
	  };
	  /**
	   * @abstract
	   * @param {function(import("../events/Event.js").default): void} listener Listener function.
	   * @template T
	   */
	  ImageStyle.prototype.listenImageChange = function (listener) {
	    (0, _util.abstract)();
	  };
	  /**
	   * Load not yet loaded URI.
	   * @abstract
	   */
	  ImageStyle.prototype.load = function () {
	    (0, _util.abstract)();
	  };
	  /**
	   * @abstract
	   * @param {function(import("../events/Event.js").default): void} listener Listener function.
	   * @template T
	   */
	  ImageStyle.prototype.unlistenImageChange = function (listener) {
	    (0, _util.abstract)();
	  };
	  return ImageStyle;
	}(); /**
	      * @module ol/style/Image
	      */
	exports.default = ImageStyle;
	//# sourceMappingURL=Image.js.map

/***/ }),
/* 184 */
/***/ (function(module, exports) {

	"use strict";
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	/**
	 * @module ol/style/Stroke
	 */
	/**
	 * @typedef {Object} Options
	 * @property {import("../color.js").Color|import("../colorlike.js").ColorLike} [color] A color, gradient or pattern.
	 * See {@link module:ol/color~Color} and {@link module:ol/colorlike~ColorLike} for possible formats.
	 * Default null; if null, the Canvas/renderer default black will be used.
	 * @property {CanvasLineCap} [lineCap='round'] Line cap style: `butt`, `round`, or `square`.
	 * @property {CanvasLineJoin} [lineJoin='round'] Line join style: `bevel`, `round`, or `miter`.
	 * @property {Array<number>} [lineDash] Line dash pattern. Default is `undefined` (no dash).
	 * Please note that Internet Explorer 10 and lower do not support the `setLineDash` method on
	 * the `CanvasRenderingContext2D` and therefore this option will have no visual effect in these browsers.
	 * @property {number} [lineDashOffset=0] Line dash offset.
	 * @property {number} [miterLimit=10] Miter limit.
	 * @property {number} [width] Width.
	 */
	/**
	 * @classdesc
	 * Set stroke style for vector features.
	 * Note that the defaults given are the Canvas defaults, which will be used if
	 * option is not defined. The `get` functions return whatever was entered in
	 * the options; they will not return the default.
	 * @api
	 */
	var Stroke = /** @class */function () {
	  /**
	   * @param {Options=} opt_options Options.
	   */
	  function Stroke(opt_options) {
	    var options = opt_options || {};
	    /**
	     * @private
	     * @type {import("../color.js").Color|import("../colorlike.js").ColorLike}
	     */
	    this.color_ = options.color !== undefined ? options.color : null;
	    /**
	     * @private
	     * @type {CanvasLineCap|undefined}
	     */
	    this.lineCap_ = options.lineCap;
	    /**
	     * @private
	     * @type {Array<number>}
	     */
	    this.lineDash_ = options.lineDash !== undefined ? options.lineDash : null;
	    /**
	     * @private
	     * @type {number|undefined}
	     */
	    this.lineDashOffset_ = options.lineDashOffset;
	    /**
	     * @private
	     * @type {CanvasLineJoin|undefined}
	     */
	    this.lineJoin_ = options.lineJoin;
	    /**
	     * @private
	     * @type {number|undefined}
	     */
	    this.miterLimit_ = options.miterLimit;
	    /**
	     * @private
	     * @type {number|undefined}
	     */
	    this.width_ = options.width;
	  }
	  /**
	   * Clones the style.
	   * @return {Stroke} The cloned style.
	   * @api
	   */
	  Stroke.prototype.clone = function () {
	    var color = this.getColor();
	    return new Stroke({
	      color: Array.isArray(color) ? color.slice() : color || undefined,
	      lineCap: this.getLineCap(),
	      lineDash: this.getLineDash() ? this.getLineDash().slice() : undefined,
	      lineDashOffset: this.getLineDashOffset(),
	      lineJoin: this.getLineJoin(),
	      miterLimit: this.getMiterLimit(),
	      width: this.getWidth()
	    });
	  };
	  /**
	   * Get the stroke color.
	   * @return {import("../color.js").Color|import("../colorlike.js").ColorLike} Color.
	   * @api
	   */
	  Stroke.prototype.getColor = function () {
	    return this.color_;
	  };
	  /**
	   * Get the line cap type for the stroke.
	   * @return {CanvasLineCap|undefined} Line cap.
	   * @api
	   */
	  Stroke.prototype.getLineCap = function () {
	    return this.lineCap_;
	  };
	  /**
	   * Get the line dash style for the stroke.
	   * @return {Array<number>} Line dash.
	   * @api
	   */
	  Stroke.prototype.getLineDash = function () {
	    return this.lineDash_;
	  };
	  /**
	   * Get the line dash offset for the stroke.
	   * @return {number|undefined} Line dash offset.
	   * @api
	   */
	  Stroke.prototype.getLineDashOffset = function () {
	    return this.lineDashOffset_;
	  };
	  /**
	   * Get the line join type for the stroke.
	   * @return {CanvasLineJoin|undefined} Line join.
	   * @api
	   */
	  Stroke.prototype.getLineJoin = function () {
	    return this.lineJoin_;
	  };
	  /**
	   * Get the miter limit for the stroke.
	   * @return {number|undefined} Miter limit.
	   * @api
	   */
	  Stroke.prototype.getMiterLimit = function () {
	    return this.miterLimit_;
	  };
	  /**
	   * Get the stroke width.
	   * @return {number|undefined} Width.
	   * @api
	   */
	  Stroke.prototype.getWidth = function () {
	    return this.width_;
	  };
	  /**
	   * Set the color.
	   *
	   * @param {import("../color.js").Color|import("../colorlike.js").ColorLike} color Color.
	   * @api
	   */
	  Stroke.prototype.setColor = function (color) {
	    this.color_ = color;
	  };
	  /**
	   * Set the line cap.
	   *
	   * @param {CanvasLineCap|undefined} lineCap Line cap.
	   * @api
	   */
	  Stroke.prototype.setLineCap = function (lineCap) {
	    this.lineCap_ = lineCap;
	  };
	  /**
	   * Set the line dash.
	   *
	   * Please note that Internet Explorer 10 and lower [do not support][mdn] the
	   * `setLineDash` method on the `CanvasRenderingContext2D` and therefore this
	   * property will have no visual effect in these browsers.
	   *
	   * [mdn]: https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/setLineDash#Browser_compatibility
	   *
	   * @param {Array<number>} lineDash Line dash.
	   * @api
	   */
	  Stroke.prototype.setLineDash = function (lineDash) {
	    this.lineDash_ = lineDash;
	  };
	  /**
	   * Set the line dash offset.
	   *
	   * @param {number|undefined} lineDashOffset Line dash offset.
	   * @api
	   */
	  Stroke.prototype.setLineDashOffset = function (lineDashOffset) {
	    this.lineDashOffset_ = lineDashOffset;
	  };
	  /**
	   * Set the line join.
	   *
	   * @param {CanvasLineJoin|undefined} lineJoin Line join.
	   * @api
	   */
	  Stroke.prototype.setLineJoin = function (lineJoin) {
	    this.lineJoin_ = lineJoin;
	  };
	  /**
	   * Set the miter limit.
	   *
	   * @param {number|undefined} miterLimit Miter limit.
	   * @api
	   */
	  Stroke.prototype.setMiterLimit = function (miterLimit) {
	    this.miterLimit_ = miterLimit;
	  };
	  /**
	   * Set the width.
	   *
	   * @param {number|undefined} width Width.
	   * @api
	   */
	  Stroke.prototype.setWidth = function (width) {
	    this.width_ = width;
	  };
	  return Stroke;
	}();
	exports.default = Stroke;
	//# sourceMappingURL=Stroke.js.map

/***/ }),
/* 185 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	exports.getForProjection = getForProjection;
	exports.wrapX = wrapX;
	exports.createForExtent = createForExtent;
	exports.createXYZ = createXYZ;
	exports.createForProjection = createForProjection;
	exports.extentFromProjection = extentFromProjection;
	
	var _common = __webpack_require__(187);
	
	var _size = __webpack_require__(128);
	
	var _extent = __webpack_require__(4);
	
	var _Corner = __webpack_require__(266);
	
	var _Corner2 = _interopRequireDefault(_Corner);
	
	var _proj = __webpack_require__(16);
	
	var _Units = __webpack_require__(65);
	
	var _Units2 = _interopRequireDefault(_Units);
	
	var _TileGrid = __webpack_require__(186);
	
	var _TileGrid2 = _interopRequireDefault(_TileGrid);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	/**
	 * @param {import("./proj/Projection.js").default} projection Projection.
	 * @return {!TileGrid} Default tile grid for the
	 * passed projection.
	 */
	function getForProjection(projection) {
	    var tileGrid = projection.getDefaultTileGrid();
	    if (!tileGrid) {
	        tileGrid = createForProjection(projection);
	        projection.setDefaultTileGrid(tileGrid);
	    }
	    return tileGrid;
	}
	/**
	 * @param {TileGrid} tileGrid Tile grid.
	 * @param {import("./tilecoord.js").TileCoord} tileCoord Tile coordinate.
	 * @param {import("./proj/Projection.js").default} projection Projection.
	 * @return {import("./tilecoord.js").TileCoord} Tile coordinate.
	 */
	/**
	 * @module ol/tilegrid
	 */
	function wrapX(tileGrid, tileCoord, projection) {
	    var z = tileCoord[0];
	    var center = tileGrid.getTileCoordCenter(tileCoord);
	    var projectionExtent = extentFromProjection(projection);
	    if (!(0, _extent.containsCoordinate)(projectionExtent, center)) {
	        var worldWidth = (0, _extent.getWidth)(projectionExtent);
	        var worldsAway = Math.ceil((projectionExtent[0] - center[0]) / worldWidth);
	        center[0] += worldWidth * worldsAway;
	        return tileGrid.getTileCoordForCoordAndZ(center, z);
	    } else {
	        return tileCoord;
	    }
	}
	/**
	 * @param {import("./extent.js").Extent} extent Extent.
	 * @param {number=} opt_maxZoom Maximum zoom level (default is
	 *     DEFAULT_MAX_ZOOM).
	 * @param {number|import("./size.js").Size=} opt_tileSize Tile size (default uses
	 *     DEFAULT_TILE_SIZE).
	 * @param {Corner=} opt_corner Extent corner (default is `'top-left'`).
	 * @return {!TileGrid} TileGrid instance.
	 */
	function createForExtent(extent, opt_maxZoom, opt_tileSize, opt_corner) {
	    var corner = opt_corner !== undefined ? opt_corner : _Corner2.default.TOP_LEFT;
	    var resolutions = resolutionsFromExtent(extent, opt_maxZoom, opt_tileSize);
	    return new _TileGrid2.default({
	        extent: extent,
	        origin: (0, _extent.getCorner)(extent, corner),
	        resolutions: resolutions,
	        tileSize: opt_tileSize
	    });
	}
	/**
	 * @typedef {Object} XYZOptions
	 * @property {import("./extent.js").Extent} [extent] Extent for the tile grid. The origin for an XYZ tile grid is the
	 * top-left corner of the extent. The zero level of the grid is defined by the resolution at which one tile fits in the
	 * provided extent. If not provided, the extent of the EPSG:3857 projection is used.
	 * @property {number} [maxZoom] Maximum zoom. The default is `42`. This determines the number of levels
	 * in the grid set. For example, a `maxZoom` of 21 means there are 22 levels in the grid set.
	 * @property {number} [minZoom=0] Minimum zoom.
	 * @property {number|import("./size.js").Size} [tileSize=[256, 256]] Tile size in pixels.
	 */
	/**
	 * Creates a tile grid with a standard XYZ tiling scheme.
	 * @param {XYZOptions=} opt_options Tile grid options.
	 * @return {!TileGrid} Tile grid instance.
	 * @api
	 */
	function createXYZ(opt_options) {
	    var xyzOptions = opt_options || {};
	    var extent = xyzOptions.extent || (0, _proj.get)('EPSG:3857').getExtent();
	    var gridOptions = {
	        extent: extent,
	        minZoom: xyzOptions.minZoom,
	        tileSize: xyzOptions.tileSize,
	        resolutions: resolutionsFromExtent(extent, xyzOptions.maxZoom, xyzOptions.tileSize)
	    };
	    return new _TileGrid2.default(gridOptions);
	}
	/**
	 * Create a resolutions array from an extent.  A zoom factor of 2 is assumed.
	 * @param {import("./extent.js").Extent} extent Extent.
	 * @param {number=} opt_maxZoom Maximum zoom level (default is
	 *     DEFAULT_MAX_ZOOM).
	 * @param {number|import("./size.js").Size=} opt_tileSize Tile size (default uses
	 *     DEFAULT_TILE_SIZE).
	 * @return {!Array<number>} Resolutions array.
	 */
	function resolutionsFromExtent(extent, opt_maxZoom, opt_tileSize) {
	    var maxZoom = opt_maxZoom !== undefined ? opt_maxZoom : _common.DEFAULT_MAX_ZOOM;
	    var height = (0, _extent.getHeight)(extent);
	    var width = (0, _extent.getWidth)(extent);
	    var tileSize = (0, _size.toSize)(opt_tileSize !== undefined ? opt_tileSize : _common.DEFAULT_TILE_SIZE);
	    var maxResolution = Math.max(width / tileSize[0], height / tileSize[1]);
	    var length = maxZoom + 1;
	    var resolutions = new Array(length);
	    for (var z = 0; z < length; ++z) {
	        resolutions[z] = maxResolution / Math.pow(2, z);
	    }
	    return resolutions;
	}
	/**
	 * @param {import("./proj.js").ProjectionLike} projection Projection.
	 * @param {number=} opt_maxZoom Maximum zoom level (default is
	 *     DEFAULT_MAX_ZOOM).
	 * @param {number|import("./size.js").Size=} opt_tileSize Tile size (default uses
	 *     DEFAULT_TILE_SIZE).
	 * @param {Corner=} opt_corner Extent corner (default is `'top-left'`).
	 * @return {!TileGrid} TileGrid instance.
	 */
	function createForProjection(projection, opt_maxZoom, opt_tileSize, opt_corner) {
	    var extent = extentFromProjection(projection);
	    return createForExtent(extent, opt_maxZoom, opt_tileSize, opt_corner);
	}
	/**
	 * Generate a tile grid extent from a projection.  If the projection has an
	 * extent, it is used.  If not, a global extent is assumed.
	 * @param {import("./proj.js").ProjectionLike} projection Projection.
	 * @return {import("./extent.js").Extent} Extent.
	 */
	function extentFromProjection(projection) {
	    projection = (0, _proj.get)(projection);
	    var extent = projection.getExtent();
	    if (!extent) {
	        var half = 180 * _proj.METERS_PER_UNIT[_Units2.default.DEGREES] / projection.getMetersPerUnit();
	        extent = (0, _extent.createOrUpdate)(-half, -half, half, half);
	    }
	    return extent;
	}
	//# sourceMappingURL=tilegrid.js.map

/***/ }),
/* 186 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	
	var _common = __webpack_require__(187);
	
	var _asserts = __webpack_require__(29);
	
	var _TileRange = __webpack_require__(260);
	
	var _TileRange2 = _interopRequireDefault(_TileRange);
	
	var _array = __webpack_require__(18);
	
	var _extent = __webpack_require__(4);
	
	var _math = __webpack_require__(19);
	
	var _size = __webpack_require__(128);
	
	var _tilecoord = __webpack_require__(88);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	/**
	 * @private
	 * @type {import("../tilecoord.js").TileCoord}
	 */
	/**
	 * @module ol/tilegrid/TileGrid
	 */
	var tmpTileCoord = [0, 0, 0];
	/**
	 * @typedef {Object} Options
	 * @property {import("../extent.js").Extent} [extent] Extent for the tile grid. No tiles outside this
	 * extent will be requested by {@link module:ol/source/Tile} sources. When no `origin` or
	 * `origins` are configured, the `origin` will be set to the top-left corner of the extent.
	 * @property {number} [minZoom=0] Minimum zoom.
	 * @property {import("../coordinate.js").Coordinate} [origin] The tile grid origin, i.e. where the `x`
	 * and `y` axes meet (`[z, 0, 0]`). Tile coordinates increase left to right and upwards. If not
	 * specified, `extent` or `origins` must be provided.
	 * @property {Array<import("../coordinate.js").Coordinate>} [origins] Tile grid origins, i.e. where
	 * the `x` and `y` axes meet (`[z, 0, 0]`), for each zoom level. If given, the array length
	 * should match the length of the `resolutions` array, i.e. each resolution can have a different
	 * origin. Tile coordinates increase left to right and upwards. If not specified, `extent` or
	 * `origin` must be provided.
	 * @property {!Array<number>} resolutions Resolutions. The array index of each resolution needs
	 * to match the zoom level. This means that even if a `minZoom` is configured, the resolutions
	 * array will have a length of `maxZoom + 1`.
	 * @property {Array<import("../size.js").Size>} [sizes] Sizes.
	 * @property {number|import("../size.js").Size} [tileSize] Tile size.
	 * Default is `[256, 256]`.
	 * @property {Array<import("../size.js").Size>} [tileSizes] Tile sizes. If given, the array length
	 * should match the length of the `resolutions` array, i.e. each resolution can have a different
	 * tile size.
	 */
	/**
	 * @classdesc
	 * Base class for setting the grid pattern for sources accessing tiled-image
	 * servers.
	 * @api
	 */
	var TileGrid = /** @class */function () {
	    /**
	     * @param {Options} options Tile grid options.
	     */
	    function TileGrid(options) {
	        /**
	         * @protected
	         * @type {number}
	         */
	        this.minZoom = options.minZoom !== undefined ? options.minZoom : 0;
	        /**
	         * @private
	         * @type {!Array<number>}
	         */
	        this.resolutions_ = options.resolutions;
	        (0, _asserts.assert)((0, _array.isSorted)(this.resolutions_, function (a, b) {
	            return b - a;
	        }, true), 17); // `resolutions` must be sorted in descending order
	        // check if we've got a consistent zoom factor and origin
	        var zoomFactor;
	        if (!options.origins) {
	            for (var i = 0, ii = this.resolutions_.length - 1; i < ii; ++i) {
	                if (!zoomFactor) {
	                    zoomFactor = this.resolutions_[i] / this.resolutions_[i + 1];
	                } else {
	                    if (this.resolutions_[i] / this.resolutions_[i + 1] !== zoomFactor) {
	                        zoomFactor = undefined;
	                        break;
	                    }
	                }
	            }
	        }
	        /**
	         * @private
	         * @type {number|undefined}
	         */
	        this.zoomFactor_ = zoomFactor;
	        /**
	         * @protected
	         * @type {number}
	         */
	        this.maxZoom = this.resolutions_.length - 1;
	        /**
	         * @private
	         * @type {import("../coordinate.js").Coordinate}
	         */
	        this.origin_ = options.origin !== undefined ? options.origin : null;
	        /**
	         * @private
	         * @type {Array<import("../coordinate.js").Coordinate>}
	         */
	        this.origins_ = null;
	        if (options.origins !== undefined) {
	            this.origins_ = options.origins;
	            (0, _asserts.assert)(this.origins_.length == this.resolutions_.length, 20); // Number of `origins` and `resolutions` must be equal
	        }
	        var extent = options.extent;
	        if (extent !== undefined && !this.origin_ && !this.origins_) {
	            this.origin_ = (0, _extent.getTopLeft)(extent);
	        }
	        (0, _asserts.assert)(!this.origin_ && this.origins_ || this.origin_ && !this.origins_, 18); // Either `origin` or `origins` must be configured, never both
	        /**
	         * @private
	         * @type {Array<number|import("../size.js").Size>}
	         */
	        this.tileSizes_ = null;
	        if (options.tileSizes !== undefined) {
	            this.tileSizes_ = options.tileSizes;
	            (0, _asserts.assert)(this.tileSizes_.length == this.resolutions_.length, 19); // Number of `tileSizes` and `resolutions` must be equal
	        }
	        /**
	         * @private
	         * @type {number|import("../size.js").Size}
	         */
	        this.tileSize_ = options.tileSize !== undefined ? options.tileSize : !this.tileSizes_ ? _common.DEFAULT_TILE_SIZE : null;
	        (0, _asserts.assert)(!this.tileSize_ && this.tileSizes_ || this.tileSize_ && !this.tileSizes_, 22); // Either `tileSize` or `tileSizes` must be configured, never both
	        /**
	         * @private
	         * @type {import("../extent.js").Extent}
	         */
	        this.extent_ = extent !== undefined ? extent : null;
	        /**
	         * @private
	         * @type {Array<import("../TileRange.js").default>}
	         */
	        this.fullTileRanges_ = null;
	        /**
	         * @private
	         * @type {import("../size.js").Size}
	         */
	        this.tmpSize_ = [0, 0];
	        if (options.sizes !== undefined) {
	            this.fullTileRanges_ = options.sizes.map(function (size, z) {
	                var tileRange = new _TileRange2.default(Math.min(0, size[0]), Math.max(size[0] - 1, -1), Math.min(0, size[1]), Math.max(size[1] - 1, -1));
	                return tileRange;
	            }, this);
	        } else if (extent) {
	            this.calculateTileRanges_(extent);
	        }
	    }
	    /**
	     * Call a function with each tile coordinate for a given extent and zoom level.
	     *
	     * @param {import("../extent.js").Extent} extent Extent.
	     * @param {number} zoom Integer zoom level.
	     * @param {function(import("../tilecoord.js").TileCoord): void} callback Function called with each tile coordinate.
	     * @api
	     */
	    TileGrid.prototype.forEachTileCoord = function (extent, zoom, callback) {
	        var tileRange = this.getTileRangeForExtentAndZ(extent, zoom);
	        for (var i = tileRange.minX, ii = tileRange.maxX; i <= ii; ++i) {
	            for (var j = tileRange.minY, jj = tileRange.maxY; j <= jj; ++j) {
	                callback([zoom, i, j]);
	            }
	        }
	    };
	    /**
	     * @param {import("../tilecoord.js").TileCoord} tileCoord Tile coordinate.
	     * @param {function(number, import("../TileRange.js").default): boolean} callback Callback.
	     * @param {import("../TileRange.js").default=} opt_tileRange Temporary import("../TileRange.js").default object.
	     * @param {import("../extent.js").Extent=} opt_extent Temporary import("../extent.js").Extent object.
	     * @return {boolean} Callback succeeded.
	     */
	    TileGrid.prototype.forEachTileCoordParentTileRange = function (tileCoord, callback, opt_tileRange, opt_extent) {
	        var tileRange, x, y;
	        var tileCoordExtent = null;
	        var z = tileCoord[0] - 1;
	        if (this.zoomFactor_ === 2) {
	            x = tileCoord[1];
	            y = tileCoord[2];
	        } else {
	            tileCoordExtent = this.getTileCoordExtent(tileCoord, opt_extent);
	        }
	        while (z >= this.minZoom) {
	            if (this.zoomFactor_ === 2) {
	                x = Math.floor(x / 2);
	                y = Math.floor(y / 2);
	                tileRange = (0, _TileRange.createOrUpdate)(x, x, y, y, opt_tileRange);
	            } else {
	                tileRange = this.getTileRangeForExtentAndZ(tileCoordExtent, z, opt_tileRange);
	            }
	            if (callback(z, tileRange)) {
	                return true;
	            }
	            --z;
	        }
	        return false;
	    };
	    /**
	     * Get the extent for this tile grid, if it was configured.
	     * @return {import("../extent.js").Extent} Extent.
	     * @api
	     */
	    TileGrid.prototype.getExtent = function () {
	        return this.extent_;
	    };
	    /**
	     * Get the maximum zoom level for the grid.
	     * @return {number} Max zoom.
	     * @api
	     */
	    TileGrid.prototype.getMaxZoom = function () {
	        return this.maxZoom;
	    };
	    /**
	     * Get the minimum zoom level for the grid.
	     * @return {number} Min zoom.
	     * @api
	     */
	    TileGrid.prototype.getMinZoom = function () {
	        return this.minZoom;
	    };
	    /**
	     * Get the origin for the grid at the given zoom level.
	     * @param {number} z Integer zoom level.
	     * @return {import("../coordinate.js").Coordinate} Origin.
	     * @api
	     */
	    TileGrid.prototype.getOrigin = function (z) {
	        if (this.origin_) {
	            return this.origin_;
	        } else {
	            return this.origins_[z];
	        }
	    };
	    /**
	     * Get the resolution for the given zoom level.
	     * @param {number} z Integer zoom level.
	     * @return {number} Resolution.
	     * @api
	     */
	    TileGrid.prototype.getResolution = function (z) {
	        return this.resolutions_[z];
	    };
	    /**
	     * Get the list of resolutions for the tile grid.
	     * @return {Array<number>} Resolutions.
	     * @api
	     */
	    TileGrid.prototype.getResolutions = function () {
	        return this.resolutions_;
	    };
	    /**
	     * @param {import("../tilecoord.js").TileCoord} tileCoord Tile coordinate.
	     * @param {import("../TileRange.js").default=} opt_tileRange Temporary import("../TileRange.js").default object.
	     * @param {import("../extent.js").Extent=} opt_extent Temporary import("../extent.js").Extent object.
	     * @return {import("../TileRange.js").default} Tile range.
	     */
	    TileGrid.prototype.getTileCoordChildTileRange = function (tileCoord, opt_tileRange, opt_extent) {
	        if (tileCoord[0] < this.maxZoom) {
	            if (this.zoomFactor_ === 2) {
	                var minX = tileCoord[1] * 2;
	                var minY = tileCoord[2] * 2;
	                return (0, _TileRange.createOrUpdate)(minX, minX + 1, minY, minY + 1, opt_tileRange);
	            }
	            var tileCoordExtent = this.getTileCoordExtent(tileCoord, opt_extent);
	            return this.getTileRangeForExtentAndZ(tileCoordExtent, tileCoord[0] + 1, opt_tileRange);
	        }
	        return null;
	    };
	    /**
	     * Get the extent for a tile range.
	     * @param {number} z Integer zoom level.
	     * @param {import("../TileRange.js").default} tileRange Tile range.
	     * @param {import("../extent.js").Extent=} opt_extent Temporary import("../extent.js").Extent object.
	     * @return {import("../extent.js").Extent} Extent.
	     */
	    TileGrid.prototype.getTileRangeExtent = function (z, tileRange, opt_extent) {
	        var origin = this.getOrigin(z);
	        var resolution = this.getResolution(z);
	        var tileSize = (0, _size.toSize)(this.getTileSize(z), this.tmpSize_);
	        var minX = origin[0] + tileRange.minX * tileSize[0] * resolution;
	        var maxX = origin[0] + (tileRange.maxX + 1) * tileSize[0] * resolution;
	        var minY = origin[1] + tileRange.minY * tileSize[1] * resolution;
	        var maxY = origin[1] + (tileRange.maxY + 1) * tileSize[1] * resolution;
	        return (0, _extent.createOrUpdate)(minX, minY, maxX, maxY, opt_extent);
	    };
	    /**
	     * Get a tile range for the given extent and integer zoom level.
	     * @param {import("../extent.js").Extent} extent Extent.
	     * @param {number} z Integer zoom level.
	     * @param {import("../TileRange.js").default=} opt_tileRange Temporary tile range object.
	     * @return {import("../TileRange.js").default} Tile range.
	     */
	    TileGrid.prototype.getTileRangeForExtentAndZ = function (extent, z, opt_tileRange) {
	        var tileCoord = tmpTileCoord;
	        this.getTileCoordForXYAndZ_(extent[0], extent[3], z, false, tileCoord);
	        var minX = tileCoord[1];
	        var minY = tileCoord[2];
	        this.getTileCoordForXYAndZ_(extent[2], extent[1], z, true, tileCoord);
	        return (0, _TileRange.createOrUpdate)(minX, tileCoord[1], minY, tileCoord[2], opt_tileRange);
	    };
	    /**
	     * @param {import("../tilecoord.js").TileCoord} tileCoord Tile coordinate.
	     * @return {import("../coordinate.js").Coordinate} Tile center.
	     */
	    TileGrid.prototype.getTileCoordCenter = function (tileCoord) {
	        var origin = this.getOrigin(tileCoord[0]);
	        var resolution = this.getResolution(tileCoord[0]);
	        var tileSize = (0, _size.toSize)(this.getTileSize(tileCoord[0]), this.tmpSize_);
	        return [origin[0] + (tileCoord[1] + 0.5) * tileSize[0] * resolution, origin[1] - (tileCoord[2] + 0.5) * tileSize[1] * resolution];
	    };
	    /**
	     * Get the extent of a tile coordinate.
	     *
	     * @param {import("../tilecoord.js").TileCoord} tileCoord Tile coordinate.
	     * @param {import("../extent.js").Extent=} opt_extent Temporary extent object.
	     * @return {import("../extent.js").Extent} Extent.
	     * @api
	     */
	    TileGrid.prototype.getTileCoordExtent = function (tileCoord, opt_extent) {
	        var origin = this.getOrigin(tileCoord[0]);
	        var resolution = this.getResolution(tileCoord[0]);
	        var tileSize = (0, _size.toSize)(this.getTileSize(tileCoord[0]), this.tmpSize_);
	        var minX = origin[0] + tileCoord[1] * tileSize[0] * resolution;
	        var minY = origin[1] - (tileCoord[2] + 1) * tileSize[1] * resolution;
	        var maxX = minX + tileSize[0] * resolution;
	        var maxY = minY + tileSize[1] * resolution;
	        return (0, _extent.createOrUpdate)(minX, minY, maxX, maxY, opt_extent);
	    };
	    /**
	     * Get the tile coordinate for the given map coordinate and resolution.  This
	     * method considers that coordinates that intersect tile boundaries should be
	     * assigned the higher tile coordinate.
	     *
	     * @param {import("../coordinate.js").Coordinate} coordinate Coordinate.
	     * @param {number} resolution Resolution.
	     * @param {import("../tilecoord.js").TileCoord=} opt_tileCoord Destination import("../tilecoord.js").TileCoord object.
	     * @return {import("../tilecoord.js").TileCoord} Tile coordinate.
	     * @api
	     */
	    TileGrid.prototype.getTileCoordForCoordAndResolution = function (coordinate, resolution, opt_tileCoord) {
	        return this.getTileCoordForXYAndResolution_(coordinate[0], coordinate[1], resolution, false, opt_tileCoord);
	    };
	    /**
	     * Note that this method should not be called for resolutions that correspond
	     * to an integer zoom level.  Instead call the `getTileCoordForXYAndZ_` method.
	     * @param {number} x X.
	     * @param {number} y Y.
	     * @param {number} resolution Resolution (for a non-integer zoom level).
	     * @param {boolean} reverseIntersectionPolicy Instead of letting edge
	     *     intersections go to the higher tile coordinate, let edge intersections
	     *     go to the lower tile coordinate.
	     * @param {import("../tilecoord.js").TileCoord=} opt_tileCoord Temporary import("../tilecoord.js").TileCoord object.
	     * @return {import("../tilecoord.js").TileCoord} Tile coordinate.
	     * @private
	     */
	    TileGrid.prototype.getTileCoordForXYAndResolution_ = function (x, y, resolution, reverseIntersectionPolicy, opt_tileCoord) {
	        var z = this.getZForResolution(resolution);
	        var scale = resolution / this.getResolution(z);
	        var origin = this.getOrigin(z);
	        var tileSize = (0, _size.toSize)(this.getTileSize(z), this.tmpSize_);
	        var adjustX = reverseIntersectionPolicy ? 0.5 : 0;
	        var adjustY = reverseIntersectionPolicy ? 0.5 : 0;
	        var xFromOrigin = Math.floor((x - origin[0]) / resolution + adjustX);
	        var yFromOrigin = Math.floor((origin[1] - y) / resolution + adjustY);
	        var tileCoordX = scale * xFromOrigin / tileSize[0];
	        var tileCoordY = scale * yFromOrigin / tileSize[1];
	        if (reverseIntersectionPolicy) {
	            tileCoordX = Math.ceil(tileCoordX) - 1;
	            tileCoordY = Math.ceil(tileCoordY) - 1;
	        } else {
	            tileCoordX = Math.floor(tileCoordX);
	            tileCoordY = Math.floor(tileCoordY);
	        }
	        return (0, _tilecoord.createOrUpdate)(z, tileCoordX, tileCoordY, opt_tileCoord);
	    };
	    /**
	     * Although there is repetition between this method and `getTileCoordForXYAndResolution_`,
	     * they should have separate implementations.  This method is for integer zoom
	     * levels.  The other method should only be called for resolutions corresponding
	     * to non-integer zoom levels.
	     * @param {number} x Map x coordinate.
	     * @param {number} y Map y coordinate.
	     * @param {number} z Integer zoom level.
	     * @param {boolean} reverseIntersectionPolicy Instead of letting edge
	     *     intersections go to the higher tile coordinate, let edge intersections
	     *     go to the lower tile coordinate.
	     * @param {import("../tilecoord.js").TileCoord=} opt_tileCoord Temporary import("../tilecoord.js").TileCoord object.
	     * @return {import("../tilecoord.js").TileCoord} Tile coordinate.
	     * @private
	     */
	    TileGrid.prototype.getTileCoordForXYAndZ_ = function (x, y, z, reverseIntersectionPolicy, opt_tileCoord) {
	        var origin = this.getOrigin(z);
	        var resolution = this.getResolution(z);
	        var tileSize = (0, _size.toSize)(this.getTileSize(z), this.tmpSize_);
	        var adjustX = reverseIntersectionPolicy ? 0.5 : 0;
	        var adjustY = reverseIntersectionPolicy ? 0.5 : 0;
	        var xFromOrigin = Math.floor((x - origin[0]) / resolution + adjustX);
	        var yFromOrigin = Math.floor((origin[1] - y) / resolution + adjustY);
	        var tileCoordX = xFromOrigin / tileSize[0];
	        var tileCoordY = yFromOrigin / tileSize[1];
	        if (reverseIntersectionPolicy) {
	            tileCoordX = Math.ceil(tileCoordX) - 1;
	            tileCoordY = Math.ceil(tileCoordY) - 1;
	        } else {
	            tileCoordX = Math.floor(tileCoordX);
	            tileCoordY = Math.floor(tileCoordY);
	        }
	        return (0, _tilecoord.createOrUpdate)(z, tileCoordX, tileCoordY, opt_tileCoord);
	    };
	    /**
	     * Get a tile coordinate given a map coordinate and zoom level.
	     * @param {import("../coordinate.js").Coordinate} coordinate Coordinate.
	     * @param {number} z Zoom level.
	     * @param {import("../tilecoord.js").TileCoord=} opt_tileCoord Destination import("../tilecoord.js").TileCoord object.
	     * @return {import("../tilecoord.js").TileCoord} Tile coordinate.
	     * @api
	     */
	    TileGrid.prototype.getTileCoordForCoordAndZ = function (coordinate, z, opt_tileCoord) {
	        return this.getTileCoordForXYAndZ_(coordinate[0], coordinate[1], z, false, opt_tileCoord);
	    };
	    /**
	     * @param {import("../tilecoord.js").TileCoord} tileCoord Tile coordinate.
	     * @return {number} Tile resolution.
	     */
	    TileGrid.prototype.getTileCoordResolution = function (tileCoord) {
	        return this.resolutions_[tileCoord[0]];
	    };
	    /**
	     * Get the tile size for a zoom level. The type of the return value matches the
	     * `tileSize` or `tileSizes` that the tile grid was configured with. To always
	     * get an `import("../size.js").Size`, run the result through `import("../size.js").Size.toSize()`.
	     * @param {number} z Z.
	     * @return {number|import("../size.js").Size} Tile size.
	     * @api
	     */
	    TileGrid.prototype.getTileSize = function (z) {
	        if (this.tileSize_) {
	            return this.tileSize_;
	        } else {
	            return this.tileSizes_[z];
	        }
	    };
	    /**
	     * @param {number} z Zoom level.
	     * @return {import("../TileRange.js").default} Extent tile range for the specified zoom level.
	     */
	    TileGrid.prototype.getFullTileRange = function (z) {
	        if (!this.fullTileRanges_) {
	            return null;
	        } else {
	            return this.fullTileRanges_[z];
	        }
	    };
	    /**
	     * @param {number} resolution Resolution.
	     * @param {number=} opt_direction If 0, the nearest resolution will be used.
	     *     If 1, the nearest lower resolution will be used. If -1, the nearest
	     *     higher resolution will be used. Default is 0.
	     * @return {number} Z.
	     * @api
	     */
	    TileGrid.prototype.getZForResolution = function (resolution, opt_direction) {
	        var z = (0, _array.linearFindNearest)(this.resolutions_, resolution, opt_direction || 0);
	        return (0, _math.clamp)(z, this.minZoom, this.maxZoom);
	    };
	    /**
	     * @param {!import("../extent.js").Extent} extent Extent for this tile grid.
	     * @private
	     */
	    TileGrid.prototype.calculateTileRanges_ = function (extent) {
	        var length = this.resolutions_.length;
	        var fullTileRanges = new Array(length);
	        for (var z = this.minZoom; z < length; ++z) {
	            fullTileRanges[z] = this.getTileRangeForExtentAndZ(extent, z);
	        }
	        this.fullTileRanges_ = fullTileRanges;
	    };
	    return TileGrid;
	}();
	exports.default = TileGrid;
	//# sourceMappingURL=TileGrid.js.map

/***/ }),
/* 187 */
/***/ (function(module, exports) {

	"use strict";
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	/**
	 * @module ol/tilegrid/common
	 */
	/**
	 * Default maximum zoom for default tile grids.
	 * @type {number}
	 */
	var DEFAULT_MAX_ZOOM = exports.DEFAULT_MAX_ZOOM = 42;
	/**
	 * Default tile size.
	 * @type {number}
	 */
	var DEFAULT_TILE_SIZE = exports.DEFAULT_TILE_SIZE = 256;
	//# sourceMappingURL=common.js.map

/***/ }),
/* 188 */
/***/ (function(module, exports) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	exports.appendParams = appendParams;
	/**
	 * @module ol/uri
	 */
	/**
	 * Appends query parameters to a URI.
	 *
	 * @param {string} uri The original URI, which may already have query data.
	 * @param {!Object} params An object where keys are URI-encoded parameter keys,
	 *     and the values are arbitrary types or arrays.
	 * @return {string} The new URI.
	 */
	function appendParams(uri, params) {
	    var keyParams = [];
	    // Skip any null or undefined parameter values
	    Object.keys(params).forEach(function (k) {
	        if (params[k] !== null && params[k] !== undefined) {
	            keyParams.push(k + '=' + encodeURIComponent(params[k]));
	        }
	    });
	    var qs = keyParams.join('&');
	    // remove any trailing ? or &
	    uri = uri.replace(/[?&]$/, '');
	    // append ? or & depending on whether uri has existing parameters
	    uri = uri.indexOf('?') === -1 ? uri + '?' : uri + '&';
	    return uri + qs;
	}
	//# sourceMappingURL=uri.js.map

/***/ }),
/* 189 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	exports.getSupportedTypes = getSupportedTypes;
	exports.getFormat = getFormat;
	exports.registerFormat = registerFormat;
	
	var _atom = __webpack_require__(659);
	
	var _rss = __webpack_require__(661);
	
	var _geojson = __webpack_require__(660);
	
	var _suggestionsJson = __webpack_require__(662);
	
	/**
	 * @module opensearch/formats
	 */
	
	/**
	 * The interface built-in and custom format parsers must conform to.
	 * @interface module:opensearch/formats.FormatInterface
	 */
	
	/**
	 * Main parsing function for the format.
	 * @function
	 * @name module:opensearch/formats.FormatInterface#parse
	 * @param {string} text The text (or binary string) response to parse.
	 * @returns {module:opensearch/formats.SearchResult} The parsed search result
	 */
	
	/**
	 * @typedef module:opensearch/formats.Record
	 * @type Object
	 * @property {string} id The id of the record
	 * @property {object} properties The parsed properties of the record
	 * @property {object} [geometry] The parsed record geometry
	 * @property {float[]} [bbox] The parsed record geometry
	 */
	
	/**
	 * @typedef module:opensearch/formats.SearchResult
	 * @type Object
	 * @property {int} [totalResults] The total amount of matched records
	 * @property {int} [startIndex] The start index of this response
	 * @property {int} [itemsPerPage] The number of items per page of results
	 * @property {object} [query] The query of this result
	 * @property {object[]} [links] Relevant links of this result
	 * @property {module:opensearch/formats.Record[]} records The parsed records
	 */
	
	/**
	 * @typedef module:opensearch/formats.Suggestion
	 * @type Object
	 * @property {string} completion The completion value
	 * @property {string} [description] A description of the completion
	 * @property {string} [url] The search URL for that completion
	 */
	
	var formatRegistry = {};
	
	/**
	 * Function to return the mime-types that are supported by the currently
	 * registered formats.
	 * @returns {string[]} The supported format mime-types.
	 */
	function getSupportedTypes() {
	  return Object.keys(formatRegistry);
	}
	
	/**
	 * Gets the registered format for the given mime-type
	 * @param {string} type The mime-type for the format.
	 * @returns {object|null} The format object for the given format type or null,
	 *                        if no format was registered for that type.
	 */
	function getFormat(type) {
	  return formatRegistry[type];
	}
	
	/**
	 * Register a format parser for a given mime-type.
	 * @param {string} type The mime-type for the format.
	 * @param {object} format The format parser. Shall have a 'parse' method.
	 */
	function registerFormat(type, format) {
	  formatRegistry[type] = format;
	}
	
	registerFormat('application/atom+xml', new _atom.AtomFormat());
	registerFormat('application/rss+xml', new _rss.RSSFormat());
	registerFormat('application/json', new _geojson.GeoJSONFormat());
	registerFormat('application/vnd.geo+json', new _geojson.GeoJSONFormat());
	registerFormat('application/x-suggestions+json', new _suggestionsJson.SuggestionsJSONFormat());

/***/ }),
/* 190 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	
	var _i18next = __webpack_require__(245);
	
	var _i18next2 = _interopRequireDefault(_i18next);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	exports.default = _i18next2.default;

/***/ }),
/* 191 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	
	var _backbone = __webpack_require__(11);
	
	var _backbone2 = _interopRequireDefault(_backbone);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var BaseExtraParameterView = _backbone2.default.ItemView.extend({
	  templateHelpers: function templateHelpers() {
	    var name = this.model.get('name');
	    if (!name) {
	      var type = this.model.get('type');
	      name = type; // TODO
	    }
	
	    var result = name.replace(/([A-Z])/g, ' $1');
	    return {
	      displayName: result.charAt(0).toUpperCase() + result.slice(1)
	    };
	  },
	
	
	  className: 'row extra-parameter',
	
	  onRender: function onRender() {
	    this.$('[data-toggle="tooltip"]').tooltip();
	  }
	});
	
	exports.default = BaseExtraParameterView;

/***/ }),
/* 192 */
/***/ (function(module, exports, __webpack_require__) {

	var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! =======================================================
	                      VERSION  9.10.0              
	========================================================= */
	"use strict";
	
	var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
	
	/*! =========================================================
	 * bootstrap-slider.js
	 *
	 * Maintainers:
	 *		Kyle Kemp
	 *			- Twitter: @seiyria
	 *			- Github:  seiyria
	 *		Rohit Kalkur
	 *			- Twitter: @Rovolutionary
	 *			- Github:  rovolution
	 *
	 * =========================================================
	 *
	 * bootstrap-slider is released under the MIT License
	 * Copyright (c) 2017 Kyle Kemp, Rohit Kalkur, and 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.
	 *
	 * ========================================================= */
	
	/**
	 * Bridget makes jQuery widgets
	 * v1.0.1
	 * MIT license
	 */
	var windowIsDefined = (typeof window === "undefined" ? "undefined" : _typeof(window)) === "object";
	
	(function (factory) {
		if (true) {
			!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(12)], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
		} else if ((typeof module === "undefined" ? "undefined" : _typeof(module)) === "object" && module.exports) {
			var jQuery;
			try {
				jQuery = require("jquery");
			} catch (err) {
				jQuery = null;
			}
			module.exports = factory(jQuery);
		} else if (window) {
			window.Slider = factory(window.jQuery);
		}
	})(function ($) {
		// Constants
		var NAMESPACE_MAIN = 'slider';
		var NAMESPACE_ALTERNATE = 'bootstrapSlider';
	
		// Polyfill console methods
		if (windowIsDefined && !window.console) {
			window.console = {};
		}
		if (windowIsDefined && !window.console.log) {
			window.console.log = function () {};
		}
		if (windowIsDefined && !window.console.warn) {
			window.console.warn = function () {};
		}
	
		// Reference to Slider constructor
		var Slider;
	
		(function ($) {
	
			'use strict';
	
			// -------------------------- utils -------------------------- //
	
			var slice = Array.prototype.slice;
	
			function noop() {}
	
			// -------------------------- definition -------------------------- //
	
			function defineBridget($) {
	
				// bail if no jQuery
				if (!$) {
					return;
				}
	
				// -------------------------- addOptionMethod -------------------------- //
	
				/**
	    * adds option method -> $().plugin('option', {...})
	    * @param {Function} PluginClass - constructor class
	    */
				function addOptionMethod(PluginClass) {
					// don't overwrite original option method
					if (PluginClass.prototype.option) {
						return;
					}
	
					// option setter
					PluginClass.prototype.option = function (opts) {
						// bail out if not an object
						if (!$.isPlainObject(opts)) {
							return;
						}
						this.options = $.extend(true, this.options, opts);
					};
				}
	
				// -------------------------- plugin bridge -------------------------- //
	
				// helper function for logging errors
				// $.error breaks jQuery chaining
				var logError = typeof console === 'undefined' ? noop : function (message) {
					console.error(message);
				};
	
				/**
	    * jQuery plugin bridge, access methods like $elem.plugin('method')
	    * @param {String} namespace - plugin name
	    * @param {Function} PluginClass - constructor class
	    */
				function bridge(namespace, PluginClass) {
					// add to jQuery fn namespace
					$.fn[namespace] = function (options) {
						if (typeof options === 'string') {
							// call plugin method when first argument is a string
							// get arguments for method
							var args = slice.call(arguments, 1);
	
							for (var i = 0, len = this.length; i < len; i++) {
								var elem = this[i];
								var instance = $.data(elem, namespace);
								if (!instance) {
									logError("cannot call methods on " + namespace + " prior to initialization; " + "attempted to call '" + options + "'");
									continue;
								}
								if (!$.isFunction(instance[options]) || options.charAt(0) === '_') {
									logError("no such method '" + options + "' for " + namespace + " instance");
									continue;
								}
	
								// trigger method with arguments
								var returnValue = instance[options].apply(instance, args);
	
								// break look and return first value if provided
								if (returnValue !== undefined && returnValue !== instance) {
									return returnValue;
								}
							}
							// return this if no return value
							return this;
						} else {
							var objects = this.map(function () {
								var instance = $.data(this, namespace);
								if (instance) {
									// apply options & init
									instance.option(options);
									instance._init();
								} else {
									// initialize new instance
									instance = new PluginClass(this, options);
									$.data(this, namespace, instance);
								}
								return $(this);
							});
	
							if (!objects || objects.length > 1) {
								return objects;
							} else {
								return objects[0];
							}
						}
					};
				}
	
				// -------------------------- bridget -------------------------- //
	
				/**
	    * converts a Prototypical class into a proper jQuery plugin
	    *   the class must have a ._init method
	    * @param {String} namespace - plugin name, used in $().pluginName
	    * @param {Function} PluginClass - constructor class
	    */
				$.bridget = function (namespace, PluginClass) {
					addOptionMethod(PluginClass);
					bridge(namespace, PluginClass);
				};
	
				return $.bridget;
			}
	
			// get jquery from browser global
			defineBridget($);
		})($);
	
		/*************************************************
	 			BOOTSTRAP-SLIDER SOURCE CODE
	 	**************************************************/
	
		(function ($) {
	
			var ErrorMsgs = {
				formatInvalidInputErrorMsg: function formatInvalidInputErrorMsg(input) {
					return "Invalid input value '" + input + "' passed in";
				},
				callingContextNotSliderInstance: "Calling context element does not have instance of Slider bound to it. Check your code to make sure the JQuery object returned from the call to the slider() initializer is calling the method"
			};
	
			var SliderScale = {
				linear: {
					toValue: function toValue(percentage) {
						var rawValue = percentage / 100 * (this.options.max - this.options.min);
						var shouldAdjustWithBase = true;
						if (this.options.ticks_positions.length > 0) {
							var minv,
							    maxv,
							    minp,
							    maxp = 0;
							for (var i = 1; i < this.options.ticks_positions.length; i++) {
								if (percentage <= this.options.ticks_positions[i]) {
									minv = this.options.ticks[i - 1];
									minp = this.options.ticks_positions[i - 1];
									maxv = this.options.ticks[i];
									maxp = this.options.ticks_positions[i];
	
									break;
								}
							}
							var partialPercentage = (percentage - minp) / (maxp - minp);
							rawValue = minv + partialPercentage * (maxv - minv);
							shouldAdjustWithBase = false;
						}
	
						var adjustment = shouldAdjustWithBase ? this.options.min : 0;
						var value = adjustment + Math.round(rawValue / this.options.step) * this.options.step;
						if (value < this.options.min) {
							return this.options.min;
						} else if (value > this.options.max) {
							return this.options.max;
						} else {
							return value;
						}
					},
					toPercentage: function toPercentage(value) {
						if (this.options.max === this.options.min) {
							return 0;
						}
	
						if (this.options.ticks_positions.length > 0) {
							var minv,
							    maxv,
							    minp,
							    maxp = 0;
							for (var i = 0; i < this.options.ticks.length; i++) {
								if (value <= this.options.ticks[i]) {
									minv = i > 0 ? this.options.ticks[i - 1] : 0;
									minp = i > 0 ? this.options.ticks_positions[i - 1] : 0;
									maxv = this.options.ticks[i];
									maxp = this.options.ticks_positions[i];
	
									break;
								}
							}
							if (i > 0) {
								var partialPercentage = (value - minv) / (maxv - minv);
								return minp + partialPercentage * (maxp - minp);
							}
						}
	
						return 100 * (value - this.options.min) / (this.options.max - this.options.min);
					}
				},
	
				logarithmic: {
					/* Based on http://stackoverflow.com/questions/846221/logarithmic-slider */
					toValue: function toValue(percentage) {
						var min = this.options.min === 0 ? 0 : Math.log(this.options.min);
						var max = Math.log(this.options.max);
						var value = Math.exp(min + (max - min) * percentage / 100);
						if (Math.round(value) === this.options.max) {
							return this.options.max;
						}
						value = this.options.min + Math.round((value - this.options.min) / this.options.step) * this.options.step;
						/* Rounding to the nearest step could exceed the min or
	      * max, so clip to those values. */
						if (value < this.options.min) {
							return this.options.min;
						} else if (value > this.options.max) {
							return this.options.max;
						} else {
							return value;
						}
					},
					toPercentage: function toPercentage(value) {
						if (this.options.max === this.options.min) {
							return 0;
						} else {
							var max = Math.log(this.options.max);
							var min = this.options.min === 0 ? 0 : Math.log(this.options.min);
							var v = value === 0 ? 0 : Math.log(value);
							return 100 * (v - min) / (max - min);
						}
					}
				}
			};
	
			/*************************************************
	  						CONSTRUCTOR
	  	**************************************************/
			Slider = function Slider(element, options) {
				createNewSlider.call(this, element, options);
				return this;
			};
	
			function createNewSlider(element, options) {
	
				/*
	   	The internal state object is used to store data about the current 'state' of slider.
	   	This includes values such as the `value`, `enabled`, etc...
	   */
				this._state = {
					value: null,
					enabled: null,
					offset: null,
					size: null,
					percentage: null,
					inDrag: false,
					over: false
				};
	
				// The objects used to store the reference to the tick methods if ticks_tooltip is on
				this.ticksCallbackMap = {};
				this.handleCallbackMap = {};
	
				if (typeof element === "string") {
					this.element = document.querySelector(element);
				} else if (element instanceof HTMLElement) {
					this.element = element;
				}
	
				/*************************************************
	   					Process Options
	   	**************************************************/
				options = options ? options : {};
				var optionTypes = Object.keys(this.defaultOptions);
	
				for (var i = 0; i < optionTypes.length; i++) {
					var optName = optionTypes[i];
	
					// First check if an option was passed in via the constructor
					var val = options[optName];
					// If no data attrib, then check data atrributes
					val = typeof val !== 'undefined' ? val : getDataAttrib(this.element, optName);
					// Finally, if nothing was specified, use the defaults
					val = val !== null ? val : this.defaultOptions[optName];
	
					// Set all options on the instance of the Slider
					if (!this.options) {
						this.options = {};
					}
					this.options[optName] = val;
				}
	
				// Check options.rtl
				if (this.options.rtl === 'auto') {
					this.options.rtl = window.getComputedStyle(this.element).direction === 'rtl';
				}
	
				/*
	   	Validate `tooltip_position` against 'orientation`
	   	- if `tooltip_position` is incompatible with orientation, swith it to a default compatible with specified `orientation`
	   		-- default for "vertical" -> "right", "left" if rtl
	   		-- default for "horizontal" -> "top"
	   */
				if (this.options.orientation === "vertical" && (this.options.tooltip_position === "top" || this.options.tooltip_position === "bottom")) {
					if (this.options.rtl) {
						this.options.tooltip_position = "left";
					} else {
						this.options.tooltip_position = "right";
					}
				} else if (this.options.orientation === "horizontal" && (this.options.tooltip_position === "left" || this.options.tooltip_position === "right")) {
	
					this.options.tooltip_position = "top";
				}
	
				function getDataAttrib(element, optName) {
					var dataName = "data-slider-" + optName.replace(/_/g, '-');
					var dataValString = element.getAttribute(dataName);
	
					try {
						return JSON.parse(dataValString);
					} catch (err) {
						return dataValString;
					}
				}
	
				/*************************************************
	   					Create Markup
	   	**************************************************/
	
				var origWidth = this.element.style.width;
				var updateSlider = false;
				var parent = this.element.parentNode;
				var sliderTrackSelection;
				var sliderTrackLow, sliderTrackHigh;
				var sliderMinHandle;
				var sliderMaxHandle;
	
				if (this.sliderElem) {
					updateSlider = true;
				} else {
					/* Create elements needed for slider */
					this.sliderElem = document.createElement("div");
					this.sliderElem.className = "slider";
	
					/* Create slider track elements */
					var sliderTrack = document.createElement("div");
					sliderTrack.className = "slider-track";
	
					sliderTrackLow = document.createElement("div");
					sliderTrackLow.className = "slider-track-low";
	
					sliderTrackSelection = document.createElement("div");
					sliderTrackSelection.className = "slider-selection";
	
					sliderTrackHigh = document.createElement("div");
					sliderTrackHigh.className = "slider-track-high";
	
					sliderMinHandle = document.createElement("div");
					sliderMinHandle.className = "slider-handle min-slider-handle";
					sliderMinHandle.setAttribute('role', 'slider');
					sliderMinHandle.setAttribute('aria-valuemin', this.options.min);
					sliderMinHandle.setAttribute('aria-valuemax', this.options.max);
	
					sliderMaxHandle = document.createElement("div");
					sliderMaxHandle.className = "slider-handle max-slider-handle";
					sliderMaxHandle.setAttribute('role', 'slider');
					sliderMaxHandle.setAttribute('aria-valuemin', this.options.min);
					sliderMaxHandle.setAttribute('aria-valuemax', this.options.max);
	
					sliderTrack.appendChild(sliderTrackLow);
					sliderTrack.appendChild(sliderTrackSelection);
					sliderTrack.appendChild(sliderTrackHigh);
	
					/* Create highlight range elements */
					this.rangeHighlightElements = [];
					var rangeHighlightsOpts = this.options.rangeHighlights;
					if (Array.isArray(rangeHighlightsOpts) && rangeHighlightsOpts.length > 0) {
						for (var j = 0; j < rangeHighlightsOpts.length; j++) {
							var rangeHighlightElement = document.createElement("div");
							var customClassString = rangeHighlightsOpts[j].class || "";
							rangeHighlightElement.className = "slider-rangeHighlight slider-selection " + customClassString;
							this.rangeHighlightElements.push(rangeHighlightElement);
							sliderTrack.appendChild(rangeHighlightElement);
						}
					}
	
					/* Add aria-labelledby to handle's */
					var isLabelledbyArray = Array.isArray(this.options.labelledby);
					if (isLabelledbyArray && this.options.labelledby[0]) {
						sliderMinHandle.setAttribute('aria-labelledby', this.options.labelledby[0]);
					}
					if (isLabelledbyArray && this.options.labelledby[1]) {
						sliderMaxHandle.setAttribute('aria-labelledby', this.options.labelledby[1]);
					}
					if (!isLabelledbyArray && this.options.labelledby) {
						sliderMinHandle.setAttribute('aria-labelledby', this.options.labelledby);
						sliderMaxHandle.setAttribute('aria-labelledby', this.options.labelledby);
					}
	
					/* Create ticks */
					this.ticks = [];
					if (Array.isArray(this.options.ticks) && this.options.ticks.length > 0) {
						this.ticksContainer = document.createElement('div');
						this.ticksContainer.className = 'slider-tick-container';
	
						for (i = 0; i < this.options.ticks.length; i++) {
							var tick = document.createElement('div');
							tick.className = 'slider-tick';
							if (this.options.ticks_tooltip) {
								var tickListenerReference = this._addTickListener();
								var enterCallback = tickListenerReference.addMouseEnter(this, tick, i);
								var leaveCallback = tickListenerReference.addMouseLeave(this, tick);
	
								this.ticksCallbackMap[i] = {
									mouseEnter: enterCallback,
									mouseLeave: leaveCallback
								};
							}
							this.ticks.push(tick);
							this.ticksContainer.appendChild(tick);
						}
	
						sliderTrackSelection.className += " tick-slider-selection";
					}
	
					this.tickLabels = [];
					if (Array.isArray(this.options.ticks_labels) && this.options.ticks_labels.length > 0) {
						this.tickLabelContainer = document.createElement('div');
						this.tickLabelContainer.className = 'slider-tick-label-container';
	
						for (i = 0; i < this.options.ticks_labels.length; i++) {
							var label = document.createElement('div');
							var noTickPositionsSpecified = this.options.ticks_positions.length === 0;
							var tickLabelsIndex = this.options.reversed && noTickPositionsSpecified ? this.options.ticks_labels.length - (i + 1) : i;
							label.className = 'slider-tick-label';
							label.innerHTML = this.options.ticks_labels[tickLabelsIndex];
	
							this.tickLabels.push(label);
							this.tickLabelContainer.appendChild(label);
						}
					}
	
					var createAndAppendTooltipSubElements = function createAndAppendTooltipSubElements(tooltipElem) {
						var arrow = document.createElement("div");
						arrow.className = "tooltip-arrow";
	
						var inner = document.createElement("div");
						inner.className = "tooltip-inner";
	
						tooltipElem.appendChild(arrow);
						tooltipElem.appendChild(inner);
					};
	
					/* Create tooltip elements */
					var sliderTooltip = document.createElement("div");
					sliderTooltip.className = "tooltip tooltip-main";
					sliderTooltip.setAttribute('role', 'presentation');
					createAndAppendTooltipSubElements(sliderTooltip);
	
					var sliderTooltipMin = document.createElement("div");
					sliderTooltipMin.className = "tooltip tooltip-min";
					sliderTooltipMin.setAttribute('role', 'presentation');
					createAndAppendTooltipSubElements(sliderTooltipMin);
	
					var sliderTooltipMax = document.createElement("div");
					sliderTooltipMax.className = "tooltip tooltip-max";
					sliderTooltipMax.setAttribute('role', 'presentation');
					createAndAppendTooltipSubElements(sliderTooltipMax);
	
					/* Append components to sliderElem */
					this.sliderElem.appendChild(sliderTrack);
					this.sliderElem.appendChild(sliderTooltip);
					this.sliderElem.appendChild(sliderTooltipMin);
					this.sliderElem.appendChild(sliderTooltipMax);
	
					if (this.tickLabelContainer) {
						this.sliderElem.appendChild(this.tickLabelContainer);
					}
					if (this.ticksContainer) {
						this.sliderElem.appendChild(this.ticksContainer);
					}
	
					this.sliderElem.appendChild(sliderMinHandle);
					this.sliderElem.appendChild(sliderMaxHandle);
	
					/* Append slider element to parent container, right before the original <input> element */
					parent.insertBefore(this.sliderElem, this.element);
	
					/* Hide original <input> element */
					this.element.style.display = "none";
				}
				/* If JQuery exists, cache JQ references */
				if ($) {
					this.$element = $(this.element);
					this.$sliderElem = $(this.sliderElem);
				}
	
				/*************************************************
	   						Setup
	   	**************************************************/
				this.eventToCallbackMap = {};
				this.sliderElem.id = this.options.id;
	
				this.touchCapable = 'ontouchstart' in window || window.DocumentTouch && document instanceof window.DocumentTouch;
	
				this.touchX = 0;
				this.touchY = 0;
	
				this.tooltip = this.sliderElem.querySelector('.tooltip-main');
				this.tooltipInner = this.tooltip.querySelector('.tooltip-inner');
	
				this.tooltip_min = this.sliderElem.querySelector('.tooltip-min');
				this.tooltipInner_min = this.tooltip_min.querySelector('.tooltip-inner');
	
				this.tooltip_max = this.sliderElem.querySelector('.tooltip-max');
				this.tooltipInner_max = this.tooltip_max.querySelector('.tooltip-inner');
	
				if (SliderScale[this.options.scale]) {
					this.options.scale = SliderScale[this.options.scale];
				}
	
				if (updateSlider === true) {
					// Reset classes
					this._removeClass(this.sliderElem, 'slider-horizontal');
					this._removeClass(this.sliderElem, 'slider-vertical');
					this._removeClass(this.sliderElem, 'slider-rtl');
					this._removeClass(this.tooltip, 'hide');
					this._removeClass(this.tooltip_min, 'hide');
					this._removeClass(this.tooltip_max, 'hide');
	
					// Undo existing inline styles for track
					["left", "right", "top", "width", "height"].forEach(function (prop) {
						this._removeProperty(this.trackLow, prop);
						this._removeProperty(this.trackSelection, prop);
						this._removeProperty(this.trackHigh, prop);
					}, this);
	
					// Undo inline styles on handles
					[this.handle1, this.handle2].forEach(function (handle) {
						this._removeProperty(handle, 'left');
						this._removeProperty(handle, 'right');
						this._removeProperty(handle, 'top');
					}, this);
	
					// Undo inline styles and classes on tooltips
					[this.tooltip, this.tooltip_min, this.tooltip_max].forEach(function (tooltip) {
						this._removeProperty(tooltip, 'left');
						this._removeProperty(tooltip, 'right');
						this._removeProperty(tooltip, 'top');
						this._removeProperty(tooltip, 'margin-left');
						this._removeProperty(tooltip, 'margin-right');
						this._removeProperty(tooltip, 'margin-top');
	
						this._removeClass(tooltip, 'right');
						this._removeClass(tooltip, 'left');
						this._removeClass(tooltip, 'top');
					}, this);
				}
	
				if (this.options.orientation === 'vertical') {
					this._addClass(this.sliderElem, 'slider-vertical');
					this.stylePos = 'top';
					this.mousePos = 'pageY';
					this.sizePos = 'offsetHeight';
				} else {
					this._addClass(this.sliderElem, 'slider-horizontal');
					this.sliderElem.style.width = origWidth;
					this.options.orientation = 'horizontal';
					if (this.options.rtl) {
						this.stylePos = 'right';
					} else {
						this.stylePos = 'left';
					}
					this.mousePos = 'pageX';
					this.sizePos = 'offsetWidth';
				}
				// specific rtl class
				if (this.options.rtl) {
					this._addClass(this.sliderElem, 'slider-rtl');
				}
				this._setTooltipPosition();
				/* In case ticks are specified, overwrite the min and max bounds */
				if (Array.isArray(this.options.ticks) && this.options.ticks.length > 0) {
					this.options.max = Math.max.apply(Math, this.options.ticks);
					this.options.min = Math.min.apply(Math, this.options.ticks);
				}
	
				if (Array.isArray(this.options.value)) {
					this.options.range = true;
					this._state.value = this.options.value;
				} else if (this.options.range) {
					// User wants a range, but value is not an array
					this._state.value = [this.options.value, this.options.max];
				} else {
					this._state.value = this.options.value;
				}
	
				this.trackLow = sliderTrackLow || this.trackLow;
				this.trackSelection = sliderTrackSelection || this.trackSelection;
				this.trackHigh = sliderTrackHigh || this.trackHigh;
	
				if (this.options.selection === 'none') {
					this._addClass(this.trackLow, 'hide');
					this._addClass(this.trackSelection, 'hide');
					this._addClass(this.trackHigh, 'hide');
				} else if (this.options.selection === 'after' || this.options.selection === 'before') {
					this._removeClass(this.trackLow, 'hide');
					this._removeClass(this.trackSelection, 'hide');
					this._removeClass(this.trackHigh, 'hide');
				}
	
				this.handle1 = sliderMinHandle || this.handle1;
				this.handle2 = sliderMaxHandle || this.handle2;
	
				if (updateSlider === true) {
					// Reset classes
					this._removeClass(this.handle1, 'round triangle');
					this._removeClass(this.handle2, 'round triangle hide');
	
					for (i = 0; i < this.ticks.length; i++) {
						this._removeClass(this.ticks[i], 'round triangle hide');
					}
				}
	
				var availableHandleModifiers = ['round', 'triangle', 'custom'];
				var isValidHandleType = availableHandleModifiers.indexOf(this.options.handle) !== -1;
				if (isValidHandleType) {
					this._addClass(this.handle1, this.options.handle);
					this._addClass(this.handle2, this.options.handle);
	
					for (i = 0; i < this.ticks.length; i++) {
						this._addClass(this.ticks[i], this.options.handle);
					}
				}
	
				this._state.offset = this._offset(this.sliderElem);
				this._state.size = this.sliderElem[this.sizePos];
				this.setValue(this._state.value);
	
				/******************************************
	   				Bind Event Listeners
	   	******************************************/
	
				// Bind keyboard handlers
				this.handle1Keydown = this._keydown.bind(this, 0);
				this.handle1.addEventListener("keydown", this.handle1Keydown, false);
	
				this.handle2Keydown = this._keydown.bind(this, 1);
				this.handle2.addEventListener("keydown", this.handle2Keydown, false);
	
				this.mousedown = this._mousedown.bind(this);
				this.touchstart = this._touchstart.bind(this);
				this.touchmove = this._touchmove.bind(this);
	
				if (this.touchCapable) {
					// Test for passive event support
					var supportsPassive = false;
					try {
						var opts = Object.defineProperty({}, 'passive', {
							get: function get() {
								supportsPassive = true;
							}
						});
						window.addEventListener("test", null, opts);
					} catch (e) {}
					// Use our detect's results. passive applied if supported, capture will be false either way.
					var eventOptions = supportsPassive ? { passive: true } : false;
					// Bind touch handlers
					this.sliderElem.addEventListener("touchstart", this.touchstart, eventOptions);
					this.sliderElem.addEventListener("touchmove", this.touchmove, eventOptions);
				}
				this.sliderElem.addEventListener("mousedown", this.mousedown, false);
	
				// Bind window handlers
				this.resize = this._resize.bind(this);
				window.addEventListener("resize", this.resize, false);
	
				// Bind tooltip-related handlers
				if (this.options.tooltip === 'hide') {
					this._addClass(this.tooltip, 'hide');
					this._addClass(this.tooltip_min, 'hide');
					this._addClass(this.tooltip_max, 'hide');
				} else if (this.options.tooltip === 'always') {
					this._showTooltip();
					this._alwaysShowTooltip = true;
				} else {
					this.showTooltip = this._showTooltip.bind(this);
					this.hideTooltip = this._hideTooltip.bind(this);
	
					if (this.options.ticks_tooltip) {
						var callbackHandle = this._addTickListener();
						//create handle1 listeners and store references in map
						var mouseEnter = callbackHandle.addMouseEnter(this, this.handle1);
						var mouseLeave = callbackHandle.addMouseLeave(this, this.handle1);
						this.handleCallbackMap.handle1 = {
							mouseEnter: mouseEnter,
							mouseLeave: mouseLeave
						};
						//create handle2 listeners and store references in map
						mouseEnter = callbackHandle.addMouseEnter(this, this.handle2);
						mouseLeave = callbackHandle.addMouseLeave(this, this.handle2);
						this.handleCallbackMap.handle2 = {
							mouseEnter: mouseEnter,
							mouseLeave: mouseLeave
						};
					} else {
						this.sliderElem.addEventListener("mouseenter", this.showTooltip, false);
						this.sliderElem.addEventListener("mouseleave", this.hideTooltip, false);
					}
	
					this.handle1.addEventListener("focus", this.showTooltip, false);
					this.handle1.addEventListener("blur", this.hideTooltip, false);
	
					this.handle2.addEventListener("focus", this.showTooltip, false);
					this.handle2.addEventListener("blur", this.hideTooltip, false);
				}
	
				if (this.options.enabled) {
					this.enable();
				} else {
					this.disable();
				}
			}
	
			/*************************************************
	  				INSTANCE PROPERTIES/METHODS
	  	- Any methods bound to the prototype are considered
	  part of the plugin's `public` interface
	  	**************************************************/
			Slider.prototype = {
				_init: function _init() {}, // NOTE: Must exist to support bridget
	
				constructor: Slider,
	
				defaultOptions: {
					id: "",
					min: 0,
					max: 10,
					step: 1,
					precision: 0,
					orientation: 'horizontal',
					value: 5,
					range: false,
					selection: 'before',
					tooltip: 'show',
					tooltip_split: false,
					handle: 'round',
					reversed: false,
					rtl: 'auto',
					enabled: true,
					formatter: function formatter(val) {
						if (Array.isArray(val)) {
							return val[0] + " : " + val[1];
						} else {
							return val;
						}
					},
					natural_arrow_keys: false,
					ticks: [],
					ticks_positions: [],
					ticks_labels: [],
					ticks_snap_bounds: 0,
					ticks_tooltip: false,
					scale: 'linear',
					focus: false,
					tooltip_position: null,
					labelledby: null,
					rangeHighlights: []
				},
	
				getElement: function getElement() {
					return this.sliderElem;
				},
	
				getValue: function getValue() {
					if (this.options.range) {
						return this._state.value;
					} else {
						return this._state.value[0];
					}
				},
	
				setValue: function setValue(val, triggerSlideEvent, triggerChangeEvent) {
					if (!val) {
						val = 0;
					}
					var oldValue = this.getValue();
					this._state.value = this._validateInputValue(val);
					var applyPrecision = this._applyPrecision.bind(this);
	
					if (this.options.range) {
						this._state.value[0] = applyPrecision(this._state.value[0]);
						this._state.value[1] = applyPrecision(this._state.value[1]);
	
						this._state.value[0] = Math.max(this.options.min, Math.min(this.options.max, this._state.value[0]));
						this._state.value[1] = Math.max(this.options.min, Math.min(this.options.max, this._state.value[1]));
					} else {
						this._state.value = applyPrecision(this._state.value);
						this._state.value = [Math.max(this.options.min, Math.min(this.options.max, this._state.value))];
						this._addClass(this.handle2, 'hide');
						if (this.options.selection === 'after') {
							this._state.value[1] = this.options.max;
						} else {
							this._state.value[1] = this.options.min;
						}
					}
	
					if (this.options.max > this.options.min) {
						this._state.percentage = [this._toPercentage(this._state.value[0]), this._toPercentage(this._state.value[1]), this.options.step * 100 / (this.options.max - this.options.min)];
					} else {
						this._state.percentage = [0, 0, 100];
					}
	
					this._layout();
					var newValue = this.options.range ? this._state.value : this._state.value[0];
	
					this._setDataVal(newValue);
					if (triggerSlideEvent === true) {
						this._trigger('slide', newValue);
					}
					if (oldValue !== newValue && triggerChangeEvent === true) {
						this._trigger('change', {
							oldValue: oldValue,
							newValue: newValue
						});
					}
	
					return this;
				},
	
				destroy: function destroy() {
					// Remove event handlers on slider elements
					this._removeSliderEventHandlers();
	
					// Remove the slider from the DOM
					this.sliderElem.parentNode.removeChild(this.sliderElem);
					/* Show original <input> element */
					this.element.style.display = "";
	
					// Clear out custom event bindings
					this._cleanUpEventCallbacksMap();
	
					// Remove data values
					this.element.removeAttribute("data");
	
					// Remove JQuery handlers/data
					if ($) {
						this._unbindJQueryEventHandlers();
						this.$element.removeData('slider');
					}
				},
	
				disable: function disable() {
					this._state.enabled = false;
					this.handle1.removeAttribute("tabindex");
					this.handle2.removeAttribute("tabindex");
					this._addClass(this.sliderElem, 'slider-disabled');
					this._trigger('slideDisabled');
	
					return this;
				},
	
				enable: function enable() {
					this._state.enabled = true;
					this.handle1.setAttribute("tabindex", 0);
					this.handle2.setAttribute("tabindex", 0);
					this._removeClass(this.sliderElem, 'slider-disabled');
					this._trigger('slideEnabled');
	
					return this;
				},
	
				toggle: function toggle() {
					if (this._state.enabled) {
						this.disable();
					} else {
						this.enable();
					}
					return this;
				},
	
				isEnabled: function isEnabled() {
					return this._state.enabled;
				},
	
				on: function on(evt, callback) {
					this._bindNonQueryEventHandler(evt, callback);
					return this;
				},
	
				off: function off(evt, callback) {
					if ($) {
						this.$element.off(evt, callback);
						this.$sliderElem.off(evt, callback);
					} else {
						this._unbindNonQueryEventHandler(evt, callback);
					}
				},
	
				getAttribute: function getAttribute(attribute) {
					if (attribute) {
						return this.options[attribute];
					} else {
						return this.options;
					}
				},
	
				setAttribute: function setAttribute(attribute, value) {
					this.options[attribute] = value;
					return this;
				},
	
				refresh: function refresh() {
					this._removeSliderEventHandlers();
					createNewSlider.call(this, this.element, this.options);
					if ($) {
						// Bind new instance of slider to the element
						$.data(this.element, 'slider', this);
					}
					return this;
				},
	
				relayout: function relayout() {
					this._resize();
					this._layout();
					return this;
				},
	
				/******************************+
	   				HELPERS
	   	- Any method that is not part of the public interface.
	   - Place it underneath this comment block and write its signature like so:
	   		_fnName : function() {...}
	   	********************************/
				_removeSliderEventHandlers: function _removeSliderEventHandlers() {
					// Remove keydown event listeners
					this.handle1.removeEventListener("keydown", this.handle1Keydown, false);
					this.handle2.removeEventListener("keydown", this.handle2Keydown, false);
	
					//remove the listeners from the ticks and handles if they had their own listeners
					if (this.options.ticks_tooltip) {
						var ticks = this.ticksContainer.getElementsByClassName('slider-tick');
						for (var i = 0; i < ticks.length; i++) {
							ticks[i].removeEventListener('mouseenter', this.ticksCallbackMap[i].mouseEnter, false);
							ticks[i].removeEventListener('mouseleave', this.ticksCallbackMap[i].mouseLeave, false);
						}
						this.handle1.removeEventListener('mouseenter', this.handleCallbackMap.handle1.mouseEnter, false);
						this.handle2.removeEventListener('mouseenter', this.handleCallbackMap.handle2.mouseEnter, false);
						this.handle1.removeEventListener('mouseleave', this.handleCallbackMap.handle1.mouseLeave, false);
						this.handle2.removeEventListener('mouseleave', this.handleCallbackMap.handle2.mouseLeave, false);
					}
	
					this.handleCallbackMap = null;
					this.ticksCallbackMap = null;
	
					if (this.showTooltip) {
						this.handle1.removeEventListener("focus", this.showTooltip, false);
						this.handle2.removeEventListener("focus", this.showTooltip, false);
					}
					if (this.hideTooltip) {
						this.handle1.removeEventListener("blur", this.hideTooltip, false);
						this.handle2.removeEventListener("blur", this.hideTooltip, false);
					}
	
					// Remove event listeners from sliderElem
					if (this.showTooltip) {
						this.sliderElem.removeEventListener("mouseenter", this.showTooltip, false);
					}
					if (this.hideTooltip) {
						this.sliderElem.removeEventListener("mouseleave", this.hideTooltip, false);
					}
					this.sliderElem.removeEventListener("touchstart", this.touchstart, false);
					this.sliderElem.removeEventListener("touchmove", this.touchmove, false);
					this.sliderElem.removeEventListener("mousedown", this.mousedown, false);
	
					// Remove window event listener
					window.removeEventListener("resize", this.resize, false);
				},
				_bindNonQueryEventHandler: function _bindNonQueryEventHandler(evt, callback) {
					if (this.eventToCallbackMap[evt] === undefined) {
						this.eventToCallbackMap[evt] = [];
					}
					this.eventToCallbackMap[evt].push(callback);
				},
				_unbindNonQueryEventHandler: function _unbindNonQueryEventHandler(evt, callback) {
					var callbacks = this.eventToCallbackMap[evt];
					if (callbacks !== undefined) {
						for (var i = 0; i < callbacks.length; i++) {
							if (callbacks[i] === callback) {
								callbacks.splice(i, 1);
								break;
							}
						}
					}
				},
				_cleanUpEventCallbacksMap: function _cleanUpEventCallbacksMap() {
					var eventNames = Object.keys(this.eventToCallbackMap);
					for (var i = 0; i < eventNames.length; i++) {
						var eventName = eventNames[i];
						delete this.eventToCallbackMap[eventName];
					}
				},
				_showTooltip: function _showTooltip() {
					if (this.options.tooltip_split === false) {
						this._addClass(this.tooltip, 'in');
						this.tooltip_min.style.display = 'none';
						this.tooltip_max.style.display = 'none';
					} else {
						this._addClass(this.tooltip_min, 'in');
						this._addClass(this.tooltip_max, 'in');
						this.tooltip.style.display = 'none';
					}
					this._state.over = true;
				},
				_hideTooltip: function _hideTooltip() {
					if (this._state.inDrag === false && this.alwaysShowTooltip !== true) {
						this._removeClass(this.tooltip, 'in');
						this._removeClass(this.tooltip_min, 'in');
						this._removeClass(this.tooltip_max, 'in');
					}
					this._state.over = false;
				},
				_setToolTipOnMouseOver: function _setToolTipOnMouseOver(tempState) {
					var formattedTooltipVal = this.options.formatter(!tempState ? this._state.value[0] : tempState.value[0]);
					var positionPercentages = !tempState ? getPositionPercentages(this._state, this.options.reversed) : getPositionPercentages(tempState, this.options.reversed);
					this._setText(this.tooltipInner, formattedTooltipVal);
	
					this.tooltip.style[this.stylePos] = positionPercentages[0] + "%";
					if (this.options.orientation === 'vertical') {
						this._css(this.tooltip, "margin-" + this.stylePos, -this.tooltip.offsetHeight / 2 + "px");
					} else {
						this._css(this.tooltip, "margin-" + this.stylePos, -this.tooltip.offsetWidth / 2 + "px");
					}
	
					function getPositionPercentages(state, reversed) {
						if (reversed) {
							return [100 - state.percentage[0], this.options.range ? 100 - state.percentage[1] : state.percentage[1]];
						}
						return [state.percentage[0], state.percentage[1]];
					}
				},
				_addTickListener: function _addTickListener() {
					return {
						addMouseEnter: function addMouseEnter(reference, tick, index) {
							var enter = function enter() {
								var tempState = reference._state;
								var idString = index >= 0 ? index : this.attributes['aria-valuenow'].value;
								var hoverIndex = parseInt(idString, 10);
								tempState.value[0] = hoverIndex;
								tempState.percentage[0] = reference.options.ticks_positions[hoverIndex];
								reference._setToolTipOnMouseOver(tempState);
								reference._showTooltip();
							};
							tick.addEventListener("mouseenter", enter, false);
							return enter;
						},
						addMouseLeave: function addMouseLeave(reference, tick) {
							var leave = function leave() {
								reference._hideTooltip();
							};
							tick.addEventListener("mouseleave", leave, false);
							return leave;
						}
					};
				},
				_layout: function _layout() {
					var positionPercentages;
	
					if (this.options.reversed) {
						positionPercentages = [100 - this._state.percentage[0], this.options.range ? 100 - this._state.percentage[1] : this._state.percentage[1]];
					} else {
						positionPercentages = [this._state.percentage[0], this._state.percentage[1]];
					}
	
					this.handle1.style[this.stylePos] = positionPercentages[0] + "%";
					this.handle1.setAttribute('aria-valuenow', this._state.value[0]);
					if (isNaN(this.options.formatter(this._state.value[0]))) {
						this.handle1.setAttribute('aria-valuetext', this.options.formatter(this._state.value[0]));
					}
	
					this.handle2.style[this.stylePos] = positionPercentages[1] + "%";
					this.handle2.setAttribute('aria-valuenow', this._state.value[1]);
					if (isNaN(this.options.formatter(this._state.value[1]))) {
						this.handle2.setAttribute('aria-valuetext', this.options.formatter(this._state.value[1]));
					}
	
					/* Position highlight range elements */
					if (this.rangeHighlightElements.length > 0 && Array.isArray(this.options.rangeHighlights) && this.options.rangeHighlights.length > 0) {
						for (var _i = 0; _i < this.options.rangeHighlights.length; _i++) {
							var startPercent = this._toPercentage(this.options.rangeHighlights[_i].start);
							var endPercent = this._toPercentage(this.options.rangeHighlights[_i].end);
	
							if (this.options.reversed) {
								var sp = 100 - endPercent;
								endPercent = 100 - startPercent;
								startPercent = sp;
							}
	
							var currentRange = this._createHighlightRange(startPercent, endPercent);
	
							if (currentRange) {
								if (this.options.orientation === 'vertical') {
									this.rangeHighlightElements[_i].style.top = currentRange.start + "%";
									this.rangeHighlightElements[_i].style.height = currentRange.size + "%";
								} else {
									if (this.options.rtl) {
										this.rangeHighlightElements[_i].style.right = currentRange.start + "%";
									} else {
										this.rangeHighlightElements[_i].style.left = currentRange.start + "%";
									}
									this.rangeHighlightElements[_i].style.width = currentRange.size + "%";
								}
							} else {
								this.rangeHighlightElements[_i].style.display = "none";
							}
						}
					}
	
					/* Position ticks and labels */
					if (Array.isArray(this.options.ticks) && this.options.ticks.length > 0) {
	
						var styleSize = this.options.orientation === 'vertical' ? 'height' : 'width';
						var styleMargin;
						if (this.options.orientation === 'vertical') {
							styleMargin = 'marginTop';
						} else {
							if (this.options.rtl) {
								styleMargin = 'marginRight';
							} else {
								styleMargin = 'marginLeft';
							}
						}
						var labelSize = this._state.size / (this.options.ticks.length - 1);
	
						if (this.tickLabelContainer) {
							var extraMargin = 0;
							if (this.options.ticks_positions.length === 0) {
								if (this.options.orientation !== 'vertical') {
									this.tickLabelContainer.style[styleMargin] = -labelSize / 2 + "px";
								}
	
								extraMargin = this.tickLabelContainer.offsetHeight;
							} else {
								/* Chidren are position absolute, calculate height by finding the max offsetHeight of a child */
								for (i = 0; i < this.tickLabelContainer.childNodes.length; i++) {
									if (this.tickLabelContainer.childNodes[i].offsetHeight > extraMargin) {
										extraMargin = this.tickLabelContainer.childNodes[i].offsetHeight;
									}
								}
							}
							if (this.options.orientation === 'horizontal') {
								this.sliderElem.style.marginBottom = extraMargin + "px";
							}
						}
						for (var i = 0; i < this.options.ticks.length; i++) {
	
							var percentage = this.options.ticks_positions[i] || this._toPercentage(this.options.ticks[i]);
	
							if (this.options.reversed) {
								percentage = 100 - percentage;
							}
	
							this.ticks[i].style[this.stylePos] = percentage + "%";
	
							/* Set class labels to denote whether ticks are in the selection */
							this._removeClass(this.ticks[i], 'in-selection');
							if (!this.options.range) {
								if (this.options.selection === 'after' && percentage >= positionPercentages[0]) {
									this._addClass(this.ticks[i], 'in-selection');
								} else if (this.options.selection === 'before' && percentage <= positionPercentages[0]) {
									this._addClass(this.ticks[i], 'in-selection');
								}
							} else if (percentage >= positionPercentages[0] && percentage <= positionPercentages[1]) {
								this._addClass(this.ticks[i], 'in-selection');
							}
	
							if (this.tickLabels[i]) {
								this.tickLabels[i].style[styleSize] = labelSize + "px";
	
								if (this.options.orientation !== 'vertical' && this.options.ticks_positions[i] !== undefined) {
									this.tickLabels[i].style.position = 'absolute';
									this.tickLabels[i].style[this.stylePos] = percentage + "%";
									this.tickLabels[i].style[styleMargin] = -labelSize / 2 + 'px';
								} else if (this.options.orientation === 'vertical') {
									if (this.options.rtl) {
										this.tickLabels[i].style['marginRight'] = this.sliderElem.offsetWidth + "px";
									} else {
										this.tickLabels[i].style['marginLeft'] = this.sliderElem.offsetWidth + "px";
									}
									this.tickLabelContainer.style[styleMargin] = this.sliderElem.offsetWidth / 2 * -1 + 'px';
								}
							}
						}
					}
	
					var formattedTooltipVal;
	
					if (this.options.range) {
						formattedTooltipVal = this.options.formatter(this._state.value);
						this._setText(this.tooltipInner, formattedTooltipVal);
						this.tooltip.style[this.stylePos] = (positionPercentages[1] + positionPercentages[0]) / 2 + "%";
	
						if (this.options.orientation === 'vertical') {
							this._css(this.tooltip, "margin-" + this.stylePos, -this.tooltip.offsetHeight / 2 + "px");
						} else {
							this._css(this.tooltip, "margin-" + this.stylePos, -this.tooltip.offsetWidth / 2 + "px");
						}
	
						var innerTooltipMinText = this.options.formatter(this._state.value[0]);
						this._setText(this.tooltipInner_min, innerTooltipMinText);
	
						var innerTooltipMaxText = this.options.formatter(this._state.value[1]);
						this._setText(this.tooltipInner_max, innerTooltipMaxText);
	
						this.tooltip_min.style[this.stylePos] = positionPercentages[0] + "%";
	
						if (this.options.orientation === 'vertical') {
							this._css(this.tooltip_min, "margin-" + this.stylePos, -this.tooltip_min.offsetHeight / 2 + "px");
						} else {
							this._css(this.tooltip_min, "margin-" + this.stylePos, -this.tooltip_min.offsetWidth / 2 + "px");
						}
	
						this.tooltip_max.style[this.stylePos] = positionPercentages[1] + "%";
	
						if (this.options.orientation === 'vertical') {
							this._css(this.tooltip_max, "margin-" + this.stylePos, -this.tooltip_max.offsetHeight / 2 + "px");
						} else {
							this._css(this.tooltip_max, "margin-" + this.stylePos, -this.tooltip_max.offsetWidth / 2 + "px");
						}
					} else {
						formattedTooltipVal = this.options.formatter(this._state.value[0]);
						this._setText(this.tooltipInner, formattedTooltipVal);
	
						this.tooltip.style[this.stylePos] = positionPercentages[0] + "%";
						if (this.options.orientation === 'vertical') {
							this._css(this.tooltip, "margin-" + this.stylePos, -this.tooltip.offsetHeight / 2 + "px");
						} else {
							this._css(this.tooltip, "margin-" + this.stylePos, -this.tooltip.offsetWidth / 2 + "px");
						}
					}
	
					if (this.options.orientation === 'vertical') {
						this.trackLow.style.top = '0';
						this.trackLow.style.height = Math.min(positionPercentages[0], positionPercentages[1]) + '%';
	
						this.trackSelection.style.top = Math.min(positionPercentages[0], positionPercentages[1]) + '%';
						this.trackSelection.style.height = Math.abs(positionPercentages[0] - positionPercentages[1]) + '%';
	
						this.trackHigh.style.bottom = '0';
						this.trackHigh.style.height = 100 - Math.min(positionPercentages[0], positionPercentages[1]) - Math.abs(positionPercentages[0] - positionPercentages[1]) + '%';
					} else {
						if (this.stylePos === 'right') {
							this.trackLow.style.right = '0';
						} else {
							this.trackLow.style.left = '0';
						}
						this.trackLow.style.width = Math.min(positionPercentages[0], positionPercentages[1]) + '%';
	
						if (this.stylePos === 'right') {
							this.trackSelection.style.right = Math.min(positionPercentages[0], positionPercentages[1]) + '%';
						} else {
							this.trackSelection.style.left = Math.min(positionPercentages[0], positionPercentages[1]) + '%';
						}
						this.trackSelection.style.width = Math.abs(positionPercentages[0] - positionPercentages[1]) + '%';
	
						if (this.stylePos === 'right') {
							this.trackHigh.style.left = '0';
						} else {
							this.trackHigh.style.right = '0';
						}
						this.trackHigh.style.width = 100 - Math.min(positionPercentages[0], positionPercentages[1]) - Math.abs(positionPercentages[0] - positionPercentages[1]) + '%';
	
						var offset_min = this.tooltip_min.getBoundingClientRect();
						var offset_max = this.tooltip_max.getBoundingClientRect();
	
						if (this.options.tooltip_position === 'bottom') {
							if (offset_min.right > offset_max.left) {
								this._removeClass(this.tooltip_max, 'bottom');
								this._addClass(this.tooltip_max, 'top');
								this.tooltip_max.style.top = '';
								this.tooltip_max.style.bottom = 22 + 'px';
							} else {
								this._removeClass(this.tooltip_max, 'top');
								this._addClass(this.tooltip_max, 'bottom');
								this.tooltip_max.style.top = this.tooltip_min.style.top;
								this.tooltip_max.style.bottom = '';
							}
						} else {
							if (offset_min.right > offset_max.left) {
								this._removeClass(this.tooltip_max, 'top');
								this._addClass(this.tooltip_max, 'bottom');
								this.tooltip_max.style.top = 18 + 'px';
							} else {
								this._removeClass(this.tooltip_max, 'bottom');
								this._addClass(this.tooltip_max, 'top');
								this.tooltip_max.style.top = this.tooltip_min.style.top;
							}
						}
					}
				},
				_createHighlightRange: function _createHighlightRange(start, end) {
					if (this._isHighlightRange(start, end)) {
						if (start > end) {
							return { 'start': end, 'size': start - end };
						}
						return { 'start': start, 'size': end - start };
					}
					return null;
				},
				_isHighlightRange: function _isHighlightRange(start, end) {
					if (0 <= start && start <= 100 && 0 <= end && end <= 100) {
						return true;
					} else {
						return false;
					}
				},
				_resize: function _resize(ev) {
					/*jshint unused:false*/
					this._state.offset = this._offset(this.sliderElem);
					this._state.size = this.sliderElem[this.sizePos];
					this._layout();
				},
				_removeProperty: function _removeProperty(element, prop) {
					if (element.style.removeProperty) {
						element.style.removeProperty(prop);
					} else {
						element.style.removeAttribute(prop);
					}
				},
				_mousedown: function _mousedown(ev) {
					if (!this._state.enabled) {
						return false;
					}
	
					this._state.offset = this._offset(this.sliderElem);
					this._state.size = this.sliderElem[this.sizePos];
	
					var percentage = this._getPercentage(ev);
	
					if (this.options.range) {
						var diff1 = Math.abs(this._state.percentage[0] - percentage);
						var diff2 = Math.abs(this._state.percentage[1] - percentage);
						this._state.dragged = diff1 < diff2 ? 0 : 1;
						this._adjustPercentageForRangeSliders(percentage);
					} else {
						this._state.dragged = 0;
					}
	
					this._state.percentage[this._state.dragged] = percentage;
					this._layout();
	
					if (this.touchCapable) {
						document.removeEventListener("touchmove", this.mousemove, false);
						document.removeEventListener("touchend", this.mouseup, false);
					}
	
					if (this.mousemove) {
						document.removeEventListener("mousemove", this.mousemove, false);
					}
					if (this.mouseup) {
						document.removeEventListener("mouseup", this.mouseup, false);
					}
	
					this.mousemove = this._mousemove.bind(this);
					this.mouseup = this._mouseup.bind(this);
	
					if (this.touchCapable) {
						// Touch: Bind touch events:
						document.addEventListener("touchmove", this.mousemove, false);
						document.addEventListener("touchend", this.mouseup, false);
					}
					// Bind mouse events:
					document.addEventListener("mousemove", this.mousemove, false);
					document.addEventListener("mouseup", this.mouseup, false);
	
					this._state.inDrag = true;
					var newValue = this._calculateValue();
	
					this._trigger('slideStart', newValue);
	
					this._setDataVal(newValue);
					this.setValue(newValue, false, true);
	
					ev.returnValue = false;
	
					if (this.options.focus) {
						this._triggerFocusOnHandle(this._state.dragged);
					}
	
					return true;
				},
				_touchstart: function _touchstart(ev) {
					if (ev.changedTouches === undefined) {
						this._mousedown(ev);
						return;
					}
	
					var touch = ev.changedTouches[0];
					this.touchX = touch.pageX;
					this.touchY = touch.pageY;
				},
				_triggerFocusOnHandle: function _triggerFocusOnHandle(handleIdx) {
					if (handleIdx === 0) {
						this.handle1.focus();
					}
					if (handleIdx === 1) {
						this.handle2.focus();
					}
				},
				_keydown: function _keydown(handleIdx, ev) {
					if (!this._state.enabled) {
						return false;
					}
	
					var dir;
					switch (ev.keyCode) {
						case 37: // left
						case 40:
							// down
							dir = -1;
							break;
						case 39: // right
						case 38:
							// up
							dir = 1;
							break;
					}
					if (!dir) {
						return;
					}
	
					// use natural arrow keys instead of from min to max
					if (this.options.natural_arrow_keys) {
						var ifVerticalAndNotReversed = this.options.orientation === 'vertical' && !this.options.reversed;
						var ifHorizontalAndReversed = this.options.orientation === 'horizontal' && this.options.reversed; // @todo control with rtl
	
						if (ifVerticalAndNotReversed || ifHorizontalAndReversed) {
							dir = -dir;
						}
					}
	
					var val = this._state.value[handleIdx] + dir * this.options.step;
					var percentage = val / this.options.max * 100;
					this._state.keyCtrl = handleIdx;
					if (this.options.range) {
						this._adjustPercentageForRangeSliders(percentage);
						var val1 = !this._state.keyCtrl ? val : this._state.value[0];
						var val2 = this._state.keyCtrl ? val : this._state.value[1];
						val = [val1, val2];
					}
	
					this._trigger('slideStart', val);
					this._setDataVal(val);
					this.setValue(val, true, true);
	
					this._setDataVal(val);
					this._trigger('slideStop', val);
					this._layout();
	
					this._pauseEvent(ev);
					delete this._state.keyCtrl;
	
					return false;
				},
				_pauseEvent: function _pauseEvent(ev) {
					if (ev.stopPropagation) {
						ev.stopPropagation();
					}
					if (ev.preventDefault) {
						ev.preventDefault();
					}
					ev.cancelBubble = true;
					ev.returnValue = false;
				},
				_mousemove: function _mousemove(ev) {
					if (!this._state.enabled) {
						return false;
					}
	
					var percentage = this._getPercentage(ev);
					this._adjustPercentageForRangeSliders(percentage);
					this._state.percentage[this._state.dragged] = percentage;
					this._layout();
	
					var val = this._calculateValue(true);
					this.setValue(val, true, true);
	
					return false;
				},
				_touchmove: function _touchmove(ev) {
					if (ev.changedTouches === undefined) {
						return;
					}
	
					var touch = ev.changedTouches[0];
	
					var xDiff = touch.pageX - this.touchX;
					var yDiff = touch.pageY - this.touchY;
	
					if (!this._state.inDrag) {
						// Vertical Slider
						if (this.options.orientation === 'vertical' && xDiff <= 5 && xDiff >= -5 && (yDiff >= 15 || yDiff <= -15)) {
							this._mousedown(ev);
						}
						// Horizontal slider.
						else if (yDiff <= 5 && yDiff >= -5 && (xDiff >= 15 || xDiff <= -15)) {
								this._mousedown(ev);
							}
					}
				},
				_adjustPercentageForRangeSliders: function _adjustPercentageForRangeSliders(percentage) {
					if (this.options.range) {
						var precision = this._getNumDigitsAfterDecimalPlace(percentage);
						precision = precision ? precision - 1 : 0;
						var percentageWithAdjustedPrecision = this._applyToFixedAndParseFloat(percentage, precision);
						if (this._state.dragged === 0 && this._applyToFixedAndParseFloat(this._state.percentage[1], precision) < percentageWithAdjustedPrecision) {
							this._state.percentage[0] = this._state.percentage[1];
							this._state.dragged = 1;
						} else if (this._state.dragged === 1 && this._applyToFixedAndParseFloat(this._state.percentage[0], precision) > percentageWithAdjustedPrecision) {
							this._state.percentage[1] = this._state.percentage[0];
							this._state.dragged = 0;
						} else if (this._state.keyCtrl === 0 && this._state.value[1] / this.options.max * 100 < percentage) {
							this._state.percentage[0] = this._state.percentage[1];
							this._state.keyCtrl = 1;
							this.handle2.focus();
						} else if (this._state.keyCtrl === 1 && this._state.value[0] / this.options.max * 100 > percentage) {
							this._state.percentage[1] = this._state.percentage[0];
							this._state.keyCtrl = 0;
							this.handle1.focus();
						}
					}
				},
				_mouseup: function _mouseup() {
					if (!this._state.enabled) {
						return false;
					}
					if (this.touchCapable) {
						// Touch: Unbind touch event handlers:
						document.removeEventListener("touchmove", this.mousemove, false);
						document.removeEventListener("touchend", this.mouseup, false);
					}
					// Unbind mouse event handlers:
					document.removeEventListener("mousemove", this.mousemove, false);
					document.removeEventListener("mouseup", this.mouseup, false);
	
					this._state.inDrag = false;
					if (this._state.over === false) {
						this._hideTooltip();
					}
					var val = this._calculateValue(true);
	
					this._layout();
					this._setDataVal(val);
					this._trigger('slideStop', val);
	
					return false;
				},
				_calculateValue: function _calculateValue(snapToClosestTick) {
					var val;
					if (this.options.range) {
						val = [this.options.min, this.options.max];
						if (this._state.percentage[0] !== 0) {
							val[0] = this._toValue(this._state.percentage[0]);
							val[0] = this._applyPrecision(val[0]);
						}
						if (this._state.percentage[1] !== 100) {
							val[1] = this._toValue(this._state.percentage[1]);
							val[1] = this._applyPrecision(val[1]);
						}
					} else {
						val = this._toValue(this._state.percentage[0]);
						val = parseFloat(val);
						val = this._applyPrecision(val);
					}
	
					if (snapToClosestTick) {
						var min = [val, Infinity];
						for (var i = 0; i < this.options.ticks.length; i++) {
							var diff = Math.abs(this.options.ticks[i] - val);
							if (diff <= min[1]) {
								min = [this.options.ticks[i], diff];
							}
						}
						if (min[1] <= this.options.ticks_snap_bounds) {
							return min[0];
						}
					}
	
					return val;
				},
				_applyPrecision: function _applyPrecision(val) {
					var precision = this.options.precision || this._getNumDigitsAfterDecimalPlace(this.options.step);
					return this._applyToFixedAndParseFloat(val, precision);
				},
				_getNumDigitsAfterDecimalPlace: function _getNumDigitsAfterDecimalPlace(num) {
					var match = ('' + num).match(/(?:\.(\d+))?(?:[eE]([+-]?\d+))?$/);
					if (!match) {
						return 0;
					}
					return Math.max(0, (match[1] ? match[1].length : 0) - (match[2] ? +match[2] : 0));
				},
				_applyToFixedAndParseFloat: function _applyToFixedAndParseFloat(num, toFixedInput) {
					var truncatedNum = num.toFixed(toFixedInput);
					return parseFloat(truncatedNum);
				},
				/*
	   	Credits to Mike Samuel for the following method!
	   	Source: http://stackoverflow.com/questions/10454518/javascript-how-to-retrieve-the-number-of-decimals-of-a-string-number
	   */
				_getPercentage: function _getPercentage(ev) {
					if (this.touchCapable && (ev.type === 'touchstart' || ev.type === 'touchmove')) {
						ev = ev.touches[0];
					}
	
					var eventPosition = ev[this.mousePos];
					var sliderOffset = this._state.offset[this.stylePos];
					var distanceToSlide = eventPosition - sliderOffset;
					if (this.stylePos === 'right') {
						distanceToSlide = -distanceToSlide;
					}
					// Calculate what percent of the length the slider handle has slid
					var percentage = distanceToSlide / this._state.size * 100;
					percentage = Math.round(percentage / this._state.percentage[2]) * this._state.percentage[2];
					if (this.options.reversed) {
						percentage = 100 - percentage;
					}
	
					// Make sure the percent is within the bounds of the slider.
					// 0% corresponds to the 'min' value of the slide
					// 100% corresponds to the 'max' value of the slide
					return Math.max(0, Math.min(100, percentage));
				},
				_validateInputValue: function _validateInputValue(val) {
					if (!isNaN(+val)) {
						return +val;
					} else if (Array.isArray(val)) {
						this._validateArray(val);
						return val;
					} else {
						throw new Error(ErrorMsgs.formatInvalidInputErrorMsg(val));
					}
				},
				_validateArray: function _validateArray(val) {
					for (var i = 0; i < val.length; i++) {
						var input = val[i];
						if (typeof input !== 'number') {
							throw new Error(ErrorMsgs.formatInvalidInputErrorMsg(input));
						}
					}
				},
				_setDataVal: function _setDataVal(val) {
					this.element.setAttribute('data-value', val);
					this.element.setAttribute('value', val);
					this.element.value = val;
				},
				_trigger: function _trigger(evt, val) {
					val = val || val === 0 ? val : undefined;
	
					var callbackFnArray = this.eventToCallbackMap[evt];
					if (callbackFnArray && callbackFnArray.length) {
						for (var i = 0; i < callbackFnArray.length; i++) {
							var callbackFn = callbackFnArray[i];
							callbackFn(val);
						}
					}
	
					/* If JQuery exists, trigger JQuery events */
					if ($) {
						this._triggerJQueryEvent(evt, val);
					}
				},
				_triggerJQueryEvent: function _triggerJQueryEvent(evt, val) {
					var eventData = {
						type: evt,
						value: val
					};
					this.$element.trigger(eventData);
					this.$sliderElem.trigger(eventData);
				},
				_unbindJQueryEventHandlers: function _unbindJQueryEventHandlers() {
					this.$element.off();
					this.$sliderElem.off();
				},
				_setText: function _setText(element, text) {
					if (typeof element.textContent !== "undefined") {
						element.textContent = text;
					} else if (typeof element.innerText !== "undefined") {
						element.innerText = text;
					}
				},
				_removeClass: function _removeClass(element, classString) {
					var classes = classString.split(" ");
					var newClasses = element.className;
	
					for (var i = 0; i < classes.length; i++) {
						var classTag = classes[i];
						var regex = new RegExp("(?:\\s|^)" + classTag + "(?:\\s|$)");
						newClasses = newClasses.replace(regex, " ");
					}
	
					element.className = newClasses.trim();
				},
				_addClass: function _addClass(element, classString) {
					var classes = classString.split(" ");
					var newClasses = element.className;
	
					for (var i = 0; i < classes.length; i++) {
						var classTag = classes[i];
						var regex = new RegExp("(?:\\s|^)" + classTag + "(?:\\s|$)");
						var ifClassExists = regex.test(newClasses);
	
						if (!ifClassExists) {
							newClasses += " " + classTag;
						}
					}
	
					element.className = newClasses.trim();
				},
				_offsetLeft: function _offsetLeft(obj) {
					return obj.getBoundingClientRect().left;
				},
				_offsetRight: function _offsetRight(obj) {
					return obj.getBoundingClientRect().right;
				},
				_offsetTop: function _offsetTop(obj) {
					var offsetTop = obj.offsetTop;
					while ((obj = obj.offsetParent) && !isNaN(obj.offsetTop)) {
						offsetTop += obj.offsetTop;
						if (obj.tagName !== 'BODY') {
							offsetTop -= obj.scrollTop;
						}
					}
					return offsetTop;
				},
				_offset: function _offset(obj) {
					return {
						left: this._offsetLeft(obj),
						right: this._offsetRight(obj),
						top: this._offsetTop(obj)
					};
				},
				_css: function _css(elementRef, styleName, value) {
					if ($) {
						$.style(elementRef, styleName, value);
					} else {
						var style = styleName.replace(/^-ms-/, "ms-").replace(/-([\da-z])/gi, function (all, letter) {
							return letter.toUpperCase();
						});
						elementRef.style[style] = value;
					}
				},
				_toValue: function _toValue(percentage) {
					return this.options.scale.toValue.apply(this, [percentage]);
				},
				_toPercentage: function _toPercentage(value) {
					return this.options.scale.toPercentage.apply(this, [value]);
				},
				_setTooltipPosition: function _setTooltipPosition() {
					var tooltips = [this.tooltip, this.tooltip_min, this.tooltip_max];
					if (this.options.orientation === 'vertical') {
						var tooltipPos;
						if (this.options.tooltip_position) {
							tooltipPos = this.options.tooltip_position;
						} else {
							if (this.options.rtl) {
								tooltipPos = 'left';
							} else {
								tooltipPos = 'right';
							}
						}
						var oppositeSide = tooltipPos === 'left' ? 'right' : 'left';
						tooltips.forEach(function (tooltip) {
							this._addClass(tooltip, tooltipPos);
							tooltip.style[oppositeSide] = '100%';
						}.bind(this));
					} else if (this.options.tooltip_position === 'bottom') {
						tooltips.forEach(function (tooltip) {
							this._addClass(tooltip, 'bottom');
							tooltip.style.top = 22 + 'px';
						}.bind(this));
					} else {
						tooltips.forEach(function (tooltip) {
							this._addClass(tooltip, 'top');
							tooltip.style.top = -this.tooltip.outerHeight - 14 + 'px';
						}.bind(this));
					}
				}
			};
	
			/*********************************
	  		Attach to global namespace
	  	*********************************/
			if ($ && $.fn) {
				var autoRegisterNamespace = void 0;
	
				if (!$.fn.slider) {
					$.bridget(NAMESPACE_MAIN, Slider);
					autoRegisterNamespace = NAMESPACE_MAIN;
				} else {
					if (windowIsDefined) {
						window.console.warn("bootstrap-slider.js - WARNING: $.fn.slider namespace is already bound. Use the $.fn.bootstrapSlider namespace instead.");
					}
					autoRegisterNamespace = NAMESPACE_ALTERNATE;
				}
				$.bridget(NAMESPACE_ALTERNATE, Slider);
	
				// Auto-Register data-provide="slider" Elements
				$(function () {
					$("input[data-provide=slider]")[autoRegisterNamespace]();
				});
			}
		})($);
	
		return Slider;
	});


/***/ }),
/* 193 */
/***/ (function(module, exports, __webpack_require__) {

	/* WEBPACK VAR INJECTION */(function(global) {/*!
	 * The buffer module from node.js, for the browser.
	 *
	 * @author   Feross Aboukhadijeh <http://feross.org>
	 * @license  MIT
	 */
	/* eslint-disable no-proto */
	
	'use strict'
	
	var base64 = __webpack_require__(696)
	var ieee754 = __webpack_require__(1054)
	var isArray = __webpack_require__(1059)
	
	exports.Buffer = Buffer
	exports.SlowBuffer = SlowBuffer
	exports.INSPECT_MAX_BYTES = 50
	
	/**
	 * If `Buffer.TYPED_ARRAY_SUPPORT`:
	 *   === true    Use Uint8Array implementation (fastest)
	 *   === false   Use Object implementation (most compatible, even IE6)
	 *
	 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
	 * Opera 11.6+, iOS 4.2+.
	 *
	 * Due to various browser bugs, sometimes the Object implementation will be used even
	 * when the browser supports typed arrays.
	 *
	 * Note:
	 *
	 *   - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,
	 *     See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.
	 *
	 *   - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.
	 *
	 *   - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of
	 *     incorrect length in some situations.
	
	 * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they
	 * get the Object implementation, which is slower but behaves correctly.
	 */
	Buffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined
	  ? global.TYPED_ARRAY_SUPPORT
	  : typedArraySupport()
	
	/*
	 * Export kMaxLength after typed array support is determined.
	 */
	exports.kMaxLength = kMaxLength()
	
	function typedArraySupport () {
	  try {
	    var arr = new Uint8Array(1)
	    arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}
	    return arr.foo() === 42 && // typed array instances can be augmented
	        typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`
	        arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`
	  } catch (e) {
	    return false
	  }
	}
	
	function kMaxLength () {
	  return Buffer.TYPED_ARRAY_SUPPORT
	    ? 0x7fffffff
	    : 0x3fffffff
	}
	
	function createBuffer (that, length) {
	  if (kMaxLength() < length) {
	    throw new RangeError('Invalid typed array length')
	  }
	  if (Buffer.TYPED_ARRAY_SUPPORT) {
	    // Return an augmented `Uint8Array` instance, for best performance
	    that = new Uint8Array(length)
	    that.__proto__ = Buffer.prototype
	  } else {
	    // Fallback: Return an object instance of the Buffer class
	    if (that === null) {
	      that = new Buffer(length)
	    }
	    that.length = length
	  }
	
	  return that
	}
	
	/**
	 * The Buffer constructor returns instances of `Uint8Array` that have their
	 * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of
	 * `Uint8Array`, so the returned instances will have all the node `Buffer` methods
	 * and the `Uint8Array` methods. Square bracket notation works as expected -- it
	 * returns a single octet.
	 *
	 * The `Uint8Array` prototype remains unmodified.
	 */
	
	function Buffer (arg, encodingOrOffset, length) {
	  if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {
	    return new Buffer(arg, encodingOrOffset, length)
	  }
	
	  // Common case.
	  if (typeof arg === 'number') {
	    if (typeof encodingOrOffset === 'string') {
	      throw new Error(
	        'If encoding is specified then the first argument must be a string'
	      )
	    }
	    return allocUnsafe(this, arg)
	  }
	  return from(this, arg, encodingOrOffset, length)
	}
	
	Buffer.poolSize = 8192 // not used by this implementation
	
	// TODO: Legacy, not needed anymore. Remove in next major version.
	Buffer._augment = function (arr) {
	  arr.__proto__ = Buffer.prototype
	  return arr
	}
	
	function from (that, value, encodingOrOffset, length) {
	  if (typeof value === 'number') {
	    throw new TypeError('"value" argument must not be a number')
	  }
	
	  if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {
	    return fromArrayBuffer(that, value, encodingOrOffset, length)
	  }
	
	  if (typeof value === 'string') {
	    return fromString(that, value, encodingOrOffset)
	  }
	
	  return fromObject(that, value)
	}
	
	/**
	 * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError
	 * if value is a number.
	 * Buffer.from(str[, encoding])
	 * Buffer.from(array)
	 * Buffer.from(buffer)
	 * Buffer.from(arrayBuffer[, byteOffset[, length]])
	 **/
	Buffer.from = function (value, encodingOrOffset, length) {
	  return from(null, value, encodingOrOffset, length)
	}
	
	if (Buffer.TYPED_ARRAY_SUPPORT) {
	  Buffer.prototype.__proto__ = Uint8Array.prototype
	  Buffer.__proto__ = Uint8Array
	  if (typeof Symbol !== 'undefined' && Symbol.species &&
	      Buffer[Symbol.species] === Buffer) {
	    // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97
	    Object.defineProperty(Buffer, Symbol.species, {
	      value: null,
	      configurable: true
	    })
	  }
	}
	
	function assertSize (size) {
	  if (typeof size !== 'number') {
	    throw new TypeError('"size" argument must be a number')
	  } else if (size < 0) {
	    throw new RangeError('"size" argument must not be negative')
	  }
	}
	
	function alloc (that, size, fill, encoding) {
	  assertSize(size)
	  if (size <= 0) {
	    return createBuffer(that, size)
	  }
	  if (fill !== undefined) {
	    // Only pay attention to encoding if it's a string. This
	    // prevents accidentally sending in a number that would
	    // be interpretted as a start offset.
	    return typeof encoding === 'string'
	      ? createBuffer(that, size).fill(fill, encoding)
	      : createBuffer(that, size).fill(fill)
	  }
	  return createBuffer(that, size)
	}
	
	/**
	 * Creates a new filled Buffer instance.
	 * alloc(size[, fill[, encoding]])
	 **/
	Buffer.alloc = function (size, fill, encoding) {
	  return alloc(null, size, fill, encoding)
	}
	
	function allocUnsafe (that, size) {
	  assertSize(size)
	  that = createBuffer(that, size < 0 ? 0 : checked(size) | 0)
	  if (!Buffer.TYPED_ARRAY_SUPPORT) {
	    for (var i = 0; i < size; ++i) {
	      that[i] = 0
	    }
	  }
	  return that
	}
	
	/**
	 * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.
	 * */
	Buffer.allocUnsafe = function (size) {
	  return allocUnsafe(null, size)
	}
	/**
	 * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.
	 */
	Buffer.allocUnsafeSlow = function (size) {
	  return allocUnsafe(null, size)
	}
	
	function fromString (that, string, encoding) {
	  if (typeof encoding !== 'string' || encoding === '') {
	    encoding = 'utf8'
	  }
	
	  if (!Buffer.isEncoding(encoding)) {
	    throw new TypeError('"encoding" must be a valid string encoding')
	  }
	
	  var length = byteLength(string, encoding) | 0
	  that = createBuffer(that, length)
	
	  var actual = that.write(string, encoding)
	
	  if (actual !== length) {
	    // Writing a hex string, for example, that contains invalid characters will
	    // cause everything after the first invalid character to be ignored. (e.g.
	    // 'abxxcd' will be treated as 'ab')
	    that = that.slice(0, actual)
	  }
	
	  return that
	}
	
	function fromArrayLike (that, array) {
	  var length = array.length < 0 ? 0 : checked(array.length) | 0
	  that = createBuffer(that, length)
	  for (var i = 0; i < length; i += 1) {
	    that[i] = array[i] & 255
	  }
	  return that
	}
	
	function fromArrayBuffer (that, array, byteOffset, length) {
	  array.byteLength // this throws if `array` is not a valid ArrayBuffer
	
	  if (byteOffset < 0 || array.byteLength < byteOffset) {
	    throw new RangeError('\'offset\' is out of bounds')
	  }
	
	  if (array.byteLength < byteOffset + (length || 0)) {
	    throw new RangeError('\'length\' is out of bounds')
	  }
	
	  if (byteOffset === undefined && length === undefined) {
	    array = new Uint8Array(array)
	  } else if (length === undefined) {
	    array = new Uint8Array(array, byteOffset)
	  } else {
	    array = new Uint8Array(array, byteOffset, length)
	  }
	
	  if (Buffer.TYPED_ARRAY_SUPPORT) {
	    // Return an augmented `Uint8Array` instance, for best performance
	    that = array
	    that.__proto__ = Buffer.prototype
	  } else {
	    // Fallback: Return an object instance of the Buffer class
	    that = fromArrayLike(that, array)
	  }
	  return that
	}
	
	function fromObject (that, obj) {
	  if (Buffer.isBuffer(obj)) {
	    var len = checked(obj.length) | 0
	    that = createBuffer(that, len)
	
	    if (that.length === 0) {
	      return that
	    }
	
	    obj.copy(that, 0, 0, len)
	    return that
	  }
	
	  if (obj) {
	    if ((typeof ArrayBuffer !== 'undefined' &&
	        obj.buffer instanceof ArrayBuffer) || 'length' in obj) {
	      if (typeof obj.length !== 'number' || isnan(obj.length)) {
	        return createBuffer(that, 0)
	      }
	      return fromArrayLike(that, obj)
	    }
	
	    if (obj.type === 'Buffer' && isArray(obj.data)) {
	      return fromArrayLike(that, obj.data)
	    }
	  }
	
	  throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')
	}
	
	function checked (length) {
	  // Note: cannot use `length < kMaxLength()` here because that fails when
	  // length is NaN (which is otherwise coerced to zero.)
	  if (length >= kMaxLength()) {
	    throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
	                         'size: 0x' + kMaxLength().toString(16) + ' bytes')
	  }
	  return length | 0
	}
	
	function SlowBuffer (length) {
	  if (+length != length) { // eslint-disable-line eqeqeq
	    length = 0
	  }
	  return Buffer.alloc(+length)
	}
	
	Buffer.isBuffer = function isBuffer (b) {
	  return !!(b != null && b._isBuffer)
	}
	
	Buffer.compare = function compare (a, b) {
	  if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
	    throw new TypeError('Arguments must be Buffers')
	  }
	
	  if (a === b) return 0
	
	  var x = a.length
	  var y = b.length
	
	  for (var i = 0, len = Math.min(x, y); i < len; ++i) {
	    if (a[i] !== b[i]) {
	      x = a[i]
	      y = b[i]
	      break
	    }
	  }
	
	  if (x < y) return -1
	  if (y < x) return 1
	  return 0
	}
	
	Buffer.isEncoding = function isEncoding (encoding) {
	  switch (String(encoding).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 true
	    default:
	      return false
	  }
	}
	
	Buffer.concat = function concat (list, length) {
	  if (!isArray(list)) {
	    throw new TypeError('"list" argument must be an Array of Buffers')
	  }
	
	  if (list.length === 0) {
	    return Buffer.alloc(0)
	  }
	
	  var i
	  if (length === undefined) {
	    length = 0
	    for (i = 0; i < list.length; ++i) {
	      length += list[i].length
	    }
	  }
	
	  var buffer = Buffer.allocUnsafe(length)
	  var pos = 0
	  for (i = 0; i < list.length; ++i) {
	    var buf = list[i]
	    if (!Buffer.isBuffer(buf)) {
	      throw new TypeError('"list" argument must be an Array of Buffers')
	    }
	    buf.copy(buffer, pos)
	    pos += buf.length
	  }
	  return buffer
	}
	
	function byteLength (string, encoding) {
	  if (Buffer.isBuffer(string)) {
	    return string.length
	  }
	  if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&
	      (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {
	    return string.byteLength
	  }
	  if (typeof string !== 'string') {
	    string = '' + string
	  }
	
	  var len = string.length
	  if (len === 0) return 0
	
	  // Use a for loop to avoid recursion
	  var loweredCase = false
	  for (;;) {
	    switch (encoding) {
	      case 'ascii':
	      case 'latin1':
	      case 'binary':
	        return len
	      case 'utf8':
	      case 'utf-8':
	      case undefined:
	        return utf8ToBytes(string).length
	      case 'ucs2':
	      case 'ucs-2':
	      case 'utf16le':
	      case 'utf-16le':
	        return len * 2
	      case 'hex':
	        return len >>> 1
	      case 'base64':
	        return base64ToBytes(string).length
	      default:
	        if (loweredCase) return utf8ToBytes(string).length // assume utf8
	        encoding = ('' + encoding).toLowerCase()
	        loweredCase = true
	    }
	  }
	}
	Buffer.byteLength = byteLength
	
	function slowToString (encoding, start, end) {
	  var loweredCase = false
	
	  // No need to verify that "this.length <= MAX_UINT32" since it's a read-only
	  // property of a typed array.
	
	  // This behaves neither like String nor Uint8Array in that we set start/end
	  // to their upper/lower bounds if the value passed is out of range.
	  // undefined is handled specially as per ECMA-262 6th Edition,
	  // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.
	  if (start === undefined || start < 0) {
	    start = 0
	  }
	  // Return early if start > this.length. Done here to prevent potential uint32
	  // coercion fail below.
	  if (start > this.length) {
	    return ''
	  }
	
	  if (end === undefined || end > this.length) {
	    end = this.length
	  }
	
	  if (end <= 0) {
	    return ''
	  }
	
	  // Force coersion to uint32. This will also coerce falsey/NaN values to 0.
	  end >>>= 0
	  start >>>= 0
	
	  if (end <= start) {
	    return ''
	  }
	
	  if (!encoding) encoding = 'utf8'
	
	  while (true) {
	    switch (encoding) {
	      case 'hex':
	        return hexSlice(this, start, end)
	
	      case 'utf8':
	      case 'utf-8':
	        return utf8Slice(this, start, end)
	
	      case 'ascii':
	        return asciiSlice(this, start, end)
	
	      case 'latin1':
	      case 'binary':
	        return latin1Slice(this, start, end)
	
	      case 'base64':
	        return base64Slice(this, start, end)
	
	      case 'ucs2':
	      case 'ucs-2':
	      case 'utf16le':
	      case 'utf-16le':
	        return utf16leSlice(this, start, end)
	
	      default:
	        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
	        encoding = (encoding + '').toLowerCase()
	        loweredCase = true
	    }
	  }
	}
	
	// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect
	// Buffer instances.
	Buffer.prototype._isBuffer = true
	
	function swap (b, n, m) {
	  var i = b[n]
	  b[n] = b[m]
	  b[m] = i
	}
	
	Buffer.prototype.swap16 = function swap16 () {
	  var len = this.length
	  if (len % 2 !== 0) {
	    throw new RangeError('Buffer size must be a multiple of 16-bits')
	  }
	  for (var i = 0; i < len; i += 2) {
	    swap(this, i, i + 1)
	  }
	  return this
	}
	
	Buffer.prototype.swap32 = function swap32 () {
	  var len = this.length
	  if (len % 4 !== 0) {
	    throw new RangeError('Buffer size must be a multiple of 32-bits')
	  }
	  for (var i = 0; i < len; i += 4) {
	    swap(this, i, i + 3)
	    swap(this, i + 1, i + 2)
	  }
	  return this
	}
	
	Buffer.prototype.swap64 = function swap64 () {
	  var len = this.length
	  if (len % 8 !== 0) {
	    throw new RangeError('Buffer size must be a multiple of 64-bits')
	  }
	  for (var i = 0; i < len; i += 8) {
	    swap(this, i, i + 7)
	    swap(this, i + 1, i + 6)
	    swap(this, i + 2, i + 5)
	    swap(this, i + 3, i + 4)
	  }
	  return this
	}
	
	Buffer.prototype.toString = function toString () {
	  var length = this.length | 0
	  if (length === 0) return ''
	  if (arguments.length === 0) return utf8Slice(this, 0, length)
	  return slowToString.apply(this, arguments)
	}
	
	Buffer.prototype.equals = function equals (b) {
	  if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
	  if (this === b) return true
	  return Buffer.compare(this, b) === 0
	}
	
	Buffer.prototype.inspect = function inspect () {
	  var str = ''
	  var max = exports.INSPECT_MAX_BYTES
	  if (this.length > 0) {
	    str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
	    if (this.length > max) str += ' ... '
	  }
	  return '<Buffer ' + str + '>'
	}
	
	Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {
	  if (!Buffer.isBuffer(target)) {
	    throw new TypeError('Argument must be a Buffer')
	  }
	
	  if (start === undefined) {
	    start = 0
	  }
	  if (end === undefined) {
	    end = target ? target.length : 0
	  }
	  if (thisStart === undefined) {
	    thisStart = 0
	  }
	  if (thisEnd === undefined) {
	    thisEnd = this.length
	  }
	
	  if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {
	    throw new RangeError('out of range index')
	  }
	
	  if (thisStart >= thisEnd && start >= end) {
	    return 0
	  }
	  if (thisStart >= thisEnd) {
	    return -1
	  }
	  if (start >= end) {
	    return 1
	  }
	
	  start >>>= 0
	  end >>>= 0
	  thisStart >>>= 0
	  thisEnd >>>= 0
	
	  if (this === target) return 0
	
	  var x = thisEnd - thisStart
	  var y = end - start
	  var len = Math.min(x, y)
	
	  var thisCopy = this.slice(thisStart, thisEnd)
	  var targetCopy = target.slice(start, end)
	
	  for (var i = 0; i < len; ++i) {
	    if (thisCopy[i] !== targetCopy[i]) {
	      x = thisCopy[i]
	      y = targetCopy[i]
	      break
	    }
	  }
	
	  if (x < y) return -1
	  if (y < x) return 1
	  return 0
	}
	
	// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,
	// OR the last index of `val` in `buffer` at offset <= `byteOffset`.
	//
	// Arguments:
	// - buffer - a Buffer to search
	// - val - a string, Buffer, or number
	// - byteOffset - an index into `buffer`; will be clamped to an int32
	// - encoding - an optional encoding, relevant is val is a string
	// - dir - true for indexOf, false for lastIndexOf
	function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {
	  // Empty buffer means no match
	  if (buffer.length === 0) return -1
	
	  // Normalize byteOffset
	  if (typeof byteOffset === 'string') {
	    encoding = byteOffset
	    byteOffset = 0
	  } else if (byteOffset > 0x7fffffff) {
	    byteOffset = 0x7fffffff
	  } else if (byteOffset < -0x80000000) {
	    byteOffset = -0x80000000
	  }
	  byteOffset = +byteOffset  // Coerce to Number.
	  if (isNaN(byteOffset)) {
	    // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer
	    byteOffset = dir ? 0 : (buffer.length - 1)
	  }
	
	  // Normalize byteOffset: negative offsets start from the end of the buffer
	  if (byteOffset < 0) byteOffset = buffer.length + byteOffset
	  if (byteOffset >= buffer.length) {
	    if (dir) return -1
	    else byteOffset = buffer.length - 1
	  } else if (byteOffset < 0) {
	    if (dir) byteOffset = 0
	    else return -1
	  }
	
	  // Normalize val
	  if (typeof val === 'string') {
	    val = Buffer.from(val, encoding)
	  }
	
	  // Finally, search either indexOf (if dir is true) or lastIndexOf
	  if (Buffer.isBuffer(val)) {
	    // Special case: looking for empty string/buffer always fails
	    if (val.length === 0) {
	      return -1
	    }
	    return arrayIndexOf(buffer, val, byteOffset, encoding, dir)
	  } else if (typeof val === 'number') {
	    val = val & 0xFF // Search for a byte value [0-255]
	    if (Buffer.TYPED_ARRAY_SUPPORT &&
	        typeof Uint8Array.prototype.indexOf === 'function') {
	      if (dir) {
	        return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)
	      } else {
	        return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)
	      }
	    }
	    return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)
	  }
	
	  throw new TypeError('val must be string, number or Buffer')
	}
	
	function arrayIndexOf (arr, val, byteOffset, encoding, dir) {
	  var indexSize = 1
	  var arrLength = arr.length
	  var valLength = val.length
	
	  if (encoding !== undefined) {
	    encoding = String(encoding).toLowerCase()
	    if (encoding === 'ucs2' || encoding === 'ucs-2' ||
	        encoding === 'utf16le' || encoding === 'utf-16le') {
	      if (arr.length < 2 || val.length < 2) {
	        return -1
	      }
	      indexSize = 2
	      arrLength /= 2
	      valLength /= 2
	      byteOffset /= 2
	    }
	  }
	
	  function read (buf, i) {
	    if (indexSize === 1) {
	      return buf[i]
	    } else {
	      return buf.readUInt16BE(i * indexSize)
	    }
	  }
	
	  var i
	  if (dir) {
	    var foundIndex = -1
	    for (i = byteOffset; i < arrLength; i++) {
	      if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
	        if (foundIndex === -1) foundIndex = i
	        if (i - foundIndex + 1 === valLength) return foundIndex * indexSize
	      } else {
	        if (foundIndex !== -1) i -= i - foundIndex
	        foundIndex = -1
	      }
	    }
	  } else {
	    if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength
	    for (i = byteOffset; i >= 0; i--) {
	      var found = true
	      for (var j = 0; j < valLength; j++) {
	        if (read(arr, i + j) !== read(val, j)) {
	          found = false
	          break
	        }
	      }
	      if (found) return i
	    }
	  }
	
	  return -1
	}
	
	Buffer.prototype.includes = function includes (val, byteOffset, encoding) {
	  return this.indexOf(val, byteOffset, encoding) !== -1
	}
	
	Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {
	  return bidirectionalIndexOf(this, val, byteOffset, encoding, true)
	}
	
	Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {
	  return bidirectionalIndexOf(this, val, byteOffset, encoding, false)
	}
	
	function hexWrite (buf, string, offset, length) {
	  offset = Number(offset) || 0
	  var remaining = buf.length - offset
	  if (!length) {
	    length = remaining
	  } else {
	    length = Number(length)
	    if (length > remaining) {
	      length = remaining
	    }
	  }
	
	  // must be an even number of digits
	  var strLen = string.length
	  if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')
	
	  if (length > strLen / 2) {
	    length = strLen / 2
	  }
	  for (var i = 0; i < length; ++i) {
	    var parsed = parseInt(string.substr(i * 2, 2), 16)
	    if (isNaN(parsed)) return i
	    buf[offset + i] = parsed
	  }
	  return i
	}
	
	function utf8Write (buf, string, offset, length) {
	  return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
	}
	
	function asciiWrite (buf, string, offset, length) {
	  return blitBuffer(asciiToBytes(string), buf, offset, length)
	}
	
	function latin1Write (buf, string, offset, length) {
	  return asciiWrite(buf, string, offset, length)
	}
	
	function base64Write (buf, string, offset, length) {
	  return blitBuffer(base64ToBytes(string), buf, offset, length)
	}
	
	function ucs2Write (buf, string, offset, length) {
	  return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
	}
	
	Buffer.prototype.write = function write (string, offset, length, encoding) {
	  // Buffer#write(string)
	  if (offset === undefined) {
	    encoding = 'utf8'
	    length = this.length
	    offset = 0
	  // Buffer#write(string, encoding)
	  } else if (length === undefined && typeof offset === 'string') {
	    encoding = offset
	    length = this.length
	    offset = 0
	  // Buffer#write(string, offset[, length][, encoding])
	  } else if (isFinite(offset)) {
	    offset = offset | 0
	    if (isFinite(length)) {
	      length = length | 0
	      if (encoding === undefined) encoding = 'utf8'
	    } else {
	      encoding = length
	      length = undefined
	    }
	  // legacy write(string, encoding, offset, length) - remove in v0.13
	  } else {
	    throw new Error(
	      'Buffer.write(string, encoding, offset[, length]) is no longer supported'
	    )
	  }
	
	  var remaining = this.length - offset
	  if (length === undefined || length > remaining) length = remaining
	
	  if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
	    throw new RangeError('Attempt to write outside buffer bounds')
	  }
	
	  if (!encoding) encoding = 'utf8'
	
	  var loweredCase = false
	  for (;;) {
	    switch (encoding) {
	      case 'hex':
	        return hexWrite(this, string, offset, length)
	
	      case 'utf8':
	      case 'utf-8':
	        return utf8Write(this, string, offset, length)
	
	      case 'ascii':
	        return asciiWrite(this, string, offset, length)
	
	      case 'latin1':
	      case 'binary':
	        return latin1Write(this, string, offset, length)
	
	      case 'base64':
	        // Warning: maxLength not taken into account in base64Write
	        return base64Write(this, string, offset, length)
	
	      case 'ucs2':
	      case 'ucs-2':
	      case 'utf16le':
	      case 'utf-16le':
	        return ucs2Write(this, string, offset, length)
	
	      default:
	        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
	        encoding = ('' + encoding).toLowerCase()
	        loweredCase = true
	    }
	  }
	}
	
	Buffer.prototype.toJSON = function toJSON () {
	  return {
	    type: 'Buffer',
	    data: Array.prototype.slice.call(this._arr || this, 0)
	  }
	}
	
	function base64Slice (buf, start, end) {
	  if (start === 0 && end === buf.length) {
	    return base64.fromByteArray(buf)
	  } else {
	    return base64.fromByteArray(buf.slice(start, end))
	  }
	}
	
	function utf8Slice (buf, start, end) {
	  end = Math.min(buf.length, end)
	  var res = []
	
	  var i = start
	  while (i < end) {
	    var firstByte = buf[i]
	    var codePoint = null
	    var bytesPerSequence = (firstByte > 0xEF) ? 4
	      : (firstByte > 0xDF) ? 3
	      : (firstByte > 0xBF) ? 2
	      : 1
	
	    if (i + bytesPerSequence <= end) {
	      var secondByte, thirdByte, fourthByte, tempCodePoint
	
	      switch (bytesPerSequence) {
	        case 1:
	          if (firstByte < 0x80) {
	            codePoint = firstByte
	          }
	          break
	        case 2:
	          secondByte = buf[i + 1]
	          if ((secondByte & 0xC0) === 0x80) {
	            tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
	            if (tempCodePoint > 0x7F) {
	              codePoint = tempCodePoint
	            }
	          }
	          break
	        case 3:
	          secondByte = buf[i + 1]
	          thirdByte = buf[i + 2]
	          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
	            tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
	            if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
	              codePoint = tempCodePoint
	            }
	          }
	          break
	        case 4:
	          secondByte = buf[i + 1]
	          thirdByte = buf[i + 2]
	          fourthByte = buf[i + 3]
	          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
	            tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
	            if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
	              codePoint = tempCodePoint
	            }
	          }
	      }
	    }
	
	    if (codePoint === null) {
	      // we did not generate a valid codePoint so insert a
	      // replacement char (U+FFFD) and advance only 1 byte
	      codePoint = 0xFFFD
	      bytesPerSequence = 1
	    } else if (codePoint > 0xFFFF) {
	      // encode to utf16 (surrogate pair dance)
	      codePoint -= 0x10000
	      res.push(codePoint >>> 10 & 0x3FF | 0xD800)
	      codePoint = 0xDC00 | codePoint & 0x3FF
	    }
	
	    res.push(codePoint)
	    i += bytesPerSequence
	  }
	
	  return decodeCodePointsArray(res)
	}
	
	// Based on http://stackoverflow.com/a/22747272/680742, the browser with
	// the lowest limit is Chrome, with 0x10000 args.
	// We go 1 magnitude less, for safety
	var MAX_ARGUMENTS_LENGTH = 0x1000
	
	function decodeCodePointsArray (codePoints) {
	  var len = codePoints.length
	  if (len <= MAX_ARGUMENTS_LENGTH) {
	    return String.fromCharCode.apply(String, codePoints) // avoid extra slice()
	  }
	
	  // Decode in chunks to avoid "call stack size exceeded".
	  var res = ''
	  var i = 0
	  while (i < len) {
	    res += String.fromCharCode.apply(
	      String,
	      codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)
	    )
	  }
	  return res
	}
	
	function asciiSlice (buf, start, end) {
	  var ret = ''
	  end = Math.min(buf.length, end)
	
	  for (var i = start; i < end; ++i) {
	    ret += String.fromCharCode(buf[i] & 0x7F)
	  }
	  return ret
	}
	
	function latin1Slice (buf, start, end) {
	  var ret = ''
	  end = Math.min(buf.length, end)
	
	  for (var i = start; i < end; ++i) {
	    ret += String.fromCharCode(buf[i])
	  }
	  return ret
	}
	
	function hexSlice (buf, start, end) {
	  var len = buf.length
	
	  if (!start || start < 0) start = 0
	  if (!end || end < 0 || end > len) end = len
	
	  var out = ''
	  for (var i = start; i < end; ++i) {
	    out += toHex(buf[i])
	  }
	  return out
	}
	
	function utf16leSlice (buf, start, end) {
	  var bytes = buf.slice(start, end)
	  var res = ''
	  for (var i = 0; i < bytes.length; i += 2) {
	    res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)
	  }
	  return res
	}
	
	Buffer.prototype.slice = function slice (start, end) {
	  var len = this.length
	  start = ~~start
	  end = end === undefined ? len : ~~end
	
	  if (start < 0) {
	    start += len
	    if (start < 0) start = 0
	  } else if (start > len) {
	    start = len
	  }
	
	  if (end < 0) {
	    end += len
	    if (end < 0) end = 0
	  } else if (end > len) {
	    end = len
	  }
	
	  if (end < start) end = start
	
	  var newBuf
	  if (Buffer.TYPED_ARRAY_SUPPORT) {
	    newBuf = this.subarray(start, end)
	    newBuf.__proto__ = Buffer.prototype
	  } else {
	    var sliceLen = end - start
	    newBuf = new Buffer(sliceLen, undefined)
	    for (var i = 0; i < sliceLen; ++i) {
	      newBuf[i] = this[i + start]
	    }
	  }
	
	  return newBuf
	}
	
	/*
	 * Need to make sure that buffer isn't trying to write out of bounds.
	 */
	function checkOffset (offset, ext, length) {
	  if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
	  if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
	}
	
	Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
	  offset = offset | 0
	  byteLength = byteLength | 0
	  if (!noAssert) checkOffset(offset, byteLength, this.length)
	
	  var val = this[offset]
	  var mul = 1
	  var i = 0
	  while (++i < byteLength && (mul *= 0x100)) {
	    val += this[offset + i] * mul
	  }
	
	  return val
	}
	
	Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
	  offset = offset | 0
	  byteLength = byteLength | 0
	  if (!noAssert) {
	    checkOffset(offset, byteLength, this.length)
	  }
	
	  var val = this[offset + --byteLength]
	  var mul = 1
	  while (byteLength > 0 && (mul *= 0x100)) {
	    val += this[offset + --byteLength] * mul
	  }
	
	  return val
	}
	
	Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
	  if (!noAssert) checkOffset(offset, 1, this.length)
	  return this[offset]
	}
	
	Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
	  if (!noAssert) checkOffset(offset, 2, this.length)
	  return this[offset] | (this[offset + 1] << 8)
	}
	
	Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
	  if (!noAssert) checkOffset(offset, 2, this.length)
	  return (this[offset] << 8) | this[offset + 1]
	}
	
	Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
	  if (!noAssert) checkOffset(offset, 4, this.length)
	
	  return ((this[offset]) |
	      (this[offset + 1] << 8) |
	      (this[offset + 2] << 16)) +
	      (this[offset + 3] * 0x1000000)
	}
	
	Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
	  if (!noAssert) checkOffset(offset, 4, this.length)
	
	  return (this[offset] * 0x1000000) +
	    ((this[offset + 1] << 16) |
	    (this[offset + 2] << 8) |
	    this[offset + 3])
	}
	
	Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
	  offset = offset | 0
	  byteLength = byteLength | 0
	  if (!noAssert) checkOffset(offset, byteLength, this.length)
	
	  var val = this[offset]
	  var mul = 1
	  var i = 0
	  while (++i < byteLength && (mul *= 0x100)) {
	    val += this[offset + i] * mul
	  }
	  mul *= 0x80
	
	  if (val >= mul) val -= Math.pow(2, 8 * byteLength)
	
	  return val
	}
	
	Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
	  offset = offset | 0
	  byteLength = byteLength | 0
	  if (!noAssert) checkOffset(offset, byteLength, this.length)
	
	  var i = byteLength
	  var mul = 1
	  var val = this[offset + --i]
	  while (i > 0 && (mul *= 0x100)) {
	    val += this[offset + --i] * mul
	  }
	  mul *= 0x80
	
	  if (val >= mul) val -= Math.pow(2, 8 * byteLength)
	
	  return val
	}
	
	Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
	  if (!noAssert) checkOffset(offset, 1, this.length)
	  if (!(this[offset] & 0x80)) return (this[offset])
	  return ((0xff - this[offset] + 1) * -1)
	}
	
	Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
	  if (!noAssert) checkOffset(offset, 2, this.length)
	  var val = this[offset] | (this[offset + 1] << 8)
	  return (val & 0x8000) ? val | 0xFFFF0000 : val
	}
	
	Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
	  if (!noAssert) checkOffset(offset, 2, this.length)
	  var val = this[offset + 1] | (this[offset] << 8)
	  return (val & 0x8000) ? val | 0xFFFF0000 : val
	}
	
	Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
	  if (!noAssert) checkOffset(offset, 4, this.length)
	
	  return (this[offset]) |
	    (this[offset + 1] << 8) |
	    (this[offset + 2] << 16) |
	    (this[offset + 3] << 24)
	}
	
	Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
	  if (!noAssert) checkOffset(offset, 4, this.length)
	
	  return (this[offset] << 24) |
	    (this[offset + 1] << 16) |
	    (this[offset + 2] << 8) |
	    (this[offset + 3])
	}
	
	Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
	  if (!noAssert) checkOffset(offset, 4, this.length)
	  return ieee754.read(this, offset, true, 23, 4)
	}
	
	Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
	  if (!noAssert) checkOffset(offset, 4, this.length)
	  return ieee754.read(this, offset, false, 23, 4)
	}
	
	Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
	  if (!noAssert) checkOffset(offset, 8, this.length)
	  return ieee754.read(this, offset, true, 52, 8)
	}
	
	Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
	  if (!noAssert) checkOffset(offset, 8, this.length)
	  return ieee754.read(this, offset, false, 52, 8)
	}
	
	function checkInt (buf, value, offset, ext, max, min) {
	  if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance')
	  if (value > max || value < min) throw new RangeError('"value" argument is out of bounds')
	  if (offset + ext > buf.length) throw new RangeError('Index out of range')
	}
	
	Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
	  value = +value
	  offset = offset | 0
	  byteLength = byteLength | 0
	  if (!noAssert) {
	    var maxBytes = Math.pow(2, 8 * byteLength) - 1
	    checkInt(this, value, offset, byteLength, maxBytes, 0)
	  }
	
	  var mul = 1
	  var i = 0
	  this[offset] = value & 0xFF
	  while (++i < byteLength && (mul *= 0x100)) {
	    this[offset + i] = (value / mul) & 0xFF
	  }
	
	  return offset + byteLength
	}
	
	Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
	  value = +value
	  offset = offset | 0
	  byteLength = byteLength | 0
	  if (!noAssert) {
	    var maxBytes = Math.pow(2, 8 * byteLength) - 1
	    checkInt(this, value, offset, byteLength, maxBytes, 0)
	  }
	
	  var i = byteLength - 1
	  var mul = 1
	  this[offset + i] = value & 0xFF
	  while (--i >= 0 && (mul *= 0x100)) {
	    this[offset + i] = (value / mul) & 0xFF
	  }
	
	  return offset + byteLength
	}
	
	Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
	  value = +value
	  offset = offset | 0
	  if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
	  if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
	  this[offset] = (value & 0xff)
	  return offset + 1
	}
	
	function objectWriteUInt16 (buf, value, offset, littleEndian) {
	  if (value < 0) value = 0xffff + value + 1
	  for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {
	    buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>
	      (littleEndian ? i : 1 - i) * 8
	  }
	}
	
	Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
	  value = +value
	  offset = offset | 0
	  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
	  if (Buffer.TYPED_ARRAY_SUPPORT) {
	    this[offset] = (value & 0xff)
	    this[offset + 1] = (value >>> 8)
	  } else {
	    objectWriteUInt16(this, value, offset, true)
	  }
	  return offset + 2
	}
	
	Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
	  value = +value
	  offset = offset | 0
	  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
	  if (Buffer.TYPED_ARRAY_SUPPORT) {
	    this[offset] = (value >>> 8)
	    this[offset + 1] = (value & 0xff)
	  } else {
	    objectWriteUInt16(this, value, offset, false)
	  }
	  return offset + 2
	}
	
	function objectWriteUInt32 (buf, value, offset, littleEndian) {
	  if (value < 0) value = 0xffffffff + value + 1
	  for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {
	    buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff
	  }
	}
	
	Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
	  value = +value
	  offset = offset | 0
	  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
	  if (Buffer.TYPED_ARRAY_SUPPORT) {
	    this[offset + 3] = (value >>> 24)
	    this[offset + 2] = (value >>> 16)
	    this[offset + 1] = (value >>> 8)
	    this[offset] = (value & 0xff)
	  } else {
	    objectWriteUInt32(this, value, offset, true)
	  }
	  return offset + 4
	}
	
	Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
	  value = +value
	  offset = offset | 0
	  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
	  if (Buffer.TYPED_ARRAY_SUPPORT) {
	    this[offset] = (value >>> 24)
	    this[offset + 1] = (value >>> 16)
	    this[offset + 2] = (value >>> 8)
	    this[offset + 3] = (value & 0xff)
	  } else {
	    objectWriteUInt32(this, value, offset, false)
	  }
	  return offset + 4
	}
	
	Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
	  value = +value
	  offset = offset | 0
	  if (!noAssert) {
	    var limit = Math.pow(2, 8 * byteLength - 1)
	
	    checkInt(this, value, offset, byteLength, limit - 1, -limit)
	  }
	
	  var i = 0
	  var mul = 1
	  var sub = 0
	  this[offset] = value & 0xFF
	  while (++i < byteLength && (mul *= 0x100)) {
	    if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
	      sub = 1
	    }
	    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
	  }
	
	  return offset + byteLength
	}
	
	Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
	  value = +value
	  offset = offset | 0
	  if (!noAssert) {
	    var limit = Math.pow(2, 8 * byteLength - 1)
	
	    checkInt(this, value, offset, byteLength, limit - 1, -limit)
	  }
	
	  var i = byteLength - 1
	  var mul = 1
	  var sub = 0
	  this[offset + i] = value & 0xFF
	  while (--i >= 0 && (mul *= 0x100)) {
	    if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
	      sub = 1
	    }
	    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
	  }
	
	  return offset + byteLength
	}
	
	Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
	  value = +value
	  offset = offset | 0
	  if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
	  if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
	  if (value < 0) value = 0xff + value + 1
	  this[offset] = (value & 0xff)
	  return offset + 1
	}
	
	Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
	  value = +value
	  offset = offset | 0
	  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
	  if (Buffer.TYPED_ARRAY_SUPPORT) {
	    this[offset] = (value & 0xff)
	    this[offset + 1] = (value >>> 8)
	  } else {
	    objectWriteUInt16(this, value, offset, true)
	  }
	  return offset + 2
	}
	
	Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
	  value = +value
	  offset = offset | 0
	  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
	  if (Buffer.TYPED_ARRAY_SUPPORT) {
	    this[offset] = (value >>> 8)
	    this[offset + 1] = (value & 0xff)
	  } else {
	    objectWriteUInt16(this, value, offset, false)
	  }
	  return offset + 2
	}
	
	Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
	  value = +value
	  offset = offset | 0
	  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
	  if (Buffer.TYPED_ARRAY_SUPPORT) {
	    this[offset] = (value & 0xff)
	    this[offset + 1] = (value >>> 8)
	    this[offset + 2] = (value >>> 16)
	    this[offset + 3] = (value >>> 24)
	  } else {
	    objectWriteUInt32(this, value, offset, true)
	  }
	  return offset + 4
	}
	
	Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
	  value = +value
	  offset = offset | 0
	  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
	  if (value < 0) value = 0xffffffff + value + 1
	  if (Buffer.TYPED_ARRAY_SUPPORT) {
	    this[offset] = (value >>> 24)
	    this[offset + 1] = (value >>> 16)
	    this[offset + 2] = (value >>> 8)
	    this[offset + 3] = (value & 0xff)
	  } else {
	    objectWriteUInt32(this, value, offset, false)
	  }
	  return offset + 4
	}
	
	function checkIEEE754 (buf, value, offset, ext, max, min) {
	  if (offset + ext > buf.length) throw new RangeError('Index out of range')
	  if (offset < 0) throw new RangeError('Index out of range')
	}
	
	function writeFloat (buf, value, offset, littleEndian, noAssert) {
	  if (!noAssert) {
	    checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
	  }
	  ieee754.write(buf, value, offset, littleEndian, 23, 4)
	  return offset + 4
	}
	
	Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
	  return writeFloat(this, value, offset, true, noAssert)
	}
	
	Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
	  return writeFloat(this, value, offset, false, noAssert)
	}
	
	function writeDouble (buf, value, offset, littleEndian, noAssert) {
	  if (!noAssert) {
	    checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
	  }
	  ieee754.write(buf, value, offset, littleEndian, 52, 8)
	  return offset + 8
	}
	
	Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
	  return writeDouble(this, value, offset, true, noAssert)
	}
	
	Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
	  return writeDouble(this, value, offset, false, noAssert)
	}
	
	// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
	Buffer.prototype.copy = function copy (target, targetStart, start, end) {
	  if (!start) start = 0
	  if (!end && end !== 0) end = this.length
	  if (targetStart >= target.length) targetStart = target.length
	  if (!targetStart) targetStart = 0
	  if (end > 0 && end < start) end = start
	
	  // Copy 0 bytes; we're done
	  if (end === start) return 0
	  if (target.length === 0 || this.length === 0) return 0
	
	  // Fatal error conditions
	  if (targetStart < 0) {
	    throw new RangeError('targetStart out of bounds')
	  }
	  if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
	  if (end < 0) throw new RangeError('sourceEnd out of bounds')
	
	  // Are we oob?
	  if (end > this.length) end = this.length
	  if (target.length - targetStart < end - start) {
	    end = target.length - targetStart + start
	  }
	
	  var len = end - start
	  var i
	
	  if (this === target && start < targetStart && targetStart < end) {
	    // descending copy from end
	    for (i = len - 1; i >= 0; --i) {
	      target[i + targetStart] = this[i + start]
	    }
	  } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {
	    // ascending copy from start
	    for (i = 0; i < len; ++i) {
	      target[i + targetStart] = this[i + start]
	    }
	  } else {
	    Uint8Array.prototype.set.call(
	      target,
	      this.subarray(start, start + len),
	      targetStart
	    )
	  }
	
	  return len
	}
	
	// Usage:
	//    buffer.fill(number[, offset[, end]])
	//    buffer.fill(buffer[, offset[, end]])
	//    buffer.fill(string[, offset[, end]][, encoding])
	Buffer.prototype.fill = function fill (val, start, end, encoding) {
	  // Handle string cases:
	  if (typeof val === 'string') {
	    if (typeof start === 'string') {
	      encoding = start
	      start = 0
	      end = this.length
	    } else if (typeof end === 'string') {
	      encoding = end
	      end = this.length
	    }
	    if (val.length === 1) {
	      var code = val.charCodeAt(0)
	      if (code < 256) {
	        val = code
	      }
	    }
	    if (encoding !== undefined && typeof encoding !== 'string') {
	      throw new TypeError('encoding must be a string')
	    }
	    if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {
	      throw new TypeError('Unknown encoding: ' + encoding)
	    }
	  } else if (typeof val === 'number') {
	    val = val & 255
	  }
	
	  // Invalid ranges are not set to a default, so can range check early.
	  if (start < 0 || this.length < start || this.length < end) {
	    throw new RangeError('Out of range index')
	  }
	
	  if (end <= start) {
	    return this
	  }
	
	  start = start >>> 0
	  end = end === undefined ? this.length : end >>> 0
	
	  if (!val) val = 0
	
	  var i
	  if (typeof val === 'number') {
	    for (i = start; i < end; ++i) {
	      this[i] = val
	    }
	  } else {
	    var bytes = Buffer.isBuffer(val)
	      ? val
	      : utf8ToBytes(new Buffer(val, encoding).toString())
	    var len = bytes.length
	    for (i = 0; i < end - start; ++i) {
	      this[i + start] = bytes[i % len]
	    }
	  }
	
	  return this
	}
	
	// HELPER FUNCTIONS
	// ================
	
	var INVALID_BASE64_RE = /[^+\/0-9A-Za-z-_]/g
	
	function base64clean (str) {
	  // Node strips out invalid characters like \n and \t from the string, base64-js does not
	  str = stringtrim(str).replace(INVALID_BASE64_RE, '')
	  // Node converts strings with length < 2 to ''
	  if (str.length < 2) return ''
	  // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
	  while (str.length % 4 !== 0) {
	    str = str + '='
	  }
	  return str
	}
	
	function stringtrim (str) {
	  if (str.trim) return str.trim()
	  return str.replace(/^\s+|\s+$/g, '')
	}
	
	function toHex (n) {
	  if (n < 16) return '0' + n.toString(16)
	  return n.toString(16)
	}
	
	function utf8ToBytes (string, units) {
	  units = units || Infinity
	  var codePoint
	  var length = string.length
	  var leadSurrogate = null
	  var bytes = []
	
	  for (var i = 0; i < length; ++i) {
	    codePoint = string.charCodeAt(i)
	
	    // is surrogate component
	    if (codePoint > 0xD7FF && codePoint < 0xE000) {
	      // last char was a lead
	      if (!leadSurrogate) {
	        // no lead yet
	        if (codePoint > 0xDBFF) {
	          // unexpected trail
	          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
	          continue
	        } else if (i + 1 === length) {
	          // unpaired lead
	          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
	          continue
	        }
	
	        // valid lead
	        leadSurrogate = codePoint
	
	        continue
	      }
	
	      // 2 leads in a row
	      if (codePoint < 0xDC00) {
	        if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
	        leadSurrogate = codePoint
	        continue
	      }
	
	      // valid surrogate pair
	      codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000
	    } else if (leadSurrogate) {
	      // valid bmp char, but last char was a lead
	      if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
	    }
	
	    leadSurrogate = null
	
	    // encode utf8
	    if (codePoint < 0x80) {
	      if ((units -= 1) < 0) break
	      bytes.push(codePoint)
	    } else if (codePoint < 0x800) {
	      if ((units -= 2) < 0) break
	      bytes.push(
	        codePoint >> 0x6 | 0xC0,
	        codePoint & 0x3F | 0x80
	      )
	    } else if (codePoint < 0x10000) {
	      if ((units -= 3) < 0) break
	      bytes.push(
	        codePoint >> 0xC | 0xE0,
	        codePoint >> 0x6 & 0x3F | 0x80,
	        codePoint & 0x3F | 0x80
	      )
	    } else if (codePoint < 0x110000) {
	      if ((units -= 4) < 0) break
	      bytes.push(
	        codePoint >> 0x12 | 0xF0,
	        codePoint >> 0xC & 0x3F | 0x80,
	        codePoint >> 0x6 & 0x3F | 0x80,
	        codePoint & 0x3F | 0x80
	      )
	    } else {
	      throw new Error('Invalid code point')
	    }
	  }
	
	  return bytes
	}
	
	function asciiToBytes (str) {
	  var byteArray = []
	  for (var i = 0; i < str.length; ++i) {
	    // Node's code seems to be doing this and not & 0x7F..
	    byteArray.push(str.charCodeAt(i) & 0xFF)
	  }
	  return byteArray
	}
	
	function utf16leToBytes (str, units) {
	  var c, hi, lo
	  var byteArray = []
	  for (var i = 0; i < str.length; ++i) {
	    if ((units -= 2) < 0) break
	
	    c = str.charCodeAt(i)
	    hi = c >> 8
	    lo = c % 256
	    byteArray.push(lo)
	    byteArray.push(hi)
	  }
	
	  return byteArray
	}
	
	function base64ToBytes (str) {
	  return base64.toByteArray(base64clean(str))
	}
	
	function blitBuffer (src, dst, offset, length) {
	  for (var i = 0; i < length; ++i) {
	    if ((i + offset >= dst.length) || (i >= src.length)) break
	    dst[i + offset] = src[i]
	  }
	  return i
	}
	
	function isnan (val) {
	  return val !== val // eslint-disable-line no-self-compare
	}
	
	/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))

/***/ }),
/* 194 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	var at = __webpack_require__(160)(true);
	
	 // `AdvanceStringIndex` abstract operation
	// https://tc39.github.io/ecma262/#sec-advancestringindex
	module.exports = function (S, index, unicode) {
	  return index + (unicode ? at(S, index).length : 1);
	};


/***/ }),
/* 195 */
/***/ (function(module, exports, __webpack_require__) {

	// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)
	'use strict';
	var toObject = __webpack_require__(28);
	var toAbsoluteIndex = __webpack_require__(81);
	var toLength = __webpack_require__(21);
	module.exports = function fill(value /* , start = 0, end = @length */) {
	  var O = toObject(this);
	  var length = toLength(O.length);
	  var aLen = arguments.length;
	  var index = toAbsoluteIndex(aLen > 1 ? arguments[1] : undefined, length);
	  var end = aLen > 2 ? arguments[2] : undefined;
	  var endPos = end === undefined ? length : toAbsoluteIndex(end, length);
	  while (endPos > index) O[index++] = value;
	  return O;
	};


/***/ }),
/* 196 */
/***/ (function(module, exports, __webpack_require__) {

	// 9.4.2.3 ArraySpeciesCreate(originalArray, length)
	var speciesConstructor = __webpack_require__(736);
	
	module.exports = function (original, length) {
	  return new (speciesConstructor(original))(length);
	};


/***/ }),
/* 197 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	var $defineProperty = __webpack_require__(26);
	var createDesc = __webpack_require__(95);
	
	module.exports = function (object, index, value) {
	  if (index in object) $defineProperty.f(object, index, createDesc(0, value));
	  else object[index] = value;
	};


/***/ }),
/* 198 */
/***/ (function(module, exports, __webpack_require__) {

	var isObject = __webpack_require__(15);
	var document = __webpack_require__(9).document;
	// typeof document.createElement is 'object' in old IE
	var is = isObject(document) && isObject(document.createElement);
	module.exports = function (it) {
	  return is ? document.createElement(it) : {};
	};


/***/ }),
/* 199 */
/***/ (function(module, exports) {

	// IE 8- don't enum bug keys
	module.exports = (
	  'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'
	).split(',');


/***/ }),
/* 200 */
/***/ (function(module, exports, __webpack_require__) {

	var MATCH = __webpack_require__(20)('match');
	module.exports = function (KEY) {
	  var re = /./;
	  try {
	    '/./'[KEY](re);
	  } catch (e) {
	    try {
	      re[MATCH] = false;
	      return !'/./'[KEY](re);
	    } catch (f) { /* empty */ }
	  } return true;
	};


/***/ }),
/* 201 */
/***/ (function(module, exports, __webpack_require__) {

	var document = __webpack_require__(9).document;
	module.exports = document && document.documentElement;


/***/ }),
/* 202 */
/***/ (function(module, exports, __webpack_require__) {

	var isObject = __webpack_require__(15);
	var setPrototypeOf = __webpack_require__(211).set;
	module.exports = function (that, target, C) {
	  var S = target.constructor;
	  var P;
	  if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) {
	    setPrototypeOf(that, P);
	  } return that;
	};


/***/ }),
/* 203 */
/***/ (function(module, exports, __webpack_require__) {

	// check on default Array iterator
	var Iterators = __webpack_require__(111);
	var ITERATOR = __webpack_require__(20)('iterator');
	var ArrayProto = Array.prototype;
	
	module.exports = function (it) {
	  return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);
	};


/***/ }),
/* 204 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	var create = __webpack_require__(92);
	var descriptor = __webpack_require__(95);
	var setToStringTag = __webpack_require__(112);
	var IteratorPrototype = {};
	
	// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()
	__webpack_require__(37)(IteratorPrototype, __webpack_require__(20)('iterator'), function () { return this; });
	
	module.exports = function (Constructor, NAME, next) {
	  Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });
	  setToStringTag(Constructor, NAME + ' Iterator');
	};


/***/ }),
/* 205 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	var LIBRARY = __webpack_require__(77);
	var $export = __webpack_require__(3);
	var redefine = __webpack_require__(38);
	var hide = __webpack_require__(37);
	var Iterators = __webpack_require__(111);
	var $iterCreate = __webpack_require__(204);
	var setToStringTag = __webpack_require__(112);
	var getPrototypeOf = __webpack_require__(44);
	var ITERATOR = __webpack_require__(20)('iterator');
	var BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`
	var FF_ITERATOR = '@@iterator';
	var KEYS = 'keys';
	var VALUES = 'values';
	
	var returnThis = function () { return this; };
	
	module.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {
	  $iterCreate(Constructor, NAME, next);
	  var getMethod = function (kind) {
	    if (!BUGGY && kind in proto) return proto[kind];
	    switch (kind) {
	      case KEYS: return function keys() { return new Constructor(this, kind); };
	      case VALUES: return function values() { return new Constructor(this, kind); };
	    } return function entries() { return new Constructor(this, kind); };
	  };
	  var TAG = NAME + ' Iterator';
	  var DEF_VALUES = DEFAULT == VALUES;
	  var VALUES_BUG = false;
	  var proto = Base.prototype;
	  var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];
	  var $default = $native || getMethod(DEFAULT);
	  var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;
	  var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;
	  var methods, key, IteratorPrototype;
	  // Fix native
	  if ($anyNative) {
	    IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));
	    if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {
	      // Set @@toStringTag to native iterators
	      setToStringTag(IteratorPrototype, TAG, true);
	      // fix for some old engines
	      if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis);
	    }
	  }
	  // fix Array#{values, @@iterator}.name in V8 / FF
	  if (DEF_VALUES && $native && $native.name !== VALUES) {
	    VALUES_BUG = true;
	    $default = function values() { return $native.call(this); };
	  }
	  // Define iterator
	  if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {
	    hide(proto, ITERATOR, $default);
	  }
	  // Plug for library
	  Iterators[NAME] = $default;
	  Iterators[TAG] = returnThis;
	  if (DEFAULT) {
	    methods = {
	      values: DEF_VALUES ? $default : getMethod(VALUES),
	      keys: IS_SET ? $default : getMethod(KEYS),
	      entries: $entries
	    };
	    if (FORCED) for (key in methods) {
	      if (!(key in proto)) redefine(proto, key, methods[key]);
	    } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);
	  }
	  return methods;
	};


/***/ }),
/* 206 */
/***/ (function(module, exports) {

	// 20.2.2.14 Math.expm1(x)
	var $expm1 = Math.expm1;
	module.exports = (!$expm1
	  // Old FF bug
	  || $expm1(10) > 22025.465794806719 || $expm1(10) < 22025.4657948067165168
	  // Tor Browser bug
	  || $expm1(-2e-17) != -2e-17
	) ? function expm1(x) {
	  return (x = +x) == 0 ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : Math.exp(x) - 1;
	} : $expm1;


/***/ }),
/* 207 */
/***/ (function(module, exports) {

	// 20.2.2.28 Math.sign(x)
	module.exports = Math.sign || function sign(x) {
	  // eslint-disable-next-line no-self-compare
	  return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1;
	};


/***/ }),
/* 208 */
/***/ (function(module, exports, __webpack_require__) {

	var global = __webpack_require__(9);
	var macrotask = __webpack_require__(216).set;
	var Observer = global.MutationObserver || global.WebKitMutationObserver;
	var process = global.process;
	var Promise = global.Promise;
	var isNode = __webpack_require__(50)(process) == 'process';
	
	module.exports = function () {
	  var head, last, notify;
	
	  var flush = function () {
	    var parent, fn;
	    if (isNode && (parent = process.domain)) parent.exit();
	    while (head) {
	      fn = head.fn;
	      head = head.next;
	      try {
	        fn();
	      } catch (e) {
	        if (head) notify();
	        else last = undefined;
	        throw e;
	      }
	    } last = undefined;
	    if (parent) parent.enter();
	  };
	
	  // Node.js
	  if (isNode) {
	    notify = function () {
	      process.nextTick(flush);
	    };
	  // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339
	  } else if (Observer && !(global.navigator && global.navigator.standalone)) {
	    var toggle = true;
	    var node = document.createTextNode('');
	    new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new
	    notify = function () {
	      node.data = toggle = !toggle;
	    };
	  // environments with maybe non-completely correct, but existent Promise
	  } else if (Promise && Promise.resolve) {
	    // Promise.resolve without an argument throws an error in LG WebOS 2
	    var promise = Promise.resolve(undefined);
	    notify = function () {
	      promise.then(flush);
	    };
	  // for other environments - macrotask based on:
	  // - setImmediate
	  // - MessageChannel
	  // - window.postMessag
	  // - onreadystatechange
	  // - setTimeout
	  } else {
	    notify = function () {
	      // strange IE + webpack dev server bug - use .call(global)
	      macrotask.call(global, flush);
	    };
	  }
	
	  return function (fn) {
	    var task = { fn: fn, next: undefined };
	    if (last) last.next = task;
	    if (!head) {
	      head = task;
	      notify();
	    } last = task;
	  };
	};


/***/ }),
/* 209 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	// 25.4.1.5 NewPromiseCapability(C)
	var aFunction = __webpack_require__(36);
	
	function PromiseCapability(C) {
	  var resolve, reject;
	  this.promise = new C(function ($$resolve, $$reject) {
	    if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');
	    resolve = $$resolve;
	    reject = $$reject;
	  });
	  this.resolve = aFunction(resolve);
	  this.reject = aFunction(reject);
	}
	
	module.exports.f = function (C) {
	  return new PromiseCapability(C);
	};


/***/ }),
/* 210 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	var regexpFlags = __webpack_require__(129);
	
	var nativeExec = RegExp.prototype.exec;
	// This always refers to the native implementation, because the
	// String#replace polyfill uses ./fix-regexp-well-known-symbol-logic.js,
	// which loads this file before patching the method.
	var nativeReplace = String.prototype.replace;
	
	var patchedExec = nativeExec;
	
	var LAST_INDEX = 'lastIndex';
	
	var UPDATES_LAST_INDEX_WRONG = (function () {
	  var re1 = /a/,
	      re2 = /b*/g;
	  nativeExec.call(re1, 'a');
	  nativeExec.call(re2, 'a');
	  return re1[LAST_INDEX] !== 0 || re2[LAST_INDEX] !== 0;
	})();
	
	// nonparticipating capturing group, copied from es5-shim's String#split patch.
	var NPCG_INCLUDED = /()??/.exec('')[1] !== undefined;
	
	var PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED;
	
	if (PATCH) {
	  patchedExec = function exec(str) {
	    var re = this;
	    var lastIndex, reCopy, match, i;
	
	    if (NPCG_INCLUDED) {
	      reCopy = new RegExp('^' + re.source + '$(?!\\s)', regexpFlags.call(re));
	    }
	    if (UPDATES_LAST_INDEX_WRONG) lastIndex = re[LAST_INDEX];
	
	    match = nativeExec.call(re, str);
	
	    if (UPDATES_LAST_INDEX_WRONG && match) {
	      re[LAST_INDEX] = re.global ? match.index + match[0].length : lastIndex;
	    }
	    if (NPCG_INCLUDED && match && match.length > 1) {
	      // Fix browsers whose `exec` methods don't consistently return `undefined`
	      // for NPCG, like IE8. NOTE: This doesn' work for /(.?)?/
	      // eslint-disable-next-line no-loop-func
	      nativeReplace.call(match[0], reCopy, function () {
	        for (i = 1; i < arguments.length - 2; i++) {
	          if (arguments[i] === undefined) match[i] = undefined;
	        }
	      });
	    }
	
	    return match;
	  };
	}
	
	module.exports = patchedExec;


/***/ }),
/* 211 */
/***/ (function(module, exports, __webpack_require__) {

	// Works with __proto__ only. Old v8 can't work with null proto objects.
	/* eslint-disable no-proto */
	var isObject = __webpack_require__(15);
	var anObject = __webpack_require__(6);
	var check = function (O, proto) {
	  anObject(O);
	  if (!isObject(proto) && proto !== null) throw TypeError(proto + ": can't set as prototype!");
	};
	module.exports = {
	  set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line
	    function (test, buggy, set) {
	      try {
	        set = __webpack_require__(52)(Function.call, __webpack_require__(43).f(Object.prototype, '__proto__').set, 2);
	        set(test, []);
	        buggy = !(test instanceof Array);
	      } catch (e) { buggy = true; }
	      return function setPrototypeOf(O, proto) {
	        check(O, proto);
	        if (buggy) O.__proto__ = proto;
	        else set(O, proto);
	        return O;
	      };
	    }({}, false) : undefined),
	  check: check
	};


/***/ }),
/* 212 */
/***/ (function(module, exports, __webpack_require__) {

	var shared = __webpack_require__(132)('keys');
	var uid = __webpack_require__(98);
	module.exports = function (key) {
	  return shared[key] || (shared[key] = uid(key));
	};


/***/ }),
/* 213 */
/***/ (function(module, exports, __webpack_require__) {

	// helper for String#{startsWith, endsWith, includes}
	var isRegExp = __webpack_require__(155);
	var defined = __webpack_require__(59);
	
	module.exports = function (that, searchString, NAME) {
	  if (isRegExp(searchString)) throw TypeError('String#' + NAME + " doesn't accept regex!");
	  return String(defined(that));
	};


/***/ }),
/* 214 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	var toInteger = __webpack_require__(54);
	var defined = __webpack_require__(59);
	
	module.exports = function repeat(count) {
	  var str = String(defined(this));
	  var res = '';
	  var n = toInteger(count);
	  if (n < 0 || n == Infinity) throw RangeError("Count can't be negative");
	  for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) res += str;
	  return res;
	};


/***/ }),
/* 215 */
/***/ (function(module, exports) {

	module.exports = '\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003' +
	  '\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF';


/***/ }),
/* 216 */
/***/ (function(module, exports, __webpack_require__) {

	var ctx = __webpack_require__(52);
	var invoke = __webpack_require__(325);
	var html = __webpack_require__(201);
	var cel = __webpack_require__(198);
	var global = __webpack_require__(9);
	var process = global.process;
	var setTask = global.setImmediate;
	var clearTask = global.clearImmediate;
	var MessageChannel = global.MessageChannel;
	var Dispatch = global.Dispatch;
	var counter = 0;
	var queue = {};
	var ONREADYSTATECHANGE = 'onreadystatechange';
	var defer, channel, port;
	var run = function () {
	  var id = +this;
	  // eslint-disable-next-line no-prototype-builtins
	  if (queue.hasOwnProperty(id)) {
	    var fn = queue[id];
	    delete queue[id];
	    fn();
	  }
	};
	var listener = function (event) {
	  run.call(event.data);
	};
	// Node.js 0.9+ & IE10+ has setImmediate, otherwise:
	if (!setTask || !clearTask) {
	  setTask = function setImmediate(fn) {
	    var args = [];
	    var i = 1;
	    while (arguments.length > i) args.push(arguments[i++]);
	    queue[++counter] = function () {
	      // eslint-disable-next-line no-new-func
	      invoke(typeof fn == 'function' ? fn : Function(fn), args);
	    };
	    defer(counter);
	    return counter;
	  };
	  clearTask = function clearImmediate(id) {
	    delete queue[id];
	  };
	  // Node.js 0.8-
	  if (__webpack_require__(50)(process) == 'process') {
	    defer = function (id) {
	      process.nextTick(ctx(run, id, 1));
	    };
	  // Sphere (JS game engine) Dispatch API
	  } else if (Dispatch && Dispatch.now) {
	    defer = function (id) {
	      Dispatch.now(ctx(run, id, 1));
	    };
	  // Browsers with MessageChannel, includes WebWorkers
	  } else if (MessageChannel) {
	    channel = new MessageChannel();
	    port = channel.port2;
	    channel.port1.onmessage = listener;
	    defer = ctx(port.postMessage, port, 1);
	  // Browsers with postMessage, skip WebWorkers
	  // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'
	  } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {
	    defer = function (id) {
	      global.postMessage(id + '', '*');
	    };
	    global.addEventListener('message', listener, false);
	  // IE8-
	  } else if (ONREADYSTATECHANGE in cel('script')) {
	    defer = function (id) {
	      html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {
	        html.removeChild(this);
	        run.call(id);
	      };
	    };
	  // Rest old browsers
	  } else {
	    defer = function (id) {
	      setTimeout(ctx(run, id, 1), 0);
	    };
	  }
	}
	module.exports = {
	  set: setTask,
	  clear: clearTask
	};


/***/ }),
/* 217 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	var global = __webpack_require__(9);
	var DESCRIPTORS = __webpack_require__(25);
	var LIBRARY = __webpack_require__(77);
	var $typed = __webpack_require__(161);
	var hide = __webpack_require__(37);
	var redefineAll = __webpack_require__(96);
	var fails = __webpack_require__(13);
	var anInstance = __webpack_require__(90);
	var toInteger = __webpack_require__(54);
	var toLength = __webpack_require__(21);
	var toIndex = __webpack_require__(343);
	var gOPN = __webpack_require__(93).f;
	var dP = __webpack_require__(26).f;
	var arrayFill = __webpack_require__(195);
	var setToStringTag = __webpack_require__(112);
	var ARRAY_BUFFER = 'ArrayBuffer';
	var DATA_VIEW = 'DataView';
	var PROTOTYPE = 'prototype';
	var WRONG_LENGTH = 'Wrong length!';
	var WRONG_INDEX = 'Wrong index!';
	var $ArrayBuffer = global[ARRAY_BUFFER];
	var $DataView = global[DATA_VIEW];
	var Math = global.Math;
	var RangeError = global.RangeError;
	// eslint-disable-next-line no-shadow-restricted-names
	var Infinity = global.Infinity;
	var BaseBuffer = $ArrayBuffer;
	var abs = Math.abs;
	var pow = Math.pow;
	var floor = Math.floor;
	var log = Math.log;
	var LN2 = Math.LN2;
	var BUFFER = 'buffer';
	var BYTE_LENGTH = 'byteLength';
	var BYTE_OFFSET = 'byteOffset';
	var $BUFFER = DESCRIPTORS ? '_b' : BUFFER;
	var $LENGTH = DESCRIPTORS ? '_l' : BYTE_LENGTH;
	var $OFFSET = DESCRIPTORS ? '_o' : BYTE_OFFSET;
	
	// IEEE754 conversions based on https://github.com/feross/ieee754
	function packIEEE754(value, mLen, nBytes) {
	  var buffer = new Array(nBytes);
	  var eLen = nBytes * 8 - mLen - 1;
	  var eMax = (1 << eLen) - 1;
	  var eBias = eMax >> 1;
	  var rt = mLen === 23 ? pow(2, -24) - pow(2, -77) : 0;
	  var i = 0;
	  var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0;
	  var e, m, c;
	  value = abs(value);
	  // eslint-disable-next-line no-self-compare
	  if (value != value || value === Infinity) {
	    // eslint-disable-next-line no-self-compare
	    m = value != value ? 1 : 0;
	    e = eMax;
	  } else {
	    e = floor(log(value) / LN2);
	    if (value * (c = pow(2, -e)) < 1) {
	      e--;
	      c *= 2;
	    }
	    if (e + eBias >= 1) {
	      value += rt / c;
	    } else {
	      value += rt * 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) * pow(2, mLen);
	      e = e + eBias;
	    } else {
	      m = value * pow(2, eBias - 1) * pow(2, mLen);
	      e = 0;
	    }
	  }
	  for (; mLen >= 8; buffer[i++] = m & 255, m /= 256, mLen -= 8);
	  e = e << mLen | m;
	  eLen += mLen;
	  for (; eLen > 0; buffer[i++] = e & 255, e /= 256, eLen -= 8);
	  buffer[--i] |= s * 128;
	  return buffer;
	}
	function unpackIEEE754(buffer, mLen, nBytes) {
	  var eLen = nBytes * 8 - mLen - 1;
	  var eMax = (1 << eLen) - 1;
	  var eBias = eMax >> 1;
	  var nBits = eLen - 7;
	  var i = nBytes - 1;
	  var s = buffer[i--];
	  var e = s & 127;
	  var m;
	  s >>= 7;
	  for (; nBits > 0; e = e * 256 + buffer[i], i--, nBits -= 8);
	  m = e & (1 << -nBits) - 1;
	  e >>= -nBits;
	  nBits += mLen;
	  for (; nBits > 0; m = m * 256 + buffer[i], i--, nBits -= 8);
	  if (e === 0) {
	    e = 1 - eBias;
	  } else if (e === eMax) {
	    return m ? NaN : s ? -Infinity : Infinity;
	  } else {
	    m = m + pow(2, mLen);
	    e = e - eBias;
	  } return (s ? -1 : 1) * m * pow(2, e - mLen);
	}
	
	function unpackI32(bytes) {
	  return bytes[3] << 24 | bytes[2] << 16 | bytes[1] << 8 | bytes[0];
	}
	function packI8(it) {
	  return [it & 0xff];
	}
	function packI16(it) {
	  return [it & 0xff, it >> 8 & 0xff];
	}
	function packI32(it) {
	  return [it & 0xff, it >> 8 & 0xff, it >> 16 & 0xff, it >> 24 & 0xff];
	}
	function packF64(it) {
	  return packIEEE754(it, 52, 8);
	}
	function packF32(it) {
	  return packIEEE754(it, 23, 4);
	}
	
	function addGetter(C, key, internal) {
	  dP(C[PROTOTYPE], key, { get: function () { return this[internal]; } });
	}
	
	function get(view, bytes, index, isLittleEndian) {
	  var numIndex = +index;
	  var intIndex = toIndex(numIndex);
	  if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);
	  var store = view[$BUFFER]._b;
	  var start = intIndex + view[$OFFSET];
	  var pack = store.slice(start, start + bytes);
	  return isLittleEndian ? pack : pack.reverse();
	}
	function set(view, bytes, index, conversion, value, isLittleEndian) {
	  var numIndex = +index;
	  var intIndex = toIndex(numIndex);
	  if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);
	  var store = view[$BUFFER]._b;
	  var start = intIndex + view[$OFFSET];
	  var pack = conversion(+value);
	  for (var i = 0; i < bytes; i++) store[start + i] = pack[isLittleEndian ? i : bytes - i - 1];
	}
	
	if (!$typed.ABV) {
	  $ArrayBuffer = function ArrayBuffer(length) {
	    anInstance(this, $ArrayBuffer, ARRAY_BUFFER);
	    var byteLength = toIndex(length);
	    this._b = arrayFill.call(new Array(byteLength), 0);
	    this[$LENGTH] = byteLength;
	  };
	
	  $DataView = function DataView(buffer, byteOffset, byteLength) {
	    anInstance(this, $DataView, DATA_VIEW);
	    anInstance(buffer, $ArrayBuffer, DATA_VIEW);
	    var bufferLength = buffer[$LENGTH];
	    var offset = toInteger(byteOffset);
	    if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset!');
	    byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);
	    if (offset + byteLength > bufferLength) throw RangeError(WRONG_LENGTH);
	    this[$BUFFER] = buffer;
	    this[$OFFSET] = offset;
	    this[$LENGTH] = byteLength;
	  };
	
	  if (DESCRIPTORS) {
	    addGetter($ArrayBuffer, BYTE_LENGTH, '_l');
	    addGetter($DataView, BUFFER, '_b');
	    addGetter($DataView, BYTE_LENGTH, '_l');
	    addGetter($DataView, BYTE_OFFSET, '_o');
	  }
	
	  redefineAll($DataView[PROTOTYPE], {
	    getInt8: function getInt8(byteOffset) {
	      return get(this, 1, byteOffset)[0] << 24 >> 24;
	    },
	    getUint8: function getUint8(byteOffset) {
	      return get(this, 1, byteOffset)[0];
	    },
	    getInt16: function getInt16(byteOffset /* , littleEndian */) {
	      var bytes = get(this, 2, byteOffset, arguments[1]);
	      return (bytes[1] << 8 | bytes[0]) << 16 >> 16;
	    },
	    getUint16: function getUint16(byteOffset /* , littleEndian */) {
	      var bytes = get(this, 2, byteOffset, arguments[1]);
	      return bytes[1] << 8 | bytes[0];
	    },
	    getInt32: function getInt32(byteOffset /* , littleEndian */) {
	      return unpackI32(get(this, 4, byteOffset, arguments[1]));
	    },
	    getUint32: function getUint32(byteOffset /* , littleEndian */) {
	      return unpackI32(get(this, 4, byteOffset, arguments[1])) >>> 0;
	    },
	    getFloat32: function getFloat32(byteOffset /* , littleEndian */) {
	      return unpackIEEE754(get(this, 4, byteOffset, arguments[1]), 23, 4);
	    },
	    getFloat64: function getFloat64(byteOffset /* , littleEndian */) {
	      return unpackIEEE754(get(this, 8, byteOffset, arguments[1]), 52, 8);
	    },
	    setInt8: function setInt8(byteOffset, value) {
	      set(this, 1, byteOffset, packI8, value);
	    },
	    setUint8: function setUint8(byteOffset, value) {
	      set(this, 1, byteOffset, packI8, value);
	    },
	    setInt16: function setInt16(byteOffset, value /* , littleEndian */) {
	      set(this, 2, byteOffset, packI16, value, arguments[2]);
	    },
	    setUint16: function setUint16(byteOffset, value /* , littleEndian */) {
	      set(this, 2, byteOffset, packI16, value, arguments[2]);
	    },
	    setInt32: function setInt32(byteOffset, value /* , littleEndian */) {
	      set(this, 4, byteOffset, packI32, value, arguments[2]);
	    },
	    setUint32: function setUint32(byteOffset, value /* , littleEndian */) {
	      set(this, 4, byteOffset, packI32, value, arguments[2]);
	    },
	    setFloat32: function setFloat32(byteOffset, value /* , littleEndian */) {
	      set(this, 4, byteOffset, packF32, value, arguments[2]);
	    },
	    setFloat64: function setFloat64(byteOffset, value /* , littleEndian */) {
	      set(this, 8, byteOffset, packF64, value, arguments[2]);
	    }
	  });
	} else {
	  if (!fails(function () {
	    $ArrayBuffer(1);
	  }) || !fails(function () {
	    new $ArrayBuffer(-1); // eslint-disable-line no-new
	  }) || fails(function () {
	    new $ArrayBuffer(); // eslint-disable-line no-new
	    new $ArrayBuffer(1.5); // eslint-disable-line no-new
	    new $ArrayBuffer(NaN); // eslint-disable-line no-new
	    return $ArrayBuffer.name != ARRAY_BUFFER;
	  })) {
	    $ArrayBuffer = function ArrayBuffer(length) {
	      anInstance(this, $ArrayBuffer);
	      return new BaseBuffer(toIndex(length));
	    };
	    var ArrayBufferProto = $ArrayBuffer[PROTOTYPE] = BaseBuffer[PROTOTYPE];
	    for (var keys = gOPN(BaseBuffer), j = 0, key; keys.length > j;) {
	      if (!((key = keys[j++]) in $ArrayBuffer)) hide($ArrayBuffer, key, BaseBuffer[key]);
	    }
	    if (!LIBRARY) ArrayBufferProto.constructor = $ArrayBuffer;
	  }
	  // iOS Safari 7.x bug
	  var view = new $DataView(new $ArrayBuffer(2));
	  var $setInt8 = $DataView[PROTOTYPE].setInt8;
	  view.setInt8(0, 2147483648);
	  view.setInt8(1, 2147483649);
	  if (view.getInt8(0) || !view.getInt8(1)) redefineAll($DataView[PROTOTYPE], {
	    setInt8: function setInt8(byteOffset, value) {
	      $setInt8.call(this, byteOffset, value << 24 >> 24);
	    },
	    setUint8: function setUint8(byteOffset, value) {
	      $setInt8.call(this, byteOffset, value << 24 >> 24);
	    }
	  }, true);
	}
	setToStringTag($ArrayBuffer, ARRAY_BUFFER);
	setToStringTag($DataView, DATA_VIEW);
	hide($DataView[PROTOTYPE], $typed.VIEW, true);
	exports[ARRAY_BUFFER] = $ArrayBuffer;
	exports[DATA_VIEW] = $DataView;


/***/ }),
/* 218 */
/***/ (function(module, exports, __webpack_require__) {

	var global = __webpack_require__(9);
	var core = __webpack_require__(51);
	var LIBRARY = __webpack_require__(77);
	var wksExt = __webpack_require__(344);
	var defineProperty = __webpack_require__(26).f;
	module.exports = function (name) {
	  var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});
	  if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });
	};


/***/ }),
/* 219 */
/***/ (function(module, exports, __webpack_require__) {

	var classof = __webpack_require__(110);
	var ITERATOR = __webpack_require__(20)('iterator');
	var Iterators = __webpack_require__(111);
	module.exports = __webpack_require__(51).getIteratorMethod = function (it) {
	  if (it != undefined) return it[ITERATOR]
	    || it['@@iterator']
	    || Iterators[classof(it)];
	};


/***/ }),
/* 220 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	var addToUnscopables = __webpack_require__(76);
	var step = __webpack_require__(328);
	var Iterators = __webpack_require__(111);
	var toIObject = __webpack_require__(45);
	
	// 22.1.3.4 Array.prototype.entries()
	// 22.1.3.13 Array.prototype.keys()
	// 22.1.3.29 Array.prototype.values()
	// 22.1.3.30 Array.prototype[@@iterator]()
	module.exports = __webpack_require__(205)(Array, 'Array', function (iterated, kind) {
	  this._t = toIObject(iterated); // target
	  this._i = 0;                   // next index
	  this._k = kind;                // kind
	// 22.1.5.2.1 %ArrayIteratorPrototype%.next()
	}, function () {
	  var O = this._t;
	  var kind = this._k;
	  var index = this._i++;
	  if (!O || index >= O.length) {
	    this._t = undefined;
	    return step(1);
	  }
	  if (kind == 'keys') return step(0, index);
	  if (kind == 'values') return step(0, O[index]);
	  return step(0, [index, O[index]]);
	}, 'values');
	
	// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)
	Iterators.Arguments = Iterators.Array;
	
	addToUnscopables('keys');
	addToUnscopables('values');
	addToUnscopables('entries');


/***/ }),
/* 221 */
/***/ (function(module, exports, __webpack_require__) {

	"use strict";
	
	var _undefined = __webpack_require__(972)(); // Support ES3 engines
	
	module.exports = function (val) { return val !== _undefined && val !== null; };


/***/ }),
/* 222 */
/***/ (function(module, exports, __webpack_require__) {

	var Handlebars = __webpack_require__(5);
	function __default(obj) { return obj && (obj.__esModule ? obj["default"] : obj); }
	module.exports = (Handlebars["default"] || Handlebars).template({"1":function(container,depth0,helpers,partials,data) {
	    var helper, lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return "\n  <published>"
	    + container.escapeExpression(((helper = (helper = lookupProperty(helpers,"date") || (depth0 != null ? lookupProperty(depth0,"date") : depth0)) != null ? helper : container.hooks.helperMissing),(typeof helper === "function" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{"name":"date","hash":{},"data":data,"loc":{"start":{"line":3,"column":13},"end":{"line":3,"column":21}}}) : helper)))
	    + "</published>";
	},"3":function(container,depth0,helpers,partials,data) {
	    var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return "  <file name=\""
	    + alias2(alias1((depth0 != null ? lookupProperty(depth0,"name") : depth0), depth0))
	    + "\">"
	    + ((stack1 = lookupProperty(helpers,"if").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,"size") : depth0),{"name":"if","hash":{},"fn":container.program(4, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":5,"column":29},"end":{"line":6,"column":37}}})) != null ? stack1 : "")
	    + "\n    <url priority=\"1\">"
	    + alias2(alias1((depth0 != null ? lookupProperty(depth0,"href") : depth0), depth0))
	    + "</url>\n  </file>\n";
	},"4":function(container,depth0,helpers,partials,data) {
	    var lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return "\n    <size>"
	    + container.escapeExpression(container.lambda((depth0 != null ? lookupProperty(depth0,"size") : depth0), depth0))
	    + "</size>";
	},"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) {
	    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<metalink xmlns=\"urn:ietf:params:xml:ns:metalink\">"
	    + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"date") : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":2,"column":50},"end":{"line":3,"column":40}}})) != null ? stack1 : "")
	    + "\n"
	    + ((stack1 = lookupProperty(helpers,"each").call(alias1,(depth0 != null ? lookupProperty(depth0,"items") : depth0),{"name":"each","hash":{},"fn":container.program(3, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":4,"column":0},"end":{"line":9,"column":9}}})) != null ? stack1 : "")
	    + "</metalink>\n";
	},"useData":true});

/***/ }),
/* 223 */
/***/ (function(module, exports, __webpack_require__) {

	var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!
	 * jQuery UI Widget 1.12.1
	 * http://jqueryui.com
	 *
	 * Copyright jQuery Foundation and other contributors
	 * Released under the MIT license.
	 * http://jquery.org/license
	 */
	
	//>>label: Widget
	//>>group: Core
	//>>description: Provides a factory for creating stateful widgets with a common API.
	//>>docs: http://api.jqueryui.com/jQuery.widget/
	//>>demos: http://jqueryui.com/widget/
	
	( function( factory ) {
		if ( true ) {
	
			// AMD. Register as an anonymous module.
			!(__WEBPACK_AMD_DEFINE_ARRAY__ = [ __webpack_require__(12), __webpack_require__(114) ], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
		} else {
	
			// Browser globals
			factory( jQuery );
		}
	}( function( $ ) {
	
	var widgetUuid = 0;
	var widgetSlice = Array.prototype.slice;
	
	$.cleanData = ( function( orig ) {
		return function( elems ) {
			var events, elem, i;
			for ( i = 0; ( elem = elems[ i ] ) != null; i++ ) {
				try {
	
					// Only trigger remove when necessary to save time
					events = $._data( elem, "events" );
					if ( events && events.remove ) {
						$( elem ).triggerHandler( "remove" );
					}
	
				// Http://bugs.jquery.com/ticket/8235
				} catch ( e ) {}
			}
			orig( elems );
		};
	} )( $.cleanData );
	
	$.widget = function( name, base, prototype ) {
		var existingConstructor, constructor, basePrototype;
	
		// ProxiedPrototype allows the provided prototype to remain unmodified
		// so that it can be used as a mixin for multiple widgets (#8876)
		var proxiedPrototype = {};
	
		var namespace = name.split( "." )[ 0 ];
		name = name.split( "." )[ 1 ];
		var fullName = namespace + "-" + name;
	
		if ( !prototype ) {
			prototype = base;
			base = $.Widget;
		}
	
		if ( $.isArray( prototype ) ) {
			prototype = $.extend.apply( null, [ {} ].concat( prototype ) );
		}
	
		// Create selector for plugin
		$.expr[ ":" ][ fullName.toLowerCase() ] = function( elem ) {
			return !!$.data( elem, fullName );
		};
	
		$[ namespace ] = $[ namespace ] || {};
		existingConstructor = $[ namespace ][ name ];
		constructor = $[ namespace ][ name ] = function( options, element ) {
	
			// Allow instantiation without "new" keyword
			if ( !this._createWidget ) {
				return new constructor( options, element );
			}
	
			// Allow instantiation without initializing for simple inheritance
			// must use "new" keyword (the code above always passes args)
			if ( arguments.length ) {
				this._createWidget( options, element );
			}
		};
	
		// Extend with the existing constructor to carry over any static properties
		$.extend( constructor, existingConstructor, {
			version: prototype.version,
	
			// Copy the object used to create the prototype in case we need to
			// redefine the widget later
			_proto: $.extend( {}, prototype ),
	
			// Track widgets that inherit from this widget in case this widget is
			// redefined after a widget inherits from it
			_childConstructors: []
		} );
	
		basePrototype = new base();
	
		// We need to make the options hash a property directly on the new instance
		// otherwise we'll modify the options hash on the prototype that we're
		// inheriting from
		basePrototype.options = $.widget.extend( {}, basePrototype.options );
		$.each( prototype, function( prop, value ) {
			if ( !$.isFunction( value ) ) {
				proxiedPrototype[ prop ] = value;
				return;
			}
			proxiedPrototype[ prop ] = ( function() {
				function _super() {
					return base.prototype[ prop ].apply( this, arguments );
				}
	
				function _superApply( args ) {
					return base.prototype[ prop ].apply( this, args );
				}
	
				return function() {
					var __super = this._super;
					var __superApply = this._superApply;
					var returnValue;
	
					this._super = _super;
					this._superApply = _superApply;
	
					returnValue = value.apply( this, arguments );
	
					this._super = __super;
					this._superApply = __superApply;
	
					return returnValue;
				};
			} )();
		} );
		constructor.prototype = $.widget.extend( basePrototype, {
	
			// TODO: remove support for widgetEventPrefix
			// always use the name + a colon as the prefix, e.g., draggable:start
			// don't prefix for widgets that aren't DOM-based
			widgetEventPrefix: existingConstructor ? ( basePrototype.widgetEventPrefix || name ) : name
		}, proxiedPrototype, {
			constructor: constructor,
			namespace: namespace,
			widgetName: name,
			widgetFullName: fullName
		} );
	
		// If this widget is being redefined then we need to find all widgets that
		// are inheriting from it and redefine all of them so that they inherit from
		// the new version of this widget. We're essentially trying to replace one
		// level in the prototype chain.
		if ( existingConstructor ) {
			$.each( existingConstructor._childConstructors, function( i, child ) {
				var childPrototype = child.prototype;
	
				// Redefine the child widget using the same prototype that was
				// originally used, but inherit from the new version of the base
				$.widget( childPrototype.namespace + "." + childPrototype.widgetName, constructor,
					child._proto );
			} );
	
			// Remove the list of existing child constructors from the old constructor
			// so the old child constructors can be garbage collected
			delete existingConstructor._childConstructors;
		} else {
			base._childConstructors.push( constructor );
		}
	
		$.widget.bridge( name, constructor );
	
		return constructor;
	};
	
	$.widget.extend = function( target ) {
		var input = widgetSlice.call( arguments, 1 );
		var inputIndex = 0;
		var inputLength = input.length;
		var key;
		var value;
	
		for ( ; inputIndex < inputLength; inputIndex++ ) {
			for ( key in input[ inputIndex ] ) {
				value = input[ inputIndex ][ key ];
				if ( input[ inputIndex ].hasOwnProperty( key ) && value !== undefined ) {
	
					// Clone objects
					if ( $.isPlainObject( value ) ) {
						target[ key ] = $.isPlainObject( target[ key ] ) ?
							$.widget.extend( {}, target[ key ], value ) :
	
							// Don't extend strings, arrays, etc. with objects
							$.widget.extend( {}, value );
	
					// Copy everything else by reference
					} else {
						target[ key ] = value;
					}
				}
			}
		}
		return target;
	};
	
	$.widget.bridge = function( name, object ) {
		var fullName = object.prototype.widgetFullName || name;
		$.fn[ name ] = function( options ) {
			var isMethodCall = typeof options === "string";
			var args = widgetSlice.call( arguments, 1 );
			var returnValue = this;
	
			if ( isMethodCall ) {
	
				// If this is an empty collection, we need to have the instance method
				// return undefined instead of the jQuery instance
				if ( !this.length && options === "instance" ) {
					returnValue = undefined;
				} else {
					this.each( function() {
						var methodValue;
						var instance = $.data( this, fullName );
	
						if ( options === "instance" ) {
							returnValue = instance;
							return false;
						}
	
						if ( !instance ) {
							return $.error( "cannot call methods on " + name +
								" prior to initialization; " +
								"attempted to call method '" + options + "'" );
						}
	
						if ( !$.isFunction( instance[ options ] ) || options.charAt( 0 ) === "_" ) {
							return $.error( "no such method '" + options + "' for " + name +
								" widget instance" );
						}
	
						methodValue = instance[ options ].apply( instance, args );
	
						if ( methodValue !== instance && methodValue !== undefined ) {
							returnValue = methodValue && methodValue.jquery ?
								returnValue.pushStack( methodValue.get() ) :
								methodValue;
							return false;
						}
					} );
				}
			} else {
	
				// Allow multiple hashes to be passed on init
				if ( args.length ) {
					options = $.widget.extend.apply( null, [ options ].concat( args ) );
				}
	
				this.each( function() {
					var instance = $.data( this, fullName );
					if ( instance ) {
						instance.option( options || {} );
						if ( instance._init ) {
							instance._init();
						}
					} else {
						$.data( this, fullName, new object( options, this ) );
					}
				} );
			}
	
			return returnValue;
		};
	};
	
	$.Widget = function( /* options, element */ ) {};
	$.Widget._childConstructors = [];
	
	$.Widget.prototype = {
		widgetName: "widget",
		widgetEventPrefix: "",
		defaultElement: "<div>",
	
		options: {
			classes: {},
			disabled: false,
	
			// Callbacks
			create: null
		},
	
		_createWidget: function( options, element ) {
			element = $( element || this.defaultElement || this )[ 0 ];
			this.element = $( element );
			this.uuid = widgetUuid++;
			this.eventNamespace = "." + this.widgetName + this.uuid;
	
			this.bindings = $();
			this.hoverable = $();
			this.focusable = $();
			this.classesElementLookup = {};
	
			if ( element !== this ) {
				$.data( element, this.widgetFullName, this );
				this._on( true, this.element, {
					remove: function( event ) {
						if ( event.target === element ) {
							this.destroy();
						}
					}
				} );
				this.document = $( element.style ?
	
					// Element within the document
					element.ownerDocument :
	
					// Element is window or document
					element.document || element );
				this.window = $( this.document[ 0 ].defaultView || this.document[ 0 ].parentWindow );
			}
	
			this.options = $.widget.extend( {},
				this.options,
				this._getCreateOptions(),
				options );
	
			this._create();
	
			if ( this.options.disabled ) {
				this._setOptionDisabled( this.options.disabled );
			}
	
			this._trigger( "create", null, this._getCreateEventData() );
			this._init();
		},
	
		_getCreateOptions: function() {
			return {};
		},
	
		_getCreateEventData: $.noop,
	
		_create: $.noop,
	
		_init: $.noop,
	
		destroy: function() {
			var that = this;
	
			this._destroy();
			$.each( this.classesElementLookup, function( key, value ) {
				that._removeClass( value, key );
			} );
	
			// We can probably remove the unbind calls in 2.0
			// all event bindings should go through this._on()
			this.element
				.off( this.eventNamespace )
				.removeData( this.widgetFullName );
			this.widget()
				.off( this.eventNamespace )
				.removeAttr( "aria-disabled" );
	
			// Clean up events and states
			this.bindings.off( this.eventNamespace );
		},
	
		_destroy: $.noop,
	
		widget: function() {
			return this.element;
		},
	
		option: function( key, value ) {
			var options = key;
			var parts;
			var curOption;
			var i;
	
			if ( arguments.length === 0 ) {
	
				// Don't return a reference to the internal hash
				return $.widget.extend( {}, this.options );
			}
	
			if ( typeof key === "string" ) {
	
				// Handle nested keys, e.g., "foo.bar" => { foo: { bar: ___ } }
				options = {};
				parts = key.split( "." );
				key = parts.shift();
				if ( parts.length ) {
					curOption = options[ key ] = $.widget.extend( {}, this.options[ key ] );
					for ( i = 0; i < parts.length - 1; i++ ) {
						curOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {};
						curOption = curOption[ parts[ i ] ];
					}
					key = parts.pop();
					if ( arguments.length === 1 ) {
						return curOption[ key ] === undefined ? null : curOption[ key ];
					}
					curOption[ key ] = value;
				} else {
					if ( arguments.length === 1 ) {
						return this.options[ key ] === undefined ? null : this.options[ key ];
					}
					options[ key ] = value;
				}
			}
	
			this._setOptions( options );
	
			return this;
		},
	
		_setOptions: function( options ) {
			var key;
	
			for ( key in options ) {
				this._setOption( key, options[ key ] );
			}
	
			return this;
		},
	
		_setOption: function( key, value ) {
			if ( key === "classes" ) {
				this._setOptionClasses( value );
			}
	
			this.options[ key ] = value;
	
			if ( key === "disabled" ) {
				this._setOptionDisabled( value );
			}
	
			return this;
		},
	
		_setOptionClasses: function( value ) {
			var classKey, elements, currentElements;
	
			for ( classKey in value ) {
				currentElements = this.classesElementLookup[ classKey ];
				if ( value[ classKey ] === this.options.classes[ classKey ] ||
						!currentElements ||
						!currentElements.length ) {
					continue;
				}
	
				// We are doing this to create a new jQuery object because the _removeClass() call
				// on the next line is going to destroy the reference to the current elements being
				// tracked. We need to save a copy of this collection so that we can add the new classes
				// below.
				elements = $( currentElements.get() );
				this._removeClass( currentElements, classKey );
	
				// We don't use _addClass() here, because that uses this.options.classes
				// for generating the string of classes. We want to use the value passed in from
				// _setOption(), this is the new value of the classes option which was passed to
				// _setOption(). We pass this value directly to _classes().
				elements.addClass( this._classes( {
					element: elements,
					keys: classKey,
					classes: value,
					add: true
				} ) );
			}
		},
	
		_setOptionDisabled: function( value ) {
			this._toggleClass( this.widget(), this.widgetFullName + "-disabled", null, !!value );
	
			// If the widget is becoming disabled, then nothing is interactive
			if ( value ) {
				this._removeClass( this.hoverable, null, "ui-state-hover" );
				this._removeClass( this.focusable, null, "ui-state-focus" );
			}
		},
	
		enable: function() {
			return this._setOptions( { disabled: false } );
		},
	
		disable: function() {
			return this._setOptions( { disabled: true } );
		},
	
		_classes: function( options ) {
			var full = [];
			var that = this;
	
			options = $.extend( {
				element: this.element,
				classes: this.options.classes || {}
			}, options );
	
			function processClassString( classes, checkOption ) {
				var current, i;
				for ( i = 0; i < classes.length; i++ ) {
					current = that.classesElementLookup[ classes[ i ] ] || $();
					if ( options.add ) {
						current = $( $.unique( current.get().concat( options.element.get() ) ) );
					} else {
						current = $( current.not( options.element ).get() );
					}
					that.classesElementLookup[ classes[ i ] ] = current;
					full.push( classes[ i ] );
					if ( checkOption && options.classes[ classes[ i ] ] ) {
						full.push( options.classes[ classes[ i ] ] );
					}
				}
			}
	
			this._on( options.element, {
				"remove": "_untrackClassesElement"
			} );
	
			if ( options.keys ) {
				processClassString( options.keys.match( /\S+/g ) || [], true );
			}
			if ( options.extra ) {
				processClassString( options.extra.match( /\S+/g ) || [] );
			}
	
			return full.join( " " );
		},
	
		_untrackClassesElement: function( event ) {
			var that = this;
			$.each( that.classesElementLookup, function( key, value ) {
				if ( $.inArray( event.target, value ) !== -1 ) {
					that.classesElementLookup[ key ] = $( value.not( event.target ).get() );
				}
			} );
		},
	
		_removeClass: function( element, keys, extra ) {
			return this._toggleClass( element, keys, extra, false );
		},
	
		_addClass: function( element, keys, extra ) {
			return this._toggleClass( element, keys, extra, true );
		},
	
		_toggleClass: function( element, keys, extra, add ) {
			add = ( typeof add === "boolean" ) ? add : extra;
			var shift = ( typeof element === "string" || element === null ),
				options = {
					extra: shift ? keys : extra,
					keys: shift ? element : keys,
					element: shift ? this.element : element,
					add: add
				};
			options.element.toggleClass( this._classes( options ), add );
			return this;
		},
	
		_on: function( suppressDisabledCheck, element, handlers ) {
			var delegateElement;
			var instance = this;
	
			// No suppressDisabledCheck flag, shuffle arguments
			if ( typeof suppressDisabledCheck !== "boolean" ) {
				handlers = element;
				element = suppressDisabledCheck;
				suppressDisabledCheck = false;
			}
	
			// No element argument, shuffle and use this.element
			if ( !handlers ) {
				handlers = element;
				element = this.element;
				delegateElement = this.widget();
			} else {
				element = delegateElement = $( element );
				this.bindings = this.bindings.add( element );
			}
	
			$.each( handlers, function( event, handler ) {
				function handlerProxy() {
	
					// Allow widgets to customize the disabled handling
					// - disabled as an array instead of boolean
					// - disabled class as method for disabling individual parts
					if ( !suppressDisabledCheck &&
							( instance.options.disabled === true ||
							$( this ).hasClass( "ui-state-disabled" ) ) ) {
						return;
					}
					return ( typeof handler === "string" ? instance[ handler ] : handler )
						.apply( instance, arguments );
				}
	
				// Copy the guid so direct unbinding works
				if ( typeof handler !== "string" ) {
					handlerProxy.guid = handler.guid =
						handler.guid || handlerProxy.guid || $.guid++;
				}
	
				var match = event.match( /^([\w:-]*)\s*(.*)$/ );
				var eventName = match[ 1 ] + instance.eventNamespace;
				var selector = match[ 2 ];
	
				if ( selector ) {
					delegateElement.on( eventName, selector, handlerProxy );
				} else {
					element.on( eventName, handlerProxy );
				}
			} );
		},
	
		_off: function( element, eventName ) {
			eventName = ( eventName || "" ).split( " " ).join( this.eventNamespace + " " ) +
				this.eventNamespace;
			element.off( eventName ).off( eventName );
	
			// Clear the stack to avoid memory leaks (#10056)
			this.bindings = $( this.bindings.not( element ).get() );
			this.focusable = $( this.focusable.not( element ).get() );
			this.hoverable = $( this.hoverable.not( element ).get() );
		},
	
		_delay: function( handler, delay ) {
			function handlerProxy() {
				return ( typeof handler === "string" ? instance[ handler ] : handler )
					.apply( instance, arguments );
			}
			var instance = this;
			return setTimeout( handlerProxy, delay || 0 );
		},
	
		_hoverable: function( element ) {
			this.hoverable = this.hoverable.add( element );
			this._on( element, {
				mouseenter: function( event ) {
					this._addClass( $( event.currentTarget ), null, "ui-state-hover" );
				},
				mouseleave: function( event ) {
					this._removeClass( $( event.currentTarget ), null, "ui-state-hover" );
				}
			} );
		},
	
		_focusable: function( element ) {
			this.focusable = this.focusable.add( element );
			this._on( element, {
				focusin: function( event ) {
					this._addClass( $( event.currentTarget ), null, "ui-state-focus" );
				},
				focusout: function( event ) {
					this._removeClass( $( event.currentTarget ), null, "ui-state-focus" );
				}
			} );
		},
	
		_trigger: function( type, event, data ) {
			var prop, orig;
			var callback = this.options[ type ];
	
			data = data || {};
			event = $.Event( event );
			event.type = ( type === this.widgetEventPrefix ?
				type :
				this.widgetEventPrefix + type ).toLowerCase();
	
			// The original event may come from any element
			// so we need to reset the target on the new event
			event.target = this.element[ 0 ];
	
			// Copy original event properties over to the new event
			orig = event.originalEvent;
			if ( orig ) {
				for ( prop in orig ) {
					if ( !( prop in event ) ) {
						event[ prop ] = orig[ prop ];
					}
				}
			}
	
			this.element.trigger( event, data );
			return !( $.isFunction( callback ) &&
				callback.apply( this.element[ 0 ], [ event ].concat( data ) ) === false ||
				event.isDefaultPrevented() );
		}
	};
	
	$.each( { show: "fadeIn", hide: "fadeOut" }, function( method, defaultEffect ) {
		$.Widget.prototype[ "_" + method ] = function( element, options, callback ) {
			if ( typeof options === "string" ) {
				options = { effect: options };
			}
	
			var hasOptions;
			var effectName = !options ?
				method :
				options === true || typeof options === "number" ?
					defaultEffect :
					options.effect || defaultEffect;
	
			options = options || {};
			if ( typeof options === "number" ) {
				options = { duration: options };
			}
	
			hasOptions = !$.isEmptyObject( options );
			options.complete = callback;
	
			if ( options.delay ) {
				element.delay( options.delay );
			}
	
			if ( hasOptions && $.effects && $.effects.effect[ effectName ] ) {
				element[ method ]( options );
			} else if ( effectName !== method && element[ effectName ] ) {
				element[ effectName ]( options.duration, options.easing, callback );
			} else {
				element.queue( function( next ) {
					$( this )[ method ]();
					if ( callback ) {
						callback.call( element[ 0 ] );
					}
					next();
				} );
			}
		};
	} );
	
	return $.widget;
	
	} ) );


/***/ }),
/* 224 */
/***/ (function(module, exports) {

	'use strict';
	// private property
	var _keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
	
	
	// public method for encoding
	exports.encode = function(input, utf8) {
	    var output = "";
	    var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
	    var i = 0;
	
	    while (i < input.length) {
	
	        chr1 = input.charCodeAt(i++);
	        chr2 = input.charCodeAt(i++);
	        chr3 = input.charCodeAt(i++);
	
	        enc1 = chr1 >> 2;
	        enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
	        enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
	        enc4 = chr3 & 63;
	
	        if (isNaN(chr2)) {
	            enc3 = enc4 = 64;
	        }
	        else if (isNaN(chr3)) {
	            enc4 = 64;
	        }
	
	        output = output + _keyStr.charAt(enc1) + _keyStr.charAt(enc2) + _keyStr.charAt(enc3) + _keyStr.charAt(enc4);
	
	    }
	
	    return output;
	};
	
	// public method for decoding
	exports.decode = function(input, utf8) {
	    var output = "";
	    var chr1, chr2, chr3;
	    var enc1, enc2, enc3, enc4;
	    var i = 0;
	
	    input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
	
	    while (i < input.length) {
	
	        enc1 = _keyStr.indexOf(input.charAt(i++));
	        enc2 = _keyStr.indexOf(input.charAt(i++));
	        enc3 = _keyStr.indexOf(input.charAt(i++));
	        enc4 = _keyStr.indexOf(input.charAt(i++));
	
	        chr1 = (enc1 << 2) | (enc2 >> 4);
	        chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
	        chr3 = ((enc3 & 3) << 6) | enc4;
	
	        output = output + String.fromCharCode(chr1);
	
	        if (enc3 != 64) {
	            output = output + String.fromCharCode(chr2);
	        }
	        if (enc4 != 64) {
	            output = output + String.fromCharCode(chr3);
	        }
	
	    }
	
	    return output;
	
	};


/***/ }),
/* 225 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	exports.STORE = {
	    magic: "\x00\x00",
	    compress: function(content, compressionOptions) {
	        return content; // no compression
	    },
	    uncompress: function(content) {
	        return content; // no compression
	    },
	    compressInputType: null,
	    uncompressInputType: null
	};
	exports.DEFLATE = __webpack_require__(1070);


/***/ }),
/* 226 */
/***/ (function(module, exports, __webpack_require__) {

	/* WEBPACK VAR INJECTION */(function(Buffer) {'use strict';
	module.exports = function(data, encoding){
	    return new Buffer(data, encoding);
	};
	module.exports.test = function(b){
	    return Buffer.isBuffer(b);
	};
	
	/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(193).Buffer))

/***/ }),
/* 227 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	var support = __webpack_require__(115);
	var utils = __webpack_require__(55);
	var crc32 = __webpack_require__(1068);
	var signature = __webpack_require__(367);
	var defaults = __webpack_require__(365);
	var base64 = __webpack_require__(224);
	var compressions = __webpack_require__(225);
	var CompressedObject = __webpack_require__(363);
	var nodeBuffer = __webpack_require__(226);
	var utf8 = __webpack_require__(370);
	var StringWriter = __webpack_require__(1073);
	var Uint8ArrayWriter = __webpack_require__(1074);
	
	/**
	 * Returns the raw data of a ZipObject, decompress the content if necessary.
	 * @param {ZipObject} file the file to use.
	 * @return {String|ArrayBuffer|Uint8Array|Buffer} the data.
	 */
	var getRawData = function(file) {
	    if (file._data instanceof CompressedObject) {
	        file._data = file._data.getContent();
	        file.options.binary = true;
	        file.options.base64 = false;
	
	        if (utils.getTypeOf(file._data) === "uint8array") {
	            var copy = file._data;
	            // when reading an arraybuffer, the CompressedObject mechanism will keep it and subarray() a Uint8Array.
	            // if we request a file in the same format, we might get the same Uint8Array or its ArrayBuffer (the original zip file).
	            file._data = new Uint8Array(copy.length);
	            // with an empty Uint8Array, Opera fails with a "Offset larger than array size"
	            if (copy.length !== 0) {
	                file._data.set(copy, 0);
	            }
	        }
	    }
	    return file._data;
	};
	
	/**
	 * Returns the data of a ZipObject in a binary form. If the content is an unicode string, encode it.
	 * @param {ZipObject} file the file to use.
	 * @return {String|ArrayBuffer|Uint8Array|Buffer} the data.
	 */
	var getBinaryData = function(file) {
	    var result = getRawData(file),
	        type = utils.getTypeOf(result);
	    if (type === "string") {
	        if (!file.options.binary) {
	            // unicode text !
	            // unicode string => binary string is a painful process, check if we can avoid it.
	            if (support.nodebuffer) {
	                return nodeBuffer(result, "utf-8");
	            }
	        }
	        return file.asBinary();
	    }
	    return result;
	};
	
	/**
	 * Transform this._data into a string.
	 * @param {function} filter a function String -> String, applied if not null on the result.
	 * @return {String} the string representing this._data.
	 */
	var dataToString = function(asUTF8) {
	    var result = getRawData(this);
	    if (result === null || typeof result === "undefined") {
	        return "";
	    }
	    // if the data is a base64 string, we decode it before checking the encoding !
	    if (this.options.base64) {
	        result = base64.decode(result);
	    }
	    if (asUTF8 && this.options.binary) {
	        // JSZip.prototype.utf8decode supports arrays as input
	        // skip to array => string step, utf8decode will do it.
	        result = out.utf8decode(result);
	    }
	    else {
	        // no utf8 transformation, do the array => string step.
	        result = utils.transformTo("string", result);
	    }
	
	    if (!asUTF8 && !this.options.binary) {
	        result = utils.transformTo("string", out.utf8encode(result));
	    }
	    return result;
	};
	/**
	 * A simple object representing a file in the zip file.
	 * @constructor
	 * @param {string} name the name of the file
	 * @param {String|ArrayBuffer|Uint8Array|Buffer} data the data
	 * @param {Object} options the options of the file
	 */
	var ZipObject = function(name, data, options) {
	    this.name = name;
	    this.dir = options.dir;
	    this.date = options.date;
	    this.comment = options.comment;
	    this.unixPermissions = options.unixPermissions;
	    this.dosPermissions = options.dosPermissions;
	
	    this._data = data;
	    this.options = options;
	
	    /*
	     * This object contains initial values for dir and date.
	     * With them, we can check if the user changed the deprecated metadata in
	     * `ZipObject#options` or not.
	     */
	    this._initialMetadata = {
	      dir : options.dir,
	      date : options.date
	    };
	};
	
	ZipObject.prototype = {
	    /**
	     * Return the content as UTF8 string.
	     * @return {string} the UTF8 string.
	     */
	    asText: function() {
	        return dataToString.call(this, true);
	    },
	    /**
	     * Returns the binary content.
	     * @return {string} the content as binary.
	     */
	    asBinary: function() {
	        return dataToString.call(this, false);
	    },
	    /**
	     * Returns the content as a nodejs Buffer.
	     * @return {Buffer} the content as a Buffer.
	     */
	    asNodeBuffer: function() {
	        var result = getBinaryData(this);
	        return utils.transformTo("nodebuffer", result);
	    },
	    /**
	     * Returns the content as an Uint8Array.
	     * @return {Uint8Array} the content as an Uint8Array.
	     */
	    asUint8Array: function() {
	        var result = getBinaryData(this);
	        return utils.transformTo("uint8array", result);
	    },
	    /**
	     * Returns the content as an ArrayBuffer.
	     * @return {ArrayBuffer} the content as an ArrayBufer.
	     */
	    asArrayBuffer: function() {
	        return this.asUint8Array().buffer;
	    }
	};
	
	/**
	 * Transform an integer into a string in hexadecimal.
	 * @private
	 * @param {number} dec the number to convert.
	 * @param {number} bytes the number of bytes to generate.
	 * @returns {string} the result.
	 */
	var decToHex = function(dec, bytes) {
	    var hex = "",
	        i;
	    for (i = 0; i < bytes; i++) {
	        hex += String.fromCharCode(dec & 0xff);
	        dec = dec >>> 8;
	    }
	    return hex;
	};
	
	/**
	 * Transforms the (incomplete) options from the user into the complete
	 * set of options to create a file.
	 * @private
	 * @param {Object} o the options from the user.
	 * @return {Object} the complete set of options.
	 */
	var prepareFileAttrs = function(o) {
	    o = o || {};
	    if (o.base64 === true && (o.binary === null || o.binary === undefined)) {
	        o.binary = true;
	    }
	    o = utils.extend(o, defaults);
	    o.date = o.date || new Date();
	    if (o.compression !== null) o.compression = o.compression.toUpperCase();
	
	    return o;
	};
	
	/**
	 * Add a file in the current folder.
	 * @private
	 * @param {string} name the name of the file
	 * @param {String|ArrayBuffer|Uint8Array|Buffer} data the data of the file
	 * @param {Object} o the options of the file
	 * @return {Object} the new file.
	 */
	var fileAdd = function(name, data, o) {
	    // be sure sub folders exist
	    var dataType = utils.getTypeOf(data),
	        parent;
	
	    o = prepareFileAttrs(o);
	
	    if (typeof o.unixPermissions === "string") {
	        o.unixPermissions = parseInt(o.unixPermissions, 8);
	    }
	
	    // UNX_IFDIR  0040000 see zipinfo.c
	    if (o.unixPermissions && (o.unixPermissions & 0x4000)) {
	        o.dir = true;
	    }
	    // Bit 4    Directory
	    if (o.dosPermissions && (o.dosPermissions & 0x0010)) {
	        o.dir = true;
	    }
	
	    if (o.dir) {
	        name = forceTrailingSlash(name);
	    }
	
	    if (o.createFolders && (parent = parentFolder(name))) {
	        folderAdd.call(this, parent, true);
	    }
	
	    if (o.dir || data === null || typeof data === "undefined") {
	        o.base64 = false;
	        o.binary = false;
	        data = null;
	        dataType = null;
	    }
	    else if (dataType === "string") {
	        if (o.binary && !o.base64) {
	            // optimizedBinaryString == true means that the file has already been filtered with a 0xFF mask
	            if (o.optimizedBinaryString !== true) {
	                // this is a string, not in a base64 format.
	                // Be sure that this is a correct "binary string"
	                data = utils.string2binary(data);
	            }
	        }
	    }
	    else { // arraybuffer, uint8array, ...
	        o.base64 = false;
	        o.binary = true;
	
	        if (!dataType && !(data instanceof CompressedObject)) {
	            throw new Error("The data of '" + name + "' is in an unsupported format !");
	        }
	
	        // special case : it's way easier to work with Uint8Array than with ArrayBuffer
	        if (dataType === "arraybuffer") {
	            data = utils.transformTo("uint8array", data);
	        }
	    }
	
	    var object = new ZipObject(name, data, o);
	    this.files[name] = object;
	    return object;
	};
	
	/**
	 * Find the parent folder of the path.
	 * @private
	 * @param {string} path the path to use
	 * @return {string} the parent folder, or ""
	 */
	var parentFolder = function (path) {
	    if (path.slice(-1) == '/') {
	        path = path.substring(0, path.length - 1);
	    }
	    var lastSlash = path.lastIndexOf('/');
	    return (lastSlash > 0) ? path.substring(0, lastSlash) : "";
	};
	
	
	/**
	 * Returns the path with a slash at the end.
	 * @private
	 * @param {String} path the path to check.
	 * @return {String} the path with a trailing slash.
	 */
	var forceTrailingSlash = function(path) {
	    // Check the name ends with a /
	    if (path.slice(-1) != "/") {
	        path += "/"; // IE doesn't like substr(-1)
	    }
	    return path;
	};
	/**
	 * Add a (sub) folder in the current folder.
	 * @private
	 * @param {string} name the folder's name
	 * @param {boolean=} [createFolders] If true, automatically create sub
	 *  folders. Defaults to false.
	 * @return {Object} the new folder.
	 */
	var folderAdd = function(name, createFolders) {
	    createFolders = (typeof createFolders !== 'undefined') ? createFolders : false;
	
	    name = forceTrailingSlash(name);
	
	    // Does this folder already exist?
	    if (!this.files[name]) {
	        fileAdd.call(this, name, null, {
	            dir: true,
	            createFolders: createFolders
	        });
	    }
	    return this.files[name];
	};
	
	/**
	 * Generate a JSZip.CompressedObject for a given zipOject.
	 * @param {ZipObject} file the object to read.
	 * @param {JSZip.compression} compression the compression to use.
	 * @param {Object} compressionOptions the options to use when compressing.
	 * @return {JSZip.CompressedObject} the compressed result.
	 */
	var generateCompressedObjectFrom = function(file, compression, compressionOptions) {
	    var result = new CompressedObject(),
	        content;
	
	    // the data has not been decompressed, we might reuse things !
	    if (file._data instanceof CompressedObject) {
	        result.uncompressedSize = file._data.uncompressedSize;
	        result.crc32 = file._data.crc32;
	
	        if (result.uncompressedSize === 0 || file.dir) {
	            compression = compressions['STORE'];
	            result.compressedContent = "";
	            result.crc32 = 0;
	        }
	        else if (file._data.compressionMethod === compression.magic) {
	            result.compressedContent = file._data.getCompressedContent();
	        }
	        else {
	            content = file._data.getContent();
	            // need to decompress / recompress
	            result.compressedContent = compression.compress(utils.transformTo(compression.compressInputType, content), compressionOptions);
	        }
	    }
	    else {
	        // have uncompressed data
	        content = getBinaryData(file);
	        if (!content || content.length === 0 || file.dir) {
	            compression = compressions['STORE'];
	            content = "";
	        }
	        result.uncompressedSize = content.length;
	        result.crc32 = crc32(content);
	        result.compressedContent = compression.compress(utils.transformTo(compression.compressInputType, content), compressionOptions);
	    }
	
	    result.compressedSize = result.compressedContent.length;
	    result.compressionMethod = compression.magic;
	
	    return result;
	};
	
	
	
	
	/**
	 * Generate the UNIX part of the external file attributes.
	 * @param {Object} unixPermissions the unix permissions or null.
	 * @param {Boolean} isDir true if the entry is a directory, false otherwise.
	 * @return {Number} a 32 bit integer.
	 *
	 * adapted from http://unix.stackexchange.com/questions/14705/the-zip-formats-external-file-attribute :
	 *
	 * TTTTsstrwxrwxrwx0000000000ADVSHR
	 * ^^^^____________________________ file type, see zipinfo.c (UNX_*)
	 *     ^^^_________________________ setuid, setgid, sticky
	 *        ^^^^^^^^^________________ permissions
	 *                 ^^^^^^^^^^______ not used ?
	 *                           ^^^^^^ DOS attribute bits : Archive, Directory, Volume label, System file, Hidden, Read only
	 */
	var generateUnixExternalFileAttr = function (unixPermissions, isDir) {
	
	    var result = unixPermissions;
	    if (!unixPermissions) {
	        // I can't use octal values in strict mode, hence the hexa.
	        //  040775 => 0x41fd
	        // 0100664 => 0x81b4
	        result = isDir ? 0x41fd : 0x81b4;
	    }
	
	    return (result & 0xFFFF) << 16;
	};
	
	/**
	 * Generate the DOS part of the external file attributes.
	 * @param {Object} dosPermissions the dos permissions or null.
	 * @param {Boolean} isDir true if the entry is a directory, false otherwise.
	 * @return {Number} a 32 bit integer.
	 *
	 * Bit 0     Read-Only
	 * Bit 1     Hidden
	 * Bit 2     System
	 * Bit 3     Volume Label
	 * Bit 4     Directory
	 * Bit 5     Archive
	 */
	var generateDosExternalFileAttr = function (dosPermissions, isDir) {
	
	    // the dir flag is already set for compatibility
	
	    return (dosPermissions || 0)  & 0x3F;
	};
	
	/**
	 * Generate the various parts used in the construction of the final zip file.
	 * @param {string} name the file name.
	 * @param {ZipObject} file the file content.
	 * @param {JSZip.CompressedObject} compressedObject the compressed object.
	 * @param {number} offset the current offset from the start of the zip file.
	 * @param {String} platform let's pretend we are this platform (change platform dependents fields)
	 * @param {Function} encodeFileName the function to encode the file name / comment.
	 * @return {object} the zip parts.
	 */
	var generateZipParts = function(name, file, compressedObject, offset, platform, encodeFileName) {
	    var data = compressedObject.compressedContent,
	        useCustomEncoding = encodeFileName !== utf8.utf8encode,
	        encodedFileName = utils.transformTo("string", encodeFileName(file.name)),
	        utfEncodedFileName = utils.transformTo("string", utf8.utf8encode(file.name)),
	        comment = file.comment || "",
	        encodedComment = utils.transformTo("string", encodeFileName(comment)),
	        utfEncodedComment = utils.transformTo("string", utf8.utf8encode(comment)),
	        useUTF8ForFileName = utfEncodedFileName.length !== file.name.length,
	        useUTF8ForComment = utfEncodedComment.length !== comment.length,
	        o = file.options,
	        dosTime,
	        dosDate,
	        extraFields = "",
	        unicodePathExtraField = "",
	        unicodeCommentExtraField = "",
	        dir, date;
	
	
	    // handle the deprecated options.dir
	    if (file._initialMetadata.dir !== file.dir) {
	        dir = file.dir;
	    } else {
	        dir = o.dir;
	    }
	
	    // handle the deprecated options.date
	    if(file._initialMetadata.date !== file.date) {
	        date = file.date;
	    } else {
	        date = o.date;
	    }
	
	    var extFileAttr = 0;
	    var versionMadeBy = 0;
	    if (dir) {
	        // dos or unix, we set the dos dir flag
	        extFileAttr |= 0x00010;
	    }
	    if(platform === "UNIX") {
	        versionMadeBy = 0x031E; // UNIX, version 3.0
	        extFileAttr |= generateUnixExternalFileAttr(file.unixPermissions, dir);
	    } else { // DOS or other, fallback to DOS
	        versionMadeBy = 0x0014; // DOS, version 2.0
	        extFileAttr |= generateDosExternalFileAttr(file.dosPermissions, dir);
	    }
	
	    // date
	    // @see http://www.delorie.com/djgpp/doc/rbinter/it/52/13.html
	    // @see http://www.delorie.com/djgpp/doc/rbinter/it/65/16.html
	    // @see http://www.delorie.com/djgpp/doc/rbinter/it/66/16.html
	
	    dosTime = date.getHours();
	    dosTime = dosTime << 6;
	    dosTime = dosTime | date.getMinutes();
	    dosTime = dosTime << 5;
	    dosTime = dosTime | date.getSeconds() / 2;
	
	    dosDate = date.getFullYear() - 1980;
	    dosDate = dosDate << 4;
	    dosDate = dosDate | (date.getMonth() + 1);
	    dosDate = dosDate << 5;
	    dosDate = dosDate | date.getDate();
	
	    if (useUTF8ForFileName) {
	        // set the unicode path extra field. unzip needs at least one extra
	        // field to correctly handle unicode path, so using the path is as good
	        // as any other information. This could improve the situation with
	        // other archive managers too.
	        // This field is usually used without the utf8 flag, with a non
	        // unicode path in the header (winrar, winzip). This helps (a bit)
	        // with the messy Windows' default compressed folders feature but
	        // breaks on p7zip which doesn't seek the unicode path extra field.
	        // So for now, UTF-8 everywhere !
	        unicodePathExtraField =
	            // Version
	            decToHex(1, 1) +
	            // NameCRC32
	            decToHex(crc32(encodedFileName), 4) +
	            // UnicodeName
	            utfEncodedFileName;
	
	        extraFields +=
	            // Info-ZIP Unicode Path Extra Field
	            "\x75\x70" +
	            // size
	            decToHex(unicodePathExtraField.length, 2) +
	            // content
	            unicodePathExtraField;
	    }
	
	    if(useUTF8ForComment) {
	
	        unicodeCommentExtraField =
	            // Version
	            decToHex(1, 1) +
	            // CommentCRC32
	            decToHex(this.crc32(encodedComment), 4) +
	            // UnicodeName
	            utfEncodedComment;
	
	        extraFields +=
	            // Info-ZIP Unicode Path Extra Field
	            "\x75\x63" +
	            // size
	            decToHex(unicodeCommentExtraField.length, 2) +
	            // content
	            unicodeCommentExtraField;
	    }
	
	    var header = "";
	
	    // version needed to extract
	    header += "\x0A\x00";
	    // general purpose bit flag
	    // set bit 11 if utf8
	    header += !useCustomEncoding && (useUTF8ForFileName || useUTF8ForComment) ? "\x00\x08" : "\x00\x00";
	    // compression method
	    header += compressedObject.compressionMethod;
	    // last mod file time
	    header += decToHex(dosTime, 2);
	    // last mod file date
	    header += decToHex(dosDate, 2);
	    // crc-32
	    header += decToHex(compressedObject.crc32, 4);
	    // compressed size
	    header += decToHex(compressedObject.compressedSize, 4);
	    // uncompressed size
	    header += decToHex(compressedObject.uncompressedSize, 4);
	    // file name length
	    header += decToHex(encodedFileName.length, 2);
	    // extra field length
	    header += decToHex(extraFields.length, 2);
	
	
	    var fileRecord = signature.LOCAL_FILE_HEADER + header + encodedFileName + extraFields;
	
	    var dirRecord = signature.CENTRAL_FILE_HEADER +
	    // version made by (00: DOS)
	    decToHex(versionMadeBy, 2) +
	    // file header (common to file and central directory)
	    header +
	    // file comment length
	    decToHex(encodedComment.length, 2) +
	    // disk number start
	    "\x00\x00" +
	    // internal file attributes TODO
	    "\x00\x00" +
	    // external file attributes
	    decToHex(extFileAttr, 4) +
	    // relative offset of local header
	    decToHex(offset, 4) +
	    // file name
	    encodedFileName +
	    // extra field
	    extraFields +
	    // file comment
	    encodedComment;
	
	    return {
	        fileRecord: fileRecord,
	        dirRecord: dirRecord,
	        compressedObject: compressedObject
	    };
	};
	
	
	// return the actual prototype of JSZip
	var out = {
	    /**
	     * Read an existing zip and merge the data in the current JSZip object.
	     * The implementation is in jszip-load.js, don't forget to include it.
	     * @param {String|ArrayBuffer|Uint8Array|Buffer} stream  The stream to load
	     * @param {Object} options Options for loading the stream.
	     *  options.base64 : is the stream in base64 ? default : false
	     * @return {JSZip} the current JSZip object
	     */
	    load: function(stream, options) {
	        throw new Error("Load method is not defined. Is the file jszip-load.js included ?");
	    },
	
	    /**
	     * Filter nested files/folders with the specified function.
	     * @param {Function} search the predicate to use :
	     * function (relativePath, file) {...}
	     * It takes 2 arguments : the relative path and the file.
	     * @return {Array} An array of matching elements.
	     */
	    filter: function(search) {
	        var result = [],
	            filename, relativePath, file, fileClone;
	        for (filename in this.files) {
	            if (!this.files.hasOwnProperty(filename)) {
	                continue;
	            }
	            file = this.files[filename];
	            // return a new object, don't let the user mess with our internal objects :)
	            fileClone = new ZipObject(file.name, file._data, utils.extend(file.options));
	            relativePath = filename.slice(this.root.length, filename.length);
	            if (filename.slice(0, this.root.length) === this.root && // the file is in the current root
	            search(relativePath, fileClone)) { // and the file matches the function
	                result.push(fileClone);
	            }
	        }
	        return result;
	    },
	
	    /**
	     * Add a file to the zip file, or search a file.
	     * @param   {string|RegExp} name The name of the file to add (if data is defined),
	     * the name of the file to find (if no data) or a regex to match files.
	     * @param   {String|ArrayBuffer|Uint8Array|Buffer} data  The file data, either raw or base64 encoded
	     * @param   {Object} o     File options
	     * @return  {JSZip|Object|Array} this JSZip object (when adding a file),
	     * a file (when searching by string) or an array of files (when searching by regex).
	     */
	    file: function(name, data, o) {
	        if (arguments.length === 1) {
	            if (utils.isRegExp(name)) {
	                var regexp = name;
	                return this.filter(function(relativePath, file) {
	                    return !file.dir && regexp.test(relativePath);
	                });
	            }
	            else { // text
	                return this.filter(function(relativePath, file) {
	                    return !file.dir && relativePath === name;
	                })[0] || null;
	            }
	        }
	        else { // more than one argument : we have data !
	            name = this.root + name;
	            fileAdd.call(this, name, data, o);
	        }
	        return this;
	    },
	
	    /**
	     * Add a directory to the zip file, or search.
	     * @param   {String|RegExp} arg The name of the directory to add, or a regex to search folders.
	     * @return  {JSZip} an object with the new directory as the root, or an array containing matching folders.
	     */
	    folder: function(arg) {
	        if (!arg) {
	            return this;
	        }
	
	        if (utils.isRegExp(arg)) {
	            return this.filter(function(relativePath, file) {
	                return file.dir && arg.test(relativePath);
	            });
	        }
	
	        // else, name is a new folder
	        var name = this.root + arg;
	        var newFolder = folderAdd.call(this, name);
	
	        // Allow chaining by returning a new object with this folder as the root
	        var ret = this.clone();
	        ret.root = newFolder.name;
	        return ret;
	    },
	
	    /**
	     * Delete a file, or a directory and all sub-files, from the zip
	     * @param {string} name the name of the file to delete
	     * @return {JSZip} this JSZip object
	     */
	    remove: function(name) {
	        name = this.root + name;
	        var file = this.files[name];
	        if (!file) {
	            // Look for any folders
	            if (name.slice(-1) != "/") {
	                name += "/";
	            }
	            file = this.files[name];
	        }
	
	        if (file && !file.dir) {
	            // file
	            delete this.files[name];
	        } else {
	            // maybe a folder, delete recursively
	            var kids = this.filter(function(relativePath, file) {
	                return file.name.slice(0, name.length) === name;
	            });
	            for (var i = 0; i < kids.length; i++) {
	                delete this.files[kids[i].name];
	            }
	        }
	
	        return this;
	    },
	
	    /**
	     * Generate the complete zip file
	     * @param {Object} options the options to generate the zip file :
	     * - base64, (deprecated, use type instead) true to generate base64.
	     * - compression, "STORE" by default.
	     * - type, "base64" by default. Values are : string, base64, uint8array, arraybuffer, blob.
	     * @return {String|Uint8Array|ArrayBuffer|Buffer|Blob} the zip file
	     */
	    generate: function(options) {
	        options = utils.extend(options || {}, {
	            base64: true,
	            compression: "STORE",
	            compressionOptions : null,
	            type: "base64",
	            platform: "DOS",
	            comment: null,
	            mimeType: 'application/zip',
	            encodeFileName: utf8.utf8encode
	        });
	
	        utils.checkSupport(options.type);
	
	        // accept nodejs `process.platform`
	        if(
	          options.platform === 'darwin' ||
	          options.platform === 'freebsd' ||
	          options.platform === 'linux' ||
	          options.platform === 'sunos'
	        ) {
	          options.platform = "UNIX";
	        }
	        if (options.platform === 'win32') {
	          options.platform = "DOS";
	        }
	
	        var zipData = [],
	            localDirLength = 0,
	            centralDirLength = 0,
	            writer, i,
	            encodedComment = utils.transformTo("string", options.encodeFileName(options.comment || this.comment || ""));
	
	        // first, generate all the zip parts.
	        for (var name in this.files) {
	            if (!this.files.hasOwnProperty(name)) {
	                continue;
	            }
	            var file = this.files[name];
	
	            var compressionName = file.options.compression || options.compression.toUpperCase();
	            var compression = compressions[compressionName];
	            if (!compression) {
	                throw new Error(compressionName + " is not a valid compression method !");
	            }
	            var compressionOptions = file.options.compressionOptions || options.compressionOptions || {};
	
	            var compressedObject = generateCompressedObjectFrom.call(this, file, compression, compressionOptions);
	
	            var zipPart = generateZipParts.call(this, name, file, compressedObject, localDirLength, options.platform, options.encodeFileName);
	            localDirLength += zipPart.fileRecord.length + compressedObject.compressedSize;
	            centralDirLength += zipPart.dirRecord.length;
	            zipData.push(zipPart);
	        }
	
	        var dirEnd = "";
	
	        // end of central dir signature
	        dirEnd = signature.CENTRAL_DIRECTORY_END +
	        // number of this disk
	        "\x00\x00" +
	        // number of the disk with the start of the central directory
	        "\x00\x00" +
	        // total number of entries in the central directory on this disk
	        decToHex(zipData.length, 2) +
	        // total number of entries in the central directory
	        decToHex(zipData.length, 2) +
	        // size of the central directory   4 bytes
	        decToHex(centralDirLength, 4) +
	        // offset of start of central directory with respect to the starting disk number
	        decToHex(localDirLength, 4) +
	        // .ZIP file comment length
	        decToHex(encodedComment.length, 2) +
	        // .ZIP file comment
	        encodedComment;
	
	
	        // we have all the parts (and the total length)
	        // time to create a writer !
	        var typeName = options.type.toLowerCase();
	        if(typeName==="uint8array"||typeName==="arraybuffer"||typeName==="blob"||typeName==="nodebuffer") {
	            writer = new Uint8ArrayWriter(localDirLength + centralDirLength + dirEnd.length);
	        }else{
	            writer = new StringWriter(localDirLength + centralDirLength + dirEnd.length);
	        }
	
	        for (i = 0; i < zipData.length; i++) {
	            writer.append(zipData[i].fileRecord);
	            writer.append(zipData[i].compressedObject.compressedContent);
	        }
	        for (i = 0; i < zipData.length; i++) {
	            writer.append(zipData[i].dirRecord);
	        }
	
	        writer.append(dirEnd);
	
	        var zip = writer.finalize();
	
	
	
	        switch(options.type.toLowerCase()) {
	            // case "zip is an Uint8Array"
	            case "uint8array" :
	            case "arraybuffer" :
	            case "nodebuffer" :
	               return utils.transformTo(options.type.toLowerCase(), zip);
	            case "blob" :
	               return utils.arrayBuffer2Blob(utils.transformTo("arraybuffer", zip), options.mimeType);
	            // case "zip is a string"
	            case "base64" :
	               return (options.base64) ? base64.encode(zip) : zip;
	            default : // case "string" :
	               return zip;
	         }
	
	    },
	
	    /**
	     * @deprecated
	     * This method will be removed in a future version without replacement.
	     */
	    crc32: function (input, crc) {
	        return crc32(input, crc);
	    },
	
	    /**
	     * @deprecated
	     * This method will be removed in a future version without replacement.
	     */
	    utf8encode: function (string) {
	        return utils.transformTo("string", utf8.utf8encode(string));
	    },
	
	    /**
	     * @deprecated
	     * This method will be removed in a future version without replacement.
	     */
	    utf8decode: function (input) {
	        return utf8.utf8decode(input);
	    }
	};
	module.exports = out;


/***/ }),
/* 228 */
/***/ (function(module, exports) {

	/**
	 * @module core/utils
	 */
	
	'use strict';
	
	/**
	 * Convenience function to serialize an object to a KVP encoded string.
	 *
	 * @param obj The object to serialize
	 *
	 * @returns the constructed KVP string
	 */
	
	function objectToKVP(obj) {
	    var ret = [];
	    for (var key in obj) {
	        ret.push(key + "=" + obj[key]);
	    }
	    return ret.join("&");
	}
	
	/**
	 * Utility function to split a string and parse an array of integers.
	 *
	 * @param string the string to split and parse
	 * @param separator an (optional) separator, the string shall be split with.
	 *                   Defaults to " ".
	 *
	 * @returns an array of the parsed values
	 */
	
	function stringToIntArray(string, separator) {
	    separator = separator || " ";
	    return map(string.split(separator), function(val) {
	        return parseInt(val);
	    });
	}
	
	/**
	 * Utility function to split a string and parse an array of floats.
	 *
	 * @param string the string to split and parse
	 * @param separator an (optional) separator, the string shall be split with.
	 *                   Defaults to " ".
	 *
	 * @returns an array of the parsed values
	 */
	
	function stringToFloatArray(string, separator) {
	    separator = separator || " ";
	    return map(string.split(separator), function(val) {
	        return parseFloat(val);
	    });
	}
	
	function map(array, iterator) {
	    var result = [];
	    for (var i = 0; i < array.length; ++i) {
	        result.push(iterator(array[i]));
	    }
	    return result;
	}
	
	/**
	 * Recursivly merges two hash-tables.
	 *
	 * @param target the object the other one will be merged into
	 * @param other the object that will be merged into the target
	 */
	
	function deepMerge(target, other) {
	    if (typeof target != "object" || typeof other != "object") return;
	    for (var key in other) {
	        if (target.hasOwnProperty(key)
	            && typeof target[key] == "object"
	            && typeof other[key] == "object") {
	            deepMerge(target[key], other[key]);
	        }
	        else target[key] = other[key];
	    }
	}
	
	/**
	 * Create an xPath lookup function bound to the given namespaceMap.
	 *
	 * @param namespaceMap the mapping from prefix to namespace URL.
	 *
	 * @returns the xPath function
	 */
	
	function createXPath(namespaceMap) {
	    var nsResolver = function(prefix) {
	      return namespaceMap[prefix] || null;
	    }
	
	    return function(node, xpath) {
	        var doc = node.ownerDocument;
	        var text = xpath.indexOf("text()") != -1 || xpath.indexOf("@") != -1;
	        if (text) {
	            return doc.evaluate(xpath, node, nsResolver, XPathResult.STRING_TYPE, null).stringValue;
	        }
	        else {
	            var result = doc.evaluate(xpath, node, nsResolver, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
	            if (result.snapshotLength == 0) {
	               return null;
	            }
	            else {
	                return result.snapshotItem(0);
	            }
	        }
	    }
	}
	
	/**
	 * Create an xPath lookup function (that itself returns arrays of elements)
	 * bound to the given namespaceMap.
	 *
	 * @param namespaceMap the mapping from prefix to namespace URL.
	 *
	 * @returns the xPath function
	 */
	function createXPathArray(namespaceMap) {
	    var nsResolver = function(prefix) {
	      return namespaceMap[prefix] || null;
	    }
	
	    return function(node, xpath) {
	        var doc = node.ownerDocument;
	        var result = doc.evaluate(xpath, node, nsResolver, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
	        var text = xpath.indexOf("text()") != -1 || xpath.indexOf("@") != -1;
	        var array = new Array(result.snapshotLength);
	        for (var i=0; i < result.snapshotLength; ++i) {
	            if (text) {
	                array[i] = result.snapshotItem(i).textContent;
	            }
	            else {
	                array[i] = result.snapshotItem(i);
	            }
	        }
	        return array;
	    }
	}
	
	
	module.exports = {
	    objectToKVP: objectToKVP,
	    stringToIntArray: stringToIntArray,
	    stringToFloatArray: stringToFloatArray,
	    map: map,
	    deepMerge: deepMerge,
	    createXPath: createXPath,
	    createXPathArray: createXPathArray
	}

/***/ }),
/* 229 */
/***/ (function(module, exports) {

	'use strict';
	
	// (C) 1995-2013 Jean-loup Gailly and Mark Adler
	// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
	//
	// This software is provided 'as-is', without any express or implied
	// warranty. In no event will the authors be held liable for any damages
	// arising from the use of this software.
	//
	// Permission is granted to anyone to use this software for any purpose,
	// including commercial applications, and to alter it and redistribute it
	// freely, subject to the following restrictions:
	//
	// 1. The origin of this software must not be misrepresented; you must not
	//   claim that you wrote the original software. If you use this software
	//   in a product, an acknowledgment in the product documentation would be
	//   appreciated but is not required.
	// 2. Altered source versions must be plainly marked as such, and must not be
	//   misrepresented as being the original software.
	// 3. This notice may not be removed or altered from any source distribution.
	
	module.exports = {
	  2:      'need dictionary',     /* Z_NEED_DICT       2  */
	  1:      'stream end',          /* Z_STREAM_END      1  */
	  0:      '',                    /* Z_OK              0  */
	  '-1':   'file error',          /* Z_ERRNO         (-1) */
	  '-2':   'stream error',        /* Z_STREAM_ERROR  (-2) */
	  '-3':   'data error',          /* Z_DATA_ERROR    (-3) */
	  '-4':   'insufficient memory', /* Z_MEM_ERROR     (-4) */
	  '-5':   'buffer error',        /* Z_BUF_ERROR     (-5) */
	  '-6':   'incompatible version' /* Z_VERSION_ERROR (-6) */
	};


/***/ }),
/* 230 */
/***/ (function(module, exports, __webpack_require__) {

	// style-loader: Adds some css to the DOM by adding a <style> tag
	
	// load the styles
	var content = __webpack_require__(932);
	if(typeof content === 'string') content = [[module.id, content, '']];
	// add the styles to the DOM
	var update = __webpack_require__(8)(content, {});
	if(content.locals) module.exports = content.locals;
	// Hot Module Replacement
	if(false) {
		// When the styles change, update the <style> tags
		if(!content.locals) {
			module.hot.accept("!!../../../css-loader/index.js!../../../postcss-loader/index.js!./bootstrap-slider.css", function() {
				var newContent = require("!!../../../css-loader/index.js!../../../postcss-loader/index.js!./bootstrap-slider.css");
				if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
				update(newContent);
			});
		}
		// When the module is disposed, remove the <style> tags
		module.hot.dispose(function() { update(); });
	}

/***/ }),
/* 231 */
/***/ (function(module, exports, __webpack_require__) {

	!function(t,e){ true?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e(t.jsts={})}(this,function(t){"use strict";function e(){}function n(t){this.message=t||""}function i(t){this.message=t||""}function r(t){this.message=t||""}function o(){}function s(t){return null===t?Mt:t.color}function a(t){return null===t?null:t.parent}function u(t,e){null!==t&&(t.color=e)}function l(t){return null===t?null:t.left}function c(t){return null===t?null:t.right}function p(){this.root_=null,this.size_=0}function h(){}function f(){this.array_=[],arguments[0]instanceof It&&this.addAll(arguments[0])}function g(){}function d(t){this.message=t||""}function y(){this.array_=[]}"fill"in Array.prototype||Object.defineProperty(Array.prototype,"fill",{configurable:!0,value:function(t){if(void 0===this||null===this)throw new TypeError(this+" is not an object");var e=Object(this),n=Math.max(Math.min(e.length,9007199254740991),0)||0,i=1 in arguments?parseInt(Number(arguments[1]),10)||0:0;i=i<0?Math.max(n+i,0):Math.min(i,n);var r=2 in arguments&&void 0!==arguments[2]?parseInt(Number(arguments[2]),10)||0:n;for(r=r<0?Math.max(n+arguments[2],0):Math.min(r,n);i<r;)e[i]=t,++i;return e},writable:!0}),Number.isFinite=Number.isFinite||function(t){return"number"==typeof t&&isFinite(t)},Number.isInteger=Number.isInteger||function(t){return"number"==typeof t&&isFinite(t)&&Math.floor(t)===t},Number.parseFloat=Number.parseFloat||parseFloat,Number.isNaN=Number.isNaN||function(t){return t!=t},Math.trunc=Math.trunc||function(t){return t<0?Math.ceil(t):Math.floor(t)};var _=function(){};_.prototype.interfaces_=function(){return[]},_.prototype.getClass=function(){return _},_.prototype.equalsWithTolerance=function(t,e,n){return Math.abs(t-e)<=n};var m=function(t){function e(e){t.call(this,e),this.name="IllegalArgumentException",this.message=e,this.stack=(new t).stack}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e}(Error),v=function(){},I={MAX_VALUE:{configurable:!0}};v.isNaN=function(t){return Number.isNaN(t)},v.doubleToLongBits=function(t){return t},v.longBitsToDouble=function(t){return t},v.isInfinite=function(t){return!Number.isFinite(t)},I.MAX_VALUE.get=function(){return Number.MAX_VALUE},Object.defineProperties(v,I);var E=function(){},x=function(){},N=function(){},C=function t(){if(this.x=null,this.y=null,this.z=null,0===arguments.length)this.x=0,this.y=0,this.z=t.NULL_ORDINATE;else if(1===arguments.length){var e=arguments[0];this.x=e.x,this.y=e.y,this.z=e.z}else 2===arguments.length?(this.x=arguments[0],this.y=arguments[1],this.z=t.NULL_ORDINATE):3===arguments.length&&(this.x=arguments[0],this.y=arguments[1],this.z=arguments[2])},S={DimensionalComparator:{configurable:!0},serialVersionUID:{configurable:!0},NULL_ORDINATE:{configurable:!0},X:{configurable:!0},Y:{configurable:!0},Z:{configurable:!0}};C.prototype.setOrdinate=function(t,e){switch(t){case C.X:this.x=e;break;case C.Y:this.y=e;break;case C.Z:this.z=e;break;default:throw new m("Invalid ordinate index: "+t)}},C.prototype.equals2D=function(){if(1===arguments.length){var t=arguments[0];return this.x===t.x&&this.y===t.y}if(2===arguments.length){var e=arguments[0],n=arguments[1];return!!_.equalsWithTolerance(this.x,e.x,n)&&!!_.equalsWithTolerance(this.y,e.y,n)}},C.prototype.getOrdinate=function(t){switch(t){case C.X:return this.x;case C.Y:return this.y;case C.Z:return this.z}throw new m("Invalid ordinate index: "+t)},C.prototype.equals3D=function(t){return this.x===t.x&&this.y===t.y&&(this.z===t.z||v.isNaN(this.z))&&v.isNaN(t.z)},C.prototype.equals=function(t){return t instanceof C&&this.equals2D(t)},C.prototype.equalInZ=function(t,e){return _.equalsWithTolerance(this.z,t.z,e)},C.prototype.compareTo=function(t){var e=t;return this.x<e.x?-1:this.x>e.x?1:this.y<e.y?-1:this.y>e.y?1:0},C.prototype.clone=function(){},C.prototype.copy=function(){return new C(this)},C.prototype.toString=function(){return"("+this.x+", "+this.y+", "+this.z+")"},C.prototype.distance3D=function(t){var e=this.x-t.x,n=this.y-t.y,i=this.z-t.z;return Math.sqrt(e*e+n*n+i*i)},C.prototype.distance=function(t){var e=this.x-t.x,n=this.y-t.y;return Math.sqrt(e*e+n*n)},C.prototype.hashCode=function(){var t=17;return t=37*t+C.hashCode(this.x),t=37*t+C.hashCode(this.y)},C.prototype.setCoordinate=function(t){this.x=t.x,this.y=t.y,this.z=t.z},C.prototype.interfaces_=function(){return[E,x,e]},C.prototype.getClass=function(){return C},C.hashCode=function(){if(1===arguments.length){var t=arguments[0],e=v.doubleToLongBits(t);return Math.trunc((e^e)>>>32)}},S.DimensionalComparator.get=function(){return L},S.serialVersionUID.get=function(){return 0x5cbf2c235c7e5800},S.NULL_ORDINATE.get=function(){return v.NaN},S.X.get=function(){return 0},S.Y.get=function(){return 1},S.Z.get=function(){return 2},Object.defineProperties(C,S);var L=function(t){if(this._dimensionsToTest=2,0===arguments.length);else if(1===arguments.length){var e=arguments[0];if(2!==e&&3!==e)throw new m("only 2 or 3 dimensions may be specified");this._dimensionsToTest=e}};L.prototype.compare=function(t,e){var n=t,i=e,r=L.compare(n.x,i.x);if(0!==r)return r;var o=L.compare(n.y,i.y);if(0!==o)return o;if(this._dimensionsToTest<=2)return 0;return L.compare(n.z,i.z)},L.prototype.interfaces_=function(){return[N]},L.prototype.getClass=function(){return L},L.compare=function(t,e){return t<e?-1:t>e?1:v.isNaN(t)?v.isNaN(e)?0:-1:v.isNaN(e)?1:0};var b=function(){};b.prototype.create=function(){},b.prototype.interfaces_=function(){return[]},b.prototype.getClass=function(){return b};var w=function(){},O={INTERIOR:{configurable:!0},BOUNDARY:{configurable:!0},EXTERIOR:{configurable:!0},NONE:{configurable:!0}};w.prototype.interfaces_=function(){return[]},w.prototype.getClass=function(){return w},w.toLocationSymbol=function(t){switch(t){case w.EXTERIOR:return"e";case w.BOUNDARY:return"b";case w.INTERIOR:return"i";case w.NONE:return"-"}throw new m("Unknown location value: "+t)},O.INTERIOR.get=function(){return 0},O.BOUNDARY.get=function(){return 1},O.EXTERIOR.get=function(){return 2},O.NONE.get=function(){return-1},Object.defineProperties(w,O);var T=function(t,e){return t.interfaces_&&t.interfaces_().indexOf(e)>-1},R=function(){},P={LOG_10:{configurable:!0}};R.prototype.interfaces_=function(){return[]},R.prototype.getClass=function(){return R},R.log10=function(t){var e=Math.log(t);return v.isInfinite(e)?e:v.isNaN(e)?e:e/R.LOG_10},R.min=function(t,e,n,i){var r=t;return e<r&&(r=e),n<r&&(r=n),i<r&&(r=i),r},R.clamp=function(){if("number"==typeof arguments[2]&&"number"==typeof arguments[0]&&"number"==typeof arguments[1]){var t=arguments[0],e=arguments[1],n=arguments[2];return t<e?e:t>n?n:t}if(Number.isInteger(arguments[2])&&Number.isInteger(arguments[0])&&Number.isInteger(arguments[1])){var i=arguments[0],r=arguments[1],o=arguments[2];return i<r?r:i>o?o:i}},R.wrap=function(t,e){return t<0?e- -t%e:t%e},R.max=function(){if(3===arguments.length){var t=arguments[0],e=arguments[1],n=arguments[2],i=t;return e>i&&(i=e),n>i&&(i=n),i}if(4===arguments.length){var r=arguments[0],o=arguments[1],s=arguments[2],a=arguments[3],u=r;return o>u&&(u=o),s>u&&(u=s),a>u&&(u=a),u}},R.average=function(t,e){return(t+e)/2},P.LOG_10.get=function(){return Math.log(10)},Object.defineProperties(R,P);var D=function(t){this.str=t};D.prototype.append=function(t){this.str+=t},D.prototype.setCharAt=function(t,e){this.str=this.str.substr(0,t)+e+this.str.substr(t+1)},D.prototype.toString=function(t){return this.str};var M=function(t){this.value=t};M.prototype.intValue=function(){return this.value},M.prototype.compareTo=function(t){return this.value<t?-1:this.value>t?1:0},M.isNaN=function(t){return Number.isNaN(t)};var A=function(){};A.isWhitespace=function(t){return t<=32&&t>=0||127===t},A.toUpperCase=function(t){return t.toUpperCase()};var F=function t(){if(this._hi=0,this._lo=0,0===arguments.length)this.init(0);else if(1===arguments.length){if("number"==typeof arguments[0]){var e=arguments[0];this.init(e)}else if(arguments[0]instanceof t){var n=arguments[0];this.init(n)}else if("string"==typeof arguments[0]){var i=arguments[0];t.call(this,t.parse(i))}}else if(2===arguments.length){var r=arguments[0],o=arguments[1];this.init(r,o)}},G={PI:{configurable:!0},TWO_PI:{configurable:!0},PI_2:{configurable:!0},E:{configurable:!0},NaN:{configurable:!0},EPS:{configurable:!0},SPLIT:{configurable:!0},MAX_PRINT_DIGITS:{configurable:!0},TEN:{configurable:!0},ONE:{configurable:!0},SCI_NOT_EXPONENT_CHAR:{configurable:!0},SCI_NOT_ZERO:{configurable:!0}};F.prototype.le=function(t){return(this._hi<t._hi||this._hi===t._hi)&&this._lo<=t._lo},F.prototype.extractSignificantDigits=function(t,e){var n=this.abs(),i=F.magnitude(n._hi),r=F.TEN.pow(i);(n=n.divide(r)).gt(F.TEN)?(n=n.divide(F.TEN),i+=1):n.lt(F.ONE)&&(n=n.multiply(F.TEN),i-=1);for(var o=i+1,s=new D,a=F.MAX_PRINT_DIGITS-1,u=0;u<=a;u++){t&&u===o&&s.append(".");var l=Math.trunc(n._hi);if(l<0)break;var c=!1,p=0;l>9?(c=!0,p="9"):p="0"+l,s.append(p),n=n.subtract(F.valueOf(l)).multiply(F.TEN),c&&n.selfAdd(F.TEN);var h=!0,f=F.magnitude(n._hi);if(f<0&&Math.abs(f)>=a-u&&(h=!1),!h)break}return e[0]=i,s.toString()},F.prototype.sqr=function(){return this.multiply(this)},F.prototype.doubleValue=function(){return this._hi+this._lo},F.prototype.subtract=function(){if(arguments[0]instanceof F){var t=arguments[0];return this.add(t.negate())}if("number"==typeof arguments[0]){var e=arguments[0];return this.add(-e)}},F.prototype.equals=function(){if(1===arguments.length){var t=arguments[0];return this._hi===t._hi&&this._lo===t._lo}},F.prototype.isZero=function(){return 0===this._hi&&0===this._lo},F.prototype.selfSubtract=function(){if(arguments[0]instanceof F){var t=arguments[0];return this.isNaN()?this:this.selfAdd(-t._hi,-t._lo)}if("number"==typeof arguments[0]){var e=arguments[0];return this.isNaN()?this:this.selfAdd(-e,0)}},F.prototype.getSpecialNumberString=function(){return this.isZero()?"0.0":this.isNaN()?"NaN ":null},F.prototype.min=function(t){return this.le(t)?this:t},F.prototype.selfDivide=function(){if(1===arguments.length){if(arguments[0]instanceof F){var t=arguments[0];return this.selfDivide(t._hi,t._lo)}if("number"==typeof arguments[0]){var e=arguments[0];return this.selfDivide(e,0)}}else if(2===arguments.length){var n=arguments[0],i=arguments[1],r=null,o=null,s=null,a=null,u=null,l=null,c=null,p=null;return u=this._hi/n,l=F.SPLIT*u,r=l-u,p=F.SPLIT*n,r=l-r,o=u-r,s=p-n,c=u*n,s=p-s,a=n-s,p=r*s-c+r*a+o*s+o*a,l=(this._hi-c-p+this._lo-u*i)/n,p=u+l,this._hi=p,this._lo=u-p+l,this}},F.prototype.dump=function(){return"DD<"+this._hi+", "+this._lo+">"},F.prototype.divide=function(){if(arguments[0]instanceof F){var t=arguments[0],e=null,n=null,i=null,r=null,o=null,s=null,a=null,u=null;n=(o=this._hi/t._hi)-(e=(s=F.SPLIT*o)-(e=s-o)),u=e*(i=(u=F.SPLIT*t._hi)-(i=u-t._hi))-(a=o*t._hi)+e*(r=t._hi-i)+n*i+n*r,s=(this._hi-a-u+this._lo-o*t._lo)/t._hi;return new F(u=o+s,o-u+s)}if("number"==typeof arguments[0]){var l=arguments[0];return v.isNaN(l)?F.createNaN():F.copy(this).selfDivide(l,0)}},F.prototype.ge=function(t){return(this._hi>t._hi||this._hi===t._hi)&&this._lo>=t._lo},F.prototype.pow=function(t){if(0===t)return F.valueOf(1);var e=new F(this),n=F.valueOf(1),i=Math.abs(t);if(i>1)for(;i>0;)i%2==1&&n.selfMultiply(e),(i/=2)>0&&(e=e.sqr());else n=e;return t<0?n.reciprocal():n},F.prototype.ceil=function(){if(this.isNaN())return F.NaN;var t=Math.ceil(this._hi),e=0;return t===this._hi&&(e=Math.ceil(this._lo)),new F(t,e)},F.prototype.compareTo=function(t){var e=t;return this._hi<e._hi?-1:this._hi>e._hi?1:this._lo<e._lo?-1:this._lo>e._lo?1:0},F.prototype.rint=function(){if(this.isNaN())return this;return this.add(.5).floor()},F.prototype.setValue=function(){if(arguments[0]instanceof F){var t=arguments[0];return this.init(t),this}if("number"==typeof arguments[0]){var e=arguments[0];return this.init(e),this}},F.prototype.max=function(t){return this.ge(t)?this:t},F.prototype.sqrt=function(){if(this.isZero())return F.valueOf(0);if(this.isNegative())return F.NaN;var t=1/Math.sqrt(this._hi),e=this._hi*t,n=F.valueOf(e),i=this.subtract(n.sqr())._hi*(.5*t);return n.add(i)},F.prototype.selfAdd=function(){if(1===arguments.length){if(arguments[0]instanceof F){var t=arguments[0];return this.selfAdd(t._hi,t._lo)}if("number"==typeof arguments[0]){var e=arguments[0],n=null,i=null,r=null,o=null,s=null,a=null;return r=this._hi+e,s=r-this._hi,o=r-s,o=e-s+(this._hi-o),a=o+this._lo,n=r+a,i=a+(r-n),this._hi=n+i,this._lo=i+(n-this._hi),this}}else if(2===arguments.length){var u=arguments[0],l=arguments[1],c=null,p=null,h=null,f=null,g=null,d=null,y=null;f=this._hi+u,p=this._lo+l,g=f-(d=f-this._hi),h=p-(y=p-this._lo);var _=(c=f+(d=(g=u-d+(this._hi-g))+p))+(d=(h=l-y+(this._lo-h))+(d+(f-c))),m=d+(c-_);return this._hi=_,this._lo=m,this}},F.prototype.selfMultiply=function(){if(1===arguments.length){if(arguments[0]instanceof F){var t=arguments[0];return this.selfMultiply(t._hi,t._lo)}if("number"==typeof arguments[0]){var e=arguments[0];return this.selfMultiply(e,0)}}else if(2===arguments.length){var n=arguments[0],i=arguments[1],r=null,o=null,s=null,a=null,u=null,l=null;r=(u=F.SPLIT*this._hi)-this._hi,l=F.SPLIT*n,r=u-r,o=this._hi-r,s=l-n;var c=(u=this._hi*n)+(l=r*(s=l-s)-u+r*(a=n-s)+o*s+o*a+(this._hi*i+this._lo*n)),p=l+(r=u-c);return this._hi=c,this._lo=p,this}},F.prototype.selfSqr=function(){return this.selfMultiply(this)},F.prototype.floor=function(){if(this.isNaN())return F.NaN;var t=Math.floor(this._hi),e=0;return t===this._hi&&(e=Math.floor(this._lo)),new F(t,e)},F.prototype.negate=function(){return this.isNaN()?this:new F(-this._hi,-this._lo)},F.prototype.clone=function(){},F.prototype.multiply=function(){if(arguments[0]instanceof F){var t=arguments[0];return t.isNaN()?F.createNaN():F.copy(this).selfMultiply(t)}if("number"==typeof arguments[0]){var e=arguments[0];return v.isNaN(e)?F.createNaN():F.copy(this).selfMultiply(e,0)}},F.prototype.isNaN=function(){return v.isNaN(this._hi)},F.prototype.intValue=function(){return Math.trunc(this._hi)},F.prototype.toString=function(){var t=F.magnitude(this._hi);return t>=-3&&t<=20?this.toStandardNotation():this.toSciNotation()},F.prototype.toStandardNotation=function(){var t=this.getSpecialNumberString();if(null!==t)return t;var e=new Array(1).fill(null),n=this.extractSignificantDigits(!0,e),i=e[0]+1,r=n;if("."===n.charAt(0))r="0"+n;else if(i<0)r="0."+F.stringOfChar("0",-i)+n;else if(-1===n.indexOf(".")){var o=i-n.length;r=n+F.stringOfChar("0",o)+".0"}return this.isNegative()?"-"+r:r},F.prototype.reciprocal=function(){var t=null,e=null,n=null,i=null,r=null,o=null,s=null,a=null;e=(r=1/this._hi)-(t=(o=F.SPLIT*r)-(t=o-r)),n=(a=F.SPLIT*this._hi)-this._hi;var u=r+(o=(1-(s=r*this._hi)-(a=t*(n=a-n)-s+t*(i=this._hi-n)+e*n+e*i)-r*this._lo)/this._hi);return new F(u,r-u+o)},F.prototype.toSciNotation=function(){if(this.isZero())return F.SCI_NOT_ZERO;var t=this.getSpecialNumberString();if(null!==t)return t;var e=new Array(1).fill(null),n=this.extractSignificantDigits(!1,e),i=F.SCI_NOT_EXPONENT_CHAR+e[0];if("0"===n.charAt(0))throw new Error("Found leading zero: "+n);var r="";n.length>1&&(r=n.substring(1));var o=n.charAt(0)+"."+r;return this.isNegative()?"-"+o+i:o+i},F.prototype.abs=function(){return this.isNaN()?F.NaN:this.isNegative()?this.negate():new F(this)},F.prototype.isPositive=function(){return(this._hi>0||0===this._hi)&&this._lo>0},F.prototype.lt=function(t){return(this._hi<t._hi||this._hi===t._hi)&&this._lo<t._lo},F.prototype.add=function(){if(arguments[0]instanceof F){var t=arguments[0];return F.copy(this).selfAdd(t)}if("number"==typeof arguments[0]){var e=arguments[0];return F.copy(this).selfAdd(e)}},F.prototype.init=function(){if(1===arguments.length){if("number"==typeof arguments[0]){var t=arguments[0];this._hi=t,this._lo=0}else if(arguments[0]instanceof F){var e=arguments[0];this._hi=e._hi,this._lo=e._lo}}else if(2===arguments.length){var n=arguments[0],i=arguments[1];this._hi=n,this._lo=i}},F.prototype.gt=function(t){return(this._hi>t._hi||this._hi===t._hi)&&this._lo>t._lo},F.prototype.isNegative=function(){return(this._hi<0||0===this._hi)&&this._lo<0},F.prototype.trunc=function(){return this.isNaN()?F.NaN:this.isPositive()?this.floor():this.ceil()},F.prototype.signum=function(){return this._hi>0?1:this._hi<0?-1:this._lo>0?1:this._lo<0?-1:0},F.prototype.interfaces_=function(){return[e,E,x]},F.prototype.getClass=function(){return F},F.sqr=function(t){return F.valueOf(t).selfMultiply(t)},F.valueOf=function(){if("string"==typeof arguments[0]){var t=arguments[0];return F.parse(t)}if("number"==typeof arguments[0]){var e=arguments[0];return new F(e)}},F.sqrt=function(t){return F.valueOf(t).sqrt()},F.parse=function(t){for(var e=0,n=t.length;A.isWhitespace(t.charAt(e));)e++;var i=!1;if(e<n){var r=t.charAt(e);"-"!==r&&"+"!==r||(e++,"-"===r&&(i=!0))}for(var o=new F,s=0,a=0,u=0;!(e>=n);){var l=t.charAt(e);if(e++,A.isDigit(l)){var c=l-"0";o.selfMultiply(F.TEN),o.selfAdd(c),s++}else{if("."!==l){if("e"===l||"E"===l){var p=t.substring(e);try{u=M.parseInt(p)}catch(e){throw e instanceof Error?new Error("Invalid exponent "+p+" in string "+t):e}break}throw new Error("Unexpected character '"+l+"' at position "+e+" in string "+t)}a=s}}var h=o,f=s-a-u;if(0===f)h=o;else if(f>0){var g=F.TEN.pow(f);h=o.divide(g)}else if(f<0){var d=F.TEN.pow(-f);h=o.multiply(d)}return i?h.negate():h},F.createNaN=function(){return new F(v.NaN,v.NaN)},F.copy=function(t){return new F(t)},F.magnitude=function(t){var e=Math.abs(t),n=Math.log(e)/Math.log(10),i=Math.trunc(Math.floor(n));return 10*Math.pow(10,i)<=e&&(i+=1),i},F.stringOfChar=function(t,e){for(var n=new D,i=0;i<e;i++)n.append(t);return n.toString()},G.PI.get=function(){return new F(3.141592653589793,1.2246467991473532e-16)},G.TWO_PI.get=function(){return new F(6.283185307179586,2.4492935982947064e-16)},G.PI_2.get=function(){return new F(1.5707963267948966,6.123233995736766e-17)},G.E.get=function(){return new F(2.718281828459045,1.4456468917292502e-16)},G.NaN.get=function(){return new F(v.NaN,v.NaN)},G.EPS.get=function(){return 1.23259516440783e-32},G.SPLIT.get=function(){return 134217729},G.MAX_PRINT_DIGITS.get=function(){return 32},G.TEN.get=function(){return F.valueOf(10)},G.ONE.get=function(){return F.valueOf(1)},G.SCI_NOT_EXPONENT_CHAR.get=function(){return"E"},G.SCI_NOT_ZERO.get=function(){return"0.0E0"},Object.defineProperties(F,G);var q=function(){},B={DP_SAFE_EPSILON:{configurable:!0}};q.prototype.interfaces_=function(){return[]},q.prototype.getClass=function(){return q},q.orientationIndex=function(t,e,n){var i=q.orientationIndexFilter(t,e,n);if(i<=1)return i;var r=F.valueOf(e.x).selfAdd(-t.x),o=F.valueOf(e.y).selfAdd(-t.y),s=F.valueOf(n.x).selfAdd(-e.x),a=F.valueOf(n.y).selfAdd(-e.y);return r.selfMultiply(a).selfSubtract(o.selfMultiply(s)).signum()},q.signOfDet2x2=function(t,e,n,i){return t.multiply(i).selfSubtract(e.multiply(n)).signum()},q.intersection=function(t,e,n,i){var r=F.valueOf(i.y).selfSubtract(n.y).selfMultiply(F.valueOf(e.x).selfSubtract(t.x)),o=F.valueOf(i.x).selfSubtract(n.x).selfMultiply(F.valueOf(e.y).selfSubtract(t.y)),s=r.subtract(o),a=F.valueOf(i.x).selfSubtract(n.x).selfMultiply(F.valueOf(t.y).selfSubtract(n.y)),u=F.valueOf(i.y).selfSubtract(n.y).selfMultiply(F.valueOf(t.x).selfSubtract(n.x)),l=a.subtract(u).selfDivide(s).doubleValue(),c=F.valueOf(t.x).selfAdd(F.valueOf(e.x).selfSubtract(t.x).selfMultiply(l)).doubleValue(),p=F.valueOf(e.x).selfSubtract(t.x).selfMultiply(F.valueOf(t.y).selfSubtract(n.y)),h=F.valueOf(e.y).selfSubtract(t.y).selfMultiply(F.valueOf(t.x).selfSubtract(n.x)),f=p.subtract(h).selfDivide(s).doubleValue(),g=F.valueOf(n.y).selfAdd(F.valueOf(i.y).selfSubtract(n.y).selfMultiply(f)).doubleValue();return new C(c,g)},q.orientationIndexFilter=function(t,e,n){var i=null,r=(t.x-n.x)*(e.y-n.y),o=(t.y-n.y)*(e.x-n.x),s=r-o;if(r>0){if(o<=0)return q.signum(s);i=r+o}else{if(!(r<0))return q.signum(s);if(o>=0)return q.signum(s);i=-r-o}var a=q.DP_SAFE_EPSILON*i;return s>=a||-s>=a?q.signum(s):2},q.signum=function(t){return t>0?1:t<0?-1:0},B.DP_SAFE_EPSILON.get=function(){return 1e-15},Object.defineProperties(q,B);var V=function(){},U={X:{configurable:!0},Y:{configurable:!0},Z:{configurable:!0},M:{configurable:!0}};U.X.get=function(){return 0},U.Y.get=function(){return 1},U.Z.get=function(){return 2},U.M.get=function(){return 3},V.prototype.setOrdinate=function(t,e,n){},V.prototype.size=function(){},V.prototype.getOrdinate=function(t,e){},V.prototype.getCoordinate=function(){},V.prototype.getCoordinateCopy=function(t){},V.prototype.getDimension=function(){},V.prototype.getX=function(t){},V.prototype.clone=function(){},V.prototype.expandEnvelope=function(t){},V.prototype.copy=function(){},V.prototype.getY=function(t){},V.prototype.toCoordinateArray=function(){},V.prototype.interfaces_=function(){return[x]},V.prototype.getClass=function(){return V},Object.defineProperties(V,U);var z=function(){},X=function(t){function e(){t.call(this,"Projective point not representable on the Cartesian plane.")}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.interfaces_=function(){return[]},e.prototype.getClass=function(){return e},e}(z),Y=function(){};Y.arraycopy=function(t,e,n,i,r){for(var o=0,s=e;s<e+r;s++)n[i+o]=t[s],o++},Y.getProperty=function(t){return{"line.separator":"\n"}[t]};var k=function t(){if(this.x=null,this.y=null,this.w=null,0===arguments.length)this.x=0,this.y=0,this.w=1;else if(1===arguments.length){var e=arguments[0];this.x=e.x,this.y=e.y,this.w=1}else if(2===arguments.length){if("number"==typeof arguments[0]&&"number"==typeof arguments[1]){var n=arguments[0],i=arguments[1];this.x=n,this.y=i,this.w=1}else if(arguments[0]instanceof t&&arguments[1]instanceof t){var r=arguments[0],o=arguments[1];this.x=r.y*o.w-o.y*r.w,this.y=o.x*r.w-r.x*o.w,this.w=r.x*o.y-o.x*r.y}else if(arguments[0]instanceof C&&arguments[1]instanceof C){var s=arguments[0],a=arguments[1];this.x=s.y-a.y,this.y=a.x-s.x,this.w=s.x*a.y-a.x*s.y}}else if(3===arguments.length){var u=arguments[0],l=arguments[1],c=arguments[2];this.x=u,this.y=l,this.w=c}else if(4===arguments.length){var p=arguments[0],h=arguments[1],f=arguments[2],g=arguments[3],d=p.y-h.y,y=h.x-p.x,_=p.x*h.y-h.x*p.y,m=f.y-g.y,v=g.x-f.x,I=f.x*g.y-g.x*f.y;this.x=y*I-v*_,this.y=m*_-d*I,this.w=d*v-m*y}};k.prototype.getY=function(){var t=this.y/this.w;if(v.isNaN(t)||v.isInfinite(t))throw new X;return t},k.prototype.getX=function(){var t=this.x/this.w;if(v.isNaN(t)||v.isInfinite(t))throw new X;return t},k.prototype.getCoordinate=function(){var t=new C;return t.x=this.getX(),t.y=this.getY(),t},k.prototype.interfaces_=function(){return[]},k.prototype.getClass=function(){return k},k.intersection=function(t,e,n,i){var r=t.y-e.y,o=e.x-t.x,s=t.x*e.y-e.x*t.y,a=n.y-i.y,u=i.x-n.x,l=n.x*i.y-i.x*n.y,c=r*u-a*o,p=(o*l-u*s)/c,h=(a*s-r*l)/c;if(v.isNaN(p)||v.isInfinite(p)||v.isNaN(h)||v.isInfinite(h))throw new X;return new C(p,h)};var j=function t(){if(this._minx=null,this._maxx=null,this._miny=null,this._maxy=null,0===arguments.length)this.init();else if(1===arguments.length){if(arguments[0]instanceof C){var e=arguments[0];this.init(e.x,e.x,e.y,e.y)}else if(arguments[0]instanceof t){var n=arguments[0];this.init(n)}}else if(2===arguments.length){var i=arguments[0],r=arguments[1];this.init(i.x,r.x,i.y,r.y)}else if(4===arguments.length){var o=arguments[0],s=arguments[1],a=arguments[2],u=arguments[3];this.init(o,s,a,u)}},H={serialVersionUID:{configurable:!0}};j.prototype.getArea=function(){return this.getWidth()*this.getHeight()},j.prototype.equals=function(t){if(!(t instanceof j))return!1;var e=t;return this.isNull()?e.isNull():this._maxx===e.getMaxX()&&this._maxy===e.getMaxY()&&this._minx===e.getMinX()&&this._miny===e.getMinY()},j.prototype.intersection=function(t){if(this.isNull()||t.isNull()||!this.intersects(t))return new j;var e=this._minx>t._minx?this._minx:t._minx,n=this._miny>t._miny?this._miny:t._miny,i=this._maxx<t._maxx?this._maxx:t._maxx,r=this._maxy<t._maxy?this._maxy:t._maxy;return new j(e,i,n,r)},j.prototype.isNull=function(){return this._maxx<this._minx},j.prototype.getMaxX=function(){return this._maxx},j.prototype.covers=function(){if(1===arguments.length){if(arguments[0]instanceof C){var t=arguments[0];return this.covers(t.x,t.y)}if(arguments[0]instanceof j){var e=arguments[0];return!this.isNull()&&!e.isNull()&&(e.getMinX()>=this._minx&&e.getMaxX()<=this._maxx&&e.getMinY()>=this._miny&&e.getMaxY()<=this._maxy)}}else if(2===arguments.length){var n=arguments[0],i=arguments[1];return!this.isNull()&&(n>=this._minx&&n<=this._maxx&&i>=this._miny&&i<=this._maxy)}},j.prototype.intersects=function(){if(1===arguments.length){if(arguments[0]instanceof j){var t=arguments[0];return!this.isNull()&&!t.isNull()&&!(t._minx>this._maxx||t._maxx<this._minx||t._miny>this._maxy||t._maxy<this._miny)}if(arguments[0]instanceof C){var e=arguments[0];return this.intersects(e.x,e.y)}}else if(2===arguments.length){var n=arguments[0],i=arguments[1];return!this.isNull()&&!(n>this._maxx||n<this._minx||i>this._maxy||i<this._miny)}},j.prototype.getMinY=function(){return this._miny},j.prototype.getMinX=function(){return this._minx},j.prototype.expandToInclude=function(){if(1===arguments.length){if(arguments[0]instanceof C){var t=arguments[0];this.expandToInclude(t.x,t.y)}else if(arguments[0]instanceof j){var e=arguments[0];if(e.isNull())return null;this.isNull()?(this._minx=e.getMinX(),this._maxx=e.getMaxX(),this._miny=e.getMinY(),this._maxy=e.getMaxY()):(e._minx<this._minx&&(this._minx=e._minx),e._maxx>this._maxx&&(this._maxx=e._maxx),e._miny<this._miny&&(this._miny=e._miny),e._maxy>this._maxy&&(this._maxy=e._maxy))}}else if(2===arguments.length){var n=arguments[0],i=arguments[1];this.isNull()?(this._minx=n,this._maxx=n,this._miny=i,this._maxy=i):(n<this._minx&&(this._minx=n),n>this._maxx&&(this._maxx=n),i<this._miny&&(this._miny=i),i>this._maxy&&(this._maxy=i))}},j.prototype.minExtent=function(){if(this.isNull())return 0;var t=this.getWidth(),e=this.getHeight();return t<e?t:e},j.prototype.getWidth=function(){return this.isNull()?0:this._maxx-this._minx},j.prototype.compareTo=function(t){var e=t;return this.isNull()?e.isNull()?0:-1:e.isNull()?1:this._minx<e._minx?-1:this._minx>e._minx?1:this._miny<e._miny?-1:this._miny>e._miny?1:this._maxx<e._maxx?-1:this._maxx>e._maxx?1:this._maxy<e._maxy?-1:this._maxy>e._maxy?1:0},j.prototype.translate=function(t,e){if(this.isNull())return null;this.init(this.getMinX()+t,this.getMaxX()+t,this.getMinY()+e,this.getMaxY()+e)},j.prototype.toString=function(){return"Env["+this._minx+" : "+this._maxx+", "+this._miny+" : "+this._maxy+"]"},j.prototype.setToNull=function(){this._minx=0,this._maxx=-1,this._miny=0,this._maxy=-1},j.prototype.getHeight=function(){return this.isNull()?0:this._maxy-this._miny},j.prototype.maxExtent=function(){if(this.isNull())return 0;var t=this.getWidth(),e=this.getHeight();return t>e?t:e},j.prototype.expandBy=function(){if(1===arguments.length){var t=arguments[0];this.expandBy(t,t)}else if(2===arguments.length){var e=arguments[0],n=arguments[1];if(this.isNull())return null;this._minx-=e,this._maxx+=e,this._miny-=n,this._maxy+=n,(this._minx>this._maxx||this._miny>this._maxy)&&this.setToNull()}},j.prototype.contains=function(){if(1===arguments.length){if(arguments[0]instanceof j){var t=arguments[0];return this.covers(t)}if(arguments[0]instanceof C){var e=arguments[0];return this.covers(e)}}else if(2===arguments.length){var n=arguments[0],i=arguments[1];return this.covers(n,i)}},j.prototype.centre=function(){return this.isNull()?null:new C((this.getMinX()+this.getMaxX())/2,(this.getMinY()+this.getMaxY())/2)},j.prototype.init=function(){if(0===arguments.length)this.setToNull();else if(1===arguments.length){if(arguments[0]instanceof C){var t=arguments[0];this.init(t.x,t.x,t.y,t.y)}else if(arguments[0]instanceof j){var e=arguments[0];this._minx=e._minx,this._maxx=e._maxx,this._miny=e._miny,this._maxy=e._maxy}}else if(2===arguments.length){var n=arguments[0],i=arguments[1];this.init(n.x,i.x,n.y,i.y)}else if(4===arguments.length){var r=arguments[0],o=arguments[1],s=arguments[2],a=arguments[3];r<o?(this._minx=r,this._maxx=o):(this._minx=o,this._maxx=r),s<a?(this._miny=s,this._maxy=a):(this._miny=a,this._maxy=s)}},j.prototype.getMaxY=function(){return this._maxy},j.prototype.distance=function(t){if(this.intersects(t))return 0;var e=0;this._maxx<t._minx?e=t._minx-this._maxx:this._minx>t._maxx&&(e=this._minx-t._maxx);var n=0;return this._maxy<t._miny?n=t._miny-this._maxy:this._miny>t._maxy&&(n=this._miny-t._maxy),0===e?n:0===n?e:Math.sqrt(e*e+n*n)},j.prototype.hashCode=function(){var t=17;return t=37*t+C.hashCode(this._minx),t=37*t+C.hashCode(this._maxx),t=37*t+C.hashCode(this._miny),t=37*t+C.hashCode(this._maxy)},j.prototype.interfaces_=function(){return[E,e]},j.prototype.getClass=function(){return j},j.intersects=function(){if(3===arguments.length){var t=arguments[0],e=arguments[1],n=arguments[2];return n.x>=(t.x<e.x?t.x:e.x)&&n.x<=(t.x>e.x?t.x:e.x)&&n.y>=(t.y<e.y?t.y:e.y)&&n.y<=(t.y>e.y?t.y:e.y)}if(4===arguments.length){var i=arguments[0],r=arguments[1],o=arguments[2],s=arguments[3],a=Math.min(o.x,s.x),u=Math.max(o.x,s.x),l=Math.min(i.x,r.x),c=Math.max(i.x,r.x);return!(l>u)&&(!(c<a)&&(a=Math.min(o.y,s.y),u=Math.max(o.y,s.y),l=Math.min(i.y,r.y),c=Math.max(i.y,r.y),!(l>u)&&!(c<a)))}},H.serialVersionUID.get=function(){return 0x51845cd552189800},Object.defineProperties(j,H);var W={typeStr:/^\s*(\w+)\s*\(\s*(.*)\s*\)\s*$/,emptyTypeStr:/^\s*(\w+)\s*EMPTY\s*$/,spaces:/\s+/,parenComma:/\)\s*,\s*\(/,doubleParenComma:/\)\s*\)\s*,\s*\(\s*\(/,trimParens:/^\s*\(?(.*?)\)?\s*$/},K=function(t){this.geometryFactory=t||new _e};K.prototype.read=function(t){var e,n,i;t=t.replace(/[\n\r]/g," ");var r=W.typeStr.exec(t);if(-1!==t.search("EMPTY")&&((r=W.emptyTypeStr.exec(t))[2]=void 0),r&&(n=r[1].toLowerCase(),i=r[2],Q[n]&&(e=Q[n].apply(this,[i]))),void 0===e)throw new Error("Could not parse WKT "+t);return e},K.prototype.write=function(t){return this.extractGeometry(t)},K.prototype.extractGeometry=function(t){var e=t.getGeometryType().toLowerCase();if(!J[e])return null;var n=e.toUpperCase();return t.isEmpty()?n+" EMPTY":n+"("+J[e].apply(this,[t])+")"};var J={coordinate:function(t){return t.x+" "+t.y},point:function(t){return J.coordinate.call(this,t._coordinates._coordinates[0])},multipoint:function(t){for(var e=[],n=0,i=t._geometries.length;n<i;++n)e.push("("+J.point.apply(this,[t._geometries[n]])+")");return e.join(",")},linestring:function(t){for(var e=[],n=0,i=t._points._coordinates.length;n<i;++n)e.push(J.coordinate.apply(this,[t._points._coordinates[n]]));return e.join(",")},linearring:function(t){for(var e=[],n=0,i=t._points._coordinates.length;n<i;++n)e.push(J.coordinate.apply(this,[t._points._coordinates[n]]));return e.join(",")},multilinestring:function(t){for(var e=[],n=0,i=t._geometries.length;n<i;++n)e.push("("+J.linestring.apply(this,[t._geometries[n]])+")");return e.join(",")},polygon:function(t){var e=[];e.push("("+J.linestring.apply(this,[t._shell])+")");for(var n=0,i=t._holes.length;n<i;++n)e.push("("+J.linestring.apply(this,[t._holes[n]])+")");return e.join(",")},multipolygon:function(t){for(var e=[],n=0,i=t._geometries.length;n<i;++n)e.push("("+J.polygon.apply(this,[t._geometries[n]])+")");return e.join(",")},geometrycollection:function(t){for(var e=[],n=0,i=t._geometries.length;n<i;++n)e.push(this.extractGeometry(t._geometries[n]));return e.join(",")}},Q={point:function(t){if(void 0===t)return this.geometryFactory.createPoint();var e=t.trim().split(W.spaces);return this.geometryFactory.createPoint(new C(Number.parseFloat(e[0]),Number.parseFloat(e[1])))},multipoint:function(t){if(void 0===t)return this.geometryFactory.createMultiPoint();for(var e,n=t.trim().split(","),i=[],r=0,o=n.length;r<o;++r)e=n[r].replace(W.trimParens,"$1"),i.push(Q.point.apply(this,[e]));return this.geometryFactory.createMultiPoint(i)},linestring:function(t){if(void 0===t)return this.geometryFactory.createLineString();for(var e,n=t.trim().split(","),i=[],r=0,o=n.length;r<o;++r)e=n[r].trim().split(W.spaces),i.push(new C(Number.parseFloat(e[0]),Number.parseFloat(e[1])));return this.geometryFactory.createLineString(i)},linearring:function(t){if(void 0===t)return this.geometryFactory.createLinearRing();for(var e,n=t.trim().split(","),i=[],r=0,o=n.length;r<o;++r)e=n[r].trim().split(W.spaces),i.push(new C(Number.parseFloat(e[0]),Number.parseFloat(e[1])));return this.geometryFactory.createLinearRing(i)},multilinestring:function(t){if(void 0===t)return this.geometryFactory.createMultiLineString();for(var e,n=t.trim().split(W.parenComma),i=[],r=0,o=n.length;r<o;++r)e=n[r].replace(W.trimParens,"$1"),i.push(Q.linestring.apply(this,[e]));return this.geometryFactory.createMultiLineString(i)},polygon:function(t){if(void 0===t)return this.geometryFactory.createPolygon();for(var e,n,i,r,o=t.trim().split(W.parenComma),s=[],a=0,u=o.length;a<u;++a)e=o[a].replace(W.trimParens,"$1"),n=Q.linestring.apply(this,[e]),i=this.geometryFactory.createLinearRing(n._points),0===a?r=i:s.push(i);return this.geometryFactory.createPolygon(r,s)},multipolygon:function(t){if(void 0===t)return this.geometryFactory.createMultiPolygon();for(var e,n=t.trim().split(W.doubleParenComma),i=[],r=0,o=n.length;r<o;++r)e=n[r].replace(W.trimParens,"$1"),i.push(Q.polygon.apply(this,[e]));return this.geometryFactory.createMultiPolygon(i)},geometrycollection:function(t){if(void 0===t)return this.geometryFactory.createGeometryCollection();for(var e=(t=t.replace(/,\s*([A-Za-z])/g,"|$1")).trim().split("|"),n=[],i=0,r=e.length;i<r;++i)n.push(this.read(e[i]));return this.geometryFactory.createGeometryCollection(n)}},Z=function(t){this.parser=new K(t)};Z.prototype.write=function(t){return this.parser.write(t)},Z.toLineString=function(t,e){if(2!==arguments.length)throw new Error("Not implemented");return"LINESTRING ( "+t.x+" "+t.y+", "+e.x+" "+e.y+" )"};var $=function(t){function e(e){t.call(this,e),this.name="RuntimeException",this.message=e,this.stack=(new t).stack}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e}(Error),tt=function(t){function e(){if(t.call(this),0===arguments.length)t.call(this);else if(1===arguments.length){var e=arguments[0];t.call(this,e)}}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.interfaces_=function(){return[]},e.prototype.getClass=function(){return e},e}($),et=function(){};et.prototype.interfaces_=function(){return[]},et.prototype.getClass=function(){return et},et.shouldNeverReachHere=function(){if(0===arguments.length)et.shouldNeverReachHere(null);else if(1===arguments.length){var t=arguments[0];throw new tt("Should never reach here"+(null!==t?": "+t:""))}},et.isTrue=function(){var t,e;if(1===arguments.length)t=arguments[0],et.isTrue(t,null);else if(2===arguments.length&&(t=arguments[0],e=arguments[1],!t))throw null===e?new tt:new tt(e)},et.equals=function(){var t,e,n;if(2===arguments.length)t=arguments[0],e=arguments[1],et.equals(t,e,null);else if(3===arguments.length&&(t=arguments[0],e=arguments[1],n=arguments[2],!e.equals(t)))throw new tt("Expected "+t+" but encountered "+e+(null!==n?": "+n:""))};var nt=function(){this._result=null,this._inputLines=Array(2).fill().map(function(){return Array(2)}),this._intPt=new Array(2).fill(null),this._intLineIndex=null,this._isProper=null,this._pa=null,this._pb=null,this._precisionModel=null,this._intPt[0]=new C,this._intPt[1]=new C,this._pa=this._intPt[0],this._pb=this._intPt[1],this._result=0},it={DONT_INTERSECT:{configurable:!0},DO_INTERSECT:{configurable:!0},COLLINEAR:{configurable:!0},NO_INTERSECTION:{configurable:!0},POINT_INTERSECTION:{configurable:!0},COLLINEAR_INTERSECTION:{configurable:!0}};nt.prototype.getIndexAlongSegment=function(t,e){return this.computeIntLineIndex(),this._intLineIndex[t][e]},nt.prototype.getTopologySummary=function(){var t=new D;return this.isEndPoint()&&t.append(" endpoint"),this._isProper&&t.append(" proper"),this.isCollinear()&&t.append(" collinear"),t.toString()},nt.prototype.computeIntersection=function(t,e,n,i){this._inputLines[0][0]=t,this._inputLines[0][1]=e,this._inputLines[1][0]=n,this._inputLines[1][1]=i,this._result=this.computeIntersect(t,e,n,i)},nt.prototype.getIntersectionNum=function(){return this._result},nt.prototype.computeIntLineIndex=function(){if(0===arguments.length)null===this._intLineIndex&&(this._intLineIndex=Array(2).fill().map(function(){return Array(2)}),this.computeIntLineIndex(0),this.computeIntLineIndex(1));else if(1===arguments.length){var t=arguments[0];this.getEdgeDistance(t,0)>this.getEdgeDistance(t,1)?(this._intLineIndex[t][0]=0,this._intLineIndex[t][1]=1):(this._intLineIndex[t][0]=1,this._intLineIndex[t][1]=0)}},nt.prototype.isProper=function(){return this.hasIntersection()&&this._isProper},nt.prototype.setPrecisionModel=function(t){this._precisionModel=t},nt.prototype.isInteriorIntersection=function(){if(0===arguments.length)return!!this.isInteriorIntersection(0)||!!this.isInteriorIntersection(1);if(1===arguments.length){for(var t=arguments[0],e=0;e<this._result;e++)if(!this._intPt[e].equals2D(this._inputLines[t][0])&&!this._intPt[e].equals2D(this._inputLines[t][1]))return!0;return!1}},nt.prototype.getIntersection=function(t){return this._intPt[t]},nt.prototype.isEndPoint=function(){return this.hasIntersection()&&!this._isProper},nt.prototype.hasIntersection=function(){return this._result!==nt.NO_INTERSECTION},nt.prototype.getEdgeDistance=function(t,e){return nt.computeEdgeDistance(this._intPt[e],this._inputLines[t][0],this._inputLines[t][1])},nt.prototype.isCollinear=function(){return this._result===nt.COLLINEAR_INTERSECTION},nt.prototype.toString=function(){return Z.toLineString(this._inputLines[0][0],this._inputLines[0][1])+" - "+Z.toLineString(this._inputLines[1][0],this._inputLines[1][1])+this.getTopologySummary()},nt.prototype.getEndpoint=function(t,e){return this._inputLines[t][e]},nt.prototype.isIntersection=function(t){for(var e=0;e<this._result;e++)if(this._intPt[e].equals2D(t))return!0;return!1},nt.prototype.getIntersectionAlongSegment=function(t,e){return this.computeIntLineIndex(),this._intPt[this._intLineIndex[t][e]]},nt.prototype.interfaces_=function(){return[]},nt.prototype.getClass=function(){return nt},nt.computeEdgeDistance=function(t,e,n){var i=Math.abs(n.x-e.x),r=Math.abs(n.y-e.y),o=-1;if(t.equals(e))o=0;else if(t.equals(n))o=i>r?i:r;else{var s=Math.abs(t.x-e.x),a=Math.abs(t.y-e.y);0!==(o=i>r?s:a)||t.equals(e)||(o=Math.max(s,a))}return et.isTrue(!(0===o&&!t.equals(e)),"Bad distance calculation"),o},nt.nonRobustComputeEdgeDistance=function(t,e,n){var i=t.x-e.x,r=t.y-e.y,o=Math.sqrt(i*i+r*r);return et.isTrue(!(0===o&&!t.equals(e)),"Invalid distance calculation"),o},it.DONT_INTERSECT.get=function(){return 0},it.DO_INTERSECT.get=function(){return 1},it.COLLINEAR.get=function(){return 2},it.NO_INTERSECTION.get=function(){return 0},it.POINT_INTERSECTION.get=function(){return 1},it.COLLINEAR_INTERSECTION.get=function(){return 2},Object.defineProperties(nt,it);var rt=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.isInSegmentEnvelopes=function(t){var e=new j(this._inputLines[0][0],this._inputLines[0][1]),n=new j(this._inputLines[1][0],this._inputLines[1][1]);return e.contains(t)&&n.contains(t)},e.prototype.computeIntersection=function(){if(3!==arguments.length)return t.prototype.computeIntersection.apply(this,arguments);var e=arguments[0],n=arguments[1],i=arguments[2];if(this._isProper=!1,j.intersects(n,i,e)&&0===at.orientationIndex(n,i,e)&&0===at.orientationIndex(i,n,e))return this._isProper=!0,(e.equals(n)||e.equals(i))&&(this._isProper=!1),this._result=t.POINT_INTERSECTION,null;this._result=t.NO_INTERSECTION},e.prototype.normalizeToMinimum=function(t,e,n,i,r){r.x=this.smallestInAbsValue(t.x,e.x,n.x,i.x),r.y=this.smallestInAbsValue(t.y,e.y,n.y,i.y),t.x-=r.x,t.y-=r.y,e.x-=r.x,e.y-=r.y,n.x-=r.x,n.y-=r.y,i.x-=r.x,i.y-=r.y},e.prototype.safeHCoordinateIntersection=function(t,n,i,r){var o=null;try{o=k.intersection(t,n,i,r)}catch(s){if(!(s instanceof X))throw s;o=e.nearestEndpoint(t,n,i,r)}return o},e.prototype.intersection=function(t,n,i,r){var o=this.intersectionWithNormalization(t,n,i,r);return this.isInSegmentEnvelopes(o)||(o=new C(e.nearestEndpoint(t,n,i,r))),null!==this._precisionModel&&this._precisionModel.makePrecise(o),o},e.prototype.smallestInAbsValue=function(t,e,n,i){var r=t,o=Math.abs(r);return Math.abs(e)<o&&(r=e,o=Math.abs(e)),Math.abs(n)<o&&(r=n,o=Math.abs(n)),Math.abs(i)<o&&(r=i),r},e.prototype.checkDD=function(t,e,n,i,r){var o=q.intersection(t,e,n,i),s=this.isInSegmentEnvelopes(o);Y.out.println("DD in env = "+s+"  --------------------- "+o),r.distance(o)>1e-4&&Y.out.println("Distance = "+r.distance(o))},e.prototype.intersectionWithNormalization=function(t,e,n,i){var r=new C(t),o=new C(e),s=new C(n),a=new C(i),u=new C;this.normalizeToEnvCentre(r,o,s,a,u);var l=this.safeHCoordinateIntersection(r,o,s,a);return l.x+=u.x,l.y+=u.y,l},e.prototype.computeCollinearIntersection=function(e,n,i,r){var o=j.intersects(e,n,i),s=j.intersects(e,n,r),a=j.intersects(i,r,e),u=j.intersects(i,r,n);return o&&s?(this._intPt[0]=i,this._intPt[1]=r,t.COLLINEAR_INTERSECTION):a&&u?(this._intPt[0]=e,this._intPt[1]=n,t.COLLINEAR_INTERSECTION):o&&a?(this._intPt[0]=i,this._intPt[1]=e,!i.equals(e)||s||u?t.COLLINEAR_INTERSECTION:t.POINT_INTERSECTION):o&&u?(this._intPt[0]=i,this._intPt[1]=n,!i.equals(n)||s||a?t.COLLINEAR_INTERSECTION:t.POINT_INTERSECTION):s&&a?(this._intPt[0]=r,this._intPt[1]=e,!r.equals(e)||o||u?t.COLLINEAR_INTERSECTION:t.POINT_INTERSECTION):s&&u?(this._intPt[0]=r,this._intPt[1]=n,!r.equals(n)||o||a?t.COLLINEAR_INTERSECTION:t.POINT_INTERSECTION):t.NO_INTERSECTION},e.prototype.normalizeToEnvCentre=function(t,e,n,i,r){var o=t.x<e.x?t.x:e.x,s=t.y<e.y?t.y:e.y,a=t.x>e.x?t.x:e.x,u=t.y>e.y?t.y:e.y,l=n.x<i.x?n.x:i.x,c=n.y<i.y?n.y:i.y,p=n.x>i.x?n.x:i.x,h=n.y>i.y?n.y:i.y,f=((o>l?o:l)+(a<p?a:p))/2,g=((s>c?s:c)+(u<h?u:h))/2;r.x=f,r.y=g,t.x-=r.x,t.y-=r.y,e.x-=r.x,e.y-=r.y,n.x-=r.x,n.y-=r.y,i.x-=r.x,i.y-=r.y},e.prototype.computeIntersect=function(e,n,i,r){if(this._isProper=!1,!j.intersects(e,n,i,r))return t.NO_INTERSECTION;var o=at.orientationIndex(e,n,i),s=at.orientationIndex(e,n,r);if(o>0&&s>0||o<0&&s<0)return t.NO_INTERSECTION;var a=at.orientationIndex(i,r,e),u=at.orientationIndex(i,r,n);if(a>0&&u>0||a<0&&u<0)return t.NO_INTERSECTION;return 0===o&&0===s&&0===a&&0===u?this.computeCollinearIntersection(e,n,i,r):(0===o||0===s||0===a||0===u?(this._isProper=!1,e.equals2D(i)||e.equals2D(r)?this._intPt[0]=e:n.equals2D(i)||n.equals2D(r)?this._intPt[0]=n:0===o?this._intPt[0]=new C(i):0===s?this._intPt[0]=new C(r):0===a?this._intPt[0]=new C(e):0===u&&(this._intPt[0]=new C(n))):(this._isProper=!0,this._intPt[0]=this.intersection(e,n,i,r)),t.POINT_INTERSECTION)},e.prototype.interfaces_=function(){return[]},e.prototype.getClass=function(){return e},e.nearestEndpoint=function(t,e,n,i){var r=t,o=at.distancePointLine(t,n,i),s=at.distancePointLine(e,n,i);return s<o&&(o=s,r=e),(s=at.distancePointLine(n,t,e))<o&&(o=s,r=n),(s=at.distancePointLine(i,t,e))<o&&(o=s,r=i),r},e}(nt),ot=function(){};ot.prototype.interfaces_=function(){return[]},ot.prototype.getClass=function(){return ot},ot.orientationIndex=function(t,e,n){var i=e.x-t.x,r=e.y-t.y,o=n.x-e.x,s=n.y-e.y;return ot.signOfDet2x2(i,r,o,s)},ot.signOfDet2x2=function(t,e,n,i){var r=null,o=null,s=null;if(r=1,0===t||0===i)return 0===e||0===n?0:e>0?n>0?-r:r:n>0?r:-r;if(0===e||0===n)return i>0?t>0?r:-r:t>0?-r:r;if(e>0?i>0?e<=i||(r=-r,o=t,t=n,n=o,o=e,e=i,i=o):e<=-i?(r=-r,n=-n,i=-i):(o=t,t=-n,n=o,o=e,e=-i,i=o):i>0?-e<=i?(r=-r,t=-t,e=-e):(o=-t,t=n,n=o,o=-e,e=i,i=o):e>=i?(t=-t,e=-e,n=-n,i=-i):(r=-r,o=-t,t=-n,n=o,o=-e,e=-i,i=o),t>0){if(!(n>0))return r;if(!(t<=n))return r}else{if(n>0)return-r;if(!(t>=n))return-r;r=-r,t=-t,n=-n}for(;;){if(s=Math.floor(n/t),n-=s*t,(i-=s*e)<0)return-r;if(i>e)return r;if(t>n+n){if(e<i+i)return r}else{if(e>i+i)return-r;n=t-n,i=e-i,r=-r}if(0===i)return 0===n?0:-r;if(0===n)return r;if(s=Math.floor(t/n),t-=s*n,(e-=s*i)<0)return r;if(e>i)return-r;if(n>t+t){if(i<e+e)return-r}else{if(i>e+e)return r;t=n-t,e=i-e,r=-r}if(0===e)return 0===t?0:r;if(0===t)return-r}};var st=function(){this._p=null,this._crossingCount=0,this._isPointOnSegment=!1;var t=arguments[0];this._p=t};st.prototype.countSegment=function(t,e){if(t.x<this._p.x&&e.x<this._p.x)return null;if(this._p.x===e.x&&this._p.y===e.y)return this._isPointOnSegment=!0,null;if(t.y===this._p.y&&e.y===this._p.y){var n=t.x,i=e.x;return n>i&&(n=e.x,i=t.x),this._p.x>=n&&this._p.x<=i&&(this._isPointOnSegment=!0),null}if(t.y>this._p.y&&e.y<=this._p.y||e.y>this._p.y&&t.y<=this._p.y){var r=t.x-this._p.x,o=t.y-this._p.y,s=e.x-this._p.x,a=e.y-this._p.y,u=ot.signOfDet2x2(r,o,s,a);if(0===u)return this._isPointOnSegment=!0,null;a<o&&(u=-u),u>0&&this._crossingCount++}},st.prototype.isPointInPolygon=function(){return this.getLocation()!==w.EXTERIOR},st.prototype.getLocation=function(){return this._isPointOnSegment?w.BOUNDARY:this._crossingCount%2==1?w.INTERIOR:w.EXTERIOR},st.prototype.isOnSegment=function(){return this._isPointOnSegment},st.prototype.interfaces_=function(){return[]},st.prototype.getClass=function(){return st},st.locatePointInRing=function(){if(arguments[0]instanceof C&&T(arguments[1],V)){for(var t=arguments[0],e=arguments[1],n=new st(t),i=new C,r=new C,o=1;o<e.size();o++)if(e.getCoordinate(o,i),e.getCoordinate(o-1,r),n.countSegment(i,r),n.isOnSegment())return n.getLocation();return n.getLocation()}if(arguments[0]instanceof C&&arguments[1]instanceof Array){for(var s=arguments[0],a=arguments[1],u=new st(s),l=1;l<a.length;l++){var c=a[l],p=a[l-1];if(u.countSegment(c,p),u.isOnSegment())return u.getLocation()}return u.getLocation()}};var at=function(){},ut={CLOCKWISE:{configurable:!0},RIGHT:{configurable:!0},COUNTERCLOCKWISE:{configurable:!0},LEFT:{configurable:!0},COLLINEAR:{configurable:!0},STRAIGHT:{configurable:!0}};at.prototype.interfaces_=function(){return[]},at.prototype.getClass=function(){return at},at.orientationIndex=function(t,e,n){return q.orientationIndex(t,e,n)},at.signedArea=function(){if(arguments[0]instanceof Array){var t=arguments[0];if(t.length<3)return 0;for(var e=0,n=t[0].x,i=1;i<t.length-1;i++){var r=t[i].x-n,o=t[i+1].y;e+=r*(t[i-1].y-o)}return e/2}if(T(arguments[0],V)){var s=arguments[0],a=s.size();if(a<3)return 0;var u=new C,l=new C,c=new C;s.getCoordinate(0,l),s.getCoordinate(1,c);var p=l.x;c.x-=p;for(var h=0,f=1;f<a-1;f++)u.y=l.y,l.x=c.x,l.y=c.y,s.getCoordinate(f+1,c),c.x-=p,h+=l.x*(u.y-c.y);return h/2}},at.distanceLineLine=function(t,e,n,i){if(t.equals(e))return at.distancePointLine(t,n,i);if(n.equals(i))return at.distancePointLine(i,t,e);var r=!1;if(j.intersects(t,e,n,i)){var o=(e.x-t.x)*(i.y-n.y)-(e.y-t.y)*(i.x-n.x);if(0===o)r=!0;else{var s=(t.y-n.y)*(i.x-n.x)-(t.x-n.x)*(i.y-n.y),a=((t.y-n.y)*(e.x-t.x)-(t.x-n.x)*(e.y-t.y))/o,u=s/o;(u<0||u>1||a<0||a>1)&&(r=!0)}}else r=!0;return r?R.min(at.distancePointLine(t,n,i),at.distancePointLine(e,n,i),at.distancePointLine(n,t,e),at.distancePointLine(i,t,e)):0},at.isPointInRing=function(t,e){return at.locatePointInRing(t,e)!==w.EXTERIOR},at.computeLength=function(t){var e=t.size();if(e<=1)return 0;var n=0,i=new C;t.getCoordinate(0,i);for(var r=i.x,o=i.y,s=1;s<e;s++){t.getCoordinate(s,i);var a=i.x,u=i.y,l=a-r,c=u-o;n+=Math.sqrt(l*l+c*c),r=a,o=u}return n},at.isCCW=function(t){var e=t.length-1;if(e<3)throw new m("Ring has fewer than 4 points, so orientation cannot be determined");for(var n=t[0],i=0,r=1;r<=e;r++){var o=t[r];o.y>n.y&&(n=o,i=r)}var s=i;do{(s-=1)<0&&(s=e)}while(t[s].equals2D(n)&&s!==i);var a=i;do{a=(a+1)%e}while(t[a].equals2D(n)&&a!==i);var u=t[s],l=t[a];if(u.equals2D(n)||l.equals2D(n)||u.equals2D(l))return!1;var c=at.computeOrientation(u,n,l),p=!1;return p=0===c?u.x>l.x:c>0,p},at.locatePointInRing=function(t,e){return st.locatePointInRing(t,e)},at.distancePointLinePerpendicular=function(t,e,n){var i=(n.x-e.x)*(n.x-e.x)+(n.y-e.y)*(n.y-e.y),r=((e.y-t.y)*(n.x-e.x)-(e.x-t.x)*(n.y-e.y))/i;return Math.abs(r)*Math.sqrt(i)},at.computeOrientation=function(t,e,n){return at.orientationIndex(t,e,n)},at.distancePointLine=function(){if(2===arguments.length){var t=arguments[0],e=arguments[1];if(0===e.length)throw new m("Line array must contain at least one vertex");for(var n=t.distance(e[0]),i=0;i<e.length-1;i++){var r=at.distancePointLine(t,e[i],e[i+1]);r<n&&(n=r)}return n}if(3===arguments.length){var o=arguments[0],s=arguments[1],a=arguments[2];if(s.x===a.x&&s.y===a.y)return o.distance(s);var u=(a.x-s.x)*(a.x-s.x)+(a.y-s.y)*(a.y-s.y),l=((o.x-s.x)*(a.x-s.x)+(o.y-s.y)*(a.y-s.y))/u;if(l<=0)return o.distance(s);if(l>=1)return o.distance(a);var c=((s.y-o.y)*(a.x-s.x)-(s.x-o.x)*(a.y-s.y))/u;return Math.abs(c)*Math.sqrt(u)}},at.isOnLine=function(t,e){for(var n=new rt,i=1;i<e.length;i++){var r=e[i-1],o=e[i];if(n.computeIntersection(t,r,o),n.hasIntersection())return!0}return!1},ut.CLOCKWISE.get=function(){return-1},ut.RIGHT.get=function(){return at.CLOCKWISE},ut.COUNTERCLOCKWISE.get=function(){return 1},ut.LEFT.get=function(){return at.COUNTERCLOCKWISE},ut.COLLINEAR.get=function(){return 0},ut.STRAIGHT.get=function(){return at.COLLINEAR},Object.defineProperties(at,ut);var lt=function(){};lt.prototype.filter=function(t){},lt.prototype.interfaces_=function(){return[]},lt.prototype.getClass=function(){return lt};var ct=function(){var t=arguments[0];this._envelope=null,this._factory=null,this._SRID=null,this._userData=null,this._factory=t,this._SRID=t.getSRID()},pt={serialVersionUID:{configurable:!0},SORTINDEX_POINT:{configurable:!0},SORTINDEX_MULTIPOINT:{configurable:!0},SORTINDEX_LINESTRING:{configurable:!0},SORTINDEX_LINEARRING:{configurable:!0},SORTINDEX_MULTILINESTRING:{configurable:!0},SORTINDEX_POLYGON:{configurable:!0},SORTINDEX_MULTIPOLYGON:{configurable:!0},SORTINDEX_GEOMETRYCOLLECTION:{configurable:!0},geometryChangedFilter:{configurable:!0}};ct.prototype.isGeometryCollection=function(){return this.getSortIndex()===ct.SORTINDEX_GEOMETRYCOLLECTION},ct.prototype.getFactory=function(){return this._factory},ct.prototype.getGeometryN=function(t){return this},ct.prototype.getArea=function(){return 0},ct.prototype.isRectangle=function(){return!1},ct.prototype.equals=function(){if(arguments[0]instanceof ct){var t=arguments[0];return null!==t&&this.equalsTopo(t)}if(arguments[0]instanceof Object){var e=arguments[0];if(!(e instanceof ct))return!1;var n=e;return this.equalsExact(n)}},ct.prototype.equalsExact=function(t){return this===t||this.equalsExact(t,0)},ct.prototype.geometryChanged=function(){this.apply(ct.geometryChangedFilter)},ct.prototype.geometryChangedAction=function(){this._envelope=null},ct.prototype.equalsNorm=function(t){return null!==t&&this.norm().equalsExact(t.norm())},ct.prototype.getLength=function(){return 0},ct.prototype.getNumGeometries=function(){return 1},ct.prototype.compareTo=function(){if(1===arguments.length){var t=arguments[0],e=t;return this.getSortIndex()!==e.getSortIndex()?this.getSortIndex()-e.getSortIndex():this.isEmpty()&&e.isEmpty()?0:this.isEmpty()?-1:e.isEmpty()?1:this.compareToSameClass(t)}if(2===arguments.length){var n=arguments[0],i=arguments[1];return this.getSortIndex()!==n.getSortIndex()?this.getSortIndex()-n.getSortIndex():this.isEmpty()&&n.isEmpty()?0:this.isEmpty()?-1:n.isEmpty()?1:this.compareToSameClass(n,i)}},ct.prototype.getUserData=function(){return this._userData},ct.prototype.getSRID=function(){return this._SRID},ct.prototype.getEnvelope=function(){return this.getFactory().toGeometry(this.getEnvelopeInternal())},ct.prototype.checkNotGeometryCollection=function(t){if(t.getSortIndex()===ct.SORTINDEX_GEOMETRYCOLLECTION)throw new m("This method does not support GeometryCollection arguments")},ct.prototype.equal=function(t,e,n){return 0===n?t.equals(e):t.distance(e)<=n},ct.prototype.norm=function(){var t=this.copy();return t.normalize(),t},ct.prototype.getPrecisionModel=function(){return this._factory.getPrecisionModel()},ct.prototype.getEnvelopeInternal=function(){return null===this._envelope&&(this._envelope=this.computeEnvelopeInternal()),new j(this._envelope)},ct.prototype.setSRID=function(t){this._SRID=t},ct.prototype.setUserData=function(t){this._userData=t},ct.prototype.compare=function(t,e){for(var n=t.iterator(),i=e.iterator();n.hasNext()&&i.hasNext();){var r=n.next(),o=i.next(),s=r.compareTo(o);if(0!==s)return s}return n.hasNext()?1:i.hasNext()?-1:0},ct.prototype.hashCode=function(){return this.getEnvelopeInternal().hashCode()},ct.prototype.isGeometryCollectionOrDerived=function(){return this.getSortIndex()===ct.SORTINDEX_GEOMETRYCOLLECTION||this.getSortIndex()===ct.SORTINDEX_MULTIPOINT||this.getSortIndex()===ct.SORTINDEX_MULTILINESTRING||this.getSortIndex()===ct.SORTINDEX_MULTIPOLYGON},ct.prototype.interfaces_=function(){return[x,E,e]},ct.prototype.getClass=function(){return ct},ct.hasNonEmptyElements=function(t){for(var e=0;e<t.length;e++)if(!t[e].isEmpty())return!0;return!1},ct.hasNullElements=function(t){for(var e=0;e<t.length;e++)if(null===t[e])return!0;return!1},pt.serialVersionUID.get=function(){return 0x799ea46522854c00},pt.SORTINDEX_POINT.get=function(){return 0},pt.SORTINDEX_MULTIPOINT.get=function(){return 1},pt.SORTINDEX_LINESTRING.get=function(){return 2},pt.SORTINDEX_LINEARRING.get=function(){return 3},pt.SORTINDEX_MULTILINESTRING.get=function(){return 4},pt.SORTINDEX_POLYGON.get=function(){return 5},pt.SORTINDEX_MULTIPOLYGON.get=function(){return 6},pt.SORTINDEX_GEOMETRYCOLLECTION.get=function(){return 7},pt.geometryChangedFilter.get=function(){return ht},Object.defineProperties(ct,pt);var ht=function(){};ht.interfaces_=function(){return[lt]},ht.filter=function(t){t.geometryChangedAction()};var ft=function(){};ft.prototype.filter=function(t){},ft.prototype.interfaces_=function(){return[]},ft.prototype.getClass=function(){return ft};var gt=function(){},dt={Mod2BoundaryNodeRule:{configurable:!0},EndPointBoundaryNodeRule:{configurable:!0},MultiValentEndPointBoundaryNodeRule:{configurable:!0},MonoValentEndPointBoundaryNodeRule:{configurable:!0},MOD2_BOUNDARY_RULE:{configurable:!0},ENDPOINT_BOUNDARY_RULE:{configurable:!0},MULTIVALENT_ENDPOINT_BOUNDARY_RULE:{configurable:!0},MONOVALENT_ENDPOINT_BOUNDARY_RULE:{configurable:!0},OGC_SFS_BOUNDARY_RULE:{configurable:!0}};gt.prototype.isInBoundary=function(t){},gt.prototype.interfaces_=function(){return[]},gt.prototype.getClass=function(){return gt},dt.Mod2BoundaryNodeRule.get=function(){return yt},dt.EndPointBoundaryNodeRule.get=function(){return _t},dt.MultiValentEndPointBoundaryNodeRule.get=function(){return mt},dt.MonoValentEndPointBoundaryNodeRule.get=function(){return vt},dt.MOD2_BOUNDARY_RULE.get=function(){return new yt},dt.ENDPOINT_BOUNDARY_RULE.get=function(){return new _t},dt.MULTIVALENT_ENDPOINT_BOUNDARY_RULE.get=function(){return new mt},dt.MONOVALENT_ENDPOINT_BOUNDARY_RULE.get=function(){return new vt},dt.OGC_SFS_BOUNDARY_RULE.get=function(){return gt.MOD2_BOUNDARY_RULE},Object.defineProperties(gt,dt);var yt=function(){};yt.prototype.isInBoundary=function(t){return t%2==1},yt.prototype.interfaces_=function(){return[gt]},yt.prototype.getClass=function(){return yt};var _t=function(){};_t.prototype.isInBoundary=function(t){return t>0},_t.prototype.interfaces_=function(){return[gt]},_t.prototype.getClass=function(){return _t};var mt=function(){};mt.prototype.isInBoundary=function(t){return t>1},mt.prototype.interfaces_=function(){return[gt]},mt.prototype.getClass=function(){return mt};var vt=function(){};vt.prototype.isInBoundary=function(t){return 1===t},vt.prototype.interfaces_=function(){return[gt]},vt.prototype.getClass=function(){return vt};var It=function(){};It.prototype.add=function(){},It.prototype.addAll=function(){},It.prototype.isEmpty=function(){},It.prototype.iterator=function(){},It.prototype.size=function(){},It.prototype.toArray=function(){},It.prototype.remove=function(){},(n.prototype=new Error).name="IndexOutOfBoundsException";var Et=function(){};Et.prototype.hasNext=function(){},Et.prototype.next=function(){},Et.prototype.remove=function(){};var xt=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.get=function(){},e.prototype.set=function(){},e.prototype.isEmpty=function(){},e}(It);(i.prototype=new Error).name="NoSuchElementException";var Nt=function(t){function e(){t.call(this),this.array_=[],arguments[0]instanceof It&&this.addAll(arguments[0])}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.ensureCapacity=function(){},e.prototype.interfaces_=function(){return[t,It]},e.prototype.add=function(t){return 1===arguments.length?this.array_.push(t):this.array_.splice(arguments[0],arguments[1]),!0},e.prototype.clear=function(){this.array_=[]},e.prototype.addAll=function(t){for(var e=t.iterator();e.hasNext();)this.add(e.next());return!0},e.prototype.set=function(t,e){var n=this.array_[t];return this.array_[t]=e,n},e.prototype.iterator=function(){return new Ct(this)},e.prototype.get=function(t){if(t<0||t>=this.size())throw new n;return this.array_[t]},e.prototype.isEmpty=function(){return 0===this.array_.length},e.prototype.size=function(){return this.array_.length},e.prototype.toArray=function(){for(var t=[],e=0,n=this.array_.length;e<n;e++)t.push(this.array_[e]);return t},e.prototype.remove=function(t){for(var e=!1,n=0,i=this.array_.length;n<i;n++)if(this.array_[n]===t){this.array_.splice(n,1),e=!0;break}return e},e}(xt),Ct=function(t){function e(e){t.call(this),this.arrayList_=e,this.position_=0}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.next=function(){if(this.position_===this.arrayList_.size())throw new i;return this.arrayList_.get(this.position_++)},e.prototype.hasNext=function(){return this.position_<this.arrayList_.size()},e.prototype.set=function(t){return this.arrayList_.set(this.position_-1,t)},e.prototype.remove=function(){this.arrayList_.remove(this.arrayList_.get(this.position_))},e}(Et),St=function(t){function e(){if(t.call(this),0===arguments.length);else if(1===arguments.length){var e=arguments[0];this.ensureCapacity(e.length),this.add(e,!0)}else if(2===arguments.length){var n=arguments[0],i=arguments[1];this.ensureCapacity(n.length),this.add(n,i)}}t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e;var n={coordArrayType:{configurable:!0}};return n.coordArrayType.get=function(){return new Array(0).fill(null)},e.prototype.getCoordinate=function(t){return this.get(t)},e.prototype.addAll=function(){if(2===arguments.length){for(var e=arguments[0],n=arguments[1],i=!1,r=e.iterator();r.hasNext();)this.add(r.next(),n),i=!0;return i}return t.prototype.addAll.apply(this,arguments)},e.prototype.clone=function(){for(var e=t.prototype.clone.call(this),n=0;n<this.size();n++)e.add(n,this.get(n).copy());return e},e.prototype.toCoordinateArray=function(){return this.toArray(e.coordArrayType)},e.prototype.add=function(){if(1===arguments.length){var e=arguments[0];t.prototype.add.call(this,e)}else if(2===arguments.length){if(arguments[0]instanceof Array&&"boolean"==typeof arguments[1]){var n=arguments[0],i=arguments[1];return this.add(n,i,!0),!0}if(arguments[0]instanceof C&&"boolean"==typeof arguments[1]){var r=arguments[0];if(!arguments[1]&&this.size()>=1){if(this.get(this.size()-1).equals2D(r))return null}t.prototype.add.call(this,r)}else if(arguments[0]instanceof Object&&"boolean"==typeof arguments[1]){var o=arguments[0],s=arguments[1];return this.add(o,s),!0}}else if(3===arguments.length){if("boolean"==typeof arguments[2]&&arguments[0]instanceof Array&&"boolean"==typeof arguments[1]){var a=arguments[0],u=arguments[1];if(arguments[2])for(var l=0;l<a.length;l++)this.add(a[l],u);else for(var c=a.length-1;c>=0;c--)this.add(a[c],u);return!0}if("boolean"==typeof arguments[2]&&Number.isInteger(arguments[0])&&arguments[1]instanceof C){var p=arguments[0],h=arguments[1];if(!arguments[2]){var f=this.size();if(f>0){if(p>0){if(this.get(p-1).equals2D(h))return null}if(p<f){if(this.get(p).equals2D(h))return null}}}t.prototype.add.call(this,p,h)}}else if(4===arguments.length){var g=arguments[0],d=arguments[1],y=arguments[2],_=arguments[3],m=1;y>_&&(m=-1);for(var v=y;v!==_;v+=m)this.add(g[v],d);return!0}},e.prototype.closeRing=function(){this.size()>0&&this.add(new C(this.get(0)),!1)},e.prototype.interfaces_=function(){return[]},e.prototype.getClass=function(){return e},Object.defineProperties(e,n),e}(Nt),Lt=function(){},bt={ForwardComparator:{configurable:!0},BidirectionalComparator:{configurable:!0},coordArrayType:{configurable:!0}};bt.ForwardComparator.get=function(){return wt},bt.BidirectionalComparator.get=function(){return Ot},bt.coordArrayType.get=function(){return new Array(0).fill(null)},Lt.prototype.interfaces_=function(){return[]},Lt.prototype.getClass=function(){return Lt},Lt.isRing=function(t){return!(t.length<4)&&!!t[0].equals2D(t[t.length-1])},Lt.ptNotInList=function(t,e){for(var n=0;n<t.length;n++){var i=t[n];if(Lt.indexOf(i,e)<0)return i}return null},Lt.scroll=function(t,e){var n=Lt.indexOf(e,t);if(n<0)return null;var i=new Array(t.length).fill(null);Y.arraycopy(t,n,i,0,t.length-n),Y.arraycopy(t,0,i,t.length-n,n),Y.arraycopy(i,0,t,0,t.length)},Lt.equals=function(){if(2===arguments.length){var t=arguments[0],e=arguments[1];if(t===e)return!0;if(null===t||null===e)return!1;if(t.length!==e.length)return!1;for(var n=0;n<t.length;n++)if(!t[n].equals(e[n]))return!1;return!0}if(3===arguments.length){var i=arguments[0],r=arguments[1],o=arguments[2];if(i===r)return!0;if(null===i||null===r)return!1;if(i.length!==r.length)return!1;for(var s=0;s<i.length;s++)if(0!==o.compare(i[s],r[s]))return!1;return!0}},Lt.intersection=function(t,e){for(var n=new St,i=0;i<t.length;i++)e.intersects(t[i])&&n.add(t[i],!0);return n.toCoordinateArray()},Lt.hasRepeatedPoints=function(t){for(var e=1;e<t.length;e++)if(t[e-1].equals(t[e]))return!0;return!1},Lt.removeRepeatedPoints=function(t){if(!Lt.hasRepeatedPoints(t))return t;return new St(t,!1).toCoordinateArray()},Lt.reverse=function(t){for(var e=t.length-1,n=Math.trunc(e/2),i=0;i<=n;i++){var r=t[i];t[i]=t[e-i],t[e-i]=r}},Lt.removeNull=function(t){for(var e=0,n=0;n<t.length;n++)null!==t[n]&&e++;var i=new Array(e).fill(null);if(0===e)return i;for(var r=0,o=0;o<t.length;o++)null!==t[o]&&(i[r++]=t[o]);return i},Lt.copyDeep=function(){if(1===arguments.length){for(var t=arguments[0],e=new Array(t.length).fill(null),n=0;n<t.length;n++)e[n]=new C(t[n]);return e}if(5===arguments.length)for(var i=arguments[0],r=arguments[1],o=arguments[2],s=arguments[3],a=arguments[4],u=0;u<a;u++)o[s+u]=new C(i[r+u])},Lt.isEqualReversed=function(t,e){for(var n=0;n<t.length;n++){var i=t[n],r=e[t.length-n-1];if(0!==i.compareTo(r))return!1}return!0},Lt.envelope=function(t){for(var e=new j,n=0;n<t.length;n++)e.expandToInclude(t[n]);return e},Lt.toCoordinateArray=function(t){return t.toArray(Lt.coordArrayType)},Lt.atLeastNCoordinatesOrNothing=function(t,e){return e.length>=t?e:[]},Lt.indexOf=function(t,e){for(var n=0;n<e.length;n++)if(t.equals(e[n]))return n;return-1},Lt.increasingDirection=function(t){for(var e=0;e<Math.trunc(t.length/2);e++){var n=t.length-1-e,i=t[e].compareTo(t[n]);if(0!==i)return i}return 1},Lt.compare=function(t,e){for(var n=0;n<t.length&&n<e.length;){var i=t[n].compareTo(e[n]);if(0!==i)return i;n++}return n<e.length?-1:n<t.length?1:0},Lt.minCoordinate=function(t){for(var e=null,n=0;n<t.length;n++)(null===e||e.compareTo(t[n])>0)&&(e=t[n]);return e},Lt.extract=function(t,e,n){e=R.clamp(e,0,t.length);var i=(n=R.clamp(n,-1,t.length))-e+1;n<0&&(i=0),e>=t.length&&(i=0),n<e&&(i=0);var r=new Array(i).fill(null);if(0===i)return r;for(var o=0,s=e;s<=n;s++)r[o++]=t[s];return r},Object.defineProperties(Lt,bt);var wt=function(){};wt.prototype.compare=function(t,e){return Lt.compare(t,e)},wt.prototype.interfaces_=function(){return[N]},wt.prototype.getClass=function(){return wt};var Ot=function(){};Ot.prototype.compare=function(t,e){var n=t,i=e;if(n.length<i.length)return-1;if(n.length>i.length)return 1;if(0===n.length)return 0;var r=Lt.compare(n,i);return Lt.isEqualReversed(n,i)?0:r},Ot.prototype.OLDcompare=function(t,e){var n=t,i=e;if(n.length<i.length)return-1;if(n.length>i.length)return 1;if(0===n.length)return 0;for(var r=Lt.increasingDirection(n),o=Lt.increasingDirection(i),s=r>0?0:n.length-1,a=o>0?0:n.length-1,u=0;u<n.length;u++){var l=n[s].compareTo(i[a]);if(0!==l)return l;s+=r,a+=o}return 0},Ot.prototype.interfaces_=function(){return[N]},Ot.prototype.getClass=function(){return Ot};var Tt=function(){};Tt.prototype.get=function(){},Tt.prototype.put=function(){},Tt.prototype.size=function(){},Tt.prototype.values=function(){},Tt.prototype.entrySet=function(){};var Rt=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e}(Tt);(r.prototype=new Error).name="OperationNotSupported",(o.prototype=new It).contains=function(){};var Pt=function(t){function e(){t.call(this),this.array_=[],arguments[0]instanceof It&&this.addAll(arguments[0])}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.contains=function(t){for(var e=0,n=this.array_.length;e<n;e++){if(this.array_[e]===t)return!0}return!1},e.prototype.add=function(t){return!this.contains(t)&&(this.array_.push(t),!0)},e.prototype.addAll=function(t){for(var e=t.iterator();e.hasNext();)this.add(e.next());return!0},e.prototype.remove=function(t){throw new Error},e.prototype.size=function(){return this.array_.length},e.prototype.isEmpty=function(){return 0===this.array_.length},e.prototype.toArray=function(){for(var t=[],e=0,n=this.array_.length;e<n;e++)t.push(this.array_[e]);return t},e.prototype.iterator=function(){return new Dt(this)},e}(o),Dt=function(t){function e(e){t.call(this),this.hashSet_=e,this.position_=0}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.next=function(){if(this.position_===this.hashSet_.size())throw new i;return this.hashSet_.array_[this.position_++]},e.prototype.hasNext=function(){return this.position_<this.hashSet_.size()},e.prototype.remove=function(){throw new r},e}(Et),Mt=0;(p.prototype=new Rt).get=function(t){for(var e=this.root_;null!==e;){var n=t.compareTo(e.key);if(n<0)e=e.left;else{if(!(n>0))return e.value;e=e.right}}return null},p.prototype.put=function(t,e){if(null===this.root_)return this.root_={key:t,value:e,left:null,right:null,parent:null,color:Mt,getValue:function(){return this.value},getKey:function(){return this.key}},this.size_=1,null;var n,i,r=this.root_;do{if(n=r,(i=t.compareTo(r.key))<0)r=r.left;else{if(!(i>0)){var o=r.value;return r.value=e,o}r=r.right}}while(null!==r);var s={key:t,left:null,right:null,value:e,parent:n,color:Mt,getValue:function(){return this.value},getKey:function(){return this.key}};return i<0?n.left=s:n.right=s,this.fixAfterInsertion(s),this.size_++,null},p.prototype.fixAfterInsertion=function(t){for(t.color=1;null!=t&&t!==this.root_&&1===t.parent.color;)if(a(t)===l(a(a(t)))){var e=c(a(a(t)));1===s(e)?(u(a(t),Mt),u(e,Mt),u(a(a(t)),1),t=a(a(t))):(t===c(a(t))&&(t=a(t),this.rotateLeft(t)),u(a(t),Mt),u(a(a(t)),1),this.rotateRight(a(a(t))))}else{var n=l(a(a(t)));1===s(n)?(u(a(t),Mt),u(n,Mt),u(a(a(t)),1),t=a(a(t))):(t===l(a(t))&&(t=a(t),this.rotateRight(t)),u(a(t),Mt),u(a(a(t)),1),this.rotateLeft(a(a(t))))}this.root_.color=Mt},p.prototype.values=function(){var t=new Nt,e=this.getFirstEntry();if(null!==e)for(t.add(e.value);null!==(e=p.successor(e));)t.add(e.value);return t},p.prototype.entrySet=function(){var t=new Pt,e=this.getFirstEntry();if(null!==e)for(t.add(e);null!==(e=p.successor(e));)t.add(e);return t},p.prototype.rotateLeft=function(t){if(null!=t){var e=t.right;t.right=e.left,null!=e.left&&(e.left.parent=t),e.parent=t.parent,null===t.parent?this.root_=e:t.parent.left===t?t.parent.left=e:t.parent.right=e,e.left=t,t.parent=e}},p.prototype.rotateRight=function(t){if(null!=t){var e=t.left;t.left=e.right,null!=e.right&&(e.right.parent=t),e.parent=t.parent,null===t.parent?this.root_=e:t.parent.right===t?t.parent.right=e:t.parent.left=e,e.right=t,t.parent=e}},p.prototype.getFirstEntry=function(){var t=this.root_;if(null!=t)for(;null!=t.left;)t=t.left;return t},p.successor=function(t){if(null===t)return null;if(null!==t.right){for(var e=t.right;null!==e.left;)e=e.left;return e}for(var n=t.parent,i=t;null!==n&&i===n.right;)i=n,n=n.parent;return n},p.prototype.size=function(){return this.size_};var At=function(){};At.prototype.interfaces_=function(){return[]},At.prototype.getClass=function(){return At},h.prototype=new o,(f.prototype=new h).contains=function(t){for(var e=0,n=this.array_.length;e<n;e++){if(0===this.array_[e].compareTo(t))return!0}return!1},f.prototype.add=function(t){if(this.contains(t))return!1;for(var e=0,n=this.array_.length;e<n;e++){if(1===this.array_[e].compareTo(t))return this.array_.splice(e,0,t),!0}return this.array_.push(t),!0},f.prototype.addAll=function(t){for(var e=t.iterator();e.hasNext();)this.add(e.next());return!0},f.prototype.remove=function(t){throw new r},f.prototype.size=function(){return this.array_.length},f.prototype.isEmpty=function(){return 0===this.array_.length},f.prototype.toArray=function(){for(var t=[],e=0,n=this.array_.length;e<n;e++)t.push(this.array_[e]);return t},f.prototype.iterator=function(){return new Ft(this)};var Ft=function(t){this.treeSet_=t,this.position_=0};Ft.prototype.next=function(){if(this.position_===this.treeSet_.size())throw new i;return this.treeSet_.array_[this.position_++]},Ft.prototype.hasNext=function(){return this.position_<this.treeSet_.size()},Ft.prototype.remove=function(){throw new r};var Gt=function(){};Gt.sort=function(){var t,e,n,i,r=arguments[0];if(1===arguments.length)i=function(t,e){return t.compareTo(e)},r.sort(i);else if(2===arguments.length)n=arguments[1],i=function(t,e){return n.compare(t,e)},r.sort(i);else if(3===arguments.length){(e=r.slice(arguments[1],arguments[2])).sort();var o=r.slice(0,arguments[1]).concat(e,r.slice(arguments[2],r.length));for(r.splice(0,r.length),t=0;t<o.length;t++)r.push(o[t])}else if(4===arguments.length)for(e=r.slice(arguments[1],arguments[2]),n=arguments[3],i=function(t,e){return n.compare(t,e)},e.sort(i),o=r.slice(0,arguments[1]).concat(e,r.slice(arguments[2],r.length)),r.splice(0,r.length),t=0;t<o.length;t++)r.push(o[t])},Gt.asList=function(t){for(var e=new Nt,n=0,i=t.length;n<i;n++)e.add(t[n]);return e};var qt=function(){},Bt={P:{configurable:!0},L:{configurable:!0},A:{configurable:!0},FALSE:{configurable:!0},TRUE:{configurable:!0},DONTCARE:{configurable:!0},SYM_FALSE:{configurable:!0},SYM_TRUE:{configurable:!0},SYM_DONTCARE:{configurable:!0},SYM_P:{configurable:!0},SYM_L:{configurable:!0},SYM_A:{configurable:!0}};Bt.P.get=function(){return 0},Bt.L.get=function(){return 1},Bt.A.get=function(){return 2},Bt.FALSE.get=function(){return-1},Bt.TRUE.get=function(){return-2},Bt.DONTCARE.get=function(){return-3},Bt.SYM_FALSE.get=function(){return"F"},Bt.SYM_TRUE.get=function(){return"T"},Bt.SYM_DONTCARE.get=function(){return"*"},Bt.SYM_P.get=function(){return"0"},Bt.SYM_L.get=function(){return"1"},Bt.SYM_A.get=function(){return"2"},qt.prototype.interfaces_=function(){return[]},qt.prototype.getClass=function(){return qt},qt.toDimensionSymbol=function(t){switch(t){case qt.FALSE:return qt.SYM_FALSE;case qt.TRUE:return qt.SYM_TRUE;case qt.DONTCARE:return qt.SYM_DONTCARE;case qt.P:return qt.SYM_P;case qt.L:return qt.SYM_L;case qt.A:return qt.SYM_A}throw new m("Unknown dimension value: "+t)},qt.toDimensionValue=function(t){switch(A.toUpperCase(t)){case qt.SYM_FALSE:return qt.FALSE;case qt.SYM_TRUE:return qt.TRUE;case qt.SYM_DONTCARE:return qt.DONTCARE;case qt.SYM_P:return qt.P;case qt.SYM_L:return qt.L;case qt.SYM_A:return qt.A}throw new m("Unknown dimension symbol: "+t)},Object.defineProperties(qt,Bt);var Vt=function(){};Vt.prototype.filter=function(t){},Vt.prototype.interfaces_=function(){return[]},Vt.prototype.getClass=function(){return Vt};var Ut=function(){};Ut.prototype.filter=function(t,e){},Ut.prototype.isDone=function(){},Ut.prototype.isGeometryChanged=function(){},Ut.prototype.interfaces_=function(){return[]},Ut.prototype.getClass=function(){return Ut};var zt=function(t){function e(e,n){if(t.call(this,n),this._geometries=e||[],t.hasNullElements(this._geometries))throw new m("geometries must not contain null elements")}t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e;var n={serialVersionUID:{configurable:!0}};return e.prototype.computeEnvelopeInternal=function(){for(var t=new j,e=0;e<this._geometries.length;e++)t.expandToInclude(this._geometries[e].getEnvelopeInternal());return t},e.prototype.getGeometryN=function(t){return this._geometries[t]},e.prototype.getSortIndex=function(){return t.SORTINDEX_GEOMETRYCOLLECTION},e.prototype.getCoordinates=function(){for(var t=new Array(this.getNumPoints()).fill(null),e=-1,n=0;n<this._geometries.length;n++)for(var i=this._geometries[n].getCoordinates(),r=0;r<i.length;r++)t[++e]=i[r];return t},e.prototype.getArea=function(){for(var t=0,e=0;e<this._geometries.length;e++)t+=this._geometries[e].getArea();return t},e.prototype.equalsExact=function(){if(2===arguments.length){var e=arguments[0],n=arguments[1];if(!this.isEquivalentClass(e))return!1;var i=e;if(this._geometries.length!==i._geometries.length)return!1;for(var r=0;r<this._geometries.length;r++)if(!this._geometries[r].equalsExact(i._geometries[r],n))return!1;return!0}return t.prototype.equalsExact.apply(this,arguments)},e.prototype.normalize=function(){for(var t=0;t<this._geometries.length;t++)this._geometries[t].normalize();Gt.sort(this._geometries)},e.prototype.getCoordinate=function(){return this.isEmpty()?null:this._geometries[0].getCoordinate()},e.prototype.getBoundaryDimension=function(){for(var t=qt.FALSE,e=0;e<this._geometries.length;e++)t=Math.max(t,this._geometries[e].getBoundaryDimension());return t},e.prototype.getDimension=function(){for(var t=qt.FALSE,e=0;e<this._geometries.length;e++)t=Math.max(t,this._geometries[e].getDimension());return t},e.prototype.getLength=function(){for(var t=0,e=0;e<this._geometries.length;e++)t+=this._geometries[e].getLength();return t},e.prototype.getNumPoints=function(){for(var t=0,e=0;e<this._geometries.length;e++)t+=this._geometries[e].getNumPoints();return t},e.prototype.getNumGeometries=function(){return this._geometries.length},e.prototype.reverse=function(){for(var t=this._geometries.length,e=new Array(t).fill(null),n=0;n<this._geometries.length;n++)e[n]=this._geometries[n].reverse();return this.getFactory().createGeometryCollection(e)},e.prototype.compareToSameClass=function(){if(1===arguments.length){var t=arguments[0],e=new f(Gt.asList(this._geometries)),n=new f(Gt.asList(t._geometries));return this.compare(e,n)}if(2===arguments.length){for(var i=arguments[0],r=arguments[1],o=i,s=this.getNumGeometries(),a=o.getNumGeometries(),u=0;u<s&&u<a;){var l=this.getGeometryN(u),c=o.getGeometryN(u),p=l.compareToSameClass(c,r);if(0!==p)return p;u++}return u<s?1:u<a?-1:0}},e.prototype.apply=function(){if(T(arguments[0],ft))for(var t=arguments[0],e=0;e<this._geometries.length;e++)this._geometries[e].apply(t);else if(T(arguments[0],Ut)){var n=arguments[0];if(0===this._geometries.length)return null;for(var i=0;i<this._geometries.length&&(this._geometries[i].apply(n),!n.isDone());i++);n.isGeometryChanged()&&this.geometryChanged()}else if(T(arguments[0],Vt)){var r=arguments[0];r.filter(this);for(var o=0;o<this._geometries.length;o++)this._geometries[o].apply(r)}else if(T(arguments[0],lt)){var s=arguments[0];s.filter(this);for(var a=0;a<this._geometries.length;a++)this._geometries[a].apply(s)}},e.prototype.getBoundary=function(){return this.checkNotGeometryCollection(this),et.shouldNeverReachHere(),null},e.prototype.clone=function(){var e=t.prototype.clone.call(this);e._geometries=new Array(this._geometries.length).fill(null);for(var n=0;n<this._geometries.length;n++)e._geometries[n]=this._geometries[n].clone();return e},e.prototype.getGeometryType=function(){return"GeometryCollection"},e.prototype.copy=function(){for(var t=new Array(this._geometries.length).fill(null),n=0;n<t.length;n++)t[n]=this._geometries[n].copy();return new e(t,this._factory)},e.prototype.isEmpty=function(){for(var t=0;t<this._geometries.length;t++)if(!this._geometries[t].isEmpty())return!1;return!0},e.prototype.interfaces_=function(){return[]},e.prototype.getClass=function(){return e},n.serialVersionUID.get=function(){return-0x4f07bcb1f857d800},Object.defineProperties(e,n),e}(ct),Xt=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e;var n={serialVersionUID:{configurable:!0}};return e.prototype.getSortIndex=function(){return ct.SORTINDEX_MULTILINESTRING},e.prototype.equalsExact=function(){if(2===arguments.length){var e=arguments[0],n=arguments[1];return!!this.isEquivalentClass(e)&&t.prototype.equalsExact.call(this,e,n)}return t.prototype.equalsExact.apply(this,arguments)},e.prototype.getBoundaryDimension=function(){return this.isClosed()?qt.FALSE:0},e.prototype.isClosed=function(){if(this.isEmpty())return!1;for(var t=0;t<this._geometries.length;t++)if(!this._geometries[t].isClosed())return!1;return!0},e.prototype.getDimension=function(){return 1},e.prototype.reverse=function(){for(var t=this._geometries.length,e=new Array(t).fill(null),n=0;n<this._geometries.length;n++)e[t-1-n]=this._geometries[n].reverse();return this.getFactory().createMultiLineString(e)},e.prototype.getBoundary=function(){return new Yt(this).getBoundary()},e.prototype.getGeometryType=function(){return"MultiLineString"},e.prototype.copy=function(){for(var t=new Array(this._geometries.length).fill(null),n=0;n<t.length;n++)t[n]=this._geometries[n].copy();return new e(t,this._factory)},e.prototype.interfaces_=function(){return[At]},e.prototype.getClass=function(){return e},n.serialVersionUID.get=function(){return 0x7155d2ab4afa8000},Object.defineProperties(e,n),e}(zt),Yt=function(){if(this._geom=null,this._geomFact=null,this._bnRule=null,this._endpointMap=null,1===arguments.length){var t=arguments[0],e=gt.MOD2_BOUNDARY_RULE;this._geom=t,this._geomFact=t.getFactory(),this._bnRule=e}else if(2===arguments.length){var n=arguments[0],i=arguments[1];this._geom=n,this._geomFact=n.getFactory(),this._bnRule=i}};Yt.prototype.boundaryMultiLineString=function(t){if(this._geom.isEmpty())return this.getEmptyMultiPoint();var e=this.computeBoundaryCoordinates(t);return 1===e.length?this._geomFact.createPoint(e[0]):this._geomFact.createMultiPointFromCoords(e)},Yt.prototype.getBoundary=function(){return this._geom instanceof Kt?this.boundaryLineString(this._geom):this._geom instanceof Xt?this.boundaryMultiLineString(this._geom):this._geom.getBoundary()},Yt.prototype.boundaryLineString=function(t){if(this._geom.isEmpty())return this.getEmptyMultiPoint();if(t.isClosed()){return this._bnRule.isInBoundary(2)?t.getStartPoint():this._geomFact.createMultiPoint()}return this._geomFact.createMultiPoint([t.getStartPoint(),t.getEndPoint()])},Yt.prototype.getEmptyMultiPoint=function(){return this._geomFact.createMultiPoint()},Yt.prototype.computeBoundaryCoordinates=function(t){var e=new Nt;this._endpointMap=new p;for(var n=0;n<t.getNumGeometries();n++){var i=t.getGeometryN(n);0!==i.getNumPoints()&&(this.addEndpoint(i.getCoordinateN(0)),this.addEndpoint(i.getCoordinateN(i.getNumPoints()-1)))}for(var r=this._endpointMap.entrySet().iterator();r.hasNext();){var o=r.next(),s=o.getValue().count;this._bnRule.isInBoundary(s)&&e.add(o.getKey())}return Lt.toCoordinateArray(e)},Yt.prototype.addEndpoint=function(t){var e=this._endpointMap.get(t);null===e&&(e=new kt,this._endpointMap.put(t,e)),e.count++},Yt.prototype.interfaces_=function(){return[]},Yt.prototype.getClass=function(){return Yt},Yt.getBoundary=function(){if(1===arguments.length){var t=arguments[0];return new Yt(t).getBoundary()}if(2===arguments.length){var e=arguments[0],n=arguments[1];return new Yt(e,n).getBoundary()}};var kt=function(){this.count=null};kt.prototype.interfaces_=function(){return[]},kt.prototype.getClass=function(){return kt};var jt=function(){},Ht={NEWLINE:{configurable:!0},SIMPLE_ORDINATE_FORMAT:{configurable:!0}};jt.prototype.interfaces_=function(){return[]},jt.prototype.getClass=function(){return jt},jt.chars=function(t,e){for(var n=new Array(e).fill(null),i=0;i<e;i++)n[i]=t;return String(n)},jt.getStackTrace=function(){if(1===arguments.length){var t=arguments[0],e=new function(){},n=new function(){}(e);return t.printStackTrace(n),e.toString()}if(2===arguments.length){for(var i=arguments[0],r=arguments[1],o="",s=new function(){}(new function(){}(jt.getStackTrace(i))),a=0;a<r;a++)try{o+=s.readLine()+jt.NEWLINE}catch(t){if(!(t instanceof g))throw t;et.shouldNeverReachHere()}return o}},jt.split=function(t,e){for(var n=e.length,i=new Nt,r=""+t,o=r.indexOf(e);o>=0;){var s=r.substring(0,o);i.add(s),o=(r=r.substring(o+n)).indexOf(e)}r.length>0&&i.add(r);for(var a=new Array(i.size()).fill(null),u=0;u<a.length;u++)a[u]=i.get(u);return a},jt.toString=function(){if(1===arguments.length){var t=arguments[0];return jt.SIMPLE_ORDINATE_FORMAT.format(t)}},jt.spaces=function(t){return jt.chars(" ",t)},Ht.NEWLINE.get=function(){return Y.getProperty("line.separator")},Ht.SIMPLE_ORDINATE_FORMAT.get=function(){return new function(){}("0.#")},Object.defineProperties(jt,Ht);var Wt=function(){};Wt.prototype.interfaces_=function(){return[]},Wt.prototype.getClass=function(){return Wt},Wt.copyCoord=function(t,e,n,i){for(var r=Math.min(t.getDimension(),n.getDimension()),o=0;o<r;o++)n.setOrdinate(i,o,t.getOrdinate(e,o))},Wt.isRing=function(t){var e=t.size();return 0===e||!(e<=3)&&(t.getOrdinate(0,V.X)===t.getOrdinate(e-1,V.X)&&t.getOrdinate(0,V.Y)===t.getOrdinate(e-1,V.Y))},Wt.isEqual=function(t,e){var n=t.size();if(n!==e.size())return!1;for(var i=Math.min(t.getDimension(),e.getDimension()),r=0;r<n;r++)for(var o=0;o<i;o++){var s=t.getOrdinate(r,o),a=e.getOrdinate(r,o);if(t.getOrdinate(r,o)!==e.getOrdinate(r,o)&&(!v.isNaN(s)||!v.isNaN(a)))return!1}return!0},Wt.extend=function(t,e,n){var i=t.create(n,e.getDimension()),r=e.size();if(Wt.copy(e,0,i,0,r),r>0)for(var o=r;o<n;o++)Wt.copy(e,r-1,i,o,1);return i},Wt.reverse=function(t){for(var e=t.size()-1,n=Math.trunc(e/2),i=0;i<=n;i++)Wt.swap(t,i,e-i)},Wt.swap=function(t,e,n){if(e===n)return null;for(var i=0;i<t.getDimension();i++){var r=t.getOrdinate(e,i);t.setOrdinate(e,i,t.getOrdinate(n,i)),t.setOrdinate(n,i,r)}},Wt.copy=function(t,e,n,i,r){for(var o=0;o<r;o++)Wt.copyCoord(t,e+o,n,i+o)},Wt.toString=function(){if(1===arguments.length){var t=arguments[0],e=t.size();if(0===e)return"()";var n=t.getDimension(),i=new D;i.append("(");for(var r=0;r<e;r++){r>0&&i.append(" ");for(var o=0;o<n;o++)o>0&&i.append(","),i.append(jt.toString(t.getOrdinate(r,o)))}return i.append(")"),i.toString()}},Wt.ensureValidRing=function(t,e){var n=e.size();if(0===n)return e;if(n<=3)return Wt.createClosedRing(t,e,4);return e.getOrdinate(0,V.X)===e.getOrdinate(n-1,V.X)&&e.getOrdinate(0,V.Y)===e.getOrdinate(n-1,V.Y)?e:Wt.createClosedRing(t,e,n+1)},Wt.createClosedRing=function(t,e,n){var i=t.create(n,e.getDimension()),r=e.size();Wt.copy(e,0,i,0,r);for(var o=r;o<n;o++)Wt.copy(e,0,i,o,1);return i};var Kt=function(t){function e(e,n){t.call(this,n),this._points=null,this.init(e)}t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e;var n={serialVersionUID:{configurable:!0}};return e.prototype.computeEnvelopeInternal=function(){return this.isEmpty()?new j:this._points.expandEnvelope(new j)},e.prototype.isRing=function(){return this.isClosed()&&this.isSimple()},e.prototype.getSortIndex=function(){return t.SORTINDEX_LINESTRING},e.prototype.getCoordinates=function(){return this._points.toCoordinateArray()},e.prototype.equalsExact=function(){if(2===arguments.length){var e=arguments[0],n=arguments[1];if(!this.isEquivalentClass(e))return!1;var i=e;if(this._points.size()!==i._points.size())return!1;for(var r=0;r<this._points.size();r++)if(!this.equal(this._points.getCoordinate(r),i._points.getCoordinate(r),n))return!1;return!0}return t.prototype.equalsExact.apply(this,arguments)},e.prototype.normalize=function(){for(var t=0;t<Math.trunc(this._points.size()/2);t++){var e=this._points.size()-1-t;if(!this._points.getCoordinate(t).equals(this._points.getCoordinate(e)))return this._points.getCoordinate(t).compareTo(this._points.getCoordinate(e))>0&&Wt.reverse(this._points),null}},e.prototype.getCoordinate=function(){return this.isEmpty()?null:this._points.getCoordinate(0)},e.prototype.getBoundaryDimension=function(){return this.isClosed()?qt.FALSE:0},e.prototype.isClosed=function(){return!this.isEmpty()&&this.getCoordinateN(0).equals2D(this.getCoordinateN(this.getNumPoints()-1))},e.prototype.getEndPoint=function(){return this.isEmpty()?null:this.getPointN(this.getNumPoints()-1)},e.prototype.getDimension=function(){return 1},e.prototype.getLength=function(){return at.computeLength(this._points)},e.prototype.getNumPoints=function(){return this._points.size()},e.prototype.reverse=function(){var t=this._points.copy();Wt.reverse(t);return this.getFactory().createLineString(t)},e.prototype.compareToSameClass=function(){if(1===arguments.length){for(var t=arguments[0],e=0,n=0;e<this._points.size()&&n<t._points.size();){var i=this._points.getCoordinate(e).compareTo(t._points.getCoordinate(n));if(0!==i)return i;e++,n++}return e<this._points.size()?1:n<t._points.size()?-1:0}if(2===arguments.length){var r=arguments[0];return arguments[1].compare(this._points,r._points)}},e.prototype.apply=function(){if(T(arguments[0],ft))for(var t=arguments[0],e=0;e<this._points.size();e++)t.filter(this._points.getCoordinate(e));else if(T(arguments[0],Ut)){var n=arguments[0];if(0===this._points.size())return null;for(var i=0;i<this._points.size()&&(n.filter(this._points,i),!n.isDone());i++);n.isGeometryChanged()&&this.geometryChanged()}else if(T(arguments[0],Vt)){arguments[0].filter(this)}else if(T(arguments[0],lt)){arguments[0].filter(this)}},e.prototype.getBoundary=function(){return new Yt(this).getBoundary()},e.prototype.isEquivalentClass=function(t){return t instanceof e},e.prototype.clone=function(){var e=t.prototype.clone.call(this);return e._points=this._points.clone(),e},e.prototype.getCoordinateN=function(t){return this._points.getCoordinate(t)},e.prototype.getGeometryType=function(){return"LineString"},e.prototype.copy=function(){return new e(this._points.copy(),this._factory)},e.prototype.getCoordinateSequence=function(){return this._points},e.prototype.isEmpty=function(){return 0===this._points.size()},e.prototype.init=function(t){if(null===t&&(t=this.getFactory().getCoordinateSequenceFactory().create([])),1===t.size())throw new m("Invalid number of points in LineString (found "+t.size()+" - must be 0 or >= 2)");this._points=t},e.prototype.isCoordinate=function(t){for(var e=0;e<this._points.size();e++)if(this._points.getCoordinate(e).equals(t))return!0;return!1},e.prototype.getStartPoint=function(){return this.isEmpty()?null:this.getPointN(0)},e.prototype.getPointN=function(t){return this.getFactory().createPoint(this._points.getCoordinate(t))},e.prototype.interfaces_=function(){return[At]},e.prototype.getClass=function(){return e},n.serialVersionUID.get=function(){return 0x2b2b51ba435c8e00},Object.defineProperties(e,n),e}(ct),Jt=function(){};Jt.prototype.interfaces_=function(){return[]},Jt.prototype.getClass=function(){return Jt};var Qt=function(t){function e(e,n){t.call(this,n),this._coordinates=e||null,this.init(this._coordinates)}t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e;var n={serialVersionUID:{configurable:!0}};return e.prototype.computeEnvelopeInternal=function(){if(this.isEmpty())return new j;var t=new j;return t.expandToInclude(this._coordinates.getX(0),this._coordinates.getY(0)),t},e.prototype.getSortIndex=function(){return t.SORTINDEX_POINT},e.prototype.getCoordinates=function(){return this.isEmpty()?[]:[this.getCoordinate()]},e.prototype.equalsExact=function(){if(2===arguments.length){var e=arguments[0],n=arguments[1];return!!this.isEquivalentClass(e)&&(!(!this.isEmpty()||!e.isEmpty())||this.isEmpty()===e.isEmpty()&&this.equal(e.getCoordinate(),this.getCoordinate(),n))}return t.prototype.equalsExact.apply(this,arguments)},e.prototype.normalize=function(){},e.prototype.getCoordinate=function(){return 0!==this._coordinates.size()?this._coordinates.getCoordinate(0):null},e.prototype.getBoundaryDimension=function(){return qt.FALSE},e.prototype.getDimension=function(){return 0},e.prototype.getNumPoints=function(){return this.isEmpty()?0:1},e.prototype.reverse=function(){return this.copy()},e.prototype.getX=function(){if(null===this.getCoordinate())throw new Error("getX called on empty Point");return this.getCoordinate().x},e.prototype.compareToSameClass=function(){if(1===arguments.length){var t=arguments[0];return this.getCoordinate().compareTo(t.getCoordinate())}if(2===arguments.length){var e=arguments[0];return arguments[1].compare(this._coordinates,e._coordinates)}},e.prototype.apply=function(){if(T(arguments[0],ft)){var t=arguments[0];if(this.isEmpty())return null;t.filter(this.getCoordinate())}else if(T(arguments[0],Ut)){var e=arguments[0];if(this.isEmpty())return null;e.filter(this._coordinates,0),e.isGeometryChanged()&&this.geometryChanged()}else if(T(arguments[0],Vt)){arguments[0].filter(this)}else if(T(arguments[0],lt)){arguments[0].filter(this)}},e.prototype.getBoundary=function(){return this.getFactory().createGeometryCollection(null)},e.prototype.clone=function(){var e=t.prototype.clone.call(this);return e._coordinates=this._coordinates.clone(),e},e.prototype.getGeometryType=function(){return"Point"},e.prototype.copy=function(){return new e(this._coordinates.copy(),this._factory)},e.prototype.getCoordinateSequence=function(){return this._coordinates},e.prototype.getY=function(){if(null===this.getCoordinate())throw new Error("getY called on empty Point");return this.getCoordinate().y},e.prototype.isEmpty=function(){return 0===this._coordinates.size()},e.prototype.init=function(t){null===t&&(t=this.getFactory().getCoordinateSequenceFactory().create([])),et.isTrue(t.size()<=1),this._coordinates=t},e.prototype.isSimple=function(){return!0},e.prototype.interfaces_=function(){return[Jt]},e.prototype.getClass=function(){return e},n.serialVersionUID.get=function(){return 0x44077bad161cbc00},Object.defineProperties(e,n),e}(ct),Zt=function(){};Zt.prototype.interfaces_=function(){return[]},Zt.prototype.getClass=function(){return Zt};var $t=function(t){function e(e,n,i){if(t.call(this,i),this._shell=null,this._holes=null,null===e&&(e=this.getFactory().createLinearRing()),null===n&&(n=[]),t.hasNullElements(n))throw new m("holes must not contain null elements");if(e.isEmpty()&&t.hasNonEmptyElements(n))throw new m("shell is empty but holes are not");this._shell=e,this._holes=n}t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e;var n={serialVersionUID:{configurable:!0}};return e.prototype.computeEnvelopeInternal=function(){return this._shell.getEnvelopeInternal()},e.prototype.getSortIndex=function(){return t.SORTINDEX_POLYGON},e.prototype.getCoordinates=function(){if(this.isEmpty())return[];for(var t=new Array(this.getNumPoints()).fill(null),e=-1,n=this._shell.getCoordinates(),i=0;i<n.length;i++)t[++e]=n[i];for(var r=0;r<this._holes.length;r++)for(var o=this._holes[r].getCoordinates(),s=0;s<o.length;s++)t[++e]=o[s];return t},e.prototype.getArea=function(){var t=0;t+=Math.abs(at.signedArea(this._shell.getCoordinateSequence()));for(var e=0;e<this._holes.length;e++)t-=Math.abs(at.signedArea(this._holes[e].getCoordinateSequence()));return t},e.prototype.isRectangle=function(){if(0!==this.getNumInteriorRing())return!1;if(null===this._shell)return!1;if(5!==this._shell.getNumPoints())return!1;for(var t=this._shell.getCoordinateSequence(),e=this.getEnvelopeInternal(),n=0;n<5;n++){var i=t.getX(n);if(i!==e.getMinX()&&i!==e.getMaxX())return!1;var r=t.getY(n);if(r!==e.getMinY()&&r!==e.getMaxY())return!1}for(var o=t.getX(0),s=t.getY(0),a=1;a<=4;a++){var u=t.getX(a),l=t.getY(a);if(u!==o===(l!==s))return!1;o=u,s=l}return!0},e.prototype.equalsExact=function(){if(2===arguments.length){var e=arguments[0],n=arguments[1];if(!this.isEquivalentClass(e))return!1;var i=e,r=this._shell,o=i._shell;if(!r.equalsExact(o,n))return!1;if(this._holes.length!==i._holes.length)return!1;for(var s=0;s<this._holes.length;s++)if(!this._holes[s].equalsExact(i._holes[s],n))return!1;return!0}return t.prototype.equalsExact.apply(this,arguments)},e.prototype.normalize=function(){if(0===arguments.length){this.normalize(this._shell,!0);for(var t=0;t<this._holes.length;t++)this.normalize(this._holes[t],!1);Gt.sort(this._holes)}else if(2===arguments.length){var e=arguments[0],n=arguments[1];if(e.isEmpty())return null;var i=new Array(e.getCoordinates().length-1).fill(null);Y.arraycopy(e.getCoordinates(),0,i,0,i.length);var r=Lt.minCoordinate(e.getCoordinates());Lt.scroll(i,r),Y.arraycopy(i,0,e.getCoordinates(),0,i.length),e.getCoordinates()[i.length]=i[0],at.isCCW(e.getCoordinates())===n&&Lt.reverse(e.getCoordinates())}},e.prototype.getCoordinate=function(){return this._shell.getCoordinate()},e.prototype.getNumInteriorRing=function(){return this._holes.length},e.prototype.getBoundaryDimension=function(){return 1},e.prototype.getDimension=function(){return 2},e.prototype.getLength=function(){var t=0;t+=this._shell.getLength();for(var e=0;e<this._holes.length;e++)t+=this._holes[e].getLength();return t},e.prototype.getNumPoints=function(){for(var t=this._shell.getNumPoints(),e=0;e<this._holes.length;e++)t+=this._holes[e].getNumPoints();return t},e.prototype.reverse=function(){var t=this.copy();t._shell=this._shell.copy().reverse(),t._holes=new Array(this._holes.length).fill(null);for(var e=0;e<this._holes.length;e++)t._holes[e]=this._holes[e].copy().reverse();return t},e.prototype.convexHull=function(){return this.getExteriorRing().convexHull()},e.prototype.compareToSameClass=function(){if(1===arguments.length){var t=arguments[0],e=this._shell,n=t._shell;return e.compareToSameClass(n)}if(2===arguments.length){var i=arguments[0],r=arguments[1],o=i,s=this._shell,a=o._shell,u=s.compareToSameClass(a,r);if(0!==u)return u;for(var l=this.getNumInteriorRing(),c=o.getNumInteriorRing(),p=0;p<l&&p<c;){var h=this.getInteriorRingN(p),f=o.getInteriorRingN(p),g=h.compareToSameClass(f,r);if(0!==g)return g;p++}return p<l?1:p<c?-1:0}},e.prototype.apply=function(t){if(T(t,ft)){this._shell.apply(t);for(var e=0;e<this._holes.length;e++)this._holes[e].apply(t)}else if(T(t,Ut)){if(this._shell.apply(t),!t.isDone())for(var n=0;n<this._holes.length&&(this._holes[n].apply(t),!t.isDone());n++);t.isGeometryChanged()&&this.geometryChanged()}else if(T(t,Vt))t.filter(this);else if(T(t,lt)){t.filter(this),this._shell.apply(t);for(var i=0;i<this._holes.length;i++)this._holes[i].apply(t)}},e.prototype.getBoundary=function(){if(this.isEmpty())return this.getFactory().createMultiLineString();var t=new Array(this._holes.length+1).fill(null);t[0]=this._shell;for(var e=0;e<this._holes.length;e++)t[e+1]=this._holes[e];return t.length<=1?this.getFactory().createLinearRing(t[0].getCoordinateSequence()):this.getFactory().createMultiLineString(t)},e.prototype.clone=function(){var e=t.prototype.clone.call(this);e._shell=this._shell.clone(),e._holes=new Array(this._holes.length).fill(null);for(var n=0;n<this._holes.length;n++)e._holes[n]=this._holes[n].clone();return e},e.prototype.getGeometryType=function(){return"Polygon"},e.prototype.copy=function(){for(var t=this._shell.copy(),n=new Array(this._holes.length).fill(null),i=0;i<n.length;i++)n[i]=this._holes[i].copy();return new e(t,n,this._factory)},e.prototype.getExteriorRing=function(){return this._shell},e.prototype.isEmpty=function(){return this._shell.isEmpty()},e.prototype.getInteriorRingN=function(t){return this._holes[t]},e.prototype.interfaces_=function(){return[Zt]},e.prototype.getClass=function(){return e},n.serialVersionUID.get=function(){return-0x307ffefd8dc97200},Object.defineProperties(e,n),e}(ct),te=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e;var n={serialVersionUID:{configurable:!0}};return e.prototype.getSortIndex=function(){return ct.SORTINDEX_MULTIPOINT},e.prototype.isValid=function(){return!0},e.prototype.equalsExact=function(){if(2===arguments.length){var e=arguments[0],n=arguments[1];return!!this.isEquivalentClass(e)&&t.prototype.equalsExact.call(this,e,n)}return t.prototype.equalsExact.apply(this,arguments)},e.prototype.getCoordinate=function(){if(1===arguments.length){var e=arguments[0];return this._geometries[e].getCoordinate()}return t.prototype.getCoordinate.apply(this,arguments)},e.prototype.getBoundaryDimension=function(){return qt.FALSE},e.prototype.getDimension=function(){return 0},e.prototype.getBoundary=function(){return this.getFactory().createGeometryCollection(null)},e.prototype.getGeometryType=function(){return"MultiPoint"},e.prototype.copy=function(){for(var t=new Array(this._geometries.length).fill(null),n=0;n<t.length;n++)t[n]=this._geometries[n].copy();return new e(t,this._factory)},e.prototype.interfaces_=function(){return[Jt]},e.prototype.getClass=function(){return e},n.serialVersionUID.get=function(){return-0x6fb1ed4162e0fc00},Object.defineProperties(e,n),e}(zt),ee=function(t){function e(e,n){e instanceof C&&n instanceof _e&&(e=n.getCoordinateSequenceFactory().create(e)),t.call(this,e,n),this.validateConstruction()}t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e;var n={MINIMUM_VALID_SIZE:{configurable:!0},serialVersionUID:{configurable:!0}};return e.prototype.getSortIndex=function(){return ct.SORTINDEX_LINEARRING},e.prototype.getBoundaryDimension=function(){return qt.FALSE},e.prototype.isClosed=function(){return!!this.isEmpty()||t.prototype.isClosed.call(this)},e.prototype.reverse=function(){var t=this._points.copy();Wt.reverse(t);return this.getFactory().createLinearRing(t)},e.prototype.validateConstruction=function(){if(!this.isEmpty()&&!t.prototype.isClosed.call(this))throw new m("Points of LinearRing do not form a closed linestring");if(this.getCoordinateSequence().size()>=1&&this.getCoordinateSequence().size()<e.MINIMUM_VALID_SIZE)throw new m("Invalid number of points in LinearRing (found "+this.getCoordinateSequence().size()+" - must be 0 or >= 4)")},e.prototype.getGeometryType=function(){return"LinearRing"},e.prototype.copy=function(){return new e(this._points.copy(),this._factory)},e.prototype.interfaces_=function(){return[]},e.prototype.getClass=function(){return e},n.MINIMUM_VALID_SIZE.get=function(){return 4},n.serialVersionUID.get=function(){return-0x3b229e262367a600},Object.defineProperties(e,n),e}(Kt),ne=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e;var n={serialVersionUID:{configurable:!0}};return e.prototype.getSortIndex=function(){return ct.SORTINDEX_MULTIPOLYGON},e.prototype.equalsExact=function(){if(2===arguments.length){var e=arguments[0],n=arguments[1];return!!this.isEquivalentClass(e)&&t.prototype.equalsExact.call(this,e,n)}return t.prototype.equalsExact.apply(this,arguments)},e.prototype.getBoundaryDimension=function(){return 1},e.prototype.getDimension=function(){return 2},e.prototype.reverse=function(){for(var t=this._geometries.length,e=new Array(t).fill(null),n=0;n<this._geometries.length;n++)e[n]=this._geometries[n].reverse();return this.getFactory().createMultiPolygon(e)},e.prototype.getBoundary=function(){if(this.isEmpty())return this.getFactory().createMultiLineString();for(var t=new Nt,e=0;e<this._geometries.length;e++)for(var n=this._geometries[e].getBoundary(),i=0;i<n.getNumGeometries();i++)t.add(n.getGeometryN(i));var r=new Array(t.size()).fill(null);return this.getFactory().createMultiLineString(t.toArray(r))},e.prototype.getGeometryType=function(){return"MultiPolygon"},e.prototype.copy=function(){for(var t=new Array(this._geometries.length).fill(null),n=0;n<t.length;n++)t[n]=this._geometries[n].copy();return new e(t,this._factory)},e.prototype.interfaces_=function(){return[Zt]},e.prototype.getClass=function(){return e},n.serialVersionUID.get=function(){return-0x7a5aa1369171980},Object.defineProperties(e,n),e}(zt),ie=function(t){this._factory=t||null,this._isUserDataCopied=!1},re={NoOpGeometryOperation:{configurable:!0},CoordinateOperation:{configurable:!0},CoordinateSequenceOperation:{configurable:!0}};ie.prototype.setCopyUserData=function(t){this._isUserDataCopied=t},ie.prototype.edit=function(t,e){if(null===t)return null;var n=this.editInternal(t,e);return this._isUserDataCopied&&n.setUserData(t.getUserData()),n},ie.prototype.editInternal=function(t,e){return null===this._factory&&(this._factory=t.getFactory()),t instanceof zt?this.editGeometryCollection(t,e):t instanceof $t?this.editPolygon(t,e):t instanceof Qt?e.edit(t,this._factory):t instanceof Kt?e.edit(t,this._factory):(et.shouldNeverReachHere("Unsupported Geometry class: "+t.getClass().getName()),null)},ie.prototype.editGeometryCollection=function(t,e){for(var n=e.edit(t,this._factory),i=new Nt,r=0;r<n.getNumGeometries();r++){var o=this.edit(n.getGeometryN(r),e);null===o||o.isEmpty()||i.add(o)}return n.getClass()===te?this._factory.createMultiPoint(i.toArray([])):n.getClass()===Xt?this._factory.createMultiLineString(i.toArray([])):n.getClass()===ne?this._factory.createMultiPolygon(i.toArray([])):this._factory.createGeometryCollection(i.toArray([]))},ie.prototype.editPolygon=function(t,e){var n=e.edit(t,this._factory);if(null===n&&(n=this._factory.createPolygon(null)),n.isEmpty())return n;var i=this.edit(n.getExteriorRing(),e);if(null===i||i.isEmpty())return this._factory.createPolygon();for(var r=new Nt,o=0;o<n.getNumInteriorRing();o++){var s=this.edit(n.getInteriorRingN(o),e);null===s||s.isEmpty()||r.add(s)}return this._factory.createPolygon(i,r.toArray([]))},ie.prototype.interfaces_=function(){return[]},ie.prototype.getClass=function(){return ie},ie.GeometryEditorOperation=function(){},re.NoOpGeometryOperation.get=function(){return oe},re.CoordinateOperation.get=function(){return se},re.CoordinateSequenceOperation.get=function(){return ae},Object.defineProperties(ie,re);var oe=function(){};oe.prototype.edit=function(t,e){return t},oe.prototype.interfaces_=function(){return[ie.GeometryEditorOperation]},oe.prototype.getClass=function(){return oe};var se=function(){};se.prototype.edit=function(t,e){var n=this.editCoordinates(t.getCoordinates(),t);return null===n?t:t instanceof ee?e.createLinearRing(n):t instanceof Kt?e.createLineString(n):t instanceof Qt?n.length>0?e.createPoint(n[0]):e.createPoint():t},se.prototype.interfaces_=function(){return[ie.GeometryEditorOperation]},se.prototype.getClass=function(){return se};var ae=function(){};ae.prototype.edit=function(t,e){return t instanceof ee?e.createLinearRing(this.edit(t.getCoordinateSequence(),t)):t instanceof Kt?e.createLineString(this.edit(t.getCoordinateSequence(),t)):t instanceof Qt?e.createPoint(this.edit(t.getCoordinateSequence(),t)):t},ae.prototype.interfaces_=function(){return[ie.GeometryEditorOperation]},ae.prototype.getClass=function(){return ae};var ue=function(){if(this._dimension=3,this._coordinates=null,1===arguments.length){if(arguments[0]instanceof Array)this._coordinates=arguments[0],this._dimension=3;else if(Number.isInteger(arguments[0])){var t=arguments[0];this._coordinates=new Array(t).fill(null);for(var e=0;e<t;e++)this._coordinates[e]=new C}else if(T(arguments[0],V)){var n=arguments[0];if(null===n)return this._coordinates=new Array(0).fill(null),null;this._dimension=n.getDimension(),this._coordinates=new Array(n.size()).fill(null);for(var i=0;i<this._coordinates.length;i++)this._coordinates[i]=n.getCoordinateCopy(i)}}else if(2===arguments.length)if(arguments[0]instanceof Array&&Number.isInteger(arguments[1])){var r=arguments[0],o=arguments[1];this._coordinates=r,this._dimension=o,null===r&&(this._coordinates=new Array(0).fill(null))}else if(Number.isInteger(arguments[0])&&Number.isInteger(arguments[1])){var s=arguments[0],a=arguments[1];this._coordinates=new Array(s).fill(null),this._dimension=a;for(var u=0;u<s;u++)this._coordinates[u]=new C}},le={serialVersionUID:{configurable:!0}};ue.prototype.setOrdinate=function(t,e,n){switch(e){case V.X:this._coordinates[t].x=n;break;case V.Y:this._coordinates[t].y=n;break;case V.Z:this._coordinates[t].z=n;break;default:throw new m("invalid ordinateIndex")}},ue.prototype.size=function(){return this._coordinates.length},ue.prototype.getOrdinate=function(t,e){switch(e){case V.X:return this._coordinates[t].x;case V.Y:return this._coordinates[t].y;case V.Z:return this._coordinates[t].z}return v.NaN},ue.prototype.getCoordinate=function(){if(1===arguments.length){var t=arguments[0];return this._coordinates[t]}if(2===arguments.length){var e=arguments[0],n=arguments[1];n.x=this._coordinates[e].x,n.y=this._coordinates[e].y,n.z=this._coordinates[e].z}},ue.prototype.getCoordinateCopy=function(t){return new C(this._coordinates[t])},ue.prototype.getDimension=function(){return this._dimension},ue.prototype.getX=function(t){return this._coordinates[t].x},ue.prototype.clone=function(){for(var t=new Array(this.size()).fill(null),e=0;e<this._coordinates.length;e++)t[e]=this._coordinates[e].clone();return new ue(t,this._dimension)},ue.prototype.expandEnvelope=function(t){for(var e=0;e<this._coordinates.length;e++)t.expandToInclude(this._coordinates[e]);return t},ue.prototype.copy=function(){for(var t=new Array(this.size()).fill(null),e=0;e<this._coordinates.length;e++)t[e]=this._coordinates[e].copy();return new ue(t,this._dimension)},ue.prototype.toString=function(){if(this._coordinates.length>0){var t=new D(17*this._coordinates.length);t.append("("),t.append(this._coordinates[0]);for(var e=1;e<this._coordinates.length;e++)t.append(", "),t.append(this._coordinates[e]);return t.append(")"),t.toString()}return"()"},ue.prototype.getY=function(t){return this._coordinates[t].y},ue.prototype.toCoordinateArray=function(){return this._coordinates},ue.prototype.interfaces_=function(){return[V,e]},ue.prototype.getClass=function(){return ue},le.serialVersionUID.get=function(){return-0xcb44a778db18e00},Object.defineProperties(ue,le);var ce=function(){},pe={serialVersionUID:{configurable:!0},instanceObject:{configurable:!0}};ce.prototype.readResolve=function(){return ce.instance()},ce.prototype.create=function(){if(1===arguments.length){if(arguments[0]instanceof Array){var t=arguments[0];return new ue(t)}if(T(arguments[0],V)){var e=arguments[0];return new ue(e)}}else if(2===arguments.length){var n=arguments[0],i=arguments[1];return i>3&&(i=3),i<2?new ue(n):new ue(n,i)}},ce.prototype.interfaces_=function(){return[b,e]},ce.prototype.getClass=function(){return ce},ce.instance=function(){return ce.instanceObject},pe.serialVersionUID.get=function(){return-0x38e49fa6cf6f2e00},pe.instanceObject.get=function(){return new ce},Object.defineProperties(ce,pe);var he=function(t){function e(){t.call(this),this.map_=new Map}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.get=function(t){return this.map_.get(t)||null},e.prototype.put=function(t,e){return this.map_.set(t,e),e},e.prototype.values=function(){for(var t=new Nt,e=this.map_.values(),n=e.next();!n.done;)t.add(n.value),n=e.next();return t},e.prototype.entrySet=function(){var t=new Pt;return this.map_.entries().forEach(function(e){return t.add(e)}),t},e.prototype.size=function(){return this.map_.size()},e}(Tt),fe=function t(){if(this._modelType=null,this._scale=null,0===arguments.length)this._modelType=t.FLOATING;else if(1===arguments.length)if(arguments[0]instanceof de){var e=arguments[0];this._modelType=e,e===t.FIXED&&this.setScale(1)}else if("number"==typeof arguments[0]){var n=arguments[0];this._modelType=t.FIXED,this.setScale(n)}else if(arguments[0]instanceof t){var i=arguments[0];this._modelType=i._modelType,this._scale=i._scale}},ge={serialVersionUID:{configurable:!0},maximumPreciseValue:{configurable:!0}};fe.prototype.equals=function(t){if(!(t instanceof fe))return!1;var e=t;return this._modelType===e._modelType&&this._scale===e._scale},fe.prototype.compareTo=function(t){var e=t,n=this.getMaximumSignificantDigits(),i=e.getMaximumSignificantDigits();return new M(n).compareTo(new M(i))},fe.prototype.getScale=function(){return this._scale},fe.prototype.isFloating=function(){return this._modelType===fe.FLOATING||this._modelType===fe.FLOATING_SINGLE},fe.prototype.getType=function(){return this._modelType},fe.prototype.toString=function(){var t="UNKNOWN";return this._modelType===fe.FLOATING?t="Floating":this._modelType===fe.FLOATING_SINGLE?t="Floating-Single":this._modelType===fe.FIXED&&(t="Fixed (Scale="+this.getScale()+")"),t},fe.prototype.makePrecise=function(){if("number"==typeof arguments[0]){var t=arguments[0];if(v.isNaN(t))return t;if(this._modelType===fe.FLOATING_SINGLE){return t}return this._modelType===fe.FIXED?Math.round(t*this._scale)/this._scale:t}if(arguments[0]instanceof C){var e=arguments[0];if(this._modelType===fe.FLOATING)return null;e.x=this.makePrecise(e.x),e.y=this.makePrecise(e.y)}},fe.prototype.getMaximumSignificantDigits=function(){var t=16;return this._modelType===fe.FLOATING?t=16:this._modelType===fe.FLOATING_SINGLE?t=6:this._modelType===fe.FIXED&&(t=1+Math.trunc(Math.ceil(Math.log(this.getScale())/Math.log(10)))),t},fe.prototype.setScale=function(t){this._scale=Math.abs(t)},fe.prototype.interfaces_=function(){return[e,E]},fe.prototype.getClass=function(){return fe},fe.mostPrecise=function(t,e){return t.compareTo(e)>=0?t:e},ge.serialVersionUID.get=function(){return 0x6bee6404e9a25c00},ge.maximumPreciseValue.get=function(){return 9007199254740992},Object.defineProperties(fe,ge);var de=function t(e){this._name=e||null,t.nameToTypeMap.put(e,this)},ye={serialVersionUID:{configurable:!0},nameToTypeMap:{configurable:!0}};de.prototype.readResolve=function(){return de.nameToTypeMap.get(this._name)},de.prototype.toString=function(){return this._name},de.prototype.interfaces_=function(){return[e]},de.prototype.getClass=function(){return de},ye.serialVersionUID.get=function(){return-552860263173159e4},ye.nameToTypeMap.get=function(){return new he},Object.defineProperties(de,ye),fe.Type=de,fe.FIXED=new de("FIXED"),fe.FLOATING=new de("FLOATING"),fe.FLOATING_SINGLE=new de("FLOATING SINGLE");var _e=function t(){this._precisionModel=new fe,this._SRID=0,this._coordinateSequenceFactory=t.getDefaultCoordinateSequenceFactory(),0===arguments.length||(1===arguments.length?T(arguments[0],b)?this._coordinateSequenceFactory=arguments[0]:arguments[0]instanceof fe&&(this._precisionModel=arguments[0]):2===arguments.length?(this._precisionModel=arguments[0],this._SRID=arguments[1]):3===arguments.length&&(this._precisionModel=arguments[0],this._SRID=arguments[1],this._coordinateSequenceFactory=arguments[2]))},me={serialVersionUID:{configurable:!0}};_e.prototype.toGeometry=function(t){return t.isNull()?this.createPoint(null):t.getMinX()===t.getMaxX()&&t.getMinY()===t.getMaxY()?this.createPoint(new C(t.getMinX(),t.getMinY())):t.getMinX()===t.getMaxX()||t.getMinY()===t.getMaxY()?this.createLineString([new C(t.getMinX(),t.getMinY()),new C(t.getMaxX(),t.getMaxY())]):this.createPolygon(this.createLinearRing([new C(t.getMinX(),t.getMinY()),new C(t.getMinX(),t.getMaxY()),new C(t.getMaxX(),t.getMaxY()),new C(t.getMaxX(),t.getMinY()),new C(t.getMinX(),t.getMinY())]),null)},_e.prototype.createLineString=function(t){return t?t instanceof Array?new Kt(this.getCoordinateSequenceFactory().create(t),this):T(t,V)?new Kt(t,this):void 0:new Kt(this.getCoordinateSequenceFactory().create([]),this)},_e.prototype.createMultiLineString=function(){if(0===arguments.length)return new Xt(null,this);if(1===arguments.length){var t=arguments[0];return new Xt(t,this)}},_e.prototype.buildGeometry=function(t){for(var e=null,n=!1,i=!1,r=t.iterator();r.hasNext();){var o=r.next(),s=o.getClass();null===e&&(e=s),s!==e&&(n=!0),o.isGeometryCollectionOrDerived()&&(i=!0)}if(null===e)return this.createGeometryCollection();if(n||i)return this.createGeometryCollection(_e.toGeometryArray(t));var a=t.iterator().next();if(t.size()>1){if(a instanceof $t)return this.createMultiPolygon(_e.toPolygonArray(t));if(a instanceof Kt)return this.createMultiLineString(_e.toLineStringArray(t));if(a instanceof Qt)return this.createMultiPoint(_e.toPointArray(t));et.shouldNeverReachHere("Unhandled class: "+a.getClass().getName())}return a},_e.prototype.createMultiPointFromCoords=function(t){return this.createMultiPoint(null!==t?this.getCoordinateSequenceFactory().create(t):null)},_e.prototype.createPoint=function(){if(0===arguments.length)return this.createPoint(this.getCoordinateSequenceFactory().create([]));if(1===arguments.length){if(arguments[0]instanceof C){var t=arguments[0];return this.createPoint(null!==t?this.getCoordinateSequenceFactory().create([t]):null)}if(T(arguments[0],V)){var e=arguments[0];return new Qt(e,this)}}},_e.prototype.getCoordinateSequenceFactory=function(){return this._coordinateSequenceFactory},_e.prototype.createPolygon=function(){if(0===arguments.length)return new $t(null,null,this);if(1===arguments.length){if(T(arguments[0],V)){var t=arguments[0];return this.createPolygon(this.createLinearRing(t))}if(arguments[0]instanceof Array){var e=arguments[0];return this.createPolygon(this.createLinearRing(e))}if(arguments[0]instanceof ee){var n=arguments[0];return this.createPolygon(n,null)}}else if(2===arguments.length){var i=arguments[0],r=arguments[1];return new $t(i,r,this)}},_e.prototype.getSRID=function(){return this._SRID},_e.prototype.createGeometryCollection=function(){if(0===arguments.length)return new zt(null,this);if(1===arguments.length){var t=arguments[0];return new zt(t,this)}},_e.prototype.createGeometry=function(t){return new ie(this).edit(t,{edit:function(){if(2===arguments.length){var t=arguments[0];return this._coordinateSequenceFactory.create(t)}}})},_e.prototype.getPrecisionModel=function(){return this._precisionModel},_e.prototype.createLinearRing=function(){if(0===arguments.length)return this.createLinearRing(this.getCoordinateSequenceFactory().create([]));if(1===arguments.length){if(arguments[0]instanceof Array){var t=arguments[0];return this.createLinearRing(null!==t?this.getCoordinateSequenceFactory().create(t):null)}if(T(arguments[0],V)){var e=arguments[0];return new ee(e,this)}}},_e.prototype.createMultiPolygon=function(){if(0===arguments.length)return new ne(null,this);if(1===arguments.length){var t=arguments[0];return new ne(t,this)}},_e.prototype.createMultiPoint=function(){if(0===arguments.length)return new te(null,this);if(1===arguments.length){if(arguments[0]instanceof Array){var t=arguments[0];return new te(t,this)}if(arguments[0]instanceof Array){var e=arguments[0];return this.createMultiPoint(null!==e?this.getCoordinateSequenceFactory().create(e):null)}if(T(arguments[0],V)){var n=arguments[0];if(null===n)return this.createMultiPoint(new Array(0).fill(null));for(var i=new Array(n.size()).fill(null),r=0;r<n.size();r++){var o=this.getCoordinateSequenceFactory().create(1,n.getDimension());Wt.copy(n,r,o,0,1),i[r]=this.createPoint(o)}return this.createMultiPoint(i)}}},_e.prototype.interfaces_=function(){return[e]},_e.prototype.getClass=function(){return _e},_e.toMultiPolygonArray=function(t){var e=new Array(t.size()).fill(null);return t.toArray(e)},_e.toGeometryArray=function(t){if(null===t)return null;var e=new Array(t.size()).fill(null);return t.toArray(e)},_e.getDefaultCoordinateSequenceFactory=function(){return ce.instance()},_e.toMultiLineStringArray=function(t){var e=new Array(t.size()).fill(null);return t.toArray(e)},_e.toLineStringArray=function(t){var e=new Array(t.size()).fill(null);return t.toArray(e)},_e.toMultiPointArray=function(t){var e=new Array(t.size()).fill(null);return t.toArray(e)},_e.toLinearRingArray=function(t){var e=new Array(t.size()).fill(null);return t.toArray(e)},_e.toPointArray=function(t){var e=new Array(t.size()).fill(null);return t.toArray(e)},_e.toPolygonArray=function(t){var e=new Array(t.size()).fill(null);return t.toArray(e)},_e.createPointFromInternalCoord=function(t,e){return e.getPrecisionModel().makePrecise(t),e.getFactory().createPoint(t)},me.serialVersionUID.get=function(){return-0x5ea75f2051eeb400},Object.defineProperties(_e,me);var ve=["Point","MultiPoint","LineString","MultiLineString","Polygon","MultiPolygon"],Ie=function(t){this.geometryFactory=t||new _e};Ie.prototype.read=function(t){var e,n=(e="string"==typeof t?JSON.parse(t):t).type;if(!Ee[n])throw new Error("Unknown GeoJSON type: "+e.type);return-1!==ve.indexOf(n)?Ee[n].apply(this,[e.coordinates]):"GeometryCollection"===n?Ee[n].apply(this,[e.geometries]):Ee[n].apply(this,[e])},Ie.prototype.write=function(t){var e=t.getGeometryType();if(!xe[e])throw new Error("Geometry is not supported");return xe[e].apply(this,[t])};var Ee={Feature:function(t){var e={};for(var n in t)e[n]=t[n];if(t.geometry){var i=t.geometry.type;if(!Ee[i])throw new Error("Unknown GeoJSON type: "+t.type);e.geometry=this.read(t.geometry)}return t.bbox&&(e.bbox=Ee.bbox.apply(this,[t.bbox])),e},FeatureCollection:function(t){var e={};if(t.features){e.features=[];for(var n=0;n<t.features.length;++n)e.features.push(this.read(t.features[n]))}return t.bbox&&(e.bbox=this.parse.bbox.apply(this,[t.bbox])),e},coordinates:function(t){for(var e=[],n=0;n<t.length;++n){var i=t[n];e.push(new C(i[0],i[1]))}return e},bbox:function(t){return this.geometryFactory.createLinearRing([new C(t[0],t[1]),new C(t[2],t[1]),new C(t[2],t[3]),new C(t[0],t[3]),new C(t[0],t[1])])},Point:function(t){var e=new C(t[0],t[1]);return this.geometryFactory.createPoint(e)},MultiPoint:function(t){for(var e=[],n=0;n<t.length;++n)e.push(Ee.Point.apply(this,[t[n]]));return this.geometryFactory.createMultiPoint(e)},LineString:function(t){var e=Ee.coordinates.apply(this,[t]);return this.geometryFactory.createLineString(e)},MultiLineString:function(t){for(var e=[],n=0;n<t.length;++n)e.push(Ee.LineString.apply(this,[t[n]]));return this.geometryFactory.createMultiLineString(e)},Polygon:function(t){for(var e=Ee.coordinates.apply(this,[t[0]]),n=this.geometryFactory.createLinearRing(e),i=[],r=1;r<t.length;++r){var o=t[r],s=Ee.coordinates.apply(this,[o]),a=this.geometryFactory.createLinearRing(s);i.push(a)}return this.geometryFactory.createPolygon(n,i)},MultiPolygon:function(t){for(var e=[],n=0;n<t.length;++n){var i=t[n];e.push(Ee.Polygon.apply(this,[i]))}return this.geometryFactory.createMultiPolygon(e)},GeometryCollection:function(t){for(var e=[],n=0;n<t.length;++n){var i=t[n];e.push(this.read(i))}return this.geometryFactory.createGeometryCollection(e)}},xe={coordinate:function(t){return[t.x,t.y]},Point:function(t){return{type:"Point",coordinates:xe.coordinate.apply(this,[t.getCoordinate()])}},MultiPoint:function(t){for(var e=[],n=0;n<t._geometries.length;++n){var i=t._geometries[n],r=xe.Point.apply(this,[i]);e.push(r.coordinates)}return{type:"MultiPoint",coordinates:e}},LineString:function(t){for(var e=[],n=t.getCoordinates(),i=0;i<n.length;++i){var r=n[i];e.push(xe.coordinate.apply(this,[r]))}return{type:"LineString",coordinates:e}},MultiLineString:function(t){for(var e=[],n=0;n<t._geometries.length;++n){var i=t._geometries[n],r=xe.LineString.apply(this,[i]);e.push(r.coordinates)}return{type:"MultiLineString",coordinates:e}},Polygon:function(t){var e=[],n=xe.LineString.apply(this,[t._shell]);e.push(n.coordinates);for(var i=0;i<t._holes.length;++i){var r=t._holes[i],o=xe.LineString.apply(this,[r]);e.push(o.coordinates)}return{type:"Polygon",coordinates:e}},MultiPolygon:function(t){for(var e=[],n=0;n<t._geometries.length;++n){var i=t._geometries[n],r=xe.Polygon.apply(this,[i]);e.push(r.coordinates)}return{type:"MultiPolygon",coordinates:e}},GeometryCollection:function(t){for(var e=[],n=0;n<t._geometries.length;++n){var i=t._geometries[n],r=i.getGeometryType();e.push(xe[r].apply(this,[i]))}return{type:"GeometryCollection",geometries:e}}},Ne=function(t){this.geometryFactory=t||new _e,this.precisionModel=this.geometryFactory.getPrecisionModel(),this.parser=new Ie(this.geometryFactory)};Ne.prototype.read=function(t){var e=this.parser.read(t);return this.precisionModel.getType()===fe.FIXED&&this.reducePrecision(e),e},Ne.prototype.reducePrecision=function(t){var e,n;if(t.coordinate)this.precisionModel.makePrecise(t.coordinate);else if(t.points)for(e=0,n=t.points.length;e<n;e++)this.precisionModel.makePrecise(t.points[e]);else if(t.geometries)for(e=0,n=t.geometries.length;e<n;e++)this.reducePrecision(t.geometries[e])};var Ce=function(){this.parser=new Ie(this.geometryFactory)};Ce.prototype.write=function(t){return this.parser.write(t)};var Se=function(){},Le={ON:{configurable:!0},LEFT:{configurable:!0},RIGHT:{configurable:!0}};Se.prototype.interfaces_=function(){return[]},Se.prototype.getClass=function(){return Se},Se.opposite=function(t){return t===Se.LEFT?Se.RIGHT:t===Se.RIGHT?Se.LEFT:t},Le.ON.get=function(){return 0},Le.LEFT.get=function(){return 1},Le.RIGHT.get=function(){return 2},Object.defineProperties(Se,Le),(d.prototype=new Error).name="EmptyStackException",(y.prototype=new xt).add=function(t){return this.array_.push(t),!0},y.prototype.get=function(t){if(t<0||t>=this.size())throw new Error;return this.array_[t]},y.prototype.push=function(t){return this.array_.push(t),t},y.prototype.pop=function(t){if(0===this.array_.length)throw new d;return this.array_.pop()},y.prototype.peek=function(){if(0===this.array_.length)throw new d;return this.array_[this.array_.length-1]},y.prototype.empty=function(){return 0===this.array_.length},y.prototype.isEmpty=function(){return this.empty()},y.prototype.search=function(t){return this.array_.indexOf(t)},y.prototype.size=function(){return this.array_.length},y.prototype.toArray=function(){for(var t=[],e=0,n=this.array_.length;e<n;e++)t.push(this.array_[e]);return t};var be=function(){this._minIndex=-1,this._minCoord=null,this._minDe=null,this._orientedDe=null};be.prototype.getCoordinate=function(){return this._minCoord},be.prototype.getRightmostSide=function(t,e){var n=this.getRightmostSideOfSegment(t,e);return n<0&&(n=this.getRightmostSideOfSegment(t,e-1)),n<0&&(this._minCoord=null,this.checkForRightmostCoordinate(t)),n},be.prototype.findRightmostEdgeAtVertex=function(){var t=this._minDe.getEdge().getCoordinates();et.isTrue(this._minIndex>0&&this._minIndex<t.length,"rightmost point expected to be interior vertex of edge");var e=t[this._minIndex-1],n=t[this._minIndex+1],i=at.computeOrientation(this._minCoord,n,e),r=!1;e.y<this._minCoord.y&&n.y<this._minCoord.y&&i===at.COUNTERCLOCKWISE?r=!0:e.y>this._minCoord.y&&n.y>this._minCoord.y&&i===at.CLOCKWISE&&(r=!0),r&&(this._minIndex=this._minIndex-1)},be.prototype.getRightmostSideOfSegment=function(t,e){var n=t.getEdge().getCoordinates();if(e<0||e+1>=n.length)return-1;if(n[e].y===n[e+1].y)return-1;var i=Se.LEFT;return n[e].y<n[e+1].y&&(i=Se.RIGHT),i},be.prototype.getEdge=function(){return this._orientedDe},be.prototype.checkForRightmostCoordinate=function(t){for(var e=t.getEdge().getCoordinates(),n=0;n<e.length-1;n++)(null===this._minCoord||e[n].x>this._minCoord.x)&&(this._minDe=t,this._minIndex=n,this._minCoord=e[n])},be.prototype.findRightmostEdgeAtNode=function(){var t=this._minDe.getNode().getEdges();this._minDe=t.getRightmostEdge(),this._minDe.isForward()||(this._minDe=this._minDe.getSym(),this._minIndex=this._minDe.getEdge().getCoordinates().length-1)},be.prototype.findEdge=function(t){for(var e=t.iterator();e.hasNext();){var n=e.next();n.isForward()&&this.checkForRightmostCoordinate(n)}et.isTrue(0!==this._minIndex||this._minCoord.equals(this._minDe.getCoordinate()),"inconsistency in rightmost processing"),0===this._minIndex?this.findRightmostEdgeAtNode():this.findRightmostEdgeAtVertex(),this._orientedDe=this._minDe;this.getRightmostSide(this._minDe,this._minIndex)===Se.LEFT&&(this._orientedDe=this._minDe.getSym())},be.prototype.interfaces_=function(){return[]},be.prototype.getClass=function(){return be};var we=function(t){function e(n,i){t.call(this,e.msgWithCoord(n,i)),this.pt=i?new C(i):null,this.name="TopologyException"}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getCoordinate=function(){return this.pt},e.prototype.interfaces_=function(){return[]},e.prototype.getClass=function(){return e},e.msgWithCoord=function(t,e){return e?t:t+" [ "+e+" ]"},e}($),Oe=function(){this.array_=[]};Oe.prototype.addLast=function(t){this.array_.push(t)},Oe.prototype.removeFirst=function(){return this.array_.shift()},Oe.prototype.isEmpty=function(){return 0===this.array_.length};var Te=function(){this._finder=null,this._dirEdgeList=new Nt,this._nodes=new Nt,this._rightMostCoord=null,this._env=null,this._finder=new be};Te.prototype.clearVisitedEdges=function(){for(var t=this._dirEdgeList.iterator();t.hasNext();){t.next().setVisited(!1)}},Te.prototype.getRightmostCoordinate=function(){return this._rightMostCoord},Te.prototype.computeNodeDepth=function(t){for(var e=null,n=t.getEdges().iterator();n.hasNext();){var i=n.next();if(i.isVisited()||i.getSym().isVisited()){e=i;break}}if(null===e)throw new we("unable to find edge to compute depths at "+t.getCoordinate());t.getEdges().computeDepths(e);for(var r=t.getEdges().iterator();r.hasNext();){var o=r.next();o.setVisited(!0),this.copySymDepths(o)}},Te.prototype.computeDepth=function(t){this.clearVisitedEdges();var e=this._finder.getEdge();e.setEdgeDepths(Se.RIGHT,t),this.copySymDepths(e),this.computeDepths(e)},Te.prototype.create=function(t){this.addReachable(t),this._finder.findEdge(this._dirEdgeList),this._rightMostCoord=this._finder.getCoordinate()},Te.prototype.findResultEdges=function(){for(var t=this._dirEdgeList.iterator();t.hasNext();){var e=t.next();e.getDepth(Se.RIGHT)>=1&&e.getDepth(Se.LEFT)<=0&&!e.isInteriorAreaEdge()&&e.setInResult(!0)}},Te.prototype.computeDepths=function(t){var e=new Pt,n=new Oe,i=t.getNode();for(n.addLast(i),e.add(i),t.setVisited(!0);!n.isEmpty();){var r=n.removeFirst();e.add(r),this.computeNodeDepth(r);for(var o=r.getEdges().iterator();o.hasNext();){var s=o.next().getSym();if(!s.isVisited()){var a=s.getNode();e.contains(a)||(n.addLast(a),e.add(a))}}}},Te.prototype.compareTo=function(t){var e=t;return this._rightMostCoord.x<e._rightMostCoord.x?-1:this._rightMostCoord.x>e._rightMostCoord.x?1:0},Te.prototype.getEnvelope=function(){if(null===this._env){for(var t=new j,e=this._dirEdgeList.iterator();e.hasNext();)for(var n=e.next().getEdge().getCoordinates(),i=0;i<n.length-1;i++)t.expandToInclude(n[i]);this._env=t}return this._env},Te.prototype.addReachable=function(t){var e=new y;for(e.add(t);!e.empty();){var n=e.pop();this.add(n,e)}},Te.prototype.copySymDepths=function(t){var e=t.getSym();e.setDepth(Se.LEFT,t.getDepth(Se.RIGHT)),e.setDepth(Se.RIGHT,t.getDepth(Se.LEFT))},Te.prototype.add=function(t,e){t.setVisited(!0),this._nodes.add(t);for(var n=t.getEdges().iterator();n.hasNext();){var i=n.next();this._dirEdgeList.add(i);var r=i.getSym().getNode();r.isVisited()||e.push(r)}},Te.prototype.getNodes=function(){return this._nodes},Te.prototype.getDirectedEdges=function(){return this._dirEdgeList},Te.prototype.interfaces_=function(){return[E]},Te.prototype.getClass=function(){return Te};var Re=function t(){if(this.location=null,1===arguments.length){if(arguments[0]instanceof Array){var e=arguments[0];this.init(e.length)}else if(Number.isInteger(arguments[0])){var n=arguments[0];this.init(1),this.location[Se.ON]=n}else if(arguments[0]instanceof t){var i=arguments[0];if(this.init(i.location.length),null!==i)for(var r=0;r<this.location.length;r++)this.location[r]=i.location[r]}}else if(3===arguments.length){var o=arguments[0],s=arguments[1],a=arguments[2];this.init(3),this.location[Se.ON]=o,this.location[Se.LEFT]=s,this.location[Se.RIGHT]=a}};Re.prototype.setAllLocations=function(t){for(var e=0;e<this.location.length;e++)this.location[e]=t},Re.prototype.isNull=function(){for(var t=0;t<this.location.length;t++)if(this.location[t]!==w.NONE)return!1;return!0},Re.prototype.setAllLocationsIfNull=function(t){for(var e=0;e<this.location.length;e++)this.location[e]===w.NONE&&(this.location[e]=t)},Re.prototype.isLine=function(){return 1===this.location.length},Re.prototype.merge=function(t){if(t.location.length>this.location.length){var e=new Array(3).fill(null);e[Se.ON]=this.location[Se.ON],e[Se.LEFT]=w.NONE,e[Se.RIGHT]=w.NONE,this.location=e}for(var n=0;n<this.location.length;n++)this.location[n]===w.NONE&&n<t.location.length&&(this.location[n]=t.location[n])},Re.prototype.getLocations=function(){return this.location},Re.prototype.flip=function(){if(this.location.length<=1)return null;var t=this.location[Se.LEFT];this.location[Se.LEFT]=this.location[Se.RIGHT],this.location[Se.RIGHT]=t},Re.prototype.toString=function(){var t=new D;return this.location.length>1&&t.append(w.toLocationSymbol(this.location[Se.LEFT])),t.append(w.toLocationSymbol(this.location[Se.ON])),this.location.length>1&&t.append(w.toLocationSymbol(this.location[Se.RIGHT])),t.toString()},Re.prototype.setLocations=function(t,e,n){this.location[Se.ON]=t,this.location[Se.LEFT]=e,this.location[Se.RIGHT]=n},Re.prototype.get=function(t){return t<this.location.length?this.location[t]:w.NONE},Re.prototype.isArea=function(){return this.location.length>1},Re.prototype.isAnyNull=function(){for(var t=0;t<this.location.length;t++)if(this.location[t]===w.NONE)return!0;return!1},Re.prototype.setLocation=function(){if(1===arguments.length){var t=arguments[0];this.setLocation(Se.ON,t)}else if(2===arguments.length){var e=arguments[0],n=arguments[1];this.location[e]=n}},Re.prototype.init=function(t){this.location=new Array(t).fill(null),this.setAllLocations(w.NONE)},Re.prototype.isEqualOnSide=function(t,e){return this.location[e]===t.location[e]},Re.prototype.allPositionsEqual=function(t){for(var e=0;e<this.location.length;e++)if(this.location[e]!==t)return!1;return!0},Re.prototype.interfaces_=function(){return[]},Re.prototype.getClass=function(){return Re};var Pe=function t(){if(this.elt=new Array(2).fill(null),1===arguments.length){if(Number.isInteger(arguments[0])){var e=arguments[0];this.elt[0]=new Re(e),this.elt[1]=new Re(e)}else if(arguments[0]instanceof t){var n=arguments[0];this.elt[0]=new Re(n.elt[0]),this.elt[1]=new Re(n.elt[1])}}else if(2===arguments.length){var i=arguments[0],r=arguments[1];this.elt[0]=new Re(w.NONE),this.elt[1]=new Re(w.NONE),this.elt[i].setLocation(r)}else if(3===arguments.length){var o=arguments[0],s=arguments[1],a=arguments[2];this.elt[0]=new Re(o,s,a),this.elt[1]=new Re(o,s,a)}else if(4===arguments.length){var u=arguments[0],l=arguments[1],c=arguments[2],p=arguments[3];this.elt[0]=new Re(w.NONE,w.NONE,w.NONE),this.elt[1]=new Re(w.NONE,w.NONE,w.NONE),this.elt[u].setLocations(l,c,p)}};Pe.prototype.getGeometryCount=function(){var t=0;return this.elt[0].isNull()||t++,this.elt[1].isNull()||t++,t},Pe.prototype.setAllLocations=function(t,e){this.elt[t].setAllLocations(e)},Pe.prototype.isNull=function(t){return this.elt[t].isNull()},Pe.prototype.setAllLocationsIfNull=function(){if(1===arguments.length){var t=arguments[0];this.setAllLocationsIfNull(0,t),this.setAllLocationsIfNull(1,t)}else if(2===arguments.length){var e=arguments[0],n=arguments[1];this.elt[e].setAllLocationsIfNull(n)}},Pe.prototype.isLine=function(t){return this.elt[t].isLine()},Pe.prototype.merge=function(t){for(var e=0;e<2;e++)null===this.elt[e]&&null!==t.elt[e]?this.elt[e]=new Re(t.elt[e]):this.elt[e].merge(t.elt[e])},Pe.prototype.flip=function(){this.elt[0].flip(),this.elt[1].flip()},Pe.prototype.getLocation=function(){if(1===arguments.length){var t=arguments[0];return this.elt[t].get(Se.ON)}if(2===arguments.length){var e=arguments[0],n=arguments[1];return this.elt[e].get(n)}},Pe.prototype.toString=function(){var t=new D;return null!==this.elt[0]&&(t.append("A:"),t.append(this.elt[0].toString())),null!==this.elt[1]&&(t.append(" B:"),t.append(this.elt[1].toString())),t.toString()},Pe.prototype.isArea=function(){if(0===arguments.length)return this.elt[0].isArea()||this.elt[1].isArea();if(1===arguments.length){var t=arguments[0];return this.elt[t].isArea()}},Pe.prototype.isAnyNull=function(t){return this.elt[t].isAnyNull()},Pe.prototype.setLocation=function(){if(2===arguments.length){var t=arguments[0],e=arguments[1];this.elt[t].setLocation(Se.ON,e)}else if(3===arguments.length){var n=arguments[0],i=arguments[1],r=arguments[2];this.elt[n].setLocation(i,r)}},Pe.prototype.isEqualOnSide=function(t,e){return this.elt[0].isEqualOnSide(t.elt[0],e)&&this.elt[1].isEqualOnSide(t.elt[1],e)},Pe.prototype.allPositionsEqual=function(t,e){return this.elt[t].allPositionsEqual(e)},Pe.prototype.toLine=function(t){this.elt[t].isArea()&&(this.elt[t]=new Re(this.elt[t].location[0]))},Pe.prototype.interfaces_=function(){return[]},Pe.prototype.getClass=function(){return Pe},Pe.toLineLabel=function(t){for(var e=new Pe(w.NONE),n=0;n<2;n++)e.setLocation(n,t.getLocation(n));return e};var De=function(){this._startDe=null,this._maxNodeDegree=-1,this._edges=new Nt,this._pts=new Nt,this._label=new Pe(w.NONE),this._ring=null,this._isHole=null,this._shell=null,this._holes=new Nt,this._geometryFactory=null;var t=arguments[0],e=arguments[1];this._geometryFactory=e,this.computePoints(t),this.computeRing()};De.prototype.computeRing=function(){if(null!==this._ring)return null;for(var t=new Array(this._pts.size()).fill(null),e=0;e<this._pts.size();e++)t[e]=this._pts.get(e);this._ring=this._geometryFactory.createLinearRing(t),this._isHole=at.isCCW(this._ring.getCoordinates())},De.prototype.isIsolated=function(){return 1===this._label.getGeometryCount()},De.prototype.computePoints=function(t){this._startDe=t;var e=t,n=!0;do{if(null===e)throw new we("Found null DirectedEdge");if(e.getEdgeRing()===this)throw new we("Directed Edge visited twice during ring-building at "+e.getCoordinate());this._edges.add(e);var i=e.getLabel();et.isTrue(i.isArea()),this.mergeLabel(i),this.addPoints(e.getEdge(),e.isForward(),n),n=!1,this.setEdgeRing(e,this),e=this.getNext(e)}while(e!==this._startDe)},De.prototype.getLinearRing=function(){return this._ring},De.prototype.getCoordinate=function(t){return this._pts.get(t)},De.prototype.computeMaxNodeDegree=function(){this._maxNodeDegree=0;var t=this._startDe;do{var e=t.getNode().getEdges().getOutgoingDegree(this);e>this._maxNodeDegree&&(this._maxNodeDegree=e),t=this.getNext(t)}while(t!==this._startDe);this._maxNodeDegree*=2},De.prototype.addPoints=function(t,e,n){var i=t.getCoordinates();if(e){var r=1;n&&(r=0);for(var o=r;o<i.length;o++)this._pts.add(i[o])}else{var s=i.length-2;n&&(s=i.length-1);for(var a=s;a>=0;a--)this._pts.add(i[a])}},De.prototype.isHole=function(){return this._isHole},De.prototype.setInResult=function(){var t=this._startDe;do{t.getEdge().setInResult(!0),t=t.getNext()}while(t!==this._startDe)},De.prototype.containsPoint=function(t){var e=this.getLinearRing();if(!e.getEnvelopeInternal().contains(t))return!1;if(!at.isPointInRing(t,e.getCoordinates()))return!1;for(var n=this._holes.iterator();n.hasNext();){if(n.next().containsPoint(t))return!1}return!0},De.prototype.addHole=function(t){this._holes.add(t)},De.prototype.isShell=function(){return null===this._shell},De.prototype.getLabel=function(){return this._label},De.prototype.getEdges=function(){return this._edges},De.prototype.getMaxNodeDegree=function(){return this._maxNodeDegree<0&&this.computeMaxNodeDegree(),this._maxNodeDegree},De.prototype.getShell=function(){return this._shell},De.prototype.mergeLabel=function(){if(1===arguments.length){var t=arguments[0];this.mergeLabel(t,0),this.mergeLabel(t,1)}else if(2===arguments.length){var e=arguments[0],n=arguments[1],i=e.getLocation(n,Se.RIGHT);if(i===w.NONE)return null;if(this._label.getLocation(n)===w.NONE)return this._label.setLocation(n,i),null}},De.prototype.setShell=function(t){this._shell=t,null!==t&&t.addHole(this)},De.prototype.toPolygon=function(t){for(var e=new Array(this._holes.size()).fill(null),n=0;n<this._holes.size();n++)e[n]=this._holes.get(n).getLinearRing();return t.createPolygon(this.getLinearRing(),e)},De.prototype.interfaces_=function(){return[]},De.prototype.getClass=function(){return De};var Me=function(t){function e(){var e=arguments[0],n=arguments[1];t.call(this,e,n)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.setEdgeRing=function(t,e){t.setMinEdgeRing(e)},e.prototype.getNext=function(t){return t.getNextMin()},e.prototype.interfaces_=function(){return[]},e.prototype.getClass=function(){return e},e}(De),Ae=function(t){function e(){var e=arguments[0],n=arguments[1];t.call(this,e,n)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.buildMinimalRings=function(){var t=new Nt,e=this._startDe;do{if(null===e.getMinEdgeRing()){var n=new Me(e,this._geometryFactory);t.add(n)}e=e.getNext()}while(e!==this._startDe);return t},e.prototype.setEdgeRing=function(t,e){t.setEdgeRing(e)},e.prototype.linkDirectedEdgesForMinimalEdgeRings=function(){var t=this._startDe;do{t.getNode().getEdges().linkMinimalDirectedEdges(this),t=t.getNext()}while(t!==this._startDe)},e.prototype.getNext=function(t){return t.getNext()},e.prototype.interfaces_=function(){return[]},e.prototype.getClass=function(){return e},e}(De),Fe=function(){if(this._label=null,this._isInResult=!1,this._isCovered=!1,this._isCoveredSet=!1,this._isVisited=!1,0===arguments.length);else if(1===arguments.length){var t=arguments[0];this._label=t}};Fe.prototype.setVisited=function(t){this._isVisited=t},Fe.prototype.setInResult=function(t){this._isInResult=t},Fe.prototype.isCovered=function(){return this._isCovered},Fe.prototype.isCoveredSet=function(){return this._isCoveredSet},Fe.prototype.setLabel=function(t){this._label=t},Fe.prototype.getLabel=function(){return this._label},Fe.prototype.setCovered=function(t){this._isCovered=t,this._isCoveredSet=!0},Fe.prototype.updateIM=function(t){et.isTrue(this._label.getGeometryCount()>=2,"found partial label"),this.computeIM(t)},Fe.prototype.isInResult=function(){return this._isInResult},Fe.prototype.isVisited=function(){return this._isVisited},Fe.prototype.interfaces_=function(){return[]},Fe.prototype.getClass=function(){return Fe};var Ge=function(t){function e(){t.call(this),this._coord=null,this._edges=null;var e=arguments[0],n=arguments[1];this._coord=e,this._edges=n,this._label=new Pe(0,w.NONE)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.isIncidentEdgeInResult=function(){for(var t=this.getEdges().getEdges().iterator();t.hasNext();){if(t.next().getEdge().isInResult())return!0}return!1},e.prototype.isIsolated=function(){return 1===this._label.getGeometryCount()},e.prototype.getCoordinate=function(){return this._coord},e.prototype.print=function(t){t.println("node "+this._coord+" lbl: "+this._label)},e.prototype.computeIM=function(t){},e.prototype.computeMergedLocation=function(t,e){var n=w.NONE;if(n=this._label.getLocation(e),!t.isNull(e)){var i=t.getLocation(e);n!==w.BOUNDARY&&(n=i)}return n},e.prototype.setLabel=function(){if(2!==arguments.length)return t.prototype.setLabel.apply(this,arguments);var e=arguments[0],n=arguments[1];null===this._label?this._label=new Pe(e,n):this._label.setLocation(e,n)},e.prototype.getEdges=function(){return this._edges},e.prototype.mergeLabel=function(){if(arguments[0]instanceof e){var t=arguments[0];this.mergeLabel(t._label)}else if(arguments[0]instanceof Pe)for(var n=arguments[0],i=0;i<2;i++){var r=this.computeMergedLocation(n,i);this._label.getLocation(i)===w.NONE&&this._label.setLocation(i,r)}},e.prototype.add=function(t){this._edges.insert(t),t.setNode(this)},e.prototype.setLabelBoundary=function(t){if(null===this._label)return null;var e=w.NONE;null!==this._label&&(e=this._label.getLocation(t));var n=null;switch(e){case w.BOUNDARY:n=w.INTERIOR;break;case w.INTERIOR:default:n=w.BOUNDARY}this._label.setLocation(t,n)},e.prototype.interfaces_=function(){return[]},e.prototype.getClass=function(){return e},e}(Fe),qe=function(){this.nodeMap=new p,this.nodeFact=null;var t=arguments[0];this.nodeFact=t};qe.prototype.find=function(t){return this.nodeMap.get(t)},qe.prototype.addNode=function(){if(arguments[0]instanceof C){var t=arguments[0],e=this.nodeMap.get(t);return null===e&&(e=this.nodeFact.createNode(t),this.nodeMap.put(t,e)),e}if(arguments[0]instanceof Ge){var n=arguments[0],i=this.nodeMap.get(n.getCoordinate());return null===i?(this.nodeMap.put(n.getCoordinate(),n),n):(i.mergeLabel(n),i)}},qe.prototype.print=function(t){for(var e=this.iterator();e.hasNext();){e.next().print(t)}},qe.prototype.iterator=function(){return this.nodeMap.values().iterator()},qe.prototype.values=function(){return this.nodeMap.values()},qe.prototype.getBoundaryNodes=function(t){for(var e=new Nt,n=this.iterator();n.hasNext();){var i=n.next();i.getLabel().getLocation(t)===w.BOUNDARY&&e.add(i)}return e},qe.prototype.add=function(t){var e=t.getCoordinate();this.addNode(e).add(t)},qe.prototype.interfaces_=function(){return[]},qe.prototype.getClass=function(){return qe};var Be=function(){},Ve={NE:{configurable:!0},NW:{configurable:!0},SW:{configurable:!0},SE:{configurable:!0}};Be.prototype.interfaces_=function(){return[]},Be.prototype.getClass=function(){return Be},Be.isNorthern=function(t){return t===Be.NE||t===Be.NW},Be.isOpposite=function(t,e){if(t===e)return!1;return 2===(t-e+4)%4},Be.commonHalfPlane=function(t,e){if(t===e)return t;if(2===(t-e+4)%4)return-1;var n=t<e?t:e;return 0===n&&3===(t>e?t:e)?3:n},Be.isInHalfPlane=function(t,e){return e===Be.SE?t===Be.SE||t===Be.SW:t===e||t===e+1},Be.quadrant=function(){if("number"==typeof arguments[0]&&"number"==typeof arguments[1]){var t=arguments[0],e=arguments[1];if(0===t&&0===e)throw new m("Cannot compute the quadrant for point ( "+t+", "+e+" )");return t>=0?e>=0?Be.NE:Be.SE:e>=0?Be.NW:Be.SW}if(arguments[0]instanceof C&&arguments[1]instanceof C){var n=arguments[0],i=arguments[1];if(i.x===n.x&&i.y===n.y)throw new m("Cannot compute the quadrant for two identical points "+n);return i.x>=n.x?i.y>=n.y?Be.NE:Be.SE:i.y>=n.y?Be.NW:Be.SW}},Ve.NE.get=function(){return 0},Ve.NW.get=function(){return 1},Ve.SW.get=function(){return 2},Ve.SE.get=function(){return 3},Object.defineProperties(Be,Ve);var Ue=function(){if(this._edge=null,this._label=null,this._node=null,this._p0=null,this._p1=null,this._dx=null,this._dy=null,this._quadrant=null,1===arguments.length){var t=arguments[0];this._edge=t}else if(3===arguments.length){var e=arguments[0],n=arguments[1],i=arguments[2];this._edge=e,this.init(n,i),this._label=null}else if(4===arguments.length){var r=arguments[0],o=arguments[1],s=arguments[2],a=arguments[3];this._edge=r,this.init(o,s),this._label=a}};Ue.prototype.compareDirection=function(t){return this._dx===t._dx&&this._dy===t._dy?0:this._quadrant>t._quadrant?1:this._quadrant<t._quadrant?-1:at.computeOrientation(t._p0,t._p1,this._p1)},Ue.prototype.getDy=function(){return this._dy},Ue.prototype.getCoordinate=function(){return this._p0},Ue.prototype.setNode=function(t){this._node=t},Ue.prototype.print=function(t){var e=Math.atan2(this._dy,this._dx),n=this.getClass().getName(),i=n.lastIndexOf("."),r=n.substring(i+1);t.print("  "+r+": "+this._p0+" - "+this._p1+" "+this._quadrant+":"+e+"   "+this._label)},Ue.prototype.compareTo=function(t){var e=t;return this.compareDirection(e)},Ue.prototype.getDirectedCoordinate=function(){return this._p1},Ue.prototype.getDx=function(){return this._dx},Ue.prototype.getLabel=function(){return this._label},Ue.prototype.getEdge=function(){return this._edge},Ue.prototype.getQuadrant=function(){return this._quadrant},Ue.prototype.getNode=function(){return this._node},Ue.prototype.toString=function(){var t=Math.atan2(this._dy,this._dx),e=this.getClass().getName(),n=e.lastIndexOf(".");return"  "+e.substring(n+1)+": "+this._p0+" - "+this._p1+" "+this._quadrant+":"+t+"   "+this._label},Ue.prototype.computeLabel=function(t){},Ue.prototype.init=function(t,e){this._p0=t,this._p1=e,this._dx=e.x-t.x,this._dy=e.y-t.y,this._quadrant=Be.quadrant(this._dx,this._dy),et.isTrue(!(0===this._dx&&0===this._dy),"EdgeEnd with identical endpoints found")},Ue.prototype.interfaces_=function(){return[E]},Ue.prototype.getClass=function(){return Ue};var ze=function(t){function e(){var e=arguments[0],n=arguments[1];if(t.call(this,e),this._isForward=null,this._isInResult=!1,this._isVisited=!1,this._sym=null,this._next=null,this._nextMin=null,this._edgeRing=null,this._minEdgeRing=null,this._depth=[0,-999,-999],this._isForward=n,n)this.init(e.getCoordinate(0),e.getCoordinate(1));else{var i=e.getNumPoints()-1;this.init(e.getCoordinate(i),e.getCoordinate(i-1))}this.computeDirectedLabel()}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getNextMin=function(){return this._nextMin},e.prototype.getDepth=function(t){return this._depth[t]},e.prototype.setVisited=function(t){this._isVisited=t},e.prototype.computeDirectedLabel=function(){this._label=new Pe(this._edge.getLabel()),this._isForward||this._label.flip()},e.prototype.getNext=function(){return this._next},e.prototype.setDepth=function(t,e){if(-999!==this._depth[t]&&this._depth[t]!==e)throw new we("assigned depths do not match",this.getCoordinate());this._depth[t]=e},e.prototype.isInteriorAreaEdge=function(){for(var t=!0,e=0;e<2;e++)this._label.isArea(e)&&this._label.getLocation(e,Se.LEFT)===w.INTERIOR&&this._label.getLocation(e,Se.RIGHT)===w.INTERIOR||(t=!1);return t},e.prototype.setNextMin=function(t){this._nextMin=t},e.prototype.print=function(e){t.prototype.print.call(this,e),e.print(" "+this._depth[Se.LEFT]+"/"+this._depth[Se.RIGHT]),e.print(" ("+this.getDepthDelta()+")"),this._isInResult&&e.print(" inResult")},e.prototype.setMinEdgeRing=function(t){this._minEdgeRing=t},e.prototype.isLineEdge=function(){var t=this._label.isLine(0)||this._label.isLine(1),e=!this._label.isArea(0)||this._label.allPositionsEqual(0,w.EXTERIOR),n=!this._label.isArea(1)||this._label.allPositionsEqual(1,w.EXTERIOR);return t&&e&&n},e.prototype.setEdgeRing=function(t){this._edgeRing=t},e.prototype.getMinEdgeRing=function(){return this._minEdgeRing},e.prototype.getDepthDelta=function(){var t=this._edge.getDepthDelta();return this._isForward||(t=-t),t},e.prototype.setInResult=function(t){this._isInResult=t},e.prototype.getSym=function(){return this._sym},e.prototype.isForward=function(){return this._isForward},e.prototype.getEdge=function(){return this._edge},e.prototype.printEdge=function(t){this.print(t),t.print(" "),this._isForward?this._edge.print(t):this._edge.printReverse(t)},e.prototype.setSym=function(t){this._sym=t},e.prototype.setVisitedEdge=function(t){this.setVisited(t),this._sym.setVisited(t)},e.prototype.setEdgeDepths=function(t,e){var n=this.getEdge().getDepthDelta();this._isForward||(n=-n);var i=1;t===Se.LEFT&&(i=-1);var r=Se.opposite(t),o=e+n*i;this.setDepth(t,e),this.setDepth(r,o)},e.prototype.getEdgeRing=function(){return this._edgeRing},e.prototype.isInResult=function(){return this._isInResult},e.prototype.setNext=function(t){this._next=t},e.prototype.isVisited=function(){return this._isVisited},e.prototype.interfaces_=function(){return[]},e.prototype.getClass=function(){return e},e.depthFactor=function(t,e){return t===w.EXTERIOR&&e===w.INTERIOR?1:t===w.INTERIOR&&e===w.EXTERIOR?-1:0},e}(Ue),Xe=function(){};Xe.prototype.createNode=function(t){return new Ge(t,null)},Xe.prototype.interfaces_=function(){return[]},Xe.prototype.getClass=function(){return Xe};var Ye=function(){if(this._edges=new Nt,this._nodes=null,this._edgeEndList=new Nt,0===arguments.length)this._nodes=new qe(new Xe);else if(1===arguments.length){var t=arguments[0];this._nodes=new qe(t)}};Ye.prototype.printEdges=function(t){t.println("Edges:");for(var e=0;e<this._edges.size();e++){t.println("edge "+e+":");var n=this._edges.get(e);n.print(t),n.eiList.print(t)}},Ye.prototype.find=function(t){return this._nodes.find(t)},Ye.prototype.addNode=function(){if(arguments[0]instanceof Ge){var t=arguments[0];return this._nodes.addNode(t)}if(arguments[0]instanceof C){var e=arguments[0];return this._nodes.addNode(e)}},Ye.prototype.getNodeIterator=function(){return this._nodes.iterator()},Ye.prototype.linkResultDirectedEdges=function(){for(var t=this._nodes.iterator();t.hasNext();){t.next().getEdges().linkResultDirectedEdges()}},Ye.prototype.debugPrintln=function(t){Y.out.println(t)},Ye.prototype.isBoundaryNode=function(t,e){var n=this._nodes.find(e);if(null===n)return!1;var i=n.getLabel();return null!==i&&i.getLocation(t)===w.BOUNDARY},Ye.prototype.linkAllDirectedEdges=function(){for(var t=this._nodes.iterator();t.hasNext();){t.next().getEdges().linkAllDirectedEdges()}},Ye.prototype.matchInSameDirection=function(t,e,n,i){return!!t.equals(n)&&(at.computeOrientation(t,e,i)===at.COLLINEAR&&Be.quadrant(t,e)===Be.quadrant(n,i))},Ye.prototype.getEdgeEnds=function(){return this._edgeEndList},Ye.prototype.debugPrint=function(t){Y.out.print(t)},Ye.prototype.getEdgeIterator=function(){return this._edges.iterator()},Ye.prototype.findEdgeInSameDirection=function(t,e){for(var n=0;n<this._edges.size();n++){var i=this._edges.get(n),r=i.getCoordinates();if(this.matchInSameDirection(t,e,r[0],r[1]))return i;if(this.matchInSameDirection(t,e,r[r.length-1],r[r.length-2]))return i}return null},Ye.prototype.insertEdge=function(t){this._edges.add(t)},Ye.prototype.findEdgeEnd=function(t){for(var e=this.getEdgeEnds().iterator();e.hasNext();){var n=e.next();if(n.getEdge()===t)return n}return null},Ye.prototype.addEdges=function(t){for(var e=t.iterator();e.hasNext();){var n=e.next();this._edges.add(n);var i=new ze(n,!0),r=new ze(n,!1);i.setSym(r),r.setSym(i),this.add(i),this.add(r)}},Ye.prototype.add=function(t){this._nodes.add(t),this._edgeEndList.add(t)},Ye.prototype.getNodes=function(){return this._nodes.values()},Ye.prototype.findEdge=function(t,e){for(var n=0;n<this._edges.size();n++){var i=this._edges.get(n),r=i.getCoordinates();if(t.equals(r[0])&&e.equals(r[1]))return i}return null},Ye.prototype.interfaces_=function(){return[]},Ye.prototype.getClass=function(){return Ye},Ye.linkResultDirectedEdges=function(t){for(var e=t.iterator();e.hasNext();){e.next().getEdges().linkResultDirectedEdges()}};var ke=function(){this._geometryFactory=null,this._shellList=new Nt;var t=arguments[0];this._geometryFactory=t};ke.prototype.sortShellsAndHoles=function(t,e,n){for(var i=t.iterator();i.hasNext();){var r=i.next();r.isHole()?n.add(r):e.add(r)}},ke.prototype.computePolygons=function(t){for(var e=new Nt,n=t.iterator();n.hasNext();){var i=n.next().toPolygon(this._geometryFactory);e.add(i)}return e},ke.prototype.placeFreeHoles=function(t,e){for(var n=e.iterator();n.hasNext();){var i=n.next();if(null===i.getShell()){var r=this.findEdgeRingContaining(i,t);if(null===r)throw new we("unable to assign hole to a shell",i.getCoordinate(0));i.setShell(r)}}},ke.prototype.buildMinimalEdgeRings=function(t,e,n){for(var i=new Nt,r=t.iterator();r.hasNext();){var o=r.next();if(o.getMaxNodeDegree()>2){o.linkDirectedEdgesForMinimalEdgeRings();var s=o.buildMinimalRings(),a=this.findShell(s);null!==a?(this.placePolygonHoles(a,s),e.add(a)):n.addAll(s)}else i.add(o)}return i},ke.prototype.containsPoint=function(t){for(var e=this._shellList.iterator();e.hasNext();){if(e.next().containsPoint(t))return!0}return!1},ke.prototype.buildMaximalEdgeRings=function(t){for(var e=new Nt,n=t.iterator();n.hasNext();){var i=n.next();if(i.isInResult()&&i.getLabel().isArea()&&null===i.getEdgeRing()){var r=new Ae(i,this._geometryFactory);e.add(r),r.setInResult()}}return e},ke.prototype.placePolygonHoles=function(t,e){for(var n=e.iterator();n.hasNext();){var i=n.next();i.isHole()&&i.setShell(t)}},ke.prototype.getPolygons=function(){return this.computePolygons(this._shellList)},ke.prototype.findEdgeRingContaining=function(t,e){for(var n=t.getLinearRing(),i=n.getEnvelopeInternal(),r=n.getCoordinateN(0),o=null,s=null,a=e.iterator();a.hasNext();){var u=a.next(),l=u.getLinearRing(),c=l.getEnvelopeInternal();null!==o&&(s=o.getLinearRing().getEnvelopeInternal());var p=!1;c.contains(i)&&at.isPointInRing(r,l.getCoordinates())&&(p=!0),p&&(null===o||s.contains(c))&&(o=u)}return o},ke.prototype.findShell=function(t){for(var e=0,n=null,i=t.iterator();i.hasNext();){var r=i.next();r.isHole()||(n=r,e++)}return et.isTrue(e<=1,"found two shells in MinimalEdgeRing list"),n},ke.prototype.add=function(){if(1===arguments.length){var t=arguments[0];this.add(t.getEdgeEnds(),t.getNodes())}else if(2===arguments.length){var e=arguments[0],n=arguments[1];Ye.linkResultDirectedEdges(n);var i=this.buildMaximalEdgeRings(e),r=new Nt,o=this.buildMinimalEdgeRings(i,this._shellList,r);this.sortShellsAndHoles(o,this._shellList,r),this.placeFreeHoles(this._shellList,r)}},ke.prototype.interfaces_=function(){return[]},ke.prototype.getClass=function(){return ke};var je=function(){};je.prototype.getBounds=function(){},je.prototype.interfaces_=function(){return[]},je.prototype.getClass=function(){return je};var He=function(){this._bounds=null,this._item=null;var t=arguments[0],e=arguments[1];this._bounds=t,this._item=e};He.prototype.getItem=function(){return this._item},He.prototype.getBounds=function(){return this._bounds},He.prototype.interfaces_=function(){return[je,e]},He.prototype.getClass=function(){return He};var We=function(){this._size=null,this._items=null,this._size=0,this._items=new Nt,this._items.add(null)};We.prototype.poll=function(){if(this.isEmpty())return null;var t=this._items.get(1);return this._items.set(1,this._items.get(this._size)),this._size-=1,this.reorder(1),t},We.prototype.size=function(){return this._size},We.prototype.reorder=function(t){for(var e=null,n=this._items.get(t);2*t<=this._size&&((e=2*t)!==this._size&&this._items.get(e+1).compareTo(this._items.get(e))<0&&e++,this._items.get(e).compareTo(n)<0);t=e)this._items.set(t,this._items.get(e));this._items.set(t,n)},We.prototype.clear=function(){this._size=0,this._items.clear()},We.prototype.isEmpty=function(){return 0===this._size},We.prototype.add=function(t){this._items.add(null),this._size+=1;var e=this._size;for(this._items.set(0,t);t.compareTo(this._items.get(Math.trunc(e/2)))<0;e/=2)this._items.set(e,this._items.get(Math.trunc(e/2)));this._items.set(e,t)},We.prototype.interfaces_=function(){return[]},We.prototype.getClass=function(){return We};var Ke=function(){};Ke.prototype.visitItem=function(t){},Ke.prototype.interfaces_=function(){return[]},Ke.prototype.getClass=function(){return Ke};var Je=function(){};Je.prototype.insert=function(t,e){},Je.prototype.remove=function(t,e){},Je.prototype.query=function(){},Je.prototype.interfaces_=function(){return[]},Je.prototype.getClass=function(){return Je};var Qe=function(){if(this._childBoundables=new Nt,this._bounds=null,this._level=null,0===arguments.length);else if(1===arguments.length){var t=arguments[0];this._level=t}},Ze={serialVersionUID:{configurable:!0}};Qe.prototype.getLevel=function(){return this._level},Qe.prototype.size=function(){return this._childBoundables.size()},Qe.prototype.getChildBoundables=function(){return this._childBoundables},Qe.prototype.addChildBoundable=function(t){et.isTrue(null===this._bounds),this._childBoundables.add(t)},Qe.prototype.isEmpty=function(){return this._childBoundables.isEmpty()},Qe.prototype.getBounds=function(){return null===this._bounds&&(this._bounds=this.computeBounds()),this._bounds},Qe.prototype.interfaces_=function(){return[je,e]},Qe.prototype.getClass=function(){return Qe},Ze.serialVersionUID.get=function(){return 0x5a1e55ec41369800},Object.defineProperties(Qe,Ze);var $e=function(){};$e.reverseOrder=function(){return{compare:function(t,e){return e.compareTo(t)}}},$e.min=function(t){return $e.sort(t),t.get(0)},$e.sort=function(t,e){var n=t.toArray();e?Gt.sort(n,e):Gt.sort(n);for(var i=t.iterator(),r=0,o=n.length;r<o;r++)i.next(),i.set(n[r])},$e.singletonList=function(t){var e=new Nt;return e.add(t),e};var tn=function(){this._boundable1=null,this._boundable2=null,this._distance=null,this._itemDistance=null;var t=arguments[0],e=arguments[1],n=arguments[2];this._boundable1=t,this._boundable2=e,this._itemDistance=n,this._distance=this.distance()};tn.prototype.expandToQueue=function(t,e){var n=tn.isComposite(this._boundable1),i=tn.isComposite(this._boundable2);if(n&&i)return tn.area(this._boundable1)>tn.area(this._boundable2)?(this.expand(this._boundable1,this._boundable2,t,e),null):(this.expand(this._boundable2,this._boundable1,t,e),null);if(n)return this.expand(this._boundable1,this._boundable2,t,e),null;if(i)return this.expand(this._boundable2,this._boundable1,t,e),null;throw new m("neither boundable is composite")},tn.prototype.isLeaves=function(){return!(tn.isComposite(this._boundable1)||tn.isComposite(this._boundable2))},tn.prototype.compareTo=function(t){var e=t;return this._distance<e._distance?-1:this._distance>e._distance?1:0},tn.prototype.expand=function(t,e,n,i){for(var r=t.getChildBoundables().iterator();r.hasNext();){var o=r.next(),s=new tn(o,e,this._itemDistance);s.getDistance()<i&&n.add(s)}},tn.prototype.getBoundable=function(t){return 0===t?this._boundable1:this._boundable2},tn.prototype.getDistance=function(){return this._distance},tn.prototype.distance=function(){return this.isLeaves()?this._itemDistance.distance(this._boundable1,this._boundable2):this._boundable1.getBounds().distance(this._boundable2.getBounds())},tn.prototype.interfaces_=function(){return[E]},tn.prototype.getClass=function(){return tn},tn.area=function(t){return t.getBounds().getArea()},tn.isComposite=function(t){return t instanceof Qe};var en=function t(){if(this._root=null,this._built=!1,this._itemBoundables=new Nt,this._nodeCapacity=null,0===arguments.length){var e=t.DEFAULT_NODE_CAPACITY;this._nodeCapacity=e}else if(1===arguments.length){var n=arguments[0];et.isTrue(n>1,"Node capacity must be greater than 1"),this._nodeCapacity=n}},nn={IntersectsOp:{configurable:!0},serialVersionUID:{configurable:!0},DEFAULT_NODE_CAPACITY:{configurable:!0}};en.prototype.getNodeCapacity=function(){return this._nodeCapacity},en.prototype.lastNode=function(t){return t.get(t.size()-1)},en.prototype.size=function(){if(0===arguments.length)return this.isEmpty()?0:(this.build(),this.size(this._root));if(1===arguments.length){for(var t=0,e=arguments[0].getChildBoundables().iterator();e.hasNext();){var n=e.next();n instanceof Qe?t+=this.size(n):n instanceof He&&(t+=1)}return t}},en.prototype.removeItem=function(t,e){for(var n=null,i=t.getChildBoundables().iterator();i.hasNext();){var r=i.next();r instanceof He&&r.getItem()===e&&(n=r)}return null!==n&&(t.getChildBoundables().remove(n),!0)},en.prototype.itemsTree=function(){if(0===arguments.length){this.build();var t=this.itemsTree(this._root);return null===t?new Nt:t}if(1===arguments.length){for(var e=arguments[0],n=new Nt,i=e.getChildBoundables().iterator();i.hasNext();){var r=i.next();if(r instanceof Qe){var o=this.itemsTree(r);null!==o&&n.add(o)}else r instanceof He?n.add(r.getItem()):et.shouldNeverReachHere()}return n.size()<=0?null:n}},en.prototype.insert=function(t,e){et.isTrue(!this._built,"Cannot insert items into an STR packed R-tree after it has been built."),this._itemBoundables.add(new He(t,e))},en.prototype.boundablesAtLevel=function(){if(1===arguments.length){var t=arguments[0],e=new Nt;return this.boundablesAtLevel(t,this._root,e),e}if(3===arguments.length){var n=arguments[0],i=arguments[1],r=arguments[2];if(et.isTrue(n>-2),i.getLevel()===n)return r.add(i),null;for(var o=i.getChildBoundables().iterator();o.hasNext();){var s=o.next();s instanceof Qe?this.boundablesAtLevel(n,s,r):(et.isTrue(s instanceof He),-1===n&&r.add(s))}return null}},en.prototype.query=function(){if(1===arguments.length){var t=arguments[0];this.build();var e=new Nt;return this.isEmpty()?e:(this.getIntersectsOp().intersects(this._root.getBounds(),t)&&this.query(t,this._root,e),e)}if(2===arguments.length){var n=arguments[0],i=arguments[1];if(this.build(),this.isEmpty())return null;this.getIntersectsOp().intersects(this._root.getBounds(),n)&&this.query(n,this._root,i)}else if(3===arguments.length)if(T(arguments[2],Ke)&&arguments[0]instanceof Object&&arguments[1]instanceof Qe)for(var r=arguments[0],o=arguments[1],s=arguments[2],a=o.getChildBoundables(),u=0;u<a.size();u++){var l=a.get(u);this.getIntersectsOp().intersects(l.getBounds(),r)&&(l instanceof Qe?this.query(r,l,s):l instanceof He?s.visitItem(l.getItem()):et.shouldNeverReachHere())}else if(T(arguments[2],xt)&&arguments[0]instanceof Object&&arguments[1]instanceof Qe)for(var c=arguments[0],p=arguments[1],h=arguments[2],f=p.getChildBoundables(),g=0;g<f.size();g++){var d=f.get(g);this.getIntersectsOp().intersects(d.getBounds(),c)&&(d instanceof Qe?this.query(c,d,h):d instanceof He?h.add(d.getItem()):et.shouldNeverReachHere())}},en.prototype.build=function(){if(this._built)return null;this._root=this._itemBoundables.isEmpty()?this.createNode(0):this.createHigherLevels(this._itemBoundables,-1),this._itemBoundables=null,this._built=!0},en.prototype.getRoot=function(){return this.build(),this._root},en.prototype.remove=function(){if(2===arguments.length){var t=arguments[0],e=arguments[1];return this.build(),!!this.getIntersectsOp().intersects(this._root.getBounds(),t)&&this.remove(t,this._root,e)}if(3===arguments.length){var n=arguments[0],i=arguments[1],r=arguments[2],o=this.removeItem(i,r);if(o)return!0;for(var s=null,a=i.getChildBoundables().iterator();a.hasNext();){var u=a.next();if(this.getIntersectsOp().intersects(u.getBounds(),n)&&(u instanceof Qe&&(o=this.remove(n,u,r)))){s=u;break}}return null!==s&&s.getChildBoundables().isEmpty()&&i.getChildBoundables().remove(s),o}},en.prototype.createHigherLevels=function(t,e){et.isTrue(!t.isEmpty());var n=this.createParentBoundables(t,e+1);return 1===n.size()?n.get(0):this.createHigherLevels(n,e+1)},en.prototype.depth=function(){if(0===arguments.length)return this.isEmpty()?0:(this.build(),this.depth(this._root));if(1===arguments.length){for(var t=0,e=arguments[0].getChildBoundables().iterator();e.hasNext();){var n=e.next();if(n instanceof Qe){var i=this.depth(n);i>t&&(t=i)}}return t+1}},en.prototype.createParentBoundables=function(t,e){et.isTrue(!t.isEmpty());var n=new Nt;n.add(this.createNode(e));var i=new Nt(t);$e.sort(i,this.getComparator());for(var r=i.iterator();r.hasNext();){var o=r.next();this.lastNode(n).getChildBoundables().size()===this.getNodeCapacity()&&n.add(this.createNode(e)),this.lastNode(n).addChildBoundable(o)}return n},en.prototype.isEmpty=function(){return this._built?this._root.isEmpty():this._itemBoundables.isEmpty()},en.prototype.interfaces_=function(){return[e]},en.prototype.getClass=function(){return en},en.compareDoubles=function(t,e){return t>e?1:t<e?-1:0},nn.IntersectsOp.get=function(){return rn},nn.serialVersionUID.get=function(){return-0x35ef64c82d4c5400},nn.DEFAULT_NODE_CAPACITY.get=function(){return 10},Object.defineProperties(en,nn);var rn=function(){},on=function(){};on.prototype.distance=function(t,e){},on.prototype.interfaces_=function(){return[]},on.prototype.getClass=function(){return on};var sn=function(t){function n(e){e=e||n.DEFAULT_NODE_CAPACITY,t.call(this,e)}t&&(n.__proto__=t),(n.prototype=Object.create(t&&t.prototype)).constructor=n;var i={STRtreeNode:{configurable:!0},serialVersionUID:{configurable:!0},xComparator:{configurable:!0},yComparator:{configurable:!0},intersectsOp:{configurable:!0},DEFAULT_NODE_CAPACITY:{configurable:!0}};return n.prototype.createParentBoundablesFromVerticalSlices=function(t,e){et.isTrue(t.length>0);for(var n=new Nt,i=0;i<t.length;i++)n.addAll(this.createParentBoundablesFromVerticalSlice(t[i],e));return n},n.prototype.createNode=function(t){return new an(t)},n.prototype.size=function(){return 0===arguments.length?t.prototype.size.call(this):t.prototype.size.apply(this,arguments)},n.prototype.insert=function(){if(2!==arguments.length)return t.prototype.insert.apply(this,arguments);var e=arguments[0],n=arguments[1];if(e.isNull())return null;t.prototype.insert.call(this,e,n)},n.prototype.getIntersectsOp=function(){return n.intersectsOp},n.prototype.verticalSlices=function(t,e){for(var n=Math.trunc(Math.ceil(t.size()/e)),i=new Array(e).fill(null),r=t.iterator(),o=0;o<e;o++){i[o]=new Nt;for(var s=0;r.hasNext()&&s<n;){var a=r.next();i[o].add(a),s++}}return i},n.prototype.query=function(){if(1===arguments.length){var e=arguments[0];return t.prototype.query.call(this,e)}if(2===arguments.length){var n=arguments[0],i=arguments[1];t.prototype.query.call(this,n,i)}else if(3===arguments.length)if(T(arguments[2],Ke)&&arguments[0]instanceof Object&&arguments[1]instanceof Qe){var r=arguments[0],o=arguments[1],s=arguments[2];t.prototype.query.call(this,r,o,s)}else if(T(arguments[2],xt)&&arguments[0]instanceof Object&&arguments[1]instanceof Qe){var a=arguments[0],u=arguments[1],l=arguments[2];t.prototype.query.call(this,a,u,l)}},n.prototype.getComparator=function(){return n.yComparator},n.prototype.createParentBoundablesFromVerticalSlice=function(e,n){return t.prototype.createParentBoundables.call(this,e,n)},n.prototype.remove=function(){if(2===arguments.length){var e=arguments[0],n=arguments[1];return t.prototype.remove.call(this,e,n)}return t.prototype.remove.apply(this,arguments)},n.prototype.depth=function(){return 0===arguments.length?t.prototype.depth.call(this):t.prototype.depth.apply(this,arguments)},n.prototype.createParentBoundables=function(t,e){et.isTrue(!t.isEmpty());var i=Math.trunc(Math.ceil(t.size()/this.getNodeCapacity())),r=new Nt(t);$e.sort(r,n.xComparator);var o=this.verticalSlices(r,Math.trunc(Math.ceil(Math.sqrt(i))));return this.createParentBoundablesFromVerticalSlices(o,e)},n.prototype.nearestNeighbour=function(){if(1===arguments.length){if(T(arguments[0],on)){var t=arguments[0],e=new tn(this.getRoot(),this.getRoot(),t);return this.nearestNeighbour(e)}if(arguments[0]instanceof tn){var i=arguments[0];return this.nearestNeighbour(i,v.POSITIVE_INFINITY)}}else if(2===arguments.length){if(arguments[0]instanceof n&&T(arguments[1],on)){var r=arguments[0],o=arguments[1],s=new tn(this.getRoot(),r.getRoot(),o);return this.nearestNeighbour(s)}if(arguments[0]instanceof tn&&"number"==typeof arguments[1]){var a=arguments[0],u=arguments[1],l=null,c=new We;for(c.add(a);!c.isEmpty()&&u>0;){var p=c.poll(),h=p.getDistance();if(h>=u)break;p.isLeaves()?(u=h,l=p):p.expandToQueue(c,u)}return[l.getBoundable(0).getItem(),l.getBoundable(1).getItem()]}}else if(3===arguments.length){var f=arguments[0],g=arguments[1],d=arguments[2],y=new He(f,g),_=new tn(this.getRoot(),y,d);return this.nearestNeighbour(_)[0]}},n.prototype.interfaces_=function(){return[Je,e]},n.prototype.getClass=function(){return n},n.centreX=function(t){return n.avg(t.getMinX(),t.getMaxX())},n.avg=function(t,e){return(t+e)/2},n.centreY=function(t){return n.avg(t.getMinY(),t.getMaxY())},i.STRtreeNode.get=function(){return an},i.serialVersionUID.get=function(){return 0x39920f7d5f261e0},i.xComparator.get=function(){return{interfaces_:function(){return[N]},compare:function(e,i){return t.compareDoubles(n.centreX(e.getBounds()),n.centreX(i.getBounds()))}}},i.yComparator.get=function(){return{interfaces_:function(){return[N]},compare:function(e,i){return t.compareDoubles(n.centreY(e.getBounds()),n.centreY(i.getBounds()))}}},i.intersectsOp.get=function(){return{interfaces_:function(){return[t.IntersectsOp]},intersects:function(t,e){return t.intersects(e)}}},i.DEFAULT_NODE_CAPACITY.get=function(){return 10},Object.defineProperties(n,i),n}(en),an=function(t){function e(){var e=arguments[0];t.call(this,e)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.computeBounds=function(){for(var t=null,e=this.getChildBoundables().iterator();e.hasNext();){var n=e.next();null===t?t=new j(n.getBounds()):t.expandToInclude(n.getBounds())}return t},e.prototype.interfaces_=function(){return[]},e.prototype.getClass=function(){return e},e}(Qe),un=function(){};un.prototype.interfaces_=function(){return[]},un.prototype.getClass=function(){return un},un.relativeSign=function(t,e){return t<e?-1:t>e?1:0},un.compare=function(t,e,n){if(e.equals2D(n))return 0;var i=un.relativeSign(e.x,n.x),r=un.relativeSign(e.y,n.y);switch(t){case 0:return un.compareValue(i,r);case 1:return un.compareValue(r,i);case 2:return un.compareValue(r,-i);case 3:return un.compareValue(-i,r);case 4:return un.compareValue(-i,-r);case 5:return un.compareValue(-r,-i);case 6:return un.compareValue(-r,i);case 7:return un.compareValue(i,-r)}return et.shouldNeverReachHere("invalid octant value"),0},un.compareValue=function(t,e){return t<0?-1:t>0?1:e<0?-1:e>0?1:0};var ln=function(){this._segString=null,this.coord=null,this.segmentIndex=null,this._segmentOctant=null,this._isInterior=null;var t=arguments[0],e=arguments[1],n=arguments[2],i=arguments[3];this._segString=t,this.coord=new C(e),this.segmentIndex=n,this._segmentOctant=i,this._isInterior=!e.equals2D(t.getCoordinate(n))};ln.prototype.getCoordinate=function(){return this.coord},ln.prototype.print=function(t){t.print(this.coord),t.print(" seg # = "+this.segmentIndex)},ln.prototype.compareTo=function(t){var e=t;return this.segmentIndex<e.segmentIndex?-1:this.segmentIndex>e.segmentIndex?1:this.coord.equals2D(e.coord)?0:un.compare(this._segmentOctant,this.coord,e.coord)},ln.prototype.isEndPoint=function(t){return 0===this.segmentIndex&&!this._isInterior||this.segmentIndex===t},ln.prototype.isInterior=function(){return this._isInterior},ln.prototype.interfaces_=function(){return[E]},ln.prototype.getClass=function(){return ln};var cn=function(){this._nodeMap=new p,this._edge=null;var t=arguments[0];this._edge=t};cn.prototype.getSplitCoordinates=function(){var t=new St;this.addEndpoints();for(var e=this.iterator(),n=e.next();e.hasNext();){var i=e.next();this.addEdgeCoordinates(n,i,t),n=i}return t.toCoordinateArray()},cn.prototype.addCollapsedNodes=function(){var t=new Nt;this.findCollapsesFromInsertedNodes(t),this.findCollapsesFromExistingVertices(t);for(var e=t.iterator();e.hasNext();){var n=e.next().intValue();this.add(this._edge.getCoordinate(n),n)}},cn.prototype.print=function(t){t.println("Intersections:");for(var e=this.iterator();e.hasNext();){e.next().print(t)}},cn.prototype.findCollapsesFromExistingVertices=function(t){for(var e=0;e<this._edge.size()-2;e++){var n=this._edge.getCoordinate(e),i=this._edge.getCoordinate(e+2);n.equals2D(i)&&t.add(new M(e+1))}},cn.prototype.addEdgeCoordinates=function(t,e,n){var i=this._edge.getCoordinate(e.segmentIndex),r=e.isInterior()||!e.coord.equals2D(i);n.add(new C(t.coord),!1);for(var o=t.segmentIndex+1;o<=e.segmentIndex;o++)n.add(this._edge.getCoordinate(o));r&&n.add(new C(e.coord))},cn.prototype.iterator=function(){return this._nodeMap.values().iterator()},cn.prototype.addSplitEdges=function(t){this.addEndpoints(),this.addCollapsedNodes();for(var e=this.iterator(),n=e.next();e.hasNext();){var i=e.next(),r=this.createSplitEdge(n,i);t.add(r),n=i}},cn.prototype.findCollapseIndex=function(t,e,n){if(!t.coord.equals2D(e.coord))return!1;var i=e.segmentIndex-t.segmentIndex;return e.isInterior()||i--,1===i&&(n[0]=t.segmentIndex+1,!0)},cn.prototype.findCollapsesFromInsertedNodes=function(t){for(var e=new Array(1).fill(null),n=this.iterator(),i=n.next();n.hasNext();){var r=n.next();this.findCollapseIndex(i,r,e)&&t.add(new M(e[0])),i=r}},cn.prototype.getEdge=function(){return this._edge},cn.prototype.addEndpoints=function(){var t=this._edge.size()-1;this.add(this._edge.getCoordinate(0),0),this.add(this._edge.getCoordinate(t),t)},cn.prototype.createSplitEdge=function(t,e){var n=e.segmentIndex-t.segmentIndex+2,i=this._edge.getCoordinate(e.segmentIndex),r=e.isInterior()||!e.coord.equals2D(i);r||n--;var o=new Array(n).fill(null),s=0;o[s++]=new C(t.coord);for(var a=t.segmentIndex+1;a<=e.segmentIndex;a++)o[s++]=this._edge.getCoordinate(a);return r&&(o[s]=new C(e.coord)),new gn(o,this._edge.getData())},cn.prototype.add=function(t,e){var n=new ln(this._edge,t,e,this._edge.getSegmentOctant(e)),i=this._nodeMap.get(n);return null!==i?(et.isTrue(i.coord.equals2D(t),"Found equal nodes with different coordinates"),i):(this._nodeMap.put(n,n),n)},cn.prototype.checkSplitEdgesCorrectness=function(t){var e=this._edge.getCoordinates(),n=t.get(0).getCoordinate(0);if(!n.equals2D(e[0]))throw new $("bad split edge start point at "+n);var i=t.get(t.size()-1).getCoordinates(),r=i[i.length-1];if(!r.equals2D(e[e.length-1]))throw new $("bad split edge end point at "+r)},cn.prototype.interfaces_=function(){return[]},cn.prototype.getClass=function(){return cn};var pn=function(){};pn.prototype.interfaces_=function(){return[]},pn.prototype.getClass=function(){return pn},pn.octant=function(){if("number"==typeof arguments[0]&&"number"==typeof arguments[1]){var t=arguments[0],e=arguments[1];if(0===t&&0===e)throw new m("Cannot compute the octant for point ( "+t+", "+e+" )");var n=Math.abs(t),i=Math.abs(e);return t>=0?e>=0?n>=i?0:1:n>=i?7:6:e>=0?n>=i?3:2:n>=i?4:5}if(arguments[0]instanceof C&&arguments[1]instanceof C){var r=arguments[0],o=arguments[1],s=o.x-r.x,a=o.y-r.y;if(0===s&&0===a)throw new m("Cannot compute the octant for two identical points "+r);return pn.octant(s,a)}};var hn=function(){};hn.prototype.getCoordinates=function(){},hn.prototype.size=function(){},hn.prototype.getCoordinate=function(t){},hn.prototype.isClosed=function(){},hn.prototype.setData=function(t){},hn.prototype.getData=function(){},hn.prototype.interfaces_=function(){return[]},hn.prototype.getClass=function(){return hn};var fn=function(){};fn.prototype.addIntersection=function(t,e){},fn.prototype.interfaces_=function(){return[hn]},fn.prototype.getClass=function(){return fn};var gn=function(){this._nodeList=new cn(this),this._pts=null,this._data=null;var t=arguments[0],e=arguments[1];this._pts=t,this._data=e};gn.prototype.getCoordinates=function(){return this._pts},gn.prototype.size=function(){return this._pts.length},gn.prototype.getCoordinate=function(t){return this._pts[t]},gn.prototype.isClosed=function(){return this._pts[0].equals(this._pts[this._pts.length-1])},gn.prototype.getSegmentOctant=function(t){return t===this._pts.length-1?-1:this.safeOctant(this.getCoordinate(t),this.getCoordinate(t+1))},gn.prototype.setData=function(t){this._data=t},gn.prototype.safeOctant=function(t,e){return t.equals2D(e)?0:pn.octant(t,e)},gn.prototype.getData=function(){return this._data},gn.prototype.addIntersection=function(){if(2===arguments.length){var t=arguments[0],e=arguments[1];this.addIntersectionNode(t,e)}else if(4===arguments.length){var n=arguments[0],i=arguments[1],r=arguments[3],o=new C(n.getIntersection(r));this.addIntersection(o,i)}},gn.prototype.toString=function(){return Z.toLineString(new ue(this._pts))},gn.prototype.getNodeList=function(){return this._nodeList},gn.prototype.addIntersectionNode=function(t,e){var n=e,i=n+1;if(i<this._pts.length){var r=this._pts[i];t.equals2D(r)&&(n=i)}return this._nodeList.add(t,n)},gn.prototype.addIntersections=function(t,e,n){for(var i=0;i<t.getIntersectionNum();i++)this.addIntersection(t,e,n,i)},gn.prototype.interfaces_=function(){return[fn]},gn.prototype.getClass=function(){return gn},gn.getNodedSubstrings=function(){if(1===arguments.length){var t=arguments[0],e=new Nt;return gn.getNodedSubstrings(t,e),e}if(2===arguments.length)for(var n=arguments[0],i=arguments[1],r=n.iterator();r.hasNext();){r.next().getNodeList().addSplitEdges(i)}};var dn=function(){if(this.p0=null,this.p1=null,0===arguments.length)this.p0=new C,this.p1=new C;else if(1===arguments.length){var t=arguments[0];this.p0=new C(t.p0),this.p1=new C(t.p1)}else if(2===arguments.length)this.p0=arguments[0],this.p1=arguments[1];else if(4===arguments.length){var e=arguments[0],n=arguments[1],i=arguments[2],r=arguments[3];this.p0=new C(e,n),this.p1=new C(i,r)}},yn={serialVersionUID:{configurable:!0}};dn.prototype.minX=function(){return Math.min(this.p0.x,this.p1.x)},dn.prototype.orientationIndex=function(){if(arguments[0]instanceof dn){var t=arguments[0],e=at.orientationIndex(this.p0,this.p1,t.p0),n=at.orientationIndex(this.p0,this.p1,t.p1);return e>=0&&n>=0?Math.max(e,n):e<=0&&n<=0?Math.max(e,n):0}if(arguments[0]instanceof C){var i=arguments[0];return at.orientationIndex(this.p0,this.p1,i)}},dn.prototype.toGeometry=function(t){return t.createLineString([this.p0,this.p1])},dn.prototype.isVertical=function(){return this.p0.x===this.p1.x},dn.prototype.equals=function(t){if(!(t instanceof dn))return!1;var e=t;return this.p0.equals(e.p0)&&this.p1.equals(e.p1)},dn.prototype.intersection=function(t){var e=new rt;return e.computeIntersection(this.p0,this.p1,t.p0,t.p1),e.hasIntersection()?e.getIntersection(0):null},dn.prototype.project=function(){if(arguments[0]instanceof C){var t=arguments[0];if(t.equals(this.p0)||t.equals(this.p1))return new C(t);var e=this.projectionFactor(t),n=new C;return n.x=this.p0.x+e*(this.p1.x-this.p0.x),n.y=this.p0.y+e*(this.p1.y-this.p0.y),n}if(arguments[0]instanceof dn){var i=arguments[0],r=this.projectionFactor(i.p0),o=this.projectionFactor(i.p1);if(r>=1&&o>=1)return null;if(r<=0&&o<=0)return null;var s=this.project(i.p0);r<0&&(s=this.p0),r>1&&(s=this.p1);var a=this.project(i.p1);return o<0&&(a=this.p0),o>1&&(a=this.p1),new dn(s,a)}},dn.prototype.normalize=function(){this.p1.compareTo(this.p0)<0&&this.reverse()},dn.prototype.angle=function(){return Math.atan2(this.p1.y-this.p0.y,this.p1.x-this.p0.x)},dn.prototype.getCoordinate=function(t){return 0===t?this.p0:this.p1},dn.prototype.distancePerpendicular=function(t){return at.distancePointLinePerpendicular(t,this.p0,this.p1)},dn.prototype.minY=function(){return Math.min(this.p0.y,this.p1.y)},dn.prototype.midPoint=function(){return dn.midPoint(this.p0,this.p1)},dn.prototype.projectionFactor=function(t){if(t.equals(this.p0))return 0;if(t.equals(this.p1))return 1;var e=this.p1.x-this.p0.x,n=this.p1.y-this.p0.y,i=e*e+n*n;if(i<=0)return v.NaN;return((t.x-this.p0.x)*e+(t.y-this.p0.y)*n)/i},dn.prototype.closestPoints=function(t){var e=this.intersection(t);if(null!==e)return[e,e];var n=new Array(2).fill(null),i=v.MAX_VALUE,r=null,o=this.closestPoint(t.p0);i=o.distance(t.p0),n[0]=o,n[1]=t.p0;var s=this.closestPoint(t.p1);(r=s.distance(t.p1))<i&&(i=r,n[0]=s,n[1]=t.p1);var a=t.closestPoint(this.p0);(r=a.distance(this.p0))<i&&(i=r,n[0]=this.p0,n[1]=a);var u=t.closestPoint(this.p1);return(r=u.distance(this.p1))<i&&(i=r,n[0]=this.p1,n[1]=u),n},dn.prototype.closestPoint=function(t){var e=this.projectionFactor(t);if(e>0&&e<1)return this.project(t);return this.p0.distance(t)<this.p1.distance(t)?this.p0:this.p1},dn.prototype.maxX=function(){return Math.max(this.p0.x,this.p1.x)},dn.prototype.getLength=function(){return this.p0.distance(this.p1)},dn.prototype.compareTo=function(t){var e=t,n=this.p0.compareTo(e.p0);return 0!==n?n:this.p1.compareTo(e.p1)},dn.prototype.reverse=function(){var t=this.p0;this.p0=this.p1,this.p1=t},dn.prototype.equalsTopo=function(t){return this.p0.equals(t.p0)&&(this.p1.equals(t.p1)||this.p0.equals(t.p1))&&this.p1.equals(t.p0)},dn.prototype.lineIntersection=function(t){try{return k.intersection(this.p0,this.p1,t.p0,t.p1)}catch(t){if(!(t instanceof X))throw t}return null},dn.prototype.maxY=function(){return Math.max(this.p0.y,this.p1.y)},dn.prototype.pointAlongOffset=function(t,e){var n=this.p0.x+t*(this.p1.x-this.p0.x),i=this.p0.y+t*(this.p1.y-this.p0.y),r=this.p1.x-this.p0.x,o=this.p1.y-this.p0.y,s=Math.sqrt(r*r+o*o),a=0,u=0;if(0!==e){if(s<=0)throw new Error("Cannot compute offset from zero-length line segment");a=e*r/s,u=e*o/s}return new C(n-u,i+a)},dn.prototype.setCoordinates=function(){if(1===arguments.length){var t=arguments[0];this.setCoordinates(t.p0,t.p1)}else if(2===arguments.length){var e=arguments[0],n=arguments[1];this.p0.x=e.x,this.p0.y=e.y,this.p1.x=n.x,this.p1.y=n.y}},dn.prototype.segmentFraction=function(t){var e=this.projectionFactor(t);return e<0?e=0:(e>1||v.isNaN(e))&&(e=1),e},dn.prototype.toString=function(){return"LINESTRING( "+this.p0.x+" "+this.p0.y+", "+this.p1.x+" "+this.p1.y+")"},dn.prototype.isHorizontal=function(){return this.p0.y===this.p1.y},dn.prototype.distance=function(){if(arguments[0]instanceof dn){var t=arguments[0];return at.distanceLineLine(this.p0,this.p1,t.p0,t.p1)}if(arguments[0]instanceof C){var e=arguments[0];return at.distancePointLine(e,this.p0,this.p1)}},dn.prototype.pointAlong=function(t){var e=new C;return e.x=this.p0.x+t*(this.p1.x-this.p0.x),e.y=this.p0.y+t*(this.p1.y-this.p0.y),e},dn.prototype.hashCode=function(){var t=v.doubleToLongBits(this.p0.x);t^=31*v.doubleToLongBits(this.p0.y);var e=Math.trunc(t)^Math.trunc(t>>32),n=v.doubleToLongBits(this.p1.x);n^=31*v.doubleToLongBits(this.p1.y);return e^(Math.trunc(n)^Math.trunc(n>>32))},dn.prototype.interfaces_=function(){return[E,e]},dn.prototype.getClass=function(){return dn},dn.midPoint=function(t,e){return new C((t.x+e.x)/2,(t.y+e.y)/2)},yn.serialVersionUID.get=function(){return 0x2d2172135f411c00},Object.defineProperties(dn,yn);var _n=function(){this.tempEnv1=new j,this.tempEnv2=new j,this._overlapSeg1=new dn,this._overlapSeg2=new dn};_n.prototype.overlap=function(){if(2===arguments.length);else if(4===arguments.length){var t=arguments[0],e=arguments[1],n=arguments[2],i=arguments[3];t.getLineSegment(e,this._overlapSeg1),n.getLineSegment(i,this._overlapSeg2),this.overlap(this._overlapSeg1,this._overlapSeg2)}},_n.prototype.interfaces_=function(){return[]},_n.prototype.getClass=function(){return _n};var mn=function(){this._pts=null,this._start=null,this._end=null,this._env=null,this._context=null,this._id=null;var t=arguments[0],e=arguments[1],n=arguments[2],i=arguments[3];this._pts=t,this._start=e,this._end=n,this._context=i};mn.prototype.getLineSegment=function(t,e){e.p0=this._pts[t],e.p1=this._pts[t+1]},mn.prototype.computeSelect=function(t,e,n,i){var r=this._pts[e],o=this._pts[n];if(i.tempEnv1.init(r,o),n-e==1)return i.select(this,e),null;if(!t.intersects(i.tempEnv1))return null;var s=Math.trunc((e+n)/2);e<s&&this.computeSelect(t,e,s,i),s<n&&this.computeSelect(t,s,n,i)},mn.prototype.getCoordinates=function(){for(var t=new Array(this._end-this._start+1).fill(null),e=0,n=this._start;n<=this._end;n++)t[e++]=this._pts[n];return t},mn.prototype.computeOverlaps=function(t,e){this.computeOverlapsInternal(this._start,this._end,t,t._start,t._end,e)},mn.prototype.setId=function(t){this._id=t},mn.prototype.select=function(t,e){this.computeSelect(t,this._start,this._end,e)},mn.prototype.getEnvelope=function(){if(null===this._env){var t=this._pts[this._start],e=this._pts[this._end];this._env=new j(t,e)}return this._env},mn.prototype.getEndIndex=function(){return this._end},mn.prototype.getStartIndex=function(){return this._start},mn.prototype.getContext=function(){return this._context},mn.prototype.getId=function(){return this._id},mn.prototype.computeOverlapsInternal=function(t,e,n,i,r,o){var s=this._pts[t],a=this._pts[e],u=n._pts[i],l=n._pts[r];if(e-t==1&&r-i==1)return o.overlap(this,t,n,i),null;if(o.tempEnv1.init(s,a),o.tempEnv2.init(u,l),!o.tempEnv1.intersects(o.tempEnv2))return null;var c=Math.trunc((t+e)/2),p=Math.trunc((i+r)/2);t<c&&(i<p&&this.computeOverlapsInternal(t,c,n,i,p,o),p<r&&this.computeOverlapsInternal(t,c,n,p,r,o)),c<e&&(i<p&&this.computeOverlapsInternal(c,e,n,i,p,o),p<r&&this.computeOverlapsInternal(c,e,n,p,r,o))},mn.prototype.interfaces_=function(){return[]},mn.prototype.getClass=function(){return mn};var vn=function(){};vn.prototype.interfaces_=function(){return[]},vn.prototype.getClass=function(){return vn},vn.getChainStartIndices=function(t){var e=0,n=new Nt;n.add(new M(e));do{var i=vn.findChainEnd(t,e);n.add(new M(i)),e=i}while(e<t.length-1);return vn.toIntArray(n)},vn.findChainEnd=function(t,e){for(var n=e;n<t.length-1&&t[n].equals2D(t[n+1]);)n++;if(n>=t.length-1)return t.length-1;for(var i=Be.quadrant(t[n],t[n+1]),r=e+1;r<t.length;){if(!t[r-1].equals2D(t[r])){if(Be.quadrant(t[r-1],t[r])!==i)break}r++}return r-1},vn.getChains=function(){if(1===arguments.length){var t=arguments[0];return vn.getChains(t,null)}if(2===arguments.length){for(var e=arguments[0],n=arguments[1],i=new Nt,r=vn.getChainStartIndices(e),o=0;o<r.length-1;o++){var s=new mn(e,r[o],r[o+1],n);i.add(s)}return i}},vn.toIntArray=function(t){for(var e=new Array(t.size()).fill(null),n=0;n<e.length;n++)e[n]=t.get(n).intValue();return e};var In=function(){};In.prototype.computeNodes=function(t){},In.prototype.getNodedSubstrings=function(){},In.prototype.interfaces_=function(){return[]},In.prototype.getClass=function(){return In};var En=function(){if(this._segInt=null,0===arguments.length);else if(1===arguments.length){var t=arguments[0];this.setSegmentIntersector(t)}};En.prototype.setSegmentIntersector=function(t){this._segInt=t},En.prototype.interfaces_=function(){return[In]},En.prototype.getClass=function(){return En};var xn=function(t){function e(e){e?t.call(this,e):t.call(this),this._monoChains=new Nt,this._index=new sn,this._idCounter=0,this._nodedSegStrings=null,this._nOverlaps=0}t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e;var n={SegmentOverlapAction:{configurable:!0}};return e.prototype.getMonotoneChains=function(){return this._monoChains},e.prototype.getNodedSubstrings=function(){return gn.getNodedSubstrings(this._nodedSegStrings)},e.prototype.getIndex=function(){return this._index},e.prototype.add=function(t){for(var e=vn.getChains(t.getCoordinates(),t).iterator();e.hasNext();){var n=e.next();n.setId(this._idCounter++),this._index.insert(n.getEnvelope(),n),this._monoChains.add(n)}},e.prototype.computeNodes=function(t){this._nodedSegStrings=t;for(var e=t.iterator();e.hasNext();)this.add(e.next());this.intersectChains()},e.prototype.intersectChains=function(){for(var t=new Nn(this._segInt),e=this._monoChains.iterator();e.hasNext();)for(var n=e.next(),i=this._index.query(n.getEnvelope()).iterator();i.hasNext();){var r=i.next();if(r.getId()>n.getId()&&(n.computeOverlaps(r,t),this._nOverlaps++),this._segInt.isDone())return null}},e.prototype.interfaces_=function(){return[]},e.prototype.getClass=function(){return e},n.SegmentOverlapAction.get=function(){return Nn},Object.defineProperties(e,n),e}(En),Nn=function(t){function e(){t.call(this),this._si=null;var e=arguments[0];this._si=e}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.overlap=function(){if(4!==arguments.length)return t.prototype.overlap.apply(this,arguments);var e=arguments[0],n=arguments[1],i=arguments[2],r=arguments[3],o=e.getContext(),s=i.getContext();this._si.processIntersections(o,n,s,r)},e.prototype.interfaces_=function(){return[]},e.prototype.getClass=function(){return e},e}(_n),Cn=function t(){if(this._quadrantSegments=t.DEFAULT_QUADRANT_SEGMENTS,this._endCapStyle=t.CAP_ROUND,this._joinStyle=t.JOIN_ROUND,this._mitreLimit=t.DEFAULT_MITRE_LIMIT,this._isSingleSided=!1,this._simplifyFactor=t.DEFAULT_SIMPLIFY_FACTOR,0===arguments.length);else if(1===arguments.length){var e=arguments[0];this.setQuadrantSegments(e)}else if(2===arguments.length){var n=arguments[0],i=arguments[1];this.setQuadrantSegments(n),this.setEndCapStyle(i)}else if(4===arguments.length){var r=arguments[0],o=arguments[1],s=arguments[2],a=arguments[3];this.setQuadrantSegments(r),this.setEndCapStyle(o),this.setJoinStyle(s),this.setMitreLimit(a)}},Sn={CAP_ROUND:{configurable:!0},CAP_FLAT:{configurable:!0},CAP_SQUARE:{configurable:!0},JOIN_ROUND:{configurable:!0},JOIN_MITRE:{configurable:!0},JOIN_BEVEL:{configurable:!0},DEFAULT_QUADRANT_SEGMENTS:{configurable:!0},DEFAULT_MITRE_LIMIT:{configurable:!0},DEFAULT_SIMPLIFY_FACTOR:{configurable:!0}};Cn.prototype.getEndCapStyle=function(){return this._endCapStyle},Cn.prototype.isSingleSided=function(){return this._isSingleSided},Cn.prototype.setQuadrantSegments=function(t){this._quadrantSegments=t,0===this._quadrantSegments&&(this._joinStyle=Cn.JOIN_BEVEL),this._quadrantSegments<0&&(this._joinStyle=Cn.JOIN_MITRE,this._mitreLimit=Math.abs(this._quadrantSegments)),t<=0&&(this._quadrantSegments=1),this._joinStyle!==Cn.JOIN_ROUND&&(this._quadrantSegments=Cn.DEFAULT_QUADRANT_SEGMENTS)},Cn.prototype.getJoinStyle=function(){return this._joinStyle},Cn.prototype.setJoinStyle=function(t){this._joinStyle=t},Cn.prototype.setSimplifyFactor=function(t){this._simplifyFactor=t<0?0:t},Cn.prototype.getSimplifyFactor=function(){return this._simplifyFactor},Cn.prototype.getQuadrantSegments=function(){return this._quadrantSegments},Cn.prototype.setEndCapStyle=function(t){this._endCapStyle=t},Cn.prototype.getMitreLimit=function(){return this._mitreLimit},Cn.prototype.setMitreLimit=function(t){this._mitreLimit=t},Cn.prototype.setSingleSided=function(t){this._isSingleSided=t},Cn.prototype.interfaces_=function(){return[]},Cn.prototype.getClass=function(){return Cn},Cn.bufferDistanceError=function(t){var e=Math.PI/2/t;return 1-Math.cos(e/2)},Sn.CAP_ROUND.get=function(){return 1},Sn.CAP_FLAT.get=function(){return 2},Sn.CAP_SQUARE.get=function(){return 3},Sn.JOIN_ROUND.get=function(){return 1},Sn.JOIN_MITRE.get=function(){return 2},Sn.JOIN_BEVEL.get=function(){return 3},Sn.DEFAULT_QUADRANT_SEGMENTS.get=function(){return 8},Sn.DEFAULT_MITRE_LIMIT.get=function(){return 5},Sn.DEFAULT_SIMPLIFY_FACTOR.get=function(){return.01},Object.defineProperties(Cn,Sn);var Ln=function(t){this._distanceTol=null,this._isDeleted=null,this._angleOrientation=at.COUNTERCLOCKWISE,this._inputLine=t||null},bn={INIT:{configurable:!0},DELETE:{configurable:!0},KEEP:{configurable:!0},NUM_PTS_TO_CHECK:{configurable:!0}};Ln.prototype.isDeletable=function(t,e,n,i){var r=this._inputLine[t],o=this._inputLine[e],s=this._inputLine[n];return!!this.isConcave(r,o,s)&&(!!this.isShallow(r,o,s,i)&&this.isShallowSampled(r,o,t,n,i))},Ln.prototype.deleteShallowConcavities=function(){for(var t=1,e=this.findNextNonDeletedIndex(t),n=this.findNextNonDeletedIndex(e),i=!1;n<this._inputLine.length;){var r=!1;this.isDeletable(t,e,n,this._distanceTol)&&(this._isDeleted[e]=Ln.DELETE,r=!0,i=!0),t=r?n:e,e=this.findNextNonDeletedIndex(t),n=this.findNextNonDeletedIndex(e)}return i},Ln.prototype.isShallowConcavity=function(t,e,n,i){if(!(at.computeOrientation(t,e,n)===this._angleOrientation))return!1;return at.distancePointLine(e,t,n)<i},Ln.prototype.isShallowSampled=function(t,e,n,i,r){var o=Math.trunc((i-n)/Ln.NUM_PTS_TO_CHECK);o<=0&&(o=1);for(var s=n;s<i;s+=o)if(!this.isShallow(t,e,this._inputLine[s],r))return!1;return!0},Ln.prototype.isConcave=function(t,e,n){var i=at.computeOrientation(t,e,n)===this._angleOrientation;return i},Ln.prototype.simplify=function(t){this._distanceTol=Math.abs(t),t<0&&(this._angleOrientation=at.CLOCKWISE),this._isDeleted=new Array(this._inputLine.length).fill(null);var e=!1;do{e=this.deleteShallowConcavities()}while(e);return this.collapseLine()},Ln.prototype.findNextNonDeletedIndex=function(t){for(var e=t+1;e<this._inputLine.length&&this._isDeleted[e]===Ln.DELETE;)e++;return e},Ln.prototype.isShallow=function(t,e,n,i){return at.distancePointLine(e,t,n)<i},Ln.prototype.collapseLine=function(){for(var t=new St,e=0;e<this._inputLine.length;e++)this._isDeleted[e]!==Ln.DELETE&&t.add(this._inputLine[e]);return t.toCoordinateArray()},Ln.prototype.interfaces_=function(){return[]},Ln.prototype.getClass=function(){return Ln},Ln.simplify=function(t,e){return new Ln(t).simplify(e)},bn.INIT.get=function(){return 0},bn.DELETE.get=function(){return 1},bn.KEEP.get=function(){return 1},bn.NUM_PTS_TO_CHECK.get=function(){return 10},Object.defineProperties(Ln,bn);var wn=function(){this._ptList=null,this._precisionModel=null,this._minimimVertexDistance=0,this._ptList=new Nt},On={COORDINATE_ARRAY_TYPE:{configurable:!0}};wn.prototype.getCoordinates=function(){return this._ptList.toArray(wn.COORDINATE_ARRAY_TYPE)},wn.prototype.setPrecisionModel=function(t){this._precisionModel=t},wn.prototype.addPt=function(t){var e=new C(t);if(this._precisionModel.makePrecise(e),this.isRedundant(e))return null;this._ptList.add(e)},wn.prototype.revere=function(){},wn.prototype.addPts=function(t,e){if(e)for(var n=0;n<t.length;n++)this.addPt(t[n]);else for(var i=t.length-1;i>=0;i--)this.addPt(t[i])},wn.prototype.isRedundant=function(t){if(this._ptList.size()<1)return!1;var e=this._ptList.get(this._ptList.size()-1);return t.distance(e)<this._minimimVertexDistance},wn.prototype.toString=function(){return(new _e).createLineString(this.getCoordinates()).toString()},wn.prototype.closeRing=function(){if(this._ptList.size()<1)return null;var t=new C(this._ptList.get(0)),e=this._ptList.get(this._ptList.size()-1);if(t.equals(e))return null;this._ptList.add(t)},wn.prototype.setMinimumVertexDistance=function(t){this._minimimVertexDistance=t},wn.prototype.interfaces_=function(){return[]},wn.prototype.getClass=function(){return wn},On.COORDINATE_ARRAY_TYPE.get=function(){return new Array(0).fill(null)},Object.defineProperties(wn,On);var Tn=function(){},Rn={PI_TIMES_2:{configurable:!0},PI_OVER_2:{configurable:!0},PI_OVER_4:{configurable:!0},COUNTERCLOCKWISE:{configurable:!0},CLOCKWISE:{configurable:!0},NONE:{configurable:!0}};Tn.prototype.interfaces_=function(){return[]},Tn.prototype.getClass=function(){return Tn},Tn.toDegrees=function(t){return 180*t/Math.PI},Tn.normalize=function(t){for(;t>Math.PI;)t-=Tn.PI_TIMES_2;for(;t<=-Math.PI;)t+=Tn.PI_TIMES_2;return t},Tn.angle=function(){if(1===arguments.length){var t=arguments[0];return Math.atan2(t.y,t.x)}if(2===arguments.length){var e=arguments[0],n=arguments[1],i=n.x-e.x,r=n.y-e.y;return Math.atan2(r,i)}},Tn.isAcute=function(t,e,n){var i=t.x-e.x,r=t.y-e.y;return i*(n.x-e.x)+r*(n.y-e.y)>0},Tn.isObtuse=function(t,e,n){var i=t.x-e.x,r=t.y-e.y;return i*(n.x-e.x)+r*(n.y-e.y)<0},Tn.interiorAngle=function(t,e,n){var i=Tn.angle(e,t),r=Tn.angle(e,n);return Math.abs(r-i)},Tn.normalizePositive=function(t){if(t<0){for(;t<0;)t+=Tn.PI_TIMES_2;t>=Tn.PI_TIMES_2&&(t=0)}else{for(;t>=Tn.PI_TIMES_2;)t-=Tn.PI_TIMES_2;t<0&&(t=0)}return t},Tn.angleBetween=function(t,e,n){var i=Tn.angle(e,t),r=Tn.angle(e,n);return Tn.diff(i,r)},Tn.diff=function(t,e){var n=null;return(n=t<e?e-t:t-e)>Math.PI&&(n=2*Math.PI-n),n},Tn.toRadians=function(t){return t*Math.PI/180},Tn.getTurn=function(t,e){var n=Math.sin(e-t);return n>0?Tn.COUNTERCLOCKWISE:n<0?Tn.CLOCKWISE:Tn.NONE},Tn.angleBetweenOriented=function(t,e,n){var i=Tn.angle(e,t),r=Tn.angle(e,n)-i;return r<=-Math.PI?r+Tn.PI_TIMES_2:r>Math.PI?r-Tn.PI_TIMES_2:r},Rn.PI_TIMES_2.get=function(){return 2*Math.PI},Rn.PI_OVER_2.get=function(){return Math.PI/2},Rn.PI_OVER_4.get=function(){return Math.PI/4},Rn.COUNTERCLOCKWISE.get=function(){return at.COUNTERCLOCKWISE},Rn.CLOCKWISE.get=function(){return at.CLOCKWISE},Rn.NONE.get=function(){return at.COLLINEAR},Object.defineProperties(Tn,Rn);var Pn=function t(){this._maxCurveSegmentError=0,this._filletAngleQuantum=null,this._closingSegLengthFactor=1,this._segList=null,this._distance=0,this._precisionModel=null,this._bufParams=null,this._li=null,this._s0=null,this._s1=null,this._s2=null,this._seg0=new dn,this._seg1=new dn,this._offset0=new dn,this._offset1=new dn,this._side=0,this._hasNarrowConcaveAngle=!1;var e=arguments[0],n=arguments[1],i=arguments[2];this._precisionModel=e,this._bufParams=n,this._li=new rt,this._filletAngleQuantum=Math.PI/2/n.getQuadrantSegments(),n.getQuadrantSegments()>=8&&n.getJoinStyle()===Cn.JOIN_ROUND&&(this._closingSegLengthFactor=t.MAX_CLOSING_SEG_LEN_FACTOR),this.init(i)},Dn={OFFSET_SEGMENT_SEPARATION_FACTOR:{configurable:!0},INSIDE_TURN_VERTEX_SNAP_DISTANCE_FACTOR:{configurable:!0},CURVE_VERTEX_SNAP_DISTANCE_FACTOR:{configurable:!0},MAX_CLOSING_SEG_LEN_FACTOR:{configurable:!0}};Pn.prototype.addNextSegment=function(t,e){if(this._s0=this._s1,this._s1=this._s2,this._s2=t,this._seg0.setCoordinates(this._s0,this._s1),this.computeOffsetSegment(this._seg0,this._side,this._distance,this._offset0),this._seg1.setCoordinates(this._s1,this._s2),this.computeOffsetSegment(this._seg1,this._side,this._distance,this._offset1),this._s1.equals(this._s2))return null;var n=at.computeOrientation(this._s0,this._s1,this._s2),i=n===at.CLOCKWISE&&this._side===Se.LEFT||n===at.COUNTERCLOCKWISE&&this._side===Se.RIGHT;0===n?this.addCollinear(e):i?this.addOutsideTurn(n,e):this.addInsideTurn(n,e)},Pn.prototype.addLineEndCap=function(t,e){var n=new dn(t,e),i=new dn;this.computeOffsetSegment(n,Se.LEFT,this._distance,i);var r=new dn;this.computeOffsetSegment(n,Se.RIGHT,this._distance,r);var o=e.x-t.x,s=e.y-t.y,a=Math.atan2(s,o);switch(this._bufParams.getEndCapStyle()){case Cn.CAP_ROUND:this._segList.addPt(i.p1),this.addFilletArc(e,a+Math.PI/2,a-Math.PI/2,at.CLOCKWISE,this._distance),this._segList.addPt(r.p1);break;case Cn.CAP_FLAT:this._segList.addPt(i.p1),this._segList.addPt(r.p1);break;case Cn.CAP_SQUARE:var u=new C;u.x=Math.abs(this._distance)*Math.cos(a),u.y=Math.abs(this._distance)*Math.sin(a);var l=new C(i.p1.x+u.x,i.p1.y+u.y),c=new C(r.p1.x+u.x,r.p1.y+u.y);this._segList.addPt(l),this._segList.addPt(c)}},Pn.prototype.getCoordinates=function(){return this._segList.getCoordinates()},Pn.prototype.addMitreJoin=function(t,e,n,i){var r=!0,o=null;try{o=k.intersection(e.p0,e.p1,n.p0,n.p1);(i<=0?1:o.distance(t)/Math.abs(i))>this._bufParams.getMitreLimit()&&(r=!1)}catch(t){if(!(t instanceof X))throw t;o=new C(0,0),r=!1}r?this._segList.addPt(o):this.addLimitedMitreJoin(e,n,i,this._bufParams.getMitreLimit())},Pn.prototype.addFilletCorner=function(t,e,n,i,r){var o=e.x-t.x,s=e.y-t.y,a=Math.atan2(s,o),u=n.x-t.x,l=n.y-t.y,c=Math.atan2(l,u);i===at.CLOCKWISE?a<=c&&(a+=2*Math.PI):a>=c&&(a-=2*Math.PI),this._segList.addPt(e),this.addFilletArc(t,a,c,i,r),this._segList.addPt(n)},Pn.prototype.addOutsideTurn=function(t,e){if(this._offset0.p1.distance(this._offset1.p0)<this._distance*Pn.OFFSET_SEGMENT_SEPARATION_FACTOR)return this._segList.addPt(this._offset0.p1),null;this._bufParams.getJoinStyle()===Cn.JOIN_MITRE?this.addMitreJoin(this._s1,this._offset0,this._offset1,this._distance):this._bufParams.getJoinStyle()===Cn.JOIN_BEVEL?this.addBevelJoin(this._offset0,this._offset1):(e&&this._segList.addPt(this._offset0.p1),this.addFilletCorner(this._s1,this._offset0.p1,this._offset1.p0,t,this._distance),this._segList.addPt(this._offset1.p0))},Pn.prototype.createSquare=function(t){this._segList.addPt(new C(t.x+this._distance,t.y+this._distance)),this._segList.addPt(new C(t.x+this._distance,t.y-this._distance)),this._segList.addPt(new C(t.x-this._distance,t.y-this._distance)),this._segList.addPt(new C(t.x-this._distance,t.y+this._distance)),this._segList.closeRing()},Pn.prototype.addSegments=function(t,e){this._segList.addPts(t,e)},Pn.prototype.addFirstSegment=function(){this._segList.addPt(this._offset1.p0)},Pn.prototype.addLastSegment=function(){this._segList.addPt(this._offset1.p1)},Pn.prototype.initSideSegments=function(t,e,n){this._s1=t,this._s2=e,this._side=n,this._seg1.setCoordinates(t,e),this.computeOffsetSegment(this._seg1,n,this._distance,this._offset1)},Pn.prototype.addLimitedMitreJoin=function(t,e,n,i){var r=this._seg0.p1,o=Tn.angle(r,this._seg0.p0),s=Tn.angleBetweenOriented(this._seg0.p0,r,this._seg1.p1)/2,a=Tn.normalize(o+s),u=Tn.normalize(a+Math.PI),l=i*n,c=n-l*Math.abs(Math.sin(s)),p=r.x+l*Math.cos(u),h=r.y+l*Math.sin(u),f=new C(p,h),g=new dn(r,f),d=g.pointAlongOffset(1,c),y=g.pointAlongOffset(1,-c);this._side===Se.LEFT?(this._segList.addPt(d),this._segList.addPt(y)):(this._segList.addPt(y),this._segList.addPt(d))},Pn.prototype.computeOffsetSegment=function(t,e,n,i){var r=e===Se.LEFT?1:-1,o=t.p1.x-t.p0.x,s=t.p1.y-t.p0.y,a=Math.sqrt(o*o+s*s),u=r*n*o/a,l=r*n*s/a;i.p0.x=t.p0.x-l,i.p0.y=t.p0.y+u,i.p1.x=t.p1.x-l,i.p1.y=t.p1.y+u},Pn.prototype.addFilletArc=function(t,e,n,i,r){var o=i===at.CLOCKWISE?-1:1,s=Math.abs(e-n),a=Math.trunc(s/this._filletAngleQuantum+.5);if(a<1)return null;for(var u=s/a,l=0,c=new C;l<s;){var p=e+o*l;c.x=t.x+r*Math.cos(p),c.y=t.y+r*Math.sin(p),this._segList.addPt(c),l+=u}},Pn.prototype.addInsideTurn=function(t,e){if(this._li.computeIntersection(this._offset0.p0,this._offset0.p1,this._offset1.p0,this._offset1.p1),this._li.hasIntersection())this._segList.addPt(this._li.getIntersection(0));else if(this._hasNarrowConcaveAngle=!0,this._offset0.p1.distance(this._offset1.p0)<this._distance*Pn.INSIDE_TURN_VERTEX_SNAP_DISTANCE_FACTOR)this._segList.addPt(this._offset0.p1);else{if(this._segList.addPt(this._offset0.p1),this._closingSegLengthFactor>0){var n=new C((this._closingSegLengthFactor*this._offset0.p1.x+this._s1.x)/(this._closingSegLengthFactor+1),(this._closingSegLengthFactor*this._offset0.p1.y+this._s1.y)/(this._closingSegLengthFactor+1));this._segList.addPt(n);var i=new C((this._closingSegLengthFactor*this._offset1.p0.x+this._s1.x)/(this._closingSegLengthFactor+1),(this._closingSegLengthFactor*this._offset1.p0.y+this._s1.y)/(this._closingSegLengthFactor+1));this._segList.addPt(i)}else this._segList.addPt(this._s1);this._segList.addPt(this._offset1.p0)}},Pn.prototype.createCircle=function(t){var e=new C(t.x+this._distance,t.y);this._segList.addPt(e),this.addFilletArc(t,0,2*Math.PI,-1,this._distance),this._segList.closeRing()},Pn.prototype.addBevelJoin=function(t,e){this._segList.addPt(t.p1),this._segList.addPt(e.p0)},Pn.prototype.init=function(t){this._distance=t,this._maxCurveSegmentError=t*(1-Math.cos(this._filletAngleQuantum/2)),this._segList=new wn,this._segList.setPrecisionModel(this._precisionModel),this._segList.setMinimumVertexDistance(t*Pn.CURVE_VERTEX_SNAP_DISTANCE_FACTOR)},Pn.prototype.addCollinear=function(t){this._li.computeIntersection(this._s0,this._s1,this._s1,this._s2);this._li.getIntersectionNum()>=2&&(this._bufParams.getJoinStyle()===Cn.JOIN_BEVEL||this._bufParams.getJoinStyle()===Cn.JOIN_MITRE?(t&&this._segList.addPt(this._offset0.p1),this._segList.addPt(this._offset1.p0)):this.addFilletCorner(this._s1,this._offset0.p1,this._offset1.p0,at.CLOCKWISE,this._distance))},Pn.prototype.closeRing=function(){this._segList.closeRing()},Pn.prototype.hasNarrowConcaveAngle=function(){return this._hasNarrowConcaveAngle},Pn.prototype.interfaces_=function(){return[]},Pn.prototype.getClass=function(){return Pn},Dn.OFFSET_SEGMENT_SEPARATION_FACTOR.get=function(){return.001},Dn.INSIDE_TURN_VERTEX_SNAP_DISTANCE_FACTOR.get=function(){return.001},Dn.CURVE_VERTEX_SNAP_DISTANCE_FACTOR.get=function(){return 1e-6},Dn.MAX_CLOSING_SEG_LEN_FACTOR.get=function(){return 80},Object.defineProperties(Pn,Dn);var Mn=function(){this._distance=0,this._precisionModel=null,this._bufParams=null;var t=arguments[0],e=arguments[1];this._precisionModel=t,this._bufParams=e};Mn.prototype.getOffsetCurve=function(t,e){if(this._distance=e,0===e)return null;var n=e<0,i=Math.abs(e),r=this.getSegGen(i);t.length<=1?this.computePointCurve(t[0],r):this.computeOffsetCurve(t,n,r);var o=r.getCoordinates();return n&&Lt.reverse(o),o},Mn.prototype.computeSingleSidedBufferCurve=function(t,e,n){var i=this.simplifyTolerance(this._distance);if(e){n.addSegments(t,!0);var r=Ln.simplify(t,-i),o=r.length-1;n.initSideSegments(r[o],r[o-1],Se.LEFT),n.addFirstSegment();for(var s=o-2;s>=0;s--)n.addNextSegment(r[s],!0)}else{n.addSegments(t,!1);var a=Ln.simplify(t,i),u=a.length-1;n.initSideSegments(a[0],a[1],Se.LEFT),n.addFirstSegment();for(var l=2;l<=u;l++)n.addNextSegment(a[l],!0)}n.addLastSegment(),n.closeRing()},Mn.prototype.computeRingBufferCurve=function(t,e,n){var i=this.simplifyTolerance(this._distance);e===Se.RIGHT&&(i=-i);var r=Ln.simplify(t,i),o=r.length-1;n.initSideSegments(r[o-1],r[0],e);for(var s=1;s<=o;s++){var a=1!==s;n.addNextSegment(r[s],a)}n.closeRing()},Mn.prototype.computeLineBufferCurve=function(t,e){var n=this.simplifyTolerance(this._distance),i=Ln.simplify(t,n),r=i.length-1;e.initSideSegments(i[0],i[1],Se.LEFT);for(var o=2;o<=r;o++)e.addNextSegment(i[o],!0);e.addLastSegment(),e.addLineEndCap(i[r-1],i[r]);var s=Ln.simplify(t,-n),a=s.length-1;e.initSideSegments(s[a],s[a-1],Se.LEFT);for(var u=a-2;u>=0;u--)e.addNextSegment(s[u],!0);e.addLastSegment(),e.addLineEndCap(s[1],s[0]),e.closeRing()},Mn.prototype.computePointCurve=function(t,e){switch(this._bufParams.getEndCapStyle()){case Cn.CAP_ROUND:e.createCircle(t);break;case Cn.CAP_SQUARE:e.createSquare(t)}},Mn.prototype.getLineCurve=function(t,e){if(this._distance=e,e<0&&!this._bufParams.isSingleSided())return null;if(0===e)return null;var n=Math.abs(e),i=this.getSegGen(n);if(t.length<=1)this.computePointCurve(t[0],i);else if(this._bufParams.isSingleSided()){var r=e<0;this.computeSingleSidedBufferCurve(t,r,i)}else this.computeLineBufferCurve(t,i);return i.getCoordinates()},Mn.prototype.getBufferParameters=function(){return this._bufParams},Mn.prototype.simplifyTolerance=function(t){return t*this._bufParams.getSimplifyFactor()},Mn.prototype.getRingCurve=function(t,e,n){if(this._distance=n,t.length<=2)return this.getLineCurve(t,n);if(0===n)return Mn.copyCoordinates(t);var i=this.getSegGen(n);return this.computeRingBufferCurve(t,e,i),i.getCoordinates()},Mn.prototype.computeOffsetCurve=function(t,e,n){var i=this.simplifyTolerance(this._distance);if(e){var r=Ln.simplify(t,-i),o=r.length-1;n.initSideSegments(r[o],r[o-1],Se.LEFT),n.addFirstSegment();for(var s=o-2;s>=0;s--)n.addNextSegment(r[s],!0)}else{var a=Ln.simplify(t,i),u=a.length-1;n.initSideSegments(a[0],a[1],Se.LEFT),n.addFirstSegment();for(var l=2;l<=u;l++)n.addNextSegment(a[l],!0)}n.addLastSegment()},Mn.prototype.getSegGen=function(t){return new Pn(this._precisionModel,this._bufParams,t)},Mn.prototype.interfaces_=function(){return[]},Mn.prototype.getClass=function(){return Mn},Mn.copyCoordinates=function(t){for(var e=new Array(t.length).fill(null),n=0;n<e.length;n++)e[n]=new C(t[n]);return e};var An=function(){this._subgraphs=null,this._seg=new dn,this._cga=new at;var t=arguments[0];this._subgraphs=t},Fn={DepthSegment:{configurable:!0}};An.prototype.findStabbedSegments=function(){if(1===arguments.length){for(var t=arguments[0],e=new Nt,n=this._subgraphs.iterator();n.hasNext();){var i=n.next(),r=i.getEnvelope();t.y<r.getMinY()||t.y>r.getMaxY()||this.findStabbedSegments(t,i.getDirectedEdges(),e)}return e}if(3===arguments.length)if(T(arguments[2],xt)&&arguments[0]instanceof C&&arguments[1]instanceof ze)for(var o=arguments[0],s=arguments[1],a=arguments[2],u=s.getEdge().getCoordinates(),l=0;l<u.length-1;l++){this._seg.p0=u[l],this._seg.p1=u[l+1],this._seg.p0.y>this._seg.p1.y&&this._seg.reverse();if(!(Math.max(this._seg.p0.x,this._seg.p1.x)<o.x)&&!(this._seg.isHorizontal()||o.y<this._seg.p0.y||o.y>this._seg.p1.y||at.computeOrientation(this._seg.p0,this._seg.p1,o)===at.RIGHT)){var c=s.getDepth(Se.LEFT);this._seg.p0.equals(u[l])||(c=s.getDepth(Se.RIGHT));var p=new Gn(this._seg,c);a.add(p)}}else if(T(arguments[2],xt)&&arguments[0]instanceof C&&T(arguments[1],xt))for(var h=arguments[0],f=arguments[1],g=arguments[2],d=f.iterator();d.hasNext();){var y=d.next();y.isForward()&&this.findStabbedSegments(h,y,g)}},An.prototype.getDepth=function(t){var e=this.findStabbedSegments(t);if(0===e.size())return 0;return $e.min(e)._leftDepth},An.prototype.interfaces_=function(){return[]},An.prototype.getClass=function(){return An},Fn.DepthSegment.get=function(){return Gn},Object.defineProperties(An,Fn);var Gn=function(){this._upwardSeg=null,this._leftDepth=null;var t=arguments[0],e=arguments[1];this._upwardSeg=new dn(t),this._leftDepth=e};Gn.prototype.compareTo=function(t){var e=t;if(this._upwardSeg.minX()>=e._upwardSeg.maxX())return 1;if(this._upwardSeg.maxX()<=e._upwardSeg.minX())return-1;var n=this._upwardSeg.orientationIndex(e._upwardSeg);return 0!==n?n:0!=(n=-1*e._upwardSeg.orientationIndex(this._upwardSeg))?n:this._upwardSeg.compareTo(e._upwardSeg)},Gn.prototype.compareX=function(t,e){var n=t.p0.compareTo(e.p0);return 0!==n?n:t.p1.compareTo(e.p1)},Gn.prototype.toString=function(){return this._upwardSeg.toString()},Gn.prototype.interfaces_=function(){return[E]},Gn.prototype.getClass=function(){return Gn};var qn=function(t,e,n){this.p0=t||null,this.p1=e||null,this.p2=n||null};qn.prototype.area=function(){return qn.area(this.p0,this.p1,this.p2)},qn.prototype.signedArea=function(){return qn.signedArea(this.p0,this.p1,this.p2)},qn.prototype.interpolateZ=function(t){if(null===t)throw new m("Supplied point is null.");return qn.interpolateZ(t,this.p0,this.p1,this.p2)},qn.prototype.longestSideLength=function(){return qn.longestSideLength(this.p0,this.p1,this.p2)},qn.prototype.isAcute=function(){return qn.isAcute(this.p0,this.p1,this.p2)},qn.prototype.circumcentre=function(){return qn.circumcentre(this.p0,this.p1,this.p2)},qn.prototype.area3D=function(){return qn.area3D(this.p0,this.p1,this.p2)},qn.prototype.centroid=function(){return qn.centroid(this.p0,this.p1,this.p2)},qn.prototype.inCentre=function(){return qn.inCentre(this.p0,this.p1,this.p2)},qn.prototype.interfaces_=function(){return[]},qn.prototype.getClass=function(){return qn},qn.area=function(t,e,n){return Math.abs(((n.x-t.x)*(e.y-t.y)-(e.x-t.x)*(n.y-t.y))/2)},qn.signedArea=function(t,e,n){return((n.x-t.x)*(e.y-t.y)-(e.x-t.x)*(n.y-t.y))/2},qn.det=function(t,e,n,i){return t*i-e*n},qn.interpolateZ=function(t,e,n,i){var r=e.x,o=e.y,s=n.x-r,a=i.x-r,u=n.y-o,l=i.y-o,c=s*l-a*u,p=t.x-r,h=t.y-o,f=(l*p-a*h)/c,g=(-u*p+s*h)/c;return e.z+f*(n.z-e.z)+g*(i.z-e.z)},qn.longestSideLength=function(t,e,n){var i=t.distance(e),r=e.distance(n),o=n.distance(t),s=i;return r>s&&(s=r),o>s&&(s=o),s},qn.isAcute=function(t,e,n){return!!Tn.isAcute(t,e,n)&&(!!Tn.isAcute(e,n,t)&&!!Tn.isAcute(n,t,e))},qn.circumcentre=function(t,e,n){var i=n.x,r=n.y,o=t.x-i,s=t.y-r,a=e.x-i,u=e.y-r,l=2*qn.det(o,s,a,u),c=qn.det(s,o*o+s*s,u,a*a+u*u),p=qn.det(o,o*o+s*s,a,a*a+u*u);return new C(i-c/l,r+p/l)},qn.perpendicularBisector=function(t,e){var n=e.x-t.x,i=e.y-t.y,r=new k(t.x+n/2,t.y+i/2,1),o=new k(t.x-i+n/2,t.y+n+i/2,1);return new k(r,o)},qn.angleBisector=function(t,e,n){var i=e.distance(t),r=i/(i+e.distance(n)),o=n.x-t.x,s=n.y-t.y;return new C(t.x+r*o,t.y+r*s)},qn.area3D=function(t,e,n){var i=e.x-t.x,r=e.y-t.y,o=e.z-t.z,s=n.x-t.x,a=n.y-t.y,u=n.z-t.z,l=r*u-o*a,c=o*s-i*u,p=i*a-r*s,h=l*l+c*c+p*p,f=Math.sqrt(h)/2;return f},qn.centroid=function(t,e,n){var i=(t.x+e.x+n.x)/3,r=(t.y+e.y+n.y)/3;return new C(i,r)},qn.inCentre=function(t,e,n){var i=e.distance(n),r=t.distance(n),o=t.distance(e),s=i+r+o,a=(i*t.x+r*e.x+o*n.x)/s,u=(i*t.y+r*e.y+o*n.y)/s;return new C(a,u)};var Bn=function(){this._inputGeom=null,this._distance=null,this._curveBuilder=null,this._curveList=new Nt;var t=arguments[0],e=arguments[1],n=arguments[2];this._inputGeom=t,this._distance=e,this._curveBuilder=n};Bn.prototype.addPoint=function(t){if(this._distance<=0)return null;var e=t.getCoordinates(),n=this._curveBuilder.getLineCurve(e,this._distance);this.addCurve(n,w.EXTERIOR,w.INTERIOR)},Bn.prototype.addPolygon=function(t){var e=this._distance,n=Se.LEFT;this._distance<0&&(e=-this._distance,n=Se.RIGHT);var i=t.getExteriorRing(),r=Lt.removeRepeatedPoints(i.getCoordinates());if(this._distance<0&&this.isErodedCompletely(i,this._distance))return null;if(this._distance<=0&&r.length<3)return null;this.addPolygonRing(r,e,n,w.EXTERIOR,w.INTERIOR);for(var o=0;o<t.getNumInteriorRing();o++){var s=t.getInteriorRingN(o),a=Lt.removeRepeatedPoints(s.getCoordinates());this._distance>0&&this.isErodedCompletely(s,-this._distance)||this.addPolygonRing(a,e,Se.opposite(n),w.INTERIOR,w.EXTERIOR)}},Bn.prototype.isTriangleErodedCompletely=function(t,e){var n=new qn(t[0],t[1],t[2]),i=n.inCentre();return at.distancePointLine(i,n.p0,n.p1)<Math.abs(e)},Bn.prototype.addLineString=function(t){if(this._distance<=0&&!this._curveBuilder.getBufferParameters().isSingleSided())return null;var e=Lt.removeRepeatedPoints(t.getCoordinates()),n=this._curveBuilder.getLineCurve(e,this._distance);this.addCurve(n,w.EXTERIOR,w.INTERIOR)},Bn.prototype.addCurve=function(t,e,n){if(null===t||t.length<2)return null;var i=new gn(t,new Pe(0,w.BOUNDARY,e,n));this._curveList.add(i)},Bn.prototype.getCurves=function(){return this.add(this._inputGeom),this._curveList},Bn.prototype.addPolygonRing=function(t,e,n,i,r){if(0===e&&t.length<ee.MINIMUM_VALID_SIZE)return null;var o=i,s=r;t.length>=ee.MINIMUM_VALID_SIZE&&at.isCCW(t)&&(o=r,s=i,n=Se.opposite(n));var a=this._curveBuilder.getRingCurve(t,n,e);this.addCurve(a,o,s)},Bn.prototype.add=function(t){if(t.isEmpty())return null;t instanceof $t?this.addPolygon(t):t instanceof Kt?this.addLineString(t):t instanceof Qt?this.addPoint(t):t instanceof te?this.addCollection(t):t instanceof Xt?this.addCollection(t):t instanceof ne?this.addCollection(t):t instanceof zt&&this.addCollection(t)},Bn.prototype.isErodedCompletely=function(t,e){var n=t.getCoordinates();if(n.length<4)return e<0;if(4===n.length)return this.isTriangleErodedCompletely(n,e);var i=t.getEnvelopeInternal(),r=Math.min(i.getHeight(),i.getWidth());return e<0&&2*Math.abs(e)>r},Bn.prototype.addCollection=function(t){for(var e=0;e<t.getNumGeometries();e++){var n=t.getGeometryN(e);this.add(n)}},Bn.prototype.interfaces_=function(){return[]},Bn.prototype.getClass=function(){return Bn};var Vn=function(){};Vn.prototype.locate=function(t){},Vn.prototype.interfaces_=function(){return[]},Vn.prototype.getClass=function(){return Vn};var Un=function(){this._parent=null,this._atStart=null,this._max=null,this._index=null,this._subcollectionIterator=null;var t=arguments[0];this._parent=t,this._atStart=!0,this._index=0,this._max=t.getNumGeometries()};Un.prototype.next=function(){if(this._atStart)return this._atStart=!1,Un.isAtomic(this._parent)&&this._index++,this._parent;if(null!==this._subcollectionIterator){if(this._subcollectionIterator.hasNext())return this._subcollectionIterator.next();this._subcollectionIterator=null}if(this._index>=this._max)throw new i;var t=this._parent.getGeometryN(this._index++);return t instanceof zt?(this._subcollectionIterator=new Un(t),this._subcollectionIterator.next()):t},Un.prototype.remove=function(){throw new Error(this.getClass().getName())},Un.prototype.hasNext=function(){if(this._atStart)return!0;if(null!==this._subcollectionIterator){if(this._subcollectionIterator.hasNext())return!0;this._subcollectionIterator=null}return!(this._index>=this._max)},Un.prototype.interfaces_=function(){return[Et]},Un.prototype.getClass=function(){return Un},Un.isAtomic=function(t){return!(t instanceof zt)};var zn=function(){this._geom=null;var t=arguments[0];this._geom=t};zn.prototype.locate=function(t){return zn.locate(t,this._geom)},zn.prototype.interfaces_=function(){return[Vn]},zn.prototype.getClass=function(){return zn},zn.isPointInRing=function(t,e){return!!e.getEnvelopeInternal().intersects(t)&&at.isPointInRing(t,e.getCoordinates())},zn.containsPointInPolygon=function(t,e){if(e.isEmpty())return!1;var n=e.getExteriorRing();if(!zn.isPointInRing(t,n))return!1;for(var i=0;i<e.getNumInteriorRing();i++){var r=e.getInteriorRingN(i);if(zn.isPointInRing(t,r))return!1}return!0},zn.containsPoint=function(t,e){if(e instanceof $t)return zn.containsPointInPolygon(t,e);if(e instanceof zt)for(var n=new Un(e);n.hasNext();){var i=n.next();if(i!==e&&zn.containsPoint(t,i))return!0}return!1},zn.locate=function(t,e){return e.isEmpty()?w.EXTERIOR:zn.containsPoint(t,e)?w.INTERIOR:w.EXTERIOR};var Xn=function(){this._edgeMap=new p,this._edgeList=null,this._ptInAreaLocation=[w.NONE,w.NONE]};Xn.prototype.getNextCW=function(t){this.getEdges();var e=this._edgeList.indexOf(t),n=e-1;return 0===e&&(n=this._edgeList.size()-1),this._edgeList.get(n)},Xn.prototype.propagateSideLabels=function(t){for(var e=w.NONE,n=this.iterator();n.hasNext();){var i=n.next().getLabel();i.isArea(t)&&i.getLocation(t,Se.LEFT)!==w.NONE&&(e=i.getLocation(t,Se.LEFT))}if(e===w.NONE)return null;for(var r=e,o=this.iterator();o.hasNext();){var s=o.next(),a=s.getLabel();if(a.getLocation(t,Se.ON)===w.NONE&&a.setLocation(t,Se.ON,r),a.isArea(t)){var u=a.getLocation(t,Se.LEFT),l=a.getLocation(t,Se.RIGHT);if(l!==w.NONE){if(l!==r)throw new we("side location conflict",s.getCoordinate());u===w.NONE&&et.shouldNeverReachHere("found single null side (at "+s.getCoordinate()+")"),r=u}else et.isTrue(a.getLocation(t,Se.LEFT)===w.NONE,"found single null side"),a.setLocation(t,Se.RIGHT,r),a.setLocation(t,Se.LEFT,r)}}},Xn.prototype.getCoordinate=function(){var t=this.iterator();if(!t.hasNext())return null;return t.next().getCoordinate()},Xn.prototype.print=function(t){Y.out.println("EdgeEndStar:   "+this.getCoordinate());for(var e=this.iterator();e.hasNext();){e.next().print(t)}},Xn.prototype.isAreaLabelsConsistent=function(t){return this.computeEdgeEndLabels(t.getBoundaryNodeRule()),this.checkAreaLabelsConsistent(0)},Xn.prototype.checkAreaLabelsConsistent=function(t){var e=this.getEdges();if(e.size()<=0)return!0;var n=e.size()-1,i=e.get(n).getLabel().getLocation(t,Se.LEFT);et.isTrue(i!==w.NONE,"Found unlabelled area edge");for(var r=i,o=this.iterator();o.hasNext();){var s=o.next().getLabel();et.isTrue(s.isArea(t),"Found non-area edge");var a=s.getLocation(t,Se.LEFT),u=s.getLocation(t,Se.RIGHT);if(a===u)return!1;if(u!==r)return!1;r=a}return!0},Xn.prototype.findIndex=function(t){this.iterator();for(var e=0;e<this._edgeList.size();e++){if(this._edgeList.get(e)===t)return e}return-1},Xn.prototype.iterator=function(){return this.getEdges().iterator()},Xn.prototype.getEdges=function(){return null===this._edgeList&&(this._edgeList=new Nt(this._edgeMap.values())),this._edgeList},Xn.prototype.getLocation=function(t,e,n){return this._ptInAreaLocation[t]===w.NONE&&(this._ptInAreaLocation[t]=zn.locate(e,n[t].getGeometry())),this._ptInAreaLocation[t]},Xn.prototype.toString=function(){var t=new D;t.append("EdgeEndStar:   "+this.getCoordinate()),t.append("\n");for(var e=this.iterator();e.hasNext();){var n=e.next();t.append(n),t.append("\n")}return t.toString()},Xn.prototype.computeEdgeEndLabels=function(t){for(var e=this.iterator();e.hasNext();){e.next().computeLabel(t)}},Xn.prototype.computeLabelling=function(t){this.computeEdgeEndLabels(t[0].getBoundaryNodeRule()),this.propagateSideLabels(0),this.propagateSideLabels(1);for(var e=[!1,!1],n=this.iterator();n.hasNext();)for(var i=n.next().getLabel(),r=0;r<2;r++)i.isLine(r)&&i.getLocation(r)===w.BOUNDARY&&(e[r]=!0);for(var o=this.iterator();o.hasNext();)for(var s=o.next(),a=s.getLabel(),u=0;u<2;u++)if(a.isAnyNull(u)){var l=w.NONE;if(e[u])l=w.EXTERIOR;else{var c=s.getCoordinate();l=this.getLocation(u,c,t)}a.setAllLocationsIfNull(u,l)}},Xn.prototype.getDegree=function(){return this._edgeMap.size()},Xn.prototype.insertEdgeEnd=function(t,e){this._edgeMap.put(t,e),this._edgeList=null},Xn.prototype.interfaces_=function(){return[]},Xn.prototype.getClass=function(){return Xn};var Yn=function(t){function e(){t.call(this),this._resultAreaEdgeList=null,this._label=null,this._SCANNING_FOR_INCOMING=1,this._LINKING_TO_OUTGOING=2}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.linkResultDirectedEdges=function(){this.getResultAreaEdges();for(var t=null,e=null,n=this._SCANNING_FOR_INCOMING,i=0;i<this._resultAreaEdgeList.size();i++){var r=this._resultAreaEdgeList.get(i),o=r.getSym();if(r.getLabel().isArea())switch(null===t&&r.isInResult()&&(t=r),n){case this._SCANNING_FOR_INCOMING:if(!o.isInResult())continue;e=o,n=this._LINKING_TO_OUTGOING;break;case this._LINKING_TO_OUTGOING:if(!r.isInResult())continue;e.setNext(r),n=this._SCANNING_FOR_INCOMING}}if(n===this._LINKING_TO_OUTGOING){if(null===t)throw new we("no outgoing dirEdge found",this.getCoordinate());et.isTrue(t.isInResult(),"unable to link last incoming dirEdge"),e.setNext(t)}},e.prototype.insert=function(t){var e=t;this.insertEdgeEnd(e,e)},e.prototype.getRightmostEdge=function(){var t=this.getEdges(),e=t.size();if(e<1)return null;var n=t.get(0);if(1===e)return n;var i=t.get(e-1),r=n.getQuadrant(),o=i.getQuadrant();return Be.isNorthern(r)&&Be.isNorthern(o)?n:Be.isNorthern(r)||Be.isNorthern(o)?0!==n.getDy()?n:0!==i.getDy()?i:(et.shouldNeverReachHere("found two horizontal edges incident on node"),null):i},e.prototype.print=function(t){Y.out.println("DirectedEdgeStar: "+this.getCoordinate());for(var e=this.iterator();e.hasNext();){var n=e.next();t.print("out "),n.print(t),t.println(),t.print("in "),n.getSym().print(t),t.println()}},e.prototype.getResultAreaEdges=function(){if(null!==this._resultAreaEdgeList)return this._resultAreaEdgeList;this._resultAreaEdgeList=new Nt;for(var t=this.iterator();t.hasNext();){var e=t.next();(e.isInResult()||e.getSym().isInResult())&&this._resultAreaEdgeList.add(e)}return this._resultAreaEdgeList},e.prototype.updateLabelling=function(t){for(var e=this.iterator();e.hasNext();){var n=e.next().getLabel();n.setAllLocationsIfNull(0,t.getLocation(0)),n.setAllLocationsIfNull(1,t.getLocation(1))}},e.prototype.linkAllDirectedEdges=function(){this.getEdges();for(var t=null,e=null,n=this._edgeList.size()-1;n>=0;n--){var i=this._edgeList.get(n),r=i.getSym();null===e&&(e=r),null!==t&&r.setNext(t),t=i}e.setNext(t)},e.prototype.computeDepths=function(){if(1===arguments.length){var t=arguments[0],e=this.findIndex(t),n=t.getDepth(Se.LEFT),i=t.getDepth(Se.RIGHT),r=this.computeDepths(e+1,this._edgeList.size(),n);if(this.computeDepths(0,e,r)!==i)throw new we("depth mismatch at "+t.getCoordinate())}else if(3===arguments.length){for(var o=arguments[0],s=arguments[1],a=arguments[2],u=o;u<s;u++){var l=this._edgeList.get(u);l.setEdgeDepths(Se.RIGHT,a),a=l.getDepth(Se.LEFT)}return a}},e.prototype.mergeSymLabels=function(){for(var t=this.iterator();t.hasNext();){var e=t.next();e.getLabel().merge(e.getSym().getLabel())}},e.prototype.linkMinimalDirectedEdges=function(t){for(var e=null,n=null,i=this._SCANNING_FOR_INCOMING,r=this._resultAreaEdgeList.size()-1;r>=0;r--){var o=this._resultAreaEdgeList.get(r),s=o.getSym();switch(null===e&&o.getEdgeRing()===t&&(e=o),i){case this._SCANNING_FOR_INCOMING:if(s.getEdgeRing()!==t)continue;n=s,i=this._LINKING_TO_OUTGOING;break;case this._LINKING_TO_OUTGOING:if(o.getEdgeRing()!==t)continue;n.setNextMin(o),i=this._SCANNING_FOR_INCOMING}}i===this._LINKING_TO_OUTGOING&&(et.isTrue(null!==e,"found null for first outgoing dirEdge"),et.isTrue(e.getEdgeRing()===t,"unable to link last incoming dirEdge"),n.setNextMin(e))},e.prototype.getOutgoingDegree=function(){if(0===arguments.length){for(var t=0,e=this.iterator();e.hasNext();){e.next().isInResult()&&t++}return t}if(1===arguments.length){for(var n=arguments[0],i=0,r=this.iterator();r.hasNext();){r.next().getEdgeRing()===n&&i++}return i}},e.prototype.getLabel=function(){return this._label},e.prototype.findCoveredLineEdges=function(){for(var t=w.NONE,e=this.iterator();e.hasNext();){var n=e.next(),i=n.getSym();if(!n.isLineEdge()){if(n.isInResult()){t=w.INTERIOR;break}if(i.isInResult()){t=w.EXTERIOR;break}}}if(t===w.NONE)return null;for(var r=t,o=this.iterator();o.hasNext();){var s=o.next(),a=s.getSym();s.isLineEdge()?s.getEdge().setCovered(r===w.INTERIOR):(s.isInResult()&&(r=w.EXTERIOR),a.isInResult()&&(r=w.INTERIOR))}},e.prototype.computeLabelling=function(e){t.prototype.computeLabelling.call(this,e),this._label=new Pe(w.NONE);for(var n=this.iterator();n.hasNext();)for(var i=n.next().getEdge().getLabel(),r=0;r<2;r++){var o=i.getLocation(r);o!==w.INTERIOR&&o!==w.BOUNDARY||this._label.setLocation(r,w.INTERIOR)}},e.prototype.interfaces_=function(){return[]},e.prototype.getClass=function(){return e},e}(Xn),kn=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.createNode=function(t){return new Ge(t,new Yn)},e.prototype.interfaces_=function(){return[]},e.prototype.getClass=function(){return e},e}(Xe),jn=function t(){this._pts=null,this._orientation=null;var e=arguments[0];this._pts=e,this._orientation=t.orientation(e)};jn.prototype.compareTo=function(t){var e=t;return jn.compareOriented(this._pts,this._orientation,e._pts,e._orientation)},jn.prototype.interfaces_=function(){return[E]},jn.prototype.getClass=function(){return jn},jn.orientation=function(t){return 1===Lt.increasingDirection(t)},jn.compareOriented=function(t,e,n,i){for(var r=e?1:-1,o=i?1:-1,s=e?t.length:-1,a=i?n.length:-1,u=e?0:t.length-1,l=i?0:n.length-1;;){var c=t[u].compareTo(n[l]);if(0!==c)return c;var p=(u+=r)===s,h=(l+=o)===a;if(p&&!h)return-1;if(!p&&h)return 1;if(p&&h)return 0}};var Hn=function(){this._edges=new Nt,this._ocaMap=new p};Hn.prototype.print=function(t){t.print("MULTILINESTRING ( ");for(var e=0;e<this._edges.size();e++){var n=this._edges.get(e);e>0&&t.print(","),t.print("(");for(var i=n.getCoordinates(),r=0;r<i.length;r++)r>0&&t.print(","),t.print(i[r].x+" "+i[r].y);t.println(")")}t.print(")  ")},Hn.prototype.addAll=function(t){for(var e=t.iterator();e.hasNext();)this.add(e.next())},Hn.prototype.findEdgeIndex=function(t){for(var e=0;e<this._edges.size();e++)if(this._edges.get(e).equals(t))return e;return-1},Hn.prototype.iterator=function(){return this._edges.iterator()},Hn.prototype.getEdges=function(){return this._edges},Hn.prototype.get=function(t){return this._edges.get(t)},Hn.prototype.findEqualEdge=function(t){var e=new jn(t.getCoordinates());return this._ocaMap.get(e)},Hn.prototype.add=function(t){this._edges.add(t);var e=new jn(t.getCoordinates());this._ocaMap.put(e,t)},Hn.prototype.interfaces_=function(){return[]},Hn.prototype.getClass=function(){return Hn};var Wn=function(){};Wn.prototype.processIntersections=function(t,e,n,i){},Wn.prototype.isDone=function(){},Wn.prototype.interfaces_=function(){return[]},Wn.prototype.getClass=function(){return Wn};var Kn=function(){this._hasIntersection=!1,this._hasProper=!1,this._hasProperInterior=!1,this._hasInterior=!1,this._properIntersectionPoint=null,this._li=null,this._isSelfIntersection=null,this.numIntersections=0,this.numInteriorIntersections=0,this.numProperIntersections=0,this.numTests=0;var t=arguments[0];this._li=t};Kn.prototype.isTrivialIntersection=function(t,e,n,i){if(t===n&&1===this._li.getIntersectionNum()){if(Kn.isAdjacentSegments(e,i))return!0;if(t.isClosed()){var r=t.size()-1;if(0===e&&i===r||0===i&&e===r)return!0}}return!1},Kn.prototype.getProperIntersectionPoint=function(){return this._properIntersectionPoint},Kn.prototype.hasProperInteriorIntersection=function(){return this._hasProperInterior},Kn.prototype.getLineIntersector=function(){return this._li},Kn.prototype.hasProperIntersection=function(){return this._hasProper},Kn.prototype.processIntersections=function(t,e,n,i){if(t===n&&e===i)return null;this.numTests++;var r=t.getCoordinates()[e],o=t.getCoordinates()[e+1],s=n.getCoordinates()[i],a=n.getCoordinates()[i+1];this._li.computeIntersection(r,o,s,a),this._li.hasIntersection()&&(this.numIntersections++,this._li.isInteriorIntersection()&&(this.numInteriorIntersections++,this._hasInterior=!0),this.isTrivialIntersection(t,e,n,i)||(this._hasIntersection=!0,t.addIntersections(this._li,e,0),n.addIntersections(this._li,i,1),this._li.isProper()&&(this.numProperIntersections++,this._hasProper=!0,this._hasProperInterior=!0)))},Kn.prototype.hasIntersection=function(){return this._hasIntersection},Kn.prototype.isDone=function(){return!1},Kn.prototype.hasInteriorIntersection=function(){return this._hasInterior},Kn.prototype.interfaces_=function(){return[Wn]},Kn.prototype.getClass=function(){return Kn},Kn.isAdjacentSegments=function(t,e){return 1===Math.abs(t-e)};var Jn=function(){this.coord=null,this.segmentIndex=null,this.dist=null;var t=arguments[0],e=arguments[1],n=arguments[2];this.coord=new C(t),this.segmentIndex=e,this.dist=n};Jn.prototype.getSegmentIndex=function(){return this.segmentIndex},Jn.prototype.getCoordinate=function(){return this.coord},Jn.prototype.print=function(t){t.print(this.coord),t.print(" seg # = "+this.segmentIndex),t.println(" dist = "+this.dist)},Jn.prototype.compareTo=function(t){var e=t;return this.compare(e.segmentIndex,e.dist)},Jn.prototype.isEndPoint=function(t){return 0===this.segmentIndex&&0===this.dist||this.segmentIndex===t},Jn.prototype.toString=function(){return this.coord+" seg # = "+this.segmentIndex+" dist = "+this.dist},Jn.prototype.getDistance=function(){return this.dist},Jn.prototype.compare=function(t,e){return this.segmentIndex<t?-1:this.segmentIndex>t?1:this.dist<e?-1:this.dist>e?1:0},Jn.prototype.interfaces_=function(){return[E]},Jn.prototype.getClass=function(){return Jn};var Qn=function(){this._nodeMap=new p,this.edge=null;var t=arguments[0];this.edge=t};Qn.prototype.print=function(t){t.println("Intersections:");for(var e=this.iterator();e.hasNext();){e.next().print(t)}},Qn.prototype.iterator=function(){return this._nodeMap.values().iterator()},Qn.prototype.addSplitEdges=function(t){this.addEndpoints();for(var e=this.iterator(),n=e.next();e.hasNext();){var i=e.next(),r=this.createSplitEdge(n,i);t.add(r),n=i}},Qn.prototype.addEndpoints=function(){var t=this.edge.pts.length-1;this.add(this.edge.pts[0],0,0),this.add(this.edge.pts[t],t,0)},Qn.prototype.createSplitEdge=function(t,e){var n=e.segmentIndex-t.segmentIndex+2,i=this.edge.pts[e.segmentIndex],r=e.dist>0||!e.coord.equals2D(i);r||n--;var o=new Array(n).fill(null),s=0;o[s++]=new C(t.coord);for(var a=t.segmentIndex+1;a<=e.segmentIndex;a++)o[s++]=this.edge.pts[a];return r&&(o[s]=e.coord),new ni(o,new Pe(this.edge._label))},Qn.prototype.add=function(t,e,n){var i=new Jn(t,e,n),r=this._nodeMap.get(i);return null!==r?r:(this._nodeMap.put(i,i),i)},Qn.prototype.isIntersection=function(t){for(var e=this.iterator();e.hasNext();){if(e.next().coord.equals(t))return!0}return!1},Qn.prototype.interfaces_=function(){return[]},Qn.prototype.getClass=function(){return Qn};var Zn=function(){};Zn.prototype.getChainStartIndices=function(t){var e=0,n=new Nt;n.add(new M(e));do{var i=this.findChainEnd(t,e);n.add(new M(i)),e=i}while(e<t.length-1);return Zn.toIntArray(n)},Zn.prototype.findChainEnd=function(t,e){for(var n=Be.quadrant(t[e],t[e+1]),i=e+1;i<t.length;){if(Be.quadrant(t[i-1],t[i])!==n)break;i++}return i-1},Zn.prototype.interfaces_=function(){return[]},Zn.prototype.getClass=function(){return Zn},Zn.toIntArray=function(t){for(var e=new Array(t.size()).fill(null),n=0;n<e.length;n++)e[n]=t.get(n).intValue();return e};var $n=function(){this.e=null,this.pts=null,this.startIndex=null,this.env1=new j,this.env2=new j;var t=arguments[0];this.e=t,this.pts=t.getCoordinates();var e=new Zn;this.startIndex=e.getChainStartIndices(this.pts)};$n.prototype.getCoordinates=function(){return this.pts},$n.prototype.getMaxX=function(t){var e=this.pts[this.startIndex[t]].x,n=this.pts[this.startIndex[t+1]].x;return e>n?e:n},$n.prototype.getMinX=function(t){var e=this.pts[this.startIndex[t]].x,n=this.pts[this.startIndex[t+1]].x;return e<n?e:n},$n.prototype.computeIntersectsForChain=function(){if(4===arguments.length){var t=arguments[0],e=arguments[1],n=arguments[2],i=arguments[3];this.computeIntersectsForChain(this.startIndex[t],this.startIndex[t+1],e,e.startIndex[n],e.startIndex[n+1],i)}else if(6===arguments.length){var r=arguments[0],o=arguments[1],s=arguments[2],a=arguments[3],u=arguments[4],l=arguments[5],c=this.pts[r],p=this.pts[o],h=s.pts[a],f=s.pts[u];if(o-r==1&&u-a==1)return l.addIntersections(this.e,r,s.e,a),null;if(this.env1.init(c,p),this.env2.init(h,f),!this.env1.intersects(this.env2))return null;var g=Math.trunc((r+o)/2),d=Math.trunc((a+u)/2);r<g&&(a<d&&this.computeIntersectsForChain(r,g,s,a,d,l),d<u&&this.computeIntersectsForChain(r,g,s,d,u,l)),g<o&&(a<d&&this.computeIntersectsForChain(g,o,s,a,d,l),d<u&&this.computeIntersectsForChain(g,o,s,d,u,l))}},$n.prototype.getStartIndexes=function(){return this.startIndex},$n.prototype.computeIntersects=function(t,e){for(var n=0;n<this.startIndex.length-1;n++)for(var i=0;i<t.startIndex.length-1;i++)this.computeIntersectsForChain(n,t,i,e)},$n.prototype.interfaces_=function(){return[]},$n.prototype.getClass=function(){return $n};var ti=function t(){this._depth=Array(2).fill().map(function(){return Array(3)});for(var e=0;e<2;e++)for(var n=0;n<3;n++)this._depth[e][n]=t.NULL_VALUE},ei={NULL_VALUE:{configurable:!0}};ti.prototype.getDepth=function(t,e){return this._depth[t][e]},ti.prototype.setDepth=function(t,e,n){this._depth[t][e]=n},ti.prototype.isNull=function(){if(0===arguments.length){for(var t=0;t<2;t++)for(var e=0;e<3;e++)if(this._depth[t][e]!==ti.NULL_VALUE)return!1;return!0}if(1===arguments.length){var n=arguments[0];return this._depth[n][1]===ti.NULL_VALUE}if(2===arguments.length){var i=arguments[0],r=arguments[1];return this._depth[i][r]===ti.NULL_VALUE}},ti.prototype.normalize=function(){for(var t=0;t<2;t++)if(!this.isNull(t)){var e=this._depth[t][1];this._depth[t][2]<e&&(e=this._depth[t][2]),e<0&&(e=0);for(var n=1;n<3;n++){var i=0;this._depth[t][n]>e&&(i=1),this._depth[t][n]=i}}},ti.prototype.getDelta=function(t){return this._depth[t][Se.RIGHT]-this._depth[t][Se.LEFT]},ti.prototype.getLocation=function(t,e){return this._depth[t][e]<=0?w.EXTERIOR:w.INTERIOR},ti.prototype.toString=function(){return"A: "+this._depth[0][1]+","+this._depth[0][2]+" B: "+this._depth[1][1]+","+this._depth[1][2]},ti.prototype.add=function(){if(1===arguments.length)for(var t=arguments[0],e=0;e<2;e++)for(var n=1;n<3;n++){var i=t.getLocation(e,n);i!==w.EXTERIOR&&i!==w.INTERIOR||(this.isNull(e,n)?this._depth[e][n]=ti.depthAtLocation(i):this._depth[e][n]+=ti.depthAtLocation(i))}else if(3===arguments.length){var r=arguments[0],o=arguments[1];arguments[2]===w.INTERIOR&&this._depth[r][o]++}},ti.prototype.interfaces_=function(){return[]},ti.prototype.getClass=function(){return ti},ti.depthAtLocation=function(t){return t===w.EXTERIOR?0:t===w.INTERIOR?1:ti.NULL_VALUE},ei.NULL_VALUE.get=function(){return-1},Object.defineProperties(ti,ei);var ni=function(t){function e(){if(t.call(this),this.pts=null,this._env=null,this.eiList=new Qn(this),this._name=null,this._mce=null,this._isIsolated=!0,this._depth=new ti,this._depthDelta=0,1===arguments.length){var n=arguments[0];e.call(this,n,null)}else if(2===arguments.length){var i=arguments[0],r=arguments[1];this.pts=i,this._label=r}}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDepth=function(){return this._depth},e.prototype.getCollapsedEdge=function(){var t=new Array(2).fill(null);t[0]=this.pts[0],t[1]=this.pts[1];return new e(t,Pe.toLineLabel(this._label))},e.prototype.isIsolated=function(){return this._isIsolated},e.prototype.getCoordinates=function(){return this.pts},e.prototype.setIsolated=function(t){this._isIsolated=t},e.prototype.setName=function(t){this._name=t},e.prototype.equals=function(t){if(!(t instanceof e))return!1;var n=t;if(this.pts.length!==n.pts.length)return!1;for(var i=!0,r=!0,o=this.pts.length,s=0;s<this.pts.length;s++)if(this.pts[s].equals2D(n.pts[s])||(i=!1),this.pts[s].equals2D(n.pts[--o])||(r=!1),!i&&!r)return!1;return!0},e.prototype.getCoordinate=function(){if(0===arguments.length)return this.pts.length>0?this.pts[0]:null;if(1===arguments.length){var t=arguments[0];return this.pts[t]}},e.prototype.print=function(t){t.print("edge "+this._name+": "),t.print("LINESTRING (");for(var e=0;e<this.pts.length;e++)e>0&&t.print(","),t.print(this.pts[e].x+" "+this.pts[e].y);t.print(")  "+this._label+" "+this._depthDelta)},e.prototype.computeIM=function(t){e.updateIM(this._label,t)},e.prototype.isCollapsed=function(){return!!this._label.isArea()&&(3===this.pts.length&&!!this.pts[0].equals(this.pts[2]))},e.prototype.isClosed=function(){return this.pts[0].equals(this.pts[this.pts.length-1])},e.prototype.getMaximumSegmentIndex=function(){return this.pts.length-1},e.prototype.getDepthDelta=function(){return this._depthDelta},e.prototype.getNumPoints=function(){return this.pts.length},e.prototype.printReverse=function(t){t.print("edge "+this._name+": ");for(var e=this.pts.length-1;e>=0;e--)t.print(this.pts[e]+" ");t.println("")},e.prototype.getMonotoneChainEdge=function(){return null===this._mce&&(this._mce=new $n(this)),this._mce},e.prototype.getEnvelope=function(){if(null===this._env){this._env=new j;for(var t=0;t<this.pts.length;t++)this._env.expandToInclude(this.pts[t])}return this._env},e.prototype.addIntersection=function(t,e,n,i){var r=new C(t.getIntersection(i)),o=e,s=t.getEdgeDistance(n,i),a=o+1;if(a<this.pts.length){var u=this.pts[a];r.equals2D(u)&&(o=a,s=0)}this.eiList.add(r,o,s)},e.prototype.toString=function(){var t=new D;t.append("edge "+this._name+": "),t.append("LINESTRING (");for(var e=0;e<this.pts.length;e++)e>0&&t.append(","),t.append(this.pts[e].x+" "+this.pts[e].y);return t.append(")  "+this._label+" "+this._depthDelta),t.toString()},e.prototype.isPointwiseEqual=function(t){if(this.pts.length!==t.pts.length)return!1;for(var e=0;e<this.pts.length;e++)if(!this.pts[e].equals2D(t.pts[e]))return!1;return!0},e.prototype.setDepthDelta=function(t){this._depthDelta=t},e.prototype.getEdgeIntersectionList=function(){return this.eiList},e.prototype.addIntersections=function(t,e,n){for(var i=0;i<t.getIntersectionNum();i++)this.addIntersection(t,e,n,i)},e.prototype.interfaces_=function(){return[]},e.prototype.getClass=function(){return e},e.updateIM=function(){if(2!==arguments.length)return t.prototype.updateIM.apply(this,arguments);var e=arguments[0],n=arguments[1];n.setAtLeastIfValid(e.getLocation(0,Se.ON),e.getLocation(1,Se.ON),1),e.isArea()&&(n.setAtLeastIfValid(e.getLocation(0,Se.LEFT),e.getLocation(1,Se.LEFT),2),n.setAtLeastIfValid(e.getLocation(0,Se.RIGHT),e.getLocation(1,Se.RIGHT),2))},e}(Fe),ii=function(t){this._workingPrecisionModel=null,this._workingNoder=null,this._geomFact=null,this._graph=null,this._edgeList=new Hn,this._bufParams=t||null};ii.prototype.setWorkingPrecisionModel=function(t){this._workingPrecisionModel=t},ii.prototype.insertUniqueEdge=function(t){var e=this._edgeList.findEqualEdge(t);if(null!==e){var n=e.getLabel(),i=t.getLabel();e.isPointwiseEqual(t)||(i=new Pe(t.getLabel())).flip(),n.merge(i);var r=ii.depthDelta(i),o=e.getDepthDelta()+r;e.setDepthDelta(o)}else this._edgeList.add(t),t.setDepthDelta(ii.depthDelta(t.getLabel()))},ii.prototype.buildSubgraphs=function(t,e){for(var n=new Nt,i=t.iterator();i.hasNext();){var r=i.next(),o=r.getRightmostCoordinate(),s=new An(n).getDepth(o);r.computeDepth(s),r.findResultEdges(),n.add(r),e.add(r.getDirectedEdges(),r.getNodes())}},ii.prototype.createSubgraphs=function(t){for(var e=new Nt,n=t.getNodes().iterator();n.hasNext();){var i=n.next();if(!i.isVisited()){var r=new Te;r.create(i),e.add(r)}}return $e.sort(e,$e.reverseOrder()),e},ii.prototype.createEmptyResultGeometry=function(){return this._geomFact.createPolygon()},ii.prototype.getNoder=function(t){if(null!==this._workingNoder)return this._workingNoder;var e=new xn,n=new rt;return n.setPrecisionModel(t),e.setSegmentIntersector(new Kn(n)),e},ii.prototype.buffer=function(t,e){var n=this._workingPrecisionModel;null===n&&(n=t.getPrecisionModel()),this._geomFact=t.getFactory();var i=new Mn(n,this._bufParams),r=new Bn(t,e,i).getCurves();if(r.size()<=0)return this.createEmptyResultGeometry();this.computeNodedEdges(r,n),this._graph=new Ye(new kn),this._graph.addEdges(this._edgeList.getEdges());var o=this.createSubgraphs(this._graph),s=new ke(this._geomFact);this.buildSubgraphs(o,s);var a=s.getPolygons();if(a.size()<=0)return this.createEmptyResultGeometry();return this._geomFact.buildGeometry(a)},ii.prototype.computeNodedEdges=function(t,e){var n=this.getNoder(e);n.computeNodes(t);for(var i=n.getNodedSubstrings().iterator();i.hasNext();){var r=i.next(),o=r.getCoordinates();if(2!==o.length||!o[0].equals2D(o[1])){var s=r.getData(),a=new ni(r.getCoordinates(),new Pe(s));this.insertUniqueEdge(a)}}},ii.prototype.setNoder=function(t){this._workingNoder=t},ii.prototype.interfaces_=function(){return[]},ii.prototype.getClass=function(){return ii},ii.depthDelta=function(t){var e=t.getLocation(0,Se.LEFT),n=t.getLocation(0,Se.RIGHT);return e===w.INTERIOR&&n===w.EXTERIOR?1:e===w.EXTERIOR&&n===w.INTERIOR?-1:0},ii.convertSegStrings=function(t){for(var e=new _e,n=new Nt;t.hasNext();){var i=t.next(),r=e.createLineString(i.getCoordinates());n.add(r)}return e.buildGeometry(n)};var ri=function(){if(this._noder=null,this._scaleFactor=null,this._offsetX=null,this._offsetY=null,this._isScaled=!1,2===arguments.length){var t=arguments[0],e=arguments[1];this._noder=t,this._scaleFactor=e,this._offsetX=0,this._offsetY=0,this._isScaled=!this.isIntegerPrecision()}else if(4===arguments.length){var n=arguments[0],i=arguments[1],r=arguments[2],o=arguments[3];this._noder=n,this._scaleFactor=i,this._offsetX=r,this._offsetY=o,this._isScaled=!this.isIntegerPrecision()}};ri.prototype.rescale=function(){if(T(arguments[0],It))for(var t=arguments[0].iterator();t.hasNext();){var e=t.next();this.rescale(e.getCoordinates())}else if(arguments[0]instanceof Array){for(var n=arguments[0],i=0;i<n.length;i++)n[i].x=n[i].x/this._scaleFactor+this._offsetX,n[i].y=n[i].y/this._scaleFactor+this._offsetY;2===n.length&&n[0].equals2D(n[1])&&Y.out.println(n)}},ri.prototype.scale=function(){if(T(arguments[0],It)){for(var t=arguments[0],e=new Nt,n=t.iterator();n.hasNext();){var i=n.next();e.add(new gn(this.scale(i.getCoordinates()),i.getData()))}return e}if(arguments[0]instanceof Array){for(var r=arguments[0],o=new Array(r.length).fill(null),s=0;s<r.length;s++)o[s]=new C(Math.round((r[s].x-this._offsetX)*this._scaleFactor),Math.round((r[s].y-this._offsetY)*this._scaleFactor),r[s].z);return Lt.removeRepeatedPoints(o)}},ri.prototype.isIntegerPrecision=function(){return 1===this._scaleFactor},ri.prototype.getNodedSubstrings=function(){var t=this._noder.getNodedSubstrings();return this._isScaled&&this.rescale(t),t},ri.prototype.computeNodes=function(t){var e=t;this._isScaled&&(e=this.scale(t)),this._noder.computeNodes(e)},ri.prototype.interfaces_=function(){return[In]},ri.prototype.getClass=function(){return ri};var oi=function(){this._li=new rt,this._segStrings=null;var t=arguments[0];this._segStrings=t},si={fact:{configurable:!0}};oi.prototype.checkEndPtVertexIntersections=function(){if(0===arguments.length)for(var t=this._segStrings.iterator();t.hasNext();){var e=t.next().getCoordinates();this.checkEndPtVertexIntersections(e[0],this._segStrings),this.checkEndPtVertexIntersections(e[e.length-1],this._segStrings)}else if(2===arguments.length)for(var n=arguments[0],i=arguments[1].iterator();i.hasNext();)for(var r=i.next().getCoordinates(),o=1;o<r.length-1;o++)if(r[o].equals(n))throw new $("found endpt/interior pt intersection at index "+o+" :pt "+n)},oi.prototype.checkInteriorIntersections=function(){if(0===arguments.length)for(var t=this._segStrings.iterator();t.hasNext();)for(var e=t.next(),n=this._segStrings.iterator();n.hasNext();){var i=n.next();this.checkInteriorIntersections(e,i)}else if(2===arguments.length)for(var r=arguments[0],o=arguments[1],s=r.getCoordinates(),a=o.getCoordinates(),u=0;u<s.length-1;u++)for(var l=0;l<a.length-1;l++)this.checkInteriorIntersections(r,u,o,l);else if(4===arguments.length){var c=arguments[0],p=arguments[1],h=arguments[2],f=arguments[3];if(c===h&&p===f)return null;var g=c.getCoordinates()[p],d=c.getCoordinates()[p+1],y=h.getCoordinates()[f],_=h.getCoordinates()[f+1];if(this._li.computeIntersection(g,d,y,_),this._li.hasIntersection()&&(this._li.isProper()||this.hasInteriorIntersection(this._li,g,d)||this.hasInteriorIntersection(this._li,y,_)))throw new $("found non-noded intersection at "+g+"-"+d+" and "+y+"-"+_)}},oi.prototype.checkValid=function(){this.checkEndPtVertexIntersections(),this.checkInteriorIntersections(),this.checkCollapses()},oi.prototype.checkCollapses=function(){if(0===arguments.length)for(var t=this._segStrings.iterator();t.hasNext();){var e=t.next();this.checkCollapses(e)}else if(1===arguments.length)for(var n=arguments[0].getCoordinates(),i=0;i<n.length-2;i++)this.checkCollapse(n[i],n[i+1],n[i+2])},oi.prototype.hasInteriorIntersection=function(t,e,n){for(var i=0;i<t.getIntersectionNum();i++){var r=t.getIntersection(i);if(!r.equals(e)&&!r.equals(n))return!0}return!1},oi.prototype.checkCollapse=function(t,e,n){if(t.equals(n))throw new $("found non-noded collapse at "+oi.fact.createLineString([t,e,n]))},oi.prototype.interfaces_=function(){return[]},oi.prototype.getClass=function(){return oi},si.fact.get=function(){return new _e},Object.defineProperties(oi,si);var ai=function(){this._li=null,this._pt=null,this._originalPt=null,this._ptScaled=null,this._p0Scaled=null,this._p1Scaled=null,this._scaleFactor=null,this._minx=null,this._maxx=null,this._miny=null,this._maxy=null,this._corner=new Array(4).fill(null),this._safeEnv=null;var t=arguments[0],e=arguments[1],n=arguments[2];if(this._originalPt=t,this._pt=t,this._scaleFactor=e,this._li=n,e<=0)throw new m("Scale factor must be non-zero");1!==e&&(this._pt=new C(this.scale(t.x),this.scale(t.y)),this._p0Scaled=new C,this._p1Scaled=new C),this.initCorners(this._pt)},ui={SAFE_ENV_EXPANSION_FACTOR:{configurable:!0}};ai.prototype.intersectsScaled=function(t,e){var n=Math.min(t.x,e.x),i=Math.max(t.x,e.x),r=Math.min(t.y,e.y),o=Math.max(t.y,e.y),s=this._maxx<n||this._minx>i||this._maxy<r||this._miny>o;if(s)return!1;var a=this.intersectsToleranceSquare(t,e);return et.isTrue(!(s&&a),"Found bad envelope test"),a},ai.prototype.initCorners=function(t){this._minx=t.x-.5,this._maxx=t.x+.5,this._miny=t.y-.5,this._maxy=t.y+.5,this._corner[0]=new C(this._maxx,this._maxy),this._corner[1]=new C(this._minx,this._maxy),this._corner[2]=new C(this._minx,this._miny),this._corner[3]=new C(this._maxx,this._miny)},ai.prototype.intersects=function(t,e){return 1===this._scaleFactor?this.intersectsScaled(t,e):(this.copyScaled(t,this._p0Scaled),this.copyScaled(e,this._p1Scaled),this.intersectsScaled(this._p0Scaled,this._p1Scaled))},ai.prototype.scale=function(t){return Math.round(t*this._scaleFactor)},ai.prototype.getCoordinate=function(){return this._originalPt},ai.prototype.copyScaled=function(t,e){e.x=this.scale(t.x),e.y=this.scale(t.y)},ai.prototype.getSafeEnvelope=function(){if(null===this._safeEnv){var t=ai.SAFE_ENV_EXPANSION_FACTOR/this._scaleFactor;this._safeEnv=new j(this._originalPt.x-t,this._originalPt.x+t,this._originalPt.y-t,this._originalPt.y+t)}return this._safeEnv},ai.prototype.intersectsPixelClosure=function(t,e){return this._li.computeIntersection(t,e,this._corner[0],this._corner[1]),!!this._li.hasIntersection()||(this._li.computeIntersection(t,e,this._corner[1],this._corner[2]),!!this._li.hasIntersection()||(this._li.computeIntersection(t,e,this._corner[2],this._corner[3]),!!this._li.hasIntersection()||(this._li.computeIntersection(t,e,this._corner[3],this._corner[0]),!!this._li.hasIntersection())))},ai.prototype.intersectsToleranceSquare=function(t,e){var n=!1,i=!1;return this._li.computeIntersection(t,e,this._corner[0],this._corner[1]),!!this._li.isProper()||(this._li.computeIntersection(t,e,this._corner[1],this._corner[2]),!!this._li.isProper()||(this._li.hasIntersection()&&(n=!0),this._li.computeIntersection(t,e,this._corner[2],this._corner[3]),!!this._li.isProper()||(this._li.hasIntersection()&&(i=!0),this._li.computeIntersection(t,e,this._corner[3],this._corner[0]),!!this._li.isProper()||(!(!n||!i)||(!!t.equals(this._pt)||!!e.equals(this._pt))))))},ai.prototype.addSnappedNode=function(t,e){var n=t.getCoordinate(e),i=t.getCoordinate(e+1);return!!this.intersects(n,i)&&(t.addIntersection(this.getCoordinate(),e),!0)},ai.prototype.interfaces_=function(){return[]},ai.prototype.getClass=function(){return ai},ui.SAFE_ENV_EXPANSION_FACTOR.get=function(){return.75},Object.defineProperties(ai,ui);var li=function(){this.tempEnv1=new j,this.selectedSegment=new dn};li.prototype.select=function(){if(1===arguments.length);else if(2===arguments.length){var t=arguments[0],e=arguments[1];t.getLineSegment(e,this.selectedSegment),this.select(this.selectedSegment)}},li.prototype.interfaces_=function(){return[]},li.prototype.getClass=function(){return li};var ci=function(){this._index=null;var t=arguments[0];this._index=t},pi={HotPixelSnapAction:{configurable:!0}};ci.prototype.snap=function(){if(1===arguments.length){var t=arguments[0];return this.snap(t,null,-1)}if(3===arguments.length){var e=arguments[0],n=arguments[1],i=arguments[2],r=e.getSafeEnvelope(),o=new hi(e,n,i);return this._index.query(r,{interfaces_:function(){return[Ke]},visitItem:function(t){t.select(r,o)}}),o.isNodeAdded()}},ci.prototype.interfaces_=function(){return[]},ci.prototype.getClass=function(){return ci},pi.HotPixelSnapAction.get=function(){return hi},Object.defineProperties(ci,pi);var hi=function(t){function e(){t.call(this),this._hotPixel=null,this._parentEdge=null,this._hotPixelVertexIndex=null,this._isNodeAdded=!1;var e=arguments[0],n=arguments[1],i=arguments[2];this._hotPixel=e,this._parentEdge=n,this._hotPixelVertexIndex=i}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.isNodeAdded=function(){return this._isNodeAdded},e.prototype.select=function(){if(2!==arguments.length)return t.prototype.select.apply(this,arguments);var e=arguments[0],n=arguments[1],i=e.getContext();if(null!==this._parentEdge&&i===this._parentEdge&&n===this._hotPixelVertexIndex)return null;this._isNodeAdded=this._hotPixel.addSnappedNode(i,n)},e.prototype.interfaces_=function(){return[]},e.prototype.getClass=function(){return e},e}(li),fi=function(){this._li=null,this._interiorIntersections=null;var t=arguments[0];this._li=t,this._interiorIntersections=new Nt};fi.prototype.processIntersections=function(t,e,n,i){if(t===n&&e===i)return null;var r=t.getCoordinates()[e],o=t.getCoordinates()[e+1],s=n.getCoordinates()[i],a=n.getCoordinates()[i+1];if(this._li.computeIntersection(r,o,s,a),this._li.hasIntersection()&&this._li.isInteriorIntersection()){for(var u=0;u<this._li.getIntersectionNum();u++)this._interiorIntersections.add(this._li.getIntersection(u));t.addIntersections(this._li,e,0),n.addIntersections(this._li,i,1)}},fi.prototype.isDone=function(){return!1},fi.prototype.getInteriorIntersections=function(){return this._interiorIntersections},fi.prototype.interfaces_=function(){return[Wn]},fi.prototype.getClass=function(){return fi};var gi=function(){this._pm=null,this._li=null,this._scaleFactor=null,this._noder=null,this._pointSnapper=null,this._nodedSegStrings=null;var t=arguments[0];this._pm=t,this._li=new rt,this._li.setPrecisionModel(t),this._scaleFactor=t.getScale()};gi.prototype.checkCorrectness=function(t){var e=gn.getNodedSubstrings(t),n=new oi(e);try{n.checkValid()}catch(t){if(!(t instanceof z))throw t;t.printStackTrace()}},gi.prototype.getNodedSubstrings=function(){return gn.getNodedSubstrings(this._nodedSegStrings)},gi.prototype.snapRound=function(t,e){var n=this.findInteriorIntersections(t,e);this.computeIntersectionSnaps(n),this.computeVertexSnaps(t)},gi.prototype.findInteriorIntersections=function(t,e){var n=new fi(e);return this._noder.setSegmentIntersector(n),this._noder.computeNodes(t),n.getInteriorIntersections()},gi.prototype.computeVertexSnaps=function(){if(T(arguments[0],It))for(var t=arguments[0].iterator();t.hasNext();){var e=t.next();this.computeVertexSnaps(e)}else if(arguments[0]instanceof gn)for(var n=arguments[0],i=n.getCoordinates(),r=0;r<i.length;r++){var o=new ai(i[r],this._scaleFactor,this._li);this._pointSnapper.snap(o,n,r)&&n.addIntersection(i[r],r)}},gi.prototype.computeNodes=function(t){this._nodedSegStrings=t,this._noder=new xn,this._pointSnapper=new ci(this._noder.getIndex()),this.snapRound(t,this._li)},gi.prototype.computeIntersectionSnaps=function(t){for(var e=t.iterator();e.hasNext();){var n=e.next(),i=new ai(n,this._scaleFactor,this._li);this._pointSnapper.snap(i)}},gi.prototype.interfaces_=function(){return[In]},gi.prototype.getClass=function(){return gi};var di=function(){if(this._argGeom=null,this._distance=null,this._bufParams=new Cn,this._resultGeometry=null,this._saveException=null,1===arguments.length){var t=arguments[0];this._argGeom=t}else if(2===arguments.length){var e=arguments[0],n=arguments[1];this._argGeom=e,this._bufParams=n}},yi={CAP_ROUND:{configurable:!0},CAP_BUTT:{configurable:!0},CAP_FLAT:{configurable:!0},CAP_SQUARE:{configurable:!0},MAX_PRECISION_DIGITS:{configurable:!0}};di.prototype.bufferFixedPrecision=function(t){var e=new ri(new gi(new fe(1)),t.getScale()),n=new ii(this._bufParams);n.setWorkingPrecisionModel(t),n.setNoder(e),this._resultGeometry=n.buffer(this._argGeom,this._distance)},di.prototype.bufferReducedPrecision=function(){var t=this;if(0===arguments.length){for(var e=di.MAX_PRECISION_DIGITS;e>=0;e--){try{t.bufferReducedPrecision(e)}catch(e){if(!(e instanceof we))throw e;t._saveException=e}if(null!==t._resultGeometry)return null}throw this._saveException}if(1===arguments.length){var n=arguments[0],i=di.precisionScaleFactor(this._argGeom,this._distance,n),r=new fe(i);this.bufferFixedPrecision(r)}},di.prototype.computeGeometry=function(){if(this.bufferOriginalPrecision(),null!==this._resultGeometry)return null;var t=this._argGeom.getFactory().getPrecisionModel();t.getType()===fe.FIXED?this.bufferFixedPrecision(t):this.bufferReducedPrecision()},di.prototype.setQuadrantSegments=function(t){this._bufParams.setQuadrantSegments(t)},di.prototype.bufferOriginalPrecision=function(){try{var t=new ii(this._bufParams);this._resultGeometry=t.buffer(this._argGeom,this._distance)}catch(t){if(!(t instanceof $))throw t;this._saveException=t}},di.prototype.getResultGeometry=function(t){return this._distance=t,this.computeGeometry(),this._resultGeometry},di.prototype.setEndCapStyle=function(t){this._bufParams.setEndCapStyle(t)},di.prototype.interfaces_=function(){return[]},di.prototype.getClass=function(){return di},di.bufferOp=function(){if(2===arguments.length){var t=arguments[0],e=arguments[1];return new di(t).getResultGeometry(e)}if(3===arguments.length){if(Number.isInteger(arguments[2])&&arguments[0]instanceof ct&&"number"==typeof arguments[1]){var n=arguments[0],i=arguments[1],r=arguments[2],o=new di(n);o.setQuadrantSegments(r);return o.getResultGeometry(i)}if(arguments[2]instanceof Cn&&arguments[0]instanceof ct&&"number"==typeof arguments[1]){var s=arguments[0],a=arguments[1],u=arguments[2];return new di(s,u).getResultGeometry(a)}}else if(4===arguments.length){var l=arguments[0],c=arguments[1],p=arguments[2],h=arguments[3],f=new di(l);f.setQuadrantSegments(p),f.setEndCapStyle(h);return f.getResultGeometry(c)}},di.precisionScaleFactor=function(t,e,n){var i=t.getEnvelopeInternal(),r=R.max(Math.abs(i.getMaxX()),Math.abs(i.getMaxY()),Math.abs(i.getMinX()),Math.abs(i.getMinY()))+2*(e>0?e:0),o=n-Math.trunc(Math.log(r)/Math.log(10)+1);return Math.pow(10,o)},yi.CAP_ROUND.get=function(){return Cn.CAP_ROUND},yi.CAP_BUTT.get=function(){return Cn.CAP_FLAT},yi.CAP_FLAT.get=function(){return Cn.CAP_FLAT},yi.CAP_SQUARE.get=function(){return Cn.CAP_SQUARE},yi.MAX_PRECISION_DIGITS.get=function(){return 12},Object.defineProperties(di,yi);var _i=function(){this._pt=[new C,new C],this._distance=v.NaN,this._isNull=!0};_i.prototype.getCoordinates=function(){return this._pt},_i.prototype.getCoordinate=function(t){return this._pt[t]},_i.prototype.setMinimum=function(){if(1===arguments.length){var t=arguments[0];this.setMinimum(t._pt[0],t._pt[1])}else if(2===arguments.length){var e=arguments[0],n=arguments[1];if(this._isNull)return this.initialize(e,n),null;var i=e.distance(n);i<this._distance&&this.initialize(e,n,i)}},_i.prototype.initialize=function(){if(0===arguments.length)this._isNull=!0;else if(2===arguments.length){var t=arguments[0],e=arguments[1];this._pt[0].setCoordinate(t),this._pt[1].setCoordinate(e),this._distance=t.distance(e),this._isNull=!1}else if(3===arguments.length){var n=arguments[0],i=arguments[1],r=arguments[2];this._pt[0].setCoordinate(n),this._pt[1].setCoordinate(i),this._distance=r,this._isNull=!1}},_i.prototype.getDistance=function(){return this._distance},_i.prototype.setMaximum=function(){if(1===arguments.length){var t=arguments[0];this.setMaximum(t._pt[0],t._pt[1])}else if(2===arguments.length){var e=arguments[0],n=arguments[1];if(this._isNull)return this.initialize(e,n),null;var i=e.distance(n);i>this._distance&&this.initialize(e,n,i)}},_i.prototype.interfaces_=function(){return[]},_i.prototype.getClass=function(){return _i};var mi=function(){};mi.prototype.interfaces_=function(){return[]},mi.prototype.getClass=function(){return mi},mi.computeDistance=function(){if(arguments[2]instanceof _i&&arguments[0]instanceof Kt&&arguments[1]instanceof C)for(var t=arguments[0],e=arguments[1],n=arguments[2],i=t.getCoordinates(),r=new dn,o=0;o<i.length-1;o++){r.setCoordinates(i[o],i[o+1]);var s=r.closestPoint(e);n.setMinimum(s,e)}else if(arguments[2]instanceof _i&&arguments[0]instanceof $t&&arguments[1]instanceof C){var a=arguments[0],u=arguments[1],l=arguments[2];mi.computeDistance(a.getExteriorRing(),u,l);for(var c=0;c<a.getNumInteriorRing();c++)mi.computeDistance(a.getInteriorRingN(c),u,l)}else if(arguments[2]instanceof _i&&arguments[0]instanceof ct&&arguments[1]instanceof C){var p=arguments[0],h=arguments[1],f=arguments[2];if(p instanceof Kt)mi.computeDistance(p,h,f);else if(p instanceof $t)mi.computeDistance(p,h,f);else if(p instanceof zt)for(var g=p,d=0;d<g.getNumGeometries();d++){var y=g.getGeometryN(d);mi.computeDistance(y,h,f)}else f.setMinimum(p.getCoordinate(),h)}else if(arguments[2]instanceof _i&&arguments[0]instanceof dn&&arguments[1]instanceof C){var _=arguments[0],m=arguments[1],v=arguments[2],I=_.closestPoint(m);v.setMinimum(I,m)}};var vi=function(t){this._maxPtDist=new _i,this._inputGeom=t||null},Ii={MaxPointDistanceFilter:{configurable:!0},MaxMidpointDistanceFilter:{configurable:!0}};vi.prototype.computeMaxMidpointDistance=function(t){var e=new xi(this._inputGeom);t.apply(e),this._maxPtDist.setMaximum(e.getMaxPointDistance())},vi.prototype.computeMaxVertexDistance=function(t){var e=new Ei(this._inputGeom);t.apply(e),this._maxPtDist.setMaximum(e.getMaxPointDistance())},vi.prototype.findDistance=function(t){return this.computeMaxVertexDistance(t),this.computeMaxMidpointDistance(t),this._maxPtDist.getDistance()},vi.prototype.getDistancePoints=function(){return this._maxPtDist},vi.prototype.interfaces_=function(){return[]},vi.prototype.getClass=function(){return vi},Ii.MaxPointDistanceFilter.get=function(){return Ei},Ii.MaxMidpointDistanceFilter.get=function(){return xi},Object.defineProperties(vi,Ii);var Ei=function(t){this._maxPtDist=new _i,this._minPtDist=new _i,this._geom=t||null};Ei.prototype.filter=function(t){this._minPtDist.initialize(),mi.computeDistance(this._geom,t,this._minPtDist),this._maxPtDist.setMaximum(this._minPtDist)},Ei.prototype.getMaxPointDistance=function(){return this._maxPtDist},Ei.prototype.interfaces_=function(){return[ft]},Ei.prototype.getClass=function(){return Ei};var xi=function(t){this._maxPtDist=new _i,this._minPtDist=new _i,this._geom=t||null};xi.prototype.filter=function(t,e){if(0===e)return null;var n=t.getCoordinate(e-1),i=t.getCoordinate(e),r=new C((n.x+i.x)/2,(n.y+i.y)/2);this._minPtDist.initialize(),mi.computeDistance(this._geom,r,this._minPtDist),this._maxPtDist.setMaximum(this._minPtDist)},xi.prototype.isDone=function(){return!1},xi.prototype.isGeometryChanged=function(){return!1},xi.prototype.getMaxPointDistance=function(){return this._maxPtDist},xi.prototype.interfaces_=function(){return[Ut]},xi.prototype.getClass=function(){return xi};var Ni=function(t){this._comps=t||null};Ni.prototype.filter=function(t){t instanceof $t&&this._comps.add(t)},Ni.prototype.interfaces_=function(){return[Vt]},Ni.prototype.getClass=function(){return Ni},Ni.getPolygons=function(){if(1===arguments.length){var t=arguments[0];return Ni.getPolygons(t,new Nt)}if(2===arguments.length){var e=arguments[0],n=arguments[1];return e instanceof $t?n.add(e):e instanceof zt&&e.apply(new Ni(n)),n}};var Ci=function(){if(this._lines=null,this._isForcedToLineString=!1,1===arguments.length){var t=arguments[0];this._lines=t}else if(2===arguments.length){var e=arguments[0],n=arguments[1];this._lines=e,this._isForcedToLineString=n}};Ci.prototype.filter=function(t){if(this._isForcedToLineString&&t instanceof ee){var e=t.getFactory().createLineString(t.getCoordinateSequence());return this._lines.add(e),null}t instanceof Kt&&this._lines.add(t)},Ci.prototype.setForceToLineString=function(t){this._isForcedToLineString=t},Ci.prototype.interfaces_=function(){return[lt]},Ci.prototype.getClass=function(){return Ci},Ci.getGeometry=function(){if(1===arguments.length){var t=arguments[0];return t.getFactory().buildGeometry(Ci.getLines(t))}if(2===arguments.length){var e=arguments[0],n=arguments[1];return e.getFactory().buildGeometry(Ci.getLines(e,n))}},Ci.getLines=function(){if(1===arguments.length){var t=arguments[0];return Ci.getLines(t,!1)}if(2===arguments.length){if(T(arguments[0],It)&&T(arguments[1],It)){for(var e=arguments[0],n=arguments[1],i=e.iterator();i.hasNext();){var r=i.next();Ci.getLines(r,n)}return n}if(arguments[0]instanceof ct&&"boolean"==typeof arguments[1]){var o=arguments[0],s=arguments[1],a=new Nt;return o.apply(new Ci(a,s)),a}if(arguments[0]instanceof ct&&T(arguments[1],It)){var u=arguments[0],l=arguments[1];return u instanceof Kt?l.add(u):u.apply(new Ci(l)),l}}else if(3===arguments.length){if("boolean"==typeof arguments[2]&&T(arguments[0],It)&&T(arguments[1],It)){for(var c=arguments[0],p=arguments[1],h=arguments[2],f=c.iterator();f.hasNext();){var g=f.next();Ci.getLines(g,p,h)}return p}if("boolean"==typeof arguments[2]&&arguments[0]instanceof ct&&T(arguments[1],It)){var d=arguments[0],y=arguments[1],_=arguments[2];return d.apply(new Ci(y,_)),y}}};var Si=function(){if(this._boundaryRule=gt.OGC_SFS_BOUNDARY_RULE,this._isIn=null,this._numBoundaries=null,0===arguments.length);else if(1===arguments.length){var t=arguments[0];if(null===t)throw new m("Rule must be non-null");this._boundaryRule=t}};Si.prototype.locateInternal=function(){if(arguments[0]instanceof C&&arguments[1]instanceof $t){var t=arguments[0],e=arguments[1];if(e.isEmpty())return w.EXTERIOR;var n=e.getExteriorRing(),i=this.locateInPolygonRing(t,n);if(i===w.EXTERIOR)return w.EXTERIOR;if(i===w.BOUNDARY)return w.BOUNDARY;for(var r=0;r<e.getNumInteriorRing();r++){var o=e.getInteriorRingN(r),s=this.locateInPolygonRing(t,o);if(s===w.INTERIOR)return w.EXTERIOR;if(s===w.BOUNDARY)return w.BOUNDARY}return w.INTERIOR}if(arguments[0]instanceof C&&arguments[1]instanceof Kt){var a=arguments[0],u=arguments[1];if(!u.getEnvelopeInternal().intersects(a))return w.EXTERIOR;var l=u.getCoordinates();return u.isClosed()||!a.equals(l[0])&&!a.equals(l[l.length-1])?at.isOnLine(a,l)?w.INTERIOR:w.EXTERIOR:w.BOUNDARY}if(arguments[0]instanceof C&&arguments[1]instanceof Qt){var c=arguments[0];return arguments[1].getCoordinate().equals2D(c)?w.INTERIOR:w.EXTERIOR}},Si.prototype.locateInPolygonRing=function(t,e){return e.getEnvelopeInternal().intersects(t)?at.locatePointInRing(t,e.getCoordinates()):w.EXTERIOR},Si.prototype.intersects=function(t,e){return this.locate(t,e)!==w.EXTERIOR},Si.prototype.updateLocationInfo=function(t){t===w.INTERIOR&&(this._isIn=!0),t===w.BOUNDARY&&this._numBoundaries++},Si.prototype.computeLocation=function(t,e){if(e instanceof Qt&&this.updateLocationInfo(this.locateInternal(t,e)),e instanceof Kt)this.updateLocationInfo(this.locateInternal(t,e));else if(e instanceof $t)this.updateLocationInfo(this.locateInternal(t,e));else if(e instanceof Xt)for(var n=e,i=0;i<n.getNumGeometries();i++){var r=n.getGeometryN(i);this.updateLocationInfo(this.locateInternal(t,r))}else if(e instanceof ne)for(var o=e,s=0;s<o.getNumGeometries();s++){var a=o.getGeometryN(s);this.updateLocationInfo(this.locateInternal(t,a))}else if(e instanceof zt)for(var u=new Un(e);u.hasNext();){var l=u.next();l!==e&&this.computeLocation(t,l)}},Si.prototype.locate=function(t,e){return e.isEmpty()?w.EXTERIOR:e instanceof Kt?this.locateInternal(t,e):e instanceof $t?this.locateInternal(t,e):(this._isIn=!1,this._numBoundaries=0,this.computeLocation(t,e),this._boundaryRule.isInBoundary(this._numBoundaries)?w.BOUNDARY:this._numBoundaries>0||this._isIn?w.INTERIOR:w.EXTERIOR)},Si.prototype.interfaces_=function(){return[]},Si.prototype.getClass=function(){return Si};var Li=function t(){if(this._component=null,this._segIndex=null,this._pt=null,2===arguments.length){var e=arguments[0],n=arguments[1];t.call(this,e,t.INSIDE_AREA,n)}else if(3===arguments.length){var i=arguments[0],r=arguments[1],o=arguments[2];this._component=i,this._segIndex=r,this._pt=o}},bi={INSIDE_AREA:{configurable:!0}};Li.prototype.isInsideArea=function(){return this._segIndex===Li.INSIDE_AREA},Li.prototype.getCoordinate=function(){return this._pt},Li.prototype.getGeometryComponent=function(){return this._component},Li.prototype.getSegmentIndex=function(){return this._segIndex},Li.prototype.interfaces_=function(){return[]},Li.prototype.getClass=function(){return Li},bi.INSIDE_AREA.get=function(){return-1},Object.defineProperties(Li,bi);var wi=function(t){this._pts=t||null};wi.prototype.filter=function(t){t instanceof Qt&&this._pts.add(t)},wi.prototype.interfaces_=function(){return[Vt]},wi.prototype.getClass=function(){return wi},wi.getPoints=function(){if(1===arguments.length){var t=arguments[0];return t instanceof Qt?$e.singletonList(t):wi.getPoints(t,new Nt)}if(2===arguments.length){var e=arguments[0],n=arguments[1];return e instanceof Qt?n.add(e):e instanceof zt&&e.apply(new wi(n)),n}};var Oi=function(){this._locations=null;var t=arguments[0];this._locations=t};Oi.prototype.filter=function(t){(t instanceof Qt||t instanceof Kt||t instanceof $t)&&this._locations.add(new Li(t,0,t.getCoordinate()))},Oi.prototype.interfaces_=function(){return[Vt]},Oi.prototype.getClass=function(){return Oi},Oi.getLocations=function(t){var e=new Nt;return t.apply(new Oi(e)),e};var Ti=function(){if(this._geom=null,this._terminateDistance=0,this._ptLocator=new Si,this._minDistanceLocation=null,this._minDistance=v.MAX_VALUE,2===arguments.length){var t=arguments[0],e=arguments[1];this._geom=[t,e],this._terminateDistance=0}else if(3===arguments.length){var n=arguments[0],i=arguments[1],r=arguments[2];this._geom=new Array(2).fill(null),this._geom[0]=n,this._geom[1]=i,this._terminateDistance=r}};Ti.prototype.computeContainmentDistance=function(){if(0===arguments.length){var t=new Array(2).fill(null);if(this.computeContainmentDistance(0,t),this._minDistance<=this._terminateDistance)return null;this.computeContainmentDistance(1,t)}else if(2===arguments.length){var e=arguments[0],n=arguments[1],i=1-e,r=Ni.getPolygons(this._geom[e]);if(r.size()>0){var o=Oi.getLocations(this._geom[i]);if(this.computeContainmentDistance(o,r,n),this._minDistance<=this._terminateDistance)return this._minDistanceLocation[i]=n[0],this._minDistanceLocation[e]=n[1],null}}else if(3===arguments.length)if(arguments[2]instanceof Array&&T(arguments[0],xt)&&T(arguments[1],xt)){for(var s=arguments[0],a=arguments[1],u=arguments[2],l=0;l<s.size();l++)for(var c=s.get(l),p=0;p<a.size();p++)if(this.computeContainmentDistance(c,a.get(p),u),this._minDistance<=this._terminateDistance)return null}else if(arguments[2]instanceof Array&&arguments[0]instanceof Li&&arguments[1]instanceof $t){var h=arguments[0],f=arguments[1],g=arguments[2],d=h.getCoordinate();if(w.EXTERIOR!==this._ptLocator.locate(d,f))return this._minDistance=0,g[0]=h,g[1]=new Li(f,d),null}},Ti.prototype.computeMinDistanceLinesPoints=function(t,e,n){for(var i=0;i<t.size();i++)for(var r=t.get(i),o=0;o<e.size();o++){var s=e.get(o);if(this.computeMinDistance(r,s,n),this._minDistance<=this._terminateDistance)return null}},Ti.prototype.computeFacetDistance=function(){var t=new Array(2).fill(null),e=Ci.getLines(this._geom[0]),n=Ci.getLines(this._geom[1]),i=wi.getPoints(this._geom[0]),r=wi.getPoints(this._geom[1]);return this.computeMinDistanceLines(e,n,t),this.updateMinDistance(t,!1),this._minDistance<=this._terminateDistance?null:(t[0]=null,t[1]=null,this.computeMinDistanceLinesPoints(e,r,t),this.updateMinDistance(t,!1),this._minDistance<=this._terminateDistance?null:(t[0]=null,t[1]=null,this.computeMinDistanceLinesPoints(n,i,t),this.updateMinDistance(t,!0),this._minDistance<=this._terminateDistance?null:(t[0]=null,t[1]=null,this.computeMinDistancePoints(i,r,t),void this.updateMinDistance(t,!1))))},Ti.prototype.nearestLocations=function(){return this.computeMinDistance(),this._minDistanceLocation},Ti.prototype.updateMinDistance=function(t,e){if(null===t[0])return null;e?(this._minDistanceLocation[0]=t[1],this._minDistanceLocation[1]=t[0]):(this._minDistanceLocation[0]=t[0],this._minDistanceLocation[1]=t[1])},Ti.prototype.nearestPoints=function(){this.computeMinDistance();return[this._minDistanceLocation[0].getCoordinate(),this._minDistanceLocation[1].getCoordinate()]},Ti.prototype.computeMinDistance=function(){if(0===arguments.length){if(null!==this._minDistanceLocation)return null;if(this._minDistanceLocation=new Array(2).fill(null),this.computeContainmentDistance(),this._minDistance<=this._terminateDistance)return null;this.computeFacetDistance()}else if(3===arguments.length)if(arguments[2]instanceof Array&&arguments[0]instanceof Kt&&arguments[1]instanceof Qt){var t=arguments[0],e=arguments[1],n=arguments[2];if(t.getEnvelopeInternal().distance(e.getEnvelopeInternal())>this._minDistance)return null;for(var i=t.getCoordinates(),r=e.getCoordinate(),o=0;o<i.length-1;o++){var s=at.distancePointLine(r,i[o],i[o+1]);if(s<this._minDistance){this._minDistance=s;var a=new dn(i[o],i[o+1]).closestPoint(r);n[0]=new Li(t,o,a),n[1]=new Li(e,0,r)}if(this._minDistance<=this._terminateDistance)return null}}else if(arguments[2]instanceof Array&&arguments[0]instanceof Kt&&arguments[1]instanceof Kt){var u=arguments[0],l=arguments[1],c=arguments[2];if(u.getEnvelopeInternal().distance(l.getEnvelopeInternal())>this._minDistance)return null;for(var p=u.getCoordinates(),h=l.getCoordinates(),f=0;f<p.length-1;f++)for(var g=0;g<h.length-1;g++){var d=at.distanceLineLine(p[f],p[f+1],h[g],h[g+1]);if(d<this._minDistance){this._minDistance=d;var y=new dn(p[f],p[f+1]),_=new dn(h[g],h[g+1]),m=y.closestPoints(_);c[0]=new Li(u,f,m[0]),c[1]=new Li(l,g,m[1])}if(this._minDistance<=this._terminateDistance)return null}}},Ti.prototype.computeMinDistancePoints=function(t,e,n){for(var i=0;i<t.size();i++)for(var r=t.get(i),o=0;o<e.size();o++){var s=e.get(o),a=r.getCoordinate().distance(s.getCoordinate());if(a<this._minDistance&&(this._minDistance=a,n[0]=new Li(r,0,r.getCoordinate()),n[1]=new Li(s,0,s.getCoordinate())),this._minDistance<=this._terminateDistance)return null}},Ti.prototype.distance=function(){if(null===this._geom[0]||null===this._geom[1])throw new m("null geometries are not supported");return this._geom[0].isEmpty()||this._geom[1].isEmpty()?0:(this.computeMinDistance(),this._minDistance)},Ti.prototype.computeMinDistanceLines=function(t,e,n){for(var i=0;i<t.size();i++)for(var r=t.get(i),o=0;o<e.size();o++){var s=e.get(o);if(this.computeMinDistance(r,s,n),this._minDistance<=this._terminateDistance)return null}},Ti.prototype.interfaces_=function(){return[]},Ti.prototype.getClass=function(){return Ti},Ti.distance=function(t,e){return new Ti(t,e).distance()},Ti.isWithinDistance=function(t,e,n){return new Ti(t,e,n).distance()<=n},Ti.nearestPoints=function(t,e){return new Ti(t,e).nearestPoints()};var Ri=function(){this._pt=[new C,new C],this._distance=v.NaN,this._isNull=!0};Ri.prototype.getCoordinates=function(){return this._pt},Ri.prototype.getCoordinate=function(t){return this._pt[t]},Ri.prototype.setMinimum=function(){if(1===arguments.length){var t=arguments[0];this.setMinimum(t._pt[0],t._pt[1])}else if(2===arguments.length){var e=arguments[0],n=arguments[1];if(this._isNull)return this.initialize(e,n),null;var i=e.distance(n);i<this._distance&&this.initialize(e,n,i)}},Ri.prototype.initialize=function(){if(0===arguments.length)this._isNull=!0;else if(2===arguments.length){var t=arguments[0],e=arguments[1];this._pt[0].setCoordinate(t),this._pt[1].setCoordinate(e),this._distance=t.distance(e),this._isNull=!1}else if(3===arguments.length){var n=arguments[0],i=arguments[1],r=arguments[2];this._pt[0].setCoordinate(n),this._pt[1].setCoordinate(i),this._distance=r,this._isNull=!1}},Ri.prototype.toString=function(){return Z.toLineString(this._pt[0],this._pt[1])},Ri.prototype.getDistance=function(){return this._distance},Ri.prototype.setMaximum=function(){if(1===arguments.length){var t=arguments[0];this.setMaximum(t._pt[0],t._pt[1])}else if(2===arguments.length){var e=arguments[0],n=arguments[1];if(this._isNull)return this.initialize(e,n),null;var i=e.distance(n);i>this._distance&&this.initialize(e,n,i)}},Ri.prototype.interfaces_=function(){return[]},Ri.prototype.getClass=function(){return Ri};var Pi=function(){};Pi.prototype.interfaces_=function(){return[]},Pi.prototype.getClass=function(){return Pi},Pi.computeDistance=function(){if(arguments[2]instanceof Ri&&arguments[0]instanceof Kt&&arguments[1]instanceof C)for(var t=arguments[0],e=arguments[1],n=arguments[2],i=new dn,r=t.getCoordinates(),o=0;o<r.length-1;o++){i.setCoordinates(r[o],r[o+1]);var s=i.closestPoint(e);n.setMinimum(s,e)}else if(arguments[2]instanceof Ri&&arguments[0]instanceof $t&&arguments[1]instanceof C){var a=arguments[0],u=arguments[1],l=arguments[2];Pi.computeDistance(a.getExteriorRing(),u,l);for(var c=0;c<a.getNumInteriorRing();c++)Pi.computeDistance(a.getInteriorRingN(c),u,l)}else if(arguments[2]instanceof Ri&&arguments[0]instanceof ct&&arguments[1]instanceof C){var p=arguments[0],h=arguments[1],f=arguments[2];if(p instanceof Kt)Pi.computeDistance(p,h,f);else if(p instanceof $t)Pi.computeDistance(p,h,f);else if(p instanceof zt)for(var g=p,d=0;d<g.getNumGeometries();d++){var y=g.getGeometryN(d);Pi.computeDistance(y,h,f)}else f.setMinimum(p.getCoordinate(),h)}else if(arguments[2]instanceof Ri&&arguments[0]instanceof dn&&arguments[1]instanceof C){var _=arguments[0],m=arguments[1],v=arguments[2],I=_.closestPoint(m);v.setMinimum(I,m)}};var Di=function(){this._g0=null,this._g1=null,this._ptDist=new Ri,this._densifyFrac=0;var t=arguments[0],e=arguments[1];this._g0=t,this._g1=e},Mi={MaxPointDistanceFilter:{configurable:!0},MaxDensifiedByFractionDistanceFilter:{configurable:!0}};Di.prototype.getCoordinates=function(){return this._ptDist.getCoordinates()},Di.prototype.setDensifyFraction=function(t){if(t>1||t<=0)throw new m("Fraction is not in range (0.0 - 1.0]");this._densifyFrac=t},Di.prototype.compute=function(t,e){this.computeOrientedDistance(t,e,this._ptDist),this.computeOrientedDistance(e,t,this._ptDist)},Di.prototype.distance=function(){return this.compute(this._g0,this._g1),this._ptDist.getDistance()},Di.prototype.computeOrientedDistance=function(t,e,n){var i=new Ai(e);if(t.apply(i),n.setMaximum(i.getMaxPointDistance()),this._densifyFrac>0){var r=new Fi(e,this._densifyFrac);t.apply(r),n.setMaximum(r.getMaxPointDistance())}},Di.prototype.orientedDistance=function(){return this.computeOrientedDistance(this._g0,this._g1,this._ptDist),this._ptDist.getDistance()},Di.prototype.interfaces_=function(){return[]},Di.prototype.getClass=function(){return Di},Di.distance=function(){if(2===arguments.length){var t=arguments[0],e=arguments[1];return new Di(t,e).distance()}if(3===arguments.length){var n=arguments[0],i=arguments[1],r=arguments[2],o=new Di(n,i);return o.setDensifyFraction(r),o.distance()}},Mi.MaxPointDistanceFilter.get=function(){return Ai},Mi.MaxDensifiedByFractionDistanceFilter.get=function(){return Fi},Object.defineProperties(Di,Mi);var Ai=function(){this._maxPtDist=new Ri,this._minPtDist=new Ri,this._euclideanDist=new Pi,this._geom=null;var t=arguments[0];this._geom=t};Ai.prototype.filter=function(t){this._minPtDist.initialize(),Pi.computeDistance(this._geom,t,this._minPtDist),this._maxPtDist.setMaximum(this._minPtDist)},Ai.prototype.getMaxPointDistance=function(){return this._maxPtDist},Ai.prototype.interfaces_=function(){return[ft]},Ai.prototype.getClass=function(){return Ai};var Fi=function(){this._maxPtDist=new Ri,this._minPtDist=new Ri,this._geom=null,this._numSubSegs=0;var t=arguments[0],e=arguments[1];this._geom=t,this._numSubSegs=Math.trunc(Math.round(1/e))};Fi.prototype.filter=function(t,e){if(0===e)return null;for(var n=t.getCoordinate(e-1),i=t.getCoordinate(e),r=(i.x-n.x)/this._numSubSegs,o=(i.y-n.y)/this._numSubSegs,s=0;s<this._numSubSegs;s++){var a=n.x+s*r,u=n.y+s*o,l=new C(a,u);this._minPtDist.initialize(),Pi.computeDistance(this._geom,l,this._minPtDist),this._maxPtDist.setMaximum(this._minPtDist)}},Fi.prototype.isDone=function(){return!1},Fi.prototype.isGeometryChanged=function(){return!1},Fi.prototype.getMaxPointDistance=function(){return this._maxPtDist},Fi.prototype.interfaces_=function(){return[Ut]},Fi.prototype.getClass=function(){return Fi};var Gi=function(t,e,n){this._minValidDistance=null,this._maxValidDistance=null,this._minDistanceFound=null,this._maxDistanceFound=null,this._isValid=!0,this._errMsg=null,this._errorLocation=null,this._errorIndicator=null,this._input=t||null,this._bufDistance=e||null,this._result=n||null},qi={VERBOSE:{configurable:!0},MAX_DISTANCE_DIFF_FRAC:{configurable:!0}};Gi.prototype.checkMaximumDistance=function(t,e,n){var i=new Di(e,t);if(i.setDensifyFraction(.25),this._maxDistanceFound=i.orientedDistance(),this._maxDistanceFound>n){this._isValid=!1;var r=i.getCoordinates();this._errorLocation=r[1],this._errorIndicator=t.getFactory().createLineString(r),this._errMsg="Distance between buffer curve and input is too large ("+this._maxDistanceFound+" at "+Z.toLineString(r[0],r[1])+")"}},Gi.prototype.isValid=function(){var t=Math.abs(this._bufDistance),e=Gi.MAX_DISTANCE_DIFF_FRAC*t;return this._minValidDistance=t-e,this._maxValidDistance=t+e,!(!this._input.isEmpty()&&!this._result.isEmpty())||(this._bufDistance>0?this.checkPositiveValid():this.checkNegativeValid(),Gi.VERBOSE&&Y.out.println("Min Dist= "+this._minDistanceFound+"  err= "+(1-this._minDistanceFound/this._bufDistance)+"  Max Dist= "+this._maxDistanceFound+"  err= "+(this._maxDistanceFound/this._bufDistance-1)),this._isValid)},Gi.prototype.checkNegativeValid=function(){if(!(this._input instanceof $t||this._input instanceof ne||this._input instanceof zt))return null;var t=this.getPolygonLines(this._input);if(this.checkMinimumDistance(t,this._result,this._minValidDistance),!this._isValid)return null;this.checkMaximumDistance(t,this._result,this._maxValidDistance)},Gi.prototype.getErrorIndicator=function(){return this._errorIndicator},Gi.prototype.checkMinimumDistance=function(t,e,n){var i=new Ti(t,e,n);if(this._minDistanceFound=i.distance(),this._minDistanceFound<n){this._isValid=!1;var r=i.nearestPoints();this._errorLocation=i.nearestPoints()[1],this._errorIndicator=t.getFactory().createLineString(r),this._errMsg="Distance between buffer curve and input is too small ("+this._minDistanceFound+" at "+Z.toLineString(r[0],r[1])+" )"}},Gi.prototype.checkPositiveValid=function(){var t=this._result.getBoundary();if(this.checkMinimumDistance(this._input,t,this._minValidDistance),!this._isValid)return null;this.checkMaximumDistance(this._input,t,this._maxValidDistance)},Gi.prototype.getErrorLocation=function(){return this._errorLocation},Gi.prototype.getPolygonLines=function(t){for(var e=new Nt,n=new Ci(e),i=Ni.getPolygons(t).iterator();i.hasNext();){i.next().apply(n)}return t.getFactory().buildGeometry(e)},Gi.prototype.getErrorMessage=function(){return this._errMsg},Gi.prototype.interfaces_=function(){return[]},Gi.prototype.getClass=function(){return Gi},qi.VERBOSE.get=function(){return!1},qi.MAX_DISTANCE_DIFF_FRAC.get=function(){return.012},Object.defineProperties(Gi,qi);var Bi=function(t,e,n){this._isValid=!0,this._errorMsg=null,this._errorLocation=null,this._errorIndicator=null,this._input=t||null,this._distance=e||null,this._result=n||null},Vi={VERBOSE:{configurable:!0},MAX_ENV_DIFF_FRAC:{configurable:!0}};Bi.prototype.isValid=function(){return this.checkPolygonal(),this._isValid?(this.checkExpectedEmpty(),this._isValid?(this.checkEnvelope(),this._isValid?(this.checkArea(),this._isValid?(this.checkDistance(),this._isValid):this._isValid):this._isValid):this._isValid):this._isValid},Bi.prototype.checkEnvelope=function(){if(this._distance<0)return null;var t=this._distance*Bi.MAX_ENV_DIFF_FRAC;0===t&&(t=.001);var e=new j(this._input.getEnvelopeInternal());e.expandBy(this._distance);var n=new j(this._result.getEnvelopeInternal());n.expandBy(t),n.contains(e)||(this._isValid=!1,this._errorMsg="Buffer envelope is incorrect",this._errorIndicator=this._input.getFactory().toGeometry(n)),this.report("Envelope")},Bi.prototype.checkDistance=function(){var t=new Gi(this._input,this._distance,this._result);t.isValid()||(this._isValid=!1,this._errorMsg=t.getErrorMessage(),this._errorLocation=t.getErrorLocation(),this._errorIndicator=t.getErrorIndicator()),this.report("Distance")},Bi.prototype.checkArea=function(){var t=this._input.getArea(),e=this._result.getArea();this._distance>0&&t>e&&(this._isValid=!1,this._errorMsg="Area of positive buffer is smaller than input",this._errorIndicator=this._result),this._distance<0&&t<e&&(this._isValid=!1,this._errorMsg="Area of negative buffer is larger than input",this._errorIndicator=this._result),this.report("Area")},Bi.prototype.checkPolygonal=function(){this._result instanceof $t||this._result instanceof ne||(this._isValid=!1),this._errorMsg="Result is not polygonal",this._errorIndicator=this._result,this.report("Polygonal")},Bi.prototype.getErrorIndicator=function(){return this._errorIndicator},Bi.prototype.getErrorLocation=function(){return this._errorLocation},Bi.prototype.checkExpectedEmpty=function(){return this._input.getDimension()>=2?null:this._distance>0?null:(this._result.isEmpty()||(this._isValid=!1,this._errorMsg="Result is non-empty",this._errorIndicator=this._result),void this.report("ExpectedEmpty"))},Bi.prototype.report=function(t){if(!Bi.VERBOSE)return null;Y.out.println("Check "+t+": "+(this._isValid?"passed":"FAILED"))},Bi.prototype.getErrorMessage=function(){return this._errorMsg},Bi.prototype.interfaces_=function(){return[]},Bi.prototype.getClass=function(){return Bi},Bi.isValidMsg=function(t,e,n){var i=new Bi(t,e,n);return i.isValid()?null:i.getErrorMessage()},Bi.isValid=function(t,e,n){return!!new Bi(t,e,n).isValid()},Vi.VERBOSE.get=function(){return!1},Vi.MAX_ENV_DIFF_FRAC.get=function(){return.012},Object.defineProperties(Bi,Vi);var Ui=function(){this._pts=null,this._data=null;var t=arguments[0],e=arguments[1];this._pts=t,this._data=e};Ui.prototype.getCoordinates=function(){return this._pts},Ui.prototype.size=function(){return this._pts.length},Ui.prototype.getCoordinate=function(t){return this._pts[t]},Ui.prototype.isClosed=function(){return this._pts[0].equals(this._pts[this._pts.length-1])},Ui.prototype.getSegmentOctant=function(t){return t===this._pts.length-1?-1:pn.octant(this.getCoordinate(t),this.getCoordinate(t+1))},Ui.prototype.setData=function(t){this._data=t},Ui.prototype.getData=function(){return this._data},Ui.prototype.toString=function(){return Z.toLineString(new ue(this._pts))},Ui.prototype.interfaces_=function(){return[hn]},Ui.prototype.getClass=function(){return Ui};var zi=function(){this._findAllIntersections=!1,this._isCheckEndSegmentsOnly=!1,this._li=null,this._interiorIntersection=null,this._intSegments=null,this._intersections=new Nt,this._intersectionCount=0,this._keepIntersections=!0;var t=arguments[0];this._li=t,this._interiorIntersection=null};zi.prototype.getInteriorIntersection=function(){return this._interiorIntersection},zi.prototype.setCheckEndSegmentsOnly=function(t){this._isCheckEndSegmentsOnly=t},zi.prototype.getIntersectionSegments=function(){return this._intSegments},zi.prototype.count=function(){return this._intersectionCount},zi.prototype.getIntersections=function(){return this._intersections},zi.prototype.setFindAllIntersections=function(t){this._findAllIntersections=t},zi.prototype.setKeepIntersections=function(t){this._keepIntersections=t},zi.prototype.processIntersections=function(t,e,n,i){if(!this._findAllIntersections&&this.hasIntersection())return null;if(t===n&&e===i)return null;if(this._isCheckEndSegmentsOnly){if(!(this.isEndSegment(t,e)||this.isEndSegment(n,i)))return null}var r=t.getCoordinates()[e],o=t.getCoordinates()[e+1],s=n.getCoordinates()[i],a=n.getCoordinates()[i+1];this._li.computeIntersection(r,o,s,a),this._li.hasIntersection()&&this._li.isInteriorIntersection()&&(this._intSegments=new Array(4).fill(null),this._intSegments[0]=r,this._intSegments[1]=o,this._intSegments[2]=s,this._intSegments[3]=a,this._interiorIntersection=this._li.getIntersection(0),this._keepIntersections&&this._intersections.add(this._interiorIntersection),this._intersectionCount++)},zi.prototype.isEndSegment=function(t,e){return 0===e||e>=t.size()-2},zi.prototype.hasIntersection=function(){return null!==this._interiorIntersection},zi.prototype.isDone=function(){return!this._findAllIntersections&&null!==this._interiorIntersection},zi.prototype.interfaces_=function(){return[Wn]},zi.prototype.getClass=function(){return zi},zi.createAllIntersectionsFinder=function(t){var e=new zi(t);return e.setFindAllIntersections(!0),e},zi.createAnyIntersectionFinder=function(t){return new zi(t)},zi.createIntersectionCounter=function(t){var e=new zi(t);return e.setFindAllIntersections(!0),e.setKeepIntersections(!1),e};var Xi=function(){this._li=new rt,this._segStrings=null,this._findAllIntersections=!1,this._segInt=null,this._isValid=!0;var t=arguments[0];this._segStrings=t};Xi.prototype.execute=function(){if(null!==this._segInt)return null;this.checkInteriorIntersections()},Xi.prototype.getIntersections=function(){return this._segInt.getIntersections()},Xi.prototype.isValid=function(){return this.execute(),this._isValid},Xi.prototype.setFindAllIntersections=function(t){this._findAllIntersections=t},Xi.prototype.checkInteriorIntersections=function(){this._isValid=!0,this._segInt=new zi(this._li),this._segInt.setFindAllIntersections(this._findAllIntersections);var t=new xn;if(t.setSegmentIntersector(this._segInt),t.computeNodes(this._segStrings),this._segInt.hasIntersection())return this._isValid=!1,null},Xi.prototype.checkValid=function(){if(this.execute(),!this._isValid)throw new we(this.getErrorMessage(),this._segInt.getInteriorIntersection())},Xi.prototype.getErrorMessage=function(){if(this._isValid)return"no intersections found";var t=this._segInt.getIntersectionSegments();return"found non-noded intersection between "+Z.toLineString(t[0],t[1])+" and "+Z.toLineString(t[2],t[3])},Xi.prototype.interfaces_=function(){return[]},Xi.prototype.getClass=function(){return Xi},Xi.computeIntersections=function(t){var e=new Xi(t);return e.setFindAllIntersections(!0),e.isValid(),e.getIntersections()};var Yi=function t(){this._nv=null;var e=arguments[0];this._nv=new Xi(t.toSegmentStrings(e))};Yi.prototype.checkValid=function(){this._nv.checkValid()},Yi.prototype.interfaces_=function(){return[]},Yi.prototype.getClass=function(){return Yi},Yi.toSegmentStrings=function(t){for(var e=new Nt,n=t.iterator();n.hasNext();){var i=n.next();e.add(new Ui(i.getCoordinates(),i))}return e},Yi.checkValid=function(t){new Yi(t).checkValid()};var ki=function(t){this._mapOp=t};ki.prototype.map=function(t){for(var e=new Nt,n=0;n<t.getNumGeometries();n++){var i=this._mapOp.map(t.getGeometryN(n));i.isEmpty()||e.add(i)}return t.getFactory().createGeometryCollection(_e.toGeometryArray(e))},ki.prototype.interfaces_=function(){return[]},ki.prototype.getClass=function(){return ki},ki.map=function(t,e){return new ki(e).map(t)};var ji=function(){this._op=null,this._geometryFactory=null,this._ptLocator=null,this._lineEdgesList=new Nt,this._resultLineList=new Nt;var t=arguments[0],e=arguments[1],n=arguments[2];this._op=t,this._geometryFactory=e,this._ptLocator=n};ji.prototype.collectLines=function(t){for(var e=this._op.getGraph().getEdgeEnds().iterator();e.hasNext();){var n=e.next();this.collectLineEdge(n,t,this._lineEdgesList),this.collectBoundaryTouchEdge(n,t,this._lineEdgesList)}},ji.prototype.labelIsolatedLine=function(t,e){var n=this._ptLocator.locate(t.getCoordinate(),this._op.getArgGeometry(e));t.getLabel().setLocation(e,n)},ji.prototype.build=function(t){return this.findCoveredLineEdges(),this.collectLines(t),this.buildLines(t),this._resultLineList},ji.prototype.collectLineEdge=function(t,e,n){var i=t.getLabel(),r=t.getEdge();t.isLineEdge()&&(t.isVisited()||!Lr.isResultOfOp(i,e)||r.isCovered()||(n.add(r),t.setVisitedEdge(!0)))},ji.prototype.findCoveredLineEdges=function(){for(var t=this._op.getGraph().getNodes().iterator();t.hasNext();){t.next().getEdges().findCoveredLineEdges()}for(var e=this._op.getGraph().getEdgeEnds().iterator();e.hasNext();){var n=e.next(),i=n.getEdge();if(n.isLineEdge()&&!i.isCoveredSet()){var r=this._op.isCoveredByA(n.getCoordinate());i.setCovered(r)}}},ji.prototype.labelIsolatedLines=function(t){for(var e=t.iterator();e.hasNext();){var n=e.next(),i=n.getLabel();n.isIsolated()&&(i.isNull(0)?this.labelIsolatedLine(n,0):this.labelIsolatedLine(n,1))}},ji.prototype.buildLines=function(t){for(var e=this._lineEdgesList.iterator();e.hasNext();){var n=e.next(),i=this._geometryFactory.createLineString(n.getCoordinates());this._resultLineList.add(i),n.setInResult(!0)}},ji.prototype.collectBoundaryTouchEdge=function(t,e,n){var i=t.getLabel();return t.isLineEdge()?null:t.isVisited()?null:t.isInteriorAreaEdge()?null:t.getEdge().isInResult()?null:(et.isTrue(!(t.isInResult()||t.getSym().isInResult())||!t.getEdge().isInResult()),void(Lr.isResultOfOp(i,e)&&e===Lr.INTERSECTION&&(n.add(t.getEdge()),t.setVisitedEdge(!0))))},ji.prototype.interfaces_=function(){return[]},ji.prototype.getClass=function(){return ji};var Hi=function(){this._op=null,this._geometryFactory=null,this._resultPointList=new Nt;var t=arguments[0],e=arguments[1];this._op=t,this._geometryFactory=e};Hi.prototype.filterCoveredNodeToPoint=function(t){var e=t.getCoordinate();if(!this._op.isCoveredByLA(e)){var n=this._geometryFactory.createPoint(e);this._resultPointList.add(n)}},Hi.prototype.extractNonCoveredResultNodes=function(t){for(var e=this._op.getGraph().getNodes().iterator();e.hasNext();){var n=e.next();if(!n.isInResult()&&(!n.isIncidentEdgeInResult()&&(0===n.getEdges().getDegree()||t===Lr.INTERSECTION))){var i=n.getLabel();Lr.isResultOfOp(i,t)&&this.filterCoveredNodeToPoint(n)}}},Hi.prototype.build=function(t){return this.extractNonCoveredResultNodes(t),this._resultPointList},Hi.prototype.interfaces_=function(){return[]},Hi.prototype.getClass=function(){return Hi};var Wi=function(){this._inputGeom=null,this._factory=null,this._pruneEmptyGeometry=!0,this._preserveGeometryCollectionType=!0,this._preserveCollections=!1,this._preserveType=!1};Wi.prototype.transformPoint=function(t,e){return this._factory.createPoint(this.transformCoordinates(t.getCoordinateSequence(),t))},Wi.prototype.transformPolygon=function(t,e){var n=!0,i=this.transformLinearRing(t.getExteriorRing(),t);null!==i&&i instanceof ee&&!i.isEmpty()||(n=!1);for(var r=new Nt,o=0;o<t.getNumInteriorRing();o++){var s=this.transformLinearRing(t.getInteriorRingN(o),t);null===s||s.isEmpty()||(s instanceof ee||(n=!1),r.add(s))}if(n)return this._factory.createPolygon(i,r.toArray([]));var a=new Nt;return null!==i&&a.add(i),a.addAll(r),this._factory.buildGeometry(a)},Wi.prototype.createCoordinateSequence=function(t){return this._factory.getCoordinateSequenceFactory().create(t)},Wi.prototype.getInputGeometry=function(){return this._inputGeom},Wi.prototype.transformMultiLineString=function(t,e){for(var n=new Nt,i=0;i<t.getNumGeometries();i++){var r=this.transformLineString(t.getGeometryN(i),t);null!==r&&(r.isEmpty()||n.add(r))}return this._factory.buildGeometry(n)},Wi.prototype.transformCoordinates=function(t,e){return this.copy(t)},Wi.prototype.transformLineString=function(t,e){return this._factory.createLineString(this.transformCoordinates(t.getCoordinateSequence(),t))},Wi.prototype.transformMultiPoint=function(t,e){for(var n=new Nt,i=0;i<t.getNumGeometries();i++){var r=this.transformPoint(t.getGeometryN(i),t);null!==r&&(r.isEmpty()||n.add(r))}return this._factory.buildGeometry(n)},Wi.prototype.transformMultiPolygon=function(t,e){for(var n=new Nt,i=0;i<t.getNumGeometries();i++){var r=this.transformPolygon(t.getGeometryN(i),t);null!==r&&(r.isEmpty()||n.add(r))}return this._factory.buildGeometry(n)},Wi.prototype.copy=function(t){return t.copy()},Wi.prototype.transformGeometryCollection=function(t,e){for(var n=new Nt,i=0;i<t.getNumGeometries();i++){var r=this.transform(t.getGeometryN(i));null!==r&&(this._pruneEmptyGeometry&&r.isEmpty()||n.add(r))}return this._preserveGeometryCollectionType?this._factory.createGeometryCollection(_e.toGeometryArray(n)):this._factory.buildGeometry(n)},Wi.prototype.transform=function(t){if(this._inputGeom=t,this._factory=t.getFactory(),t instanceof Qt)return this.transformPoint(t,null);if(t instanceof te)return this.transformMultiPoint(t,null);if(t instanceof ee)return this.transformLinearRing(t,null);if(t instanceof Kt)return this.transformLineString(t,null);if(t instanceof Xt)return this.transformMultiLineString(t,null);if(t instanceof $t)return this.transformPolygon(t,null);if(t instanceof ne)return this.transformMultiPolygon(t,null);if(t instanceof zt)return this.transformGeometryCollection(t,null);throw new m("Unknown Geometry subtype: "+t.getClass().getName())},Wi.prototype.transformLinearRing=function(t,e){var n=this.transformCoordinates(t.getCoordinateSequence(),t);if(null===n)return this._factory.createLinearRing(null);var i=n.size();return i>0&&i<4&&!this._preserveType?this._factory.createLineString(n):this._factory.createLinearRing(n)},Wi.prototype.interfaces_=function(){return[]},Wi.prototype.getClass=function(){return Wi};var Ki=function t(){if(this._snapTolerance=0,this._srcPts=null,this._seg=new dn,this._allowSnappingToSourceVertices=!1,this._isClosed=!1,arguments[0]instanceof Kt&&"number"==typeof arguments[1]){var e=arguments[0],n=arguments[1];t.call(this,e.getCoordinates(),n)}else if(arguments[0]instanceof Array&&"number"==typeof arguments[1]){var i=arguments[0],r=arguments[1];this._srcPts=i,this._isClosed=t.isClosed(i),this._snapTolerance=r}};Ki.prototype.snapVertices=function(t,e){for(var n=this._isClosed?t.size()-1:t.size(),i=0;i<n;i++){var r=t.get(i),o=this.findSnapForVertex(r,e);null!==o&&(t.set(i,new C(o)),0===i&&this._isClosed&&t.set(t.size()-1,new C(o)))}},Ki.prototype.findSnapForVertex=function(t,e){for(var n=0;n<e.length;n++){if(t.equals2D(e[n]))return null;if(t.distance(e[n])<this._snapTolerance)return e[n]}return null},Ki.prototype.snapTo=function(t){var e=new St(this._srcPts);this.snapVertices(e,t),this.snapSegments(e,t);return e.toCoordinateArray()},Ki.prototype.snapSegments=function(t,e){if(0===e.length)return null;var n=e.length;e[0].equals2D(e[e.length-1])&&(n=e.length-1);for(var i=0;i<n;i++){var r=e[i],o=this.findSegmentIndexToSnap(r,t);o>=0&&t.add(o+1,new C(r),!1)}},Ki.prototype.findSegmentIndexToSnap=function(t,e){for(var n=v.MAX_VALUE,i=-1,r=0;r<e.size()-1;r++){if(this._seg.p0=e.get(r),this._seg.p1=e.get(r+1),this._seg.p0.equals2D(t)||this._seg.p1.equals2D(t)){if(this._allowSnappingToSourceVertices)continue;return-1}var o=this._seg.distance(t);o<this._snapTolerance&&o<n&&(n=o,i=r)}return i},Ki.prototype.setAllowSnappingToSourceVertices=function(t){this._allowSnappingToSourceVertices=t},Ki.prototype.interfaces_=function(){return[]},Ki.prototype.getClass=function(){return Ki},Ki.isClosed=function(t){return!(t.length<=1)&&t[0].equals2D(t[t.length-1])};var Ji=function(t){this._srcGeom=t||null},Qi={SNAP_PRECISION_FACTOR:{configurable:!0}};Ji.prototype.snapTo=function(t,e){var n=this.extractTargetCoordinates(t);return new Zi(e,n).transform(this._srcGeom)},Ji.prototype.snapToSelf=function(t,e){var n=this.extractTargetCoordinates(this._srcGeom),i=new Zi(t,n,!0).transform(this._srcGeom),r=i;return e&&T(r,Zt)&&(r=i.buffer(0)),r},Ji.prototype.computeSnapTolerance=function(t){return this.computeMinimumSegmentLength(t)/10},Ji.prototype.extractTargetCoordinates=function(t){for(var e=new f,n=t.getCoordinates(),i=0;i<n.length;i++)e.add(n[i]);return e.toArray(new Array(0).fill(null))},Ji.prototype.computeMinimumSegmentLength=function(t){for(var e=v.MAX_VALUE,n=0;n<t.length-1;n++){var i=t[n].distance(t[n+1]);i<e&&(e=i)}return e},Ji.prototype.interfaces_=function(){return[]},Ji.prototype.getClass=function(){return Ji},Ji.snap=function(t,e,n){var i=new Array(2).fill(null),r=new Ji(t);i[0]=r.snapTo(e,n);var o=new Ji(e);return i[1]=o.snapTo(i[0],n),i},Ji.computeOverlaySnapTolerance=function(){if(1===arguments.length){var t=arguments[0],e=Ji.computeSizeBasedSnapTolerance(t),n=t.getPrecisionModel();if(n.getType()===fe.FIXED){var i=1/n.getScale()*2/1.415;i>e&&(e=i)}return e}if(2===arguments.length){var r=arguments[0],o=arguments[1];return Math.min(Ji.computeOverlaySnapTolerance(r),Ji.computeOverlaySnapTolerance(o))}},Ji.computeSizeBasedSnapTolerance=function(t){var e=t.getEnvelopeInternal();return Math.min(e.getHeight(),e.getWidth())*Ji.SNAP_PRECISION_FACTOR},Ji.snapToSelf=function(t,e,n){return new Ji(t).snapToSelf(e,n)},Qi.SNAP_PRECISION_FACTOR.get=function(){return 1e-9},Object.defineProperties(Ji,Qi);var Zi=function(t){function e(e,n,i){t.call(this),this._snapTolerance=e||null,this._snapPts=n||null,this._isSelfSnap=void 0!==i&&i}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.snapLine=function(t,e){var n=new Ki(t,this._snapTolerance);return n.setAllowSnappingToSourceVertices(this._isSelfSnap),n.snapTo(e)},e.prototype.transformCoordinates=function(t,e){var n=t.toCoordinateArray(),i=this.snapLine(n,this._snapPts);return this._factory.getCoordinateSequenceFactory().create(i)},e.prototype.interfaces_=function(){return[]},e.prototype.getClass=function(){return e},e}(Wi),$i=function(){this._isFirst=!0,this._commonMantissaBitsCount=53,this._commonBits=0,this._commonSignExp=null};$i.prototype.getCommon=function(){return v.longBitsToDouble(this._commonBits)},$i.prototype.add=function(t){var e=v.doubleToLongBits(t);if(this._isFirst)return this._commonBits=e,this._commonSignExp=$i.signExpBits(this._commonBits),this._isFirst=!1,null;if($i.signExpBits(e)!==this._commonSignExp)return this._commonBits=0,null;this._commonMantissaBitsCount=$i.numCommonMostSigMantissaBits(this._commonBits,e),this._commonBits=$i.zeroLowerBits(this._commonBits,64-(12+this._commonMantissaBitsCount))},$i.prototype.toString=function(){if(1===arguments.length){var t=arguments[0],e=v.longBitsToDouble(t),n="0000000000000000000000000000000000000000000000000000000000000000"+v.toBinaryString(t),i=n.substring(n.length-64);return i.substring(0,1)+"  "+i.substring(1,12)+"(exp) "+i.substring(12)+" [ "+e+" ]"}},$i.prototype.interfaces_=function(){return[]},$i.prototype.getClass=function(){return $i},$i.getBit=function(t,e){return 0!=(t&1<<e)?1:0},$i.signExpBits=function(t){return t>>52},$i.zeroLowerBits=function(t,e){return t&~((1<<e)-1)},$i.numCommonMostSigMantissaBits=function(t,e){for(var n=0,i=52;i>=0;i--){if($i.getBit(t,i)!==$i.getBit(e,i))return n;n++}return 52};var tr=function(){this._commonCoord=null,this._ccFilter=new nr},er={CommonCoordinateFilter:{configurable:!0},Translater:{configurable:!0}};tr.prototype.addCommonBits=function(t){var e=new ir(this._commonCoord);t.apply(e),t.geometryChanged()},tr.prototype.removeCommonBits=function(t){if(0===this._commonCoord.x&&0===this._commonCoord.y)return t;var e=new C(this._commonCoord);e.x=-e.x,e.y=-e.y;var n=new ir(e);return t.apply(n),t.geometryChanged(),t},tr.prototype.getCommonCoordinate=function(){return this._commonCoord},tr.prototype.add=function(t){t.apply(this._ccFilter),this._commonCoord=this._ccFilter.getCommonCoordinate()},tr.prototype.interfaces_=function(){return[]},tr.prototype.getClass=function(){return tr},er.CommonCoordinateFilter.get=function(){return nr},er.Translater.get=function(){return ir},Object.defineProperties(tr,er);var nr=function(){this._commonBitsX=new $i,this._commonBitsY=new $i};nr.prototype.filter=function(t){this._commonBitsX.add(t.x),this._commonBitsY.add(t.y)},nr.prototype.getCommonCoordinate=function(){return new C(this._commonBitsX.getCommon(),this._commonBitsY.getCommon())},nr.prototype.interfaces_=function(){return[ft]},nr.prototype.getClass=function(){return nr};var ir=function(){this.trans=null;var t=arguments[0];this.trans=t};ir.prototype.filter=function(t,e){var n=t.getOrdinate(e,0)+this.trans.x,i=t.getOrdinate(e,1)+this.trans.y;t.setOrdinate(e,0,n),t.setOrdinate(e,1,i)},ir.prototype.isDone=function(){return!1},ir.prototype.isGeometryChanged=function(){return!0},ir.prototype.interfaces_=function(){return[Ut]},ir.prototype.getClass=function(){return ir};var rr=function(t,e){this._geom=new Array(2).fill(null),this._snapTolerance=null,this._cbr=null,this._geom[0]=t,this._geom[1]=e,this.computeSnapTolerance()};rr.prototype.selfSnap=function(t){return new Ji(t).snapTo(t,this._snapTolerance)},rr.prototype.removeCommonBits=function(t){this._cbr=new tr,this._cbr.add(t[0]),this._cbr.add(t[1]);var e=new Array(2).fill(null);return e[0]=this._cbr.removeCommonBits(t[0].copy()),e[1]=this._cbr.removeCommonBits(t[1].copy()),e},rr.prototype.prepareResult=function(t){return this._cbr.addCommonBits(t),t},rr.prototype.getResultGeometry=function(t){var e=this.snap(this._geom),n=Lr.overlayOp(e[0],e[1],t);return this.prepareResult(n)},rr.prototype.checkValid=function(t){t.isValid()||Y.out.println("Snapped geometry is invalid")},rr.prototype.computeSnapTolerance=function(){this._snapTolerance=Ji.computeOverlaySnapTolerance(this._geom[0],this._geom[1])},rr.prototype.snap=function(t){var e=this.removeCommonBits(t);return Ji.snap(e[0],e[1],this._snapTolerance)},rr.prototype.interfaces_=function(){return[]},rr.prototype.getClass=function(){return rr},rr.overlayOp=function(t,e,n){return new rr(t,e).getResultGeometry(n)},rr.union=function(t,e){return rr.overlayOp(t,e,Lr.UNION)},rr.intersection=function(t,e){return rr.overlayOp(t,e,Lr.INTERSECTION)},rr.symDifference=function(t,e){return rr.overlayOp(t,e,Lr.SYMDIFFERENCE)},rr.difference=function(t,e){return rr.overlayOp(t,e,Lr.DIFFERENCE)};var or=function(t,e){this._geom=new Array(2).fill(null),this._geom[0]=t,this._geom[1]=e};or.prototype.getResultGeometry=function(t){var e=null,n=!1,i=null;try{e=Lr.overlayOp(this._geom[0],this._geom[1],t);n=!0}catch(t){if(!(t instanceof $))throw t;i=t}if(!n)try{e=rr.overlayOp(this._geom[0],this._geom[1],t)}catch(t){throw t instanceof $?i:t}return e},or.prototype.interfaces_=function(){return[]},or.prototype.getClass=function(){return or},or.overlayOp=function(t,e,n){return new or(t,e).getResultGeometry(n)},or.union=function(t,e){return or.overlayOp(t,e,Lr.UNION)},or.intersection=function(t,e){return or.overlayOp(t,e,Lr.INTERSECTION)},or.symDifference=function(t,e){return or.overlayOp(t,e,Lr.SYMDIFFERENCE)},or.difference=function(t,e){return or.overlayOp(t,e,Lr.DIFFERENCE)};var sr=function(){this.mce=null,this.chainIndex=null;var t=arguments[0],e=arguments[1];this.mce=t,this.chainIndex=e};sr.prototype.computeIntersections=function(t,e){this.mce.computeIntersectsForChain(this.chainIndex,t.mce,t.chainIndex,e)},sr.prototype.interfaces_=function(){return[]},sr.prototype.getClass=function(){return sr};var ar=function t(){if(this._label=null,this._xValue=null,this._eventType=null,this._insertEvent=null,this._deleteEventIndex=null,this._obj=null,2===arguments.length){var e=arguments[0],n=arguments[1];this._eventType=t.DELETE,this._xValue=e,this._insertEvent=n}else if(3===arguments.length){var i=arguments[0],r=arguments[1],o=arguments[2];this._eventType=t.INSERT,this._label=i,this._xValue=r,this._obj=o}},ur={INSERT:{configurable:!0},DELETE:{configurable:!0}};ar.prototype.isDelete=function(){return this._eventType===ar.DELETE},ar.prototype.setDeleteEventIndex=function(t){this._deleteEventIndex=t},ar.prototype.getObject=function(){return this._obj},ar.prototype.compareTo=function(t){var e=t;return this._xValue<e._xValue?-1:this._xValue>e._xValue?1:this._eventType<e._eventType?-1:this._eventType>e._eventType?1:0},ar.prototype.getInsertEvent=function(){return this._insertEvent},ar.prototype.isInsert=function(){return this._eventType===ar.INSERT},ar.prototype.isSameLabel=function(t){return null!==this._label&&this._label===t._label},ar.prototype.getDeleteEventIndex=function(){return this._deleteEventIndex},ar.prototype.interfaces_=function(){return[E]},ar.prototype.getClass=function(){return ar},ur.INSERT.get=function(){return 1},ur.DELETE.get=function(){return 2},Object.defineProperties(ar,ur);var lr=function(){};lr.prototype.interfaces_=function(){return[]},lr.prototype.getClass=function(){return lr};var cr=function(){this._hasIntersection=!1,this._hasProper=!1,this._hasProperInterior=!1,this._properIntersectionPoint=null,this._li=null,this._includeProper=null,this._recordIsolated=null,this._isSelfIntersection=null,this._numIntersections=0,this.numTests=0,this._bdyNodes=null,this._isDone=!1,this._isDoneWhenProperInt=!1;var t=arguments[0],e=arguments[1],n=arguments[2];this._li=t,this._includeProper=e,this._recordIsolated=n};cr.prototype.isTrivialIntersection=function(t,e,n,i){if(t===n&&1===this._li.getIntersectionNum()){if(cr.isAdjacentSegments(e,i))return!0;if(t.isClosed()){var r=t.getNumPoints()-1;if(0===e&&i===r||0===i&&e===r)return!0}}return!1},cr.prototype.getProperIntersectionPoint=function(){return this._properIntersectionPoint},cr.prototype.setIsDoneIfProperInt=function(t){this._isDoneWhenProperInt=t},cr.prototype.hasProperInteriorIntersection=function(){return this._hasProperInterior},cr.prototype.isBoundaryPointInternal=function(t,e){for(var n=e.iterator();n.hasNext();){var i=n.next().getCoordinate();if(t.isIntersection(i))return!0}return!1},cr.prototype.hasProperIntersection=function(){return this._hasProper},cr.prototype.hasIntersection=function(){return this._hasIntersection},cr.prototype.isDone=function(){return this._isDone},cr.prototype.isBoundaryPoint=function(t,e){return null!==e&&(!!this.isBoundaryPointInternal(t,e[0])||!!this.isBoundaryPointInternal(t,e[1]))},cr.prototype.setBoundaryNodes=function(t,e){this._bdyNodes=new Array(2).fill(null),this._bdyNodes[0]=t,this._bdyNodes[1]=e},cr.prototype.addIntersections=function(t,e,n,i){if(t===n&&e===i)return null;this.numTests++;var r=t.getCoordinates()[e],o=t.getCoordinates()[e+1],s=n.getCoordinates()[i],a=n.getCoordinates()[i+1];this._li.computeIntersection(r,o,s,a),this._li.hasIntersection()&&(this._recordIsolated&&(t.setIsolated(!1),n.setIsolated(!1)),this._numIntersections++,this.isTrivialIntersection(t,e,n,i)||(this._hasIntersection=!0,!this._includeProper&&this._li.isProper()||(t.addIntersections(this._li,e,0),n.addIntersections(this._li,i,1)),this._li.isProper()&&(this._properIntersectionPoint=this._li.getIntersection(0).copy(),this._hasProper=!0,this._isDoneWhenProperInt&&(this._isDone=!0),this.isBoundaryPoint(this._li,this._bdyNodes)||(this._hasProperInterior=!0))))},cr.prototype.interfaces_=function(){return[]},cr.prototype.getClass=function(){return cr},cr.isAdjacentSegments=function(t,e){return 1===Math.abs(t-e)};var pr=function(t){function e(){t.call(this),this.events=new Nt,this.nOverlaps=null}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.prepareEvents=function(){$e.sort(this.events);for(var t=0;t<this.events.size();t++){var e=this.events.get(t);e.isDelete()&&e.getInsertEvent().setDeleteEventIndex(t)}},e.prototype.computeIntersections=function(){if(1===arguments.length){var t=arguments[0];this.nOverlaps=0,this.prepareEvents();for(var e=0;e<this.events.size();e++){var n=this.events.get(e);if(n.isInsert()&&this.processOverlaps(e,n.getDeleteEventIndex(),n,t),t.isDone())break}}else if(3===arguments.length)if(arguments[2]instanceof cr&&T(arguments[0],xt)&&T(arguments[1],xt)){var i=arguments[0],r=arguments[1],o=arguments[2];this.addEdges(i,i),this.addEdges(r,r),this.computeIntersections(o)}else if("boolean"==typeof arguments[2]&&T(arguments[0],xt)&&arguments[1]instanceof cr){var s=arguments[0],a=arguments[1];arguments[2]?this.addEdges(s,null):this.addEdges(s),this.computeIntersections(a)}},e.prototype.addEdge=function(t,e){for(var n=t.getMonotoneChainEdge(),i=n.getStartIndexes(),r=0;r<i.length-1;r++){var o=new sr(n,r),s=new ar(e,n.getMinX(r),o);this.events.add(s),this.events.add(new ar(n.getMaxX(r),s))}},e.prototype.processOverlaps=function(t,e,n,i){for(var r=n.getObject(),o=t;o<e;o++){var s=this.events.get(o);if(s.isInsert()){var a=s.getObject();n.isSameLabel(s)||(r.computeIntersections(a,i),this.nOverlaps++)}}},e.prototype.addEdges=function(){if(1===arguments.length)for(var t=arguments[0].iterator();t.hasNext();){var e=t.next();this.addEdge(e,e)}else if(2===arguments.length)for(var n=arguments[0],i=arguments[1],r=n.iterator();r.hasNext();){var o=r.next();this.addEdge(o,i)}},e.prototype.interfaces_=function(){return[]},e.prototype.getClass=function(){return e},e}(lr),hr=function(){this._min=v.POSITIVE_INFINITY,this._max=v.NEGATIVE_INFINITY},fr={NodeComparator:{configurable:!0}};hr.prototype.getMin=function(){return this._min},hr.prototype.intersects=function(t,e){return!(this._min>e||this._max<t)},hr.prototype.getMax=function(){return this._max},hr.prototype.toString=function(){return Z.toLineString(new C(this._min,0),new C(this._max,0))},hr.prototype.interfaces_=function(){return[]},hr.prototype.getClass=function(){return hr},fr.NodeComparator.get=function(){return gr},Object.defineProperties(hr,fr);var gr=function(){};gr.prototype.compare=function(t,e){var n=t,i=e,r=(n._min+n._max)/2,o=(i._min+i._max)/2;return r<o?-1:r>o?1:0},gr.prototype.interfaces_=function(){return[N]},gr.prototype.getClass=function(){return gr};var dr=function(t){function e(){t.call(this),this._item=null;var e=arguments[0],n=arguments[1],i=arguments[2];this._min=e,this._max=n,this._item=i}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.query=function(t,e,n){if(!this.intersects(t,e))return null;n.visitItem(this._item)},e.prototype.interfaces_=function(){return[]},e.prototype.getClass=function(){return e},e}(hr),yr=function(t){function e(){t.call(this),this._node1=null,this._node2=null;var e=arguments[0],n=arguments[1];this._node1=e,this._node2=n,this.buildExtent(this._node1,this._node2)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.buildExtent=function(t,e){this._min=Math.min(t._min,e._min),this._max=Math.max(t._max,e._max)},e.prototype.query=function(t,e,n){if(!this.intersects(t,e))return null;null!==this._node1&&this._node1.query(t,e,n),null!==this._node2&&this._node2.query(t,e,n)},e.prototype.interfaces_=function(){return[]},e.prototype.getClass=function(){return e},e}(hr),_r=function(){this._leaves=new Nt,this._root=null,this._level=0};_r.prototype.buildTree=function(){$e.sort(this._leaves,new hr.NodeComparator);for(var t=this._leaves,e=null,n=new Nt;;){if(this.buildLevel(t,n),1===n.size())return n.get(0);e=t,t=n,n=e}},_r.prototype.insert=function(t,e,n){if(null!==this._root)throw new Error("Index cannot be added to once it has been queried");this._leaves.add(new dr(t,e,n))},_r.prototype.query=function(t,e,n){this.init(),this._root.query(t,e,n)},_r.prototype.buildRoot=function(){if(null!==this._root)return null;this._root=this.buildTree()},_r.prototype.printNode=function(t){Y.out.println(Z.toLineString(new C(t._min,this._level),new C(t._max,this._level)))},_r.prototype.init=function(){if(null!==this._root)return null;this.buildRoot()},_r.prototype.buildLevel=function(t,e){this._level++,e.clear();for(var n=0;n<t.size();n+=2){var i=t.get(n);if(null===(n+1<t.size()?t.get(n):null))e.add(i);else{var r=new yr(t.get(n),t.get(n+1));e.add(r)}}},_r.prototype.interfaces_=function(){return[]},_r.prototype.getClass=function(){return _r};var mr=function(){this._items=new Nt};mr.prototype.visitItem=function(t){this._items.add(t)},mr.prototype.getItems=function(){return this._items},mr.prototype.interfaces_=function(){return[Ke]},mr.prototype.getClass=function(){return mr};var vr=function(){this._index=null;var t=arguments[0];if(!T(t,Zt))throw new m("Argument must be Polygonal");this._index=new xr(t)},Ir={SegmentVisitor:{configurable:!0},IntervalIndexedGeometry:{configurable:!0}};vr.prototype.locate=function(t){var e=new st(t),n=new Er(e);return this._index.query(t.y,t.y,n),e.getLocation()},vr.prototype.interfaces_=function(){return[Vn]},vr.prototype.getClass=function(){return vr},Ir.SegmentVisitor.get=function(){return Er},Ir.IntervalIndexedGeometry.get=function(){return xr},Object.defineProperties(vr,Ir);var Er=function(){this._counter=null;var t=arguments[0];this._counter=t};Er.prototype.visitItem=function(t){var e=t;this._counter.countSegment(e.getCoordinate(0),e.getCoordinate(1))},Er.prototype.interfaces_=function(){return[Ke]},Er.prototype.getClass=function(){return Er};var xr=function(){this._index=new _r;var t=arguments[0];this.init(t)};xr.prototype.init=function(t){for(var e=Ci.getLines(t).iterator();e.hasNext();){var n=e.next().getCoordinates();this.addLine(n)}},xr.prototype.addLine=function(t){for(var e=1;e<t.length;e++){var n=new dn(t[e-1],t[e]),i=Math.min(n.p0.y,n.p1.y),r=Math.max(n.p0.y,n.p1.y);this._index.insert(i,r,n)}},xr.prototype.query=function(){if(2===arguments.length){var t=arguments[0],e=arguments[1],n=new mr;return this._index.query(t,e,n),n.getItems()}if(3===arguments.length){var i=arguments[0],r=arguments[1],o=arguments[2];this._index.query(i,r,o)}},xr.prototype.interfaces_=function(){return[]},xr.prototype.getClass=function(){return xr};var Nr=function(t){function e(){if(t.call(this),this._parentGeom=null,this._lineEdgeMap=new he,this._boundaryNodeRule=null,this._useBoundaryDeterminationRule=!0,this._argIndex=null,this._boundaryNodes=null,this._hasTooFewPoints=!1,this._invalidPoint=null,this._areaPtLocator=null,this._ptLocator=new Si,2===arguments.length){var e=arguments[0],n=arguments[1],i=gt.OGC_SFS_BOUNDARY_RULE;this._argIndex=e,this._parentGeom=n,this._boundaryNodeRule=i,null!==n&&this.add(n)}else if(3===arguments.length){var r=arguments[0],o=arguments[1],s=arguments[2];this._argIndex=r,this._parentGeom=o,this._boundaryNodeRule=s,null!==o&&this.add(o)}}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.insertBoundaryPoint=function(t,n){var i=this._nodes.addNode(n).getLabel(),r=1;w.NONE;i.getLocation(t,Se.ON)===w.BOUNDARY&&r++;var o=e.determineBoundary(this._boundaryNodeRule,r);i.setLocation(t,o)},e.prototype.computeSelfNodes=function(){if(2===arguments.length){var t=arguments[0],e=arguments[1];return this.computeSelfNodes(t,e,!1)}if(3===arguments.length){var n=arguments[0],i=arguments[1],r=arguments[2],o=new cr(n,!0,!1);o.setIsDoneIfProperInt(r);var s=this.createEdgeSetIntersector(),a=this._parentGeom instanceof ee||this._parentGeom instanceof $t||this._parentGeom instanceof ne,u=i||!a;return s.computeIntersections(this._edges,o,u),this.addSelfIntersectionNodes(this._argIndex),o}},e.prototype.computeSplitEdges=function(t){for(var e=this._edges.iterator();e.hasNext();){e.next().eiList.addSplitEdges(t)}},e.prototype.computeEdgeIntersections=function(t,e,n){var i=new cr(e,n,!0);i.setBoundaryNodes(this.getBoundaryNodes(),t.getBoundaryNodes());return this.createEdgeSetIntersector().computeIntersections(this._edges,t._edges,i),i},e.prototype.getGeometry=function(){return this._parentGeom},e.prototype.getBoundaryNodeRule=function(){return this._boundaryNodeRule},e.prototype.hasTooFewPoints=function(){return this._hasTooFewPoints},e.prototype.addPoint=function(){if(arguments[0]instanceof Qt){var t=arguments[0].getCoordinate();this.insertPoint(this._argIndex,t,w.INTERIOR)}else if(arguments[0]instanceof C){var e=arguments[0];this.insertPoint(this._argIndex,e,w.INTERIOR)}},e.prototype.addPolygon=function(t){this.addPolygonRing(t.getExteriorRing(),w.EXTERIOR,w.INTERIOR);for(var e=0;e<t.getNumInteriorRing();e++){var n=t.getInteriorRingN(e);this.addPolygonRing(n,w.INTERIOR,w.EXTERIOR)}},e.prototype.addEdge=function(t){this.insertEdge(t);var e=t.getCoordinates();this.insertPoint(this._argIndex,e[0],w.BOUNDARY),this.insertPoint(this._argIndex,e[e.length-1],w.BOUNDARY)},e.prototype.addLineString=function(t){var e=Lt.removeRepeatedPoints(t.getCoordinates());if(e.length<2)return this._hasTooFewPoints=!0,this._invalidPoint=e[0],null;var n=new ni(e,new Pe(this._argIndex,w.INTERIOR));this._lineEdgeMap.put(t,n),this.insertEdge(n),et.isTrue(e.length>=2,"found LineString with single point"),this.insertBoundaryPoint(this._argIndex,e[0]),this.insertBoundaryPoint(this._argIndex,e[e.length-1])},e.prototype.getInvalidPoint=function(){return this._invalidPoint},e.prototype.getBoundaryPoints=function(){for(var t=this.getBoundaryNodes(),e=new Array(t.size()).fill(null),n=0,i=t.iterator();i.hasNext();){var r=i.next();e[n++]=r.getCoordinate().copy()}return e},e.prototype.getBoundaryNodes=function(){return null===this._boundaryNodes&&(this._boundaryNodes=this._nodes.getBoundaryNodes(this._argIndex)),this._boundaryNodes},e.prototype.addSelfIntersectionNode=function(t,e,n){if(this.isBoundaryNode(t,e))return null;n===w.BOUNDARY&&this._useBoundaryDeterminationRule?this.insertBoundaryPoint(t,e):this.insertPoint(t,e,n)},e.prototype.addPolygonRing=function(t,e,n){if(t.isEmpty())return null;var i=Lt.removeRepeatedPoints(t.getCoordinates());if(i.length<4)return this._hasTooFewPoints=!0,this._invalidPoint=i[0],null;var r=e,o=n;at.isCCW(i)&&(r=n,o=e);var s=new ni(i,new Pe(this._argIndex,w.BOUNDARY,r,o));this._lineEdgeMap.put(t,s),this.insertEdge(s),this.insertPoint(this._argIndex,i[0],w.BOUNDARY)},e.prototype.insertPoint=function(t,e,n){var i=this._nodes.addNode(e),r=i.getLabel();null===r?i._label=new Pe(t,n):r.setLocation(t,n)},e.prototype.createEdgeSetIntersector=function(){return new pr},e.prototype.addSelfIntersectionNodes=function(t){for(var e=this._edges.iterator();e.hasNext();)for(var n=e.next(),i=n.getLabel().getLocation(t),r=n.eiList.iterator();r.hasNext();){var o=r.next();this.addSelfIntersectionNode(t,o.coord,i)}},e.prototype.add=function(){if(1!==arguments.length)return t.prototype.add.apply(this,arguments);var e=arguments[0];if(e.isEmpty())return null;if(e instanceof ne&&(this._useBoundaryDeterminationRule=!1),e instanceof $t)this.addPolygon(e);else if(e instanceof Kt)this.addLineString(e);else if(e instanceof Qt)this.addPoint(e);else if(e instanceof te)this.addCollection(e);else if(e instanceof Xt)this.addCollection(e);else if(e instanceof ne)this.addCollection(e);else{if(!(e instanceof zt))throw new Error(e.getClass().getName());this.addCollection(e)}},e.prototype.addCollection=function(t){for(var e=0;e<t.getNumGeometries();e++){var n=t.getGeometryN(e);this.add(n)}},e.prototype.locate=function(t){return T(this._parentGeom,Zt)&&this._parentGeom.getNumGeometries()>50?(null===this._areaPtLocator&&(this._areaPtLocator=new vr(this._parentGeom)),this._areaPtLocator.locate(t)):this._ptLocator.locate(t,this._parentGeom)},e.prototype.findEdge=function(){if(1===arguments.length){var e=arguments[0];return this._lineEdgeMap.get(e)}return t.prototype.findEdge.apply(this,arguments)},e.prototype.interfaces_=function(){return[]},e.prototype.getClass=function(){return e},e.determineBoundary=function(t,e){return t.isInBoundary(e)?w.BOUNDARY:w.INTERIOR},e}(Ye),Cr=function(){if(this._li=new rt,this._resultPrecisionModel=null,this._arg=null,1===arguments.length){var t=arguments[0];this.setComputationPrecision(t.getPrecisionModel()),this._arg=new Array(1).fill(null),this._arg[0]=new Nr(0,t)}else if(2===arguments.length){var e=arguments[0],n=arguments[1],i=gt.OGC_SFS_BOUNDARY_RULE;e.getPrecisionModel().compareTo(n.getPrecisionModel())>=0?this.setComputationPrecision(e.getPrecisionModel()):this.setComputationPrecision(n.getPrecisionModel()),this._arg=new Array(2).fill(null),this._arg[0]=new Nr(0,e,i),this._arg[1]=new Nr(1,n,i)}else if(3===arguments.length){var r=arguments[0],o=arguments[1],s=arguments[2];r.getPrecisionModel().compareTo(o.getPrecisionModel())>=0?this.setComputationPrecision(r.getPrecisionModel()):this.setComputationPrecision(o.getPrecisionModel()),this._arg=new Array(2).fill(null),this._arg[0]=new Nr(0,r,s),this._arg[1]=new Nr(1,o,s)}};Cr.prototype.getArgGeometry=function(t){return this._arg[t].getGeometry()},Cr.prototype.setComputationPrecision=function(t){this._resultPrecisionModel=t,this._li.setPrecisionModel(this._resultPrecisionModel)},Cr.prototype.interfaces_=function(){return[]},Cr.prototype.getClass=function(){return Cr};var Sr=function(){};Sr.prototype.interfaces_=function(){return[]},Sr.prototype.getClass=function(){return Sr},Sr.map=function(){if(arguments[0]instanceof ct&&T(arguments[1],Sr.MapOp)){for(var t=arguments[0],e=arguments[1],n=new Nt,i=0;i<t.getNumGeometries();i++){var r=e.map(t.getGeometryN(i));null!==r&&n.add(r)}return t.getFactory().buildGeometry(n)}if(T(arguments[0],It)&&T(arguments[1],Sr.MapOp)){for(var o=arguments[0],s=arguments[1],a=new Nt,u=o.iterator();u.hasNext();){var l=u.next(),c=s.map(l);null!==c&&a.add(c)}return a}},Sr.MapOp=function(){};var Lr=function(t){function e(){var e=arguments[0],n=arguments[1];t.call(this,e,n),this._ptLocator=new Si,this._geomFact=null,this._resultGeom=null,this._graph=null,this._edgeList=new Hn,this._resultPolyList=new Nt,this._resultLineList=new Nt,this._resultPointList=new Nt,this._graph=new Ye(new kn),this._geomFact=e.getFactory()}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.insertUniqueEdge=function(t){var e=this._edgeList.findEqualEdge(t);if(null!==e){var n=e.getLabel(),i=t.getLabel();e.isPointwiseEqual(t)||(i=new Pe(t.getLabel())).flip();var r=e.getDepth();r.isNull()&&r.add(n),r.add(i),n.merge(i)}else this._edgeList.add(t)},e.prototype.getGraph=function(){return this._graph},e.prototype.cancelDuplicateResultEdges=function(){for(var t=this._graph.getEdgeEnds().iterator();t.hasNext();){var e=t.next(),n=e.getSym();e.isInResult()&&n.isInResult()&&(e.setInResult(!1),n.setInResult(!1))}},e.prototype.isCoveredByLA=function(t){return!!this.isCovered(t,this._resultLineList)||!!this.isCovered(t,this._resultPolyList)},e.prototype.computeGeometry=function(t,n,i,r){var o=new Nt;return o.addAll(t),o.addAll(n),o.addAll(i),o.isEmpty()?e.createEmptyResult(r,this._arg[0].getGeometry(),this._arg[1].getGeometry(),this._geomFact):this._geomFact.buildGeometry(o)},e.prototype.mergeSymLabels=function(){for(var t=this._graph.getNodes().iterator();t.hasNext();){t.next().getEdges().mergeSymLabels()}},e.prototype.isCovered=function(t,e){for(var n=e.iterator();n.hasNext();){var i=n.next();if(this._ptLocator.locate(t,i)!==w.EXTERIOR)return!0}return!1},e.prototype.replaceCollapsedEdges=function(){for(var t=new Nt,e=this._edgeList.iterator();e.hasNext();){var n=e.next();n.isCollapsed()&&(e.remove(),t.add(n.getCollapsedEdge()))}this._edgeList.addAll(t)},e.prototype.updateNodeLabelling=function(){for(var t=this._graph.getNodes().iterator();t.hasNext();){var e=t.next(),n=e.getEdges().getLabel();e.getLabel().merge(n)}},e.prototype.getResultGeometry=function(t){return this.computeOverlay(t),this._resultGeom},e.prototype.insertUniqueEdges=function(t){for(var e=t.iterator();e.hasNext();){var n=e.next();this.insertUniqueEdge(n)}},e.prototype.computeOverlay=function(t){this.copyPoints(0),this.copyPoints(1),this._arg[0].computeSelfNodes(this._li,!1),this._arg[1].computeSelfNodes(this._li,!1),this._arg[0].computeEdgeIntersections(this._arg[1],this._li,!0);var e=new Nt;this._arg[0].computeSplitEdges(e),this._arg[1].computeSplitEdges(e),this.insertUniqueEdges(e),this.computeLabelsFromDepths(),this.replaceCollapsedEdges(),Yi.checkValid(this._edgeList.getEdges()),this._graph.addEdges(this._edgeList.getEdges()),this.computeLabelling(),this.labelIncompleteNodes(),this.findResultAreaEdges(t),this.cancelDuplicateResultEdges();var n=new ke(this._geomFact);n.add(this._graph),this._resultPolyList=n.getPolygons();var i=new ji(this,this._geomFact,this._ptLocator);this._resultLineList=i.build(t);var r=new Hi(this,this._geomFact,this._ptLocator);this._resultPointList=r.build(t),this._resultGeom=this.computeGeometry(this._resultPointList,this._resultLineList,this._resultPolyList,t)},e.prototype.labelIncompleteNode=function(t,e){var n=this._ptLocator.locate(t.getCoordinate(),this._arg[e].getGeometry());t.getLabel().setLocation(e,n)},e.prototype.copyPoints=function(t){for(var e=this._arg[t].getNodeIterator();e.hasNext();){var n=e.next();this._graph.addNode(n.getCoordinate()).setLabel(t,n.getLabel().getLocation(t))}},e.prototype.findResultAreaEdges=function(t){for(var n=this._graph.getEdgeEnds().iterator();n.hasNext();){var i=n.next(),r=i.getLabel();r.isArea()&&!i.isInteriorAreaEdge()&&e.isResultOfOp(r.getLocation(0,Se.RIGHT),r.getLocation(1,Se.RIGHT),t)&&i.setInResult(!0)}},e.prototype.computeLabelsFromDepths=function(){for(var t=this._edgeList.iterator();t.hasNext();){var e=t.next(),n=e.getLabel(),i=e.getDepth();if(!i.isNull()){i.normalize();for(var r=0;r<2;r++)n.isNull(r)||!n.isArea()||i.isNull(r)||(0===i.getDelta(r)?n.toLine(r):(et.isTrue(!i.isNull(r,Se.LEFT),"depth of LEFT side has not been initialized"),n.setLocation(r,Se.LEFT,i.getLocation(r,Se.LEFT)),et.isTrue(!i.isNull(r,Se.RIGHT),"depth of RIGHT side has not been initialized"),n.setLocation(r,Se.RIGHT,i.getLocation(r,Se.RIGHT))))}}},e.prototype.computeLabelling=function(){for(var t=this._graph.getNodes().iterator();t.hasNext();){t.next().getEdges().computeLabelling(this._arg)}this.mergeSymLabels(),this.updateNodeLabelling()},e.prototype.labelIncompleteNodes=function(){for(var t=this._graph.getNodes().iterator();t.hasNext();){var e=t.next(),n=e.getLabel();e.isIsolated()&&(n.isNull(0)?this.labelIncompleteNode(e,0):this.labelIncompleteNode(e,1)),e.getEdges().updateLabelling(n)}},e.prototype.isCoveredByA=function(t){return!!this.isCovered(t,this._resultPolyList)},e.prototype.interfaces_=function(){return[]},e.prototype.getClass=function(){return e},e}(Cr);Lr.overlayOp=function(t,e,n){return new Lr(t,e).getResultGeometry(n)},Lr.intersection=function(t,e){if(t.isEmpty()||e.isEmpty())return Lr.createEmptyResult(Lr.INTERSECTION,t,e,t.getFactory());if(t.isGeometryCollection()){var n=e;return ki.map(t,{interfaces_:function(){return[Sr.MapOp]},map:function(t){return t.intersection(n)}})}return t.checkNotGeometryCollection(t),t.checkNotGeometryCollection(e),or.overlayOp(t,e,Lr.INTERSECTION)},Lr.symDifference=function(t,e){if(t.isEmpty()||e.isEmpty()){if(t.isEmpty()&&e.isEmpty())return Lr.createEmptyResult(Lr.SYMDIFFERENCE,t,e,t.getFactory());if(t.isEmpty())return e.copy();if(e.isEmpty())return t.copy()}return t.checkNotGeometryCollection(t),t.checkNotGeometryCollection(e),or.overlayOp(t,e,Lr.SYMDIFFERENCE)},Lr.resultDimension=function(t,e,n){var i=e.getDimension(),r=n.getDimension(),o=-1;switch(t){case Lr.INTERSECTION:o=Math.min(i,r);break;case Lr.UNION:o=Math.max(i,r);break;case Lr.DIFFERENCE:o=i;break;case Lr.SYMDIFFERENCE:o=Math.max(i,r)}return o},Lr.createEmptyResult=function(t,e,n,i){var r=null;switch(Lr.resultDimension(t,e,n)){case-1:r=i.createGeometryCollection(new Array(0).fill(null));break;case 0:r=i.createPoint();break;case 1:r=i.createLineString();break;case 2:r=i.createPolygon()}return r},Lr.difference=function(t,e){return t.isEmpty()?Lr.createEmptyResult(Lr.DIFFERENCE,t,e,t.getFactory()):e.isEmpty()?t.copy():(t.checkNotGeometryCollection(t),t.checkNotGeometryCollection(e),or.overlayOp(t,e,Lr.DIFFERENCE))},Lr.isResultOfOp=function(){if(2===arguments.length){var t=arguments[0],e=arguments[1],n=t.getLocation(0),i=t.getLocation(1);return Lr.isResultOfOp(n,i,e)}if(3===arguments.length){var r=arguments[0],o=arguments[1],s=arguments[2];switch(r===w.BOUNDARY&&(r=w.INTERIOR),o===w.BOUNDARY&&(o=w.INTERIOR),s){case Lr.INTERSECTION:return r===w.INTERIOR&&o===w.INTERIOR;case Lr.UNION:return r===w.INTERIOR||o===w.INTERIOR;case Lr.DIFFERENCE:return r===w.INTERIOR&&o!==w.INTERIOR;case Lr.SYMDIFFERENCE:return r===w.INTERIOR&&o!==w.INTERIOR||r!==w.INTERIOR&&o===w.INTERIOR}return!1}},Lr.INTERSECTION=1,Lr.UNION=2,Lr.DIFFERENCE=3,Lr.SYMDIFFERENCE=4;var br=function(){this._g=null,this._boundaryDistanceTolerance=null,this._linework=null,this._ptLocator=new Si,this._seg=new dn;var t=arguments[0],e=arguments[1];this._g=t,this._boundaryDistanceTolerance=e,this._linework=this.extractLinework(t)};br.prototype.isWithinToleranceOfBoundary=function(t){for(var e=0;e<this._linework.getNumGeometries();e++)for(var n=this._linework.getGeometryN(e).getCoordinateSequence(),i=0;i<n.size()-1;i++){n.getCoordinate(i,this._seg.p0),n.getCoordinate(i+1,this._seg.p1);if(this._seg.distance(t)<=this._boundaryDistanceTolerance)return!0}return!1},br.prototype.getLocation=function(t){return this.isWithinToleranceOfBoundary(t)?w.BOUNDARY:this._ptLocator.locate(t,this._g)},br.prototype.extractLinework=function(t){var e=new wr;t.apply(e);var n=e.getLinework(),i=_e.toLineStringArray(n);return t.getFactory().createMultiLineString(i)},br.prototype.interfaces_=function(){return[]},br.prototype.getClass=function(){return br};var wr=function(){this._linework=null,this._linework=new Nt};wr.prototype.getLinework=function(){return this._linework},wr.prototype.filter=function(t){if(t instanceof $t){var e=t;this._linework.add(e.getExteriorRing());for(var n=0;n<e.getNumInteriorRing();n++)this._linework.add(e.getInteriorRingN(n))}},wr.prototype.interfaces_=function(){return[Vt]},wr.prototype.getClass=function(){return wr};var Or=function(){this._g=null,this._doLeft=!0,this._doRight=!0;var t=arguments[0];this._g=t};Or.prototype.extractPoints=function(t,e,n){for(var i=t.getCoordinates(),r=0;r<i.length-1;r++)this.computeOffsetPoints(i[r],i[r+1],e,n)},Or.prototype.setSidesToGenerate=function(t,e){this._doLeft=t,this._doRight=e},Or.prototype.getPoints=function(t){for(var e=new Nt,n=Ci.getLines(this._g).iterator();n.hasNext();){var i=n.next();this.extractPoints(i,t,e)}return e},Or.prototype.computeOffsetPoints=function(t,e,n,i){var r=e.x-t.x,o=e.y-t.y,s=Math.sqrt(r*r+o*o),a=n*r/s,u=n*o/s,l=(e.x+t.x)/2,c=(e.y+t.y)/2;if(this._doLeft){var p=new C(l-u,c+a);i.add(p)}if(this._doRight){var h=new C(l+u,c-a);i.add(h)}},Or.prototype.interfaces_=function(){return[]},Or.prototype.getClass=function(){return Or};var Tr=function t(){this._geom=null,this._locFinder=null,this._location=new Array(3).fill(null),this._invalidLocation=null,this._boundaryDistanceTolerance=t.TOLERANCE,this._testCoords=new Nt;var e=arguments[0],n=arguments[1],i=arguments[2];this._boundaryDistanceTolerance=t.computeBoundaryDistanceTolerance(e,n),this._geom=[e,n,i],this._locFinder=[new br(this._geom[0],this._boundaryDistanceTolerance),new br(this._geom[1],this._boundaryDistanceTolerance),new br(this._geom[2],this._boundaryDistanceTolerance)]},Rr={TOLERANCE:{configurable:!0}};Tr.prototype.reportResult=function(t,e,n){Y.out.println("Overlay result invalid - A:"+w.toLocationSymbol(e[0])+" B:"+w.toLocationSymbol(e[1])+" expected:"+(n?"i":"e")+" actual:"+w.toLocationSymbol(e[2]))},Tr.prototype.isValid=function(t){this.addTestPts(this._geom[0]),this.addTestPts(this._geom[1]);var e=this.checkValid(t);return e},Tr.prototype.checkValid=function(){if(1===arguments.length){for(var t=arguments[0],e=0;e<this._testCoords.size();e++){var n=this._testCoords.get(e);if(!this.checkValid(t,n))return this._invalidLocation=n,!1}return!0}if(2===arguments.length){var i=arguments[0],r=arguments[1];return this._location[0]=this._locFinder[0].getLocation(r),this._location[1]=this._locFinder[1].getLocation(r),this._location[2]=this._locFinder[2].getLocation(r),!!Tr.hasLocation(this._location,w.BOUNDARY)||this.isValidResult(i,this._location)}},Tr.prototype.addTestPts=function(t){var e=new Or(t);this._testCoords.addAll(e.getPoints(5*this._boundaryDistanceTolerance))},Tr.prototype.isValidResult=function(t,e){var n=Lr.isResultOfOp(e[0],e[1],t),i=!(n^e[2]===w.INTERIOR);return i||this.reportResult(t,e,n),i},Tr.prototype.getInvalidLocation=function(){return this._invalidLocation},Tr.prototype.interfaces_=function(){return[]},Tr.prototype.getClass=function(){return Tr},Tr.hasLocation=function(t,e){for(var n=0;n<3;n++)if(t[n]===e)return!0;return!1},Tr.computeBoundaryDistanceTolerance=function(t,e){return Math.min(Ji.computeSizeBasedSnapTolerance(t),Ji.computeSizeBasedSnapTolerance(e))},Tr.isValid=function(t,e,n,i){return new Tr(t,e,i).isValid(n)},Rr.TOLERANCE.get=function(){return 1e-6},Object.defineProperties(Tr,Rr);var Pr=function t(e){this._geomFactory=null,this._skipEmpty=!1,this._inputGeoms=null,this._geomFactory=t.extractFactory(e),this._inputGeoms=e};Pr.prototype.extractElements=function(t,e){if(null===t)return null;for(var n=0;n<t.getNumGeometries();n++){var i=t.getGeometryN(n);this._skipEmpty&&i.isEmpty()||e.add(i)}},Pr.prototype.combine=function(){for(var t=new Nt,e=this._inputGeoms.iterator();e.hasNext();){var n=e.next();this.extractElements(n,t)}return 0===t.size()?null!==this._geomFactory?this._geomFactory.createGeometryCollection(null):null:this._geomFactory.buildGeometry(t)},Pr.prototype.interfaces_=function(){return[]},Pr.prototype.getClass=function(){return Pr},Pr.combine=function(){if(1===arguments.length){var t=arguments[0];return new Pr(t).combine()}if(2===arguments.length){var e=arguments[0],n=arguments[1];return new Pr(Pr.createList(e,n)).combine()}if(3===arguments.length){var i=arguments[0],r=arguments[1],o=arguments[2];return new Pr(Pr.createList(i,r,o)).combine()}},Pr.extractFactory=function(t){return t.isEmpty()?null:t.iterator().next().getFactory()},Pr.createList=function(){if(2===arguments.length){var t=arguments[0],e=arguments[1],n=new Nt;return n.add(t),n.add(e),n}if(3===arguments.length){var i=arguments[0],r=arguments[1],o=arguments[2],s=new Nt;return s.add(i),s.add(r),s.add(o),s}};var Dr=function(){this._inputPolys=null,this._geomFactory=null;var t=arguments[0];this._inputPolys=t,null===this._inputPolys&&(this._inputPolys=new Nt)},Mr={STRTREE_NODE_CAPACITY:{configurable:!0}};Dr.prototype.reduceToGeometries=function(t){for(var e=new Nt,n=t.iterator();n.hasNext();){var i=n.next(),r=null;T(i,xt)?r=this.unionTree(i):i instanceof ct&&(r=i),e.add(r)}return e},Dr.prototype.extractByEnvelope=function(t,e,n){for(var i=new Nt,r=0;r<e.getNumGeometries();r++){var o=e.getGeometryN(r);o.getEnvelopeInternal().intersects(t)?i.add(o):n.add(o)}return this._geomFactory.buildGeometry(i)},Dr.prototype.unionOptimized=function(t,e){var n=t.getEnvelopeInternal(),i=e.getEnvelopeInternal();if(!n.intersects(i)){return Pr.combine(t,e)}if(t.getNumGeometries()<=1&&e.getNumGeometries()<=1)return this.unionActual(t,e);var r=n.intersection(i);return this.unionUsingEnvelopeIntersection(t,e,r)},Dr.prototype.union=function(){if(null===this._inputPolys)throw new Error("union() method cannot be called twice");if(this._inputPolys.isEmpty())return null;this._geomFactory=this._inputPolys.iterator().next().getFactory();for(var t=new sn(Dr.STRTREE_NODE_CAPACITY),e=this._inputPolys.iterator();e.hasNext();){var n=e.next();t.insert(n.getEnvelopeInternal(),n)}this._inputPolys=null;var i=t.itemsTree();return this.unionTree(i)},Dr.prototype.binaryUnion=function(){if(1===arguments.length){var t=arguments[0];return this.binaryUnion(t,0,t.size())}if(3===arguments.length){var e=arguments[0],n=arguments[1],i=arguments[2];if(i-n<=1){var r=Dr.getGeometry(e,n);return this.unionSafe(r,null)}if(i-n==2)return this.unionSafe(Dr.getGeometry(e,n),Dr.getGeometry(e,n+1));var o=Math.trunc((i+n)/2),s=this.binaryUnion(e,n,o),a=this.binaryUnion(e,o,i);return this.unionSafe(s,a)}},Dr.prototype.repeatedUnion=function(t){for(var e=null,n=t.iterator();n.hasNext();){var i=n.next();e=null===e?i.copy():e.union(i)}return e},Dr.prototype.unionSafe=function(t,e){return null===t&&null===e?null:null===t?e.copy():null===e?t.copy():this.unionOptimized(t,e)},Dr.prototype.unionActual=function(t,e){return Dr.restrictToPolygons(t.union(e))},Dr.prototype.unionTree=function(t){var e=this.reduceToGeometries(t);return this.binaryUnion(e)},Dr.prototype.unionUsingEnvelopeIntersection=function(t,e,n){var i=new Nt,r=this.extractByEnvelope(n,t,i),o=this.extractByEnvelope(n,e,i),s=this.unionActual(r,o);i.add(s);return Pr.combine(i)},Dr.prototype.bufferUnion=function(){if(1===arguments.length){var t=arguments[0];return t.get(0).getFactory().buildGeometry(t).buffer(0)}if(2===arguments.length){var e=arguments[0],n=arguments[1];return e.getFactory().createGeometryCollection([e,n]).buffer(0)}},Dr.prototype.interfaces_=function(){return[]},Dr.prototype.getClass=function(){return Dr},Dr.restrictToPolygons=function(t){if(T(t,Zt))return t;var e=Ni.getPolygons(t);return 1===e.size()?e.get(0):t.getFactory().createMultiPolygon(_e.toPolygonArray(e))},Dr.getGeometry=function(t,e){return e>=t.size()?null:t.get(e)},Dr.union=function(t){return new Dr(t).union()},Mr.STRTREE_NODE_CAPACITY.get=function(){return 4},Object.defineProperties(Dr,Mr);var Ar=function(){};Ar.prototype.interfaces_=function(){return[]},Ar.prototype.getClass=function(){return Ar},Ar.union=function(t,e){if(t.isEmpty()||e.isEmpty()){if(t.isEmpty()&&e.isEmpty())return Lr.createEmptyResult(Lr.UNION,t,e,t.getFactory());if(t.isEmpty())return e.copy();if(e.isEmpty())return t.copy()}return t.checkNotGeometryCollection(t),t.checkNotGeometryCollection(e),or.overlayOp(t,e,Lr.UNION)},t.GeoJSONReader=Ne,t.GeoJSONWriter=Ce,t.OverlayOp=Lr,t.UnionOp=Ar,t.BufferOp=di,Object.defineProperty(t,"__esModule",{value:!0})});


/***/ }),
/* 232 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	
	var _createClass = function () {
	  function defineProperties(target, props) {
	    for (var i = 0; i < props.length; i++) {
	      var descriptor = props[i];descriptor.enumerable = descriptor.enumerable || false;descriptor.configurable = true;if ("value" in descriptor) descriptor.writable = true;Object.defineProperty(target, descriptor.key, descriptor);
	    }
	  }return function (Constructor, protoProps, staticProps) {
	    if (protoProps) defineProperties(Constructor.prototype, protoProps);if (staticProps) defineProperties(Constructor, staticProps);return Constructor;
	  };
	}();
	
	var _Vector = __webpack_require__(108);
	
	var _Vector2 = _interopRequireDefault(_Vector);
	
	function _interopRequireDefault(obj) {
	  return obj && obj.__esModule ? obj : { default: obj };
	}
	
	function _classCallCheck(instance, Constructor) {
	  if (!(instance instanceof Constructor)) {
	    throw new TypeError("Cannot call a class as a function");
	  }
	}
	
	function _possibleConstructorReturn(self, call) {
	  if (!self) {
	    throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
	  }return call && ((typeof call === "undefined" ? "undefined" : _typeof(call)) === "object" || typeof call === "function") ? call : self;
	}
	
	function _inherits(subClass, superClass) {
	  if (typeof superClass !== "function" && superClass !== null) {
	    throw new TypeError("Super expression must either be null or a function, not " + (typeof superClass === "undefined" ? "undefined" : _typeof(superClass)));
	  }subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } });if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;
	}
	
	/**
	 * Vector source to map a Backbone collection of result records to openlayers
	 * features.
	 */
	var CollectionSource = function (_VectorSource) {
	  _inherits(CollectionSource, _VectorSource);
	
	  /**
	   * Creates a new CollectionSource
	   * @param {object} options The options
	   * @param {function} options.transformModel The transformation function to
	   *                                          create a feature from a model
	   * @param {Backbone.Collection} options.collection The collection to map
	   */
	  function CollectionSource(options) {
	    _classCallCheck(this, CollectionSource);
	
	    var _this = _possibleConstructorReturn(this, (CollectionSource.__proto__ || Object.getPrototypeOf(CollectionSource)).call(this, options));
	
	    _this.transformModel = options.transformModel;
	    _this.setCollection(options.collection, false);
	    return _this;
	  }
	
	  /**
	   * Sets the collection to watch for this source.
	   * @param {Backbone.Collection} collection The collection to observe
	   * @param {boolean} [clear=true] Whether to clear the current features of this
	   *                               source when the new collection is set
	   */
	
	  _createClass(CollectionSource, [{
	    key: 'setCollection',
	    value: function setCollection(collection) {
	      var clear = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
	
	      var prevCollection = this.collection;
	      if (prevCollection) {
	        prevCollection.off(null, null, this);
	      }
	      if (collection) {
	        collection.on('reset', this.onCollectionReset, this);
	        collection.on('add', this.onCollectionAdd, this);
	        collection.on('remove', this.onCollectionRemove, this);
	      }
	      this.collection = collection;
	      this.onCollectionReset(this.collection, {}, clear);
	    }
	
	    // collection event handlers
	
	  }, {
	    key: 'onCollectionReset',
	    value: function onCollectionReset(collection, options) {
	      var _this2 = this;
	
	      var clear = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
	
	      if (clear) {
	        this.clear();
	      }
	      var features = collection.map(function (model) {
	        return _this2.transformModel(model);
	      }).filter(function (feature) {
	        return !!feature;
	      });
	      this.addFeatures(features);
	    }
	  }, {
	    key: 'onCollectionAdd',
	    value: function onCollectionAdd(model) {
	      var feature = this.transformModel(model);
	      if (feature) {
	        this.addFeature(feature);
	      }
	    }
	  }, {
	    key: 'onCollectionRemove',
	    value: function onCollectionRemove(model) {
	      var feature = this.getFeatureById(model.get('id'));
	      if (feature) {
	        this.removeFeature(feature);
	      }
	    }
	  }]);
	
	  return CollectionSource;
	}(_Vector2.default);
	
	exports.default = CollectionSource;

/***/ }),
/* 233 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	
	var _backbone = __webpack_require__(24);
	
	var _backbone2 = _interopRequireDefault(_backbone);
	
	var _LayerModel = __webpack_require__(552);
	
	var _LayerModel2 = _interopRequireDefault(_LayerModel);
	
	function _interopRequireDefault(obj) {
	  return obj && obj.__esModule ? obj : { default: obj };
	}
	
	var LayersCollection = _backbone2.default.Collection.extend( /** @lends core/models.LayersCollection# */{
	  model: _LayerModel2.default,
	  comparator: 'ordinal',
	
	  /**
	    @constructs
	    @param {core/models.LayerModel[]|Object[]} models The models of this collection
	    @param {Object} options
	    @param {boolean} options.exclusiveVisibility Whether the visibility of the layers
	                                                 are mutually exclusive.
	   */
	  initialize: function initialize(models, options) {
	    if (options && options.exclusiveVisibility) {
	      this.listenTo(this, 'change:display', this.onDisplayChange);
	    }
	  },
	
	  /**
	    Add a single model or an array of models to the collection. Automtically
	    sets the 'ordinal' property for sorting.
	     @param {Object|Object[]} layerDefinition The layer definition(s).
	   */
	  add: function add(layerDefinition, options) {
	    if (Array.isArray(layerDefinition)) {
	      for (var i = 0; i < layerDefinition.length; ++i) {
	        // eslint-disable-next-line no-param-reassign
	        layerDefinition[i].ordinal = this.size() + i;
	      }
	    } else {
	      // eslint-disable-next-line no-param-reassign
	      layerDefinition.ordinal = this.size();
	    }
	    return _backbone2.default.Collection.prototype.add.call(this, layerDefinition, options);
	  },
	  onDisplayChange: function onDisplayChange(layerModel) {
	    // if this is an exclusive visibility collection, change the other layers
	    // display.visible to false, when one layer was set to visible
	    if (layerModel.get('display.visible')) {
	      this.each(function (otherLayerModel) {
	        if (layerModel !== otherLayerModel) {
	          otherLayerModel.set('display.visible', false);
	        }
	      });
	    }
	  }
	});
	
	exports.default = LayersCollection;

/***/ }),
/* 234 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	var dP = __webpack_require__(26).f;
	var create = __webpack_require__(92);
	var redefineAll = __webpack_require__(96);
	var ctx = __webpack_require__(52);
	var anInstance = __webpack_require__(90);
	var forOf = __webpack_require__(91);
	var $iterDefine = __webpack_require__(205);
	var step = __webpack_require__(328);
	var setSpecies = __webpack_require__(97);
	var DESCRIPTORS = __webpack_require__(25);
	var fastKey = __webpack_require__(78).fastKey;
	var validate = __webpack_require__(82);
	var SIZE = DESCRIPTORS ? '_s' : 'size';
	
	var getEntry = function getEntry(that, key) {
	  // fast case
	  var index = fastKey(key);
	  var entry;
	  if (index !== 'F') return that._i[index];
	  // frozen object case
	  for (entry = that._f; entry; entry = entry.n) {
	    if (entry.k == key) return entry;
	  }
	};
	
	module.exports = {
	  getConstructor: function getConstructor(wrapper, NAME, IS_MAP, ADDER) {
	    var C = wrapper(function (that, iterable) {
	      anInstance(that, C, NAME, '_i');
	      that._t = NAME; // collection type
	      that._i = create(null); // index
	      that._f = undefined; // first entry
	      that._l = undefined; // last entry
	      that[SIZE] = 0; // size
	      if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);
	    });
	    redefineAll(C.prototype, {
	      // 23.1.3.1 Map.prototype.clear()
	      // 23.2.3.2 Set.prototype.clear()
	      clear: function clear() {
	        for (var that = validate(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) {
	          entry.r = true;
	          if (entry.p) entry.p = entry.p.n = undefined;
	          delete data[entry.i];
	        }
	        that._f = that._l = undefined;
	        that[SIZE] = 0;
	      },
	      // 23.1.3.3 Map.prototype.delete(key)
	      // 23.2.3.4 Set.prototype.delete(value)
	      'delete': function _delete(key) {
	        var that = validate(this, NAME);
	        var entry = getEntry(that, key);
	        if (entry) {
	          var next = entry.n;
	          var prev = entry.p;
	          delete that._i[entry.i];
	          entry.r = true;
	          if (prev) prev.n = next;
	          if (next) next.p = prev;
	          if (that._f == entry) that._f = next;
	          if (that._l == entry) that._l = prev;
	          that[SIZE]--;
	        }return !!entry;
	      },
	      // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)
	      // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)
	      forEach: function forEach(callbackfn /* , that = undefined */) {
	        validate(this, NAME);
	        var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);
	        var entry;
	        while (entry = entry ? entry.n : this._f) {
	          f(entry.v, entry.k, this);
	          // revert to the last existing entry
	          while (entry && entry.r) {
	            entry = entry.p;
	          }
	        }
	      },
	      // 23.1.3.7 Map.prototype.has(key)
	      // 23.2.3.7 Set.prototype.has(value)
	      has: function has(key) {
	        return !!getEntry(validate(this, NAME), key);
	      }
	    });
	    if (DESCRIPTORS) dP(C.prototype, 'size', {
	      get: function get() {
	        return validate(this, NAME)[SIZE];
	      }
	    });
	    return C;
	  },
	  def: function def(that, key, value) {
	    var entry = getEntry(that, key);
	    var prev, index;
	    // change existing entry
	    if (entry) {
	      entry.v = value;
	      // create new entry
	    } else {
	      that._l = entry = {
	        i: index = fastKey(key, true), // <- index
	        k: key, // <- key
	        v: value, // <- value
	        p: prev = that._l, // <- previous entry
	        n: undefined, // <- next entry
	        r: false // <- removed
	      };
	      if (!that._f) that._f = entry;
	      if (prev) prev.n = entry;
	      that[SIZE]++;
	      // add to index
	      if (index !== 'F') that._i[index] = entry;
	    }return that;
	  },
	  getEntry: getEntry,
	  setStrong: function setStrong(C, NAME, IS_MAP) {
	    // add .keys, .values, .entries, [@@iterator]
	    // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11
	    $iterDefine(C, NAME, function (iterated, kind) {
	      this._t = validate(iterated, NAME); // target
	      this._k = kind; // kind
	      this._l = undefined; // previous
	    }, function () {
	      var that = this;
	      var kind = that._k;
	      var entry = that._l;
	      // revert to the last existing entry
	      while (entry && entry.r) {
	        entry = entry.p;
	      } // get next entry
	      if (!that._t || !(that._l = entry = entry ? entry.n : that._t._f)) {
	        // or finish the iteration
	        that._t = undefined;
	        return step(1);
	      }
	      // return step by kind
	      if (kind == 'keys') return step(0, entry.k);
	      if (kind == 'values') return step(0, entry.v);
	      return step(0, [entry.k, entry.v]);
	    }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);
	
	    // add [@@species], 23.1.2.2, 23.2.2.2
	    setSpecies(NAME);
	  }
	};

/***/ }),
/* 235 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	// https://github.com/DavidBruant/Map-Set.prototype.toJSON
	var classof = __webpack_require__(110);
	var from = __webpack_require__(320);
	module.exports = function (NAME) {
	  return function toJSON() {
	    if (classof(this) != NAME) throw TypeError(NAME + "#toJSON isn't generic");
	    return from(this);
	  };
	};

/***/ }),
/* 236 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	var redefineAll = __webpack_require__(96);
	var getWeak = __webpack_require__(78).getWeak;
	var anObject = __webpack_require__(6);
	var isObject = __webpack_require__(15);
	var anInstance = __webpack_require__(90);
	var forOf = __webpack_require__(91);
	var createArrayMethod = __webpack_require__(58);
	var $has = __webpack_require__(42);
	var validate = __webpack_require__(82);
	var arrayFind = createArrayMethod(5);
	var arrayFindIndex = createArrayMethod(6);
	var id = 0;
	
	// fallback for uncaught frozen keys
	var uncaughtFrozenStore = function uncaughtFrozenStore(that) {
	  return that._l || (that._l = new UncaughtFrozenStore());
	};
	var UncaughtFrozenStore = function UncaughtFrozenStore() {
	  this.a = [];
	};
	var findUncaughtFrozen = function findUncaughtFrozen(store, key) {
	  return arrayFind(store.a, function (it) {
	    return it[0] === key;
	  });
	};
	UncaughtFrozenStore.prototype = {
	  get: function get(key) {
	    var entry = findUncaughtFrozen(this, key);
	    if (entry) return entry[1];
	  },
	  has: function has(key) {
	    return !!findUncaughtFrozen(this, key);
	  },
	  set: function set(key, value) {
	    var entry = findUncaughtFrozen(this, key);
	    if (entry) entry[1] = value;else this.a.push([key, value]);
	  },
	  'delete': function _delete(key) {
	    var index = arrayFindIndex(this.a, function (it) {
	      return it[0] === key;
	    });
	    if (~index) this.a.splice(index, 1);
	    return !!~index;
	  }
	};
	
	module.exports = {
	  getConstructor: function getConstructor(wrapper, NAME, IS_MAP, ADDER) {
	    var C = wrapper(function (that, iterable) {
	      anInstance(that, C, NAME, '_i');
	      that._t = NAME; // collection type
	      that._i = id++; // collection id
	      that._l = undefined; // leak store for uncaught frozen objects
	      if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);
	    });
	    redefineAll(C.prototype, {
	      // 23.3.3.2 WeakMap.prototype.delete(key)
	      // 23.4.3.3 WeakSet.prototype.delete(value)
	      'delete': function _delete(key) {
	        if (!isObject(key)) return false;
	        var data = getWeak(key);
	        if (data === true) return uncaughtFrozenStore(validate(this, NAME))['delete'](key);
	        return data && $has(data, this._i) && delete data[this._i];
	      },
	      // 23.3.3.4 WeakMap.prototype.has(key)
	      // 23.4.3.4 WeakSet.prototype.has(value)
	      has: function has(key) {
	        if (!isObject(key)) return false;
	        var data = getWeak(key);
	        if (data === true) return uncaughtFrozenStore(validate(this, NAME)).has(key);
	        return data && $has(data, this._i);
	      }
	    });
	    return C;
	  },
	  def: function def(that, key, value) {
	    var data = getWeak(anObject(key), true);
	    if (data === true) uncaughtFrozenStore(that).set(key, value);else data[that._i] = value;
	    return that;
	  },
	  ufstore: uncaughtFrozenStore
	};

/***/ }),
/* 237 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	var anObject = __webpack_require__(6);
	var isObject = __webpack_require__(15);
	var newPromiseCapability = __webpack_require__(209);
	
	module.exports = function (C, x) {
	  anObject(C);
	  if (isObject(x) && x.constructor === C) return x;
	  var promiseCapability = newPromiseCapability.f(C);
	  var resolve = promiseCapability.resolve;
	  resolve(x);
	  return promiseCapability.promise;
	};

/***/ }),
/* 238 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	
	var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
	
	var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
	
	var _backbone = __webpack_require__(11);
	
	var _backbone2 = _interopRequireDefault(_backbone);
	
	var _backbone3 = __webpack_require__(24);
	
	var _backbone4 = _interopRequireDefault(_backbone3);
	
	var _jquery = __webpack_require__(12);
	
	var _jquery2 = _interopRequireDefault(_jquery);
	
	var _underscore = __webpack_require__(33);
	
	var _underscore2 = _interopRequireDefault(_underscore);
	
	var _Feature = __webpack_require__(123);
	
	var _Feature2 = _interopRequireDefault(_Feature);
	
	var _Collection = __webpack_require__(63);
	
	var _Collection2 = _interopRequireDefault(_Collection);
	
	var _Overlay = __webpack_require__(255);
	
	var _Overlay2 = _interopRequireDefault(_Overlay);
	
	var _Draw = __webpack_require__(283);
	
	var _Draw2 = _interopRequireDefault(_Draw);
	
	var _Group2 = __webpack_require__(285);
	
	var _Group3 = _interopRequireDefault(_Group2);
	
	var _GeoJSON = __webpack_require__(270);
	
	var _GeoJSON2 = _interopRequireDefault(_GeoJSON);
	
	var _Polygon = __webpack_require__(57);
	
	var _Polygon2 = _interopRequireDefault(_Polygon);
	
	var _Point = __webpack_require__(85);
	
	var _Point2 = _interopRequireDefault(_Point);
	
	var _uri = __webpack_require__(188);
	
	var _proj = __webpack_require__(16);
	
	var _util = __webpack_require__(120);
	
	var _utils = __webpack_require__(141);
	
	var _CollectionSource = __webpack_require__(232);
	
	var _CollectionSource2 = _interopRequireDefault(_CollectionSource);
	
	var _ModelAttributeSource = __webpack_require__(550);
	
	var _ModelAttributeSource2 = _interopRequireDefault(_ModelAttributeSource);
	
	var _ExportWMSLayerListView = __webpack_require__(549);
	
	var _ExportWMSLayerListView2 = _interopRequireDefault(_ExportWMSLayerListView);
	
	var _progressbar = __webpack_require__(551);
	
	var _progressbar2 = _interopRequireDefault(_progressbar);
	
	__webpack_require__(1112);
	
	var _OpenLayersMapView = __webpack_require__(991);
	
	var _OpenLayersMapView2 = _interopRequireDefault(_OpenLayersMapView);
	
	var _download = __webpack_require__(46);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
	
	function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
	
	function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
	
	var GroupById = function (_Group) {
	  _inherits(GroupById, _Group);
	
	  function GroupById() {
	    var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
	
	    _classCallCheck(this, GroupById);
	
	    var layers = options.layers || [];
	
	    var _this = _possibleConstructorReturn(this, (GroupById.__proto__ || Object.getPrototypeOf(GroupById)).call(this, options));
	
	    _this.byId = {};
	    for (var i = 0; i < layers.length; ++i) {
	      var layer = layers[i];
	      _this.byId[layer.id] = layer;
	    }
	    return _this;
	  }
	
	  _createClass(GroupById, [{
	    key: 'getLayerById',
	    value: function getLayerById(id) {
	      return this.byId[id];
	    }
	  }]);
	
	  return GroupById;
	}(_Group3.default);
	
	function wrapBox(box) {
	  var bbox = box;
	  if (bbox[2] - bbox[0] > 360) {
	    bbox[0] = -180;
	    bbox[2] = 180;
	  }
	  bbox[1] = Math.max(bbox[1], -90);
	  bbox[3] = Math.min(bbox[3], 90);
	
	  for (var i = 0; i <= 2; i += 2) {
	    while (bbox[i] > 180) {
	      bbox[i] -= 360;
	    }
	    while (bbox[i] < -180) {
	      bbox[i] += 360;
	    }
	  }
	  return bbox;
	}
	
	function wrapCoordinate(coord) {
	  var x = coord[0];
	  while (x > 180) {
	    x -= 360;
	  }
	  while (x < -180) {
	    x += 360;
	  }
	  var y = Math.min(Math.max(coord[1], -90), 90);
	  return [x, y];
	}
	
	/**
	 * @memberof contrib/OpenLayers
	 */
	
	var OpenLayersMapView = function (_Marionette$ItemView) {
	  _inherits(OpenLayersMapView, _Marionette$ItemView);
	
	  function OpenLayersMapView() {
	    _classCallCheck(this, OpenLayersMapView);
	
	    return _possibleConstructorReturn(this, (OpenLayersMapView.__proto__ || Object.getPrototypeOf(OpenLayersMapView)).apply(this, arguments));
	  }
	
	  _createClass(OpenLayersMapView, [{
	    key: 'initialize',
	
	    /**
	     * Initialize an OpenLayersMapView
	     * @param {Object} options - Options to initialize the view with.
	     * @param {core/models.FiltersModel} options.filters - the filters model
	     */
	
	    value: function initialize(options) {
	      this.baseLayersCollection = options.baseLayersCollection;
	      this.layersCollection = options.layersCollection;
	      this.overlayLayersCollection = options.overlayLayersCollection;
	
	      this.searchCollection = options.searchCollection;
	
	      this.mapModel = options.mapModel;
	      this.filtersModel = options.filtersModel;
	      this.highlightModel = options.highlightModel;
	
	      this.highlightFillColor = options.highlightFillColor;
	      this.highlightStrokeColor = options.highlightStrokeColor;
	      this.highlightStrokeWidth = options.highlightStrokeWidth;
	      this.filterFillColor = options.filterFillColor;
	      this.filterStrokeColor = options.filterStrokeColor;
	      this.filterOutsideColor = options.filterOutsideColor;
	      this.footprintFillColor = options.footprintFillColor;
	      this.footprintStrokeColor = options.footprintStrokeColor;
	      this.selectedFootprintFillColor = options.selectedFootprintFillColor;
	      this.selectedFootprintStrokeColor = options.selectedFootprintStrokeColor;
	
	      this.staticHighlight = options.staticHighlight;
	      this.useDetailsDisplay = options.useDetailsDisplay;
	
	      this.map = undefined;
	
	      this.isPanning = false;
	      this.isZooming = false;
	
	      this.onFeatureClicked = options.onFeatureClicked;
	      this.constrainOutCoords = options.constrainOutCoords;
	      this.singleLayerModeUsed = options.singleLayerModeUsed;
	
	      this.template = _OpenLayersMapView2.default;
	    }
	  }, {
	    key: 'onRender',
	    value: function onRender() {
	      this.progressBar = new _progressbar2.default();
	      this.createMap();
	      return this;
	    }
	  }, {
	    key: 'onAttach',
	    value: function onAttach() {
	      var _this3 = this;
	
	      if (this.map) {
	        this.map.setTarget(this.el);
	        this.progressBar.setElement(this.$('.progress-bar')[0]);
	
	        var WMScollections = new _backbone4.default.Collection(this.layersCollection.filter(function (layer) {
	          var display = _this3.useDetailsDisplay && layer.get('detailsDisplay') ? layer.get('detailsDisplay') : layer.get('display');
	          var isValidDisplay = typeof display.urls !== 'undefined' ? display.urls[0] !== '' : display.url !== '';
	          return display.protocol === 'WMS' && isValidDisplay;
	        }));
	        if (WMScollections.length > 0) {
	          new _ExportWMSLayerListView2.default({
	            el: this.$('.export-tools')[0],
	            collection: WMScollections,
	            useDetailsDisplay: this.useDetailsDisplay,
	            mapModel: this.mapModel,
	            usedView: this
	          }).render();
	        }
	
	        (0, _jquery2.default)(window).resize(function () {
	          return _this3.onResize();
	        });
	      }
	    }
	
	    /**
	     * Convenience function to setup the map.
	     */
	
	  }, {
	    key: 'createMap',
	    value: function createMap() {
	      var _this4 = this;
	
	      var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
	
	      // assure that we only set up everything once
	
	      if (this.map) {
	        return this;
	      }
	
	      // TODO: move this to layout containing this view
	      this.$el.css({
	        width: '100%',
	        height: '100%'
	      });
	
	      // for internal conversions
	      this.projection = (0, _proj.get)(this.mapModel.get('projection') || 'EPSG:4326');
	      this.geoJSONFormat = new _GeoJSON2.default();
	      this.readerOptions = {
	        featureProjection: this.projection
	      };
	
	      var minZoom = this.layersCollection.filter(function (layer) {
	        return !layer.get('display').noAntialiasing;
	      }).map(function (layer) {
	        return (_this4.useDetailsDisplay && layer.get('detailsDisplay') ? layer.get('detailsDisplay') : layer.get('display')).minZoom;
	      }).filter(function (layerMinZoom) {
	        return typeof layerMinZoom !== 'undefined';
	      }).reduce(function (acc, layerMinZoom) {
	        return Math.max(acc, layerMinZoom);
	      }, this.mapModel.get('minZoom'));
	
	      var maxZoom = this.layersCollection.filter(function (layer) {
	        return !layer.get('display').noAntialiasing;
	      }).map(function (layer) {
	        return (_this4.useDetailsDisplay && layer.get('detailsDisplay') ? layer.get('detailsDisplay') : layer.get('display')).maxZoom;
	      }).filter(function (layerMaxZoom) {
	        return typeof layerMaxZoom !== 'undefined';
	      }).reduce(function (acc, layerMaxZoom) {
	        return Math.min(acc, layerMaxZoom);
	      }, this.mapModel.get('maxZoom'));
	
	      // create the map object
	      this.map = (0, _utils.createMap)(this.mapModel.get('center') || [0, 0], this.mapModel.get('zoom') + 1 || 2, options.mapRenderer || 'canvas', minZoom + 1, maxZoom + 1, this.projection || 'EPSG:4326');
	
	      // create layer groups for base, normal and overlay layers
	
	      var createGroupForCollection = function createGroupForCollection(collection) {
	        var group = new _Group3.default({
	          layers: (0, _utils.sortLayers)(collection, collection.map(function (layerModel) {
	            return (0, _utils.createRasterLayer)(layerModel, _this4.useDetailsDisplay);
	          }))
	        });
	        return group;
	      };
	
	      this.groups = {
	        baseLayers: createGroupForCollection(this.baseLayersCollection),
	        layers: createGroupForCollection(this.layersCollection),
	        overlayLayers: createGroupForCollection(this.overlayLayersCollection)
	      };
	
	      this.groups.layers.getLayers().forEach(function (layer) {
	        _this4.applyLayerFilters(layer, _this4.mapModel);
	        _this4.progressBar.addSource(layer.getSource());
	      }, this);
	
	      var selectionLayer = (0, _utils.createVectorLayer)({
	        fillColor: 'rgba(255, 255, 255, 0.0)',
	        strokeColor: '#ffcc33',
	        strokeWidth: 2,
	        circleRadius: 7
	      });
	      this.selectionSource = selectionLayer.getSource();
	
	      var searchCollection = this.searchCollection || [];
	      // create layer group to display footprints of search results
	      this.searchLayersGroup = new GroupById({
	        layers: searchCollection.map(function (searchModel) {
	          var searchLayer = (0, _utils.createVectorLayer)({
	            strokeColor: _this4.footprintStrokeColor
	          }, new _CollectionSource2.default({
	            collection: searchModel.get('results'),
	            transformModel: function transformModel(model) {
	              return _this4.createMapFeatures(model, searchModel)[0];
	            },
	            format: new _GeoJSON2.default({
	              featureProjection: _this4.projection
	            })
	          }));
	          searchLayer.id = searchModel.get('layerModel').get('id');
	          searchLayer.searchModel = searchModel;
	          _this4.listenTo(searchModel, 'change:automaticSearch', function () {
	            return _this4.onLayerChange(searchModel.get('layerModel'), _this4.groups.layers);
	          });
	          return searchLayer;
	        })
	      });
	
	      this.searchLayersFillGroup = new GroupById({
	        layers: searchCollection.map(function (searchModel) {
	          var searchLayer = (0, _utils.createVectorLayer)({
	            fillColor: _this4.footprintFillColor
	          }, _this4.searchLayersGroup.getLayerById(searchModel.get('layerModel').get('id')).getSource());
	          searchLayer.id = searchModel.get('layerModel').get('id');
	          return searchLayer;
	        })
	      });
	
	      // create layer group to display footprints of download selection
	      this.downloadSelectionLayerGroup = new GroupById({
	        layers: searchCollection.map(function (searchModel) {
	          var downloadSelectionLayer = (0, _utils.createVectorLayer)({
	            strokeColor: _this4.selectedFootprintStrokeColor
	          }, new _CollectionSource2.default({
	            collection: searchModel.get('downloadSelection'),
	            transformModel: function transformModel(model) {
	              return _this4.createMapFeatures(model, searchModel)[0];
	            },
	            format: new _GeoJSON2.default({
	              featureProjection: _this4.projection
	            })
	          }));
	          downloadSelectionLayer.id = searchModel.get('layerModel').get('id');
	          return downloadSelectionLayer;
	        })
	      });
	
	      var downloadSelectionLayerFillGroup = new GroupById({
	        layers: searchCollection.map(function (searchModel) {
	          var downloadSelectionLayer = (0, _utils.createVectorLayer)({
	            fillColor: _this4.selectedFootprintFillColor
	          }, _this4.downloadSelectionLayerGroup.getLayerById(searchModel.get('layerModel').get('id')).getSource());
	          return downloadSelectionLayer;
	        })
	      });
	
	      // create layer for highlighting features
	      var highlightSource = new _ModelAttributeSource2.default({
	        model: this.highlightModel,
	        attributeName: 'highlightFeature',
	        transformAttribute: function transformAttribute(attr) {
	          return _this4.createMapFeatures(attr);
	        },
	        format: new _GeoJSON2.default({
	          featureProjection: this.projection
	        })
	      });
	
	      var highlightLayer = (0, _utils.createVectorLayer)({
	        strokeColor: this.highlightStrokeColor,
	        strokeWidth: this.highlightStrokeWidth
	      }, highlightSource);
	      var highlightFillLayer = (0, _utils.createVectorLayer)({
	        fillColor: this.highlightFillColor,
	        strokeWidth: this.highlightStrokeWidth
	      }, highlightSource);
	
	      // add the layers to the map
	
	      this.map.addLayer(this.groups.baseLayers);
	
	      this.map.addLayer(this.searchLayersFillGroup);
	      this.map.addLayer(downloadSelectionLayerFillGroup);
	      this.map.addLayer(highlightFillLayer);
	
	      this.map.addLayer(this.groups.layers);
	      this.map.addLayer(this.groups.overlayLayers);
	
	      this.map.addLayer(selectionLayer);
	
	      this.map.addLayer(this.searchLayersGroup);
	      this.map.addLayer(this.downloadSelectionLayerGroup);
	
	      this.map.addLayer(highlightLayer);
	
	      // attach to signals of the collections
	      this.setupEvents();
	      this.setupControls();
	
	      return this;
	    }
	  }, {
	    key: 'applyLayerFilters',
	    value: function applyLayerFilters(layer, mapModel) {
	      var filtersModel = void 0;
	      if (layer.searchModel) {
	        filtersModel = layer.searchModel.get('filtersModel');
	      }
	      (0, _utils.updateLayerParams)(layer, mapModel, layer.layerModel, filtersModel, this.useDetailsDisplay);
	    }
	
	    /**
	     * Remove the layer from the given group;
	     *
	     */
	
	  }, {
	    key: 'removeLayer',
	    value: function removeLayer(layerModel, group) {
	      group.getLayers().remove(this.getLayerOfGroup(layerModel, group));
	    }
	  }, {
	    key: 'getLayerOfGroup',
	    value: function getLayerOfGroup(layerModel, group) {
	      var id = layerModel.get('id');
	      var foundLayer = void 0;
	      group.getLayers().forEach(function (layer) {
	        if (layer.id === id) {
	          foundLayer = layer;
	        }
	      });
	      return foundLayer;
	    }
	
	    // Set up all events to change url search parameters
	
	  }, {
	    key: 'setupSearchParamsEvents',
	    value: function setupSearchParamsEvents() {
	      var _this5 = this;
	
	      this.listenTo(this.mapModel, 'change:center', function () {
	        _this5.setSearchParamCenter();
	      });
	      this.listenTo(this.mapModel, 'change:zoom', function () {
	        _this5.setSearchParamZoom();
	      });
	      this.listenTo(this.mapModel, 'change:time', function () {
	        _this5.setSearchParamTime();
	      });
	    }
	  }, {
	    key: 'setSearchParamCenter',
	    value: function setSearchParamCenter() {
	      (0, _util.setSearchParam)('x', (0, _proj.transform)(this.mapModel.get('center'), 'EPSG:4326', this.projection)[0].toFixed(6));
	      (0, _util.setSearchParam)('y', (0, _proj.transform)(this.mapModel.get('center'), 'EPSG:4326', this.projection)[1].toFixed(6));
	    }
	  }, {
	    key: 'setSearchParamZoom',
	    value: function setSearchParamZoom() {
	      (0, _util.setSearchParam)('z', this.mapModel.get('zoom').toFixed(0));
	    }
	  }, {
	    key: 'setSearchParamTime',
	    value: function setSearchParamTime() {
	      (0, _util.setSearchParam)('timestart', (0, _util.getISODateTimeString)(this.mapModel.get('time')[0], false));
	      (0, _util.setSearchParam)('timeend', (0, _util.getISODateTimeString)(this.mapModel.get('time')[1], false));
	    }
	
	    /**
	     * Set up all events from the layer collections
	     *
	     */
	
	  }, {
	    key: 'setupEvents',
	    value: function setupEvents() {
	      var _this6 = this;
	
	      // setup collection signals
	      this.listenTo(this.layersCollection, 'add', function (layerModel) {
	        return _this6.addLayer(layerModel, _this6.groups.layers);
	      });
	      this.listenTo(this.layersCollection, 'change', function (layerModel) {
	        return _this6.onLayerChange(layerModel, _this6.groups.layers);
	      });
	      this.listenTo(this.layersCollection, 'remove', function (layerModel) {
	        return _this6.removeLayer(layerModel, _this6.groups.layers);
	      });
	      this.listenTo(this.layersCollection, 'sort', function (layers) {
	        return _this6.onLayersSorted(layers);
	      });
	
	      this.listenTo(this.baseLayersCollection, 'add', function (layerModel) {
	        return _this6.addLayer(layerModel, _this6.groups.baseLayers);
	      });
	      this.listenTo(this.baseLayersCollection, 'change', function (layerModel) {
	        return _this6.onLayerChange(layerModel, _this6.groups.baseLayers);
	      });
	      this.listenTo(this.baseLayersCollection, 'remove', function (layerModel) {
	        return _this6.removeLayer(layerModel, _this6.groups.baseLayers);
	      });
	
	      this.listenTo(this.overlayLayersCollection, 'add', function (layerModel) {
	        return _this6.addLayer(layerModel, _this6.groups.overlayLayers);
	      });
	      this.listenTo(this.overlayLayersCollection, 'change', function (layerModel) {
	        return _this6.onLayerChange(layerModel, _this6.groups.overlayLayers);
	      });
	      this.listenTo(this.overlayLayersCollection, 'remove', function (layerModel) {
	        return _this6.removeLayer(layerModel, _this6.groups.overlayLayers);
	      });
	
	      // setup mapModel signals
	
	      // directly tie the changes to the map
	      this.listenTo(this.mapModel, 'change:center', function (mapModel) {
	        if (!_this6.isPanning) {
	          _this6.map.getView().setCenter((0, _proj.transform)(mapModel.get('center'), 'EPSG:4326', _this6.projection));
	        }
	      });
	      this.listenTo(this.mapModel, 'change:zoom', function (mapModel) {
	        if (!_this6.isZooming) {
	          _this6.map.getView().setZoom(mapModel.get('zoom'));
	        }
	      });
	
	      this.listenTo(this.mapModel, 'change:roll', function (mapModel) {
	        _this6.map.getView().setRotation(mapModel.get('roll'));
	      });
	
	      this.listenTo(this.mapModel, 'change:time', this.onTimeChange);
	      this.listenTo(this.mapModel, 'change:tool', this.onToolChange);
	
	      this.listenTo(this.mapModel, 'show', function (feature) {
	        // assume EPSG:4326 object is received
	        var geometry = null;
	        if (feature.bbox) {
	          geometry = (0, _proj.transformExtent)(feature.bbox, 'EPSG:4326', _this6.projection);
	        } else if (Array.isArray(feature)) {
	          var _feature = _slicedToArray(feature, 4),
	              minx = _feature[0],
	              miny = _feature[1],
	              maxx = _feature[2],
	              maxy = _feature[3];
	
	          geometry = (0, _Polygon.fromExtent)([minx, miny, maxx > minx ? maxx : maxx + 360, maxy]).transform('EPSG:4326', _this6.projection);
	        } else if (feature.geometry.type === 'Point') {
	          var c = feature.geometry.coordinates;
	          var b = 0.5;
	          geometry = (0, _proj.transformExtent)([c[0] - b, c[1] - b, c[0] + b, c[1] + b], 'EPSG:4326', _this6.projection);
	        } else {
	          geometry = _this6.geoJSONFormat.readGeometry(feature.geometry, _this6.readerOptions);
	        }
	        _this6.map.getView().fit(geometry, { duration: 250 });
	      });
	
	      // setup filters signals
	      this.listenTo(this.mapModel, 'change:area', this.onMapAreaChange);
	
	      var searchCollection = this.searchCollection || [];
	      searchCollection.forEach(function (searchModel) {
	        _this6.listenTo(searchModel.get('filtersModel'), 'change', function (filtersModel) {
	          var layerModel = searchModel.get('layerModel');
	          var cqlParameterName = layerModel.get('display.cqlParameterName');
	          if (cqlParameterName) {
	            var layer = _this6.getLayerOfGroup(layerModel, _this6.groups.layers);
	            (0, _utils.updateLayerParams)(layer, _this6.mapModel, layerModel, filtersModel, _this6.useDetailsDisplay);
	          }
	        });
	      });
	
	      // setup map events
	      this.map.on('pointerdrag', function () {
	        return _this6.onMapPointerDrag.apply(_this6, arguments);
	      });
	      this.map.on('moveend', function () {
	        return _this6.onMapMoveEnd.apply(_this6, arguments);
	      });
	      this.map.on('pointermove', _underscore2.default.throttle(function () {
	        return _this6.onMapPointerMove.apply(_this6, arguments);
	      }, 100));
	      this.map.on('click', function () {
	        return _this6.onMapClick.apply(_this6, arguments);
	      });
	      this.listenTo(this.mapModel, 'manual:filterFromConfig', this.filterFromConfig);
	    }
	
	    /**
	     * Creates OpenLayers interactions and adds them to the map.
	     *
	     */
	
	  }, {
	    key: 'setupControls',
	    value: function setupControls() {
	      var _this7 = this;
	
	      var boxFunc = (0, _Draw.createBox)();
	      this.drawControls = {
	        point: new _Draw2.default({ type: 'Point' }),
	        line: new _Draw2.default({ type: 'LineString' }),
	        polygon: new _Draw2.default({ type: 'Polygon' }),
	        bbox: new _Draw2.default({
	          type: 'Circle',
	          geometryFunction: function geometryFunction() {
	            var box = boxFunc.apply(undefined, arguments);
	            box.isBox = true;
	            return box;
	          }
	        })
	      };
	      Object.keys(this.drawControls).forEach(function (key) {
	        var control = _this7.drawControls[key];
	        control.on('drawend', function (event) {
	          _this7.onDrawFinished(event);
	        });
	      });
	
	      var $html = (0, _jquery2.default)('\n    <div class="popover top in" role="tooltip"\n         style="width: 75px; height: 32px; top: -32px; left: -37px; z-index: unset">\n      <div class="arrow" style="left: 50%;"></div>\n      <div class="popover-content" style="padding: 3px;">\n        <div class="btn-group" role="group">\n          <button type="button" class="btn btn-default btn-xs deselect-feature">\n            <i class="fa fa-minus-circle" aria-hidden="true"></i>\n          </button>\n          <button type="button" class="btn btn-default btn-xs select-feature">\n            <i class="fa fa-plus-circle" aria-hidden="true"></i>\n          </button>\n          <button type="button" class="btn btn-default btn-xs feature-info">\n            <i class="fa fa-info-circle" aria-hidden="true"></i>\n          </button>\n        </div>\n      </div>\n    </div>');
	      this.marker = new _Overlay2.default({
	        positioning: 'top-center',
	        element: $html[0],
	        stopEvent: true
	      });
	      this.map.addOverlay(this.marker);
	
	      $html.find('.select-feature').on('click', function () {
	        for (var i = 0; i < _this7.marker.searchRecords.length; ++i) {
	          var _marker$searchRecords = _slicedToArray(_this7.marker.searchRecords[i], 2),
	              recordModel = _marker$searchRecords[0],
	              searchModel = _marker$searchRecords[1];
	
	          var downloadSelection = searchModel.get('downloadSelection');
	          downloadSelection.add(recordModel);
	        }
	        _this7.hideOverlay();
	      });
	
	      $html.find('.deselect-feature').on('click', function () {
	        for (var i = 0; i < _this7.marker.selectedRecords.length; ++i) {
	          var _marker$selectedRecor = _slicedToArray(_this7.marker.selectedRecords[i], 2),
	              recordModel = _marker$selectedRecor[0],
	              searchModel = _marker$selectedRecor[1];
	
	          var downloadSelection = searchModel.get('downloadSelection');
	          downloadSelection.remove(recordModel.get('id'));
	        }
	        _this7.hideOverlay();
	      });
	
	      $html.find('.feature-info').on('click', function () {
	        _this7.hideOverlay();
	        _this7.onFeatureClicked(_this7.marker.infoRecords);
	      });
	    }
	  }, {
	    key: 'filterFromConfig',
	    value: function filterFromConfig(type, coordinates) {
	      var feature = null;
	      if (type === 'Point' && coordinates.length === 2) {
	        feature = new _Feature2.default({
	          geometry: new _Point2.default(coordinates).transform(this.projection, 'EPSG:4326')
	        });
	      } else if (type === 'Rectangle' && coordinates.length === 4) {
	        var _coordinates = _slicedToArray(coordinates, 4),
	            minx = _coordinates[0],
	            miny = _coordinates[1],
	            maxx = _coordinates[2],
	            maxy = _coordinates[3];
	
	        var geometry = (0, _Polygon.fromExtent)([minx, miny, maxx > minx ? maxx : maxx + 360, maxy]).transform('EPSG:4326', this.projection);
	        geometry.isBox = true;
	        feature = new _Feature2.default({
	          geometry: geometry
	        });
	      } else if (type === 'Polygon') {
	        feature = new _Feature2.default({
	          geometry: new _Polygon2.default(coordinates).transform(this.projection, 'EPSG:4326')
	        });
	      } else {
	        console.log('Not implemented or unknown type: ' + type + '.');
	      }
	      if (feature !== null) {
	        this.onDrawFinished({ feature: feature });
	      }
	    }
	  }, {
	    key: 'onDrawFinished',
	    value: function onDrawFinished(event) {
	      var _this8 = this;
	
	      this.mapModel.set('drawnArea', null);
	      this.selectionSource.clear();
	      var geom = void 0;
	      var newGeom = null;
	      var bounds = [-180, -90, 180, 90];
	      var extent = (0, _proj.transformExtent)(event.feature.getGeometry().getExtent(), this.projection, 'EPSG:4326');
	      if (event.feature.getGeometry().isBox) {
	        geom = (0, _utils.wrapToBounds)(extent, bounds);
	      } else {
	        // it is a feature (point/polygon)
	        geom = (0, _utils.wrapToBounds)(this.geoJSONFormat.writeFeatureObject(event.feature, this.readerOptions), bounds);
	        if (this.constrainOutCoords) {
	          var _featureCoordsToBound = (0, _utils.featureCoordsToBounds)(geom, bounds);
	          // clip coordinates to CRS bounds
	
	
	          var _featureCoordsToBound2 = _slicedToArray(_featureCoordsToBound, 2);
	
	          newGeom = _featureCoordsToBound2[0];
	          geom = _featureCoordsToBound2[1];
	        }
	      }
	
	      // to avoid a zoom-in on a final double click
	      setTimeout(function () {
	        return _this8.mapModel.set({
	          area: newGeom || geom,
	          tool: null,
	          drawnArea: newGeom ? geom : null
	        });
	      });
	    }
	
	    // collection/model signal handlers
	
	  }, {
	    key: 'onLayersSorted',
	    value: function onLayersSorted(layersCollection) {
	      var layers = this.groups.layers.getLayers().getArray();
	      this.groups.layers.setLayers(new _Collection2.default((0, _utils.sortLayers)(layersCollection, layers)));
	    }
	  }, {
	    key: 'onLayerChange',
	    value: function onLayerChange(layerModel, group) {
	      var layer = this.getLayerOfGroup(layerModel, group);
	      var filtersModel = void 0;
	      if (layer.searchModel) {
	        filtersModel = layer.searchModel.get('filtersModel');
	      }
	      (0, _utils.updateLayerParams)(layer, this.mapModel, layerModel, filtersModel, this.useDetailsDisplay);
	
	      var display = this.useDetailsDisplay ? layerModel.get('detailsDisplay') || layerModel.get('display') : layerModel.get('display');
	
	      var searchLayer = this.searchLayersGroup.getLayerById(layerModel.get('id'));
	      var searchModel = null;
	      if (searchLayer) {
	        searchModel = searchLayer.searchModel;
	      }
	
	      if (searchLayer && searchModel) {
	        searchLayer.setVisible((display.visible || this.singleLayerModeUsed) && searchModel.get('automaticSearch'));
	      }
	      var searchFillLayer = this.searchLayersFillGroup.getLayerById(layerModel.get('id'));
	      if (searchFillLayer && searchModel) {
	        searchFillLayer.setVisible((display.visible || this.singleLayerModeUsed) && searchModel.get('automaticSearch'));
	      }
	    }
	  }, {
	    key: 'onTimeChange',
	    value: function onTimeChange() {
	      var _this9 = this;
	
	      this.layersCollection.forEach(function (layerModel) {
	        _this9.applyLayerFilters(_this9.getLayerOfGroup(layerModel, _this9.groups.layers), _this9.mapModel, layerModel);
	      }, this);
	      this.baseLayersCollection.forEach(function (layerModel) {
	        if (layerModel.get('display.synchronizeTime')) {
	          _this9.applyLayerFilters(_this9.getLayerOfGroup(layerModel, _this9.groups.baseLayers), _this9.mapModel, layerModel);
	        }
	      }, this);
	      this.overlayLayersCollection.forEach(function (layerModel) {
	        if (layerModel.get('display.synchronizeTime')) {
	          _this9.applyLayerFilters(_this9.getLayerOfGroup(layerModel, _this9.groups.overlayLayers), _this9.mapModel, layerModel);
	        }
	      }, this);
	    }
	  }, {
	    key: 'onMapAreaChange',
	    value: function onMapAreaChange(mapModel) {
	      this.selectionSource.clear();
	      var area = mapModel.get('drawnArea') || mapModel.get('area');
	
	      var format = new _GeoJSON2.default();
	
	      if (area) {
	        var _createCutOut = (0, _utils.createCutOut)(area, format, this.filterFillColor, this.filterOutsideColor, this.filterStrokeColor, 1),
	            _createCutOut2 = _slicedToArray(_createCutOut, 2),
	            outer = _createCutOut2[0],
	            inner = _createCutOut2[1];
	
	        if (outer) {
	          outer.getGeometry().transform('EPSG:4326', this.projection);
	          this.selectionSource.addFeature(outer);
	        }
	        if (inner) {
	          inner.getGeometry().transform('EPSG:4326', this.projection);
	          this.selectionSource.addFeature(inner);
	        }
	      }
	    }
	  }, {
	    key: 'onToolChange',
	    value: function onToolChange(mapModel) {
	      var _this10 = this;
	
	      var toolName = mapModel.get('tool');
	      // deactivate all potentially activated tools
	      Object.keys(this.drawControls).forEach(function (key) {
	        return _this10.map.removeInteraction(_this10.drawControls[key]);
	      });
	      // activate the requested tool if it is available
	      if (this.drawControls.hasOwnProperty(toolName)) {
	        this.map.addInteraction(this.drawControls[toolName]);
	      }
	
	      this.searchLayersGroup.setVisible(toolName === null);
	      this.searchLayersFillGroup.setVisible(toolName === null);
	    }
	  }, {
	    key: 'onMapPointerDrag',
	    value: function onMapPointerDrag() {
	      // TODO: check if the currently selected tool is the panning tool
	      // TODO: improve this to allow
	      this.isPanning = true;
	    }
	  }, {
	    key: 'onMapMoveEnd',
	    value: function onMapMoveEnd() {
	      var bbox = (0, _proj.transformExtent)(this.map.getView().calculateExtent(this.map.getSize()), this.projection, 'EPSG:4326');
	      // wrap minX and maxX to fit -180, 180
	      bbox = wrapBox(bbox);
	
	      this.mapModel.set({
	        center: wrapCoordinate((0, _proj.transform)(this.map.getView().getCenter(), this.projection, 'EPSG:4326')),
	        zoom: this.map.getView().getZoom(),
	        bbox: bbox
	      });
	      this.isPanning = false;
	      this.isZooming = false;
	    }
	  }, {
	    key: 'onMapPointerMove',
	    value: function onMapPointerMove(event) {
	      var _this11 = this;
	
	      if (this.mapModel.get('tool')) {
	        return;
	      }
	      if (!this.staticHighlight && !this.isOverlayShown()) {
	        var wrappedCoordinate = wrapCoordinate((0, _proj.transform)(event.coordinate, this.projection, 'EPSG:4326'));
	
	        var rawFeatures = [-360, 0, 360].map(function (offset) {
	          var coordinate = [wrappedCoordinate[0] + offset, wrappedCoordinate[1]];
	          var convertedCoordinate = (0, _proj.transform)(coordinate, 'EPSG:4326', _this11.projection);
	          var features = _this11.searchLayersGroup.getLayers().getArray().filter(function (layer) {
	            return layer.getVisible();
	          }).map(function (layer) {
	            return layer.getSource();
	          }).reduce(function (acc, source) {
	            return acc.concat(source.getFeaturesAtCoordinate(convertedCoordinate));
	          }, []).concat(_this11.downloadSelectionLayerGroup.getLayers().getArray().filter(function (layer) {
	            return layer.getVisible();
	          }).map(function (layer) {
	            return layer.getSource();
	          }).reduce(function (acc, source) {
	            return acc.concat(source.getFeaturesAtCoordinate(convertedCoordinate));
	          }, []));
	
	          return features.map(function (feature) {
	            var rawFeature = feature.model.toJSON();
	            rawFeature.layerId = feature.searchModel.get('layerModel').get('id');
	            return rawFeature;
	          });
	        }).reduce(function (acc, source) {
	          return acc.concat(source);
	        }, []);
	
	        this.highlightModel.highlight(rawFeatures);
	      }
	    }
	  }, {
	    key: 'onMapClick',
	    value: function onMapClick(event) {
	      var _this12 = this;
	
	      if (this.mapModel.get('tool') || this.mapModel.get('noclick')) {
	        return;
	      }
	      var coordinate = wrapCoordinate((0, _proj.transform)(event.coordinate, this.projection, 'EPSG:4326'));
	
	      var searchFeatures = [];
	      var selectedFeatures = [];
	      var sortedSearchFeatures = [];
	      var sortedSelectedFeatures = [];
	      [-360, 0, 360].forEach(function (offset) {
	        var offsetCoordinate = [coordinate[0] + offset, coordinate[1]];
	        var convertedCoordinate = (0, _proj.transform)(offsetCoordinate, 'EPSG:4326', _this12.projection);
	
	        _this12.searchLayersGroup.getLayers().getArray().filter(function (layer) {
	          return layer.getVisible();
	        }).map(function (layer) {
	          return layer.getSource();
	        }).reduce(function (acc, source) {
	          return acc.concat(source.getFeaturesAtCoordinate(convertedCoordinate));
	        }, []).forEach(function (feature) {
	          return searchFeatures.indexOf(feature) === -1 ? searchFeatures.push(feature) : null;
	        });
	
	        _this12.downloadSelectionLayerGroup.getLayers().getArray().map(function (layer) {
	          return layer.getSource();
	        }).reduce(function (acc, source) {
	          return acc.concat(source.getFeaturesAtCoordinate(convertedCoordinate));
	        }, []).forEach(function (feature) {
	          return selectedFeatures.indexOf(feature) === -1 ? selectedFeatures.push(feature) : null;
	        });
	      });
	
	      // sorting by model cid to maintain order of search items in which they came from the catalog
	      sortedSearchFeatures = searchFeatures.slice().sort(this.sortByModelId);
	      sortedSelectedFeatures = selectedFeatures.slice().sort(this.sortByModelId);
	      this.highlightModel.highlight(sortedSearchFeatures.map(function (feature) {
	        return feature.model;
	      }));
	      this.showOverlay(event.coordinate, sortedSearchFeatures, sortedSelectedFeatures);
	    }
	
	    /* helper to create OL features */
	
	  }, {
	    key: 'createMapFeatures',
	    value: function createMapFeatures(models, searchModel) {
	      var _this13 = this;
	
	      if (!models) {
	        return [];
	      }
	      var actualModels = models.map ? models : [models];
	
	      return actualModels.map(function (model) {
	        if (model) {
	          var geometry = null;
	          if (model.geometry || model.get && model.get('geometry')) {
	            geometry = _this13.geoJSONFormat.readGeometry(model.geometry || model.get('geometry'), _this13.readerOptions);
	          } else if (model.bbox || model.get && model.get('bbox')) {
	            geometry = _this13.geoJSONFormat.readGeometry((0, _Polygon.fromExtent)(model.bbox || model.get('bbox')), _this13.readerOptions);
	          }
	
	          if (geometry) {
	            var olFeature = new _Feature2.default();
	            olFeature.setGeometry(geometry);
	            olFeature.model = model;
	            olFeature.searchModel = searchModel;
	            olFeature.setId(model.get ? model.get('id') : model.id);
	            return olFeature;
	          }
	        }
	        return null;
	      }).filter(function (olFeature) {
	        return olFeature;
	      });
	    }
	  }, {
	    key: 'showOverlay',
	    value: function showOverlay(coordinate, searchFeatures, selectedFeatures) {
	      var _this14 = this;
	
	      if (searchFeatures.length || selectedFeatures.length) {
	        var searchRecords = searchFeatures.map(function (f) {
	          return [f.model, f.searchModel];
	        });
	        this.marker.searchRecords = searchRecords.filter(function (_ref) {
	          var _ref2 = _slicedToArray(_ref, 2),
	              recordModel = _ref2[0],
	              searchModel = _ref2[1];
	
	          return (0, _download.isRecordDownloadable)(searchModel.get('layerModel'), recordModel);
	        });
	        this.marker.selectedRecords = selectedFeatures.map(function (f) {
	          return [f.model, f.searchModel];
	        });
	        this.marker.infoRecords = (0, _util.uniqueBy)(searchRecords.concat(this.marker.selectedRecords), function (a, b) {
	          return a[0].get('id') === b[0].get('id') && a[1] === b[1];
	        });
	        this.marker.visible = true;
	        this.marker.setPosition(coordinate);
	
	        var $elem = (0, _jquery2.default)(this.marker.getElement());
	        if (selectedFeatures.length) {
	          $elem.find('.deselect-feature').removeAttr('disabled');
	        } else {
	          $elem.find('.deselect-feature').attr('disabled', 'disabled');
	        }
	
	        var unselected = this.marker.searchRecords.filter(function (_ref3) {
	          var _ref4 = _slicedToArray(_ref3, 2),
	              record = _ref4[0],
	              searchModel = _ref4[1];
	
	          return !_this14.marker.selectedRecords.find(function (_ref5) {
	            var _ref6 = _slicedToArray(_ref5, 2),
	                r2 = _ref6[0],
	                s2 = _ref6[1];
	
	            return record.get('id') === r2.get('id') && searchModel === s2;
	          });
	        });
	
	        if (unselected.length) {
	          $elem.find('.select-feature').removeAttr('disabled');
	        } else {
	          $elem.find('.select-feature').attr('disabled', 'disabled');
	        }
	
	        $elem.show();
	      } else {
	        this.hideOverlay();
	      }
	    }
	  }, {
	    key: 'sortByModelId',
	    value: function sortByModelId(a, b) {
	      // sorts array by model cid ascending
	      if (typeof a.model !== 'undefined' && typeof b.model !== 'undefined') {
	        var cidA = parseInt(a.model.cid.slice(1, a.model.cid.length), 10);
	        var cidB = parseInt(b.model.cid.slice(1, b.model.cid.length), 10);
	        return cidA - cidB;
	      } else return a - b;
	    }
	  }, {
	    key: 'hideOverlay',
	    value: function hideOverlay() {
	      this.marker.visible = false;
	      (0, _jquery2.default)(this.marker.getElement()).hide();
	    }
	  }, {
	    key: 'isOverlayShown',
	    value: function isOverlayShown() {
	      return this.marker.visible;
	    }
	  }, {
	    key: 'onDestroy',
	    value: function onDestroy() {
	      // TODO: necessary?
	    }
	  }, {
	    key: 'onResize',
	    value: function onResize() {
	      this.map.updateSize();
	    }
	  }, {
	    key: 'onExportWmsurl',
	    value: function onExportWmsurl(layerModel) {
	      var useDetailsDisplay = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
	
	      // if able, for a given layer returns current map view as a single WMS link with same url
	      var baseWmsParams = {
	        SERVICE: 'WMS',
	        REQUEST: 'GetMap',
	        TRANSPARENT: true
	      };
	      var displayParams = useDetailsDisplay ? layerModel.get('detailsDisplay') || layerModel.get('display') : layerModel.get('display');
	      var url = typeof displayParams.urls !== 'undefined' ? displayParams.urls[0] : displayParams.url;
	      // use layer projection or map projection if not set
	      var layerProjection = displayParams.projection || this.projection.getCode();
	      var format = displayParams.format || 'image/png';
	      // get map layer corresponding to layerModel
	      var mapLayer = this.getLayerOfGroup(layerModel, this.groups.layers);
	      var source = mapLayer.getSource();
	      var previousParams = void 0;
	
	      if (source.getParams) {
	        // WMSTileSource
	        previousParams = source.getParams();
	      } else {
	        previousParams = {};
	      }
	      var params = Object.assign(baseWmsParams, previousParams);
	      var mapSizePx = this.map.getSize();
	      var bbox = (0, _proj.transformExtent)(this.map.getView().calculateExtent(mapSizePx), this.projection, layerProjection);
	      bbox = wrapBox(bbox);
	      params.FORMAT = format;
	      params.SRS = layerProjection;
	      params.WIDTH = mapSizePx[0];
	      params.HEIGHT = mapSizePx[1];
	      params.BBOX = bbox.join(',');
	      var urlWithParams = (0, _uri.appendParams)(url, params);
	      return urlWithParams;
	    }
	  }]);
	
	  return OpenLayersMapView;
	}(_backbone2.default.ItemView);
	
	OpenLayersMapView.prototype.template = function () {
	  return '';
	};
	
	OpenLayersMapView.prototype.events = {
	  resize: 'onResize'
	};
	
	exports.default = OpenLayersMapView;

/***/ }),
/* 239 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	
	var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
	
	var _backbone = __webpack_require__(24);
	
	var _backbone2 = _interopRequireDefault(_backbone);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
	
	function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
	
	function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
	
	/**
	 * @memberof core/models
	 */
	
	var HighlightModel = function (_Backbone$Model) {
	  _inherits(HighlightModel, _Backbone$Model);
	
	  function HighlightModel() {
	    _classCallCheck(this, HighlightModel);
	
	    return _possibleConstructorReturn(this, (HighlightModel.__proto__ || Object.getPrototypeOf(HighlightModel)).apply(this, arguments));
	  }
	
	  _createClass(HighlightModel, [{
	    key: 'highlight',
	    value: function highlight(feature) {
	      this.set('highlightFeature', feature);
	    }
	  }, {
	    key: 'unHighlight',
	    value: function unHighlight(feature) {
	      var currentFeature = this.get('highlightFeature');
	      if (currentFeature && currentFeature.id === feature.id) {
	        this.set('highlightFeature', null);
	      }
	    }
	  }]);
	
	  return HighlightModel;
	}(_backbone2.default.Model);
	
	HighlightModel.prototype.defaults = {
	  highlightFeature: null
	};
	
	exports.default = HighlightModel;

/***/ }),
/* 240 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	
	var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
	
	var _backbone = __webpack_require__(24);
	
	var _backbone2 = _interopRequireDefault(_backbone);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
	
	function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
	
	function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
	
	/**
	 * This model is used to store the relevant values for map views (2D or 3D), such as camera options
	 *
	 * @memberof core/models
	 *
	 * @param {Object} attributes The attributes of the model instance
	 * @param {Number[]} [attributes.center] The center of the view
	 * @param {Number} [attributes.zoom] The zoomlevel of the view
	 * @param {string} [attributes.tool] The currently selected tool
	 * @param {bool} [attributes.isZooming] Indicator whether the map is currently zooming
	 * @param {bool} [attributes.isPanning] Indicator whether the map is currently panning
	 * @param {Number} [attributes.heading] The heading
	 * @param {Number} [attributes.pitch] The pitch
	 * @param {Number} [attributes.roll] The roll
	 */
	
	var MapModel = function (_Backbone$Model) {
	  _inherits(MapModel, _Backbone$Model);
	
	  function MapModel() {
	    _classCallCheck(this, MapModel);
	
	    return _possibleConstructorReturn(this, (MapModel.__proto__ || Object.getPrototypeOf(MapModel)).apply(this, arguments));
	  }
	
	  _createClass(MapModel, [{
	    key: 'show',
	    value: function show(featureOrExtent) {
	      this.trigger('show', featureOrExtent);
	    }
	  }, {
	    key: 'showTime',
	    value: function showTime(timeExtent) {
	      this.trigger('show:time', timeExtent);
	    }
	  }]);
	
	  return MapModel;
	}(_backbone2.default.Model);
	
	MapModel.prototype.defaults = {
	  // the current center and zoom of the map view
	  center: [0, 0],
	  bbox: [0, 0, 1, 1],
	  area: null, // area that is used for search
	  zoom: 2,
	  minZoom: 0,
	  maxZoom: 28,
	  projection: null,
	  drawnArea: null, // area that will be drawn (over crs bounds)
	
	  // the current start/end time selection
	  time: [null, null],
	  extendedTime: null,
	  maxMapInterval: null,
	  exceedMaxMapInterval: false,
	
	  tool: null,
	
	  // properties to indicate that the map is currently panned or zoomed by the user
	  isZooming: false,
	  isPanning: false,
	
	  // for 3D viewers
	  heading: 0,
	  pitch: 0,
	  roll: 0,
	
	  highlightFeature: null
	};
	
	exports.default = MapModel;

/***/ }),
/* 241 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	
	var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
	
	var _backbone = __webpack_require__(24);
	
	var _backbone2 = _interopRequireDefault(_backbone);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
	
	function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
	
	function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
	
	var RecordModel = function (_Backbone$Model) {
	  _inherits(RecordModel, _Backbone$Model);
	
	  function RecordModel() {
	    _classCallCheck(this, RecordModel);
	
	    return _possibleConstructorReturn(this, (RecordModel.__proto__ || Object.getPrototypeOf(RecordModel)).apply(this, arguments));
	  }
	
	  _createClass(RecordModel, [{
	    key: 'getThumbnailUrl',
	    value: function getThumbnailUrl() {
	      // overwrite in sub-class
	      return null;
	    }
	  }, {
	    key: 'getBrowseUrl',
	    value: function getBrowseUrl() {
	      // overwrite in sub-class
	      return null;
	    }
	  }, {
	    key: 'getQuickLookUrl',
	    value: function getQuickLookUrl() {
	      // overwrite in sub-class
	      return null;
	    }
	  }, {
	    key: 'getTitle',
	    value: function getTitle() {
	      return this.get('id');
	    }
	  }, {
	    key: 'triggerShowInfo',
	    value: function triggerShowInfo() {
	      var collection = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.collection;
	
	      if (collection && collection.searchModel) {
	        collection.searchModel.triggerShowInfo(this);
	      }
	    }
	  }, {
	    key: 'selectForDownload',
	    value: function selectForDownload() {
	      var select = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
	      var collection = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.collection;
	
	      if (collection && collection.searchModel) {
	        var downloadSelection = collection.searchModel.get('downloadSelection');
	        if (select) {
	          downloadSelection.add(this);
	        } else {
	          downloadSelection.remove(this.get('id'));
	        }
	      }
	    }
	  }, {
	    key: 'isSelectedForDownload',
	    value: function isSelectedForDownload() {
	      var _this2 = this;
	
	      var collection = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.collection;
	
	      if (collection && collection.searchModel) {
	        var downloadSelection = collection.searchModel.get('downloadSelection');
	        return downloadSelection.findIndex(function (other) {
	          return other.get('id') === _this2.get('id');
	        }) !== -1;
	      }
	      return undefined;
	    }
	  }]);
	
	  return RecordModel;
	}(_backbone2.default.Model);
	
	exports.default = RecordModel;

/***/ }),
/* 242 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	
	var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
	
	__webpack_require__(192);
	
	__webpack_require__(230);
	
	var _jquery = __webpack_require__(12);
	
	var _jquery2 = _interopRequireDefault(_jquery);
	
	var _backbone = __webpack_require__(11);
	
	var _backbone2 = _interopRequireDefault(_backbone);
	
	var _underscore = __webpack_require__(33);
	
	var _underscore2 = _interopRequireDefault(_underscore);
	
	__webpack_require__(1121);
	
	var _LayerOptionsCoreView = __webpack_require__(998);
	
	var _LayerOptionsCoreView2 = _interopRequireDefault(_LayerOptionsCoreView);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
	
	// eslint-disable-next-line max-len
	var LayerOptionsCoreView = _backbone2.default.ItemView.extend({
	  template: _LayerOptionsCoreView2.default,
	  events: {
	    'change .layer-option': 'onLayerOptionChange',
	    'change .visualization-selector': 'onVisualizationChange'
	  },
	
	  templateHelpers: function templateHelpers() {
	    return {
	      options: this.getDisplayOptions(),
	      legendUrl: this.display ? this.display.legendUrl : null
	    };
	  },
	  initialize: function initialize(options) {
	    this.useDetailsDisplay = options.useDetailsDisplay && !!this.model.get('detailsDisplay');
	    this.displayOption = this.useDetailsDisplay ? 'detailsDisplay' : 'display';
	    this.model = options.model;
	    this.displayOptions = this.model.get(this.displayOption + '.options');
	  },
	  getDisplayOptions: function getDisplayOptions() {
	    var _this = this;
	
	    if (this.displayOptions) {
	      // if opened for the first time, choose the first option
	      if (_underscore2.default.filter(this.displayOptions, function (option) {
	        return option.isChosen === true;
	      }).length === 0) {
	        this.model.set(this.displayOption + '.options[0].isChosen', true);
	      }
	      // if opened for the first time, preset b1, b2, b3 as indices[0, 1, 2]
	      _underscore2.default.each(this.displayOptions, function (option, i) {
	        if (option.values) {
	          var result = _underscore2.default.every(['isCurrentB1', 'isCurrentB2', 'isCurrentB3'], function (isCurrent) {
	            return _underscore2.default.filter(option.values, function (val) {
	              return val[isCurrent] === true;
	            }).length === 0;
	          });
	          if (result && option.selectThree) {
	            _this.model.set(_this.displayOption + '.options[' + i + '].values[0].isCurrentB1', true);
	            _this.model.set(_this.displayOption + '.options[' + i + '].values[1].isCurrentB2', true);
	            _this.model.set(_this.displayOption + '.options[' + i + '].values[2].isCurrentB3', true);
	          } else if (result) {
	            _this.model.set(_this.displayOption + '.options[' + i + '].values[0].isCurrentB1', true);
	          }
	          _underscore2.default.each(option.values, function (value, j) {
	            var label = typeof value.label !== 'undefined' ? value.label : value.value;
	            _this.model.set(_this.displayOption + '.options[' + i + '].values[' + j + '].label', label);
	          });
	        }
	      });
	      // to set internal numeric id of elements
	      var counter = -1;
	      var options = this.model.get(this.displayOption + '.options').map(function (option) {
	        var low = void 0;
	        var high = void 0;
	        var targetLow = void 0;
	        var targetHigh = void 0;
	        var target = option.target;
	        counter += 1;
	        if (typeof option.min !== 'undefined') {
	          var _ref = Array.isArray(target) ? target : target.split(',');
	
	          var _ref2 = _slicedToArray(_ref, 2);
	
	          targetLow = _ref2[0];
	          targetHigh = _ref2[1];
	
	          low = _this.model.get(targetLow);
	          high = _this.model.get(targetHigh);
	        }
	        return Object.assign({}, option, { counter: counter, low: low, high: high, targetLow: targetLow, targetHigh: targetHigh });
	      });
	      return options;
	    }
	    return {};
	  },
	  onRender: function onRender() {
	    var _this2 = this;
	
	    var opacity = this.model.get(this.displayOption).opacity;
	    opacity = typeof opacity === 'undefined' ? 1 : opacity;
	    this.$slider = this.$('.opacity-slider').slider({
	      min: 0,
	      max: 100,
	      value: opacity * 100,
	      formatter: function formatter(value) {
	        return value + '%';
	      }
	    });
	
	    this.$slider.on('slide', function (event) {
	      _this2.model.set(_this2.displayOption + '.opacity', event.value / 100);
	    });
	    this.$slider.on('change', function () {
	      _this2.model.set(_this2.displayOption + '.opacity', parseInt(_this2.$slider.val(), 10) / 100);
	    });
	
	    var $dataSliders = this.$('input[data-slider-min]');
	    if ($dataSliders.length) {
	      $dataSliders.slider().on('slideStop', function (event) {
	        var _this2$model$set;
	
	        var $target = (0, _jquery2.default)(event.target);
	        _this2.model.set((_this2$model$set = {}, _defineProperty(_this2$model$set, $target.data('targetLow'), event.value[0]), _defineProperty(_this2$model$set, $target.data('targetHigh'), event.value[1]), _this2$model$set));
	      });
	    }
	    this.applySettings();
	  },
	  onLayerOptionChange: function onLayerOptionChange(event) {
	    // set the corresponding visualization to be used and apply changes
	    var $target = this.$(event.target);
	    var $input = $target.parent().parent().find('.visualization-selector');
	    // to trigger onchange event on input if necessary
	    $input.click();
	    this.applySettings();
	  },
	  replaceLayerParameters: function replaceLayerParameters(option) {
	    var _this3 = this;
	
	    // perform replacing of parameters in underyling model if it was configured
	    var replaceList = option.replace;
	    _underscore2.default.each(replaceList, function (config) {
	      if (typeof config.target === 'string' && typeof config.value !== 'undefined') {
	        if (config.value.template) {
	          // interpolate template
	          var evaluated = _underscore2.default.template(config.value.template, {
	            interpolate: /\{\{(.+?)\}\}/g
	          })(_this3.model.toJSON());
	          _this3.model.set(config.target, evaluated);
	        } else {
	          _this3.model.set(config.target, config.value);
	        }
	      }
	    });
	  },
	  onVisualizationChange: function onVisualizationChange(event) {
	    var _this4 = this;
	
	    // find checked input and reset option.isChosen based on id of that input
	    _underscore2.default.each(this.model.get(this.displayOption + '.options'), function (option, i) {
	      _this4.model.set(_this4.displayOption + '.options[' + i + '].isChosen', false);
	    });
	    var id = event.target.id;
	    // get the number at the end of #id - index
	    var idNum = id.substring(id.lastIndexOf('_') + 1, id.length);
	
	    this.model.set(this.displayOption + '.options[' + idNum + '].isChosen', true);
	    this.applySettings();
	  },
	  applySettings: function applySettings() {
	    var _this5 = this;
	
	    // set values from currently chosen form/s in layerModel
	    _underscore2.default.each(this.model.get(this.displayOption + '.options'), function (option, index) {
	      // get corresponding form/s
	      var $forms = _this5.$('#visualization-selector_' + index).parent().parent().find('.layer-option');
	      var values = [];
	      var selectedIndices = [];
	      $forms.each(function (i, el) {
	        values.push(el.value);
	        selectedIndices.push(el.selectedIndex);
	      });
	
	      // reset isSelected in model and update it with what is selected in ui
	      _underscore2.default.each(option.values, function (value, j) {
	        _this5.model.set(_this5.displayOption + '.options[' + index + '].values[' + j + '].isCurrentB1', false);
	        _this5.model.set(_this5.displayOption + '.options[' + index + '].values[' + j + '].isCurrentB2', false);
	        _this5.model.set(_this5.displayOption + '.options[' + index + '].values[' + j + '].isCurrentB3', false);
	      });
	
	      if (option.selectThree) {
	        _this5.model.set(_this5.displayOption + '.options[' + index + '].values[' + selectedIndices[0] + '].isCurrentB1', true);
	        _this5.model.set(_this5.displayOption + '.options[' + index + '].values[' + selectedIndices[1] + '].isCurrentB2', true);
	        _this5.model.set(_this5.displayOption + '.options[' + index + '].values[' + selectedIndices[2] + '].isCurrentB3', true);
	      } else {
	        _this5.model.set(_this5.displayOption + '.options[' + index + '].values[' + selectedIndices[0] + '].isCurrentB1', true);
	      }
	
	      if (option.isChosen === true) {
	        // set options to model and trigger a reload of layer in map
	        _this5.model.set('' + $forms.attr('name'), values.join(','));
	      } else {
	        // reset option
	        _this5.model.set('' + $forms.attr('name'), '');
	      }
	    });
	    _underscore2.default.each(this.model.get(this.displayOption + '.options'), function (option) {
	      if (option.isChosen === true) {
	        // if replace was configured for this option, apply it
	        _this5.replaceLayerParameters(option);
	      }
	    });
	  }
	});
	
	exports.default = LayerOptionsCoreView;

/***/ }),
/* 243 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	exports.default = rewrite;
	
	var _underscore = __webpack_require__(33);
	
	var _underscore2 = _interopRequireDefault(_underscore);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	function getRewriteRule(template, modelOrCollection) {
	  // allows use of templating inside rewrite function
	  if (modelOrCollection) {
	    if (template.constructor.name === 'RegExp') {
	      return template;
	    }
	    var stringified = modelOrCollection.toJSON();
	    var evaluatedTemplate = _underscore2.default.template(template, {
	      interpolate: /\{\{(.+?)\}\}/g
	    })(stringified);
	    return evaluatedTemplate;
	  }
	  return template;
	}
	
	function rewrite(url, rule, modelOrCollection) {
	  // example of templating adding __coverage to id attribute in url:
	  // "from": "/({{id}}*)/gm"
	  // "to": "$1__coverage",
	  if (rule && rule.from && rule.to) {
	    return url.replace(new RegExp(getRewriteRule(rule.from, modelOrCollection)), getRewriteRule(rule.to, modelOrCollection));
	  }
	  return url;
	}

/***/ }),
/* 244 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	
	var _RecordItemView = __webpack_require__(167);
	
	var _RecordItemView2 = _interopRequireDefault(_RecordItemView);
	
	var _SelectionListItemView = __webpack_require__(1003);
	
	var _SelectionListItemView2 = _interopRequireDefault(_SelectionListItemView);
	
	__webpack_require__(1123);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	// eslint-disable-next-line max-len
	var SelectionListItemView = _RecordItemView2.default.extend( /** @lends download/views/layers.SelectionListItemView */{
	  template: _SelectionListItemView2.default,
	  className: 'selection-list-item record-item',
	  events: Object.assign({}, _RecordItemView2.default.prototype.events, {
	    'click .record-unselect': 'onRecordUnselectClicked'
	  }),
	
	  onRecordUnselectClicked: function onRecordUnselectClicked() {
	    this.model.selectForDownload(false, this.collection);
	  }
	});
	
	exports.default = SelectionListItemView;

/***/ }),
/* 245 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	
	var _i18next = __webpack_require__(163);
	
	var _i18next2 = _interopRequireDefault(_i18next);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	exports.default = _i18next2.default;

/***/ }),
/* 246 */
/***/ (function(module, exports, __webpack_require__) {

	/* WEBPACK VAR INJECTION */(function(global) {'use strict';
	
	var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
	
	var origSymbol = global.Symbol;
	var hasSymbolSham = __webpack_require__(571);
	
	module.exports = function hasNativeSymbols() {
		if (typeof origSymbol !== 'function') {
			return false;
		}
		if (typeof Symbol !== 'function') {
			return false;
		}
		if (_typeof(origSymbol('foo')) !== 'symbol') {
			return false;
		}
		if (_typeof(Symbol('bar')) !== 'symbol') {
			return false;
		}
	
		return hasSymbolSham();
	};
	/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))

/***/ }),
/* 247 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	var implementation = __webpack_require__(506);
	
	module.exports = function getPolyfill() {
		return typeof Object.is === 'function' ? Object.is : implementation;
	};

/***/ }),
/* 248 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	
	var _util = __webpack_require__(14);
	
	var __extends = undefined && undefined.__extends || function () {
	    var _extendStatics = function extendStatics(d, b) {
	        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	            d.__proto__ = b;
	        } || function (d, b) {
	            for (var p in b) {
	                if (b.hasOwnProperty(p)) d[p] = b[p];
	            }
	        };
	        return _extendStatics(d, b);
	    };
	    return function (d, b) {
	        _extendStatics(d, b);
	        function __() {
	            this.constructor = d;
	        }
	        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	    };
	}();
	/**
	 * @module ol/AssertionError
	 */
	
	/**
	 * Error object thrown when an assertion failed. This is an ECMA-262 Error,
	 * extended with a `code` property.
	 * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error.
	 */
	var AssertionError = /** @class */function (_super) {
	    __extends(AssertionError, _super);
	    /**
	     * @param {number} code Error code.
	     */
	    function AssertionError(code) {
	        var _this = this;
	        var path = _util.VERSION === 'latest' ? _util.VERSION : 'v' + _util.VERSION.split('-')[0];
	        var message = 'Assertion failed. See https://openlayers.org/en/' + path + '/doc/errors/#' + code + ' for details.';
	        _this = _super.call(this, message) || this;
	        /**
	         * Error code. The meaning of the code can be found on
	         * https://openlayers.org/en/latest/doc/errors/ (replace `latest` with
	         * the version found in the OpenLayers script's header comment if a version
	         * other than the latest is used).
	         * @type {number}
	         * @api
	         */
	        _this.code = code;
	        /**
	         * @type {string}
	         */
	        _this.name = 'AssertionError';
	        // Re-assign message, see https://github.com/Rich-Harris/buble/issues/40
	        _this.message = message;
	        return _this;
	    }
	    return AssertionError;
	}(Error);
	exports.default = AssertionError;
	//# sourceMappingURL=AssertionError.js.map

/***/ }),
/* 249 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	exports.listenImage = listenImage;
	
	var _ImageBase = __webpack_require__(575);
	
	var _ImageBase2 = _interopRequireDefault(_ImageBase);
	
	var _ImageState = __webpack_require__(100);
	
	var _ImageState2 = _interopRequireDefault(_ImageState);
	
	var _events = __webpack_require__(30);
	
	var _EventType = __webpack_require__(10);
	
	var _EventType2 = _interopRequireDefault(_EventType);
	
	var _extent = __webpack_require__(4);
	
	var _has = __webpack_require__(105);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var __extends = undefined && undefined.__extends || function () {
	    var _extendStatics = function extendStatics(d, b) {
	        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	            d.__proto__ = b;
	        } || function (d, b) {
	            for (var p in b) {
	                if (b.hasOwnProperty(p)) d[p] = b[p];
	            }
	        };
	        return _extendStatics(d, b);
	    };
	    return function (d, b) {
	        _extendStatics(d, b);
	        function __() {
	            this.constructor = d;
	        }
	        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	    };
	}();
	/**
	 * @module ol/Image
	 */
	
	/**
	 * A function that takes an {@link module:ol/Image~Image} for the image and a
	 * `{string}` for the src as arguments. It is supposed to make it so the
	 * underlying image {@link module:ol/Image~Image#getImage} is assigned the
	 * content specified by the src. If not specified, the default is
	 *
	 *     function(image, src) {
	 *       image.getImage().src = src;
	 *     }
	 *
	 * Providing a custom `imageLoadFunction` can be useful to load images with
	 * post requests or - in general - through XHR requests, where the src of the
	 * image element would be set to a data URI when the content is loaded.
	 *
	 * @typedef {function(ImageWrapper, string): void} LoadFunction
	 * @api
	 */
	var ImageWrapper = /** @class */function (_super) {
	    __extends(ImageWrapper, _super);
	    /**
	     * @param {import("./extent.js").Extent} extent Extent.
	     * @param {number|undefined} resolution Resolution.
	     * @param {number} pixelRatio Pixel ratio.
	     * @param {string} src Image source URI.
	     * @param {?string} crossOrigin Cross origin.
	     * @param {LoadFunction} imageLoadFunction Image load function.
	     */
	    function ImageWrapper(extent, resolution, pixelRatio, src, crossOrigin, imageLoadFunction) {
	        var _this = _super.call(this, extent, resolution, pixelRatio, _ImageState2.default.IDLE) || this;
	        /**
	         * @private
	         * @type {string}
	         */
	        _this.src_ = src;
	        /**
	         * @private
	         * @type {HTMLCanvasElement|HTMLImageElement|HTMLVideoElement}
	         */
	        _this.image_ = new Image();
	        if (crossOrigin !== null) {
	            _this.image_.crossOrigin = crossOrigin;
	        }
	        /**
	         * @private
	         * @type {?function():void}
	         */
	        _this.unlisten_ = null;
	        /**
	         * @protected
	         * @type {ImageState}
	         */
	        _this.state = _ImageState2.default.IDLE;
	        /**
	         * @private
	         * @type {LoadFunction}
	         */
	        _this.imageLoadFunction_ = imageLoadFunction;
	        return _this;
	    }
	    /**
	     * @inheritDoc
	     * @api
	     */
	    ImageWrapper.prototype.getImage = function () {
	        return this.image_;
	    };
	    /**
	     * Tracks loading or read errors.
	     *
	     * @private
	     */
	    ImageWrapper.prototype.handleImageError_ = function () {
	        this.state = _ImageState2.default.ERROR;
	        this.unlistenImage_();
	        this.changed();
	    };
	    /**
	     * Tracks successful image load.
	     *
	     * @private
	     */
	    ImageWrapper.prototype.handleImageLoad_ = function () {
	        if (this.resolution === undefined) {
	            this.resolution = (0, _extent.getHeight)(this.extent) / this.image_.height;
	        }
	        this.state = _ImageState2.default.LOADED;
	        this.unlistenImage_();
	        this.changed();
	    };
	    /**
	     * Load the image or retry if loading previously failed.
	     * Loading is taken care of by the tile queue, and calling this method is
	     * only needed for preloading or for reloading in case of an error.
	     * @override
	     * @api
	     */
	    ImageWrapper.prototype.load = function () {
	        if (this.state == _ImageState2.default.IDLE || this.state == _ImageState2.default.ERROR) {
	            this.state = _ImageState2.default.LOADING;
	            this.changed();
	            this.imageLoadFunction_(this, this.src_);
	            this.unlisten_ = listenImage(this.image_, this.handleImageLoad_.bind(this), this.handleImageError_.bind(this));
	        }
	    };
	    /**
	     * @param {HTMLCanvasElement|HTMLImageElement|HTMLVideoElement} image Image.
	     */
	    ImageWrapper.prototype.setImage = function (image) {
	        this.image_ = image;
	    };
	    /**
	     * Discards event handlers which listen for load completion or errors.
	     *
	     * @private
	     */
	    ImageWrapper.prototype.unlistenImage_ = function () {
	        if (this.unlisten_) {
	            this.unlisten_();
	            this.unlisten_ = null;
	        }
	    };
	    return ImageWrapper;
	}(_ImageBase2.default);
	/**
	 * @param {HTMLCanvasElement|HTMLImageElement|HTMLVideoElement} image Image element.
	 * @param {function():any} loadHandler Load callback function.
	 * @param {function():any} errorHandler Error callback function.
	 * @return {function():void} Callback to stop listening.
	 */
	function listenImage(image, loadHandler, errorHandler) {
	    var img = /** @type {HTMLImageElement} */image;
	    if (img.src && _has.IMAGE_DECODE) {
	        var promise = img.decode();
	        var listening_1 = true;
	        var unlisten = function unlisten() {
	            listening_1 = false;
	        };
	        promise.then(function () {
	            if (listening_1) {
	                loadHandler();
	            }
	        }).catch(function (error) {
	            if (listening_1) {
	                // FIXME: Unconditionally call errorHandler() when this bug is fixed upstream:
	                //        https://bugs.webkit.org/show_bug.cgi?id=198527
	                if (error.name === 'EncodingError' && error.message === 'Invalid image type.') {
	                    loadHandler();
	                } else {
	                    errorHandler();
	                }
	            }
	        });
	        return unlisten;
	    }
	    var listenerKeys = [(0, _events.listenOnce)(img, _EventType2.default.LOAD, loadHandler), (0, _events.listenOnce)(img, _EventType2.default.ERROR, errorHandler)];
	    return function unlisten() {
	        listenerKeys.forEach(_events.unlistenByKey);
	    };
	}
	exports.default = ImageWrapper;
	//# sourceMappingURL=Image.js.map

/***/ }),
/* 250 */
/***/ (function(module, exports, __webpack_require__) {

	"use strict";
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	
	var _MapEvent = __webpack_require__(252);
	
	var _MapEvent2 = _interopRequireDefault(_MapEvent);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var __extends = undefined && undefined.__extends || function () {
	    var _extendStatics = function extendStatics(d, b) {
	        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	            d.__proto__ = b;
	        } || function (d, b) {
	            for (var p in b) {
	                if (b.hasOwnProperty(p)) d[p] = b[p];
	            }
	        };
	        return _extendStatics(d, b);
	    };
	    return function (d, b) {
	        _extendStatics(d, b);
	        function __() {
	            this.constructor = d;
	        }
	        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	    };
	}();
	/**
	 * @module ol/MapBrowserEvent
	 */
	
	/**
	 * @classdesc
	 * Events emitted as map browser events are instances of this type.
	 * See {@link module:ol/PluggableMap~PluggableMap} for which events trigger a map browser event.
	 */
	var MapBrowserEvent = /** @class */function (_super) {
	    __extends(MapBrowserEvent, _super);
	    /**
	     * @param {string} type Event type.
	     * @param {import("./PluggableMap.js").default} map Map.
	     * @param {Event} browserEvent Browser event.
	     * @param {boolean=} opt_dragging Is the map currently being dragged?
	     * @param {?import("./PluggableMap.js").FrameState=} opt_frameState Frame state.
	     */
	    function MapBrowserEvent(type, map, browserEvent, opt_dragging, opt_frameState) {
	        var _this = _super.call(this, type, map, opt_frameState) || this;
	        /**
	         * The original browser event.
	         * @const
	         * @type {Event}
	         * @api
	         */
	        _this.originalEvent = browserEvent;
	        /**
	         * The map pixel relative to the viewport corresponding to the original browser event.
	         * @type {?import("./pixel.js").Pixel}
	         */
	        _this.pixel_ = null;
	        /**
	         * The coordinate in the user projection corresponding to the original browser event.
	         * @type {?import("./coordinate.js").Coordinate}
	         */
	        _this.coordinate_ = null;
	        /**
	         * Indicates if the map is currently being dragged. Only set for
	         * `POINTERDRAG` and `POINTERMOVE` events. Default is `false`.
	         *
	         * @type {boolean}
	         * @api
	         */
	        _this.dragging = opt_dragging !== undefined ? opt_dragging : false;
	        return _this;
	    }
	    Object.defineProperty(MapBrowserEvent.prototype, "pixel", {
	        /**
	         * The map pixel relative to the viewport corresponding to the original browser event.
	         * @type {import("./pixel.js").Pixel}
	         * @api
	         */
	        get: function get() {
	            if (!this.pixel_) {
	                this.pixel_ = this.map.getEventPixel(this.originalEvent);
	            }
	            return this.pixel_;
	        },
	        set: function set(pixel) {
	            this.pixel_ = pixel;
	        },
	        enumerable: true,
	        configurable: true
	    });
	    Object.defineProperty(MapBrowserEvent.prototype, "coordinate", {
	        /**
	         * The coordinate corresponding to the original browser event.  This will be in the user
	         * projection if one is set.  Otherwise it will be in the view projection.
	         * @type {import("./coordinate.js").Coordinate}
	         * @api
	         */
	        get: function get() {
	            if (!this.coordinate_) {
	                this.coordinate_ = this.map.getCoordinateFromPixel(this.pixel);
	            }
	            return this.coordinate_;
	        },
	        set: function set(coordinate) {
	            this.coordinate_ = coordinate;
	        },
	        enumerable: true,
	        configurable: true
	    });
	    /**
	     * Prevents the default browser action.
	     * See https://developer.mozilla.org/en-US/docs/Web/API/event.preventDefault.
	     * @override
	     * @api
	     */
	    MapBrowserEvent.prototype.preventDefault = function () {
	        _super.prototype.preventDefault.call(this);
	        this.originalEvent.preventDefault();
	    };
	    /**
	     * Prevents further propagation of the current event.
	     * See https://developer.mozilla.org/en-US/docs/Web/API/event.stopPropagation.
	     * @override
	     * @api
	     */
	    MapBrowserEvent.prototype.stopPropagation = function () {
	        _super.prototype.stopPropagation.call(this);
	        this.originalEvent.stopPropagation();
	    };
	    return MapBrowserEvent;
	}(_MapEvent2.default);
	exports.default = MapBrowserEvent;
	//# sourceMappingURL=MapBrowserEvent.js.map

/***/ }),
/* 251 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	
	var _MapBrowserEvent = __webpack_require__(250);
	
	var _MapBrowserEvent2 = _interopRequireDefault(_MapBrowserEvent);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var __extends = undefined && undefined.__extends || function () {
	    var _extendStatics = function extendStatics(d, b) {
	        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	            d.__proto__ = b;
	        } || function (d, b) {
	            for (var p in b) {
	                if (b.hasOwnProperty(p)) d[p] = b[p];
	            }
	        };
	        return _extendStatics(d, b);
	    };
	    return function (d, b) {
	        _extendStatics(d, b);
	        function __() {
	            this.constructor = d;
	        }
	        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	    };
	}();
	/**
	 * @module ol/MapBrowserPointerEvent
	 */
	
	var MapBrowserPointerEvent = /** @class */function (_super) {
	    __extends(MapBrowserPointerEvent, _super);
	    /**
	     * @param {string} type Event type.
	     * @param {import("./PluggableMap.js").default} map Map.
	     * @param {PointerEvent} pointerEvent Pointer event.
	     * @param {boolean=} opt_dragging Is the map currently being dragged?
	     * @param {?import("./PluggableMap.js").FrameState=} opt_frameState Frame state.
	     */
	    function MapBrowserPointerEvent(type, map, pointerEvent, opt_dragging, opt_frameState) {
	        var _this = _super.call(this, type, map, pointerEvent, opt_dragging, opt_frameState) || this;
	        /**
	         * @const
	         * @type {PointerEvent}
	         */
	        _this.pointerEvent = pointerEvent;
	        return _this;
	    }
	    return MapBrowserPointerEvent;
	}(_MapBrowserEvent2.default);
	exports.default = MapBrowserPointerEvent;
	//# sourceMappingURL=MapBrowserPointerEvent.js.map

/***/ }),
/* 252 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	
	var _Event = __webpack_require__(35);
	
	var _Event2 = _interopRequireDefault(_Event);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var __extends = undefined && undefined.__extends || function () {
	    var _extendStatics = function extendStatics(d, b) {
	        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	            d.__proto__ = b;
	        } || function (d, b) {
	            for (var p in b) {
	                if (b.hasOwnProperty(p)) d[p] = b[p];
	            }
	        };
	        return _extendStatics(d, b);
	    };
	    return function (d, b) {
	        _extendStatics(d, b);
	        function __() {
	            this.constructor = d;
	        }
	        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	    };
	}();
	/**
	 * @module ol/MapEvent
	 */
	
	/**
	 * @classdesc
	 * Events emitted as map events are instances of this type.
	 * See {@link module:ol/PluggableMap~PluggableMap} for which events trigger a map event.
	 */
	var MapEvent = /** @class */function (_super) {
	    __extends(MapEvent, _super);
	    /**
	     * @param {string} type Event type.
	     * @param {import("./PluggableMap.js").default} map Map.
	     * @param {?import("./PluggableMap.js").FrameState=} opt_frameState Frame state.
	     */
	    function MapEvent(type, map, opt_frameState) {
	        var _this = _super.call(this, type) || this;
	        /**
	         * The map where the event occurred.
	         * @type {import("./PluggableMap.js").default}
	         * @api
	         */
	        _this.map = map;
	        /**
	         * The frame state at the time of the event.
	         * @type {?import("./PluggableMap.js").FrameState}
	         * @api
	         */
	        _this.frameState = opt_frameState !== undefined ? opt_frameState : null;
	        return _this;
	    }
	    return MapEvent;
	}(_Event2.default);
	exports.default = MapEvent;
	//# sourceMappingURL=MapEvent.js.map

/***/ }),
/* 253 */
/***/ (function(module, exports) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	/**
	 * @module ol/MapProperty
	 */
	/**
	 * @enum {string}
	 */
	exports.default = {
	  LAYERGROUP: 'layergroup',
	  SIZE: 'size',
	  TARGET: 'target',
	  VIEW: 'view'
	};
	//# sourceMappingURL=MapProperty.js.map

/***/ }),
/* 254 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	exports.unByKey = unByKey;
	
	var _events = __webpack_require__(30);
	
	var _Target = __webpack_require__(101);
	
	var _Target2 = _interopRequireDefault(_Target);
	
	var _EventType = __webpack_require__(10);
	
	var _EventType2 = _interopRequireDefault(_EventType);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var __extends = undefined && undefined.__extends || function () {
	    var _extendStatics = function extendStatics(d, b) {
	        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	            d.__proto__ = b;
	        } || function (d, b) {
	            for (var p in b) {
	                if (b.hasOwnProperty(p)) d[p] = b[p];
	            }
	        };
	        return _extendStatics(d, b);
	    };
	    return function (d, b) {
	        _extendStatics(d, b);
	        function __() {
	            this.constructor = d;
	        }
	        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	    };
	}();
	/**
	 * @module ol/Observable
	 */
	
	/**
	 * @classdesc
	 * Abstract base class; normally only used for creating subclasses and not
	 * instantiated in apps.
	 * An event target providing convenient methods for listener registration
	 * and unregistration. A generic `change` event is always available through
	 * {@link module:ol/Observable~Observable#changed}.
	 *
	 * @fires import("./events/Event.js").default
	 * @api
	 */
	var Observable = /** @class */function (_super) {
	    __extends(Observable, _super);
	    function Observable() {
	        var _this = _super.call(this) || this;
	        /**
	         * @private
	         * @type {number}
	         */
	        _this.revision_ = 0;
	        return _this;
	    }
	    /**
	     * Increases the revision counter and dispatches a 'change' event.
	     * @api
	     */
	    Observable.prototype.changed = function () {
	        ++this.revision_;
	        this.dispatchEvent(_EventType2.default.CHANGE);
	    };
	    /**
	     * Get the version number for this object.  Each time the object is modified,
	     * its version number will be incremented.
	     * @return {number} Revision.
	     * @api
	     */
	    Observable.prototype.getRevision = function () {
	        return this.revision_;
	    };
	    /**
	     * Listen for a certain type of event.
	     * @param {string|Array<string>} type The event type or array of event types.
	     * @param {function(?): ?} listener The listener function.
	     * @return {import("./events.js").EventsKey|Array<import("./events.js").EventsKey>} Unique key for the listener. If
	     *     called with an array of event types as the first argument, the return
	     *     will be an array of keys.
	     * @api
	     */
	    Observable.prototype.on = function (type, listener) {
	        if (Array.isArray(type)) {
	            var len = type.length;
	            var keys = new Array(len);
	            for (var i = 0; i < len; ++i) {
	                keys[i] = (0, _events.listen)(this, type[i], listener);
	            }
	            return keys;
	        } else {
	            return (0, _events.listen)(this, /** @type {string} */type, listener);
	        }
	    };
	    /**
	     * Listen once for a certain type of event.
	     * @param {string|Array<string>} type The event type or array of event types.
	     * @param {function(?): ?} listener The listener function.
	     * @return {import("./events.js").EventsKey|Array<import("./events.js").EventsKey>} Unique key for the listener. If
	     *     called with an array of event types as the first argument, the return
	     *     will be an array of keys.
	     * @api
	     */
	    Observable.prototype.once = function (type, listener) {
	        if (Array.isArray(type)) {
	            var len = type.length;
	            var keys = new Array(len);
	            for (var i = 0; i < len; ++i) {
	                keys[i] = (0, _events.listenOnce)(this, type[i], listener);
	            }
	            return keys;
	        } else {
	            return (0, _events.listenOnce)(this, /** @type {string} */type, listener);
	        }
	    };
	    /**
	     * Unlisten for a certain type of event.
	     * @param {string|Array<string>} type The event type or array of event types.
	     * @param {function(?): ?} listener The listener function.
	     * @api
	     */
	    Observable.prototype.un = function (type, listener) {
	        if (Array.isArray(type)) {
	            for (var i = 0, ii = type.length; i < ii; ++i) {
	                this.removeEventListener(type[i], listener);
	            }
	        } else {
	            this.removeEventListener(type, listener);
	        }
	    };
	    return Observable;
	}(_Target2.default);
	/**
	 * Removes an event listener using the key returned by `on()` or `once()`.
	 * @param {import("./events.js").EventsKey|Array<import("./events.js").EventsKey>} key The key returned by `on()`
	 *     or `once()` (or an array of keys).
	 * @api
	 */
	function unByKey(key) {
	    if (Array.isArray(key)) {
	        for (var i = 0, ii = key.length; i < ii; ++i) {
	            (0, _events.unlistenByKey)(key[i]);
	        }
	    } else {
	        (0, _events.unlistenByKey)( /** @type {import("./events.js").EventsKey} */key);
	    }
	}
	exports.default = Observable;
	//# sourceMappingURL=Observable.js.map

/***/ }),
/* 255 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	
	var _MapEventType = __webpack_require__(142);
	
	var _MapEventType2 = _interopRequireDefault(_MapEventType);
	
	var _Object = __webpack_require__(32);
	
	var _Object2 = _interopRequireDefault(_Object);
	
	var _OverlayPositioning = __webpack_require__(256);
	
	var _OverlayPositioning2 = _interopRequireDefault(_OverlayPositioning);
	
	var _css = __webpack_require__(47);
	
	var _dom = __webpack_require__(34);
	
	var _events = __webpack_require__(30);
	
	var _extent = __webpack_require__(4);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var __extends = undefined && undefined.__extends || function () {
	    var _extendStatics = function extendStatics(d, b) {
	        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	            d.__proto__ = b;
	        } || function (d, b) {
	            for (var p in b) {
	                if (b.hasOwnProperty(p)) d[p] = b[p];
	            }
	        };
	        return _extendStatics(d, b);
	    };
	    return function (d, b) {
	        _extendStatics(d, b);
	        function __() {
	            this.constructor = d;
	        }
	        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	    };
	}();
	/**
	 * @module ol/Overlay
	 */
	
	/**
	 * @typedef {Object} Options
	 * @property {number|string} [id] Set the overlay id. The overlay id can be used
	 * with the {@link module:ol/Map~Map#getOverlayById} method.
	 * @property {HTMLElement} [element] The overlay element.
	 * @property {Array<number>} [offset=[0, 0]] Offsets in pixels used when positioning
	 * the overlay. The first element in the
	 * array is the horizontal offset. A positive value shifts the overlay right.
	 * The second element in the array is the vertical offset. A positive value
	 * shifts the overlay down.
	 * @property {import("./coordinate.js").Coordinate} [position] The overlay position
	 * in map projection.
	 * @property {OverlayPositioning} [positioning='top-left'] Defines how
	 * the overlay is actually positioned with respect to its `position` property.
	 * Possible values are `'bottom-left'`, `'bottom-center'`, `'bottom-right'`,
	 * `'center-left'`, `'center-center'`, `'center-right'`, `'top-left'`,
	 * `'top-center'`, and `'top-right'`.
	 * @property {boolean} [stopEvent=true] Whether event propagation to the map
	 * viewport should be stopped. If `true` the overlay is placed in the same
	 * container as that of the controls (CSS class name
	 * `ol-overlaycontainer-stopevent`); if `false` it is placed in the container
	 * with CSS class name specified by the `className` property.
	 * @property {boolean} [insertFirst=true] Whether the overlay is inserted first
	 * in the overlay container, or appended. If the overlay is placed in the same
	 * container as that of the controls (see the `stopEvent` option) you will
	 * probably set `insertFirst` to `true` so the overlay is displayed below the
	 * controls.
	 * @property {boolean} [autoPan=false] If set to `true` the map is panned when
	 * calling `setPosition`, so that the overlay is entirely visible in the current
	 * viewport.
	 * @property {PanOptions} [autoPanAnimation] The
	 * animation options used to pan the overlay into view. This animation is only
	 * used when `autoPan` is enabled. A `duration` and `easing` may be provided to
	 * customize the animation.
	 * @property {number} [autoPanMargin=20] The margin (in pixels) between the
	 * overlay and the borders of the map when autopanning.
	 * @property {string} [className='ol-overlay-container ol-selectable'] CSS class
	 * name.
	 */
	/**
	 * @typedef {Object} PanOptions
	 * @property {number} [duration=1000] The duration of the animation in
	 * milliseconds.
	 * @property {function(number):number} [easing] The easing function to use. Can
	 * be one from {@link module:ol/easing} or a custom function.
	 * Default is {@link module:ol/easing~inAndOut}.
	 */
	/**
	 * @enum {string}
	 * @protected
	 */
	var Property = {
	    ELEMENT: 'element',
	    MAP: 'map',
	    OFFSET: 'offset',
	    POSITION: 'position',
	    POSITIONING: 'positioning'
	};
	/**
	 * @classdesc
	 * An element to be displayed over the map and attached to a single map
	 * location.  Like {@link module:ol/control/Control~Control}, Overlays are
	 * visible widgets. Unlike Controls, they are not in a fixed position on the
	 * screen, but are tied to a geographical coordinate, so panning the map will
	 * move an Overlay but not a Control.
	 *
	 * Example:
	 *
	 *     import Overlay from 'ol/Overlay';
	 *
	 *     var popup = new Overlay({
	 *       element: document.getElementById('popup')
	 *     });
	 *     popup.setPosition(coordinate);
	 *     map.addOverlay(popup);
	 *
	 * @api
	 */
	var Overlay = /** @class */function (_super) {
	    __extends(Overlay, _super);
	    /**
	     * @param {Options} options Overlay options.
	     */
	    function Overlay(options) {
	        var _this = _super.call(this) || this;
	        /**
	         * @protected
	         * @type {Options}
	         */
	        _this.options = options;
	        /**
	         * @protected
	         * @type {number|string|undefined}
	         */
	        _this.id = options.id;
	        /**
	         * @protected
	         * @type {boolean}
	         */
	        _this.insertFirst = options.insertFirst !== undefined ? options.insertFirst : true;
	        /**
	         * @protected
	         * @type {boolean}
	         */
	        _this.stopEvent = options.stopEvent !== undefined ? options.stopEvent : true;
	        /**
	         * @protected
	         * @type {HTMLElement}
	         */
	        _this.element = document.createElement('div');
	        _this.element.className = options.className !== undefined ? options.className : 'ol-overlay-container ' + _css.CLASS_SELECTABLE;
	        _this.element.style.position = 'absolute';
	        /**
	         * @protected
	         * @type {boolean}
	         */
	        _this.autoPan = options.autoPan !== undefined ? options.autoPan : false;
	        /**
	         * @protected
	         * @type {PanOptions}
	         */
	        _this.autoPanAnimation = options.autoPanAnimation || /** @type {PanOptions} */{};
	        /**
	         * @protected
	         * @type {number}
	         */
	        _this.autoPanMargin = options.autoPanMargin !== undefined ? options.autoPanMargin : 20;
	        /**
	         * @protected
	         * @type {{bottom_: string,
	         *         left_: string,
	         *         right_: string,
	         *         top_: string,
	         *         visible: boolean}}
	         */
	        _this.rendered = {
	            bottom_: '',
	            left_: '',
	            right_: '',
	            top_: '',
	            visible: true
	        };
	        /**
	         * @protected
	         * @type {?import("./events.js").EventsKey}
	         */
	        _this.mapPostrenderListenerKey = null;
	        _this.addEventListener((0, _Object.getChangeEventType)(Property.ELEMENT), _this.handleElementChanged);
	        _this.addEventListener((0, _Object.getChangeEventType)(Property.MAP), _this.handleMapChanged);
	        _this.addEventListener((0, _Object.getChangeEventType)(Property.OFFSET), _this.handleOffsetChanged);
	        _this.addEventListener((0, _Object.getChangeEventType)(Property.POSITION), _this.handlePositionChanged);
	        _this.addEventListener((0, _Object.getChangeEventType)(Property.POSITIONING), _this.handlePositioningChanged);
	        if (options.element !== undefined) {
	            _this.setElement(options.element);
	        }
	        _this.setOffset(options.offset !== undefined ? options.offset : [0, 0]);
	        _this.setPositioning(options.positioning !== undefined ?
	        /** @type {OverlayPositioning} */options.positioning : _OverlayPositioning2.default.TOP_LEFT);
	        if (options.position !== undefined) {
	            _this.setPosition(options.position);
	        }
	        return _this;
	    }
	    /**
	     * Get the DOM element of this overlay.
	     * @return {HTMLElement|undefined} The Element containing the overlay.
	     * @observable
	     * @api
	     */
	    Overlay.prototype.getElement = function () {
	        return (/** @type {HTMLElement|undefined} */this.get(Property.ELEMENT)
	        );
	    };
	    /**
	     * Get the overlay identifier which is set on constructor.
	     * @return {number|string|undefined} Id.
	     * @api
	     */
	    Overlay.prototype.getId = function () {
	        return this.id;
	    };
	    /**
	     * Get the map associated with this overlay.
	     * @return {import("./PluggableMap.js").default|undefined} The map that the
	     * overlay is part of.
	     * @observable
	     * @api
	     */
	    Overlay.prototype.getMap = function () {
	        return (
	            /** @type {import("./PluggableMap.js").default|undefined} */this.get(Property.MAP)
	        );
	    };
	    /**
	     * Get the offset of this overlay.
	     * @return {Array<number>} The offset.
	     * @observable
	     * @api
	     */
	    Overlay.prototype.getOffset = function () {
	        return (/** @type {Array<number>} */this.get(Property.OFFSET)
	        );
	    };
	    /**
	     * Get the current position of this overlay.
	     * @return {import("./coordinate.js").Coordinate|undefined} The spatial point that the overlay is
	     *     anchored at.
	     * @observable
	     * @api
	     */
	    Overlay.prototype.getPosition = function () {
	        return (
	            /** @type {import("./coordinate.js").Coordinate|undefined} */this.get(Property.POSITION)
	        );
	    };
	    /**
	     * Get the current positioning of this overlay.
	     * @return {OverlayPositioning} How the overlay is positioned
	     *     relative to its point on the map.
	     * @observable
	     * @api
	     */
	    Overlay.prototype.getPositioning = function () {
	        return (
	            /** @type {OverlayPositioning} */this.get(Property.POSITIONING)
	        );
	    };
	    /**
	     * @protected
	     */
	    Overlay.prototype.handleElementChanged = function () {
	        (0, _dom.removeChildren)(this.element);
	        var element = this.getElement();
	        if (element) {
	            this.element.appendChild(element);
	        }
	    };
	    /**
	     * @protected
	     */
	    Overlay.prototype.handleMapChanged = function () {
	        if (this.mapPostrenderListenerKey) {
	            (0, _dom.removeNode)(this.element);
	            (0, _events.unlistenByKey)(this.mapPostrenderListenerKey);
	            this.mapPostrenderListenerKey = null;
	        }
	        var map = this.getMap();
	        if (map) {
	            this.mapPostrenderListenerKey = (0, _events.listen)(map, _MapEventType2.default.POSTRENDER, this.render, this);
	            this.updatePixelPosition();
	            var container = this.stopEvent ? map.getOverlayContainerStopEvent() : map.getOverlayContainer();
	            if (this.insertFirst) {
	                container.insertBefore(this.element, container.childNodes[0] || null);
	            } else {
	                container.appendChild(this.element);
	            }
	        }
	    };
	    /**
	     * @protected
	     */
	    Overlay.prototype.render = function () {
	        this.updatePixelPosition();
	    };
	    /**
	     * @protected
	     */
	    Overlay.prototype.handleOffsetChanged = function () {
	        this.updatePixelPosition();
	    };
	    /**
	     * @protected
	     */
	    Overlay.prototype.handlePositionChanged = function () {
	        this.updatePixelPosition();
	        if (this.get(Property.POSITION) && this.autoPan) {
	            this.panIntoView();
	        }
	    };
	    /**
	     * @protected
	     */
	    Overlay.prototype.handlePositioningChanged = function () {
	        this.updatePixelPosition();
	    };
	    /**
	     * Set the DOM element to be associated with this overlay.
	     * @param {HTMLElement|undefined} element The Element containing the overlay.
	     * @observable
	     * @api
	     */
	    Overlay.prototype.setElement = function (element) {
	        this.set(Property.ELEMENT, element);
	    };
	    /**
	     * Set the map to be associated with this overlay.
	     * @param {import("./PluggableMap.js").default|undefined} map The map that the
	     * overlay is part of.
	     * @observable
	     * @api
	     */
	    Overlay.prototype.setMap = function (map) {
	        this.set(Property.MAP, map);
	    };
	    /**
	     * Set the offset for this overlay.
	     * @param {Array<number>} offset Offset.
	     * @observable
	     * @api
	     */
	    Overlay.prototype.setOffset = function (offset) {
	        this.set(Property.OFFSET, offset);
	    };
	    /**
	     * Set the position for this overlay. If the position is `undefined` the
	     * overlay is hidden.
	     * @param {import("./coordinate.js").Coordinate|undefined} position The spatial point that the overlay
	     *     is anchored at.
	     * @observable
	     * @api
	     */
	    Overlay.prototype.setPosition = function (position) {
	        this.set(Property.POSITION, position);
	    };
	    /**
	     * Pan the map so that the overlay is entirely visible in the current viewport
	     * (if necessary).
	     * @protected
	     */
	    Overlay.prototype.panIntoView = function () {
	        var map = this.getMap();
	        if (!map || !map.getTargetElement()) {
	            return;
	        }
	        var mapRect = this.getRect(map.getTargetElement(), map.getSize());
	        var element = this.getElement();
	        var overlayRect = this.getRect(element, [(0, _dom.outerWidth)(element), (0, _dom.outerHeight)(element)]);
	        var margin = this.autoPanMargin;
	        if (!(0, _extent.containsExtent)(mapRect, overlayRect)) {
	            // the overlay is not completely inside the viewport, so pan the map
	            var offsetLeft = overlayRect[0] - mapRect[0];
	            var offsetRight = mapRect[2] - overlayRect[2];
	            var offsetTop = overlayRect[1] - mapRect[1];
	            var offsetBottom = mapRect[3] - overlayRect[3];
	            var delta = [0, 0];
	            if (offsetLeft < 0) {
	                // move map to the left
	                delta[0] = offsetLeft - margin;
	            } else if (offsetRight < 0) {
	                // move map to the right
	                delta[0] = Math.abs(offsetRight) + margin;
	            }
	            if (offsetTop < 0) {
	                // move map up
	                delta[1] = offsetTop - margin;
	            } else if (offsetBottom < 0) {
	                // move map down
	                delta[1] = Math.abs(offsetBottom) + margin;
	            }
	            if (delta[0] !== 0 || delta[1] !== 0) {
	                var center = /** @type {import("./coordinate.js").Coordinate} */map.getView().getCenterInternal();
	                var centerPx = map.getPixelFromCoordinateInternal(center);
	                var newCenterPx = [centerPx[0] + delta[0], centerPx[1] + delta[1]];
	                map.getView().animateInternal({
	                    center: map.getCoordinateFromPixelInternal(newCenterPx),
	                    duration: this.autoPanAnimation.duration,
	                    easing: this.autoPanAnimation.easing
	                });
	            }
	        }
	    };
	    /**
	     * Get the extent of an element relative to the document
	     * @param {HTMLElement} element The element.
	     * @param {import("./size.js").Size} size The size of the element.
	     * @return {import("./extent.js").Extent} The extent.
	     * @protected
	     */
	    Overlay.prototype.getRect = function (element, size) {
	        var box = element.getBoundingClientRect();
	        var offsetX = box.left + window.pageXOffset;
	        var offsetY = box.top + window.pageYOffset;
	        return [offsetX, offsetY, offsetX + size[0], offsetY + size[1]];
	    };
	    /**
	     * Set the positioning for this overlay.
	     * @param {OverlayPositioning} positioning how the overlay is
	     *     positioned relative to its point on the map.
	     * @observable
	     * @api
	     */
	    Overlay.prototype.setPositioning = function (positioning) {
	        this.set(Property.POSITIONING, positioning);
	    };
	    /**
	     * Modify the visibility of the element.
	     * @param {boolean} visible Element visibility.
	     * @protected
	     */
	    Overlay.prototype.setVisible = function (visible) {
	        if (this.rendered.visible !== visible) {
	            this.element.style.display = visible ? '' : 'none';
	            this.rendered.visible = visible;
	        }
	    };
	    /**
	     * Update pixel position.
	     * @protected
	     */
	    Overlay.prototype.updatePixelPosition = function () {
	        var map = this.getMap();
	        var position = this.getPosition();
	        if (!map || !map.isRendered() || !position) {
	            this.setVisible(false);
	            return;
	        }
	        var pixel = map.getPixelFromCoordinate(position);
	        var mapSize = map.getSize();
	        this.updateRenderedPosition(pixel, mapSize);
	    };
	    /**
	     * @param {import("./pixel.js").Pixel} pixel The pixel location.
	     * @param {import("./size.js").Size|undefined} mapSize The map size.
	     * @protected
	     */
	    Overlay.prototype.updateRenderedPosition = function (pixel, mapSize) {
	        var style = this.element.style;
	        var offset = this.getOffset();
	        var positioning = this.getPositioning();
	        this.setVisible(true);
	        var offsetX = offset[0];
	        var offsetY = offset[1];
	        if (positioning == _OverlayPositioning2.default.BOTTOM_RIGHT || positioning == _OverlayPositioning2.default.CENTER_RIGHT || positioning == _OverlayPositioning2.default.TOP_RIGHT) {
	            if (this.rendered.left_ !== '') {
	                this.rendered.left_ = '';
	                style.left = '';
	            }
	            var right = Math.round(mapSize[0] - pixel[0] - offsetX) + 'px';
	            if (this.rendered.right_ != right) {
	                this.rendered.right_ = right;
	                style.right = right;
	            }
	        } else {
	            if (this.rendered.right_ !== '') {
	                this.rendered.right_ = '';
	                style.right = '';
	            }
	            if (positioning == _OverlayPositioning2.default.BOTTOM_CENTER || positioning == _OverlayPositioning2.default.CENTER_CENTER || positioning == _OverlayPositioning2.default.TOP_CENTER) {
	                offsetX -= this.element.offsetWidth / 2;
	            }
	            var left = Math.round(pixel[0] + offsetX) + 'px';
	            if (this.rendered.left_ != left) {
	                this.rendered.left_ = left;
	                style.left = left;
	            }
	        }
	        if (positioning == _OverlayPositioning2.default.BOTTOM_LEFT || positioning == _OverlayPositioning2.default.BOTTOM_CENTER || positioning == _OverlayPositioning2.default.BOTTOM_RIGHT) {
	            if (this.rendered.top_ !== '') {
	                this.rendered.top_ = '';
	                style.top = '';
	            }
	            var bottom = Math.round(mapSize[1] - pixel[1] - offsetY) + 'px';
	            if (this.rendered.bottom_ != bottom) {
	                this.rendered.bottom_ = bottom;
	                style.bottom = bottom;
	            }
	        } else {
	            if (this.rendered.bottom_ !== '') {
	                this.rendered.bottom_ = '';
	                style.bottom = '';
	            }
	            if (positioning == _OverlayPositioning2.default.CENTER_LEFT || positioning == _OverlayPositioning2.default.CENTER_CENTER || positioning == _OverlayPositioning2.default.CENTER_RIGHT) {
	                offsetY -= this.element.offsetHeight / 2;
	            }
	            var top_1 = Math.round(pixel[1] + offsetY) + 'px';
	            if (this.rendered.top_ != top_1) {
	                this.rendered.top_ = 'top';
	                style.top = top_1;
	            }
	        }
	    };
	    /**
	     * returns the options this Overlay has been created with
	     * @return {Options} overlay options
	     */
	    Overlay.prototype.getOptions = function () {
	        return this.options;
	    };
	    return Overlay;
	}(_Object2.default);
	exports.default = Overlay;
	//# sourceMappingURL=Overlay.js.map

/***/ }),
/* 256 */
/***/ (function(module, exports) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	/**
	 * @module ol/OverlayPositioning
	 */
	/**
	 * Overlay position: `'bottom-left'`, `'bottom-center'`,  `'bottom-right'`,
	 * `'center-left'`, `'center-center'`, `'center-right'`, `'top-left'`,
	 * `'top-center'`, `'top-right'`
	 * @enum {string}
	 */
	exports.default = {
	  BOTTOM_LEFT: 'bottom-left',
	  BOTTOM_CENTER: 'bottom-center',
	  BOTTOM_RIGHT: 'bottom-right',
	  CENTER_LEFT: 'center-left',
	  CENTER_CENTER: 'center-center',
	  CENTER_RIGHT: 'center-right',
	  TOP_LEFT: 'top-left',
	  TOP_CENTER: 'top-center',
	  TOP_RIGHT: 'top-right'
	};
	//# sourceMappingURL=OverlayPositioning.js.map

/***/ }),
/* 257 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	
	var _util = __webpack_require__(14);
	
	var _Collection = __webpack_require__(63);
	
	var _Collection2 = _interopRequireDefault(_Collection);
	
	var _CollectionEventType = __webpack_require__(83);
	
	var _CollectionEventType2 = _interopRequireDefault(_CollectionEventType);
	
	var _MapBrowserEvent = __webpack_require__(250);
	
	var _MapBrowserEvent2 = _interopRequireDefault(_MapBrowserEvent);
	
	var _MapBrowserEventHandler = __webpack_require__(579);
	
	var _MapBrowserEventHandler2 = _interopRequireDefault(_MapBrowserEventHandler);
	
	var _MapBrowserEventType = __webpack_require__(69);
	
	var _MapBrowserEventType2 = _interopRequireDefault(_MapBrowserEventType);
	
	var _MapEvent = __webpack_require__(252);
	
	var _MapEvent2 = _interopRequireDefault(_MapEvent);
	
	var _MapEventType = __webpack_require__(142);
	
	var _MapEventType2 = _interopRequireDefault(_MapEventType);
	
	var _MapProperty = __webpack_require__(253);
	
	var _MapProperty2 = _interopRequireDefault(_MapProperty);
	
	var _EventType = __webpack_require__(148);
	
	var _EventType2 = _interopRequireDefault(_EventType);
	
	var _Object = __webpack_require__(32);
	
	var _Object2 = _interopRequireDefault(_Object);
	
	var _ObjectEventType = __webpack_require__(124);
	
	var _ObjectEventType2 = _interopRequireDefault(_ObjectEventType);
	
	var _TileQueue = __webpack_require__(580);
	
	var _TileQueue2 = _interopRequireDefault(_TileQueue);
	
	var _View = __webpack_require__(261);
	
	var _View2 = _interopRequireDefault(_View);
	
	var _ViewHint = __webpack_require__(170);
	
	var _ViewHint2 = _interopRequireDefault(_ViewHint);
	
	var _asserts = __webpack_require__(29);
	
	var _dom = __webpack_require__(34);
	
	var _events = __webpack_require__(30);
	
	var _EventType3 = __webpack_require__(10);
	
	var _EventType4 = _interopRequireDefault(_EventType3);
	
	var _extent = __webpack_require__(4);
	
	var _functions = __webpack_require__(31);
	
	var _has = __webpack_require__(105);
	
	var _Group = __webpack_require__(285);
	
	var _Group2 = _interopRequireDefault(_Group);
	
	var _size = __webpack_require__(128);
	
	var _PriorityQueue = __webpack_require__(300);
	
	var _transform = __webpack_require__(48);
	
	var _proj = __webpack_require__(16);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var __extends = undefined && undefined.__extends || function () {
	    var _extendStatics = function extendStatics(d, b) {
	        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	            d.__proto__ = b;
	        } || function (d, b) {
	            for (var p in b) {
	                if (b.hasOwnProperty(p)) d[p] = b[p];
	            }
	        };
	        return _extendStatics(d, b);
	    };
	    return function (d, b) {
	        _extendStatics(d, b);
	        function __() {
	            this.constructor = d;
	        }
	        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	    };
	}();
	/**
	 * @module ol/PluggableMap
	 */
	
	/**
	 * State of the current frame. Only `pixelRatio`, `time` and `viewState` should
	 * be used in applications.
	 * @typedef {Object} FrameState
	 * @property {number} pixelRatio The pixel ratio of the frame.
	 * @property {number} time The time when rendering of the frame was requested.
	 * @property {import("./View.js").State} viewState The state of the current view.
	 * @property {boolean} animate
	 * @property {import("./transform.js").Transform} coordinateToPixelTransform
	 * @property {null|import("./extent.js").Extent} extent
	 * @property {Array<DeclutterItems>} declutterItems
	 * @property {number} index
	 * @property {Array<import("./layer/Layer.js").State>} layerStatesArray
	 * @property {number} layerIndex
	 * @property {import("./transform.js").Transform} pixelToCoordinateTransform
	 * @property {Array<PostRenderFunction>} postRenderFunctions
	 * @property {import("./size.js").Size} size
	 * @property {TileQueue} tileQueue
	 * @property {!Object<string, Object<string, boolean>>} usedTiles
	 * @property {Array<number>} viewHints
	 * @property {!Object<string, Object<string, boolean>>} wantedTiles
	 */
	/**
	 * @typedef {Object} DeclutterItems
	 * @property {Array<*>} items Declutter items of an executor.
	 * @property {number} opacity Layer opacity.
	 */
	/**
	 * @typedef {function(PluggableMap, ?FrameState): any} PostRenderFunction
	 */
	/**
	 * @typedef {Object} AtPixelOptions
	 * @property {undefined|function(import("./layer/Layer.js").default): boolean} [layerFilter] Layer filter
	 * function. The filter function will receive one argument, the
	 * {@link module:ol/layer/Layer layer-candidate} and it should return a boolean value.
	 * Only layers which are visible and for which this function returns `true`
	 * will be tested for features. By default, all visible layers will be tested.
	 * @property {number} [hitTolerance=0] Hit-detection tolerance in pixels. Pixels
	 * inside the radius around the given position will be checked for features.
	 * @property {boolean} [checkWrapped=true] Check-Wrapped Will check for for wrapped geometries inside the range of
	 *   +/- 1 world width. Works only if a projection is used that can be wrapped.
	 */
	/**
	 * @typedef {Object} MapOptionsInternal
	 * @property {Collection<import("./control/Control.js").default>} [controls]
	 * @property {Collection<import("./interaction/Interaction.js").default>} [interactions]
	 * @property {HTMLElement|Document} keyboardEventTarget
	 * @property {Collection<import("./Overlay.js").default>} overlays
	 * @property {Object<string, *>} values
	 */
	/**
	 * Object literal with config options for the map.
	 * @typedef {Object} MapOptions
	 * @property {Collection<import("./control/Control.js").default>|Array<import("./control/Control.js").default>} [controls]
	 * Controls initially added to the map. If not specified,
	 * {@link module:ol/control~defaults} is used.
	 * @property {number} [pixelRatio=window.devicePixelRatio] The ratio between
	 * physical pixels and device-independent pixels (dips) on the device.
	 * @property {Collection<import("./interaction/Interaction.js").default>|Array<import("./interaction/Interaction.js").default>} [interactions]
	 * Interactions that are initially added to the map. If not specified,
	 * {@link module:ol/interaction~defaults} is used.
	 * @property {HTMLElement|Document|string} [keyboardEventTarget] The element to
	 * listen to keyboard events on. This determines when the `KeyboardPan` and
	 * `KeyboardZoom` interactions trigger. For example, if this option is set to
	 * `document` the keyboard interactions will always trigger. If this option is
	 * not specified, the element the library listens to keyboard events on is the
	 * map target (i.e. the user-provided div for the map). If this is not
	 * `document`, the target element needs to be focused for key events to be
	 * emitted, requiring that the target element has a `tabindex` attribute.
	 * @property {Array<import("./layer/Base.js").default>|Collection<import("./layer/Base.js").default>|LayerGroup} [layers]
	 * Layers. If this is not defined, a map with no layers will be rendered. Note
	 * that layers are rendered in the order supplied, so if you want, for example,
	 * a vector layer to appear on top of a tile layer, it must come after the tile
	 * layer.
	 * @property {number} [maxTilesLoading=16] Maximum number tiles to load
	 * simultaneously.
	 * @property {number} [moveTolerance=1] The minimum distance in pixels the
	 * cursor must move to be detected as a map move event instead of a click.
	 * Increasing this value can make it easier to click on the map.
	 * @property {Collection<import("./Overlay.js").default>|Array<import("./Overlay.js").default>} [overlays]
	 * Overlays initially added to the map. By default, no overlays are added.
	 * @property {HTMLElement|string} [target] The container for the map, either the
	 * element itself or the `id` of the element. If not specified at construction
	 * time, {@link module:ol/Map~Map#setTarget} must be called for the map to be
	 * rendered.
	 * @property {View} [view] The map's view.  No layer sources will be
	 * fetched unless this is specified at construction time or through
	 * {@link module:ol/Map~Map#setView}.
	 */
	/**
	 * @param {HTMLElement} element Element.
	 * @param {string} touchAction Value for `touch-action'.
	 */
	function setTouchAction(element, touchAction) {
	    element.style.msTouchAction = touchAction;
	    element.style.touchAction = touchAction;
	    element.setAttribute('touch-action', touchAction);
	}
	/**
	 * @fires import("./MapBrowserEvent.js").MapBrowserEvent
	 * @fires import("./MapEvent.js").MapEvent
	 * @fires import("./render/Event.js").default#precompose
	 * @fires import("./render/Event.js").default#postcompose
	 * @fires import("./render/Event.js").default#rendercomplete
	 * @api
	 */
	var PluggableMap = /** @class */function (_super) {
	    __extends(PluggableMap, _super);
	    /**
	     * @param {MapOptions} options Map options.
	     */
	    function PluggableMap(options) {
	        var _this = _super.call(this) || this;
	        var optionsInternal = createOptionsInternal(options);
	        /** @private */
	        _this.boundHandleBrowserEvent_ = _this.handleBrowserEvent.bind(_this);
	        /**
	         * @type {number}
	         * @private
	         */
	        _this.maxTilesLoading_ = options.maxTilesLoading !== undefined ? options.maxTilesLoading : 16;
	        /**
	         * @private
	         * @type {number}
	         */
	        _this.pixelRatio_ = options.pixelRatio !== undefined ? options.pixelRatio : _has.DEVICE_PIXEL_RATIO;
	        /**
	         * @private
	         * @type {*}
	         */
	        _this.postRenderTimeoutHandle_;
	        /**
	         * @private
	         * @type {number|undefined}
	         */
	        _this.animationDelayKey_;
	        /**
	         * @private
	         */
	        _this.animationDelay_ = function () {
	            this.animationDelayKey_ = undefined;
	            this.renderFrame_(Date.now());
	        }.bind(_this);
	        /**
	         * @private
	         * @type {import("./transform.js").Transform}
	         */
	        _this.coordinateToPixelTransform_ = (0, _transform.create)();
	        /**
	         * @private
	         * @type {import("./transform.js").Transform}
	         */
	        _this.pixelToCoordinateTransform_ = (0, _transform.create)();
	        /**
	         * @private
	         * @type {number}
	         */
	        _this.frameIndex_ = 0;
	        /**
	         * @private
	         * @type {?FrameState}
	         */
	        _this.frameState_ = null;
	        /**
	         * The extent at the previous 'moveend' event.
	         * @private
	         * @type {import("./extent.js").Extent}
	         */
	        _this.previousExtent_ = null;
	        /**
	         * @private
	         * @type {?import("./events.js").EventsKey}
	         */
	        _this.viewPropertyListenerKey_ = null;
	        /**
	         * @private
	         * @type {?import("./events.js").EventsKey}
	         */
	        _this.viewChangeListenerKey_ = null;
	        /**
	         * @private
	         * @type {?Array<import("./events.js").EventsKey>}
	         */
	        _this.layerGroupPropertyListenerKeys_ = null;
	        /**
	         * @private
	         * @type {!HTMLElement}
	         */
	        _this.viewport_ = document.createElement('div');
	        _this.viewport_.className = 'ol-viewport' + ('ontouchstart' in window ? ' ol-touch' : '');
	        _this.viewport_.style.position = 'relative';
	        _this.viewport_.style.overflow = 'hidden';
	        _this.viewport_.style.width = '100%';
	        _this.viewport_.style.height = '100%';
	        /**
	         * @private
	         * @type {!HTMLElement}
	         */
	        _this.overlayContainer_ = document.createElement('div');
	        _this.overlayContainer_.style.position = 'absolute';
	        _this.overlayContainer_.style.zIndex = '0';
	        _this.overlayContainer_.style.width = '100%';
	        _this.overlayContainer_.style.height = '100%';
	        _this.overlayContainer_.className = 'ol-overlaycontainer';
	        _this.viewport_.appendChild(_this.overlayContainer_);
	        /**
	         * @private
	         * @type {!HTMLElement}
	         */
	        _this.overlayContainerStopEvent_ = document.createElement('div');
	        _this.overlayContainerStopEvent_.style.position = 'absolute';
	        _this.overlayContainerStopEvent_.style.zIndex = '0';
	        _this.overlayContainerStopEvent_.style.width = '100%';
	        _this.overlayContainerStopEvent_.style.height = '100%';
	        _this.overlayContainerStopEvent_.className = 'ol-overlaycontainer-stopevent';
	        _this.viewport_.appendChild(_this.overlayContainerStopEvent_);
	        /**
	         * @private
	         * @type {MapBrowserEventHandler}
	         */
	        _this.mapBrowserEventHandler_ = new _MapBrowserEventHandler2.default(_this, options.moveTolerance);
	        var handleMapBrowserEvent = _this.handleMapBrowserEvent.bind(_this);
	        for (var key in _MapBrowserEventType2.default) {
	            _this.mapBrowserEventHandler_.addEventListener(_MapBrowserEventType2.default[key], handleMapBrowserEvent);
	        }
	        /**
	         * @private
	         * @type {HTMLElement|Document}
	         */
	        _this.keyboardEventTarget_ = optionsInternal.keyboardEventTarget;
	        /**
	         * @private
	         * @type {?Array<import("./events.js").EventsKey>}
	         */
	        _this.keyHandlerKeys_ = null;
	        /**
	         * @private
	         * @type {?Array<import("./events.js").EventsKey>}
	         */
	        _this.focusHandlerKeys_ = null;
	        var handleBrowserEvent = _this.handleBrowserEvent.bind(_this);
	        _this.viewport_.addEventListener(_EventType4.default.CONTEXTMENU, handleBrowserEvent, false);
	        _this.viewport_.addEventListener(_EventType4.default.WHEEL, handleBrowserEvent, false);
	        /**
	         * @type {Collection<import("./control/Control.js").default>}
	         * @protected
	         */
	        _this.controls = optionsInternal.controls || new _Collection2.default();
	        /**
	         * @type {Collection<import("./interaction/Interaction.js").default>}
	         * @protected
	         */
	        _this.interactions = optionsInternal.interactions || new _Collection2.default();
	        /**
	         * @type {Collection<import("./Overlay.js").default>}
	         * @private
	         */
	        _this.overlays_ = optionsInternal.overlays;
	        /**
	         * A lookup of overlays by id.
	         * @private
	         * @type {Object<string, import("./Overlay.js").default>}
	         */
	        _this.overlayIdIndex_ = {};
	        /**
	         * @type {import("./renderer/Map.js").default}
	         * @private
	         */
	        _this.renderer_ = null;
	        /**
	         * @type {undefined|function(Event): void}
	         * @private
	         */
	        _this.handleResize_;
	        /**
	         * @private
	         * @type {!Array<PostRenderFunction>}
	         */
	        _this.postRenderFunctions_ = [];
	        /**
	         * @private
	         * @type {TileQueue}
	         */
	        _this.tileQueue_ = new _TileQueue2.default(_this.getTilePriority.bind(_this), _this.handleTileChange_.bind(_this));
	        _this.addEventListener((0, _Object.getChangeEventType)(_MapProperty2.default.LAYERGROUP), _this.handleLayerGroupChanged_);
	        _this.addEventListener((0, _Object.getChangeEventType)(_MapProperty2.default.VIEW), _this.handleViewChanged_);
	        _this.addEventListener((0, _Object.getChangeEventType)(_MapProperty2.default.SIZE), _this.handleSizeChanged_);
	        _this.addEventListener((0, _Object.getChangeEventType)(_MapProperty2.default.TARGET), _this.handleTargetChanged_);
	        // setProperties will trigger the rendering of the map if the map
	        // is "defined" already.
	        _this.setProperties(optionsInternal.values);
	        _this.controls.forEach(
	        /**
	         * @param {import("./control/Control.js").default} control Control.
	         * @this {PluggableMap}
	         */
	        function (control) {
	            control.setMap(this);
	        }.bind(_this));
	        _this.controls.addEventListener(_CollectionEventType2.default.ADD,
	        /**
	         * @param {import("./Collection.js").CollectionEvent} event CollectionEvent.
	         */
	        function (event) {
	            event.element.setMap(this);
	        }.bind(_this));
	        _this.controls.addEventListener(_CollectionEventType2.default.REMOVE,
	        /**
	         * @param {import("./Collection.js").CollectionEvent} event CollectionEvent.
	         */
	        function (event) {
	            event.element.setMap(null);
	        }.bind(_this));
	        _this.interactions.forEach(
	        /**
	         * @param {import("./interaction/Interaction.js").default} interaction Interaction.
	         * @this {PluggableMap}
	         */
	        function (interaction) {
	            interaction.setMap(this);
	        }.bind(_this));
	        _this.interactions.addEventListener(_CollectionEventType2.default.ADD,
	        /**
	         * @param {import("./Collection.js").CollectionEvent} event CollectionEvent.
	         */
	        function (event) {
	            event.element.setMap(this);
	        }.bind(_this));
	        _this.interactions.addEventListener(_CollectionEventType2.default.REMOVE,
	        /**
	         * @param {import("./Collection.js").CollectionEvent} event CollectionEvent.
	         */
	        function (event) {
	            event.element.setMap(null);
	        }.bind(_this));
	        _this.overlays_.forEach(_this.addOverlayInternal_.bind(_this));
	        _this.overlays_.addEventListener(_CollectionEventType2.default.ADD,
	        /**
	         * @param {import("./Collection.js").CollectionEvent} event CollectionEvent.
	         */
	        function (event) {
	            this.addOverlayInternal_( /** @type {import("./Overlay.js").default} */event.element);
	        }.bind(_this));
	        _this.overlays_.addEventListener(_CollectionEventType2.default.REMOVE,
	        /**
	         * @param {import("./Collection.js").CollectionEvent} event CollectionEvent.
	         */
	        function (event) {
	            var overlay = /** @type {import("./Overlay.js").default} */event.element;
	            var id = overlay.getId();
	            if (id !== undefined) {
	                delete this.overlayIdIndex_[id.toString()];
	            }
	            event.element.setMap(null);
	        }.bind(_this));
	        return _this;
	    }
	    /**
	     * @abstract
	     * @return {import("./renderer/Map.js").default} The map renderer
	     */
	    PluggableMap.prototype.createRenderer = function () {
	        throw new Error('Use a map type that has a createRenderer method');
	    };
	    /**
	     * Add the given control to the map.
	     * @param {import("./control/Control.js").default} control Control.
	     * @api
	     */
	    PluggableMap.prototype.addControl = function (control) {
	        this.getControls().push(control);
	    };
	    /**
	     * Add the given interaction to the map. If you want to add an interaction
	     * at another point of the collection use `getInteraction()` and the methods
	     * available on {@link module:ol/Collection~Collection}. This can be used to
	     * stop the event propagation from the handleEvent function. The interactions
	     * get to handle the events in the reverse order of this collection.
	     * @param {import("./interaction/Interaction.js").default} interaction Interaction to add.
	     * @api
	     */
	    PluggableMap.prototype.addInteraction = function (interaction) {
	        this.getInteractions().push(interaction);
	    };
	    /**
	     * Adds the given layer to the top of this map. If you want to add a layer
	     * elsewhere in the stack, use `getLayers()` and the methods available on
	     * {@link module:ol/Collection~Collection}.
	     * @param {import("./layer/Base.js").default} layer Layer.
	     * @api
	     */
	    PluggableMap.prototype.addLayer = function (layer) {
	        var layers = this.getLayerGroup().getLayers();
	        layers.push(layer);
	    };
	    /**
	     * Add the given overlay to the map.
	     * @param {import("./Overlay.js").default} overlay Overlay.
	     * @api
	     */
	    PluggableMap.prototype.addOverlay = function (overlay) {
	        this.getOverlays().push(overlay);
	    };
	    /**
	     * This deals with map's overlay collection changes.
	     * @param {import("./Overlay.js").default} overlay Overlay.
	     * @private
	     */
	    PluggableMap.prototype.addOverlayInternal_ = function (overlay) {
	        var id = overlay.getId();
	        if (id !== undefined) {
	            this.overlayIdIndex_[id.toString()] = overlay;
	        }
	        overlay.setMap(this);
	    };
	    /**
	     *
	     * @inheritDoc
	     */
	    PluggableMap.prototype.disposeInternal = function () {
	        this.mapBrowserEventHandler_.dispose();
	        this.viewport_.removeEventListener(_EventType4.default.CONTEXTMENU, this.boundHandleBrowserEvent_);
	        this.viewport_.removeEventListener(_EventType4.default.WHEEL, this.boundHandleBrowserEvent_);
	        if (this.handleResize_ !== undefined) {
	            removeEventListener(_EventType4.default.RESIZE, this.handleResize_, false);
	            this.handleResize_ = undefined;
	        }
	        this.setTarget(null);
	        _super.prototype.disposeInternal.call(this);
	    };
	    /**
	     * Detect features that intersect a pixel on the viewport, and execute a
	     * callback with each intersecting feature. Layers included in the detection can
	     * be configured through the `layerFilter` option in `opt_options`.
	     * @param {import("./pixel.js").Pixel} pixel Pixel.
	     * @param {function(this: S, import("./Feature.js").FeatureLike,
	     *     import("./layer/Layer.js").default): T} callback Feature callback. The callback will be
	     *     called with two arguments. The first argument is one
	     *     {@link module:ol/Feature feature} or
	     *     {@link module:ol/render/Feature render feature} at the pixel, the second is
	     *     the {@link module:ol/layer/Layer layer} of the feature and will be null for
	     *     unmanaged layers. To stop detection, callback functions can return a
	     *     truthy value.
	     * @param {AtPixelOptions=} opt_options Optional options.
	     * @return {T|undefined} Callback result, i.e. the return value of last
	     * callback execution, or the first truthy callback return value.
	     * @template S,T
	     * @api
	     */
	    PluggableMap.prototype.forEachFeatureAtPixel = function (pixel, callback, opt_options) {
	        if (!this.frameState_) {
	            return;
	        }
	        var coordinate = this.getCoordinateFromPixelInternal(pixel);
	        opt_options = opt_options !== undefined ? opt_options : {};
	        var hitTolerance = opt_options.hitTolerance !== undefined ? opt_options.hitTolerance * this.frameState_.pixelRatio : 0;
	        var layerFilter = opt_options.layerFilter !== undefined ? opt_options.layerFilter : _functions.TRUE;
	        var checkWrapped = opt_options.checkWrapped !== false;
	        return this.renderer_.forEachFeatureAtCoordinate(coordinate, this.frameState_, hitTolerance, checkWrapped, callback, null, layerFilter, null);
	    };
	    /**
	     * Get all features that intersect a pixel on the viewport.
	     * @param {import("./pixel.js").Pixel} pixel Pixel.
	     * @param {AtPixelOptions=} opt_options Optional options.
	     * @return {Array<import("./Feature.js").FeatureLike>} The detected features or
	     * an empty array if none were found.
	     * @api
	     */
	    PluggableMap.prototype.getFeaturesAtPixel = function (pixel, opt_options) {
	        var features = [];
	        this.forEachFeatureAtPixel(pixel, function (feature) {
	            features.push(feature);
	        }, opt_options);
	        return features;
	    };
	    /**
	     * Detect layers that have a color value at a pixel on the viewport, and
	     * execute a callback with each matching layer. Layers included in the
	     * detection can be configured through `opt_layerFilter`.
	     *
	     * Note: this may give false positives unless the map layers have had different `className`
	     * properties assigned to them.
	     *
	     * @param {import("./pixel.js").Pixel} pixel Pixel.
	     * @param {function(this: S, import("./layer/Layer.js").default, (Uint8ClampedArray|Uint8Array)): T} callback
	     *     Layer callback. This callback will receive two arguments: first is the
	     *     {@link module:ol/layer/Layer layer}, second argument is an array representing
	     *     [R, G, B, A] pixel values (0 - 255) and will be `null` for layer types
	     *     that do not currently support this argument. To stop detection, callback
	     *     functions can return a truthy value.
	     * @param {AtPixelOptions=} opt_options Configuration options.
	     * @return {T|undefined} Callback result, i.e. the return value of last
	     * callback execution, or the first truthy callback return value.
	     * @template S,T
	     * @api
	     */
	    PluggableMap.prototype.forEachLayerAtPixel = function (pixel, callback, opt_options) {
	        if (!this.frameState_) {
	            return;
	        }
	        var options = opt_options || {};
	        var hitTolerance = options.hitTolerance !== undefined ? options.hitTolerance * this.frameState_.pixelRatio : 0;
	        var layerFilter = options.layerFilter || _functions.TRUE;
	        return this.renderer_.forEachLayerAtPixel(pixel, this.frameState_, hitTolerance, callback, layerFilter);
	    };
	    /**
	     * Detect if features intersect a pixel on the viewport. Layers included in the
	     * detection can be configured through `opt_layerFilter`.
	     * @param {import("./pixel.js").Pixel} pixel Pixel.
	     * @param {AtPixelOptions=} opt_options Optional options.
	     * @return {boolean} Is there a feature at the given pixel?
	     * @api
	     */
	    PluggableMap.prototype.hasFeatureAtPixel = function (pixel, opt_options) {
	        if (!this.frameState_) {
	            return false;
	        }
	        var coordinate = this.getCoordinateFromPixelInternal(pixel);
	        opt_options = opt_options !== undefined ? opt_options : {};
	        var layerFilter = opt_options.layerFilter !== undefined ? opt_options.layerFilter : _functions.TRUE;
	        var hitTolerance = opt_options.hitTolerance !== undefined ? opt_options.hitTolerance * this.frameState_.pixelRatio : 0;
	        var checkWrapped = opt_options.checkWrapped !== false;
	        return this.renderer_.hasFeatureAtCoordinate(coordinate, this.frameState_, hitTolerance, checkWrapped, layerFilter, null);
	    };
	    /**
	     * Returns the coordinate in user projection for a browser event.
	     * @param {Event} event Event.
	     * @return {import("./coordinate.js").Coordinate} Coordinate.
	     * @api
	     */
	    PluggableMap.prototype.getEventCoordinate = function (event) {
	        return this.getCoordinateFromPixel(this.getEventPixel(event));
	    };
	    /**
	     * Returns the coordinate in view projection for a browser event.
	     * @param {Event} event Event.
	     * @return {import("./coordinate.js").Coordinate} Coordinate.
	     */
	    PluggableMap.prototype.getEventCoordinateInternal = function (event) {
	        return this.getCoordinateFromPixelInternal(this.getEventPixel(event));
	    };
	    /**
	     * Returns the map pixel position for a browser event relative to the viewport.
	     * @param {Event|TouchEvent} event Event.
	     * @return {import("./pixel.js").Pixel} Pixel.
	     * @api
	     */
	    PluggableMap.prototype.getEventPixel = function (event) {
	        var viewportPosition = this.viewport_.getBoundingClientRect();
	        var eventPosition = 'changedTouches' in event ?
	        /** @type {TouchEvent} */event.changedTouches[0] :
	        /** @type {MouseEvent} */event;
	        return [eventPosition.clientX - viewportPosition.left, eventPosition.clientY - viewportPosition.top];
	    };
	    /**
	     * Get the target in which this map is rendered.
	     * Note that this returns what is entered as an option or in setTarget:
	     * if that was an element, it returns an element; if a string, it returns that.
	     * @return {HTMLElement|string|undefined} The Element or id of the Element that the
	     *     map is rendered in.
	     * @observable
	     * @api
	     */
	    PluggableMap.prototype.getTarget = function () {
	        return (/** @type {HTMLElement|string|undefined} */this.get(_MapProperty2.default.TARGET)
	        );
	    };
	    /**
	     * Get the DOM element into which this map is rendered. In contrast to
	     * `getTarget` this method always return an `Element`, or `null` if the
	     * map has no target.
	     * @return {HTMLElement} The element that the map is rendered in.
	     * @api
	     */
	    PluggableMap.prototype.getTargetElement = function () {
	        var target = this.getTarget();
	        if (target !== undefined) {
	            return typeof target === 'string' ? document.getElementById(target) : target;
	        } else {
	            return null;
	        }
	    };
	    /**
	     * Get the coordinate for a given pixel.  This returns a coordinate in the
	     * user projection.
	     * @param {import("./pixel.js").Pixel} pixel Pixel position in the map viewport.
	     * @return {import("./coordinate.js").Coordinate} The coordinate for the pixel position.
	     * @api
	     */
	    PluggableMap.prototype.getCoordinateFromPixel = function (pixel) {
	        return (0, _proj.toUserCoordinate)(this.getCoordinateFromPixelInternal(pixel), this.getView().getProjection());
	    };
	    /**
	     * Get the coordinate for a given pixel.  This returns a coordinate in the
	     * map view projection.
	     * @param {import("./pixel.js").Pixel} pixel Pixel position in the map viewport.
	     * @return {import("./coordinate.js").Coordinate} The coordinate for the pixel position.
	     */
	    PluggableMap.prototype.getCoordinateFromPixelInternal = function (pixel) {
	        var frameState = this.frameState_;
	        if (!frameState) {
	            return null;
	        } else {
	            return (0, _transform.apply)(frameState.pixelToCoordinateTransform, pixel.slice());
	        }
	    };
	    /**
	     * Get the map controls. Modifying this collection changes the controls
	     * associated with the map.
	     * @return {Collection<import("./control/Control.js").default>} Controls.
	     * @api
	     */
	    PluggableMap.prototype.getControls = function () {
	        return this.controls;
	    };
	    /**
	     * Get the map overlays. Modifying this collection changes the overlays
	     * associated with the map.
	     * @return {Collection<import("./Overlay.js").default>} Overlays.
	     * @api
	     */
	    PluggableMap.prototype.getOverlays = function () {
	        return this.overlays_;
	    };
	    /**
	     * Get an overlay by its identifier (the value returned by overlay.getId()).
	     * Note that the index treats string and numeric identifiers as the same. So
	     * `map.getOverlayById(2)` will return an overlay with id `'2'` or `2`.
	     * @param {string|number} id Overlay identifier.
	     * @return {import("./Overlay.js").default} Overlay.
	     * @api
	     */
	    PluggableMap.prototype.getOverlayById = function (id) {
	        var overlay = this.overlayIdIndex_[id.toString()];
	        return overlay !== undefined ? overlay : null;
	    };
	    /**
	     * Get the map interactions. Modifying this collection changes the interactions
	     * associated with the map.
	     *
	     * Interactions are used for e.g. pan, zoom and rotate.
	     * @return {Collection<import("./interaction/Interaction.js").default>} Interactions.
	     * @api
	     */
	    PluggableMap.prototype.getInteractions = function () {
	        return this.interactions;
	    };
	    /**
	     * Get the layergroup associated with this map.
	     * @return {LayerGroup} A layer group containing the layers in this map.
	     * @observable
	     * @api
	     */
	    PluggableMap.prototype.getLayerGroup = function () {
	        return (
	            /** @type {LayerGroup} */this.get(_MapProperty2.default.LAYERGROUP)
	        );
	    };
	    /**
	     * Get the collection of layers associated with this map.
	     * @return {!Collection<import("./layer/Base.js").default>} Layers.
	     * @api
	     */
	    PluggableMap.prototype.getLayers = function () {
	        var layers = this.getLayerGroup().getLayers();
	        return layers;
	    };
	    /**
	     * @return {boolean} Layers have sources that are still loading.
	     */
	    PluggableMap.prototype.getLoading = function () {
	        var layerStatesArray = this.getLayerGroup().getLayerStatesArray();
	        for (var i = 0, ii = layerStatesArray.length; i < ii; ++i) {
	            var layer = layerStatesArray[i].layer;
	            var source = /** @type {import("./layer/Layer.js").default} */layer.getSource();
	            if (source && source.loading) {
	                return true;
	            }
	        }
	        return false;
	    };
	    /**
	     * Get the pixel for a coordinate.  This takes a coordinate in the user
	     * projection and returns the corresponding pixel.
	     * @param {import("./coordinate.js").Coordinate} coordinate A map coordinate.
	     * @return {import("./pixel.js").Pixel} A pixel position in the map viewport.
	     * @api
	     */
	    PluggableMap.prototype.getPixelFromCoordinate = function (coordinate) {
	        var viewCoordinate = (0, _proj.fromUserCoordinate)(coordinate, this.getView().getProjection());
	        return this.getPixelFromCoordinateInternal(viewCoordinate);
	    };
	    /**
	     * Get the pixel for a coordinate.  This takes a coordinate in the map view
	     * projection and returns the corresponding pixel.
	     * @param {import("./coordinate.js").Coordinate} coordinate A map coordinate.
	     * @return {import("./pixel.js").Pixel} A pixel position in the map viewport.
	     */
	    PluggableMap.prototype.getPixelFromCoordinateInternal = function (coordinate) {
	        var frameState = this.frameState_;
	        if (!frameState) {
	            return null;
	        } else {
	            return (0, _transform.apply)(frameState.coordinateToPixelTransform, coordinate.slice(0, 2));
	        }
	    };
	    /**
	     * Get the map renderer.
	     * @return {import("./renderer/Map.js").default} Renderer
	     */
	    PluggableMap.prototype.getRenderer = function () {
	        return this.renderer_;
	    };
	    /**
	     * Get the size of this map.
	     * @return {import("./size.js").Size|undefined} The size in pixels of the map in the DOM.
	     * @observable
	     * @api
	     */
	    PluggableMap.prototype.getSize = function () {
	        return (
	            /** @type {import("./size.js").Size|undefined} */this.get(_MapProperty2.default.SIZE)
	        );
	    };
	    /**
	     * Get the view associated with this map. A view manages properties such as
	     * center and resolution.
	     * @return {View} The view that controls this map.
	     * @observable
	     * @api
	     */
	    PluggableMap.prototype.getView = function () {
	        return (
	            /** @type {View} */this.get(_MapProperty2.default.VIEW)
	        );
	    };
	    /**
	     * Get the element that serves as the map viewport.
	     * @return {HTMLElement} Viewport.
	     * @api
	     */
	    PluggableMap.prototype.getViewport = function () {
	        return this.viewport_;
	    };
	    /**
	     * Get the element that serves as the container for overlays.  Elements added to
	     * this container will let mousedown and touchstart events through to the map,
	     * so clicks and gestures on an overlay will trigger {@link module:ol/MapBrowserEvent~MapBrowserEvent}
	     * events.
	     * @return {!HTMLElement} The map's overlay container.
	     */
	    PluggableMap.prototype.getOverlayContainer = function () {
	        return this.overlayContainer_;
	    };
	    /**
	     * Get the element that serves as a container for overlays that don't allow
	     * event propagation. Elements added to this container won't let mousedown and
	     * touchstart events through to the map, so clicks and gestures on an overlay
	     * don't trigger any {@link module:ol/MapBrowserEvent~MapBrowserEvent}.
	     * @return {!HTMLElement} The map's overlay container that stops events.
	     */
	    PluggableMap.prototype.getOverlayContainerStopEvent = function () {
	        return this.overlayContainerStopEvent_;
	    };
	    /**
	     * @param {import("./Tile.js").default} tile Tile.
	     * @param {string} tileSourceKey Tile source key.
	     * @param {import("./coordinate.js").Coordinate} tileCenter Tile center.
	     * @param {number} tileResolution Tile resolution.
	     * @return {number} Tile priority.
	     */
	    PluggableMap.prototype.getTilePriority = function (tile, tileSourceKey, tileCenter, tileResolution) {
	        // Filter out tiles at higher zoom levels than the current zoom level, or that
	        // are outside the visible extent.
	        var frameState = this.frameState_;
	        if (!frameState || !(tileSourceKey in frameState.wantedTiles)) {
	            return _PriorityQueue.DROP;
	        }
	        if (!frameState.wantedTiles[tileSourceKey][tile.getKey()]) {
	            return _PriorityQueue.DROP;
	        }
	        // Prioritize the highest zoom level tiles closest to the focus.
	        // Tiles at higher zoom levels are prioritized using Math.log(tileResolution).
	        // Within a zoom level, tiles are prioritized by the distance in pixels between
	        // the center of the tile and the center of the viewport.  The factor of 65536
	        // means that the prioritization should behave as desired for tiles up to
	        // 65536 * Math.log(2) = 45426 pixels from the focus.
	        var center = frameState.viewState.center;
	        var deltaX = tileCenter[0] - center[0];
	        var deltaY = tileCenter[1] - center[1];
	        return 65536 * Math.log(tileResolution) + Math.sqrt(deltaX * deltaX + deltaY * deltaY) / tileResolution;
	    };
	    /**
	     * @param {Event} browserEvent Browser event.
	     * @param {string=} opt_type Type.
	     */
	    PluggableMap.prototype.handleBrowserEvent = function (browserEvent, opt_type) {
	        var type = opt_type || browserEvent.type;
	        var mapBrowserEvent = new _MapBrowserEvent2.default(type, this, browserEvent);
	        this.handleMapBrowserEvent(mapBrowserEvent);
	    };
	    /**
	     * @param {MapBrowserEvent} mapBrowserEvent The event to handle.
	     */
	    PluggableMap.prototype.handleMapBrowserEvent = function (mapBrowserEvent) {
	        if (!this.frameState_) {
	            // With no view defined, we cannot translate pixels into geographical
	            // coordinates so interactions cannot be used.
	            return;
	        }
	        var target = mapBrowserEvent.originalEvent.target;
	        while (target instanceof HTMLElement) {
	            if (target.parentElement === this.overlayContainerStopEvent_) {
	                return;
	            }
	            target = target.parentElement;
	        }
	        mapBrowserEvent.frameState = this.frameState_;
	        var interactionsArray = this.getInteractions().getArray();
	        if (this.dispatchEvent(mapBrowserEvent) !== false) {
	            for (var i = interactionsArray.length - 1; i >= 0; i--) {
	                var interaction = interactionsArray[i];
	                if (!interaction.getActive()) {
	                    continue;
	                }
	                var cont = interaction.handleEvent(mapBrowserEvent);
	                if (!cont) {
	                    break;
	                }
	            }
	        }
	    };
	    /**
	     * @protected
	     */
	    PluggableMap.prototype.handlePostRender = function () {
	        var frameState = this.frameState_;
	        // Manage the tile queue
	        // Image loads are expensive and a limited resource, so try to use them
	        // efficiently:
	        // * When the view is static we allow a large number of parallel tile loads
	        //   to complete the frame as quickly as possible.
	        // * When animating or interacting, image loads can cause janks, so we reduce
	        //   the maximum number of loads per frame and limit the number of parallel
	        //   tile loads to remain reactive to view changes and to reduce the chance of
	        //   loading tiles that will quickly disappear from view.
	        var tileQueue = this.tileQueue_;
	        if (!tileQueue.isEmpty()) {
	            var maxTotalLoading = this.maxTilesLoading_;
	            var maxNewLoads = maxTotalLoading;
	            if (frameState) {
	                var hints = frameState.viewHints;
	                if (hints[_ViewHint2.default.ANIMATING] || hints[_ViewHint2.default.INTERACTING]) {
	                    var lowOnFrameBudget = !_has.IMAGE_DECODE && Date.now() - frameState.time > 8;
	                    maxTotalLoading = lowOnFrameBudget ? 0 : 8;
	                    maxNewLoads = lowOnFrameBudget ? 0 : 2;
	                }
	            }
	            if (tileQueue.getTilesLoading() < maxTotalLoading) {
	                tileQueue.reprioritize(); // FIXME only call if view has changed
	                tileQueue.loadMoreTiles(maxTotalLoading, maxNewLoads);
	            }
	        }
	        if (frameState && this.hasListener(_EventType2.default.RENDERCOMPLETE) && !frameState.animate && !this.tileQueue_.getTilesLoading() && !this.getLoading()) {
	            this.renderer_.dispatchRenderEvent(_EventType2.default.RENDERCOMPLETE, frameState);
	        }
	        var postRenderFunctions = this.postRenderFunctions_;
	        for (var i = 0, ii = postRenderFunctions.length; i < ii; ++i) {
	            postRenderFunctions[i](this, frameState);
	        }
	        postRenderFunctions.length = 0;
	    };
	    /**
	     * @private
	     */
	    PluggableMap.prototype.handleSizeChanged_ = function () {
	        if (this.getView()) {
	            this.getView().resolveConstraints(0);
	        }
	        this.render();
	    };
	    /**
	     * @private
	     */
	    PluggableMap.prototype.handleTargetChanged_ = function () {
	        // target may be undefined, null, a string or an Element.
	        // If it's a string we convert it to an Element before proceeding.
	        // If it's not now an Element we remove the viewport from the DOM.
	        // If it's an Element we append the viewport element to it.
	        var targetElement;
	        if (this.getTarget()) {
	            targetElement = this.getTargetElement();
	        }
	        if (this.focusHandlerKeys_) {
	            for (var i = 0, ii = this.focusHandlerKeys_.length; i < ii; ++i) {
	                (0, _events.unlistenByKey)(this.focusHandlerKeys_[i]);
	            }
	            this.focusHandlerKeys_ = null;
	        }
	        if (this.keyHandlerKeys_) {
	            for (var i = 0, ii = this.keyHandlerKeys_.length; i < ii; ++i) {
	                (0, _events.unlistenByKey)(this.keyHandlerKeys_[i]);
	            }
	            this.keyHandlerKeys_ = null;
	        }
	        if (!targetElement) {
	            if (this.renderer_) {
	                clearTimeout(this.postRenderTimeoutHandle_);
	                this.postRenderFunctions_.length = 0;
	                this.renderer_.dispose();
	                this.renderer_ = null;
	            }
	            if (this.animationDelayKey_) {
	                cancelAnimationFrame(this.animationDelayKey_);
	                this.animationDelayKey_ = undefined;
	            }
	            (0, _dom.removeNode)(this.viewport_);
	            if (this.handleResize_ !== undefined) {
	                removeEventListener(_EventType4.default.RESIZE, this.handleResize_, false);
	                this.handleResize_ = undefined;
	            }
	        } else {
	            targetElement.appendChild(this.viewport_);
	            if (!this.renderer_) {
	                this.renderer_ = this.createRenderer();
	            }
	            var hasFocus = true;
	            if (targetElement.hasAttribute('tabindex')) {
	                hasFocus = document.activeElement === targetElement;
	                this.focusHandlerKeys_ = [(0, _events.listen)(targetElement, _EventType4.default.FOCUS, setTouchAction.bind(this, this.viewport_, 'none')), (0, _events.listen)(targetElement, _EventType4.default.BLUR, setTouchAction.bind(this, this.viewport_, 'auto'))];
	            }
	            setTouchAction(this.viewport_, hasFocus ? 'none' : 'auto');
	            var keyboardEventTarget = !this.keyboardEventTarget_ ? targetElement : this.keyboardEventTarget_;
	            this.keyHandlerKeys_ = [(0, _events.listen)(keyboardEventTarget, _EventType4.default.KEYDOWN, this.handleBrowserEvent, this), (0, _events.listen)(keyboardEventTarget, _EventType4.default.KEYPRESS, this.handleBrowserEvent, this)];
	            if (!this.handleResize_) {
	                this.handleResize_ = this.updateSize.bind(this);
	                window.addEventListener(_EventType4.default.RESIZE, this.handleResize_, false);
	            }
	        }
	        this.updateSize();
	        // updateSize calls setSize, so no need to call this.render
	        // ourselves here.
	    };
	    /**
	     * @private
	     */
	    PluggableMap.prototype.handleTileChange_ = function () {
	        this.render();
	    };
	    /**
	     * @private
	     */
	    PluggableMap.prototype.handleViewPropertyChanged_ = function () {
	        this.render();
	    };
	    /**
	     * @private
	     */
	    PluggableMap.prototype.handleViewChanged_ = function () {
	        if (this.viewPropertyListenerKey_) {
	            (0, _events.unlistenByKey)(this.viewPropertyListenerKey_);
	            this.viewPropertyListenerKey_ = null;
	        }
	        if (this.viewChangeListenerKey_) {
	            (0, _events.unlistenByKey)(this.viewChangeListenerKey_);
	            this.viewChangeListenerKey_ = null;
	        }
	        var view = this.getView();
	        if (view) {
	            this.viewport_.setAttribute('data-view', (0, _util.getUid)(view));
	            this.viewPropertyListenerKey_ = (0, _events.listen)(view, _ObjectEventType2.default.PROPERTYCHANGE, this.handleViewPropertyChanged_, this);
	            this.viewChangeListenerKey_ = (0, _events.listen)(view, _EventType4.default.CHANGE, this.handleViewPropertyChanged_, this);
	            view.resolveConstraints(0);
	        }
	        this.render();
	    };
	    /**
	     * @private
	     */
	    PluggableMap.prototype.handleLayerGroupChanged_ = function () {
	        if (this.layerGroupPropertyListenerKeys_) {
	            this.layerGroupPropertyListenerKeys_.forEach(_events.unlistenByKey);
	            this.layerGroupPropertyListenerKeys_ = null;
	        }
	        var layerGroup = this.getLayerGroup();
	        if (layerGroup) {
	            this.layerGroupPropertyListenerKeys_ = [(0, _events.listen)(layerGroup, _ObjectEventType2.default.PROPERTYCHANGE, this.render, this), (0, _events.listen)(layerGroup, _EventType4.default.CHANGE, this.render, this)];
	        }
	        this.render();
	    };
	    /**
	     * @return {boolean} Is rendered.
	     */
	    PluggableMap.prototype.isRendered = function () {
	        return !!this.frameState_;
	    };
	    /**
	     * Requests an immediate render in a synchronous manner.
	     * @api
	     */
	    PluggableMap.prototype.renderSync = function () {
	        if (this.animationDelayKey_) {
	            cancelAnimationFrame(this.animationDelayKey_);
	        }
	        this.animationDelay_();
	    };
	    /**
	     * Redraws all text after new fonts have loaded
	     */
	    PluggableMap.prototype.redrawText = function () {
	        var layerStates = this.getLayerGroup().getLayerStatesArray();
	        for (var i = 0, ii = layerStates.length; i < ii; ++i) {
	            var layer = layerStates[i].layer;
	            if (layer.hasRenderer()) {
	                layer.getRenderer().handleFontsChanged();
	            }
	        }
	    };
	    /**
	     * Request a map rendering (at the next animation frame).
	     * @api
	     */
	    PluggableMap.prototype.render = function () {
	        if (this.renderer_ && this.animationDelayKey_ === undefined) {
	            this.animationDelayKey_ = requestAnimationFrame(this.animationDelay_);
	        }
	    };
	    /**
	     * Remove the given control from the map.
	     * @param {import("./control/Control.js").default} control Control.
	     * @return {import("./control/Control.js").default|undefined} The removed control (or undefined
	     *     if the control was not found).
	     * @api
	     */
	    PluggableMap.prototype.removeControl = function (control) {
	        return this.getControls().remove(control);
	    };
	    /**
	     * Remove the given interaction from the map.
	     * @param {import("./interaction/Interaction.js").default} interaction Interaction to remove.
	     * @return {import("./interaction/Interaction.js").default|undefined} The removed interaction (or
	     *     undefined if the interaction was not found).
	     * @api
	     */
	    PluggableMap.prototype.removeInteraction = function (interaction) {
	        return this.getInteractions().remove(interaction);
	    };
	    /**
	     * Removes the given layer from the map.
	     * @param {import("./layer/Base.js").default} layer Layer.
	     * @return {import("./layer/Base.js").default|undefined} The removed layer (or undefined if the
	     *     layer was not found).
	     * @api
	     */
	    PluggableMap.prototype.removeLayer = function (layer) {
	        var layers = this.getLayerGroup().getLayers();
	        return layers.remove(layer);
	    };
	    /**
	     * Remove the given overlay from the map.
	     * @param {import("./Overlay.js").default} overlay Overlay.
	     * @return {import("./Overlay.js").default|undefined} The removed overlay (or undefined
	     *     if the overlay was not found).
	     * @api
	     */
	    PluggableMap.prototype.removeOverlay = function (overlay) {
	        return this.getOverlays().remove(overlay);
	    };
	    /**
	     * @param {number} time Time.
	     * @private
	     */
	    PluggableMap.prototype.renderFrame_ = function (time) {
	        var size = this.getSize();
	        var view = this.getView();
	        var previousFrameState = this.frameState_;
	        /** @type {?FrameState} */
	        var frameState = null;
	        if (size !== undefined && (0, _size.hasArea)(size) && view && view.isDef()) {
	            var viewHints = view.getHints(this.frameState_ ? this.frameState_.viewHints : undefined);
	            var viewState = view.getState();
	            frameState = {
	                animate: false,
	                coordinateToPixelTransform: this.coordinateToPixelTransform_,
	                declutterItems: previousFrameState ? previousFrameState.declutterItems : [],
	                extent: (0, _extent.getForViewAndSize)(viewState.center, viewState.resolution, viewState.rotation, size),
	                index: this.frameIndex_++,
	                layerIndex: 0,
	                layerStatesArray: this.getLayerGroup().getLayerStatesArray(),
	                pixelRatio: this.pixelRatio_,
	                pixelToCoordinateTransform: this.pixelToCoordinateTransform_,
	                postRenderFunctions: [],
	                size: size,
	                tileQueue: this.tileQueue_,
	                time: time,
	                usedTiles: {},
	                viewState: viewState,
	                viewHints: viewHints,
	                wantedTiles: {}
	            };
	        }
	        this.frameState_ = frameState;
	        this.renderer_.renderFrame(frameState);
	        if (frameState) {
	            if (frameState.animate) {
	                this.render();
	            }
	            Array.prototype.push.apply(this.postRenderFunctions_, frameState.postRenderFunctions);
	            if (previousFrameState) {
	                var moveStart = !this.previousExtent_ || !(0, _extent.isEmpty)(this.previousExtent_) && !(0, _extent.equals)(frameState.extent, this.previousExtent_);
	                if (moveStart) {
	                    this.dispatchEvent(new _MapEvent2.default(_MapEventType2.default.MOVESTART, this, previousFrameState));
	                    this.previousExtent_ = (0, _extent.createOrUpdateEmpty)(this.previousExtent_);
	                }
	            }
	            var idle = this.previousExtent_ && !frameState.viewHints[_ViewHint2.default.ANIMATING] && !frameState.viewHints[_ViewHint2.default.INTERACTING] && !(0, _extent.equals)(frameState.extent, this.previousExtent_);
	            if (idle) {
	                this.dispatchEvent(new _MapEvent2.default(_MapEventType2.default.MOVEEND, this, frameState));
	                (0, _extent.clone)(frameState.extent, this.previousExtent_);
	            }
	        }
	        this.dispatchEvent(new _MapEvent2.default(_MapEventType2.default.POSTRENDER, this, frameState));
	        this.postRenderTimeoutHandle_ = setTimeout(this.handlePostRender.bind(this), 0);
	    };
	    /**
	     * Sets the layergroup of this map.
	     * @param {LayerGroup} layerGroup A layer group containing the layers in this map.
	     * @observable
	     * @api
	     */
	    PluggableMap.prototype.setLayerGroup = function (layerGroup) {
	        this.set(_MapProperty2.default.LAYERGROUP, layerGroup);
	    };
	    /**
	     * Set the size of this map.
	     * @param {import("./size.js").Size|undefined} size The size in pixels of the map in the DOM.
	     * @observable
	     * @api
	     */
	    PluggableMap.prototype.setSize = function (size) {
	        this.set(_MapProperty2.default.SIZE, size);
	    };
	    /**
	     * Set the target element to render this map into.
	     * @param {HTMLElement|string|undefined} target The Element or id of the Element
	     *     that the map is rendered in.
	     * @observable
	     * @api
	     */
	    PluggableMap.prototype.setTarget = function (target) {
	        this.set(_MapProperty2.default.TARGET, target);
	    };
	    /**
	     * Set the view for this map.
	     * @param {View} view The view that controls this map.
	     * @observable
	     * @api
	     */
	    PluggableMap.prototype.setView = function (view) {
	        this.set(_MapProperty2.default.VIEW, view);
	    };
	    /**
	     * Force a recalculation of the map viewport size.  This should be called when
	     * third-party code changes the size of the map viewport.
	     * @api
	     */
	    PluggableMap.prototype.updateSize = function () {
	        var targetElement = this.getTargetElement();
	        if (!targetElement) {
	            this.setSize(undefined);
	        } else {
	            var computedStyle = getComputedStyle(targetElement);
	            this.setSize([targetElement.offsetWidth - parseFloat(computedStyle['borderLeftWidth']) - parseFloat(computedStyle['paddingLeft']) - parseFloat(computedStyle['paddingRight']) - parseFloat(computedStyle['borderRightWidth']), targetElement.offsetHeight - parseFloat(computedStyle['borderTopWidth']) - parseFloat(computedStyle['paddingTop']) - parseFloat(computedStyle['paddingBottom']) - parseFloat(computedStyle['borderBottomWidth'])]);
	        }
	    };
	    return PluggableMap;
	}(_Object2.default);
	/**
	 * @param {MapOptions} options Map options.
	 * @return {MapOptionsInternal} Internal map options.
	 */
	function createOptionsInternal(options) {
	    /**
	     * @type {HTMLElement|Document}
	     */
	    var keyboardEventTarget = null;
	    if (options.keyboardEventTarget !== undefined) {
	        keyboardEventTarget = typeof options.keyboardEventTarget === 'string' ? document.getElementById(options.keyboardEventTarget) : options.keyboardEventTarget;
	    }
	    /**
	     * @type {Object<string, *>}
	     */
	    var values = {};
	    var layerGroup = options.layers && typeof /** @type {?} */options.layers.getLayers === 'function' ?
	    /** @type {LayerGroup} */options.layers : new _Group2.default({ layers: /** @type {Collection} */options.layers });
	    values[_MapProperty2.default.LAYERGROUP] = layerGroup;
	    values[_MapProperty2.default.TARGET] = options.target;
	    values[_MapProperty2.default.VIEW] = options.view !== undefined ? options.view : new _View2.default();
	    var controls;
	    if (options.controls !== undefined) {
	        if (Array.isArray(options.controls)) {
	            controls = new _Collection2.default(options.controls.slice());
	        } else {
	            (0, _asserts.assert)(typeof /** @type {?} */options.controls.getArray === 'function', 47); // Expected `controls` to be an array or an `import("./Collection.js").Collection`
	            controls = /** @type {Collection} */options.controls;
	        }
	    }
	    var interactions;
	    if (options.interactions !== undefined) {
	        if (Array.isArray(options.interactions)) {
	            interactions = new _Collection2.default(options.interactions.slice());
	        } else {
	            (0, _asserts.assert)(typeof /** @type {?} */options.interactions.getArray === 'function', 48); // Expected `interactions` to be an array or an `import("./Collection.js").Collection`
	            interactions = /** @type {Collection} */options.interactions;
	        }
	    }
	    var overlays;
	    if (options.overlays !== undefined) {
	        if (Array.isArray(options.overlays)) {
	            overlays = new _Collection2.default(options.overlays.slice());
	        } else {
	            (0, _asserts.assert)(typeof /** @type {?} */options.overlays.getArray === 'function', 49); // Expected `overlays` to be an array or an `import("./Collection.js").Collection`
	            overlays = options.overlays;
	        }
	    } else {
	        overlays = new _Collection2.default();
	    }
	    return {
	        controls: controls,
	        interactions: interactions,
	        keyboardEventTarget: keyboardEventTarget,
	        overlays: overlays,
	        values: values
	    };
	}
	exports.default = PluggableMap;
	//# sourceMappingURL=PluggableMap.js.map

/***/ }),
/* 258 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	
	var _TileState = __webpack_require__(70);
	
	var _TileState2 = _interopRequireDefault(_TileState);
	
	var _easing = __webpack_require__(71);
	
	var _Target = __webpack_require__(101);
	
	var _Target2 = _interopRequireDefault(_Target);
	
	var _EventType = __webpack_require__(10);
	
	var _EventType2 = _interopRequireDefault(_EventType);
	
	var _util = __webpack_require__(14);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var __extends = undefined && undefined.__extends || function () {
	    var _extendStatics = function extendStatics(d, b) {
	        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	            d.__proto__ = b;
	        } || function (d, b) {
	            for (var p in b) {
	                if (b.hasOwnProperty(p)) d[p] = b[p];
	            }
	        };
	        return _extendStatics(d, b);
	    };
	    return function (d, b) {
	        _extendStatics(d, b);
	        function __() {
	            this.constructor = d;
	        }
	        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	    };
	}();
	/**
	 * @module ol/Tile
	 */
	
	/**
	 * A function that takes an {@link module:ol/Tile} for the tile and a
	 * `{string}` for the url as arguments. The default is
	 * ```js
	 * source.setTileLoadFunction(function(tile, src) {
	 *   tile.getImage().src = src;
	 * });
	 * ```
	 * For more fine grained control, the load function can use fetch or XMLHttpRequest and involve
	 * error handling:
	 *
	 * ```js
	 * import TileState from 'ol/TileState';
	 *
	 * source.setTileLoadFunction(function(tile, src) {
	 *   var xhr = new XMLHttpRequest();
	 *   xhr.responseType = 'blob';
	 *   xhr.addEventListener('loadend', function (evt) {
	 *     var data = this.response;
	 *     if (data !== undefined) {
	 *       tile.getImage().src = URL.createObjectURL(data);
	 *     } else {
	 *       tile.setState(TileState.ERROR);
	 *     }
	 *   });
	 *   xhr.addEventListener('error', function () {
	 *     tile.setState(TileState.ERROR);
	 *   });
	 *   xhr.open('GET', src);
	 *   xhr.send();
	 * });
	 * ```
	 *
	 * @typedef {function(Tile, string): void} LoadFunction
	 * @api
	 */
	/**
	 * {@link module:ol/source/Tile~Tile} sources use a function of this type to get
	 * the url that provides a tile for a given tile coordinate.
	 *
	 * This function takes an {@link module:ol/tilecoord~TileCoord} for the tile
	 * coordinate, a `{number}` representing the pixel ratio and a
	 * {@link module:ol/proj/Projection} for the projection  as arguments
	 * and returns a `{string}` representing the tile URL, or undefined if no tile
	 * should be requested for the passed tile coordinate.
	 *
	 * @typedef {function(import("./tilecoord.js").TileCoord, number,
	 *           import("./proj/Projection.js").default): (string|undefined)} UrlFunction
	 * @api
	 */
	/**
	 * @typedef {Object} Options
	 * @property {number} [transition=250] A duration for tile opacity
	 * transitions in milliseconds. A duration of 0 disables the opacity transition.
	 * @api
	 */
	/**
	 * @classdesc
	 * Base class for tiles.
	 *
	 * @abstract
	 */
	var Tile = /** @class */function (_super) {
	    __extends(Tile, _super);
	    /**
	     * @param {import("./tilecoord.js").TileCoord} tileCoord Tile coordinate.
	     * @param {TileState} state State.
	     * @param {Options=} opt_options Tile options.
	     */
	    function Tile(tileCoord, state, opt_options) {
	        var _this = _super.call(this) || this;
	        var options = opt_options ? opt_options : {};
	        /**
	         * @type {import("./tilecoord.js").TileCoord}
	         */
	        _this.tileCoord = tileCoord;
	        /**
	         * @protected
	         * @type {TileState}
	         */
	        _this.state = state;
	        /**
	         * An "interim" tile for this tile. The interim tile may be used while this
	         * one is loading, for "smooth" transitions when changing params/dimensions
	         * on the source.
	         * @type {Tile}
	         */
	        _this.interimTile = null;
	        /**
	         * The tile is available at the highest possible resolution. Subclasses can
	         * set this to `false` initially. Tile load listeners will not be
	         * unregistered before this is set to `true` and a `#changed()` is called.
	         * @type {boolean}
	         */
	        _this.hifi = true;
	        /**
	         * A key assigned to the tile. This is used by the tile source to determine
	         * if this tile can effectively be used, or if a new tile should be created
	         * and this one be used as an interim tile for this new tile.
	         * @type {string}
	         */
	        _this.key = '';
	        /**
	         * The duration for the opacity transition.
	         * @type {number}
	         */
	        _this.transition_ = options.transition === undefined ? 250 : options.transition;
	        /**
	         * Lookup of start times for rendering transitions.  If the start time is
	         * equal to -1, the transition is complete.
	         * @type {Object<string, number>}
	         */
	        _this.transitionStarts_ = {};
	        return _this;
	    }
	    /**
	     * @protected
	     */
	    Tile.prototype.changed = function () {
	        this.dispatchEvent(_EventType2.default.CHANGE);
	    };
	    /**
	     * @inheritDoc
	     */
	    Tile.prototype.disposeInternal = function () {
	        this.setState(_TileState2.default.ABORT);
	    };
	    /**
	     * @return {string} Key.
	     */
	    Tile.prototype.getKey = function () {
	        return this.key + '/' + this.tileCoord;
	    };
	    /**
	     * Get the interim tile most suitable for rendering using the chain of interim
	     * tiles. This corresponds to the  most recent tile that has been loaded, if no
	     * such tile exists, the original tile is returned.
	     * @return {!Tile} Best tile for rendering.
	     */
	    Tile.prototype.getInterimTile = function () {
	        if (!this.interimTile) {
	            //empty chain
	            return this;
	        }
	        var tile = this.interimTile;
	        // find the first loaded tile and return it. Since the chain is sorted in
	        // decreasing order of creation time, there is no need to search the remainder
	        // of the list (all those tiles correspond to older requests and will be
	        // cleaned up by refreshInterimChain)
	        do {
	            if (tile.getState() == _TileState2.default.LOADED) {
	                // Show tile immediately instead of fading it in after loading, because
	                // the interim tile is in place already
	                this.transition_ = 0;
	                return tile;
	            }
	            tile = tile.interimTile;
	        } while (tile);
	        // we can not find a better tile
	        return this;
	    };
	    /**
	     * Goes through the chain of interim tiles and discards sections of the chain
	     * that are no longer relevant.
	     */
	    Tile.prototype.refreshInterimChain = function () {
	        if (!this.interimTile) {
	            return;
	        }
	        var tile = this.interimTile;
	        var prev = /** @type {Tile} */this;
	        do {
	            if (tile.getState() == _TileState2.default.LOADED) {
	                //we have a loaded tile, we can discard the rest of the list
	                //we would could abort any LOADING tile request
	                //older than this tile (i.e. any LOADING tile following this entry in the chain)
	                tile.interimTile = null;
	                break;
	            } else if (tile.getState() == _TileState2.default.LOADING) {
	                //keep this LOADING tile any loaded tiles later in the chain are
	                //older than this tile, so we're still interested in the request
	                prev = tile;
	            } else if (tile.getState() == _TileState2.default.IDLE) {
	                //the head of the list is the most current tile, we don't need
	                //to start any other requests for this chain
	                prev.interimTile = tile.interimTile;
	            } else {
	                prev = tile;
	            }
	            tile = prev.interimTile;
	        } while (tile);
	    };
	    /**
	     * Get the tile coordinate for this tile.
	     * @return {import("./tilecoord.js").TileCoord} The tile coordinate.
	     * @api
	     */
	    Tile.prototype.getTileCoord = function () {
	        return this.tileCoord;
	    };
	    /**
	     * @return {TileState} State.
	     */
	    Tile.prototype.getState = function () {
	        return this.state;
	    };
	    /**
	     * Sets the state of this tile. If you write your own {@link module:ol/Tile~LoadFunction tileLoadFunction} ,
	     * it is important to set the state correctly to {@link module:ol/TileState~ERROR}
	     * when the tile cannot be loaded. Otherwise the tile cannot be removed from
	     * the tile queue and will block other requests.
	     * @param {TileState} state State.
	     * @api
	     */
	    Tile.prototype.setState = function (state) {
	        if (this.state !== _TileState2.default.ERROR && this.state > state) {
	            throw new Error('Tile load sequence violation');
	        }
	        this.state = state;
	        this.changed();
	    };
	    /**
	     * Load the image or retry if loading previously failed.
	     * Loading is taken care of by the tile queue, and calling this method is
	     * only needed for preloading or for reloading in case of an error.
	     * @abstract
	     * @api
	     */
	    Tile.prototype.load = function () {
	        (0, _util.abstract)();
	    };
	    /**
	     * Get the alpha value for rendering.
	     * @param {string} id An id for the renderer.
	     * @param {number} time The render frame time.
	     * @return {number} A number between 0 and 1.
	     */
	    Tile.prototype.getAlpha = function (id, time) {
	        if (!this.transition_) {
	            return 1;
	        }
	        var start = this.transitionStarts_[id];
	        if (!start) {
	            start = time;
	            this.transitionStarts_[id] = start;
	        } else if (start === -1) {
	            return 1;
	        }
	        var delta = time - start + 1000 / 60; // avoid rendering at 0
	        if (delta >= this.transition_) {
	            return 1;
	        }
	        return (0, _easing.easeIn)(delta / this.transition_);
	    };
	    /**
	     * Determine if a tile is in an alpha transition.  A tile is considered in
	     * transition if tile.getAlpha() has not yet been called or has been called
	     * and returned 1.
	     * @param {string} id An id for the renderer.
	     * @return {boolean} The tile is in transition.
	     */
	    Tile.prototype.inTransition = function (id) {
	        if (!this.transition_) {
	            return false;
	        }
	        return this.transitionStarts_[id] !== -1;
	    };
	    /**
	     * Mark a transition as complete.
	     * @param {string} id An id for the renderer.
	     */
	    Tile.prototype.endTransition = function (id) {
	        if (this.transition_) {
	            this.transitionStarts_[id] = -1;
	        }
	    };
	    return Tile;
	}(_Target2.default);
	exports.default = Tile;
	//# sourceMappingURL=Tile.js.map

/***/ }),
/* 259 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	
	var _LRUCache = __webpack_require__(299);
	
	var _LRUCache2 = _interopRequireDefault(_LRUCache);
	
	var _tilecoord = __webpack_require__(88);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var __extends = undefined && undefined.__extends || function () {
	    var _extendStatics = function extendStatics(d, b) {
	        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	            d.__proto__ = b;
	        } || function (d, b) {
	            for (var p in b) {
	                if (b.hasOwnProperty(p)) d[p] = b[p];
	            }
	        };
	        return _extendStatics(d, b);
	    };
	    return function (d, b) {
	        _extendStatics(d, b);
	        function __() {
	            this.constructor = d;
	        }
	        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	    };
	}();
	/**
	 * @module ol/TileCache
	 */
	
	var TileCache = /** @class */function (_super) {
	    __extends(TileCache, _super);
	    /**
	     * @param {number=} opt_highWaterMark High water mark.
	     */
	    function TileCache(opt_highWaterMark) {
	        return _super.call(this, opt_highWaterMark) || this;
	    }
	    /**
	     * @param {!Object<string, import("./TileRange.js").default>} usedTiles Used tiles.
	     */
	    TileCache.prototype.expireCache = function (usedTiles) {
	        while (this.canExpireCache()) {
	            var tile = this.peekLast();
	            if (tile.getKey() in usedTiles) {
	                break;
	            } else {
	                this.pop().dispose();
	            }
	        }
	    };
	    /**
	     * Prune all tiles from the cache that don't have the same z as the newest tile.
	     */
	    TileCache.prototype.pruneExceptNewestZ = function () {
	        if (this.getCount() === 0) {
	            return;
	        }
	        var key = this.peekFirstKey();
	        var tileCoord = (0, _tilecoord.fromKey)(key);
	        var z = tileCoord[0];
	        this.forEach(function (tile) {
	            if (tile.tileCoord[0] !== z) {
	                this.remove((0, _tilecoord.getKey)(tile.tileCoord));
	                tile.dispose();
	            }
	        }.bind(this));
	    };
	    return TileCache;
	}(_LRUCache2.default);
	exports.default = TileCache;
	//# sourceMappingURL=TileCache.js.map

/***/ }),
/* 260 */
/***/ (function(module, exports) {

	"use strict";
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	exports.createOrUpdate = createOrUpdate;
	/**
	 * @module ol/TileRange
	 */
	/**
	 * A representation of a contiguous block of tiles.  A tile range is specified
	 * by its min/max tile coordinates and is inclusive of coordinates.
	 */
	var TileRange = /** @class */function () {
	    /**
	     * @param {number} minX Minimum X.
	     * @param {number} maxX Maximum X.
	     * @param {number} minY Minimum Y.
	     * @param {number} maxY Maximum Y.
	     */
	    function TileRange(minX, maxX, minY, maxY) {
	        /**
	         * @type {number}
	         */
	        this.minX = minX;
	        /**
	         * @type {number}
	         */
	        this.maxX = maxX;
	        /**
	         * @type {number}
	         */
	        this.minY = minY;
	        /**
	         * @type {number}
	         */
	        this.maxY = maxY;
	    }
	    /**
	     * @param {import("./tilecoord.js").TileCoord} tileCoord Tile coordinate.
	     * @return {boolean} Contains tile coordinate.
	     */
	    TileRange.prototype.contains = function (tileCoord) {
	        return this.containsXY(tileCoord[1], tileCoord[2]);
	    };
	    /**
	     * @param {TileRange} tileRange Tile range.
	     * @return {boolean} Contains.
	     */
	    TileRange.prototype.containsTileRange = function (tileRange) {
	        return this.minX <= tileRange.minX && tileRange.maxX <= this.maxX && this.minY <= tileRange.minY && tileRange.maxY <= this.maxY;
	    };
	    /**
	     * @param {number} x Tile coordinate x.
	     * @param {number} y Tile coordinate y.
	     * @return {boolean} Contains coordinate.
	     */
	    TileRange.prototype.containsXY = function (x, y) {
	        return this.minX <= x && x <= this.maxX && this.minY <= y && y <= this.maxY;
	    };
	    /**
	     * @param {TileRange} tileRange Tile range.
	     * @return {boolean} Equals.
	     */
	    TileRange.prototype.equals = function (tileRange) {
	        return this.minX == tileRange.minX && this.minY == tileRange.minY && this.maxX == tileRange.maxX && this.maxY == tileRange.maxY;
	    };
	    /**
	     * @param {TileRange} tileRange Tile range.
	     */
	    TileRange.prototype.extend = function (tileRange) {
	        if (tileRange.minX < this.minX) {
	            this.minX = tileRange.minX;
	        }
	        if (tileRange.maxX > this.maxX) {
	            this.maxX = tileRange.maxX;
	        }
	        if (tileRange.minY < this.minY) {
	            this.minY = tileRange.minY;
	        }
	        if (tileRange.maxY > this.maxY) {
	            this.maxY = tileRange.maxY;
	        }
	    };
	    /**
	     * @return {number} Height.
	     */
	    TileRange.prototype.getHeight = function () {
	        return this.maxY - this.minY + 1;
	    };
	    /**
	     * @return {import("./size.js").Size} Size.
	     */
	    TileRange.prototype.getSize = function () {
	        return [this.getWidth(), this.getHeight()];
	    };
	    /**
	     * @return {number} Width.
	     */
	    TileRange.prototype.getWidth = function () {
	        return this.maxX - this.minX + 1;
	    };
	    /**
	     * @param {TileRange} tileRange Tile range.
	     * @return {boolean} Intersects.
	     */
	    TileRange.prototype.intersects = function (tileRange) {
	        return this.minX <= tileRange.maxX && this.maxX >= tileRange.minX && this.minY <= tileRange.maxY && this.maxY >= tileRange.minY;
	    };
	    return TileRange;
	}();
	/**
	 * @param {number} minX Minimum X.
	 * @param {number} maxX Maximum X.
	 * @param {number} minY Minimum Y.
	 * @param {number} maxY Maximum Y.
	 * @param {TileRange=} tileRange TileRange.
	 * @return {TileRange} Tile range.
	 */
	function createOrUpdate(minX, maxX, minY, maxY, tileRange) {
	    if (tileRange !== undefined) {
	        tileRange.minX = minX;
	        tileRange.maxX = maxX;
	        tileRange.minY = minY;
	        tileRange.maxY = maxY;
	        return tileRange;
	    } else {
	        return new TileRange(minX, maxX, minY, maxY);
	    }
	}
	exports.default = TileRange;
	//# sourceMappingURL=TileRange.js.map

/***/ }),
/* 261 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	exports.createCenterConstraint = createCenterConstraint;
	exports.createResolutionConstraint = createResolutionConstraint;
	exports.createRotationConstraint = createRotationConstraint;
	exports.isNoopAnimation = isNoopAnimation;
	
	var _common = __webpack_require__(187);
	
	var _util = __webpack_require__(14);
	
	var _functions = __webpack_require__(31);
	
	var _centerconstraint = __webpack_require__(581);
	
	var _Object = __webpack_require__(32);
	
	var _Object2 = _interopRequireDefault(_Object);
	
	var _resolutionconstraint = __webpack_require__(643);
	
	var _rotationconstraint = __webpack_require__(177);
	
	var _ViewHint = __webpack_require__(170);
	
	var _ViewHint2 = _interopRequireDefault(_ViewHint);
	
	var _ViewProperty = __webpack_require__(262);
	
	var _ViewProperty2 = _interopRequireDefault(_ViewProperty);
	
	var _array = __webpack_require__(18);
	
	var _asserts = __webpack_require__(29);
	
	var _coordinate = __webpack_require__(84);
	
	var _easing = __webpack_require__(71);
	
	var _extent = __webpack_require__(4);
	
	var _GeometryType = __webpack_require__(22);
	
	var _GeometryType2 = _interopRequireDefault(_GeometryType);
	
	var _Polygon = __webpack_require__(57);
	
	var _math = __webpack_require__(19);
	
	var _obj = __webpack_require__(23);
	
	var _proj = __webpack_require__(16);
	
	var _Units = __webpack_require__(65);
	
	var _Units2 = _interopRequireDefault(_Units);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var __extends = undefined && undefined.__extends || function () {
	    var _extendStatics = function extendStatics(d, b) {
	        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	            d.__proto__ = b;
	        } || function (d, b) {
	            for (var p in b) {
	                if (b.hasOwnProperty(p)) d[p] = b[p];
	            }
	        };
	        return _extendStatics(d, b);
	    };
	    return function (d, b) {
	        _extendStatics(d, b);
	        function __() {
	            this.constructor = d;
	        }
	        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	    };
	}();
	/**
	 * @module ol/View
	 */
	
	/**
	 * An animation configuration
	 *
	 * @typedef {Object} Animation
	 * @property {import("./coordinate.js").Coordinate} [sourceCenter]
	 * @property {import("./coordinate.js").Coordinate} [targetCenter]
	 * @property {number} [sourceResolution]
	 * @property {number} [targetResolution]
	 * @property {number} [sourceRotation]
	 * @property {number} [targetRotation]
	 * @property {import("./coordinate.js").Coordinate} [anchor]
	 * @property {number} start
	 * @property {number} duration
	 * @property {boolean} complete
	 * @property {function(number):number} easing
	 * @property {function(boolean)} callback
	 */
	/**
	 * @typedef {Object} Constraints
	 * @property {import("./centerconstraint.js").Type} center
	 * @property {import("./resolutionconstraint.js").Type} resolution
	 * @property {import("./rotationconstraint.js").Type} rotation
	 */
	/**
	 * @typedef {Object} FitOptions
	 * @property {import("./size.js").Size} [size] The size in pixels of the box to fit
	 * the extent into. Default is the current size of the first map in the DOM that
	 * uses this view, or `[100, 100]` if no such map is found.
	 * @property {!Array<number>} [padding=[0, 0, 0, 0]] Padding (in pixels) to be
	 * cleared inside the view. Values in the array are top, right, bottom and left
	 * padding.
	 * @property {boolean} [nearest=false] If the view `constrainResolution` option is `true`,
	 * get the nearest extent instead of the closest that actually fits the view.
	 * @property {number} [minResolution=0] Minimum resolution that we zoom to.
	 * @property {number} [maxZoom] Maximum zoom level that we zoom to. If
	 * `minResolution` is given, this property is ignored.
	 * @property {number} [duration] The duration of the animation in milliseconds.
	 * By default, there is no animation to the target extent.
	 * @property {function(number):number} [easing] The easing function used during
	 * the animation (defaults to {@link module:ol/easing~inAndOut}).
	 * The function will be called for each frame with a number representing a
	 * fraction of the animation's duration.  The function should return a number
	 * between 0 and 1 representing the progress toward the destination state.
	 * @property {function(boolean)} [callback] Function called when the view is in
	 * its final position. The callback will be called with `true` if the animation
	 * series completed on its own or `false` if it was cancelled.
	 */
	/**
	 * @typedef {Object} ViewOptions
	 * @property {import("./coordinate.js").Coordinate} [center] The initial center for
	 * the view. If a user projection is not set, the coordinate system for the center is
	 * specified with the `projection` option. Layer sources will not be fetched if this
	 * is not set, but the center can be set later with {@link #setCenter}.
	 * @property {boolean|number} [constrainRotation=true] Rotation constraint.
	 * `false` means no constraint. `true` means no constraint, but snap to zero
	 * near zero. A number constrains the rotation to that number of values. For
	 * example, `4` will constrain the rotation to 0, 90, 180, and 270 degrees.
	 * @property {boolean} [enableRotation=true] Enable rotation.
	 * If `false`, a rotation constraint that always sets the rotation to zero is
	 * used. The `constrainRotation` option has no effect if `enableRotation` is
	 * `false`.
	 * @property {import("./extent.js").Extent} [extent] The extent that constrains the
	 * view, in other words, nothing outside of this extent can be visible on the map.
	 * @property {boolean} [constrainOnlyCenter=false] If true, the extent
	 * constraint will only apply to the view center and not the whole extent.
	 * @property {boolean} [smoothExtentConstraint=true] If true, the extent
	 * constraint will be applied smoothly, i.e. allow the view to go slightly outside
	 * of the given `extent`.
	 * @property {number} [maxResolution] The maximum resolution used to determine
	 * the resolution constraint. It is used together with `minResolution` (or
	 * `maxZoom`) and `zoomFactor`. If unspecified it is calculated in such a way
	 * that the projection's validity extent fits in a 256x256 px tile. If the
	 * projection is Spherical Mercator (the default) then `maxResolution` defaults
	 * to `40075016.68557849 / 256 = 156543.03392804097`.
	 * @property {number} [minResolution] The minimum resolution used to determine
	 * the resolution constraint.  It is used together with `maxResolution` (or
	 * `minZoom`) and `zoomFactor`.  If unspecified it is calculated assuming 29
	 * zoom levels (with a factor of 2). If the projection is Spherical Mercator
	 * (the default) then `minResolution` defaults to
	 * `40075016.68557849 / 256 / Math.pow(2, 28) = 0.0005831682455839253`.
	 * @property {number} [maxZoom=28] The maximum zoom level used to determine the
	 * resolution constraint. It is used together with `minZoom` (or
	 * `maxResolution`) and `zoomFactor`.  Note that if `minResolution` is also
	 * provided, it is given precedence over `maxZoom`.
	 * @property {number} [minZoom=0] The minimum zoom level used to determine the
	 * resolution constraint. It is used together with `maxZoom` (or
	 * `minResolution`) and `zoomFactor`.  Note that if `maxResolution` is also
	 * provided, it is given precedence over `minZoom`.
	 * @property {boolean} [multiWorld=false] If `false` the view is constrained so
	 * only one world is visible, and you cannot pan off the edge.  If `true` the map
	 * may show multiple worlds at low zoom levels.  Only used if the `projection` is
	 * global.  Note that if `extent` is also provided it is given precedence.
	 * @property {boolean} [constrainResolution=false] If true, the view will always
	 * animate to the closest zoom level after an interaction; false means
	 * intermediary zoom levels are allowed.
	 * @property {boolean} [smoothResolutionConstraint=true] If true, the resolution
	 * min/max values will be applied smoothly, i. e. allow the view to exceed slightly
	 * the given resolution or zoom bounds.
	 * @property {import("./proj.js").ProjectionLike} [projection='EPSG:3857'] The
	 * projection. The default is Spherical Mercator.
	 * @property {number} [resolution] The initial resolution for the view. The
	 * units are `projection` units per pixel (e.g. meters per pixel). An
	 * alternative to setting this is to set `zoom`. Layer sources will not be
	 * fetched if neither this nor `zoom` are defined, but they can be set later
	 * with {@link #setZoom} or {@link #setResolution}.
	 * @property {Array<number>} [resolutions] Resolutions to determine the
	 * resolution constraint. If set the `maxResolution`, `minResolution`,
	 * `minZoom`, `maxZoom`, and `zoomFactor` options are ignored.
	 * @property {number} [rotation=0] The initial rotation for the view in radians
	 * (positive rotation clockwise, 0 means North).
	 * @property {number} [zoom] Only used if `resolution` is not defined. Zoom
	 * level used to calculate the initial resolution for the view.
	 * @property {number} [zoomFactor=2] The zoom factor used to compute the
	 * corresponding resolution.
	 */
	/**
	 * @typedef {Object} AnimationOptions
	 * @property {import("./coordinate.js").Coordinate} [center] The center of the view at the end of
	 * the animation.
	 * @property {number} [zoom] The zoom level of the view at the end of the
	 * animation. This takes precedence over `resolution`.
	 * @property {number} [resolution] The resolution of the view at the end
	 * of the animation.  If `zoom` is also provided, this option will be ignored.
	 * @property {number} [rotation] The rotation of the view at the end of
	 * the animation.
	 * @property {import("./coordinate.js").Coordinate} [anchor] Optional anchor to remain fixed
	 * during a rotation or resolution animation.
	 * @property {number} [duration=1000] The duration of the animation in milliseconds.
	 * @property {function(number):number} [easing] The easing function used
	 * during the animation (defaults to {@link module:ol/easing~inAndOut}).
	 * The function will be called for each frame with a number representing a
	 * fraction of the animation's duration.  The function should return a number
	 * between 0 and 1 representing the progress toward the destination state.
	 */
	/**
	 * @typedef {Object} State
	 * @property {import("./coordinate.js").Coordinate} center
	 * @property {import("./proj/Projection.js").default} projection
	 * @property {number} resolution
	 * @property {number} rotation
	 * @property {number} zoom
	 */
	/**
	 * Default min zoom level for the map view.
	 * @type {number}
	 */
	var DEFAULT_MIN_ZOOM = 0;
	/**
	 * @classdesc
	 * A View object represents a simple 2D view of the map.
	 *
	 * This is the object to act upon to change the center, resolution,
	 * and rotation of the map.
	 *
	 * A View has a `projection`. The projection determines the
	 * coordinate system of the center, and its units determine the units of the
	 * resolution (projection units per pixel). The default projection is
	 * Spherical Mercator (EPSG:3857).
	 *
	 * ### The view states
	 *
	 * A View is determined by three states: `center`, `resolution`,
	 * and `rotation`. Each state has a corresponding getter and setter, e.g.
	 * `getCenter` and `setCenter` for the `center` state.
	 *
	 * The `zoom` state is actually not saved on the view: all computations
	 * internally use the `resolution` state. Still, the `setZoom` and `getZoom`
	 * methods are available, as well as `getResolutionForZoom` and
	 * `getZoomForResolution` to switch from one system to the other.
	 *
	 * ### The constraints
	 *
	 * `setCenter`, `setResolution` and `setRotation` can be used to change the
	 * states of the view, but any constraint defined in the constructor will
	 * be applied along the way.
	 *
	 * A View object can have a *resolution constraint*, a *rotation constraint*
	 * and a *center constraint*.
	 *
	 * The *resolution constraint* typically restricts min/max values and
	 * snaps to specific resolutions. It is determined by the following
	 * options: `resolutions`, `maxResolution`, `maxZoom` and `zoomFactor`.
	 * If `resolutions` is set, the other three options are ignored. See
	 * documentation for each option for more information. By default, the view
	 * only has a min/max restriction and allow intermediary zoom levels when
	 * pinch-zooming for example.
	 *
	 * The *rotation constraint* snaps to specific angles. It is determined
	 * by the following options: `enableRotation` and `constrainRotation`.
	 * By default rotation is allowed and its value is snapped to zero when approaching the
	 * horizontal.
	 *
	 * The *center constraint* is determined by the `extent` option. By
	 * default the view center is not constrained at all.
	 *
	 * ### Changing the view state
	 *
	 * It is important to note that `setZoom`, `setResolution`, `setCenter` and
	 * `setRotation` are subject to the above mentioned constraints. As such, it
	 * may sometimes not be possible to know in advance the resulting state of the
	 * View. For example, calling `setResolution(10)` does not guarantee that
	 * `getResolution()` will return `10`.
	 *
	 * A consequence of this is that, when applying a delta on the view state, one
	 * should use `adjustCenter`, `adjustRotation`, `adjustZoom` and `adjustResolution`
	 * rather than the corresponding setters. This will let view do its internal
	 * computations. Besides, the `adjust*` methods also take an `opt_anchor`
	 * argument which allows specifying an origin for the transformation.
	 *
	 * ### Interacting with the view
	 *
	 * View constraints are usually only applied when the view is *at rest*, meaning that
	 * no interaction or animation is ongoing. As such, if the user puts the view in a
	 * state that is not equivalent to a constrained one (e.g. rotating the view when
	 * the snap angle is 0), an animation will be triggered at the interaction end to
	 * put back the view to a stable state;
	 *
	 * @api
	 */
	var View = /** @class */function (_super) {
	    __extends(View, _super);
	    /**
	     * @param {ViewOptions=} opt_options View options.
	     */
	    function View(opt_options) {
	        var _this = _super.call(this) || this;
	        var options = (0, _obj.assign)({}, opt_options);
	        /**
	         * @private
	         * @type {Array<number>}
	         */
	        _this.hints_ = [0, 0];
	        /**
	         * @private
	         * @type {Array<Array<Animation>>}
	         */
	        _this.animations_ = [];
	        /**
	         * @private
	         * @type {number|undefined}
	         */
	        _this.updateAnimationKey_;
	        /**
	         * @private
	         * @const
	         * @type {import("./proj/Projection.js").default}
	         */
	        _this.projection_ = (0, _proj.createProjection)(options.projection, 'EPSG:3857');
	        /**
	         * @private
	         * @type {import("./coordinate.js").Coordinate|undefined}
	         */
	        _this.targetCenter_ = null;
	        /**
	         * @private
	         * @type {number|undefined}
	         */
	        _this.targetResolution_;
	        /**
	         * @private
	         * @type {number|undefined}
	         */
	        _this.targetRotation_;
	        if (options.center) {
	            options.center = (0, _proj.fromUserCoordinate)(options.center, _this.projection_);
	        }
	        if (options.extent) {
	            options.extent = (0, _proj.fromUserExtent)(options.extent, _this.projection_);
	        }
	        _this.applyOptions_(options);
	        return _this;
	    }
	    /**
	     * Set up the view with the given options.
	     * @param {ViewOptions} options View options.
	     */
	    View.prototype.applyOptions_ = function (options) {
	        /**
	         * @type {Object<string, *>}
	         */
	        var properties = {};
	        var resolutionConstraintInfo = createResolutionConstraint(options);
	        /**
	         * @private
	         * @type {number}
	         */
	        this.maxResolution_ = resolutionConstraintInfo.maxResolution;
	        /**
	         * @private
	         * @type {number}
	         */
	        this.minResolution_ = resolutionConstraintInfo.minResolution;
	        /**
	         * @private
	         * @type {number}
	         */
	        this.zoomFactor_ = resolutionConstraintInfo.zoomFactor;
	        /**
	         * @private
	         * @type {Array<number>|undefined}
	         */
	        this.resolutions_ = options.resolutions;
	        /**
	         * @private
	         * @type {number}
	         */
	        this.minZoom_ = resolutionConstraintInfo.minZoom;
	        var centerConstraint = createCenterConstraint(options);
	        var resolutionConstraint = resolutionConstraintInfo.constraint;
	        var rotationConstraint = createRotationConstraint(options);
	        /**
	         * @private
	         * @type {Constraints}
	         */
	        this.constraints_ = {
	            center: centerConstraint,
	            resolution: resolutionConstraint,
	            rotation: rotationConstraint
	        };
	        this.setRotation(options.rotation !== undefined ? options.rotation : 0);
	        this.setCenterInternal(options.center !== undefined ? options.center : null);
	        if (options.resolution !== undefined) {
	            this.setResolution(options.resolution);
	        } else if (options.zoom !== undefined) {
	            this.setZoom(options.zoom);
	        }
	        this.resolveConstraints(0);
	        this.setProperties(properties);
	        /**
	         * @private
	         * @type {ViewOptions}
	         */
	        this.options_ = options;
	    };
	    /**
	     * Get an updated version of the view options used to construct the view.  The
	     * current resolution (or zoom), center, and rotation are applied to any stored
	     * options.  The provided options can be used to apply new min/max zoom or
	     * resolution limits.
	     * @param {ViewOptions} newOptions New options to be applied.
	     * @return {ViewOptions} New options updated with the current view state.
	     */
	    View.prototype.getUpdatedOptions_ = function (newOptions) {
	        var options = (0, _obj.assign)({}, this.options_);
	        // preserve resolution (or zoom)
	        if (options.resolution !== undefined) {
	            options.resolution = this.getResolution();
	        } else {
	            options.zoom = this.getZoom();
	        }
	        // preserve center
	        options.center = this.getCenterInternal();
	        // preserve rotation
	        options.rotation = this.getRotation();
	        return (0, _obj.assign)({}, options, newOptions);
	    };
	    /**
	     * Animate the view.  The view's center, zoom (or resolution), and rotation
	     * can be animated for smooth transitions between view states.  For example,
	     * to animate the view to a new zoom level:
	     *
	     *     view.animate({zoom: view.getZoom() + 1});
	     *
	     * By default, the animation lasts one second and uses in-and-out easing.  You
	     * can customize this behavior by including `duration` (in milliseconds) and
	     * `easing` options (see {@link module:ol/easing}).
	     *
	     * To chain together multiple animations, call the method with multiple
	     * animation objects.  For example, to first zoom and then pan:
	     *
	     *     view.animate({zoom: 10}, {center: [0, 0]});
	     *
	     * If you provide a function as the last argument to the animate method, it
	     * will get called at the end of an animation series.  The callback will be
	     * called with `true` if the animation series completed on its own or `false`
	     * if it was cancelled.
	     *
	     * Animations are cancelled by user interactions (e.g. dragging the map) or by
	     * calling `view.setCenter()`, `view.setResolution()`, or `view.setRotation()`
	     * (or another method that calls one of these).
	     *
	     * @param {...(AnimationOptions|function(boolean): void)} var_args Animation
	     *     options.  Multiple animations can be run in series by passing multiple
	     *     options objects.  To run multiple animations in parallel, call the method
	     *     multiple times.  An optional callback can be provided as a final
	     *     argument.  The callback will be called with a boolean indicating whether
	     *     the animation completed without being cancelled.
	     * @api
	     */
	    View.prototype.animate = function (var_args) {
	        if (this.isDef() && !this.getAnimating()) {
	            this.resolveConstraints(0);
	        }
	        var args = new Array(arguments.length);
	        for (var i = 0; i < args.length; ++i) {
	            var options = arguments[i];
	            if (options.center) {
	                options = (0, _obj.assign)({}, options);
	                options.center = (0, _proj.fromUserCoordinate)(options.center, this.getProjection());
	            }
	            if (options.anchor) {
	                options = (0, _obj.assign)({}, options);
	                options.anchor = (0, _proj.fromUserCoordinate)(options.anchor, this.getProjection());
	            }
	            args[i] = options;
	        }
	        this.animateInternal.apply(this, args);
	    };
	    /**
	     * @param {...(AnimationOptions|function(boolean): void)} var_args Animation options.
	     */
	    View.prototype.animateInternal = function (var_args) {
	        var animationCount = arguments.length;
	        var callback;
	        if (animationCount > 1 && typeof arguments[animationCount - 1] === 'function') {
	            callback = arguments[animationCount - 1];
	            --animationCount;
	        }
	        if (!this.isDef()) {
	            // if view properties are not yet set, shortcut to the final state
	            var state = arguments[animationCount - 1];
	            if (state.center) {
	                this.setCenterInternal(state.center);
	            }
	            if (state.zoom !== undefined) {
	                this.setZoom(state.zoom);
	            }
	            if (state.rotation !== undefined) {
	                this.setRotation(state.rotation);
	            }
	            if (callback) {
	                animationCallback(callback, true);
	            }
	            return;
	        }
	        var start = Date.now();
	        var center = this.targetCenter_.slice();
	        var resolution = this.targetResolution_;
	        var rotation = this.targetRotation_;
	        var series = [];
	        for (var i = 0; i < animationCount; ++i) {
	            var options = /** @type {AnimationOptions} */arguments[i];
	            var animation = {
	                start: start,
	                complete: false,
	                anchor: options.anchor,
	                duration: options.duration !== undefined ? options.duration : 1000,
	                easing: options.easing || _easing.inAndOut,
	                callback: callback
	            };
	            if (options.center) {
	                animation.sourceCenter = center;
	                animation.targetCenter = options.center.slice();
	                center = animation.targetCenter;
	            }
	            if (options.zoom !== undefined) {
	                animation.sourceResolution = resolution;
	                animation.targetResolution = this.getResolutionForZoom(options.zoom);
	                resolution = animation.targetResolution;
	            } else if (options.resolution) {
	                animation.sourceResolution = resolution;
	                animation.targetResolution = options.resolution;
	                resolution = animation.targetResolution;
	            }
	            if (options.rotation !== undefined) {
	                animation.sourceRotation = rotation;
	                var delta = (0, _math.modulo)(options.rotation - rotation + Math.PI, 2 * Math.PI) - Math.PI;
	                animation.targetRotation = rotation + delta;
	                rotation = animation.targetRotation;
	            }
	            // check if animation is a no-op
	            if (isNoopAnimation(animation)) {
	                animation.complete = true;
	                // we still push it onto the series for callback handling
	            } else {
	                start += animation.duration;
	            }
	            series.push(animation);
	        }
	        this.animations_.push(series);
	        this.setHint(_ViewHint2.default.ANIMATING, 1);
	        this.updateAnimations_();
	    };
	    /**
	     * Determine if the view is being animated.
	     * @return {boolean} The view is being animated.
	     * @api
	     */
	    View.prototype.getAnimating = function () {
	        return this.hints_[_ViewHint2.default.ANIMATING] > 0;
	    };
	    /**
	     * Determine if the user is interacting with the view, such as panning or zooming.
	     * @return {boolean} The view is being interacted with.
	     * @api
	     */
	    View.prototype.getInteracting = function () {
	        return this.hints_[_ViewHint2.default.INTERACTING] > 0;
	    };
	    /**
	     * Cancel any ongoing animations.
	     * @api
	     */
	    View.prototype.cancelAnimations = function () {
	        this.setHint(_ViewHint2.default.ANIMATING, -this.hints_[_ViewHint2.default.ANIMATING]);
	        for (var i = 0, ii = this.animations_.length; i < ii; ++i) {
	            var series = this.animations_[i];
	            if (series[0].callback) {
	                animationCallback(series[0].callback, false);
	            }
	        }
	        this.animations_.length = 0;
	    };
	    /**
	     * Update all animations.
	     */
	    View.prototype.updateAnimations_ = function () {
	        if (this.updateAnimationKey_ !== undefined) {
	            cancelAnimationFrame(this.updateAnimationKey_);
	            this.updateAnimationKey_ = undefined;
	        }
	        if (!this.getAnimating()) {
	            return;
	        }
	        var now = Date.now();
	        var more = false;
	        for (var i = this.animations_.length - 1; i >= 0; --i) {
	            var series = this.animations_[i];
	            var seriesComplete = true;
	            for (var j = 0, jj = series.length; j < jj; ++j) {
	                var animation = series[j];
	                if (animation.complete) {
	                    continue;
	                }
	                var elapsed = now - animation.start;
	                var fraction = animation.duration > 0 ? elapsed / animation.duration : 1;
	                if (fraction >= 1) {
	                    animation.complete = true;
	                    fraction = 1;
	                } else {
	                    seriesComplete = false;
	                }
	                var progress = animation.easing(fraction);
	                if (animation.sourceCenter) {
	                    var x0 = animation.sourceCenter[0];
	                    var y0 = animation.sourceCenter[1];
	                    var x1 = animation.targetCenter[0];
	                    var y1 = animation.targetCenter[1];
	                    var x = x0 + progress * (x1 - x0);
	                    var y = y0 + progress * (y1 - y0);
	                    this.targetCenter_ = [x, y];
	                }
	                if (animation.sourceResolution && animation.targetResolution) {
	                    var resolution = progress === 1 ? animation.targetResolution : animation.sourceResolution + progress * (animation.targetResolution - animation.sourceResolution);
	                    if (animation.anchor) {
	                        var size = this.getSizeFromViewport_(this.getRotation());
	                        var constrainedResolution = this.constraints_.resolution(resolution, 0, size, true);
	                        this.targetCenter_ = this.calculateCenterZoom(constrainedResolution, animation.anchor);
	                    }
	                    this.targetResolution_ = resolution;
	                    this.applyTargetState_(true);
	                }
	                if (animation.sourceRotation !== undefined && animation.targetRotation !== undefined) {
	                    var rotation = progress === 1 ? (0, _math.modulo)(animation.targetRotation + Math.PI, 2 * Math.PI) - Math.PI : animation.sourceRotation + progress * (animation.targetRotation - animation.sourceRotation);
	                    if (animation.anchor) {
	                        var constrainedRotation = this.constraints_.rotation(rotation, true);
	                        this.targetCenter_ = this.calculateCenterRotate(constrainedRotation, animation.anchor);
	                    }
	                    this.targetRotation_ = rotation;
	                }
	                this.applyTargetState_(true);
	                more = true;
	                if (!animation.complete) {
	                    break;
	                }
	            }
	            if (seriesComplete) {
	                this.animations_[i] = null;
	                this.setHint(_ViewHint2.default.ANIMATING, -1);
	                var callback = series[0].callback;
	                if (callback) {
	                    animationCallback(callback, true);
	                }
	            }
	        }
	        // prune completed series
	        this.animations_ = this.animations_.filter(Boolean);
	        if (more && this.updateAnimationKey_ === undefined) {
	            this.updateAnimationKey_ = requestAnimationFrame(this.updateAnimations_.bind(this));
	        }
	    };
	    /**
	     * @param {number} rotation Target rotation.
	     * @param {import("./coordinate.js").Coordinate} anchor Rotation anchor.
	     * @return {import("./coordinate.js").Coordinate|undefined} Center for rotation and anchor.
	     */
	    View.prototype.calculateCenterRotate = function (rotation, anchor) {
	        var center;
	        var currentCenter = this.getCenterInternal();
	        if (currentCenter !== undefined) {
	            center = [currentCenter[0] - anchor[0], currentCenter[1] - anchor[1]];
	            (0, _coordinate.rotate)(center, rotation - this.getRotation());
	            (0, _coordinate.add)(center, anchor);
	        }
	        return center;
	    };
	    /**
	     * @param {number} resolution Target resolution.
	     * @param {import("./coordinate.js").Coordinate} anchor Zoom anchor.
	     * @return {import("./coordinate.js").Coordinate|undefined} Center for resolution and anchor.
	     */
	    View.prototype.calculateCenterZoom = function (resolution, anchor) {
	        var center;
	        var currentCenter = this.getCenterInternal();
	        var currentResolution = this.getResolution();
	        if (currentCenter !== undefined && currentResolution !== undefined) {
	            var x = anchor[0] - resolution * (anchor[0] - currentCenter[0]) / currentResolution;
	            var y = anchor[1] - resolution * (anchor[1] - currentCenter[1]) / currentResolution;
	            center = [x, y];
	        }
	        return center;
	    };
	    /**
	     * @private
	     * @param {number=} opt_rotation Take into account the rotation of the viewport when giving the size
	     * @return {import("./size.js").Size} Viewport size or `[100, 100]` when no viewport is found.
	     */
	    View.prototype.getSizeFromViewport_ = function (opt_rotation) {
	        var size = [100, 100];
	        var selector = '.ol-viewport[data-view="' + (0, _util.getUid)(this) + '"]';
	        var element = document.querySelector(selector);
	        if (element) {
	            var metrics = getComputedStyle(element);
	            size[0] = parseInt(metrics.width, 10);
	            size[1] = parseInt(metrics.height, 10);
	        }
	        if (opt_rotation) {
	            var w = size[0];
	            var h = size[1];
	            size[0] = Math.abs(w * Math.cos(opt_rotation)) + Math.abs(h * Math.sin(opt_rotation));
	            size[1] = Math.abs(w * Math.sin(opt_rotation)) + Math.abs(h * Math.cos(opt_rotation));
	        }
	        return size;
	    };
	    /**
	     * Get the view center.
	     * @return {import("./coordinate.js").Coordinate|undefined} The center of the view.
	     * @observable
	     * @api
	     */
	    View.prototype.getCenter = function () {
	        var center = this.getCenterInternal();
	        if (!center) {
	            return center;
	        }
	        return (0, _proj.toUserCoordinate)(center, this.getProjection());
	    };
	    /**
	     * Get the view center without transforming to user projection.
	     * @return {import("./coordinate.js").Coordinate|undefined} The center of the view.
	     */
	    View.prototype.getCenterInternal = function () {
	        return (/** @type {import("./coordinate.js").Coordinate|undefined} */this.get(_ViewProperty2.default.CENTER)
	        );
	    };
	    /**
	     * @return {Constraints} Constraints.
	     */
	    View.prototype.getConstraints = function () {
	        return this.constraints_;
	    };
	    /**
	     * @param {Array<number>=} opt_hints Destination array.
	     * @return {Array<number>} Hint.
	     */
	    View.prototype.getHints = function (opt_hints) {
	        if (opt_hints !== undefined) {
	            opt_hints[0] = this.hints_[0];
	            opt_hints[1] = this.hints_[1];
	            return opt_hints;
	        } else {
	            return this.hints_.slice();
	        }
	    };
	    /**
	     * Calculate the extent for the current view state and the passed size.
	     * The size is the pixel dimensions of the box into which the calculated extent
	     * should fit. In most cases you want to get the extent of the entire map,
	     * that is `map.getSize()`.
	     * @param {import("./size.js").Size=} opt_size Box pixel size. If not provided, the size of the
	     * first map that uses this view will be used.
	     * @return {import("./extent.js").Extent} Extent.
	     * @api
	     */
	    View.prototype.calculateExtent = function (opt_size) {
	        var extent = this.calculateExtentInternal(opt_size);
	        return (0, _proj.toUserExtent)(extent, this.getProjection());
	    };
	    /**
	     * @param {import("./size.js").Size=} opt_size Box pixel size. If not provided, the size of the
	     * first map that uses this view will be used.
	     * @return {import("./extent.js").Extent} Extent.
	     */
	    View.prototype.calculateExtentInternal = function (opt_size) {
	        var size = opt_size || this.getSizeFromViewport_();
	        var center = /** @type {!import("./coordinate.js").Coordinate} */this.getCenterInternal();
	        (0, _asserts.assert)(center, 1); // The view center is not defined
	        var resolution = /** @type {!number} */this.getResolution();
	        (0, _asserts.assert)(resolution !== undefined, 2); // The view resolution is not defined
	        var rotation = /** @type {!number} */this.getRotation();
	        (0, _asserts.assert)(rotation !== undefined, 3); // The view rotation is not defined
	        return (0, _extent.getForViewAndSize)(center, resolution, rotation, size);
	    };
	    /**
	     * Get the maximum resolution of the view.
	     * @return {number} The maximum resolution of the view.
	     * @api
	     */
	    View.prototype.getMaxResolution = function () {
	        return this.maxResolution_;
	    };
	    /**
	     * Get the minimum resolution of the view.
	     * @return {number} The minimum resolution of the view.
	     * @api
	     */
	    View.prototype.getMinResolution = function () {
	        return this.minResolution_;
	    };
	    /**
	     * Get the maximum zoom level for the view.
	     * @return {number} The maximum zoom level.
	     * @api
	     */
	    View.prototype.getMaxZoom = function () {
	        return (/** @type {number} */this.getZoomForResolution(this.minResolution_)
	        );
	    };
	    /**
	     * Set a new maximum zoom level for the view.
	     * @param {number} zoom The maximum zoom level.
	     * @api
	     */
	    View.prototype.setMaxZoom = function (zoom) {
	        this.applyOptions_(this.getUpdatedOptions_({ maxZoom: zoom }));
	    };
	    /**
	     * Get the minimum zoom level for the view.
	     * @return {number} The minimum zoom level.
	     * @api
	     */
	    View.prototype.getMinZoom = function () {
	        return (/** @type {number} */this.getZoomForResolution(this.maxResolution_)
	        );
	    };
	    /**
	     * Set a new minimum zoom level for the view.
	     * @param {number} zoom The minimum zoom level.
	     * @api
	     */
	    View.prototype.setMinZoom = function (zoom) {
	        this.applyOptions_(this.getUpdatedOptions_({ minZoom: zoom }));
	    };
	    /**
	     * Set whether the view shoud allow intermediary zoom levels.
	     * @param {boolean} enabled Whether the resolution is constrained.
	     * @api
	     */
	    View.prototype.setConstrainResolution = function (enabled) {
	        this.applyOptions_(this.getUpdatedOptions_({ constrainResolution: enabled }));
	    };
	    /**
	     * Get the view projection.
	     * @return {import("./proj/Projection.js").default} The projection of the view.
	     * @api
	     */
	    View.prototype.getProjection = function () {
	        return this.projection_;
	    };
	    /**
	     * Get the view resolution.
	     * @return {number|undefined} The resolution of the view.
	     * @observable
	     * @api
	     */
	    View.prototype.getResolution = function () {
	        return (/** @type {number|undefined} */this.get(_ViewProperty2.default.RESOLUTION)
	        );
	    };
	    /**
	     * Get the resolutions for the view. This returns the array of resolutions
	     * passed to the constructor of the View, or undefined if none were given.
	     * @return {Array<number>|undefined} The resolutions of the view.
	     * @api
	     */
	    View.prototype.getResolutions = function () {
	        return this.resolutions_;
	    };
	    /**
	     * Get the resolution for a provided extent (in map units) and size (in pixels).
	     * @param {import("./extent.js").Extent} extent Extent.
	     * @param {import("./size.js").Size=} opt_size Box pixel size.
	     * @return {number} The resolution at which the provided extent will render at
	     *     the given size.
	     * @api
	     */
	    View.prototype.getResolutionForExtent = function (extent, opt_size) {
	        return this.getResolutionForExtentInternal((0, _proj.fromUserExtent)(extent, this.getProjection()), opt_size);
	    };
	    /**
	     * Get the resolution for a provided extent (in map units) and size (in pixels).
	     * @param {import("./extent.js").Extent} extent Extent.
	     * @param {import("./size.js").Size=} opt_size Box pixel size.
	     * @return {number} The resolution at which the provided extent will render at
	     *     the given size.
	     */
	    View.prototype.getResolutionForExtentInternal = function (extent, opt_size) {
	        var size = opt_size || this.getSizeFromViewport_();
	        var xResolution = (0, _extent.getWidth)(extent) / size[0];
	        var yResolution = (0, _extent.getHeight)(extent) / size[1];
	        return Math.max(xResolution, yResolution);
	    };
	    /**
	     * Return a function that returns a value between 0 and 1 for a
	     * resolution. Exponential scaling is assumed.
	     * @param {number=} opt_power Power.
	     * @return {function(number): number} Resolution for value function.
	     */
	    View.prototype.getResolutionForValueFunction = function (opt_power) {
	        var power = opt_power || 2;
	        var maxResolution = this.maxResolution_;
	        var minResolution = this.minResolution_;
	        var max = Math.log(maxResolution / minResolution) / Math.log(power);
	        return (
	            /**
	             * @param {number} value Value.
	             * @return {number} Resolution.
	             */
	            function (value) {
	                var resolution = maxResolution / Math.pow(power, value * max);
	                return resolution;
	            }
	        );
	    };
	    /**
	     * Get the view rotation.
	     * @return {number} The rotation of the view in radians.
	     * @observable
	     * @api
	     */
	    View.prototype.getRotation = function () {
	        return (/** @type {number} */this.get(_ViewProperty2.default.ROTATION)
	        );
	    };
	    /**
	     * Return a function that returns a resolution for a value between
	     * 0 and 1. Exponential scaling is assumed.
	     * @param {number=} opt_power Power.
	     * @return {function(number): number} Value for resolution function.
	     */
	    View.prototype.getValueForResolutionFunction = function (opt_power) {
	        var power = opt_power || 2;
	        var maxResolution = this.maxResolution_;
	        var minResolution = this.minResolution_;
	        var max = Math.log(maxResolution / minResolution) / Math.log(power);
	        return (
	            /**
	             * @param {number} resolution Resolution.
	             * @return {number} Value.
	             */
	            function (resolution) {
	                var value = Math.log(maxResolution / resolution) / Math.log(power) / max;
	                return value;
	            }
	        );
	    };
	    /**
	     * @return {State} View state.
	     */
	    View.prototype.getState = function () {
	        var center = /** @type {import("./coordinate.js").Coordinate} */this.getCenterInternal();
	        var projection = this.getProjection();
	        var resolution = /** @type {number} */this.getResolution();
	        var rotation = this.getRotation();
	        return {
	            center: center.slice(0),
	            projection: projection !== undefined ? projection : null,
	            resolution: resolution,
	            rotation: rotation,
	            zoom: this.getZoom()
	        };
	    };
	    /**
	     * Get the current zoom level. This method may return non-integer zoom levels
	     * if the view does not constrain the resolution, or if an interaction or
	     * animation is underway.
	     * @return {number|undefined} Zoom.
	     * @api
	     */
	    View.prototype.getZoom = function () {
	        var zoom;
	        var resolution = this.getResolution();
	        if (resolution !== undefined) {
	            zoom = this.getZoomForResolution(resolution);
	        }
	        return zoom;
	    };
	    /**
	     * Get the zoom level for a resolution.
	     * @param {number} resolution The resolution.
	     * @return {number|undefined} The zoom level for the provided resolution.
	     * @api
	     */
	    View.prototype.getZoomForResolution = function (resolution) {
	        var offset = this.minZoom_ || 0;
	        var max, zoomFactor;
	        if (this.resolutions_) {
	            var nearest = (0, _array.linearFindNearest)(this.resolutions_, resolution, 1);
	            offset = nearest;
	            max = this.resolutions_[nearest];
	            if (nearest == this.resolutions_.length - 1) {
	                zoomFactor = 2;
	            } else {
	                zoomFactor = max / this.resolutions_[nearest + 1];
	            }
	        } else {
	            max = this.maxResolution_;
	            zoomFactor = this.zoomFactor_;
	        }
	        return offset + Math.log(max / resolution) / Math.log(zoomFactor);
	    };
	    /**
	     * Get the resolution for a zoom level.
	     * @param {number} zoom Zoom level.
	     * @return {number} The view resolution for the provided zoom level.
	     * @api
	     */
	    View.prototype.getResolutionForZoom = function (zoom) {
	        if (this.resolutions_) {
	            if (this.resolutions_.length <= 1) {
	                return 0;
	            }
	            var baseLevel = (0, _math.clamp)(Math.floor(zoom), 0, this.resolutions_.length - 2);
	            var zoomFactor = this.resolutions_[baseLevel] / this.resolutions_[baseLevel + 1];
	            return this.resolutions_[baseLevel] / Math.pow(zoomFactor, (0, _math.clamp)(zoom - baseLevel, 0, 1));
	        } else {
	            return this.maxResolution_ / Math.pow(this.zoomFactor_, zoom - this.minZoom_);
	        }
	    };
	    /**
	     * Fit the given geometry or extent based on the given map size and border.
	     * The size is pixel dimensions of the box to fit the extent into.
	     * In most cases you will want to use the map size, that is `map.getSize()`.
	     * Takes care of the map angle.
	     * @param {import("./geom/SimpleGeometry.js").default|import("./extent.js").Extent} geometryOrExtent The geometry or
	     *     extent to fit the view to.
	     * @param {FitOptions=} opt_options Options.
	     * @api
	     */
	    View.prototype.fit = function (geometryOrExtent, opt_options) {
	        var options = (0, _obj.assign)({ size: this.getSizeFromViewport_() }, opt_options || {});
	        /** @type {import("./geom/SimpleGeometry.js").default} */
	        var geometry;
	        (0, _asserts.assert)(Array.isArray(geometryOrExtent) || typeof /** @type {?} */geometryOrExtent.getSimplifiedGeometry === 'function', 24); // Invalid extent or geometry provided as `geometry`
	        if (Array.isArray(geometryOrExtent)) {
	            (0, _asserts.assert)(!(0, _extent.isEmpty)(geometryOrExtent), 25); // Cannot fit empty extent provided as `geometry`
	            var extent = (0, _proj.fromUserExtent)(geometryOrExtent, this.getProjection());
	            geometry = (0, _Polygon.fromExtent)(extent);
	        } else if (geometryOrExtent.getType() === _GeometryType2.default.CIRCLE) {
	            var extent = (0, _proj.fromUserExtent)(geometryOrExtent.getExtent(), this.getProjection());
	            geometry = (0, _Polygon.fromExtent)(extent);
	            geometry.rotate(this.getRotation(), (0, _extent.getCenter)(extent));
	        } else {
	            var userProjection = (0, _proj.getUserProjection)();
	            if (userProjection) {
	                geometry = /** @type {import("./geom/SimpleGeometry.js").default} */geometry.clone().transform(userProjection, this.getProjection());
	            } else {
	                geometry = geometryOrExtent;
	            }
	        }
	        this.fitInternal(geometry, options);
	    };
	    /**
	     * @param {import("./geom/SimpleGeometry.js").default} geometry The geometry.
	     * @param {FitOptions=} opt_options Options.
	     */
	    View.prototype.fitInternal = function (geometry, opt_options) {
	        var options = opt_options || {};
	        var size = options.size;
	        if (!size) {
	            size = this.getSizeFromViewport_();
	        }
	        var padding = options.padding !== undefined ? options.padding : [0, 0, 0, 0];
	        var nearest = options.nearest !== undefined ? options.nearest : false;
	        var minResolution;
	        if (options.minResolution !== undefined) {
	            minResolution = options.minResolution;
	        } else if (options.maxZoom !== undefined) {
	            minResolution = this.getResolutionForZoom(options.maxZoom);
	        } else {
	            minResolution = 0;
	        }
	        var coords = geometry.getFlatCoordinates();
	        // calculate rotated extent
	        var rotation = this.getRotation();
	        var cosAngle = Math.cos(-rotation);
	        var sinAngle = Math.sin(-rotation);
	        var minRotX = +Infinity;
	        var minRotY = +Infinity;
	        var maxRotX = -Infinity;
	        var maxRotY = -Infinity;
	        var stride = geometry.getStride();
	        for (var i = 0, ii = coords.length; i < ii; i += stride) {
	            var rotX = coords[i] * cosAngle - coords[i + 1] * sinAngle;
	            var rotY = coords[i] * sinAngle + coords[i + 1] * cosAngle;
	            minRotX = Math.min(minRotX, rotX);
	            minRotY = Math.min(minRotY, rotY);
	            maxRotX = Math.max(maxRotX, rotX);
	            maxRotY = Math.max(maxRotY, rotY);
	        }
	        // calculate resolution
	        var resolution = this.getResolutionForExtentInternal([minRotX, minRotY, maxRotX, maxRotY], [size[0] - padding[1] - padding[3], size[1] - padding[0] - padding[2]]);
	        resolution = isNaN(resolution) ? minResolution : Math.max(resolution, minResolution);
	        resolution = this.getConstrainedResolution(resolution, nearest ? 0 : 1);
	        // calculate center
	        sinAngle = -sinAngle; // go back to original rotation
	        var centerRotX = (minRotX + maxRotX) / 2;
	        var centerRotY = (minRotY + maxRotY) / 2;
	        centerRotX += (padding[1] - padding[3]) / 2 * resolution;
	        centerRotY += (padding[0] - padding[2]) / 2 * resolution;
	        var centerX = centerRotX * cosAngle - centerRotY * sinAngle;
	        var centerY = centerRotY * cosAngle + centerRotX * sinAngle;
	        var center = [centerX, centerY];
	        var callback = options.callback ? options.callback : _functions.VOID;
	        if (options.duration !== undefined) {
	            this.animateInternal({
	                resolution: resolution,
	                center: this.getConstrainedCenter(center, resolution),
	                duration: options.duration,
	                easing: options.easing
	            }, callback);
	        } else {
	            this.targetResolution_ = resolution;
	            this.targetCenter_ = center;
	            this.applyTargetState_(false, true);
	            animationCallback(callback, true);
	        }
	    };
	    /**
	     * Center on coordinate and view position.
	     * @param {import("./coordinate.js").Coordinate} coordinate Coordinate.
	     * @param {import("./size.js").Size} size Box pixel size.
	     * @param {import("./pixel.js").Pixel} position Position on the view to center on.
	     * @api
	     */
	    View.prototype.centerOn = function (coordinate, size, position) {
	        this.centerOnInternal((0, _proj.fromUserCoordinate)(coordinate, this.getProjection()), size, position);
	    };
	    /**
	     * @param {import("./coordinate.js").Coordinate} coordinate Coordinate.
	     * @param {import("./size.js").Size} size Box pixel size.
	     * @param {import("./pixel.js").Pixel} position Position on the view to center on.
	     */
	    View.prototype.centerOnInternal = function (coordinate, size, position) {
	        // calculate rotated position
	        var rotation = this.getRotation();
	        var cosAngle = Math.cos(-rotation);
	        var sinAngle = Math.sin(-rotation);
	        var rotX = coordinate[0] * cosAngle - coordinate[1] * sinAngle;
	        var rotY = coordinate[1] * cosAngle + coordinate[0] * sinAngle;
	        var resolution = this.getResolution();
	        rotX += (size[0] / 2 - position[0]) * resolution;
	        rotY += (position[1] - size[1] / 2) * resolution;
	        // go back to original angle
	        sinAngle = -sinAngle; // go back to original rotation
	        var centerX = rotX * cosAngle - rotY * sinAngle;
	        var centerY = rotY * cosAngle + rotX * sinAngle;
	        this.setCenterInternal([centerX, centerY]);
	    };
	    /**
	     * @return {boolean} Is defined.
	     */
	    View.prototype.isDef = function () {
	        return !!this.getCenterInternal() && this.getResolution() !== undefined;
	    };
	    /**
	     * Adds relative coordinates to the center of the view. Any extent constraint will apply.
	     * @param {import("./coordinate.js").Coordinate} deltaCoordinates Relative value to add.
	     * @api
	     */
	    View.prototype.adjustCenter = function (deltaCoordinates) {
	        var center = (0, _proj.toUserCoordinate)(this.targetCenter_, this.getProjection());
	        this.setCenter([center[0] + deltaCoordinates[0], center[1] + deltaCoordinates[1]]);
	    };
	    /**
	     * Adds relative coordinates to the center of the view. Any extent constraint will apply.
	     * @param {import("./coordinate.js").Coordinate} deltaCoordinates Relative value to add.
	     */
	    View.prototype.adjustCenterInternal = function (deltaCoordinates) {
	        var center = this.targetCenter_;
	        this.setCenterInternal([center[0] + deltaCoordinates[0], center[1] + deltaCoordinates[1]]);
	    };
	    /**
	     * Multiply the view resolution by a ratio, optionally using an anchor. Any resolution
	     * constraint will apply.
	     * @param {number} ratio The ratio to apply on the view resolution.
	     * @param {import("./coordinate.js").Coordinate=} opt_anchor The origin of the transformation.
	     * @api
	     */
	    View.prototype.adjustResolution = function (ratio, opt_anchor) {
	        var anchor = opt_anchor && (0, _proj.fromUserCoordinate)(opt_anchor, this.getProjection());
	        this.adjustResolutionInternal(ratio, anchor);
	    };
	    /**
	     * Multiply the view resolution by a ratio, optionally using an anchor. Any resolution
	     * constraint will apply.
	     * @param {number} ratio The ratio to apply on the view resolution.
	     * @param {import("./coordinate.js").Coordinate=} opt_anchor The origin of the transformation.
	     */
	    View.prototype.adjustResolutionInternal = function (ratio, opt_anchor) {
	        var isMoving = this.getAnimating() || this.getInteracting();
	        var size = this.getSizeFromViewport_(this.getRotation());
	        var newResolution = this.constraints_.resolution(this.targetResolution_ * ratio, 0, size, isMoving);
	        if (opt_anchor !== undefined) {
	            this.targetCenter_ = this.calculateCenterZoom(newResolution, opt_anchor);
	        }
	        this.targetResolution_ *= ratio;
	        this.applyTargetState_();
	    };
	    /**
	     * Adds a value to the view zoom level, optionally using an anchor. Any resolution
	     * constraint will apply.
	     * @param {number} delta Relative value to add to the zoom level.
	     * @param {import("./coordinate.js").Coordinate=} opt_anchor The origin of the transformation.
	     * @api
	     */
	    View.prototype.adjustZoom = function (delta, opt_anchor) {
	        this.adjustResolution(Math.pow(this.zoomFactor_, -delta), opt_anchor);
	    };
	    /**
	     * Adds a value to the view rotation, optionally using an anchor. Any rotation
	     * constraint will apply.
	     * @param {number} delta Relative value to add to the zoom rotation, in radians.
	     * @param {import("./coordinate.js").Coordinate=} opt_anchor The rotation center.
	     * @api
	     */
	    View.prototype.adjustRotation = function (delta, opt_anchor) {
	        if (opt_anchor) {
	            opt_anchor = (0, _proj.fromUserCoordinate)(opt_anchor, this.getProjection());
	        }
	        this.adjustRotationInternal(delta, opt_anchor);
	    };
	    /**
	     * @param {number} delta Relative value to add to the zoom rotation, in radians.
	     * @param {import("./coordinate.js").Coordinate=} opt_anchor The rotation center.
	     */
	    View.prototype.adjustRotationInternal = function (delta, opt_anchor) {
	        var isMoving = this.getAnimating() || this.getInteracting();
	        var newRotation = this.constraints_.rotation(this.targetRotation_ + delta, isMoving);
	        if (opt_anchor !== undefined) {
	            this.targetCenter_ = this.calculateCenterRotate(newRotation, opt_anchor);
	        }
	        this.targetRotation_ += delta;
	        this.applyTargetState_();
	    };
	    /**
	     * Set the center of the current view. Any extent constraint will apply.
	     * @param {import("./coordinate.js").Coordinate|undefined} center The center of the view.
	     * @observable
	     * @api
	     */
	    View.prototype.setCenter = function (center) {
	        this.setCenterInternal((0, _proj.fromUserCoordinate)(center, this.getProjection()));
	    };
	    /**
	     * Set the center using the view projection (not the user projection).
	     * @param {import("./coordinate.js").Coordinate|undefined} center The center of the view.
	     */
	    View.prototype.setCenterInternal = function (center) {
	        this.targetCenter_ = center;
	        this.applyTargetState_();
	    };
	    /**
	     * @param {ViewHint} hint Hint.
	     * @param {number} delta Delta.
	     * @return {number} New value.
	     */
	    View.prototype.setHint = function (hint, delta) {
	        this.hints_[hint] += delta;
	        this.changed();
	        return this.hints_[hint];
	    };
	    /**
	     * Set the resolution for this view. Any resolution constraint will apply.
	     * @param {number|undefined} resolution The resolution of the view.
	     * @observable
	     * @api
	     */
	    View.prototype.setResolution = function (resolution) {
	        this.targetResolution_ = resolution;
	        this.applyTargetState_();
	    };
	    /**
	     * Set the rotation for this view. Any rotation constraint will apply.
	     * @param {number} rotation The rotation of the view in radians.
	     * @observable
	     * @api
	     */
	    View.prototype.setRotation = function (rotation) {
	        this.targetRotation_ = rotation;
	        this.applyTargetState_();
	    };
	    /**
	     * Zoom to a specific zoom level. Any resolution constrain will apply.
	     * @param {number} zoom Zoom level.
	     * @api
	     */
	    View.prototype.setZoom = function (zoom) {
	        this.setResolution(this.getResolutionForZoom(zoom));
	    };
	    /**
	     * Recompute rotation/resolution/center based on target values.
	     * Note: we have to compute rotation first, then resolution and center considering that
	     * parameters can influence one another in case a view extent constraint is present.
	     * @param {boolean=} opt_doNotCancelAnims Do not cancel animations.
	     * @param {boolean=} opt_forceMoving Apply constraints as if the view is moving.
	     * @private
	     */
	    View.prototype.applyTargetState_ = function (opt_doNotCancelAnims, opt_forceMoving) {
	        var isMoving = this.getAnimating() || this.getInteracting() || opt_forceMoving;
	        // compute rotation
	        var newRotation = this.constraints_.rotation(this.targetRotation_, isMoving);
	        var size = this.getSizeFromViewport_(newRotation);
	        var newResolution = this.constraints_.resolution(this.targetResolution_, 0, size, isMoving);
	        var newCenter = this.constraints_.center(this.targetCenter_, newResolution, size, isMoving);
	        if (this.get(_ViewProperty2.default.ROTATION) !== newRotation) {
	            this.set(_ViewProperty2.default.ROTATION, newRotation);
	        }
	        if (this.get(_ViewProperty2.default.RESOLUTION) !== newResolution) {
	            this.set(_ViewProperty2.default.RESOLUTION, newResolution);
	        }
	        if (!this.get(_ViewProperty2.default.CENTER) || !(0, _coordinate.equals)(this.get(_ViewProperty2.default.CENTER), newCenter)) {
	            this.set(_ViewProperty2.default.CENTER, newCenter);
	        }
	        if (this.getAnimating() && !opt_doNotCancelAnims) {
	            this.cancelAnimations();
	        }
	    };
	    /**
	     * If any constraints need to be applied, an animation will be triggered.
	     * This is typically done on interaction end.
	     * Note: calling this with a duration of 0 will apply the constrained values straight away,
	     * without animation.
	     * @param {number=} opt_duration The animation duration in ms.
	     * @param {number=} opt_resolutionDirection Which direction to zoom.
	     * @param {import("./coordinate.js").Coordinate=} opt_anchor The origin of the transformation.
	     */
	    View.prototype.resolveConstraints = function (opt_duration, opt_resolutionDirection, opt_anchor) {
	        var duration = opt_duration !== undefined ? opt_duration : 200;
	        var direction = opt_resolutionDirection || 0;
	        var newRotation = this.constraints_.rotation(this.targetRotation_);
	        var size = this.getSizeFromViewport_(newRotation);
	        var newResolution = this.constraints_.resolution(this.targetResolution_, direction, size);
	        var newCenter = this.constraints_.center(this.targetCenter_, newResolution, size);
	        if (duration === 0) {
	            this.targetResolution_ = newResolution;
	            this.targetRotation_ = newRotation;
	            this.targetCenter_ = newCenter;
	            this.applyTargetState_();
	            return;
	        }
	        if (this.getResolution() !== newResolution || this.getRotation() !== newRotation || !this.getCenterInternal() || !(0, _coordinate.equals)(this.getCenterInternal(), newCenter)) {
	            if (this.getAnimating()) {
	                this.cancelAnimations();
	            }
	            this.animateInternal({
	                rotation: newRotation,
	                center: newCenter,
	                resolution: newResolution,
	                duration: duration,
	                easing: _easing.easeOut,
	                anchor: opt_anchor
	            });
	        }
	    };
	    /**
	     * Notify the View that an interaction has started.
	     * The view state will be resolved to a stable one if needed
	     * (depending on its constraints).
	     * @api
	     */
	    View.prototype.beginInteraction = function () {
	        this.resolveConstraints(0);
	        this.setHint(_ViewHint2.default.INTERACTING, 1);
	    };
	    /**
	     * Notify the View that an interaction has ended. The view state will be resolved
	     * to a stable one if needed (depending on its constraints).
	     * @param {number=} opt_duration Animation duration in ms.
	     * @param {number=} opt_resolutionDirection Which direction to zoom.
	     * @param {import("./coordinate.js").Coordinate=} opt_anchor The origin of the transformation.
	     * @api
	     */
	    View.prototype.endInteraction = function (opt_duration, opt_resolutionDirection, opt_anchor) {
	        var anchor = opt_anchor && (0, _proj.fromUserCoordinate)(opt_anchor, this.getProjection());
	        this.endInteractionInternal(opt_duration, opt_resolutionDirection, anchor);
	    };
	    /**
	     * Notify the View that an interaction has ended. The view state will be resolved
	     * to a stable one if needed (depending on its constraints).
	     * @param {number=} opt_duration Animation duration in ms.
	     * @param {number=} opt_resolutionDirection Which direction to zoom.
	     * @param {import("./coordinate.js").Coordinate=} opt_anchor The origin of the transformation.
	     */
	    View.prototype.endInteractionInternal = function (opt_duration, opt_resolutionDirection, opt_anchor) {
	        this.setHint(_ViewHint2.default.INTERACTING, -1);
	        this.resolveConstraints(opt_duration, opt_resolutionDirection, opt_anchor);
	    };
	    /**
	     * Get a valid position for the view center according to the current constraints.
	     * @param {import("./coordinate.js").Coordinate|undefined} targetCenter Target center position.
	     * @param {number=} opt_targetResolution Target resolution. If not supplied, the current one will be used.
	     * This is useful to guess a valid center position at a different zoom level.
	     * @return {import("./coordinate.js").Coordinate|undefined} Valid center position.
	     */
	    View.prototype.getConstrainedCenter = function (targetCenter, opt_targetResolution) {
	        var size = this.getSizeFromViewport_(this.getRotation());
	        return this.constraints_.center(targetCenter, opt_targetResolution || this.getResolution(), size);
	    };
	    /**
	     * Get a valid zoom level according to the current view constraints.
	     * @param {number|undefined} targetZoom Target zoom.
	     * @param {number=} [opt_direction=0] Indicate which resolution should be used
	     * by a renderer if the view resolution does not match any resolution of the tile source.
	     * If 0, the nearest resolution will be used. If 1, the nearest lower resolution
	     * will be used. If -1, the nearest higher resolution will be used.
	     * @return {number|undefined} Valid zoom level.
	     */
	    View.prototype.getConstrainedZoom = function (targetZoom, opt_direction) {
	        var targetRes = this.getResolutionForZoom(targetZoom);
	        return this.getZoomForResolution(this.getConstrainedResolution(targetRes, opt_direction));
	    };
	    /**
	     * Get a valid resolution according to the current view constraints.
	     * @param {number|undefined} targetResolution Target resolution.
	     * @param {number=} [opt_direction=0] Indicate which resolution should be used
	     * by a renderer if the view resolution does not match any resolution of the tile source.
	     * If 0, the nearest resolution will be used. If 1, the nearest lower resolution
	     * will be used. If -1, the nearest higher resolution will be used.
	     * @return {number|undefined} Valid resolution.
	     */
	    View.prototype.getConstrainedResolution = function (targetResolution, opt_direction) {
	        var direction = opt_direction || 0;
	        var size = this.getSizeFromViewport_(this.getRotation());
	        return this.constraints_.resolution(targetResolution, direction, size);
	    };
	    return View;
	}(_Object2.default);
	/**
	 * @param {Function} callback Callback.
	 * @param {*} returnValue Return value.
	 */
	function animationCallback(callback, returnValue) {
	    setTimeout(function () {
	        callback(returnValue);
	    }, 0);
	}
	/**
	 * @param {ViewOptions} options View options.
	 * @return {import("./centerconstraint.js").Type} The constraint.
	 */
	function createCenterConstraint(options) {
	    if (options.extent !== undefined) {
	        var smooth = options.smoothExtentConstraint !== undefined ? options.smoothExtentConstraint : true;
	        return (0, _centerconstraint.createExtent)(options.extent, options.constrainOnlyCenter, smooth);
	    }
	    var projection = (0, _proj.createProjection)(options.projection, 'EPSG:3857');
	    if (options.multiWorld !== true && projection.isGlobal()) {
	        var extent = projection.getExtent().slice();
	        extent[0] = -Infinity;
	        extent[2] = Infinity;
	        return (0, _centerconstraint.createExtent)(extent, false, false);
	    }
	    return _centerconstraint.none;
	}
	/**
	 * @param {ViewOptions} options View options.
	 * @return {{constraint: import("./resolutionconstraint.js").Type, maxResolution: number,
	 *     minResolution: number, minZoom: number, zoomFactor: number}} The constraint.
	 */
	function createResolutionConstraint(options) {
	    var resolutionConstraint;
	    var maxResolution;
	    var minResolution;
	    // TODO: move these to be ol constants
	    // see https://github.com/openlayers/openlayers/issues/2076
	    var defaultMaxZoom = 28;
	    var defaultZoomFactor = 2;
	    var minZoom = options.minZoom !== undefined ? options.minZoom : DEFAULT_MIN_ZOOM;
	    var maxZoom = options.maxZoom !== undefined ? options.maxZoom : defaultMaxZoom;
	    var zoomFactor = options.zoomFactor !== undefined ? options.zoomFactor : defaultZoomFactor;
	    var multiWorld = options.multiWorld !== undefined ? options.multiWorld : false;
	    var smooth = options.smoothResolutionConstraint !== undefined ? options.smoothResolutionConstraint : true;
	    var projection = (0, _proj.createProjection)(options.projection, 'EPSG:3857');
	    var projExtent = projection.getExtent();
	    var constrainOnlyCenter = options.constrainOnlyCenter;
	    var extent = options.extent;
	    if (!multiWorld && !extent && projection.isGlobal()) {
	        constrainOnlyCenter = false;
	        extent = projExtent;
	    }
	    if (options.resolutions !== undefined) {
	        var resolutions = options.resolutions;
	        maxResolution = resolutions[minZoom];
	        minResolution = resolutions[maxZoom] !== undefined ? resolutions[maxZoom] : resolutions[resolutions.length - 1];
	        if (options.constrainResolution) {
	            resolutionConstraint = (0, _resolutionconstraint.createSnapToResolutions)(resolutions, smooth, !constrainOnlyCenter && extent);
	        } else {
	            resolutionConstraint = (0, _resolutionconstraint.createMinMaxResolution)(maxResolution, minResolution, smooth, !constrainOnlyCenter && extent);
	        }
	    } else {
	        // calculate the default min and max resolution
	        var size = !projExtent ?
	        // use an extent that can fit the whole world if need be
	        360 * _proj.METERS_PER_UNIT[_Units2.default.DEGREES] / projection.getMetersPerUnit() : Math.max((0, _extent.getWidth)(projExtent), (0, _extent.getHeight)(projExtent));
	        var defaultMaxResolution = size / _common.DEFAULT_TILE_SIZE / Math.pow(defaultZoomFactor, DEFAULT_MIN_ZOOM);
	        var defaultMinResolution = defaultMaxResolution / Math.pow(defaultZoomFactor, defaultMaxZoom - DEFAULT_MIN_ZOOM);
	        // user provided maxResolution takes precedence
	        maxResolution = options.maxResolution;
	        if (maxResolution !== undefined) {
	            minZoom = 0;
	        } else {
	            maxResolution = defaultMaxResolution / Math.pow(zoomFactor, minZoom);
	        }
	        // user provided minResolution takes precedence
	        minResolution = options.minResolution;
	        if (minResolution === undefined) {
	            if (options.maxZoom !== undefined) {
	                if (options.maxResolution !== undefined) {
	                    minResolution = maxResolution / Math.pow(zoomFactor, maxZoom);
	                } else {
	                    minResolution = defaultMaxResolution / Math.pow(zoomFactor, maxZoom);
	                }
	            } else {
	                minResolution = defaultMinResolution;
	            }
	        }
	        // given discrete zoom levels, minResolution may be different than provided
	        maxZoom = minZoom + Math.floor(Math.log(maxResolution / minResolution) / Math.log(zoomFactor));
	        minResolution = maxResolution / Math.pow(zoomFactor, maxZoom - minZoom);
	        if (options.constrainResolution) {
	            resolutionConstraint = (0, _resolutionconstraint.createSnapToPower)(zoomFactor, maxResolution, minResolution, smooth, !constrainOnlyCenter && extent);
	        } else {
	            resolutionConstraint = (0, _resolutionconstraint.createMinMaxResolution)(maxResolution, minResolution, smooth, !constrainOnlyCenter && extent);
	        }
	    }
	    return { constraint: resolutionConstraint, maxResolution: maxResolution,
	        minResolution: minResolution, minZoom: minZoom, zoomFactor: zoomFactor };
	}
	/**
	 * @param {ViewOptions} options View options.
	 * @return {import("./rotationconstraint.js").Type} Rotation constraint.
	 */
	function createRotationConstraint(options) {
	    var enableRotation = options.enableRotation !== undefined ? options.enableRotation : true;
	    if (enableRotation) {
	        var constrainRotation = options.constrainRotation;
	        if (constrainRotation === undefined || constrainRotation === true) {
	            return (0, _rotationconstraint.createSnapToZero)();
	        } else if (constrainRotation === false) {
	            return _rotationconstraint.none;
	        } else if (typeof constrainRotation === 'number') {
	            return (0, _rotationconstraint.createSnapToN)(constrainRotation);
	        } else {
	            return _rotationconstraint.none;
	        }
	    } else {
	        return _rotationconstraint.disable;
	    }
	}
	/**
	 * Determine if an animation involves no view change.
	 * @param {Animation} animation The animation.
	 * @return {boolean} The animation involves no view change.
	 */
	function isNoopAnimation(animation) {
	    if (animation.sourceCenter && animation.targetCenter) {
	        if (!(0, _coordinate.equals)(animation.sourceCenter, animation.targetCenter)) {
	            return false;
	        }
	    }
	    if (animation.sourceResolution !== animation.targetResolution) {
	        return false;
	    }
	    if (animation.sourceRotation !== animation.targetRotation) {
	        return false;
	    }
	    return true;
	}
	exports.default = View;
	//# sourceMappingURL=View.js.map

/***/ }),
/* 262 */
/***/ (function(module, exports) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	/**
	 * @module ol/ViewProperty
	 */
	/**
	 * @enum {string}
	 */
	exports.default = {
	  CENTER: 'center',
	  RESOLUTION: 'resolution',
	  ROTATION: 'rotation'
	};
	//# sourceMappingURL=ViewProperty.js.map

/***/ }),
/* 263 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	exports.render = render;
	
	var _array = __webpack_require__(18);
	
	var _Control = __webpack_require__(56);
	
	var _Control2 = _interopRequireDefault(_Control);
	
	var _css = __webpack_require__(47);
	
	var _dom = __webpack_require__(34);
	
	var _EventType = __webpack_require__(10);
	
	var _EventType2 = _interopRequireDefault(_EventType);
	
	var _Layer = __webpack_require__(126);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var __extends = undefined && undefined.__extends || function () {
	    var _extendStatics = function extendStatics(d, b) {
	        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	            d.__proto__ = b;
	        } || function (d, b) {
	            for (var p in b) {
	                if (b.hasOwnProperty(p)) d[p] = b[p];
	            }
	        };
	        return _extendStatics(d, b);
	    };
	    return function (d, b) {
	        _extendStatics(d, b);
	        function __() {
	            this.constructor = d;
	        }
	        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	    };
	}();
	/**
	 * @module ol/control/Attribution
	 */
	
	/**
	 * @typedef {Object} Options
	 * @property {string} [className='ol-attribution'] CSS class name.
	 * @property {HTMLElement|string} [target] Specify a target if you
	 * want the control to be rendered outside of the map's
	 * viewport.
	 * @property {boolean} [collapsible] Specify if attributions can
	 * be collapsed. If not specified, sources control this behavior with their
	 * `attributionsCollapsible` setting.
	 * @property {boolean} [collapsed=true] Specify if attributions should
	 * be collapsed at startup.
	 * @property {string} [tipLabel='Attributions'] Text label to use for the button tip.
	 * @property {string} [label='i'] Text label to use for the
	 * collapsed attributions button.
	 * Instead of text, also an element (e.g. a `span` element) can be used.
	 * @property {string|HTMLElement} [collapseLabel='»'] Text label to use
	 * for the expanded attributions button.
	 * Instead of text, also an element (e.g. a `span` element) can be used.
	 * @property {function(import("../MapEvent.js").default)} [render] Function called when
	 * the control should be re-rendered. This is called in a `requestAnimationFrame`
	 * callback.
	 */
	/**
	 * @classdesc
	 * Control to show all the attributions associated with the layer sources
	 * in the map. This control is one of the default controls included in maps.
	 * By default it will show in the bottom right portion of the map, but this can
	 * be changed by using a css selector for `.ol-attribution`.
	 *
	 * @api
	 */
	var Attribution = /** @class */function (_super) {
	    __extends(Attribution, _super);
	    /**
	     * @param {Options=} opt_options Attribution options.
	     */
	    function Attribution(opt_options) {
	        var _this = this;
	        var options = opt_options ? opt_options : {};
	        _this = _super.call(this, {
	            element: document.createElement('div'),
	            render: options.render || render,
	            target: options.target
	        }) || this;
	        /**
	         * @private
	         * @type {HTMLElement}
	         */
	        _this.ulElement_ = document.createElement('ul');
	        /**
	         * @private
	         * @type {boolean}
	         */
	        _this.collapsed_ = options.collapsed !== undefined ? options.collapsed : true;
	        /**
	         * @private
	         * @type {boolean}
	         */
	        _this.overrideCollapsible_ = options.collapsible !== undefined;
	        /**
	         * @private
	         * @type {boolean}
	         */
	        _this.collapsible_ = options.collapsible !== undefined ? options.collapsible : true;
	        if (!_this.collapsible_) {
	            _this.collapsed_ = false;
	        }
	        var className = options.className !== undefined ? options.className : 'ol-attribution';
	        var tipLabel = options.tipLabel !== undefined ? options.tipLabel : 'Attributions';
	        var collapseLabel = options.collapseLabel !== undefined ? options.collapseLabel : '\xBB';
	        if (typeof collapseLabel === 'string') {
	            /**
	             * @private
	             * @type {HTMLElement}
	             */
	            _this.collapseLabel_ = document.createElement('span');
	            _this.collapseLabel_.textContent = collapseLabel;
	        } else {
	            _this.collapseLabel_ = collapseLabel;
	        }
	        var label = options.label !== undefined ? options.label : 'i';
	        if (typeof label === 'string') {
	            /**
	             * @private
	             * @type {HTMLElement}
	             */
	            _this.label_ = document.createElement('span');
	            _this.label_.textContent = label;
	        } else {
	            _this.label_ = label;
	        }
	        var activeLabel = _this.collapsible_ && !_this.collapsed_ ? _this.collapseLabel_ : _this.label_;
	        var button = document.createElement('button');
	        button.setAttribute('type', 'button');
	        button.title = tipLabel;
	        button.appendChild(activeLabel);
	        button.addEventListener(_EventType2.default.CLICK, _this.handleClick_.bind(_this), false);
	        var cssClasses = className + ' ' + _css.CLASS_UNSELECTABLE + ' ' + _css.CLASS_CONTROL + (_this.collapsed_ && _this.collapsible_ ? ' ' + _css.CLASS_COLLAPSED : '') + (_this.collapsible_ ? '' : ' ol-uncollapsible');
	        var element = _this.element;
	        element.className = cssClasses;
	        element.appendChild(_this.ulElement_);
	        element.appendChild(button);
	        /**
	         * A list of currently rendered resolutions.
	         * @type {Array<string>}
	         * @private
	         */
	        _this.renderedAttributions_ = [];
	        /**
	         * @private
	         * @type {boolean}
	         */
	        _this.renderedVisible_ = true;
	        return _this;
	    }
	    /**
	     * Collect a list of visible attributions and set the collapsible state.
	     * @param {import("../PluggableMap.js").FrameState} frameState Frame state.
	     * @return {Array<string>} Attributions.
	     * @private
	     */
	    Attribution.prototype.collectSourceAttributions_ = function (frameState) {
	        /**
	         * Used to determine if an attribution already exists.
	         * @type {!Object<string, boolean>}
	         */
	        var lookup = {};
	        /**
	         * A list of visible attributions.
	         * @type {Array<string>}
	         */
	        var visibleAttributions = [];
	        var layerStatesArray = frameState.layerStatesArray;
	        for (var i = 0, ii = layerStatesArray.length; i < ii; ++i) {
	            var layerState = layerStatesArray[i];
	            if (!(0, _Layer.inView)(layerState, frameState.viewState)) {
	                continue;
	            }
	            var source = /** @type {import("../layer/Layer.js").default} */layerState.layer.getSource();
	            if (!source) {
	                continue;
	            }
	            var attributionGetter = source.getAttributions();
	            if (!attributionGetter) {
	                continue;
	            }
	            var attributions = attributionGetter(frameState);
	            if (!attributions) {
	                continue;
	            }
	            if (!this.overrideCollapsible_ && source.getAttributionsCollapsible() === false) {
	                this.setCollapsible(false);
	            }
	            if (Array.isArray(attributions)) {
	                for (var j = 0, jj = attributions.length; j < jj; ++j) {
	                    if (!(attributions[j] in lookup)) {
	                        visibleAttributions.push(attributions[j]);
	                        lookup[attributions[j]] = true;
	                    }
	                }
	            } else {
	                if (!(attributions in lookup)) {
	                    visibleAttributions.push(attributions);
	                    lookup[attributions] = true;
	                }
	            }
	        }
	        return visibleAttributions;
	    };
	    /**
	     * @private
	     * @param {?import("../PluggableMap.js").FrameState} frameState Frame state.
	     */
	    Attribution.prototype.updateElement_ = function (frameState) {
	        if (!frameState) {
	            if (this.renderedVisible_) {
	                this.element.style.display = 'none';
	                this.renderedVisible_ = false;
	            }
	            return;
	        }
	        var attributions = this.collectSourceAttributions_(frameState);
	        var visible = attributions.length > 0;
	        if (this.renderedVisible_ != visible) {
	            this.element.style.display = visible ? '' : 'none';
	            this.renderedVisible_ = visible;
	        }
	        if ((0, _array.equals)(attributions, this.renderedAttributions_)) {
	            return;
	        }
	        (0, _dom.removeChildren)(this.ulElement_);
	        // append the attributions
	        for (var i = 0, ii = attributions.length; i < ii; ++i) {
	            var element = document.createElement('li');
	            element.innerHTML = attributions[i];
	            this.ulElement_.appendChild(element);
	        }
	        this.renderedAttributions_ = attributions;
	    };
	    /**
	     * @param {MouseEvent} event The event to handle
	     * @private
	     */
	    Attribution.prototype.handleClick_ = function (event) {
	        event.preventDefault();
	        this.handleToggle_();
	    };
	    /**
	     * @private
	     */
	    Attribution.prototype.handleToggle_ = function () {
	        this.element.classList.toggle(_css.CLASS_COLLAPSED);
	        if (this.collapsed_) {
	            (0, _dom.replaceNode)(this.collapseLabel_, this.label_);
	        } else {
	            (0, _dom.replaceNode)(this.label_, this.collapseLabel_);
	        }
	        this.collapsed_ = !this.collapsed_;
	    };
	    /**
	     * Return `true` if the attribution is collapsible, `false` otherwise.
	     * @return {boolean} True if the widget is collapsible.
	     * @api
	     */
	    Attribution.prototype.getCollapsible = function () {
	        return this.collapsible_;
	    };
	    /**
	     * Set whether the attribution should be collapsible.
	     * @param {boolean} collapsible True if the widget is collapsible.
	     * @api
	     */
	    Attribution.prototype.setCollapsible = function (collapsible) {
	        if (this.collapsible_ === collapsible) {
	            return;
	        }
	        this.collapsible_ = collapsible;
	        this.element.classList.toggle('ol-uncollapsible');
	        if (!collapsible && this.collapsed_) {
	            this.handleToggle_();
	        }
	    };
	    /**
	     * Collapse or expand the attribution according to the passed parameter. Will
	     * not do anything if the attribution isn't collapsible or if the current
	     * collapsed state is already the one requested.
	     * @param {boolean} collapsed True if the widget is collapsed.
	     * @api
	     */
	    Attribution.prototype.setCollapsed = function (collapsed) {
	        if (!this.collapsible_ || this.collapsed_ === collapsed) {
	            return;
	        }
	        this.handleToggle_();
	    };
	    /**
	     * Return `true` when the attribution is currently collapsed or `false`
	     * otherwise.
	     * @return {boolean} True if the widget is collapsed.
	     * @api
	     */
	    Attribution.prototype.getCollapsed = function () {
	        return this.collapsed_;
	    };
	    return Attribution;
	}(_Control2.default);
	/**
	 * Update the attribution element.
	 * @param {import("../MapEvent.js").default} mapEvent Map event.
	 * @this {Attribution}
	 * @api
	 */
	function render(mapEvent) {
	    this.updateElement_(mapEvent.frameState);
	}
	exports.default = Attribution;
	//# sourceMappingURL=Attribution.js.map

/***/ }),
/* 264 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	exports.render = render;
	
	var _events = __webpack_require__(30);
	
	var _EventType = __webpack_require__(175);
	
	var _EventType2 = _interopRequireDefault(_EventType);
	
	var _Object = __webpack_require__(32);
	
	var _Control = __webpack_require__(56);
	
	var _Control2 = _interopRequireDefault(_Control);
	
	var _proj = __webpack_require__(16);
	
	__webpack_require__(165);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var __extends = undefined && undefined.__extends || function () {
	    var _extendStatics = function extendStatics(d, b) {
	        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	            d.__proto__ = b;
	        } || function (d, b) {
	            for (var p in b) {
	                if (b.hasOwnProperty(p)) d[p] = b[p];
	            }
	        };
	        return _extendStatics(d, b);
	    };
	    return function (d, b) {
	        _extendStatics(d, b);
	        function __() {
	            this.constructor = d;
	        }
	        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	    };
	}();
	/**
	 * @module ol/control/MousePosition
	 */
	
	/**
	 * @type {string}
	 */
	var PROJECTION = 'projection';
	/**
	 * @type {string}
	 */
	var COORDINATE_FORMAT = 'coordinateFormat';
	/**
	 * @typedef {Object} Options
	 * @property {string} [className='ol-mouse-position'] CSS class name.
	 * @property {import("../coordinate.js").CoordinateFormat} [coordinateFormat] Coordinate format.
	 * @property {import("../proj.js").ProjectionLike} [projection] Projection. Default is the view projection.
	 * @property {function(import("../MapEvent.js").default)} [render] Function called when the
	 * control should be re-rendered. This is called in a `requestAnimationFrame`
	 * callback.
	 * @property {HTMLElement|string} [target] Specify a target if you want the
	 * control to be rendered outside of the map's viewport.
	 * @property {string} [undefinedHTML='&#160;'] Markup to show when coordinates are not
	 * available (e.g. when the pointer leaves the map viewport).  By default, the last position
	 * will be replaced with `'&#160;'` (`&nbsp;`) when the pointer leaves the viewport.  To
	 * retain the last rendered position, set this option to something falsey (like an empty
	 * string `''`).
	 */
	/**
	 * @classdesc
	 * A control to show the 2D coordinates of the mouse cursor. By default, these
	 * are in the view projection, but can be in any supported projection.
	 * By default the control is shown in the top right corner of the map, but this
	 * can be changed by using the css selector `.ol-mouse-position`.
	 *
	 * On touch devices, which usually do not have a mouse cursor, the coordinates
	 * of the currently touched position are shown.
	 *
	 * @api
	 */
	var MousePosition = /** @class */function (_super) {
	    __extends(MousePosition, _super);
	    /**
	     * @param {Options=} opt_options Mouse position options.
	     */
	    function MousePosition(opt_options) {
	        var _this = this;
	        var options = opt_options ? opt_options : {};
	        var element = document.createElement('div');
	        element.className = options.className !== undefined ? options.className : 'ol-mouse-position';
	        _this = _super.call(this, {
	            element: element,
	            render: options.render || render,
	            target: options.target
	        }) || this;
	        _this.addEventListener((0, _Object.getChangeEventType)(PROJECTION), _this.handleProjectionChanged_);
	        if (options.coordinateFormat) {
	            _this.setCoordinateFormat(options.coordinateFormat);
	        }
	        if (options.projection) {
	            _this.setProjection(options.projection);
	        }
	        /**
	         * @private
	         * @type {string}
	         */
	        _this.undefinedHTML_ = options.undefinedHTML !== undefined ? options.undefinedHTML : '&#160;';
	        /**
	         * @private
	         * @type {boolean}
	         */
	        _this.renderOnMouseOut_ = !!_this.undefinedHTML_;
	        /**
	         * @private
	         * @type {string}
	         */
	        _this.renderedHTML_ = element.innerHTML;
	        /**
	         * @private
	         * @type {?import("../proj/Projection.js").default}
	         */
	        _this.mapProjection_ = null;
	        /**
	         * @private
	         * @type {?import("../proj.js").TransformFunction}
	         */
	        _this.transform_ = null;
	        return _this;
	    }
	    /**
	     * @private
	     */
	    MousePosition.prototype.handleProjectionChanged_ = function () {
	        this.transform_ = null;
	    };
	    /**
	     * Return the coordinate format type used to render the current position or
	     * undefined.
	     * @return {import("../coordinate.js").CoordinateFormat|undefined} The format to render the current
	     *     position in.
	     * @observable
	     * @api
	     */
	    MousePosition.prototype.getCoordinateFormat = function () {
	        return (
	            /** @type {import("../coordinate.js").CoordinateFormat|undefined} */this.get(COORDINATE_FORMAT)
	        );
	    };
	    /**
	     * Return the projection that is used to report the mouse position.
	     * @return {import("../proj/Projection.js").default|undefined} The projection to report mouse
	     *     position in.
	     * @observable
	     * @api
	     */
	    MousePosition.prototype.getProjection = function () {
	        return (
	            /** @type {import("../proj/Projection.js").default|undefined} */this.get(PROJECTION)
	        );
	    };
	    /**
	     * @param {Event} event Browser event.
	     * @protected
	     */
	    MousePosition.prototype.handleMouseMove = function (event) {
	        var map = this.getMap();
	        this.updateHTML_(map.getEventPixel(event));
	    };
	    /**
	     * @param {Event} event Browser event.
	     * @protected
	     */
	    MousePosition.prototype.handleMouseOut = function (event) {
	        this.updateHTML_(null);
	    };
	    /**
	     * @inheritDoc
	     * @api
	     */
	    MousePosition.prototype.setMap = function (map) {
	        _super.prototype.setMap.call(this, map);
	        if (map) {
	            var viewport = map.getViewport();
	            this.listenerKeys.push((0, _events.listen)(viewport, _EventType2.default.POINTERMOVE, this.handleMouseMove, this));
	            if (this.renderOnMouseOut_) {
	                this.listenerKeys.push((0, _events.listen)(viewport, _EventType2.default.POINTEROUT, this.handleMouseOut, this));
	            }
	        }
	    };
	    /**
	     * Set the coordinate format type used to render the current position.
	     * @param {import("../coordinate.js").CoordinateFormat} format The format to render the current
	     *     position in.
	     * @observable
	     * @api
	     */
	    MousePosition.prototype.setCoordinateFormat = function (format) {
	        this.set(COORDINATE_FORMAT, format);
	    };
	    /**
	     * Set the projection that is used to report the mouse position.
	     * @param {import("../proj.js").ProjectionLike} projection The projection to report mouse
	     *     position in.
	     * @observable
	     * @api
	     */
	    MousePosition.prototype.setProjection = function (projection) {
	        this.set(PROJECTION, (0, _proj.get)(projection));
	    };
	    /**
	     * @param {?import("../pixel.js").Pixel} pixel Pixel.
	     * @private
	     */
	    MousePosition.prototype.updateHTML_ = function (pixel) {
	        var html = this.undefinedHTML_;
	        if (pixel && this.mapProjection_) {
	            if (!this.transform_) {
	                var projection = this.getProjection();
	                if (projection) {
	                    this.transform_ = (0, _proj.getTransformFromProjections)(this.mapProjection_, projection);
	                } else {
	                    this.transform_ = _proj.identityTransform;
	                }
	            }
	            var map = this.getMap();
	            var coordinate = map.getCoordinateFromPixelInternal(pixel);
	            if (coordinate) {
	                var userProjection = (0, _proj.getUserProjection)();
	                if (userProjection) {
	                    this.transform_ = (0, _proj.getTransformFromProjections)(this.mapProjection_, userProjection);
	                }
	                this.transform_(coordinate, coordinate);
	                var coordinateFormat = this.getCoordinateFormat();
	                if (coordinateFormat) {
	                    html = coordinateFormat(coordinate);
	                } else {
	                    html = coordinate.toString();
	                }
	            }
	        }
	        if (!this.renderedHTML_ || html !== this.renderedHTML_) {
	            this.element.innerHTML = html;
	            this.renderedHTML_ = html;
	        }
	    };
	    return MousePosition;
	}(_Control2.default);
	/**
	 * Update the projection. Rendering of the coordinates is done in
	 * `handleMouseMove` and `handleMouseUp`.
	 * @param {import("../MapEvent.js").default} mapEvent Map event.
	 * @this {MousePosition}
	 * @api
	 */
	function render(mapEvent) {
	    var frameState = mapEvent.frameState;
	    if (!frameState) {
	        this.mapProjection_ = null;
	    } else {
	        if (this.mapProjection_ != frameState.viewState.projection) {
	            this.mapProjection_ = frameState.viewState.projection;
	            this.transform_ = null;
	        }
	    }
	}
	exports.default = MousePosition;
	//# sourceMappingURL=MousePosition.js.map

/***/ }),
/* 265 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	
	var _EventType = __webpack_require__(10);
	
	var _EventType2 = _interopRequireDefault(_EventType);
	
	var _Control = __webpack_require__(56);
	
	var _Control2 = _interopRequireDefault(_Control);
	
	var _css = __webpack_require__(47);
	
	var _easing = __webpack_require__(71);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var __extends = undefined && undefined.__extends || function () {
	    var _extendStatics = function extendStatics(d, b) {
	        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	            d.__proto__ = b;
	        } || function (d, b) {
	            for (var p in b) {
	                if (b.hasOwnProperty(p)) d[p] = b[p];
	            }
	        };
	        return _extendStatics(d, b);
	    };
	    return function (d, b) {
	        _extendStatics(d, b);
	        function __() {
	            this.constructor = d;
	        }
	        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	    };
	}();
	/**
	 * @module ol/control/Zoom
	 */
	
	/**
	 * @typedef {Object} Options
	 * @property {number} [duration=250] Animation duration in milliseconds.
	 * @property {string} [className='ol-zoom'] CSS class name.
	 * @property {string|HTMLElement} [zoomInLabel='+'] Text label to use for the zoom-in
	 * button. Instead of text, also an element (e.g. a `span` element) can be used.
	 * @property {string|HTMLElement} [zoomOutLabel='-'] Text label to use for the zoom-out button.
	 * Instead of text, also an element (e.g. a `span` element) can be used.
	 * @property {string} [zoomInTipLabel='Zoom in'] Text label to use for the button tip.
	 * @property {string} [zoomOutTipLabel='Zoom out'] Text label to use for the button tip.
	 * @property {number} [delta=1] The zoom delta applied on each click.
	 * @property {HTMLElement|string} [target] Specify a target if you want the control to be
	 * rendered outside of the map's viewport.
	 */
	/**
	 * @classdesc
	 * A control with 2 buttons, one for zoom in and one for zoom out.
	 * This control is one of the default controls of a map. To style this control
	 * use css selectors `.ol-zoom-in` and `.ol-zoom-out`.
	 *
	 * @api
	 */
	var Zoom = /** @class */function (_super) {
	    __extends(Zoom, _super);
	    /**
	     * @param {Options=} opt_options Zoom options.
	     */
	    function Zoom(opt_options) {
	        var _this = this;
	        var options = opt_options ? opt_options : {};
	        _this = _super.call(this, {
	            element: document.createElement('div'),
	            target: options.target
	        }) || this;
	        var className = options.className !== undefined ? options.className : 'ol-zoom';
	        var delta = options.delta !== undefined ? options.delta : 1;
	        var zoomInLabel = options.zoomInLabel !== undefined ? options.zoomInLabel : '+';
	        var zoomOutLabel = options.zoomOutLabel !== undefined ? options.zoomOutLabel : '\u2212';
	        var zoomInTipLabel = options.zoomInTipLabel !== undefined ? options.zoomInTipLabel : 'Zoom in';
	        var zoomOutTipLabel = options.zoomOutTipLabel !== undefined ? options.zoomOutTipLabel : 'Zoom out';
	        var inElement = document.createElement('button');
	        inElement.className = className + '-in';
	        inElement.setAttribute('type', 'button');
	        inElement.title = zoomInTipLabel;
	        inElement.appendChild(typeof zoomInLabel === 'string' ? document.createTextNode(zoomInLabel) : zoomInLabel);
	        inElement.addEventListener(_EventType2.default.CLICK, _this.handleClick_.bind(_this, delta), false);
	        var outElement = document.createElement('button');
	        outElement.className = className + '-out';
	        outElement.setAttribute('type', 'button');
	        outElement.title = zoomOutTipLabel;
	        outElement.appendChild(typeof zoomOutLabel === 'string' ? document.createTextNode(zoomOutLabel) : zoomOutLabel);
	        outElement.addEventListener(_EventType2.default.CLICK, _this.handleClick_.bind(_this, -delta), false);
	        var cssClasses = className + ' ' + _css.CLASS_UNSELECTABLE + ' ' + _css.CLASS_CONTROL;
	        var element = _this.element;
	        element.className = cssClasses;
	        element.appendChild(inElement);
	        element.appendChild(outElement);
	        /**
	         * @type {number}
	         * @private
	         */
	        _this.duration_ = options.duration !== undefined ? options.duration : 250;
	        return _this;
	    }
	    /**
	     * @param {number} delta Zoom delta.
	     * @param {MouseEvent} event The event to handle
	     * @private
	     */
	    Zoom.prototype.handleClick_ = function (delta, event) {
	        event.preventDefault();
	        this.zoomByDelta_(delta);
	    };
	    /**
	     * @param {number} delta Zoom delta.
	     * @private
	     */
	    Zoom.prototype.zoomByDelta_ = function (delta) {
	        var map = this.getMap();
	        var view = map.getView();
	        if (!view) {
	            // the map does not have a view, so we can't act
	            // upon it
	            return;
	        }
	        var currentZoom = view.getZoom();
	        if (currentZoom !== undefined) {
	            var newZoom = view.getConstrainedZoom(currentZoom + delta);
	            if (this.duration_ > 0) {
	                if (view.getAnimating()) {
	                    view.cancelAnimations();
	                }
	                view.animate({
	                    zoom: newZoom,
	                    duration: this.duration_,
	                    easing: _easing.easeOut
	                });
	            } else {
	                view.setZoom(newZoom);
	            }
	        }
	    };
	    return Zoom;
	}(_Control2.default);
	exports.default = Zoom;
	//# sourceMappingURL=Zoom.js.map

/***/ }),
/* 266 */
/***/ (function(module, exports) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	/**
	 * @module ol/extent/Corner
	 */
	/**
	 * Extent corner.
	 * @enum {string}
	 */
	exports.default = {
	  BOTTOM_LEFT: 'bottom-left',
	  BOTTOM_RIGHT: 'bottom-right',
	  TOP_LEFT: 'top-left',
	  TOP_RIGHT: 'top-right'
	};
	//# sourceMappingURL=Corner.js.map

/***/ }),
/* 267 */
/***/ (function(module, exports) {

	"use strict";
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	/**
	 * @module ol/extent/Relationship
	 */
	/**
	 * Relationship to an extent.
	 * @enum {number}
	 */
	exports.default = {
	  UNKNOWN: 0,
	  INTERSECTING: 1,
	  ABOVE: 2,
	  RIGHT: 4,
	  BELOW: 8,
	  LEFT: 16
	};
	//# sourceMappingURL=Relationship.js.map

/***/ }),
/* 268 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	exports.transformGeometryWithOptions = transformGeometryWithOptions;
	exports.transformExtentWithOptions = transformExtentWithOptions;
	
	var _obj = __webpack_require__(23);
	
	var _util = __webpack_require__(14);
	
	var _proj = __webpack_require__(16);
	
	var _Units = __webpack_require__(65);
	
	var _Units2 = _interopRequireDefault(_Units);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	/**
	 * @typedef {Object} ReadOptions
	 * @property {import("../proj.js").ProjectionLike} [dataProjection] Projection of the data we are reading.
	 * If not provided, the projection will be derived from the data (where possible) or
	 * the `dataProjection` of the format is assigned (where set). If the projection
	 * can not be derived from the data and if no `dataProjection` is set for a format,
	 * the features will not be reprojected.
	 * @property {import("../extent.js").Extent} [extent] Tile extent in map units of the tile being read.
	 * This is only required when reading data with tile pixels as geometry units. When configured,
	 * a `dataProjection` with `TILE_PIXELS` as `units` and the tile's pixel extent as `extent` needs to be
	 * provided.
	 * @property {import("../proj.js").ProjectionLike} [featureProjection] Projection of the feature geometries
	 * created by the format reader. If not provided, features will be returned in the
	 * `dataProjection`.
	 */
	/**
	 * @typedef {Object} WriteOptions
	 * @property {import("../proj.js").ProjectionLike} [dataProjection] Projection of the data we are writing.
	 * If not provided, the `dataProjection` of the format is assigned (where set).
	 * If no `dataProjection` is set for a format, the features will be returned
	 * in the `featureProjection`.
	 * @property {import("../proj.js").ProjectionLike} [featureProjection] Projection of the feature geometries
	 * that will be serialized by the format writer. If not provided, geometries are assumed
	 * to be in the `dataProjection` if that is set; in other words, they are not transformed.
	 * @property {boolean} [rightHanded] When writing geometries, follow the right-hand
	 * rule for linear ring orientation.  This means that polygons will have counter-clockwise
	 * exterior rings and clockwise interior rings.  By default, coordinates are serialized
	 * as they are provided at construction.  If `true`, the right-hand rule will
	 * be applied.  If `false`, the left-hand rule will be applied (clockwise for
	 * exterior and counter-clockwise for interior rings).  Note that not all
	 * formats support this.  The GeoJSON format does use this property when writing
	 * geometries.
	 * @property {number} [decimals] Maximum number of decimal places for coordinates.
	 * Coordinates are stored internally as floats, but floating-point arithmetic can create
	 * coordinates with a large number of decimal places, not generally wanted on output.
	 * Set a number here to round coordinates. Can also be used to ensure that
	 * coordinates read in can be written back out with the same number of decimals.
	 * Default is no rounding.
	 */
	/**
	 * @classdesc
	 * Abstract base class; normally only used for creating subclasses and not
	 * instantiated in apps.
	 * Base class for feature formats.
	 * {@link module:ol/format/Feature~FeatureFormat} subclasses provide the ability to decode and encode
	 * {@link module:ol/Feature~Feature} objects from a variety of commonly used geospatial
	 * file formats.  See the documentation for each format for more details.
	 *
	 * @abstract
	 * @api
	 */
	/**
	 * @module ol/format/Feature
	 */
	var FeatureFormat = /** @class */function () {
	    function FeatureFormat() {
	        /**
	         * @protected
	         * @type {import("../proj/Projection.js").default}
	         */
	        this.dataProjection = null;
	        /**
	         * @protected
	         * @type {import("../proj/Projection.js").default}
	         */
	        this.defaultFeatureProjection = null;
	    }
	    /**
	     * Adds the data projection to the read options.
	     * @param {Document|Node|Object|string} source Source.
	     * @param {ReadOptions=} opt_options Options.
	     * @return {ReadOptions|undefined} Options.
	     * @protected
	     */
	    FeatureFormat.prototype.getReadOptions = function (source, opt_options) {
	        var options;
	        if (opt_options) {
	            var dataProjection = opt_options.dataProjection ? (0, _proj.get)(opt_options.dataProjection) : this.readProjection(source);
	            if (opt_options.extent && dataProjection && dataProjection.getUnits() === _Units2.default.TILE_PIXELS) {
	                dataProjection = (0, _proj.get)(dataProjection);
	                dataProjection.setWorldExtent(opt_options.extent);
	            }
	            options = {
	                dataProjection: dataProjection,
	                featureProjection: opt_options.featureProjection
	            };
	        }
	        return this.adaptOptions(options);
	    };
	    /**
	     * Sets the `dataProjection` on the options, if no `dataProjection`
	     * is set.
	     * @param {WriteOptions|ReadOptions|undefined} options
	     *     Options.
	     * @protected
	     * @return {WriteOptions|ReadOptions|undefined}
	     *     Updated options.
	     */
	    FeatureFormat.prototype.adaptOptions = function (options) {
	        return (0, _obj.assign)({
	            dataProjection: this.dataProjection,
	            featureProjection: this.defaultFeatureProjection
	        }, options);
	    };
	    /**
	     * @abstract
	     * @return {import("./FormatType.js").default} Format.
	     */
	    FeatureFormat.prototype.getType = function () {
	        return (0, _util.abstract)();
	    };
	    /**
	     * Read a single feature from a source.
	     *
	     * @abstract
	     * @param {Document|Node|Object|string} source Source.
	     * @param {ReadOptions=} opt_options Read options.
	     * @return {import("../Feature.js").FeatureLike} Feature.
	     */
	    FeatureFormat.prototype.readFeature = function (source, opt_options) {
	        return (0, _util.abstract)();
	    };
	    /**
	     * Read all features from a source.
	     *
	     * @abstract
	     * @param {Document|Node|ArrayBuffer|Object|string} source Source.
	     * @param {ReadOptions=} opt_options Read options.
	     * @return {Array<import("../Feature.js").FeatureLike>} Features.
	     */
	    FeatureFormat.prototype.readFeatures = function (source, opt_options) {
	        return (0, _util.abstract)();
	    };
	    /**
	     * Read a single geometry from a source.
	     *
	     * @abstract
	     * @param {Document|Node|Object|string} source Source.
	     * @param {ReadOptions=} opt_options Read options.
	     * @return {import("../geom/Geometry.js").default} Geometry.
	     */
	    FeatureFormat.prototype.readGeometry = function (source, opt_options) {
	        return (0, _util.abstract)();
	    };
	    /**
	     * Read the projection from a source.
	     *
	     * @abstract
	     * @param {Document|Node|Object|string} source Source.
	     * @return {import("../proj/Projection.js").default} Projection.
	     */
	    FeatureFormat.prototype.readProjection = function (source) {
	        return (0, _util.abstract)();
	    };
	    /**
	     * Encode a feature in this format.
	     *
	     * @abstract
	     * @param {import("../Feature.js").default} feature Feature.
	     * @param {WriteOptions=} opt_options Write options.
	     * @return {string} Result.
	     */
	    FeatureFormat.prototype.writeFeature = function (feature, opt_options) {
	        return (0, _util.abstract)();
	    };
	    /**
	     * Encode an array of features in this format.
	     *
	     * @abstract
	     * @param {Array<import("../Feature.js").default>} features Features.
	     * @param {WriteOptions=} opt_options Write options.
	     * @return {string} Result.
	     */
	    FeatureFormat.prototype.writeFeatures = function (features, opt_options) {
	        return (0, _util.abstract)();
	    };
	    /**
	     * Write a single geometry in this format.
	     *
	     * @abstract
	     * @param {import("../geom/Geometry.js").default} geometry Geometry.
	     * @param {WriteOptions=} opt_options Write options.
	     * @return {string} Result.
	     */
	    FeatureFormat.prototype.writeGeometry = function (geometry, opt_options) {
	        return (0, _util.abstract)();
	    };
	    return FeatureFormat;
	}();
	exports.default = FeatureFormat;
	/**
	 * @param {import("../geom/Geometry.js").default} geometry Geometry.
	 * @param {boolean} write Set to true for writing, false for reading.
	 * @param {(WriteOptions|ReadOptions)=} opt_options Options.
	 * @return {import("../geom/Geometry.js").default} Transformed geometry.
	 */
	
	function transformGeometryWithOptions(geometry, write, opt_options) {
	    var featureProjection = opt_options ? (0, _proj.get)(opt_options.featureProjection) : null;
	    var dataProjection = opt_options ? (0, _proj.get)(opt_options.dataProjection) : null;
	    var transformed;
	    if (featureProjection && dataProjection && !(0, _proj.equivalent)(featureProjection, dataProjection)) {
	        transformed = (write ? geometry.clone() : geometry).transform(write ? featureProjection : dataProjection, write ? dataProjection : featureProjection);
	    } else {
	        transformed = geometry;
	    }
	    if (write && opt_options && /** @type {WriteOptions} */opt_options.decimals !== undefined) {
	        var power_1 = Math.pow(10, /** @type {WriteOptions} */opt_options.decimals);
	        // if decimals option on write, round each coordinate appropriately
	        /**
	         * @param {Array<number>} coordinates Coordinates.
	         * @return {Array<number>} Transformed coordinates.
	         */
	        var transform = function transform(coordinates) {
	            for (var i = 0, ii = coordinates.length; i < ii; ++i) {
	                coordinates[i] = Math.round(coordinates[i] * power_1) / power_1;
	            }
	            return coordinates;
	        };
	        if (transformed === geometry) {
	            transformed = geometry.clone();
	        }
	        transformed.applyTransform(transform);
	    }
	    return transformed;
	}
	/**
	 * @param {import("../extent.js").Extent} extent Extent.
	 * @param {ReadOptions=} opt_options Read options.
	 * @return {import("../extent.js").Extent} Transformed extent.
	 */
	function transformExtentWithOptions(extent, opt_options) {
	    var featureProjection = opt_options ? (0, _proj.get)(opt_options.featureProjection) : null;
	    var dataProjection = opt_options ? (0, _proj.get)(opt_options.dataProjection) : null;
	    if (featureProjection && dataProjection && !(0, _proj.equivalent)(featureProjection, dataProjection)) {
	        return (0, _proj.transformExtent)(extent, dataProjection, featureProjection);
	    } else {
	        return extent;
	    }
	}
	//# sourceMappingURL=Feature.js.map

/***/ }),
/* 269 */
/***/ (function(module, exports) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	/**
	 * @module ol/format/FormatType
	 */
	/**
	 * @enum {string}
	 */
	exports.default = {
	  ARRAY_BUFFER: 'arraybuffer',
	  JSON: 'json',
	  TEXT: 'text',
	  XML: 'xml'
	};
	//# sourceMappingURL=FormatType.js.map

/***/ }),
/* 270 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	
	var _asserts = __webpack_require__(29);
	
	var _Feature = __webpack_require__(123);
	
	var _Feature2 = _interopRequireDefault(_Feature);
	
	var _Feature3 = __webpack_require__(268);
	
	var _JSONFeature = __webpack_require__(591);
	
	var _JSONFeature2 = _interopRequireDefault(_JSONFeature);
	
	var _GeometryCollection = __webpack_require__(595);
	
	var _GeometryCollection2 = _interopRequireDefault(_GeometryCollection);
	
	var _LineString = __webpack_require__(171);
	
	var _LineString2 = _interopRequireDefault(_LineString);
	
	var _MultiLineString = __webpack_require__(275);
	
	var _MultiLineString2 = _interopRequireDefault(_MultiLineString);
	
	var _MultiPoint = __webpack_require__(172);
	
	var _MultiPoint2 = _interopRequireDefault(_MultiPoint);
	
	var _MultiPolygon = __webpack_require__(276);
	
	var _MultiPolygon2 = _interopRequireDefault(_MultiPolygon);
	
	var _Point = __webpack_require__(85);
	
	var _Point2 = _interopRequireDefault(_Point);
	
	var _Polygon = __webpack_require__(57);
	
	var _Polygon2 = _interopRequireDefault(_Polygon);
	
	var _obj = __webpack_require__(23);
	
	var _proj = __webpack_require__(16);
	
	var _GeometryType = __webpack_require__(22);
	
	var _GeometryType2 = _interopRequireDefault(_GeometryType);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	/**
	 * @module ol/format/GeoJSON
	 */
	var __extends = undefined && undefined.__extends || function () {
	    var _extendStatics = function extendStatics(d, b) {
	        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	            d.__proto__ = b;
	        } || function (d, b) {
	            for (var p in b) {
	                if (b.hasOwnProperty(p)) d[p] = b[p];
	            }
	        };
	        return _extendStatics(d, b);
	    };
	    return function (d, b) {
	        _extendStatics(d, b);
	        function __() {
	            this.constructor = d;
	        }
	        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	    };
	}();
	
	/**
	 * @typedef {import("geojson").GeoJSON} GeoJSONObject
	 * @typedef {import("geojson").Feature} GeoJSONFeature
	 * @typedef {import("geojson").FeatureCollection} GeoJSONFeatureCollection
	 * @typedef {import("geojson").Geometry} GeoJSONGeometry
	 * @typedef {import("geojson").Point} GeoJSONPoint
	 * @typedef {import("geojson").LineString} GeoJSONLineString
	 * @typedef {import("geojson").Polygon} GeoJSONPolygon
	 * @typedef {import("geojson").MultiPoint} GeoJSONMultiPoint
	 * @typedef {import("geojson").MultiLineString} GeoJSONMultiLineString
	 * @typedef {import("geojson").MultiPolygon} GeoJSONMultiPolygon
	 * @typedef {import("geojson").GeometryCollection} GeoJSONGeometryCollection
	 */
	/**
	 * @typedef {Object} Options
	 * @property {import("../proj.js").ProjectionLike} [dataProjection='EPSG:4326'] Default data projection.
	 * @property {import("../proj.js").ProjectionLike} [featureProjection] Projection for features read or
	 * written by the format.  Options passed to read or write methods will take precedence.
	 * @property {string} [geometryName] Geometry name to use when creating features.
	 * @property {boolean} [extractGeometryName=false] Certain GeoJSON providers include
	 * the geometry_name field in the feature GeoJSON. If set to `true` the GeoJSON reader
	 * will look for that field to set the geometry name. If both this field is set to `true`
	 * and a `geometryName` is provided, the `geometryName` will take precedence.
	 */
	/**
	 * @classdesc
	 * Feature format for reading and writing data in the GeoJSON format.
	 *
	  * @api
	 */
	var GeoJSON = /** @class */function (_super) {
	    __extends(GeoJSON, _super);
	    /**
	     * @param {Options=} opt_options Options.
	     */
	    function GeoJSON(opt_options) {
	        var _this = this;
	        var options = opt_options ? opt_options : {};
	        _this = _super.call(this) || this;
	        /**
	         * @inheritDoc
	         */
	        _this.dataProjection = (0, _proj.get)(options.dataProjection ? options.dataProjection : 'EPSG:4326');
	        if (options.featureProjection) {
	            _this.defaultFeatureProjection = (0, _proj.get)(options.featureProjection);
	        }
	        /**
	         * Name of the geometry attribute for features.
	         * @type {string|undefined}
	         * @private
	         */
	        _this.geometryName_ = options.geometryName;
	        /**
	         * Look for the geometry name in the feature GeoJSON
	         * @type {boolean|undefined}
	         * @private
	         */
	        _this.extractGeometryName_ = options.extractGeometryName;
	        return _this;
	    }
	    /**
	     * @inheritDoc
	     */
	    GeoJSON.prototype.readFeatureFromObject = function (object, opt_options) {
	        /**
	         * @type {GeoJSONFeature}
	         */
	        var geoJSONFeature = null;
	        if (object['type'] === 'Feature') {
	            geoJSONFeature = /** @type {GeoJSONFeature} */object;
	        } else {
	            geoJSONFeature = {
	                'type': 'Feature',
	                'geometry': /** @type {GeoJSONGeometry} */object,
	                'properties': null
	            };
	        }
	        var geometry = readGeometry(geoJSONFeature['geometry'], opt_options);
	        var feature = new _Feature2.default();
	        if (this.geometryName_) {
	            feature.setGeometryName(this.geometryName_);
	        } else if (this.extractGeometryName_ && 'geometry_name' in geoJSONFeature !== undefined) {
	            feature.setGeometryName(geoJSONFeature['geometry_name']);
	        }
	        feature.setGeometry(geometry);
	        if ('id' in geoJSONFeature) {
	            feature.setId(geoJSONFeature['id']);
	        }
	        if (geoJSONFeature['properties']) {
	            feature.setProperties(geoJSONFeature['properties'], true);
	        }
	        return feature;
	    };
	    /**
	     * @inheritDoc
	     */
	    GeoJSON.prototype.readFeaturesFromObject = function (object, opt_options) {
	        var geoJSONObject = /** @type {GeoJSONObject} */object;
	        /** @type {Array<import("../Feature.js").default>} */
	        var features = null;
	        if (geoJSONObject['type'] === 'FeatureCollection') {
	            var geoJSONFeatureCollection = /** @type {GeoJSONFeatureCollection} */object;
	            features = [];
	            var geoJSONFeatures = geoJSONFeatureCollection['features'];
	            for (var i = 0, ii = geoJSONFeatures.length; i < ii; ++i) {
	                features.push(this.readFeatureFromObject(geoJSONFeatures[i], opt_options));
	            }
	        } else {
	            features = [this.readFeatureFromObject(object, opt_options)];
	        }
	        return features;
	    };
	    /**
	     * @inheritDoc
	     */
	    GeoJSON.prototype.readGeometryFromObject = function (object, opt_options) {
	        return readGeometry( /** @type {GeoJSONGeometry} */object, opt_options);
	    };
	    /**
	     * @inheritDoc
	     */
	    GeoJSON.prototype.readProjectionFromObject = function (object) {
	        var crs = object['crs'];
	        var projection;
	        if (crs) {
	            if (crs['type'] == 'name') {
	                projection = (0, _proj.get)(crs['properties']['name']);
	            } else {
	                (0, _asserts.assert)(false, 36); // Unknown SRS type
	            }
	        } else {
	            projection = this.dataProjection;
	        }
	        return (
	            /** @type {import("../proj/Projection.js").default} */projection
	        );
	    };
	    /**
	     * Encode a feature as a GeoJSON Feature object.
	     *
	     * @param {import("../Feature.js").default} feature Feature.
	     * @param {import("./Feature.js").WriteOptions=} opt_options Write options.
	     * @return {GeoJSONFeature} Object.
	     * @override
	     * @api
	     */
	    GeoJSON.prototype.writeFeatureObject = function (feature, opt_options) {
	        opt_options = this.adaptOptions(opt_options);
	        /** @type {GeoJSONFeature} */
	        var object = {
	            'type': 'Feature',
	            geometry: null,
	            properties: null
	        };
	        var id = feature.getId();
	        if (id !== undefined) {
	            object.id = id;
	        }
	        var geometry = feature.getGeometry();
	        if (geometry) {
	            object.geometry = writeGeometry(geometry, opt_options);
	        }
	        var properties = feature.getProperties();
	        delete properties[feature.getGeometryName()];
	        if (!(0, _obj.isEmpty)(properties)) {
	            object.properties = properties;
	        }
	        return object;
	    };
	    /**
	     * Encode an array of features as a GeoJSON object.
	     *
	     * @param {Array<import("../Feature.js").default>} features Features.
	     * @param {import("./Feature.js").WriteOptions=} opt_options Write options.
	     * @return {GeoJSONFeatureCollection} GeoJSON Object.
	     * @override
	     * @api
	     */
	    GeoJSON.prototype.writeFeaturesObject = function (features, opt_options) {
	        opt_options = this.adaptOptions(opt_options);
	        var objects = [];
	        for (var i = 0, ii = features.length; i < ii; ++i) {
	            objects.push(this.writeFeatureObject(features[i], opt_options));
	        }
	        return {
	            type: 'FeatureCollection',
	            features: objects
	        };
	    };
	    /**
	     * Encode a geometry as a GeoJSON object.
	     *
	     * @param {import("../geom/Geometry.js").default} geometry Geometry.
	     * @param {import("./Feature.js").WriteOptions=} opt_options Write options.
	     * @return {GeoJSONGeometry|GeoJSONGeometryCollection} Object.
	     * @override
	     * @api
	     */
	    GeoJSON.prototype.writeGeometryObject = function (geometry, opt_options) {
	        return writeGeometry(geometry, this.adaptOptions(opt_options));
	    };
	    return GeoJSON;
	}(_JSONFeature2.default);
	/**
	 * @param {GeoJSONGeometry|GeoJSONGeometryCollection} object Object.
	 * @param {import("./Feature.js").ReadOptions=} opt_options Read options.
	 * @return {import("../geom/Geometry.js").default} Geometry.
	 */
	function readGeometry(object, opt_options) {
	    if (!object) {
	        return null;
	    }
	    /**
	     * @type {import("../geom/Geometry.js").default}
	     */
	    var geometry;
	    switch (object['type']) {
	        case _GeometryType2.default.POINT:
	            {
	                geometry = readPointGeometry( /** @type {GeoJSONPoint} */object);
	                break;
	            }
	        case _GeometryType2.default.LINE_STRING:
	            {
	                geometry = readLineStringGeometry( /** @type {GeoJSONLineString} */object);
	                break;
	            }
	        case _GeometryType2.default.POLYGON:
	            {
	                geometry = readPolygonGeometry( /** @type {GeoJSONPolygon} */object);
	                break;
	            }
	        case _GeometryType2.default.MULTI_POINT:
	            {
	                geometry = readMultiPointGeometry( /** @type {GeoJSONMultiPoint} */object);
	                break;
	            }
	        case _GeometryType2.default.MULTI_LINE_STRING:
	            {
	                geometry = readMultiLineStringGeometry( /** @type {GeoJSONMultiLineString} */object);
	                break;
	            }
	        case _GeometryType2.default.MULTI_POLYGON:
	            {
	                geometry = readMultiPolygonGeometry( /** @type {GeoJSONMultiPolygon} */object);
	                break;
	            }
	        case _GeometryType2.default.GEOMETRY_COLLECTION:
	            {
	                geometry = readGeometryCollectionGeometry( /** @type {GeoJSONGeometryCollection} */object);
	                break;
	            }
	        default:
	            {
	                throw new Error('Unsupported GeoJSON type: ' + object.type);
	            }
	    }
	    return (0, _Feature3.transformGeometryWithOptions)(geometry, false, opt_options);
	}
	/**
	 * @param {GeoJSONGeometryCollection} object Object.
	 * @param {import("./Feature.js").ReadOptions=} opt_options Read options.
	 * @return {GeometryCollection} Geometry collection.
	 */
	function readGeometryCollectionGeometry(object, opt_options) {
	    var geometries = object['geometries'].map(
	    /**
	     * @param {GeoJSONGeometry} geometry Geometry.
	     * @return {import("../geom/Geometry.js").default} geometry Geometry.
	     */
	    function (geometry) {
	        return readGeometry(geometry, opt_options);
	    });
	    return new _GeometryCollection2.default(geometries);
	}
	/**
	 * @param {GeoJSONPoint} object Object.
	 * @return {Point} Point.
	 */
	function readPointGeometry(object) {
	    return new _Point2.default(object['coordinates']);
	}
	/**
	 * @param {GeoJSONLineString} object Object.
	 * @return {LineString} LineString.
	 */
	function readLineStringGeometry(object) {
	    return new _LineString2.default(object['coordinates']);
	}
	/**
	 * @param {GeoJSONMultiLineString} object Object.
	 * @return {MultiLineString} MultiLineString.
	 */
	function readMultiLineStringGeometry(object) {
	    return new _MultiLineString2.default(object['coordinates']);
	}
	/**
	 * @param {GeoJSONMultiPoint} object Object.
	 * @return {MultiPoint} MultiPoint.
	 */
	function readMultiPointGeometry(object) {
	    return new _MultiPoint2.default(object['coordinates']);
	}
	/**
	 * @param {GeoJSONMultiPolygon} object Object.
	 * @return {MultiPolygon} MultiPolygon.
	 */
	function readMultiPolygonGeometry(object) {
	    return new _MultiPolygon2.default(object['coordinates']);
	}
	/**
	 * @param {GeoJSONPolygon} object Object.
	 * @return {Polygon} Polygon.
	 */
	function readPolygonGeometry(object) {
	    return new _Polygon2.default(object['coordinates']);
	}
	/**
	 * @param {import("../geom/Geometry.js").default} geometry Geometry.
	 * @param {import("./Feature.js").WriteOptions=} opt_options Write options.
	 * @return {GeoJSONGeometry} GeoJSON geometry.
	 */
	function writeGeometry(geometry, opt_options) {
	    geometry = (0, _Feature3.transformGeometryWithOptions)(geometry, true, opt_options);
	    var type = geometry.getType();
	    /** @type {GeoJSONGeometry} */
	    var geoJSON;
	    switch (type) {
	        case _GeometryType2.default.POINT:
	            {
	                geoJSON = writePointGeometry( /** @type {Point} */geometry, opt_options);
	                break;
	            }
	        case _GeometryType2.default.LINE_STRING:
	            {
	                geoJSON = writeLineStringGeometry( /** @type {LineString} */geometry, opt_options);
	                break;
	            }
	        case _GeometryType2.default.POLYGON:
	            {
	                geoJSON = writePolygonGeometry( /** @type {Polygon} */geometry, opt_options);
	                break;
	            }
	        case _GeometryType2.default.MULTI_POINT:
	            {
	                geoJSON = writeMultiPointGeometry( /** @type {MultiPoint} */geometry, opt_options);
	                break;
	            }
	        case _GeometryType2.default.MULTI_LINE_STRING:
	            {
	                geoJSON = writeMultiLineStringGeometry( /** @type {MultiLineString} */geometry, opt_options);
	                break;
	            }
	        case _GeometryType2.default.MULTI_POLYGON:
	            {
	                geoJSON = writeMultiPolygonGeometry( /** @type {MultiPolygon} */geometry, opt_options);
	                break;
	            }
	        case _GeometryType2.default.GEOMETRY_COLLECTION:
	            {
	                geoJSON = writeGeometryCollectionGeometry( /** @type {GeometryCollection} */geometry, opt_options);
	                break;
	            }
	        case _GeometryType2.default.CIRCLE:
	            {
	                geoJSON = {
	                    type: 'GeometryCollection',
	                    geometries: []
	                };
	                break;
	            }
	        default:
	            {
	                throw new Error('Unsupported geometry type: ' + type);
	            }
	    }
	    return geoJSON;
	}
	/**
	 * @param {GeometryCollection} geometry Geometry.
	 * @param {import("./Feature.js").WriteOptions=} opt_options Write options.
	 * @return {GeoJSONGeometryCollection} GeoJSON geometry collection.
	 */
	function writeGeometryCollectionGeometry(geometry, opt_options) {
	    var geometries = geometry.getGeometriesArray().map(function (geometry) {
	        var options = (0, _obj.assign)({}, opt_options);
	        delete options.featureProjection;
	        return writeGeometry(geometry, options);
	    });
	    return {
	        type: 'GeometryCollection',
	        geometries: geometries
	    };
	}
	/**
	 * @param {LineString} geometry Geometry.
	 * @param {import("./Feature.js").WriteOptions=} opt_options Write options.
	 * @return {GeoJSONGeometry} GeoJSON geometry.
	 */
	function writeLineStringGeometry(geometry, opt_options) {
	    return {
	        type: 'LineString',
	        coordinates: geometry.getCoordinates()
	    };
	}
	/**
	 * @param {MultiLineString} geometry Geometry.
	 * @param {import("./Feature.js").WriteOptions=} opt_options Write options.
	 * @return {GeoJSONGeometry} GeoJSON geometry.
	 */
	function writeMultiLineStringGeometry(geometry, opt_options) {
	    return {
	        type: 'MultiLineString',
	        coordinates: geometry.getCoordinates()
	    };
	}
	/**
	 * @param {MultiPoint} geometry Geometry.
	 * @param {import("./Feature.js").WriteOptions=} opt_options Write options.
	 * @return {GeoJSONGeometry} GeoJSON geometry.
	 */
	function writeMultiPointGeometry(geometry, opt_options) {
	    return {
	        type: 'MultiPoint',
	        coordinates: geometry.getCoordinates()
	    };
	}
	/**
	 * @param {MultiPolygon} geometry Geometry.
	 * @param {import("./Feature.js").WriteOptions=} opt_options Write options.
	 * @return {GeoJSONGeometry} GeoJSON geometry.
	 */
	function writeMultiPolygonGeometry(geometry, opt_options) {
	    var right;
	    if (opt_options) {
	        right = opt_options.rightHanded;
	    }
	    return {
	        type: 'MultiPolygon',
	        coordinates: geometry.getCoordinates(right)
	    };
	}
	/**
	 * @param {Point} geometry Geometry.
	 * @param {import("./Feature.js").WriteOptions=} opt_options Write options.
	 * @return {GeoJSONGeometry} GeoJSON geometry.
	 */
	function writePointGeometry(geometry, opt_options) {
	    return {
	        type: 'Point',
	        coordinates: geometry.getCoordinates()
	    };
	}
	/**
	 * @param {Polygon} geometry Geometry.
	 * @param {import("./Feature.js").WriteOptions=} opt_options Write options.
	 * @return {GeoJSONGeometry} GeoJSON geometry.
	 */
	function writePolygonGeometry(geometry, opt_options) {
	    var right;
	    if (opt_options) {
	        right = opt_options.rightHanded;
	    }
	    return {
	        type: 'Polygon',
	        coordinates: geometry.getCoordinates(right)
	    };
	}
	exports.default = GeoJSON;
	//# sourceMappingURL=GeoJSON.js.map

/***/ }),
/* 271 */
/***/ (function(module, exports) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	exports.readHref = readHref;
	/**
	 * @module ol/format/XLink
	 */
	/**
	 * @const
	 * @type {string}
	 */
	var NAMESPACE_URI = 'http://www.w3.org/1999/xlink';
	/**
	 * @param {Element} node Node.
	 * @return {string|undefined} href.
	 */
	function readHref(node) {
	  return node.getAttributeNS(NAMESPACE_URI, 'href');
	}
	//# sourceMappingURL=XLink.js.map

/***/ }),
/* 272 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	
	var _xml = __webpack_require__(150);
	
	/**
	 * @classdesc
	 * Generic format for reading non-feature XML data
	 *
	 * @abstract
	 */
	var XML = /** @class */function () {
	    function XML() {}
	    /**
	     * Read the source document.
	     *
	     * @param {Document|Element|string} source The XML source.
	     * @return {Object} An object representing the source.
	     * @api
	     */
	    XML.prototype.read = function (source) {
	        if (!source) {
	            return null;
	        } else if (typeof source === 'string') {
	            var doc = (0, _xml.parse)(source);
	            return this.readFromDocument(doc);
	        } else if ((0, _xml.isDocument)(source)) {
	            return this.readFromDocument( /** @type {Document} */source);
	        } else {
	            return this.readFromNode( /** @type {Element} */source);
	        }
	    };
	    /**
	     * @abstract
	     * @param {Document} doc Document.
	     * @return {Object} Object
	     */
	    XML.prototype.readFromDocument = function (doc) {};
	    /**
	     * @abstract
	     * @param {Element} node Node.
	     * @return {Object} Object
	     */
	    XML.prototype.readFromNode = function (node) {};
	    return XML;
	}(); /**
	      * @module ol/format/XML
	      */
	exports.default = XML;
	//# sourceMappingURL=XML.js.map

/***/ }),
/* 273 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	exports.readBoolean = readBoolean;
	exports.readBooleanString = readBooleanString;
	exports.readDateTime = readDateTime;
	exports.readDecimal = readDecimal;
	exports.readDecimalString = readDecimalString;
	exports.readNonNegativeInteger = readNonNegativeInteger;
	exports.readNonNegativeIntegerString = readNonNegativeIntegerString;
	exports.readString = readString;
	exports.writeBooleanTextNode = writeBooleanTextNode;
	exports.writeCDATASection = writeCDATASection;
	exports.writeDateTimeTextNode = writeDateTimeTextNode;
	exports.writeDecimalTextNode = writeDecimalTextNode;
	exports.writeNonNegativeIntegerTextNode = writeNonNegativeIntegerTextNode;
	exports.writeStringTextNode = writeStringTextNode;
	
	var _xml = __webpack_require__(150);
	
	var _string = __webpack_require__(180);
	
	/**
	 * @param {Node} node Node.
	 * @return {boolean|undefined} Boolean.
	 */
	/**
	 * @module ol/format/xsd
	 */
	function readBoolean(node) {
	    var s = (0, _xml.getAllTextContent)(node, false);
	    return readBooleanString(s);
	}
	/**
	 * @param {string} string String.
	 * @return {boolean|undefined} Boolean.
	 */
	function readBooleanString(string) {
	    var m = /^\s*(true|1)|(false|0)\s*$/.exec(string);
	    if (m) {
	        return m[1] !== undefined || false;
	    } else {
	        return undefined;
	    }
	}
	/**
	 * @param {Node} node Node.
	 * @return {number|undefined} DateTime in seconds.
	 */
	function readDateTime(node) {
	    var s = (0, _xml.getAllTextContent)(node, false);
	    var dateTime = Date.parse(s);
	    return isNaN(dateTime) ? undefined : dateTime / 1000;
	}
	/**
	 * @param {Node} node Node.
	 * @return {number|undefined} Decimal.
	 */
	function readDecimal(node) {
	    var s = (0, _xml.getAllTextContent)(node, false);
	    return readDecimalString(s);
	}
	/**
	 * @param {string} string String.
	 * @return {number|undefined} Decimal.
	 */
	function readDecimalString(string) {
	    // FIXME check spec
	    var m = /^\s*([+\-]?\d*\.?\d+(?:e[+\-]?\d+)?)\s*$/i.exec(string);
	    if (m) {
	        return parseFloat(m[1]);
	    } else {
	        return undefined;
	    }
	}
	/**
	 * @param {Node} node Node.
	 * @return {number|undefined} Non negative integer.
	 */
	function readNonNegativeInteger(node) {
	    var s = (0, _xml.getAllTextContent)(node, false);
	    return readNonNegativeIntegerString(s);
	}
	/**
	 * @param {string} string String.
	 * @return {number|undefined} Non negative integer.
	 */
	function readNonNegativeIntegerString(string) {
	    var m = /^\s*(\d+)\s*$/.exec(string);
	    if (m) {
	        return parseInt(m[1], 10);
	    } else {
	        return undefined;
	    }
	}
	/**
	 * @param {Node} node Node.
	 * @return {string|undefined} String.
	 */
	function readString(node) {
	    return (0, _xml.getAllTextContent)(node, false).trim();
	}
	/**
	 * @param {Node} node Node to append a TextNode with the boolean to.
	 * @param {boolean} bool Boolean.
	 */
	function writeBooleanTextNode(node, bool) {
	    writeStringTextNode(node, bool ? '1' : '0');
	}
	/**
	 * @param {Node} node Node to append a CDATA Section with the string to.
	 * @param {string} string String.
	 */
	function writeCDATASection(node, string) {
	    node.appendChild(_xml.DOCUMENT.createCDATASection(string));
	}
	/**
	 * @param {Node} node Node to append a TextNode with the dateTime to.
	 * @param {number} dateTime DateTime in seconds.
	 */
	function writeDateTimeTextNode(node, dateTime) {
	    var date = new Date(dateTime * 1000);
	    var string = date.getUTCFullYear() + '-' + (0, _string.padNumber)(date.getUTCMonth() + 1, 2) + '-' + (0, _string.padNumber)(date.getUTCDate(), 2) + 'T' + (0, _string.padNumber)(date.getUTCHours(), 2) + ':' + (0, _string.padNumber)(date.getUTCMinutes(), 2) + ':' + (0, _string.padNumber)(date.getUTCSeconds(), 2) + 'Z';
	    node.appendChild(_xml.DOCUMENT.createTextNode(string));
	}
	/**
	 * @param {Node} node Node to append a TextNode with the decimal to.
	 * @param {number} decimal Decimal.
	 */
	function writeDecimalTextNode(node, decimal) {
	    var string = decimal.toPrecision();
	    node.appendChild(_xml.DOCUMENT.createTextNode(string));
	}
	/**
	 * @param {Node} node Node to append a TextNode with the decimal to.
	 * @param {number} nonNegativeInteger Non negative integer.
	 */
	function writeNonNegativeIntegerTextNode(node, nonNegativeInteger) {
	    var string = nonNegativeInteger.toString();
	    node.appendChild(_xml.DOCUMENT.createTextNode(string));
	}
	/**
	 * @param {Node} node Node to append a TextNode with the string to.
	 * @param {string} string String.
	 */
	function writeStringTextNode(node, string) {
	    node.appendChild(_xml.DOCUMENT.createTextNode(string));
	}
	//# sourceMappingURL=xsd.js.map

/***/ }),
/* 274 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	
	var _util = __webpack_require__(14);
	
	var _Object = __webpack_require__(32);
	
	var _Object2 = _interopRequireDefault(_Object);
	
	var _extent = __webpack_require__(4);
	
	var _transform = __webpack_require__(104);
	
	var _proj = __webpack_require__(16);
	
	var _Units = __webpack_require__(65);
	
	var _Units2 = _interopRequireDefault(_Units);
	
	var _transform2 = __webpack_require__(48);
	
	var _functions = __webpack_require__(31);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var __extends = undefined && undefined.__extends || function () {
	    var _extendStatics = function extendStatics(d, b) {
	        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	            d.__proto__ = b;
	        } || function (d, b) {
	            for (var p in b) {
	                if (b.hasOwnProperty(p)) d[p] = b[p];
	            }
	        };
	        return _extendStatics(d, b);
	    };
	    return function (d, b) {
	        _extendStatics(d, b);
	        function __() {
	            this.constructor = d;
	        }
	        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	    };
	}();
	/**
	 * @module ol/geom/Geometry
	 */
	
	/**
	 * @type {import("../transform.js").Transform}
	 */
	var tmpTransform = (0, _transform2.create)();
	/**
	 * @classdesc
	 * Abstract base class; normally only used for creating subclasses and not
	 * instantiated in apps.
	 * Base class for vector geometries.
	 *
	 * To get notified of changes to the geometry, register a listener for the
	 * generic `change` event on your geometry instance.
	 *
	 * @abstract
	 * @api
	 */
	var Geometry = /** @class */function (_super) {
	    __extends(Geometry, _super);
	    function Geometry() {
	        var _this = _super.call(this) || this;
	        /**
	         * @private
	         * @type {import("../extent.js").Extent}
	         */
	        _this.extent_ = (0, _extent.createEmpty)();
	        /**
	         * @private
	         * @type {number}
	         */
	        _this.extentRevision_ = -1;
	        /**
	         * @protected
	         * @type {number}
	         */
	        _this.simplifiedGeometryMaxMinSquaredTolerance = 0;
	        /**
	         * @protected
	         * @type {number}
	         */
	        _this.simplifiedGeometryRevision = 0;
	        /**
	         * Get a transformed and simplified version of the geometry.
	         * @abstract
	         * @param {number} revision The geometry revision.
	         * @param {number} squaredTolerance Squared tolerance.
	         * @param {import("../proj.js").TransformFunction} [opt_transform] Optional transform function.
	         * @return {Geometry} Simplified geometry.
	         */
	        _this.simplifyTransformedInternal = (0, _functions.memoizeOne)(function (revision, squaredTolerance, opt_transform) {
	            if (!opt_transform) {
	                return this.getSimplifiedGeometry(squaredTolerance);
	            }
	            var clone = this.clone();
	            clone.applyTransform(opt_transform);
	            return clone.getSimplifiedGeometry(squaredTolerance);
	        });
	        return _this;
	    }
	    /**
	     * Get a transformed and simplified version of the geometry.
	     * @abstract
	     * @param {number} squaredTolerance Squared tolerance.
	     * @param {import("../proj.js").TransformFunction} [opt_transform] Optional transform function.
	     * @return {Geometry} Simplified geometry.
	     */
	    Geometry.prototype.simplifyTransformed = function (squaredTolerance, opt_transform) {
	        return this.simplifyTransformedInternal(this.getRevision(), squaredTolerance, opt_transform);
	    };
	    /**
	     * Make a complete copy of the geometry.
	     * @abstract
	     * @return {!Geometry} Clone.
	     */
	    Geometry.prototype.clone = function () {
	        return (0, _util.abstract)();
	    };
	    /**
	     * @abstract
	     * @param {number} x X.
	     * @param {number} y Y.
	     * @param {import("../coordinate.js").Coordinate} closestPoint Closest point.
	     * @param {number} minSquaredDistance Minimum squared distance.
	     * @return {number} Minimum squared distance.
	     */
	    Geometry.prototype.closestPointXY = function (x, y, closestPoint, minSquaredDistance) {
	        return (0, _util.abstract)();
	    };
	    /**
	     * @param {number} x X.
	     * @param {number} y Y.
	     * @return {boolean} Contains (x, y).
	     */
	    Geometry.prototype.containsXY = function (x, y) {
	        var coord = this.getClosestPoint([x, y]);
	        return coord[0] === x && coord[1] === y;
	    };
	    /**
	     * Return the closest point of the geometry to the passed point as
	     * {@link module:ol/coordinate~Coordinate coordinate}.
	     * @param {import("../coordinate.js").Coordinate} point Point.
	     * @param {import("../coordinate.js").Coordinate=} opt_closestPoint Closest point.
	     * @return {import("../coordinate.js").Coordinate} Closest point.
	     * @api
	     */
	    Geometry.prototype.getClosestPoint = function (point, opt_closestPoint) {
	        var closestPoint = opt_closestPoint ? opt_closestPoint : [NaN, NaN];
	        this.closestPointXY(point[0], point[1], closestPoint, Infinity);
	        return closestPoint;
	    };
	    /**
	     * Returns true if this geometry includes the specified coordinate. If the
	     * coordinate is on the boundary of the geometry, returns false.
	     * @param {import("../coordinate.js").Coordinate} coordinate Coordinate.
	     * @return {boolean} Contains coordinate.
	     * @api
	     */
	    Geometry.prototype.intersectsCoordinate = function (coordinate) {
	        return this.containsXY(coordinate[0], coordinate[1]);
	    };
	    /**
	     * @abstract
	     * @param {import("../extent.js").Extent} extent Extent.
	     * @protected
	     * @return {import("../extent.js").Extent} extent Extent.
	     */
	    Geometry.prototype.computeExtent = function (extent) {
	        return (0, _util.abstract)();
	    };
	    /**
	     * Get the extent of the geometry.
	     * @param {import("../extent.js").Extent=} opt_extent Extent.
	     * @return {import("../extent.js").Extent} extent Extent.
	     * @api
	     */
	    Geometry.prototype.getExtent = function (opt_extent) {
	        if (this.extentRevision_ != this.getRevision()) {
	            this.extent_ = this.computeExtent(this.extent_);
	            this.extentRevision_ = this.getRevision();
	        }
	        return (0, _extent.returnOrUpdate)(this.extent_, opt_extent);
	    };
	    /**
	     * Rotate the geometry around a given coordinate. This modifies the geometry
	     * coordinates in place.
	     * @abstract
	     * @param {number} angle Rotation angle in radians.
	     * @param {import("../coordinate.js").Coordinate} anchor The rotation center.
	     * @api
	     */
	    Geometry.prototype.rotate = function (angle, anchor) {
	        (0, _util.abstract)();
	    };
	    /**
	     * Scale the geometry (with an optional origin).  This modifies the geometry
	     * coordinates in place.
	     * @abstract
	     * @param {number} sx The scaling factor in the x-direction.
	     * @param {number=} opt_sy The scaling factor in the y-direction (defaults to
	     *     sx).
	     * @param {import("../coordinate.js").Coordinate=} opt_anchor The scale origin (defaults to the center
	     *     of the geometry extent).
	     * @api
	     */
	    Geometry.prototype.scale = function (sx, opt_sy, opt_anchor) {
	        (0, _util.abstract)();
	    };
	    /**
	     * Create a simplified version of this geometry.  For linestrings, this uses
	     * the [Douglas Peucker](https://en.wikipedia.org/wiki/Ramer-Douglas-Peucker_algorithm)
	     * algorithm.  For polygons, a quantization-based
	     * simplification is used to preserve topology.
	     * @param {number} tolerance The tolerance distance for simplification.
	     * @return {Geometry} A new, simplified version of the original geometry.
	     * @api
	     */
	    Geometry.prototype.simplify = function (tolerance) {
	        return this.getSimplifiedGeometry(tolerance * tolerance);
	    };
	    /**
	     * Create a simplified version of this geometry using the Douglas Peucker
	     * algorithm.
	     * See https://en.wikipedia.org/wiki/Ramer-Douglas-Peucker_algorithm.
	     * @abstract
	     * @param {number} squaredTolerance Squared tolerance.
	     * @return {Geometry} Simplified geometry.
	     */
	    Geometry.prototype.getSimplifiedGeometry = function (squaredTolerance) {
	        return (0, _util.abstract)();
	    };
	    /**
	     * Get the type of this geometry.
	     * @abstract
	     * @return {import("./GeometryType.js").default} Geometry type.
	     */
	    Geometry.prototype.getType = function () {
	        return (0, _util.abstract)();
	    };
	    /**
	     * Apply a transform function to the coordinates of the geometry.
	     * The geometry is modified in place.
	     * If you do not want the geometry modified in place, first `clone()` it and
	     * then use this function on the clone.
	     * @abstract
	     * @param {import("../proj.js").TransformFunction} transformFn Transform function.
	     * Called with a flat array of geometry coordinates.
	     */
	    Geometry.prototype.applyTransform = function (transformFn) {
	        (0, _util.abstract)();
	    };
	    /**
	     * Test if the geometry and the passed extent intersect.
	     * @abstract
	     * @param {import("../extent.js").Extent} extent Extent.
	     * @return {boolean} `true` if the geometry and the extent intersect.
	     */
	    Geometry.prototype.intersectsExtent = function (extent) {
	        return (0, _util.abstract)();
	    };
	    /**
	     * Translate the geometry.  This modifies the geometry coordinates in place.  If
	     * instead you want a new geometry, first `clone()` this geometry.
	     * @abstract
	     * @param {number} deltaX Delta X.
	     * @param {number} deltaY Delta Y.
	     * @api
	     */
	    Geometry.prototype.translate = function (deltaX, deltaY) {
	        (0, _util.abstract)();
	    };
	    /**
	     * Transform each coordinate of the geometry from one coordinate reference
	     * system to another. The geometry is modified in place.
	     * For example, a line will be transformed to a line and a circle to a circle.
	     * If you do not want the geometry modified in place, first `clone()` it and
	     * then use this function on the clone.
	     *
	     * @param {import("../proj.js").ProjectionLike} source The current projection.  Can be a
	     *     string identifier or a {@link module:ol/proj/Projection~Projection} object.
	     * @param {import("../proj.js").ProjectionLike} destination The desired projection.  Can be a
	     *     string identifier or a {@link module:ol/proj/Projection~Projection} object.
	     * @return {Geometry} This geometry.  Note that original geometry is
	     *     modified in place.
	     * @api
	     */
	    Geometry.prototype.transform = function (source, destination) {
	        /** @type {import("../proj/Projection.js").default} */
	        var sourceProj = (0, _proj.get)(source);
	        var transformFn = sourceProj.getUnits() == _Units2.default.TILE_PIXELS ? function (inCoordinates, outCoordinates, stride) {
	            var pixelExtent = sourceProj.getExtent();
	            var projectedExtent = sourceProj.getWorldExtent();
	            var scale = (0, _extent.getHeight)(projectedExtent) / (0, _extent.getHeight)(pixelExtent);
	            (0, _transform2.compose)(tmpTransform, projectedExtent[0], projectedExtent[3], scale, -scale, 0, 0, 0);
	            (0, _transform.transform2D)(inCoordinates, 0, inCoordinates.length, stride, tmpTransform, outCoordinates);
	            return (0, _proj.getTransform)(sourceProj, destination)(inCoordinates, outCoordinates, stride);
	        } : (0, _proj.getTransform)(sourceProj, destination);
	        this.applyTransform(transformFn);
	        return this;
	    };
	    return Geometry;
	}(_Object2.default);
	exports.default = Geometry;
	//# sourceMappingURL=Geometry.js.map

/***/ }),
/* 275 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	
	var _array = __webpack_require__(18);
	
	var _extent = __webpack_require__(4);
	
	var _GeometryLayout = __webpack_require__(102);
	
	var _GeometryLayout2 = _interopRequireDefault(_GeometryLayout);
	
	var _GeometryType = __webpack_require__(22);
	
	var _GeometryType2 = _interopRequireDefault(_GeometryType);
	
	var _LineString = __webpack_require__(171);
	
	var _LineString2 = _interopRequireDefault(_LineString);
	
	var _SimpleGeometry = __webpack_require__(64);
	
	var _SimpleGeometry2 = _interopRequireDefault(_SimpleGeometry);
	
	var _closest = __webpack_require__(125);
	
	var _deflate = __webpack_require__(72);
	
	var _inflate = __webpack_require__(86);
	
	var _interpolate = __webpack_require__(278);
	
	var _intersectsextent = __webpack_require__(146);
	
	var _simplify = __webpack_require__(103);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var __extends = undefined && undefined.__extends || function () {
	    var _extendStatics = function extendStatics(d, b) {
	        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	            d.__proto__ = b;
	        } || function (d, b) {
	            for (var p in b) {
	                if (b.hasOwnProperty(p)) d[p] = b[p];
	            }
	        };
	        return _extendStatics(d, b);
	    };
	    return function (d, b) {
	        _extendStatics(d, b);
	        function __() {
	            this.constructor = d;
	        }
	        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	    };
	}();
	/**
	 * @module ol/geom/MultiLineString
	 */
	
	/**
	 * @classdesc
	 * Multi-linestring geometry.
	 *
	 * @api
	 */
	var MultiLineString = /** @class */function (_super) {
	    __extends(MultiLineString, _super);
	    /**
	     * @param {Array<Array<import("../coordinate.js").Coordinate>|LineString>|Array<number>} coordinates
	     *     Coordinates or LineString geometries. (For internal use, flat coordinates in
	     *     combination with `opt_layout` and `opt_ends` are also accepted.)
	     * @param {GeometryLayout=} opt_layout Layout.
	     * @param {Array<number>=} opt_ends Flat coordinate ends for internal use.
	     */
	    function MultiLineString(coordinates, opt_layout, opt_ends) {
	        var _this = _super.call(this) || this;
	        /**
	         * @type {Array<number>}
	         * @private
	         */
	        _this.ends_ = [];
	        /**
	         * @private
	         * @type {number}
	         */
	        _this.maxDelta_ = -1;
	        /**
	         * @private
	         * @type {number}
	         */
	        _this.maxDeltaRevision_ = -1;
	        if (Array.isArray(coordinates[0])) {
	            _this.setCoordinates( /** @type {Array<Array<import("../coordinate.js").Coordinate>>} */coordinates, opt_layout);
	        } else if (opt_layout !== undefined && opt_ends) {
	            _this.setFlatCoordinates(opt_layout, /** @type {Array<number>} */coordinates);
	            _this.ends_ = opt_ends;
	        } else {
	            var layout = _this.getLayout();
	            var lineStrings = /** @type {Array<LineString>} */coordinates;
	            var flatCoordinates = [];
	            var ends = [];
	            for (var i = 0, ii = lineStrings.length; i < ii; ++i) {
	                var lineString = lineStrings[i];
	                if (i === 0) {
	                    layout = lineString.getLayout();
	                }
	                (0, _array.extend)(flatCoordinates, lineString.getFlatCoordinates());
	                ends.push(flatCoordinates.length);
	            }
	            _this.setFlatCoordinates(layout, flatCoordinates);
	            _this.ends_ = ends;
	        }
	        return _this;
	    }
	    /**
	     * Append the passed linestring to the multilinestring.
	     * @param {LineString} lineString LineString.
	     * @api
	     */
	    MultiLineString.prototype.appendLineString = function (lineString) {
	        if (!this.flatCoordinates) {
	            this.flatCoordinates = lineString.getFlatCoordinates().slice();
	        } else {
	            (0, _array.extend)(this.flatCoordinates, lineString.getFlatCoordinates().slice());
	        }
	        this.ends_.push(this.flatCoordinates.length);
	        this.changed();
	    };
	    /**
	     * Make a complete copy of the geometry.
	     * @return {!MultiLineString} Clone.
	     * @override
	     * @api
	     */
	    MultiLineString.prototype.clone = function () {
	        return new MultiLineString(this.flatCoordinates.slice(), this.layout, this.ends_.slice());
	    };
	    /**
	     * @inheritDoc
	     */
	    MultiLineString.prototype.closestPointXY = function (x, y, closestPoint, minSquaredDistance) {
	        if (minSquaredDistance < (0, _extent.closestSquaredDistanceXY)(this.getExtent(), x, y)) {
	            return minSquaredDistance;
	        }
	        if (this.maxDeltaRevision_ != this.getRevision()) {
	            this.maxDelta_ = Math.sqrt((0, _closest.arrayMaxSquaredDelta)(this.flatCoordinates, 0, this.ends_, this.stride, 0));
	            this.maxDeltaRevision_ = this.getRevision();
	        }
	        return (0, _closest.assignClosestArrayPoint)(this.flatCoordinates, 0, this.ends_, this.stride, this.maxDelta_, false, x, y, closestPoint, minSquaredDistance);
	    };
	    /**
	     * Returns the coordinate at `m` using linear interpolation, or `null` if no
	     * such coordinate exists.
	     *
	     * `opt_extrapolate` controls extrapolation beyond the range of Ms in the
	     * MultiLineString. If `opt_extrapolate` is `true` then Ms less than the first
	     * M will return the first coordinate and Ms greater than the last M will
	     * return the last coordinate.
	     *
	     * `opt_interpolate` controls interpolation between consecutive LineStrings
	     * within the MultiLineString. If `opt_interpolate` is `true` the coordinates
	     * will be linearly interpolated between the last coordinate of one LineString
	     * and the first coordinate of the next LineString.  If `opt_interpolate` is
	     * `false` then the function will return `null` for Ms falling between
	     * LineStrings.
	     *
	     * @param {number} m M.
	     * @param {boolean=} opt_extrapolate Extrapolate. Default is `false`.
	     * @param {boolean=} opt_interpolate Interpolate. Default is `false`.
	     * @return {import("../coordinate.js").Coordinate} Coordinate.
	     * @api
	     */
	    MultiLineString.prototype.getCoordinateAtM = function (m, opt_extrapolate, opt_interpolate) {
	        if (this.layout != _GeometryLayout2.default.XYM && this.layout != _GeometryLayout2.default.XYZM || this.flatCoordinates.length === 0) {
	            return null;
	        }
	        var extrapolate = opt_extrapolate !== undefined ? opt_extrapolate : false;
	        var interpolate = opt_interpolate !== undefined ? opt_interpolate : false;
	        return (0, _interpolate.lineStringsCoordinateAtM)(this.flatCoordinates, 0, this.ends_, this.stride, m, extrapolate, interpolate);
	    };
	    /**
	     * Return the coordinates of the multilinestring.
	     * @return {Array<Array<import("../coordinate.js").Coordinate>>} Coordinates.
	     * @override
	     * @api
	     */
	    MultiLineString.prototype.getCoordinates = function () {
	        return (0, _inflate.inflateCoordinatesArray)(this.flatCoordinates, 0, this.ends_, this.stride);
	    };
	    /**
	     * @return {Array<number>} Ends.
	     */
	    MultiLineString.prototype.getEnds = function () {
	        return this.ends_;
	    };
	    /**
	     * Return the linestring at the specified index.
	     * @param {number} index Index.
	     * @return {LineString} LineString.
	     * @api
	     */
	    MultiLineString.prototype.getLineString = function (index) {
	        if (index < 0 || this.ends_.length <= index) {
	            return null;
	        }
	        return new _LineString2.default(this.flatCoordinates.slice(index === 0 ? 0 : this.ends_[index - 1], this.ends_[index]), this.layout);
	    };
	    /**
	     * Return the linestrings of this multilinestring.
	     * @return {Array<LineString>} LineStrings.
	     * @api
	     */
	    MultiLineString.prototype.getLineStrings = function () {
	        var flatCoordinates = this.flatCoordinates;
	        var ends = this.ends_;
	        var layout = this.layout;
	        /** @type {Array<LineString>} */
	        var lineStrings = [];
	        var offset = 0;
	        for (var i = 0, ii = ends.length; i < ii; ++i) {
	            var end = ends[i];
	            var lineString = new _LineString2.default(flatCoordinates.slice(offset, end), layout);
	            lineStrings.push(lineString);
	            offset = end;
	        }
	        return lineStrings;
	    };
	    /**
	     * @return {Array<number>} Flat midpoints.
	     */
	    MultiLineString.prototype.getFlatMidpoints = function () {
	        var midpoints = [];
	        var flatCoordinates = this.flatCoordinates;
	        var offset = 0;
	        var ends = this.ends_;
	        var stride = this.stride;
	        for (var i = 0, ii = ends.length; i < ii; ++i) {
	            var end = ends[i];
	            var midpoint = (0, _interpolate.interpolatePoint)(flatCoordinates, offset, end, stride, 0.5);
	            (0, _array.extend)(midpoints, midpoint);
	            offset = end;
	        }
	        return midpoints;
	    };
	    /**
	     * @inheritDoc
	     */
	    MultiLineString.prototype.getSimplifiedGeometryInternal = function (squaredTolerance) {
	        var simplifiedFlatCoordinates = [];
	        var simplifiedEnds = [];
	        simplifiedFlatCoordinates.length = (0, _simplify.douglasPeuckerArray)(this.flatCoordinates, 0, this.ends_, this.stride, squaredTolerance, simplifiedFlatCoordinates, 0, simplifiedEnds);
	        return new MultiLineString(simplifiedFlatCoordinates, _GeometryLayout2.default.XY, simplifiedEnds);
	    };
	    /**
	     * @inheritDoc
	     * @api
	     */
	    MultiLineString.prototype.getType = function () {
	        return _GeometryType2.default.MULTI_LINE_STRING;
	    };
	    /**
	     * @inheritDoc
	     * @api
	     */
	    MultiLineString.prototype.intersectsExtent = function (extent) {
	        return (0, _intersectsextent.intersectsLineStringArray)(this.flatCoordinates, 0, this.ends_, this.stride, extent);
	    };
	    /**
	     * Set the coordinates of the multilinestring.
	     * @param {!Array<Array<import("../coordinate.js").Coordinate>>} coordinates Coordinates.
	     * @param {GeometryLayout=} opt_layout Layout.
	     * @override
	     * @api
	     */
	    MultiLineString.prototype.setCoordinates = function (coordinates, opt_layout) {
	        this.setLayout(opt_layout, coordinates, 2);
	        if (!this.flatCoordinates) {
	            this.flatCoordinates = [];
	        }
	        var ends = (0, _deflate.deflateCoordinatesArray)(this.flatCoordinates, 0, coordinates, this.stride, this.ends_);
	        this.flatCoordinates.length = ends.length === 0 ? 0 : ends[ends.length - 1];
	        this.changed();
	    };
	    return MultiLineString;
	}(_SimpleGeometry2.default);
	exports.default = MultiLineString;
	//# sourceMappingURL=MultiLineString.js.map

/***/ }),
/* 276 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	
	var _array = __webpack_require__(18);
	
	var _extent = __webpack_require__(4);
	
	var _GeometryLayout = __webpack_require__(102);
	
	var _GeometryLayout2 = _interopRequireDefault(_GeometryLayout);
	
	var _GeometryType = __webpack_require__(22);
	
	var _GeometryType2 = _interopRequireDefault(_GeometryType);
	
	var _MultiPoint = __webpack_require__(172);
	
	var _MultiPoint2 = _interopRequireDefault(_MultiPoint);
	
	var _Polygon = __webpack_require__(57);
	
	var _Polygon2 = _interopRequireDefault(_Polygon);
	
	var _SimpleGeometry = __webpack_require__(64);
	
	var _SimpleGeometry2 = _interopRequireDefault(_SimpleGeometry);
	
	var _area = __webpack_require__(173);
	
	var _center = __webpack_require__(597);
	
	var _closest = __webpack_require__(125);
	
	var _contains = __webpack_require__(145);
	
	var _deflate = __webpack_require__(72);
	
	var _inflate = __webpack_require__(86);
	
	var _interiorpoint = __webpack_require__(277);
	
	var _intersectsextent = __webpack_require__(146);
	
	var _orient = __webpack_require__(280);
	
	var _simplify = __webpack_require__(103);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var __extends = undefined && undefined.__extends || function () {
	    var _extendStatics = function extendStatics(d, b) {
	        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	            d.__proto__ = b;
	        } || function (d, b) {
	            for (var p in b) {
	                if (b.hasOwnProperty(p)) d[p] = b[p];
	            }
	        };
	        return _extendStatics(d, b);
	    };
	    return function (d, b) {
	        _extendStatics(d, b);
	        function __() {
	            this.constructor = d;
	        }
	        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	    };
	}();
	/**
	 * @module ol/geom/MultiPolygon
	 */
	
	/**
	 * @classdesc
	 * Multi-polygon geometry.
	 *
	 * @api
	 */
	var MultiPolygon = /** @class */function (_super) {
	    __extends(MultiPolygon, _super);
	    /**
	     * @param {Array<Array<Array<import("../coordinate.js").Coordinate>>|Polygon>|Array<number>} coordinates Coordinates.
	     *     For internal use, flat coordinates in combination with `opt_layout` and `opt_endss` are also accepted.
	     * @param {GeometryLayout=} opt_layout Layout.
	     * @param {Array<Array<number>>=} opt_endss Array of ends for internal use with flat coordinates.
	     */
	    function MultiPolygon(coordinates, opt_layout, opt_endss) {
	        var _this = _super.call(this) || this;
	        /**
	         * @type {Array<Array<number>>}
	         * @private
	         */
	        _this.endss_ = [];
	        /**
	         * @private
	         * @type {number}
	         */
	        _this.flatInteriorPointsRevision_ = -1;
	        /**
	         * @private
	         * @type {Array<number>}
	         */
	        _this.flatInteriorPoints_ = null;
	        /**
	         * @private
	         * @type {number}
	         */
	        _this.maxDelta_ = -1;
	        /**
	         * @private
	         * @type {number}
	         */
	        _this.maxDeltaRevision_ = -1;
	        /**
	         * @private
	         * @type {number}
	         */
	        _this.orientedRevision_ = -1;
	        /**
	         * @private
	         * @type {Array<number>}
	         */
	        _this.orientedFlatCoordinates_ = null;
	        if (!opt_endss && !Array.isArray(coordinates[0])) {
	            var layout = _this.getLayout();
	            var polygons = /** @type {Array<Polygon>} */coordinates;
	            var flatCoordinates = [];
	            var endss = [];
	            for (var i = 0, ii = polygons.length; i < ii; ++i) {
	                var polygon = polygons[i];
	                if (i === 0) {
	                    layout = polygon.getLayout();
	                }
	                var offset = flatCoordinates.length;
	                var ends = polygon.getEnds();
	                for (var j = 0, jj = ends.length; j < jj; ++j) {
	                    ends[j] += offset;
	                }
	                (0, _array.extend)(flatCoordinates, polygon.getFlatCoordinates());
	                endss.push(ends);
	            }
	            opt_layout = layout;
	            coordinates = flatCoordinates;
	            opt_endss = endss;
	        }
	        if (opt_layout !== undefined && opt_endss) {
	            _this.setFlatCoordinates(opt_layout, /** @type {Array<number>} */coordinates);
	            _this.endss_ = opt_endss;
	        } else {
	            _this.setCoordinates( /** @type {Array<Array<Array<import("../coordinate.js").Coordinate>>>} */coordinates, opt_layout);
	        }
	        return _this;
	    }
	    /**
	     * Append the passed polygon to this multipolygon.
	     * @param {Polygon} polygon Polygon.
	     * @api
	     */
	    MultiPolygon.prototype.appendPolygon = function (polygon) {
	        /** @type {Array<number>} */
	        var ends;
	        if (!this.flatCoordinates) {
	            this.flatCoordinates = polygon.getFlatCoordinates().slice();
	            ends = polygon.getEnds().slice();
	            this.endss_.push();
	        } else {
	            var offset = this.flatCoordinates.length;
	            (0, _array.extend)(this.flatCoordinates, polygon.getFlatCoordinates());
	            ends = polygon.getEnds().slice();
	            for (var i = 0, ii = ends.length; i < ii; ++i) {
	                ends[i] += offset;
	            }
	        }
	        this.endss_.push(ends);
	        this.changed();
	    };
	    /**
	     * Make a complete copy of the geometry.
	     * @return {!MultiPolygon} Clone.
	     * @override
	     * @api
	     */
	    MultiPolygon.prototype.clone = function () {
	        var len = this.endss_.length;
	        var newEndss = new Array(len);
	        for (var i = 0; i < len; ++i) {
	            newEndss[i] = this.endss_[i].slice();
	        }
	        return new MultiPolygon(this.flatCoordinates.slice(), this.layout, newEndss);
	    };
	    /**
	     * @inheritDoc
	     */
	    MultiPolygon.prototype.closestPointXY = function (x, y, closestPoint, minSquaredDistance) {
	        if (minSquaredDistance < (0, _extent.closestSquaredDistanceXY)(this.getExtent(), x, y)) {
	            return minSquaredDistance;
	        }
	        if (this.maxDeltaRevision_ != this.getRevision()) {
	            this.maxDelta_ = Math.sqrt((0, _closest.multiArrayMaxSquaredDelta)(this.flatCoordinates, 0, this.endss_, this.stride, 0));
	            this.maxDeltaRevision_ = this.getRevision();
	        }
	        return (0, _closest.assignClosestMultiArrayPoint)(this.getOrientedFlatCoordinates(), 0, this.endss_, this.stride, this.maxDelta_, true, x, y, closestPoint, minSquaredDistance);
	    };
	    /**
	     * @inheritDoc
	     */
	    MultiPolygon.prototype.containsXY = function (x, y) {
	        return (0, _contains.linearRingssContainsXY)(this.getOrientedFlatCoordinates(), 0, this.endss_, this.stride, x, y);
	    };
	    /**
	     * Return the area of the multipolygon on projected plane.
	     * @return {number} Area (on projected plane).
	     * @api
	     */
	    MultiPolygon.prototype.getArea = function () {
	        return (0, _area.linearRingss)(this.getOrientedFlatCoordinates(), 0, this.endss_, this.stride);
	    };
	    /**
	     * Get the coordinate array for this geometry.  This array has the structure
	     * of a GeoJSON coordinate array for multi-polygons.
	     *
	     * @param {boolean=} opt_right Orient coordinates according to the right-hand
	     *     rule (counter-clockwise for exterior and clockwise for interior rings).
	     *     If `false`, coordinates will be oriented according to the left-hand rule
	     *     (clockwise for exterior and counter-clockwise for interior rings).
	     *     By default, coordinate orientation will depend on how the geometry was
	     *     constructed.
	     * @return {Array<Array<Array<import("../coordinate.js").Coordinate>>>} Coordinates.
	     * @override
	     * @api
	     */
	    MultiPolygon.prototype.getCoordinates = function (opt_right) {
	        var flatCoordinates;
	        if (opt_right !== undefined) {
	            flatCoordinates = this.getOrientedFlatCoordinates().slice();
	            (0, _orient.orientLinearRingsArray)(flatCoordinates, 0, this.endss_, this.stride, opt_right);
	        } else {
	            flatCoordinates = this.flatCoordinates;
	        }
	        return (0, _inflate.inflateMultiCoordinatesArray)(flatCoordinates, 0, this.endss_, this.stride);
	    };
	    /**
	     * @return {Array<Array<number>>} Endss.
	     */
	    MultiPolygon.prototype.getEndss = function () {
	        return this.endss_;
	    };
	    /**
	     * @return {Array<number>} Flat interior points.
	     */
	    MultiPolygon.prototype.getFlatInteriorPoints = function () {
	        if (this.flatInteriorPointsRevision_ != this.getRevision()) {
	            var flatCenters = (0, _center.linearRingss)(this.flatCoordinates, 0, this.endss_, this.stride);
	            this.flatInteriorPoints_ = (0, _interiorpoint.getInteriorPointsOfMultiArray)(this.getOrientedFlatCoordinates(), 0, this.endss_, this.stride, flatCenters);
	            this.flatInteriorPointsRevision_ = this.getRevision();
	        }
	        return this.flatInteriorPoints_;
	    };
	    /**
	     * Return the interior points as {@link module:ol/geom/MultiPoint multipoint}.
	     * @return {MultiPoint} Interior points as XYM coordinates, where M is
	     * the length of the horizontal intersection that the point belongs to.
	     * @api
	     */
	    MultiPolygon.prototype.getInteriorPoints = function () {
	        return new _MultiPoint2.default(this.getFlatInteriorPoints().slice(), _GeometryLayout2.default.XYM);
	    };
	    /**
	     * @return {Array<number>} Oriented flat coordinates.
	     */
	    MultiPolygon.prototype.getOrientedFlatCoordinates = function () {
	        if (this.orientedRevision_ != this.getRevision()) {
	            var flatCoordinates = this.flatCoordinates;
	            if ((0, _orient.linearRingssAreOriented)(flatCoordinates, 0, this.endss_, this.stride)) {
	                this.orientedFlatCoordinates_ = flatCoordinates;
	            } else {
	                this.orientedFlatCoordinates_ = flatCoordinates.slice();
	                this.orientedFlatCoordinates_.length = (0, _orient.orientLinearRingsArray)(this.orientedFlatCoordinates_, 0, this.endss_, this.stride);
	            }
	            this.orientedRevision_ = this.getRevision();
	        }
	        return this.orientedFlatCoordinates_;
	    };
	    /**
	     * @inheritDoc
	     */
	    MultiPolygon.prototype.getSimplifiedGeometryInternal = function (squaredTolerance) {
	        var simplifiedFlatCoordinates = [];
	        var simplifiedEndss = [];
	        simplifiedFlatCoordinates.length = (0, _simplify.quantizeMultiArray)(this.flatCoordinates, 0, this.endss_, this.stride, Math.sqrt(squaredTolerance), simplifiedFlatCoordinates, 0, simplifiedEndss);
	        return new MultiPolygon(simplifiedFlatCoordinates, _GeometryLayout2.default.XY, simplifiedEndss);
	    };
	    /**
	     * Return the polygon at the specified index.
	     * @param {number} index Index.
	     * @return {Polygon} Polygon.
	     * @api
	     */
	    MultiPolygon.prototype.getPolygon = function (index) {
	        if (index < 0 || this.endss_.length <= index) {
	            return null;
	        }
	        var offset;
	        if (index === 0) {
	            offset = 0;
	        } else {
	            var prevEnds = this.endss_[index - 1];
	            offset = prevEnds[prevEnds.length - 1];
	        }
	        var ends = this.endss_[index].slice();
	        var end = ends[ends.length - 1];
	        if (offset !== 0) {
	            for (var i = 0, ii = ends.length; i < ii; ++i) {
	                ends[i] -= offset;
	            }
	        }
	        return new _Polygon2.default(this.flatCoordinates.slice(offset, end), this.layout, ends);
	    };
	    /**
	     * Return the polygons of this multipolygon.
	     * @return {Array<Polygon>} Polygons.
	     * @api
	     */
	    MultiPolygon.prototype.getPolygons = function () {
	        var layout = this.layout;
	        var flatCoordinates = this.flatCoordinates;
	        var endss = this.endss_;
	        var polygons = [];
	        var offset = 0;
	        for (var i = 0, ii = endss.length; i < ii; ++i) {
	            var ends = endss[i].slice();
	            var end = ends[ends.length - 1];
	            if (offset !== 0) {
	                for (var j = 0, jj = ends.length; j < jj; ++j) {
	                    ends[j] -= offset;
	                }
	            }
	            var polygon = new _Polygon2.default(flatCoordinates.slice(offset, end), layout, ends);
	            polygons.push(polygon);
	            offset = end;
	        }
	        return polygons;
	    };
	    /**
	     * @inheritDoc
	     * @api
	     */
	    MultiPolygon.prototype.getType = function () {
	        return _GeometryType2.default.MULTI_POLYGON;
	    };
	    /**
	     * @inheritDoc
	     * @api
	     */
	    MultiPolygon.prototype.intersectsExtent = function (extent) {
	        return (0, _intersectsextent.intersectsLinearRingMultiArray)(this.getOrientedFlatCoordinates(), 0, this.endss_, this.stride, extent);
	    };
	    /**
	     * Set the coordinates of the multipolygon.
	     * @param {!Array<Array<Array<import("../coordinate.js").Coordinate>>>} coordinates Coordinates.
	     * @param {GeometryLayout=} opt_layout Layout.
	     * @override
	     * @api
	     */
	    MultiPolygon.prototype.setCoordinates = function (coordinates, opt_layout) {
	        this.setLayout(opt_layout, coordinates, 3);
	        if (!this.flatCoordinates) {
	            this.flatCoordinates = [];
	        }
	        var endss = (0, _deflate.deflateMultiCoordinatesArray)(this.flatCoordinates, 0, coordinates, this.stride, this.endss_);
	        if (endss.length === 0) {
	            this.flatCoordinates.length = 0;
	        } else {
	            var lastEnds = endss[endss.length - 1];
	            this.flatCoordinates.length = lastEnds.length === 0 ? 0 : lastEnds[lastEnds.length - 1];
	        }
	        this.changed();
	    };
	    return MultiPolygon;
	}(_SimpleGeometry2.default);
	exports.default = MultiPolygon;
	//# sourceMappingURL=MultiPolygon.js.map

/***/ }),
/* 277 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	exports.getInteriorPointOfArray = getInteriorPointOfArray;
	exports.getInteriorPointsOfMultiArray = getInteriorPointsOfMultiArray;
	
	var _array = __webpack_require__(18);
	
	var _contains = __webpack_require__(145);
	
	/**
	 * Calculates a point that is likely to lie in the interior of the linear rings.
	 * Inspired by JTS's com.vividsolutions.jts.geom.Geometry#getInteriorPoint.
	 * @param {Array<number>} flatCoordinates Flat coordinates.
	 * @param {number} offset Offset.
	 * @param {Array<number>} ends Ends.
	 * @param {number} stride Stride.
	 * @param {Array<number>} flatCenters Flat centers.
	 * @param {number} flatCentersOffset Flat center offset.
	 * @param {Array<number>=} opt_dest Destination.
	 * @return {Array<number>} Destination point as XYM coordinate, where M is the
	 * length of the horizontal intersection that the point belongs to.
	 */
	/**
	 * @module ol/geom/flat/interiorpoint
	 */
	function getInteriorPointOfArray(flatCoordinates, offset, ends, stride, flatCenters, flatCentersOffset, opt_dest) {
	    var i, ii, x, x1, x2, y1, y2;
	    var y = flatCenters[flatCentersOffset + 1];
	    /** @type {Array<number>} */
	    var intersections = [];
	    // Calculate intersections with the horizontal line
	    for (var r = 0, rr = ends.length; r < rr; ++r) {
	        var end = ends[r];
	        x1 = flatCoordinates[end - stride];
	        y1 = flatCoordinates[end - stride + 1];
	        for (i = offset; i < end; i += stride) {
	            x2 = flatCoordinates[i];
	            y2 = flatCoordinates[i + 1];
	            if (y <= y1 && y2 <= y || y1 <= y && y <= y2) {
	                x = (y - y1) / (y2 - y1) * (x2 - x1) + x1;
	                intersections.push(x);
	            }
	            x1 = x2;
	            y1 = y2;
	        }
	    }
	    // Find the longest segment of the horizontal line that has its center point
	    // inside the linear ring.
	    var pointX = NaN;
	    var maxSegmentLength = -Infinity;
	    intersections.sort(_array.numberSafeCompareFunction);
	    x1 = intersections[0];
	    for (i = 1, ii = intersections.length; i < ii; ++i) {
	        x2 = intersections[i];
	        var segmentLength = Math.abs(x2 - x1);
	        if (segmentLength > maxSegmentLength) {
	            x = (x1 + x2) / 2;
	            if ((0, _contains.linearRingsContainsXY)(flatCoordinates, offset, ends, stride, x, y)) {
	                pointX = x;
	                maxSegmentLength = segmentLength;
	            }
	        }
	        x1 = x2;
	    }
	    if (isNaN(pointX)) {
	        // There is no horizontal line that has its center point inside the linear
	        // ring.  Use the center of the the linear ring's extent.
	        pointX = flatCenters[flatCentersOffset];
	    }
	    if (opt_dest) {
	        opt_dest.push(pointX, y, maxSegmentLength);
	        return opt_dest;
	    } else {
	        return [pointX, y, maxSegmentLength];
	    }
	}
	/**
	 * @param {Array<number>} flatCoordinates Flat coordinates.
	 * @param {number} offset Offset.
	 * @param {Array<Array<number>>} endss Endss.
	 * @param {number} stride Stride.
	 * @param {Array<number>} flatCenters Flat centers.
	 * @return {Array<number>} Interior points as XYM coordinates, where M is the
	 * length of the horizontal intersection that the point belongs to.
	 */
	function getInteriorPointsOfMultiArray(flatCoordinates, offset, endss, stride, flatCenters) {
	    var interiorPoints = [];
	    for (var i = 0, ii = endss.length; i < ii; ++i) {
	        var ends = endss[i];
	        interiorPoints = getInteriorPointOfArray(flatCoordinates, offset, ends, stride, flatCenters, 2 * i, interiorPoints);
	        offset = ends[ends.length - 1];
	    }
	    return interiorPoints;
	}
	//# sourceMappingURL=interiorpoint.js.map

/***/ }),
/* 278 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	exports.interpolatePoint = interpolatePoint;
	exports.lineStringCoordinateAtM = lineStringCoordinateAtM;
	exports.lineStringsCoordinateAtM = lineStringsCoordinateAtM;
	
	var _array = __webpack_require__(18);
	
	var _math = __webpack_require__(19);
	
	/**
	 * @param {Array<number>} flatCoordinates Flat coordinates.
	 * @param {number} offset Offset.
	 * @param {number} end End.
	 * @param {number} stride Stride.
	 * @param {number} fraction Fraction.
	 * @param {Array<number>=} opt_dest Destination.
	 * @return {Array<number>} Destination.
	 */
	/**
	 * @module ol/geom/flat/interpolate
	 */
	function interpolatePoint(flatCoordinates, offset, end, stride, fraction, opt_dest) {
	    var pointX = NaN;
	    var pointY = NaN;
	    var n = (end - offset) / stride;
	    if (n === 1) {
	        pointX = flatCoordinates[offset];
	        pointY = flatCoordinates[offset + 1];
	    } else if (n == 2) {
	        pointX = (1 - fraction) * flatCoordinates[offset] + fraction * flatCoordinates[offset + stride];
	        pointY = (1 - fraction) * flatCoordinates[offset + 1] + fraction * flatCoordinates[offset + stride + 1];
	    } else if (n !== 0) {
	        var x1 = flatCoordinates[offset];
	        var y1 = flatCoordinates[offset + 1];
	        var length_1 = 0;
	        var cumulativeLengths = [0];
	        for (var i = offset + stride; i < end; i += stride) {
	            var x2 = flatCoordinates[i];
	            var y2 = flatCoordinates[i + 1];
	            length_1 += Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));
	            cumulativeLengths.push(length_1);
	            x1 = x2;
	            y1 = y2;
	        }
	        var target = fraction * length_1;
	        var index = (0, _array.binarySearch)(cumulativeLengths, target);
	        if (index < 0) {
	            var t = (target - cumulativeLengths[-index - 2]) / (cumulativeLengths[-index - 1] - cumulativeLengths[-index - 2]);
	            var o = offset + (-index - 2) * stride;
	            pointX = (0, _math.lerp)(flatCoordinates[o], flatCoordinates[o + stride], t);
	            pointY = (0, _math.lerp)(flatCoordinates[o + 1], flatCoordinates[o + stride + 1], t);
	        } else {
	            pointX = flatCoordinates[offset + index * stride];
	            pointY = flatCoordinates[offset + index * stride + 1];
	        }
	    }
	    if (opt_dest) {
	        opt_dest[0] = pointX;
	        opt_dest[1] = pointY;
	        return opt_dest;
	    } else {
	        return [pointX, pointY];
	    }
	}
	/**
	 * @param {Array<number>} flatCoordinates Flat coordinates.
	 * @param {number} offset Offset.
	 * @param {number} end End.
	 * @param {number} stride Stride.
	 * @param {number} m M.
	 * @param {boolean} extrapolate Extrapolate.
	 * @return {import("../../coordinate.js").Coordinate} Coordinate.
	 */
	function lineStringCoordinateAtM(flatCoordinates, offset, end, stride, m, extrapolate) {
	    if (end == offset) {
	        return null;
	    }
	    var coordinate;
	    if (m < flatCoordinates[offset + stride - 1]) {
	        if (extrapolate) {
	            coordinate = flatCoordinates.slice(offset, offset + stride);
	            coordinate[stride - 1] = m;
	            return coordinate;
	        } else {
	            return null;
	        }
	    } else if (flatCoordinates[end - 1] < m) {
	        if (extrapolate) {
	            coordinate = flatCoordinates.slice(end - stride, end);
	            coordinate[stride - 1] = m;
	            return coordinate;
	        } else {
	            return null;
	        }
	    }
	    // FIXME use O(1) search
	    if (m == flatCoordinates[offset + stride - 1]) {
	        return flatCoordinates.slice(offset, offset + stride);
	    }
	    var lo = offset / stride;
	    var hi = end / stride;
	    while (lo < hi) {
	        var mid = lo + hi >> 1;
	        if (m < flatCoordinates[(mid + 1) * stride - 1]) {
	            hi = mid;
	        } else {
	            lo = mid + 1;
	        }
	    }
	    var m0 = flatCoordinates[lo * stride - 1];
	    if (m == m0) {
	        return flatCoordinates.slice((lo - 1) * stride, (lo - 1) * stride + stride);
	    }
	    var m1 = flatCoordinates[(lo + 1) * stride - 1];
	    var t = (m - m0) / (m1 - m0);
	    coordinate = [];
	    for (var i = 0; i < stride - 1; ++i) {
	        coordinate.push((0, _math.lerp)(flatCoordinates[(lo - 1) * stride + i], flatCoordinates[lo * stride + i], t));
	    }
	    coordinate.push(m);
	    return coordinate;
	}
	/**
	 * @param {Array<number>} flatCoordinates Flat coordinates.
	 * @param {number} offset Offset.
	 * @param {Array<number>} ends Ends.
	 * @param {number} stride Stride.
	 * @param {number} m M.
	 * @param {boolean} extrapolate Extrapolate.
	 * @param {boolean} interpolate Interpolate.
	 * @return {import("../../coordinate.js").Coordinate} Coordinate.
	 */
	function lineStringsCoordinateAtM(flatCoordinates, offset, ends, stride, m, extrapolate, interpolate) {
	    if (interpolate) {
	        return lineStringCoordinateAtM(flatCoordinates, offset, ends[ends.length - 1], stride, m, extrapolate);
	    }
	    var coordinate;
	    if (m < flatCoordinates[stride - 1]) {
	        if (extrapolate) {
	            coordinate = flatCoordinates.slice(0, stride);
	            coordinate[stride - 1] = m;
	            return coordinate;
	        } else {
	            return null;
	        }
	    }
	    if (flatCoordinates[flatCoordinates.length - 1] < m) {
	        if (extrapolate) {
	            coordinate = flatCoordinates.slice(flatCoordinates.length - stride);
	            coordinate[stride - 1] = m;
	            return coordinate;
	        } else {
	            return null;
	        }
	    }
	    for (var i = 0, ii = ends.length; i < ii; ++i) {
	        var end = ends[i];
	        if (offset == end) {
	            continue;
	        }
	        if (m < flatCoordinates[offset + stride - 1]) {
	            return null;
	        } else if (m <= flatCoordinates[end - 1]) {
	            return lineStringCoordinateAtM(flatCoordinates, offset, end, stride, m, false);
	        }
	        offset = end;
	    }
	    return null;
	}
	//# sourceMappingURL=interpolate.js.map

/***/ }),
/* 279 */
/***/ (function(module, exports) {

	"use strict";
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	exports.lineStringLength = lineStringLength;
	exports.linearRingLength = linearRingLength;
	/**
	 * @module ol/geom/flat/length
	 */
	/**
	 * @param {Array<number>} flatCoordinates Flat coordinates.
	 * @param {number} offset Offset.
	 * @param {number} end End.
	 * @param {number} stride Stride.
	 * @return {number} Length.
	 */
	function lineStringLength(flatCoordinates, offset, end, stride) {
	  var x1 = flatCoordinates[offset];
	  var y1 = flatCoordinates[offset + 1];
	  var length = 0;
	  for (var i = offset + stride; i < end; i += stride) {
	    var x2 = flatCoordinates[i];
	    var y2 = flatCoordinates[i + 1];
	    length += Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));
	    x1 = x2;
	    y1 = y2;
	  }
	  return length;
	}
	/**
	 * @param {Array<number>} flatCoordinates Flat coordinates.
	 * @param {number} offset Offset.
	 * @param {number} end End.
	 * @param {number} stride Stride.
	 * @return {number} Perimeter.
	 */
	function linearRingLength(flatCoordinates, offset, end, stride) {
	  var perimeter = lineStringLength(flatCoordinates, offset, end, stride);
	  var dx = flatCoordinates[end - stride] - flatCoordinates[offset];
	  var dy = flatCoordinates[end - stride + 1] - flatCoordinates[offset + 1];
	  perimeter += Math.sqrt(dx * dx + dy * dy);
	  return perimeter;
	}
	//# sourceMappingURL=length.js.map

/***/ }),
/* 280 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	exports.linearRingIsClockwise = linearRingIsClockwise;
	exports.linearRingsAreOriented = linearRingsAreOriented;
	exports.linearRingssAreOriented = linearRingssAreOriented;
	exports.orientLinearRings = orientLinearRings;
	exports.orientLinearRingsArray = orientLinearRingsArray;
	
	var _reverse = __webpack_require__(598);
	
	/**
	 * @param {Array<number>} flatCoordinates Flat coordinates.
	 * @param {number} offset Offset.
	 * @param {number} end End.
	 * @param {number} stride Stride.
	 * @return {boolean} Is clockwise.
	 */
	function linearRingIsClockwise(flatCoordinates, offset, end, stride) {
	    // http://tinyurl.com/clockwise-method
	    // https://github.com/OSGeo/gdal/blob/trunk/gdal/ogr/ogrlinearring.cpp
	    var edge = 0;
	    var x1 = flatCoordinates[end - stride];
	    var y1 = flatCoordinates[end - stride + 1];
	    for (; offset < end; offset += stride) {
	        var x2 = flatCoordinates[offset];
	        var y2 = flatCoordinates[offset + 1];
	        edge += (x2 - x1) * (y2 + y1);
	        x1 = x2;
	        y1 = y2;
	    }
	    return edge > 0;
	}
	/**
	 * Determines if linear rings are oriented.  By default, left-hand orientation
	 * is tested (first ring must be clockwise, remaining rings counter-clockwise).
	 * To test for right-hand orientation, use the `opt_right` argument.
	 *
	 * @param {Array<number>} flatCoordinates Flat coordinates.
	 * @param {number} offset Offset.
	 * @param {Array<number>} ends Array of end indexes.
	 * @param {number} stride Stride.
	 * @param {boolean=} opt_right Test for right-hand orientation
	 *     (counter-clockwise exterior ring and clockwise interior rings).
	 * @return {boolean} Rings are correctly oriented.
	 */
	/**
	 * @module ol/geom/flat/orient
	 */
	function linearRingsAreOriented(flatCoordinates, offset, ends, stride, opt_right) {
	    var right = opt_right !== undefined ? opt_right : false;
	    for (var i = 0, ii = ends.length; i < ii; ++i) {
	        var end = ends[i];
	        var isClockwise = linearRingIsClockwise(flatCoordinates, offset, end, stride);
	        if (i === 0) {
	            if (right && isClockwise || !right && !isClockwise) {
	                return false;
	            }
	        } else {
	            if (right && !isClockwise || !right && isClockwise) {
	                return false;
	            }
	        }
	        offset = end;
	    }
	    return true;
	}
	/**
	 * Determines if linear rings are oriented.  By default, left-hand orientation
	 * is tested (first ring must be clockwise, remaining rings counter-clockwise).
	 * To test for right-hand orientation, use the `opt_right` argument.
	 *
	 * @param {Array<number>} flatCoordinates Flat coordinates.
	 * @param {number} offset Offset.
	 * @param {Array<Array<number>>} endss Array of array of end indexes.
	 * @param {number} stride Stride.
	 * @param {boolean=} opt_right Test for right-hand orientation
	 *     (counter-clockwise exterior ring and clockwise interior rings).
	 * @return {boolean} Rings are correctly oriented.
	 */
	function linearRingssAreOriented(flatCoordinates, offset, endss, stride, opt_right) {
	    for (var i = 0, ii = endss.length; i < ii; ++i) {
	        var ends = endss[i];
	        if (!linearRingsAreOriented(flatCoordinates, offset, ends, stride, opt_right)) {
	            return false;
	        }
	        if (ends.length) {
	            offset = ends[ends.length - 1];
	        }
	    }
	    return true;
	}
	/**
	 * Orient coordinates in a flat array of linear rings.  By default, rings
	 * are oriented following the left-hand rule (clockwise for exterior and
	 * counter-clockwise for interior rings).  To orient according to the
	 * right-hand rule, use the `opt_right` argument.
	 *
	 * @param {Array<number>} flatCoordinates Flat coordinates.
	 * @param {number} offset Offset.
	 * @param {Array<number>} ends Ends.
	 * @param {number} stride Stride.
	 * @param {boolean=} opt_right Follow the right-hand rule for orientation.
	 * @return {number} End.
	 */
	function orientLinearRings(flatCoordinates, offset, ends, stride, opt_right) {
	    var right = opt_right !== undefined ? opt_right : false;
	    for (var i = 0, ii = ends.length; i < ii; ++i) {
	        var end = ends[i];
	        var isClockwise = linearRingIsClockwise(flatCoordinates, offset, end, stride);
	        var reverse = i === 0 ? right && isClockwise || !right && !isClockwise : right && !isClockwise || !right && isClockwise;
	        if (reverse) {
	            (0, _reverse.coordinates)(flatCoordinates, offset, end, stride);
	        }
	        offset = end;
	    }
	    return offset;
	}
	/**
	 * Orient coordinates in a flat array of linear rings.  By default, rings
	 * are oriented following the left-hand rule (clockwise for exterior and
	 * counter-clockwise for interior rings).  To orient according to the
	 * right-hand rule, use the `opt_right` argument.
	 *
	 * @param {Array<number>} flatCoordinates Flat coordinates.
	 * @param {number} offset Offset.
	 * @param {Array<Array<number>>} endss Array of array of end indexes.
	 * @param {number} stride Stride.
	 * @param {boolean=} opt_right Follow the right-hand rule for orientation.
	 * @return {number} End.
	 */
	function orientLinearRingsArray(flatCoordinates, offset, endss, stride, opt_right) {
	    for (var i = 0, ii = endss.length; i < ii; ++i) {
	        offset = orientLinearRings(flatCoordinates, offset, endss[i], stride, opt_right);
	    }
	    return offset;
	}
	//# sourceMappingURL=orient.js.map

/***/ }),
/* 281 */
/***/ (function(module, exports) {

	"use strict";
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	exports.forEach = forEach;
	/**
	 * @module ol/geom/flat/segments
	 */
	/**
	 * This function calls `callback` for each segment of the flat coordinates
	 * array. If the callback returns a truthy value the function returns that
	 * value immediately. Otherwise the function returns `false`.
	 * @param {Array<number>} flatCoordinates Flat coordinates.
	 * @param {number} offset Offset.
	 * @param {number} end End.
	 * @param {number} stride Stride.
	 * @param {function(import("../../coordinate.js").Coordinate, import("../../coordinate.js").Coordinate): T} callback Function
	 *     called for each segment.
	 * @return {T|boolean} Value.
	 * @template T
	 */
	function forEach(flatCoordinates, offset, end, stride, callback) {
	    var point1 = [flatCoordinates[offset], flatCoordinates[offset + 1]];
	    var point2 = [];
	    var ret;
	    for (; offset + stride < end; offset += stride) {
	        point2[0] = flatCoordinates[offset + stride];
	        point2[1] = flatCoordinates[offset + stride + 1];
	        ret = callback(point1, point2);
	        if (ret) {
	            return ret;
	        }
	        point1[0] = point2[0];
	        point1[1] = point2[1];
	    }
	    return false;
	}
	//# sourceMappingURL=segments.js.map

/***/ }),
/* 282 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	
	var _Event = __webpack_require__(35);
	
	var _Event2 = _interopRequireDefault(_Event);
	
	var _condition = __webpack_require__(40);
	
	var _functions = __webpack_require__(31);
	
	var _Pointer = __webpack_require__(41);
	
	var _Pointer2 = _interopRequireDefault(_Pointer);
	
	var _Box = __webpack_require__(628);
	
	var _Box2 = _interopRequireDefault(_Box);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var __extends = undefined && undefined.__extends || function () {
	  var _extendStatics = function extendStatics(d, b) {
	    _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	      d.__proto__ = b;
	    } || function (d, b) {
	      for (var p in b) {
	        if (b.hasOwnProperty(p)) d[p] = b[p];
	      }
	    };
	    return _extendStatics(d, b);
	  };
	  return function (d, b) {
	    _extendStatics(d, b);
	    function __() {
	      this.constructor = d;
	    }
	    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	  };
	}();
	/**
	 * @module ol/interaction/DragBox
	 */
	// FIXME draw drag box
	
	/**
	 * A function that takes a {@link module:ol/MapBrowserEvent} and two
	 * {@link module:ol/pixel~Pixel}s and returns a `{boolean}`. If the condition is met,
	 * true should be returned.
	 * @typedef {function(this: ?, import("../MapBrowserEvent.js").default, import("../pixel.js").Pixel, import("../pixel.js").Pixel):boolean} EndCondition
	 */
	/**
	 * @typedef {Object} Options
	 * @property {string} [className='ol-dragbox'] CSS class name for styling the box.
	 * @property {import("../events/condition.js").Condition} [condition] A function that takes an {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a boolean
	 * to indicate whether that event should be handled.
	 * Default is {@link ol/events/condition~always}.
	 * @property {number} [minArea=64] The minimum area of the box in pixel, this value is used by the default
	 * `boxEndCondition` function.
	 * @property {EndCondition} [boxEndCondition] A function that takes a {@link module:ol/MapBrowserEvent~MapBrowserEvent} and two
	 * {@link module:ol/pixel~Pixel}s to indicate whether a `boxend` event should be fired.
	 * Default is `true` if the area of the box is bigger than the `minArea` option.
	 * @property {function(this:DragBox, import("../MapBrowserEvent.js").default)} [onBoxEnd] Code to execute just
	 * before `boxend` is fired.
	 */
	/**
	 * @enum {string}
	 */
	var DragBoxEventType = {
	  /**
	   * Triggered upon drag box start.
	   * @event DragBoxEvent#boxstart
	   * @api
	   */
	  BOXSTART: 'boxstart',
	  /**
	   * Triggered on drag when box is active.
	   * @event DragBoxEvent#boxdrag
	   * @api
	   */
	  BOXDRAG: 'boxdrag',
	  /**
	   * Triggered upon drag box end.
	   * @event DragBoxEvent#boxend
	   * @api
	   */
	  BOXEND: 'boxend'
	};
	/**
	 * @classdesc
	 * Events emitted by {@link module:ol/interaction/DragBox~DragBox} instances are instances of
	 * this type.
	 */
	var DragBoxEvent = /** @class */function (_super) {
	  __extends(DragBoxEvent, _super);
	  /**
	   * @param {string} type The event type.
	   * @param {import("../coordinate.js").Coordinate} coordinate The event coordinate.
	   * @param {import("../MapBrowserEvent.js").default} mapBrowserEvent Originating event.
	   */
	  function DragBoxEvent(type, coordinate, mapBrowserEvent) {
	    var _this = _super.call(this, type) || this;
	    /**
	     * The coordinate of the drag event.
	     * @const
	     * @type {import("../coordinate.js").Coordinate}
	     * @api
	     */
	    _this.coordinate = coordinate;
	    /**
	     * @const
	     * @type {import("../MapBrowserEvent.js").default}
	     * @api
	     */
	    _this.mapBrowserEvent = mapBrowserEvent;
	    return _this;
	  }
	  return DragBoxEvent;
	}(_Event2.default);
	/**
	 * @classdesc
	 * Allows the user to draw a vector box by clicking and dragging on the map,
	 * normally combined with an {@link module:ol/events/condition} that limits
	 * it to when the shift or other key is held down. This is used, for example,
	 * for zooming to a specific area of the map
	 * (see {@link module:ol/interaction/DragZoom~DragZoom} and
	 * {@link module:ol/interaction/DragRotateAndZoom}).
	 *
	 * This interaction is only supported for mouse devices.
	 *
	 * @fires DragBoxEvent
	 * @api
	 */
	var DragBox = /** @class */function (_super) {
	  __extends(DragBox, _super);
	  /**
	   * @param {Options=} opt_options Options.
	   */
	  function DragBox(opt_options) {
	    var _this = _super.call(this) || this;
	    var options = opt_options ? opt_options : {};
	    /**
	     * @type {import("../render/Box.js").default}
	     * @private
	     */
	    _this.box_ = new _Box2.default(options.className || 'ol-dragbox');
	    /**
	     * @type {number}
	     * @private
	     */
	    _this.minArea_ = options.minArea !== undefined ? options.minArea : 64;
	    /**
	     * Function to execute just before `onboxend` is fired
	     * @type {function(this:DragBox, import("../MapBrowserEvent.js").default): void}
	     * @private
	     */
	    _this.onBoxEnd_ = options.onBoxEnd ? options.onBoxEnd : _functions.VOID;
	    /**
	     * @type {import("../pixel.js").Pixel}
	     * @private
	     */
	    _this.startPixel_ = null;
	    /**
	     * @private
	     * @type {import("../events/condition.js").Condition}
	     */
	    _this.condition_ = options.condition ? options.condition : _condition.always;
	    /**
	     * @private
	     * @type {EndCondition}
	     */
	    _this.boxEndCondition_ = options.boxEndCondition ? options.boxEndCondition : _this.defaultBoxEndCondition;
	    return _this;
	  }
	  /**
	   * The default condition for determining whether the boxend event
	   * should fire.
	   * @param {import("../MapBrowserEvent.js").default} mapBrowserEvent The originating MapBrowserEvent
	   *     leading to the box end.
	   * @param {import("../pixel.js").Pixel} startPixel The starting pixel of the box.
	   * @param {import("../pixel.js").Pixel} endPixel The end pixel of the box.
	   * @return {boolean} Whether or not the boxend condition should be fired.
	   */
	  DragBox.prototype.defaultBoxEndCondition = function (mapBrowserEvent, startPixel, endPixel) {
	    var width = endPixel[0] - startPixel[0];
	    var height = endPixel[1] - startPixel[1];
	    return width * width + height * height >= this.minArea_;
	  };
	  /**
	   * Returns geometry of last drawn box.
	   * @return {import("../geom/Polygon.js").default} Geometry.
	   * @api
	   */
	  DragBox.prototype.getGeometry = function () {
	    return this.box_.getGeometry();
	  };
	  /**
	   * @inheritDoc
	   */
	  DragBox.prototype.handleDragEvent = function (mapBrowserEvent) {
	    if (!(0, _condition.mouseOnly)(mapBrowserEvent)) {
	      return;
	    }
	    this.box_.setPixels(this.startPixel_, mapBrowserEvent.pixel);
	    this.dispatchEvent(new DragBoxEvent(DragBoxEventType.BOXDRAG, mapBrowserEvent.coordinate, mapBrowserEvent));
	  };
	  /**
	   * @inheritDoc
	   */
	  DragBox.prototype.handleUpEvent = function (mapBrowserEvent) {
	    if (!(0, _condition.mouseOnly)(mapBrowserEvent)) {
	      return true;
	    }
	    this.box_.setMap(null);
	    if (this.boxEndCondition_(mapBrowserEvent, this.startPixel_, mapBrowserEvent.pixel)) {
	      this.onBoxEnd_(mapBrowserEvent);
	      this.dispatchEvent(new DragBoxEvent(DragBoxEventType.BOXEND, mapBrowserEvent.coordinate, mapBrowserEvent));
	    }
	    return false;
	  };
	  /**
	   * @inheritDoc
	   */
	  DragBox.prototype.handleDownEvent = function (mapBrowserEvent) {
	    if (!(0, _condition.mouseOnly)(mapBrowserEvent)) {
	      return false;
	    }
	    if ((0, _condition.mouseActionButton)(mapBrowserEvent) && this.condition_(mapBrowserEvent)) {
	      this.startPixel_ = mapBrowserEvent.pixel;
	      this.box_.setMap(mapBrowserEvent.map);
	      this.box_.setPixels(this.startPixel_, this.startPixel_);
	      this.dispatchEvent(new DragBoxEvent(DragBoxEventType.BOXSTART, mapBrowserEvent.coordinate, mapBrowserEvent));
	      return true;
	    } else {
	      return false;
	    }
	  };
	  return DragBox;
	}(_Pointer2.default);
	exports.default = DragBox;
	//# sourceMappingURL=DragBox.js.map

/***/ }),
/* 283 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	exports.createRegularPolygon = createRegularPolygon;
	exports.createBox = createBox;
	
	var _EventType = __webpack_require__(10);
	
	var _EventType2 = _interopRequireDefault(_EventType);
	
	var _Feature = __webpack_require__(123);
	
	var _Feature2 = _interopRequireDefault(_Feature);
	
	var _MapBrowserEventType = __webpack_require__(69);
	
	var _MapBrowserEventType2 = _interopRequireDefault(_MapBrowserEventType);
	
	var _MapBrowserPointerEvent = __webpack_require__(251);
	
	var _MapBrowserPointerEvent2 = _interopRequireDefault(_MapBrowserPointerEvent);
	
	var _Object = __webpack_require__(32);
	
	var _coordinate = __webpack_require__(84);
	
	var _Event = __webpack_require__(35);
	
	var _Event2 = _interopRequireDefault(_Event);
	
	var _condition = __webpack_require__(40);
	
	var _extent = __webpack_require__(4);
	
	var _functions = __webpack_require__(31);
	
	var _Circle = __webpack_require__(594);
	
	var _Circle2 = _interopRequireDefault(_Circle);
	
	var _GeometryType = __webpack_require__(22);
	
	var _GeometryType2 = _interopRequireDefault(_GeometryType);
	
	var _LineString = __webpack_require__(171);
	
	var _LineString2 = _interopRequireDefault(_LineString);
	
	var _MultiLineString = __webpack_require__(275);
	
	var _MultiLineString2 = _interopRequireDefault(_MultiLineString);
	
	var _MultiPoint = __webpack_require__(172);
	
	var _MultiPoint2 = _interopRequireDefault(_MultiPoint);
	
	var _MultiPolygon = __webpack_require__(276);
	
	var _MultiPolygon2 = _interopRequireDefault(_MultiPolygon);
	
	var _Point = __webpack_require__(85);
	
	var _Point2 = _interopRequireDefault(_Point);
	
	var _Polygon = __webpack_require__(57);
	
	var _Polygon2 = _interopRequireDefault(_Polygon);
	
	var _Pointer = __webpack_require__(41);
	
	var _Pointer2 = _interopRequireDefault(_Pointer);
	
	var _Property = __webpack_require__(174);
	
	var _Property2 = _interopRequireDefault(_Property);
	
	var _Vector = __webpack_require__(147);
	
	var _Vector2 = _interopRequireDefault(_Vector);
	
	var _Vector3 = __webpack_require__(108);
	
	var _Vector4 = _interopRequireDefault(_Vector3);
	
	var _Style = __webpack_require__(87);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var __extends = undefined && undefined.__extends || function () {
	    var _extendStatics = function extendStatics(d, b) {
	        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	            d.__proto__ = b;
	        } || function (d, b) {
	            for (var p in b) {
	                if (b.hasOwnProperty(p)) d[p] = b[p];
	            }
	        };
	        return _extendStatics(d, b);
	    };
	    return function (d, b) {
	        _extendStatics(d, b);
	        function __() {
	            this.constructor = d;
	        }
	        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	    };
	}();
	/**
	 * @module ol/interaction/Draw
	 */
	
	/**
	 * @typedef {Object} Options
	 * @property {GeometryType} type Geometry type of
	 * the geometries being drawn with this instance.
	 * @property {number} [clickTolerance=6] The maximum distance in pixels between
	 * "down" and "up" for a "up" event to be considered a "click" event and
	 * actually add a point/vertex to the geometry being drawn.  The default of `6`
	 * was chosen for the draw interaction to behave correctly on mouse as well as
	 * on touch devices.
	 * @property {import("../Collection.js").default<Feature>} [features]
	 * Destination collection for the drawn features.
	 * @property {VectorSource} [source] Destination source for
	 * the drawn features.
	 * @property {number} [dragVertexDelay=500] Delay in milliseconds after pointerdown
	 * before the current vertex can be dragged to its exact position.
	 * @property {number} [snapTolerance=12] Pixel distance for snapping to the
	 * drawing finish.
	 * @property {boolean} [stopClick=false] Stop click, singleclick, and
	 * doubleclick events from firing during drawing.
	 * @property {number} [maxPoints] The number of points that can be drawn before
	 * a polygon ring or line string is finished. By default there is no
	 * restriction.
	 * @property {number} [minPoints] The number of points that must be drawn
	 * before a polygon ring or line string can be finished. Default is `3` for
	 * polygon rings and `2` for line strings.
	 * @property {import("../events/condition.js").Condition} [finishCondition] A function
	 * that takes an {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a
	 * boolean to indicate whether the drawing can be finished.
	 * @property {import("../style/Style.js").StyleLike} [style]
	 * Style for sketch features.
	 * @property {GeometryFunction} [geometryFunction]
	 * Function that is called when a geometry's coordinates are updated.
	 * @property {string} [geometryName] Geometry name to use for features created
	 * by the draw interaction.
	 * @property {import("../events/condition.js").Condition} [condition] A function that
	 * takes an {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a
	 * boolean to indicate whether that event should be handled.
	 * By default {@link module:ol/events/condition~noModifierKeys}, i.e. a click,
	 * adds a vertex or deactivates freehand drawing.
	 * @property {boolean} [freehand=false] Operate in freehand mode for lines,
	 * polygons, and circles.  This makes the interaction always operate in freehand
	 * mode and takes precedence over any `freehandCondition` option.
	 * @property {import("../events/condition.js").Condition} [freehandCondition]
	 * Condition that activates freehand drawing for lines and polygons. This
	 * function takes an {@link module:ol/MapBrowserEvent~MapBrowserEvent} and
	 * returns a boolean to indicate whether that event should be handled. The
	 * default is {@link module:ol/events/condition~shiftKeyOnly}, meaning that the
	 * Shift key activates freehand drawing.
	 * @property {boolean} [wrapX=false] Wrap the world horizontally on the sketch
	 * overlay.
	 */
	/**
	 * Coordinate type when drawing points.
	 * @typedef {import("../coordinate.js").Coordinate} PointCoordType
	 */
	/**
	 * Coordinate type when drawing lines.
	 * @typedef {Array<import("../coordinate.js").Coordinate>} LineCoordType
	 */
	/**
	 * Coordinate type when drawing polygons.
	 * @typedef {Array<Array<import("../coordinate.js").Coordinate>>} PolyCoordType
	 */
	/**
	 * Types used for drawing coordinates.
	 * @typedef {PointCoordType|LineCoordType|PolyCoordType} SketchCoordType
	 */
	/**
	 * Function that takes an array of coordinates and an optional existing geometry as
	 * arguments, and returns a geometry. The optional existing geometry is the
	 * geometry that is returned when the function is called without a second
	 * argument.
	 * @typedef {function(!SketchCoordType, import("../geom/SimpleGeometry.js").default=):
	 *     import("../geom/SimpleGeometry.js").default} GeometryFunction
	 */
	/**
	 * Draw mode.  This collapses multi-part geometry types with their single-part
	 * cousins.
	 * @enum {string}
	 */
	var Mode = {
	    POINT: 'Point',
	    LINE_STRING: 'LineString',
	    POLYGON: 'Polygon',
	    CIRCLE: 'Circle'
	};
	/**
	 * @enum {string}
	 */
	var DrawEventType = {
	    /**
	     * Triggered upon feature draw start
	     * @event DrawEvent#drawstart
	     * @api
	     */
	    DRAWSTART: 'drawstart',
	    /**
	     * Triggered upon feature draw end
	     * @event DrawEvent#drawend
	     * @api
	     */
	    DRAWEND: 'drawend'
	};
	/**
	 * @classdesc
	 * Events emitted by {@link module:ol/interaction/Draw~Draw} instances are
	 * instances of this type.
	 */
	var DrawEvent = /** @class */function (_super) {
	    __extends(DrawEvent, _super);
	    /**
	     * @param {DrawEventType} type Type.
	     * @param {Feature} feature The feature drawn.
	     */
	    function DrawEvent(type, feature) {
	        var _this = _super.call(this, type) || this;
	        /**
	         * The feature being drawn.
	         * @type {Feature}
	         * @api
	         */
	        _this.feature = feature;
	        return _this;
	    }
	    return DrawEvent;
	}(_Event2.default);
	/**
	 * @classdesc
	 * Interaction for drawing feature geometries.
	 *
	 * @fires DrawEvent
	 * @api
	 */
	var Draw = /** @class */function (_super) {
	    __extends(Draw, _super);
	    /**
	     * @param {Options} options Options.
	     */
	    function Draw(options) {
	        var _this = this;
	        var pointerOptions = /** @type {import("./Pointer.js").Options} */options;
	        if (!pointerOptions.stopDown) {
	            pointerOptions.stopDown = _functions.FALSE;
	        }
	        _this = _super.call(this, pointerOptions) || this;
	        /**
	         * @type {boolean}
	         * @private
	         */
	        _this.shouldHandle_ = false;
	        /**
	         * @type {import("../pixel.js").Pixel}
	         * @private
	         */
	        _this.downPx_ = null;
	        /**
	         * @type {?}
	         * @private
	         */
	        _this.downTimeout_;
	        /**
	         * @type {number|undefined}
	         * @private
	         */
	        _this.lastDragTime_;
	        /**
	         * @type {boolean}
	         * @private
	         */
	        _this.freehand_ = false;
	        /**
	         * Target source for drawn features.
	         * @type {VectorSource}
	         * @private
	         */
	        _this.source_ = options.source ? options.source : null;
	        /**
	         * Target collection for drawn features.
	         * @type {import("../Collection.js").default<Feature>}
	         * @private
	         */
	        _this.features_ = options.features ? options.features : null;
	        /**
	         * Pixel distance for snapping.
	         * @type {number}
	         * @private
	         */
	        _this.snapTolerance_ = options.snapTolerance ? options.snapTolerance : 12;
	        /**
	         * Geometry type.
	         * @type {GeometryType}
	         * @private
	         */
	        _this.type_ = /** @type {GeometryType} */options.type;
	        /**
	         * Drawing mode (derived from geometry type.
	         * @type {Mode}
	         * @private
	         */
	        _this.mode_ = getMode(_this.type_);
	        /**
	         * Stop click, singleclick, and doubleclick events from firing during drawing.
	         * Default is `false`.
	         * @type {boolean}
	         * @private
	         */
	        _this.stopClick_ = !!options.stopClick;
	        /**
	         * The number of points that must be drawn before a polygon ring or line
	         * string can be finished.  The default is 3 for polygon rings and 2 for
	         * line strings.
	         * @type {number}
	         * @private
	         */
	        _this.minPoints_ = options.minPoints ? options.minPoints : _this.mode_ === Mode.POLYGON ? 3 : 2;
	        /**
	         * The number of points that can be drawn before a polygon ring or line string
	         * is finished. The default is no restriction.
	         * @type {number}
	         * @private
	         */
	        _this.maxPoints_ = options.maxPoints ? options.maxPoints : Infinity;
	        /**
	         * A function to decide if a potential finish coordinate is permissible
	         * @private
	         * @type {import("../events/condition.js").Condition}
	         */
	        _this.finishCondition_ = options.finishCondition ? options.finishCondition : _functions.TRUE;
	        var geometryFunction = options.geometryFunction;
	        if (!geometryFunction) {
	            if (_this.type_ === _GeometryType2.default.CIRCLE) {
	                /**
	                 * @param {!LineCoordType} coordinates The coordinates.
	                 * @param {import("../geom/SimpleGeometry.js").default=} opt_geometry Optional geometry.
	                 * @return {import("../geom/SimpleGeometry.js").default} A geometry.
	                 */
	                geometryFunction = function geometryFunction(coordinates, opt_geometry) {
	                    var circle = opt_geometry ? /** @type {Circle} */opt_geometry : new _Circle2.default([NaN, NaN]);
	                    var squaredLength = (0, _coordinate.squaredDistance)(coordinates[0], coordinates[1]);
	                    circle.setCenterAndRadius(coordinates[0], Math.sqrt(squaredLength));
	                    return circle;
	                };
	            } else {
	                var Constructor_1;
	                var mode_1 = _this.mode_;
	                if (mode_1 === Mode.POINT) {
	                    Constructor_1 = _Point2.default;
	                } else if (mode_1 === Mode.LINE_STRING) {
	                    Constructor_1 = _LineString2.default;
	                } else if (mode_1 === Mode.POLYGON) {
	                    Constructor_1 = _Polygon2.default;
	                }
	                /**
	                 * @param {!LineCoordType} coordinates The coordinates.
	                 * @param {import("../geom/SimpleGeometry.js").default=} opt_geometry Optional geometry.
	                 * @return {import("../geom/SimpleGeometry.js").default} A geometry.
	                 */
	                geometryFunction = function geometryFunction(coordinates, opt_geometry) {
	                    var geometry = opt_geometry;
	                    if (geometry) {
	                        if (mode_1 === Mode.POLYGON) {
	                            if (coordinates[0].length) {
	                                // Add a closing coordinate to match the first
	                                geometry.setCoordinates([coordinates[0].concat([coordinates[0][0]])]);
	                            } else {
	                                geometry.setCoordinates([]);
	                            }
	                        } else {
	                            geometry.setCoordinates(coordinates);
	                        }
	                    } else {
	                        geometry = new Constructor_1(coordinates);
	                    }
	                    return geometry;
	                };
	            }
	        }
	        /**
	         * @type {GeometryFunction}
	         * @private
	         */
	        _this.geometryFunction_ = geometryFunction;
	        /**
	         * @type {number}
	         * @private
	         */
	        _this.dragVertexDelay_ = options.dragVertexDelay !== undefined ? options.dragVertexDelay : 500;
	        /**
	         * Finish coordinate for the feature (first point for polygons, last point for
	         * linestrings).
	         * @type {import("../coordinate.js").Coordinate}
	         * @private
	         */
	        _this.finishCoordinate_ = null;
	        /**
	         * Sketch feature.
	         * @type {Feature}
	         * @private
	         */
	        _this.sketchFeature_ = null;
	        /**
	         * Sketch point.
	         * @type {Feature<Point>}
	         * @private
	         */
	        _this.sketchPoint_ = null;
	        /**
	         * Sketch coordinates. Used when drawing a line or polygon.
	         * @type {SketchCoordType}
	         * @private
	         */
	        _this.sketchCoords_ = null;
	        /**
	         * Sketch line. Used when drawing polygon.
	         * @type {Feature<LineString>}
	         * @private
	         */
	        _this.sketchLine_ = null;
	        /**
	         * Sketch line coordinates. Used when drawing a polygon or circle.
	         * @type {LineCoordType}
	         * @private
	         */
	        _this.sketchLineCoords_ = null;
	        /**
	         * Squared tolerance for handling up events.  If the squared distance
	         * between a down and up event is greater than this tolerance, up events
	         * will not be handled.
	         * @type {number}
	         * @private
	         */
	        _this.squaredClickTolerance_ = options.clickTolerance ? options.clickTolerance * options.clickTolerance : 36;
	        /**
	         * Draw overlay where our sketch features are drawn.
	         * @type {VectorLayer}
	         * @private
	         */
	        _this.overlay_ = new _Vector2.default({
	            source: new _Vector4.default({
	                useSpatialIndex: false,
	                wrapX: options.wrapX ? options.wrapX : false
	            }),
	            style: options.style ? options.style : getDefaultStyleFunction(),
	            updateWhileInteracting: true
	        });
	        /**
	         * Name of the geometry attribute for newly created features.
	         * @type {string|undefined}
	         * @private
	         */
	        _this.geometryName_ = options.geometryName;
	        /**
	         * @private
	         * @type {import("../events/condition.js").Condition}
	         */
	        _this.condition_ = options.condition ? options.condition : _condition.noModifierKeys;
	        /**
	         * @private
	         * @type {import("../events/condition.js").Condition}
	         */
	        _this.freehandCondition_;
	        if (options.freehand) {
	            _this.freehandCondition_ = _condition.always;
	        } else {
	            _this.freehandCondition_ = options.freehandCondition ? options.freehandCondition : _condition.shiftKeyOnly;
	        }
	        _this.addEventListener((0, _Object.getChangeEventType)(_Property2.default.ACTIVE), _this.updateState_);
	        return _this;
	    }
	    /**
	     * @inheritDoc
	     */
	    Draw.prototype.setMap = function (map) {
	        _super.prototype.setMap.call(this, map);
	        this.updateState_();
	    };
	    /**
	     * Get the overlay layer that this interaction renders sketch features to.
	     * @return {VectorLayer} Overlay layer.
	     * @api
	     */
	    Draw.prototype.getOverlay = function () {
	        return this.overlay_;
	    };
	    /**
	     * Handles the {@link module:ol/MapBrowserEvent map browser event} and may actually draw or finish the drawing.
	     * @override
	     * @api
	     */
	    Draw.prototype.handleEvent = function (event) {
	        if (event.originalEvent.type === _EventType2.default.CONTEXTMENU) {
	            // Avoid context menu for long taps when drawing on mobile
	            event.preventDefault();
	        }
	        this.freehand_ = this.mode_ !== Mode.POINT && this.freehandCondition_(event);
	        var move = event.type === _MapBrowserEventType2.default.POINTERMOVE;
	        var pass = true;
	        if (!this.freehand_ && this.lastDragTime_ && event.type === _MapBrowserEventType2.default.POINTERDRAG) {
	            var now = Date.now();
	            if (now - this.lastDragTime_ >= this.dragVertexDelay_) {
	                this.downPx_ = event.pixel;
	                this.shouldHandle_ = !this.freehand_;
	                move = true;
	            } else {
	                this.lastDragTime_ = undefined;
	            }
	            if (this.shouldHandle_ && this.downTimeout_ !== undefined) {
	                clearTimeout(this.downTimeout_);
	                this.downTimeout_ = undefined;
	            }
	        }
	        if (this.freehand_ && event.type === _MapBrowserEventType2.default.POINTERDRAG && this.sketchFeature_ !== null) {
	            this.addToDrawing_(event);
	            pass = false;
	        } else if (this.freehand_ && event.type === _MapBrowserEventType2.default.POINTERDOWN) {
	            pass = false;
	        } else if (move) {
	            pass = event.type === _MapBrowserEventType2.default.POINTERMOVE;
	            if (pass && this.freehand_) {
	                pass = this.handlePointerMove_(event);
	            } else if ( /** @type {MapBrowserPointerEvent} */event.pointerEvent.pointerType == 'mouse' || event.type === _MapBrowserEventType2.default.POINTERDRAG && this.downTimeout_ === undefined) {
	                this.handlePointerMove_(event);
	            }
	        } else if (event.type === _MapBrowserEventType2.default.DBLCLICK) {
	            pass = false;
	        }
	        return _super.prototype.handleEvent.call(this, event) && pass;
	    };
	    /**
	     * @inheritDoc
	     */
	    Draw.prototype.handleDownEvent = function (event) {
	        this.shouldHandle_ = !this.freehand_;
	        if (this.freehand_) {
	            this.downPx_ = event.pixel;
	            if (!this.finishCoordinate_) {
	                this.startDrawing_(event);
	            }
	            return true;
	        } else if (this.condition_(event)) {
	            this.lastDragTime_ = Date.now();
	            this.downTimeout_ = setTimeout(function () {
	                this.handlePointerMove_(new _MapBrowserPointerEvent2.default(_MapBrowserEventType2.default.POINTERMOVE, event.map, event.pointerEvent, false, event.frameState));
	            }.bind(this), this.dragVertexDelay_);
	            this.downPx_ = event.pixel;
	            return true;
	        } else {
	            this.lastDragTime_ = undefined;
	            return false;
	        }
	    };
	    /**
	     * @inheritDoc
	     */
	    Draw.prototype.handleUpEvent = function (event) {
	        var pass = true;
	        if (this.downTimeout_) {
	            clearTimeout(this.downTimeout_);
	            this.downTimeout_ = undefined;
	        }
	        this.handlePointerMove_(event);
	        var circleMode = this.mode_ === Mode.CIRCLE;
	        if (this.shouldHandle_) {
	            if (!this.finishCoordinate_) {
	                this.startDrawing_(event);
	                if (this.mode_ === Mode.POINT) {
	                    this.finishDrawing();
	                }
	            } else if (this.freehand_ || circleMode) {
	                this.finishDrawing();
	            } else if (this.atFinish_(event)) {
	                if (this.finishCondition_(event)) {
	                    this.finishDrawing();
	                }
	            } else {
	                this.addToDrawing_(event);
	            }
	            pass = false;
	        } else if (this.freehand_) {
	            this.finishCoordinate_ = null;
	            this.abortDrawing_();
	        }
	        if (!pass && this.stopClick_) {
	            event.stopPropagation();
	        }
	        return pass;
	    };
	    /**
	     * Handle move events.
	     * @param {import("../MapBrowserEvent.js").default} event A move event.
	     * @return {boolean} Pass the event to other interactions.
	     * @private
	     */
	    Draw.prototype.handlePointerMove_ = function (event) {
	        if (this.downPx_ && (!this.freehand_ && this.shouldHandle_ || this.freehand_ && !this.shouldHandle_)) {
	            var downPx = this.downPx_;
	            var clickPx = event.pixel;
	            var dx = downPx[0] - clickPx[0];
	            var dy = downPx[1] - clickPx[1];
	            var squaredDistance = dx * dx + dy * dy;
	            this.shouldHandle_ = this.freehand_ ? squaredDistance > this.squaredClickTolerance_ : squaredDistance <= this.squaredClickTolerance_;
	            if (!this.shouldHandle_) {
	                return true;
	            }
	        }
	        if (this.finishCoordinate_) {
	            this.modifyDrawing_(event);
	        } else {
	            this.createOrUpdateSketchPoint_(event);
	        }
	        return true;
	    };
	    /**
	     * Determine if an event is within the snapping tolerance of the start coord.
	     * @param {import("../MapBrowserEvent.js").default} event Event.
	     * @return {boolean} The event is within the snapping tolerance of the start.
	     * @private
	     */
	    Draw.prototype.atFinish_ = function (event) {
	        var at = false;
	        if (this.sketchFeature_) {
	            var potentiallyDone = false;
	            var potentiallyFinishCoordinates = [this.finishCoordinate_];
	            if (this.mode_ === Mode.LINE_STRING) {
	                potentiallyDone = this.sketchCoords_.length > this.minPoints_;
	            } else if (this.mode_ === Mode.POLYGON) {
	                var sketchCoords = /** @type {PolyCoordType} */this.sketchCoords_;
	                potentiallyDone = sketchCoords[0].length > this.minPoints_;
	                potentiallyFinishCoordinates = [sketchCoords[0][0], sketchCoords[0][sketchCoords[0].length - 2]];
	            }
	            if (potentiallyDone) {
	                var map = event.map;
	                for (var i = 0, ii = potentiallyFinishCoordinates.length; i < ii; i++) {
	                    var finishCoordinate = potentiallyFinishCoordinates[i];
	                    var finishPixel = map.getPixelFromCoordinate(finishCoordinate);
	                    var pixel = event.pixel;
	                    var dx = pixel[0] - finishPixel[0];
	                    var dy = pixel[1] - finishPixel[1];
	                    var snapTolerance = this.freehand_ ? 1 : this.snapTolerance_;
	                    at = Math.sqrt(dx * dx + dy * dy) <= snapTolerance;
	                    if (at) {
	                        this.finishCoordinate_ = finishCoordinate;
	                        break;
	                    }
	                }
	            }
	        }
	        return at;
	    };
	    /**
	     * @param {import("../MapBrowserEvent.js").default} event Event.
	     * @private
	     */
	    Draw.prototype.createOrUpdateSketchPoint_ = function (event) {
	        var coordinates = event.coordinate.slice();
	        if (!this.sketchPoint_) {
	            this.sketchPoint_ = new _Feature2.default(new _Point2.default(coordinates));
	            this.updateSketchFeatures_();
	        } else {
	            var sketchPointGeom = this.sketchPoint_.getGeometry();
	            sketchPointGeom.setCoordinates(coordinates);
	        }
	    };
	    /**
	     * Start the drawing.
	     * @param {import("../MapBrowserEvent.js").default} event Event.
	     * @private
	     */
	    Draw.prototype.startDrawing_ = function (event) {
	        var start = event.coordinate;
	        this.finishCoordinate_ = start;
	        if (this.mode_ === Mode.POINT) {
	            this.sketchCoords_ = start.slice();
	        } else if (this.mode_ === Mode.POLYGON) {
	            this.sketchCoords_ = [[start.slice(), start.slice()]];
	            this.sketchLineCoords_ = this.sketchCoords_[0];
	        } else {
	            this.sketchCoords_ = [start.slice(), start.slice()];
	        }
	        if (this.sketchLineCoords_) {
	            this.sketchLine_ = new _Feature2.default(new _LineString2.default(this.sketchLineCoords_));
	        }
	        var geometry = this.geometryFunction_(this.sketchCoords_);
	        this.sketchFeature_ = new _Feature2.default();
	        if (this.geometryName_) {
	            this.sketchFeature_.setGeometryName(this.geometryName_);
	        }
	        this.sketchFeature_.setGeometry(geometry);
	        this.updateSketchFeatures_();
	        this.dispatchEvent(new DrawEvent(DrawEventType.DRAWSTART, this.sketchFeature_));
	    };
	    /**
	     * Modify the drawing.
	     * @param {import("../MapBrowserEvent.js").default} event Event.
	     * @private
	     */
	    Draw.prototype.modifyDrawing_ = function (event) {
	        var coordinate = event.coordinate;
	        var geometry = this.sketchFeature_.getGeometry();
	        var coordinates, last;
	        if (this.mode_ === Mode.POINT) {
	            last = this.sketchCoords_;
	        } else if (this.mode_ === Mode.POLYGON) {
	            coordinates = /** @type {PolyCoordType} */this.sketchCoords_[0];
	            last = coordinates[coordinates.length - 1];
	            if (this.atFinish_(event)) {
	                // snap to finish
	                coordinate = this.finishCoordinate_.slice();
	            }
	        } else {
	            coordinates = this.sketchCoords_;
	            last = coordinates[coordinates.length - 1];
	        }
	        last[0] = coordinate[0];
	        last[1] = coordinate[1];
	        this.geometryFunction_( /** @type {!LineCoordType} */this.sketchCoords_, geometry);
	        if (this.sketchPoint_) {
	            var sketchPointGeom = this.sketchPoint_.getGeometry();
	            sketchPointGeom.setCoordinates(coordinate);
	        }
	        /** @type {LineString} */
	        var sketchLineGeom;
	        if (geometry.getType() == _GeometryType2.default.POLYGON && this.mode_ !== Mode.POLYGON) {
	            if (!this.sketchLine_) {
	                this.sketchLine_ = new _Feature2.default();
	            }
	            var ring = geometry.getLinearRing(0);
	            sketchLineGeom = this.sketchLine_.getGeometry();
	            if (!sketchLineGeom) {
	                sketchLineGeom = new _LineString2.default(ring.getFlatCoordinates(), ring.getLayout());
	                this.sketchLine_.setGeometry(sketchLineGeom);
	            } else {
	                sketchLineGeom.setFlatCoordinates(ring.getLayout(), ring.getFlatCoordinates());
	                sketchLineGeom.changed();
	            }
	        } else if (this.sketchLineCoords_) {
	            sketchLineGeom = this.sketchLine_.getGeometry();
	            sketchLineGeom.setCoordinates(this.sketchLineCoords_);
	        }
	        this.updateSketchFeatures_();
	    };
	    /**
	     * Add a new coordinate to the drawing.
	     * @param {import("../MapBrowserEvent.js").default} event Event.
	     * @private
	     */
	    Draw.prototype.addToDrawing_ = function (event) {
	        var coordinate = event.coordinate;
	        var geometry = this.sketchFeature_.getGeometry();
	        var done;
	        var coordinates;
	        if (this.mode_ === Mode.LINE_STRING) {
	            this.finishCoordinate_ = coordinate.slice();
	            coordinates = /** @type {LineCoordType} */this.sketchCoords_;
	            if (coordinates.length >= this.maxPoints_) {
	                if (this.freehand_) {
	                    coordinates.pop();
	                } else {
	                    done = true;
	                }
	            }
	            coordinates.push(coordinate.slice());
	            this.geometryFunction_(coordinates, geometry);
	        } else if (this.mode_ === Mode.POLYGON) {
	            coordinates = /** @type {PolyCoordType} */this.sketchCoords_[0];
	            if (coordinates.length >= this.maxPoints_) {
	                if (this.freehand_) {
	                    coordinates.pop();
	                } else {
	                    done = true;
	                }
	            }
	            coordinates.push(coordinate.slice());
	            if (done) {
	                this.finishCoordinate_ = coordinates[0];
	            }
	            this.geometryFunction_(this.sketchCoords_, geometry);
	        }
	        this.updateSketchFeatures_();
	        if (done) {
	            this.finishDrawing();
	        }
	    };
	    /**
	     * Remove last point of the feature currently being drawn.
	     * @api
	     */
	    Draw.prototype.removeLastPoint = function () {
	        if (!this.sketchFeature_) {
	            return;
	        }
	        var geometry = this.sketchFeature_.getGeometry();
	        var coordinates;
	        /** @type {LineString} */
	        var sketchLineGeom;
	        if (this.mode_ === Mode.LINE_STRING) {
	            coordinates = /** @type {LineCoordType} */this.sketchCoords_;
	            coordinates.splice(-2, 1);
	            this.geometryFunction_(coordinates, geometry);
	            if (coordinates.length >= 2) {
	                this.finishCoordinate_ = coordinates[coordinates.length - 2].slice();
	            }
	        } else if (this.mode_ === Mode.POLYGON) {
	            coordinates = /** @type {PolyCoordType} */this.sketchCoords_[0];
	            coordinates.splice(-2, 1);
	            sketchLineGeom = this.sketchLine_.getGeometry();
	            sketchLineGeom.setCoordinates(coordinates);
	            this.geometryFunction_(this.sketchCoords_, geometry);
	        }
	        if (coordinates.length === 0) {
	            this.finishCoordinate_ = null;
	        }
	        this.updateSketchFeatures_();
	    };
	    /**
	     * Stop drawing and add the sketch feature to the target layer.
	     * The {@link module:ol/interaction/Draw~DrawEventType.DRAWEND} event is
	     * dispatched before inserting the feature.
	     * @api
	     */
	    Draw.prototype.finishDrawing = function () {
	        var sketchFeature = this.abortDrawing_();
	        if (!sketchFeature) {
	            return;
	        }
	        var coordinates = this.sketchCoords_;
	        var geometry = sketchFeature.getGeometry();
	        if (this.mode_ === Mode.LINE_STRING) {
	            // remove the redundant last point
	            coordinates.pop();
	            this.geometryFunction_(coordinates, geometry);
	        } else if (this.mode_ === Mode.POLYGON) {
	            // remove the redundant last point in ring
	            /** @type {PolyCoordType} */coordinates[0].pop();
	            this.geometryFunction_(coordinates, geometry);
	            coordinates = geometry.getCoordinates();
	        }
	        // cast multi-part geometries
	        if (this.type_ === _GeometryType2.default.MULTI_POINT) {
	            sketchFeature.setGeometry(new _MultiPoint2.default([/** @type {PointCoordType} */coordinates]));
	        } else if (this.type_ === _GeometryType2.default.MULTI_LINE_STRING) {
	            sketchFeature.setGeometry(new _MultiLineString2.default([/** @type {LineCoordType} */coordinates]));
	        } else if (this.type_ === _GeometryType2.default.MULTI_POLYGON) {
	            sketchFeature.setGeometry(new _MultiPolygon2.default([/** @type {PolyCoordType} */coordinates]));
	        }
	        // First dispatch event to allow full set up of feature
	        this.dispatchEvent(new DrawEvent(DrawEventType.DRAWEND, sketchFeature));
	        // Then insert feature
	        if (this.features_) {
	            this.features_.push(sketchFeature);
	        }
	        if (this.source_) {
	            this.source_.addFeature(sketchFeature);
	        }
	    };
	    /**
	     * Stop drawing without adding the sketch feature to the target layer.
	     * @return {Feature} The sketch feature (or null if none).
	     * @private
	     */
	    Draw.prototype.abortDrawing_ = function () {
	        this.finishCoordinate_ = null;
	        var sketchFeature = this.sketchFeature_;
	        if (sketchFeature) {
	            this.sketchFeature_ = null;
	            this.sketchPoint_ = null;
	            this.sketchLine_ = null;
	            this.overlay_.getSource().clear(true);
	        }
	        return sketchFeature;
	    };
	    /**
	     * Extend an existing geometry by adding additional points. This only works
	     * on features with `LineString` geometries, where the interaction will
	     * extend lines by adding points to the end of the coordinates array.
	     * @param {!Feature<LineString>} feature Feature to be extended.
	     * @api
	     */
	    Draw.prototype.extend = function (feature) {
	        var geometry = feature.getGeometry();
	        var lineString = geometry;
	        this.sketchFeature_ = feature;
	        this.sketchCoords_ = lineString.getCoordinates();
	        var last = this.sketchCoords_[this.sketchCoords_.length - 1];
	        this.finishCoordinate_ = last.slice();
	        this.sketchCoords_.push(last.slice());
	        this.updateSketchFeatures_();
	        this.dispatchEvent(new DrawEvent(DrawEventType.DRAWSTART, this.sketchFeature_));
	    };
	    /**
	     * Redraw the sketch features.
	     * @private
	     */
	    Draw.prototype.updateSketchFeatures_ = function () {
	        var sketchFeatures = [];
	        if (this.sketchFeature_) {
	            sketchFeatures.push(this.sketchFeature_);
	        }
	        if (this.sketchLine_) {
	            sketchFeatures.push(this.sketchLine_);
	        }
	        if (this.sketchPoint_) {
	            sketchFeatures.push(this.sketchPoint_);
	        }
	        var overlaySource = this.overlay_.getSource();
	        overlaySource.clear(true);
	        overlaySource.addFeatures(sketchFeatures);
	    };
	    /**
	     * @private
	     */
	    Draw.prototype.updateState_ = function () {
	        var map = this.getMap();
	        var active = this.getActive();
	        if (!map || !active) {
	            this.abortDrawing_();
	        }
	        this.overlay_.setMap(active ? map : null);
	    };
	    return Draw;
	}(_Pointer2.default);
	/**
	 * @return {import("../style/Style.js").StyleFunction} Styles.
	 */
	function getDefaultStyleFunction() {
	    var styles = (0, _Style.createEditingStyle)();
	    return function (feature, resolution) {
	        return styles[feature.getGeometry().getType()];
	    };
	}
	/**
	 * Create a `geometryFunction` for `type: 'Circle'` that will create a regular
	 * polygon with a user specified number of sides and start angle instead of an
	 * `import("../geom/Circle.js").Circle` geometry.
	 * @param {number=} opt_sides Number of sides of the regular polygon. Default is
	 *     32.
	 * @param {number=} opt_angle Angle of the first point in radians. 0 means East.
	 *     Default is the angle defined by the heading from the center of the
	 *     regular polygon to the current pointer position.
	 * @return {GeometryFunction} Function that draws a
	 *     polygon.
	 * @api
	 */
	function createRegularPolygon(opt_sides, opt_angle) {
	    return function (coordinates, opt_geometry) {
	        var center = /** @type {LineCoordType} */coordinates[0];
	        var end = /** @type {LineCoordType} */coordinates[1];
	        var radius = Math.sqrt((0, _coordinate.squaredDistance)(center, end));
	        var geometry = opt_geometry ? /** @type {Polygon} */opt_geometry : (0, _Polygon.fromCircle)(new _Circle2.default(center), opt_sides);
	        var angle = opt_angle;
	        if (!opt_angle) {
	            var x = end[0] - center[0];
	            var y = end[1] - center[1];
	            angle = Math.atan(y / x) - (x < 0 ? Math.PI : 0);
	        }
	        (0, _Polygon.makeRegular)(geometry, center, radius, angle);
	        return geometry;
	    };
	}
	/**
	 * Create a `geometryFunction` that will create a box-shaped polygon (aligned
	 * with the coordinate system axes).  Use this with the draw interaction and
	 * `type: 'Circle'` to return a box instead of a circle geometry.
	 * @return {GeometryFunction} Function that draws a box-shaped polygon.
	 * @api
	 */
	function createBox() {
	    return function (coordinates, opt_geometry) {
	        var extent = (0, _extent.boundingExtent)( /** @type {LineCoordType} */coordinates);
	        var boxCoordinates = [[(0, _extent.getBottomLeft)(extent), (0, _extent.getBottomRight)(extent), (0, _extent.getTopRight)(extent), (0, _extent.getTopLeft)(extent), (0, _extent.getBottomLeft)(extent)]];
	        var geometry = opt_geometry;
	        if (geometry) {
	            geometry.setCoordinates(boxCoordinates);
	        } else {
	            geometry = new _Polygon2.default(boxCoordinates);
	        }
	        return geometry;
	    };
	}
	/**
	 * Get the drawing mode.  The mode for mult-part geometries is the same as for
	 * their single-part cousins.
	 * @param {GeometryType} type Geometry type.
	 * @return {Mode} Drawing mode.
	 */
	function getMode(type) {
	    var mode;
	    if (type === _GeometryType2.default.POINT || type === _GeometryType2.default.MULTI_POINT) {
	        mode = Mode.POINT;
	    } else if (type === _GeometryType2.default.LINE_STRING || type === _GeometryType2.default.MULTI_LINE_STRING) {
	        mode = Mode.LINE_STRING;
	    } else if (type === _GeometryType2.default.POLYGON || type === _GeometryType2.default.MULTI_POLYGON) {
	        mode = Mode.POLYGON;
	    } else if (type === _GeometryType2.default.CIRCLE) {
	        mode = Mode.CIRCLE;
	    }
	    return (
	        /** @type {!Mode} */mode
	    );
	}
	exports.default = Draw;
	//# sourceMappingURL=Draw.js.map

/***/ }),
/* 284 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	
	var _util = __webpack_require__(14);
	
	var _Object = __webpack_require__(32);
	
	var _Object2 = _interopRequireDefault(_Object);
	
	var _Property = __webpack_require__(286);
	
	var _Property2 = _interopRequireDefault(_Property);
	
	var _math = __webpack_require__(19);
	
	var _obj = __webpack_require__(23);
	
	var _asserts = __webpack_require__(29);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var __extends = undefined && undefined.__extends || function () {
	    var _extendStatics = function extendStatics(d, b) {
	        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	            d.__proto__ = b;
	        } || function (d, b) {
	            for (var p in b) {
	                if (b.hasOwnProperty(p)) d[p] = b[p];
	            }
	        };
	        return _extendStatics(d, b);
	    };
	    return function (d, b) {
	        _extendStatics(d, b);
	        function __() {
	            this.constructor = d;
	        }
	        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	    };
	}();
	/**
	 * @module ol/layer/Base
	 */
	
	/**
	 * @typedef {Object} Options
	 * @property {string} [className='ol-layer'] A CSS class name to set to the layer element.
	 * @property {number} [opacity=1] Opacity (0, 1).
	 * @property {boolean} [visible=true] Visibility.
	 * @property {import("../extent.js").Extent} [extent] The bounding extent for layer rendering.  The layer will not be
	 * rendered outside of this extent.
	 * @property {number} [zIndex] The z-index for layer rendering.  At rendering time, the layers
	 * will be ordered, first by Z-index and then by position. When `undefined`, a `zIndex` of 0 is assumed
	 * for layers that are added to the map's `layers` collection, or `Infinity` when the layer's `setMap()`
	 * method was used.
	 * @property {number} [minResolution] The minimum resolution (inclusive) at which this layer will be
	 * visible.
	 * @property {number} [maxResolution] The maximum resolution (exclusive) below which this layer will
	 * be visible.
	 * @property {number} [minZoom] The minimum view zoom level (exclusive) above which this layer will be
	 * visible.
	 * @property {number} [maxZoom] The maximum view zoom level (inclusive) at which this layer will
	 * be visible.
	 */
	/**
	 * @classdesc
	 * Abstract base class; normally only used for creating subclasses and not
	 * instantiated in apps.
	 * Note that with {@link module:ol/layer/Base} and all its subclasses, any property set in
	 * the options is set as a {@link module:ol/Object} property on the layer object, so
	 * is observable, and has get/set accessors.
	 *
	 * @api
	 */
	var BaseLayer = /** @class */function (_super) {
	    __extends(BaseLayer, _super);
	    /**
	     * @param {Options} options Layer options.
	     */
	    function BaseLayer(options) {
	        var _this = _super.call(this) || this;
	        /**
	         * @type {Object<string, *>}
	         */
	        var properties = (0, _obj.assign)({}, options);
	        properties[_Property2.default.OPACITY] = options.opacity !== undefined ? options.opacity : 1;
	        (0, _asserts.assert)(typeof properties[_Property2.default.OPACITY] === 'number', 64); // Layer opacity must be a number
	        properties[_Property2.default.VISIBLE] = options.visible !== undefined ? options.visible : true;
	        properties[_Property2.default.Z_INDEX] = options.zIndex;
	        properties[_Property2.default.MAX_RESOLUTION] = options.maxResolution !== undefined ? options.maxResolution : Infinity;
	        properties[_Property2.default.MIN_RESOLUTION] = options.minResolution !== undefined ? options.minResolution : 0;
	        properties[_Property2.default.MIN_ZOOM] = options.minZoom !== undefined ? options.minZoom : -Infinity;
	        properties[_Property2.default.MAX_ZOOM] = options.maxZoom !== undefined ? options.maxZoom : Infinity;
	        /**
	         * @type {string}
	         * @private
	         */
	        _this.className_ = properties.className !== undefined ? options.className : 'ol-layer';
	        delete properties.className;
	        _this.setProperties(properties);
	        /**
	         * @type {import("./Layer.js").State}
	         * @private
	         */
	        _this.state_ = null;
	        return _this;
	    }
	    /**
	     * @return {string} CSS class name.
	     */
	    BaseLayer.prototype.getClassName = function () {
	        return this.className_;
	    };
	    /**
	     * This method is not meant to be called by layers or layer renderers because the state
	     * is incorrect if the layer is included in a layer group.
	     *
	     * @param {boolean=} opt_managed Layer is managed.
	     * @return {import("./Layer.js").State} Layer state.
	     */
	    BaseLayer.prototype.getLayerState = function (opt_managed) {
	        /** @type {import("./Layer.js").State} */
	        var state = this.state_ || /** @type {?} */{
	            layer: this,
	            managed: opt_managed === undefined ? true : opt_managed
	        };
	        var zIndex = this.getZIndex();
	        state.opacity = (0, _math.clamp)(Math.round(this.getOpacity() * 100) / 100, 0, 1);
	        state.sourceState = this.getSourceState();
	        state.visible = this.getVisible();
	        state.extent = this.getExtent();
	        state.zIndex = zIndex !== undefined ? zIndex : state.managed === false ? Infinity : 0;
	        state.maxResolution = this.getMaxResolution();
	        state.minResolution = Math.max(this.getMinResolution(), 0);
	        state.minZoom = this.getMinZoom();
	        state.maxZoom = this.getMaxZoom();
	        this.state_ = state;
	        return state;
	    };
	    /**
	     * @abstract
	     * @param {Array<import("./Layer.js").default>=} opt_array Array of layers (to be
	     *     modified in place).
	     * @return {Array<import("./Layer.js").default>} Array of layers.
	     */
	    BaseLayer.prototype.getLayersArray = function (opt_array) {
	        return (0, _util.abstract)();
	    };
	    /**
	     * @abstract
	     * @param {Array<import("./Layer.js").State>=} opt_states Optional list of layer
	     *     states (to be modified in place).
	     * @return {Array<import("./Layer.js").State>} List of layer states.
	     */
	    BaseLayer.prototype.getLayerStatesArray = function (opt_states) {
	        return (0, _util.abstract)();
	    };
	    /**
	     * Return the {@link module:ol/extent~Extent extent} of the layer or `undefined` if it
	     * will be visible regardless of extent.
	     * @return {import("../extent.js").Extent|undefined} The layer extent.
	     * @observable
	     * @api
	     */
	    BaseLayer.prototype.getExtent = function () {
	        return (
	            /** @type {import("../extent.js").Extent|undefined} */this.get(_Property2.default.EXTENT)
	        );
	    };
	    /**
	     * Return the maximum resolution of the layer.
	     * @return {number} The maximum resolution of the layer.
	     * @observable
	     * @api
	     */
	    BaseLayer.prototype.getMaxResolution = function () {
	        return (/** @type {number} */this.get(_Property2.default.MAX_RESOLUTION)
	        );
	    };
	    /**
	     * Return the minimum resolution of the layer.
	     * @return {number} The minimum resolution of the layer.
	     * @observable
	     * @api
	     */
	    BaseLayer.prototype.getMinResolution = function () {
	        return (/** @type {number} */this.get(_Property2.default.MIN_RESOLUTION)
	        );
	    };
	    /**
	     * Return the minimum zoom level of the layer.
	     * @return {number} The minimum zoom level of the layer.
	     * @observable
	     * @api
	     */
	    BaseLayer.prototype.getMinZoom = function () {
	        return (/** @type {number} */this.get(_Property2.default.MIN_ZOOM)
	        );
	    };
	    /**
	     * Return the maximum zoom level of the layer.
	     * @return {number} The maximum zoom level of the layer.
	     * @observable
	     * @api
	     */
	    BaseLayer.prototype.getMaxZoom = function () {
	        return (/** @type {number} */this.get(_Property2.default.MAX_ZOOM)
	        );
	    };
	    /**
	     * Return the opacity of the layer (between 0 and 1).
	     * @return {number} The opacity of the layer.
	     * @observable
	     * @api
	     */
	    BaseLayer.prototype.getOpacity = function () {
	        return (/** @type {number} */this.get(_Property2.default.OPACITY)
	        );
	    };
	    /**
	     * @abstract
	     * @return {import("../source/State.js").default} Source state.
	     */
	    BaseLayer.prototype.getSourceState = function () {
	        return (0, _util.abstract)();
	    };
	    /**
	     * Return the visibility of the layer (`true` or `false`).
	     * @return {boolean} The visibility of the layer.
	     * @observable
	     * @api
	     */
	    BaseLayer.prototype.getVisible = function () {
	        return (/** @type {boolean} */this.get(_Property2.default.VISIBLE)
	        );
	    };
	    /**
	     * Return the Z-index of the layer, which is used to order layers before
	     * rendering. The default Z-index is 0.
	     * @return {number} The Z-index of the layer.
	     * @observable
	     * @api
	     */
	    BaseLayer.prototype.getZIndex = function () {
	        return (/** @type {number} */this.get(_Property2.default.Z_INDEX)
	        );
	    };
	    /**
	     * Set the extent at which the layer is visible.  If `undefined`, the layer
	     * will be visible at all extents.
	     * @param {import("../extent.js").Extent|undefined} extent The extent of the layer.
	     * @observable
	     * @api
	     */
	    BaseLayer.prototype.setExtent = function (extent) {
	        this.set(_Property2.default.EXTENT, extent);
	    };
	    /**
	     * Set the maximum resolution at which the layer is visible.
	     * @param {number} maxResolution The maximum resolution of the layer.
	     * @observable
	     * @api
	     */
	    BaseLayer.prototype.setMaxResolution = function (maxResolution) {
	        this.set(_Property2.default.MAX_RESOLUTION, maxResolution);
	    };
	    /**
	     * Set the minimum resolution at which the layer is visible.
	     * @param {number} minResolution The minimum resolution of the layer.
	     * @observable
	     * @api
	     */
	    BaseLayer.prototype.setMinResolution = function (minResolution) {
	        this.set(_Property2.default.MIN_RESOLUTION, minResolution);
	    };
	    /**
	     * Set the maximum zoom (exclusive) at which the layer is visible.
	     * Note that the zoom levels for layer visibility are based on the
	     * view zoom level, which may be different from a tile source zoom level.
	     * @param {number} maxZoom The maximum zoom of the layer.
	     * @observable
	     * @api
	     */
	    BaseLayer.prototype.setMaxZoom = function (maxZoom) {
	        this.set(_Property2.default.MAX_ZOOM, maxZoom);
	    };
	    /**
	     * Set the minimum zoom (inclusive) at which the layer is visible.
	     * Note that the zoom levels for layer visibility are based on the
	     * view zoom level, which may be different from a tile source zoom level.
	     * @param {number} minZoom The minimum zoom of the layer.
	     * @observable
	     * @api
	     */
	    BaseLayer.prototype.setMinZoom = function (minZoom) {
	        this.set(_Property2.default.MIN_ZOOM, minZoom);
	    };
	    /**
	     * Set the opacity of the layer, allowed values range from 0 to 1.
	     * @param {number} opacity The opacity of the layer.
	     * @observable
	     * @api
	     */
	    BaseLayer.prototype.setOpacity = function (opacity) {
	        (0, _asserts.assert)(typeof opacity === 'number', 64); // Layer opacity must be a number
	        this.set(_Property2.default.OPACITY, opacity);
	    };
	    /**
	     * Set the visibility of the layer (`true` or `false`).
	     * @param {boolean} visible The visibility of the layer.
	     * @observable
	     * @api
	     */
	    BaseLayer.prototype.setVisible = function (visible) {
	        this.set(_Property2.default.VISIBLE, visible);
	    };
	    /**
	     * Set Z-index of the layer, which is used to order layers before rendering.
	     * The default Z-index is 0.
	     * @param {number} zindex The z-index of the layer.
	     * @observable
	     * @api
	     */
	    BaseLayer.prototype.setZIndex = function (zindex) {
	        this.set(_Property2.default.Z_INDEX, zindex);
	    };
	    /**
	     * @inheritDoc
	     */
	    BaseLayer.prototype.disposeInternal = function () {
	        if (this.state_) {
	            this.state_.layer = null;
	            this.state_ = null;
	        }
	        _super.prototype.disposeInternal.call(this);
	    };
	    return BaseLayer;
	}(_Object2.default);
	exports.default = BaseLayer;
	//# sourceMappingURL=Base.js.map

/***/ }),
/* 285 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	
	var _util = __webpack_require__(14);
	
	var _Collection = __webpack_require__(63);
	
	var _Collection2 = _interopRequireDefault(_Collection);
	
	var _CollectionEventType = __webpack_require__(83);
	
	var _CollectionEventType2 = _interopRequireDefault(_CollectionEventType);
	
	var _Object = __webpack_require__(32);
	
	var _ObjectEventType = __webpack_require__(124);
	
	var _ObjectEventType2 = _interopRequireDefault(_ObjectEventType);
	
	var _asserts = __webpack_require__(29);
	
	var _events = __webpack_require__(30);
	
	var _EventType = __webpack_require__(10);
	
	var _EventType2 = _interopRequireDefault(_EventType);
	
	var _extent = __webpack_require__(4);
	
	var _Base = __webpack_require__(284);
	
	var _Base2 = _interopRequireDefault(_Base);
	
	var _obj = __webpack_require__(23);
	
	var _State = __webpack_require__(107);
	
	var _State2 = _interopRequireDefault(_State);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var __extends = undefined && undefined.__extends || function () {
	    var _extendStatics = function extendStatics(d, b) {
	        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	            d.__proto__ = b;
	        } || function (d, b) {
	            for (var p in b) {
	                if (b.hasOwnProperty(p)) d[p] = b[p];
	            }
	        };
	        return _extendStatics(d, b);
	    };
	    return function (d, b) {
	        _extendStatics(d, b);
	        function __() {
	            this.constructor = d;
	        }
	        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	    };
	}();
	/**
	 * @module ol/layer/Group
	 */
	
	/**
	 * @typedef {Object} Options
	 * @property {number} [opacity=1] Opacity (0, 1).
	 * @property {boolean} [visible=true] Visibility.
	 * @property {import("../extent.js").Extent} [extent] The bounding extent for layer rendering.  The layer will not be
	 * rendered outside of this extent.
	 * @property {number} [zIndex] The z-index for layer rendering.  At rendering time, the layers
	 * will be ordered, first by Z-index and then by position. When `undefined`, a `zIndex` of 0 is assumed
	 * for layers that are added to the map's `layers` collection, or `Infinity` when the layer's `setMap()`
	 * method was used.
	 * @property {number} [minResolution] The minimum resolution (inclusive) at which this layer will be
	 * visible.
	 * @property {number} [maxResolution] The maximum resolution (exclusive) below which this layer will
	 * be visible.
	 * @property {number} [minZoom] The minimum view zoom level (exclusive) above which this layer will be
	 * visible.
	 * @property {number} [maxZoom] The maximum view zoom level (inclusive) at which this layer will
	 * be visible.
	 * @property {Array<import("./Base.js").default>|import("../Collection.js").default<import("./Base.js").default>} [layers] Child layers.
	 */
	/**
	 * @enum {string}
	 * @private
	 */
	var Property = {
	    LAYERS: 'layers'
	};
	/**
	 * @classdesc
	 * A {@link module:ol/Collection~Collection} of layers that are handled together.
	 *
	 * A generic `change` event is triggered when the group/Collection changes.
	 *
	 * @api
	 */
	var LayerGroup = /** @class */function (_super) {
	    __extends(LayerGroup, _super);
	    /**
	     * @param {Options=} opt_options Layer options.
	     */
	    function LayerGroup(opt_options) {
	        var _this = this;
	        var options = opt_options || {};
	        var baseOptions = /** @type {Options} */(0, _obj.assign)({}, options);
	        delete baseOptions.layers;
	        var layers = options.layers;
	        _this = _super.call(this, baseOptions) || this;
	        /**
	         * @private
	         * @type {Array<import("../events.js").EventsKey>}
	         */
	        _this.layersListenerKeys_ = [];
	        /**
	         * @private
	         * @type {Object<string, Array<import("../events.js").EventsKey>>}
	         */
	        _this.listenerKeys_ = {};
	        _this.addEventListener((0, _Object.getChangeEventType)(Property.LAYERS), _this.handleLayersChanged_);
	        if (layers) {
	            if (Array.isArray(layers)) {
	                layers = new _Collection2.default(layers.slice(), { unique: true });
	            } else {
	                (0, _asserts.assert)(typeof /** @type {?} */layers.getArray === 'function', 43); // Expected `layers` to be an array or a `Collection`
	            }
	        } else {
	            layers = new _Collection2.default(undefined, { unique: true });
	        }
	        _this.setLayers(layers);
	        return _this;
	    }
	    /**
	     * @private
	     */
	    LayerGroup.prototype.handleLayerChange_ = function () {
	        this.changed();
	    };
	    /**
	     * @private
	     */
	    LayerGroup.prototype.handleLayersChanged_ = function () {
	        this.layersListenerKeys_.forEach(_events.unlistenByKey);
	        this.layersListenerKeys_.length = 0;
	        var layers = this.getLayers();
	        this.layersListenerKeys_.push((0, _events.listen)(layers, _CollectionEventType2.default.ADD, this.handleLayersAdd_, this), (0, _events.listen)(layers, _CollectionEventType2.default.REMOVE, this.handleLayersRemove_, this));
	        for (var id in this.listenerKeys_) {
	            this.listenerKeys_[id].forEach(_events.unlistenByKey);
	        }
	        (0, _obj.clear)(this.listenerKeys_);
	        var layersArray = layers.getArray();
	        for (var i = 0, ii = layersArray.length; i < ii; i++) {
	            var layer = layersArray[i];
	            this.listenerKeys_[(0, _util.getUid)(layer)] = [(0, _events.listen)(layer, _ObjectEventType2.default.PROPERTYCHANGE, this.handleLayerChange_, this), (0, _events.listen)(layer, _EventType2.default.CHANGE, this.handleLayerChange_, this)];
	        }
	        this.changed();
	    };
	    /**
	     * @param {import("../Collection.js").CollectionEvent} collectionEvent CollectionEvent.
	     * @private
	     */
	    LayerGroup.prototype.handleLayersAdd_ = function (collectionEvent) {
	        var layer = /** @type {import("./Base.js").default} */collectionEvent.element;
	        this.listenerKeys_[(0, _util.getUid)(layer)] = [(0, _events.listen)(layer, _ObjectEventType2.default.PROPERTYCHANGE, this.handleLayerChange_, this), (0, _events.listen)(layer, _EventType2.default.CHANGE, this.handleLayerChange_, this)];
	        this.changed();
	    };
	    /**
	     * @param {import("../Collection.js").CollectionEvent} collectionEvent CollectionEvent.
	     * @private
	     */
	    LayerGroup.prototype.handleLayersRemove_ = function (collectionEvent) {
	        var layer = /** @type {import("./Base.js").default} */collectionEvent.element;
	        var key = (0, _util.getUid)(layer);
	        this.listenerKeys_[key].forEach(_events.unlistenByKey);
	        delete this.listenerKeys_[key];
	        this.changed();
	    };
	    /**
	     * Returns the {@link module:ol/Collection collection} of {@link module:ol/layer/Layer~Layer layers}
	     * in this group.
	     * @return {!import("../Collection.js").default<import("./Base.js").default>} Collection of
	     *   {@link module:ol/layer/Base layers} that are part of this group.
	     * @observable
	     * @api
	     */
	    LayerGroup.prototype.getLayers = function () {
	        return (
	            /** @type {!import("../Collection.js").default<import("./Base.js").default>} */this.get(Property.LAYERS)
	        );
	    };
	    /**
	     * Set the {@link module:ol/Collection collection} of {@link module:ol/layer/Layer~Layer layers}
	     * in this group.
	     * @param {!import("../Collection.js").default<import("./Base.js").default>} layers Collection of
	     *   {@link module:ol/layer/Base layers} that are part of this group.
	     * @observable
	     * @api
	     */
	    LayerGroup.prototype.setLayers = function (layers) {
	        this.set(Property.LAYERS, layers);
	    };
	    /**
	     * @inheritDoc
	     */
	    LayerGroup.prototype.getLayersArray = function (opt_array) {
	        var array = opt_array !== undefined ? opt_array : [];
	        this.getLayers().forEach(function (layer) {
	            layer.getLayersArray(array);
	        });
	        return array;
	    };
	    /**
	     * @inheritDoc
	     */
	    LayerGroup.prototype.getLayerStatesArray = function (opt_states) {
	        var states = opt_states !== undefined ? opt_states : [];
	        var pos = states.length;
	        this.getLayers().forEach(function (layer) {
	            layer.getLayerStatesArray(states);
	        });
	        var ownLayerState = this.getLayerState();
	        for (var i = pos, ii = states.length; i < ii; i++) {
	            var layerState = states[i];
	            layerState.opacity *= ownLayerState.opacity;
	            layerState.visible = layerState.visible && ownLayerState.visible;
	            layerState.maxResolution = Math.min(layerState.maxResolution, ownLayerState.maxResolution);
	            layerState.minResolution = Math.max(layerState.minResolution, ownLayerState.minResolution);
	            layerState.minZoom = Math.max(layerState.minZoom, ownLayerState.minZoom);
	            layerState.maxZoom = Math.min(layerState.maxZoom, ownLayerState.maxZoom);
	            if (ownLayerState.extent !== undefined) {
	                if (layerState.extent !== undefined) {
	                    layerState.extent = (0, _extent.getIntersection)(layerState.extent, ownLayerState.extent);
	                } else {
	                    layerState.extent = ownLayerState.extent;
	                }
	            }
	        }
	        return states;
	    };
	    /**
	     * @inheritDoc
	     */
	    LayerGroup.prototype.getSourceState = function () {
	        return _State2.default.READY;
	    };
	    return LayerGroup;
	}(_Base2.default);
	exports.default = LayerGroup;
	//# sourceMappingURL=Group.js.map

/***/ }),
/* 286 */
/***/ (function(module, exports) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	/**
	 * @module ol/layer/Property
	 */
	/**
	 * @enum {string}
	 */
	exports.default = {
	  OPACITY: 'opacity',
	  VISIBLE: 'visible',
	  EXTENT: 'extent',
	  Z_INDEX: 'zIndex',
	  MAX_RESOLUTION: 'maxResolution',
	  MIN_RESOLUTION: 'minResolution',
	  MAX_ZOOM: 'maxZoom',
	  MIN_ZOOM: 'minZoom',
	  SOURCE: 'source'
	};
	//# sourceMappingURL=Property.js.map

/***/ }),
/* 287 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	
	var _Event = __webpack_require__(35);
	
	var _Event2 = _interopRequireDefault(_Event);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	/**
	 * @module ol/render/Event
	 */
	var __extends = undefined && undefined.__extends || function () {
	    var _extendStatics = function extendStatics(d, b) {
	        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	            d.__proto__ = b;
	        } || function (d, b) {
	            for (var p in b) {
	                if (b.hasOwnProperty(p)) d[p] = b[p];
	            }
	        };
	        return _extendStatics(d, b);
	    };
	    return function (d, b) {
	        _extendStatics(d, b);
	        function __() {
	            this.constructor = d;
	        }
	        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	    };
	}();
	
	var RenderEvent = /** @class */function (_super) {
	    __extends(RenderEvent, _super);
	    /**
	     * @param {import("./EventType.js").default} type Type.
	     * @param {import("../transform.js").Transform=} opt_inversePixelTransform Transform for
	     *     CSS pixels to rendered pixels.
	     * @param {import("../PluggableMap.js").FrameState=} opt_frameState Frame state.
	     * @param {?CanvasRenderingContext2D=} opt_context Context.
	     */
	    function RenderEvent(type, opt_inversePixelTransform, opt_frameState, opt_context) {
	        var _this = _super.call(this, type) || this;
	        /**
	         * Transform from CSS pixels (relative to the top-left corner of the map viewport)
	         * to rendered pixels on this event's `context`.
	         * @type {import("../transform.js").Transform|undefined}
	         * @api
	         */
	        _this.inversePixelTransform = opt_inversePixelTransform;
	        /**
	         * An object representing the current render frame state.
	         * @type {import("../PluggableMap.js").FrameState|undefined}
	         * @api
	         */
	        _this.frameState = opt_frameState;
	        /**
	         * Canvas context. Not available when the event is dispatched by the map. Only available
	         * when a Canvas renderer is used, null otherwise.
	         * @type {CanvasRenderingContext2D|null|undefined}
	         * @api
	         */
	        _this.context = opt_context;
	        return _this;
	    }
	    return RenderEvent;
	}(_Event2.default);
	exports.default = RenderEvent;
	//# sourceMappingURL=Event.js.map

/***/ }),
/* 288 */
/***/ (function(module, exports) {

	"use strict";
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	/**
	 * @module ol/render/VectorContext
	 */
	/**
	 * @classdesc
	 * Context for drawing geometries.  A vector context is available on render
	 * events and does not need to be constructed directly.
	 * @api
	 */
	var VectorContext = /** @class */function () {
	  function VectorContext() {}
	  /**
	   * Render a geometry with a custom renderer.
	   *
	   * @param {import("../geom/SimpleGeometry.js").default} geometry Geometry.
	   * @param {import("../Feature.js").FeatureLike} feature Feature.
	   * @param {Function} renderer Renderer.
	   */
	  VectorContext.prototype.drawCustom = function (geometry, feature, renderer) {};
	  /**
	   * Render a geometry.
	   *
	   * @param {import("../geom/Geometry.js").default} geometry The geometry to render.
	   */
	  VectorContext.prototype.drawGeometry = function (geometry) {};
	  /**
	   * Set the rendering style.
	   *
	   * @param {import("../style/Style.js").default} style The rendering style.
	   */
	  VectorContext.prototype.setStyle = function (style) {};
	  /**
	   * @param {import("../geom/Circle.js").default} circleGeometry Circle geometry.
	   * @param {import("../Feature.js").default} feature Feature.
	   */
	  VectorContext.prototype.drawCircle = function (circleGeometry, feature) {};
	  /**
	   * @param {import("../Feature.js").default} feature Feature.
	   * @param {import("../style/Style.js").default} style Style.
	   */
	  VectorContext.prototype.drawFeature = function (feature, style) {};
	  /**
	   * @param {import("../geom/GeometryCollection.js").default} geometryCollectionGeometry Geometry collection.
	   * @param {import("../Feature.js").default} feature Feature.
	   */
	  VectorContext.prototype.drawGeometryCollection = function (geometryCollectionGeometry, feature) {};
	  /**
	   * @param {import("../geom/LineString.js").default|import("./Feature.js").default} lineStringGeometry Line string geometry.
	   * @param {import("../Feature.js").FeatureLike} feature Feature.
	   */
	  VectorContext.prototype.drawLineString = function (lineStringGeometry, feature) {};
	  /**
	   * @param {import("../geom/MultiLineString.js").default|import("./Feature.js").default} multiLineStringGeometry MultiLineString geometry.
	   * @param {import("../Feature.js").FeatureLike} feature Feature.
	   */
	  VectorContext.prototype.drawMultiLineString = function (multiLineStringGeometry, feature) {};
	  /**
	   * @param {import("../geom/MultiPoint.js").default|import("./Feature.js").default} multiPointGeometry MultiPoint geometry.
	   * @param {import("../Feature.js").FeatureLike} feature Feature.
	   */
	  VectorContext.prototype.drawMultiPoint = function (multiPointGeometry, feature) {};
	  /**
	   * @param {import("../geom/MultiPolygon.js").default} multiPolygonGeometry MultiPolygon geometry.
	   * @param {import("../Feature.js").FeatureLike} feature Feature.
	   */
	  VectorContext.prototype.drawMultiPolygon = function (multiPolygonGeometry, feature) {};
	  /**
	   * @param {import("../geom/Point.js").default|import("./Feature.js").default} pointGeometry Point geometry.
	   * @param {import("../Feature.js").FeatureLike} feature Feature.
	   */
	  VectorContext.prototype.drawPoint = function (pointGeometry, feature) {};
	  /**
	   * @param {import("../geom/Polygon.js").default|import("./Feature.js").default} polygonGeometry Polygon geometry.
	   * @param {import("../Feature.js").FeatureLike} feature Feature.
	   */
	  VectorContext.prototype.drawPolygon = function (polygonGeometry, feature) {};
	  /**
	   * @param {import("../geom/Geometry.js").default|import("./Feature.js").default} geometry Geometry.
	   * @param {import("../Feature.js").FeatureLike} feature Feature.
	   */
	  VectorContext.prototype.drawText = function (geometry, feature) {};
	  /**
	   * @param {import("../style/Fill.js").default} fillStyle Fill style.
	   * @param {import("../style/Stroke.js").default} strokeStyle Stroke style.
	   */
	  VectorContext.prototype.setFillStrokeStyle = function (fillStyle, strokeStyle) {};
	  /**
	   * @param {import("../style/Image.js").default} imageStyle Image style.
	   * @param {import("./canvas.js").DeclutterGroup=} opt_declutterGroup Declutter.
	   */
	  VectorContext.prototype.setImageStyle = function (imageStyle, opt_declutterGroup) {};
	  /**
	   * @param {import("../style/Text.js").default} textStyle Text style.
	   * @param {import("./canvas.js").DeclutterGroups=} opt_declutterGroups Declutter.
	   */
	  VectorContext.prototype.setTextStyle = function (textStyle, opt_declutterGroups) {};
	  return VectorContext;
	}();
	exports.default = VectorContext;
	//# sourceMappingURL=VectorContext.js.map

/***/ }),
/* 289 */
/***/ (function(module, exports) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	/**
	 * @module ol/render/canvas/BuilderType
	 */
	/**
	 * @enum {string}
	 */
	exports.default = {
	  CIRCLE: 'Circle',
	  DEFAULT: 'Default',
	  IMAGE: 'Image',
	  LINE_STRING: 'LineString',
	  POLYGON: 'Polygon',
	  TEXT: 'Text'
	};
	//# sourceMappingURL=BuilderType.js.map

/***/ }),
/* 290 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	
	var _array = __webpack_require__(18);
	
	var _colorlike = __webpack_require__(144);
	
	var _extent = __webpack_require__(4);
	
	var _GeometryType = __webpack_require__(22);
	
	var _GeometryType2 = _interopRequireDefault(_GeometryType);
	
	var _SimpleGeometry = __webpack_require__(64);
	
	var _transform = __webpack_require__(104);
	
	var _VectorContext = __webpack_require__(288);
	
	var _VectorContext2 = _interopRequireDefault(_VectorContext);
	
	var _canvas = __webpack_require__(74);
	
	var _transform2 = __webpack_require__(48);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	/**
	 * @module ol/render/canvas/Immediate
	 */
	// FIXME test, especially polygons with holes and multipolygons
	// FIXME need to handle large thick features (where pixel size matters)
	// FIXME add offset and end to ol/geom/flat/transform~transform2D?
	var __extends = undefined && undefined.__extends || function () {
	    var _extendStatics = function extendStatics(d, b) {
	        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	            d.__proto__ = b;
	        } || function (d, b) {
	            for (var p in b) {
	                if (b.hasOwnProperty(p)) d[p] = b[p];
	            }
	        };
	        return _extendStatics(d, b);
	    };
	    return function (d, b) {
	        _extendStatics(d, b);
	        function __() {
	            this.constructor = d;
	        }
	        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	    };
	}();
	
	/**
	 * @classdesc
	 * A concrete subclass of {@link module:ol/render/VectorContext} that implements
	 * direct rendering of features and geometries to an HTML5 Canvas context.
	 * Instances of this class are created internally by the library and
	 * provided to application code as vectorContext member of the
	 * {@link module:ol/render/Event~RenderEvent} object associated with postcompose, precompose and
	 * render events emitted by layers and maps.
	 */
	var CanvasImmediateRenderer = /** @class */function (_super) {
	    __extends(CanvasImmediateRenderer, _super);
	    /**
	     * @param {CanvasRenderingContext2D} context Context.
	     * @param {number} pixelRatio Pixel ratio.
	     * @param {import("../../extent.js").Extent} extent Extent.
	     * @param {import("../../transform.js").Transform} transform Transform.
	     * @param {number} viewRotation View rotation.
	     * @param {number=} opt_squaredTolerance Optional squared tolerance for simplification.
	     * @param {import("../../proj.js").TransformFunction=} opt_userTransform Transform from user to view projection.
	     */
	    function CanvasImmediateRenderer(context, pixelRatio, extent, transform, viewRotation, opt_squaredTolerance, opt_userTransform) {
	        var _this = _super.call(this) || this;
	        /**
	         * @private
	         * @type {CanvasRenderingContext2D}
	         */
	        _this.context_ = context;
	        /**
	         * @private
	         * @type {number}
	         */
	        _this.pixelRatio_ = pixelRatio;
	        /**
	         * @private
	         * @type {import("../../extent.js").Extent}
	         */
	        _this.extent_ = extent;
	        /**
	         * @private
	         * @type {import("../../transform.js").Transform}
	         */
	        _this.transform_ = transform;
	        /**
	         * @private
	         * @type {number}
	         */
	        _this.viewRotation_ = viewRotation;
	        /**
	         * @private
	         * @type {number}
	         */
	        _this.squaredTolerance_ = opt_squaredTolerance;
	        /**
	         * @private
	         * @type {import("../../proj.js").TransformFunction}
	         */
	        _this.userTransform_ = opt_userTransform;
	        /**
	         * @private
	         * @type {?import("../canvas.js").FillState}
	         */
	        _this.contextFillState_ = null;
	        /**
	         * @private
	         * @type {?import("../canvas.js").StrokeState}
	         */
	        _this.contextStrokeState_ = null;
	        /**
	         * @private
	         * @type {?import("../canvas.js").TextState}
	         */
	        _this.contextTextState_ = null;
	        /**
	         * @private
	         * @type {?import("../canvas.js").FillState}
	         */
	        _this.fillState_ = null;
	        /**
	         * @private
	         * @type {?import("../canvas.js").StrokeState}
	         */
	        _this.strokeState_ = null;
	        /**
	         * @private
	         * @type {HTMLCanvasElement|HTMLVideoElement|HTMLImageElement}
	         */
	        _this.image_ = null;
	        /**
	         * @private
	         * @type {number}
	         */
	        _this.imageAnchorX_ = 0;
	        /**
	         * @private
	         * @type {number}
	         */
	        _this.imageAnchorY_ = 0;
	        /**
	         * @private
	         * @type {number}
	         */
	        _this.imageHeight_ = 0;
	        /**
	         * @private
	         * @type {number}
	         */
	        _this.imageOpacity_ = 0;
	        /**
	         * @private
	         * @type {number}
	         */
	        _this.imageOriginX_ = 0;
	        /**
	         * @private
	         * @type {number}
	         */
	        _this.imageOriginY_ = 0;
	        /**
	         * @private
	         * @type {boolean}
	         */
	        _this.imageRotateWithView_ = false;
	        /**
	         * @private
	         * @type {number}
	         */
	        _this.imageRotation_ = 0;
	        /**
	         * @private
	         * @type {number}
	         */
	        _this.imageScale_ = 0;
	        /**
	         * @private
	         * @type {number}
	         */
	        _this.imageWidth_ = 0;
	        /**
	         * @private
	         * @type {string}
	         */
	        _this.text_ = '';
	        /**
	         * @private
	         * @type {number}
	         */
	        _this.textOffsetX_ = 0;
	        /**
	         * @private
	         * @type {number}
	         */
	        _this.textOffsetY_ = 0;
	        /**
	         * @private
	         * @type {boolean}
	         */
	        _this.textRotateWithView_ = false;
	        /**
	         * @private
	         * @type {number}
	         */
	        _this.textRotation_ = 0;
	        /**
	         * @private
	         * @type {number}
	         */
	        _this.textScale_ = 0;
	        /**
	         * @private
	         * @type {?import("../canvas.js").FillState}
	         */
	        _this.textFillState_ = null;
	        /**
	         * @private
	         * @type {?import("../canvas.js").StrokeState}
	         */
	        _this.textStrokeState_ = null;
	        /**
	         * @private
	         * @type {?import("../canvas.js").TextState}
	         */
	        _this.textState_ = null;
	        /**
	         * @private
	         * @type {Array<number>}
	         */
	        _this.pixelCoordinates_ = [];
	        /**
	         * @private
	         * @type {import("../../transform.js").Transform}
	         */
	        _this.tmpLocalTransform_ = (0, _transform2.create)();
	        return _this;
	    }
	    /**
	     * @param {Array<number>} flatCoordinates Flat coordinates.
	     * @param {number} offset Offset.
	     * @param {number} end End.
	     * @param {number} stride Stride.
	     * @private
	     */
	    CanvasImmediateRenderer.prototype.drawImages_ = function (flatCoordinates, offset, end, stride) {
	        if (!this.image_) {
	            return;
	        }
	        var pixelCoordinates = (0, _transform.transform2D)(flatCoordinates, offset, end, 2, this.transform_, this.pixelCoordinates_);
	        var context = this.context_;
	        var localTransform = this.tmpLocalTransform_;
	        var alpha = context.globalAlpha;
	        if (this.imageOpacity_ != 1) {
	            context.globalAlpha = alpha * this.imageOpacity_;
	        }
	        var rotation = this.imageRotation_;
	        if (this.imageRotateWithView_) {
	            rotation += this.viewRotation_;
	        }
	        for (var i = 0, ii = pixelCoordinates.length; i < ii; i += 2) {
	            var x = pixelCoordinates[i] - this.imageAnchorX_;
	            var y = pixelCoordinates[i + 1] - this.imageAnchorY_;
	            if (rotation !== 0 || this.imageScale_ != 1) {
	                var centerX = x + this.imageAnchorX_;
	                var centerY = y + this.imageAnchorY_;
	                (0, _transform2.compose)(localTransform, centerX, centerY, this.imageScale_, this.imageScale_, rotation, -centerX, -centerY);
	                context.setTransform.apply(context, localTransform);
	            }
	            context.drawImage(this.image_, this.imageOriginX_, this.imageOriginY_, this.imageWidth_, this.imageHeight_, x, y, this.imageWidth_, this.imageHeight_);
	        }
	        if (rotation !== 0 || this.imageScale_ != 1) {
	            context.setTransform(1, 0, 0, 1, 0, 0);
	        }
	        if (this.imageOpacity_ != 1) {
	            context.globalAlpha = alpha;
	        }
	    };
	    /**
	     * @param {Array<number>} flatCoordinates Flat coordinates.
	     * @param {number} offset Offset.
	     * @param {number} end End.
	     * @param {number} stride Stride.
	     * @private
	     */
	    CanvasImmediateRenderer.prototype.drawText_ = function (flatCoordinates, offset, end, stride) {
	        if (!this.textState_ || this.text_ === '') {
	            return;
	        }
	        if (this.textFillState_) {
	            this.setContextFillState_(this.textFillState_);
	        }
	        if (this.textStrokeState_) {
	            this.setContextStrokeState_(this.textStrokeState_);
	        }
	        this.setContextTextState_(this.textState_);
	        var pixelCoordinates = (0, _transform.transform2D)(flatCoordinates, offset, end, stride, this.transform_, this.pixelCoordinates_);
	        var context = this.context_;
	        var rotation = this.textRotation_;
	        if (this.textRotateWithView_) {
	            rotation += this.viewRotation_;
	        }
	        for (; offset < end; offset += stride) {
	            var x = pixelCoordinates[offset] + this.textOffsetX_;
	            var y = pixelCoordinates[offset + 1] + this.textOffsetY_;
	            if (rotation !== 0 || this.textScale_ != 1) {
	                var localTransform = (0, _transform2.compose)(this.tmpLocalTransform_, x, y, this.textScale_, this.textScale_, rotation, -x, -y);
	                context.setTransform.apply(context, localTransform);
	            }
	            if (this.textStrokeState_) {
	                context.strokeText(this.text_, x, y);
	            }
	            if (this.textFillState_) {
	                context.fillText(this.text_, x, y);
	            }
	        }
	        if (rotation !== 0 || this.textScale_ != 1) {
	            context.setTransform(1, 0, 0, 1, 0, 0);
	        }
	    };
	    /**
	     * @param {Array<number>} flatCoordinates Flat coordinates.
	     * @param {number} offset Offset.
	     * @param {number} end End.
	     * @param {number} stride Stride.
	     * @param {boolean} close Close.
	     * @private
	     * @return {number} end End.
	     */
	    CanvasImmediateRenderer.prototype.moveToLineTo_ = function (flatCoordinates, offset, end, stride, close) {
	        var context = this.context_;
	        var pixelCoordinates = (0, _transform.transform2D)(flatCoordinates, offset, end, stride, this.transform_, this.pixelCoordinates_);
	        context.moveTo(pixelCoordinates[0], pixelCoordinates[1]);
	        var length = pixelCoordinates.length;
	        if (close) {
	            length -= 2;
	        }
	        for (var i = 2; i < length; i += 2) {
	            context.lineTo(pixelCoordinates[i], pixelCoordinates[i + 1]);
	        }
	        if (close) {
	            context.closePath();
	        }
	        return end;
	    };
	    /**
	     * @param {Array<number>} flatCoordinates Flat coordinates.
	     * @param {number} offset Offset.
	     * @param {Array<number>} ends Ends.
	     * @param {number} stride Stride.
	     * @private
	     * @return {number} End.
	     */
	    CanvasImmediateRenderer.prototype.drawRings_ = function (flatCoordinates, offset, ends, stride) {
	        for (var i = 0, ii = ends.length; i < ii; ++i) {
	            offset = this.moveToLineTo_(flatCoordinates, offset, ends[i], stride, true);
	        }
	        return offset;
	    };
	    /**
	     * Render a circle geometry into the canvas.  Rendering is immediate and uses
	     * the current fill and stroke styles.
	     *
	     * @param {import("../../geom/Circle.js").default} geometry Circle geometry.
	     * @override
	     * @api
	     */
	    CanvasImmediateRenderer.prototype.drawCircle = function (geometry) {
	        if (!(0, _extent.intersects)(this.extent_, geometry.getExtent())) {
	            return;
	        }
	        if (this.fillState_ || this.strokeState_) {
	            if (this.fillState_) {
	                this.setContextFillState_(this.fillState_);
	            }
	            if (this.strokeState_) {
	                this.setContextStrokeState_(this.strokeState_);
	            }
	            var pixelCoordinates = (0, _SimpleGeometry.transformGeom2D)(geometry, this.transform_, this.pixelCoordinates_);
	            var dx = pixelCoordinates[2] - pixelCoordinates[0];
	            var dy = pixelCoordinates[3] - pixelCoordinates[1];
	            var radius = Math.sqrt(dx * dx + dy * dy);
	            var context = this.context_;
	            context.beginPath();
	            context.arc(pixelCoordinates[0], pixelCoordinates[1], radius, 0, 2 * Math.PI);
	            if (this.fillState_) {
	                context.fill();
	            }
	            if (this.strokeState_) {
	                context.stroke();
	            }
	        }
	        if (this.text_ !== '') {
	            this.drawText_(geometry.getCenter(), 0, 2, 2);
	        }
	    };
	    /**
	     * Set the rendering style.  Note that since this is an immediate rendering API,
	     * any `zIndex` on the provided style will be ignored.
	     *
	     * @param {import("../../style/Style.js").default} style The rendering style.
	     * @override
	     * @api
	     */
	    CanvasImmediateRenderer.prototype.setStyle = function (style) {
	        this.setFillStrokeStyle(style.getFill(), style.getStroke());
	        this.setImageStyle(style.getImage());
	        this.setTextStyle(style.getText());
	    };
	    /**
	     * @param {import("../../transform.js").Transform} transform Transform.
	     */
	    CanvasImmediateRenderer.prototype.setTransform = function (transform) {
	        this.transform_ = transform;
	    };
	    /**
	     * Render a geometry into the canvas.  Call
	     * {@link module:ol/render/canvas/Immediate#setStyle} first to set the rendering style.
	     *
	     * @param {import("../../geom/Geometry.js").default|import("../Feature.js").default} geometry The geometry to render.
	     * @override
	     * @api
	     */
	    CanvasImmediateRenderer.prototype.drawGeometry = function (geometry) {
	        var type = geometry.getType();
	        switch (type) {
	            case _GeometryType2.default.POINT:
	                this.drawPoint( /** @type {import("../../geom/Point.js").default} */geometry);
	                break;
	            case _GeometryType2.default.LINE_STRING:
	                this.drawLineString( /** @type {import("../../geom/LineString.js").default} */geometry);
	                break;
	            case _GeometryType2.default.POLYGON:
	                this.drawPolygon( /** @type {import("../../geom/Polygon.js").default} */geometry);
	                break;
	            case _GeometryType2.default.MULTI_POINT:
	                this.drawMultiPoint( /** @type {import("../../geom/MultiPoint.js").default} */geometry);
	                break;
	            case _GeometryType2.default.MULTI_LINE_STRING:
	                this.drawMultiLineString( /** @type {import("../../geom/MultiLineString.js").default} */geometry);
	                break;
	            case _GeometryType2.default.MULTI_POLYGON:
	                this.drawMultiPolygon( /** @type {import("../../geom/MultiPolygon.js").default} */geometry);
	                break;
	            case _GeometryType2.default.GEOMETRY_COLLECTION:
	                this.drawGeometryCollection( /** @type {import("../../geom/GeometryCollection.js").default} */geometry);
	                break;
	            case _GeometryType2.default.CIRCLE:
	                this.drawCircle( /** @type {import("../../geom/Circle.js").default} */geometry);
	                break;
	            default:
	        }
	    };
	    /**
	     * Render a feature into the canvas.  Note that any `zIndex` on the provided
	     * style will be ignored - features are rendered immediately in the order that
	     * this method is called.  If you need `zIndex` support, you should be using an
	     * {@link module:ol/layer/Vector~VectorLayer} instead.
	     *
	     * @param {import("../../Feature.js").default} feature Feature.
	     * @param {import("../../style/Style.js").default} style Style.
	     * @override
	     * @api
	     */
	    CanvasImmediateRenderer.prototype.drawFeature = function (feature, style) {
	        var geometry = style.getGeometryFunction()(feature);
	        if (!geometry || !(0, _extent.intersects)(this.extent_, geometry.getExtent())) {
	            return;
	        }
	        this.setStyle(style);
	        this.drawGeometry(geometry);
	    };
	    /**
	     * Render a GeometryCollection to the canvas.  Rendering is immediate and
	     * uses the current styles appropriate for each geometry in the collection.
	     *
	     * @param {import("../../geom/GeometryCollection.js").default} geometry Geometry collection.
	     * @override
	     */
	    CanvasImmediateRenderer.prototype.drawGeometryCollection = function (geometry) {
	        var geometries = geometry.getGeometriesArray();
	        for (var i = 0, ii = geometries.length; i < ii; ++i) {
	            this.drawGeometry(geometries[i]);
	        }
	    };
	    /**
	     * Render a Point geometry into the canvas.  Rendering is immediate and uses
	     * the current style.
	     *
	     * @param {import("../../geom/Point.js").default|import("../Feature.js").default} geometry Point geometry.
	     * @override
	     */
	    CanvasImmediateRenderer.prototype.drawPoint = function (geometry) {
	        if (this.squaredTolerance_) {
	            geometry = /** @type {import("../../geom/Point.js").default} */geometry.simplifyTransformed(this.squaredTolerance_, this.userTransform_);
	        }
	        var flatCoordinates = geometry.getFlatCoordinates();
	        var stride = geometry.getStride();
	        if (this.image_) {
	            this.drawImages_(flatCoordinates, 0, flatCoordinates.length, stride);
	        }
	        if (this.text_ !== '') {
	            this.drawText_(flatCoordinates, 0, flatCoordinates.length, stride);
	        }
	    };
	    /**
	     * Render a MultiPoint geometry  into the canvas.  Rendering is immediate and
	     * uses the current style.
	     *
	     * @param {import("../../geom/MultiPoint.js").default|import("../Feature.js").default} geometry MultiPoint geometry.
	     * @override
	     */
	    CanvasImmediateRenderer.prototype.drawMultiPoint = function (geometry) {
	        if (this.squaredTolerance_) {
	            geometry = /** @type {import("../../geom/MultiPoint.js").default} */geometry.simplifyTransformed(this.squaredTolerance_, this.userTransform_);
	        }
	        var flatCoordinates = geometry.getFlatCoordinates();
	        var stride = geometry.getStride();
	        if (this.image_) {
	            this.drawImages_(flatCoordinates, 0, flatCoordinates.length, stride);
	        }
	        if (this.text_ !== '') {
	            this.drawText_(flatCoordinates, 0, flatCoordinates.length, stride);
	        }
	    };
	    /**
	     * Render a LineString into the canvas.  Rendering is immediate and uses
	     * the current style.
	     *
	     * @param {import("../../geom/LineString.js").default|import("../Feature.js").default} geometry LineString geometry.
	     * @override
	     */
	    CanvasImmediateRenderer.prototype.drawLineString = function (geometry) {
	        if (this.squaredTolerance_) {
	            geometry = /** @type {import("../../geom/LineString.js").default} */geometry.simplifyTransformed(this.squaredTolerance_, this.userTransform_);
	        }
	        if (!(0, _extent.intersects)(this.extent_, geometry.getExtent())) {
	            return;
	        }
	        if (this.strokeState_) {
	            this.setContextStrokeState_(this.strokeState_);
	            var context = this.context_;
	            var flatCoordinates = geometry.getFlatCoordinates();
	            context.beginPath();
	            this.moveToLineTo_(flatCoordinates, 0, flatCoordinates.length, geometry.getStride(), false);
	            context.stroke();
	        }
	        if (this.text_ !== '') {
	            var flatMidpoint = geometry.getFlatMidpoint();
	            this.drawText_(flatMidpoint, 0, 2, 2);
	        }
	    };
	    /**
	     * Render a MultiLineString geometry into the canvas.  Rendering is immediate
	     * and uses the current style.
	     *
	     * @param {import("../../geom/MultiLineString.js").default|import("../Feature.js").default} geometry MultiLineString geometry.
	     * @override
	     */
	    CanvasImmediateRenderer.prototype.drawMultiLineString = function (geometry) {
	        if (this.squaredTolerance_) {
	            geometry = /** @type {import("../../geom/MultiLineString.js").default} */geometry.simplifyTransformed(this.squaredTolerance_, this.userTransform_);
	        }
	        var geometryExtent = geometry.getExtent();
	        if (!(0, _extent.intersects)(this.extent_, geometryExtent)) {
	            return;
	        }
	        if (this.strokeState_) {
	            this.setContextStrokeState_(this.strokeState_);
	            var context = this.context_;
	            var flatCoordinates = geometry.getFlatCoordinates();
	            var offset = 0;
	            var ends = /** @type {Array<number>} */geometry.getEnds();
	            var stride = geometry.getStride();
	            context.beginPath();
	            for (var i = 0, ii = ends.length; i < ii; ++i) {
	                offset = this.moveToLineTo_(flatCoordinates, offset, ends[i], stride, false);
	            }
	            context.stroke();
	        }
	        if (this.text_ !== '') {
	            var flatMidpoints = geometry.getFlatMidpoints();
	            this.drawText_(flatMidpoints, 0, flatMidpoints.length, 2);
	        }
	    };
	    /**
	     * Render a Polygon geometry into the canvas.  Rendering is immediate and uses
	     * the current style.
	     *
	     * @param {import("../../geom/Polygon.js").default|import("../Feature.js").default} geometry Polygon geometry.
	     * @override
	     */
	    CanvasImmediateRenderer.prototype.drawPolygon = function (geometry) {
	        if (this.squaredTolerance_) {
	            geometry = /** @type {import("../../geom/Polygon.js").default} */geometry.simplifyTransformed(this.squaredTolerance_, this.userTransform_);
	        }
	        if (!(0, _extent.intersects)(this.extent_, geometry.getExtent())) {
	            return;
	        }
	        if (this.strokeState_ || this.fillState_) {
	            if (this.fillState_) {
	                this.setContextFillState_(this.fillState_);
	            }
	            if (this.strokeState_) {
	                this.setContextStrokeState_(this.strokeState_);
	            }
	            var context = this.context_;
	            context.beginPath();
	            this.drawRings_(geometry.getOrientedFlatCoordinates(), 0, /** @type {Array<number>} */geometry.getEnds(), geometry.getStride());
	            if (this.fillState_) {
	                context.fill();
	            }
	            if (this.strokeState_) {
	                context.stroke();
	            }
	        }
	        if (this.text_ !== '') {
	            var flatInteriorPoint = geometry.getFlatInteriorPoint();
	            this.drawText_(flatInteriorPoint, 0, 2, 2);
	        }
	    };
	    /**
	     * Render MultiPolygon geometry into the canvas.  Rendering is immediate and
	     * uses the current style.
	     * @param {import("../../geom/MultiPolygon.js").default} geometry MultiPolygon geometry.
	     * @override
	     */
	    CanvasImmediateRenderer.prototype.drawMultiPolygon = function (geometry) {
	        if (this.squaredTolerance_) {
	            geometry = /** @type {import("../../geom/MultiPolygon.js").default} */geometry.simplifyTransformed(this.squaredTolerance_, this.userTransform_);
	        }
	        if (!(0, _extent.intersects)(this.extent_, geometry.getExtent())) {
	            return;
	        }
	        if (this.strokeState_ || this.fillState_) {
	            if (this.fillState_) {
	                this.setContextFillState_(this.fillState_);
	            }
	            if (this.strokeState_) {
	                this.setContextStrokeState_(this.strokeState_);
	            }
	            var context = this.context_;
	            var flatCoordinates = geometry.getOrientedFlatCoordinates();
	            var offset = 0;
	            var endss = geometry.getEndss();
	            var stride = geometry.getStride();
	            context.beginPath();
	            for (var i = 0, ii = endss.length; i < ii; ++i) {
	                var ends = endss[i];
	                offset = this.drawRings_(flatCoordinates, offset, ends, stride);
	            }
	            if (this.fillState_) {
	                context.fill();
	            }
	            if (this.strokeState_) {
	                context.stroke();
	            }
	        }
	        if (this.text_ !== '') {
	            var flatInteriorPoints = geometry.getFlatInteriorPoints();
	            this.drawText_(flatInteriorPoints, 0, flatInteriorPoints.length, 2);
	        }
	    };
	    /**
	     * @param {import("../canvas.js").FillState} fillState Fill state.
	     * @private
	     */
	    CanvasImmediateRenderer.prototype.setContextFillState_ = function (fillState) {
	        var context = this.context_;
	        var contextFillState = this.contextFillState_;
	        if (!contextFillState) {
	            context.fillStyle = fillState.fillStyle;
	            this.contextFillState_ = {
	                fillStyle: fillState.fillStyle
	            };
	        } else {
	            if (contextFillState.fillStyle != fillState.fillStyle) {
	                contextFillState.fillStyle = fillState.fillStyle;
	                context.fillStyle = fillState.fillStyle;
	            }
	        }
	    };
	    /**
	     * @param {import("../canvas.js").StrokeState} strokeState Stroke state.
	     * @private
	     */
	    CanvasImmediateRenderer.prototype.setContextStrokeState_ = function (strokeState) {
	        var context = this.context_;
	        var contextStrokeState = this.contextStrokeState_;
	        if (!contextStrokeState) {
	            context.lineCap = strokeState.lineCap;
	            if (context.setLineDash) {
	                context.setLineDash(strokeState.lineDash);
	                context.lineDashOffset = strokeState.lineDashOffset;
	            }
	            context.lineJoin = strokeState.lineJoin;
	            context.lineWidth = strokeState.lineWidth;
	            context.miterLimit = strokeState.miterLimit;
	            context.strokeStyle = strokeState.strokeStyle;
	            this.contextStrokeState_ = {
	                lineCap: strokeState.lineCap,
	                lineDash: strokeState.lineDash,
	                lineDashOffset: strokeState.lineDashOffset,
	                lineJoin: strokeState.lineJoin,
	                lineWidth: strokeState.lineWidth,
	                miterLimit: strokeState.miterLimit,
	                strokeStyle: strokeState.strokeStyle
	            };
	        } else {
	            if (contextStrokeState.lineCap != strokeState.lineCap) {
	                contextStrokeState.lineCap = strokeState.lineCap;
	                context.lineCap = strokeState.lineCap;
	            }
	            if (context.setLineDash) {
	                if (!(0, _array.equals)(contextStrokeState.lineDash, strokeState.lineDash)) {
	                    context.setLineDash(contextStrokeState.lineDash = strokeState.lineDash);
	                }
	                if (contextStrokeState.lineDashOffset != strokeState.lineDashOffset) {
	                    contextStrokeState.lineDashOffset = strokeState.lineDashOffset;
	                    context.lineDashOffset = strokeState.lineDashOffset;
	                }
	            }
	            if (contextStrokeState.lineJoin != strokeState.lineJoin) {
	                contextStrokeState.lineJoin = strokeState.lineJoin;
	                context.lineJoin = strokeState.lineJoin;
	            }
	            if (contextStrokeState.lineWidth != strokeState.lineWidth) {
	                contextStrokeState.lineWidth = strokeState.lineWidth;
	                context.lineWidth = strokeState.lineWidth;
	            }
	            if (contextStrokeState.miterLimit != strokeState.miterLimit) {
	                contextStrokeState.miterLimit = strokeState.miterLimit;
	                context.miterLimit = strokeState.miterLimit;
	            }
	            if (contextStrokeState.strokeStyle != strokeState.strokeStyle) {
	                contextStrokeState.strokeStyle = strokeState.strokeStyle;
	                context.strokeStyle = strokeState.strokeStyle;
	            }
	        }
	    };
	    /**
	     * @param {import("../canvas.js").TextState} textState Text state.
	     * @private
	     */
	    CanvasImmediateRenderer.prototype.setContextTextState_ = function (textState) {
	        var context = this.context_;
	        var contextTextState = this.contextTextState_;
	        var textAlign = textState.textAlign ? textState.textAlign : _canvas.defaultTextAlign;
	        if (!contextTextState) {
	            context.font = textState.font;
	            context.textAlign = /** @type {CanvasTextAlign} */textAlign;
	            context.textBaseline = /** @type {CanvasTextBaseline} */textState.textBaseline;
	            this.contextTextState_ = {
	                font: textState.font,
	                textAlign: textAlign,
	                textBaseline: textState.textBaseline
	            };
	        } else {
	            if (contextTextState.font != textState.font) {
	                contextTextState.font = textState.font;
	                context.font = textState.font;
	            }
	            if (contextTextState.textAlign != textAlign) {
	                contextTextState.textAlign = /** @type {CanvasTextAlign} */textAlign;
	                context.textAlign = /** @type {CanvasTextAlign} */textAlign;
	            }
	            if (contextTextState.textBaseline != textState.textBaseline) {
	                contextTextState.textBaseline = /** @type {CanvasTextBaseline} */textState.textBaseline;
	                context.textBaseline = /** @type {CanvasTextBaseline} */textState.textBaseline;
	            }
	        }
	    };
	    /**
	     * Set the fill and stroke style for subsequent draw operations.  To clear
	     * either fill or stroke styles, pass null for the appropriate parameter.
	     *
	     * @param {import("../../style/Fill.js").default} fillStyle Fill style.
	     * @param {import("../../style/Stroke.js").default} strokeStyle Stroke style.
	     * @override
	     */
	    CanvasImmediateRenderer.prototype.setFillStrokeStyle = function (fillStyle, strokeStyle) {
	        if (!fillStyle) {
	            this.fillState_ = null;
	        } else {
	            var fillStyleColor = fillStyle.getColor();
	            this.fillState_ = {
	                fillStyle: (0, _colorlike.asColorLike)(fillStyleColor ? fillStyleColor : _canvas.defaultFillStyle)
	            };
	        }
	        if (!strokeStyle) {
	            this.strokeState_ = null;
	        } else {
	            var strokeStyleColor = strokeStyle.getColor();
	            var strokeStyleLineCap = strokeStyle.getLineCap();
	            var strokeStyleLineDash = strokeStyle.getLineDash();
	            var strokeStyleLineDashOffset = strokeStyle.getLineDashOffset();
	            var strokeStyleLineJoin = strokeStyle.getLineJoin();
	            var strokeStyleWidth = strokeStyle.getWidth();
	            var strokeStyleMiterLimit = strokeStyle.getMiterLimit();
	            this.strokeState_ = {
	                lineCap: strokeStyleLineCap !== undefined ? strokeStyleLineCap : _canvas.defaultLineCap,
	                lineDash: strokeStyleLineDash ? strokeStyleLineDash : _canvas.defaultLineDash,
	                lineDashOffset: strokeStyleLineDashOffset ? strokeStyleLineDashOffset : _canvas.defaultLineDashOffset,
	                lineJoin: strokeStyleLineJoin !== undefined ? strokeStyleLineJoin : _canvas.defaultLineJoin,
	                lineWidth: this.pixelRatio_ * (strokeStyleWidth !== undefined ? strokeStyleWidth : _canvas.defaultLineWidth),
	                miterLimit: strokeStyleMiterLimit !== undefined ? strokeStyleMiterLimit : _canvas.defaultMiterLimit,
	                strokeStyle: (0, _colorlike.asColorLike)(strokeStyleColor ? strokeStyleColor : _canvas.defaultStrokeStyle)
	            };
	        }
	    };
	    /**
	     * Set the image style for subsequent draw operations.  Pass null to remove
	     * the image style.
	     *
	     * @param {import("../../style/Image.js").default} imageStyle Image style.
	     * @override
	     */
	    CanvasImmediateRenderer.prototype.setImageStyle = function (imageStyle) {
	        if (!imageStyle) {
	            this.image_ = null;
	        } else {
	            var imageAnchor = imageStyle.getAnchor();
	            // FIXME pixel ratio
	            var imageImage = imageStyle.getImage(1);
	            var imageOrigin = imageStyle.getOrigin();
	            var imageSize = imageStyle.getSize();
	            this.imageAnchorX_ = imageAnchor[0];
	            this.imageAnchorY_ = imageAnchor[1];
	            this.imageHeight_ = imageSize[1];
	            this.image_ = imageImage;
	            this.imageOpacity_ = imageStyle.getOpacity();
	            this.imageOriginX_ = imageOrigin[0];
	            this.imageOriginY_ = imageOrigin[1];
	            this.imageRotateWithView_ = imageStyle.getRotateWithView();
	            this.imageRotation_ = imageStyle.getRotation();
	            this.imageScale_ = imageStyle.getScale() * this.pixelRatio_;
	            this.imageWidth_ = imageSize[0];
	        }
	    };
	    /**
	     * Set the text style for subsequent draw operations.  Pass null to
	     * remove the text style.
	     *
	     * @param {import("../../style/Text.js").default} textStyle Text style.
	     * @override
	     */
	    CanvasImmediateRenderer.prototype.setTextStyle = function (textStyle) {
	        if (!textStyle) {
	            this.text_ = '';
	        } else {
	            var textFillStyle = textStyle.getFill();
	            if (!textFillStyle) {
	                this.textFillState_ = null;
	            } else {
	                var textFillStyleColor = textFillStyle.getColor();
	                this.textFillState_ = {
	                    fillStyle: (0, _colorlike.asColorLike)(textFillStyleColor ? textFillStyleColor : _canvas.defaultFillStyle)
	                };
	            }
	            var textStrokeStyle = textStyle.getStroke();
	            if (!textStrokeStyle) {
	                this.textStrokeState_ = null;
	            } else {
	                var textStrokeStyleColor = textStrokeStyle.getColor();
	                var textStrokeStyleLineCap = textStrokeStyle.getLineCap();
	                var textStrokeStyleLineDash = textStrokeStyle.getLineDash();
	                var textStrokeStyleLineDashOffset = textStrokeStyle.getLineDashOffset();
	                var textStrokeStyleLineJoin = textStrokeStyle.getLineJoin();
	                var textStrokeStyleWidth = textStrokeStyle.getWidth();
	                var textStrokeStyleMiterLimit = textStrokeStyle.getMiterLimit();
	                this.textStrokeState_ = {
	                    lineCap: textStrokeStyleLineCap !== undefined ? textStrokeStyleLineCap : _canvas.defaultLineCap,
	                    lineDash: textStrokeStyleLineDash ? textStrokeStyleLineDash : _canvas.defaultLineDash,
	                    lineDashOffset: textStrokeStyleLineDashOffset ? textStrokeStyleLineDashOffset : _canvas.defaultLineDashOffset,
	                    lineJoin: textStrokeStyleLineJoin !== undefined ? textStrokeStyleLineJoin : _canvas.defaultLineJoin,
	                    lineWidth: textStrokeStyleWidth !== undefined ? textStrokeStyleWidth : _canvas.defaultLineWidth,
	                    miterLimit: textStrokeStyleMiterLimit !== undefined ? textStrokeStyleMiterLimit : _canvas.defaultMiterLimit,
	                    strokeStyle: (0, _colorlike.asColorLike)(textStrokeStyleColor ? textStrokeStyleColor : _canvas.defaultStrokeStyle)
	                };
	            }
	            var textFont = textStyle.getFont();
	            var textOffsetX = textStyle.getOffsetX();
	            var textOffsetY = textStyle.getOffsetY();
	            var textRotateWithView = textStyle.getRotateWithView();
	            var textRotation = textStyle.getRotation();
	            var textScale = textStyle.getScale();
	            var textText = textStyle.getText();
	            var textTextAlign = textStyle.getTextAlign();
	            var textTextBaseline = textStyle.getTextBaseline();
	            this.textState_ = {
	                font: textFont !== undefined ? textFont : _canvas.defaultFont,
	                textAlign: textTextAlign !== undefined ? textTextAlign : _canvas.defaultTextAlign,
	                textBaseline: textTextBaseline !== undefined ? textTextBaseline : _canvas.defaultTextBaseline
	            };
	            this.text_ = textText !== undefined ? textText : '';
	            this.textOffsetX_ = textOffsetX !== undefined ? this.pixelRatio_ * textOffsetX : 0;
	            this.textOffsetY_ = textOffsetY !== undefined ? this.pixelRatio_ * textOffsetY : 0;
	            this.textRotateWithView_ = textRotateWithView !== undefined ? textRotateWithView : false;
	            this.textRotation_ = textRotation !== undefined ? textRotation : 0;
	            this.textScale_ = this.pixelRatio_ * (textScale !== undefined ? textScale : 1);
	        }
	    };
	    return CanvasImmediateRenderer;
	}(_VectorContext2.default);
	exports.default = CanvasImmediateRenderer;
	//# sourceMappingURL=Immediate.js.map

/***/ }),
/* 291 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	exports.TEXT_ALIGN = undefined;
	
	var _util = __webpack_require__(14);
	
	var _colorlike = __webpack_require__(144);
	
	var _extent = __webpack_require__(4);
	
	var _straightchunk = __webpack_require__(599);
	
	var _GeometryType = __webpack_require__(22);
	
	var _GeometryType2 = _interopRequireDefault(_GeometryType);
	
	var _canvas = __webpack_require__(74);
	
	var _Instruction = __webpack_require__(106);
	
	var _Instruction2 = _interopRequireDefault(_Instruction);
	
	var _Builder = __webpack_require__(127);
	
	var _Builder2 = _interopRequireDefault(_Builder);
	
	var _TextPlacement = __webpack_require__(305);
	
	var _TextPlacement2 = _interopRequireDefault(_TextPlacement);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var __extends = undefined && undefined.__extends || function () {
	    var _extendStatics = function extendStatics(d, b) {
	        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	            d.__proto__ = b;
	        } || function (d, b) {
	            for (var p in b) {
	                if (b.hasOwnProperty(p)) d[p] = b[p];
	            }
	        };
	        return _extendStatics(d, b);
	    };
	    return function (d, b) {
	        _extendStatics(d, b);
	        function __() {
	            this.constructor = d;
	        }
	        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	    };
	}();
	/**
	 * @module ol/render/canvas/TextBuilder
	 */
	
	/**
	 * @const
	 * @enum {number}
	 */
	var TEXT_ALIGN = exports.TEXT_ALIGN = {
	    'left': 0,
	    'end': 0,
	    'center': 0.5,
	    'right': 1,
	    'start': 1,
	    'top': 0,
	    'middle': 0.5,
	    'hanging': 0.2,
	    'alphabetic': 0.8,
	    'ideographic': 0.8,
	    'bottom': 1
	};
	var CanvasTextBuilder = /** @class */function (_super) {
	    __extends(CanvasTextBuilder, _super);
	    /**
	     * @param {number} tolerance Tolerance.
	     * @param {import("../../extent.js").Extent} maxExtent Maximum extent.
	     * @param {number} resolution Resolution.
	     * @param {number} pixelRatio Pixel ratio.
	     */
	    function CanvasTextBuilder(tolerance, maxExtent, resolution, pixelRatio) {
	        var _this = _super.call(this, tolerance, maxExtent, resolution, pixelRatio) || this;
	        /**
	         * @private
	         * @type {import("../canvas.js").DeclutterGroups}
	         */
	        _this.declutterGroups_;
	        /**
	         * @private
	         * @type {Array<HTMLCanvasElement>}
	         */
	        _this.labels_ = null;
	        /**
	         * @private
	         * @type {string}
	         */
	        _this.text_ = '';
	        /**
	         * @private
	         * @type {number}
	         */
	        _this.textOffsetX_ = 0;
	        /**
	         * @private
	         * @type {number}
	         */
	        _this.textOffsetY_ = 0;
	        /**
	         * @private
	         * @type {boolean|undefined}
	         */
	        _this.textRotateWithView_ = undefined;
	        /**
	         * @private
	         * @type {number}
	         */
	        _this.textRotation_ = 0;
	        /**
	         * @private
	         * @type {?import("../canvas.js").FillState}
	         */
	        _this.textFillState_ = null;
	        /**
	         * @type {!Object<string, import("../canvas.js").FillState>}
	         */
	        _this.fillStates = {};
	        /**
	         * @private
	         * @type {?import("../canvas.js").StrokeState}
	         */
	        _this.textStrokeState_ = null;
	        /**
	         * @type {!Object<string, import("../canvas.js").StrokeState>}
	         */
	        _this.strokeStates = {};
	        /**
	         * @private
	         * @type {import("../canvas.js").TextState}
	         */
	        _this.textState_ = /** @type {import("../canvas.js").TextState} */{};
	        /**
	         * @type {!Object<string, import("../canvas.js").TextState>}
	         */
	        _this.textStates = {};
	        /**
	         * @private
	         * @type {string}
	         */
	        _this.textKey_ = '';
	        /**
	         * @private
	         * @type {string}
	         */
	        _this.fillKey_ = '';
	        /**
	         * @private
	         * @type {string}
	         */
	        _this.strokeKey_ = '';
	        _canvas.labelCache.prune();
	        return _this;
	    }
	    /**
	     * @inheritDoc
	     */
	    CanvasTextBuilder.prototype.finish = function () {
	        var instructions = _super.prototype.finish.call(this);
	        instructions.textStates = this.textStates;
	        instructions.fillStates = this.fillStates;
	        instructions.strokeStates = this.strokeStates;
	        return instructions;
	    };
	    /**
	     * @inheritDoc
	     */
	    CanvasTextBuilder.prototype.drawText = function (geometry, feature) {
	        var fillState = this.textFillState_;
	        var strokeState = this.textStrokeState_;
	        var textState = this.textState_;
	        if (this.text_ === '' || !textState || !fillState && !strokeState) {
	            return;
	        }
	        var begin = this.coordinates.length;
	        var geometryType = geometry.getType();
	        var flatCoordinates = null;
	        var end = 2;
	        var stride = 2;
	        var i, ii;
	        if (textState.placement === _TextPlacement2.default.LINE) {
	            if (!(0, _extent.intersects)(this.getBufferedMaxExtent(), geometry.getExtent())) {
	                return;
	            }
	            var ends = void 0;
	            flatCoordinates = geometry.getFlatCoordinates();
	            stride = geometry.getStride();
	            if (geometryType == _GeometryType2.default.LINE_STRING) {
	                ends = [flatCoordinates.length];
	            } else if (geometryType == _GeometryType2.default.MULTI_LINE_STRING) {
	                ends = geometry.getEnds();
	            } else if (geometryType == _GeometryType2.default.POLYGON) {
	                ends = geometry.getEnds().slice(0, 1);
	            } else if (geometryType == _GeometryType2.default.MULTI_POLYGON) {
	                var endss = geometry.getEndss();
	                ends = [];
	                for (i = 0, ii = endss.length; i < ii; ++i) {
	                    ends.push(endss[i][0]);
	                }
	            }
	            this.beginGeometry(geometry, feature);
	            var textAlign = textState.textAlign;
	            var flatOffset = 0;
	            var flatEnd = void 0;
	            for (var o = 0, oo = ends.length; o < oo; ++o) {
	                if (textAlign == undefined) {
	                    var range = (0, _straightchunk.matchingChunk)(textState.maxAngle, flatCoordinates, flatOffset, ends[o], stride);
	                    flatOffset = range[0];
	                    flatEnd = range[1];
	                } else {
	                    flatEnd = ends[o];
	                }
	                for (i = flatOffset; i < flatEnd; i += stride) {
	                    this.coordinates.push(flatCoordinates[i], flatCoordinates[i + 1]);
	                }
	                end = this.coordinates.length;
	                flatOffset = ends[o];
	                var declutterGroup = this.declutterGroups_ ? o === 0 ? this.declutterGroups_[0] : [].concat(this.declutterGroups_[0]) : null;
	                this.drawChars_(begin, end, declutterGroup);
	                begin = end;
	            }
	            this.endGeometry(feature);
	        } else {
	            var geometryWidths = null;
	            if (!textState.overflow) {
	                geometryWidths = [];
	            }
	            switch (geometryType) {
	                case _GeometryType2.default.POINT:
	                case _GeometryType2.default.MULTI_POINT:
	                    flatCoordinates = geometry.getFlatCoordinates();
	                    end = flatCoordinates.length;
	                    break;
	                case _GeometryType2.default.LINE_STRING:
	                    flatCoordinates = /** @type {import("../../geom/LineString.js").default} */geometry.getFlatMidpoint();
	                    break;
	                case _GeometryType2.default.CIRCLE:
	                    flatCoordinates = /** @type {import("../../geom/Circle.js").default} */geometry.getCenter();
	                    break;
	                case _GeometryType2.default.MULTI_LINE_STRING:
	                    flatCoordinates = /** @type {import("../../geom/MultiLineString.js").default} */geometry.getFlatMidpoints();
	                    end = flatCoordinates.length;
	                    break;
	                case _GeometryType2.default.POLYGON:
	                    flatCoordinates = /** @type {import("../../geom/Polygon.js").default} */geometry.getFlatInteriorPoint();
	                    if (!textState.overflow) {
	                        geometryWidths.push(flatCoordinates[2] / this.resolution);
	                    }
	                    stride = 3;
	                    break;
	                case _GeometryType2.default.MULTI_POLYGON:
	                    var interiorPoints = /** @type {import("../../geom/MultiPolygon.js").default} */geometry.getFlatInteriorPoints();
	                    flatCoordinates = [];
	                    for (i = 0, ii = interiorPoints.length; i < ii; i += 3) {
	                        if (!textState.overflow) {
	                            geometryWidths.push(interiorPoints[i + 2] / this.resolution);
	                        }
	                        flatCoordinates.push(interiorPoints[i], interiorPoints[i + 1]);
	                    }
	                    end = flatCoordinates.length;
	                    if (end == 0) {
	                        return;
	                    }
	                    break;
	                default:
	            }
	            end = this.appendFlatCoordinates(flatCoordinates, 0, end, stride, false, false);
	            this.saveTextStates_();
	            if (textState.backgroundFill || textState.backgroundStroke) {
	                this.setFillStrokeStyle(textState.backgroundFill, textState.backgroundStroke);
	                if (textState.backgroundFill) {
	                    this.updateFillStyle(this.state, this.createFill);
	                    this.hitDetectionInstructions.push(this.createFill(this.state));
	                }
	                if (textState.backgroundStroke) {
	                    this.updateStrokeStyle(this.state, this.applyStroke);
	                    this.hitDetectionInstructions.push(this.createStroke(this.state));
	                }
	            }
	            this.beginGeometry(geometry, feature);
	            // The image is unknown at this stage so we pass null; it will be computed at render time.
	            // For clarity, we pass NaN for offsetX, offsetY, width and height, which will be computed at
	            // render time.
	            var pixelRatio_1 = this.pixelRatio;
	            this.instructions.push([_Instruction2.default.DRAW_IMAGE, begin, end, null, NaN, NaN, this.declutterGroups_, NaN, 1, 0, 0, this.textRotateWithView_, this.textRotation_, 1, NaN, textState.padding == _canvas.defaultPadding ? _canvas.defaultPadding : textState.padding.map(function (p) {
	                return p * pixelRatio_1;
	            }), !!textState.backgroundFill, !!textState.backgroundStroke, this.text_, this.textKey_, this.strokeKey_, this.fillKey_, this.textOffsetX_, this.textOffsetY_, geometryWidths]);
	            this.hitDetectionInstructions.push([_Instruction2.default.DRAW_IMAGE, begin, end, null, NaN, NaN, this.declutterGroups_, NaN, 1, 0, 0, this.textRotateWithView_, this.textRotation_, 1 / this.pixelRatio, NaN, textState.padding, !!textState.backgroundFill, !!textState.backgroundStroke, this.text_, this.textKey_, this.strokeKey_, this.fillKey_, this.textOffsetX_, this.textOffsetY_, geometryWidths]);
	            this.endGeometry(feature);
	        }
	    };
	    /**
	     * @private
	     */
	    CanvasTextBuilder.prototype.saveTextStates_ = function () {
	        var strokeState = this.textStrokeState_;
	        var textState = this.textState_;
	        var fillState = this.textFillState_;
	        var strokeKey = this.strokeKey_;
	        if (strokeState) {
	            if (!(strokeKey in this.strokeStates)) {
	                this.strokeStates[strokeKey] = {
	                    strokeStyle: strokeState.strokeStyle,
	                    lineCap: strokeState.lineCap,
	                    lineDashOffset: strokeState.lineDashOffset,
	                    lineWidth: strokeState.lineWidth,
	                    lineJoin: strokeState.lineJoin,
	                    miterLimit: strokeState.miterLimit,
	                    lineDash: strokeState.lineDash
	                };
	            }
	        }
	        var textKey = this.textKey_;
	        if (!(textKey in this.textStates)) {
	            this.textStates[textKey] = {
	                font: textState.font,
	                textAlign: textState.textAlign || _canvas.defaultTextAlign,
	                textBaseline: textState.textBaseline || _canvas.defaultTextBaseline,
	                scale: textState.scale
	            };
	        }
	        var fillKey = this.fillKey_;
	        if (fillState) {
	            if (!(fillKey in this.fillStates)) {
	                this.fillStates[fillKey] = {
	                    fillStyle: fillState.fillStyle
	                };
	            }
	        }
	    };
	    /**
	     * @private
	     * @param {number} begin Begin.
	     * @param {number} end End.
	     * @param {import("../canvas.js").DeclutterGroup} declutterGroup Declutter group.
	     */
	    CanvasTextBuilder.prototype.drawChars_ = function (begin, end, declutterGroup) {
	        var strokeState = this.textStrokeState_;
	        var textState = this.textState_;
	        var strokeKey = this.strokeKey_;
	        var textKey = this.textKey_;
	        var fillKey = this.fillKey_;
	        this.saveTextStates_();
	        var pixelRatio = this.pixelRatio;
	        var baseline = TEXT_ALIGN[textState.textBaseline];
	        var offsetY = this.textOffsetY_ * pixelRatio;
	        var text = this.text_;
	        var textScale = textState.scale;
	        var strokeWidth = strokeState ? strokeState.lineWidth * textScale / 2 : 0;
	        this.instructions.push([_Instruction2.default.DRAW_CHARS, begin, end, baseline, declutterGroup, textState.overflow, fillKey, textState.maxAngle, pixelRatio, offsetY, strokeKey, strokeWidth * pixelRatio, text, textKey, 1]);
	        this.hitDetectionInstructions.push([_Instruction2.default.DRAW_CHARS, begin, end, baseline, declutterGroup, textState.overflow, fillKey, textState.maxAngle, 1, offsetY, strokeKey, strokeWidth, text, textKey, 1 / pixelRatio]);
	    };
	    /**
	     * @inheritDoc
	     */
	    CanvasTextBuilder.prototype.setTextStyle = function (textStyle, declutterGroups) {
	        var textState, fillState, strokeState;
	        if (!textStyle) {
	            this.text_ = '';
	        } else {
	            this.declutterGroups_ = /** @type {import("../canvas.js").DeclutterGroups} */declutterGroups;
	            var textFillStyle = textStyle.getFill();
	            if (!textFillStyle) {
	                fillState = null;
	                this.textFillState_ = fillState;
	            } else {
	                fillState = this.textFillState_;
	                if (!fillState) {
	                    fillState = /** @type {import("../canvas.js").FillState} */{};
	                    this.textFillState_ = fillState;
	                }
	                fillState.fillStyle = (0, _colorlike.asColorLike)(textFillStyle.getColor() || _canvas.defaultFillStyle);
	            }
	            var textStrokeStyle = textStyle.getStroke();
	            if (!textStrokeStyle) {
	                strokeState = null;
	                this.textStrokeState_ = strokeState;
	            } else {
	                strokeState = this.textStrokeState_;
	                if (!strokeState) {
	                    strokeState = /** @type {import("../canvas.js").StrokeState} */{};
	                    this.textStrokeState_ = strokeState;
	                }
	                var lineDash = textStrokeStyle.getLineDash();
	                var lineDashOffset = textStrokeStyle.getLineDashOffset();
	                var lineWidth = textStrokeStyle.getWidth();
	                var miterLimit = textStrokeStyle.getMiterLimit();
	                strokeState.lineCap = textStrokeStyle.getLineCap() || _canvas.defaultLineCap;
	                strokeState.lineDash = lineDash ? lineDash.slice() : _canvas.defaultLineDash;
	                strokeState.lineDashOffset = lineDashOffset === undefined ? _canvas.defaultLineDashOffset : lineDashOffset;
	                strokeState.lineJoin = textStrokeStyle.getLineJoin() || _canvas.defaultLineJoin;
	                strokeState.lineWidth = lineWidth === undefined ? _canvas.defaultLineWidth : lineWidth;
	                strokeState.miterLimit = miterLimit === undefined ? _canvas.defaultMiterLimit : miterLimit;
	                strokeState.strokeStyle = (0, _colorlike.asColorLike)(textStrokeStyle.getColor() || _canvas.defaultStrokeStyle);
	            }
	            textState = this.textState_;
	            var font = textStyle.getFont() || _canvas.defaultFont;
	            (0, _canvas.checkFont)(font);
	            var textScale = textStyle.getScale();
	            textState.overflow = textStyle.getOverflow();
	            textState.font = font;
	            textState.maxAngle = textStyle.getMaxAngle();
	            textState.placement = textStyle.getPlacement();
	            textState.textAlign = textStyle.getTextAlign();
	            textState.textBaseline = textStyle.getTextBaseline() || _canvas.defaultTextBaseline;
	            textState.backgroundFill = textStyle.getBackgroundFill();
	            textState.backgroundStroke = textStyle.getBackgroundStroke();
	            textState.padding = textStyle.getPadding() || _canvas.defaultPadding;
	            textState.scale = textScale === undefined ? 1 : textScale;
	            var textOffsetX = textStyle.getOffsetX();
	            var textOffsetY = textStyle.getOffsetY();
	            var textRotateWithView = textStyle.getRotateWithView();
	            var textRotation = textStyle.getRotation();
	            this.text_ = textStyle.getText() || '';
	            this.textOffsetX_ = textOffsetX === undefined ? 0 : textOffsetX;
	            this.textOffsetY_ = textOffsetY === undefined ? 0 : textOffsetY;
	            this.textRotateWithView_ = textRotateWithView === undefined ? false : textRotateWithView;
	            this.textRotation_ = textRotation === undefined ? 0 : textRotation;
	            this.strokeKey_ = strokeState ? (typeof strokeState.strokeStyle == 'string' ? strokeState.strokeStyle : (0, _util.getUid)(strokeState.strokeStyle)) + strokeState.lineCap + strokeState.lineDashOffset + '|' + strokeState.lineWidth + strokeState.lineJoin + strokeState.miterLimit + '[' + strokeState.lineDash.join() + ']' : '';
	            this.textKey_ = textState.font + textState.scale + (textState.textAlign || '?');
	            this.fillKey_ = fillState ? typeof fillState.fillStyle == 'string' ? fillState.fillStyle : '|' + (0, _util.getUid)(fillState.fillStyle) : '';
	        }
	    };
	    return CanvasTextBuilder;
	}(_Builder2.default);
	exports.default = CanvasTextBuilder;
	//# sourceMappingURL=TextBuilder.js.map

/***/ }),
/* 292 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	
	var _css = __webpack_require__(47);
	
	var _Layer = __webpack_require__(126);
	
	var _Event = __webpack_require__(287);
	
	var _Event2 = _interopRequireDefault(_Event);
	
	var _EventType = __webpack_require__(148);
	
	var _EventType2 = _interopRequireDefault(_EventType);
	
	var _Map = __webpack_require__(638);
	
	var _Map2 = _interopRequireDefault(_Map);
	
	var _State = __webpack_require__(107);
	
	var _State2 = _interopRequireDefault(_State);
	
	var _dom = __webpack_require__(34);
	
	var _canvas = __webpack_require__(74);
	
	var _EventType3 = __webpack_require__(10);
	
	var _EventType4 = _interopRequireDefault(_EventType3);
	
	var _events = __webpack_require__(30);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var __extends = undefined && undefined.__extends || function () {
	    var _extendStatics = function extendStatics(d, b) {
	        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	            d.__proto__ = b;
	        } || function (d, b) {
	            for (var p in b) {
	                if (b.hasOwnProperty(p)) d[p] = b[p];
	            }
	        };
	        return _extendStatics(d, b);
	    };
	    return function (d, b) {
	        _extendStatics(d, b);
	        function __() {
	            this.constructor = d;
	        }
	        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	    };
	}();
	/**
	 * @module ol/renderer/Composite
	 */
	
	/**
	 * @classdesc
	 * Canvas map renderer.
	 * @api
	 */
	var CompositeMapRenderer = /** @class */function (_super) {
	    __extends(CompositeMapRenderer, _super);
	    /**
	     * @param {import("../PluggableMap.js").default} map Map.
	     */
	    function CompositeMapRenderer(map) {
	        var _this = _super.call(this, map) || this;
	        /**
	         * @type {import("../events.js").EventsKey}
	         */
	        _this.labelCacheKey_ = (0, _events.listen)(_canvas.labelCache, _EventType4.default.CLEAR, map.redrawText.bind(map));
	        /**
	         * @private
	         * @type {HTMLDivElement}
	         */
	        _this.element_ = document.createElement('div');
	        var style = _this.element_.style;
	        style.position = 'absolute';
	        style.width = '100%';
	        style.height = '100%';
	        style.zIndex = '0';
	        _this.element_.className = _css.CLASS_UNSELECTABLE + ' ol-layers';
	        var container = map.getViewport();
	        container.insertBefore(_this.element_, container.firstChild || null);
	        /**
	         * @private
	         * @type {Array<HTMLElement>}
	         */
	        _this.children_ = [];
	        /**
	         * @private
	         * @type {boolean}
	         */
	        _this.renderedVisible_ = true;
	        return _this;
	    }
	    /**
	     * @param {import("../render/EventType.js").default} type Event type.
	     * @param {import("../PluggableMap.js").FrameState} frameState Frame state.
	     */
	    CompositeMapRenderer.prototype.dispatchRenderEvent = function (type, frameState) {
	        var map = this.getMap();
	        if (map.hasListener(type)) {
	            var event_1 = new _Event2.default(type, undefined, frameState);
	            map.dispatchEvent(event_1);
	        }
	    };
	    CompositeMapRenderer.prototype.disposeInternal = function () {
	        (0, _events.unlistenByKey)(this.labelCacheKey_);
	        _super.prototype.disposeInternal.call(this);
	    };
	    /**
	     * @inheritDoc
	     */
	    CompositeMapRenderer.prototype.renderFrame = function (frameState) {
	        if (!frameState) {
	            if (this.renderedVisible_) {
	                this.element_.style.display = 'none';
	                this.renderedVisible_ = false;
	            }
	            return;
	        }
	        this.calculateMatrices2D(frameState);
	        this.dispatchRenderEvent(_EventType2.default.PRECOMPOSE, frameState);
	        var layerStatesArray = frameState.layerStatesArray.sort(function (a, b) {
	            return a.zIndex - b.zIndex;
	        });
	        var viewState = frameState.viewState;
	        this.children_.length = 0;
	        var previousElement = null;
	        for (var i = 0, ii = layerStatesArray.length; i < ii; ++i) {
	            var layerState = layerStatesArray[i];
	            frameState.layerIndex = i;
	            if (!(0, _Layer.inView)(layerState, viewState) || layerState.sourceState != _State2.default.READY && layerState.sourceState != _State2.default.UNDEFINED) {
	                continue;
	            }
	            var layer = layerState.layer;
	            var element = layer.render(frameState, previousElement);
	            if (!element) {
	                continue;
	            }
	            if (element !== previousElement) {
	                this.children_.push(element);
	                previousElement = element;
	            }
	        }
	        _super.prototype.renderFrame.call(this, frameState);
	        (0, _dom.replaceChildren)(this.element_, this.children_);
	        this.dispatchRenderEvent(_EventType2.default.POSTCOMPOSE, frameState);
	        if (!this.renderedVisible_) {
	            this.element_.style.display = '';
	            this.renderedVisible_ = true;
	        }
	        this.scheduleExpireIconCache(frameState);
	    };
	    /**
	     * @inheritDoc
	     */
	    CompositeMapRenderer.prototype.forEachLayerAtPixel = function (pixel, frameState, hitTolerance, callback, layerFilter) {
	        var viewState = frameState.viewState;
	        var layerStates = frameState.layerStatesArray;
	        var numLayers = layerStates.length;
	        for (var i = numLayers - 1; i >= 0; --i) {
	            var layerState = layerStates[i];
	            var layer = layerState.layer;
	            if (layer.hasRenderer() && (0, _Layer.inView)(layerState, viewState) && layerFilter(layer)) {
	                var layerRenderer = layer.getRenderer();
	                var data = layerRenderer.getDataAtPixel(pixel, frameState, hitTolerance);
	                if (data) {
	                    var result = callback(layer, data);
	                    if (result) {
	                        return result;
	                    }
	                }
	            }
	        }
	        return undefined;
	    };
	    return CompositeMapRenderer;
	}(_Map2.default);
	exports.default = CompositeMapRenderer;
	//# sourceMappingURL=Composite.js.map

/***/ }),
/* 293 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	
	var _extent = __webpack_require__(4);
	
	var _dom = __webpack_require__(34);
	
	var _Event = __webpack_require__(287);
	
	var _Event2 = _interopRequireDefault(_Event);
	
	var _EventType = __webpack_require__(148);
	
	var _EventType2 = _interopRequireDefault(_EventType);
	
	var _canvas = __webpack_require__(74);
	
	var _Layer = __webpack_require__(637);
	
	var _Layer2 = _interopRequireDefault(_Layer);
	
	var _transform = __webpack_require__(48);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var __extends = undefined && undefined.__extends || function () {
	    var _extendStatics = function extendStatics(d, b) {
	        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	            d.__proto__ = b;
	        } || function (d, b) {
	            for (var p in b) {
	                if (b.hasOwnProperty(p)) d[p] = b[p];
	            }
	        };
	        return _extendStatics(d, b);
	    };
	    return function (d, b) {
	        _extendStatics(d, b);
	        function __() {
	            this.constructor = d;
	        }
	        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	    };
	}();
	/**
	 * @module ol/renderer/canvas/Layer
	 */
	
	/**
	 * @abstract
	 * @template {import("../../layer/Layer.js").default} LayerType
	 */
	var CanvasLayerRenderer = /** @class */function (_super) {
	    __extends(CanvasLayerRenderer, _super);
	    /**
	     * @param {LayerType} layer Layer.
	     */
	    function CanvasLayerRenderer(layer) {
	        var _this = _super.call(this, layer) || this;
	        /**
	         * @protected
	         * @type {HTMLElement}
	         */
	        _this.container = null;
	        /**
	         * @protected
	         * @type {number}
	         */
	        _this.renderedResolution;
	        /**
	         * A temporary transform.  The values in this transform should only be used in a
	         * function that sets the values.
	         * @private
	         * @type {import("../../transform.js").Transform}
	         */
	        _this.tempTransform_ = (0, _transform.create)();
	        /**
	         * The transform for rendered pixels to viewport CSS pixels.  This transform must
	         * be set when rendering a frame and may be used by other functions after rendering.
	         * @protected
	         * @type {import("../../transform.js").Transform}
	         */
	        _this.pixelTransform = (0, _transform.create)();
	        /**
	         * The transform for viewport CSS pixels to rendered pixels.  This transform must
	         * be set when rendering a frame and may be used by other functions after rendering.
	         * @protected
	         * @type {import("../../transform.js").Transform}
	         */
	        _this.inversePixelTransform = (0, _transform.create)();
	        /**
	         * @protected
	         * @type {CanvasRenderingContext2D}
	         */
	        _this.context = null;
	        /**
	         * @type {boolean}
	         */
	        _this.containerReused = false;
	        /**
	         * @type {HTMLCanvasElement}
	         * @private
	         */
	        _this.createTransformStringCanvas_ = (0, _dom.createCanvasContext2D)(1, 1).canvas;
	        return _this;
	    }
	    /**
	     * Get a rendering container from an existing target, if compatible.
	     * @param {HTMLElement} target Potential render target.
	     * @param {string} transform CSS Transform.
	     * @param {number} opacity Opacity.
	     */
	    CanvasLayerRenderer.prototype.useContainer = function (target, transform, opacity) {
	        var layerClassName = this.getLayer().getClassName();
	        var container, context;
	        if (target && target.style.opacity === '' && target.className === layerClassName) {
	            var canvas = target.firstElementChild;
	            if (canvas instanceof HTMLCanvasElement) {
	                context = canvas.getContext('2d');
	            }
	        }
	        if (context && context.canvas.style.transform === transform) {
	            // Container of the previous layer renderer can be used.
	            this.container = target;
	            this.context = context;
	            this.containerReused = true;
	        } else if (this.containerReused) {
	            // Previously reused container cannot be used any more.
	            this.container = null;
	            this.context = null;
	            this.containerReused = false;
	        }
	        if (!this.container) {
	            container = document.createElement('div');
	            container.className = layerClassName;
	            var style = container.style;
	            style.position = 'absolute';
	            style.width = '100%';
	            style.height = '100%';
	            context = (0, _dom.createCanvasContext2D)();
	            var canvas = context.canvas;
	            container.appendChild(canvas);
	            style = canvas.style;
	            style.position = 'absolute';
	            style.left = '0';
	            style.transformOrigin = 'top left';
	            this.container = container;
	            this.context = context;
	        }
	    };
	    /**
	     * @param {CanvasRenderingContext2D} context Context.
	     * @param {import("../../PluggableMap.js").FrameState} frameState Frame state.
	     * @param {import("../../extent.js").Extent} extent Clip extent.
	     * @protected
	     */
	    CanvasLayerRenderer.prototype.clip = function (context, frameState, extent) {
	        var pixelRatio = frameState.pixelRatio;
	        var halfWidth = frameState.size[0] * pixelRatio / 2;
	        var halfHeight = frameState.size[1] * pixelRatio / 2;
	        var rotation = frameState.viewState.rotation;
	        var topLeft = (0, _extent.getTopLeft)(extent);
	        var topRight = (0, _extent.getTopRight)(extent);
	        var bottomRight = (0, _extent.getBottomRight)(extent);
	        var bottomLeft = (0, _extent.getBottomLeft)(extent);
	        (0, _transform.apply)(frameState.coordinateToPixelTransform, topLeft);
	        (0, _transform.apply)(frameState.coordinateToPixelTransform, topRight);
	        (0, _transform.apply)(frameState.coordinateToPixelTransform, bottomRight);
	        (0, _transform.apply)(frameState.coordinateToPixelTransform, bottomLeft);
	        context.save();
	        (0, _canvas.rotateAtOffset)(context, -rotation, halfWidth, halfHeight);
	        context.beginPath();
	        context.moveTo(topLeft[0] * pixelRatio, topLeft[1] * pixelRatio);
	        context.lineTo(topRight[0] * pixelRatio, topRight[1] * pixelRatio);
	        context.lineTo(bottomRight[0] * pixelRatio, bottomRight[1] * pixelRatio);
	        context.lineTo(bottomLeft[0] * pixelRatio, bottomLeft[1] * pixelRatio);
	        context.clip();
	        (0, _canvas.rotateAtOffset)(context, rotation, halfWidth, halfHeight);
	    };
	    /**
	     * @param {CanvasRenderingContext2D} context Context.
	     * @param {import("../../PluggableMap.js").FrameState} frameState Frame state.
	     * @param {import("../../extent.js").Extent} extent Clip extent.
	     * @protected
	     */
	    CanvasLayerRenderer.prototype.clipUnrotated = function (context, frameState, extent) {
	        var topLeft = (0, _extent.getTopLeft)(extent);
	        var topRight = (0, _extent.getTopRight)(extent);
	        var bottomRight = (0, _extent.getBottomRight)(extent);
	        var bottomLeft = (0, _extent.getBottomLeft)(extent);
	        (0, _transform.apply)(frameState.coordinateToPixelTransform, topLeft);
	        (0, _transform.apply)(frameState.coordinateToPixelTransform, topRight);
	        (0, _transform.apply)(frameState.coordinateToPixelTransform, bottomRight);
	        (0, _transform.apply)(frameState.coordinateToPixelTransform, bottomLeft);
	        var inverted = this.inversePixelTransform;
	        (0, _transform.apply)(inverted, topLeft);
	        (0, _transform.apply)(inverted, topRight);
	        (0, _transform.apply)(inverted, bottomRight);
	        (0, _transform.apply)(inverted, bottomLeft);
	        context.save();
	        context.beginPath();
	        context.moveTo(Math.round(topLeft[0]), Math.round(topLeft[1]));
	        context.lineTo(Math.round(topRight[0]), Math.round(topRight[1]));
	        context.lineTo(Math.round(bottomRight[0]), Math.round(bottomRight[1]));
	        context.lineTo(Math.round(bottomLeft[0]), Math.round(bottomLeft[1]));
	        context.clip();
	    };
	    /**
	     * @param {import("../../render/EventType.js").default} type Event type.
	     * @param {CanvasRenderingContext2D} context Context.
	     * @param {import("../../PluggableMap.js").FrameState} frameState Frame state.
	     * @private
	     */
	    CanvasLayerRenderer.prototype.dispatchRenderEvent_ = function (type, context, frameState) {
	        var layer = this.getLayer();
	        if (layer.hasListener(type)) {
	            var event_1 = new _Event2.default(type, this.inversePixelTransform, frameState, context);
	            layer.dispatchEvent(event_1);
	        }
	    };
	    /**
	     * @param {CanvasRenderingContext2D} context Context.
	     * @param {import("../../PluggableMap.js").FrameState} frameState Frame state.
	     * @protected
	     */
	    CanvasLayerRenderer.prototype.preRender = function (context, frameState) {
	        this.dispatchRenderEvent_(_EventType2.default.PRERENDER, context, frameState);
	    };
	    /**
	     * @param {CanvasRenderingContext2D} context Context.
	     * @param {import("../../PluggableMap.js").FrameState} frameState Frame state.
	     * @protected
	     */
	    CanvasLayerRenderer.prototype.postRender = function (context, frameState) {
	        this.dispatchRenderEvent_(_EventType2.default.POSTRENDER, context, frameState);
	    };
	    /**
	     * Creates a transform for rendering to an element that will be rotated after rendering.
	     * @param {import("../../coordinate.js").Coordinate} center Center.
	     * @param {number} resolution Resolution.
	     * @param {number} rotation Rotation.
	     * @param {number} pixelRatio Pixel ratio.
	     * @param {number} width Width of the rendered element (in pixels).
	     * @param {number} height Height of the rendered element (in pixels).
	     * @param {number} offsetX Offset on the x-axis in view coordinates.
	     * @protected
	     * @return {!import("../../transform.js").Transform} Transform.
	     */
	    CanvasLayerRenderer.prototype.getRenderTransform = function (center, resolution, rotation, pixelRatio, width, height, offsetX) {
	        var dx1 = width / 2;
	        var dy1 = height / 2;
	        var sx = pixelRatio / resolution;
	        var sy = -sx;
	        var dx2 = -center[0] + offsetX;
	        var dy2 = -center[1];
	        return (0, _transform.compose)(this.tempTransform_, dx1, dy1, sx, sy, -rotation, dx2, dy2);
	    };
	    /**
	     * @param {import("../../pixel.js").Pixel} pixel Pixel.
	     * @param {import("../../PluggableMap.js").FrameState} frameState FrameState.
	     * @param {number} hitTolerance Hit tolerance in pixels.
	     * @return {Uint8ClampedArray|Uint8Array} The result.  If there is no data at the pixel
	     *    location, null will be returned.  If there is data, but pixel values cannot be
	     *    returned, and empty array will be returned.
	     */
	    CanvasLayerRenderer.prototype.getDataAtPixel = function (pixel, frameState, hitTolerance) {
	        var renderPixel = (0, _transform.apply)(this.inversePixelTransform, pixel.slice());
	        var context = this.context;
	        var data;
	        try {
	            data = context.getImageData(Math.round(renderPixel[0]), Math.round(renderPixel[1]), 1, 1).data;
	        } catch (err) {
	            if (err.name === 'SecurityError') {
	                // tainted canvas, we assume there is data at the given pixel (although there might not be)
	                return new Uint8Array();
	            }
	            return data;
	        }
	        if (data[3] === 0) {
	            return null;
	        }
	        return data;
	    };
	    /**
	     * @param {import("../../transform.js").Transform} transform Transform.
	     * @return {string} CSS transform.
	     */
	    CanvasLayerRenderer.prototype.createTransformString = function (transform) {
	        this.createTransformStringCanvas_.style.transform = (0, _transform.toString)(transform);
	        return this.createTransformStringCanvas_.style.transform;
	    };
	    return CanvasLayerRenderer;
	}(_Layer2.default);
	exports.default = CanvasLayerRenderer;
	//# sourceMappingURL=Layer.js.map

/***/ }),
/* 294 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	exports.defaultOrder = defaultOrder;
	exports.getSquaredTolerance = getSquaredTolerance;
	exports.getTolerance = getTolerance;
	exports.renderFeature = renderFeature;
	
	var _util = __webpack_require__(14);
	
	var _ImageState = __webpack_require__(100);
	
	var _ImageState2 = _interopRequireDefault(_ImageState);
	
	var _GeometryType = __webpack_require__(22);
	
	var _GeometryType2 = _interopRequireDefault(_GeometryType);
	
	var _BuilderType = __webpack_require__(289);
	
	var _BuilderType2 = _interopRequireDefault(_BuilderType);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	/**
	 * Tolerance for geometry simplification in device pixels.
	 * @type {number}
	 */
	/**
	 * @module ol/renderer/vector
	 */
	var SIMPLIFY_TOLERANCE = 0.5;
	/**
	 * @const
	 * @type {Object<import("../geom/GeometryType.js").default,
	 *                function(import("../render/canvas/BuilderGroup.js").default, import("../geom/Geometry.js").default,
	 *                         import("../style/Style.js").default, Object): void>}
	 */
	var GEOMETRY_RENDERERS = {
	    'Point': renderPointGeometry,
	    'LineString': renderLineStringGeometry,
	    'Polygon': renderPolygonGeometry,
	    'MultiPoint': renderMultiPointGeometry,
	    'MultiLineString': renderMultiLineStringGeometry,
	    'MultiPolygon': renderMultiPolygonGeometry,
	    'GeometryCollection': renderGeometryCollectionGeometry,
	    'Circle': renderCircleGeometry
	};
	/**
	 * @param {import("../Feature.js").FeatureLike} feature1 Feature 1.
	 * @param {import("../Feature.js").FeatureLike} feature2 Feature 2.
	 * @return {number} Order.
	 */
	function defaultOrder(feature1, feature2) {
	    return parseInt((0, _util.getUid)(feature1), 10) - parseInt((0, _util.getUid)(feature2), 10);
	}
	/**
	 * @param {number} resolution Resolution.
	 * @param {number} pixelRatio Pixel ratio.
	 * @return {number} Squared pixel tolerance.
	 */
	function getSquaredTolerance(resolution, pixelRatio) {
	    var tolerance = getTolerance(resolution, pixelRatio);
	    return tolerance * tolerance;
	}
	/**
	 * @param {number} resolution Resolution.
	 * @param {number} pixelRatio Pixel ratio.
	 * @return {number} Pixel tolerance.
	 */
	function getTolerance(resolution, pixelRatio) {
	    return SIMPLIFY_TOLERANCE * resolution / pixelRatio;
	}
	/**
	 * @param {import("../render/canvas/BuilderGroup.js").default} builderGroup Builder group.
	 * @param {import("../geom/Circle.js").default} geometry Geometry.
	 * @param {import("../style/Style.js").default} style Style.
	 * @param {import("../Feature.js").default} feature Feature.
	 */
	function renderCircleGeometry(builderGroup, geometry, style, feature) {
	    var fillStyle = style.getFill();
	    var strokeStyle = style.getStroke();
	    if (fillStyle || strokeStyle) {
	        var circleReplay = builderGroup.getBuilder(style.getZIndex(), _BuilderType2.default.CIRCLE);
	        circleReplay.setFillStrokeStyle(fillStyle, strokeStyle);
	        circleReplay.drawCircle(geometry, feature);
	    }
	    var textStyle = style.getText();
	    if (textStyle) {
	        var textReplay = builderGroup.getBuilder(style.getZIndex(), _BuilderType2.default.TEXT);
	        textReplay.setTextStyle(textStyle, builderGroup.addDeclutter(false));
	        textReplay.drawText(geometry, feature);
	    }
	}
	/**
	 * @param {import("../render/canvas/BuilderGroup.js").default} replayGroup Replay group.
	 * @param {import("../Feature.js").FeatureLike} feature Feature.
	 * @param {import("../style/Style.js").default} style Style.
	 * @param {number} squaredTolerance Squared tolerance.
	 * @param {function(import("../events/Event.js").default): void} listener Listener function.
	 * @param {import("../proj.js").TransformFunction} [opt_transform] Transform from user to view projection.
	 * @return {boolean} `true` if style is loading.
	 * @template T
	 */
	function renderFeature(replayGroup, feature, style, squaredTolerance, listener, opt_transform) {
	    var loading = false;
	    var imageStyle = style.getImage();
	    if (imageStyle) {
	        var imageState = imageStyle.getImageState();
	        if (imageState == _ImageState2.default.LOADED || imageState == _ImageState2.default.ERROR) {
	            imageStyle.unlistenImageChange(listener);
	        } else {
	            if (imageState == _ImageState2.default.IDLE) {
	                imageStyle.load();
	            }
	            imageState = imageStyle.getImageState();
	            imageStyle.listenImageChange(listener);
	            loading = true;
	        }
	    }
	    renderFeatureInternal(replayGroup, feature, style, squaredTolerance, opt_transform);
	    return loading;
	}
	/**
	 * @param {import("../render/canvas/BuilderGroup.js").default} replayGroup Replay group.
	 * @param {import("../Feature.js").FeatureLike} feature Feature.
	 * @param {import("../style/Style.js").default} style Style.
	 * @param {number} squaredTolerance Squared tolerance.
	 * @param {import("../proj.js").TransformFunction} [opt_transform] Optional transform function.
	 */
	function renderFeatureInternal(replayGroup, feature, style, squaredTolerance, opt_transform) {
	    var geometry = style.getGeometryFunction()(feature);
	    if (!geometry) {
	        return;
	    }
	    var simplifiedGeometry = geometry.simplifyTransformed(squaredTolerance, opt_transform);
	    var renderer = style.getRenderer();
	    if (renderer) {
	        renderGeometry(replayGroup, simplifiedGeometry, style, feature);
	    } else {
	        var geometryRenderer = GEOMETRY_RENDERERS[simplifiedGeometry.getType()];
	        geometryRenderer(replayGroup, simplifiedGeometry, style, feature);
	    }
	}
	/**
	 * @param {import("../render/canvas/BuilderGroup.js").default} replayGroup Replay group.
	 * @param {import("../geom/Geometry.js").default|import("../render/Feature.js").default} geometry Geometry.
	 * @param {import("../style/Style.js").default} style Style.
	 * @param {import("../Feature.js").FeatureLike} feature Feature.
	 */
	function renderGeometry(replayGroup, geometry, style, feature) {
	    if (geometry.getType() == _GeometryType2.default.GEOMETRY_COLLECTION) {
	        var geometries = /** @type {import("../geom/GeometryCollection.js").default} */geometry.getGeometries();
	        for (var i = 0, ii = geometries.length; i < ii; ++i) {
	            renderGeometry(replayGroup, geometries[i], style, feature);
	        }
	        return;
	    }
	    var replay = replayGroup.getBuilder(style.getZIndex(), _BuilderType2.default.DEFAULT);
	    replay.drawCustom( /** @type {import("../geom/SimpleGeometry.js").default} */geometry, feature, style.getRenderer());
	}
	/**
	 * @param {import("../render/canvas/BuilderGroup.js").default} replayGroup Replay group.
	 * @param {import("../geom/GeometryCollection.js").default} geometry Geometry.
	 * @param {import("../style/Style.js").default} style Style.
	 * @param {import("../Feature.js").default} feature Feature.
	 */
	function renderGeometryCollectionGeometry(replayGroup, geometry, style, feature) {
	    var geometries = geometry.getGeometriesArray();
	    var i, ii;
	    for (i = 0, ii = geometries.length; i < ii; ++i) {
	        var geometryRenderer = GEOMETRY_RENDERERS[geometries[i].getType()];
	        geometryRenderer(replayGroup, geometries[i], style, feature);
	    }
	}
	/**
	 * @param {import("../render/canvas/BuilderGroup.js").default} builderGroup Replay group.
	 * @param {import("../geom/LineString.js").default|import("../render/Feature.js").default} geometry Geometry.
	 * @param {import("../style/Style.js").default} style Style.
	 * @param {import("../Feature.js").FeatureLike} feature Feature.
	 */
	function renderLineStringGeometry(builderGroup, geometry, style, feature) {
	    var strokeStyle = style.getStroke();
	    if (strokeStyle) {
	        var lineStringReplay = builderGroup.getBuilder(style.getZIndex(), _BuilderType2.default.LINE_STRING);
	        lineStringReplay.setFillStrokeStyle(null, strokeStyle);
	        lineStringReplay.drawLineString(geometry, feature);
	    }
	    var textStyle = style.getText();
	    if (textStyle) {
	        var textReplay = builderGroup.getBuilder(style.getZIndex(), _BuilderType2.default.TEXT);
	        textReplay.setTextStyle(textStyle, builderGroup.addDeclutter(false));
	        textReplay.drawText(geometry, feature);
	    }
	}
	/**
	 * @param {import("../render/canvas/BuilderGroup.js").default} builderGroup Replay group.
	 * @param {import("../geom/MultiLineString.js").default|import("../render/Feature.js").default} geometry Geometry.
	 * @param {import("../style/Style.js").default} style Style.
	 * @param {import("../Feature.js").FeatureLike} feature Feature.
	 */
	function renderMultiLineStringGeometry(builderGroup, geometry, style, feature) {
	    var strokeStyle = style.getStroke();
	    if (strokeStyle) {
	        var lineStringReplay = builderGroup.getBuilder(style.getZIndex(), _BuilderType2.default.LINE_STRING);
	        lineStringReplay.setFillStrokeStyle(null, strokeStyle);
	        lineStringReplay.drawMultiLineString(geometry, feature);
	    }
	    var textStyle = style.getText();
	    if (textStyle) {
	        var textReplay = builderGroup.getBuilder(style.getZIndex(), _BuilderType2.default.TEXT);
	        textReplay.setTextStyle(textStyle, builderGroup.addDeclutter(false));
	        textReplay.drawText(geometry, feature);
	    }
	}
	/**
	 * @param {import("../render/canvas/BuilderGroup.js").default} builderGroup Replay group.
	 * @param {import("../geom/MultiPolygon.js").default} geometry Geometry.
	 * @param {import("../style/Style.js").default} style Style.
	 * @param {import("../Feature.js").default} feature Feature.
	 */
	function renderMultiPolygonGeometry(builderGroup, geometry, style, feature) {
	    var fillStyle = style.getFill();
	    var strokeStyle = style.getStroke();
	    if (strokeStyle || fillStyle) {
	        var polygonReplay = builderGroup.getBuilder(style.getZIndex(), _BuilderType2.default.POLYGON);
	        polygonReplay.setFillStrokeStyle(fillStyle, strokeStyle);
	        polygonReplay.drawMultiPolygon(geometry, feature);
	    }
	    var textStyle = style.getText();
	    if (textStyle) {
	        var textReplay = builderGroup.getBuilder(style.getZIndex(), _BuilderType2.default.TEXT);
	        textReplay.setTextStyle(textStyle, builderGroup.addDeclutter(false));
	        textReplay.drawText(geometry, feature);
	    }
	}
	/**
	 * @param {import("../render/canvas/BuilderGroup.js").default} builderGroup Replay group.
	 * @param {import("../geom/Point.js").default|import("../render/Feature.js").default} geometry Geometry.
	 * @param {import("../style/Style.js").default} style Style.
	 * @param {import("../Feature.js").FeatureLike} feature Feature.
	 */
	function renderPointGeometry(builderGroup, geometry, style, feature) {
	    var imageStyle = style.getImage();
	    if (imageStyle) {
	        if (imageStyle.getImageState() != _ImageState2.default.LOADED) {
	            return;
	        }
	        var imageReplay = builderGroup.getBuilder(style.getZIndex(), _BuilderType2.default.IMAGE);
	        imageReplay.setImageStyle(imageStyle, builderGroup.addDeclutter(false));
	        imageReplay.drawPoint(geometry, feature);
	    }
	    var textStyle = style.getText();
	    if (textStyle) {
	        var textReplay = builderGroup.getBuilder(style.getZIndex(), _BuilderType2.default.TEXT);
	        textReplay.setTextStyle(textStyle, builderGroup.addDeclutter(!!imageStyle));
	        textReplay.drawText(geometry, feature);
	    }
	}
	/**
	 * @param {import("../render/canvas/BuilderGroup.js").default} builderGroup Replay group.
	 * @param {import("../geom/MultiPoint.js").default|import("../render/Feature.js").default} geometry Geometry.
	 * @param {import("../style/Style.js").default} style Style.
	 * @param {import("../Feature.js").FeatureLike} feature Feature.
	 */
	function renderMultiPointGeometry(builderGroup, geometry, style, feature) {
	    var imageStyle = style.getImage();
	    if (imageStyle) {
	        if (imageStyle.getImageState() != _ImageState2.default.LOADED) {
	            return;
	        }
	        var imageReplay = builderGroup.getBuilder(style.getZIndex(), _BuilderType2.default.IMAGE);
	        imageReplay.setImageStyle(imageStyle, builderGroup.addDeclutter(false));
	        imageReplay.drawMultiPoint(geometry, feature);
	    }
	    var textStyle = style.getText();
	    if (textStyle) {
	        var textReplay = builderGroup.getBuilder(style.getZIndex(), _BuilderType2.default.TEXT);
	        textReplay.setTextStyle(textStyle, builderGroup.addDeclutter(!!imageStyle));
	        textReplay.drawText(geometry, feature);
	    }
	}
	/**
	 * @param {import("../render/canvas/BuilderGroup.js").default} builderGroup Replay group.
	 * @param {import("../geom/Polygon.js").default|import("../render/Feature.js").default} geometry Geometry.
	 * @param {import("../style/Style.js").default} style Style.
	 * @param {import("../Feature.js").FeatureLike} feature Feature.
	 */
	function renderPolygonGeometry(builderGroup, geometry, style, feature) {
	    var fillStyle = style.getFill();
	    var strokeStyle = style.getStroke();
	    if (fillStyle || strokeStyle) {
	        var polygonReplay = builderGroup.getBuilder(style.getZIndex(), _BuilderType2.default.POLYGON);
	        polygonReplay.setFillStrokeStyle(fillStyle, strokeStyle);
	        polygonReplay.drawPolygon(geometry, feature);
	    }
	    var textStyle = style.getText();
	    if (textStyle) {
	        var textReplay = builderGroup.getBuilder(style.getZIndex(), _BuilderType2.default.TEXT);
	        textReplay.setTextStyle(textStyle, builderGroup.addDeclutter(false));
	        textReplay.drawText(geometry, feature);
	    }
	}
	//# sourceMappingURL=vector.js.map

/***/ }),
/* 295 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	exports.calculateSourceResolution = calculateSourceResolution;
	exports.render = render;
	
	var _dom = __webpack_require__(34);
	
	var _extent = __webpack_require__(4);
	
	var _math = __webpack_require__(19);
	
	var _proj = __webpack_require__(16);
	
	/**
	 * Calculates ideal resolution to use from the source in order to achieve
	 * pixel mapping as close as possible to 1:1 during reprojection.
	 * The resolution is calculated regardless of what resolutions
	 * are actually available in the dataset (TileGrid, Image, ...).
	 *
	 * @param {import("./proj/Projection.js").default} sourceProj Source projection.
	 * @param {import("./proj/Projection.js").default} targetProj Target projection.
	 * @param {import("./coordinate.js").Coordinate} targetCenter Target center.
	 * @param {number} targetResolution Target resolution.
	 * @return {number} The best resolution to use. Can be +-Infinity, NaN or 0.
	 */
	/**
	 * @module ol/reproj
	 */
	function calculateSourceResolution(sourceProj, targetProj, targetCenter, targetResolution) {
	    var sourceCenter = (0, _proj.transform)(targetCenter, targetProj, sourceProj);
	    // calculate the ideal resolution of the source data
	    var sourceResolution = (0, _proj.getPointResolution)(targetProj, targetResolution, targetCenter);
	    var targetMetersPerUnit = targetProj.getMetersPerUnit();
	    if (targetMetersPerUnit !== undefined) {
	        sourceResolution *= targetMetersPerUnit;
	    }
	    var sourceMetersPerUnit = sourceProj.getMetersPerUnit();
	    if (sourceMetersPerUnit !== undefined) {
	        sourceResolution /= sourceMetersPerUnit;
	    }
	    // Based on the projection properties, the point resolution at the specified
	    // coordinates may be slightly different. We need to reverse-compensate this
	    // in order to achieve optimal results.
	    var sourceExtent = sourceProj.getExtent();
	    if (!sourceExtent || (0, _extent.containsCoordinate)(sourceExtent, sourceCenter)) {
	        var compensationFactor = (0, _proj.getPointResolution)(sourceProj, sourceResolution, sourceCenter) / sourceResolution;
	        if (isFinite(compensationFactor) && compensationFactor > 0) {
	            sourceResolution /= compensationFactor;
	        }
	    }
	    return sourceResolution;
	}
	/**
	 * Enlarge the clipping triangle point by 1 pixel to ensure the edges overlap
	 * in order to mask gaps caused by antialiasing.
	 *
	 * @param {number} centroidX Centroid of the triangle (x coordinate in pixels).
	 * @param {number} centroidY Centroid of the triangle (y coordinate in pixels).
	 * @param {number} x X coordinate of the point (in pixels).
	 * @param {number} y Y coordinate of the point (in pixels).
	 * @return {import("./coordinate.js").Coordinate} New point 1 px farther from the centroid.
	 */
	function enlargeClipPoint(centroidX, centroidY, x, y) {
	    var dX = x - centroidX;
	    var dY = y - centroidY;
	    var distance = Math.sqrt(dX * dX + dY * dY);
	    return [Math.round(x + dX / distance), Math.round(y + dY / distance)];
	}
	/**
	 * Renders the source data into new canvas based on the triangulation.
	 *
	 * @param {number} width Width of the canvas.
	 * @param {number} height Height of the canvas.
	 * @param {number} pixelRatio Pixel ratio.
	 * @param {number} sourceResolution Source resolution.
	 * @param {import("./extent.js").Extent} sourceExtent Extent of the data source.
	 * @param {number} targetResolution Target resolution.
	 * @param {import("./extent.js").Extent} targetExtent Target extent.
	 * @param {import("./reproj/Triangulation.js").default} triangulation
	 * Calculated triangulation.
	 * @param {Array<{extent: import("./extent.js").Extent,
	 *                 image: (HTMLCanvasElement|HTMLImageElement|HTMLVideoElement)}>} sources
	 * Array of sources.
	 * @param {number} gutter Gutter of the sources.
	 * @param {boolean=} opt_renderEdges Render reprojection edges.
	 * @return {HTMLCanvasElement} Canvas with reprojected data.
	 */
	function render(width, height, pixelRatio, sourceResolution, sourceExtent, targetResolution, targetExtent, triangulation, sources, gutter, opt_renderEdges) {
	    var context = (0, _dom.createCanvasContext2D)(Math.round(pixelRatio * width), Math.round(pixelRatio * height));
	    if (sources.length === 0) {
	        return context.canvas;
	    }
	    context.scale(pixelRatio, pixelRatio);
	    var sourceDataExtent = (0, _extent.createEmpty)();
	    sources.forEach(function (src, i, arr) {
	        (0, _extent.extend)(sourceDataExtent, src.extent);
	    });
	    var canvasWidthInUnits = (0, _extent.getWidth)(sourceDataExtent);
	    var canvasHeightInUnits = (0, _extent.getHeight)(sourceDataExtent);
	    var stitchContext = (0, _dom.createCanvasContext2D)(Math.round(pixelRatio * canvasWidthInUnits / sourceResolution), Math.round(pixelRatio * canvasHeightInUnits / sourceResolution));
	    var stitchScale = pixelRatio / sourceResolution;
	    sources.forEach(function (src, i, arr) {
	        var xPos = src.extent[0] - sourceDataExtent[0];
	        var yPos = -(src.extent[3] - sourceDataExtent[3]);
	        var srcWidth = (0, _extent.getWidth)(src.extent);
	        var srcHeight = (0, _extent.getHeight)(src.extent);
	        stitchContext.drawImage(src.image, gutter, gutter, src.image.width - 2 * gutter, src.image.height - 2 * gutter, xPos * stitchScale, yPos * stitchScale, srcWidth * stitchScale, srcHeight * stitchScale);
	    });
	    var targetTopLeft = (0, _extent.getTopLeft)(targetExtent);
	    triangulation.getTriangles().forEach(function (triangle, i, arr) {
	        /* Calculate affine transform (src -> dst)
	         * Resulting matrix can be used to transform coordinate
	         * from `sourceProjection` to destination pixels.
	         *
	         * To optimize number of context calls and increase numerical stability,
	         * we also do the following operations:
	         * trans(-topLeftExtentCorner), scale(1 / targetResolution), scale(1, -1)
	         * here before solving the linear system so [ui, vi] are pixel coordinates.
	         *
	         * Src points: xi, yi
	         * Dst points: ui, vi
	         * Affine coefficients: aij
	         *
	         * | x0 y0 1  0  0 0 |   |a00|   |u0|
	         * | x1 y1 1  0  0 0 |   |a01|   |u1|
	         * | x2 y2 1  0  0 0 | x |a02| = |u2|
	         * |  0  0 0 x0 y0 1 |   |a10|   |v0|
	         * |  0  0 0 x1 y1 1 |   |a11|   |v1|
	         * |  0  0 0 x2 y2 1 |   |a12|   |v2|
	         */
	        var source = triangle.source;
	        var target = triangle.target;
	        var x0 = source[0][0],
	            y0 = source[0][1];
	        var x1 = source[1][0],
	            y1 = source[1][1];
	        var x2 = source[2][0],
	            y2 = source[2][1];
	        var u0 = (target[0][0] - targetTopLeft[0]) / targetResolution;
	        var v0 = -(target[0][1] - targetTopLeft[1]) / targetResolution;
	        var u1 = (target[1][0] - targetTopLeft[0]) / targetResolution;
	        var v1 = -(target[1][1] - targetTopLeft[1]) / targetResolution;
	        var u2 = (target[2][0] - targetTopLeft[0]) / targetResolution;
	        var v2 = -(target[2][1] - targetTopLeft[1]) / targetResolution;
	        // Shift all the source points to improve numerical stability
	        // of all the subsequent calculations. The [x0, y0] is used here.
	        // This is also used to simplify the linear system.
	        var sourceNumericalShiftX = x0;
	        var sourceNumericalShiftY = y0;
	        x0 = 0;
	        y0 = 0;
	        x1 -= sourceNumericalShiftX;
	        y1 -= sourceNumericalShiftY;
	        x2 -= sourceNumericalShiftX;
	        y2 -= sourceNumericalShiftY;
	        var augmentedMatrix = [[x1, y1, 0, 0, u1 - u0], [x2, y2, 0, 0, u2 - u0], [0, 0, x1, y1, v1 - v0], [0, 0, x2, y2, v2 - v0]];
	        var affineCoefs = (0, _math.solveLinearSystem)(augmentedMatrix);
	        if (!affineCoefs) {
	            return;
	        }
	        context.save();
	        context.beginPath();
	        var centroidX = (u0 + u1 + u2) / 3;
	        var centroidY = (v0 + v1 + v2) / 3;
	        var p0 = enlargeClipPoint(centroidX, centroidY, u0, v0);
	        var p1 = enlargeClipPoint(centroidX, centroidY, u1, v1);
	        var p2 = enlargeClipPoint(centroidX, centroidY, u2, v2);
	        context.moveTo(p1[0], p1[1]);
	        context.lineTo(p0[0], p0[1]);
	        context.lineTo(p2[0], p2[1]);
	        context.clip();
	        context.transform(affineCoefs[0], affineCoefs[2], affineCoefs[1], affineCoefs[3], u0, v0);
	        context.translate(sourceDataExtent[0] - sourceNumericalShiftX, sourceDataExtent[3] - sourceNumericalShiftY);
	        context.scale(sourceResolution / pixelRatio, -sourceResolution / pixelRatio);
	        context.drawImage(stitchContext.canvas, 0, 0);
	        context.restore();
	    });
	    if (opt_renderEdges) {
	        context.save();
	        context.strokeStyle = 'black';
	        context.lineWidth = 1;
	        triangulation.getTriangles().forEach(function (triangle, i, arr) {
	            var target = triangle.target;
	            var u0 = (target[0][0] - targetTopLeft[0]) / targetResolution;
	            var v0 = -(target[0][1] - targetTopLeft[1]) / targetResolution;
	            var u1 = (target[1][0] - targetTopLeft[0]) / targetResolution;
	            var v1 = -(target[1][1] - targetTopLeft[1]) / targetResolution;
	            var u2 = (target[2][0] - targetTopLeft[0]) / targetResolution;
	            var v2 = -(target[2][1] - targetTopLeft[1]) / targetResolution;
	            context.beginPath();
	            context.moveTo(u1, v1);
	            context.lineTo(u0, v0);
	            context.lineTo(u2, v2);
	            context.closePath();
	            context.stroke();
	        });
	        context.restore();
	    }
	    return context.canvas;
	}
	//# sourceMappingURL=reproj.js.map

/***/ }),
/* 296 */
/***/ (function(module, exports) {

	"use strict";
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	/**
	 * @module ol/reproj/common
	 */
	/**
	 * Default maximum allowed threshold  (in pixels) for reprojection
	 * triangulation.
	 * @type {number}
	 */
	var ERROR_THRESHOLD = exports.ERROR_THRESHOLD = 0.5;
	/**
	 * Enable automatic reprojection of raster sources. Default is `true`.
	 * TODO: decide if we want to expose this as a build flag or remove it
	 * @type {boolean}
	 */
	var ENABLE_RASTER_REPROJECTION = exports.ENABLE_RASTER_REPROJECTION = true;
	//# sourceMappingURL=common.js.map

/***/ }),
/* 297 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	
	var _util = __webpack_require__(14);
	
	var _Object = __webpack_require__(32);
	
	var _Object2 = _interopRequireDefault(_Object);
	
	var _proj = __webpack_require__(16);
	
	var _State = __webpack_require__(107);
	
	var _State2 = _interopRequireDefault(_State);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var __extends = undefined && undefined.__extends || function () {
	    var _extendStatics = function extendStatics(d, b) {
	        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	            d.__proto__ = b;
	        } || function (d, b) {
	            for (var p in b) {
	                if (b.hasOwnProperty(p)) d[p] = b[p];
	            }
	        };
	        return _extendStatics(d, b);
	    };
	    return function (d, b) {
	        _extendStatics(d, b);
	        function __() {
	            this.constructor = d;
	        }
	        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	    };
	}();
	/**
	 * @module ol/source/Source
	 */
	
	/**
	 * A function that returns a string or an array of strings representing source
	 * attributions.
	 *
	 * @typedef {function(import("../PluggableMap.js").FrameState): (string|Array<string>)} Attribution
	 */
	/**
	 * A type that can be used to provide attribution information for data sources.
	 *
	 * It represents either
	 * * a simple string (e.g. `'© Acme Inc.'`)
	 * * an array of simple strings (e.g. `['© Acme Inc.', '© Bacme Inc.']`)
	 * * a function that returns a string or array of strings ({@link module:ol/source/Source~Attribution})
	 *
	 * @typedef {string|Array<string>|Attribution} AttributionLike
	 */
	/**
	 * @typedef {Object} Options
	 * @property {AttributionLike} [attributions]
	 * @property {boolean} [attributionsCollapsible=true] Attributions are collapsible.
	 * @property {import("../proj.js").ProjectionLike} [projection] Projection. Default is the view projection.
	 * @property {SourceState} [state='ready']
	 * @property {boolean} [wrapX=false]
	 */
	/**
	 * @classdesc
	 * Abstract base class; normally only used for creating subclasses and not
	 * instantiated in apps.
	 * Base class for {@link module:ol/layer/Layer~Layer} sources.
	 *
	 * A generic `change` event is triggered when the state of the source changes.
	 * @abstract
	 * @api
	 */
	var Source = /** @class */function (_super) {
	    __extends(Source, _super);
	    /**
	     * @param {Options} options Source options.
	     */
	    function Source(options) {
	        var _this = _super.call(this) || this;
	        /**
	         * @private
	         * @type {import("../proj/Projection.js").default}
	         */
	        _this.projection_ = (0, _proj.get)(options.projection);
	        /**
	         * @private
	         * @type {?Attribution}
	         */
	        _this.attributions_ = adaptAttributions(options.attributions);
	        /**
	         * @private
	         * @type {boolean}
	         */
	        _this.attributionsCollapsible_ = options.attributionsCollapsible !== undefined ? options.attributionsCollapsible : true;
	        /**
	         * This source is currently loading data. Sources that defer loading to the
	         * map's tile queue never set this to `true`.
	         * @type {boolean}
	         */
	        _this.loading = false;
	        /**
	         * @private
	         * @type {SourceState}
	         */
	        _this.state_ = options.state !== undefined ? options.state : _State2.default.READY;
	        /**
	         * @private
	         * @type {boolean}
	         */
	        _this.wrapX_ = options.wrapX !== undefined ? options.wrapX : false;
	        return _this;
	    }
	    /**
	     * Get the attribution function for the source.
	     * @return {?Attribution} Attribution function.
	     */
	    Source.prototype.getAttributions = function () {
	        return this.attributions_;
	    };
	    /**
	     * @return {boolean} Attributions are collapsible.
	     */
	    Source.prototype.getAttributionsCollapsible = function () {
	        return this.attributionsCollapsible_;
	    };
	    /**
	     * Get the projection of the source.
	     * @return {import("../proj/Projection.js").default} Projection.
	     * @api
	     */
	    Source.prototype.getProjection = function () {
	        return this.projection_;
	    };
	    /**
	     * @abstract
	     * @return {Array<number>|undefined} Resolutions.
	     */
	    Source.prototype.getResolutions = function () {
	        return (0, _util.abstract)();
	    };
	    /**
	     * Get the state of the source, see {@link module:ol/source/State~State} for possible states.
	     * @return {SourceState} State.
	     * @api
	     */
	    Source.prototype.getState = function () {
	        return this.state_;
	    };
	    /**
	     * @return {boolean|undefined} Wrap X.
	     */
	    Source.prototype.getWrapX = function () {
	        return this.wrapX_;
	    };
	    /**
	     * Refreshes the source. The source will be cleared, and data from the server will be reloaded.
	     * @api
	     */
	    Source.prototype.refresh = function () {
	        this.changed();
	    };
	    /**
	     * Set the attributions of the source.
	     * @param {AttributionLike|undefined} attributions Attributions.
	     *     Can be passed as `string`, `Array<string>`, {@link module:ol/source/Source~Attribution},
	     *     or `undefined`.
	     * @api
	     */
	    Source.prototype.setAttributions = function (attributions) {
	        this.attributions_ = adaptAttributions(attributions);
	        this.changed();
	    };
	    /**
	     * Set the state of the source.
	     * @param {SourceState} state State.
	     * @protected
	     */
	    Source.prototype.setState = function (state) {
	        this.state_ = state;
	        this.changed();
	    };
	    return Source;
	}(_Object2.default);
	/**
	 * Turns the attributions option into an attributions function.
	 * @param {AttributionLike|undefined} attributionLike The attribution option.
	 * @return {?Attribution} An attribution function (or null).
	 */
	function adaptAttributions(attributionLike) {
	    if (!attributionLike) {
	        return null;
	    }
	    if (Array.isArray(attributionLike)) {
	        return function (frameState) {
	            return attributionLike;
	        };
	    }
	    if (typeof attributionLike === 'function') {
	        return attributionLike;
	    }
	    return function (frameState) {
	        return [attributionLike];
	    };
	}
	exports.default = Source;
	//# sourceMappingURL=Source.js.map

/***/ }),
/* 298 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	exports.DEFAULT_RADIUS = undefined;
	exports.getDistance = getDistance;
	exports.getLength = getLength;
	exports.getArea = getArea;
	exports.offset = offset;
	
	var _math = __webpack_require__(19);
	
	var _GeometryType = __webpack_require__(22);
	
	var _GeometryType2 = _interopRequireDefault(_GeometryType);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	/**
	 * Object literal with options for the {@link getLength} or {@link getArea}
	 * functions.
	 * @typedef {Object} SphereMetricOptions
	 * @property {import("./proj.js").ProjectionLike} [projection='EPSG:3857']
	 * Projection of the  geometry.  By default, the geometry is assumed to be in
	 * Web Mercator.
	 * @property {number} [radius=6371008.8] Sphere radius.  By default, the
	 * [mean Earth radius](https://en.wikipedia.org/wiki/Earth_radius#Mean_radius)
	 * for the WGS84 ellipsoid is used.
	 */
	/**
	 * The mean Earth radius (1/3 * (2a + b)) for the WGS84 ellipsoid.
	 * https://en.wikipedia.org/wiki/Earth_radius#Mean_radius
	 * @type {number}
	 */
	/**
	 * @license
	 * Latitude/longitude spherical geodesy formulae taken from
	 * http://www.movable-type.co.uk/scripts/latlong.html
	 * Licensed under CC-BY-3.0.
	 */
	/**
	 * @module ol/sphere
	 */
	var DEFAULT_RADIUS = exports.DEFAULT_RADIUS = 6371008.8;
	/**
	 * Get the great circle distance (in meters) between two geographic coordinates.
	 * @param {Array} c1 Starting coordinate.
	 * @param {Array} c2 Ending coordinate.
	 * @param {number=} opt_radius The sphere radius to use.  Defaults to the Earth's
	 *     mean radius using the WGS84 ellipsoid.
	 * @return {number} The great circle distance between the points (in meters).
	 * @api
	 */
	function getDistance(c1, c2, opt_radius) {
	    var radius = opt_radius || DEFAULT_RADIUS;
	    var lat1 = (0, _math.toRadians)(c1[1]);
	    var lat2 = (0, _math.toRadians)(c2[1]);
	    var deltaLatBy2 = (lat2 - lat1) / 2;
	    var deltaLonBy2 = (0, _math.toRadians)(c2[0] - c1[0]) / 2;
	    var a = Math.sin(deltaLatBy2) * Math.sin(deltaLatBy2) + Math.sin(deltaLonBy2) * Math.sin(deltaLonBy2) * Math.cos(lat1) * Math.cos(lat2);
	    return 2 * radius * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
	}
	/**
	 * Get the cumulative great circle length of linestring coordinates (geographic).
	 * @param {Array} coordinates Linestring coordinates.
	 * @param {number} radius The sphere radius to use.
	 * @return {number} The length (in meters).
	 */
	function getLengthInternal(coordinates, radius) {
	    var length = 0;
	    for (var i = 0, ii = coordinates.length; i < ii - 1; ++i) {
	        length += getDistance(coordinates[i], coordinates[i + 1], radius);
	    }
	    return length;
	}
	/**
	 * Get the spherical length of a geometry.  This length is the sum of the
	 * great circle distances between coordinates.  For polygons, the length is
	 * the sum of all rings.  For points, the length is zero.  For multi-part
	 * geometries, the length is the sum of the length of each part.
	 * @param {import("./geom/Geometry.js").default} geometry A geometry.
	 * @param {SphereMetricOptions=} opt_options Options for the
	 * length calculation.  By default, geometries are assumed to be in 'EPSG:3857'.
	 * You can change this by providing a `projection` option.
	 * @return {number} The spherical length (in meters).
	 * @api
	 */
	function getLength(geometry, opt_options) {
	    var options = opt_options || {};
	    var radius = options.radius || DEFAULT_RADIUS;
	    var projection = options.projection || 'EPSG:3857';
	    var type = geometry.getType();
	    if (type !== _GeometryType2.default.GEOMETRY_COLLECTION) {
	        geometry = geometry.clone().transform(projection, 'EPSG:4326');
	    }
	    var length = 0;
	    var coordinates, coords, i, ii, j, jj;
	    switch (type) {
	        case _GeometryType2.default.POINT:
	        case _GeometryType2.default.MULTI_POINT:
	            {
	                break;
	            }
	        case _GeometryType2.default.LINE_STRING:
	        case _GeometryType2.default.LINEAR_RING:
	            {
	                coordinates = /** @type {import("./geom/SimpleGeometry.js").default} */geometry.getCoordinates();
	                length = getLengthInternal(coordinates, radius);
	                break;
	            }
	        case _GeometryType2.default.MULTI_LINE_STRING:
	        case _GeometryType2.default.POLYGON:
	            {
	                coordinates = /** @type {import("./geom/SimpleGeometry.js").default} */geometry.getCoordinates();
	                for (i = 0, ii = coordinates.length; i < ii; ++i) {
	                    length += getLengthInternal(coordinates[i], radius);
	                }
	                break;
	            }
	        case _GeometryType2.default.MULTI_POLYGON:
	            {
	                coordinates = /** @type {import("./geom/SimpleGeometry.js").default} */geometry.getCoordinates();
	                for (i = 0, ii = coordinates.length; i < ii; ++i) {
	                    coords = coordinates[i];
	                    for (j = 0, jj = coords.length; j < jj; ++j) {
	                        length += getLengthInternal(coords[j], radius);
	                    }
	                }
	                break;
	            }
	        case _GeometryType2.default.GEOMETRY_COLLECTION:
	            {
	                var geometries = /** @type {import("./geom/GeometryCollection.js").default} */geometry.getGeometries();
	                for (i = 0, ii = geometries.length; i < ii; ++i) {
	                    length += getLength(geometries[i], opt_options);
	                }
	                break;
	            }
	        default:
	            {
	                throw new Error('Unsupported geometry type: ' + type);
	            }
	    }
	    return length;
	}
	/**
	 * Returns the spherical area for a list of coordinates.
	 *
	 * [Reference](https://trs-new.jpl.nasa.gov/handle/2014/40409)
	 * Robert. G. Chamberlain and William H. Duquette, "Some Algorithms for
	 * Polygons on a Sphere", JPL Publication 07-03, Jet Propulsion
	 * Laboratory, Pasadena, CA, June 2007
	 *
	 * @param {Array<import("./coordinate.js").Coordinate>} coordinates List of coordinates of a linear
	 * ring. If the ring is oriented clockwise, the area will be positive,
	 * otherwise it will be negative.
	 * @param {number} radius The sphere radius.
	 * @return {number} Area (in square meters).
	 */
	function getAreaInternal(coordinates, radius) {
	    var area = 0;
	    var len = coordinates.length;
	    var x1 = coordinates[len - 1][0];
	    var y1 = coordinates[len - 1][1];
	    for (var i = 0; i < len; i++) {
	        var x2 = coordinates[i][0];
	        var y2 = coordinates[i][1];
	        area += (0, _math.toRadians)(x2 - x1) * (2 + Math.sin((0, _math.toRadians)(y1)) + Math.sin((0, _math.toRadians)(y2)));
	        x1 = x2;
	        y1 = y2;
	    }
	    return area * radius * radius / 2.0;
	}
	/**
	 * Get the spherical area of a geometry.  This is the area (in meters) assuming
	 * that polygon edges are segments of great circles on a sphere.
	 * @param {import("./geom/Geometry.js").default} geometry A geometry.
	 * @param {SphereMetricOptions=} opt_options Options for the area
	 *     calculation.  By default, geometries are assumed to be in 'EPSG:3857'.
	 *     You can change this by providing a `projection` option.
	 * @return {number} The spherical area (in square meters).
	 * @api
	 */
	function getArea(geometry, opt_options) {
	    var options = opt_options || {};
	    var radius = options.radius || DEFAULT_RADIUS;
	    var projection = options.projection || 'EPSG:3857';
	    var type = geometry.getType();
	    if (type !== _GeometryType2.default.GEOMETRY_COLLECTION) {
	        geometry = geometry.clone().transform(projection, 'EPSG:4326');
	    }
	    var area = 0;
	    var coordinates, coords, i, ii, j, jj;
	    switch (type) {
	        case _GeometryType2.default.POINT:
	        case _GeometryType2.default.MULTI_POINT:
	        case _GeometryType2.default.LINE_STRING:
	        case _GeometryType2.default.MULTI_LINE_STRING:
	        case _GeometryType2.default.LINEAR_RING:
	            {
	                break;
	            }
	        case _GeometryType2.default.POLYGON:
	            {
	                coordinates = /** @type {import("./geom/Polygon.js").default} */geometry.getCoordinates();
	                area = Math.abs(getAreaInternal(coordinates[0], radius));
	                for (i = 1, ii = coordinates.length; i < ii; ++i) {
	                    area -= Math.abs(getAreaInternal(coordinates[i], radius));
	                }
	                break;
	            }
	        case _GeometryType2.default.MULTI_POLYGON:
	            {
	                coordinates = /** @type {import("./geom/SimpleGeometry.js").default} */geometry.getCoordinates();
	                for (i = 0, ii = coordinates.length; i < ii; ++i) {
	                    coords = coordinates[i];
	                    area += Math.abs(getAreaInternal(coords[0], radius));
	                    for (j = 1, jj = coords.length; j < jj; ++j) {
	                        area -= Math.abs(getAreaInternal(coords[j], radius));
	                    }
	                }
	                break;
	            }
	        case _GeometryType2.default.GEOMETRY_COLLECTION:
	            {
	                var geometries = /** @type {import("./geom/GeometryCollection.js").default} */geometry.getGeometries();
	                for (i = 0, ii = geometries.length; i < ii; ++i) {
	                    area += getArea(geometries[i], opt_options);
	                }
	                break;
	            }
	        default:
	            {
	                throw new Error('Unsupported geometry type: ' + type);
	            }
	    }
	    return area;
	}
	/**
	 * Returns the coordinate at the given distance and bearing from `c1`.
	 *
	 * @param {import("./coordinate.js").Coordinate} c1 The origin point (`[lon, lat]` in degrees).
	 * @param {number} distance The great-circle distance between the origin
	 *     point and the target point.
	 * @param {number} bearing The bearing (in radians).
	 * @param {number=} opt_radius The sphere radius to use.  Defaults to the Earth's
	 *     mean radius using the WGS84 ellipsoid.
	 * @return {import("./coordinate.js").Coordinate} The target point.
	 */
	function offset(c1, distance, bearing, opt_radius) {
	    var radius = opt_radius || DEFAULT_RADIUS;
	    var lat1 = (0, _math.toRadians)(c1[1]);
	    var lon1 = (0, _math.toRadians)(c1[0]);
	    var dByR = distance / radius;
	    var lat = Math.asin(Math.sin(lat1) * Math.cos(dByR) + Math.cos(lat1) * Math.sin(dByR) * Math.cos(bearing));
	    var lon = lon1 + Math.atan2(Math.sin(bearing) * Math.sin(dByR) * Math.cos(lat1), Math.cos(dByR) - Math.sin(lat1) * Math.sin(lat));
	    return [(0, _math.toDegrees)(lon), (0, _math.toDegrees)(lat)];
	}
	//# sourceMappingURL=sphere.js.map

/***/ }),
/* 299 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	
	var _asserts = __webpack_require__(29);
	
	var _Target = __webpack_require__(101);
	
	var _Target2 = _interopRequireDefault(_Target);
	
	var _EventType = __webpack_require__(10);
	
	var _EventType2 = _interopRequireDefault(_EventType);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	/**
	 * @module ol/structs/LRUCache
	 */
	var __extends = undefined && undefined.__extends || function () {
	    var _extendStatics = function extendStatics(d, b) {
	        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	            d.__proto__ = b;
	        } || function (d, b) {
	            for (var p in b) {
	                if (b.hasOwnProperty(p)) d[p] = b[p];
	            }
	        };
	        return _extendStatics(d, b);
	    };
	    return function (d, b) {
	        _extendStatics(d, b);
	        function __() {
	            this.constructor = d;
	        }
	        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	    };
	}();
	
	/**
	 * @typedef {Object} Entry
	 * @property {string} key_
	 * @property {Object} newer
	 * @property {Object} older
	 * @property {*} value_
	 */
	/**
	 * @classdesc
	 * Implements a Least-Recently-Used cache where the keys do not conflict with
	 * Object's properties (e.g. 'hasOwnProperty' is not allowed as a key). Expiring
	 * items from the cache is the responsibility of the user.
	 *
	 * @fires import("../events/Event.js").default
	 * @template T
	 */
	var LRUCache = /** @class */function (_super) {
	    __extends(LRUCache, _super);
	    /**
	     * @param {number=} opt_highWaterMark High water mark.
	     */
	    function LRUCache(opt_highWaterMark) {
	        var _this = _super.call(this) || this;
	        /**
	         * @type {number}
	         */
	        _this.highWaterMark = opt_highWaterMark !== undefined ? opt_highWaterMark : 2048;
	        /**
	         * @private
	         * @type {number}
	         */
	        _this.count_ = 0;
	        /**
	         * @private
	         * @type {!Object<string, Entry>}
	         */
	        _this.entries_ = {};
	        /**
	         * @private
	         * @type {?Entry}
	         */
	        _this.oldest_ = null;
	        /**
	         * @private
	         * @type {?Entry}
	         */
	        _this.newest_ = null;
	        return _this;
	    }
	    /**
	     * @return {boolean} Can expire cache.
	     */
	    LRUCache.prototype.canExpireCache = function () {
	        return this.getCount() > this.highWaterMark;
	    };
	    /**
	     * FIXME empty description for jsdoc
	     */
	    LRUCache.prototype.clear = function () {
	        this.count_ = 0;
	        this.entries_ = {};
	        this.oldest_ = null;
	        this.newest_ = null;
	        this.dispatchEvent(_EventType2.default.CLEAR);
	    };
	    /**
	     * @param {string} key Key.
	     * @return {boolean} Contains key.
	     */
	    LRUCache.prototype.containsKey = function (key) {
	        return this.entries_.hasOwnProperty(key);
	    };
	    /**
	     * @param {function(T, string, LRUCache<T>): ?} f The function
	     *     to call for every entry from the oldest to the newer. This function takes
	     *     3 arguments (the entry value, the entry key and the LRUCache object).
	     *     The return value is ignored.
	     */
	    LRUCache.prototype.forEach = function (f) {
	        var entry = this.oldest_;
	        while (entry) {
	            f(entry.value_, entry.key_, this);
	            entry = entry.newer;
	        }
	    };
	    /**
	     * @param {string} key Key.
	     * @param {*=} opt_options Options (reserverd for subclasses).
	     * @return {T} Value.
	     */
	    LRUCache.prototype.get = function (key, opt_options) {
	        var entry = this.entries_[key];
	        (0, _asserts.assert)(entry !== undefined, 15); // Tried to get a value for a key that does not exist in the cache
	        if (entry === this.newest_) {
	            return entry.value_;
	        } else if (entry === this.oldest_) {
	            this.oldest_ = /** @type {Entry} */this.oldest_.newer;
	            this.oldest_.older = null;
	        } else {
	            entry.newer.older = entry.older;
	            entry.older.newer = entry.newer;
	        }
	        entry.newer = null;
	        entry.older = this.newest_;
	        this.newest_.newer = entry;
	        this.newest_ = entry;
	        return entry.value_;
	    };
	    /**
	     * Remove an entry from the cache.
	     * @param {string} key The entry key.
	     * @return {T} The removed entry.
	     */
	    LRUCache.prototype.remove = function (key) {
	        var entry = this.entries_[key];
	        (0, _asserts.assert)(entry !== undefined, 15); // Tried to get a value for a key that does not exist in the cache
	        if (entry === this.newest_) {
	            this.newest_ = /** @type {Entry} */entry.older;
	            if (this.newest_) {
	                this.newest_.newer = null;
	            }
	        } else if (entry === this.oldest_) {
	            this.oldest_ = /** @type {Entry} */entry.newer;
	            if (this.oldest_) {
	                this.oldest_.older = null;
	            }
	        } else {
	            entry.newer.older = entry.older;
	            entry.older.newer = entry.newer;
	        }
	        delete this.entries_[key];
	        --this.count_;
	        return entry.value_;
	    };
	    /**
	     * @return {number} Count.
	     */
	    LRUCache.prototype.getCount = function () {
	        return this.count_;
	    };
	    /**
	     * @return {Array<string>} Keys.
	     */
	    LRUCache.prototype.getKeys = function () {
	        var keys = new Array(this.count_);
	        var i = 0;
	        var entry;
	        for (entry = this.newest_; entry; entry = entry.older) {
	            keys[i++] = entry.key_;
	        }
	        return keys;
	    };
	    /**
	     * @return {Array<T>} Values.
	     */
	    LRUCache.prototype.getValues = function () {
	        var values = new Array(this.count_);
	        var i = 0;
	        var entry;
	        for (entry = this.newest_; entry; entry = entry.older) {
	            values[i++] = entry.value_;
	        }
	        return values;
	    };
	    /**
	     * @return {T} Last value.
	     */
	    LRUCache.prototype.peekLast = function () {
	        return this.oldest_.value_;
	    };
	    /**
	     * @return {string} Last key.
	     */
	    LRUCache.prototype.peekLastKey = function () {
	        return this.oldest_.key_;
	    };
	    /**
	     * Get the key of the newest item in the cache.  Throws if the cache is empty.
	     * @return {string} The newest key.
	     */
	    LRUCache.prototype.peekFirstKey = function () {
	        return this.newest_.key_;
	    };
	    /**
	     * @return {T} value Value.
	     */
	    LRUCache.prototype.pop = function () {
	        var entry = this.oldest_;
	        delete this.entries_[entry.key_];
	        if (entry.newer) {
	            entry.newer.older = null;
	        }
	        this.oldest_ = /** @type {Entry} */entry.newer;
	        if (!this.oldest_) {
	            this.newest_ = null;
	        }
	        --this.count_;
	        return entry.value_;
	    };
	    /**
	     * @param {string} key Key.
	     * @param {T} value Value.
	     */
	    LRUCache.prototype.replace = function (key, value) {
	        this.get(key); // update `newest_`
	        this.entries_[key].value_ = value;
	    };
	    /**
	     * @param {string} key Key.
	     * @param {T} value Value.
	     */
	    LRUCache.prototype.set = function (key, value) {
	        (0, _asserts.assert)(!(key in this.entries_), 16); // Tried to set a value for a key that is used already
	        var entry = {
	            key_: key,
	            newer: null,
	            older: this.newest_,
	            value_: value
	        };
	        if (!this.newest_) {
	            this.oldest_ = entry;
	        } else {
	            this.newest_.newer = entry;
	        }
	        this.newest_ = entry;
	        this.entries_[key] = entry;
	        ++this.count_;
	    };
	    /**
	     * Set a maximum number of entries for the cache.
	     * @param {number} size Cache size.
	     * @api
	     */
	    LRUCache.prototype.setSize = function (size) {
	        this.highWaterMark = size;
	    };
	    return LRUCache;
	}(_Target2.default);
	exports.default = LRUCache;
	//# sourceMappingURL=LRUCache.js.map

/***/ }),
/* 300 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	exports.DROP = undefined;
	
	var _asserts = __webpack_require__(29);
	
	var _obj = __webpack_require__(23);
	
	/**
	 * @type {number}
	 */
	/**
	 * @module ol/structs/PriorityQueue
	 */
	var DROP = exports.DROP = Infinity;
	/**
	 * @classdesc
	 * Priority queue.
	 *
	 * The implementation is inspired from the Closure Library's Heap class and
	 * Python's heapq module.
	 *
	 * See http://closure-library.googlecode.com/svn/docs/closure_goog_structs_heap.js.source.html
	 * and http://hg.python.org/cpython/file/2.7/Lib/heapq.py.
	 *
	 * @template T
	 */
	var PriorityQueue = /** @class */function () {
	    /**
	     * @param {function(T): number} priorityFunction Priority function.
	     * @param {function(T): string} keyFunction Key function.
	     */
	    function PriorityQueue(priorityFunction, keyFunction) {
	        /**
	         * @type {function(T): number}
	         * @private
	         */
	        this.priorityFunction_ = priorityFunction;
	        /**
	         * @type {function(T): string}
	         * @private
	         */
	        this.keyFunction_ = keyFunction;
	        /**
	         * @type {Array<T>}
	         * @private
	         */
	        this.elements_ = [];
	        /**
	         * @type {Array<number>}
	         * @private
	         */
	        this.priorities_ = [];
	        /**
	         * @type {!Object<string, boolean>}
	         * @private
	         */
	        this.queuedElements_ = {};
	    }
	    /**
	     * FIXME empty description for jsdoc
	     */
	    PriorityQueue.prototype.clear = function () {
	        this.elements_.length = 0;
	        this.priorities_.length = 0;
	        (0, _obj.clear)(this.queuedElements_);
	    };
	    /**
	     * Remove and return the highest-priority element. O(log N).
	     * @return {T} Element.
	     */
	    PriorityQueue.prototype.dequeue = function () {
	        var elements = this.elements_;
	        var priorities = this.priorities_;
	        var element = elements[0];
	        if (elements.length == 1) {
	            elements.length = 0;
	            priorities.length = 0;
	        } else {
	            elements[0] = elements.pop();
	            priorities[0] = priorities.pop();
	            this.siftUp_(0);
	        }
	        var elementKey = this.keyFunction_(element);
	        delete this.queuedElements_[elementKey];
	        return element;
	    };
	    /**
	     * Enqueue an element. O(log N).
	     * @param {T} element Element.
	     * @return {boolean} The element was added to the queue.
	     */
	    PriorityQueue.prototype.enqueue = function (element) {
	        (0, _asserts.assert)(!(this.keyFunction_(element) in this.queuedElements_), 31); // Tried to enqueue an `element` that was already added to the queue
	        var priority = this.priorityFunction_(element);
	        if (priority != DROP) {
	            this.elements_.push(element);
	            this.priorities_.push(priority);
	            this.queuedElements_[this.keyFunction_(element)] = true;
	            this.siftDown_(0, this.elements_.length - 1);
	            return true;
	        }
	        return false;
	    };
	    /**
	     * @return {number} Count.
	     */
	    PriorityQueue.prototype.getCount = function () {
	        return this.elements_.length;
	    };
	    /**
	     * Gets the index of the left child of the node at the given index.
	     * @param {number} index The index of the node to get the left child for.
	     * @return {number} The index of the left child.
	     * @private
	     */
	    PriorityQueue.prototype.getLeftChildIndex_ = function (index) {
	        return index * 2 + 1;
	    };
	    /**
	     * Gets the index of the right child of the node at the given index.
	     * @param {number} index The index of the node to get the right child for.
	     * @return {number} The index of the right child.
	     * @private
	     */
	    PriorityQueue.prototype.getRightChildIndex_ = function (index) {
	        return index * 2 + 2;
	    };
	    /**
	     * Gets the index of the parent of the node at the given index.
	     * @param {number} index The index of the node to get the parent for.
	     * @return {number} The index of the parent.
	     * @private
	     */
	    PriorityQueue.prototype.getParentIndex_ = function (index) {
	        return index - 1 >> 1;
	    };
	    /**
	     * Make this a heap. O(N).
	     * @private
	     */
	    PriorityQueue.prototype.heapify_ = function () {
	        var i;
	        for (i = (this.elements_.length >> 1) - 1; i >= 0; i--) {
	            this.siftUp_(i);
	        }
	    };
	    /**
	     * @return {boolean} Is empty.
	     */
	    PriorityQueue.prototype.isEmpty = function () {
	        return this.elements_.length === 0;
	    };
	    /**
	     * @param {string} key Key.
	     * @return {boolean} Is key queued.
	     */
	    PriorityQueue.prototype.isKeyQueued = function (key) {
	        return key in this.queuedElements_;
	    };
	    /**
	     * @param {T} element Element.
	     * @return {boolean} Is queued.
	     */
	    PriorityQueue.prototype.isQueued = function (element) {
	        return this.isKeyQueued(this.keyFunction_(element));
	    };
	    /**
	     * @param {number} index The index of the node to move down.
	     * @private
	     */
	    PriorityQueue.prototype.siftUp_ = function (index) {
	        var elements = this.elements_;
	        var priorities = this.priorities_;
	        var count = elements.length;
	        var element = elements[index];
	        var priority = priorities[index];
	        var startIndex = index;
	        while (index < count >> 1) {
	            var lIndex = this.getLeftChildIndex_(index);
	            var rIndex = this.getRightChildIndex_(index);
	            var smallerChildIndex = rIndex < count && priorities[rIndex] < priorities[lIndex] ? rIndex : lIndex;
	            elements[index] = elements[smallerChildIndex];
	            priorities[index] = priorities[smallerChildIndex];
	            index = smallerChildIndex;
	        }
	        elements[index] = element;
	        priorities[index] = priority;
	        this.siftDown_(startIndex, index);
	    };
	    /**
	     * @param {number} startIndex The index of the root.
	     * @param {number} index The index of the node to move up.
	     * @private
	     */
	    PriorityQueue.prototype.siftDown_ = function (startIndex, index) {
	        var elements = this.elements_;
	        var priorities = this.priorities_;
	        var element = elements[index];
	        var priority = priorities[index];
	        while (index > startIndex) {
	            var parentIndex = this.getParentIndex_(index);
	            if (priorities[parentIndex] > priority) {
	                elements[index] = elements[parentIndex];
	                priorities[index] = priorities[parentIndex];
	                index = parentIndex;
	            } else {
	                break;
	            }
	        }
	        elements[index] = element;
	        priorities[index] = priority;
	    };
	    /**
	     * FIXME empty description for jsdoc
	     */
	    PriorityQueue.prototype.reprioritize = function () {
	        var priorityFunction = this.priorityFunction_;
	        var elements = this.elements_;
	        var priorities = this.priorities_;
	        var index = 0;
	        var n = elements.length;
	        var element, i, priority;
	        for (i = 0; i < n; ++i) {
	            element = elements[i];
	            priority = priorityFunction(element);
	            if (priority == DROP) {
	                delete this.queuedElements_[this.keyFunction_(element)];
	            } else {
	                priorities[index] = priority;
	                elements[index++] = element;
	            }
	        }
	        elements.length = index;
	        priorities.length = index;
	        this.heapify_();
	    };
	    return PriorityQueue;
	}();
	exports.default = PriorityQueue;
	//# sourceMappingURL=PriorityQueue.js.map

/***/ }),
/* 301 */
/***/ (function(module, exports) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	/**
	 * @module ol/style/IconAnchorUnits
	 */
	/**
	 * Icon anchor units. One of 'fraction', 'pixels'.
	 * @enum {string}
	 */
	exports.default = {
	  FRACTION: 'fraction',
	  PIXELS: 'pixels'
	};
	//# sourceMappingURL=IconAnchorUnits.js.map

/***/ }),
/* 302 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	exports.get = get;
	
	var _dom = __webpack_require__(34);
	
	var _Target = __webpack_require__(101);
	
	var _Target2 = _interopRequireDefault(_Target);
	
	var _EventType = __webpack_require__(10);
	
	var _EventType2 = _interopRequireDefault(_EventType);
	
	var _ImageState = __webpack_require__(100);
	
	var _ImageState2 = _interopRequireDefault(_ImageState);
	
	var _IconImageCache = __webpack_require__(303);
	
	var _Image = __webpack_require__(249);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	/**
	 * @module ol/style/IconImage
	 */
	var __extends = undefined && undefined.__extends || function () {
	    var _extendStatics = function extendStatics(d, b) {
	        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	            d.__proto__ = b;
	        } || function (d, b) {
	            for (var p in b) {
	                if (b.hasOwnProperty(p)) d[p] = b[p];
	            }
	        };
	        return _extendStatics(d, b);
	    };
	    return function (d, b) {
	        _extendStatics(d, b);
	        function __() {
	            this.constructor = d;
	        }
	        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	    };
	}();
	
	var IconImage = /** @class */function (_super) {
	    __extends(IconImage, _super);
	    /**
	     * @param {HTMLImageElement|HTMLCanvasElement} image Image.
	     * @param {string|undefined} src Src.
	     * @param {import("../size.js").Size} size Size.
	     * @param {?string} crossOrigin Cross origin.
	     * @param {import("../ImageState.js").default} imageState Image state.
	     * @param {import("../color.js").Color} color Color.
	     */
	    function IconImage(image, src, size, crossOrigin, imageState, color) {
	        var _this = _super.call(this) || this;
	        /**
	         * @private
	         * @type {HTMLImageElement|HTMLCanvasElement}
	         */
	        _this.hitDetectionImage_ = null;
	        /**
	         * @private
	         * @type {HTMLImageElement|HTMLCanvasElement}
	         */
	        _this.image_ = !image ? new Image() : image;
	        if (crossOrigin !== null) {
	            /** @type {HTMLImageElement} */_this.image_.crossOrigin = crossOrigin;
	        }
	        /**
	         * @private
	         * @type {HTMLCanvasElement}
	         */
	        _this.canvas_ = color ? document.createElement('canvas') : null;
	        /**
	         * @private
	         * @type {import("../color.js").Color}
	         */
	        _this.color_ = color;
	        /**
	         * @private
	         * @type {?function():void}
	         */
	        _this.unlisten_ = null;
	        /**
	         * @private
	         * @type {import("../ImageState.js").default}
	         */
	        _this.imageState_ = imageState;
	        /**
	         * @private
	         * @type {import("../size.js").Size}
	         */
	        _this.size_ = size;
	        /**
	         * @private
	         * @type {string|undefined}
	         */
	        _this.src_ = src;
	        /**
	         * @private
	         * @type {boolean|undefined}
	         */
	        _this.tainted_;
	        return _this;
	    }
	    /**
	     * @private
	     * @return {boolean} The image canvas is tainted.
	     */
	    IconImage.prototype.isTainted_ = function () {
	        if (this.tainted_ === undefined && this.imageState_ === _ImageState2.default.LOADED) {
	            this.tainted_ = false;
	            var context = (0, _dom.createCanvasContext2D)(1, 1);
	            try {
	                context.drawImage(this.image_, 0, 0);
	                context.getImageData(0, 0, 1, 1);
	            } catch (e) {
	                this.tainted_ = true;
	            }
	        }
	        return this.tainted_ === true;
	    };
	    /**
	     * @private
	     */
	    IconImage.prototype.dispatchChangeEvent_ = function () {
	        this.dispatchEvent(_EventType2.default.CHANGE);
	    };
	    /**
	     * @private
	     */
	    IconImage.prototype.handleImageError_ = function () {
	        this.imageState_ = _ImageState2.default.ERROR;
	        this.unlistenImage_();
	        this.dispatchChangeEvent_();
	    };
	    /**
	     * @private
	     */
	    IconImage.prototype.handleImageLoad_ = function () {
	        this.imageState_ = _ImageState2.default.LOADED;
	        if (this.size_) {
	            this.image_.width = this.size_[0];
	            this.image_.height = this.size_[1];
	        }
	        this.size_ = [this.image_.width, this.image_.height];
	        this.unlistenImage_();
	        this.replaceColor_();
	        this.dispatchChangeEvent_();
	    };
	    /**
	     * @param {number} pixelRatio Pixel ratio.
	     * @return {HTMLImageElement|HTMLCanvasElement} Image or Canvas element.
	     */
	    IconImage.prototype.getImage = function (pixelRatio) {
	        return this.canvas_ ? this.canvas_ : this.image_;
	    };
	    /**
	     * @return {import("../ImageState.js").default} Image state.
	     */
	    IconImage.prototype.getImageState = function () {
	        return this.imageState_;
	    };
	    /**
	     * @param {number} pixelRatio Pixel ratio.
	     * @return {HTMLImageElement|HTMLCanvasElement} Image element.
	     */
	    IconImage.prototype.getHitDetectionImage = function (pixelRatio) {
	        if (!this.hitDetectionImage_) {
	            if (this.isTainted_()) {
	                var width = this.size_[0];
	                var height = this.size_[1];
	                var context = (0, _dom.createCanvasContext2D)(width, height);
	                context.fillRect(0, 0, width, height);
	                this.hitDetectionImage_ = context.canvas;
	            } else {
	                this.hitDetectionImage_ = this.image_;
	            }
	        }
	        return this.hitDetectionImage_;
	    };
	    /**
	     * @return {import("../size.js").Size} Image size.
	     */
	    IconImage.prototype.getSize = function () {
	        return this.size_;
	    };
	    /**
	     * @return {string|undefined} Image src.
	     */
	    IconImage.prototype.getSrc = function () {
	        return this.src_;
	    };
	    /**
	     * Load not yet loaded URI.
	     */
	    IconImage.prototype.load = function () {
	        if (this.imageState_ == _ImageState2.default.IDLE) {
	            this.imageState_ = _ImageState2.default.LOADING;
	            try {
	                /** @type {HTMLImageElement} */this.image_.src = this.src_;
	            } catch (e) {
	                this.handleImageError_();
	            }
	            this.unlisten_ = (0, _Image.listenImage)(this.image_, this.handleImageLoad_.bind(this), this.handleImageError_.bind(this));
	        }
	    };
	    /**
	     * @private
	     */
	    IconImage.prototype.replaceColor_ = function () {
	        if (!this.color_ || this.isTainted_()) {
	            return;
	        }
	        this.canvas_.width = this.image_.width;
	        this.canvas_.height = this.image_.height;
	        var ctx = this.canvas_.getContext('2d');
	        ctx.drawImage(this.image_, 0, 0);
	        var imgData = ctx.getImageData(0, 0, this.image_.width, this.image_.height);
	        var data = imgData.data;
	        var r = this.color_[0] / 255.0;
	        var g = this.color_[1] / 255.0;
	        var b = this.color_[2] / 255.0;
	        for (var i = 0, ii = data.length; i < ii; i += 4) {
	            data[i] *= r;
	            data[i + 1] *= g;
	            data[i + 2] *= b;
	        }
	        ctx.putImageData(imgData, 0, 0);
	    };
	    /**
	     * Discards event handlers which listen for load completion or errors.
	     *
	     * @private
	     */
	    IconImage.prototype.unlistenImage_ = function () {
	        if (this.unlisten_) {
	            this.unlisten_();
	            this.unlisten_ = null;
	        }
	    };
	    return IconImage;
	}(_Target2.default);
	/**
	 * @param {HTMLImageElement|HTMLCanvasElement} image Image.
	 * @param {string} src Src.
	 * @param {import("../size.js").Size} size Size.
	 * @param {?string} crossOrigin Cross origin.
	 * @param {import("../ImageState.js").default} imageState Image state.
	 * @param {import("../color.js").Color} color Color.
	 * @return {IconImage} Icon image.
	 */
	function get(image, src, size, crossOrigin, imageState, color) {
	    var iconImage = _IconImageCache.shared.get(src, crossOrigin, color);
	    if (!iconImage) {
	        iconImage = new IconImage(image, src, size, crossOrigin, imageState, color);
	        _IconImageCache.shared.set(src, crossOrigin, color, iconImage);
	    }
	    return iconImage;
	}
	exports.default = IconImage;
	//# sourceMappingURL=IconImage.js.map

/***/ }),
/* 303 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	exports.shared = undefined;
	
	var _color = __webpack_require__(143);
	
	/**
	 * @classdesc
	 * Singleton class. Available through {@link module:ol/style/IconImageCache~shared}.
	 */
	var IconImageCache = /** @class */function () {
	    function IconImageCache() {
	        /**
	        * @type {!Object<string, import("./IconImage.js").default>}
	        * @private
	        */
	        this.cache_ = {};
	        /**
	        * @type {number}
	        * @private
	        */
	        this.cacheSize_ = 0;
	        /**
	        * @type {number}
	        * @private
	        */
	        this.maxCacheSize_ = 32;
	    }
	    /**
	    * FIXME empty description for jsdoc
	    */
	    IconImageCache.prototype.clear = function () {
	        this.cache_ = {};
	        this.cacheSize_ = 0;
	    };
	    /**
	     * @return {boolean} Can expire cache.
	     */
	    IconImageCache.prototype.canExpireCache = function () {
	        return this.cacheSize_ > this.maxCacheSize_;
	    };
	    /**
	    * FIXME empty description for jsdoc
	    */
	    IconImageCache.prototype.expire = function () {
	        if (this.canExpireCache()) {
	            var i = 0;
	            for (var key in this.cache_) {
	                var iconImage = this.cache_[key];
	                if ((i++ & 3) === 0 && !iconImage.hasListener()) {
	                    delete this.cache_[key];
	                    --this.cacheSize_;
	                }
	            }
	        }
	    };
	    /**
	    * @param {string} src Src.
	    * @param {?string} crossOrigin Cross origin.
	    * @param {import("../color.js").Color} color Color.
	    * @return {import("./IconImage.js").default} Icon image.
	    */
	    IconImageCache.prototype.get = function (src, crossOrigin, color) {
	        var key = getKey(src, crossOrigin, color);
	        return key in this.cache_ ? this.cache_[key] : null;
	    };
	    /**
	    * @param {string} src Src.
	    * @param {?string} crossOrigin Cross origin.
	    * @param {import("../color.js").Color} color Color.
	    * @param {import("./IconImage.js").default} iconImage Icon image.
	    */
	    IconImageCache.prototype.set = function (src, crossOrigin, color, iconImage) {
	        var key = getKey(src, crossOrigin, color);
	        this.cache_[key] = iconImage;
	        ++this.cacheSize_;
	    };
	    /**
	    * Set the cache size of the icon cache. Default is `32`. Change this value when
	    * your map uses more than 32 different icon images and you are not caching icon
	    * styles on the application level.
	    * @param {number} maxCacheSize Cache max size.
	    * @api
	    */
	    IconImageCache.prototype.setSize = function (maxCacheSize) {
	        this.maxCacheSize_ = maxCacheSize;
	        this.expire();
	    };
	    return IconImageCache;
	}();
	/**
	 * @param {string} src Src.
	 * @param {?string} crossOrigin Cross origin.
	 * @param {import("../color.js").Color} color Color.
	 * @return {string} Cache key.
	 */
	/**
	 * @module ol/style/IconImageCache
	 */
	function getKey(src, crossOrigin, color) {
	    var colorString = color ? (0, _color.asString)(color) : 'null';
	    return crossOrigin + ':' + src + ':' + colorString;
	}
	exports.default = IconImageCache;
	/**
	 * The {@link module:ol/style/IconImageCache~IconImageCache} for
	 * {@link module:ol/style/Icon~Icon} images.
	 * @api
	 */
	
	var shared = exports.shared = new IconImageCache();
	//# sourceMappingURL=IconImageCache.js.map

/***/ }),
/* 304 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	
	var _color = __webpack_require__(143);
	
	var _colorlike = __webpack_require__(144);
	
	var _dom = __webpack_require__(34);
	
	var _ImageState = __webpack_require__(100);
	
	var _ImageState2 = _interopRequireDefault(_ImageState);
	
	var _canvas = __webpack_require__(74);
	
	var _Image = __webpack_require__(183);
	
	var _Image2 = _interopRequireDefault(_Image);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	/**
	 * @module ol/style/RegularShape
	 */
	var __extends = undefined && undefined.__extends || function () {
	    var _extendStatics = function extendStatics(d, b) {
	        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	            d.__proto__ = b;
	        } || function (d, b) {
	            for (var p in b) {
	                if (b.hasOwnProperty(p)) d[p] = b[p];
	            }
	        };
	        return _extendStatics(d, b);
	    };
	    return function (d, b) {
	        _extendStatics(d, b);
	        function __() {
	            this.constructor = d;
	        }
	        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	    };
	}();
	
	/**
	 * Specify radius for regular polygons, or radius1 and radius2 for stars.
	 * @typedef {Object} Options
	 * @property {import("./Fill.js").default} [fill] Fill style.
	 * @property {number} points Number of points for stars and regular polygons. In case of a polygon, the number of points
	 * is the number of sides.
	 * @property {number} [radius] Radius of a regular polygon.
	 * @property {number} [radius1] Outer radius of a star.
	 * @property {number} [radius2] Inner radius of a star.
	 * @property {number} [angle=0] Shape's angle in radians. A value of 0 will have one of the shape's point facing up.
	 * @property {import("./Stroke.js").default} [stroke] Stroke style.
	 * @property {number} [rotation=0] Rotation in radians (positive rotation clockwise).
	 * @property {boolean} [rotateWithView=false] Whether to rotate the shape with the view.
	 */
	/**
	 * @typedef {Object} RenderOptions
	 * @property {import("../colorlike.js").ColorLike} [strokeStyle]
	 * @property {number} strokeWidth
	 * @property {number} size
	 * @property {CanvasLineCap} lineCap
	 * @property {Array<number>} lineDash
	 * @property {number} lineDashOffset
	 * @property {CanvasLineJoin} lineJoin
	 * @property {number} miterLimit
	 */
	/**
	 * @classdesc
	 * Set regular shape style for vector features. The resulting shape will be
	 * a regular polygon when `radius` is provided, or a star when `radius1` and
	 * `radius2` are provided.
	 * @api
	 */
	var RegularShape = /** @class */function (_super) {
	    __extends(RegularShape, _super);
	    /**
	     * @param {Options} options Options.
	     */
	    function RegularShape(options) {
	        var _this = this;
	        /**
	         * @type {boolean}
	         */
	        var rotateWithView = options.rotateWithView !== undefined ? options.rotateWithView : false;
	        _this = _super.call(this, {
	            opacity: 1,
	            rotateWithView: rotateWithView,
	            rotation: options.rotation !== undefined ? options.rotation : 0,
	            scale: 1
	        }) || this;
	        /**
	         * @private
	         * @type {HTMLCanvasElement}
	         */
	        _this.canvas_ = null;
	        /**
	         * @private
	         * @type {HTMLCanvasElement}
	         */
	        _this.hitDetectionCanvas_ = null;
	        /**
	         * @private
	         * @type {import("./Fill.js").default}
	         */
	        _this.fill_ = options.fill !== undefined ? options.fill : null;
	        /**
	         * @private
	         * @type {Array<number>}
	         */
	        _this.origin_ = [0, 0];
	        /**
	         * @private
	         * @type {number}
	         */
	        _this.points_ = options.points;
	        /**
	         * @protected
	         * @type {number}
	         */
	        _this.radius_ = options.radius !== undefined ? options.radius : options.radius1;
	        /**
	         * @private
	         * @type {number|undefined}
	         */
	        _this.radius2_ = options.radius2;
	        /**
	         * @private
	         * @type {number}
	         */
	        _this.angle_ = options.angle !== undefined ? options.angle : 0;
	        /**
	         * @private
	         * @type {import("./Stroke.js").default}
	         */
	        _this.stroke_ = options.stroke !== undefined ? options.stroke : null;
	        /**
	         * @private
	         * @type {Array<number>}
	         */
	        _this.anchor_ = null;
	        /**
	         * @private
	         * @type {import("../size.js").Size}
	         */
	        _this.size_ = null;
	        /**
	         * @private
	         * @type {import("../size.js").Size}
	         */
	        _this.imageSize_ = null;
	        /**
	         * @private
	         * @type {import("../size.js").Size}
	         */
	        _this.hitDetectionImageSize_ = null;
	        _this.render();
	        return _this;
	    }
	    /**
	     * Clones the style.
	     * @return {RegularShape} The cloned style.
	     * @api
	     */
	    RegularShape.prototype.clone = function () {
	        var style = new RegularShape({
	            fill: this.getFill() ? this.getFill().clone() : undefined,
	            points: this.getPoints(),
	            radius: this.getRadius(),
	            radius2: this.getRadius2(),
	            angle: this.getAngle(),
	            stroke: this.getStroke() ? this.getStroke().clone() : undefined,
	            rotation: this.getRotation(),
	            rotateWithView: this.getRotateWithView()
	        });
	        style.setOpacity(this.getOpacity());
	        style.setScale(this.getScale());
	        return style;
	    };
	    /**
	     * @inheritDoc
	     * @api
	     */
	    RegularShape.prototype.getAnchor = function () {
	        return this.anchor_;
	    };
	    /**
	     * Get the angle used in generating the shape.
	     * @return {number} Shape's rotation in radians.
	     * @api
	     */
	    RegularShape.prototype.getAngle = function () {
	        return this.angle_;
	    };
	    /**
	     * Get the fill style for the shape.
	     * @return {import("./Fill.js").default} Fill style.
	     * @api
	     */
	    RegularShape.prototype.getFill = function () {
	        return this.fill_;
	    };
	    /**
	     * @inheritDoc
	     */
	    RegularShape.prototype.getHitDetectionImage = function (pixelRatio) {
	        return this.hitDetectionCanvas_;
	    };
	    /**
	     * @inheritDoc
	     * @api
	     */
	    RegularShape.prototype.getImage = function (pixelRatio) {
	        return this.canvas_;
	    };
	    /**
	     * @inheritDoc
	     */
	    RegularShape.prototype.getImageSize = function () {
	        return this.imageSize_;
	    };
	    /**
	     * @inheritDoc
	     */
	    RegularShape.prototype.getHitDetectionImageSize = function () {
	        return this.hitDetectionImageSize_;
	    };
	    /**
	     * @inheritDoc
	     */
	    RegularShape.prototype.getImageState = function () {
	        return _ImageState2.default.LOADED;
	    };
	    /**
	     * @inheritDoc
	     * @api
	     */
	    RegularShape.prototype.getOrigin = function () {
	        return this.origin_;
	    };
	    /**
	     * Get the number of points for generating the shape.
	     * @return {number} Number of points for stars and regular polygons.
	     * @api
	     */
	    RegularShape.prototype.getPoints = function () {
	        return this.points_;
	    };
	    /**
	     * Get the (primary) radius for the shape.
	     * @return {number} Radius.
	     * @api
	     */
	    RegularShape.prototype.getRadius = function () {
	        return this.radius_;
	    };
	    /**
	     * Get the secondary radius for the shape.
	     * @return {number|undefined} Radius2.
	     * @api
	     */
	    RegularShape.prototype.getRadius2 = function () {
	        return this.radius2_;
	    };
	    /**
	     * @inheritDoc
	     * @api
	     */
	    RegularShape.prototype.getSize = function () {
	        return this.size_;
	    };
	    /**
	     * Get the stroke style for the shape.
	     * @return {import("./Stroke.js").default} Stroke style.
	     * @api
	     */
	    RegularShape.prototype.getStroke = function () {
	        return this.stroke_;
	    };
	    /**
	     * @inheritDoc
	     */
	    RegularShape.prototype.listenImageChange = function (listener) {};
	    /**
	     * @inheritDoc
	     */
	    RegularShape.prototype.load = function () {};
	    /**
	     * @inheritDoc
	     */
	    RegularShape.prototype.unlistenImageChange = function (listener) {};
	    /**
	     * @protected
	     */
	    RegularShape.prototype.render = function () {
	        var lineCap = _canvas.defaultLineCap;
	        var lineJoin = _canvas.defaultLineJoin;
	        var miterLimit = 0;
	        var lineDash = null;
	        var lineDashOffset = 0;
	        var strokeStyle;
	        var strokeWidth = 0;
	        if (this.stroke_) {
	            strokeStyle = this.stroke_.getColor();
	            if (strokeStyle === null) {
	                strokeStyle = _canvas.defaultStrokeStyle;
	            }
	            strokeStyle = (0, _colorlike.asColorLike)(strokeStyle);
	            strokeWidth = this.stroke_.getWidth();
	            if (strokeWidth === undefined) {
	                strokeWidth = _canvas.defaultLineWidth;
	            }
	            lineDash = this.stroke_.getLineDash();
	            lineDashOffset = this.stroke_.getLineDashOffset();
	            lineJoin = this.stroke_.getLineJoin();
	            if (lineJoin === undefined) {
	                lineJoin = _canvas.defaultLineJoin;
	            }
	            lineCap = this.stroke_.getLineCap();
	            if (lineCap === undefined) {
	                lineCap = _canvas.defaultLineCap;
	            }
	            miterLimit = this.stroke_.getMiterLimit();
	            if (miterLimit === undefined) {
	                miterLimit = _canvas.defaultMiterLimit;
	            }
	        }
	        var size = 2 * (this.radius_ + strokeWidth) + 1;
	        var renderOptions = {
	            strokeStyle: strokeStyle,
	            strokeWidth: strokeWidth,
	            size: size,
	            lineCap: lineCap,
	            lineDash: lineDash,
	            lineDashOffset: lineDashOffset,
	            lineJoin: lineJoin,
	            miterLimit: miterLimit
	        };
	        var context = (0, _dom.createCanvasContext2D)(size, size);
	        this.canvas_ = context.canvas;
	        // canvas.width and height are rounded to the closest integer
	        size = this.canvas_.width;
	        var imageSize = size;
	        this.draw_(renderOptions, context, 0, 0);
	        this.createHitDetectionCanvas_(renderOptions);
	        this.anchor_ = [size / 2, size / 2];
	        this.size_ = [size, size];
	        this.imageSize_ = [imageSize, imageSize];
	    };
	    /**
	     * @private
	     * @param {RenderOptions} renderOptions Render options.
	     * @param {CanvasRenderingContext2D} context The rendering context.
	     * @param {number} x The origin for the symbol (x).
	     * @param {number} y The origin for the symbol (y).
	     */
	    RegularShape.prototype.draw_ = function (renderOptions, context, x, y) {
	        var i, angle0, radiusC;
	        // reset transform
	        context.setTransform(1, 0, 0, 1, 0, 0);
	        // then move to (x, y)
	        context.translate(x, y);
	        context.beginPath();
	        var points = this.points_;
	        if (points === Infinity) {
	            context.arc(renderOptions.size / 2, renderOptions.size / 2, this.radius_, 0, 2 * Math.PI, true);
	        } else {
	            var radius2 = this.radius2_ !== undefined ? this.radius2_ : this.radius_;
	            if (radius2 !== this.radius_) {
	                points = 2 * points;
	            }
	            for (i = 0; i <= points; i++) {
	                angle0 = i * 2 * Math.PI / points - Math.PI / 2 + this.angle_;
	                radiusC = i % 2 === 0 ? this.radius_ : radius2;
	                context.lineTo(renderOptions.size / 2 + radiusC * Math.cos(angle0), renderOptions.size / 2 + radiusC * Math.sin(angle0));
	            }
	        }
	        if (this.fill_) {
	            var color = this.fill_.getColor();
	            if (color === null) {
	                color = _canvas.defaultFillStyle;
	            }
	            context.fillStyle = (0, _colorlike.asColorLike)(color);
	            context.fill();
	        }
	        if (this.stroke_) {
	            context.strokeStyle = renderOptions.strokeStyle;
	            context.lineWidth = renderOptions.strokeWidth;
	            if (context.setLineDash && renderOptions.lineDash) {
	                context.setLineDash(renderOptions.lineDash);
	                context.lineDashOffset = renderOptions.lineDashOffset;
	            }
	            context.lineCap = renderOptions.lineCap;
	            context.lineJoin = renderOptions.lineJoin;
	            context.miterLimit = renderOptions.miterLimit;
	            context.stroke();
	        }
	        context.closePath();
	    };
	    /**
	     * @private
	     * @param {RenderOptions} renderOptions Render options.
	     */
	    RegularShape.prototype.createHitDetectionCanvas_ = function (renderOptions) {
	        this.hitDetectionImageSize_ = [renderOptions.size, renderOptions.size];
	        this.hitDetectionCanvas_ = this.canvas_;
	        if (this.fill_) {
	            var color = this.fill_.getColor();
	            // determine if fill is transparent (or pattern or gradient)
	            var opacity = 0;
	            if (typeof color === 'string') {
	                color = (0, _color.asArray)(color);
	            }
	            if (color === null) {
	                opacity = 1;
	            } else if (Array.isArray(color)) {
	                opacity = color.length === 4 ? color[3] : 1;
	            }
	            if (opacity === 0) {
	                // if a transparent fill style is set, create an extra hit-detection image
	                // with a default fill style
	                var context = (0, _dom.createCanvasContext2D)(renderOptions.size, renderOptions.size);
	                this.hitDetectionCanvas_ = context.canvas;
	                this.drawHitDetectionCanvas_(renderOptions, context, 0, 0);
	            }
	        }
	    };
	    /**
	     * @private
	     * @param {RenderOptions} renderOptions Render options.
	     * @param {CanvasRenderingContext2D} context The context.
	     * @param {number} x The origin for the symbol (x).
	     * @param {number} y The origin for the symbol (y).
	     */
	    RegularShape.prototype.drawHitDetectionCanvas_ = function (renderOptions, context, x, y) {
	        // reset transform
	        context.setTransform(1, 0, 0, 1, 0, 0);
	        // then move to (x, y)
	        context.translate(x, y);
	        context.beginPath();
	        var points = this.points_;
	        if (points === Infinity) {
	            context.arc(renderOptions.size / 2, renderOptions.size / 2, this.radius_, 0, 2 * Math.PI, true);
	        } else {
	            var radius2 = this.radius2_ !== undefined ? this.radius2_ : this.radius_;
	            if (radius2 !== this.radius_) {
	                points = 2 * points;
	            }
	            var i = void 0,
	                radiusC = void 0,
	                angle0 = void 0;
	            for (i = 0; i <= points; i++) {
	                angle0 = i * 2 * Math.PI / points - Math.PI / 2 + this.angle_;
	                radiusC = i % 2 === 0 ? this.radius_ : radius2;
	                context.lineTo(renderOptions.size / 2 + radiusC * Math.cos(angle0), renderOptions.size / 2 + radiusC * Math.sin(angle0));
	            }
	        }
	        context.fillStyle = _canvas.defaultFillStyle;
	        context.fill();
	        if (this.stroke_) {
	            context.strokeStyle = renderOptions.strokeStyle;
	            context.lineWidth = renderOptions.strokeWidth;
	            if (renderOptions.lineDash) {
	                context.setLineDash(renderOptions.lineDash);
	                context.lineDashOffset = renderOptions.lineDashOffset;
	            }
	            context.stroke();
	        }
	        context.closePath();
	    };
	    return RegularShape;
	}(_Image2.default);
	exports.default = RegularShape;
	//# sourceMappingURL=RegularShape.js.map

/***/ }),
/* 305 */
/***/ (function(module, exports) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	/**
	 * @module ol/style/TextPlacement
	 */
	/**
	 * Text placement. One of `'point'`, `'line'`. Default is `'point'`. Note that
	 * `'line'` requires the underlying geometry to be a {@link module:ol/geom/LineString~LineString},
	 * {@link module:ol/geom/Polygon~Polygon}, {@link module:ol/geom/MultiLineString~MultiLineString} or
	 * {@link module:ol/geom/MultiPolygon~MultiPolygon}.
	 * @enum {string}
	 */
	exports.default = {
	  POINT: 'point',
	  LINE: 'line'
	};
	//# sourceMappingURL=TextPlacement.js.map

/***/ }),
/* 306 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	exports.createFromCapabilitiesMatrixSet = createFromCapabilitiesMatrixSet;
	
	var _array = __webpack_require__(18);
	
	var _proj = __webpack_require__(16);
	
	var _TileGrid = __webpack_require__(186);
	
	var _TileGrid2 = _interopRequireDefault(_TileGrid);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	/**
	 * @module ol/tilegrid/WMTS
	 */
	var __extends = undefined && undefined.__extends || function () {
	    var _extendStatics = function extendStatics(d, b) {
	        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	            d.__proto__ = b;
	        } || function (d, b) {
	            for (var p in b) {
	                if (b.hasOwnProperty(p)) d[p] = b[p];
	            }
	        };
	        return _extendStatics(d, b);
	    };
	    return function (d, b) {
	        _extendStatics(d, b);
	        function __() {
	            this.constructor = d;
	        }
	        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	    };
	}();
	
	/**
	 * @typedef {Object} Options
	 * @property {import("../extent.js").Extent} [extent] Extent for the tile grid. No tiles
	 * outside this extent will be requested by {@link module:ol/source/Tile} sources.
	 * When no `origin` or `origins` are configured, the `origin` will be set to the
	 * top-left corner of the extent.
	 * @property {import("../coordinate.js").Coordinate} [origin] The tile grid origin, i.e.
	 * where the `x` and `y` axes meet (`[z, 0, 0]`). Tile coordinates increase left
	 * to right and upwards. If not specified, `extent` or `origins` must be provided.
	 * @property {Array<import("../coordinate.js").Coordinate>} [origins] Tile grid origins,
	 * i.e. where the `x` and `y` axes meet (`[z, 0, 0]`), for each zoom level. If
	 * given, the array length should match the length of the `resolutions` array, i.e.
	 * each resolution can have a different origin. Tile coordinates increase left to
	 * right and upwards. If not specified, `extent` or `origin` must be provided.
	 * @property {!Array<number>} resolutions Resolutions. The array index of each
	 * resolution needs to match the zoom level. This means that even if a `minZoom`
	 * is configured, the resolutions array will have a length of `maxZoom + 1`
	 * @property {!Array<string>} matrixIds matrix IDs. The length of this array needs
	 * to match the length of the `resolutions` array.
	 * @property {Array<import("../size.js").Size>} [sizes] Number of tile rows and columns
	 * of the grid for each zoom level. The values here are the `TileMatrixWidth` and
	 * `TileMatrixHeight` advertised in the GetCapabilities response of the WMTS, and
	 * define the grid's extent together with the `origin`.
	 * An `extent` can be configured in addition, and will further limit the extent for
	 * which tile requests are made by sources. If the bottom-left corner of
	 * the `extent` is used as `origin` or `origins`, then the `y` value must be
	 * negative because OpenLayers tile coordinates use the top left as the origin.
	 * @property {number|import("../size.js").Size} [tileSize] Tile size.
	 * @property {Array<import("../size.js").Size>} [tileSizes] Tile sizes. The length of
	 * this array needs to match the length of the `resolutions` array.
	 * @property {Array<number>} [widths] Number of tile columns that cover the grid's
	 * extent for each zoom level. Only required when used with a source that has `wrapX`
	 * set to `true`, and only when the grid's origin differs from the one of the
	 * projection's extent. The array length has to match the length of the `resolutions`
	 * array, i.e. each resolution will have a matching entry here.
	 */
	/**
	 * @classdesc
	 * Set the grid pattern for sources accessing WMTS tiled-image servers.
	 * @api
	 */
	var WMTSTileGrid = /** @class */function (_super) {
	    __extends(WMTSTileGrid, _super);
	    /**
	     * @param {Options} options WMTS options.
	     */
	    function WMTSTileGrid(options) {
	        var _this = _super.call(this, {
	            extent: options.extent,
	            origin: options.origin,
	            origins: options.origins,
	            resolutions: options.resolutions,
	            tileSize: options.tileSize,
	            tileSizes: options.tileSizes,
	            sizes: options.sizes
	        }) || this;
	        /**
	         * @private
	         * @type {!Array<string>}
	         */
	        _this.matrixIds_ = options.matrixIds;
	        return _this;
	    }
	    /**
	     * @param {number} z Z.
	     * @return {string} MatrixId..
	     */
	    WMTSTileGrid.prototype.getMatrixId = function (z) {
	        return this.matrixIds_[z];
	    };
	    /**
	     * Get the list of matrix identifiers.
	     * @return {Array<string>} MatrixIds.
	     * @api
	     */
	    WMTSTileGrid.prototype.getMatrixIds = function () {
	        return this.matrixIds_;
	    };
	    return WMTSTileGrid;
	}(_TileGrid2.default);
	exports.default = WMTSTileGrid;
	/**
	 * Create a tile grid from a WMTS capabilities matrix set and an
	 * optional TileMatrixSetLimits.
	 * @param {Object} matrixSet An object representing a matrixSet in the
	 *     capabilities document.
	 * @param {import("../extent.js").Extent=} opt_extent An optional extent to restrict the tile
	 *     ranges the server provides.
	 * @param {Array<Object>=} opt_matrixLimits An optional object representing
	 *     the available matrices for tileGrid.
	 * @return {WMTSTileGrid} WMTS tileGrid instance.
	 * @api
	 */
	
	function createFromCapabilitiesMatrixSet(matrixSet, opt_extent, opt_matrixLimits) {
	    /** @type {!Array<number>} */
	    var resolutions = [];
	    /** @type {!Array<string>} */
	    var matrixIds = [];
	    /** @type {!Array<import("../coordinate.js").Coordinate>} */
	    var origins = [];
	    /** @type {!Array<import("../size.js").Size>} */
	    var tileSizes = [];
	    /** @type {!Array<import("../size.js").Size>} */
	    var sizes = [];
	    var matrixLimits = opt_matrixLimits !== undefined ? opt_matrixLimits : [];
	    var supportedCRSPropName = 'SupportedCRS';
	    var matrixIdsPropName = 'TileMatrix';
	    var identifierPropName = 'Identifier';
	    var scaleDenominatorPropName = 'ScaleDenominator';
	    var topLeftCornerPropName = 'TopLeftCorner';
	    var tileWidthPropName = 'TileWidth';
	    var tileHeightPropName = 'TileHeight';
	    var code = matrixSet[supportedCRSPropName];
	    var projection = (0, _proj.get)(code.replace(/urn:ogc:def:crs:(\w+):(.*:)?(\w+)$/, '$1:$3')) || (0, _proj.get)(code);
	    var metersPerUnit = projection.getMetersPerUnit();
	    // swap origin x and y coordinates if axis orientation is lat/long
	    var switchOriginXY = projection.getAxisOrientation().substr(0, 2) == 'ne';
	    matrixSet[matrixIdsPropName].sort(function (a, b) {
	        return b[scaleDenominatorPropName] - a[scaleDenominatorPropName];
	    });
	    matrixSet[matrixIdsPropName].forEach(function (elt) {
	        var matrixAvailable;
	        // use of matrixLimits to filter TileMatrices from GetCapabilities
	        // TileMatrixSet from unavailable matrix levels.
	        if (matrixLimits.length > 0) {
	            matrixAvailable = (0, _array.find)(matrixLimits, function (elt_ml) {
	                if (elt[identifierPropName] == elt_ml[matrixIdsPropName]) {
	                    return true;
	                }
	                // Fallback for tileMatrix identifiers that don't get prefixed
	                // by their tileMatrixSet identifiers.
	                if (elt[identifierPropName].indexOf(':') === -1) {
	                    return matrixSet[identifierPropName] + ':' + elt[identifierPropName] === elt_ml[matrixIdsPropName];
	                }
	                return false;
	            });
	        } else {
	            matrixAvailable = true;
	        }
	        if (matrixAvailable) {
	            matrixIds.push(elt[identifierPropName]);
	            var resolution = elt[scaleDenominatorPropName] * 0.28E-3 / metersPerUnit;
	            var tileWidth = elt[tileWidthPropName];
	            var tileHeight = elt[tileHeightPropName];
	            if (switchOriginXY) {
	                origins.push([elt[topLeftCornerPropName][1], elt[topLeftCornerPropName][0]]);
	            } else {
	                origins.push(elt[topLeftCornerPropName]);
	            }
	            resolutions.push(resolution);
	            tileSizes.push(tileWidth == tileHeight ? tileWidth : [tileWidth, tileHeight]);
	            sizes.push([elt['MatrixWidth'], elt['MatrixHeight']]);
	        }
	    });
	    return new WMTSTileGrid({
	        extent: opt_extent,
	        origins: origins,
	        resolutions: resolutions,
	        matrixIds: matrixIds,
	        tileSizes: tileSizes,
	        sizes: sizes
	    });
	}
	//# sourceMappingURL=WMTS.js.map

/***/ }),
/* 307 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	exports.createFromTemplate = createFromTemplate;
	exports.createFromTemplates = createFromTemplates;
	exports.createFromTileUrlFunctions = createFromTileUrlFunctions;
	exports.nullTileUrlFunction = nullTileUrlFunction;
	exports.expandUrl = expandUrl;
	
	var _asserts = __webpack_require__(29);
	
	var _math = __webpack_require__(19);
	
	var _tilecoord = __webpack_require__(88);
	
	/**
	 * @param {string} template Template.
	 * @param {import("./tilegrid/TileGrid.js").default} tileGrid Tile grid.
	 * @return {import("./Tile.js").UrlFunction} Tile URL function.
	 */
	function createFromTemplate(template, tileGrid) {
	    var zRegEx = /\{z\}/g;
	    var xRegEx = /\{x\}/g;
	    var yRegEx = /\{y\}/g;
	    var dashYRegEx = /\{-y\}/g;
	    return (
	        /**
	         * @param {import("./tilecoord.js").TileCoord} tileCoord Tile Coordinate.
	         * @param {number} pixelRatio Pixel ratio.
	         * @param {import("./proj/Projection.js").default} projection Projection.
	         * @return {string|undefined} Tile URL.
	         */
	        function (tileCoord, pixelRatio, projection) {
	            if (!tileCoord) {
	                return undefined;
	            } else {
	                return template.replace(zRegEx, tileCoord[0].toString()).replace(xRegEx, tileCoord[1].toString()).replace(yRegEx, tileCoord[2].toString()).replace(dashYRegEx, function () {
	                    var z = tileCoord[0];
	                    var range = tileGrid.getFullTileRange(z);
	                    (0, _asserts.assert)(range, 55); // The {-y} placeholder requires a tile grid with extent
	                    var y = range.getHeight() - tileCoord[2] - 1;
	                    return y.toString();
	                });
	            }
	        }
	    );
	}
	/**
	 * @param {Array<string>} templates Templates.
	 * @param {import("./tilegrid/TileGrid.js").default} tileGrid Tile grid.
	 * @return {import("./Tile.js").UrlFunction} Tile URL function.
	 */
	/**
	 * @module ol/tileurlfunction
	 */
	function createFromTemplates(templates, tileGrid) {
	    var len = templates.length;
	    var tileUrlFunctions = new Array(len);
	    for (var i = 0; i < len; ++i) {
	        tileUrlFunctions[i] = createFromTemplate(templates[i], tileGrid);
	    }
	    return createFromTileUrlFunctions(tileUrlFunctions);
	}
	/**
	 * @param {Array<import("./Tile.js").UrlFunction>} tileUrlFunctions Tile URL Functions.
	 * @return {import("./Tile.js").UrlFunction} Tile URL function.
	 */
	function createFromTileUrlFunctions(tileUrlFunctions) {
	    if (tileUrlFunctions.length === 1) {
	        return tileUrlFunctions[0];
	    }
	    return (
	        /**
	         * @param {import("./tilecoord.js").TileCoord} tileCoord Tile Coordinate.
	         * @param {number} pixelRatio Pixel ratio.
	         * @param {import("./proj/Projection.js").default} projection Projection.
	         * @return {string|undefined} Tile URL.
	         */
	        function (tileCoord, pixelRatio, projection) {
	            if (!tileCoord) {
	                return undefined;
	            } else {
	                var h = (0, _tilecoord.hash)(tileCoord);
	                var index = (0, _math.modulo)(h, tileUrlFunctions.length);
	                return tileUrlFunctions[index](tileCoord, pixelRatio, projection);
	            }
	        }
	    );
	}
	/**
	 * @param {import("./tilecoord.js").TileCoord} tileCoord Tile coordinate.
	 * @param {number} pixelRatio Pixel ratio.
	 * @param {import("./proj/Projection.js").default} projection Projection.
	 * @return {string|undefined} Tile URL.
	 */
	function nullTileUrlFunction(tileCoord, pixelRatio, projection) {
	    return undefined;
	}
	/**
	 * @param {string} url URL.
	 * @return {Array<string>} Array of urls.
	 */
	function expandUrl(url) {
	    var urls = [];
	    var match = /\{([a-z])-([a-z])\}/.exec(url);
	    if (match) {
	        // char range
	        var startCharCode = match[1].charCodeAt(0);
	        var stopCharCode = match[2].charCodeAt(0);
	        var charCode = void 0;
	        for (charCode = startCharCode; charCode <= stopCharCode; ++charCode) {
	            urls.push(url.replace(match[0], String.fromCharCode(charCode)));
	        }
	        return urls;
	    }
	    match = /\{(\d+)-(\d+)\}/.exec(url);
	    if (match) {
	        // number range
	        var stop_1 = parseInt(match[2], 10);
	        for (var i = parseInt(match[1], 10); i <= stop_1; i++) {
	            urls.push(url.replace(match[0], i.toString()));
	        }
	        return urls;
	    }
	    urls.push(url);
	    return urls;
	}
	//# sourceMappingURL=tileurlfunction.js.map

/***/ }),
/* 308 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	exports.BaseFeedFormat = undefined;
	
	var _createClass = function () {
	  function defineProperties(target, props) {
	    for (var i = 0; i < props.length; i++) {
	      var descriptor = props[i];descriptor.enumerable = descriptor.enumerable || false;descriptor.configurable = true;if ("value" in descriptor) descriptor.writable = true;Object.defineProperty(target, descriptor.key, descriptor);
	    }
	  }return function (Constructor, protoProps, staticProps) {
	    if (protoProps) defineProperties(Constructor.prototype, protoProps);if (staticProps) defineProperties(Constructor, staticProps);return Constructor;
	  };
	}();
	
	var _slicedToArray = function () {
	  function sliceIterator(arr, i) {
	    var _arr = [];var _n = true;var _d = false;var _e = undefined;try {
	      for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {
	        _arr.push(_s.value);if (i && _arr.length === i) break;
	      }
	    } catch (err) {
	      _d = true;_e = err;
	    } finally {
	      try {
	        if (!_n && _i["return"]) _i["return"]();
	      } finally {
	        if (_d) throw _e;
	      }
	    }return _arr;
	  }return function (arr, i) {
	    if (Array.isArray(arr)) {
	      return arr;
	    } else if (Symbol.iterator in Object(arr)) {
	      return sliceIterator(arr, i);
	    } else {
	      throw new TypeError("Invalid attempt to destructure non-iterable instance");
	    }
	  };
	}();
	
	var _utils = __webpack_require__(49);
	
	function _classCallCheck(instance, Constructor) {
	  if (!(instance instanceof Constructor)) {
	    throw new TypeError("Cannot call a class as a function");
	  }
	}
	
	function _toConsumableArray(arr) {
	  if (Array.isArray(arr)) {
	    for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) {
	      arr2[i] = arr[i];
	    }return arr2;
	  } else {
	    return Array.from(arr);
	  }
	}
	
	function swapAndPair(values) {
	  var out = [];
	
	  for (var i = 0; i < values.length; i += 2) {
	    var lat = values[i];
	    var lon = values[i + 1];
	    out.push([lon, lat]);
	  }
	  return out;
	}
	
	function parseGeometryValues(value) {
	  var values = value.trim().split(/\s+/).map(parseFloat);
	  return swapAndPair(values);
	}
	
	function parseGmlLine(node) {
	  return swapAndPair((0, _utils.getText)(node, node.namespaceURI, 'posList').trim().split(/\s+/).map(parseFloat));
	}
	
	function parseGmlPolygon(node, namespaceURI) {
	  var exteriorElement = (0, _utils.getFirstElement)(node, namespaceURI, 'exterior');
	  var interiorElements = (0, _utils.getElements)(node, namespaceURI, 'interior');
	
	  var exterior = parseGmlLine((0, _utils.getFirstElement)(exteriorElement, namespaceURI, 'LinearRing'), namespaceURI);
	
	  var interiors = interiorElements.map(function (interiorElement) {
	    return parseGmlLine((0, _utils.getFirstElement)(interiorElement, namespaceURI, 'LinearRing'), namespaceURI);
	  });
	  return [exterior].concat(_toConsumableArray(interiors));
	}
	
	function parseGmlEnvelope(node, namespaceURI) {
	  var lowerLeftCorner = (0, _utils.getText)(node, namespaceURI, 'lowerCorner').trim().split(/\s+/).map(parseFloat);
	  var upperRightCorner = (0, _utils.getText)(node, namespaceURI, 'upperCorner').trim().split(/\s+/).map(parseFloat);
	
	  var bbox = [[[lowerLeftCorner[1], lowerLeftCorner[0]], [upperRightCorner[1], lowerLeftCorner[0]], [upperRightCorner[1], upperRightCorner[0]], [lowerLeftCorner[1], upperRightCorner[0]], [lowerLeftCorner[1], lowerLeftCorner[0]]]];
	  return bbox;
	}
	
	function parseGml(node) {
	  switch (node.localName) {
	    case 'Point':
	      {
	        var coordinates = (0, _utils.getText)(node, node.namespaceURI, 'pos').trim().split(/\s+/).map(parseFloat);
	        return {
	          type: 'Point',
	          coordinates: [coordinates[1], coordinates[0]]
	        };
	      }
	    case 'LineString':
	      {
	        var _coordinates = parseGmlLine(node, node.namespaceURI);
	        return {
	          type: 'LineString',
	          coordinates: _coordinates
	        };
	      }
	    case 'Polygon':
	      {
	        var _coordinates2 = parseGmlPolygon(node, node.namespaceURI);
	        return {
	          type: 'Polygon',
	          coordinates: _coordinates2
	        };
	      }
	    case 'Envelope':
	      {
	        var _coordinates3 = parseGmlEnvelope(node, node.namespaceURI);
	        return {
	          type: 'Polygon',
	          coordinates: _coordinates3
	        };
	      }
	    case 'MultiPolygon':
	      {
	        var polygons = (0, _utils.getElements)(node, node.namespaceURI, 'polygonMember').map(function (surfaceMember) {
	          return (0, _utils.getFirstElement)(surfaceMember, surfaceMember.namespaceURI, 'Polygon');
	        });
	        var _coordinates4 = polygons.map(function (polygon) {
	          return parseGmlPolygon(polygon, node.namespaceURI);
	        });
	        return {
	          type: 'MultiPolygon',
	          coordinates: _coordinates4
	        };
	      }
	    case 'MultiSurface':
	      {
	        // support both single 'surfaceMembers' or multiple 'surfaceMember' elements
	        var _polygons = (0, _utils.getElements)(node, node.namespaceURI, 'surfaceMember').map(function (surfaceMember) {
	          return (0, _utils.getFirstElement)(surfaceMember, surfaceMember.namespaceURI, 'Polygon');
	        });
	        var surfaceMembers = (0, _utils.getFirstElement)(node, node.namespaceURI, 'surfaceMembers');
	        if (surfaceMembers) {
	          _polygons = _polygons.concat((0, _utils.getElements)(surfaceMembers, surfaceMembers.namespaceURI, 'Polygon'));
	        }
	        var _coordinates5 = _polygons.map(function (polygon) {
	          return parseGmlPolygon(polygon, node.namespaceURI);
	        });
	        return {
	          type: 'MultiPolygon',
	          coordinates: _coordinates5
	        };
	      }
	    case 'geometryMember':
	      {
	        // go one level deeper to the first referenced geometry
	        return parseGml((0, _utils.getFirstElement)(node));
	      }
	    default:
	      break;
	  }
	  return null;
	}
	
	function boxFromLineString(lineString) {
	  var minX = null;
	  var minY = null;
	  var maxX = null;
	  var maxY = null;
	
	  for (var i = 0; i < lineString.length; ++i) {
	    var _lineString$i = _slicedToArray(lineString[i], 2),
	        x = _lineString$i[0],
	        y = _lineString$i[1];
	
	    minX = minX === null || x < minX ? x : minX;
	    minY = minY === null || y < minY ? y : minY;
	    maxX = maxX === null || x > maxX ? x : maxX;
	    maxY = maxY === null || y > maxY ? y : maxY;
	  }
	  return [minX, minY, maxX, maxY];
	}
	
	var BaseFeedFormat = exports.BaseFeedFormat = function () {
	  function BaseFeedFormat() {
	    _classCallCheck(this, BaseFeedFormat);
	  }
	
	  _createClass(BaseFeedFormat, [{
	    key: 'parseGeometry',
	    value: function parseGeometry(node) {
	      var where = (0, _utils.getFirstElement)(node, 'georss', 'where');
	      var point = (0, _utils.getText)(node, 'georss', 'point');
	      var line = (0, _utils.getText)(node, 'georss', 'line');
	      var polygon = (0, _utils.getText)(node, 'georss', 'polygon');
	
	      if (where) {
	        var geomNode = (0, _utils.getFirstElement)(where);
	        if (geomNode) {
	          return parseGml(geomNode);
	        }
	      } else if (point) {
	        return {
	          type: 'Point',
	          coordinates: parseGeometryValues(point)[0]
	        };
	      } else if (line) {
	        return {
	          type: 'LineString',
	          coordinates: parseGeometryValues(line)
	        };
	      } else if (polygon) {
	        return {
	          type: 'Polygon',
	          coordinates: [parseGeometryValues(polygon)]
	        };
	      }
	      return null;
	    }
	  }, {
	    key: 'parseBox',
	    value: function parseBox(node) {
	      var box = (0, _utils.getText)(node, 'georss', 'box');
	      if (box) {
	        var values = box.split(/\s+/).map(parseFloat);
	        return [values[1], values[0], values[3], values[2]];
	      }
	      return null;
	    }
	  }, {
	    key: 'getBoxFromGeometry',
	    value: function getBoxFromGeometry(geometry) {
	      var coords = geometry.coordinates;
	      switch (geometry.type) {
	        case 'Point':
	          return [coords[0], coords[1], coords[0], coords[1]];
	        case 'LineString':
	          return boxFromLineString(coords);
	        case 'Polygon':
	          return boxFromLineString(coords[0]);
	        case 'MultiPolygon':
	          {
	            var bboxes = coords.map(function (polygon) {
	              return boxFromLineString(polygon[0]);
	            });
	            var outBox = bboxes[0];
	            for (var i = 1; i < bboxes.length; ++i) {
	              var box = bboxes[i];
	              outBox[0] = Math.min(outBox[0], box[0]);
	              outBox[1] = Math.min(outBox[1], box[1]);
	              outBox[2] = Math.max(outBox[2], box[2]);
	              outBox[3] = Math.max(outBox[3], box[3]);
	            }
	            return outBox;
	          }
	        default:
	          return null;
	      }
	    }
	  }, {
	    key: 'parseDate',
	    value: function parseDate(node) {
	      var date = (0, _utils.getText)(node, 'dc', 'date');
	      if (date) {
	        var values = date.split('/');
	        if (values.length === 1) {
	          return new Date(date);
	        } else if (values.length >= 1) {
	          return [new Date(values[0]), new Date(values[1])];
	        }
	      }
	      return null;
	    }
	  }, {
	    key: 'parseLinks',
	    value: function parseLinks(node) {
	      return (0, _utils.getElements)(node, 'atom', 'link').map(function (linkNode) {
	        var link = {
	          href: linkNode.getAttribute('href')
	        };
	        var rel = linkNode.getAttribute('rel');
	        var type = linkNode.getAttribute('type');
	        var title = linkNode.getAttribute('title');
	        if (rel) {
	          link.rel = rel;
	        }
	        if (type) {
	          link.type = type;
	        }
	        if (title) {
	          link.title = title;
	        }
	
	        return link;
	      });
	    }
	  }, {
	    key: 'parseMedia',
	    value: function parseMedia(node) {
	      var directMedias = (0, _utils.getElements)(node, 'media', 'content');
	      var groups = (0, _utils.getElements)(node, 'media', 'group');
	      var groupedMedias = groups.map(function (group) {
	        return (0, _utils.getElements)(group, 'media', 'content');
	      }).reduce(function (oldElems, newElems) {
	        return oldElems.concat(newElems);
	      }, []);
	      var allMedias = directMedias.concat(groupedMedias);
	
	      return allMedias.map(function (mediaNode) {
	        var category = (0, _utils.getFirstElement)(mediaNode, 'media', 'category');
	        return {
	          url: mediaNode.getAttribute('url'),
	          category: category ? category.textContent : undefined,
	          scheme: category ? category.getAttribute('scheme') : undefined
	        };
	      });
	    }
	  }, {
	    key: 'parseEOP',
	    value: function parseEOP(node) {
	      var eoNode = (0, _utils.getFirstElement)(node, null, 'EarthObservation');
	      if (eoNode) {
	        var eoEquipment = (0, _utils.simplePath)(eoNode, 'om:procedure/EarthObservationEquipment', true);
	        return {
	          productType: (0, _utils.simplePath)(eoNode, 'metaDataProperty/EarthObservationMetaData/productType/text()', true),
	          processingLevel: (0, _utils.simplePath)(eoNode, 'metaDataProperty/EarthObservationMetaData/processing/ProcessingInformation/processingLevel/text()', true),
	          platformShortName: (0, _utils.simplePath)(eoEquipment, 'platform/Platform/shortName/text()', true),
	          platformSerialIdentifier: (0, _utils.simplePath)(eoEquipment, 'platform/Platform/serialIdentifier/text()', true),
	          instrumentShortName: (0, _utils.simplePath)(eoEquipment, 'instrument/Instrument/shortName/text()', true),
	          sensorType: (0, _utils.simplePath)(eoEquipment, 'sensor/Sensor/sensorType/text()', true),
	          resolution: (0, _utils.simplePath)(eoEquipment, 'sensor/Sensor/resolution/text()', true) + (0, _utils.simplePath)(eoEquipment, 'sensor/Sensor/resolution@uom', true),
	          orbitNumber: (0, _utils.simplePath)(eoEquipment, 'acquisitionParameters/Acquisition/orbitNumber/text()', true),
	          cloudCoverPercentage: (0, _utils.simplePath)(eoNode, 'om:result/opt:EarthObservationResult/opt:cloudCoverPercentage/text()', true)
	        };
	      }
	      return null;
	    }
	  }, {
	    key: 'parseS3Path',
	    value: function parseS3Path(node) {
	      return (0, _utils.getText)(node, null, 's3Path');
	    }
	  }, {
	    key: 'parseExtraFields',
	    value: function parseExtraFields(node, extraFields, namespaces, item) {
	      for (var outPath in extraFields) {
	        if (Object.prototype.hasOwnProperty.call(extraFields, outPath)) {
	          var maybePath = extraFields[outPath];
	          var xmlPath = void 0;
	          var single = true;
	          if (Array.isArray(maybePath)) {
	            var _maybePath = _slicedToArray(maybePath, 2);
	
	            xmlPath = _maybePath[0];
	            single = _maybePath[1];
	          } else {
	            xmlPath = maybePath;
	          }
	
	          var parts = outPath.split('.');
	          var ref = item;
	          for (var i = 0; i < parts.length - 1; ++i) {
	            var part = parts[i];
	            if (!ref[part]) {
	              ref[part] = {};
	            }
	            ref = ref[part];
	          }
	          ref[parts[parts.length - 1]] = (0, _utils.simplePath)(node, xmlPath, single, namespaces);
	        }
	      }
	    }
	  }]);
	
	  return BaseFeedFormat;
	}();

/***/ }),
/* 309 */
/***/ (function(module, exports, __webpack_require__) {

	/* WEBPACK VAR INJECTION */(function(Promise) {'use strict';
	
	var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	exports.OpenSearchPaginator = exports.PagedSearchProgressEmitter = undefined;
	
	var _createClass = function () {
	  function defineProperties(target, props) {
	    for (var i = 0; i < props.length; i++) {
	      var descriptor = props[i];descriptor.enumerable = descriptor.enumerable || false;descriptor.configurable = true;if ("value" in descriptor) descriptor.writable = true;Object.defineProperty(target, descriptor.key, descriptor);
	    }
	  }return function (Constructor, protoProps, staticProps) {
	    if (protoProps) defineProperties(Constructor.prototype, protoProps);if (staticProps) defineProperties(Constructor, staticProps);return Constructor;
	  };
	}();
	
	var _eventEmitter = __webpack_require__(985);
	
	var _eventEmitter2 = _interopRequireDefault(_eventEmitter);
	
	var _search = __webpack_require__(310);
	
	var _utils = __webpack_require__(49);
	
	var _config2 = __webpack_require__(151);
	
	function _interopRequireDefault(obj) {
	  return obj && obj.__esModule ? obj : { default: obj };
	}
	
	function _objectWithoutProperties(obj, keys) {
	  var target = {};for (var i in obj) {
	    if (keys.indexOf(i) >= 0) continue;if (!Object.prototype.hasOwnProperty.call(obj, i)) continue;target[i] = obj[i];
	  }return target;
	}
	
	function _classCallCheck(instance, Constructor) {
	  if (!(instance instanceof Constructor)) {
	    throw new TypeError("Cannot call a class as a function");
	  }
	}
	
	function _possibleConstructorReturn(self, call) {
	  if (!self) {
	    throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
	  }return call && ((typeof call === "undefined" ? "undefined" : _typeof(call)) === "object" || typeof call === "function") ? call : self;
	}
	
	function _inherits(subClass, superClass) {
	  if (typeof superClass !== "function" && superClass !== null) {
	    throw new TypeError("Super expression must either be null or a function, not " + (typeof superClass === "undefined" ? "undefined" : _typeof(superClass)));
	  }subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } });if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;
	}
	
	/**
	 * @module opensearch/paginator
	 */
	
	/**
	 * Event emitter to track the progress of paged searches.
	 *
	 * @fires PagedSearchProgressEmitter#page
	 * @fires PagedSearchProgressEmitter#success
	 * @fires PagedSearchProgressEmitter#error
	 */
	var PagedSearchProgressEmitter = function (_EventEmitter) {
	  _inherits(PagedSearchProgressEmitter, _EventEmitter);
	
	  function PagedSearchProgressEmitter() {
	    _classCallCheck(this, PagedSearchProgressEmitter);
	
	    return _possibleConstructorReturn(this, (PagedSearchProgressEmitter.__proto__ || Object.getPrototypeOf(PagedSearchProgressEmitter)).apply(this, arguments));
	  }
	
	  return PagedSearchProgressEmitter;
	}(_eventEmitter2.default);
	
	/**
	 * Search Progress Event
	 *
	 * @event module:opensearch/paginator~PagedSearchProgressEmitter#page
	 * @type {SearchResult}
	 */
	
	/**
	 * Search Success Event
	 *
	 * @event module:opensearch/paginator~PagedSearchProgressEmitter#success
	 * @type {SearchResult}
	 */
	
	/**
	 * Search Error Event
	 *
	 * @event module:opensearch/paginator~PagedSearchProgressEmitter#error
	 * @type {Error}
	 */
	
	exports.PagedSearchProgressEmitter = PagedSearchProgressEmitter;
	
	function isCancellable(promise) {
	  return promise && typeof promise.cancel === 'function' && !promise.isCancelled();
	}
	
	function combinePages(pages) {
	  var firstPage = pages[0];
	  var records = pages.reduce(function (rs, page) {
	    return rs.concat(page.records);
	  }, []);
	  return {
	    totalResults: firstPage.totalResults,
	    startIndex: firstPage.startIndex,
	    itemsPerPage: firstPage.itemsPerPage,
	    records: records
	  };
	}
	
	/**
	 * Class to help with paginated results of an OpenSearch service.
	 */
	
	var OpenSearchPaginator = exports.OpenSearchPaginator = function () {
	  /**
	   * @param {OpenSearchUrl} url The URL to perform all subsequent requests on.
	   * @param {object} parameters Search parameters.
	   * @param {object} [options] Additional options for the pagination
	   * @param {boolean} [options.useCache=true] Whether response pages shall be cached.
	   * @param {int} [options.preferredItemsPerPage=undefined] The preferred page size. This
	   *                                                        defaults to the advertised
	   *                                                        default of the URL.
	   * @param {boolean} [options.preferStartIndex=true] Whether the paging shall be done
	   *                                                  using the `startIndex` parameter
	   *                                                  (the default) or the `startPage`.
	   * @param {int} [options.totalResults=undefined] Total results on all pages. Can be set from
	   *                                            previous searches for optimized `searchFirstRecords`
	   * @param {int} [options.baseOffset=0] The base index offset to apply. This option
	   *                                     is useful when resuming a consecutive search.
	   * @param {int} [options.maxUrlLength=undefined] The maximum URL length. Forwarded to
	   *                                               [search]{@link module:opensearch/search.search}.
	   * @param {boolean} [options.dropEmptyParameters=false] Whether unused parameter keys shall
	   *                                                      be dropped from the request.
	   */
	  function OpenSearchPaginator(url, parameters) {
	    var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
	
	    _classCallCheck(this, OpenSearchPaginator);
	
	    var _options$useCache = options.useCache,
	        useCache = _options$useCache === undefined ? true : _options$useCache,
	        _options$preferredIte = options.preferredItemsPerPage,
	        preferredItemsPerPage = _options$preferredIte === undefined ? undefined : _options$preferredIte,
	        _options$preferStartI = options.preferStartIndex,
	        preferStartIndex = _options$preferStartI === undefined ? true : _options$preferStartI,
	        _options$baseOffset = options.baseOffset,
	        baseOffset = _options$baseOffset === undefined ? 0 : _options$baseOffset,
	        _options$totalResults = options.totalResults,
	        totalResults = _options$totalResults === undefined ? undefined : _options$totalResults,
	        searchOptions = _objectWithoutProperties(options, ['useCache', 'preferredItemsPerPage', 'preferStartIndex', 'baseOffset', 'totalResults']);
	
	    this._url = url;
	    this._parameters = parameters;
	    this._cache = useCache ? {} : null;
	    this._preferredItemsPerPage = preferredItemsPerPage;
	    this._preferStartIndex = preferStartIndex;
	    this._baseOffset = baseOffset;
	    this._totalResults = totalResults;
	    this._searchOptions = searchOptions;
	  }
	
	  /**
	   * Fetch a single page of the result set. Sets the server side items per page,
	   * when the result is available.
	   * @param {int} [pageIndex=0] The index of the page to be fetched.
	   * @param {int} [maxCount=undefined] The maximum count of objects to be retrieved.
	   * @returns {Promise<SearchResult>} The search result.
	   * @fulfill {module:opensearch/formats~SearchResult} The search result
	   */
	
	  _createClass(OpenSearchPaginator, [{
	    key: 'fetchPage',
	    value: function fetchPage() {
	      var _this2 = this;
	
	      var pageIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
	      var maxCount = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined;
	
	      // TODO: implement caching of whole pages
	      // if (this._cache && this._cache[pageIndex]) {
	      //   return this._cache[pageIndex];
	      // }
	      var parameters = (0, _utils.assign)({}, this._parameters);
	
	      var pageSize = this.getActualPageSize();
	      if (pageSize && maxCount) {
	        parameters.count = Math.min(maxCount, pageSize);
	      } else if (pageSize) {
	        parameters.count = pageSize;
	      } else if (maxCount) {
	        parameters.count = maxCount;
	      }
	
	      if (this._preferStartIndex) {
	        if (typeof pageSize === 'undefined') {
	          parameters.startIndex = this._baseOffset + this._url.indexOffset;
	        } else {
	          parameters.startIndex = this._baseOffset + pageSize * pageIndex + this._url.indexOffset;
	        }
	      } else {
	        parameters.startPage = pageIndex + this._url.pageOffset;
	      }
	      return (0, _search.search)(this._url, parameters, this._searchOptions).then(function (result) {
	        _this2._totalResults = result.totalResults;
	        if (!_this2._serverItemsPerPage && result.itemsPerPage) {
	          _this2._serverItemsPerPage = result.itemsPerPage;
	        }
	        return result;
	      });
	    }
	
	    /**
	     * Fetches all pages from the URL. A probing request is sent to determine how
	     * many succeeding requests have to be sent.
	     * @returns {Promise<SearchResult[]>} The async result of all the pages in the
	     *                                    search.
	     * @fulfill {module:opensearch/formats~SearchResult[]} The search result pages
	     */
	
	  }, {
	    key: 'fetchAllPages',
	    value: function fetchAllPages() {
	      var _this3 = this;
	
	      return this.fetchPage().then(function (firstPage) {
	        var pageCount = _this3.getPageCount();
	        var requests = [firstPage];
	        for (var i = 1; i < pageCount; ++i) {
	          requests.push(_this3.fetchPage(i));
	        }
	
	        var _config = (0, _config2.config)(),
	            Promise = _config.Promise;
	
	        return Promise.all(requests);
	      });
	    }
	
	    /**
	     * Convenience method to get the records of all pages in a single result array
	     * @returns {Promise<SearchResult>} The records of all the pages in the search.
	     * @fulfill {module:opensearch/formats~SearchResult} The search result
	     */
	
	  }, {
	    key: 'fetchAllRecords',
	    value: function fetchAllRecords() {
	      return this.fetchAllPages().then(function (pages) {
	        var firstPage = pages[0];
	        var records = pages.reduce(function (rs, page) {
	          return rs.concat(page.records);
	        }, []);
	        return {
	          totalResults: firstPage.totalResults,
	          startIndex: firstPage.startIndex,
	          itemsPerPage: firstPage.itemsPerPage,
	          records: records
	        };
	      });
	    }
	
	    /**
	     * Fetches the first X records of a search in a single search result.
	     * @param {int} maxCount The maximum number of records to fetch.
	     * @returns {Promise<SearchResult>} The resulting records as a promise.
	     * @fulfill {module:opensearch/formats~SearchResult} The search result
	     */
	
	  }, {
	    key: 'fetchFirstRecords',
	    value: function fetchFirstRecords(maxCount) {
	      var _this4 = this;
	
	      // Get the first page
	      return this.fetchPage(0, maxCount).then(function (firstPage) {
	        // check if all records fit in the first page (then return this page)
	        if (firstPage.totalResults <= firstPage.itemsPerPage) {
	          // return if we already have all records
	          return firstPage;
	        }
	        // fetch other pages until we have the required count
	        var requests = [firstPage];
	        var usedMaxCount = Math.min(maxCount, firstPage.totalResults - firstPage.startIndex + _this4._url.indexOffset);
	
	        // determine the number of pages and issue a request for each
	        var numPages = firstPage.itemsPerPage ? Math.ceil(usedMaxCount / firstPage.itemsPerPage) : 1;
	        for (var i = 1; i < numPages; ++i) {
	          var count = firstPage.itemsPerPage;
	          if (firstPage.itemsPerPage * (i + 1) > usedMaxCount) {
	            count = usedMaxCount - firstPage.itemsPerPage * i;
	          }
	          requests.push(_this4.fetchPage(i, count));
	        }
	
	        return Promise.all(requests).then(function (pages) {
	          return combinePages(pages);
	        });
	      });
	    }
	
	    /**
	     * Fetches the first X records of a search in a single search result.
	     * Use this method when the progressive results are wished and not just a
	     * final result.
	     * @param {int} maxCount The maximum number of records to fetch.
	     * @param {boolean} preserveOrder Whether the results must be returned in the
	     *                                order received from the server, or the
	     *                                originally requested order.
	     * @returns {module:opensearch/paginator~PagedSearchProgressEmitter} The resulting
	     *                                                                   records as a promise.
	     */
	
	  }, {
	    key: 'searchFirstRecords',
	    value: function searchFirstRecords() {
	      var _this5 = this;
	
	      var maxCount = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : undefined;
	      var preserveOrder = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
	
	      // Get the first page
	      var emitter = new PagedSearchProgressEmitter();
	      var request = null;
	      var startPageIndex = null;
	      if (this._preferredItemsPerPage && this._totalResults && typeof maxCount !== 'undefined' && maxCount !== 0) {
	        // if paginator created based on known values - continue search
	        // do not request first page to get values
	        request = Promise.resolve({
	          itemsPerPage: this._preferredItemsPerPage,
	          records: [],
	          totalResults: this._totalResults,
	          startIndex: this._baseOffset
	        });
	        startPageIndex = 0;
	      } else {
	        // start requesting the first page
	        request = this.fetchPage(0, maxCount);
	        startPageIndex = 1;
	      }
	      var requests = [request];
	
	      // cancel requests when issued a cancel event
	      emitter.on('cancel', function () {
	        requests.forEach(function (req) {
	          if (isCancellable(req)) {
	            req.cancel();
	          }
	        });
	      });
	
	      var hasError = false;
	      var onError = function onError(error) {
	        hasError = true;
	        emitter.emit('error', error);
	        return error;
	      };
	
	      request.catch(onError).then(function (firstPage) {
	        if (hasError) {
	          throw firstPage;
	        }
	        // save the first page as a resolved promise (for later use when
	        // collecting results in a uniform fashion) in case it was fetched
	        var newRequests = [];
	        if (startPageIndex === 1) {
	          newRequests.push(Promise.resolve(firstPage));
	        }
	        var usedMaxCount = maxCount ? Math.min(maxCount, firstPage.totalResults - firstPage.startIndex + _this5._url.indexOffset) : firstPage.totalResults;
	
	        // determine the number of pages and issue a request for each
	        var numPages = firstPage.itemsPerPage ? Math.ceil(usedMaxCount / firstPage.itemsPerPage) : 1;
	        for (var i = startPageIndex; i < numPages; ++i) {
	          var count = firstPage.itemsPerPage;
	          if (firstPage.itemsPerPage * (i + 1) > usedMaxCount) {
	            count = usedMaxCount - firstPage.itemsPerPage * i;
	          }
	          newRequests.push(_this5.fetchPage(i, count));
	        }
	
	        // save the requests in the global variable to allow cancellation/result collection
	        requests = newRequests;
	
	        var pages = Array(requests.length);
	
	        if (preserveOrder) {
	          (function () {
	            // when the order of the the responses is important, the algorithm is
	            // more complex
	            var index = 0;
	            var allRequests = Array.from(requests);
	            var onPage = function onPage(page) {
	              if (hasError) {
	                return;
	              }
	              pages[index] = page;
	              index += 1;
	              emitter.emit('page', page);
	              var promise = allRequests.shift();
	              if (promise) {
	                promise.then(onPage, onError);
	              } else {
	                emitter.emit('success', combinePages(pages)); // TODO:
	              }
	            };
	            allRequests.shift().then(onPage, onError);
	          })();
	        } else {
	          (function () {
	            var successCount = 0;
	            requests.forEach(function (req, index) {
	              req.then(function (page) {
	                if (hasError) {
	                  return;
	                }
	                successCount += 1;
	                pages[index] = page;
	                if (successCount === requests.length) {
	                  emitter.emit('success', combinePages(pages)); // TODO
	                }
	              }, onError);
	            });
	          })();
	        }
	      });
	      return emitter;
	    }
	
	    /**
	     * Returns the actual page size.
	     * @returns {int} The computed page size.
	     */
	
	  }, {
	    key: 'getActualPageSize',
	    value: function getActualPageSize() {
	      if (this._preferredItemsPerPage && this._serverItemsPerPage) {
	        return Math.min(this._preferredItemsPerPage, this._serverItemsPerPage);
	      } else if (this._serverItemsPerPage) {
	        return this._serverItemsPerPage;
	      } else if (this._preferredItemsPerPage) {
	        return this._preferredItemsPerPage;
	      }
	      var countParam = this._url.getParameter('count');
	      if (countParam) {
	        if (typeof countParam.maxExclusive !== 'undefined') {
	          return countParam.maxExclusive - 1;
	        } else if (countParam.maxInclusive) {
	          return countParam.maxInclusive;
	        }
	      }
	      return undefined;
	    }
	
	    /**
	     * Returns the computed number of pages, which is available once the first page
	     * was received.
	     * @returns {int} The number of pages.
	     */
	
	  }, {
	    key: 'getPageCount',
	    value: function getPageCount() {
	      var pageSize = this.getActualPageSize();
	      if (!this._totalResults) {
	        return this._totalResults;
	      } else if (!pageSize) {
	        return undefined;
	      }
	      return Math.ceil(this._totalResults / pageSize);
	    }
	  }]);
	
	  return OpenSearchPaginator;
	}();
	/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(27)))

/***/ }),
/* 310 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	
	var _slicedToArray = function () {
	  function sliceIterator(arr, i) {
	    var _arr = [];var _n = true;var _d = false;var _e = undefined;try {
	      for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {
	        _arr.push(_s.value);if (i && _arr.length === i) break;
	      }
	    } catch (err) {
	      _d = true;_e = err;
	    } finally {
	      try {
	        if (!_n && _i["return"]) _i["return"]();
	      } finally {
	        if (_d) throw _e;
	      }
	    }return _arr;
	  }return function (arr, i) {
	    if (Array.isArray(arr)) {
	      return arr;
	    } else if (Symbol.iterator in Object(arr)) {
	      return sliceIterator(arr, i);
	    } else {
	      throw new TypeError("Invalid attempt to destructure non-iterable instance");
	    }
	  };
	}(); /* eslint no-underscore-dangle:
	       ["error", { "allow": ["_parametersByName", "_parametersByType"] }]
	     */
	
	exports.createBaseRequest = createBaseRequest;
	exports.search = search;
	
	var _urlParse = __webpack_require__(164);
	
	var _urlParse2 = _interopRequireDefault(_urlParse);
	
	var _formats = __webpack_require__(189);
	
	var _utils = __webpack_require__(49);
	
	var _error = __webpack_require__(658);
	
	var _config2 = __webpack_require__(151);
	
	function _interopRequireDefault(obj) {
	  return obj && obj.__esModule ? obj : { default: obj };
	}
	
	/**
	 * @module opensearch/search
	 */
	
	/**
	 * @typedef module:opensearch/search.BaseRequest
	 * @type Object
	 * @property {string} url The URL of the search service.
	 * @property {string} method The ussed HTTP method.
	 * @property {object} [headers] Optional HTTP headers.
	 * @property {string|FormData} [body] The body to be sent to the search service.
	 *                                    (For HTTP POST requests)
	 */
	
	/**
	 * Returns an object that can be transformed into a fetch Request or an
	 * XMLHttpRequest.
	 * @param {string} url The url to send the search request to.
	 * @param {object} parameterValues The search parameter values.
	 * @param {boolean} [options.dropEmptyParameters=false] Whether unused parameter keys shall
	 *                                                      be dropped from the request.
	 * @param {object} headers Additional headers to set on the request.
	 * @returns {module:opensearch/search.BaseRequest} The constructed base request object.
	 */
	function createBaseRequest(url, parameterValues, dropEmptyParameters, headers) {
	  // check parameters
	  Object.keys(parameterValues).forEach(function (key) {
	    if (!Object.prototype.hasOwnProperty.call(url._parametersByType, key) && !Object.prototype.hasOwnProperty.call(url._parametersByName, key)) {
	      throw new Error('Invalid parameter \'' + key + '\'.');
	    }
	  });
	
	  var missingMandatoryParameters = url.getMissingMandatoryParameters(parameterValues).map(function (parameter) {
	    return parameter.type;
	  });
	
	  if (missingMandatoryParameters.length) {
	    throw new Error('Missing mandatory parameters: ' + missingMandatoryParameters.join(', '));
	  }
	
	  // serialize the parameters
	  var serialized = url.serializeValues(parameterValues);
	
	  // depending on the request method, create the request 'body' or query string
	  if (url.method === 'GET') {
	    // insert parameters into URL template
	    var urlString = url.url;
	
	    for (var i = 0; i < serialized.length; ++i) {
	      var _serialized$i = _slicedToArray(serialized[i], 3),
	          type = _serialized$i[1],
	          value = _serialized$i[2];
	
	      urlString = urlString.replace(new RegExp('{' + type + '[?]?}'), value);
	    }
	
	    if (dropEmptyParameters) {
	      var parsed = (0, _urlParse2.default)(urlString, false);
	      var query = parsed.query.split('&').map(function (param) {
	        return param.split('=');
	      }).filter(function (paramParts) {
	        return paramParts[1] !== '';
	      }).map(function (paramParts) {
	        return paramParts.join('=');
	      }).join('&');
	
	      parsed.set('query', query);
	      urlString = parsed.toString();
	    }
	
	    return {
	      method: url.method,
	      url: urlString,
	      headers: headers
	    };
	  }
	
	  // for POST
	  var enctype = url.enctype || 'application/x-www-form-urlencoded';
	  var body = null;
	  if (enctype === 'application/x-www-form-urlencoded') {
	    body = serialized.map(function (_ref) {
	      var _ref2 = _slicedToArray(_ref, 3),
	          name = _ref2[0],
	          value = _ref2[2];
	
	      return encodeURIComponent(name) + '=' + encodeURIComponent(value);
	    }).join('&');
	  } else if (enctype === 'multipart/form-data') {
	    body = new FormData();
	    serialized.forEach(function (_ref3) {
	      var _ref4 = _slicedToArray(_ref3, 3),
	          name = _ref4[0],
	          value = _ref4[2];
	
	      return body.append(name, value);
	    });
	  } else {
	    throw new Error('Unsupported enctype \'' + enctype + '\'.');
	  }
	
	  return {
	    method: url.method,
	    url: url.url,
	    headers: {
	      'Content-Type': enctype
	    },
	    body: body
	  };
	}
	
	/**
	 * Performs a search for the given URL and parameters.
	 * @param {OpenSearchUrl} url The URL to search on.
	 * @param {object} [parameters={}] The search parameters.
	 * @param {object} [options={}] Additional options.
	 * @param {string} [options.type=null] The response format.
	 * @param {boolean} [options.raw=false] Whether the response shall be parsed or returned raw.
	 * @param {number} [options.maxUrlLength=undefined] The maximum URL length.
	 *                                                  URLs longer than that
	 *                                                  will result in errors.
	 * @param {boolean} [options.dropEmptyParameters=false] Whether unused parameter keys shall
	 *                                                      be dropped from the request.
	 * @param {object} [options.parseOptions=undefined] Additional options for the format.
	 * @param {object} [options.headers=undefined] Specific headers to send to the service.
	 * @returns {Promise<SearchResult>|Promise<Response>} The search result as a Promise
	 */
	function search(url) {
	  var parameters = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
	  var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
	  var type = options.type,
	      raw = options.raw,
	      maxUrlLength = options.maxUrlLength,
	      dropEmptyParameters = options.dropEmptyParameters,
	      parseOptions = options.parseOptions,
	      headers = options.headers;
	
	  var baseRequest = createBaseRequest(url, parameters, dropEmptyParameters, headers);
	
	  var _config = (0, _config2.config)(),
	      useXHR = _config.useXHR,
	      Promise = _config.Promise;
	
	  if (typeof maxUrlLength !== 'undefined' && baseRequest.url.length > maxUrlLength) {
	    return Promise.reject(new Error('Search URL too long: ' + baseRequest.url.length + ', maximum: ' + maxUrlLength));
	  }
	
	  var request = null;
	
	  // Decide whether to use XHR or fetch
	  if (useXHR) {
	    request = new Promise(function (resolve, reject, onCancel) {
	      var xhr = (0, _utils.createXHR)(baseRequest.url, baseRequest);
	      xhr.onload = function () {
	        if (raw) {
	          resolve(xhr);
	        }
	        resolve([xhr.responseText, xhr.status]);
	      };
	
	      xhr.onerror = function () {
	        reject(new TypeError('Failed to fetch'));
	      };
	
	      // set up cancellation if available
	      if (onCancel && typeof onCancel === 'function') {
	        onCancel(function () {
	          xhr.abort();
	        });
	      }
	    });
	  } else {
	    // fetch API
	    request = fetch((0, _utils.createRequest)(baseRequest.url, baseRequest));
	    if (raw) {
	      return request;
	    }
	    request = request.then(function (response) {
	      return response.text().then(function (text) {
	        return [text, response.status];
	      });
	    });
	  }
	
	  // postprocess, check for error and parse result
	  return request.then(function (_ref5) {
	    var _ref6 = _slicedToArray(_ref5, 2),
	        text = _ref6[0],
	        status = _ref6[1];
	
	    if (status >= 400) {
	      var error = (0, _error.getErrorFromXml)(text);
	      throw error || new Error(text);
	    }
	    var format = (0, _formats.getFormat)(type || url.type);
	    if (!format) {
	      throw new Error('Could not parse response of type \'' + type + '\'.');
	    }
	    return format.parse(text, parseOptions);
	  });
	}

/***/ }),
/* 311 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	var implementation = __webpack_require__(515);
	
	var supportsDescriptors = __webpack_require__(134).supportsDescriptors;
	var $gOPD = Object.getOwnPropertyDescriptor;
	var $TypeError = TypeError;
	
	module.exports = function getPolyfill() {
		if (!supportsDescriptors) {
			throw new $TypeError('RegExp.prototype.flags requires a true ES5 environment that supports property descriptors');
		}
		if (/a/mig.flags === 'gim') {
			var descriptor = $gOPD(RegExp.prototype, 'flags');
			if (descriptor && typeof descriptor.get === 'function' && typeof /a/.dotAll === 'boolean') {
				return descriptor.get;
			}
		}
		return implementation;
	};

/***/ }),
/* 312 */
/***/ (function(module, exports, __webpack_require__) {

	/* WEBPACK VAR INJECTION */(function(Promise) {'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	
	var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
	
	var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
	
	exports.readFileAsArraybuffer = readFileAsArraybuffer;
	exports.readAsText = readAsText;
	exports.premultiplyColor = premultiplyColor;
	exports.parseFeaturesFromFiles = parseFeaturesFromFiles;
	exports.sizeChangedEvent = sizeChangedEvent;
	exports.updateConfigBySearchParams = updateConfigBySearchParams;
	exports.updateFiltersBySearchParams = updateFiltersBySearchParams;
	exports.setSearchParamsFilterChange = setSearchParamsFilterChange;
	
	var _parseColor = __webpack_require__(667);
	
	var _parseColor2 = _interopRequireDefault(_parseColor);
	
	var _shpjs = __webpack_require__(1104);
	
	var _shpjs2 = _interopRequireDefault(_shpjs);
	
	var _moment = __webpack_require__(2);
	
	var _moment2 = _interopRequireDefault(_moment);
	
	var _utils = __webpack_require__(141);
	
	var _util = __webpack_require__(120);
	
	var _togeojson = __webpack_require__(521);
	
	var _jszip = __webpack_require__(366);
	
	var _jszip2 = _interopRequireDefault(_jszip);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
	
	function readFileAsArraybuffer(file) {
	  return new Promise(function (resolve, reject) {
	    var fileReader = new FileReader();
	    fileReader.onload = function () {
	      resolve(fileReader.result);
	    };
	    fileReader.onerror = function () {
	      reject(fileReader.error);
	    };
	    fileReader.readAsArrayBuffer(file);
	  });
	}
	
	function readAsText(file) {
	  return new Promise(function (resolve, reject) {
	    var fileReader = new FileReader();
	    fileReader.onload = function () {
	      resolve(fileReader.result);
	    };
	    fileReader.onerror = function () {
	      reject(fileReader.error);
	    };
	    fileReader.readAsText(file);
	  });
	}
	
	function premultiplyColor(colorDef) {
	  var rgba = (0, _parseColor2.default)(colorDef).rgba;
	  var a = rgba ? rgba[3] : undefined;
	  if (typeof rgba[3] !== 'undefined' && rgba[3] !== 1) {
	    var _rgba = _slicedToArray(rgba, 3),
	        r = _rgba[0],
	        g = _rgba[1],
	        b = _rgba[2];
	
	    r = Math.min(255, r * a + 255 * (1 - a));
	    g = Math.min(255, g * a + 255 * (1 - a));
	    b = Math.min(255, b * a + 255 * (1 - a));
	    return 'rgb(' + r + ', ' + g + ', ' + b + ')';
	  }
	  return colorDef;
	}
	
	var dbfMimes = new Set(['application/dbase', 'application/x-dbase', 'application/dbf', 'application/x-dbf']);
	var jsonMimes = new Set(['application/json', 'text/json', 'text/x-json']);
	var kmlMimes = new Set(['application/vnd.google-earth.kml+xml']);
	var kmzMimes = new Set(['application/vnd.google-earth.kmz']);
	
	function parseFeaturesFromFiles(fileList) {
	  var files = void 0;
	  if (Array.isArray(fileList)) {
	    files = fileList;
	  } else {
	    files = Array.from(fileList);
	  }
	
	  var zipFile = files.find(function (file) {
	    return file.type === 'application/zip' || /\.zip$/i.test(file.name);
	  });
	  var shpFile = files.find(function (file) {
	    return (/\.shp$/i.test(file.name)
	    );
	  }); // TODO: no mime?
	  var dbfFile = files.find(function (file) {
	    return dbfMimes.has(file.type) || /\.dbf$/i.test(file.name);
	  });
	  var jsonFile = files.find(function (file) {
	    return jsonMimes.has(file.type) || /\.json$/i.test(file.name);
	  });
	  var kmlFile = files.find(function (file) {
	    return kmlMimes.has(file.type) || /\.kml$/i.test(file.name);
	  });
	  var kmzFile = files.find(function (file) {
	    return kmzMimes.has(file.type) || /\.kmz$/i.test(file.name);
	  });
	
	  if (zipFile) {
	    return readFileAsArraybuffer(zipFile).then(function (data) {
	      return (0, _shpjs2.default)(data).features;
	    });
	  } else if (shpFile && dbfFile) {
	    return Promise.all([readFileAsArraybuffer(shpFile), readFileAsArraybuffer(dbfFile)]).then(function (_ref) {
	      var _ref2 = _slicedToArray(_ref, 2),
	          shpBuffer = _ref2[0],
	          dbfBuffer = _ref2[1];
	
	      return _shpjs2.default.combine([_shpjs2.default.parseShp(shpBuffer), _shpjs2.default.parseDbf(dbfBuffer)]).features;
	    });
	  } else if (kmlFile) {
	    return readAsText(kmlFile).then(function (text) {
	      var content = (0, _togeojson.kml)(new DOMParser().parseFromString(text, 'text/xml'));
	      if (content.type === 'Feature') {
	        return [content];
	      } else if (content.type === 'FeatureCollection') {
	        return content.features;
	      }
	      throw new Error('File content is not valid KML');
	    });
	  } else if (kmzFile) {
	    return readFileAsArraybuffer(kmzFile).then(function (buffer) {
	      var zip = (0, _jszip2.default)(buffer);
	      var features = [];
	      zip.file(/.+/).forEach(function (a) {
	        if (a.name.slice(-3).toLowerCase() === 'kml') {
	          var content = (0, _togeojson.kml)(new DOMParser().parseFromString(a.asText(), 'text/xml'));
	          if (content.type === 'Feature') {
	            features.push(content);
	          } else if (content.type === 'FeatureCollection') {
	            features.push.apply(features, _toConsumableArray(content.features));
	          }
	        }
	      });
	      return features;
	    });
	  } else if (shpFile) {
	    return readFileAsArraybuffer(shpFile).then(function (shpBuffer) {
	      return _shpjs2.default.parseShp(shpBuffer).map(function (geometry) {
	        return { type: 'Feature', properties: {}, geometry: geometry };
	      });
	    });
	  } else if (jsonFile) {
	    return readAsText(jsonFile).then(function (text) {
	      var content = JSON.parse(text);
	      if (content.type === 'Feature') {
	        return [content];
	      } else if (content.type === 'FeatureCollection') {
	        return content.features;
	      }
	      throw new Error('File content is not valid GeoJSON');
	    });
	  }
	  return Promise.reject('Could not parse any features from the given file' + (files.length === 1 ? '' : 's') + '.');
	}
	
	function sizeChangedEvent(handleFunction) {
	  // a Jquery plugin function that fires an event when the size of an element is changed
	  // usage: $.fn.sizeChanged = sizeChangedEvent;
	  // $().sizeChanged(function(){})
	  var element = this;
	  var lastWidth = element.width();
	  var lastHeight = element.height();
	
	  setInterval(function () {
	    if (lastWidth === element.width() && lastHeight === element.height()) {
	      return;
	    }
	    if (typeof handleFunction === 'function') {
	      handleFunction({ width: lastWidth, height: lastHeight }, { width: element.width(), height: element.height() });
	      lastWidth = element.width();
	      lastHeight = element.height();
	    }
	  }, 200);
	  return element;
	}
	
	function updateConfigBySearchParams(config) {
	  if (config.disableSearchParams) {
	    return config;
	  }
	  // extracts search parameters in url and update settings replacing keys with user supported ones
	  var configUpdate = Object.assign({}, config);
	  var params = new URLSearchParams(window.location.search);
	  // validate and set time filter
	  var timeStartStr = params.get('timestart') || params.get('time_start');
	  var timeEndStr = params.get('timeend') || params.get('time_end');
	  if (typeof timeStartStr === 'string' && typeof timeEndStr === 'string') {
	    var timestart = _moment2.default.utc(timeStartStr).toDate();
	    var timeend = _moment2.default.utc(timeEndStr).toDate();
	    // validate start with timeDomain
	    if (timestart >= _moment2.default.utc(config.timeDomain[0]).toDate() && timestart <= _moment2.default.utc(config.timeDomain[1]).toDate()) {
	      configUpdate.selectedTimeDomain[0] = timestart;
	      // validate timeend vs timestart
	      if (timeend - timestart === 0 || timeend < timestart) {
	        timeend = _moment2.default.utc(timestart).add(1, 'days');
	      }
	      // end needs more validation
	      var selectableInterval = (0, _utils.parseDuration)(config.selectableInterval);
	      if (selectableInterval !== null) {
	        if (timeend - timestart > selectableInterval * 1000) {
	          // shorten interval to selectableInterval
	          timeend = _moment2.default.utc(timestart).add(selectableInterval, 'seconds').toDate();
	        }
	      }
	      if (timeend > _moment2.default.utc(config.timeDomain[1]).toDate()) {
	        timeend = _moment2.default.utc(config.timeDomain[1]).toDate();
	      }
	      configUpdate.selectedTimeDomain[1] = timeend;
	      // modify display time to show 1.1 * larger area on timeSlider to make dragging easier
	      var timeDiff = timeend - timestart;
	      var displayTimeStart = _moment2.default.utc(timestart).subtract(timeDiff * 0.05, 'milliseconds').toDate();
	      var displayTimeEnd = _moment2.default.utc(timeend).add(timeDiff * 0.05, 'milliseconds').toDate();
	      configUpdate.displayTimeDomain = [displayTimeStart, displayTimeEnd];
	    }
	  }
	  // set map position
	  var xStr = params.get('x');
	  var yStr = params.get('y');
	  if (typeof xStr === 'string' && typeof yStr === 'string') {
	    var x = parseFloat(xStr.replace(',', '.'));
	    var y = parseFloat(yStr.replace(',', '.'));
	    if (!isNaN(x) && !isNaN(y)) {
	      // TODO: validate if actually fits into CRS bounds if necessary
	      configUpdate.center = [x, y];
	    }
	  }
	  // set map zoom
	  var zStr = params.get('z');
	  if (typeof xStr === 'string' && typeof yStr === 'string') {
	    var z = parseInt(zStr.replace(',', '.'), 10);
	    if (!isNaN(z)) {
	      // not checking maxzoom or minzoom on layers/main config, it is validated by OL anyway
	      configUpdate.zoom = z - 1;
	    }
	  }
	  return configUpdate;
	}
	
	function updateFiltersBySearchParams(layerCollection) {
	  // for single layer mode, update values of search filters from url search params
	  var params = new URLSearchParams(window.location.search);
	  var configuredFilters = layerCollection[0].get('search.parameters') || [];
	  configuredFilters.forEach(function (filter, i) {
	    var searchParam = params.get(filter.type);
	    // unable to overwrite fixed parameters
	    if (searchParam !== null && !filter.fixed) {
	      // validate if allowed
	      if (filter.options) {
	        filter.options.forEach(function (opt) {
	          if (opt.value === searchParam) {
	            layerCollection[0].get('search.parameters')[i].default = searchParam;
	          }
	        });
	      } else if (filter.range) {
	        // compare to config min/max, validate numerical
	        var minmax = searchParam.replace('(').replace(')').split(',').map(function (num) {
	          return parseInt(num, 10);
	        }).filter(function (isnum) {
	          return !isNaN(isnum);
	        });
	        if (minmax.length === 1) {
	          // assume user input just maxnumber
	          var max = minmax[0] <= filter.max ? minmax[0] : filter.max;
	          layerCollection[0].get('search.parameters')[i].default = {
	            min: filter.min,
	            max: max
	          };
	        } else if (minmax.length === 2) {
	          // normal case when user sets start,end
	          var min = minmax[0] >= filter.min ? minmax[0] : filter.min;
	          var _max = minmax[1] <= filter.max ? minmax[1] : filter.max;
	          layerCollection[0].get('search.parameters')[i].default = {
	            min: min,
	            max: _max
	          };
	        }
	      } else {
	        layerCollection[0].get('search.parameters')[i].default = searchParam;
	      }
	    }
	  });
	}
	
	function setSearchParamsFilterChange(filtersModel) {
	  // for each key in changed, update params
	  var changed = filtersModel.changed;
	  Object.entries(changed).forEach(function (_ref3) {
	    var _ref4 = _slicedToArray(_ref3, 2),
	        key = _ref4[0],
	        value = _ref4[1];
	
	    if ((typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object') {
	      // range min/max filters special encoding as filter=a,b
	      if (Object.keys(value).includes('min') && Object.keys(value).includes('max')) {
	        var rangeValue = value.min + ',' + value.max;
	        (0, _util.setSearchParam)(key, rangeValue);
	      }
	    } else {
	      (0, _util.setSearchParam)(key, value);
	    }
	  });
	}
	/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(27)))

/***/ }),
/* 313 */
/***/ (function(module, exports, __webpack_require__) {

	"use strict";
	module.exports = function(NEXT_FILTER) {
	var util = __webpack_require__(17);
	var getKeys = __webpack_require__(89).keys;
	var tryCatch = util.tryCatch;
	var errorObj = util.errorObj;
	
	function catchFilter(instances, cb, promise) {
	    return function(e) {
	        var boundTo = promise._boundValue();
	        predicateLoop: for (var i = 0; i < instances.length; ++i) {
	            var item = instances[i];
	
	            if (item === Error ||
	                (item != null && item.prototype instanceof Error)) {
	                if (e instanceof item) {
	                    return tryCatch(cb).call(boundTo, e);
	                }
	            } else if (typeof item === "function") {
	                var matchesPredicate = tryCatch(item).call(boundTo, e);
	                if (matchesPredicate === errorObj) {
	                    return matchesPredicate;
	                } else if (matchesPredicate) {
	                    return tryCatch(cb).call(boundTo, e);
	                }
	            } else if (util.isObject(e)) {
	                var keys = getKeys(item);
	                for (var j = 0; j < keys.length; ++j) {
	                    var key = keys[j];
	                    if (item[key] != e[key]) {
	                        continue predicateLoop;
	                    }
	                }
	                return tryCatch(cb).call(boundTo, e);
	            }
	        }
	        return NEXT_FILTER;
	    };
	}
	
	return catchFilter;
	};


/***/ }),
/* 314 */
/***/ (function(module, exports, __webpack_require__) {

	"use strict";
	var util = __webpack_require__(17);
	var maybeWrapAsError = util.maybeWrapAsError;
	var errors = __webpack_require__(75);
	var OperationalError = errors.OperationalError;
	var es5 = __webpack_require__(89);
	
	function isUntypedError(obj) {
	    return obj instanceof Error &&
	        es5.getPrototypeOf(obj) === Error.prototype;
	}
	
	var rErrorKey = /^(?:name|message|stack|cause)$/;
	function wrapAsOperationalError(obj) {
	    var ret;
	    if (isUntypedError(obj)) {
	        ret = new OperationalError(obj);
	        ret.name = obj.name;
	        ret.message = obj.message;
	        ret.stack = obj.stack;
	        var keys = es5.keys(obj);
	        for (var i = 0; i < keys.length; ++i) {
	            var key = keys[i];
	            if (!rErrorKey.test(key)) {
	                ret[key] = obj[key];
	            }
	        }
	        return ret;
	    }
	    util.markAsOriginatingFromRejection(obj);
	    return obj;
	}
	
	function nodebackForPromise(promise, multiArgs) {
	    return function(err, value) {
	        if (promise === null) return;
	        if (err) {
	            var wrapped = wrapAsOperationalError(maybeWrapAsError(err));
	            promise._attachExtraTrace(wrapped);
	            promise._reject(wrapped);
	        } else if (!multiArgs) {
	            promise._fulfill(value);
	        } else {
	            var $_len = arguments.length;var args = new Array(Math.max($_len - 1, 0)); for(var $_i = 1; $_i < $_len; ++$_i) {args[$_i - 1] = arguments[$_i];};
	            promise._fulfill(args);
	        }
	        promise = null;
	    };
	}
	
	module.exports = nodebackForPromise;


/***/ }),
/* 315 */
/***/ (function(module, exports, __webpack_require__) {

	var Dataset, EventEmitter, after, debounce,
	  extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
	  hasProp = {}.hasOwnProperty,
	  slice = [].slice;
	
	debounce = __webpack_require__(351);
	
	EventEmitter = __webpack_require__(317);
	
	after = __webpack_require__(109).after;
	
	Dataset = (function(superClass) {
	  extend(Dataset, superClass);
	
	  function Dataset(arg) {
	    var debounceTime;
	    this.id = arg.id, this.color = arg.color, this.noBorder = arg.noBorder, this.highlightFillColor = arg.highlightFillColor, this.highlightStrokeColor = arg.highlightStrokeColor, this.source = arg.source, this.sourceParams = arg.sourceParams, this.index = arg.index, this.records = arg.records, this.paths = arg.paths, this.lineplot = arg.lineplot, this.ordinal = arg.ordinal, this.element = arg.element, debounceTime = arg.debounceTime;
	    this.fetchDebounced = debounce(this.doFetch, debounceTime);
	    this.currentSyncState = 0;
	    this.lastSyncState = 0;
	    this.recordHighlights = [];
	    Dataset.__super__.constructor.call(this, this.element[0][0], 'syncing', 'synced');
	  }
	
	  Dataset.prototype.getSource = function() {
	    return this.source;
	  };
	
	  Dataset.prototype.setSource = function(source1) {
	    this.source = source1;
	  };
	
	  Dataset.prototype.setRecords = function(records1) {
	    this.records = records1;
	  };
	
	  Dataset.prototype.getRecords = function() {
	    return this.records;
	  };
	
	  Dataset.prototype.setPaths = function(paths) {
	    this.paths = paths;
	  };
	
	  Dataset.prototype.getPaths = function() {
	    return this.paths;
	  };
	
	  Dataset.prototype.sync = function() {
	    var args;
	    args = 1 <= arguments.length ? slice.call(arguments, 0) : [];
	    return this.fetchDebounced.apply(this, args);
	  };
	
	  Dataset.prototype.isSyncing = function() {
	    return !(this.lastSyncState === this.currentSyncState);
	  };
	
	  Dataset.prototype.getSourceFunction = function(source) {
	    if (source && typeof source.fetch === 'function') {
	      return (function(_this) {
	        return function() {
	          var args;
	          args = 1 <= arguments.length ? slice.call(arguments, 0) : [];
	          return source.fetch.apply(source, args);
	        };
	      })(this);
	    } else if (typeof source === 'function') {
	      return source;
	    }
	  };
	
	  Dataset.prototype.doFetch = function(start, end, params) {
	    var fetched, source, syncState;
	    this.currentSyncState += 1;
	    syncState = this.currentSyncState;
	    this.listeners.syncing();
	    fetched = (function(_this) {
	      return function(records) {
	        if (syncState > _this.lastSyncState) {
	          _this.lastSyncState = syncState;
	        }
	        if (syncState === _this.currentSyncState) {
	          if (!_this.cache) {
	            _this.records = _this.postprocess(records);
	          }
	          return _this.listeners.synced();
	        }
	      };
	    })(this);
	    if (this.source) {
	      source = this.getSourceFunction(this.source);
	    } else {
	      if (syncState > this.lastSyncState) {
	        this.lastSyncState = syncState;
	      }
	      this.listeners.synced();
	      return;
	    }
	    if (this.cache) {
	      return this.doFetchWithCache(start, end, params, source, fetched);
	    } else {
	      return source(start, end, this.sourceParams, fetched);
	    }
	  };
	
	  Dataset.prototype.doFetchWithCache = function(start, end, params, source, fetched) {
	    var i, interval, len, missingIntervals, ref, results, summaryCallback;
	    missingIntervals = this.cache.getMissing(start, end);
	    if (missingIntervals.length === 0) {
	      return fetched(this.cache.get(start, end));
	    } else {
	      summaryCallback = after(missingIntervals.length, (function(_this) {
	        return function() {
	          return fetched(_this.cache.get(start, end));
	        };
	      })(this));
	      results = [];
	      for (i = 0, len = missingIntervals.length; i < len; i++) {
	        interval = missingIntervals[i];
	        (ref = this.cache).reserve.apply(ref, interval);
	        results.push(source(interval[0], interval[1], this.sourceParams, (function(_this) {
	          return function(records) {
	            _this.cache.add(interval[0], interval[1], _this.postprocess(records));
	            _this.listeners.synced();
	            return summaryCallback();
	          };
	        })(this)));
	      }
	      return results;
	    }
	  };
	
	  Dataset.prototype.postprocess = function(records) {
	    return records;
	  };
	
	  Dataset.prototype.draw = function() {};
	
	  Dataset.prototype.clearCaches = function() {};
	
	  Dataset.prototype.setRecordHighlights = function(recordHighlights) {
	    this.recordHighlights = recordHighlights;
	  };
	
	  return Dataset;
	
	})(EventEmitter);
	
	module.exports = Dataset;


/***/ }),
/* 316 */
/***/ (function(module, exports, __webpack_require__) {

	var Dataset, RecordCache, RecordDataset, centerTooltipOn, intersects, pixelDistance, pixelMaxDifference, pixelWidth, ref, split,
	  bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; },
	  extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
	  hasProp = {}.hasOwnProperty,
	  slice = [].slice;
	
	Dataset = __webpack_require__(315);
	
	RecordCache = __webpack_require__(728);
	
	ref = __webpack_require__(109), centerTooltipOn = ref.centerTooltipOn, split = ref.split, intersects = ref.intersects, pixelWidth = ref.pixelWidth, pixelDistance = ref.pixelDistance, pixelMaxDifference = ref.pixelMaxDifference;
	
	RecordDataset = (function(superClass) {
	  extend(RecordDataset, superClass);
	
	  function RecordDataset(options) {
	    this.clusterReducer = bind(this.clusterReducer, this);
	    var cacheIdField, cacheRecords;
	    this.histogramThreshold = options.histogramThreshold, this.histogramBinCount = options.histogramBinCount, this.cluster = options.cluster;
	    cacheIdField = options.cacheIdField, cacheRecords = options.cacheRecords;
	    if (cacheRecords) {
	      this.cache = new RecordCache(cacheIdField);
	    }
	    RecordDataset.__super__.constructor.call(this, options);
	  }
	
	  RecordDataset.prototype.postprocess = function(records) {
	    return records.map(function(record) {
	      if (record instanceof Date) {
	        record = [record, record];
	      } else if (!(record[1] instanceof Date)) {
	        record = [record[0], record[0]].concat(record.slice(1));
	      }
	      return record;
	    });
	  };
	
	  RecordDataset.prototype.draw = function(start, end, options) {
	    var data, highlightPoints, highlightRanges, interval, missingIntervals, points, ranges, recordHighlights, records, reducer, ref1, ref2, scales, x;
	    scales = options.scales;
	    if (this.cache) {
	      records = this.cache.get(start, end);
	      missingIntervals = this.cache.getMissing(start, end);
	    } else {
	      records = this.records || [];
	      missingIntervals = [];
	    }
	    interval = [start, end];
	    records = records.filter(function(record) {
	      if (record[1] instanceof Date) {
	        return intersects(record, interval);
	      }
	      return intersects([record[0], record[0]], interval);
	    });
	    if ((this.histogramThreshold != null) && records.length >= this.histogramThreshold) {
	      this.element.selectAll('.record,.highlight-record').remove();
	      data = records.map((function(_this) {
	        return function(record) {
	          return new Date(record[0] + (record[1] - record[0]) / 2);
	        };
	      })(this));
	      this.drawHistogram(records, scales, options);
	      return this.drawMissing(missingIntervals, true, scales, options);
	    } else {
	      this.element.selectAll('.bin').remove();
	      x = scales.x;
	      if (this.cluster) {
	        reducer = (function(_this) {
	          return function() {
	            var args;
	            args = 1 <= arguments.length ? slice.call(arguments, 0) : [];
	            return _this.clusterReducer.apply(_this, slice.call(args).concat([x]));
	          };
	        })(this);
	        records = records.reduce(reducer, []).map(function(r) {
	          if (r.cluster) {
	            return r;
	          } else {
	            return [r[0], r[1], r[2][0][2]];
	          }
	        });
	      }
	      ref1 = split(records, (function(_this) {
	        return function(r) {
	          return _this.drawAsPoint(r, x);
	        };
	      })(this)), points = ref1[0], ranges = ref1[1];
	      this.drawRanges(ranges, scales, options);
	      this.drawPoints(points, scales, options);
	      recordHighlights = this.recordHighlights;
	      if (this.cluster) {
	        reducer = (function(_this) {
	          return function() {
	            var args;
	            args = 1 <= arguments.length ? slice.call(arguments, 0) : [];
	            return _this.clusterReducer.apply(_this, slice.call(args).concat([x]));
	          };
	        })(this);
	        recordHighlights = recordHighlights.reduce(reducer, []).map(function(r) {
	          if (r.cluster) {
	            return r;
	          } else {
	            return [r[0], r[1], r[2][0][2]];
	          }
	        });
	      }
	      ref2 = split(recordHighlights, (function(_this) {
	        return function(r) {
	          return _this.drawAsPoint(r, x);
	        };
	      })(this)), highlightPoints = ref2[0], highlightRanges = ref2[1];
	      this.drawRanges(highlightRanges, scales, options, true);
	      this.drawPoints(highlightPoints, scales, options, true);
	      return this.drawMissing(missingIntervals, false, scales, options);
	    }
	  };
	
	  RecordDataset.prototype.drawAsPoint = function(record, scale) {
	    return pixelWidth(record, scale) < 5;
	  };
	
	  RecordDataset.prototype.clusterReducer = function(acc, current, index, array, x) {
	    var intersecting, newBin, nonIntersecting, ref1, ref2;
	    if (this.drawAsPoint(current, x)) {
	      ref1 = split(acc, function(b) {
	        return pixelDistance(current, b, x) <= 5;
	      }), intersecting = ref1[0], nonIntersecting = ref1[1];
	    } else {
	      ref2 = split(acc, function(b) {
	        return intersects(current, b) && pixelMaxDifference(current, b, x) < 10;
	      }), intersecting = ref2[0], nonIntersecting = ref2[1];
	    }
	    if (intersecting.length) {
	      newBin = [
	        new Date(d3.min(intersecting, function(b) {
	          return b[0];
	        })), new Date(d3.max(intersecting, function(b) {
	          return b[1];
	        })), intersecting.map(function(b) {
	          return b[2];
	        }).reduce((function(a, r) {
	          return a.concat(r);
	        }), [])
	      ];
	      if (current[0] < newBin[0]) {
	        newBin[0] = current[0];
	      }
	      if (current[1] > newBin[1]) {
	        newBin[1] = current[1];
	      }
	      newBin[2].push(current);
	      newBin.cluster = true;
	      nonIntersecting.push(newBin);
	      return nonIntersecting;
	    } else {
	      acc.push([current[0], current[1], [current]]);
	    }
	    return acc;
	  };
	
	  RecordDataset.prototype.drawRanges = function(records, scales, options, highlight) {
	    var className, color, r, recordFilter, rect, strokeColor, ticksize;
	    if (highlight == null) {
	      highlight = false;
	    }
	    color = highlight ? this.highlightFillColor : this.color;
	    strokeColor = highlight ? this.highlightStrokeColor : this.noBorder ? d3.rgb(color) : d3.rgb(color).darker();
	    className = highlight ? 'highlight-record' : 'record';
	    ticksize = options.ticksize, recordFilter = options.recordFilter;
	    rect = (function(_this) {
	      return function(elem) {
	        return elem.attr('class', className).attr('x', function(record) {
	          return scales.x(new Date(record[0]));
	        }).attr('y', -(ticksize + 3) * _this.index + -(ticksize - 2)).attr('width', function(record) {
	          return scales.x(new Date(record[1])) - scales.x(new Date(record[0]));
	        }).attr('height', ticksize - 2).attr('stroke', strokeColor).attr('stroke-width', 1).attr('fill', function(record) {
	          if (highlight || (!recordFilter || recordFilter(record, _this))) {
	            return color;
	          } else {
	            return 'transparent';
	          }
	        });
	      };
	    })(this);
	    r = this.element.selectAll("rect." + className).data(records).call(rect);
	    r.enter().append('rect').call(rect).call((function(_this) {
	      return function(recordElement) {
	        if (!highlight) {
	          return _this.setupRecord(recordElement, options);
	        }
	      };
	    })(this));
	    return r.exit().remove();
	  };
	
	  RecordDataset.prototype.drawPoints = function(records, scales, options, highlight) {
	    var circle, className, color, p, recordFilter, strokeColor, ticksize;
	    if (highlight == null) {
	      highlight = false;
	    }
	    color = highlight ? this.highlightFillColor : this.color;
	    strokeColor = highlight ? this.highlightStrokeColor : this.noBorder ? d3.rgb(color) : d3.rgb(color).darker();
	    className = highlight ? 'highlight-record' : 'record';
	    ticksize = options.ticksize, recordFilter = options.recordFilter;
	    circle = (function(_this) {
	      return function(elem) {
	        return elem.attr('class', className).attr('cx', function(a) {
	          if (Array.isArray(a)) {
	            if (a[1] instanceof Date && a[0] !== a[1]) {
	              return scales.x(new Date(a[0].getTime() + Math.abs(a[1] - a[0]) / 2));
	            }
	            return scales.x(new Date(a[0]));
	          } else {
	            return scales.x(new Date(a));
	          }
	        }).attr('cy', -(ticksize + 3) * _this.index - (ticksize - 2) / 2).attr('stroke', strokeColor).attr('stroke-width', 1).attr('r', ticksize / 2).attr('fill', function(record) {
	          if (highlight || (!recordFilter || recordFilter(record, _this))) {
	            return color;
	          } else {
	            return 'transparent';
	          }
	        });
	      };
	    })(this);
	    p = this.element.selectAll("circle." + className).data(records).call(circle);
	    p.enter().append('circle').call(circle).call((function(_this) {
	      return function(recordElement) {
	        if (!highlight) {
	          return _this.setupRecord(recordElement, options);
	        }
	      };
	    })(this));
	    return p.exit().remove();
	  };
	
	  RecordDataset.prototype.drawHistogram = function(records, scales, options) {
	    var bars, bins, dx, ticks, y;
	    ticks = scales.x.ticks(this.histogramBinCount || 20);
	    dx = ticks[1] - ticks[0];
	    ticks = [new Date(ticks[0].getTime() - dx)].concat(ticks).concat([new Date(ticks[ticks.length - 1].getTime() + dx)]);
	    bins = d3.layout.histogram().bins(ticks).range(scales.x.domain()).value(function(record) {
	      return new Date(record[0].getTime() + (record[1].getTime() - record[0].getTime()) / 2);
	    })(records).filter(function(b) {
	      return b.length;
	    });
	    y = d3.scale.linear().domain([
	      0, d3.max(bins, function(d) {
	        return d.length;
	      })
	    ]).range([2, options.height - 29]).clamp(true);
	    bars = this.element.selectAll(".bin").data(bins);
	    bars.attr('class', 'bin').call((function(_this) {
	      return function(binElement) {
	        return _this.setupBins(binElement, y, options);
	      };
	    })(this));
	    bars.enter().append('rect').call((function(_this) {
	      return function(binElement) {
	        return _this.setupBins(binElement, y, options);
	      };
	    })(this));
	    return bars.exit().remove();
	  };
	
	  RecordDataset.prototype.drawMissing = function(intervals, useHistogram, scales, options) {
	    var base, bins, className, r, rect, ticksize;
	    ticksize = options.ticksize;
	    className = 'missing-interval';
	    base = function(elem) {
	      return elem.attr('class', className).attr('stroke', 'rgba(20, 20, 20, 0.2)').attr('stroke-width', 1).attr('fill', 'rgba(50, 50, 50, 0.2)');
	    };
	    bins = (function(_this) {
	      return function(elem) {
	        return elem.attr('x', 1).attr('width', function(interval) {
	          if (isNaN(scales.x(new Date(interval[1])) - scales.x(new Date(interval[0])))) {
	            console.log(interval, 'isNaN');
	          }
	          return scales.x(new Date(interval[1])) - scales.x(new Date(interval[0]));
	        }).attr('transform', function(interval) {
	          return "translate(" + (scales.x(new Date(interval[0]))) + ", " + (-20) + ")";
	        }).attr('height', 20);
	      };
	    })(this);
	    rect = (function(_this) {
	      return function(elem) {
	        return elem.attr('x', function(interval) {
	          return scales.x(new Date(interval[0]));
	        }).attr('y', -(ticksize + 3) * _this.index + -(ticksize - 2)).attr('width', function(interval) {
	          return scales.x(new Date(interval[1])) - scales.x(new Date(interval[0]));
	        }).attr('height', ticksize - 2).attr('stroke', 'rgba(20, 20, 20, 0.3)').attr('stroke-width', 1).attr('fill', 'rgba(50, 50, 50, 0.3)');
	      };
	    })(this);
	    r = this.element.selectAll("rect." + className).data(intervals).call(base).call(useHistogram ? bins : rect);
	    r.enter().append('rect').call(base).call(useHistogram ? bins : rect);
	    return r.exit().remove();
	  };
	
	  RecordDataset.prototype.setupRecord = function(recordElement, arg) {
	    var binTooltipFormatter, recordFilter, tooltip, tooltipFormatter;
	    recordFilter = arg.recordFilter, tooltip = arg.tooltip, tooltipFormatter = arg.tooltipFormatter, binTooltipFormatter = arg.binTooltipFormatter;
	    return recordElement.on('mouseover', (function(_this) {
	      return function(record) {
	        var message;
	        if (record.cluster) {
	          _this.dispatch('clusterMouseover', {
	            dataset: _this.id,
	            start: record[0],
	            end: record[1],
	            records: record[2]
	          });
	          message = binTooltipFormatter(record[2], _this);
	        } else {
	          _this.dispatch('recordMouseover', {
	            dataset: _this.id,
	            start: record[0],
	            end: record[1] instanceof Date ? record[1] : record[0],
	            params: record[1] instanceof Date ? record[2] : record[1]
	          });
	          if (record[1] instanceof Date) {
	            message = tooltipFormatter(record, _this);
	          } else {
	            message = tooltipFormatter([record[0], record[0], record[1]], _this);
	          }
	        }
	        if (message) {
	          tooltip.html(message).transition().duration(200).style('opacity', .9);
	          return centerTooltipOn(tooltip, d3.event.target);
	        }
	      };
	    })(this)).on('mouseout', (function(_this) {
	      return function(record) {
	        if (record.cluster) {
	          _this.dispatch('clusterMouseout', {
	            dataset: _this.id,
	            start: record[0],
	            end: record[1],
	            records: record[2]
	          });
	        } else {
	          _this.dispatch('recordMouseout', {
	            dataset: _this.id,
	            start: record[0],
	            end: record[1] instanceof Date ? record[1] : record[0],
	            params: record[1] instanceof Date ? record[2] : record[1]
	          });
	        }
	        return tooltip.transition().duration(500).style('opacity', 0);
	      };
	    })(this)).on('click', (function(_this) {
	      return function(record) {
	        if (record.cluster) {
	          return _this.dispatch('clusterClicked', {
	            dataset: _this.id,
	            start: record[0],
	            end: record[1],
	            records: record[2]
	          });
	        } else {
	          return _this.dispatch('recordClicked', {
	            dataset: _this.id,
	            start: record[0],
	            end: record[1] instanceof Date ? record[1] : record[0],
	            params: record[1] instanceof Date ? record[2] : record[1]
	          });
	        }
	      };
	    })(this));
	  };
	
	  RecordDataset.prototype.setupBins = function(binElement, y, arg) {
	    var binTooltipFormatter, scales, tooltip;
	    scales = arg.scales, tooltip = arg.tooltip, binTooltipFormatter = arg.binTooltipFormatter;
	    binElement.attr('class', 'bin').attr('fill', (function(_this) {
	      return function(d) {
	        var highlight, interval;
	        interval = [d.x, new Date(d.x.getTime() + d.dx)];
	        highlight = _this.recordHighlights.reduce(function(acc, int) {
	          return acc || intersects(int, interval);
	        }, false);
	        if (highlight) {
	          return _this.highlightFillColor;
	        } else {
	          return _this.color;
	        }
	      };
	    })(this)).attr('stroke', (function(_this) {
	      return function(d) {
	        var highlight, interval;
	        interval = [d.x, new Date(d.x.getTime() + d.dx)];
	        highlight = _this.recordHighlights.reduce(function(acc, int) {
	          return acc || intersects(int, interval);
	        }, false);
	        if (highlight) {
	          return _this.highlightStrokeColor;
	        } else if (_this.noBorder) {
	          return d3.rgb(_this.color);
	        } else {
	          return d3.rgb(_this.color).darker();
	        }
	      };
	    })(this)).attr('x', 1).attr('width', (function(_this) {
	      return function(d) {
	        return scales.x(d.x.getTime() + d.dx) - scales.x(d.x) - 1;
	      };
	    })(this)).attr('transform', (function(_this) {
	      return function(d) {
	        return "translate(" + (scales.x(new Date(d.x))) + ", " + (-y(d.length)) + ")";
	      };
	    })(this)).attr('height', function(d) {
	      return y(d.length);
	    });
	    return binElement.on('mouseover', (function(_this) {
	      return function(bin) {
	        var message;
	        _this.dispatch('binMouseover', {
	          dataset: _this.id,
	          start: bin.x,
	          end: new Date(bin.x.getTime() + bin.dx),
	          bin: bin
	        });
	        if (bin.length) {
	          message = binTooltipFormatter(bin);
	          if (message.length) {
	            tooltip.html(message).transition().duration(200).style('opacity', .9);
	            return centerTooltipOn(tooltip, d3.event.target);
	          }
	        }
	      };
	    })(this)).on('mouseout', (function(_this) {
	      return function(bin) {
	        _this.dispatch('binMouseout', {
	          dataset: _this.id,
	          start: bin.x,
	          end: new Date(bin.x.getTime() + bin.dx),
	          bin: bin
	        });
	        return tooltip.transition().duration(500).style('opacity', 0);
	      };
	    })(this)).on('click', (function(_this) {
	      return function(bin) {
	        return _this.dispatch('binClicked', {
	          dataset: _this.id,
	          start: bin.x,
	          end: new Date(bin.x.getTime() + bin.dx),
	          bin: bin
	        });
	      };
	    })(this));
	  };
	
	  RecordDataset.prototype.clearCaches = function() {
	    if (this.cache) {
	      return this.cache.clear();
	    }
	  };
	
	  return RecordDataset;
	
	})(Dataset);
	
	module.exports = RecordDataset;


/***/ }),
/* 317 */
/***/ (function(module, exports) {

	var EventEmitter,
	  slice = [].slice;
	
	EventEmitter = (function() {
	  function EventEmitter() {
	    var dispatchElement1, events;
	    dispatchElement1 = arguments[0], events = 2 <= arguments.length ? slice.call(arguments, 1) : [];
	    this.dispatchElement = dispatchElement1;
	    if (events.length) {
	      this.listeners = d3.dispatch.apply(void 0, events);
	    }
	  }
	
	  EventEmitter.prototype.on = function() {
	    var args, ref;
	    args = 1 <= arguments.length ? slice.call(arguments, 0) : [];
	    return (ref = this.listeners).on.apply(ref, args);
	  };
	
	  EventEmitter.prototype.dispatch = function(name, detail, dispatchElement) {
	    var evt;
	    evt = document.createEvent('CustomEvent');
	    evt.initCustomEvent(name, true, true, detail);
	    return (dispatchElement || this.dispatchElement).dispatchEvent(evt);
	  };
	
	  return EventEmitter;
	
	})();
	
	module.exports = EventEmitter;


/***/ }),
/* 318 */
/***/ (function(module, exports, __webpack_require__) {

	var cof = __webpack_require__(50);
	module.exports = function (it, msg) {
	  if (typeof it != 'number' && cof(it) != 'Number') throw TypeError(msg);
	  return +it;
	};


/***/ }),
/* 319 */
/***/ (function(module, exports, __webpack_require__) {

	// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)
	'use strict';
	var toObject = __webpack_require__(28);
	var toAbsoluteIndex = __webpack_require__(81);
	var toLength = __webpack_require__(21);
	
	module.exports = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {
	  var O = toObject(this);
	  var len = toLength(O.length);
	  var to = toAbsoluteIndex(target, len);
	  var from = toAbsoluteIndex(start, len);
	  var end = arguments.length > 2 ? arguments[2] : undefined;
	  var count = Math.min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to);
	  var inc = 1;
	  if (from < to && to < from + count) {
	    inc = -1;
	    from += count - 1;
	    to += count - 1;
	  }
	  while (count-- > 0) {
	    if (from in O) O[to] = O[from];
	    else delete O[to];
	    to += inc;
	    from += inc;
	  } return O;
	};


/***/ }),
/* 320 */
/***/ (function(module, exports, __webpack_require__) {

	var forOf = __webpack_require__(91);
	
	module.exports = function (iter, ITERATOR) {
	  var result = [];
	  forOf(iter, false, result.push, result, ITERATOR);
	  return result;
	};


/***/ }),
/* 321 */
/***/ (function(module, exports, __webpack_require__) {

	var aFunction = __webpack_require__(36);
	var toObject = __webpack_require__(28);
	var IObject = __webpack_require__(130);
	var toLength = __webpack_require__(21);
	
	module.exports = function (that, callbackfn, aLen, memo, isRight) {
	  aFunction(callbackfn);
	  var O = toObject(that);
	  var self = IObject(O);
	  var length = toLength(O.length);
	  var index = isRight ? length - 1 : 0;
	  var i = isRight ? -1 : 1;
	  if (aLen < 2) for (;;) {
	    if (index in self) {
	      memo = self[index];
	      index += i;
	      break;
	    }
	    index += i;
	    if (isRight ? index < 0 : length <= index) {
	      throw TypeError('Reduce of empty array with no initial value');
	    }
	  }
	  for (;isRight ? index >= 0 : length > index; index += i) if (index in self) {
	    memo = callbackfn(memo, self[index], index, O);
	  }
	  return memo;
	};


/***/ }),
/* 322 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	var aFunction = __webpack_require__(36);
	var isObject = __webpack_require__(15);
	var invoke = __webpack_require__(325);
	var arraySlice = [].slice;
	var factories = {};
	
	var construct = function (F, len, args) {
	  if (!(len in factories)) {
	    for (var n = [], i = 0; i < len; i++) n[i] = 'a[' + i + ']';
	    // eslint-disable-next-line no-new-func
	    factories[len] = Function('F,a', 'return new F(' + n.join(',') + ')');
	  } return factories[len](F, args);
	};
	
	module.exports = Function.bind || function bind(that /* , ...args */) {
	  var fn = aFunction(this);
	  var partArgs = arraySlice.call(arguments, 1);
	  var bound = function (/* args... */) {
	    var args = partArgs.concat(arraySlice.call(arguments));
	    return this instanceof bound ? construct(fn, args.length, args) : invoke(fn, args, that);
	  };
	  if (isObject(fn.prototype)) bound.prototype = fn.prototype;
	  return bound;
	};


/***/ }),
/* 323 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	// https://tc39.github.io/proposal-flatMap/#sec-FlattenIntoArray
	var isArray = __webpack_require__(154);
	var isObject = __webpack_require__(15);
	var toLength = __webpack_require__(21);
	var ctx = __webpack_require__(52);
	var IS_CONCAT_SPREADABLE = __webpack_require__(20)('isConcatSpreadable');
	
	function flattenIntoArray(target, original, source, sourceLen, start, depth, mapper, thisArg) {
	  var targetIndex = start;
	  var sourceIndex = 0;
	  var mapFn = mapper ? ctx(mapper, thisArg, 3) : false;
	  var element, spreadable;
	
	  while (sourceIndex < sourceLen) {
	    if (sourceIndex in source) {
	      element = mapFn ? mapFn(source[sourceIndex], sourceIndex, original) : source[sourceIndex];
	
	      spreadable = false;
	      if (isObject(element)) {
	        spreadable = element[IS_CONCAT_SPREADABLE];
	        spreadable = spreadable !== undefined ? !!spreadable : isArray(element);
	      }
	
	      if (spreadable && depth > 0) {
	        targetIndex = flattenIntoArray(target, original, element, toLength(element.length), targetIndex, depth - 1) - 1;
	      } else {
	        if (targetIndex >= 0x1fffffffffffff) throw TypeError();
	        target[targetIndex] = element;
	      }
	
	      targetIndex++;
	    }
	    sourceIndex++;
	  }
	  return targetIndex;
	}
	
	module.exports = flattenIntoArray;


/***/ }),
/* 324 */
/***/ (function(module, exports, __webpack_require__) {

	module.exports = !__webpack_require__(25) && !__webpack_require__(13)(function () {
	  return Object.defineProperty(__webpack_require__(198)('div'), 'a', { get: function () { return 7; } }).a != 7;
	});


/***/ }),
/* 325 */
/***/ (function(module, exports) {

	// fast apply, http://jsperf.lnkit.com/fast-apply/5
	module.exports = function (fn, args, that) {
	  var un = that === undefined;
	  switch (args.length) {
	    case 0: return un ? fn()
	                      : fn.call(that);
	    case 1: return un ? fn(args[0])
	                      : fn.call(that, args[0]);
	    case 2: return un ? fn(args[0], args[1])
	                      : fn.call(that, args[0], args[1]);
	    case 3: return un ? fn(args[0], args[1], args[2])
	                      : fn.call(that, args[0], args[1], args[2]);
	    case 4: return un ? fn(args[0], args[1], args[2], args[3])
	                      : fn.call(that, args[0], args[1], args[2], args[3]);
	  } return fn.apply(that, args);
	};


/***/ }),
/* 326 */
/***/ (function(module, exports, __webpack_require__) {

	// 20.1.2.3 Number.isInteger(number)
	var isObject = __webpack_require__(15);
	var floor = Math.floor;
	module.exports = function isInteger(it) {
	  return !isObject(it) && isFinite(it) && floor(it) === it;
	};


/***/ }),
/* 327 */
/***/ (function(module, exports, __webpack_require__) {

	// call something on iterator step with safe closing on error
	var anObject = __webpack_require__(6);
	module.exports = function (iterator, fn, value, entries) {
	  try {
	    return entries ? fn(anObject(value)[0], value[1]) : fn(value);
	  // 7.4.6 IteratorClose(iterator, completion)
	  } catch (e) {
	    var ret = iterator['return'];
	    if (ret !== undefined) anObject(ret.call(iterator));
	    throw e;
	  }
	};


/***/ }),
/* 328 */
/***/ (function(module, exports) {

	module.exports = function (done, value) {
	  return { value: value, done: !!done };
	};


/***/ }),
/* 329 */
/***/ (function(module, exports, __webpack_require__) {

	// 20.2.2.16 Math.fround(x)
	var sign = __webpack_require__(207);
	var pow = Math.pow;
	var EPSILON = pow(2, -52);
	var EPSILON32 = pow(2, -23);
	var MAX32 = pow(2, 127) * (2 - EPSILON32);
	var MIN32 = pow(2, -126);
	
	var roundTiesToEven = function (n) {
	  return n + 1 / EPSILON - 1 / EPSILON;
	};
	
	module.exports = Math.fround || function fround(x) {
	  var $abs = Math.abs(x);
	  var $sign = sign(x);
	  var a, result;
	  if ($abs < MIN32) return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32;
	  a = (1 + EPSILON32 / EPSILON) * $abs;
	  result = a - (a - $abs);
	  // eslint-disable-next-line no-self-compare
	  if (result > MAX32 || result != result) return $sign * Infinity;
	  return $sign * result;
	};


/***/ }),
/* 330 */
/***/ (function(module, exports) {

	// 20.2.2.20 Math.log1p(x)
	module.exports = Math.log1p || function log1p(x) {
	  return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : Math.log(1 + x);
	};


/***/ }),
/* 331 */
/***/ (function(module, exports) {

	// https://rwaldron.github.io/proposal-math-extensions/
	module.exports = Math.scale || function scale(x, inLow, inHigh, outLow, outHigh) {
	  if (
	    arguments.length === 0
	      // eslint-disable-next-line no-self-compare
	      || x != x
	      // eslint-disable-next-line no-self-compare
	      || inLow != inLow
	      // eslint-disable-next-line no-self-compare
	      || inHigh != inHigh
	      // eslint-disable-next-line no-self-compare
	      || outLow != outLow
	      // eslint-disable-next-line no-self-compare
	      || outHigh != outHigh
	  ) return NaN;
	  if (x === Infinity || x === -Infinity) return x;
	  return (x - inLow) * (outHigh - outLow) / (inHigh - inLow) + outLow;
	};


/***/ }),
/* 332 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	// 19.1.2.1 Object.assign(target, source, ...)
	var DESCRIPTORS = __webpack_require__(25);
	var getKeys = __webpack_require__(94);
	var gOPS = __webpack_require__(158);
	var pIE = __webpack_require__(131);
	var toObject = __webpack_require__(28);
	var IObject = __webpack_require__(130);
	var $assign = Object.assign;
	
	// should work with symbols and should have deterministic property order (V8 bug)
	module.exports = !$assign || __webpack_require__(13)(function () {
	  var A = {};
	  var B = {};
	  // eslint-disable-next-line no-undef
	  var S = Symbol();
	  var K = 'abcdefghijklmnopqrst';
	  A[S] = 7;
	  K.split('').forEach(function (k) { B[k] = k; });
	  return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;
	}) ? function assign(target, source) { // eslint-disable-line no-unused-vars
	  var T = toObject(target);
	  var aLen = arguments.length;
	  var index = 1;
	  var getSymbols = gOPS.f;
	  var isEnum = pIE.f;
	  while (aLen > index) {
	    var S = IObject(arguments[index++]);
	    var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);
	    var length = keys.length;
	    var j = 0;
	    var key;
	    while (length > j) {
	      key = keys[j++];
	      if (!DESCRIPTORS || isEnum.call(S, key)) T[key] = S[key];
	    }
	  } return T;
	} : $assign;


/***/ }),
/* 333 */
/***/ (function(module, exports, __webpack_require__) {

	var dP = __webpack_require__(26);
	var anObject = __webpack_require__(6);
	var getKeys = __webpack_require__(94);
	
	module.exports = __webpack_require__(25) ? Object.defineProperties : function defineProperties(O, Properties) {
	  anObject(O);
	  var keys = getKeys(Properties);
	  var length = keys.length;
	  var i = 0;
	  var P;
	  while (length > i) dP.f(O, P = keys[i++], Properties[P]);
	  return O;
	};


/***/ }),
/* 334 */
/***/ (function(module, exports, __webpack_require__) {

	// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window
	var toIObject = __webpack_require__(45);
	var gOPN = __webpack_require__(93).f;
	var toString = {}.toString;
	
	var windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames
	  ? Object.getOwnPropertyNames(window) : [];
	
	var getWindowNames = function (it) {
	  try {
	    return gOPN(it);
	  } catch (e) {
	    return windowNames.slice();
	  }
	};
	
	module.exports.f = function getOwnPropertyNames(it) {
	  return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));
	};


/***/ }),
/* 335 */
/***/ (function(module, exports, __webpack_require__) {

	var has = __webpack_require__(42);
	var toIObject = __webpack_require__(45);
	var arrayIndexOf = __webpack_require__(152)(false);
	var IE_PROTO = __webpack_require__(212)('IE_PROTO');
	
	module.exports = function (object, names) {
	  var O = toIObject(object);
	  var i = 0;
	  var result = [];
	  var key;
	  for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);
	  // Don't enum bug & hidden keys
	  while (names.length > i) if (has(O, key = names[i++])) {
	    ~arrayIndexOf(result, key) || result.push(key);
	  }
	  return result;
	};


/***/ }),
/* 336 */
/***/ (function(module, exports, __webpack_require__) {

	var DESCRIPTORS = __webpack_require__(25);
	var getKeys = __webpack_require__(94);
	var toIObject = __webpack_require__(45);
	var isEnum = __webpack_require__(131).f;
	module.exports = function (isEntries) {
	  return function (it) {
	    var O = toIObject(it);
	    var keys = getKeys(O);
	    var length = keys.length;
	    var i = 0;
	    var result = [];
	    var key;
	    while (length > i) {
	      key = keys[i++];
	      if (!DESCRIPTORS || isEnum.call(O, key)) {
	        result.push(isEntries ? [key, O[key]] : O[key]);
	      }
	    }
	    return result;
	  };
	};


/***/ }),
/* 337 */
/***/ (function(module, exports, __webpack_require__) {

	// all object keys, includes non-enumerable and symbols
	var gOPN = __webpack_require__(93);
	var gOPS = __webpack_require__(158);
	var anObject = __webpack_require__(6);
	var Reflect = __webpack_require__(9).Reflect;
	module.exports = Reflect && Reflect.ownKeys || function ownKeys(it) {
	  var keys = gOPN.f(anObject(it));
	  var getSymbols = gOPS.f;
	  return getSymbols ? keys.concat(getSymbols(it)) : keys;
	};


/***/ }),
/* 338 */
/***/ (function(module, exports, __webpack_require__) {

	var $parseFloat = __webpack_require__(9).parseFloat;
	var $trim = __webpack_require__(113).trim;
	
	module.exports = 1 / $parseFloat(__webpack_require__(215) + '-0') !== -Infinity ? function parseFloat(str) {
	  var string = $trim(String(str), 3);
	  var result = $parseFloat(string);
	  return result === 0 && string.charAt(0) == '-' ? -0 : result;
	} : $parseFloat;


/***/ }),
/* 339 */
/***/ (function(module, exports, __webpack_require__) {

	var $parseInt = __webpack_require__(9).parseInt;
	var $trim = __webpack_require__(113).trim;
	var ws = __webpack_require__(215);
	var hex = /^[-+]?0[xX]/;
	
	module.exports = $parseInt(ws + '08') !== 8 || $parseInt(ws + '0x16') !== 22 ? function parseInt(str, radix) {
	  var string = $trim(String(str), 3);
	  return $parseInt(string, (radix >>> 0) || (hex.test(string) ? 16 : 10));
	} : $parseInt;


/***/ }),
/* 340 */
/***/ (function(module, exports) {

	module.exports = function (exec) {
	  try {
	    return { e: false, v: exec() };
	  } catch (e) {
	    return { e: true, v: e };
	  }
	};


/***/ }),
/* 341 */
/***/ (function(module, exports) {

	// 7.2.9 SameValue(x, y)
	module.exports = Object.is || function is(x, y) {
	  // eslint-disable-next-line no-self-compare
	  return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;
	};


/***/ }),
/* 342 */
/***/ (function(module, exports, __webpack_require__) {

	// https://github.com/tc39/proposal-string-pad-start-end
	var toLength = __webpack_require__(21);
	var repeat = __webpack_require__(214);
	var defined = __webpack_require__(59);
	
	module.exports = function (that, maxLength, fillString, left) {
	  var S = String(defined(that));
	  var stringLength = S.length;
	  var fillStr = fillString === undefined ? ' ' : String(fillString);
	  var intMaxLength = toLength(maxLength);
	  if (intMaxLength <= stringLength || fillStr == '') return S;
	  var fillLen = intMaxLength - stringLength;
	  var stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length));
	  if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen);
	  return left ? stringFiller + S : S + stringFiller;
	};


/***/ }),
/* 343 */
/***/ (function(module, exports, __webpack_require__) {

	// https://tc39.github.io/ecma262/#sec-toindex
	var toInteger = __webpack_require__(54);
	var toLength = __webpack_require__(21);
	module.exports = function (it) {
	  if (it === undefined) return 0;
	  var number = toInteger(it);
	  var length = toLength(number);
	  if (number !== length) throw RangeError('Wrong length!');
	  return length;
	};


/***/ }),
/* 344 */
/***/ (function(module, exports, __webpack_require__) {

	exports.f = __webpack_require__(20);


/***/ }),
/* 345 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	var strong = __webpack_require__(234);
	var validate = __webpack_require__(82);
	var MAP = 'Map';
	
	// 23.1 Map Objects
	module.exports = __webpack_require__(138)(MAP, function (get) {
	  return function Map() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };
	}, {
	  // 23.1.3.6 Map.prototype.get(key)
	  get: function get(key) {
	    var entry = strong.getEntry(validate(this, MAP), key);
	    return entry && entry.v;
	  },
	  // 23.1.3.9 Map.prototype.set(key, value)
	  set: function set(key, value) {
	    return strong.def(validate(this, MAP), key === 0 ? 0 : key, value);
	  }
	}, strong, true);


/***/ }),
/* 346 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	var regexpExec = __webpack_require__(210);
	__webpack_require__(3)({
	  target: 'RegExp',
	  proto: true,
	  forced: regexpExec !== /./.exec
	}, {
	  exec: regexpExec
	});


/***/ }),
/* 347 */
/***/ (function(module, exports, __webpack_require__) {

	// 21.2.5.3 get RegExp.prototype.flags()
	if (__webpack_require__(25) && /./g.flags != 'g') __webpack_require__(26).f(RegExp.prototype, 'flags', {
	  configurable: true,
	  get: __webpack_require__(129)
	});


/***/ }),
/* 348 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	var strong = __webpack_require__(234);
	var validate = __webpack_require__(82);
	var SET = 'Set';
	
	// 23.2 Set Objects
	module.exports = __webpack_require__(138)(SET, function (get) {
	  return function Set() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };
	}, {
	  // 23.2.3.1 Set.prototype.add(value)
	  add: function add(value) {
	    return strong.def(validate(this, SET), value = value === 0 ? 0 : value, value);
	  }
	}, strong);


/***/ }),
/* 349 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	var global = __webpack_require__(9);
	var each = __webpack_require__(58)(0);
	var redefine = __webpack_require__(38);
	var meta = __webpack_require__(78);
	var assign = __webpack_require__(332);
	var weak = __webpack_require__(236);
	var isObject = __webpack_require__(15);
	var validate = __webpack_require__(82);
	var NATIVE_WEAK_MAP = __webpack_require__(82);
	var IS_IE11 = !global.ActiveXObject && 'ActiveXObject' in global;
	var WEAK_MAP = 'WeakMap';
	var getWeak = meta.getWeak;
	var isExtensible = Object.isExtensible;
	var uncaughtFrozenStore = weak.ufstore;
	var InternalMap;
	
	var wrapper = function (get) {
	  return function WeakMap() {
	    return get(this, arguments.length > 0 ? arguments[0] : undefined);
	  };
	};
	
	var methods = {
	  // 23.3.3.3 WeakMap.prototype.get(key)
	  get: function get(key) {
	    if (isObject(key)) {
	      var data = getWeak(key);
	      if (data === true) return uncaughtFrozenStore(validate(this, WEAK_MAP)).get(key);
	      return data ? data[this._i] : undefined;
	    }
	  },
	  // 23.3.3.5 WeakMap.prototype.set(key, value)
	  set: function set(key, value) {
	    return weak.def(validate(this, WEAK_MAP), key, value);
	  }
	};
	
	// 23.3 WeakMap Objects
	var $WeakMap = module.exports = __webpack_require__(138)(WEAK_MAP, wrapper, methods, weak, true, true);
	
	// IE11 WeakMap frozen keys fix
	if (NATIVE_WEAK_MAP && IS_IE11) {
	  InternalMap = weak.getConstructor(wrapper, WEAK_MAP);
	  assign(InternalMap.prototype, methods);
	  meta.NEED = true;
	  each(['delete', 'has', 'get', 'set'], function (key) {
	    var proto = $WeakMap.prototype;
	    var method = proto[key];
	    redefine(proto, key, function (a, b) {
	      // store frozen objects on internal weakmap shim
	      if (isObject(a) && !isExtensible(a)) {
	        if (!this._f) this._f = new InternalMap();
	        var result = this._f[key](a, b);
	        return key == 'set' ? this : result;
	      // store all the rest on native weakmap
	      } return method.call(this, a, b);
	    });
	  });
	}


/***/ }),
/* 350 */
/***/ (function(module, exports, __webpack_require__) {

	var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__;!function() {
	  var d3 = {
	    version: "3.5.17"
	  };
	  var d3_arraySlice = [].slice, d3_array = function(list) {
	    return d3_arraySlice.call(list);
	  };
	  var d3_document = this.document;
	  function d3_documentElement(node) {
	    return node && (node.ownerDocument || node.document || node).documentElement;
	  }
	  function d3_window(node) {
	    return node && (node.ownerDocument && node.ownerDocument.defaultView || node.document && node || node.defaultView);
	  }
	  if (d3_document) {
	    try {
	      d3_array(d3_document.documentElement.childNodes)[0].nodeType;
	    } catch (e) {
	      d3_array = function(list) {
	        var i = list.length, array = new Array(i);
	        while (i--) array[i] = list[i];
	        return array;
	      };
	    }
	  }
	  if (!Date.now) Date.now = function() {
	    return +new Date();
	  };
	  if (d3_document) {
	    try {
	      d3_document.createElement("DIV").style.setProperty("opacity", 0, "");
	    } catch (error) {
	      var d3_element_prototype = this.Element.prototype, d3_element_setAttribute = d3_element_prototype.setAttribute, d3_element_setAttributeNS = d3_element_prototype.setAttributeNS, d3_style_prototype = this.CSSStyleDeclaration.prototype, d3_style_setProperty = d3_style_prototype.setProperty;
	      d3_element_prototype.setAttribute = function(name, value) {
	        d3_element_setAttribute.call(this, name, value + "");
	      };
	      d3_element_prototype.setAttributeNS = function(space, local, value) {
	        d3_element_setAttributeNS.call(this, space, local, value + "");
	      };
	      d3_style_prototype.setProperty = function(name, value, priority) {
	        d3_style_setProperty.call(this, name, value + "", priority);
	      };
	    }
	  }
	  d3.ascending = d3_ascending;
	  function d3_ascending(a, b) {
	    return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;
	  }
	  d3.descending = function(a, b) {
	    return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;
	  };
	  d3.min = function(array, f) {
	    var i = -1, n = array.length, a, b;
	    if (arguments.length === 1) {
	      while (++i < n) if ((b = array[i]) != null && b >= b) {
	        a = b;
	        break;
	      }
	      while (++i < n) if ((b = array[i]) != null && a > b) a = b;
	    } else {
	      while (++i < n) if ((b = f.call(array, array[i], i)) != null && b >= b) {
	        a = b;
	        break;
	      }
	      while (++i < n) if ((b = f.call(array, array[i], i)) != null && a > b) a = b;
	    }
	    return a;
	  };
	  d3.max = function(array, f) {
	    var i = -1, n = array.length, a, b;
	    if (arguments.length === 1) {
	      while (++i < n) if ((b = array[i]) != null && b >= b) {
	        a = b;
	        break;
	      }
	      while (++i < n) if ((b = array[i]) != null && b > a) a = b;
	    } else {
	      while (++i < n) if ((b = f.call(array, array[i], i)) != null && b >= b) {
	        a = b;
	        break;
	      }
	      while (++i < n) if ((b = f.call(array, array[i], i)) != null && b > a) a = b;
	    }
	    return a;
	  };
	  d3.extent = function(array, f) {
	    var i = -1, n = array.length, a, b, c;
	    if (arguments.length === 1) {
	      while (++i < n) if ((b = array[i]) != null && b >= b) {
	        a = c = b;
	        break;
	      }
	      while (++i < n) if ((b = array[i]) != null) {
	        if (a > b) a = b;
	        if (c < b) c = b;
	      }
	    } else {
	      while (++i < n) if ((b = f.call(array, array[i], i)) != null && b >= b) {
	        a = c = b;
	        break;
	      }
	      while (++i < n) if ((b = f.call(array, array[i], i)) != null) {
	        if (a > b) a = b;
	        if (c < b) c = b;
	      }
	    }
	    return [ a, c ];
	  };
	  function d3_number(x) {
	    return x === null ? NaN : +x;
	  }
	  function d3_numeric(x) {
	    return !isNaN(x);
	  }
	  d3.sum = function(array, f) {
	    var s = 0, n = array.length, a, i = -1;
	    if (arguments.length === 1) {
	      while (++i < n) if (d3_numeric(a = +array[i])) s += a;
	    } else {
	      while (++i < n) if (d3_numeric(a = +f.call(array, array[i], i))) s += a;
	    }
	    return s;
	  };
	  d3.mean = function(array, f) {
	    var s = 0, n = array.length, a, i = -1, j = n;
	    if (arguments.length === 1) {
	      while (++i < n) if (d3_numeric(a = d3_number(array[i]))) s += a; else --j;
	    } else {
	      while (++i < n) if (d3_numeric(a = d3_number(f.call(array, array[i], i)))) s += a; else --j;
	    }
	    if (j) return s / j;
	  };
	  d3.quantile = function(values, p) {
	    var H = (values.length - 1) * p + 1, h = Math.floor(H), v = +values[h - 1], e = H - h;
	    return e ? v + e * (values[h] - v) : v;
	  };
	  d3.median = function(array, f) {
	    var numbers = [], n = array.length, a, i = -1;
	    if (arguments.length === 1) {
	      while (++i < n) if (d3_numeric(a = d3_number(array[i]))) numbers.push(a);
	    } else {
	      while (++i < n) if (d3_numeric(a = d3_number(f.call(array, array[i], i)))) numbers.push(a);
	    }
	    if (numbers.length) return d3.quantile(numbers.sort(d3_ascending), .5);
	  };
	  d3.variance = function(array, f) {
	    var n = array.length, m = 0, a, d, s = 0, i = -1, j = 0;
	    if (arguments.length === 1) {
	      while (++i < n) {
	        if (d3_numeric(a = d3_number(array[i]))) {
	          d = a - m;
	          m += d / ++j;
	          s += d * (a - m);
	        }
	      }
	    } else {
	      while (++i < n) {
	        if (d3_numeric(a = d3_number(f.call(array, array[i], i)))) {
	          d = a - m;
	          m += d / ++j;
	          s += d * (a - m);
	        }
	      }
	    }
	    if (j > 1) return s / (j - 1);
	  };
	  d3.deviation = function() {
	    var v = d3.variance.apply(this, arguments);
	    return v ? Math.sqrt(v) : v;
	  };
	  function d3_bisector(compare) {
	    return {
	      left: function(a, x, lo, hi) {
	        if (arguments.length < 3) lo = 0;
	        if (arguments.length < 4) hi = a.length;
	        while (lo < hi) {
	          var mid = lo + hi >>> 1;
	          if (compare(a[mid], x) < 0) lo = mid + 1; else hi = mid;
	        }
	        return lo;
	      },
	      right: function(a, x, lo, hi) {
	        if (arguments.length < 3) lo = 0;
	        if (arguments.length < 4) hi = a.length;
	        while (lo < hi) {
	          var mid = lo + hi >>> 1;
	          if (compare(a[mid], x) > 0) hi = mid; else lo = mid + 1;
	        }
	        return lo;
	      }
	    };
	  }
	  var d3_bisect = d3_bisector(d3_ascending);
	  d3.bisectLeft = d3_bisect.left;
	  d3.bisect = d3.bisectRight = d3_bisect.right;
	  d3.bisector = function(f) {
	    return d3_bisector(f.length === 1 ? function(d, x) {
	      return d3_ascending(f(d), x);
	    } : f);
	  };
	  d3.shuffle = function(array, i0, i1) {
	    if ((m = arguments.length) < 3) {
	      i1 = array.length;
	      if (m < 2) i0 = 0;
	    }
	    var m = i1 - i0, t, i;
	    while (m) {
	      i = Math.random() * m-- | 0;
	      t = array[m + i0], array[m + i0] = array[i + i0], array[i + i0] = t;
	    }
	    return array;
	  };
	  d3.permute = function(array, indexes) {
	    var i = indexes.length, permutes = new Array(i);
	    while (i--) permutes[i] = array[indexes[i]];
	    return permutes;
	  };
	  d3.pairs = function(array) {
	    var i = 0, n = array.length - 1, p0, p1 = array[0], pairs = new Array(n < 0 ? 0 : n);
	    while (i < n) pairs[i] = [ p0 = p1, p1 = array[++i] ];
	    return pairs;
	  };
	  d3.transpose = function(matrix) {
	    if (!(n = matrix.length)) return [];
	    for (var i = -1, m = d3.min(matrix, d3_transposeLength), transpose = new Array(m); ++i < m; ) {
	      for (var j = -1, n, row = transpose[i] = new Array(n); ++j < n; ) {
	        row[j] = matrix[j][i];
	      }
	    }
	    return transpose;
	  };
	  function d3_transposeLength(d) {
	    return d.length;
	  }
	  d3.zip = function() {
	    return d3.transpose(arguments);
	  };
	  d3.keys = function(map) {
	    var keys = [];
	    for (var key in map) keys.push(key);
	    return keys;
	  };
	  d3.values = function(map) {
	    var values = [];
	    for (var key in map) values.push(map[key]);
	    return values;
	  };
	  d3.entries = function(map) {
	    var entries = [];
	    for (var key in map) entries.push({
	      key: key,
	      value: map[key]
	    });
	    return entries;
	  };
	  d3.merge = function(arrays) {
	    var n = arrays.length, m, i = -1, j = 0, merged, array;
	    while (++i < n) j += arrays[i].length;
	    merged = new Array(j);
	    while (--n >= 0) {
	      array = arrays[n];
	      m = array.length;
	      while (--m >= 0) {
	        merged[--j] = array[m];
	      }
	    }
	    return merged;
	  };
	  var abs = Math.abs;
	  d3.range = function(start, stop, step) {
	    if (arguments.length < 3) {
	      step = 1;
	      if (arguments.length < 2) {
	        stop = start;
	        start = 0;
	      }
	    }
	    if ((stop - start) / step === Infinity) throw new Error("infinite range");
	    var range = [], k = d3_range_integerScale(abs(step)), i = -1, j;
	    start *= k, stop *= k, step *= k;
	    if (step < 0) while ((j = start + step * ++i) > stop) range.push(j / k); else while ((j = start + step * ++i) < stop) range.push(j / k);
	    return range;
	  };
	  function d3_range_integerScale(x) {
	    var k = 1;
	    while (x * k % 1) k *= 10;
	    return k;
	  }
	  function d3_class(ctor, properties) {
	    for (var key in properties) {
	      Object.defineProperty(ctor.prototype, key, {
	        value: properties[key],
	        enumerable: false
	      });
	    }
	  }
	  d3.map = function(object, f) {
	    var map = new d3_Map();
	    if (object instanceof d3_Map) {
	      object.forEach(function(key, value) {
	        map.set(key, value);
	      });
	    } else if (Array.isArray(object)) {
	      var i = -1, n = object.length, o;
	      if (arguments.length === 1) while (++i < n) map.set(i, object[i]); else while (++i < n) map.set(f.call(object, o = object[i], i), o);
	    } else {
	      for (var key in object) map.set(key, object[key]);
	    }
	    return map;
	  };
	  function d3_Map() {
	    this._ = Object.create(null);
	  }
	  var d3_map_proto = "__proto__", d3_map_zero = "\x00";
	  d3_class(d3_Map, {
	    has: d3_map_has,
	    get: function(key) {
	      return this._[d3_map_escape(key)];
	    },
	    set: function(key, value) {
	      return this._[d3_map_escape(key)] = value;
	    },
	    remove: d3_map_remove,
	    keys: d3_map_keys,
	    values: function() {
	      var values = [];
	      for (var key in this._) values.push(this._[key]);
	      return values;
	    },
	    entries: function() {
	      var entries = [];
	      for (var key in this._) entries.push({
	        key: d3_map_unescape(key),
	        value: this._[key]
	      });
	      return entries;
	    },
	    size: d3_map_size,
	    empty: d3_map_empty,
	    forEach: function(f) {
	      for (var key in this._) f.call(this, d3_map_unescape(key), this._[key]);
	    }
	  });
	  function d3_map_escape(key) {
	    return (key += "") === d3_map_proto || key[0] === d3_map_zero ? d3_map_zero + key : key;
	  }
	  function d3_map_unescape(key) {
	    return (key += "")[0] === d3_map_zero ? key.slice(1) : key;
	  }
	  function d3_map_has(key) {
	    return d3_map_escape(key) in this._;
	  }
	  function d3_map_remove(key) {
	    return (key = d3_map_escape(key)) in this._ && delete this._[key];
	  }
	  function d3_map_keys() {
	    var keys = [];
	    for (var key in this._) keys.push(d3_map_unescape(key));
	    return keys;
	  }
	  function d3_map_size() {
	    var size = 0;
	    for (var key in this._) ++size;
	    return size;
	  }
	  function d3_map_empty() {
	    for (var key in this._) return false;
	    return true;
	  }
	  d3.nest = function() {
	    var nest = {}, keys = [], sortKeys = [], sortValues, rollup;
	    function map(mapType, array, depth) {
	      if (depth >= keys.length) return rollup ? rollup.call(nest, array) : sortValues ? array.sort(sortValues) : array;
	      var i = -1, n = array.length, key = keys[depth++], keyValue, object, setter, valuesByKey = new d3_Map(), values;
	      while (++i < n) {
	        if (values = valuesByKey.get(keyValue = key(object = array[i]))) {
	          values.push(object);
	        } else {
	          valuesByKey.set(keyValue, [ object ]);
	        }
	      }
	      if (mapType) {
	        object = mapType();
	        setter = function(keyValue, values) {
	          object.set(keyValue, map(mapType, values, depth));
	        };
	      } else {
	        object = {};
	        setter = function(keyValue, values) {
	          object[keyValue] = map(mapType, values, depth);
	        };
	      }
	      valuesByKey.forEach(setter);
	      return object;
	    }
	    function entries(map, depth) {
	      if (depth >= keys.length) return map;
	      var array = [], sortKey = sortKeys[depth++];
	      map.forEach(function(key, keyMap) {
	        array.push({
	          key: key,
	          values: entries(keyMap, depth)
	        });
	      });
	      return sortKey ? array.sort(function(a, b) {
	        return sortKey(a.key, b.key);
	      }) : array;
	    }
	    nest.map = function(array, mapType) {
	      return map(mapType, array, 0);
	    };
	    nest.entries = function(array) {
	      return entries(map(d3.map, array, 0), 0);
	    };
	    nest.key = function(d) {
	      keys.push(d);
	      return nest;
	    };
	    nest.sortKeys = function(order) {
	      sortKeys[keys.length - 1] = order;
	      return nest;
	    };
	    nest.sortValues = function(order) {
	      sortValues = order;
	      return nest;
	    };
	    nest.rollup = function(f) {
	      rollup = f;
	      return nest;
	    };
	    return nest;
	  };
	  d3.set = function(array) {
	    var set = new d3_Set();
	    if (array) for (var i = 0, n = array.length; i < n; ++i) set.add(array[i]);
	    return set;
	  };
	  function d3_Set() {
	    this._ = Object.create(null);
	  }
	  d3_class(d3_Set, {
	    has: d3_map_has,
	    add: function(key) {
	      this._[d3_map_escape(key += "")] = true;
	      return key;
	    },
	    remove: d3_map_remove,
	    values: d3_map_keys,
	    size: d3_map_size,
	    empty: d3_map_empty,
	    forEach: function(f) {
	      for (var key in this._) f.call(this, d3_map_unescape(key));
	    }
	  });
	  d3.behavior = {};
	  function d3_identity(d) {
	    return d;
	  }
	  d3.rebind = function(target, source) {
	    var i = 1, n = arguments.length, method;
	    while (++i < n) target[method = arguments[i]] = d3_rebind(target, source, source[method]);
	    return target;
	  };
	  function d3_rebind(target, source, method) {
	    return function() {
	      var value = method.apply(source, arguments);
	      return value === source ? target : value;
	    };
	  }
	  function d3_vendorSymbol(object, name) {
	    if (name in object) return name;
	    name = name.charAt(0).toUpperCase() + name.slice(1);
	    for (var i = 0, n = d3_vendorPrefixes.length; i < n; ++i) {
	      var prefixName = d3_vendorPrefixes[i] + name;
	      if (prefixName in object) return prefixName;
	    }
	  }
	  var d3_vendorPrefixes = [ "webkit", "ms", "moz", "Moz", "o", "O" ];
	  function d3_noop() {}
	  d3.dispatch = function() {
	    var dispatch = new d3_dispatch(), i = -1, n = arguments.length;
	    while (++i < n) dispatch[arguments[i]] = d3_dispatch_event(dispatch);
	    return dispatch;
	  };
	  function d3_dispatch() {}
	  d3_dispatch.prototype.on = function(type, listener) {
	    var i = type.indexOf("."), name = "";
	    if (i >= 0) {
	      name = type.slice(i + 1);
	      type = type.slice(0, i);
	    }
	    if (type) return arguments.length < 2 ? this[type].on(name) : this[type].on(name, listener);
	    if (arguments.length === 2) {
	      if (listener == null) for (type in this) {
	        if (this.hasOwnProperty(type)) this[type].on(name, null);
	      }
	      return this;
	    }
	  };
	  function d3_dispatch_event(dispatch) {
	    var listeners = [], listenerByName = new d3_Map();
	    function event() {
	      var z = listeners, i = -1, n = z.length, l;
	      while (++i < n) if (l = z[i].on) l.apply(this, arguments);
	      return dispatch;
	    }
	    event.on = function(name, listener) {
	      var l = listenerByName.get(name), i;
	      if (arguments.length < 2) return l && l.on;
	      if (l) {
	        l.on = null;
	        listeners = listeners.slice(0, i = listeners.indexOf(l)).concat(listeners.slice(i + 1));
	        listenerByName.remove(name);
	      }
	      if (listener) listeners.push(listenerByName.set(name, {
	        on: listener
	      }));
	      return dispatch;
	    };
	    return event;
	  }
	  d3.event = null;
	  function d3_eventPreventDefault() {
	    d3.event.preventDefault();
	  }
	  function d3_eventSource() {
	    var e = d3.event, s;
	    while (s = e.sourceEvent) e = s;
	    return e;
	  }
	  function d3_eventDispatch(target) {
	    var dispatch = new d3_dispatch(), i = 0, n = arguments.length;
	    while (++i < n) dispatch[arguments[i]] = d3_dispatch_event(dispatch);
	    dispatch.of = function(thiz, argumentz) {
	      return function(e1) {
	        try {
	          var e0 = e1.sourceEvent = d3.event;
	          e1.target = target;
	          d3.event = e1;
	          dispatch[e1.type].apply(thiz, argumentz);
	        } finally {
	          d3.event = e0;
	        }
	      };
	    };
	    return dispatch;
	  }
	  d3.requote = function(s) {
	    return s.replace(d3_requote_re, "\\$&");
	  };
	  var d3_requote_re = /[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g;
	  var d3_subclass = {}.__proto__ ? function(object, prototype) {
	    object.__proto__ = prototype;
	  } : function(object, prototype) {
	    for (var property in prototype) object[property] = prototype[property];
	  };
	  function d3_selection(groups) {
	    d3_subclass(groups, d3_selectionPrototype);
	    return groups;
	  }
	  var d3_select = function(s, n) {
	    return n.querySelector(s);
	  }, d3_selectAll = function(s, n) {
	    return n.querySelectorAll(s);
	  }, d3_selectMatches = function(n, s) {
	    var d3_selectMatcher = n.matches || n[d3_vendorSymbol(n, "matchesSelector")];
	    d3_selectMatches = function(n, s) {
	      return d3_selectMatcher.call(n, s);
	    };
	    return d3_selectMatches(n, s);
	  };
	  if (typeof Sizzle === "function") {
	    d3_select = function(s, n) {
	      return Sizzle(s, n)[0] || null;
	    };
	    d3_selectAll = Sizzle;
	    d3_selectMatches = Sizzle.matchesSelector;
	  }
	  d3.selection = function() {
	    return d3.select(d3_document.documentElement);
	  };
	  var d3_selectionPrototype = d3.selection.prototype = [];
	  d3_selectionPrototype.select = function(selector) {
	    var subgroups = [], subgroup, subnode, group, node;
	    selector = d3_selection_selector(selector);
	    for (var j = -1, m = this.length; ++j < m; ) {
	      subgroups.push(subgroup = []);
	      subgroup.parentNode = (group = this[j]).parentNode;
	      for (var i = -1, n = group.length; ++i < n; ) {
	        if (node = group[i]) {
	          subgroup.push(subnode = selector.call(node, node.__data__, i, j));
	          if (subnode && "__data__" in node) subnode.__data__ = node.__data__;
	        } else {
	          subgroup.push(null);
	        }
	      }
	    }
	    return d3_selection(subgroups);
	  };
	  function d3_selection_selector(selector) {
	    return typeof selector === "function" ? selector : function() {
	      return d3_select(selector, this);
	    };
	  }
	  d3_selectionPrototype.selectAll = function(selector) {
	    var subgroups = [], subgroup, node;
	    selector = d3_selection_selectorAll(selector);
	    for (var j = -1, m = this.length; ++j < m; ) {
	      for (var group = this[j], i = -1, n = group.length; ++i < n; ) {
	        if (node = group[i]) {
	          subgroups.push(subgroup = d3_array(selector.call(node, node.__data__, i, j)));
	          subgroup.parentNode = node;
	        }
	      }
	    }
	    return d3_selection(subgroups);
	  };
	  function d3_selection_selectorAll(selector) {
	    return typeof selector === "function" ? selector : function() {
	      return d3_selectAll(selector, this);
	    };
	  }
	  var d3_nsXhtml = "http://www.w3.org/1999/xhtml";
	  var d3_nsPrefix = {
	    svg: "http://www.w3.org/2000/svg",
	    xhtml: d3_nsXhtml,
	    xlink: "http://www.w3.org/1999/xlink",
	    xml: "http://www.w3.org/XML/1998/namespace",
	    xmlns: "http://www.w3.org/2000/xmlns/"
	  };
	  d3.ns = {
	    prefix: d3_nsPrefix,
	    qualify: function(name) {
	      var i = name.indexOf(":"), prefix = name;
	      if (i >= 0 && (prefix = name.slice(0, i)) !== "xmlns") name = name.slice(i + 1);
	      return d3_nsPrefix.hasOwnProperty(prefix) ? {
	        space: d3_nsPrefix[prefix],
	        local: name
	      } : name;
	    }
	  };
	  d3_selectionPrototype.attr = function(name, value) {
	    if (arguments.length < 2) {
	      if (typeof name === "string") {
	        var node = this.node();
	        name = d3.ns.qualify(name);
	        return name.local ? node.getAttributeNS(name.space, name.local) : node.getAttribute(name);
	      }
	      for (value in name) this.each(d3_selection_attr(value, name[value]));
	      return this;
	    }
	    return this.each(d3_selection_attr(name, value));
	  };
	  function d3_selection_attr(name, value) {
	    name = d3.ns.qualify(name);
	    function attrNull() {
	      this.removeAttribute(name);
	    }
	    function attrNullNS() {
	      this.removeAttributeNS(name.space, name.local);
	    }
	    function attrConstant() {
	      this.setAttribute(name, value);
	    }
	    function attrConstantNS() {
	      this.setAttributeNS(name.space, name.local, value);
	    }
	    function attrFunction() {
	      var x = value.apply(this, arguments);
	      if (x == null) this.removeAttribute(name); else this.setAttribute(name, x);
	    }
	    function attrFunctionNS() {
	      var x = value.apply(this, arguments);
	      if (x == null) this.removeAttributeNS(name.space, name.local); else this.setAttributeNS(name.space, name.local, x);
	    }
	    return value == null ? name.local ? attrNullNS : attrNull : typeof value === "function" ? name.local ? attrFunctionNS : attrFunction : name.local ? attrConstantNS : attrConstant;
	  }
	  function d3_collapse(s) {
	    return s.trim().replace(/\s+/g, " ");
	  }
	  d3_selectionPrototype.classed = function(name, value) {
	    if (arguments.length < 2) {
	      if (typeof name === "string") {
	        var node = this.node(), n = (name = d3_selection_classes(name)).length, i = -1;
	        if (value = node.classList) {
	          while (++i < n) if (!value.contains(name[i])) return false;
	        } else {
	          value = node.getAttribute("class");
	          while (++i < n) if (!d3_selection_classedRe(name[i]).test(value)) return false;
	        }
	        return true;
	      }
	      for (value in name) this.each(d3_selection_classed(value, name[value]));
	      return this;
	    }
	    return this.each(d3_selection_classed(name, value));
	  };
	  function d3_selection_classedRe(name) {
	    return new RegExp("(?:^|\\s+)" + d3.requote(name) + "(?:\\s+|$)", "g");
	  }
	  function d3_selection_classes(name) {
	    return (name + "").trim().split(/^|\s+/);
	  }
	  function d3_selection_classed(name, value) {
	    name = d3_selection_classes(name).map(d3_selection_classedName);
	    var n = name.length;
	    function classedConstant() {
	      var i = -1;
	      while (++i < n) name[i](this, value);
	    }
	    function classedFunction() {
	      var i = -1, x = value.apply(this, arguments);
	      while (++i < n) name[i](this, x);
	    }
	    return typeof value === "function" ? classedFunction : classedConstant;
	  }
	  function d3_selection_classedName(name) {
	    var re = d3_selection_classedRe(name);
	    return function(node, value) {
	      if (c = node.classList) return value ? c.add(name) : c.remove(name);
	      var c = node.getAttribute("class") || "";
	      if (value) {
	        re.lastIndex = 0;
	        if (!re.test(c)) node.setAttribute("class", d3_collapse(c + " " + name));
	      } else {
	        node.setAttribute("class", d3_collapse(c.replace(re, " ")));
	      }
	    };
	  }
	  d3_selectionPrototype.style = function(name, value, priority) {
	    var n = arguments.length;
	    if (n < 3) {
	      if (typeof name !== "string") {
	        if (n < 2) value = "";
	        for (priority in name) this.each(d3_selection_style(priority, name[priority], value));
	        return this;
	      }
	      if (n < 2) {
	        var node = this.node();
	        return d3_window(node).getComputedStyle(node, null).getPropertyValue(name);
	      }
	      priority = "";
	    }
	    return this.each(d3_selection_style(name, value, priority));
	  };
	  function d3_selection_style(name, value, priority) {
	    function styleNull() {
	      this.style.removeProperty(name);
	    }
	    function styleConstant() {
	      this.style.setProperty(name, value, priority);
	    }
	    function styleFunction() {
	      var x = value.apply(this, arguments);
	      if (x == null) this.style.removeProperty(name); else this.style.setProperty(name, x, priority);
	    }
	    return value == null ? styleNull : typeof value === "function" ? styleFunction : styleConstant;
	  }
	  d3_selectionPrototype.property = function(name, value) {
	    if (arguments.length < 2) {
	      if (typeof name === "string") return this.node()[name];
	      for (value in name) this.each(d3_selection_property(value, name[value]));
	      return this;
	    }
	    return this.each(d3_selection_property(name, value));
	  };
	  function d3_selection_property(name, value) {
	    function propertyNull() {
	      delete this[name];
	    }
	    function propertyConstant() {
	      this[name] = value;
	    }
	    function propertyFunction() {
	      var x = value.apply(this, arguments);
	      if (x == null) delete this[name]; else this[name] = x;
	    }
	    return value == null ? propertyNull : typeof value === "function" ? propertyFunction : propertyConstant;
	  }
	  d3_selectionPrototype.text = function(value) {
	    return arguments.length ? this.each(typeof value === "function" ? function() {
	      var v = value.apply(this, arguments);
	      this.textContent = v == null ? "" : v;
	    } : value == null ? function() {
	      this.textContent = "";
	    } : function() {
	      this.textContent = value;
	    }) : this.node().textContent;
	  };
	  d3_selectionPrototype.html = function(value) {
	    return arguments.length ? this.each(typeof value === "function" ? function() {
	      var v = value.apply(this, arguments);
	      this.innerHTML = v == null ? "" : v;
	    } : value == null ? function() {
	      this.innerHTML = "";
	    } : function() {
	      this.innerHTML = value;
	    }) : this.node().innerHTML;
	  };
	  d3_selectionPrototype.append = function(name) {
	    name = d3_selection_creator(name);
	    return this.select(function() {
	      return this.appendChild(name.apply(this, arguments));
	    });
	  };
	  function d3_selection_creator(name) {
	    function create() {
	      var document = this.ownerDocument, namespace = this.namespaceURI;
	      return namespace === d3_nsXhtml && document.documentElement.namespaceURI === d3_nsXhtml ? document.createElement(name) : document.createElementNS(namespace, name);
	    }
	    function createNS() {
	      return this.ownerDocument.createElementNS(name.space, name.local);
	    }
	    return typeof name === "function" ? name : (name = d3.ns.qualify(name)).local ? createNS : create;
	  }
	  d3_selectionPrototype.insert = function(name, before) {
	    name = d3_selection_creator(name);
	    before = d3_selection_selector(before);
	    return this.select(function() {
	      return this.insertBefore(name.apply(this, arguments), before.apply(this, arguments) || null);
	    });
	  };
	  d3_selectionPrototype.remove = function() {
	    return this.each(d3_selectionRemove);
	  };
	  function d3_selectionRemove() {
	    var parent = this.parentNode;
	    if (parent) parent.removeChild(this);
	  }
	  d3_selectionPrototype.data = function(value, key) {
	    var i = -1, n = this.length, group, node;
	    if (!arguments.length) {
	      value = new Array(n = (group = this[0]).length);
	      while (++i < n) {
	        if (node = group[i]) {
	          value[i] = node.__data__;
	        }
	      }
	      return value;
	    }
	    function bind(group, groupData) {
	      var i, n = group.length, m = groupData.length, n0 = Math.min(n, m), updateNodes = new Array(m), enterNodes = new Array(m), exitNodes = new Array(n), node, nodeData;
	      if (key) {
	        var nodeByKeyValue = new d3_Map(), keyValues = new Array(n), keyValue;
	        for (i = -1; ++i < n; ) {
	          if (node = group[i]) {
	            if (nodeByKeyValue.has(keyValue = key.call(node, node.__data__, i))) {
	              exitNodes[i] = node;
	            } else {
	              nodeByKeyValue.set(keyValue, node);
	            }
	            keyValues[i] = keyValue;
	          }
	        }
	        for (i = -1; ++i < m; ) {
	          if (!(node = nodeByKeyValue.get(keyValue = key.call(groupData, nodeData = groupData[i], i)))) {
	            enterNodes[i] = d3_selection_dataNode(nodeData);
	          } else if (node !== true) {
	            updateNodes[i] = node;
	            node.__data__ = nodeData;
	          }
	          nodeByKeyValue.set(keyValue, true);
	        }
	        for (i = -1; ++i < n; ) {
	          if (i in keyValues && nodeByKeyValue.get(keyValues[i]) !== true) {
	            exitNodes[i] = group[i];
	          }
	        }
	      } else {
	        for (i = -1; ++i < n0; ) {
	          node = group[i];
	          nodeData = groupData[i];
	          if (node) {
	            node.__data__ = nodeData;
	            updateNodes[i] = node;
	          } else {
	            enterNodes[i] = d3_selection_dataNode(nodeData);
	          }
	        }
	        for (;i < m; ++i) {
	          enterNodes[i] = d3_selection_dataNode(groupData[i]);
	        }
	        for (;i < n; ++i) {
	          exitNodes[i] = group[i];
	        }
	      }
	      enterNodes.update = updateNodes;
	      enterNodes.parentNode = updateNodes.parentNode = exitNodes.parentNode = group.parentNode;
	      enter.push(enterNodes);
	      update.push(updateNodes);
	      exit.push(exitNodes);
	    }
	    var enter = d3_selection_enter([]), update = d3_selection([]), exit = d3_selection([]);
	    if (typeof value === "function") {
	      while (++i < n) {
	        bind(group = this[i], value.call(group, group.parentNode.__data__, i));
	      }
	    } else {
	      while (++i < n) {
	        bind(group = this[i], value);
	      }
	    }
	    update.enter = function() {
	      return enter;
	    };
	    update.exit = function() {
	      return exit;
	    };
	    return update;
	  };
	  function d3_selection_dataNode(data) {
	    return {
	      __data__: data
	    };
	  }
	  d3_selectionPrototype.datum = function(value) {
	    return arguments.length ? this.property("__data__", value) : this.property("__data__");
	  };
	  d3_selectionPrototype.filter = function(filter) {
	    var subgroups = [], subgroup, group, node;
	    if (typeof filter !== "function") filter = d3_selection_filter(filter);
	    for (var j = 0, m = this.length; j < m; j++) {
	      subgroups.push(subgroup = []);
	      subgroup.parentNode = (group = this[j]).parentNode;
	      for (var i = 0, n = group.length; i < n; i++) {
	        if ((node = group[i]) && filter.call(node, node.__data__, i, j)) {
	          subgroup.push(node);
	        }
	      }
	    }
	    return d3_selection(subgroups);
	  };
	  function d3_selection_filter(selector) {
	    return function() {
	      return d3_selectMatches(this, selector);
	    };
	  }
	  d3_selectionPrototype.order = function() {
	    for (var j = -1, m = this.length; ++j < m; ) {
	      for (var group = this[j], i = group.length - 1, next = group[i], node; --i >= 0; ) {
	        if (node = group[i]) {
	          if (next && next !== node.nextSibling) next.parentNode.insertBefore(node, next);
	          next = node;
	        }
	      }
	    }
	    return this;
	  };
	  d3_selectionPrototype.sort = function(comparator) {
	    comparator = d3_selection_sortComparator.apply(this, arguments);
	    for (var j = -1, m = this.length; ++j < m; ) this[j].sort(comparator);
	    return this.order();
	  };
	  function d3_selection_sortComparator(comparator) {
	    if (!arguments.length) comparator = d3_ascending;
	    return function(a, b) {
	      return a && b ? comparator(a.__data__, b.__data__) : !a - !b;
	    };
	  }
	  d3_selectionPrototype.each = function(callback) {
	    return d3_selection_each(this, function(node, i, j) {
	      callback.call(node, node.__data__, i, j);
	    });
	  };
	  function d3_selection_each(groups, callback) {
	    for (var j = 0, m = groups.length; j < m; j++) {
	      for (var group = groups[j], i = 0, n = group.length, node; i < n; i++) {
	        if (node = group[i]) callback(node, i, j);
	      }
	    }
	    return groups;
	  }
	  d3_selectionPrototype.call = function(callback) {
	    var args = d3_array(arguments);
	    callback.apply(args[0] = this, args);
	    return this;
	  };
	  d3_selectionPrototype.empty = function() {
	    return !this.node();
	  };
	  d3_selectionPrototype.node = function() {
	    for (var j = 0, m = this.length; j < m; j++) {
	      for (var group = this[j], i = 0, n = group.length; i < n; i++) {
	        var node = group[i];
	        if (node) return node;
	      }
	    }
	    return null;
	  };
	  d3_selectionPrototype.size = function() {
	    var n = 0;
	    d3_selection_each(this, function() {
	      ++n;
	    });
	    return n;
	  };
	  function d3_selection_enter(selection) {
	    d3_subclass(selection, d3_selection_enterPrototype);
	    return selection;
	  }
	  var d3_selection_enterPrototype = [];
	  d3.selection.enter = d3_selection_enter;
	  d3.selection.enter.prototype = d3_selection_enterPrototype;
	  d3_selection_enterPrototype.append = d3_selectionPrototype.append;
	  d3_selection_enterPrototype.empty = d3_selectionPrototype.empty;
	  d3_selection_enterPrototype.node = d3_selectionPrototype.node;
	  d3_selection_enterPrototype.call = d3_selectionPrototype.call;
	  d3_selection_enterPrototype.size = d3_selectionPrototype.size;
	  d3_selection_enterPrototype.select = function(selector) {
	    var subgroups = [], subgroup, subnode, upgroup, group, node;
	    for (var j = -1, m = this.length; ++j < m; ) {
	      upgroup = (group = this[j]).update;
	      subgroups.push(subgroup = []);
	      subgroup.parentNode = group.parentNode;
	      for (var i = -1, n = group.length; ++i < n; ) {
	        if (node = group[i]) {
	          subgroup.push(upgroup[i] = subnode = selector.call(group.parentNode, node.__data__, i, j));
	          subnode.__data__ = node.__data__;
	        } else {
	          subgroup.push(null);
	        }
	      }
	    }
	    return d3_selection(subgroups);
	  };
	  d3_selection_enterPrototype.insert = function(name, before) {
	    if (arguments.length < 2) before = d3_selection_enterInsertBefore(this);
	    return d3_selectionPrototype.insert.call(this, name, before);
	  };
	  function d3_selection_enterInsertBefore(enter) {
	    var i0, j0;
	    return function(d, i, j) {
	      var group = enter[j].update, n = group.length, node;
	      if (j != j0) j0 = j, i0 = 0;
	      if (i >= i0) i0 = i + 1;
	      while (!(node = group[i0]) && ++i0 < n) ;
	      return node;
	    };
	  }
	  d3.select = function(node) {
	    var group;
	    if (typeof node === "string") {
	      group = [ d3_select(node, d3_document) ];
	      group.parentNode = d3_document.documentElement;
	    } else {
	      group = [ node ];
	      group.parentNode = d3_documentElement(node);
	    }
	    return d3_selection([ group ]);
	  };
	  d3.selectAll = function(nodes) {
	    var group;
	    if (typeof nodes === "string") {
	      group = d3_array(d3_selectAll(nodes, d3_document));
	      group.parentNode = d3_document.documentElement;
	    } else {
	      group = d3_array(nodes);
	      group.parentNode = null;
	    }
	    return d3_selection([ group ]);
	  };
	  d3_selectionPrototype.on = function(type, listener, capture) {
	    var n = arguments.length;
	    if (n < 3) {
	      if (typeof type !== "string") {
	        if (n < 2) listener = false;
	        for (capture in type) this.each(d3_selection_on(capture, type[capture], listener));
	        return this;
	      }
	      if (n < 2) return (n = this.node()["__on" + type]) && n._;
	      capture = false;
	    }
	    return this.each(d3_selection_on(type, listener, capture));
	  };
	  function d3_selection_on(type, listener, capture) {
	    var name = "__on" + type, i = type.indexOf("."), wrap = d3_selection_onListener;
	    if (i > 0) type = type.slice(0, i);
	    var filter = d3_selection_onFilters.get(type);
	    if (filter) type = filter, wrap = d3_selection_onFilter;
	    function onRemove() {
	      var l = this[name];
	      if (l) {
	        this.removeEventListener(type, l, l.$);
	        delete this[name];
	      }
	    }
	    function onAdd() {
	      var l = wrap(listener, d3_array(arguments));
	      onRemove.call(this);
	      this.addEventListener(type, this[name] = l, l.$ = capture);
	      l._ = listener;
	    }
	    function removeAll() {
	      var re = new RegExp("^__on([^.]+)" + d3.requote(type) + "$"), match;
	      for (var name in this) {
	        if (match = name.match(re)) {
	          var l = this[name];
	          this.removeEventListener(match[1], l, l.$);
	          delete this[name];
	        }
	      }
	    }
	    return i ? listener ? onAdd : onRemove : listener ? d3_noop : removeAll;
	  }
	  var d3_selection_onFilters = d3.map({
	    mouseenter: "mouseover",
	    mouseleave: "mouseout"
	  });
	  if (d3_document) {
	    d3_selection_onFilters.forEach(function(k) {
	      if ("on" + k in d3_document) d3_selection_onFilters.remove(k);
	    });
	  }
	  function d3_selection_onListener(listener, argumentz) {
	    return function(e) {
	      var o = d3.event;
	      d3.event = e;
	      argumentz[0] = this.__data__;
	      try {
	        listener.apply(this, argumentz);
	      } finally {
	        d3.event = o;
	      }
	    };
	  }
	  function d3_selection_onFilter(listener, argumentz) {
	    var l = d3_selection_onListener(listener, argumentz);
	    return function(e) {
	      var target = this, related = e.relatedTarget;
	      if (!related || related !== target && !(related.compareDocumentPosition(target) & 8)) {
	        l.call(target, e);
	      }
	    };
	  }
	  var d3_event_dragSelect, d3_event_dragId = 0;
	  function d3_event_dragSuppress(node) {
	    var name = ".dragsuppress-" + ++d3_event_dragId, click = "click" + name, w = d3.select(d3_window(node)).on("touchmove" + name, d3_eventPreventDefault).on("dragstart" + name, d3_eventPreventDefault).on("selectstart" + name, d3_eventPreventDefault);
	    if (d3_event_dragSelect == null) {
	      d3_event_dragSelect = "onselectstart" in node ? false : d3_vendorSymbol(node.style, "userSelect");
	    }
	    if (d3_event_dragSelect) {
	      var style = d3_documentElement(node).style, select = style[d3_event_dragSelect];
	      style[d3_event_dragSelect] = "none";
	    }
	    return function(suppressClick) {
	      w.on(name, null);
	      if (d3_event_dragSelect) style[d3_event_dragSelect] = select;
	      if (suppressClick) {
	        var off = function() {
	          w.on(click, null);
	        };
	        w.on(click, function() {
	          d3_eventPreventDefault();
	          off();
	        }, true);
	        setTimeout(off, 0);
	      }
	    };
	  }
	  d3.mouse = function(container) {
	    return d3_mousePoint(container, d3_eventSource());
	  };
	  var d3_mouse_bug44083 = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;
	  function d3_mousePoint(container, e) {
	    if (e.changedTouches) e = e.changedTouches[0];
	    var svg = container.ownerSVGElement || container;
	    if (svg.createSVGPoint) {
	      var point = svg.createSVGPoint();
	      if (d3_mouse_bug44083 < 0) {
	        var window = d3_window(container);
	        if (window.scrollX || window.scrollY) {
	          svg = d3.select("body").append("svg").style({
	            position: "absolute",
	            top: 0,
	            left: 0,
	            margin: 0,
	            padding: 0,
	            border: "none"
	          }, "important");
	          var ctm = svg[0][0].getScreenCTM();
	          d3_mouse_bug44083 = !(ctm.f || ctm.e);
	          svg.remove();
	        }
	      }
	      if (d3_mouse_bug44083) point.x = e.pageX, point.y = e.pageY; else point.x = e.clientX, 
	      point.y = e.clientY;
	      point = point.matrixTransform(container.getScreenCTM().inverse());
	      return [ point.x, point.y ];
	    }
	    var rect = container.getBoundingClientRect();
	    return [ e.clientX - rect.left - container.clientLeft, e.clientY - rect.top - container.clientTop ];
	  }
	  d3.touch = function(container, touches, identifier) {
	    if (arguments.length < 3) identifier = touches, touches = d3_eventSource().changedTouches;
	    if (touches) for (var i = 0, n = touches.length, touch; i < n; ++i) {
	      if ((touch = touches[i]).identifier === identifier) {
	        return d3_mousePoint(container, touch);
	      }
	    }
	  };
	  d3.behavior.drag = function() {
	    var event = d3_eventDispatch(drag, "drag", "dragstart", "dragend"), origin = null, mousedown = dragstart(d3_noop, d3.mouse, d3_window, "mousemove", "mouseup"), touchstart = dragstart(d3_behavior_dragTouchId, d3.touch, d3_identity, "touchmove", "touchend");
	    function drag() {
	      this.on("mousedown.drag", mousedown).on("touchstart.drag", touchstart);
	    }
	    function dragstart(id, position, subject, move, end) {
	      return function() {
	        var that = this, target = d3.event.target.correspondingElement || d3.event.target, parent = that.parentNode, dispatch = event.of(that, arguments), dragged = 0, dragId = id(), dragName = ".drag" + (dragId == null ? "" : "-" + dragId), dragOffset, dragSubject = d3.select(subject(target)).on(move + dragName, moved).on(end + dragName, ended), dragRestore = d3_event_dragSuppress(target), position0 = position(parent, dragId);
	        if (origin) {
	          dragOffset = origin.apply(that, arguments);
	          dragOffset = [ dragOffset.x - position0[0], dragOffset.y - position0[1] ];
	        } else {
	          dragOffset = [ 0, 0 ];
	        }
	        dispatch({
	          type: "dragstart"
	        });
	        function moved() {
	          var position1 = position(parent, dragId), dx, dy;
	          if (!position1) return;
	          dx = position1[0] - position0[0];
	          dy = position1[1] - position0[1];
	          dragged |= dx | dy;
	          position0 = position1;
	          dispatch({
	            type: "drag",
	            x: position1[0] + dragOffset[0],
	            y: position1[1] + dragOffset[1],
	            dx: dx,
	            dy: dy
	          });
	        }
	        function ended() {
	          if (!position(parent, dragId)) return;
	          dragSubject.on(move + dragName, null).on(end + dragName, null);
	          dragRestore(dragged);
	          dispatch({
	            type: "dragend"
	          });
	        }
	      };
	    }
	    drag.origin = function(x) {
	      if (!arguments.length) return origin;
	      origin = x;
	      return drag;
	    };
	    return d3.rebind(drag, event, "on");
	  };
	  function d3_behavior_dragTouchId() {
	    return d3.event.changedTouches[0].identifier;
	  }
	  d3.touches = function(container, touches) {
	    if (arguments.length < 2) touches = d3_eventSource().touches;
	    return touches ? d3_array(touches).map(function(touch) {
	      var point = d3_mousePoint(container, touch);
	      point.identifier = touch.identifier;
	      return point;
	    }) : [];
	  };
	  var ε = 1e-6, ε2 = ε * ε, π = Math.PI, τ = 2 * π, τε = τ - ε, halfπ = π / 2, d3_radians = π / 180, d3_degrees = 180 / π;
	  function d3_sgn(x) {
	    return x > 0 ? 1 : x < 0 ? -1 : 0;
	  }
	  function d3_cross2d(a, b, c) {
	    return (b[0] - a[0]) * (c[1] - a[1]) - (b[1] - a[1]) * (c[0] - a[0]);
	  }
	  function d3_acos(x) {
	    return x > 1 ? 0 : x < -1 ? π : Math.acos(x);
	  }
	  function d3_asin(x) {
	    return x > 1 ? halfπ : x < -1 ? -halfπ : Math.asin(x);
	  }
	  function d3_sinh(x) {
	    return ((x = Math.exp(x)) - 1 / x) / 2;
	  }
	  function d3_cosh(x) {
	    return ((x = Math.exp(x)) + 1 / x) / 2;
	  }
	  function d3_tanh(x) {
	    return ((x = Math.exp(2 * x)) - 1) / (x + 1);
	  }
	  function d3_haversin(x) {
	    return (x = Math.sin(x / 2)) * x;
	  }
	  var ρ = Math.SQRT2, ρ2 = 2, ρ4 = 4;
	  d3.interpolateZoom = function(p0, p1) {
	    var ux0 = p0[0], uy0 = p0[1], w0 = p0[2], ux1 = p1[0], uy1 = p1[1], w1 = p1[2], dx = ux1 - ux0, dy = uy1 - uy0, d2 = dx * dx + dy * dy, i, S;
	    if (d2 < ε2) {
	      S = Math.log(w1 / w0) / ρ;
	      i = function(t) {
	        return [ ux0 + t * dx, uy0 + t * dy, w0 * Math.exp(ρ * t * S) ];
	      };
	    } else {
	      var d1 = Math.sqrt(d2), b0 = (w1 * w1 - w0 * w0 + ρ4 * d2) / (2 * w0 * ρ2 * d1), b1 = (w1 * w1 - w0 * w0 - ρ4 * d2) / (2 * w1 * ρ2 * d1), r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0), r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);
	      S = (r1 - r0) / ρ;
	      i = function(t) {
	        var s = t * S, coshr0 = d3_cosh(r0), u = w0 / (ρ2 * d1) * (coshr0 * d3_tanh(ρ * s + r0) - d3_sinh(r0));
	        return [ ux0 + u * dx, uy0 + u * dy, w0 * coshr0 / d3_cosh(ρ * s + r0) ];
	      };
	    }
	    i.duration = S * 1e3;
	    return i;
	  };
	  d3.behavior.zoom = function() {
	    var view = {
	      x: 0,
	      y: 0,
	      k: 1
	    }, translate0, center0, center, size = [ 960, 500 ], scaleExtent = d3_behavior_zoomInfinity, duration = 250, zooming = 0, mousedown = "mousedown.zoom", mousemove = "mousemove.zoom", mouseup = "mouseup.zoom", mousewheelTimer, touchstart = "touchstart.zoom", touchtime, event = d3_eventDispatch(zoom, "zoomstart", "zoom", "zoomend"), x0, x1, y0, y1;
	    if (!d3_behavior_zoomWheel) {
	      d3_behavior_zoomWheel = "onwheel" in d3_document ? (d3_behavior_zoomDelta = function() {
	        return -d3.event.deltaY * (d3.event.deltaMode ? 120 : 1);
	      }, "wheel") : "onmousewheel" in d3_document ? (d3_behavior_zoomDelta = function() {
	        return d3.event.wheelDelta;
	      }, "mousewheel") : (d3_behavior_zoomDelta = function() {
	        return -d3.event.detail;
	      }, "MozMousePixelScroll");
	    }
	    function zoom(g) {
	      g.on(mousedown, mousedowned).on(d3_behavior_zoomWheel + ".zoom", mousewheeled).on("dblclick.zoom", dblclicked).on(touchstart, touchstarted);
	    }
	    zoom.event = function(g) {
	      g.each(function() {
	        var dispatch = event.of(this, arguments), view1 = view;
	        if (d3_transitionInheritId) {
	          d3.select(this).transition().each("start.zoom", function() {
	            view = this.__chart__ || {
	              x: 0,
	              y: 0,
	              k: 1
	            };
	            zoomstarted(dispatch);
	          }).tween("zoom:zoom", function() {
	            var dx = size[0], dy = size[1], cx = center0 ? center0[0] : dx / 2, cy = center0 ? center0[1] : dy / 2, i = d3.interpolateZoom([ (cx - view.x) / view.k, (cy - view.y) / view.k, dx / view.k ], [ (cx - view1.x) / view1.k, (cy - view1.y) / view1.k, dx / view1.k ]);
	            return function(t) {
	              var l = i(t), k = dx / l[2];
	              this.__chart__ = view = {
	                x: cx - l[0] * k,
	                y: cy - l[1] * k,
	                k: k
	              };
	              zoomed(dispatch);
	            };
	          }).each("interrupt.zoom", function() {
	            zoomended(dispatch);
	          }).each("end.zoom", function() {
	            zoomended(dispatch);
	          });
	        } else {
	          this.__chart__ = view;
	          zoomstarted(dispatch);
	          zoomed(dispatch);
	          zoomended(dispatch);
	        }
	      });
	    };
	    zoom.translate = function(_) {
	      if (!arguments.length) return [ view.x, view.y ];
	      view = {
	        x: +_[0],
	        y: +_[1],
	        k: view.k
	      };
	      rescale();
	      return zoom;
	    };
	    zoom.scale = function(_) {
	      if (!arguments.length) return view.k;
	      view = {
	        x: view.x,
	        y: view.y,
	        k: null
	      };
	      scaleTo(+_);
	      rescale();
	      return zoom;
	    };
	    zoom.scaleExtent = function(_) {
	      if (!arguments.length) return scaleExtent;
	      scaleExtent = _ == null ? d3_behavior_zoomInfinity : [ +_[0], +_[1] ];
	      return zoom;
	    };
	    zoom.center = function(_) {
	      if (!arguments.length) return center;
	      center = _ && [ +_[0], +_[1] ];
	      return zoom;
	    };
	    zoom.size = function(_) {
	      if (!arguments.length) return size;
	      size = _ && [ +_[0], +_[1] ];
	      return zoom;
	    };
	    zoom.duration = function(_) {
	      if (!arguments.length) return duration;
	      duration = +_;
	      return zoom;
	    };
	    zoom.x = function(z) {
	      if (!arguments.length) return x1;
	      x1 = z;
	      x0 = z.copy();
	      view = {
	        x: 0,
	        y: 0,
	        k: 1
	      };
	      return zoom;
	    };
	    zoom.y = function(z) {
	      if (!arguments.length) return y1;
	      y1 = z;
	      y0 = z.copy();
	      view = {
	        x: 0,
	        y: 0,
	        k: 1
	      };
	      return zoom;
	    };
	    function location(p) {
	      return [ (p[0] - view.x) / view.k, (p[1] - view.y) / view.k ];
	    }
	    function point(l) {
	      return [ l[0] * view.k + view.x, l[1] * view.k + view.y ];
	    }
	    function scaleTo(s) {
	      view.k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], s));
	    }
	    function translateTo(p, l) {
	      l = point(l);
	      view.x += p[0] - l[0];
	      view.y += p[1] - l[1];
	    }
	    function zoomTo(that, p, l, k) {
	      that.__chart__ = {
	        x: view.x,
	        y: view.y,
	        k: view.k
	      };
	      scaleTo(Math.pow(2, k));
	      translateTo(center0 = p, l);
	      that = d3.select(that);
	      if (duration > 0) that = that.transition().duration(duration);
	      that.call(zoom.event);
	    }
	    function rescale() {
	      if (x1) x1.domain(x0.range().map(function(x) {
	        return (x - view.x) / view.k;
	      }).map(x0.invert));
	      if (y1) y1.domain(y0.range().map(function(y) {
	        return (y - view.y) / view.k;
	      }).map(y0.invert));
	    }
	    function zoomstarted(dispatch) {
	      if (!zooming++) dispatch({
	        type: "zoomstart"
	      });
	    }
	    function zoomed(dispatch) {
	      rescale();
	      dispatch({
	        type: "zoom",
	        scale: view.k,
	        translate: [ view.x, view.y ]
	      });
	    }
	    function zoomended(dispatch) {
	      if (!--zooming) dispatch({
	        type: "zoomend"
	      }), center0 = null;
	    }
	    function mousedowned() {
	      var that = this, dispatch = event.of(that, arguments), dragged = 0, subject = d3.select(d3_window(that)).on(mousemove, moved).on(mouseup, ended), location0 = location(d3.mouse(that)), dragRestore = d3_event_dragSuppress(that);
	      d3_selection_interrupt.call(that);
	      zoomstarted(dispatch);
	      function moved() {
	        dragged = 1;
	        translateTo(d3.mouse(that), location0);
	        zoomed(dispatch);
	      }
	      function ended() {
	        subject.on(mousemove, null).on(mouseup, null);
	        dragRestore(dragged);
	        zoomended(dispatch);
	      }
	    }
	    function touchstarted() {
	      var that = this, dispatch = event.of(that, arguments), locations0 = {}, distance0 = 0, scale0, zoomName = ".zoom-" + d3.event.changedTouches[0].identifier, touchmove = "touchmove" + zoomName, touchend = "touchend" + zoomName, targets = [], subject = d3.select(that), dragRestore = d3_event_dragSuppress(that);
	      started();
	      zoomstarted(dispatch);
	      subject.on(mousedown, null).on(touchstart, started);
	      function relocate() {
	        var touches = d3.touches(that);
	        scale0 = view.k;
	        touches.forEach(function(t) {
	          if (t.identifier in locations0) locations0[t.identifier] = location(t);
	        });
	        return touches;
	      }
	      function started() {
	        var target = d3.event.target;
	        d3.select(target).on(touchmove, moved).on(touchend, ended);
	        targets.push(target);
	        var changed = d3.event.changedTouches;
	        for (var i = 0, n = changed.length; i < n; ++i) {
	          locations0[changed[i].identifier] = null;
	        }
	        var touches = relocate(), now = Date.now();
	        if (touches.length === 1) {
	          if (now - touchtime < 500) {
	            var p = touches[0];
	            zoomTo(that, p, locations0[p.identifier], Math.floor(Math.log(view.k) / Math.LN2) + 1);
	            d3_eventPreventDefault();
	          }
	          touchtime = now;
	        } else if (touches.length > 1) {
	          var p = touches[0], q = touches[1], dx = p[0] - q[0], dy = p[1] - q[1];
	          distance0 = dx * dx + dy * dy;
	        }
	      }
	      function moved() {
	        var touches = d3.touches(that), p0, l0, p1, l1;
	        d3_selection_interrupt.call(that);
	        for (var i = 0, n = touches.length; i < n; ++i, l1 = null) {
	          p1 = touches[i];
	          if (l1 = locations0[p1.identifier]) {
	            if (l0) break;
	            p0 = p1, l0 = l1;
	          }
	        }
	        if (l1) {
	          var distance1 = (distance1 = p1[0] - p0[0]) * distance1 + (distance1 = p1[1] - p0[1]) * distance1, scale1 = distance0 && Math.sqrt(distance1 / distance0);
	          p0 = [ (p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2 ];
	          l0 = [ (l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2 ];
	          scaleTo(scale1 * scale0);
	        }
	        touchtime = null;
	        translateTo(p0, l0);
	        zoomed(dispatch);
	      }
	      function ended() {
	        if (d3.event.touches.length) {
	          var changed = d3.event.changedTouches;
	          for (var i = 0, n = changed.length; i < n; ++i) {
	            delete locations0[changed[i].identifier];
	          }
	          for (var identifier in locations0) {
	            return void relocate();
	          }
	        }
	        d3.selectAll(targets).on(zoomName, null);
	        subject.on(mousedown, mousedowned).on(touchstart, touchstarted);
	        dragRestore();
	        zoomended(dispatch);
	      }
	    }
	    function mousewheeled() {
	      var dispatch = event.of(this, arguments);
	      if (mousewheelTimer) clearTimeout(mousewheelTimer); else d3_selection_interrupt.call(this), 
	      translate0 = location(center0 = center || d3.mouse(this)), zoomstarted(dispatch);
	      mousewheelTimer = setTimeout(function() {
	        mousewheelTimer = null;
	        zoomended(dispatch);
	      }, 50);
	      d3_eventPreventDefault();
	      scaleTo(Math.pow(2, d3_behavior_zoomDelta() * .002) * view.k);
	      translateTo(center0, translate0);
	      zoomed(dispatch);
	    }
	    function dblclicked() {
	      var p = d3.mouse(this), k = Math.log(view.k) / Math.LN2;
	      zoomTo(this, p, location(p), d3.event.shiftKey ? Math.ceil(k) - 1 : Math.floor(k) + 1);
	    }
	    return d3.rebind(zoom, event, "on");
	  };
	  var d3_behavior_zoomInfinity = [ 0, Infinity ], d3_behavior_zoomDelta, d3_behavior_zoomWheel;
	  d3.color = d3_color;
	  function d3_color() {}
	  d3_color.prototype.toString = function() {
	    return this.rgb() + "";
	  };
	  d3.hsl = d3_hsl;
	  function d3_hsl(h, s, l) {
	    return this instanceof d3_hsl ? void (this.h = +h, this.s = +s, this.l = +l) : arguments.length < 2 ? h instanceof d3_hsl ? new d3_hsl(h.h, h.s, h.l) : d3_rgb_parse("" + h, d3_rgb_hsl, d3_hsl) : new d3_hsl(h, s, l);
	  }
	  var d3_hslPrototype = d3_hsl.prototype = new d3_color();
	  d3_hslPrototype.brighter = function(k) {
	    k = Math.pow(.7, arguments.length ? k : 1);
	    return new d3_hsl(this.h, this.s, this.l / k);
	  };
	  d3_hslPrototype.darker = function(k) {
	    k = Math.pow(.7, arguments.length ? k : 1);
	    return new d3_hsl(this.h, this.s, k * this.l);
	  };
	  d3_hslPrototype.rgb = function() {
	    return d3_hsl_rgb(this.h, this.s, this.l);
	  };
	  function d3_hsl_rgb(h, s, l) {
	    var m1, m2;
	    h = isNaN(h) ? 0 : (h %= 360) < 0 ? h + 360 : h;
	    s = isNaN(s) ? 0 : s < 0 ? 0 : s > 1 ? 1 : s;
	    l = l < 0 ? 0 : l > 1 ? 1 : l;
	    m2 = l <= .5 ? l * (1 + s) : l + s - l * s;
	    m1 = 2 * l - m2;
	    function v(h) {
	      if (h > 360) h -= 360; else if (h < 0) h += 360;
	      if (h < 60) return m1 + (m2 - m1) * h / 60;
	      if (h < 180) return m2;
	      if (h < 240) return m1 + (m2 - m1) * (240 - h) / 60;
	      return m1;
	    }
	    function vv(h) {
	      return Math.round(v(h) * 255);
	    }
	    return new d3_rgb(vv(h + 120), vv(h), vv(h - 120));
	  }
	  d3.hcl = d3_hcl;
	  function d3_hcl(h, c, l) {
	    return this instanceof d3_hcl ? void (this.h = +h, this.c = +c, this.l = +l) : arguments.length < 2 ? h instanceof d3_hcl ? new d3_hcl(h.h, h.c, h.l) : h instanceof d3_lab ? d3_lab_hcl(h.l, h.a, h.b) : d3_lab_hcl((h = d3_rgb_lab((h = d3.rgb(h)).r, h.g, h.b)).l, h.a, h.b) : new d3_hcl(h, c, l);
	  }
	  var d3_hclPrototype = d3_hcl.prototype = new d3_color();
	  d3_hclPrototype.brighter = function(k) {
	    return new d3_hcl(this.h, this.c, Math.min(100, this.l + d3_lab_K * (arguments.length ? k : 1)));
	  };
	  d3_hclPrototype.darker = function(k) {
	    return new d3_hcl(this.h, this.c, Math.max(0, this.l - d3_lab_K * (arguments.length ? k : 1)));
	  };
	  d3_hclPrototype.rgb = function() {
	    return d3_hcl_lab(this.h, this.c, this.l).rgb();
	  };
	  function d3_hcl_lab(h, c, l) {
	    if (isNaN(h)) h = 0;
	    if (isNaN(c)) c = 0;
	    return new d3_lab(l, Math.cos(h *= d3_radians) * c, Math.sin(h) * c);
	  }
	  d3.lab = d3_lab;
	  function d3_lab(l, a, b) {
	    return this instanceof d3_lab ? void (this.l = +l, this.a = +a, this.b = +b) : arguments.length < 2 ? l instanceof d3_lab ? new d3_lab(l.l, l.a, l.b) : l instanceof d3_hcl ? d3_hcl_lab(l.h, l.c, l.l) : d3_rgb_lab((l = d3_rgb(l)).r, l.g, l.b) : new d3_lab(l, a, b);
	  }
	  var d3_lab_K = 18;
	  var d3_lab_X = .95047, d3_lab_Y = 1, d3_lab_Z = 1.08883;
	  var d3_labPrototype = d3_lab.prototype = new d3_color();
	  d3_labPrototype.brighter = function(k) {
	    return new d3_lab(Math.min(100, this.l + d3_lab_K * (arguments.length ? k : 1)), this.a, this.b);
	  };
	  d3_labPrototype.darker = function(k) {
	    return new d3_lab(Math.max(0, this.l - d3_lab_K * (arguments.length ? k : 1)), this.a, this.b);
	  };
	  d3_labPrototype.rgb = function() {
	    return d3_lab_rgb(this.l, this.a, this.b);
	  };
	  function d3_lab_rgb(l, a, b) {
	    var y = (l + 16) / 116, x = y + a / 500, z = y - b / 200;
	    x = d3_lab_xyz(x) * d3_lab_X;
	    y = d3_lab_xyz(y) * d3_lab_Y;
	    z = d3_lab_xyz(z) * d3_lab_Z;
	    return new d3_rgb(d3_xyz_rgb(3.2404542 * x - 1.5371385 * y - .4985314 * z), d3_xyz_rgb(-.969266 * x + 1.8760108 * y + .041556 * z), d3_xyz_rgb(.0556434 * x - .2040259 * y + 1.0572252 * z));
	  }
	  function d3_lab_hcl(l, a, b) {
	    return l > 0 ? new d3_hcl(Math.atan2(b, a) * d3_degrees, Math.sqrt(a * a + b * b), l) : new d3_hcl(NaN, NaN, l);
	  }
	  function d3_lab_xyz(x) {
	    return x > .206893034 ? x * x * x : (x - 4 / 29) / 7.787037;
	  }
	  function d3_xyz_lab(x) {
	    return x > .008856 ? Math.pow(x, 1 / 3) : 7.787037 * x + 4 / 29;
	  }
	  function d3_xyz_rgb(r) {
	    return Math.round(255 * (r <= .00304 ? 12.92 * r : 1.055 * Math.pow(r, 1 / 2.4) - .055));
	  }
	  d3.rgb = d3_rgb;
	  function d3_rgb(r, g, b) {
	    return this instanceof d3_rgb ? void (this.r = ~~r, this.g = ~~g, this.b = ~~b) : arguments.length < 2 ? r instanceof d3_rgb ? new d3_rgb(r.r, r.g, r.b) : d3_rgb_parse("" + r, d3_rgb, d3_hsl_rgb) : new d3_rgb(r, g, b);
	  }
	  function d3_rgbNumber(value) {
	    return new d3_rgb(value >> 16, value >> 8 & 255, value & 255);
	  }
	  function d3_rgbString(value) {
	    return d3_rgbNumber(value) + "";
	  }
	  var d3_rgbPrototype = d3_rgb.prototype = new d3_color();
	  d3_rgbPrototype.brighter = function(k) {
	    k = Math.pow(.7, arguments.length ? k : 1);
	    var r = this.r, g = this.g, b = this.b, i = 30;
	    if (!r && !g && !b) return new d3_rgb(i, i, i);
	    if (r && r < i) r = i;
	    if (g && g < i) g = i;
	    if (b && b < i) b = i;
	    return new d3_rgb(Math.min(255, r / k), Math.min(255, g / k), Math.min(255, b / k));
	  };
	  d3_rgbPrototype.darker = function(k) {
	    k = Math.pow(.7, arguments.length ? k : 1);
	    return new d3_rgb(k * this.r, k * this.g, k * this.b);
	  };
	  d3_rgbPrototype.hsl = function() {
	    return d3_rgb_hsl(this.r, this.g, this.b);
	  };
	  d3_rgbPrototype.toString = function() {
	    return "#" + d3_rgb_hex(this.r) + d3_rgb_hex(this.g) + d3_rgb_hex(this.b);
	  };
	  function d3_rgb_hex(v) {
	    return v < 16 ? "0" + Math.max(0, v).toString(16) : Math.min(255, v).toString(16);
	  }
	  function d3_rgb_parse(format, rgb, hsl) {
	    var r = 0, g = 0, b = 0, m1, m2, color;
	    m1 = /([a-z]+)\((.*)\)/.exec(format = format.toLowerCase());
	    if (m1) {
	      m2 = m1[2].split(",");
	      switch (m1[1]) {
	       case "hsl":
	        {
	          return hsl(parseFloat(m2[0]), parseFloat(m2[1]) / 100, parseFloat(m2[2]) / 100);
	        }
	
	       case "rgb":
	        {
	          return rgb(d3_rgb_parseNumber(m2[0]), d3_rgb_parseNumber(m2[1]), d3_rgb_parseNumber(m2[2]));
	        }
	      }
	    }
	    if (color = d3_rgb_names.get(format)) {
	      return rgb(color.r, color.g, color.b);
	    }
	    if (format != null && format.charAt(0) === "#" && !isNaN(color = parseInt(format.slice(1), 16))) {
	      if (format.length === 4) {
	        r = (color & 3840) >> 4;
	        r = r >> 4 | r;
	        g = color & 240;
	        g = g >> 4 | g;
	        b = color & 15;
	        b = b << 4 | b;
	      } else if (format.length === 7) {
	        r = (color & 16711680) >> 16;
	        g = (color & 65280) >> 8;
	        b = color & 255;
	      }
	    }
	    return rgb(r, g, b);
	  }
	  function d3_rgb_hsl(r, g, b) {
	    var min = Math.min(r /= 255, g /= 255, b /= 255), max = Math.max(r, g, b), d = max - min, h, s, l = (max + min) / 2;
	    if (d) {
	      s = l < .5 ? d / (max + min) : d / (2 - max - min);
	      if (r == max) h = (g - b) / d + (g < b ? 6 : 0); else if (g == max) h = (b - r) / d + 2; else h = (r - g) / d + 4;
	      h *= 60;
	    } else {
	      h = NaN;
	      s = l > 0 && l < 1 ? 0 : h;
	    }
	    return new d3_hsl(h, s, l);
	  }
	  function d3_rgb_lab(r, g, b) {
	    r = d3_rgb_xyz(r);
	    g = d3_rgb_xyz(g);
	    b = d3_rgb_xyz(b);
	    var x = d3_xyz_lab((.4124564 * r + .3575761 * g + .1804375 * b) / d3_lab_X), y = d3_xyz_lab((.2126729 * r + .7151522 * g + .072175 * b) / d3_lab_Y), z = d3_xyz_lab((.0193339 * r + .119192 * g + .9503041 * b) / d3_lab_Z);
	    return d3_lab(116 * y - 16, 500 * (x - y), 200 * (y - z));
	  }
	  function d3_rgb_xyz(r) {
	    return (r /= 255) <= .04045 ? r / 12.92 : Math.pow((r + .055) / 1.055, 2.4);
	  }
	  function d3_rgb_parseNumber(c) {
	    var f = parseFloat(c);
	    return c.charAt(c.length - 1) === "%" ? Math.round(f * 2.55) : f;
	  }
	  var d3_rgb_names = d3.map({
	    aliceblue: 15792383,
	    antiquewhite: 16444375,
	    aqua: 65535,
	    aquamarine: 8388564,
	    azure: 15794175,
	    beige: 16119260,
	    bisque: 16770244,
	    black: 0,
	    blanchedalmond: 16772045,
	    blue: 255,
	    blueviolet: 9055202,
	    brown: 10824234,
	    burlywood: 14596231,
	    cadetblue: 6266528,
	    chartreuse: 8388352,
	    chocolate: 13789470,
	    coral: 16744272,
	    cornflowerblue: 6591981,
	    cornsilk: 16775388,
	    crimson: 14423100,
	    cyan: 65535,
	    darkblue: 139,
	    darkcyan: 35723,
	    darkgoldenrod: 12092939,
	    darkgray: 11119017,
	    darkgreen: 25600,
	    darkgrey: 11119017,
	    darkkhaki: 12433259,
	    darkmagenta: 9109643,
	    darkolivegreen: 5597999,
	    darkorange: 16747520,
	    darkorchid: 10040012,
	    darkred: 9109504,
	    darksalmon: 15308410,
	    darkseagreen: 9419919,
	    darkslateblue: 4734347,
	    darkslategray: 3100495,
	    darkslategrey: 3100495,
	    darkturquoise: 52945,
	    darkviolet: 9699539,
	    deeppink: 16716947,
	    deepskyblue: 49151,
	    dimgray: 6908265,
	    dimgrey: 6908265,
	    dodgerblue: 2003199,
	    firebrick: 11674146,
	    floralwhite: 16775920,
	    forestgreen: 2263842,
	    fuchsia: 16711935,
	    gainsboro: 14474460,
	    ghostwhite: 16316671,
	    gold: 16766720,
	    goldenrod: 14329120,
	    gray: 8421504,
	    green: 32768,
	    greenyellow: 11403055,
	    grey: 8421504,
	    honeydew: 15794160,
	    hotpink: 16738740,
	    indianred: 13458524,
	    indigo: 4915330,
	    ivory: 16777200,
	    khaki: 15787660,
	    lavender: 15132410,
	    lavenderblush: 16773365,
	    lawngreen: 8190976,
	    lemonchiffon: 16775885,
	    lightblue: 11393254,
	    lightcoral: 15761536,
	    lightcyan: 14745599,
	    lightgoldenrodyellow: 16448210,
	    lightgray: 13882323,
	    lightgreen: 9498256,
	    lightgrey: 13882323,
	    lightpink: 16758465,
	    lightsalmon: 16752762,
	    lightseagreen: 2142890,
	    lightskyblue: 8900346,
	    lightslategray: 7833753,
	    lightslategrey: 7833753,
	    lightsteelblue: 11584734,
	    lightyellow: 16777184,
	    lime: 65280,
	    limegreen: 3329330,
	    linen: 16445670,
	    magenta: 16711935,
	    maroon: 8388608,
	    mediumaquamarine: 6737322,
	    mediumblue: 205,
	    mediumorchid: 12211667,
	    mediumpurple: 9662683,
	    mediumseagreen: 3978097,
	    mediumslateblue: 8087790,
	    mediumspringgreen: 64154,
	    mediumturquoise: 4772300,
	    mediumvioletred: 13047173,
	    midnightblue: 1644912,
	    mintcream: 16121850,
	    mistyrose: 16770273,
	    moccasin: 16770229,
	    navajowhite: 16768685,
	    navy: 128,
	    oldlace: 16643558,
	    olive: 8421376,
	    olivedrab: 7048739,
	    orange: 16753920,
	    orangered: 16729344,
	    orchid: 14315734,
	    palegoldenrod: 15657130,
	    palegreen: 10025880,
	    paleturquoise: 11529966,
	    palevioletred: 14381203,
	    papayawhip: 16773077,
	    peachpuff: 16767673,
	    peru: 13468991,
	    pink: 16761035,
	    plum: 14524637,
	    powderblue: 11591910,
	    purple: 8388736,
	    rebeccapurple: 6697881,
	    red: 16711680,
	    rosybrown: 12357519,
	    royalblue: 4286945,
	    saddlebrown: 9127187,
	    salmon: 16416882,
	    sandybrown: 16032864,
	    seagreen: 3050327,
	    seashell: 16774638,
	    sienna: 10506797,
	    silver: 12632256,
	    skyblue: 8900331,
	    slateblue: 6970061,
	    slategray: 7372944,
	    slategrey: 7372944,
	    snow: 16775930,
	    springgreen: 65407,
	    steelblue: 4620980,
	    tan: 13808780,
	    teal: 32896,
	    thistle: 14204888,
	    tomato: 16737095,
	    turquoise: 4251856,
	    violet: 15631086,
	    wheat: 16113331,
	    white: 16777215,
	    whitesmoke: 16119285,
	    yellow: 16776960,
	    yellowgreen: 10145074
	  });
	  d3_rgb_names.forEach(function(key, value) {
	    d3_rgb_names.set(key, d3_rgbNumber(value));
	  });
	  function d3_functor(v) {
	    return typeof v === "function" ? v : function() {
	      return v;
	    };
	  }
	  d3.functor = d3_functor;
	  d3.xhr = d3_xhrType(d3_identity);
	  function d3_xhrType(response) {
	    return function(url, mimeType, callback) {
	      if (arguments.length === 2 && typeof mimeType === "function") callback = mimeType, 
	      mimeType = null;
	      return d3_xhr(url, mimeType, response, callback);
	    };
	  }
	  function d3_xhr(url, mimeType, response, callback) {
	    var xhr = {}, dispatch = d3.dispatch("beforesend", "progress", "load", "error"), headers = {}, request = new XMLHttpRequest(), responseType = null;
	    if (this.XDomainRequest && !("withCredentials" in request) && /^(http(s)?:)?\/\//.test(url)) request = new XDomainRequest();
	    "onload" in request ? request.onload = request.onerror = respond : request.onreadystatechange = function() {
	      request.readyState > 3 && respond();
	    };
	    function respond() {
	      var status = request.status, result;
	      if (!status && d3_xhrHasResponse(request) || status >= 200 && status < 300 || status === 304) {
	        try {
	          result = response.call(xhr, request);
	        } catch (e) {
	          dispatch.error.call(xhr, e);
	          return;
	        }
	        dispatch.load.call(xhr, result);
	      } else {
	        dispatch.error.call(xhr, request);
	      }
	    }
	    request.onprogress = function(event) {
	      var o = d3.event;
	      d3.event = event;
	      try {
	        dispatch.progress.call(xhr, request);
	      } finally {
	        d3.event = o;
	      }
	    };
	    xhr.header = function(name, value) {
	      name = (name + "").toLowerCase();
	      if (arguments.length < 2) return headers[name];
	      if (value == null) delete headers[name]; else headers[name] = value + "";
	      return xhr;
	    };
	    xhr.mimeType = function(value) {
	      if (!arguments.length) return mimeType;
	      mimeType = value == null ? null : value + "";
	      return xhr;
	    };
	    xhr.responseType = function(value) {
	      if (!arguments.length) return responseType;
	      responseType = value;
	      return xhr;
	    };
	    xhr.response = function(value) {
	      response = value;
	      return xhr;
	    };
	    [ "get", "post" ].forEach(function(method) {
	      xhr[method] = function() {
	        return xhr.send.apply(xhr, [ method ].concat(d3_array(arguments)));
	      };
	    });
	    xhr.send = function(method, data, callback) {
	      if (arguments.length === 2 && typeof data === "function") callback = data, data = null;
	      request.open(method, url, true);
	      if (mimeType != null && !("accept" in headers)) headers["accept"] = mimeType + ",*/*";
	      if (request.setRequestHeader) for (var name in headers) request.setRequestHeader(name, headers[name]);
	      if (mimeType != null && request.overrideMimeType) request.overrideMimeType(mimeType);
	      if (responseType != null) request.responseType = responseType;
	      if (callback != null) xhr.on("error", callback).on("load", function(request) {
	        callback(null, request);
	      });
	      dispatch.beforesend.call(xhr, request);
	      request.send(data == null ? null : data);
	      return xhr;
	    };
	    xhr.abort = function() {
	      request.abort();
	      return xhr;
	    };
	    d3.rebind(xhr, dispatch, "on");
	    return callback == null ? xhr : xhr.get(d3_xhr_fixCallback(callback));
	  }
	  function d3_xhr_fixCallback(callback) {
	    return callback.length === 1 ? function(error, request) {
	      callback(error == null ? request : null);
	    } : callback;
	  }
	  function d3_xhrHasResponse(request) {
	    var type = request.responseType;
	    return type && type !== "text" ? request.response : request.responseText;
	  }
	  d3.dsv = function(delimiter, mimeType) {
	    var reFormat = new RegExp('["' + delimiter + "\n]"), delimiterCode = delimiter.charCodeAt(0);
	    function dsv(url, row, callback) {
	      if (arguments.length < 3) callback = row, row = null;
	      var xhr = d3_xhr(url, mimeType, row == null ? response : typedResponse(row), callback);
	      xhr.row = function(_) {
	        return arguments.length ? xhr.response((row = _) == null ? response : typedResponse(_)) : row;
	      };
	      return xhr;
	    }
	    function response(request) {
	      return dsv.parse(request.responseText);
	    }
	    function typedResponse(f) {
	      return function(request) {
	        return dsv.parse(request.responseText, f);
	      };
	    }
	    dsv.parse = function(text, f) {
	      var o;
	      return dsv.parseRows(text, function(row, i) {
	        if (o) return o(row, i - 1);
	        var a = new Function("d", "return {" + row.map(function(name, i) {
	          return JSON.stringify(name) + ": d[" + i + "]";
	        }).join(",") + "}");
	        o = f ? function(row, i) {
	          return f(a(row), i);
	        } : a;
	      });
	    };
	    dsv.parseRows = function(text, f) {
	      var EOL = {}, EOF = {}, rows = [], N = text.length, I = 0, n = 0, t, eol;
	      function token() {
	        if (I >= N) return EOF;
	        if (eol) return eol = false, EOL;
	        var j = I;
	        if (text.charCodeAt(j) === 34) {
	          var i = j;
	          while (i++ < N) {
	            if (text.charCodeAt(i) === 34) {
	              if (text.charCodeAt(i + 1) !== 34) break;
	              ++i;
	            }
	          }
	          I = i + 2;
	          var c = text.charCodeAt(i + 1);
	          if (c === 13) {
	            eol = true;
	            if (text.charCodeAt(i + 2) === 10) ++I;
	          } else if (c === 10) {
	            eol = true;
	          }
	          return text.slice(j + 1, i).replace(/""/g, '"');
	        }
	        while (I < N) {
	          var c = text.charCodeAt(I++), k = 1;
	          if (c === 10) eol = true; else if (c === 13) {
	            eol = true;
	            if (text.charCodeAt(I) === 10) ++I, ++k;
	          } else if (c !== delimiterCode) continue;
	          return text.slice(j, I - k);
	        }
	        return text.slice(j);
	      }
	      while ((t = token()) !== EOF) {
	        var a = [];
	        while (t !== EOL && t !== EOF) {
	          a.push(t);
	          t = token();
	        }
	        if (f && (a = f(a, n++)) == null) continue;
	        rows.push(a);
	      }
	      return rows;
	    };
	    dsv.format = function(rows) {
	      if (Array.isArray(rows[0])) return dsv.formatRows(rows);
	      var fieldSet = new d3_Set(), fields = [];
	      rows.forEach(function(row) {
	        for (var field in row) {
	          if (!fieldSet.has(field)) {
	            fields.push(fieldSet.add(field));
	          }
	        }
	      });
	      return [ fields.map(formatValue).join(delimiter) ].concat(rows.map(function(row) {
	        return fields.map(function(field) {
	          return formatValue(row[field]);
	        }).join(delimiter);
	      })).join("\n");
	    };
	    dsv.formatRows = function(rows) {
	      return rows.map(formatRow).join("\n");
	    };
	    function formatRow(row) {
	      return row.map(formatValue).join(delimiter);
	    }
	    function formatValue(text) {
	      return reFormat.test(text) ? '"' + text.replace(/\"/g, '""') + '"' : text;
	    }
	    return dsv;
	  };
	  d3.csv = d3.dsv(",", "text/csv");
	  d3.tsv = d3.dsv("	", "text/tab-separated-values");
	  var d3_timer_queueHead, d3_timer_queueTail, d3_timer_interval, d3_timer_timeout, d3_timer_frame = this[d3_vendorSymbol(this, "requestAnimationFrame")] || function(callback) {
	    setTimeout(callback, 17);
	  };
	  d3.timer = function() {
	    d3_timer.apply(this, arguments);
	  };
	  function d3_timer(callback, delay, then) {
	    var n = arguments.length;
	    if (n < 2) delay = 0;
	    if (n < 3) then = Date.now();
	    var time = then + delay, timer = {
	      c: callback,
	      t: time,
	      n: null
	    };
	    if (d3_timer_queueTail) d3_timer_queueTail.n = timer; else d3_timer_queueHead = timer;
	    d3_timer_queueTail = timer;
	    if (!d3_timer_interval) {
	      d3_timer_timeout = clearTimeout(d3_timer_timeout);
	      d3_timer_interval = 1;
	      d3_timer_frame(d3_timer_step);
	    }
	    return timer;
	  }
	  function d3_timer_step() {
	    var now = d3_timer_mark(), delay = d3_timer_sweep() - now;
	    if (delay > 24) {
	      if (isFinite(delay)) {
	        clearTimeout(d3_timer_timeout);
	        d3_timer_timeout = setTimeout(d3_timer_step, delay);
	      }
	      d3_timer_interval = 0;
	    } else {
	      d3_timer_interval = 1;
	      d3_timer_frame(d3_timer_step);
	    }
	  }
	  d3.timer.flush = function() {
	    d3_timer_mark();
	    d3_timer_sweep();
	  };
	  function d3_timer_mark() {
	    var now = Date.now(), timer = d3_timer_queueHead;
	    while (timer) {
	      if (now >= timer.t && timer.c(now - timer.t)) timer.c = null;
	      timer = timer.n;
	    }
	    return now;
	  }
	  function d3_timer_sweep() {
	    var t0, t1 = d3_timer_queueHead, time = Infinity;
	    while (t1) {
	      if (t1.c) {
	        if (t1.t < time) time = t1.t;
	        t1 = (t0 = t1).n;
	      } else {
	        t1 = t0 ? t0.n = t1.n : d3_timer_queueHead = t1.n;
	      }
	    }
	    d3_timer_queueTail = t0;
	    return time;
	  }
	  function d3_format_precision(x, p) {
	    return p - (x ? Math.ceil(Math.log(x) / Math.LN10) : 1);
	  }
	  d3.round = function(x, n) {
	    return n ? Math.round(x * (n = Math.pow(10, n))) / n : Math.round(x);
	  };
	  var d3_formatPrefixes = [ "y", "z", "a", "f", "p", "n", "µ", "m", "", "k", "M", "G", "T", "P", "E", "Z", "Y" ].map(d3_formatPrefix);
	  d3.formatPrefix = function(value, precision) {
	    var i = 0;
	    if (value = +value) {
	      if (value < 0) value *= -1;
	      if (precision) value = d3.round(value, d3_format_precision(value, precision));
	      i = 1 + Math.floor(1e-12 + Math.log(value) / Math.LN10);
	      i = Math.max(-24, Math.min(24, Math.floor((i - 1) / 3) * 3));
	    }
	    return d3_formatPrefixes[8 + i / 3];
	  };
	  function d3_formatPrefix(d, i) {
	    var k = Math.pow(10, abs(8 - i) * 3);
	    return {
	      scale: i > 8 ? function(d) {
	        return d / k;
	      } : function(d) {
	        return d * k;
	      },
	      symbol: d
	    };
	  }
	  function d3_locale_numberFormat(locale) {
	    var locale_decimal = locale.decimal, locale_thousands = locale.thousands, locale_grouping = locale.grouping, locale_currency = locale.currency, formatGroup = locale_grouping && locale_thousands ? function(value, width) {
	      var i = value.length, t = [], j = 0, g = locale_grouping[0], length = 0;
	      while (i > 0 && g > 0) {
	        if (length + g + 1 > width) g = Math.max(1, width - length);
	        t.push(value.substring(i -= g, i + g));
	        if ((length += g + 1) > width) break;
	        g = locale_grouping[j = (j + 1) % locale_grouping.length];
	      }
	      return t.reverse().join(locale_thousands);
	    } : d3_identity;
	    return function(specifier) {
	      var match = d3_format_re.exec(specifier), fill = match[1] || " ", align = match[2] || ">", sign = match[3] || "-", symbol = match[4] || "", zfill = match[5], width = +match[6], comma = match[7], precision = match[8], type = match[9], scale = 1, prefix = "", suffix = "", integer = false, exponent = true;
	      if (precision) precision = +precision.substring(1);
	      if (zfill || fill === "0" && align === "=") {
	        zfill = fill = "0";
	        align = "=";
	      }
	      switch (type) {
	       case "n":
	        comma = true;
	        type = "g";
	        break;
	
	       case "%":
	        scale = 100;
	        suffix = "%";
	        type = "f";
	        break;
	
	       case "p":
	        scale = 100;
	        suffix = "%";
	        type = "r";
	        break;
	
	       case "b":
	       case "o":
	       case "x":
	       case "X":
	        if (symbol === "#") prefix = "0" + type.toLowerCase();
	
	       case "c":
	        exponent = false;
	
	       case "d":
	        integer = true;
	        precision = 0;
	        break;
	
	       case "s":
	        scale = -1;
	        type = "r";
	        break;
	      }
	      if (symbol === "$") prefix = locale_currency[0], suffix = locale_currency[1];
	      if (type == "r" && !precision) type = "g";
	      if (precision != null) {
	        if (type == "g") precision = Math.max(1, Math.min(21, precision)); else if (type == "e" || type == "f") precision = Math.max(0, Math.min(20, precision));
	      }
	      type = d3_format_types.get(type) || d3_format_typeDefault;
	      var zcomma = zfill && comma;
	      return function(value) {
	        var fullSuffix = suffix;
	        if (integer && value % 1) return "";
	        var negative = value < 0 || value === 0 && 1 / value < 0 ? (value = -value, "-") : sign === "-" ? "" : sign;
	        if (scale < 0) {
	          var unit = d3.formatPrefix(value, precision);
	          value = unit.scale(value);
	          fullSuffix = unit.symbol + suffix;
	        } else {
	          value *= scale;
	        }
	        value = type(value, precision);
	        var i = value.lastIndexOf("."), before, after;
	        if (i < 0) {
	          var j = exponent ? value.lastIndexOf("e") : -1;
	          if (j < 0) before = value, after = ""; else before = value.substring(0, j), after = value.substring(j);
	        } else {
	          before = value.substring(0, i);
	          after = locale_decimal + value.substring(i + 1);
	        }
	        if (!zfill && comma) before = formatGroup(before, Infinity);
	        var length = prefix.length + before.length + after.length + (zcomma ? 0 : negative.length), padding = length < width ? new Array(length = width - length + 1).join(fill) : "";
	        if (zcomma) before = formatGroup(padding + before, padding.length ? width - after.length : Infinity);
	        negative += prefix;
	        value = before + after;
	        return (align === "<" ? negative + value + padding : align === ">" ? padding + negative + value : align === "^" ? padding.substring(0, length >>= 1) + negative + value + padding.substring(length) : negative + (zcomma ? value : padding + value)) + fullSuffix;
	      };
	    };
	  }
	  var d3_format_re = /(?:([^{])?([<>=^]))?([+\- ])?([$#])?(0)?(\d+)?(,)?(\.-?\d+)?([a-z%])?/i;
	  var d3_format_types = d3.map({
	    b: function(x) {
	      return x.toString(2);
	    },
	    c: function(x) {
	      return String.fromCharCode(x);
	    },
	    o: function(x) {
	      return x.toString(8);
	    },
	    x: function(x) {
	      return x.toString(16);
	    },
	    X: function(x) {
	      return x.toString(16).toUpperCase();
	    },
	    g: function(x, p) {
	      return x.toPrecision(p);
	    },
	    e: function(x, p) {
	      return x.toExponential(p);
	    },
	    f: function(x, p) {
	      return x.toFixed(p);
	    },
	    r: function(x, p) {
	      return (x = d3.round(x, d3_format_precision(x, p))).toFixed(Math.max(0, Math.min(20, d3_format_precision(x * (1 + 1e-15), p))));
	    }
	  });
	  function d3_format_typeDefault(x) {
	    return x + "";
	  }
	  var d3_time = d3.time = {}, d3_date = Date;
	  function d3_date_utc() {
	    this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0]);
	  }
	  d3_date_utc.prototype = {
	    getDate: function() {
	      return this._.getUTCDate();
	    },
	    getDay: function() {
	      return this._.getUTCDay();
	    },
	    getFullYear: function() {
	      return this._.getUTCFullYear();
	    },
	    getHours: function() {
	      return this._.getUTCHours();
	    },
	    getMilliseconds: function() {
	      return this._.getUTCMilliseconds();
	    },
	    getMinutes: function() {
	      return this._.getUTCMinutes();
	    },
	    getMonth: function() {
	      return this._.getUTCMonth();
	    },
	    getSeconds: function() {
	      return this._.getUTCSeconds();
	    },
	    getTime: function() {
	      return this._.getTime();
	    },
	    getTimezoneOffset: function() {
	      return 0;
	    },
	    valueOf: function() {
	      return this._.valueOf();
	    },
	    setDate: function() {
	      d3_time_prototype.setUTCDate.apply(this._, arguments);
	    },
	    setDay: function() {
	      d3_time_prototype.setUTCDay.apply(this._, arguments);
	    },
	    setFullYear: function() {
	      d3_time_prototype.setUTCFullYear.apply(this._, arguments);
	    },
	    setHours: function() {
	      d3_time_prototype.setUTCHours.apply(this._, arguments);
	    },
	    setMilliseconds: function() {
	      d3_time_prototype.setUTCMilliseconds.apply(this._, arguments);
	    },
	    setMinutes: function() {
	      d3_time_prototype.setUTCMinutes.apply(this._, arguments);
	    },
	    setMonth: function() {
	      d3_time_prototype.setUTCMonth.apply(this._, arguments);
	    },
	    setSeconds: function() {
	      d3_time_prototype.setUTCSeconds.apply(this._, arguments);
	    },
	    setTime: function() {
	      d3_time_prototype.setTime.apply(this._, arguments);
	    }
	  };
	  var d3_time_prototype = Date.prototype;
	  function d3_time_interval(local, step, number) {
	    function round(date) {
	      var d0 = local(date), d1 = offset(d0, 1);
	      return date - d0 < d1 - date ? d0 : d1;
	    }
	    function ceil(date) {
	      step(date = local(new d3_date(date - 1)), 1);
	      return date;
	    }
	    function offset(date, k) {
	      step(date = new d3_date(+date), k);
	      return date;
	    }
	    function range(t0, t1, dt) {
	      var time = ceil(t0), times = [];
	      if (dt > 1) {
	        while (time < t1) {
	          if (!(number(time) % dt)) times.push(new Date(+time));
	          step(time, 1);
	        }
	      } else {
	        while (time < t1) times.push(new Date(+time)), step(time, 1);
	      }
	      return times;
	    }
	    function range_utc(t0, t1, dt) {
	      try {
	        d3_date = d3_date_utc;
	        var utc = new d3_date_utc();
	        utc._ = t0;
	        return range(utc, t1, dt);
	      } finally {
	        d3_date = Date;
	      }
	    }
	    local.floor = local;
	    local.round = round;
	    local.ceil = ceil;
	    local.offset = offset;
	    local.range = range;
	    var utc = local.utc = d3_time_interval_utc(local);
	    utc.floor = utc;
	    utc.round = d3_time_interval_utc(round);
	    utc.ceil = d3_time_interval_utc(ceil);
	    utc.offset = d3_time_interval_utc(offset);
	    utc.range = range_utc;
	    return local;
	  }
	  function d3_time_interval_utc(method) {
	    return function(date, k) {
	      try {
	        d3_date = d3_date_utc;
	        var utc = new d3_date_utc();
	        utc._ = date;
	        return method(utc, k)._;
	      } finally {
	        d3_date = Date;
	      }
	    };
	  }
	  d3_time.year = d3_time_interval(function(date) {
	    date = d3_time.day(date);
	    date.setMonth(0, 1);
	    return date;
	  }, function(date, offset) {
	    date.setFullYear(date.getFullYear() + offset);
	  }, function(date) {
	    return date.getFullYear();
	  });
	  d3_time.years = d3_time.year.range;
	  d3_time.years.utc = d3_time.year.utc.range;
	  d3_time.day = d3_time_interval(function(date) {
	    var day = new d3_date(2e3, 0);
	    day.setFullYear(date.getFullYear(), date.getMonth(), date.getDate());
	    return day;
	  }, function(date, offset) {
	    date.setDate(date.getDate() + offset);
	  }, function(date) {
	    return date.getDate() - 1;
	  });
	  d3_time.days = d3_time.day.range;
	  d3_time.days.utc = d3_time.day.utc.range;
	  d3_time.dayOfYear = function(date) {
	    var year = d3_time.year(date);
	    return Math.floor((date - year - (date.getTimezoneOffset() - year.getTimezoneOffset()) * 6e4) / 864e5);
	  };
	  [ "sunday", "monday", "tuesday", "wednesday", "thursday", "friday", "saturday" ].forEach(function(day, i) {
	    i = 7 - i;
	    var interval = d3_time[day] = d3_time_interval(function(date) {
	      (date = d3_time.day(date)).setDate(date.getDate() - (date.getDay() + i) % 7);
	      return date;
	    }, function(date, offset) {
	      date.setDate(date.getDate() + Math.floor(offset) * 7);
	    }, function(date) {
	      var day = d3_time.year(date).getDay();
	      return Math.floor((d3_time.dayOfYear(date) + (day + i) % 7) / 7) - (day !== i);
	    });
	    d3_time[day + "s"] = interval.range;
	    d3_time[day + "s"].utc = interval.utc.range;
	    d3_time[day + "OfYear"] = function(date) {
	      var day = d3_time.year(date).getDay();
	      return Math.floor((d3_time.dayOfYear(date) + (day + i) % 7) / 7);
	    };
	  });
	  d3_time.week = d3_time.sunday;
	  d3_time.weeks = d3_time.sunday.range;
	  d3_time.weeks.utc = d3_time.sunday.utc.range;
	  d3_time.weekOfYear = d3_time.sundayOfYear;
	  function d3_locale_timeFormat(locale) {
	    var locale_dateTime = locale.dateTime, locale_date = locale.date, locale_time = locale.time, locale_periods = locale.periods, locale_days = locale.days, locale_shortDays = locale.shortDays, locale_months = locale.months, locale_shortMonths = locale.shortMonths;
	    function d3_time_format(template) {
	      var n = template.length;
	      function format(date) {
	        var string = [], i = -1, j = 0, c, p, f;
	        while (++i < n) {
	          if (template.charCodeAt(i) === 37) {
	            string.push(template.slice(j, i));
	            if ((p = d3_time_formatPads[c = template.charAt(++i)]) != null) c = template.charAt(++i);
	            if (f = d3_time_formats[c]) c = f(date, p == null ? c === "e" ? " " : "0" : p);
	            string.push(c);
	            j = i + 1;
	          }
	        }
	        string.push(template.slice(j, i));
	        return string.join("");
	      }
	      format.parse = function(string) {
	        var d = {
	          y: 1900,
	          m: 0,
	          d: 1,
	          H: 0,
	          M: 0,
	          S: 0,
	          L: 0,
	          Z: null
	        }, i = d3_time_parse(d, template, string, 0);
	        if (i != string.length) return null;
	        if ("p" in d) d.H = d.H % 12 + d.p * 12;
	        var localZ = d.Z != null && d3_date !== d3_date_utc, date = new (localZ ? d3_date_utc : d3_date)();
	        if ("j" in d) date.setFullYear(d.y, 0, d.j); else if ("W" in d || "U" in d) {
	          if (!("w" in d)) d.w = "W" in d ? 1 : 0;
	          date.setFullYear(d.y, 0, 1);
	          date.setFullYear(d.y, 0, "W" in d ? (d.w + 6) % 7 + d.W * 7 - (date.getDay() + 5) % 7 : d.w + d.U * 7 - (date.getDay() + 6) % 7);
	        } else date.setFullYear(d.y, d.m, d.d);
	        date.setHours(d.H + (d.Z / 100 | 0), d.M + d.Z % 100, d.S, d.L);
	        return localZ ? date._ : date;
	      };
	      format.toString = function() {
	        return template;
	      };
	      return format;
	    }
	    function d3_time_parse(date, template, string, j) {
	      var c, p, t, i = 0, n = template.length, m = string.length;
	      while (i < n) {
	        if (j >= m) return -1;
	        c = template.charCodeAt(i++);
	        if (c === 37) {
	          t = template.charAt(i++);
	          p = d3_time_parsers[t in d3_time_formatPads ? template.charAt(i++) : t];
	          if (!p || (j = p(date, string, j)) < 0) return -1;
	        } else if (c != string.charCodeAt(j++)) {
	          return -1;
	        }
	      }
	      return j;
	    }
	    d3_time_format.utc = function(template) {
	      var local = d3_time_format(template);
	      function format(date) {
	        try {
	          d3_date = d3_date_utc;
	          var utc = new d3_date();
	          utc._ = date;
	          return local(utc);
	        } finally {
	          d3_date = Date;
	        }
	      }
	      format.parse = function(string) {
	        try {
	          d3_date = d3_date_utc;
	          var date = local.parse(string);
	          return date && date._;
	        } finally {
	          d3_date = Date;
	        }
	      };
	      format.toString = local.toString;
	      return format;
	    };
	    d3_time_format.multi = d3_time_format.utc.multi = d3_time_formatMulti;
	    var d3_time_periodLookup = d3.map(), d3_time_dayRe = d3_time_formatRe(locale_days), d3_time_dayLookup = d3_time_formatLookup(locale_days), d3_time_dayAbbrevRe = d3_time_formatRe(locale_shortDays), d3_time_dayAbbrevLookup = d3_time_formatLookup(locale_shortDays), d3_time_monthRe = d3_time_formatRe(locale_months), d3_time_monthLookup = d3_time_formatLookup(locale_months), d3_time_monthAbbrevRe = d3_time_formatRe(locale_shortMonths), d3_time_monthAbbrevLookup = d3_time_formatLookup(locale_shortMonths);
	    locale_periods.forEach(function(p, i) {
	      d3_time_periodLookup.set(p.toLowerCase(), i);
	    });
	    var d3_time_formats = {
	      a: function(d) {
	        return locale_shortDays[d.getDay()];
	      },
	      A: function(d) {
	        return locale_days[d.getDay()];
	      },
	      b: function(d) {
	        return locale_shortMonths[d.getMonth()];
	      },
	      B: function(d) {
	        return locale_months[d.getMonth()];
	      },
	      c: d3_time_format(locale_dateTime),
	      d: function(d, p) {
	        return d3_time_formatPad(d.getDate(), p, 2);
	      },
	      e: function(d, p) {
	        return d3_time_formatPad(d.getDate(), p, 2);
	      },
	      H: function(d, p) {
	        return d3_time_formatPad(d.getHours(), p, 2);
	      },
	      I: function(d, p) {
	        return d3_time_formatPad(d.getHours() % 12 || 12, p, 2);
	      },
	      j: function(d, p) {
	        return d3_time_formatPad(1 + d3_time.dayOfYear(d), p, 3);
	      },
	      L: function(d, p) {
	        return d3_time_formatPad(d.getMilliseconds(), p, 3);
	      },
	      m: function(d, p) {
	        return d3_time_formatPad(d.getMonth() + 1, p, 2);
	      },
	      M: function(d, p) {
	        return d3_time_formatPad(d.getMinutes(), p, 2);
	      },
	      p: function(d) {
	        return locale_periods[+(d.getHours() >= 12)];
	      },
	      S: function(d, p) {
	        return d3_time_formatPad(d.getSeconds(), p, 2);
	      },
	      U: function(d, p) {
	        return d3_time_formatPad(d3_time.sundayOfYear(d), p, 2);
	      },
	      w: function(d) {
	        return d.getDay();
	      },
	      W: function(d, p) {
	        return d3_time_formatPad(d3_time.mondayOfYear(d), p, 2);
	      },
	      x: d3_time_format(locale_date),
	      X: d3_time_format(locale_time),
	      y: function(d, p) {
	        return d3_time_formatPad(d.getFullYear() % 100, p, 2);
	      },
	      Y: function(d, p) {
	        return d3_time_formatPad(d.getFullYear() % 1e4, p, 4);
	      },
	      Z: d3_time_zone,
	      "%": function() {
	        return "%";
	      }
	    };
	    var d3_time_parsers = {
	      a: d3_time_parseWeekdayAbbrev,
	      A: d3_time_parseWeekday,
	      b: d3_time_parseMonthAbbrev,
	      B: d3_time_parseMonth,
	      c: d3_time_parseLocaleFull,
	      d: d3_time_parseDay,
	      e: d3_time_parseDay,
	      H: d3_time_parseHour24,
	      I: d3_time_parseHour24,
	      j: d3_time_parseDayOfYear,
	      L: d3_time_parseMilliseconds,
	      m: d3_time_parseMonthNumber,
	      M: d3_time_parseMinutes,
	      p: d3_time_parseAmPm,
	      S: d3_time_parseSeconds,
	      U: d3_time_parseWeekNumberSunday,
	      w: d3_time_parseWeekdayNumber,
	      W: d3_time_parseWeekNumberMonday,
	      x: d3_time_parseLocaleDate,
	      X: d3_time_parseLocaleTime,
	      y: d3_time_parseYear,
	      Y: d3_time_parseFullYear,
	      Z: d3_time_parseZone,
	      "%": d3_time_parseLiteralPercent
	    };
	    function d3_time_parseWeekdayAbbrev(date, string, i) {
	      d3_time_dayAbbrevRe.lastIndex = 0;
	      var n = d3_time_dayAbbrevRe.exec(string.slice(i));
	      return n ? (date.w = d3_time_dayAbbrevLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;
	    }
	    function d3_time_parseWeekday(date, string, i) {
	      d3_time_dayRe.lastIndex = 0;
	      var n = d3_time_dayRe.exec(string.slice(i));
	      return n ? (date.w = d3_time_dayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;
	    }
	    function d3_time_parseMonthAbbrev(date, string, i) {
	      d3_time_monthAbbrevRe.lastIndex = 0;
	      var n = d3_time_monthAbbrevRe.exec(string.slice(i));
	      return n ? (date.m = d3_time_monthAbbrevLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;
	    }
	    function d3_time_parseMonth(date, string, i) {
	      d3_time_monthRe.lastIndex = 0;
	      var n = d3_time_monthRe.exec(string.slice(i));
	      return n ? (date.m = d3_time_monthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;
	    }
	    function d3_time_parseLocaleFull(date, string, i) {
	      return d3_time_parse(date, d3_time_formats.c.toString(), string, i);
	    }
	    function d3_time_parseLocaleDate(date, string, i) {
	      return d3_time_parse(date, d3_time_formats.x.toString(), string, i);
	    }
	    function d3_time_parseLocaleTime(date, string, i) {
	      return d3_time_parse(date, d3_time_formats.X.toString(), string, i);
	    }
	    function d3_time_parseAmPm(date, string, i) {
	      var n = d3_time_periodLookup.get(string.slice(i, i += 2).toLowerCase());
	      return n == null ? -1 : (date.p = n, i);
	    }
	    return d3_time_format;
	  }
	  var d3_time_formatPads = {
	    "-": "",
	    _: " ",
	    "0": "0"
	  }, d3_time_numberRe = /^\s*\d+/, d3_time_percentRe = /^%/;
	  function d3_time_formatPad(value, fill, width) {
	    var sign = value < 0 ? "-" : "", string = (sign ? -value : value) + "", length = string.length;
	    return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);
	  }
	  function d3_time_formatRe(names) {
	    return new RegExp("^(?:" + names.map(d3.requote).join("|") + ")", "i");
	  }
	  function d3_time_formatLookup(names) {
	    var map = new d3_Map(), i = -1, n = names.length;
	    while (++i < n) map.set(names[i].toLowerCase(), i);
	    return map;
	  }
	  function d3_time_parseWeekdayNumber(date, string, i) {
	    d3_time_numberRe.lastIndex = 0;
	    var n = d3_time_numberRe.exec(string.slice(i, i + 1));
	    return n ? (date.w = +n[0], i + n[0].length) : -1;
	  }
	  function d3_time_parseWeekNumberSunday(date, string, i) {
	    d3_time_numberRe.lastIndex = 0;
	    var n = d3_time_numberRe.exec(string.slice(i));
	    return n ? (date.U = +n[0], i + n[0].length) : -1;
	  }
	  function d3_time_parseWeekNumberMonday(date, string, i) {
	    d3_time_numberRe.lastIndex = 0;
	    var n = d3_time_numberRe.exec(string.slice(i));
	    return n ? (date.W = +n[0], i + n[0].length) : -1;
	  }
	  function d3_time_parseFullYear(date, string, i) {
	    d3_time_numberRe.lastIndex = 0;
	    var n = d3_time_numberRe.exec(string.slice(i, i + 4));
	    return n ? (date.y = +n[0], i + n[0].length) : -1;
	  }
	  function d3_time_parseYear(date, string, i) {
	    d3_time_numberRe.lastIndex = 0;
	    var n = d3_time_numberRe.exec(string.slice(i, i + 2));
	    return n ? (date.y = d3_time_expandYear(+n[0]), i + n[0].length) : -1;
	  }
	  function d3_time_parseZone(date, string, i) {
	    return /^[+-]\d{4}$/.test(string = string.slice(i, i + 5)) ? (date.Z = -string, 
	    i + 5) : -1;
	  }
	  function d3_time_expandYear(d) {
	    return d + (d > 68 ? 1900 : 2e3);
	  }
	  function d3_time_parseMonthNumber(date, string, i) {
	    d3_time_numberRe.lastIndex = 0;
	    var n = d3_time_numberRe.exec(string.slice(i, i + 2));
	    return n ? (date.m = n[0] - 1, i + n[0].length) : -1;
	  }
	  function d3_time_parseDay(date, string, i) {
	    d3_time_numberRe.lastIndex = 0;
	    var n = d3_time_numberRe.exec(string.slice(i, i + 2));
	    return n ? (date.d = +n[0], i + n[0].length) : -1;
	  }
	  function d3_time_parseDayOfYear(date, string, i) {
	    d3_time_numberRe.lastIndex = 0;
	    var n = d3_time_numberRe.exec(string.slice(i, i + 3));
	    return n ? (date.j = +n[0], i + n[0].length) : -1;
	  }
	  function d3_time_parseHour24(date, string, i) {
	    d3_time_numberRe.lastIndex = 0;
	    var n = d3_time_numberRe.exec(string.slice(i, i + 2));
	    return n ? (date.H = +n[0], i + n[0].length) : -1;
	  }
	  function d3_time_parseMinutes(date, string, i) {
	    d3_time_numberRe.lastIndex = 0;
	    var n = d3_time_numberRe.exec(string.slice(i, i + 2));
	    return n ? (date.M = +n[0], i + n[0].length) : -1;
	  }
	  function d3_time_parseSeconds(date, string, i) {
	    d3_time_numberRe.lastIndex = 0;
	    var n = d3_time_numberRe.exec(string.slice(i, i + 2));
	    return n ? (date.S = +n[0], i + n[0].length) : -1;
	  }
	  function d3_time_parseMilliseconds(date, string, i) {
	    d3_time_numberRe.lastIndex = 0;
	    var n = d3_time_numberRe.exec(string.slice(i, i + 3));
	    return n ? (date.L = +n[0], i + n[0].length) : -1;
	  }
	  function d3_time_zone(d) {
	    var z = d.getTimezoneOffset(), zs = z > 0 ? "-" : "+", zh = abs(z) / 60 | 0, zm = abs(z) % 60;
	    return zs + d3_time_formatPad(zh, "0", 2) + d3_time_formatPad(zm, "0", 2);
	  }
	  function d3_time_parseLiteralPercent(date, string, i) {
	    d3_time_percentRe.lastIndex = 0;
	    var n = d3_time_percentRe.exec(string.slice(i, i + 1));
	    return n ? i + n[0].length : -1;
	  }
	  function d3_time_formatMulti(formats) {
	    var n = formats.length, i = -1;
	    while (++i < n) formats[i][0] = this(formats[i][0]);
	    return function(date) {
	      var i = 0, f = formats[i];
	      while (!f[1](date)) f = formats[++i];
	      return f[0](date);
	    };
	  }
	  d3.locale = function(locale) {
	    return {
	      numberFormat: d3_locale_numberFormat(locale),
	      timeFormat: d3_locale_timeFormat(locale)
	    };
	  };
	  var d3_locale_enUS = d3.locale({
	    decimal: ".",
	    thousands: ",",
	    grouping: [ 3 ],
	    currency: [ "$", "" ],
	    dateTime: "%a %b %e %X %Y",
	    date: "%m/%d/%Y",
	    time: "%H:%M:%S",
	    periods: [ "AM", "PM" ],
	    days: [ "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" ],
	    shortDays: [ "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" ],
	    months: [ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ],
	    shortMonths: [ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" ]
	  });
	  d3.format = d3_locale_enUS.numberFormat;
	  d3.geo = {};
	  function d3_adder() {}
	  d3_adder.prototype = {
	    s: 0,
	    t: 0,
	    add: function(y) {
	      d3_adderSum(y, this.t, d3_adderTemp);
	      d3_adderSum(d3_adderTemp.s, this.s, this);
	      if (this.s) this.t += d3_adderTemp.t; else this.s = d3_adderTemp.t;
	    },
	    reset: function() {
	      this.s = this.t = 0;
	    },
	    valueOf: function() {
	      return this.s;
	    }
	  };
	  var d3_adderTemp = new d3_adder();
	  function d3_adderSum(a, b, o) {
	    var x = o.s = a + b, bv = x - a, av = x - bv;
	    o.t = a - av + (b - bv);
	  }
	  d3.geo.stream = function(object, listener) {
	    if (object && d3_geo_streamObjectType.hasOwnProperty(object.type)) {
	      d3_geo_streamObjectType[object.type](object, listener);
	    } else {
	      d3_geo_streamGeometry(object, listener);
	    }
	  };
	  function d3_geo_streamGeometry(geometry, listener) {
	    if (geometry && d3_geo_streamGeometryType.hasOwnProperty(geometry.type)) {
	      d3_geo_streamGeometryType[geometry.type](geometry, listener);
	    }
	  }
	  var d3_geo_streamObjectType = {
	    Feature: function(feature, listener) {
	      d3_geo_streamGeometry(feature.geometry, listener);
	    },
	    FeatureCollection: function(object, listener) {
	      var features = object.features, i = -1, n = features.length;
	      while (++i < n) d3_geo_streamGeometry(features[i].geometry, listener);
	    }
	  };
	  var d3_geo_streamGeometryType = {
	    Sphere: function(object, listener) {
	      listener.sphere();
	    },
	    Point: function(object, listener) {
	      object = object.coordinates;
	      listener.point(object[0], object[1], object[2]);
	    },
	    MultiPoint: function(object, listener) {
	      var coordinates = object.coordinates, i = -1, n = coordinates.length;
	      while (++i < n) object = coordinates[i], listener.point(object[0], object[1], object[2]);
	    },
	    LineString: function(object, listener) {
	      d3_geo_streamLine(object.coordinates, listener, 0);
	    },
	    MultiLineString: function(object, listener) {
	      var coordinates = object.coordinates, i = -1, n = coordinates.length;
	      while (++i < n) d3_geo_streamLine(coordinates[i], listener, 0);
	    },
	    Polygon: function(object, listener) {
	      d3_geo_streamPolygon(object.coordinates, listener);
	    },
	    MultiPolygon: function(object, listener) {
	      var coordinates = object.coordinates, i = -1, n = coordinates.length;
	      while (++i < n) d3_geo_streamPolygon(coordinates[i], listener);
	    },
	    GeometryCollection: function(object, listener) {
	      var geometries = object.geometries, i = -1, n = geometries.length;
	      while (++i < n) d3_geo_streamGeometry(geometries[i], listener);
	    }
	  };
	  function d3_geo_streamLine(coordinates, listener, closed) {
	    var i = -1, n = coordinates.length - closed, coordinate;
	    listener.lineStart();
	    while (++i < n) coordinate = coordinates[i], listener.point(coordinate[0], coordinate[1], coordinate[2]);
	    listener.lineEnd();
	  }
	  function d3_geo_streamPolygon(coordinates, listener) {
	    var i = -1, n = coordinates.length;
	    listener.polygonStart();
	    while (++i < n) d3_geo_streamLine(coordinates[i], listener, 1);
	    listener.polygonEnd();
	  }
	  d3.geo.area = function(object) {
	    d3_geo_areaSum = 0;
	    d3.geo.stream(object, d3_geo_area);
	    return d3_geo_areaSum;
	  };
	  var d3_geo_areaSum, d3_geo_areaRingSum = new d3_adder();
	  var d3_geo_area = {
	    sphere: function() {
	      d3_geo_areaSum += 4 * π;
	    },
	    point: d3_noop,
	    lineStart: d3_noop,
	    lineEnd: d3_noop,
	    polygonStart: function() {
	      d3_geo_areaRingSum.reset();
	      d3_geo_area.lineStart = d3_geo_areaRingStart;
	    },
	    polygonEnd: function() {
	      var area = 2 * d3_geo_areaRingSum;
	      d3_geo_areaSum += area < 0 ? 4 * π + area : area;
	      d3_geo_area.lineStart = d3_geo_area.lineEnd = d3_geo_area.point = d3_noop;
	    }
	  };
	  function d3_geo_areaRingStart() {
	    var λ00, φ00, λ0, cosφ0, sinφ0;
	    d3_geo_area.point = function(λ, φ) {
	      d3_geo_area.point = nextPoint;
	      λ0 = (λ00 = λ) * d3_radians, cosφ0 = Math.cos(φ = (φ00 = φ) * d3_radians / 2 + π / 4), 
	      sinφ0 = Math.sin(φ);
	    };
	    function nextPoint(λ, φ) {
	      λ *= d3_radians;
	      φ = φ * d3_radians / 2 + π / 4;
	      var dλ = λ - λ0, sdλ = dλ >= 0 ? 1 : -1, adλ = sdλ * dλ, cosφ = Math.cos(φ), sinφ = Math.sin(φ), k = sinφ0 * sinφ, u = cosφ0 * cosφ + k * Math.cos(adλ), v = k * sdλ * Math.sin(adλ);
	      d3_geo_areaRingSum.add(Math.atan2(v, u));
	      λ0 = λ, cosφ0 = cosφ, sinφ0 = sinφ;
	    }
	    d3_geo_area.lineEnd = function() {
	      nextPoint(λ00, φ00);
	    };
	  }
	  function d3_geo_cartesian(spherical) {
	    var λ = spherical[0], φ = spherical[1], cosφ = Math.cos(φ);
	    return [ cosφ * Math.cos(λ), cosφ * Math.sin(λ), Math.sin(φ) ];
	  }
	  function d3_geo_cartesianDot(a, b) {
	    return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];
	  }
	  function d3_geo_cartesianCross(a, b) {
	    return [ a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0] ];
	  }
	  function d3_geo_cartesianAdd(a, b) {
	    a[0] += b[0];
	    a[1] += b[1];
	    a[2] += b[2];
	  }
	  function d3_geo_cartesianScale(vector, k) {
	    return [ vector[0] * k, vector[1] * k, vector[2] * k ];
	  }
	  function d3_geo_cartesianNormalize(d) {
	    var l = Math.sqrt(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]);
	    d[0] /= l;
	    d[1] /= l;
	    d[2] /= l;
	  }
	  function d3_geo_spherical(cartesian) {
	    return [ Math.atan2(cartesian[1], cartesian[0]), d3_asin(cartesian[2]) ];
	  }
	  function d3_geo_sphericalEqual(a, b) {
	    return abs(a[0] - b[0]) < ε && abs(a[1] - b[1]) < ε;
	  }
	  d3.geo.bounds = function() {
	    var λ0, φ0, λ1, φ1, λ_, λ__, φ__, p0, dλSum, ranges, range;
	    var bound = {
	      point: point,
	      lineStart: lineStart,
	      lineEnd: lineEnd,
	      polygonStart: function() {
	        bound.point = ringPoint;
	        bound.lineStart = ringStart;
	        bound.lineEnd = ringEnd;
	        dλSum = 0;
	        d3_geo_area.polygonStart();
	      },
	      polygonEnd: function() {
	        d3_geo_area.polygonEnd();
	        bound.point = point;
	        bound.lineStart = lineStart;
	        bound.lineEnd = lineEnd;
	        if (d3_geo_areaRingSum < 0) λ0 = -(λ1 = 180), φ0 = -(φ1 = 90); else if (dλSum > ε) φ1 = 90; else if (dλSum < -ε) φ0 = -90;
	        range[0] = λ0, range[1] = λ1;
	      }
	    };
	    function point(λ, φ) {
	      ranges.push(range = [ λ0 = λ, λ1 = λ ]);
	      if (φ < φ0) φ0 = φ;
	      if (φ > φ1) φ1 = φ;
	    }
	    function linePoint(λ, φ) {
	      var p = d3_geo_cartesian([ λ * d3_radians, φ * d3_radians ]);
	      if (p0) {
	        var normal = d3_geo_cartesianCross(p0, p), equatorial = [ normal[1], -normal[0], 0 ], inflection = d3_geo_cartesianCross(equatorial, normal);
	        d3_geo_cartesianNormalize(inflection);
	        inflection = d3_geo_spherical(inflection);
	        var dλ = λ - λ_, s = dλ > 0 ? 1 : -1, λi = inflection[0] * d3_degrees * s, antimeridian = abs(dλ) > 180;
	        if (antimeridian ^ (s * λ_ < λi && λi < s * λ)) {
	          var φi = inflection[1] * d3_degrees;
	          if (φi > φ1) φ1 = φi;
	        } else if (λi = (λi + 360) % 360 - 180, antimeridian ^ (s * λ_ < λi && λi < s * λ)) {
	          var φi = -inflection[1] * d3_degrees;
	          if (φi < φ0) φ0 = φi;
	        } else {
	          if (φ < φ0) φ0 = φ;
	          if (φ > φ1) φ1 = φ;
	        }
	        if (antimeridian) {
	          if (λ < λ_) {
	            if (angle(λ0, λ) > angle(λ0, λ1)) λ1 = λ;
	          } else {
	            if (angle(λ, λ1) > angle(λ0, λ1)) λ0 = λ;
	          }
	        } else {
	          if (λ1 >= λ0) {
	            if (λ < λ0) λ0 = λ;
	            if (λ > λ1) λ1 = λ;
	          } else {
	            if (λ > λ_) {
	              if (angle(λ0, λ) > angle(λ0, λ1)) λ1 = λ;
	            } else {
	              if (angle(λ, λ1) > angle(λ0, λ1)) λ0 = λ;
	            }
	          }
	        }
	      } else {
	        point(λ, φ);
	      }
	      p0 = p, λ_ = λ;
	    }
	    function lineStart() {
	      bound.point = linePoint;
	    }
	    function lineEnd() {
	      range[0] = λ0, range[1] = λ1;
	      bound.point = point;
	      p0 = null;
	    }
	    function ringPoint(λ, φ) {
	      if (p0) {
	        var dλ = λ - λ_;
	        dλSum += abs(dλ) > 180 ? dλ + (dλ > 0 ? 360 : -360) : dλ;
	      } else λ__ = λ, φ__ = φ;
	      d3_geo_area.point(λ, φ);
	      linePoint(λ, φ);
	    }
	    function ringStart() {
	      d3_geo_area.lineStart();
	    }
	    function ringEnd() {
	      ringPoint(λ__, φ__);
	      d3_geo_area.lineEnd();
	      if (abs(dλSum) > ε) λ0 = -(λ1 = 180);
	      range[0] = λ0, range[1] = λ1;
	      p0 = null;
	    }
	    function angle(λ0, λ1) {
	      return (λ1 -= λ0) < 0 ? λ1 + 360 : λ1;
	    }
	    function compareRanges(a, b) {
	      return a[0] - b[0];
	    }
	    function withinRange(x, range) {
	      return range[0] <= range[1] ? range[0] <= x && x <= range[1] : x < range[0] || range[1] < x;
	    }
	    return function(feature) {
	      φ1 = λ1 = -(λ0 = φ0 = Infinity);
	      ranges = [];
	      d3.geo.stream(feature, bound);
	      var n = ranges.length;
	      if (n) {
	        ranges.sort(compareRanges);
	        for (var i = 1, a = ranges[0], b, merged = [ a ]; i < n; ++i) {
	          b = ranges[i];
	          if (withinRange(b[0], a) || withinRange(b[1], a)) {
	            if (angle(a[0], b[1]) > angle(a[0], a[1])) a[1] = b[1];
	            if (angle(b[0], a[1]) > angle(a[0], a[1])) a[0] = b[0];
	          } else {
	            merged.push(a = b);
	          }
	        }
	        var best = -Infinity, dλ;
	        for (var n = merged.length - 1, i = 0, a = merged[n], b; i <= n; a = b, ++i) {
	          b = merged[i];
	          if ((dλ = angle(a[1], b[0])) > best) best = dλ, λ0 = b[0], λ1 = a[1];
	        }
	      }
	      ranges = range = null;
	      return λ0 === Infinity || φ0 === Infinity ? [ [ NaN, NaN ], [ NaN, NaN ] ] : [ [ λ0, φ0 ], [ λ1, φ1 ] ];
	    };
	  }();
	  d3.geo.centroid = function(object) {
	    d3_geo_centroidW0 = d3_geo_centroidW1 = d3_geo_centroidX0 = d3_geo_centroidY0 = d3_geo_centroidZ0 = d3_geo_centroidX1 = d3_geo_centroidY1 = d3_geo_centroidZ1 = d3_geo_centroidX2 = d3_geo_centroidY2 = d3_geo_centroidZ2 = 0;
	    d3.geo.stream(object, d3_geo_centroid);
	    var x = d3_geo_centroidX2, y = d3_geo_centroidY2, z = d3_geo_centroidZ2, m = x * x + y * y + z * z;
	    if (m < ε2) {
	      x = d3_geo_centroidX1, y = d3_geo_centroidY1, z = d3_geo_centroidZ1;
	      if (d3_geo_centroidW1 < ε) x = d3_geo_centroidX0, y = d3_geo_centroidY0, z = d3_geo_centroidZ0;
	      m = x * x + y * y + z * z;
	      if (m < ε2) return [ NaN, NaN ];
	    }
	    return [ Math.atan2(y, x) * d3_degrees, d3_asin(z / Math.sqrt(m)) * d3_degrees ];
	  };
	  var d3_geo_centroidW0, d3_geo_centroidW1, d3_geo_centroidX0, d3_geo_centroidY0, d3_geo_centroidZ0, d3_geo_centroidX1, d3_geo_centroidY1, d3_geo_centroidZ1, d3_geo_centroidX2, d3_geo_centroidY2, d3_geo_centroidZ2;
	  var d3_geo_centroid = {
	    sphere: d3_noop,
	    point: d3_geo_centroidPoint,
	    lineStart: d3_geo_centroidLineStart,
	    lineEnd: d3_geo_centroidLineEnd,
	    polygonStart: function() {
	      d3_geo_centroid.lineStart = d3_geo_centroidRingStart;
	    },
	    polygonEnd: function() {
	      d3_geo_centroid.lineStart = d3_geo_centroidLineStart;
	    }
	  };
	  function d3_geo_centroidPoint(λ, φ) {
	    λ *= d3_radians;
	    var cosφ = Math.cos(φ *= d3_radians);
	    d3_geo_centroidPointXYZ(cosφ * Math.cos(λ), cosφ * Math.sin(λ), Math.sin(φ));
	  }
	  function d3_geo_centroidPointXYZ(x, y, z) {
	    ++d3_geo_centroidW0;
	    d3_geo_centroidX0 += (x - d3_geo_centroidX0) / d3_geo_centroidW0;
	    d3_geo_centroidY0 += (y - d3_geo_centroidY0) / d3_geo_centroidW0;
	    d3_geo_centroidZ0 += (z - d3_geo_centroidZ0) / d3_geo_centroidW0;
	  }
	  function d3_geo_centroidLineStart() {
	    var x0, y0, z0;
	    d3_geo_centroid.point = function(λ, φ) {
	      λ *= d3_radians;
	      var cosφ = Math.cos(φ *= d3_radians);
	      x0 = cosφ * Math.cos(λ);
	      y0 = cosφ * Math.sin(λ);
	      z0 = Math.sin(φ);
	      d3_geo_centroid.point = nextPoint;
	      d3_geo_centroidPointXYZ(x0, y0, z0);
	    };
	    function nextPoint(λ, φ) {
	      λ *= d3_radians;
	      var cosφ = Math.cos(φ *= d3_radians), x = cosφ * Math.cos(λ), y = cosφ * Math.sin(λ), z = Math.sin(φ), w = Math.atan2(Math.sqrt((w = y0 * z - z0 * y) * w + (w = z0 * x - x0 * z) * w + (w = x0 * y - y0 * x) * w), x0 * x + y0 * y + z0 * z);
	      d3_geo_centroidW1 += w;
	      d3_geo_centroidX1 += w * (x0 + (x0 = x));
	      d3_geo_centroidY1 += w * (y0 + (y0 = y));
	      d3_geo_centroidZ1 += w * (z0 + (z0 = z));
	      d3_geo_centroidPointXYZ(x0, y0, z0);
	    }
	  }
	  function d3_geo_centroidLineEnd() {
	    d3_geo_centroid.point = d3_geo_centroidPoint;
	  }
	  function d3_geo_centroidRingStart() {
	    var λ00, φ00, x0, y0, z0;
	    d3_geo_centroid.point = function(λ, φ) {
	      λ00 = λ, φ00 = φ;
	      d3_geo_centroid.point = nextPoint;
	      λ *= d3_radians;
	      var cosφ = Math.cos(φ *= d3_radians);
	      x0 = cosφ * Math.cos(λ);
	      y0 = cosφ * Math.sin(λ);
	      z0 = Math.sin(φ);
	      d3_geo_centroidPointXYZ(x0, y0, z0);
	    };
	    d3_geo_centroid.lineEnd = function() {
	      nextPoint(λ00, φ00);
	      d3_geo_centroid.lineEnd = d3_geo_centroidLineEnd;
	      d3_geo_centroid.point = d3_geo_centroidPoint;
	    };
	    function nextPoint(λ, φ) {
	      λ *= d3_radians;
	      var cosφ = Math.cos(φ *= d3_radians), x = cosφ * Math.cos(λ), y = cosφ * Math.sin(λ), z = Math.sin(φ), cx = y0 * z - z0 * y, cy = z0 * x - x0 * z, cz = x0 * y - y0 * x, m = Math.sqrt(cx * cx + cy * cy + cz * cz), u = x0 * x + y0 * y + z0 * z, v = m && -d3_acos(u) / m, w = Math.atan2(m, u);
	      d3_geo_centroidX2 += v * cx;
	      d3_geo_centroidY2 += v * cy;
	      d3_geo_centroidZ2 += v * cz;
	      d3_geo_centroidW1 += w;
	      d3_geo_centroidX1 += w * (x0 + (x0 = x));
	      d3_geo_centroidY1 += w * (y0 + (y0 = y));
	      d3_geo_centroidZ1 += w * (z0 + (z0 = z));
	      d3_geo_centroidPointXYZ(x0, y0, z0);
	    }
	  }
	  function d3_geo_compose(a, b) {
	    function compose(x, y) {
	      return x = a(x, y), b(x[0], x[1]);
	    }
	    if (a.invert && b.invert) compose.invert = function(x, y) {
	      return x = b.invert(x, y), x && a.invert(x[0], x[1]);
	    };
	    return compose;
	  }
	  function d3_true() {
	    return true;
	  }
	  function d3_geo_clipPolygon(segments, compare, clipStartInside, interpolate, listener) {
	    var subject = [], clip = [];
	    segments.forEach(function(segment) {
	      if ((n = segment.length - 1) <= 0) return;
	      var n, p0 = segment[0], p1 = segment[n];
	      if (d3_geo_sphericalEqual(p0, p1)) {
	        listener.lineStart();
	        for (var i = 0; i < n; ++i) listener.point((p0 = segment[i])[0], p0[1]);
	        listener.lineEnd();
	        return;
	      }
	      var a = new d3_geo_clipPolygonIntersection(p0, segment, null, true), b = new d3_geo_clipPolygonIntersection(p0, null, a, false);
	      a.o = b;
	      subject.push(a);
	      clip.push(b);
	      a = new d3_geo_clipPolygonIntersection(p1, segment, null, false);
	      b = new d3_geo_clipPolygonIntersection(p1, null, a, true);
	      a.o = b;
	      subject.push(a);
	      clip.push(b);
	    });
	    clip.sort(compare);
	    d3_geo_clipPolygonLinkCircular(subject);
	    d3_geo_clipPolygonLinkCircular(clip);
	    if (!subject.length) return;
	    for (var i = 0, entry = clipStartInside, n = clip.length; i < n; ++i) {
	      clip[i].e = entry = !entry;
	    }
	    var start = subject[0], points, point;
	    while (1) {
	      var current = start, isSubject = true;
	      while (current.v) if ((current = current.n) === start) return;
	      points = current.z;
	      listener.lineStart();
	      do {
	        current.v = current.o.v = true;
	        if (current.e) {
	          if (isSubject) {
	            for (var i = 0, n = points.length; i < n; ++i) listener.point((point = points[i])[0], point[1]);
	          } else {
	            interpolate(current.x, current.n.x, 1, listener);
	          }
	          current = current.n;
	        } else {
	          if (isSubject) {
	            points = current.p.z;
	            for (var i = points.length - 1; i >= 0; --i) listener.point((point = points[i])[0], point[1]);
	          } else {
	            interpolate(current.x, current.p.x, -1, listener);
	          }
	          current = current.p;
	        }
	        current = current.o;
	        points = current.z;
	        isSubject = !isSubject;
	      } while (!current.v);
	      listener.lineEnd();
	    }
	  }
	  function d3_geo_clipPolygonLinkCircular(array) {
	    if (!(n = array.length)) return;
	    var n, i = 0, a = array[0], b;
	    while (++i < n) {
	      a.n = b = array[i];
	      b.p = a;
	      a = b;
	    }
	    a.n = b = array[0];
	    b.p = a;
	  }
	  function d3_geo_clipPolygonIntersection(point, points, other, entry) {
	    this.x = point;
	    this.z = points;
	    this.o = other;
	    this.e = entry;
	    this.v = false;
	    this.n = this.p = null;
	  }
	  function d3_geo_clip(pointVisible, clipLine, interpolate, clipStart) {
	    return function(rotate, listener) {
	      var line = clipLine(listener), rotatedClipStart = rotate.invert(clipStart[0], clipStart[1]);
	      var clip = {
	        point: point,
	        lineStart: lineStart,
	        lineEnd: lineEnd,
	        polygonStart: function() {
	          clip.point = pointRing;
	          clip.lineStart = ringStart;
	          clip.lineEnd = ringEnd;
	          segments = [];
	          polygon = [];
	        },
	        polygonEnd: function() {
	          clip.point = point;
	          clip.lineStart = lineStart;
	          clip.lineEnd = lineEnd;
	          segments = d3.merge(segments);
	          var clipStartInside = d3_geo_pointInPolygon(rotatedClipStart, polygon);
	          if (segments.length) {
	            if (!polygonStarted) listener.polygonStart(), polygonStarted = true;
	            d3_geo_clipPolygon(segments, d3_geo_clipSort, clipStartInside, interpolate, listener);
	          } else if (clipStartInside) {
	            if (!polygonStarted) listener.polygonStart(), polygonStarted = true;
	            listener.lineStart();
	            interpolate(null, null, 1, listener);
	            listener.lineEnd();
	          }
	          if (polygonStarted) listener.polygonEnd(), polygonStarted = false;
	          segments = polygon = null;
	        },
	        sphere: function() {
	          listener.polygonStart();
	          listener.lineStart();
	          interpolate(null, null, 1, listener);
	          listener.lineEnd();
	          listener.polygonEnd();
	        }
	      };
	      function point(λ, φ) {
	        var point = rotate(λ, φ);
	        if (pointVisible(λ = point[0], φ = point[1])) listener.point(λ, φ);
	      }
	      function pointLine(λ, φ) {
	        var point = rotate(λ, φ);
	        line.point(point[0], point[1]);
	      }
	      function lineStart() {
	        clip.point = pointLine;
	        line.lineStart();
	      }
	      function lineEnd() {
	        clip.point = point;
	        line.lineEnd();
	      }
	      var segments;
	      var buffer = d3_geo_clipBufferListener(), ringListener = clipLine(buffer), polygonStarted = false, polygon, ring;
	      function pointRing(λ, φ) {
	        ring.push([ λ, φ ]);
	        var point = rotate(λ, φ);
	        ringListener.point(point[0], point[1]);
	      }
	      function ringStart() {
	        ringListener.lineStart();
	        ring = [];
	      }
	      function ringEnd() {
	        pointRing(ring[0][0], ring[0][1]);
	        ringListener.lineEnd();
	        var clean = ringListener.clean(), ringSegments = buffer.buffer(), segment, n = ringSegments.length;
	        ring.pop();
	        polygon.push(ring);
	        ring = null;
	        if (!n) return;
	        if (clean & 1) {
	          segment = ringSegments[0];
	          var n = segment.length - 1, i = -1, point;
	          if (n > 0) {
	            if (!polygonStarted) listener.polygonStart(), polygonStarted = true;
	            listener.lineStart();
	            while (++i < n) listener.point((point = segment[i])[0], point[1]);
	            listener.lineEnd();
	          }
	          return;
	        }
	        if (n > 1 && clean & 2) ringSegments.push(ringSegments.pop().concat(ringSegments.shift()));
	        segments.push(ringSegments.filter(d3_geo_clipSegmentLength1));
	      }
	      return clip;
	    };
	  }
	  function d3_geo_clipSegmentLength1(segment) {
	    return segment.length > 1;
	  }
	  function d3_geo_clipBufferListener() {
	    var lines = [], line;
	    return {
	      lineStart: function() {
	        lines.push(line = []);
	      },
	      point: function(λ, φ) {
	        line.push([ λ, φ ]);
	      },
	      lineEnd: d3_noop,
	      buffer: function() {
	        var buffer = lines;
	        lines = [];
	        line = null;
	        return buffer;
	      },
	      rejoin: function() {
	        if (lines.length > 1) lines.push(lines.pop().concat(lines.shift()));
	      }
	    };
	  }
	  function d3_geo_clipSort(a, b) {
	    return ((a = a.x)[0] < 0 ? a[1] - halfπ - ε : halfπ - a[1]) - ((b = b.x)[0] < 0 ? b[1] - halfπ - ε : halfπ - b[1]);
	  }
	  var d3_geo_clipAntimeridian = d3_geo_clip(d3_true, d3_geo_clipAntimeridianLine, d3_geo_clipAntimeridianInterpolate, [ -π, -π / 2 ]);
	  function d3_geo_clipAntimeridianLine(listener) {
	    var λ0 = NaN, φ0 = NaN, sλ0 = NaN, clean;
	    return {
	      lineStart: function() {
	        listener.lineStart();
	        clean = 1;
	      },
	      point: function(λ1, φ1) {
	        var sλ1 = λ1 > 0 ? π : -π, dλ = abs(λ1 - λ0);
	        if (abs(dλ - π) < ε) {
	          listener.point(λ0, φ0 = (φ0 + φ1) / 2 > 0 ? halfπ : -halfπ);
	          listener.point(sλ0, φ0);
	          listener.lineEnd();
	          listener.lineStart();
	          listener.point(sλ1, φ0);
	          listener.point(λ1, φ0);
	          clean = 0;
	        } else if (sλ0 !== sλ1 && dλ >= π) {
	          if (abs(λ0 - sλ0) < ε) λ0 -= sλ0 * ε;
	          if (abs(λ1 - sλ1) < ε) λ1 -= sλ1 * ε;
	          φ0 = d3_geo_clipAntimeridianIntersect(λ0, φ0, λ1, φ1);
	          listener.point(sλ0, φ0);
	          listener.lineEnd();
	          listener.lineStart();
	          listener.point(sλ1, φ0);
	          clean = 0;
	        }
	        listener.point(λ0 = λ1, φ0 = φ1);
	        sλ0 = sλ1;
	      },
	      lineEnd: function() {
	        listener.lineEnd();
	        λ0 = φ0 = NaN;
	      },
	      clean: function() {
	        return 2 - clean;
	      }
	    };
	  }
	  function d3_geo_clipAntimeridianIntersect(λ0, φ0, λ1, φ1) {
	    var cosφ0, cosφ1, sinλ0_λ1 = Math.sin(λ0 - λ1);
	    return abs(sinλ0_λ1) > ε ? Math.atan((Math.sin(φ0) * (cosφ1 = Math.cos(φ1)) * Math.sin(λ1) - Math.sin(φ1) * (cosφ0 = Math.cos(φ0)) * Math.sin(λ0)) / (cosφ0 * cosφ1 * sinλ0_λ1)) : (φ0 + φ1) / 2;
	  }
	  function d3_geo_clipAntimeridianInterpolate(from, to, direction, listener) {
	    var φ;
	    if (from == null) {
	      φ = direction * halfπ;
	      listener.point(-π, φ);
	      listener.point(0, φ);
	      listener.point(π, φ);
	      listener.point(π, 0);
	      listener.point(π, -φ);
	      listener.point(0, -φ);
	      listener.point(-π, -φ);
	      listener.point(-π, 0);
	      listener.point(-π, φ);
	    } else if (abs(from[0] - to[0]) > ε) {
	      var s = from[0] < to[0] ? π : -π;
	      φ = direction * s / 2;
	      listener.point(-s, φ);
	      listener.point(0, φ);
	      listener.point(s, φ);
	    } else {
	      listener.point(to[0], to[1]);
	    }
	  }
	  function d3_geo_pointInPolygon(point, polygon) {
	    var meridian = point[0], parallel = point[1], meridianNormal = [ Math.sin(meridian), -Math.cos(meridian), 0 ], polarAngle = 0, winding = 0;
	    d3_geo_areaRingSum.reset();
	    for (var i = 0, n = polygon.length; i < n; ++i) {
	      var ring = polygon[i], m = ring.length;
	      if (!m) continue;
	      var point0 = ring[0], λ0 = point0[0], φ0 = point0[1] / 2 + π / 4, sinφ0 = Math.sin(φ0), cosφ0 = Math.cos(φ0), j = 1;
	      while (true) {
	        if (j === m) j = 0;
	        point = ring[j];
	        var λ = point[0], φ = point[1] / 2 + π / 4, sinφ = Math.sin(φ), cosφ = Math.cos(φ), dλ = λ - λ0, sdλ = dλ >= 0 ? 1 : -1, adλ = sdλ * dλ, antimeridian = adλ > π, k = sinφ0 * sinφ;
	        d3_geo_areaRingSum.add(Math.atan2(k * sdλ * Math.sin(adλ), cosφ0 * cosφ + k * Math.cos(adλ)));
	        polarAngle += antimeridian ? dλ + sdλ * τ : dλ;
	        if (antimeridian ^ λ0 >= meridian ^ λ >= meridian) {
	          var arc = d3_geo_cartesianCross(d3_geo_cartesian(point0), d3_geo_cartesian(point));
	          d3_geo_cartesianNormalize(arc);
	          var intersection = d3_geo_cartesianCross(meridianNormal, arc);
	          d3_geo_cartesianNormalize(intersection);
	          var φarc = (antimeridian ^ dλ >= 0 ? -1 : 1) * d3_asin(intersection[2]);
	          if (parallel > φarc || parallel === φarc && (arc[0] || arc[1])) {
	            winding += antimeridian ^ dλ >= 0 ? 1 : -1;
	          }
	        }
	        if (!j++) break;
	        λ0 = λ, sinφ0 = sinφ, cosφ0 = cosφ, point0 = point;
	      }
	    }
	    return (polarAngle < -ε || polarAngle < ε && d3_geo_areaRingSum < -ε) ^ winding & 1;
	  }
	  function d3_geo_clipCircle(radius) {
	    var cr = Math.cos(radius), smallRadius = cr > 0, notHemisphere = abs(cr) > ε, interpolate = d3_geo_circleInterpolate(radius, 6 * d3_radians);
	    return d3_geo_clip(visible, clipLine, interpolate, smallRadius ? [ 0, -radius ] : [ -π, radius - π ]);
	    function visible(λ, φ) {
	      return Math.cos(λ) * Math.cos(φ) > cr;
	    }
	    function clipLine(listener) {
	      var point0, c0, v0, v00, clean;
	      return {
	        lineStart: function() {
	          v00 = v0 = false;
	          clean = 1;
	        },
	        point: function(λ, φ) {
	          var point1 = [ λ, φ ], point2, v = visible(λ, φ), c = smallRadius ? v ? 0 : code(λ, φ) : v ? code(λ + (λ < 0 ? π : -π), φ) : 0;
	          if (!point0 && (v00 = v0 = v)) listener.lineStart();
	          if (v !== v0) {
	            point2 = intersect(point0, point1);
	            if (d3_geo_sphericalEqual(point0, point2) || d3_geo_sphericalEqual(point1, point2)) {
	              point1[0] += ε;
	              point1[1] += ε;
	              v = visible(point1[0], point1[1]);
	            }
	          }
	          if (v !== v0) {
	            clean = 0;
	            if (v) {
	              listener.lineStart();
	              point2 = intersect(point1, point0);
	              listener.point(point2[0], point2[1]);
	            } else {
	              point2 = intersect(point0, point1);
	              listener.point(point2[0], point2[1]);
	              listener.lineEnd();
	            }
	            point0 = point2;
	          } else if (notHemisphere && point0 && smallRadius ^ v) {
	            var t;
	            if (!(c & c0) && (t = intersect(point1, point0, true))) {
	              clean = 0;
	              if (smallRadius) {
	                listener.lineStart();
	                listener.point(t[0][0], t[0][1]);
	                listener.point(t[1][0], t[1][1]);
	                listener.lineEnd();
	              } else {
	                listener.point(t[1][0], t[1][1]);
	                listener.lineEnd();
	                listener.lineStart();
	                listener.point(t[0][0], t[0][1]);
	              }
	            }
	          }
	          if (v && (!point0 || !d3_geo_sphericalEqual(point0, point1))) {
	            listener.point(point1[0], point1[1]);
	          }
	          point0 = point1, v0 = v, c0 = c;
	        },
	        lineEnd: function() {
	          if (v0) listener.lineEnd();
	          point0 = null;
	        },
	        clean: function() {
	          return clean | (v00 && v0) << 1;
	        }
	      };
	    }
	    function intersect(a, b, two) {
	      var pa = d3_geo_cartesian(a), pb = d3_geo_cartesian(b);
	      var n1 = [ 1, 0, 0 ], n2 = d3_geo_cartesianCross(pa, pb), n2n2 = d3_geo_cartesianDot(n2, n2), n1n2 = n2[0], determinant = n2n2 - n1n2 * n1n2;
	      if (!determinant) return !two && a;
	      var c1 = cr * n2n2 / determinant, c2 = -cr * n1n2 / determinant, n1xn2 = d3_geo_cartesianCross(n1, n2), A = d3_geo_cartesianScale(n1, c1), B = d3_geo_cartesianScale(n2, c2);
	      d3_geo_cartesianAdd(A, B);
	      var u = n1xn2, w = d3_geo_cartesianDot(A, u), uu = d3_geo_cartesianDot(u, u), t2 = w * w - uu * (d3_geo_cartesianDot(A, A) - 1);
	      if (t2 < 0) return;
	      var t = Math.sqrt(t2), q = d3_geo_cartesianScale(u, (-w - t) / uu);
	      d3_geo_cartesianAdd(q, A);
	      q = d3_geo_spherical(q);
	      if (!two) return q;
	      var λ0 = a[0], λ1 = b[0], φ0 = a[1], φ1 = b[1], z;
	      if (λ1 < λ0) z = λ0, λ0 = λ1, λ1 = z;
	      var δλ = λ1 - λ0, polar = abs(δλ - π) < ε, meridian = polar || δλ < ε;
	      if (!polar && φ1 < φ0) z = φ0, φ0 = φ1, φ1 = z;
	      if (meridian ? polar ? φ0 + φ1 > 0 ^ q[1] < (abs(q[0] - λ0) < ε ? φ0 : φ1) : φ0 <= q[1] && q[1] <= φ1 : δλ > π ^ (λ0 <= q[0] && q[0] <= λ1)) {
	        var q1 = d3_geo_cartesianScale(u, (-w + t) / uu);
	        d3_geo_cartesianAdd(q1, A);
	        return [ q, d3_geo_spherical(q1) ];
	      }
	    }
	    function code(λ, φ) {
	      var r = smallRadius ? radius : π - radius, code = 0;
	      if (λ < -r) code |= 1; else if (λ > r) code |= 2;
	      if (φ < -r) code |= 4; else if (φ > r) code |= 8;
	      return code;
	    }
	  }
	  function d3_geom_clipLine(x0, y0, x1, y1) {
	    return function(line) {
	      var a = line.a, b = line.b, ax = a.x, ay = a.y, bx = b.x, by = b.y, t0 = 0, t1 = 1, dx = bx - ax, dy = by - ay, r;
	      r = x0 - ax;
	      if (!dx && r > 0) return;
	      r /= dx;
	      if (dx < 0) {
	        if (r < t0) return;
	        if (r < t1) t1 = r;
	      } else if (dx > 0) {
	        if (r > t1) return;
	        if (r > t0) t0 = r;
	      }
	      r = x1 - ax;
	      if (!dx && r < 0) return;
	      r /= dx;
	      if (dx < 0) {
	        if (r > t1) return;
	        if (r > t0) t0 = r;
	      } else if (dx > 0) {
	        if (r < t0) return;
	        if (r < t1) t1 = r;
	      }
	      r = y0 - ay;
	      if (!dy && r > 0) return;
	      r /= dy;
	      if (dy < 0) {
	        if (r < t0) return;
	        if (r < t1) t1 = r;
	      } else if (dy > 0) {
	        if (r > t1) return;
	        if (r > t0) t0 = r;
	      }
	      r = y1 - ay;
	      if (!dy && r < 0) return;
	      r /= dy;
	      if (dy < 0) {
	        if (r > t1) return;
	        if (r > t0) t0 = r;
	      } else if (dy > 0) {
	        if (r < t0) return;
	        if (r < t1) t1 = r;
	      }
	      if (t0 > 0) line.a = {
	        x: ax + t0 * dx,
	        y: ay + t0 * dy
	      };
	      if (t1 < 1) line.b = {
	        x: ax + t1 * dx,
	        y: ay + t1 * dy
	      };
	      return line;
	    };
	  }
	  var d3_geo_clipExtentMAX = 1e9;
	  d3.geo.clipExtent = function() {
	    var x0, y0, x1, y1, stream, clip, clipExtent = {
	      stream: function(output) {
	        if (stream) stream.valid = false;
	        stream = clip(output);
	        stream.valid = true;
	        return stream;
	      },
	      extent: function(_) {
	        if (!arguments.length) return [ [ x0, y0 ], [ x1, y1 ] ];
	        clip = d3_geo_clipExtent(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]);
	        if (stream) stream.valid = false, stream = null;
	        return clipExtent;
	      }
	    };
	    return clipExtent.extent([ [ 0, 0 ], [ 960, 500 ] ]);
	  };
	  function d3_geo_clipExtent(x0, y0, x1, y1) {
	    return function(listener) {
	      var listener_ = listener, bufferListener = d3_geo_clipBufferListener(), clipLine = d3_geom_clipLine(x0, y0, x1, y1), segments, polygon, ring;
	      var clip = {
	        point: point,
	        lineStart: lineStart,
	        lineEnd: lineEnd,
	        polygonStart: function() {
	          listener = bufferListener;
	          segments = [];
	          polygon = [];
	          clean = true;
	        },
	        polygonEnd: function() {
	          listener = listener_;
	          segments = d3.merge(segments);
	          var clipStartInside = insidePolygon([ x0, y1 ]), inside = clean && clipStartInside, visible = segments.length;
	          if (inside || visible) {
	            listener.polygonStart();
	            if (inside) {
	              listener.lineStart();
	              interpolate(null, null, 1, listener);
	              listener.lineEnd();
	            }
	            if (visible) {
	              d3_geo_clipPolygon(segments, compare, clipStartInside, interpolate, listener);
	            }
	            listener.polygonEnd();
	          }
	          segments = polygon = ring = null;
	        }
	      };
	      function insidePolygon(p) {
	        var wn = 0, n = polygon.length, y = p[1];
	        for (var i = 0; i < n; ++i) {
	          for (var j = 1, v = polygon[i], m = v.length, a = v[0], b; j < m; ++j) {
	            b = v[j];
	            if (a[1] <= y) {
	              if (b[1] > y && d3_cross2d(a, b, p) > 0) ++wn;
	            } else {
	              if (b[1] <= y && d3_cross2d(a, b, p) < 0) --wn;
	            }
	            a = b;
	          }
	        }
	        return wn !== 0;
	      }
	      function interpolate(from, to, direction, listener) {
	        var a = 0, a1 = 0;
	        if (from == null || (a = corner(from, direction)) !== (a1 = corner(to, direction)) || comparePoints(from, to) < 0 ^ direction > 0) {
	          do {
	            listener.point(a === 0 || a === 3 ? x0 : x1, a > 1 ? y1 : y0);
	          } while ((a = (a + direction + 4) % 4) !== a1);
	        } else {
	          listener.point(to[0], to[1]);
	        }
	      }
	      function pointVisible(x, y) {
	        return x0 <= x && x <= x1 && y0 <= y && y <= y1;
	      }
	      function point(x, y) {
	        if (pointVisible(x, y)) listener.point(x, y);
	      }
	      var x__, y__, v__, x_, y_, v_, first, clean;
	      function lineStart() {
	        clip.point = linePoint;
	        if (polygon) polygon.push(ring = []);
	        first = true;
	        v_ = false;
	        x_ = y_ = NaN;
	      }
	      function lineEnd() {
	        if (segments) {
	          linePoint(x__, y__);
	          if (v__ && v_) bufferListener.rejoin();
	          segments.push(bufferListener.buffer());
	        }
	        clip.point = point;
	        if (v_) listener.lineEnd();
	      }
	      function linePoint(x, y) {
	        x = Math.max(-d3_geo_clipExtentMAX, Math.min(d3_geo_clipExtentMAX, x));
	        y = Math.max(-d3_geo_clipExtentMAX, Math.min(d3_geo_clipExtentMAX, y));
	        var v = pointVisible(x, y);
	        if (polygon) ring.push([ x, y ]);
	        if (first) {
	          x__ = x, y__ = y, v__ = v;
	          first = false;
	          if (v) {
	            listener.lineStart();
	            listener.point(x, y);
	          }
	        } else {
	          if (v && v_) listener.point(x, y); else {
	            var l = {
	              a: {
	                x: x_,
	                y: y_
	              },
	              b: {
	                x: x,
	                y: y
	              }
	            };
	            if (clipLine(l)) {
	              if (!v_) {
	                listener.lineStart();
	                listener.point(l.a.x, l.a.y);
	              }
	              listener.point(l.b.x, l.b.y);
	              if (!v) listener.lineEnd();
	              clean = false;
	            } else if (v) {
	              listener.lineStart();
	              listener.point(x, y);
	              clean = false;
	            }
	          }
	        }
	        x_ = x, y_ = y, v_ = v;
	      }
	      return clip;
	    };
	    function corner(p, direction) {
	      return abs(p[0] - x0) < ε ? direction > 0 ? 0 : 3 : abs(p[0] - x1) < ε ? direction > 0 ? 2 : 1 : abs(p[1] - y0) < ε ? direction > 0 ? 1 : 0 : direction > 0 ? 3 : 2;
	    }
	    function compare(a, b) {
	      return comparePoints(a.x, b.x);
	    }
	    function comparePoints(a, b) {
	      var ca = corner(a, 1), cb = corner(b, 1);
	      return ca !== cb ? ca - cb : ca === 0 ? b[1] - a[1] : ca === 1 ? a[0] - b[0] : ca === 2 ? a[1] - b[1] : b[0] - a[0];
	    }
	  }
	  function d3_geo_conic(projectAt) {
	    var φ0 = 0, φ1 = π / 3, m = d3_geo_projectionMutator(projectAt), p = m(φ0, φ1);
	    p.parallels = function(_) {
	      if (!arguments.length) return [ φ0 / π * 180, φ1 / π * 180 ];
	      return m(φ0 = _[0] * π / 180, φ1 = _[1] * π / 180);
	    };
	    return p;
	  }
	  function d3_geo_conicEqualArea(φ0, φ1) {
	    var sinφ0 = Math.sin(φ0), n = (sinφ0 + Math.sin(φ1)) / 2, C = 1 + sinφ0 * (2 * n - sinφ0), ρ0 = Math.sqrt(C) / n;
	    function forward(λ, φ) {
	      var ρ = Math.sqrt(C - 2 * n * Math.sin(φ)) / n;
	      return [ ρ * Math.sin(λ *= n), ρ0 - ρ * Math.cos(λ) ];
	    }
	    forward.invert = function(x, y) {
	      var ρ0_y = ρ0 - y;
	      return [ Math.atan2(x, ρ0_y) / n, d3_asin((C - (x * x + ρ0_y * ρ0_y) * n * n) / (2 * n)) ];
	    };
	    return forward;
	  }
	  (d3.geo.conicEqualArea = function() {
	    return d3_geo_conic(d3_geo_conicEqualArea);
	  }).raw = d3_geo_conicEqualArea;
	  d3.geo.albers = function() {
	    return d3.geo.conicEqualArea().rotate([ 96, 0 ]).center([ -.6, 38.7 ]).parallels([ 29.5, 45.5 ]).scale(1070);
	  };
	  d3.geo.albersUsa = function() {
	    var lower48 = d3.geo.albers();
	    var alaska = d3.geo.conicEqualArea().rotate([ 154, 0 ]).center([ -2, 58.5 ]).parallels([ 55, 65 ]);
	    var hawaii = d3.geo.conicEqualArea().rotate([ 157, 0 ]).center([ -3, 19.9 ]).parallels([ 8, 18 ]);
	    var point, pointStream = {
	      point: function(x, y) {
	        point = [ x, y ];
	      }
	    }, lower48Point, alaskaPoint, hawaiiPoint;
	    function albersUsa(coordinates) {
	      var x = coordinates[0], y = coordinates[1];
	      point = null;
	      (lower48Point(x, y), point) || (alaskaPoint(x, y), point) || hawaiiPoint(x, y);
	      return point;
	    }
	    albersUsa.invert = function(coordinates) {
	      var k = lower48.scale(), t = lower48.translate(), x = (coordinates[0] - t[0]) / k, y = (coordinates[1] - t[1]) / k;
	      return (y >= .12 && y < .234 && x >= -.425 && x < -.214 ? alaska : y >= .166 && y < .234 && x >= -.214 && x < -.115 ? hawaii : lower48).invert(coordinates);
	    };
	    albersUsa.stream = function(stream) {
	      var lower48Stream = lower48.stream(stream), alaskaStream = alaska.stream(stream), hawaiiStream = hawaii.stream(stream);
	      return {
	        point: function(x, y) {
	          lower48Stream.point(x, y);
	          alaskaStream.point(x, y);
	          hawaiiStream.point(x, y);
	        },
	        sphere: function() {
	          lower48Stream.sphere();
	          alaskaStream.sphere();
	          hawaiiStream.sphere();
	        },
	        lineStart: function() {
	          lower48Stream.lineStart();
	          alaskaStream.lineStart();
	          hawaiiStream.lineStart();
	        },
	        lineEnd: function() {
	          lower48Stream.lineEnd();
	          alaskaStream.lineEnd();
	          hawaiiStream.lineEnd();
	        },
	        polygonStart: function() {
	          lower48Stream.polygonStart();
	          alaskaStream.polygonStart();
	          hawaiiStream.polygonStart();
	        },
	        polygonEnd: function() {
	          lower48Stream.polygonEnd();
	          alaskaStream.polygonEnd();
	          hawaiiStream.polygonEnd();
	        }
	      };
	    };
	    albersUsa.precision = function(_) {
	      if (!arguments.length) return lower48.precision();
	      lower48.precision(_);
	      alaska.precision(_);
	      hawaii.precision(_);
	      return albersUsa;
	    };
	    albersUsa.scale = function(_) {
	      if (!arguments.length) return lower48.scale();
	      lower48.scale(_);
	      alaska.scale(_ * .35);
	      hawaii.scale(_);
	      return albersUsa.translate(lower48.translate());
	    };
	    albersUsa.translate = function(_) {
	      if (!arguments.length) return lower48.translate();
	      var k = lower48.scale(), x = +_[0], y = +_[1];
	      lower48Point = lower48.translate(_).clipExtent([ [ x - .455 * k, y - .238 * k ], [ x + .455 * k, y + .238 * k ] ]).stream(pointStream).point;
	      alaskaPoint = alaska.translate([ x - .307 * k, y + .201 * k ]).clipExtent([ [ x - .425 * k + ε, y + .12 * k + ε ], [ x - .214 * k - ε, y + .234 * k - ε ] ]).stream(pointStream).point;
	      hawaiiPoint = hawaii.translate([ x - .205 * k, y + .212 * k ]).clipExtent([ [ x - .214 * k + ε, y + .166 * k + ε ], [ x - .115 * k - ε, y + .234 * k - ε ] ]).stream(pointStream).point;
	      return albersUsa;
	    };
	    return albersUsa.scale(1070);
	  };
	  var d3_geo_pathAreaSum, d3_geo_pathAreaPolygon, d3_geo_pathArea = {
	    point: d3_noop,
	    lineStart: d3_noop,
	    lineEnd: d3_noop,
	    polygonStart: function() {
	      d3_geo_pathAreaPolygon = 0;
	      d3_geo_pathArea.lineStart = d3_geo_pathAreaRingStart;
	    },
	    polygonEnd: function() {
	      d3_geo_pathArea.lineStart = d3_geo_pathArea.lineEnd = d3_geo_pathArea.point = d3_noop;
	      d3_geo_pathAreaSum += abs(d3_geo_pathAreaPolygon / 2);
	    }
	  };
	  function d3_geo_pathAreaRingStart() {
	    var x00, y00, x0, y0;
	    d3_geo_pathArea.point = function(x, y) {
	      d3_geo_pathArea.point = nextPoint;
	      x00 = x0 = x, y00 = y0 = y;
	    };
	    function nextPoint(x, y) {
	      d3_geo_pathAreaPolygon += y0 * x - x0 * y;
	      x0 = x, y0 = y;
	    }
	    d3_geo_pathArea.lineEnd = function() {
	      nextPoint(x00, y00);
	    };
	  }
	  var d3_geo_pathBoundsX0, d3_geo_pathBoundsY0, d3_geo_pathBoundsX1, d3_geo_pathBoundsY1;
	  var d3_geo_pathBounds = {
	    point: d3_geo_pathBoundsPoint,
	    lineStart: d3_noop,
	    lineEnd: d3_noop,
	    polygonStart: d3_noop,
	    polygonEnd: d3_noop
	  };
	  function d3_geo_pathBoundsPoint(x, y) {
	    if (x < d3_geo_pathBoundsX0) d3_geo_pathBoundsX0 = x;
	    if (x > d3_geo_pathBoundsX1) d3_geo_pathBoundsX1 = x;
	    if (y < d3_geo_pathBoundsY0) d3_geo_pathBoundsY0 = y;
	    if (y > d3_geo_pathBoundsY1) d3_geo_pathBoundsY1 = y;
	  }
	  function d3_geo_pathBuffer() {
	    var pointCircle = d3_geo_pathBufferCircle(4.5), buffer = [];
	    var stream = {
	      point: point,
	      lineStart: function() {
	        stream.point = pointLineStart;
	      },
	      lineEnd: lineEnd,
	      polygonStart: function() {
	        stream.lineEnd = lineEndPolygon;
	      },
	      polygonEnd: function() {
	        stream.lineEnd = lineEnd;
	        stream.point = point;
	      },
	      pointRadius: function(_) {
	        pointCircle = d3_geo_pathBufferCircle(_);
	        return stream;
	      },
	      result: function() {
	        if (buffer.length) {
	          var result = buffer.join("");
	          buffer = [];
	          return result;
	        }
	      }
	    };
	    function point(x, y) {
	      buffer.push("M", x, ",", y, pointCircle);
	    }
	    function pointLineStart(x, y) {
	      buffer.push("M", x, ",", y);
	      stream.point = pointLine;
	    }
	    function pointLine(x, y) {
	      buffer.push("L", x, ",", y);
	    }
	    function lineEnd() {
	      stream.point = point;
	    }
	    function lineEndPolygon() {
	      buffer.push("Z");
	    }
	    return stream;
	  }
	  function d3_geo_pathBufferCircle(radius) {
	    return "m0," + radius + "a" + radius + "," + radius + " 0 1,1 0," + -2 * radius + "a" + radius + "," + radius + " 0 1,1 0," + 2 * radius + "z";
	  }
	  var d3_geo_pathCentroid = {
	    point: d3_geo_pathCentroidPoint,
	    lineStart: d3_geo_pathCentroidLineStart,
	    lineEnd: d3_geo_pathCentroidLineEnd,
	    polygonStart: function() {
	      d3_geo_pathCentroid.lineStart = d3_geo_pathCentroidRingStart;
	    },
	    polygonEnd: function() {
	      d3_geo_pathCentroid.point = d3_geo_pathCentroidPoint;
	      d3_geo_pathCentroid.lineStart = d3_geo_pathCentroidLineStart;
	      d3_geo_pathCentroid.lineEnd = d3_geo_pathCentroidLineEnd;
	    }
	  };
	  function d3_geo_pathCentroidPoint(x, y) {
	    d3_geo_centroidX0 += x;
	    d3_geo_centroidY0 += y;
	    ++d3_geo_centroidZ0;
	  }
	  function d3_geo_pathCentroidLineStart() {
	    var x0, y0;
	    d3_geo_pathCentroid.point = function(x, y) {
	      d3_geo_pathCentroid.point = nextPoint;
	      d3_geo_pathCentroidPoint(x0 = x, y0 = y);
	    };
	    function nextPoint(x, y) {
	      var dx = x - x0, dy = y - y0, z = Math.sqrt(dx * dx + dy * dy);
	      d3_geo_centroidX1 += z * (x0 + x) / 2;
	      d3_geo_centroidY1 += z * (y0 + y) / 2;
	      d3_geo_centroidZ1 += z;
	      d3_geo_pathCentroidPoint(x0 = x, y0 = y);
	    }
	  }
	  function d3_geo_pathCentroidLineEnd() {
	    d3_geo_pathCentroid.point = d3_geo_pathCentroidPoint;
	  }
	  function d3_geo_pathCentroidRingStart() {
	    var x00, y00, x0, y0;
	    d3_geo_pathCentroid.point = function(x, y) {
	      d3_geo_pathCentroid.point = nextPoint;
	      d3_geo_pathCentroidPoint(x00 = x0 = x, y00 = y0 = y);
	    };
	    function nextPoint(x, y) {
	      var dx = x - x0, dy = y - y0, z = Math.sqrt(dx * dx + dy * dy);
	      d3_geo_centroidX1 += z * (x0 + x) / 2;
	      d3_geo_centroidY1 += z * (y0 + y) / 2;
	      d3_geo_centroidZ1 += z;
	      z = y0 * x - x0 * y;
	      d3_geo_centroidX2 += z * (x0 + x);
	      d3_geo_centroidY2 += z * (y0 + y);
	      d3_geo_centroidZ2 += z * 3;
	      d3_geo_pathCentroidPoint(x0 = x, y0 = y);
	    }
	    d3_geo_pathCentroid.lineEnd = function() {
	      nextPoint(x00, y00);
	    };
	  }
	  function d3_geo_pathContext(context) {
	    var pointRadius = 4.5;
	    var stream = {
	      point: point,
	      lineStart: function() {
	        stream.point = pointLineStart;
	      },
	      lineEnd: lineEnd,
	      polygonStart: function() {
	        stream.lineEnd = lineEndPolygon;
	      },
	      polygonEnd: function() {
	        stream.lineEnd = lineEnd;
	        stream.point = point;
	      },
	      pointRadius: function(_) {
	        pointRadius = _;
	        return stream;
	      },
	      result: d3_noop
	    };
	    function point(x, y) {
	      context.moveTo(x + pointRadius, y);
	      context.arc(x, y, pointRadius, 0, τ);
	    }
	    function pointLineStart(x, y) {
	      context.moveTo(x, y);
	      stream.point = pointLine;
	    }
	    function pointLine(x, y) {
	      context.lineTo(x, y);
	    }
	    function lineEnd() {
	      stream.point = point;
	    }
	    function lineEndPolygon() {
	      context.closePath();
	    }
	    return stream;
	  }
	  function d3_geo_resample(project) {
	    var δ2 = .5, cosMinDistance = Math.cos(30 * d3_radians), maxDepth = 16;
	    function resample(stream) {
	      return (maxDepth ? resampleRecursive : resampleNone)(stream);
	    }
	    function resampleNone(stream) {
	      return d3_geo_transformPoint(stream, function(x, y) {
	        x = project(x, y);
	        stream.point(x[0], x[1]);
	      });
	    }
	    function resampleRecursive(stream) {
	      var λ00, φ00, x00, y00, a00, b00, c00, λ0, x0, y0, a0, b0, c0;
	      var resample = {
	        point: point,
	        lineStart: lineStart,
	        lineEnd: lineEnd,
	        polygonStart: function() {
	          stream.polygonStart();
	          resample.lineStart = ringStart;
	        },
	        polygonEnd: function() {
	          stream.polygonEnd();
	          resample.lineStart = lineStart;
	        }
	      };
	      function point(x, y) {
	        x = project(x, y);
	        stream.point(x[0], x[1]);
	      }
	      function lineStart() {
	        x0 = NaN;
	        resample.point = linePoint;
	        stream.lineStart();
	      }
	      function linePoint(λ, φ) {
	        var c = d3_geo_cartesian([ λ, φ ]), p = project(λ, φ);
	        resampleLineTo(x0, y0, λ0, a0, b0, c0, x0 = p[0], y0 = p[1], λ0 = λ, a0 = c[0], b0 = c[1], c0 = c[2], maxDepth, stream);
	        stream.point(x0, y0);
	      }
	      function lineEnd() {
	        resample.point = point;
	        stream.lineEnd();
	      }
	      function ringStart() {
	        lineStart();
	        resample.point = ringPoint;
	        resample.lineEnd = ringEnd;
	      }
	      function ringPoint(λ, φ) {
	        linePoint(λ00 = λ, φ00 = φ), x00 = x0, y00 = y0, a00 = a0, b00 = b0, c00 = c0;
	        resample.point = linePoint;
	      }
	      function ringEnd() {
	        resampleLineTo(x0, y0, λ0, a0, b0, c0, x00, y00, λ00, a00, b00, c00, maxDepth, stream);
	        resample.lineEnd = lineEnd;
	        lineEnd();
	      }
	      return resample;
	    }
	    function resampleLineTo(x0, y0, λ0, a0, b0, c0, x1, y1, λ1, a1, b1, c1, depth, stream) {
	      var dx = x1 - x0, dy = y1 - y0, d2 = dx * dx + dy * dy;
	      if (d2 > 4 * δ2 && depth--) {
	        var a = a0 + a1, b = b0 + b1, c = c0 + c1, m = Math.sqrt(a * a + b * b + c * c), φ2 = Math.asin(c /= m), λ2 = abs(abs(c) - 1) < ε || abs(λ0 - λ1) < ε ? (λ0 + λ1) / 2 : Math.atan2(b, a), p = project(λ2, φ2), x2 = p[0], y2 = p[1], dx2 = x2 - x0, dy2 = y2 - y0, dz = dy * dx2 - dx * dy2;
	        if (dz * dz / d2 > δ2 || abs((dx * dx2 + dy * dy2) / d2 - .5) > .3 || a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance) {
	          resampleLineTo(x0, y0, λ0, a0, b0, c0, x2, y2, λ2, a /= m, b /= m, c, depth, stream);
	          stream.point(x2, y2);
	          resampleLineTo(x2, y2, λ2, a, b, c, x1, y1, λ1, a1, b1, c1, depth, stream);
	        }
	      }
	    }
	    resample.precision = function(_) {
	      if (!arguments.length) return Math.sqrt(δ2);
	      maxDepth = (δ2 = _ * _) > 0 && 16;
	      return resample;
	    };
	    return resample;
	  }
	  d3.geo.path = function() {
	    var pointRadius = 4.5, projection, context, projectStream, contextStream, cacheStream;
	    function path(object) {
	      if (object) {
	        if (typeof pointRadius === "function") contextStream.pointRadius(+pointRadius.apply(this, arguments));
	        if (!cacheStream || !cacheStream.valid) cacheStream = projectStream(contextStream);
	        d3.geo.stream(object, cacheStream);
	      }
	      return contextStream.result();
	    }
	    path.area = function(object) {
	      d3_geo_pathAreaSum = 0;
	      d3.geo.stream(object, projectStream(d3_geo_pathArea));
	      return d3_geo_pathAreaSum;
	    };
	    path.centroid = function(object) {
	      d3_geo_centroidX0 = d3_geo_centroidY0 = d3_geo_centroidZ0 = d3_geo_centroidX1 = d3_geo_centroidY1 = d3_geo_centroidZ1 = d3_geo_centroidX2 = d3_geo_centroidY2 = d3_geo_centroidZ2 = 0;
	      d3.geo.stream(object, projectStream(d3_geo_pathCentroid));
	      return d3_geo_centroidZ2 ? [ d3_geo_centroidX2 / d3_geo_centroidZ2, d3_geo_centroidY2 / d3_geo_centroidZ2 ] : d3_geo_centroidZ1 ? [ d3_geo_centroidX1 / d3_geo_centroidZ1, d3_geo_centroidY1 / d3_geo_centroidZ1 ] : d3_geo_centroidZ0 ? [ d3_geo_centroidX0 / d3_geo_centroidZ0, d3_geo_centroidY0 / d3_geo_centroidZ0 ] : [ NaN, NaN ];
	    };
	    path.bounds = function(object) {
	      d3_geo_pathBoundsX1 = d3_geo_pathBoundsY1 = -(d3_geo_pathBoundsX0 = d3_geo_pathBoundsY0 = Infinity);
	      d3.geo.stream(object, projectStream(d3_geo_pathBounds));
	      return [ [ d3_geo_pathBoundsX0, d3_geo_pathBoundsY0 ], [ d3_geo_pathBoundsX1, d3_geo_pathBoundsY1 ] ];
	    };
	    path.projection = function(_) {
	      if (!arguments.length) return projection;
	      projectStream = (projection = _) ? _.stream || d3_geo_pathProjectStream(_) : d3_identity;
	      return reset();
	    };
	    path.context = function(_) {
	      if (!arguments.length) return context;
	      contextStream = (context = _) == null ? new d3_geo_pathBuffer() : new d3_geo_pathContext(_);
	      if (typeof pointRadius !== "function") contextStream.pointRadius(pointRadius);
	      return reset();
	    };
	    path.pointRadius = function(_) {
	      if (!arguments.length) return pointRadius;
	      pointRadius = typeof _ === "function" ? _ : (contextStream.pointRadius(+_), +_);
	      return path;
	    };
	    function reset() {
	      cacheStream = null;
	      return path;
	    }
	    return path.projection(d3.geo.albersUsa()).context(null);
	  };
	  function d3_geo_pathProjectStream(project) {
	    var resample = d3_geo_resample(function(x, y) {
	      return project([ x * d3_degrees, y * d3_degrees ]);
	    });
	    return function(stream) {
	      return d3_geo_projectionRadians(resample(stream));
	    };
	  }
	  d3.geo.transform = function(methods) {
	    return {
	      stream: function(stream) {
	        var transform = new d3_geo_transform(stream);
	        for (var k in methods) transform[k] = methods[k];
	        return transform;
	      }
	    };
	  };
	  function d3_geo_transform(stream) {
	    this.stream = stream;
	  }
	  d3_geo_transform.prototype = {
	    point: function(x, y) {
	      this.stream.point(x, y);
	    },
	    sphere: function() {
	      this.stream.sphere();
	    },
	    lineStart: function() {
	      this.stream.lineStart();
	    },
	    lineEnd: function() {
	      this.stream.lineEnd();
	    },
	    polygonStart: function() {
	      this.stream.polygonStart();
	    },
	    polygonEnd: function() {
	      this.stream.polygonEnd();
	    }
	  };
	  function d3_geo_transformPoint(stream, point) {
	    return {
	      point: point,
	      sphere: function() {
	        stream.sphere();
	      },
	      lineStart: function() {
	        stream.lineStart();
	      },
	      lineEnd: function() {
	        stream.lineEnd();
	      },
	      polygonStart: function() {
	        stream.polygonStart();
	      },
	      polygonEnd: function() {
	        stream.polygonEnd();
	      }
	    };
	  }
	  d3.geo.projection = d3_geo_projection;
	  d3.geo.projectionMutator = d3_geo_projectionMutator;
	  function d3_geo_projection(project) {
	    return d3_geo_projectionMutator(function() {
	      return project;
	    })();
	  }
	  function d3_geo_projectionMutator(projectAt) {
	    var project, rotate, projectRotate, projectResample = d3_geo_resample(function(x, y) {
	      x = project(x, y);
	      return [ x[0] * k + δx, δy - x[1] * k ];
	    }), k = 150, x = 480, y = 250, λ = 0, φ = 0, δλ = 0, δφ = 0, δγ = 0, δx, δy, preclip = d3_geo_clipAntimeridian, postclip = d3_identity, clipAngle = null, clipExtent = null, stream;
	    function projection(point) {
	      point = projectRotate(point[0] * d3_radians, point[1] * d3_radians);
	      return [ point[0] * k + δx, δy - point[1] * k ];
	    }
	    function invert(point) {
	      point = projectRotate.invert((point[0] - δx) / k, (δy - point[1]) / k);
	      return point && [ point[0] * d3_degrees, point[1] * d3_degrees ];
	    }
	    projection.stream = function(output) {
	      if (stream) stream.valid = false;
	      stream = d3_geo_projectionRadians(preclip(rotate, projectResample(postclip(output))));
	      stream.valid = true;
	      return stream;
	    };
	    projection.clipAngle = function(_) {
	      if (!arguments.length) return clipAngle;
	      preclip = _ == null ? (clipAngle = _, d3_geo_clipAntimeridian) : d3_geo_clipCircle((clipAngle = +_) * d3_radians);
	      return invalidate();
	    };
	    projection.clipExtent = function(_) {
	      if (!arguments.length) return clipExtent;
	      clipExtent = _;
	      postclip = _ ? d3_geo_clipExtent(_[0][0], _[0][1], _[1][0], _[1][1]) : d3_identity;
	      return invalidate();
	    };
	    projection.scale = function(_) {
	      if (!arguments.length) return k;
	      k = +_;
	      return reset();
	    };
	    projection.translate = function(_) {
	      if (!arguments.length) return [ x, y ];
	      x = +_[0];
	      y = +_[1];
	      return reset();
	    };
	    projection.center = function(_) {
	      if (!arguments.length) return [ λ * d3_degrees, φ * d3_degrees ];
	      λ = _[0] % 360 * d3_radians;
	      φ = _[1] % 360 * d3_radians;
	      return reset();
	    };
	    projection.rotate = function(_) {
	      if (!arguments.length) return [ δλ * d3_degrees, δφ * d3_degrees, δγ * d3_degrees ];
	      δλ = _[0] % 360 * d3_radians;
	      δφ = _[1] % 360 * d3_radians;
	      δγ = _.length > 2 ? _[2] % 360 * d3_radians : 0;
	      return reset();
	    };
	    d3.rebind(projection, projectResample, "precision");
	    function reset() {
	      projectRotate = d3_geo_compose(rotate = d3_geo_rotation(δλ, δφ, δγ), project);
	      var center = project(λ, φ);
	      δx = x - center[0] * k;
	      δy = y + center[1] * k;
	      return invalidate();
	    }
	    function invalidate() {
	      if (stream) stream.valid = false, stream = null;
	      return projection;
	    }
	    return function() {
	      project = projectAt.apply(this, arguments);
	      projection.invert = project.invert && invert;
	      return reset();
	    };
	  }
	  function d3_geo_projectionRadians(stream) {
	    return d3_geo_transformPoint(stream, function(x, y) {
	      stream.point(x * d3_radians, y * d3_radians);
	    });
	  }
	  function d3_geo_equirectangular(λ, φ) {
	    return [ λ, φ ];
	  }
	  (d3.geo.equirectangular = function() {
	    return d3_geo_projection(d3_geo_equirectangular);
	  }).raw = d3_geo_equirectangular.invert = d3_geo_equirectangular;
	  d3.geo.rotation = function(rotate) {
	    rotate = d3_geo_rotation(rotate[0] % 360 * d3_radians, rotate[1] * d3_radians, rotate.length > 2 ? rotate[2] * d3_radians : 0);
	    function forward(coordinates) {
	      coordinates = rotate(coordinates[0] * d3_radians, coordinates[1] * d3_radians);
	      return coordinates[0] *= d3_degrees, coordinates[1] *= d3_degrees, coordinates;
	    }
	    forward.invert = function(coordinates) {
	      coordinates = rotate.invert(coordinates[0] * d3_radians, coordinates[1] * d3_radians);
	      return coordinates[0] *= d3_degrees, coordinates[1] *= d3_degrees, coordinates;
	    };
	    return forward;
	  };
	  function d3_geo_identityRotation(λ, φ) {
	    return [ λ > π ? λ - τ : λ < -π ? λ + τ : λ, φ ];
	  }
	  d3_geo_identityRotation.invert = d3_geo_equirectangular;
	  function d3_geo_rotation(δλ, δφ, δγ) {
	    return δλ ? δφ || δγ ? d3_geo_compose(d3_geo_rotationλ(δλ), d3_geo_rotationφγ(δφ, δγ)) : d3_geo_rotationλ(δλ) : δφ || δγ ? d3_geo_rotationφγ(δφ, δγ) : d3_geo_identityRotation;
	  }
	  function d3_geo_forwardRotationλ(δλ) {
	    return function(λ, φ) {
	      return λ += δλ, [ λ > π ? λ - τ : λ < -π ? λ + τ : λ, φ ];
	    };
	  }
	  function d3_geo_rotationλ(δλ) {
	    var rotation = d3_geo_forwardRotationλ(δλ);
	    rotation.invert = d3_geo_forwardRotationλ(-δλ);
	    return rotation;
	  }
	  function d3_geo_rotationφγ(δφ, δγ) {
	    var cosδφ = Math.cos(δφ), sinδφ = Math.sin(δφ), cosδγ = Math.cos(δγ), sinδγ = Math.sin(δγ);
	    function rotation(λ, φ) {
	      var cosφ = Math.cos(φ), x = Math.cos(λ) * cosφ, y = Math.sin(λ) * cosφ, z = Math.sin(φ), k = z * cosδφ + x * sinδφ;
	      return [ Math.atan2(y * cosδγ - k * sinδγ, x * cosδφ - z * sinδφ), d3_asin(k * cosδγ + y * sinδγ) ];
	    }
	    rotation.invert = function(λ, φ) {
	      var cosφ = Math.cos(φ), x = Math.cos(λ) * cosφ, y = Math.sin(λ) * cosφ, z = Math.sin(φ), k = z * cosδγ - y * sinδγ;
	      return [ Math.atan2(y * cosδγ + z * sinδγ, x * cosδφ + k * sinδφ), d3_asin(k * cosδφ - x * sinδφ) ];
	    };
	    return rotation;
	  }
	  d3.geo.circle = function() {
	    var origin = [ 0, 0 ], angle, precision = 6, interpolate;
	    function circle() {
	      var center = typeof origin === "function" ? origin.apply(this, arguments) : origin, rotate = d3_geo_rotation(-center[0] * d3_radians, -center[1] * d3_radians, 0).invert, ring = [];
	      interpolate(null, null, 1, {
	        point: function(x, y) {
	          ring.push(x = rotate(x, y));
	          x[0] *= d3_degrees, x[1] *= d3_degrees;
	        }
	      });
	      return {
	        type: "Polygon",
	        coordinates: [ ring ]
	      };
	    }
	    circle.origin = function(x) {
	      if (!arguments.length) return origin;
	      origin = x;
	      return circle;
	    };
	    circle.angle = function(x) {
	      if (!arguments.length) return angle;
	      interpolate = d3_geo_circleInterpolate((angle = +x) * d3_radians, precision * d3_radians);
	      return circle;
	    };
	    circle.precision = function(_) {
	      if (!arguments.length) return precision;
	      interpolate = d3_geo_circleInterpolate(angle * d3_radians, (precision = +_) * d3_radians);
	      return circle;
	    };
	    return circle.angle(90);
	  };
	  function d3_geo_circleInterpolate(radius, precision) {
	    var cr = Math.cos(radius), sr = Math.sin(radius);
	    return function(from, to, direction, listener) {
	      var step = direction * precision;
	      if (from != null) {
	        from = d3_geo_circleAngle(cr, from);
	        to = d3_geo_circleAngle(cr, to);
	        if (direction > 0 ? from < to : from > to) from += direction * τ;
	      } else {
	        from = radius + direction * τ;
	        to = radius - .5 * step;
	      }
	      for (var point, t = from; direction > 0 ? t > to : t < to; t -= step) {
	        listener.point((point = d3_geo_spherical([ cr, -sr * Math.cos(t), -sr * Math.sin(t) ]))[0], point[1]);
	      }
	    };
	  }
	  function d3_geo_circleAngle(cr, point) {
	    var a = d3_geo_cartesian(point);
	    a[0] -= cr;
	    d3_geo_cartesianNormalize(a);
	    var angle = d3_acos(-a[1]);
	    return ((-a[2] < 0 ? -angle : angle) + 2 * Math.PI - ε) % (2 * Math.PI);
	  }
	  d3.geo.distance = function(a, b) {
	    var Δλ = (b[0] - a[0]) * d3_radians, φ0 = a[1] * d3_radians, φ1 = b[1] * d3_radians, sinΔλ = Math.sin(Δλ), cosΔλ = Math.cos(Δλ), sinφ0 = Math.sin(φ0), cosφ0 = Math.cos(φ0), sinφ1 = Math.sin(φ1), cosφ1 = Math.cos(φ1), t;
	    return Math.atan2(Math.sqrt((t = cosφ1 * sinΔλ) * t + (t = cosφ0 * sinφ1 - sinφ0 * cosφ1 * cosΔλ) * t), sinφ0 * sinφ1 + cosφ0 * cosφ1 * cosΔλ);
	  };
	  d3.geo.graticule = function() {
	    var x1, x0, X1, X0, y1, y0, Y1, Y0, dx = 10, dy = dx, DX = 90, DY = 360, x, y, X, Y, precision = 2.5;
	    function graticule() {
	      return {
	        type: "MultiLineString",
	        coordinates: lines()
	      };
	    }
	    function lines() {
	      return d3.range(Math.ceil(X0 / DX) * DX, X1, DX).map(X).concat(d3.range(Math.ceil(Y0 / DY) * DY, Y1, DY).map(Y)).concat(d3.range(Math.ceil(x0 / dx) * dx, x1, dx).filter(function(x) {
	        return abs(x % DX) > ε;
	      }).map(x)).concat(d3.range(Math.ceil(y0 / dy) * dy, y1, dy).filter(function(y) {
	        return abs(y % DY) > ε;
	      }).map(y));
	    }
	    graticule.lines = function() {
	      return lines().map(function(coordinates) {
	        return {
	          type: "LineString",
	          coordinates: coordinates
	        };
	      });
	    };
	    graticule.outline = function() {
	      return {
	        type: "Polygon",
	        coordinates: [ X(X0).concat(Y(Y1).slice(1), X(X1).reverse().slice(1), Y(Y0).reverse().slice(1)) ]
	      };
	    };
	    graticule.extent = function(_) {
	      if (!arguments.length) return graticule.minorExtent();
	      return graticule.majorExtent(_).minorExtent(_);
	    };
	    graticule.majorExtent = function(_) {
	      if (!arguments.length) return [ [ X0, Y0 ], [ X1, Y1 ] ];
	      X0 = +_[0][0], X1 = +_[1][0];
	      Y0 = +_[0][1], Y1 = +_[1][1];
	      if (X0 > X1) _ = X0, X0 = X1, X1 = _;
	      if (Y0 > Y1) _ = Y0, Y0 = Y1, Y1 = _;
	      return graticule.precision(precision);
	    };
	    graticule.minorExtent = function(_) {
	      if (!arguments.length) return [ [ x0, y0 ], [ x1, y1 ] ];
	      x0 = +_[0][0], x1 = +_[1][0];
	      y0 = +_[0][1], y1 = +_[1][1];
	      if (x0 > x1) _ = x0, x0 = x1, x1 = _;
	      if (y0 > y1) _ = y0, y0 = y1, y1 = _;
	      return graticule.precision(precision);
	    };
	    graticule.step = function(_) {
	      if (!arguments.length) return graticule.minorStep();
	      return graticule.majorStep(_).minorStep(_);
	    };
	    graticule.majorStep = function(_) {
	      if (!arguments.length) return [ DX, DY ];
	      DX = +_[0], DY = +_[1];
	      return graticule;
	    };
	    graticule.minorStep = function(_) {
	      if (!arguments.length) return [ dx, dy ];
	      dx = +_[0], dy = +_[1];
	      return graticule;
	    };
	    graticule.precision = function(_) {
	      if (!arguments.length) return precision;
	      precision = +_;
	      x = d3_geo_graticuleX(y0, y1, 90);
	      y = d3_geo_graticuleY(x0, x1, precision);
	      X = d3_geo_graticuleX(Y0, Y1, 90);
	      Y = d3_geo_graticuleY(X0, X1, precision);
	      return graticule;
	    };
	    return graticule.majorExtent([ [ -180, -90 + ε ], [ 180, 90 - ε ] ]).minorExtent([ [ -180, -80 - ε ], [ 180, 80 + ε ] ]);
	  };
	  function d3_geo_graticuleX(y0, y1, dy) {
	    var y = d3.range(y0, y1 - ε, dy).concat(y1);
	    return function(x) {
	      return y.map(function(y) {
	        return [ x, y ];
	      });
	    };
	  }
	  function d3_geo_graticuleY(x0, x1, dx) {
	    var x = d3.range(x0, x1 - ε, dx).concat(x1);
	    return function(y) {
	      return x.map(function(x) {
	        return [ x, y ];
	      });
	    };
	  }
	  function d3_source(d) {
	    return d.source;
	  }
	  function d3_target(d) {
	    return d.target;
	  }
	  d3.geo.greatArc = function() {
	    var source = d3_source, source_, target = d3_target, target_;
	    function greatArc() {
	      return {
	        type: "LineString",
	        coordinates: [ source_ || source.apply(this, arguments), target_ || target.apply(this, arguments) ]
	      };
	    }
	    greatArc.distance = function() {
	      return d3.geo.distance(source_ || source.apply(this, arguments), target_ || target.apply(this, arguments));
	    };
	    greatArc.source = function(_) {
	      if (!arguments.length) return source;
	      source = _, source_ = typeof _ === "function" ? null : _;
	      return greatArc;
	    };
	    greatArc.target = function(_) {
	      if (!arguments.length) return target;
	      target = _, target_ = typeof _ === "function" ? null : _;
	      return greatArc;
	    };
	    greatArc.precision = function() {
	      return arguments.length ? greatArc : 0;
	    };
	    return greatArc;
	  };
	  d3.geo.interpolate = function(source, target) {
	    return d3_geo_interpolate(source[0] * d3_radians, source[1] * d3_radians, target[0] * d3_radians, target[1] * d3_radians);
	  };
	  function d3_geo_interpolate(x0, y0, x1, y1) {
	    var cy0 = Math.cos(y0), sy0 = Math.sin(y0), cy1 = Math.cos(y1), sy1 = Math.sin(y1), kx0 = cy0 * Math.cos(x0), ky0 = cy0 * Math.sin(x0), kx1 = cy1 * Math.cos(x1), ky1 = cy1 * Math.sin(x1), d = 2 * Math.asin(Math.sqrt(d3_haversin(y1 - y0) + cy0 * cy1 * d3_haversin(x1 - x0))), k = 1 / Math.sin(d);
	    var interpolate = d ? function(t) {
	      var B = Math.sin(t *= d) * k, A = Math.sin(d - t) * k, x = A * kx0 + B * kx1, y = A * ky0 + B * ky1, z = A * sy0 + B * sy1;
	      return [ Math.atan2(y, x) * d3_degrees, Math.atan2(z, Math.sqrt(x * x + y * y)) * d3_degrees ];
	    } : function() {
	      return [ x0 * d3_degrees, y0 * d3_degrees ];
	    };
	    interpolate.distance = d;
	    return interpolate;
	  }
	  d3.geo.length = function(object) {
	    d3_geo_lengthSum = 0;
	    d3.geo.stream(object, d3_geo_length);
	    return d3_geo_lengthSum;
	  };
	  var d3_geo_lengthSum;
	  var d3_geo_length = {
	    sphere: d3_noop,
	    point: d3_noop,
	    lineStart: d3_geo_lengthLineStart,
	    lineEnd: d3_noop,
	    polygonStart: d3_noop,
	    polygonEnd: d3_noop
	  };
	  function d3_geo_lengthLineStart() {
	    var λ0, sinφ0, cosφ0;
	    d3_geo_length.point = function(λ, φ) {
	      λ0 = λ * d3_radians, sinφ0 = Math.sin(φ *= d3_radians), cosφ0 = Math.cos(φ);
	      d3_geo_length.point = nextPoint;
	    };
	    d3_geo_length.lineEnd = function() {
	      d3_geo_length.point = d3_geo_length.lineEnd = d3_noop;
	    };
	    function nextPoint(λ, φ) {
	      var sinφ = Math.sin(φ *= d3_radians), cosφ = Math.cos(φ), t = abs((λ *= d3_radians) - λ0), cosΔλ = Math.cos(t);
	      d3_geo_lengthSum += Math.atan2(Math.sqrt((t = cosφ * Math.sin(t)) * t + (t = cosφ0 * sinφ - sinφ0 * cosφ * cosΔλ) * t), sinφ0 * sinφ + cosφ0 * cosφ * cosΔλ);
	      λ0 = λ, sinφ0 = sinφ, cosφ0 = cosφ;
	    }
	  }
	  function d3_geo_azimuthal(scale, angle) {
	    function azimuthal(λ, φ) {
	      var cosλ = Math.cos(λ), cosφ = Math.cos(φ), k = scale(cosλ * cosφ);
	      return [ k * cosφ * Math.sin(λ), k * Math.sin(φ) ];
	    }
	    azimuthal.invert = function(x, y) {
	      var ρ = Math.sqrt(x * x + y * y), c = angle(ρ), sinc = Math.sin(c), cosc = Math.cos(c);
	      return [ Math.atan2(x * sinc, ρ * cosc), Math.asin(ρ && y * sinc / ρ) ];
	    };
	    return azimuthal;
	  }
	  var d3_geo_azimuthalEqualArea = d3_geo_azimuthal(function(cosλcosφ) {
	    return Math.sqrt(2 / (1 + cosλcosφ));
	  }, function(ρ) {
	    return 2 * Math.asin(ρ / 2);
	  });
	  (d3.geo.azimuthalEqualArea = function() {
	    return d3_geo_projection(d3_geo_azimuthalEqualArea);
	  }).raw = d3_geo_azimuthalEqualArea;
	  var d3_geo_azimuthalEquidistant = d3_geo_azimuthal(function(cosλcosφ) {
	    var c = Math.acos(cosλcosφ);
	    return c && c / Math.sin(c);
	  }, d3_identity);
	  (d3.geo.azimuthalEquidistant = function() {
	    return d3_geo_projection(d3_geo_azimuthalEquidistant);
	  }).raw = d3_geo_azimuthalEquidistant;
	  function d3_geo_conicConformal(φ0, φ1) {
	    var cosφ0 = Math.cos(φ0), t = function(φ) {
	      return Math.tan(π / 4 + φ / 2);
	    }, n = φ0 === φ1 ? Math.sin(φ0) : Math.log(cosφ0 / Math.cos(φ1)) / Math.log(t(φ1) / t(φ0)), F = cosφ0 * Math.pow(t(φ0), n) / n;
	    if (!n) return d3_geo_mercator;
	    function forward(λ, φ) {
	      if (F > 0) {
	        if (φ < -halfπ + ε) φ = -halfπ + ε;
	      } else {
	        if (φ > halfπ - ε) φ = halfπ - ε;
	      }
	      var ρ = F / Math.pow(t(φ), n);
	      return [ ρ * Math.sin(n * λ), F - ρ * Math.cos(n * λ) ];
	    }
	    forward.invert = function(x, y) {
	      var ρ0_y = F - y, ρ = d3_sgn(n) * Math.sqrt(x * x + ρ0_y * ρ0_y);
	      return [ Math.atan2(x, ρ0_y) / n, 2 * Math.atan(Math.pow(F / ρ, 1 / n)) - halfπ ];
	    };
	    return forward;
	  }
	  (d3.geo.conicConformal = function() {
	    return d3_geo_conic(d3_geo_conicConformal);
	  }).raw = d3_geo_conicConformal;
	  function d3_geo_conicEquidistant(φ0, φ1) {
	    var cosφ0 = Math.cos(φ0), n = φ0 === φ1 ? Math.sin(φ0) : (cosφ0 - Math.cos(φ1)) / (φ1 - φ0), G = cosφ0 / n + φ0;
	    if (abs(n) < ε) return d3_geo_equirectangular;
	    function forward(λ, φ) {
	      var ρ = G - φ;
	      return [ ρ * Math.sin(n * λ), G - ρ * Math.cos(n * λ) ];
	    }
	    forward.invert = function(x, y) {
	      var ρ0_y = G - y;
	      return [ Math.atan2(x, ρ0_y) / n, G - d3_sgn(n) * Math.sqrt(x * x + ρ0_y * ρ0_y) ];
	    };
	    return forward;
	  }
	  (d3.geo.conicEquidistant = function() {
	    return d3_geo_conic(d3_geo_conicEquidistant);
	  }).raw = d3_geo_conicEquidistant;
	  var d3_geo_gnomonic = d3_geo_azimuthal(function(cosλcosφ) {
	    return 1 / cosλcosφ;
	  }, Math.atan);
	  (d3.geo.gnomonic = function() {
	    return d3_geo_projection(d3_geo_gnomonic);
	  }).raw = d3_geo_gnomonic;
	  function d3_geo_mercator(λ, φ) {
	    return [ λ, Math.log(Math.tan(π / 4 + φ / 2)) ];
	  }
	  d3_geo_mercator.invert = function(x, y) {
	    return [ x, 2 * Math.atan(Math.exp(y)) - halfπ ];
	  };
	  function d3_geo_mercatorProjection(project) {
	    var m = d3_geo_projection(project), scale = m.scale, translate = m.translate, clipExtent = m.clipExtent, clipAuto;
	    m.scale = function() {
	      var v = scale.apply(m, arguments);
	      return v === m ? clipAuto ? m.clipExtent(null) : m : v;
	    };
	    m.translate = function() {
	      var v = translate.apply(m, arguments);
	      return v === m ? clipAuto ? m.clipExtent(null) : m : v;
	    };
	    m.clipExtent = function(_) {
	      var v = clipExtent.apply(m, arguments);
	      if (v === m) {
	        if (clipAuto = _ == null) {
	          var k = π * scale(), t = translate();
	          clipExtent([ [ t[0] - k, t[1] - k ], [ t[0] + k, t[1] + k ] ]);
	        }
	      } else if (clipAuto) {
	        v = null;
	      }
	      return v;
	    };
	    return m.clipExtent(null);
	  }
	  (d3.geo.mercator = function() {
	    return d3_geo_mercatorProjection(d3_geo_mercator);
	  }).raw = d3_geo_mercator;
	  var d3_geo_orthographic = d3_geo_azimuthal(function() {
	    return 1;
	  }, Math.asin);
	  (d3.geo.orthographic = function() {
	    return d3_geo_projection(d3_geo_orthographic);
	  }).raw = d3_geo_orthographic;
	  var d3_geo_stereographic = d3_geo_azimuthal(function(cosλcosφ) {
	    return 1 / (1 + cosλcosφ);
	  }, function(ρ) {
	    return 2 * Math.atan(ρ);
	  });
	  (d3.geo.stereographic = function() {
	    return d3_geo_projection(d3_geo_stereographic);
	  }).raw = d3_geo_stereographic;
	  function d3_geo_transverseMercator(λ, φ) {
	    return [ Math.log(Math.tan(π / 4 + φ / 2)), -λ ];
	  }
	  d3_geo_transverseMercator.invert = function(x, y) {
	    return [ -y, 2 * Math.atan(Math.exp(x)) - halfπ ];
	  };
	  (d3.geo.transverseMercator = function() {
	    var projection = d3_geo_mercatorProjection(d3_geo_transverseMercator), center = projection.center, rotate = projection.rotate;
	    projection.center = function(_) {
	      return _ ? center([ -_[1], _[0] ]) : (_ = center(), [ _[1], -_[0] ]);
	    };
	    projection.rotate = function(_) {
	      return _ ? rotate([ _[0], _[1], _.length > 2 ? _[2] + 90 : 90 ]) : (_ = rotate(), 
	      [ _[0], _[1], _[2] - 90 ]);
	    };
	    return rotate([ 0, 0, 90 ]);
	  }).raw = d3_geo_transverseMercator;
	  d3.geom = {};
	  function d3_geom_pointX(d) {
	    return d[0];
	  }
	  function d3_geom_pointY(d) {
	    return d[1];
	  }
	  d3.geom.hull = function(vertices) {
	    var x = d3_geom_pointX, y = d3_geom_pointY;
	    if (arguments.length) return hull(vertices);
	    function hull(data) {
	      if (data.length < 3) return [];
	      var fx = d3_functor(x), fy = d3_functor(y), i, n = data.length, points = [], flippedPoints = [];
	      for (i = 0; i < n; i++) {
	        points.push([ +fx.call(this, data[i], i), +fy.call(this, data[i], i), i ]);
	      }
	      points.sort(d3_geom_hullOrder);
	      for (i = 0; i < n; i++) flippedPoints.push([ points[i][0], -points[i][1] ]);
	      var upper = d3_geom_hullUpper(points), lower = d3_geom_hullUpper(flippedPoints);
	      var skipLeft = lower[0] === upper[0], skipRight = lower[lower.length - 1] === upper[upper.length - 1], polygon = [];
	      for (i = upper.length - 1; i >= 0; --i) polygon.push(data[points[upper[i]][2]]);
	      for (i = +skipLeft; i < lower.length - skipRight; ++i) polygon.push(data[points[lower[i]][2]]);
	      return polygon;
	    }
	    hull.x = function(_) {
	      return arguments.length ? (x = _, hull) : x;
	    };
	    hull.y = function(_) {
	      return arguments.length ? (y = _, hull) : y;
	    };
	    return hull;
	  };
	  function d3_geom_hullUpper(points) {
	    var n = points.length, hull = [ 0, 1 ], hs = 2;
	    for (var i = 2; i < n; i++) {
	      while (hs > 1 && d3_cross2d(points[hull[hs - 2]], points[hull[hs - 1]], points[i]) <= 0) --hs;
	      hull[hs++] = i;
	    }
	    return hull.slice(0, hs);
	  }
	  function d3_geom_hullOrder(a, b) {
	    return a[0] - b[0] || a[1] - b[1];
	  }
	  d3.geom.polygon = function(coordinates) {
	    d3_subclass(coordinates, d3_geom_polygonPrototype);
	    return coordinates;
	  };
	  var d3_geom_polygonPrototype = d3.geom.polygon.prototype = [];
	  d3_geom_polygonPrototype.area = function() {
	    var i = -1, n = this.length, a, b = this[n - 1], area = 0;
	    while (++i < n) {
	      a = b;
	      b = this[i];
	      area += a[1] * b[0] - a[0] * b[1];
	    }
	    return area * .5;
	  };
	  d3_geom_polygonPrototype.centroid = function(k) {
	    var i = -1, n = this.length, x = 0, y = 0, a, b = this[n - 1], c;
	    if (!arguments.length) k = -1 / (6 * this.area());
	    while (++i < n) {
	      a = b;
	      b = this[i];
	      c = a[0] * b[1] - b[0] * a[1];
	      x += (a[0] + b[0]) * c;
	      y += (a[1] + b[1]) * c;
	    }
	    return [ x * k, y * k ];
	  };
	  d3_geom_polygonPrototype.clip = function(subject) {
	    var input, closed = d3_geom_polygonClosed(subject), i = -1, n = this.length - d3_geom_polygonClosed(this), j, m, a = this[n - 1], b, c, d;
	    while (++i < n) {
	      input = subject.slice();
	      subject.length = 0;
	      b = this[i];
	      c = input[(m = input.length - closed) - 1];
	      j = -1;
	      while (++j < m) {
	        d = input[j];
	        if (d3_geom_polygonInside(d, a, b)) {
	          if (!d3_geom_polygonInside(c, a, b)) {
	            subject.push(d3_geom_polygonIntersect(c, d, a, b));
	          }
	          subject.push(d);
	        } else if (d3_geom_polygonInside(c, a, b)) {
	          subject.push(d3_geom_polygonIntersect(c, d, a, b));
	        }
	        c = d;
	      }
	      if (closed) subject.push(subject[0]);
	      a = b;
	    }
	    return subject;
	  };
	  function d3_geom_polygonInside(p, a, b) {
	    return (b[0] - a[0]) * (p[1] - a[1]) < (b[1] - a[1]) * (p[0] - a[0]);
	  }
	  function d3_geom_polygonIntersect(c, d, a, b) {
	    var x1 = c[0], x3 = a[0], x21 = d[0] - x1, x43 = b[0] - x3, y1 = c[1], y3 = a[1], y21 = d[1] - y1, y43 = b[1] - y3, ua = (x43 * (y1 - y3) - y43 * (x1 - x3)) / (y43 * x21 - x43 * y21);
	    return [ x1 + ua * x21, y1 + ua * y21 ];
	  }
	  function d3_geom_polygonClosed(coordinates) {
	    var a = coordinates[0], b = coordinates[coordinates.length - 1];
	    return !(a[0] - b[0] || a[1] - b[1]);
	  }
	  var d3_geom_voronoiEdges, d3_geom_voronoiCells, d3_geom_voronoiBeaches, d3_geom_voronoiBeachPool = [], d3_geom_voronoiFirstCircle, d3_geom_voronoiCircles, d3_geom_voronoiCirclePool = [];
	  function d3_geom_voronoiBeach() {
	    d3_geom_voronoiRedBlackNode(this);
	    this.edge = this.site = this.circle = null;
	  }
	  function d3_geom_voronoiCreateBeach(site) {
	    var beach = d3_geom_voronoiBeachPool.pop() || new d3_geom_voronoiBeach();
	    beach.site = site;
	    return beach;
	  }
	  function d3_geom_voronoiDetachBeach(beach) {
	    d3_geom_voronoiDetachCircle(beach);
	    d3_geom_voronoiBeaches.remove(beach);
	    d3_geom_voronoiBeachPool.push(beach);
	    d3_geom_voronoiRedBlackNode(beach);
	  }
	  function d3_geom_voronoiRemoveBeach(beach) {
	    var circle = beach.circle, x = circle.x, y = circle.cy, vertex = {
	      x: x,
	      y: y
	    }, previous = beach.P, next = beach.N, disappearing = [ beach ];
	    d3_geom_voronoiDetachBeach(beach);
	    var lArc = previous;
	    while (lArc.circle && abs(x - lArc.circle.x) < ε && abs(y - lArc.circle.cy) < ε) {
	      previous = lArc.P;
	      disappearing.unshift(lArc);
	      d3_geom_voronoiDetachBeach(lArc);
	      lArc = previous;
	    }
	    disappearing.unshift(lArc);
	    d3_geom_voronoiDetachCircle(lArc);
	    var rArc = next;
	    while (rArc.circle && abs(x - rArc.circle.x) < ε && abs(y - rArc.circle.cy) < ε) {
	      next = rArc.N;
	      disappearing.push(rArc);
	      d3_geom_voronoiDetachBeach(rArc);
	      rArc = next;
	    }
	    disappearing.push(rArc);
	    d3_geom_voronoiDetachCircle(rArc);
	    var nArcs = disappearing.length, iArc;
	    for (iArc = 1; iArc < nArcs; ++iArc) {
	      rArc = disappearing[iArc];
	      lArc = disappearing[iArc - 1];
	      d3_geom_voronoiSetEdgeEnd(rArc.edge, lArc.site, rArc.site, vertex);
	    }
	    lArc = disappearing[0];
	    rArc = disappearing[nArcs - 1];
	    rArc.edge = d3_geom_voronoiCreateEdge(lArc.site, rArc.site, null, vertex);
	    d3_geom_voronoiAttachCircle(lArc);
	    d3_geom_voronoiAttachCircle(rArc);
	  }
	  function d3_geom_voronoiAddBeach(site) {
	    var x = site.x, directrix = site.y, lArc, rArc, dxl, dxr, node = d3_geom_voronoiBeaches._;
	    while (node) {
	      dxl = d3_geom_voronoiLeftBreakPoint(node, directrix) - x;
	      if (dxl > ε) node = node.L; else {
	        dxr = x - d3_geom_voronoiRightBreakPoint(node, directrix);
	        if (dxr > ε) {
	          if (!node.R) {
	            lArc = node;
	            break;
	          }
	          node = node.R;
	        } else {
	          if (dxl > -ε) {
	            lArc = node.P;
	            rArc = node;
	          } else if (dxr > -ε) {
	            lArc = node;
	            rArc = node.N;
	          } else {
	            lArc = rArc = node;
	          }
	          break;
	        }
	      }
	    }
	    var newArc = d3_geom_voronoiCreateBeach(site);
	    d3_geom_voronoiBeaches.insert(lArc, newArc);
	    if (!lArc && !rArc) return;
	    if (lArc === rArc) {
	      d3_geom_voronoiDetachCircle(lArc);
	      rArc = d3_geom_voronoiCreateBeach(lArc.site);
	      d3_geom_voronoiBeaches.insert(newArc, rArc);
	      newArc.edge = rArc.edge = d3_geom_voronoiCreateEdge(lArc.site, newArc.site);
	      d3_geom_voronoiAttachCircle(lArc);
	      d3_geom_voronoiAttachCircle(rArc);
	      return;
	    }
	    if (!rArc) {
	      newArc.edge = d3_geom_voronoiCreateEdge(lArc.site, newArc.site);
	      return;
	    }
	    d3_geom_voronoiDetachCircle(lArc);
	    d3_geom_voronoiDetachCircle(rArc);
	    var lSite = lArc.site, ax = lSite.x, ay = lSite.y, bx = site.x - ax, by = site.y - ay, rSite = rArc.site, cx = rSite.x - ax, cy = rSite.y - ay, d = 2 * (bx * cy - by * cx), hb = bx * bx + by * by, hc = cx * cx + cy * cy, vertex = {
	      x: (cy * hb - by * hc) / d + ax,
	      y: (bx * hc - cx * hb) / d + ay
	    };
	    d3_geom_voronoiSetEdgeEnd(rArc.edge, lSite, rSite, vertex);
	    newArc.edge = d3_geom_voronoiCreateEdge(lSite, site, null, vertex);
	    rArc.edge = d3_geom_voronoiCreateEdge(site, rSite, null, vertex);
	    d3_geom_voronoiAttachCircle(lArc);
	    d3_geom_voronoiAttachCircle(rArc);
	  }
	  function d3_geom_voronoiLeftBreakPoint(arc, directrix) {
	    var site = arc.site, rfocx = site.x, rfocy = site.y, pby2 = rfocy - directrix;
	    if (!pby2) return rfocx;
	    var lArc = arc.P;
	    if (!lArc) return -Infinity;
	    site = lArc.site;
	    var lfocx = site.x, lfocy = site.y, plby2 = lfocy - directrix;
	    if (!plby2) return lfocx;
	    var hl = lfocx - rfocx, aby2 = 1 / pby2 - 1 / plby2, b = hl / plby2;
	    if (aby2) return (-b + Math.sqrt(b * b - 2 * aby2 * (hl * hl / (-2 * plby2) - lfocy + plby2 / 2 + rfocy - pby2 / 2))) / aby2 + rfocx;
	    return (rfocx + lfocx) / 2;
	  }
	  function d3_geom_voronoiRightBreakPoint(arc, directrix) {
	    var rArc = arc.N;
	    if (rArc) return d3_geom_voronoiLeftBreakPoint(rArc, directrix);
	    var site = arc.site;
	    return site.y === directrix ? site.x : Infinity;
	  }
	  function d3_geom_voronoiCell(site) {
	    this.site = site;
	    this.edges = [];
	  }
	  d3_geom_voronoiCell.prototype.prepare = function() {
	    var halfEdges = this.edges, iHalfEdge = halfEdges.length, edge;
	    while (iHalfEdge--) {
	      edge = halfEdges[iHalfEdge].edge;
	      if (!edge.b || !edge.a) halfEdges.splice(iHalfEdge, 1);
	    }
	    halfEdges.sort(d3_geom_voronoiHalfEdgeOrder);
	    return halfEdges.length;
	  };
	  function d3_geom_voronoiCloseCells(extent) {
	    var x0 = extent[0][0], x1 = extent[1][0], y0 = extent[0][1], y1 = extent[1][1], x2, y2, x3, y3, cells = d3_geom_voronoiCells, iCell = cells.length, cell, iHalfEdge, halfEdges, nHalfEdges, start, end;
	    while (iCell--) {
	      cell = cells[iCell];
	      if (!cell || !cell.prepare()) continue;
	      halfEdges = cell.edges;
	      nHalfEdges = halfEdges.length;
	      iHalfEdge = 0;
	      while (iHalfEdge < nHalfEdges) {
	        end = halfEdges[iHalfEdge].end(), x3 = end.x, y3 = end.y;
	        start = halfEdges[++iHalfEdge % nHalfEdges].start(), x2 = start.x, y2 = start.y;
	        if (abs(x3 - x2) > ε || abs(y3 - y2) > ε) {
	          halfEdges.splice(iHalfEdge, 0, new d3_geom_voronoiHalfEdge(d3_geom_voronoiCreateBorderEdge(cell.site, end, abs(x3 - x0) < ε && y1 - y3 > ε ? {
	            x: x0,
	            y: abs(x2 - x0) < ε ? y2 : y1
	          } : abs(y3 - y1) < ε && x1 - x3 > ε ? {
	            x: abs(y2 - y1) < ε ? x2 : x1,
	            y: y1
	          } : abs(x3 - x1) < ε && y3 - y0 > ε ? {
	            x: x1,
	            y: abs(x2 - x1) < ε ? y2 : y0
	          } : abs(y3 - y0) < ε && x3 - x0 > ε ? {
	            x: abs(y2 - y0) < ε ? x2 : x0,
	            y: y0
	          } : null), cell.site, null));
	          ++nHalfEdges;
	        }
	      }
	    }
	  }
	  function d3_geom_voronoiHalfEdgeOrder(a, b) {
	    return b.angle - a.angle;
	  }
	  function d3_geom_voronoiCircle() {
	    d3_geom_voronoiRedBlackNode(this);
	    this.x = this.y = this.arc = this.site = this.cy = null;
	  }
	  function d3_geom_voronoiAttachCircle(arc) {
	    var lArc = arc.P, rArc = arc.N;
	    if (!lArc || !rArc) return;
	    var lSite = lArc.site, cSite = arc.site, rSite = rArc.site;
	    if (lSite === rSite) return;
	    var bx = cSite.x, by = cSite.y, ax = lSite.x - bx, ay = lSite.y - by, cx = rSite.x - bx, cy = rSite.y - by;
	    var d = 2 * (ax * cy - ay * cx);
	    if (d >= -ε2) return;
	    var ha = ax * ax + ay * ay, hc = cx * cx + cy * cy, x = (cy * ha - ay * hc) / d, y = (ax * hc - cx * ha) / d, cy = y + by;
	    var circle = d3_geom_voronoiCirclePool.pop() || new d3_geom_voronoiCircle();
	    circle.arc = arc;
	    circle.site = cSite;
	    circle.x = x + bx;
	    circle.y = cy + Math.sqrt(x * x + y * y);
	    circle.cy = cy;
	    arc.circle = circle;
	    var before = null, node = d3_geom_voronoiCircles._;
	    while (node) {
	      if (circle.y < node.y || circle.y === node.y && circle.x <= node.x) {
	        if (node.L) node = node.L; else {
	          before = node.P;
	          break;
	        }
	      } else {
	        if (node.R) node = node.R; else {
	          before = node;
	          break;
	        }
	      }
	    }
	    d3_geom_voronoiCircles.insert(before, circle);
	    if (!before) d3_geom_voronoiFirstCircle = circle;
	  }
	  function d3_geom_voronoiDetachCircle(arc) {
	    var circle = arc.circle;
	    if (circle) {
	      if (!circle.P) d3_geom_voronoiFirstCircle = circle.N;
	      d3_geom_voronoiCircles.remove(circle);
	      d3_geom_voronoiCirclePool.push(circle);
	      d3_geom_voronoiRedBlackNode(circle);
	      arc.circle = null;
	    }
	  }
	  function d3_geom_voronoiClipEdges(extent) {
	    var edges = d3_geom_voronoiEdges, clip = d3_geom_clipLine(extent[0][0], extent[0][1], extent[1][0], extent[1][1]), i = edges.length, e;
	    while (i--) {
	      e = edges[i];
	      if (!d3_geom_voronoiConnectEdge(e, extent) || !clip(e) || abs(e.a.x - e.b.x) < ε && abs(e.a.y - e.b.y) < ε) {
	        e.a = e.b = null;
	        edges.splice(i, 1);
	      }
	    }
	  }
	  function d3_geom_voronoiConnectEdge(edge, extent) {
	    var vb = edge.b;
	    if (vb) return true;
	    var va = edge.a, x0 = extent[0][0], x1 = extent[1][0], y0 = extent[0][1], y1 = extent[1][1], lSite = edge.l, rSite = edge.r, lx = lSite.x, ly = lSite.y, rx = rSite.x, ry = rSite.y, fx = (lx + rx) / 2, fy = (ly + ry) / 2, fm, fb;
	    if (ry === ly) {
	      if (fx < x0 || fx >= x1) return;
	      if (lx > rx) {
	        if (!va) va = {
	          x: fx,
	          y: y0
	        }; else if (va.y >= y1) return;
	        vb = {
	          x: fx,
	          y: y1
	        };
	      } else {
	        if (!va) va = {
	          x: fx,
	          y: y1
	        }; else if (va.y < y0) return;
	        vb = {
	          x: fx,
	          y: y0
	        };
	      }
	    } else {
	      fm = (lx - rx) / (ry - ly);
	      fb = fy - fm * fx;
	      if (fm < -1 || fm > 1) {
	        if (lx > rx) {
	          if (!va) va = {
	            x: (y0 - fb) / fm,
	            y: y0
	          }; else if (va.y >= y1) return;
	          vb = {
	            x: (y1 - fb) / fm,
	            y: y1
	          };
	        } else {
	          if (!va) va = {
	            x: (y1 - fb) / fm,
	            y: y1
	          }; else if (va.y < y0) return;
	          vb = {
	            x: (y0 - fb) / fm,
	            y: y0
	          };
	        }
	      } else {
	        if (ly < ry) {
	          if (!va) va = {
	            x: x0,
	            y: fm * x0 + fb
	          }; else if (va.x >= x1) return;
	          vb = {
	            x: x1,
	            y: fm * x1 + fb
	          };
	        } else {
	          if (!va) va = {
	            x: x1,
	            y: fm * x1 + fb
	          }; else if (va.x < x0) return;
	          vb = {
	            x: x0,
	            y: fm * x0 + fb
	          };
	        }
	      }
	    }
	    edge.a = va;
	    edge.b = vb;
	    return true;
	  }
	  function d3_geom_voronoiEdge(lSite, rSite) {
	    this.l = lSite;
	    this.r = rSite;
	    this.a = this.b = null;
	  }
	  function d3_geom_voronoiCreateEdge(lSite, rSite, va, vb) {
	    var edge = new d3_geom_voronoiEdge(lSite, rSite);
	    d3_geom_voronoiEdges.push(edge);
	    if (va) d3_geom_voronoiSetEdgeEnd(edge, lSite, rSite, va);
	    if (vb) d3_geom_voronoiSetEdgeEnd(edge, rSite, lSite, vb);
	    d3_geom_voronoiCells[lSite.i].edges.push(new d3_geom_voronoiHalfEdge(edge, lSite, rSite));
	    d3_geom_voronoiCells[rSite.i].edges.push(new d3_geom_voronoiHalfEdge(edge, rSite, lSite));
	    return edge;
	  }
	  function d3_geom_voronoiCreateBorderEdge(lSite, va, vb) {
	    var edge = new d3_geom_voronoiEdge(lSite, null);
	    edge.a = va;
	    edge.b = vb;
	    d3_geom_voronoiEdges.push(edge);
	    return edge;
	  }
	  function d3_geom_voronoiSetEdgeEnd(edge, lSite, rSite, vertex) {
	    if (!edge.a && !edge.b) {
	      edge.a = vertex;
	      edge.l = lSite;
	      edge.r = rSite;
	    } else if (edge.l === rSite) {
	      edge.b = vertex;
	    } else {
	      edge.a = vertex;
	    }
	  }
	  function d3_geom_voronoiHalfEdge(edge, lSite, rSite) {
	    var va = edge.a, vb = edge.b;
	    this.edge = edge;
	    this.site = lSite;
	    this.angle = rSite ? Math.atan2(rSite.y - lSite.y, rSite.x - lSite.x) : edge.l === lSite ? Math.atan2(vb.x - va.x, va.y - vb.y) : Math.atan2(va.x - vb.x, vb.y - va.y);
	  }
	  d3_geom_voronoiHalfEdge.prototype = {
	    start: function() {
	      return this.edge.l === this.site ? this.edge.a : this.edge.b;
	    },
	    end: function() {
	      return this.edge.l === this.site ? this.edge.b : this.edge.a;
	    }
	  };
	  function d3_geom_voronoiRedBlackTree() {
	    this._ = null;
	  }
	  function d3_geom_voronoiRedBlackNode(node) {
	    node.U = node.C = node.L = node.R = node.P = node.N = null;
	  }
	  d3_geom_voronoiRedBlackTree.prototype = {
	    insert: function(after, node) {
	      var parent, grandpa, uncle;
	      if (after) {
	        node.P = after;
	        node.N = after.N;
	        if (after.N) after.N.P = node;
	        after.N = node;
	        if (after.R) {
	          after = after.R;
	          while (after.L) after = after.L;
	          after.L = node;
	        } else {
	          after.R = node;
	        }
	        parent = after;
	      } else if (this._) {
	        after = d3_geom_voronoiRedBlackFirst(this._);
	        node.P = null;
	        node.N = after;
	        after.P = after.L = node;
	        parent = after;
	      } else {
	        node.P = node.N = null;
	        this._ = node;
	        parent = null;
	      }
	      node.L = node.R = null;
	      node.U = parent;
	      node.C = true;
	      after = node;
	      while (parent && parent.C) {
	        grandpa = parent.U;
	        if (parent === grandpa.L) {
	          uncle = grandpa.R;
	          if (uncle && uncle.C) {
	            parent.C = uncle.C = false;
	            grandpa.C = true;
	            after = grandpa;
	          } else {
	            if (after === parent.R) {
	              d3_geom_voronoiRedBlackRotateLeft(this, parent);
	              after = parent;
	              parent = after.U;
	            }
	            parent.C = false;
	            grandpa.C = true;
	            d3_geom_voronoiRedBlackRotateRight(this, grandpa);
	          }
	        } else {
	          uncle = grandpa.L;
	          if (uncle && uncle.C) {
	            parent.C = uncle.C = false;
	            grandpa.C = true;
	            after = grandpa;
	          } else {
	            if (after === parent.L) {
	              d3_geom_voronoiRedBlackRotateRight(this, parent);
	              after = parent;
	              parent = after.U;
	            }
	            parent.C = false;
	            grandpa.C = true;
	            d3_geom_voronoiRedBlackRotateLeft(this, grandpa);
	          }
	        }
	        parent = after.U;
	      }
	      this._.C = false;
	    },
	    remove: function(node) {
	      if (node.N) node.N.P = node.P;
	      if (node.P) node.P.N = node.N;
	      node.N = node.P = null;
	      var parent = node.U, sibling, left = node.L, right = node.R, next, red;
	      if (!left) next = right; else if (!right) next = left; else next = d3_geom_voronoiRedBlackFirst(right);
	      if (parent) {
	        if (parent.L === node) parent.L = next; else parent.R = next;
	      } else {
	        this._ = next;
	      }
	      if (left && right) {
	        red = next.C;
	        next.C = node.C;
	        next.L = left;
	        left.U = next;
	        if (next !== right) {
	          parent = next.U;
	          next.U = node.U;
	          node = next.R;
	          parent.L = node;
	          next.R = right;
	          right.U = next;
	        } else {
	          next.U = parent;
	          parent = next;
	          node = next.R;
	        }
	      } else {
	        red = node.C;
	        node = next;
	      }
	      if (node) node.U = parent;
	      if (red) return;
	      if (node && node.C) {
	        node.C = false;
	        return;
	      }
	      do {
	        if (node === this._) break;
	        if (node === parent.L) {
	          sibling = parent.R;
	          if (sibling.C) {
	            sibling.C = false;
	            parent.C = true;
	            d3_geom_voronoiRedBlackRotateLeft(this, parent);
	            sibling = parent.R;
	          }
	          if (sibling.L && sibling.L.C || sibling.R && sibling.R.C) {
	            if (!sibling.R || !sibling.R.C) {
	              sibling.L.C = false;
	              sibling.C = true;
	              d3_geom_voronoiRedBlackRotateRight(this, sibling);
	              sibling = parent.R;
	            }
	            sibling.C = parent.C;
	            parent.C = sibling.R.C = false;
	            d3_geom_voronoiRedBlackRotateLeft(this, parent);
	            node = this._;
	            break;
	          }
	        } else {
	          sibling = parent.L;
	          if (sibling.C) {
	            sibling.C = false;
	            parent.C = true;
	            d3_geom_voronoiRedBlackRotateRight(this, parent);
	            sibling = parent.L;
	          }
	          if (sibling.L && sibling.L.C || sibling.R && sibling.R.C) {
	            if (!sibling.L || !sibling.L.C) {
	              sibling.R.C = false;
	              sibling.C = true;
	              d3_geom_voronoiRedBlackRotateLeft(this, sibling);
	              sibling = parent.L;
	            }
	            sibling.C = parent.C;
	            parent.C = sibling.L.C = false;
	            d3_geom_voronoiRedBlackRotateRight(this, parent);
	            node = this._;
	            break;
	          }
	        }
	        sibling.C = true;
	        node = parent;
	        parent = parent.U;
	      } while (!node.C);
	      if (node) node.C = false;
	    }
	  };
	  function d3_geom_voronoiRedBlackRotateLeft(tree, node) {
	    var p = node, q = node.R, parent = p.U;
	    if (parent) {
	      if (parent.L === p) parent.L = q; else parent.R = q;
	    } else {
	      tree._ = q;
	    }
	    q.U = parent;
	    p.U = q;
	    p.R = q.L;
	    if (p.R) p.R.U = p;
	    q.L = p;
	  }
	  function d3_geom_voronoiRedBlackRotateRight(tree, node) {
	    var p = node, q = node.L, parent = p.U;
	    if (parent) {
	      if (parent.L === p) parent.L = q; else parent.R = q;
	    } else {
	      tree._ = q;
	    }
	    q.U = parent;
	    p.U = q;
	    p.L = q.R;
	    if (p.L) p.L.U = p;
	    q.R = p;
	  }
	  function d3_geom_voronoiRedBlackFirst(node) {
	    while (node.L) node = node.L;
	    return node;
	  }
	  function d3_geom_voronoi(sites, bbox) {
	    var site = sites.sort(d3_geom_voronoiVertexOrder).pop(), x0, y0, circle;
	    d3_geom_voronoiEdges = [];
	    d3_geom_voronoiCells = new Array(sites.length);
	    d3_geom_voronoiBeaches = new d3_geom_voronoiRedBlackTree();
	    d3_geom_voronoiCircles = new d3_geom_voronoiRedBlackTree();
	    while (true) {
	      circle = d3_geom_voronoiFirstCircle;
	      if (site && (!circle || site.y < circle.y || site.y === circle.y && site.x < circle.x)) {
	        if (site.x !== x0 || site.y !== y0) {
	          d3_geom_voronoiCells[site.i] = new d3_geom_voronoiCell(site);
	          d3_geom_voronoiAddBeach(site);
	          x0 = site.x, y0 = site.y;
	        }
	        site = sites.pop();
	      } else if (circle) {
	        d3_geom_voronoiRemoveBeach(circle.arc);
	      } else {
	        break;
	      }
	    }
	    if (bbox) d3_geom_voronoiClipEdges(bbox), d3_geom_voronoiCloseCells(bbox);
	    var diagram = {
	      cells: d3_geom_voronoiCells,
	      edges: d3_geom_voronoiEdges
	    };
	    d3_geom_voronoiBeaches = d3_geom_voronoiCircles = d3_geom_voronoiEdges = d3_geom_voronoiCells = null;
	    return diagram;
	  }
	  function d3_geom_voronoiVertexOrder(a, b) {
	    return b.y - a.y || b.x - a.x;
	  }
	  d3.geom.voronoi = function(points) {
	    var x = d3_geom_pointX, y = d3_geom_pointY, fx = x, fy = y, clipExtent = d3_geom_voronoiClipExtent;
	    if (points) return voronoi(points);
	    function voronoi(data) {
	      var polygons = new Array(data.length), x0 = clipExtent[0][0], y0 = clipExtent[0][1], x1 = clipExtent[1][0], y1 = clipExtent[1][1];
	      d3_geom_voronoi(sites(data), clipExtent).cells.forEach(function(cell, i) {
	        var edges = cell.edges, site = cell.site, polygon = polygons[i] = edges.length ? edges.map(function(e) {
	          var s = e.start();
	          return [ s.x, s.y ];
	        }) : site.x >= x0 && site.x <= x1 && site.y >= y0 && site.y <= y1 ? [ [ x0, y1 ], [ x1, y1 ], [ x1, y0 ], [ x0, y0 ] ] : [];
	        polygon.point = data[i];
	      });
	      return polygons;
	    }
	    function sites(data) {
	      return data.map(function(d, i) {
	        return {
	          x: Math.round(fx(d, i) / ε) * ε,
	          y: Math.round(fy(d, i) / ε) * ε,
	          i: i
	        };
	      });
	    }
	    voronoi.links = function(data) {
	      return d3_geom_voronoi(sites(data)).edges.filter(function(edge) {
	        return edge.l && edge.r;
	      }).map(function(edge) {
	        return {
	          source: data[edge.l.i],
	          target: data[edge.r.i]
	        };
	      });
	    };
	    voronoi.triangles = function(data) {
	      var triangles = [];
	      d3_geom_voronoi(sites(data)).cells.forEach(function(cell, i) {
	        var site = cell.site, edges = cell.edges.sort(d3_geom_voronoiHalfEdgeOrder), j = -1, m = edges.length, e0, s0, e1 = edges[m - 1].edge, s1 = e1.l === site ? e1.r : e1.l;
	        while (++j < m) {
	          e0 = e1;
	          s0 = s1;
	          e1 = edges[j].edge;
	          s1 = e1.l === site ? e1.r : e1.l;
	          if (i < s0.i && i < s1.i && d3_geom_voronoiTriangleArea(site, s0, s1) < 0) {
	            triangles.push([ data[i], data[s0.i], data[s1.i] ]);
	          }
	        }
	      });
	      return triangles;
	    };
	    voronoi.x = function(_) {
	      return arguments.length ? (fx = d3_functor(x = _), voronoi) : x;
	    };
	    voronoi.y = function(_) {
	      return arguments.length ? (fy = d3_functor(y = _), voronoi) : y;
	    };
	    voronoi.clipExtent = function(_) {
	      if (!arguments.length) return clipExtent === d3_geom_voronoiClipExtent ? null : clipExtent;
	      clipExtent = _ == null ? d3_geom_voronoiClipExtent : _;
	      return voronoi;
	    };
	    voronoi.size = function(_) {
	      if (!arguments.length) return clipExtent === d3_geom_voronoiClipExtent ? null : clipExtent && clipExtent[1];
	      return voronoi.clipExtent(_ && [ [ 0, 0 ], _ ]);
	    };
	    return voronoi;
	  };
	  var d3_geom_voronoiClipExtent = [ [ -1e6, -1e6 ], [ 1e6, 1e6 ] ];
	  function d3_geom_voronoiTriangleArea(a, b, c) {
	    return (a.x - c.x) * (b.y - a.y) - (a.x - b.x) * (c.y - a.y);
	  }
	  d3.geom.delaunay = function(vertices) {
	    return d3.geom.voronoi().triangles(vertices);
	  };
	  d3.geom.quadtree = function(points, x1, y1, x2, y2) {
	    var x = d3_geom_pointX, y = d3_geom_pointY, compat;
	    if (compat = arguments.length) {
	      x = d3_geom_quadtreeCompatX;
	      y = d3_geom_quadtreeCompatY;
	      if (compat === 3) {
	        y2 = y1;
	        x2 = x1;
	        y1 = x1 = 0;
	      }
	      return quadtree(points);
	    }
	    function quadtree(data) {
	      var d, fx = d3_functor(x), fy = d3_functor(y), xs, ys, i, n, x1_, y1_, x2_, y2_;
	      if (x1 != null) {
	        x1_ = x1, y1_ = y1, x2_ = x2, y2_ = y2;
	      } else {
	        x2_ = y2_ = -(x1_ = y1_ = Infinity);
	        xs = [], ys = [];
	        n = data.length;
	        if (compat) for (i = 0; i < n; ++i) {
	          d = data[i];
	          if (d.x < x1_) x1_ = d.x;
	          if (d.y < y1_) y1_ = d.y;
	          if (d.x > x2_) x2_ = d.x;
	          if (d.y > y2_) y2_ = d.y;
	          xs.push(d.x);
	          ys.push(d.y);
	        } else for (i = 0; i < n; ++i) {
	          var x_ = +fx(d = data[i], i), y_ = +fy(d, i);
	          if (x_ < x1_) x1_ = x_;
	          if (y_ < y1_) y1_ = y_;
	          if (x_ > x2_) x2_ = x_;
	          if (y_ > y2_) y2_ = y_;
	          xs.push(x_);
	          ys.push(y_);
	        }
	      }
	      var dx = x2_ - x1_, dy = y2_ - y1_;
	      if (dx > dy) y2_ = y1_ + dx; else x2_ = x1_ + dy;
	      function insert(n, d, x, y, x1, y1, x2, y2) {
	        if (isNaN(x) || isNaN(y)) return;
	        if (n.leaf) {
	          var nx = n.x, ny = n.y;
	          if (nx != null) {
	            if (abs(nx - x) + abs(ny - y) < .01) {
	              insertChild(n, d, x, y, x1, y1, x2, y2);
	            } else {
	              var nPoint = n.point;
	              n.x = n.y = n.point = null;
	              insertChild(n, nPoint, nx, ny, x1, y1, x2, y2);
	              insertChild(n, d, x, y, x1, y1, x2, y2);
	            }
	          } else {
	            n.x = x, n.y = y, n.point = d;
	          }
	        } else {
	          insertChild(n, d, x, y, x1, y1, x2, y2);
	        }
	      }
	      function insertChild(n, d, x, y, x1, y1, x2, y2) {
	        var xm = (x1 + x2) * .5, ym = (y1 + y2) * .5, right = x >= xm, below = y >= ym, i = below << 1 | right;
	        n.leaf = false;
	        n = n.nodes[i] || (n.nodes[i] = d3_geom_quadtreeNode());
	        if (right) x1 = xm; else x2 = xm;
	        if (below) y1 = ym; else y2 = ym;
	        insert(n, d, x, y, x1, y1, x2, y2);
	      }
	      var root = d3_geom_quadtreeNode();
	      root.add = function(d) {
	        insert(root, d, +fx(d, ++i), +fy(d, i), x1_, y1_, x2_, y2_);
	      };
	      root.visit = function(f) {
	        d3_geom_quadtreeVisit(f, root, x1_, y1_, x2_, y2_);
	      };
	      root.find = function(point) {
	        return d3_geom_quadtreeFind(root, point[0], point[1], x1_, y1_, x2_, y2_);
	      };
	      i = -1;
	      if (x1 == null) {
	        while (++i < n) {
	          insert(root, data[i], xs[i], ys[i], x1_, y1_, x2_, y2_);
	        }
	        --i;
	      } else data.forEach(root.add);
	      xs = ys = data = d = null;
	      return root;
	    }
	    quadtree.x = function(_) {
	      return arguments.length ? (x = _, quadtree) : x;
	    };
	    quadtree.y = function(_) {
	      return arguments.length ? (y = _, quadtree) : y;
	    };
	    quadtree.extent = function(_) {
	      if (!arguments.length) return x1 == null ? null : [ [ x1, y1 ], [ x2, y2 ] ];
	      if (_ == null) x1 = y1 = x2 = y2 = null; else x1 = +_[0][0], y1 = +_[0][1], x2 = +_[1][0], 
	      y2 = +_[1][1];
	      return quadtree;
	    };
	    quadtree.size = function(_) {
	      if (!arguments.length) return x1 == null ? null : [ x2 - x1, y2 - y1 ];
	      if (_ == null) x1 = y1 = x2 = y2 = null; else x1 = y1 = 0, x2 = +_[0], y2 = +_[1];
	      return quadtree;
	    };
	    return quadtree;
	  };
	  function d3_geom_quadtreeCompatX(d) {
	    return d.x;
	  }
	  function d3_geom_quadtreeCompatY(d) {
	    return d.y;
	  }
	  function d3_geom_quadtreeNode() {
	    return {
	      leaf: true,
	      nodes: [],
	      point: null,
	      x: null,
	      y: null
	    };
	  }
	  function d3_geom_quadtreeVisit(f, node, x1, y1, x2, y2) {
	    if (!f(node, x1, y1, x2, y2)) {
	      var sx = (x1 + x2) * .5, sy = (y1 + y2) * .5, children = node.nodes;
	      if (children[0]) d3_geom_quadtreeVisit(f, children[0], x1, y1, sx, sy);
	      if (children[1]) d3_geom_quadtreeVisit(f, children[1], sx, y1, x2, sy);
	      if (children[2]) d3_geom_quadtreeVisit(f, children[2], x1, sy, sx, y2);
	      if (children[3]) d3_geom_quadtreeVisit(f, children[3], sx, sy, x2, y2);
	    }
	  }
	  function d3_geom_quadtreeFind(root, x, y, x0, y0, x3, y3) {
	    var minDistance2 = Infinity, closestPoint;
	    (function find(node, x1, y1, x2, y2) {
	      if (x1 > x3 || y1 > y3 || x2 < x0 || y2 < y0) return;
	      if (point = node.point) {
	        var point, dx = x - node.x, dy = y - node.y, distance2 = dx * dx + dy * dy;
	        if (distance2 < minDistance2) {
	          var distance = Math.sqrt(minDistance2 = distance2);
	          x0 = x - distance, y0 = y - distance;
	          x3 = x + distance, y3 = y + distance;
	          closestPoint = point;
	        }
	      }
	      var children = node.nodes, xm = (x1 + x2) * .5, ym = (y1 + y2) * .5, right = x >= xm, below = y >= ym;
	      for (var i = below << 1 | right, j = i + 4; i < j; ++i) {
	        if (node = children[i & 3]) switch (i & 3) {
	         case 0:
	          find(node, x1, y1, xm, ym);
	          break;
	
	         case 1:
	          find(node, xm, y1, x2, ym);
	          break;
	
	         case 2:
	          find(node, x1, ym, xm, y2);
	          break;
	
	         case 3:
	          find(node, xm, ym, x2, y2);
	          break;
	        }
	      }
	    })(root, x0, y0, x3, y3);
	    return closestPoint;
	  }
	  d3.interpolateRgb = d3_interpolateRgb;
	  function d3_interpolateRgb(a, b) {
	    a = d3.rgb(a);
	    b = d3.rgb(b);
	    var ar = a.r, ag = a.g, ab = a.b, br = b.r - ar, bg = b.g - ag, bb = b.b - ab;
	    return function(t) {
	      return "#" + d3_rgb_hex(Math.round(ar + br * t)) + d3_rgb_hex(Math.round(ag + bg * t)) + d3_rgb_hex(Math.round(ab + bb * t));
	    };
	  }
	  d3.interpolateObject = d3_interpolateObject;
	  function d3_interpolateObject(a, b) {
	    var i = {}, c = {}, k;
	    for (k in a) {
	      if (k in b) {
	        i[k] = d3_interpolate(a[k], b[k]);
	      } else {
	        c[k] = a[k];
	      }
	    }
	    for (k in b) {
	      if (!(k in a)) {
	        c[k] = b[k];
	      }
	    }
	    return function(t) {
	      for (k in i) c[k] = i[k](t);
	      return c;
	    };
	  }
	  d3.interpolateNumber = d3_interpolateNumber;
	  function d3_interpolateNumber(a, b) {
	    a = +a, b = +b;
	    return function(t) {
	      return a * (1 - t) + b * t;
	    };
	  }
	  d3.interpolateString = d3_interpolateString;
	  function d3_interpolateString(a, b) {
	    var bi = d3_interpolate_numberA.lastIndex = d3_interpolate_numberB.lastIndex = 0, am, bm, bs, i = -1, s = [], q = [];
	    a = a + "", b = b + "";
	    while ((am = d3_interpolate_numberA.exec(a)) && (bm = d3_interpolate_numberB.exec(b))) {
	      if ((bs = bm.index) > bi) {
	        bs = b.slice(bi, bs);
	        if (s[i]) s[i] += bs; else s[++i] = bs;
	      }
	      if ((am = am[0]) === (bm = bm[0])) {
	        if (s[i]) s[i] += bm; else s[++i] = bm;
	      } else {
	        s[++i] = null;
	        q.push({
	          i: i,
	          x: d3_interpolateNumber(am, bm)
	        });
	      }
	      bi = d3_interpolate_numberB.lastIndex;
	    }
	    if (bi < b.length) {
	      bs = b.slice(bi);
	      if (s[i]) s[i] += bs; else s[++i] = bs;
	    }
	    return s.length < 2 ? q[0] ? (b = q[0].x, function(t) {
	      return b(t) + "";
	    }) : function() {
	      return b;
	    } : (b = q.length, function(t) {
	      for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);
	      return s.join("");
	    });
	  }
	  var d3_interpolate_numberA = /[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g, d3_interpolate_numberB = new RegExp(d3_interpolate_numberA.source, "g");
	  d3.interpolate = d3_interpolate;
	  function d3_interpolate(a, b) {
	    var i = d3.interpolators.length, f;
	    while (--i >= 0 && !(f = d3.interpolators[i](a, b))) ;
	    return f;
	  }
	  d3.interpolators = [ function(a, b) {
	    var t = typeof b;
	    return (t === "string" ? d3_rgb_names.has(b.toLowerCase()) || /^(#|rgb\(|hsl\()/i.test(b) ? d3_interpolateRgb : d3_interpolateString : b instanceof d3_color ? d3_interpolateRgb : Array.isArray(b) ? d3_interpolateArray : t === "object" && isNaN(b) ? d3_interpolateObject : d3_interpolateNumber)(a, b);
	  } ];
	  d3.interpolateArray = d3_interpolateArray;
	  function d3_interpolateArray(a, b) {
	    var x = [], c = [], na = a.length, nb = b.length, n0 = Math.min(a.length, b.length), i;
	    for (i = 0; i < n0; ++i) x.push(d3_interpolate(a[i], b[i]));
	    for (;i < na; ++i) c[i] = a[i];
	    for (;i < nb; ++i) c[i] = b[i];
	    return function(t) {
	      for (i = 0; i < n0; ++i) c[i] = x[i](t);
	      return c;
	    };
	  }
	  var d3_ease_default = function() {
	    return d3_identity;
	  };
	  var d3_ease = d3.map({
	    linear: d3_ease_default,
	    poly: d3_ease_poly,
	    quad: function() {
	      return d3_ease_quad;
	    },
	    cubic: function() {
	      return d3_ease_cubic;
	    },
	    sin: function() {
	      return d3_ease_sin;
	    },
	    exp: function() {
	      return d3_ease_exp;
	    },
	    circle: function() {
	      return d3_ease_circle;
	    },
	    elastic: d3_ease_elastic,
	    back: d3_ease_back,
	    bounce: function() {
	      return d3_ease_bounce;
	    }
	  });
	  var d3_ease_mode = d3.map({
	    "in": d3_identity,
	    out: d3_ease_reverse,
	    "in-out": d3_ease_reflect,
	    "out-in": function(f) {
	      return d3_ease_reflect(d3_ease_reverse(f));
	    }
	  });
	  d3.ease = function(name) {
	    var i = name.indexOf("-"), t = i >= 0 ? name.slice(0, i) : name, m = i >= 0 ? name.slice(i + 1) : "in";
	    t = d3_ease.get(t) || d3_ease_default;
	    m = d3_ease_mode.get(m) || d3_identity;
	    return d3_ease_clamp(m(t.apply(null, d3_arraySlice.call(arguments, 1))));
	  };
	  function d3_ease_clamp(f) {
	    return function(t) {
	      return t <= 0 ? 0 : t >= 1 ? 1 : f(t);
	    };
	  }
	  function d3_ease_reverse(f) {
	    return function(t) {
	      return 1 - f(1 - t);
	    };
	  }
	  function d3_ease_reflect(f) {
	    return function(t) {
	      return .5 * (t < .5 ? f(2 * t) : 2 - f(2 - 2 * t));
	    };
	  }
	  function d3_ease_quad(t) {
	    return t * t;
	  }
	  function d3_ease_cubic(t) {
	    return t * t * t;
	  }
	  function d3_ease_cubicInOut(t) {
	    if (t <= 0) return 0;
	    if (t >= 1) return 1;
	    var t2 = t * t, t3 = t2 * t;
	    return 4 * (t < .5 ? t3 : 3 * (t - t2) + t3 - .75);
	  }
	  function d3_ease_poly(e) {
	    return function(t) {
	      return Math.pow(t, e);
	    };
	  }
	  function d3_ease_sin(t) {
	    return 1 - Math.cos(t * halfπ);
	  }
	  function d3_ease_exp(t) {
	    return Math.pow(2, 10 * (t - 1));
	  }
	  function d3_ease_circle(t) {
	    return 1 - Math.sqrt(1 - t * t);
	  }
	  function d3_ease_elastic(a, p) {
	    var s;
	    if (arguments.length < 2) p = .45;
	    if (arguments.length) s = p / τ * Math.asin(1 / a); else a = 1, s = p / 4;
	    return function(t) {
	      return 1 + a * Math.pow(2, -10 * t) * Math.sin((t - s) * τ / p);
	    };
	  }
	  function d3_ease_back(s) {
	    if (!s) s = 1.70158;
	    return function(t) {
	      return t * t * ((s + 1) * t - s);
	    };
	  }
	  function d3_ease_bounce(t) {
	    return t < 1 / 2.75 ? 7.5625 * t * t : t < 2 / 2.75 ? 7.5625 * (t -= 1.5 / 2.75) * t + .75 : t < 2.5 / 2.75 ? 7.5625 * (t -= 2.25 / 2.75) * t + .9375 : 7.5625 * (t -= 2.625 / 2.75) * t + .984375;
	  }
	  d3.interpolateHcl = d3_interpolateHcl;
	  function d3_interpolateHcl(a, b) {
	    a = d3.hcl(a);
	    b = d3.hcl(b);
	    var ah = a.h, ac = a.c, al = a.l, bh = b.h - ah, bc = b.c - ac, bl = b.l - al;
	    if (isNaN(bc)) bc = 0, ac = isNaN(ac) ? b.c : ac;
	    if (isNaN(bh)) bh = 0, ah = isNaN(ah) ? b.h : ah; else if (bh > 180) bh -= 360; else if (bh < -180) bh += 360;
	    return function(t) {
	      return d3_hcl_lab(ah + bh * t, ac + bc * t, al + bl * t) + "";
	    };
	  }
	  d3.interpolateHsl = d3_interpolateHsl;
	  function d3_interpolateHsl(a, b) {
	    a = d3.hsl(a);
	    b = d3.hsl(b);
	    var ah = a.h, as = a.s, al = a.l, bh = b.h - ah, bs = b.s - as, bl = b.l - al;
	    if (isNaN(bs)) bs = 0, as = isNaN(as) ? b.s : as;
	    if (isNaN(bh)) bh = 0, ah = isNaN(ah) ? b.h : ah; else if (bh > 180) bh -= 360; else if (bh < -180) bh += 360;
	    return function(t) {
	      return d3_hsl_rgb(ah + bh * t, as + bs * t, al + bl * t) + "";
	    };
	  }
	  d3.interpolateLab = d3_interpolateLab;
	  function d3_interpolateLab(a, b) {
	    a = d3.lab(a);
	    b = d3.lab(b);
	    var al = a.l, aa = a.a, ab = a.b, bl = b.l - al, ba = b.a - aa, bb = b.b - ab;
	    return function(t) {
	      return d3_lab_rgb(al + bl * t, aa + ba * t, ab + bb * t) + "";
	    };
	  }
	  d3.interpolateRound = d3_interpolateRound;
	  function d3_interpolateRound(a, b) {
	    b -= a;
	    return function(t) {
	      return Math.round(a + b * t);
	    };
	  }
	  d3.transform = function(string) {
	    var g = d3_document.createElementNS(d3.ns.prefix.svg, "g");
	    return (d3.transform = function(string) {
	      if (string != null) {
	        g.setAttribute("transform", string);
	        var t = g.transform.baseVal.consolidate();
	      }
	      return new d3_transform(t ? t.matrix : d3_transformIdentity);
	    })(string);
	  };
	  function d3_transform(m) {
	    var r0 = [ m.a, m.b ], r1 = [ m.c, m.d ], kx = d3_transformNormalize(r0), kz = d3_transformDot(r0, r1), ky = d3_transformNormalize(d3_transformCombine(r1, r0, -kz)) || 0;
	    if (r0[0] * r1[1] < r1[0] * r0[1]) {
	      r0[0] *= -1;
	      r0[1] *= -1;
	      kx *= -1;
	      kz *= -1;
	    }
	    this.rotate = (kx ? Math.atan2(r0[1], r0[0]) : Math.atan2(-r1[0], r1[1])) * d3_degrees;
	    this.translate = [ m.e, m.f ];
	    this.scale = [ kx, ky ];
	    this.skew = ky ? Math.atan2(kz, ky) * d3_degrees : 0;
	  }
	  d3_transform.prototype.toString = function() {
	    return "translate(" + this.translate + ")rotate(" + this.rotate + ")skewX(" + this.skew + ")scale(" + this.scale + ")";
	  };
	  function d3_transformDot(a, b) {
	    return a[0] * b[0] + a[1] * b[1];
	  }
	  function d3_transformNormalize(a) {
	    var k = Math.sqrt(d3_transformDot(a, a));
	    if (k) {
	      a[0] /= k;
	      a[1] /= k;
	    }
	    return k;
	  }
	  function d3_transformCombine(a, b, k) {
	    a[0] += k * b[0];
	    a[1] += k * b[1];
	    return a;
	  }
	  var d3_transformIdentity = {
	    a: 1,
	    b: 0,
	    c: 0,
	    d: 1,
	    e: 0,
	    f: 0
	  };
	  d3.interpolateTransform = d3_interpolateTransform;
	  function d3_interpolateTransformPop(s) {
	    return s.length ? s.pop() + "," : "";
	  }
	  function d3_interpolateTranslate(ta, tb, s, q) {
	    if (ta[0] !== tb[0] || ta[1] !== tb[1]) {
	      var i = s.push("translate(", null, ",", null, ")");
	      q.push({
	        i: i - 4,
	        x: d3_interpolateNumber(ta[0], tb[0])
	      }, {
	        i: i - 2,
	        x: d3_interpolateNumber(ta[1], tb[1])
	      });
	    } else if (tb[0] || tb[1]) {
	      s.push("translate(" + tb + ")");
	    }
	  }
	  function d3_interpolateRotate(ra, rb, s, q) {
	    if (ra !== rb) {
	      if (ra - rb > 180) rb += 360; else if (rb - ra > 180) ra += 360;
	      q.push({
	        i: s.push(d3_interpolateTransformPop(s) + "rotate(", null, ")") - 2,
	        x: d3_interpolateNumber(ra, rb)
	      });
	    } else if (rb) {
	      s.push(d3_interpolateTransformPop(s) + "rotate(" + rb + ")");
	    }
	  }
	  function d3_interpolateSkew(wa, wb, s, q) {
	    if (wa !== wb) {
	      q.push({
	        i: s.push(d3_interpolateTransformPop(s) + "skewX(", null, ")") - 2,
	        x: d3_interpolateNumber(wa, wb)
	      });
	    } else if (wb) {
	      s.push(d3_interpolateTransformPop(s) + "skewX(" + wb + ")");
	    }
	  }
	  function d3_interpolateScale(ka, kb, s, q) {
	    if (ka[0] !== kb[0] || ka[1] !== kb[1]) {
	      var i = s.push(d3_interpolateTransformPop(s) + "scale(", null, ",", null, ")");
	      q.push({
	        i: i - 4,
	        x: d3_interpolateNumber(ka[0], kb[0])
	      }, {
	        i: i - 2,
	        x: d3_interpolateNumber(ka[1], kb[1])
	      });
	    } else if (kb[0] !== 1 || kb[1] !== 1) {
	      s.push(d3_interpolateTransformPop(s) + "scale(" + kb + ")");
	    }
	  }
	  function d3_interpolateTransform(a, b) {
	    var s = [], q = [];
	    a = d3.transform(a), b = d3.transform(b);
	    d3_interpolateTranslate(a.translate, b.translate, s, q);
	    d3_interpolateRotate(a.rotate, b.rotate, s, q);
	    d3_interpolateSkew(a.skew, b.skew, s, q);
	    d3_interpolateScale(a.scale, b.scale, s, q);
	    a = b = null;
	    return function(t) {
	      var i = -1, n = q.length, o;
	      while (++i < n) s[(o = q[i]).i] = o.x(t);
	      return s.join("");
	    };
	  }
	  function d3_uninterpolateNumber(a, b) {
	    b = (b -= a = +a) || 1 / b;
	    return function(x) {
	      return (x - a) / b;
	    };
	  }
	  function d3_uninterpolateClamp(a, b) {
	    b = (b -= a = +a) || 1 / b;
	    return function(x) {
	      return Math.max(0, Math.min(1, (x - a) / b));
	    };
	  }
	  d3.layout = {};
	  d3.layout.bundle = function() {
	    return function(links) {
	      var paths = [], i = -1, n = links.length;
	      while (++i < n) paths.push(d3_layout_bundlePath(links[i]));
	      return paths;
	    };
	  };
	  function d3_layout_bundlePath(link) {
	    var start = link.source, end = link.target, lca = d3_layout_bundleLeastCommonAncestor(start, end), points = [ start ];
	    while (start !== lca) {
	      start = start.parent;
	      points.push(start);
	    }
	    var k = points.length;
	    while (end !== lca) {
	      points.splice(k, 0, end);
	      end = end.parent;
	    }
	    return points;
	  }
	  function d3_layout_bundleAncestors(node) {
	    var ancestors = [], parent = node.parent;
	    while (parent != null) {
	      ancestors.push(node);
	      node = parent;
	      parent = parent.parent;
	    }
	    ancestors.push(node);
	    return ancestors;
	  }
	  function d3_layout_bundleLeastCommonAncestor(a, b) {
	    if (a === b) return a;
	    var aNodes = d3_layout_bundleAncestors(a), bNodes = d3_layout_bundleAncestors(b), aNode = aNodes.pop(), bNode = bNodes.pop(), sharedNode = null;
	    while (aNode === bNode) {
	      sharedNode = aNode;
	      aNode = aNodes.pop();
	      bNode = bNodes.pop();
	    }
	    return sharedNode;
	  }
	  d3.layout.chord = function() {
	    var chord = {}, chords, groups, matrix, n, padding = 0, sortGroups, sortSubgroups, sortChords;
	    function relayout() {
	      var subgroups = {}, groupSums = [], groupIndex = d3.range(n), subgroupIndex = [], k, x, x0, i, j;
	      chords = [];
	      groups = [];
	      k = 0, i = -1;
	      while (++i < n) {
	        x = 0, j = -1;
	        while (++j < n) {
	          x += matrix[i][j];
	        }
	        groupSums.push(x);
	        subgroupIndex.push(d3.range(n));
	        k += x;
	      }
	      if (sortGroups) {
	        groupIndex.sort(function(a, b) {
	          return sortGroups(groupSums[a], groupSums[b]);
	        });
	      }
	      if (sortSubgroups) {
	        subgroupIndex.forEach(function(d, i) {
	          d.sort(function(a, b) {
	            return sortSubgroups(matrix[i][a], matrix[i][b]);
	          });
	        });
	      }
	      k = (τ - padding * n) / k;
	      x = 0, i = -1;
	      while (++i < n) {
	        x0 = x, j = -1;
	        while (++j < n) {
	          var di = groupIndex[i], dj = subgroupIndex[di][j], v = matrix[di][dj], a0 = x, a1 = x += v * k;
	          subgroups[di + "-" + dj] = {
	            index: di,
	            subindex: dj,
	            startAngle: a0,
	            endAngle: a1,
	            value: v
	          };
	        }
	        groups[di] = {
	          index: di,
	          startAngle: x0,
	          endAngle: x,
	          value: groupSums[di]
	        };
	        x += padding;
	      }
	      i = -1;
	      while (++i < n) {
	        j = i - 1;
	        while (++j < n) {
	          var source = subgroups[i + "-" + j], target = subgroups[j + "-" + i];
	          if (source.value || target.value) {
	            chords.push(source.value < target.value ? {
	              source: target,
	              target: source
	            } : {
	              source: source,
	              target: target
	            });
	          }
	        }
	      }
	      if (sortChords) resort();
	    }
	    function resort() {
	      chords.sort(function(a, b) {
	        return sortChords((a.source.value + a.target.value) / 2, (b.source.value + b.target.value) / 2);
	      });
	    }
	    chord.matrix = function(x) {
	      if (!arguments.length) return matrix;
	      n = (matrix = x) && matrix.length;
	      chords = groups = null;
	      return chord;
	    };
	    chord.padding = function(x) {
	      if (!arguments.length) return padding;
	      padding = x;
	      chords = groups = null;
	      return chord;
	    };
	    chord.sortGroups = function(x) {
	      if (!arguments.length) return sortGroups;
	      sortGroups = x;
	      chords = groups = null;
	      return chord;
	    };
	    chord.sortSubgroups = function(x) {
	      if (!arguments.length) return sortSubgroups;
	      sortSubgroups = x;
	      chords = null;
	      return chord;
	    };
	    chord.sortChords = function(x) {
	      if (!arguments.length) return sortChords;
	      sortChords = x;
	      if (chords) resort();
	      return chord;
	    };
	    chord.chords = function() {
	      if (!chords) relayout();
	      return chords;
	    };
	    chord.groups = function() {
	      if (!groups) relayout();
	      return groups;
	    };
	    return chord;
	  };
	  d3.layout.force = function() {
	    var force = {}, event = d3.dispatch("start", "tick", "end"), timer, size = [ 1, 1 ], drag, alpha, friction = .9, linkDistance = d3_layout_forceLinkDistance, linkStrength = d3_layout_forceLinkStrength, charge = -30, chargeDistance2 = d3_layout_forceChargeDistance2, gravity = .1, theta2 = .64, nodes = [], links = [], distances, strengths, charges;
	    function repulse(node) {
	      return function(quad, x1, _, x2) {
	        if (quad.point !== node) {
	          var dx = quad.cx - node.x, dy = quad.cy - node.y, dw = x2 - x1, dn = dx * dx + dy * dy;
	          if (dw * dw / theta2 < dn) {
	            if (dn < chargeDistance2) {
	              var k = quad.charge / dn;
	              node.px -= dx * k;
	              node.py -= dy * k;
	            }
	            return true;
	          }
	          if (quad.point && dn && dn < chargeDistance2) {
	            var k = quad.pointCharge / dn;
	            node.px -= dx * k;
	            node.py -= dy * k;
	          }
	        }
	        return !quad.charge;
	      };
	    }
	    force.tick = function() {
	      if ((alpha *= .99) < .005) {
	        timer = null;
	        event.end({
	          type: "end",
	          alpha: alpha = 0
	        });
	        return true;
	      }
	      var n = nodes.length, m = links.length, q, i, o, s, t, l, k, x, y;
	      for (i = 0; i < m; ++i) {
	        o = links[i];
	        s = o.source;
	        t = o.target;
	        x = t.x - s.x;
	        y = t.y - s.y;
	        if (l = x * x + y * y) {
	          l = alpha * strengths[i] * ((l = Math.sqrt(l)) - distances[i]) / l;
	          x *= l;
	          y *= l;
	          t.x -= x * (k = s.weight + t.weight ? s.weight / (s.weight + t.weight) : .5);
	          t.y -= y * k;
	          s.x += x * (k = 1 - k);
	          s.y += y * k;
	        }
	      }
	      if (k = alpha * gravity) {
	        x = size[0] / 2;
	        y = size[1] / 2;
	        i = -1;
	        if (k) while (++i < n) {
	          o = nodes[i];
	          o.x += (x - o.x) * k;
	          o.y += (y - o.y) * k;
	        }
	      }
	      if (charge) {
	        d3_layout_forceAccumulate(q = d3.geom.quadtree(nodes), alpha, charges);
	        i = -1;
	        while (++i < n) {
	          if (!(o = nodes[i]).fixed) {
	            q.visit(repulse(o));
	          }
	        }
	      }
	      i = -1;
	      while (++i < n) {
	        o = nodes[i];
	        if (o.fixed) {
	          o.x = o.px;
	          o.y = o.py;
	        } else {
	          o.x -= (o.px - (o.px = o.x)) * friction;
	          o.y -= (o.py - (o.py = o.y)) * friction;
	        }
	      }
	      event.tick({
	        type: "tick",
	        alpha: alpha
	      });
	    };
	    force.nodes = function(x) {
	      if (!arguments.length) return nodes;
	      nodes = x;
	      return force;
	    };
	    force.links = function(x) {
	      if (!arguments.length) return links;
	      links = x;
	      return force;
	    };
	    force.size = function(x) {
	      if (!arguments.length) return size;
	      size = x;
	      return force;
	    };
	    force.linkDistance = function(x) {
	      if (!arguments.length) return linkDistance;
	      linkDistance = typeof x === "function" ? x : +x;
	      return force;
	    };
	    force.distance = force.linkDistance;
	    force.linkStrength = function(x) {
	      if (!arguments.length) return linkStrength;
	      linkStrength = typeof x === "function" ? x : +x;
	      return force;
	    };
	    force.friction = function(x) {
	      if (!arguments.length) return friction;
	      friction = +x;
	      return force;
	    };
	    force.charge = function(x) {
	      if (!arguments.length) return charge;
	      charge = typeof x === "function" ? x : +x;
	      return force;
	    };
	    force.chargeDistance = function(x) {
	      if (!arguments.length) return Math.sqrt(chargeDistance2);
	      chargeDistance2 = x * x;
	      return force;
	    };
	    force.gravity = function(x) {
	      if (!arguments.length) return gravity;
	      gravity = +x;
	      return force;
	    };
	    force.theta = function(x) {
	      if (!arguments.length) return Math.sqrt(theta2);
	      theta2 = x * x;
	      return force;
	    };
	    force.alpha = function(x) {
	      if (!arguments.length) return alpha;
	      x = +x;
	      if (alpha) {
	        if (x > 0) {
	          alpha = x;
	        } else {
	          timer.c = null, timer.t = NaN, timer = null;
	          event.end({
	            type: "end",
	            alpha: alpha = 0
	          });
	        }
	      } else if (x > 0) {
	        event.start({
	          type: "start",
	          alpha: alpha = x
	        });
	        timer = d3_timer(force.tick);
	      }
	      return force;
	    };
	    force.start = function() {
	      var i, n = nodes.length, m = links.length, w = size[0], h = size[1], neighbors, o;
	      for (i = 0; i < n; ++i) {
	        (o = nodes[i]).index = i;
	        o.weight = 0;
	      }
	      for (i = 0; i < m; ++i) {
	        o = links[i];
	        if (typeof o.source == "number") o.source = nodes[o.source];
	        if (typeof o.target == "number") o.target = nodes[o.target];
	        ++o.source.weight;
	        ++o.target.weight;
	      }
	      for (i = 0; i < n; ++i) {
	        o = nodes[i];
	        if (isNaN(o.x)) o.x = position("x", w);
	        if (isNaN(o.y)) o.y = position("y", h);
	        if (isNaN(o.px)) o.px = o.x;
	        if (isNaN(o.py)) o.py = o.y;
	      }
	      distances = [];
	      if (typeof linkDistance === "function") for (i = 0; i < m; ++i) distances[i] = +linkDistance.call(this, links[i], i); else for (i = 0; i < m; ++i) distances[i] = linkDistance;
	      strengths = [];
	      if (typeof linkStrength === "function") for (i = 0; i < m; ++i) strengths[i] = +linkStrength.call(this, links[i], i); else for (i = 0; i < m; ++i) strengths[i] = linkStrength;
	      charges = [];
	      if (typeof charge === "function") for (i = 0; i < n; ++i) charges[i] = +charge.call(this, nodes[i], i); else for (i = 0; i < n; ++i) charges[i] = charge;
	      function position(dimension, size) {
	        if (!neighbors) {
	          neighbors = new Array(n);
	          for (j = 0; j < n; ++j) {
	            neighbors[j] = [];
	          }
	          for (j = 0; j < m; ++j) {
	            var o = links[j];
	            neighbors[o.source.index].push(o.target);
	            neighbors[o.target.index].push(o.source);
	          }
	        }
	        var candidates = neighbors[i], j = -1, l = candidates.length, x;
	        while (++j < l) if (!isNaN(x = candidates[j][dimension])) return x;
	        return Math.random() * size;
	      }
	      return force.resume();
	    };
	    force.resume = function() {
	      return force.alpha(.1);
	    };
	    force.stop = function() {
	      return force.alpha(0);
	    };
	    force.drag = function() {
	      if (!drag) drag = d3.behavior.drag().origin(d3_identity).on("dragstart.force", d3_layout_forceDragstart).on("drag.force", dragmove).on("dragend.force", d3_layout_forceDragend);
	      if (!arguments.length) return drag;
	      this.on("mouseover.force", d3_layout_forceMouseover).on("mouseout.force", d3_layout_forceMouseout).call(drag);
	    };
	    function dragmove(d) {
	      d.px = d3.event.x, d.py = d3.event.y;
	      force.resume();
	    }
	    return d3.rebind(force, event, "on");
	  };
	  function d3_layout_forceDragstart(d) {
	    d.fixed |= 2;
	  }
	  function d3_layout_forceDragend(d) {
	    d.fixed &= ~6;
	  }
	  function d3_layout_forceMouseover(d) {
	    d.fixed |= 4;
	    d.px = d.x, d.py = d.y;
	  }
	  function d3_layout_forceMouseout(d) {
	    d.fixed &= ~4;
	  }
	  function d3_layout_forceAccumulate(quad, alpha, charges) {
	    var cx = 0, cy = 0;
	    quad.charge = 0;
	    if (!quad.leaf) {
	      var nodes = quad.nodes, n = nodes.length, i = -1, c;
	      while (++i < n) {
	        c = nodes[i];
	        if (c == null) continue;
	        d3_layout_forceAccumulate(c, alpha, charges);
	        quad.charge += c.charge;
	        cx += c.charge * c.cx;
	        cy += c.charge * c.cy;
	      }
	    }
	    if (quad.point) {
	      if (!quad.leaf) {
	        quad.point.x += Math.random() - .5;
	        quad.point.y += Math.random() - .5;
	      }
	      var k = alpha * charges[quad.point.index];
	      quad.charge += quad.pointCharge = k;
	      cx += k * quad.point.x;
	      cy += k * quad.point.y;
	    }
	    quad.cx = cx / quad.charge;
	    quad.cy = cy / quad.charge;
	  }
	  var d3_layout_forceLinkDistance = 20, d3_layout_forceLinkStrength = 1, d3_layout_forceChargeDistance2 = Infinity;
	  d3.layout.hierarchy = function() {
	    var sort = d3_layout_hierarchySort, children = d3_layout_hierarchyChildren, value = d3_layout_hierarchyValue;
	    function hierarchy(root) {
	      var stack = [ root ], nodes = [], node;
	      root.depth = 0;
	      while ((node = stack.pop()) != null) {
	        nodes.push(node);
	        if ((childs = children.call(hierarchy, node, node.depth)) && (n = childs.length)) {
	          var n, childs, child;
	          while (--n >= 0) {
	            stack.push(child = childs[n]);
	            child.parent = node;
	            child.depth = node.depth + 1;
	          }
	          if (value) node.value = 0;
	          node.children = childs;
	        } else {
	          if (value) node.value = +value.call(hierarchy, node, node.depth) || 0;
	          delete node.children;
	        }
	      }
	      d3_layout_hierarchyVisitAfter(root, function(node) {
	        var childs, parent;
	        if (sort && (childs = node.children)) childs.sort(sort);
	        if (value && (parent = node.parent)) parent.value += node.value;
	      });
	      return nodes;
	    }
	    hierarchy.sort = function(x) {
	      if (!arguments.length) return sort;
	      sort = x;
	      return hierarchy;
	    };
	    hierarchy.children = function(x) {
	      if (!arguments.length) return children;
	      children = x;
	      return hierarchy;
	    };
	    hierarchy.value = function(x) {
	      if (!arguments.length) return value;
	      value = x;
	      return hierarchy;
	    };
	    hierarchy.revalue = function(root) {
	      if (value) {
	        d3_layout_hierarchyVisitBefore(root, function(node) {
	          if (node.children) node.value = 0;
	        });
	        d3_layout_hierarchyVisitAfter(root, function(node) {
	          var parent;
	          if (!node.children) node.value = +value.call(hierarchy, node, node.depth) || 0;
	          if (parent = node.parent) parent.value += node.value;
	        });
	      }
	      return root;
	    };
	    return hierarchy;
	  };
	  function d3_layout_hierarchyRebind(object, hierarchy) {
	    d3.rebind(object, hierarchy, "sort", "children", "value");
	    object.nodes = object;
	    object.links = d3_layout_hierarchyLinks;
	    return object;
	  }
	  function d3_layout_hierarchyVisitBefore(node, callback) {
	    var nodes = [ node ];
	    while ((node = nodes.pop()) != null) {
	      callback(node);
	      if ((children = node.children) && (n = children.length)) {
	        var n, children;
	        while (--n >= 0) nodes.push(children[n]);
	      }
	    }
	  }
	  function d3_layout_hierarchyVisitAfter(node, callback) {
	    var nodes = [ node ], nodes2 = [];
	    while ((node = nodes.pop()) != null) {
	      nodes2.push(node);
	      if ((children = node.children) && (n = children.length)) {
	        var i = -1, n, children;
	        while (++i < n) nodes.push(children[i]);
	      }
	    }
	    while ((node = nodes2.pop()) != null) {
	      callback(node);
	    }
	  }
	  function d3_layout_hierarchyChildren(d) {
	    return d.children;
	  }
	  function d3_layout_hierarchyValue(d) {
	    return d.value;
	  }
	  function d3_layout_hierarchySort(a, b) {
	    return b.value - a.value;
	  }
	  function d3_layout_hierarchyLinks(nodes) {
	    return d3.merge(nodes.map(function(parent) {
	      return (parent.children || []).map(function(child) {
	        return {
	          source: parent,
	          target: child
	        };
	      });
	    }));
	  }
	  d3.layout.partition = function() {
	    var hierarchy = d3.layout.hierarchy(), size = [ 1, 1 ];
	    function position(node, x, dx, dy) {
	      var children = node.children;
	      node.x = x;
	      node.y = node.depth * dy;
	      node.dx = dx;
	      node.dy = dy;
	      if (children && (n = children.length)) {
	        var i = -1, n, c, d;
	        dx = node.value ? dx / node.value : 0;
	        while (++i < n) {
	          position(c = children[i], x, d = c.value * dx, dy);
	          x += d;
	        }
	      }
	    }
	    function depth(node) {
	      var children = node.children, d = 0;
	      if (children && (n = children.length)) {
	        var i = -1, n;
	        while (++i < n) d = Math.max(d, depth(children[i]));
	      }
	      return 1 + d;
	    }
	    function partition(d, i) {
	      var nodes = hierarchy.call(this, d, i);
	      position(nodes[0], 0, size[0], size[1] / depth(nodes[0]));
	      return nodes;
	    }
	    partition.size = function(x) {
	      if (!arguments.length) return size;
	      size = x;
	      return partition;
	    };
	    return d3_layout_hierarchyRebind(partition, hierarchy);
	  };
	  d3.layout.pie = function() {
	    var value = Number, sort = d3_layout_pieSortByValue, startAngle = 0, endAngle = τ, padAngle = 0;
	    function pie(data) {
	      var n = data.length, values = data.map(function(d, i) {
	        return +value.call(pie, d, i);
	      }), a = +(typeof startAngle === "function" ? startAngle.apply(this, arguments) : startAngle), da = (typeof endAngle === "function" ? endAngle.apply(this, arguments) : endAngle) - a, p = Math.min(Math.abs(da) / n, +(typeof padAngle === "function" ? padAngle.apply(this, arguments) : padAngle)), pa = p * (da < 0 ? -1 : 1), sum = d3.sum(values), k = sum ? (da - n * pa) / sum : 0, index = d3.range(n), arcs = [], v;
	      if (sort != null) index.sort(sort === d3_layout_pieSortByValue ? function(i, j) {
	        return values[j] - values[i];
	      } : function(i, j) {
	        return sort(data[i], data[j]);
	      });
	      index.forEach(function(i) {
	        arcs[i] = {
	          data: data[i],
	          value: v = values[i],
	          startAngle: a,
	          endAngle: a += v * k + pa,
	          padAngle: p
	        };
	      });
	      return arcs;
	    }
	    pie.value = function(_) {
	      if (!arguments.length) return value;
	      value = _;
	      return pie;
	    };
	    pie.sort = function(_) {
	      if (!arguments.length) return sort;
	      sort = _;
	      return pie;
	    };
	    pie.startAngle = function(_) {
	      if (!arguments.length) return startAngle;
	      startAngle = _;
	      return pie;
	    };
	    pie.endAngle = function(_) {
	      if (!arguments.length) return endAngle;
	      endAngle = _;
	      return pie;
	    };
	    pie.padAngle = function(_) {
	      if (!arguments.length) return padAngle;
	      padAngle = _;
	      return pie;
	    };
	    return pie;
	  };
	  var d3_layout_pieSortByValue = {};
	  d3.layout.stack = function() {
	    var values = d3_identity, order = d3_layout_stackOrderDefault, offset = d3_layout_stackOffsetZero, out = d3_layout_stackOut, x = d3_layout_stackX, y = d3_layout_stackY;
	    function stack(data, index) {
	      if (!(n = data.length)) return data;
	      var series = data.map(function(d, i) {
	        return values.call(stack, d, i);
	      });
	      var points = series.map(function(d) {
	        return d.map(function(v, i) {
	          return [ x.call(stack, v, i), y.call(stack, v, i) ];
	        });
	      });
	      var orders = order.call(stack, points, index);
	      series = d3.permute(series, orders);
	      points = d3.permute(points, orders);
	      var offsets = offset.call(stack, points, index);
	      var m = series[0].length, n, i, j, o;
	      for (j = 0; j < m; ++j) {
	        out.call(stack, series[0][j], o = offsets[j], points[0][j][1]);
	        for (i = 1; i < n; ++i) {
	          out.call(stack, series[i][j], o += points[i - 1][j][1], points[i][j][1]);
	        }
	      }
	      return data;
	    }
	    stack.values = function(x) {
	      if (!arguments.length) return values;
	      values = x;
	      return stack;
	    };
	    stack.order = function(x) {
	      if (!arguments.length) return order;
	      order = typeof x === "function" ? x : d3_layout_stackOrders.get(x) || d3_layout_stackOrderDefault;
	      return stack;
	    };
	    stack.offset = function(x) {
	      if (!arguments.length) return offset;
	      offset = typeof x === "function" ? x : d3_layout_stackOffsets.get(x) || d3_layout_stackOffsetZero;
	      return stack;
	    };
	    stack.x = function(z) {
	      if (!arguments.length) return x;
	      x = z;
	      return stack;
	    };
	    stack.y = function(z) {
	      if (!arguments.length) return y;
	      y = z;
	      return stack;
	    };
	    stack.out = function(z) {
	      if (!arguments.length) return out;
	      out = z;
	      return stack;
	    };
	    return stack;
	  };
	  function d3_layout_stackX(d) {
	    return d.x;
	  }
	  function d3_layout_stackY(d) {
	    return d.y;
	  }
	  function d3_layout_stackOut(d, y0, y) {
	    d.y0 = y0;
	    d.y = y;
	  }
	  var d3_layout_stackOrders = d3.map({
	    "inside-out": function(data) {
	      var n = data.length, i, j, max = data.map(d3_layout_stackMaxIndex), sums = data.map(d3_layout_stackReduceSum), index = d3.range(n).sort(function(a, b) {
	        return max[a] - max[b];
	      }), top = 0, bottom = 0, tops = [], bottoms = [];
	      for (i = 0; i < n; ++i) {
	        j = index[i];
	        if (top < bottom) {
	          top += sums[j];
	          tops.push(j);
	        } else {
	          bottom += sums[j];
	          bottoms.push(j);
	        }
	      }
	      return bottoms.reverse().concat(tops);
	    },
	    reverse: function(data) {
	      return d3.range(data.length).reverse();
	    },
	    "default": d3_layout_stackOrderDefault
	  });
	  var d3_layout_stackOffsets = d3.map({
	    silhouette: function(data) {
	      var n = data.length, m = data[0].length, sums = [], max = 0, i, j, o, y0 = [];
	      for (j = 0; j < m; ++j) {
	        for (i = 0, o = 0; i < n; i++) o += data[i][j][1];
	        if (o > max) max = o;
	        sums.push(o);
	      }
	      for (j = 0; j < m; ++j) {
	        y0[j] = (max - sums[j]) / 2;
	      }
	      return y0;
	    },
	    wiggle: function(data) {
	      var n = data.length, x = data[0], m = x.length, i, j, k, s1, s2, s3, dx, o, o0, y0 = [];
	      y0[0] = o = o0 = 0;
	      for (j = 1; j < m; ++j) {
	        for (i = 0, s1 = 0; i < n; ++i) s1 += data[i][j][1];
	        for (i = 0, s2 = 0, dx = x[j][0] - x[j - 1][0]; i < n; ++i) {
	          for (k = 0, s3 = (data[i][j][1] - data[i][j - 1][1]) / (2 * dx); k < i; ++k) {
	            s3 += (data[k][j][1] - data[k][j - 1][1]) / dx;
	          }
	          s2 += s3 * data[i][j][1];
	        }
	        y0[j] = o -= s1 ? s2 / s1 * dx : 0;
	        if (o < o0) o0 = o;
	      }
	      for (j = 0; j < m; ++j) y0[j] -= o0;
	      return y0;
	    },
	    expand: function(data) {
	      var n = data.length, m = data[0].length, k = 1 / n, i, j, o, y0 = [];
	      for (j = 0; j < m; ++j) {
	        for (i = 0, o = 0; i < n; i++) o += data[i][j][1];
	        if (o) for (i = 0; i < n; i++) data[i][j][1] /= o; else for (i = 0; i < n; i++) data[i][j][1] = k;
	      }
	      for (j = 0; j < m; ++j) y0[j] = 0;
	      return y0;
	    },
	    zero: d3_layout_stackOffsetZero
	  });
	  function d3_layout_stackOrderDefault(data) {
	    return d3.range(data.length);
	  }
	  function d3_layout_stackOffsetZero(data) {
	    var j = -1, m = data[0].length, y0 = [];
	    while (++j < m) y0[j] = 0;
	    return y0;
	  }
	  function d3_layout_stackMaxIndex(array) {
	    var i = 1, j = 0, v = array[0][1], k, n = array.length;
	    for (;i < n; ++i) {
	      if ((k = array[i][1]) > v) {
	        j = i;
	        v = k;
	      }
	    }
	    return j;
	  }
	  function d3_layout_stackReduceSum(d) {
	    return d.reduce(d3_layout_stackSum, 0);
	  }
	  function d3_layout_stackSum(p, d) {
	    return p + d[1];
	  }
	  d3.layout.histogram = function() {
	    var frequency = true, valuer = Number, ranger = d3_layout_histogramRange, binner = d3_layout_histogramBinSturges;
	    function histogram(data, i) {
	      var bins = [], values = data.map(valuer, this), range = ranger.call(this, values, i), thresholds = binner.call(this, range, values, i), bin, i = -1, n = values.length, m = thresholds.length - 1, k = frequency ? 1 : 1 / n, x;
	      while (++i < m) {
	        bin = bins[i] = [];
	        bin.dx = thresholds[i + 1] - (bin.x = thresholds[i]);
	        bin.y = 0;
	      }
	      if (m > 0) {
	        i = -1;
	        while (++i < n) {
	          x = values[i];
	          if (x >= range[0] && x <= range[1]) {
	            bin = bins[d3.bisect(thresholds, x, 1, m) - 1];
	            bin.y += k;
	            bin.push(data[i]);
	          }
	        }
	      }
	      return bins;
	    }
	    histogram.value = function(x) {
	      if (!arguments.length) return valuer;
	      valuer = x;
	      return histogram;
	    };
	    histogram.range = function(x) {
	      if (!arguments.length) return ranger;
	      ranger = d3_functor(x);
	      return histogram;
	    };
	    histogram.bins = function(x) {
	      if (!arguments.length) return binner;
	      binner = typeof x === "number" ? function(range) {
	        return d3_layout_histogramBinFixed(range, x);
	      } : d3_functor(x);
	      return histogram;
	    };
	    histogram.frequency = function(x) {
	      if (!arguments.length) return frequency;
	      frequency = !!x;
	      return histogram;
	    };
	    return histogram;
	  };
	  function d3_layout_histogramBinSturges(range, values) {
	    return d3_layout_histogramBinFixed(range, Math.ceil(Math.log(values.length) / Math.LN2 + 1));
	  }
	  function d3_layout_histogramBinFixed(range, n) {
	    var x = -1, b = +range[0], m = (range[1] - b) / n, f = [];
	    while (++x <= n) f[x] = m * x + b;
	    return f;
	  }
	  function d3_layout_histogramRange(values) {
	    return [ d3.min(values), d3.max(values) ];
	  }
	  d3.layout.pack = function() {
	    var hierarchy = d3.layout.hierarchy().sort(d3_layout_packSort), padding = 0, size = [ 1, 1 ], radius;
	    function pack(d, i) {
	      var nodes = hierarchy.call(this, d, i), root = nodes[0], w = size[0], h = size[1], r = radius == null ? Math.sqrt : typeof radius === "function" ? radius : function() {
	        return radius;
	      };
	      root.x = root.y = 0;
	      d3_layout_hierarchyVisitAfter(root, function(d) {
	        d.r = +r(d.value);
	      });
	      d3_layout_hierarchyVisitAfter(root, d3_layout_packSiblings);
	      if (padding) {
	        var dr = padding * (radius ? 1 : Math.max(2 * root.r / w, 2 * root.r / h)) / 2;
	        d3_layout_hierarchyVisitAfter(root, function(d) {
	          d.r += dr;
	        });
	        d3_layout_hierarchyVisitAfter(root, d3_layout_packSiblings);
	        d3_layout_hierarchyVisitAfter(root, function(d) {
	          d.r -= dr;
	        });
	      }
	      d3_layout_packTransform(root, w / 2, h / 2, radius ? 1 : 1 / Math.max(2 * root.r / w, 2 * root.r / h));
	      return nodes;
	    }
	    pack.size = function(_) {
	      if (!arguments.length) return size;
	      size = _;
	      return pack;
	    };
	    pack.radius = function(_) {
	      if (!arguments.length) return radius;
	      radius = _ == null || typeof _ === "function" ? _ : +_;
	      return pack;
	    };
	    pack.padding = function(_) {
	      if (!arguments.length) return padding;
	      padding = +_;
	      return pack;
	    };
	    return d3_layout_hierarchyRebind(pack, hierarchy);
	  };
	  function d3_layout_packSort(a, b) {
	    return a.value - b.value;
	  }
	  function d3_layout_packInsert(a, b) {
	    var c = a._pack_next;
	    a._pack_next = b;
	    b._pack_prev = a;
	    b._pack_next = c;
	    c._pack_prev = b;
	  }
	  function d3_layout_packSplice(a, b) {
	    a._pack_next = b;
	    b._pack_prev = a;
	  }
	  function d3_layout_packIntersects(a, b) {
	    var dx = b.x - a.x, dy = b.y - a.y, dr = a.r + b.r;
	    return .999 * dr * dr > dx * dx + dy * dy;
	  }
	  function d3_layout_packSiblings(node) {
	    if (!(nodes = node.children) || !(n = nodes.length)) return;
	    var nodes, xMin = Infinity, xMax = -Infinity, yMin = Infinity, yMax = -Infinity, a, b, c, i, j, k, n;
	    function bound(node) {
	      xMin = Math.min(node.x - node.r, xMin);
	      xMax = Math.max(node.x + node.r, xMax);
	      yMin = Math.min(node.y - node.r, yMin);
	      yMax = Math.max(node.y + node.r, yMax);
	    }
	    nodes.forEach(d3_layout_packLink);
	    a = nodes[0];
	    a.x = -a.r;
	    a.y = 0;
	    bound(a);
	    if (n > 1) {
	      b = nodes[1];
	      b.x = b.r;
	      b.y = 0;
	      bound(b);
	      if (n > 2) {
	        c = nodes[2];
	        d3_layout_packPlace(a, b, c);
	        bound(c);
	        d3_layout_packInsert(a, c);
	        a._pack_prev = c;
	        d3_layout_packInsert(c, b);
	        b = a._pack_next;
	        for (i = 3; i < n; i++) {
	          d3_layout_packPlace(a, b, c = nodes[i]);
	          var isect = 0, s1 = 1, s2 = 1;
	          for (j = b._pack_next; j !== b; j = j._pack_next, s1++) {
	            if (d3_layout_packIntersects(j, c)) {
	              isect = 1;
	              break;
	            }
	          }
	          if (isect == 1) {
	            for (k = a._pack_prev; k !== j._pack_prev; k = k._pack_prev, s2++) {
	              if (d3_layout_packIntersects(k, c)) {
	                break;
	              }
	            }
	          }
	          if (isect) {
	            if (s1 < s2 || s1 == s2 && b.r < a.r) d3_layout_packSplice(a, b = j); else d3_layout_packSplice(a = k, b);
	            i--;
	          } else {
	            d3_layout_packInsert(a, c);
	            b = c;
	            bound(c);
	          }
	        }
	      }
	    }
	    var cx = (xMin + xMax) / 2, cy = (yMin + yMax) / 2, cr = 0;
	    for (i = 0; i < n; i++) {
	      c = nodes[i];
	      c.x -= cx;
	      c.y -= cy;
	      cr = Math.max(cr, c.r + Math.sqrt(c.x * c.x + c.y * c.y));
	    }
	    node.r = cr;
	    nodes.forEach(d3_layout_packUnlink);
	  }
	  function d3_layout_packLink(node) {
	    node._pack_next = node._pack_prev = node;
	  }
	  function d3_layout_packUnlink(node) {
	    delete node._pack_next;
	    delete node._pack_prev;
	  }
	  function d3_layout_packTransform(node, x, y, k) {
	    var children = node.children;
	    node.x = x += k * node.x;
	    node.y = y += k * node.y;
	    node.r *= k;
	    if (children) {
	      var i = -1, n = children.length;
	      while (++i < n) d3_layout_packTransform(children[i], x, y, k);
	    }
	  }
	  function d3_layout_packPlace(a, b, c) {
	    var db = a.r + c.r, dx = b.x - a.x, dy = b.y - a.y;
	    if (db && (dx || dy)) {
	      var da = b.r + c.r, dc = dx * dx + dy * dy;
	      da *= da;
	      db *= db;
	      var x = .5 + (db - da) / (2 * dc), y = Math.sqrt(Math.max(0, 2 * da * (db + dc) - (db -= dc) * db - da * da)) / (2 * dc);
	      c.x = a.x + x * dx + y * dy;
	      c.y = a.y + x * dy - y * dx;
	    } else {
	      c.x = a.x + db;
	      c.y = a.y;
	    }
	  }
	  d3.layout.tree = function() {
	    var hierarchy = d3.layout.hierarchy().sort(null).value(null), separation = d3_layout_treeSeparation, size = [ 1, 1 ], nodeSize = null;
	    function tree(d, i) {
	      var nodes = hierarchy.call(this, d, i), root0 = nodes[0], root1 = wrapTree(root0);
	      d3_layout_hierarchyVisitAfter(root1, firstWalk), root1.parent.m = -root1.z;
	      d3_layout_hierarchyVisitBefore(root1, secondWalk);
	      if (nodeSize) d3_layout_hierarchyVisitBefore(root0, sizeNode); else {
	        var left = root0, right = root0, bottom = root0;
	        d3_layout_hierarchyVisitBefore(root0, function(node) {
	          if (node.x < left.x) left = node;
	          if (node.x > right.x) right = node;
	          if (node.depth > bottom.depth) bottom = node;
	        });
	        var tx = separation(left, right) / 2 - left.x, kx = size[0] / (right.x + separation(right, left) / 2 + tx), ky = size[1] / (bottom.depth || 1);
	        d3_layout_hierarchyVisitBefore(root0, function(node) {
	          node.x = (node.x + tx) * kx;
	          node.y = node.depth * ky;
	        });
	      }
	      return nodes;
	    }
	    function wrapTree(root0) {
	      var root1 = {
	        A: null,
	        children: [ root0 ]
	      }, queue = [ root1 ], node1;
	      while ((node1 = queue.pop()) != null) {
	        for (var children = node1.children, child, i = 0, n = children.length; i < n; ++i) {
	          queue.push((children[i] = child = {
	            _: children[i],
	            parent: node1,
	            children: (child = children[i].children) && child.slice() || [],
	            A: null,
	            a: null,
	            z: 0,
	            m: 0,
	            c: 0,
	            s: 0,
	            t: null,
	            i: i
	          }).a = child);
	        }
	      }
	      return root1.children[0];
	    }
	    function firstWalk(v) {
	      var children = v.children, siblings = v.parent.children, w = v.i ? siblings[v.i - 1] : null;
	      if (children.length) {
	        d3_layout_treeShift(v);
	        var midpoint = (children[0].z + children[children.length - 1].z) / 2;
	        if (w) {
	          v.z = w.z + separation(v._, w._);
	          v.m = v.z - midpoint;
	        } else {
	          v.z = midpoint;
	        }
	      } else if (w) {
	        v.z = w.z + separation(v._, w._);
	      }
	      v.parent.A = apportion(v, w, v.parent.A || siblings[0]);
	    }
	    function secondWalk(v) {
	      v._.x = v.z + v.parent.m;
	      v.m += v.parent.m;
	    }
	    function apportion(v, w, ancestor) {
	      if (w) {
	        var vip = v, vop = v, vim = w, vom = vip.parent.children[0], sip = vip.m, sop = vop.m, sim = vim.m, som = vom.m, shift;
	        while (vim = d3_layout_treeRight(vim), vip = d3_layout_treeLeft(vip), vim && vip) {
	          vom = d3_layout_treeLeft(vom);
	          vop = d3_layout_treeRight(vop);
	          vop.a = v;
	          shift = vim.z + sim - vip.z - sip + separation(vim._, vip._);
	          if (shift > 0) {
	            d3_layout_treeMove(d3_layout_treeAncestor(vim, v, ancestor), v, shift);
	            sip += shift;
	            sop += shift;
	          }
	          sim += vim.m;
	          sip += vip.m;
	          som += vom.m;
	          sop += vop.m;
	        }
	        if (vim && !d3_layout_treeRight(vop)) {
	          vop.t = vim;
	          vop.m += sim - sop;
	        }
	        if (vip && !d3_layout_treeLeft(vom)) {
	          vom.t = vip;
	          vom.m += sip - som;
	          ancestor = v;
	        }
	      }
	      return ancestor;
	    }
	    function sizeNode(node) {
	      node.x *= size[0];
	      node.y = node.depth * size[1];
	    }
	    tree.separation = function(x) {
	      if (!arguments.length) return separation;
	      separation = x;
	      return tree;
	    };
	    tree.size = function(x) {
	      if (!arguments.length) return nodeSize ? null : size;
	      nodeSize = (size = x) == null ? sizeNode : null;
	      return tree;
	    };
	    tree.nodeSize = function(x) {
	      if (!arguments.length) return nodeSize ? size : null;
	      nodeSize = (size = x) == null ? null : sizeNode;
	      return tree;
	    };
	    return d3_layout_hierarchyRebind(tree, hierarchy);
	  };
	  function d3_layout_treeSeparation(a, b) {
	    return a.parent == b.parent ? 1 : 2;
	  }
	  function d3_layout_treeLeft(v) {
	    var children = v.children;
	    return children.length ? children[0] : v.t;
	  }
	  function d3_layout_treeRight(v) {
	    var children = v.children, n;
	    return (n = children.length) ? children[n - 1] : v.t;
	  }
	  function d3_layout_treeMove(wm, wp, shift) {
	    var change = shift / (wp.i - wm.i);
	    wp.c -= change;
	    wp.s += shift;
	    wm.c += change;
	    wp.z += shift;
	    wp.m += shift;
	  }
	  function d3_layout_treeShift(v) {
	    var shift = 0, change = 0, children = v.children, i = children.length, w;
	    while (--i >= 0) {
	      w = children[i];
	      w.z += shift;
	      w.m += shift;
	      shift += w.s + (change += w.c);
	    }
	  }
	  function d3_layout_treeAncestor(vim, v, ancestor) {
	    return vim.a.parent === v.parent ? vim.a : ancestor;
	  }
	  d3.layout.cluster = function() {
	    var hierarchy = d3.layout.hierarchy().sort(null).value(null), separation = d3_layout_treeSeparation, size = [ 1, 1 ], nodeSize = false;
	    function cluster(d, i) {
	      var nodes = hierarchy.call(this, d, i), root = nodes[0], previousNode, x = 0;
	      d3_layout_hierarchyVisitAfter(root, function(node) {
	        var children = node.children;
	        if (children && children.length) {
	          node.x = d3_layout_clusterX(children);
	          node.y = d3_layout_clusterY(children);
	        } else {
	          node.x = previousNode ? x += separation(node, previousNode) : 0;
	          node.y = 0;
	          previousNode = node;
	        }
	      });
	      var left = d3_layout_clusterLeft(root), right = d3_layout_clusterRight(root), x0 = left.x - separation(left, right) / 2, x1 = right.x + separation(right, left) / 2;
	      d3_layout_hierarchyVisitAfter(root, nodeSize ? function(node) {
	        node.x = (node.x - root.x) * size[0];
	        node.y = (root.y - node.y) * size[1];
	      } : function(node) {
	        node.x = (node.x - x0) / (x1 - x0) * size[0];
	        node.y = (1 - (root.y ? node.y / root.y : 1)) * size[1];
	      });
	      return nodes;
	    }
	    cluster.separation = function(x) {
	      if (!arguments.length) return separation;
	      separation = x;
	      return cluster;
	    };
	    cluster.size = function(x) {
	      if (!arguments.length) return nodeSize ? null : size;
	      nodeSize = (size = x) == null;
	      return cluster;
	    };
	    cluster.nodeSize = function(x) {
	      if (!arguments.length) return nodeSize ? size : null;
	      nodeSize = (size = x) != null;
	      return cluster;
	    };
	    return d3_layout_hierarchyRebind(cluster, hierarchy);
	  };
	  function d3_layout_clusterY(children) {
	    return 1 + d3.max(children, function(child) {
	      return child.y;
	    });
	  }
	  function d3_layout_clusterX(children) {
	    return children.reduce(function(x, child) {
	      return x + child.x;
	    }, 0) / children.length;
	  }
	  function d3_layout_clusterLeft(node) {
	    var children = node.children;
	    return children && children.length ? d3_layout_clusterLeft(children[0]) : node;
	  }
	  function d3_layout_clusterRight(node) {
	    var children = node.children, n;
	    return children && (n = children.length) ? d3_layout_clusterRight(children[n - 1]) : node;
	  }
	  d3.layout.treemap = function() {
	    var hierarchy = d3.layout.hierarchy(), round = Math.round, size = [ 1, 1 ], padding = null, pad = d3_layout_treemapPadNull, sticky = false, stickies, mode = "squarify", ratio = .5 * (1 + Math.sqrt(5));
	    function scale(children, k) {
	      var i = -1, n = children.length, child, area;
	      while (++i < n) {
	        area = (child = children[i]).value * (k < 0 ? 0 : k);
	        child.area = isNaN(area) || area <= 0 ? 0 : area;
	      }
	    }
	    function squarify(node) {
	      var children = node.children;
	      if (children && children.length) {
	        var rect = pad(node), row = [], remaining = children.slice(), child, best = Infinity, score, u = mode === "slice" ? rect.dx : mode === "dice" ? rect.dy : mode === "slice-dice" ? node.depth & 1 ? rect.dy : rect.dx : Math.min(rect.dx, rect.dy), n;
	        scale(remaining, rect.dx * rect.dy / node.value);
	        row.area = 0;
	        while ((n = remaining.length) > 0) {
	          row.push(child = remaining[n - 1]);
	          row.area += child.area;
	          if (mode !== "squarify" || (score = worst(row, u)) <= best) {
	            remaining.pop();
	            best = score;
	          } else {
	            row.area -= row.pop().area;
	            position(row, u, rect, false);
	            u = Math.min(rect.dx, rect.dy);
	            row.length = row.area = 0;
	            best = Infinity;
	          }
	        }
	        if (row.length) {
	          position(row, u, rect, true);
	          row.length = row.area = 0;
	        }
	        children.forEach(squarify);
	      }
	    }
	    function stickify(node) {
	      var children = node.children;
	      if (children && children.length) {
	        var rect = pad(node), remaining = children.slice(), child, row = [];
	        scale(remaining, rect.dx * rect.dy / node.value);
	        row.area = 0;
	        while (child = remaining.pop()) {
	          row.push(child);
	          row.area += child.area;
	          if (child.z != null) {
	            position(row, child.z ? rect.dx : rect.dy, rect, !remaining.length);
	            row.length = row.area = 0;
	          }
	        }
	        children.forEach(stickify);
	      }
	    }
	    function worst(row, u) {
	      var s = row.area, r, rmax = 0, rmin = Infinity, i = -1, n = row.length;
	      while (++i < n) {
	        if (!(r = row[i].area)) continue;
	        if (r < rmin) rmin = r;
	        if (r > rmax) rmax = r;
	      }
	      s *= s;
	      u *= u;
	      return s ? Math.max(u * rmax * ratio / s, s / (u * rmin * ratio)) : Infinity;
	    }
	    function position(row, u, rect, flush) {
	      var i = -1, n = row.length, x = rect.x, y = rect.y, v = u ? round(row.area / u) : 0, o;
	      if (u == rect.dx) {
	        if (flush || v > rect.dy) v = rect.dy;
	        while (++i < n) {
	          o = row[i];
	          o.x = x;
	          o.y = y;
	          o.dy = v;
	          x += o.dx = Math.min(rect.x + rect.dx - x, v ? round(o.area / v) : 0);
	        }
	        o.z = true;
	        o.dx += rect.x + rect.dx - x;
	        rect.y += v;
	        rect.dy -= v;
	      } else {
	        if (flush || v > rect.dx) v = rect.dx;
	        while (++i < n) {
	          o = row[i];
	          o.x = x;
	          o.y = y;
	          o.dx = v;
	          y += o.dy = Math.min(rect.y + rect.dy - y, v ? round(o.area / v) : 0);
	        }
	        o.z = false;
	        o.dy += rect.y + rect.dy - y;
	        rect.x += v;
	        rect.dx -= v;
	      }
	    }
	    function treemap(d) {
	      var nodes = stickies || hierarchy(d), root = nodes[0];
	      root.x = root.y = 0;
	      if (root.value) root.dx = size[0], root.dy = size[1]; else root.dx = root.dy = 0;
	      if (stickies) hierarchy.revalue(root);
	      scale([ root ], root.dx * root.dy / root.value);
	      (stickies ? stickify : squarify)(root);
	      if (sticky) stickies = nodes;
	      return nodes;
	    }
	    treemap.size = function(x) {
	      if (!arguments.length) return size;
	      size = x;
	      return treemap;
	    };
	    treemap.padding = function(x) {
	      if (!arguments.length) return padding;
	      function padFunction(node) {
	        var p = x.call(treemap, node, node.depth);
	        return p == null ? d3_layout_treemapPadNull(node) : d3_layout_treemapPad(node, typeof p === "number" ? [ p, p, p, p ] : p);
	      }
	      function padConstant(node) {
	        return d3_layout_treemapPad(node, x);
	      }
	      var type;
	      pad = (padding = x) == null ? d3_layout_treemapPadNull : (type = typeof x) === "function" ? padFunction : type === "number" ? (x = [ x, x, x, x ], 
	      padConstant) : padConstant;
	      return treemap;
	    };
	    treemap.round = function(x) {
	      if (!arguments.length) return round != Number;
	      round = x ? Math.round : Number;
	      return treemap;
	    };
	    treemap.sticky = function(x) {
	      if (!arguments.length) return sticky;
	      sticky = x;
	      stickies = null;
	      return treemap;
	    };
	    treemap.ratio = function(x) {
	      if (!arguments.length) return ratio;
	      ratio = x;
	      return treemap;
	    };
	    treemap.mode = function(x) {
	      if (!arguments.length) return mode;
	      mode = x + "";
	      return treemap;
	    };
	    return d3_layout_hierarchyRebind(treemap, hierarchy);
	  };
	  function d3_layout_treemapPadNull(node) {
	    return {
	      x: node.x,
	      y: node.y,
	      dx: node.dx,
	      dy: node.dy
	    };
	  }
	  function d3_layout_treemapPad(node, padding) {
	    var x = node.x + padding[3], y = node.y + padding[0], dx = node.dx - padding[1] - padding[3], dy = node.dy - padding[0] - padding[2];
	    if (dx < 0) {
	      x += dx / 2;
	      dx = 0;
	    }
	    if (dy < 0) {
	      y += dy / 2;
	      dy = 0;
	    }
	    return {
	      x: x,
	      y: y,
	      dx: dx,
	      dy: dy
	    };
	  }
	  d3.random = {
	    normal: function(µ, σ) {
	      var n = arguments.length;
	      if (n < 2) σ = 1;
	      if (n < 1) µ = 0;
	      return function() {
	        var x, y, r;
	        do {
	          x = Math.random() * 2 - 1;
	          y = Math.random() * 2 - 1;
	          r = x * x + y * y;
	        } while (!r || r > 1);
	        return µ + σ * x * Math.sqrt(-2 * Math.log(r) / r);
	      };
	    },
	    logNormal: function() {
	      var random = d3.random.normal.apply(d3, arguments);
	      return function() {
	        return Math.exp(random());
	      };
	    },
	    bates: function(m) {
	      var random = d3.random.irwinHall(m);
	      return function() {
	        return random() / m;
	      };
	    },
	    irwinHall: function(m) {
	      return function() {
	        for (var s = 0, j = 0; j < m; j++) s += Math.random();
	        return s;
	      };
	    }
	  };
	  d3.scale = {};
	  function d3_scaleExtent(domain) {
	    var start = domain[0], stop = domain[domain.length - 1];
	    return start < stop ? [ start, stop ] : [ stop, start ];
	  }
	  function d3_scaleRange(scale) {
	    return scale.rangeExtent ? scale.rangeExtent() : d3_scaleExtent(scale.range());
	  }
	  function d3_scale_bilinear(domain, range, uninterpolate, interpolate) {
	    var u = uninterpolate(domain[0], domain[1]), i = interpolate(range[0], range[1]);
	    return function(x) {
	      return i(u(x));
	    };
	  }
	  function d3_scale_nice(domain, nice) {
	    var i0 = 0, i1 = domain.length - 1, x0 = domain[i0], x1 = domain[i1], dx;
	    if (x1 < x0) {
	      dx = i0, i0 = i1, i1 = dx;
	      dx = x0, x0 = x1, x1 = dx;
	    }
	    domain[i0] = nice.floor(x0);
	    domain[i1] = nice.ceil(x1);
	    return domain;
	  }
	  function d3_scale_niceStep(step) {
	    return step ? {
	      floor: function(x) {
	        return Math.floor(x / step) * step;
	      },
	      ceil: function(x) {
	        return Math.ceil(x / step) * step;
	      }
	    } : d3_scale_niceIdentity;
	  }
	  var d3_scale_niceIdentity = {
	    floor: d3_identity,
	    ceil: d3_identity
	  };
	  function d3_scale_polylinear(domain, range, uninterpolate, interpolate) {
	    var u = [], i = [], j = 0, k = Math.min(domain.length, range.length) - 1;
	    if (domain[k] < domain[0]) {
	      domain = domain.slice().reverse();
	      range = range.slice().reverse();
	    }
	    while (++j <= k) {
	      u.push(uninterpolate(domain[j - 1], domain[j]));
	      i.push(interpolate(range[j - 1], range[j]));
	    }
	    return function(x) {
	      var j = d3.bisect(domain, x, 1, k) - 1;
	      return i[j](u[j](x));
	    };
	  }
	  d3.scale.linear = function() {
	    return d3_scale_linear([ 0, 1 ], [ 0, 1 ], d3_interpolate, false);
	  };
	  function d3_scale_linear(domain, range, interpolate, clamp) {
	    var output, input;
	    function rescale() {
	      var linear = Math.min(domain.length, range.length) > 2 ? d3_scale_polylinear : d3_scale_bilinear, uninterpolate = clamp ? d3_uninterpolateClamp : d3_uninterpolateNumber;
	      output = linear(domain, range, uninterpolate, interpolate);
	      input = linear(range, domain, uninterpolate, d3_interpolate);
	      return scale;
	    }
	    function scale(x) {
	      return output(x);
	    }
	    scale.invert = function(y) {
	      return input(y);
	    };
	    scale.domain = function(x) {
	      if (!arguments.length) return domain;
	      domain = x.map(Number);
	      return rescale();
	    };
	    scale.range = function(x) {
	      if (!arguments.length) return range;
	      range = x;
	      return rescale();
	    };
	    scale.rangeRound = function(x) {
	      return scale.range(x).interpolate(d3_interpolateRound);
	    };
	    scale.clamp = function(x) {
	      if (!arguments.length) return clamp;
	      clamp = x;
	      return rescale();
	    };
	    scale.interpolate = function(x) {
	      if (!arguments.length) return interpolate;
	      interpolate = x;
	      return rescale();
	    };
	    scale.ticks = function(m) {
	      return d3_scale_linearTicks(domain, m);
	    };
	    scale.tickFormat = function(m, format) {
	      return d3_scale_linearTickFormat(domain, m, format);
	    };
	    scale.nice = function(m) {
	      d3_scale_linearNice(domain, m);
	      return rescale();
	    };
	    scale.copy = function() {
	      return d3_scale_linear(domain, range, interpolate, clamp);
	    };
	    return rescale();
	  }
	  function d3_scale_linearRebind(scale, linear) {
	    return d3.rebind(scale, linear, "range", "rangeRound", "interpolate", "clamp");
	  }
	  function d3_scale_linearNice(domain, m) {
	    d3_scale_nice(domain, d3_scale_niceStep(d3_scale_linearTickRange(domain, m)[2]));
	    d3_scale_nice(domain, d3_scale_niceStep(d3_scale_linearTickRange(domain, m)[2]));
	    return domain;
	  }
	  function d3_scale_linearTickRange(domain, m) {
	    if (m == null) m = 10;
	    var extent = d3_scaleExtent(domain), span = extent[1] - extent[0], step = Math.pow(10, Math.floor(Math.log(span / m) / Math.LN10)), err = m / span * step;
	    if (err <= .15) step *= 10; else if (err <= .35) step *= 5; else if (err <= .75) step *= 2;
	    extent[0] = Math.ceil(extent[0] / step) * step;
	    extent[1] = Math.floor(extent[1] / step) * step + step * .5;
	    extent[2] = step;
	    return extent;
	  }
	  function d3_scale_linearTicks(domain, m) {
	    return d3.range.apply(d3, d3_scale_linearTickRange(domain, m));
	  }
	  function d3_scale_linearTickFormat(domain, m, format) {
	    var range = d3_scale_linearTickRange(domain, m);
	    if (format) {
	      var match = d3_format_re.exec(format);
	      match.shift();
	      if (match[8] === "s") {
	        var prefix = d3.formatPrefix(Math.max(abs(range[0]), abs(range[1])));
	        if (!match[7]) match[7] = "." + d3_scale_linearPrecision(prefix.scale(range[2]));
	        match[8] = "f";
	        format = d3.format(match.join(""));
	        return function(d) {
	          return format(prefix.scale(d)) + prefix.symbol;
	        };
	      }
	      if (!match[7]) match[7] = "." + d3_scale_linearFormatPrecision(match[8], range);
	      format = match.join("");
	    } else {
	      format = ",." + d3_scale_linearPrecision(range[2]) + "f";
	    }
	    return d3.format(format);
	  }
	  var d3_scale_linearFormatSignificant = {
	    s: 1,
	    g: 1,
	    p: 1,
	    r: 1,
	    e: 1
	  };
	  function d3_scale_linearPrecision(value) {
	    return -Math.floor(Math.log(value) / Math.LN10 + .01);
	  }
	  function d3_scale_linearFormatPrecision(type, range) {
	    var p = d3_scale_linearPrecision(range[2]);
	    return type in d3_scale_linearFormatSignificant ? Math.abs(p - d3_scale_linearPrecision(Math.max(abs(range[0]), abs(range[1])))) + +(type !== "e") : p - (type === "%") * 2;
	  }
	  d3.scale.log = function() {
	    return d3_scale_log(d3.scale.linear().domain([ 0, 1 ]), 10, true, [ 1, 10 ]);
	  };
	  function d3_scale_log(linear, base, positive, domain) {
	    function log(x) {
	      return (positive ? Math.log(x < 0 ? 0 : x) : -Math.log(x > 0 ? 0 : -x)) / Math.log(base);
	    }
	    function pow(x) {
	      return positive ? Math.pow(base, x) : -Math.pow(base, -x);
	    }
	    function scale(x) {
	      return linear(log(x));
	    }
	    scale.invert = function(x) {
	      return pow(linear.invert(x));
	    };
	    scale.domain = function(x) {
	      if (!arguments.length) return domain;
	      positive = x[0] >= 0;
	      linear.domain((domain = x.map(Number)).map(log));
	      return scale;
	    };
	    scale.base = function(_) {
	      if (!arguments.length) return base;
	      base = +_;
	      linear.domain(domain.map(log));
	      return scale;
	    };
	    scale.nice = function() {
	      var niced = d3_scale_nice(domain.map(log), positive ? Math : d3_scale_logNiceNegative);
	      linear.domain(niced);
	      domain = niced.map(pow);
	      return scale;
	    };
	    scale.ticks = function() {
	      var extent = d3_scaleExtent(domain), ticks = [], u = extent[0], v = extent[1], i = Math.floor(log(u)), j = Math.ceil(log(v)), n = base % 1 ? 2 : base;
	      if (isFinite(j - i)) {
	        if (positive) {
	          for (;i < j; i++) for (var k = 1; k < n; k++) ticks.push(pow(i) * k);
	          ticks.push(pow(i));
	        } else {
	          ticks.push(pow(i));
	          for (;i++ < j; ) for (var k = n - 1; k > 0; k--) ticks.push(pow(i) * k);
	        }
	        for (i = 0; ticks[i] < u; i++) {}
	        for (j = ticks.length; ticks[j - 1] > v; j--) {}
	        ticks = ticks.slice(i, j);
	      }
	      return ticks;
	    };
	    scale.tickFormat = function(n, format) {
	      if (!arguments.length) return d3_scale_logFormat;
	      if (arguments.length < 2) format = d3_scale_logFormat; else if (typeof format !== "function") format = d3.format(format);
	      var k = Math.max(1, base * n / scale.ticks().length);
	      return function(d) {
	        var i = d / pow(Math.round(log(d)));
	        if (i * base < base - .5) i *= base;
	        return i <= k ? format(d) : "";
	      };
	    };
	    scale.copy = function() {
	      return d3_scale_log(linear.copy(), base, positive, domain);
	    };
	    return d3_scale_linearRebind(scale, linear);
	  }
	  var d3_scale_logFormat = d3.format(".0e"), d3_scale_logNiceNegative = {
	    floor: function(x) {
	      return -Math.ceil(-x);
	    },
	    ceil: function(x) {
	      return -Math.floor(-x);
	    }
	  };
	  d3.scale.pow = function() {
	    return d3_scale_pow(d3.scale.linear(), 1, [ 0, 1 ]);
	  };
	  function d3_scale_pow(linear, exponent, domain) {
	    var powp = d3_scale_powPow(exponent), powb = d3_scale_powPow(1 / exponent);
	    function scale(x) {
	      return linear(powp(x));
	    }
	    scale.invert = function(x) {
	      return powb(linear.invert(x));
	    };
	    scale.domain = function(x) {
	      if (!arguments.length) return domain;
	      linear.domain((domain = x.map(Number)).map(powp));
	      return scale;
	    };
	    scale.ticks = function(m) {
	      return d3_scale_linearTicks(domain, m);
	    };
	    scale.tickFormat = function(m, format) {
	      return d3_scale_linearTickFormat(domain, m, format);
	    };
	    scale.nice = function(m) {
	      return scale.domain(d3_scale_linearNice(domain, m));
	    };
	    scale.exponent = function(x) {
	      if (!arguments.length) return exponent;
	      powp = d3_scale_powPow(exponent = x);
	      powb = d3_scale_powPow(1 / exponent);
	      linear.domain(domain.map(powp));
	      return scale;
	    };
	    scale.copy = function() {
	      return d3_scale_pow(linear.copy(), exponent, domain);
	    };
	    return d3_scale_linearRebind(scale, linear);
	  }
	  function d3_scale_powPow(e) {
	    return function(x) {
	      return x < 0 ? -Math.pow(-x, e) : Math.pow(x, e);
	    };
	  }
	  d3.scale.sqrt = function() {
	    return d3.scale.pow().exponent(.5);
	  };
	  d3.scale.ordinal = function() {
	    return d3_scale_ordinal([], {
	      t: "range",
	      a: [ [] ]
	    });
	  };
	  function d3_scale_ordinal(domain, ranger) {
	    var index, range, rangeBand;
	    function scale(x) {
	      return range[((index.get(x) || (ranger.t === "range" ? index.set(x, domain.push(x)) : NaN)) - 1) % range.length];
	    }
	    function steps(start, step) {
	      return d3.range(domain.length).map(function(i) {
	        return start + step * i;
	      });
	    }
	    scale.domain = function(x) {
	      if (!arguments.length) return domain;
	      domain = [];
	      index = new d3_Map();
	      var i = -1, n = x.length, xi;
	      while (++i < n) if (!index.has(xi = x[i])) index.set(xi, domain.push(xi));
	      return scale[ranger.t].apply(scale, ranger.a);
	    };
	    scale.range = function(x) {
	      if (!arguments.length) return range;
	      range = x;
	      rangeBand = 0;
	      ranger = {
	        t: "range",
	        a: arguments
	      };
	      return scale;
	    };
	    scale.rangePoints = function(x, padding) {
	      if (arguments.length < 2) padding = 0;
	      var start = x[0], stop = x[1], step = domain.length < 2 ? (start = (start + stop) / 2, 
	      0) : (stop - start) / (domain.length - 1 + padding);
	      range = steps(start + step * padding / 2, step);
	      rangeBand = 0;
	      ranger = {
	        t: "rangePoints",
	        a: arguments
	      };
	      return scale;
	    };
	    scale.rangeRoundPoints = function(x, padding) {
	      if (arguments.length < 2) padding = 0;
	      var start = x[0], stop = x[1], step = domain.length < 2 ? (start = stop = Math.round((start + stop) / 2), 
	      0) : (stop - start) / (domain.length - 1 + padding) | 0;
	      range = steps(start + Math.round(step * padding / 2 + (stop - start - (domain.length - 1 + padding) * step) / 2), step);
	      rangeBand = 0;
	      ranger = {
	        t: "rangeRoundPoints",
	        a: arguments
	      };
	      return scale;
	    };
	    scale.rangeBands = function(x, padding, outerPadding) {
	      if (arguments.length < 2) padding = 0;
	      if (arguments.length < 3) outerPadding = padding;
	      var reverse = x[1] < x[0], start = x[reverse - 0], stop = x[1 - reverse], step = (stop - start) / (domain.length - padding + 2 * outerPadding);
	      range = steps(start + step * outerPadding, step);
	      if (reverse) range.reverse();
	      rangeBand = step * (1 - padding);
	      ranger = {
	        t: "rangeBands",
	        a: arguments
	      };
	      return scale;
	    };
	    scale.rangeRoundBands = function(x, padding, outerPadding) {
	      if (arguments.length < 2) padding = 0;
	      if (arguments.length < 3) outerPadding = padding;
	      var reverse = x[1] < x[0], start = x[reverse - 0], stop = x[1 - reverse], step = Math.floor((stop - start) / (domain.length - padding + 2 * outerPadding));
	      range = steps(start + Math.round((stop - start - (domain.length - padding) * step) / 2), step);
	      if (reverse) range.reverse();
	      rangeBand = Math.round(step * (1 - padding));
	      ranger = {
	        t: "rangeRoundBands",
	        a: arguments
	      };
	      return scale;
	    };
	    scale.rangeBand = function() {
	      return rangeBand;
	    };
	    scale.rangeExtent = function() {
	      return d3_scaleExtent(ranger.a[0]);
	    };
	    scale.copy = function() {
	      return d3_scale_ordinal(domain, ranger);
	    };
	    return scale.domain(domain);
	  }
	  d3.scale.category10 = function() {
	    return d3.scale.ordinal().range(d3_category10);
	  };
	  d3.scale.category20 = function() {
	    return d3.scale.ordinal().range(d3_category20);
	  };
	  d3.scale.category20b = function() {
	    return d3.scale.ordinal().range(d3_category20b);
	  };
	  d3.scale.category20c = function() {
	    return d3.scale.ordinal().range(d3_category20c);
	  };
	  var d3_category10 = [ 2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175 ].map(d3_rgbString);
	  var d3_category20 = [ 2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725 ].map(d3_rgbString);
	  var d3_category20b = [ 3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654 ].map(d3_rgbString);
	  var d3_category20c = [ 3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081 ].map(d3_rgbString);
	  d3.scale.quantile = function() {
	    return d3_scale_quantile([], []);
	  };
	  function d3_scale_quantile(domain, range) {
	    var thresholds;
	    function rescale() {
	      var k = 0, q = range.length;
	      thresholds = [];
	      while (++k < q) thresholds[k - 1] = d3.quantile(domain, k / q);
	      return scale;
	    }
	    function scale(x) {
	      if (!isNaN(x = +x)) return range[d3.bisect(thresholds, x)];
	    }
	    scale.domain = function(x) {
	      if (!arguments.length) return domain;
	      domain = x.map(d3_number).filter(d3_numeric).sort(d3_ascending);
	      return rescale();
	    };
	    scale.range = function(x) {
	      if (!arguments.length) return range;
	      range = x;
	      return rescale();
	    };
	    scale.quantiles = function() {
	      return thresholds;
	    };
	    scale.invertExtent = function(y) {
	      y = range.indexOf(y);
	      return y < 0 ? [ NaN, NaN ] : [ y > 0 ? thresholds[y - 1] : domain[0], y < thresholds.length ? thresholds[y] : domain[domain.length - 1] ];
	    };
	    scale.copy = function() {
	      return d3_scale_quantile(domain, range);
	    };
	    return rescale();
	  }
	  d3.scale.quantize = function() {
	    return d3_scale_quantize(0, 1, [ 0, 1 ]);
	  };
	  function d3_scale_quantize(x0, x1, range) {
	    var kx, i;
	    function scale(x) {
	      return range[Math.max(0, Math.min(i, Math.floor(kx * (x - x0))))];
	    }
	    function rescale() {
	      kx = range.length / (x1 - x0);
	      i = range.length - 1;
	      return scale;
	    }
	    scale.domain = function(x) {
	      if (!arguments.length) return [ x0, x1 ];
	      x0 = +x[0];
	      x1 = +x[x.length - 1];
	      return rescale();
	    };
	    scale.range = function(x) {
	      if (!arguments.length) return range;
	      range = x;
	      return rescale();
	    };
	    scale.invertExtent = function(y) {
	      y = range.indexOf(y);
	      y = y < 0 ? NaN : y / kx + x0;
	      return [ y, y + 1 / kx ];
	    };
	    scale.copy = function() {
	      return d3_scale_quantize(x0, x1, range);
	    };
	    return rescale();
	  }
	  d3.scale.threshold = function() {
	    return d3_scale_threshold([ .5 ], [ 0, 1 ]);
	  };
	  function d3_scale_threshold(domain, range) {
	    function scale(x) {
	      if (x <= x) return range[d3.bisect(domain, x)];
	    }
	    scale.domain = function(_) {
	      if (!arguments.length) return domain;
	      domain = _;
	      return scale;
	    };
	    scale.range = function(_) {
	      if (!arguments.length) return range;
	      range = _;
	      return scale;
	    };
	    scale.invertExtent = function(y) {
	      y = range.indexOf(y);
	      return [ domain[y - 1], domain[y] ];
	    };
	    scale.copy = function() {
	      return d3_scale_threshold(domain, range);
	    };
	    return scale;
	  }
	  d3.scale.identity = function() {
	    return d3_scale_identity([ 0, 1 ]);
	  };
	  function d3_scale_identity(domain) {
	    function identity(x) {
	      return +x;
	    }
	    identity.invert = identity;
	    identity.domain = identity.range = function(x) {
	      if (!arguments.length) return domain;
	      domain = x.map(identity);
	      return identity;
	    };
	    identity.ticks = function(m) {
	      return d3_scale_linearTicks(domain, m);
	    };
	    identity.tickFormat = function(m, format) {
	      return d3_scale_linearTickFormat(domain, m, format);
	    };
	    identity.copy = function() {
	      return d3_scale_identity(domain);
	    };
	    return identity;
	  }
	  d3.svg = {};
	  function d3_zero() {
	    return 0;
	  }
	  d3.svg.arc = function() {
	    var innerRadius = d3_svg_arcInnerRadius, outerRadius = d3_svg_arcOuterRadius, cornerRadius = d3_zero, padRadius = d3_svg_arcAuto, startAngle = d3_svg_arcStartAngle, endAngle = d3_svg_arcEndAngle, padAngle = d3_svg_arcPadAngle;
	    function arc() {
	      var r0 = Math.max(0, +innerRadius.apply(this, arguments)), r1 = Math.max(0, +outerRadius.apply(this, arguments)), a0 = startAngle.apply(this, arguments) - halfπ, a1 = endAngle.apply(this, arguments) - halfπ, da = Math.abs(a1 - a0), cw = a0 > a1 ? 0 : 1;
	      if (r1 < r0) rc = r1, r1 = r0, r0 = rc;
	      if (da >= τε) return circleSegment(r1, cw) + (r0 ? circleSegment(r0, 1 - cw) : "") + "Z";
	      var rc, cr, rp, ap, p0 = 0, p1 = 0, x0, y0, x1, y1, x2, y2, x3, y3, path = [];
	      if (ap = (+padAngle.apply(this, arguments) || 0) / 2) {
	        rp = padRadius === d3_svg_arcAuto ? Math.sqrt(r0 * r0 + r1 * r1) : +padRadius.apply(this, arguments);
	        if (!cw) p1 *= -1;
	        if (r1) p1 = d3_asin(rp / r1 * Math.sin(ap));
	        if (r0) p0 = d3_asin(rp / r0 * Math.sin(ap));
	      }
	      if (r1) {
	        x0 = r1 * Math.cos(a0 + p1);
	        y0 = r1 * Math.sin(a0 + p1);
	        x1 = r1 * Math.cos(a1 - p1);
	        y1 = r1 * Math.sin(a1 - p1);
	        var l1 = Math.abs(a1 - a0 - 2 * p1) <= π ? 0 : 1;
	        if (p1 && d3_svg_arcSweep(x0, y0, x1, y1) === cw ^ l1) {
	          var h1 = (a0 + a1) / 2;
	          x0 = r1 * Math.cos(h1);
	          y0 = r1 * Math.sin(h1);
	          x1 = y1 = null;
	        }
	      } else {
	        x0 = y0 = 0;
	      }
	      if (r0) {
	        x2 = r0 * Math.cos(a1 - p0);
	        y2 = r0 * Math.sin(a1 - p0);
	        x3 = r0 * Math.cos(a0 + p0);
	        y3 = r0 * Math.sin(a0 + p0);
	        var l0 = Math.abs(a0 - a1 + 2 * p0) <= π ? 0 : 1;
	        if (p0 && d3_svg_arcSweep(x2, y2, x3, y3) === 1 - cw ^ l0) {
	          var h0 = (a0 + a1) / 2;
	          x2 = r0 * Math.cos(h0);
	          y2 = r0 * Math.sin(h0);
	          x3 = y3 = null;
	        }
	      } else {
	        x2 = y2 = 0;
	      }
	      if (da > ε && (rc = Math.min(Math.abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments))) > .001) {
	        cr = r0 < r1 ^ cw ? 0 : 1;
	        var rc1 = rc, rc0 = rc;
	        if (da < π) {
	          var oc = x3 == null ? [ x2, y2 ] : x1 == null ? [ x0, y0 ] : d3_geom_polygonIntersect([ x0, y0 ], [ x3, y3 ], [ x1, y1 ], [ x2, y2 ]), ax = x0 - oc[0], ay = y0 - oc[1], bx = x1 - oc[0], by = y1 - oc[1], kc = 1 / Math.sin(Math.acos((ax * bx + ay * by) / (Math.sqrt(ax * ax + ay * ay) * Math.sqrt(bx * bx + by * by))) / 2), lc = Math.sqrt(oc[0] * oc[0] + oc[1] * oc[1]);
	          rc0 = Math.min(rc, (r0 - lc) / (kc - 1));
	          rc1 = Math.min(rc, (r1 - lc) / (kc + 1));
	        }
	        if (x1 != null) {
	          var t30 = d3_svg_arcCornerTangents(x3 == null ? [ x2, y2 ] : [ x3, y3 ], [ x0, y0 ], r1, rc1, cw), t12 = d3_svg_arcCornerTangents([ x1, y1 ], [ x2, y2 ], r1, rc1, cw);
	          if (rc === rc1) {
	            path.push("M", t30[0], "A", rc1, ",", rc1, " 0 0,", cr, " ", t30[1], "A", r1, ",", r1, " 0 ", 1 - cw ^ d3_svg_arcSweep(t30[1][0], t30[1][1], t12[1][0], t12[1][1]), ",", cw, " ", t12[1], "A", rc1, ",", rc1, " 0 0,", cr, " ", t12[0]);
	          } else {
	            path.push("M", t30[0], "A", rc1, ",", rc1, " 0 1,", cr, " ", t12[0]);
	          }
	        } else {
	          path.push("M", x0, ",", y0);
	        }
	        if (x3 != null) {
	          var t03 = d3_svg_arcCornerTangents([ x0, y0 ], [ x3, y3 ], r0, -rc0, cw), t21 = d3_svg_arcCornerTangents([ x2, y2 ], x1 == null ? [ x0, y0 ] : [ x1, y1 ], r0, -rc0, cw);
	          if (rc === rc0) {
	            path.push("L", t21[0], "A", rc0, ",", rc0, " 0 0,", cr, " ", t21[1], "A", r0, ",", r0, " 0 ", cw ^ d3_svg_arcSweep(t21[1][0], t21[1][1], t03[1][0], t03[1][1]), ",", 1 - cw, " ", t03[1], "A", rc0, ",", rc0, " 0 0,", cr, " ", t03[0]);
	          } else {
	            path.push("L", t21[0], "A", rc0, ",", rc0, " 0 0,", cr, " ", t03[0]);
	          }
	        } else {
	          path.push("L", x2, ",", y2);
	        }
	      } else {
	        path.push("M", x0, ",", y0);
	        if (x1 != null) path.push("A", r1, ",", r1, " 0 ", l1, ",", cw, " ", x1, ",", y1);
	        path.push("L", x2, ",", y2);
	        if (x3 != null) path.push("A", r0, ",", r0, " 0 ", l0, ",", 1 - cw, " ", x3, ",", y3);
	      }
	      path.push("Z");
	      return path.join("");
	    }
	    function circleSegment(r1, cw) {
	      return "M0," + r1 + "A" + r1 + "," + r1 + " 0 1," + cw + " 0," + -r1 + "A" + r1 + "," + r1 + " 0 1," + cw + " 0," + r1;
	    }
	    arc.innerRadius = function(v) {
	      if (!arguments.length) return innerRadius;
	      innerRadius = d3_functor(v);
	      return arc;
	    };
	    arc.outerRadius = function(v) {
	      if (!arguments.length) return outerRadius;
	      outerRadius = d3_functor(v);
	      return arc;
	    };
	    arc.cornerRadius = function(v) {
	      if (!arguments.length) return cornerRadius;
	      cornerRadius = d3_functor(v);
	      return arc;
	    };
	    arc.padRadius = function(v) {
	      if (!arguments.length) return padRadius;
	      padRadius = v == d3_svg_arcAuto ? d3_svg_arcAuto : d3_functor(v);
	      return arc;
	    };
	    arc.startAngle = function(v) {
	      if (!arguments.length) return startAngle;
	      startAngle = d3_functor(v);
	      return arc;
	    };
	    arc.endAngle = function(v) {
	      if (!arguments.length) return endAngle;
	      endAngle = d3_functor(v);
	      return arc;
	    };
	    arc.padAngle = function(v) {
	      if (!arguments.length) return padAngle;
	      padAngle = d3_functor(v);
	      return arc;
	    };
	    arc.centroid = function() {
	      var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2, a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - halfπ;
	      return [ Math.cos(a) * r, Math.sin(a) * r ];
	    };
	    return arc;
	  };
	  var d3_svg_arcAuto = "auto";
	  function d3_svg_arcInnerRadius(d) {
	    return d.innerRadius;
	  }
	  function d3_svg_arcOuterRadius(d) {
	    return d.outerRadius;
	  }
	  function d3_svg_arcStartAngle(d) {
	    return d.startAngle;
	  }
	  function d3_svg_arcEndAngle(d) {
	    return d.endAngle;
	  }
	  function d3_svg_arcPadAngle(d) {
	    return d && d.padAngle;
	  }
	  function d3_svg_arcSweep(x0, y0, x1, y1) {
	    return (x0 - x1) * y0 - (y0 - y1) * x0 > 0 ? 0 : 1;
	  }
	  function d3_svg_arcCornerTangents(p0, p1, r1, rc, cw) {
	    var x01 = p0[0] - p1[0], y01 = p0[1] - p1[1], lo = (cw ? rc : -rc) / Math.sqrt(x01 * x01 + y01 * y01), ox = lo * y01, oy = -lo * x01, x1 = p0[0] + ox, y1 = p0[1] + oy, x2 = p1[0] + ox, y2 = p1[1] + oy, x3 = (x1 + x2) / 2, y3 = (y1 + y2) / 2, dx = x2 - x1, dy = y2 - y1, d2 = dx * dx + dy * dy, r = r1 - rc, D = x1 * y2 - x2 * y1, d = (dy < 0 ? -1 : 1) * Math.sqrt(Math.max(0, r * r * d2 - D * D)), cx0 = (D * dy - dx * d) / d2, cy0 = (-D * dx - dy * d) / d2, cx1 = (D * dy + dx * d) / d2, cy1 = (-D * dx + dy * d) / d2, dx0 = cx0 - x3, dy0 = cy0 - y3, dx1 = cx1 - x3, dy1 = cy1 - y3;
	    if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1;
	    return [ [ cx0 - ox, cy0 - oy ], [ cx0 * r1 / r, cy0 * r1 / r ] ];
	  }
	  function d3_svg_line(projection) {
	    var x = d3_geom_pointX, y = d3_geom_pointY, defined = d3_true, interpolate = d3_svg_lineLinear, interpolateKey = interpolate.key, tension = .7;
	    function line(data) {
	      var segments = [], points = [], i = -1, n = data.length, d, fx = d3_functor(x), fy = d3_functor(y);
	      function segment() {
	        segments.push("M", interpolate(projection(points), tension));
	      }
	      while (++i < n) {
	        if (defined.call(this, d = data[i], i)) {
	          points.push([ +fx.call(this, d, i), +fy.call(this, d, i) ]);
	        } else if (points.length) {
	          segment();
	          points = [];
	        }
	      }
	      if (points.length) segment();
	      return segments.length ? segments.join("") : null;
	    }
	    line.x = function(_) {
	      if (!arguments.length) return x;
	      x = _;
	      return line;
	    };
	    line.y = function(_) {
	      if (!arguments.length) return y;
	      y = _;
	      return line;
	    };
	    line.defined = function(_) {
	      if (!arguments.length) return defined;
	      defined = _;
	      return line;
	    };
	    line.interpolate = function(_) {
	      if (!arguments.length) return interpolateKey;
	      if (typeof _ === "function") interpolateKey = interpolate = _; else interpolateKey = (interpolate = d3_svg_lineInterpolators.get(_) || d3_svg_lineLinear).key;
	      return line;
	    };
	    line.tension = function(_) {
	      if (!arguments.length) return tension;
	      tension = _;
	      return line;
	    };
	    return line;
	  }
	  d3.svg.line = function() {
	    return d3_svg_line(d3_identity);
	  };
	  var d3_svg_lineInterpolators = d3.map({
	    linear: d3_svg_lineLinear,
	    "linear-closed": d3_svg_lineLinearClosed,
	    step: d3_svg_lineStep,
	    "step-before": d3_svg_lineStepBefore,
	    "step-after": d3_svg_lineStepAfter,
	    basis: d3_svg_lineBasis,
	    "basis-open": d3_svg_lineBasisOpen,
	    "basis-closed": d3_svg_lineBasisClosed,
	    bundle: d3_svg_lineBundle,
	    cardinal: d3_svg_lineCardinal,
	    "cardinal-open": d3_svg_lineCardinalOpen,
	    "cardinal-closed": d3_svg_lineCardinalClosed,
	    monotone: d3_svg_lineMonotone
	  });
	  d3_svg_lineInterpolators.forEach(function(key, value) {
	    value.key = key;
	    value.closed = /-closed$/.test(key);
	  });
	  function d3_svg_lineLinear(points) {
	    return points.length > 1 ? points.join("L") : points + "Z";
	  }
	  function d3_svg_lineLinearClosed(points) {
	    return points.join("L") + "Z";
	  }
	  function d3_svg_lineStep(points) {
	    var i = 0, n = points.length, p = points[0], path = [ p[0], ",", p[1] ];
	    while (++i < n) path.push("H", (p[0] + (p = points[i])[0]) / 2, "V", p[1]);
	    if (n > 1) path.push("H", p[0]);
	    return path.join("");
	  }
	  function d3_svg_lineStepBefore(points) {
	    var i = 0, n = points.length, p = points[0], path = [ p[0], ",", p[1] ];
	    while (++i < n) path.push("V", (p = points[i])[1], "H", p[0]);
	    return path.join("");
	  }
	  function d3_svg_lineStepAfter(points) {
	    var i = 0, n = points.length, p = points[0], path = [ p[0], ",", p[1] ];
	    while (++i < n) path.push("H", (p = points[i])[0], "V", p[1]);
	    return path.join("");
	  }
	  function d3_svg_lineCardinalOpen(points, tension) {
	    return points.length < 4 ? d3_svg_lineLinear(points) : points[1] + d3_svg_lineHermite(points.slice(1, -1), d3_svg_lineCardinalTangents(points, tension));
	  }
	  function d3_svg_lineCardinalClosed(points, tension) {
	    return points.length < 3 ? d3_svg_lineLinearClosed(points) : points[0] + d3_svg_lineHermite((points.push(points[0]), 
	    points), d3_svg_lineCardinalTangents([ points[points.length - 2] ].concat(points, [ points[1] ]), tension));
	  }
	  function d3_svg_lineCardinal(points, tension) {
	    return points.length < 3 ? d3_svg_lineLinear(points) : points[0] + d3_svg_lineHermite(points, d3_svg_lineCardinalTangents(points, tension));
	  }
	  function d3_svg_lineHermite(points, tangents) {
	    if (tangents.length < 1 || points.length != tangents.length && points.length != tangents.length + 2) {
	      return d3_svg_lineLinear(points);
	    }
	    var quad = points.length != tangents.length, path = "", p0 = points[0], p = points[1], t0 = tangents[0], t = t0, pi = 1;
	    if (quad) {
	      path += "Q" + (p[0] - t0[0] * 2 / 3) + "," + (p[1] - t0[1] * 2 / 3) + "," + p[0] + "," + p[1];
	      p0 = points[1];
	      pi = 2;
	    }
	    if (tangents.length > 1) {
	      t = tangents[1];
	      p = points[pi];
	      pi++;
	      path += "C" + (p0[0] + t0[0]) + "," + (p0[1] + t0[1]) + "," + (p[0] - t[0]) + "," + (p[1] - t[1]) + "," + p[0] + "," + p[1];
	      for (var i = 2; i < tangents.length; i++, pi++) {
	        p = points[pi];
	        t = tangents[i];
	        path += "S" + (p[0] - t[0]) + "," + (p[1] - t[1]) + "," + p[0] + "," + p[1];
	      }
	    }
	    if (quad) {
	      var lp = points[pi];
	      path += "Q" + (p[0] + t[0] * 2 / 3) + "," + (p[1] + t[1] * 2 / 3) + "," + lp[0] + "," + lp[1];
	    }
	    return path;
	  }
	  function d3_svg_lineCardinalTangents(points, tension) {
	    var tangents = [], a = (1 - tension) / 2, p0, p1 = points[0], p2 = points[1], i = 1, n = points.length;
	    while (++i < n) {
	      p0 = p1;
	      p1 = p2;
	      p2 = points[i];
	      tangents.push([ a * (p2[0] - p0[0]), a * (p2[1] - p0[1]) ]);
	    }
	    return tangents;
	  }
	  function d3_svg_lineBasis(points) {
	    if (points.length < 3) return d3_svg_lineLinear(points);
	    var i = 1, n = points.length, pi = points[0], x0 = pi[0], y0 = pi[1], px = [ x0, x0, x0, (pi = points[1])[0] ], py = [ y0, y0, y0, pi[1] ], path = [ x0, ",", y0, "L", d3_svg_lineDot4(d3_svg_lineBasisBezier3, px), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier3, py) ];
	    points.push(points[n - 1]);
	    while (++i <= n) {
	      pi = points[i];
	      px.shift();
	      px.push(pi[0]);
	      py.shift();
	      py.push(pi[1]);
	      d3_svg_lineBasisBezier(path, px, py);
	    }
	    points.pop();
	    path.push("L", pi);
	    return path.join("");
	  }
	  function d3_svg_lineBasisOpen(points) {
	    if (points.length < 4) return d3_svg_lineLinear(points);
	    var path = [], i = -1, n = points.length, pi, px = [ 0 ], py = [ 0 ];
	    while (++i < 3) {
	      pi = points[i];
	      px.push(pi[0]);
	      py.push(pi[1]);
	    }
	    path.push(d3_svg_lineDot4(d3_svg_lineBasisBezier3, px) + "," + d3_svg_lineDot4(d3_svg_lineBasisBezier3, py));
	    --i;
	    while (++i < n) {
	      pi = points[i];
	      px.shift();
	      px.push(pi[0]);
	      py.shift();
	      py.push(pi[1]);
	      d3_svg_lineBasisBezier(path, px, py);
	    }
	    return path.join("");
	  }
	  function d3_svg_lineBasisClosed(points) {
	    var path, i = -1, n = points.length, m = n + 4, pi, px = [], py = [];
	    while (++i < 4) {
	      pi = points[i % n];
	      px.push(pi[0]);
	      py.push(pi[1]);
	    }
	    path = [ d3_svg_lineDot4(d3_svg_lineBasisBezier3, px), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier3, py) ];
	    --i;
	    while (++i < m) {
	      pi = points[i % n];
	      px.shift();
	      px.push(pi[0]);
	      py.shift();
	      py.push(pi[1]);
	      d3_svg_lineBasisBezier(path, px, py);
	    }
	    return path.join("");
	  }
	  function d3_svg_lineBundle(points, tension) {
	    var n = points.length - 1;
	    if (n) {
	      var x0 = points[0][0], y0 = points[0][1], dx = points[n][0] - x0, dy = points[n][1] - y0, i = -1, p, t;
	      while (++i <= n) {
	        p = points[i];
	        t = i / n;
	        p[0] = tension * p[0] + (1 - tension) * (x0 + t * dx);
	        p[1] = tension * p[1] + (1 - tension) * (y0 + t * dy);
	      }
	    }
	    return d3_svg_lineBasis(points);
	  }
	  function d3_svg_lineDot4(a, b) {
	    return a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3];
	  }
	  var d3_svg_lineBasisBezier1 = [ 0, 2 / 3, 1 / 3, 0 ], d3_svg_lineBasisBezier2 = [ 0, 1 / 3, 2 / 3, 0 ], d3_svg_lineBasisBezier3 = [ 0, 1 / 6, 2 / 3, 1 / 6 ];
	  function d3_svg_lineBasisBezier(path, x, y) {
	    path.push("C", d3_svg_lineDot4(d3_svg_lineBasisBezier1, x), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier1, y), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier2, x), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier2, y), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier3, x), ",", d3_svg_lineDot4(d3_svg_lineBasisBezier3, y));
	  }
	  function d3_svg_lineSlope(p0, p1) {
	    return (p1[1] - p0[1]) / (p1[0] - p0[0]);
	  }
	  function d3_svg_lineFiniteDifferences(points) {
	    var i = 0, j = points.length - 1, m = [], p0 = points[0], p1 = points[1], d = m[0] = d3_svg_lineSlope(p0, p1);
	    while (++i < j) {
	      m[i] = (d + (d = d3_svg_lineSlope(p0 = p1, p1 = points[i + 1]))) / 2;
	    }
	    m[i] = d;
	    return m;
	  }
	  function d3_svg_lineMonotoneTangents(points) {
	    var tangents = [], d, a, b, s, m = d3_svg_lineFiniteDifferences(points), i = -1, j = points.length - 1;
	    while (++i < j) {
	      d = d3_svg_lineSlope(points[i], points[i + 1]);
	      if (abs(d) < ε) {
	        m[i] = m[i + 1] = 0;
	      } else {
	        a = m[i] / d;
	        b = m[i + 1] / d;
	        s = a * a + b * b;
	        if (s > 9) {
	          s = d * 3 / Math.sqrt(s);
	          m[i] = s * a;
	          m[i + 1] = s * b;
	        }
	      }
	    }
	    i = -1;
	    while (++i <= j) {
	      s = (points[Math.min(j, i + 1)][0] - points[Math.max(0, i - 1)][0]) / (6 * (1 + m[i] * m[i]));
	      tangents.push([ s || 0, m[i] * s || 0 ]);
	    }
	    return tangents;
	  }
	  function d3_svg_lineMonotone(points) {
	    return points.length < 3 ? d3_svg_lineLinear(points) : points[0] + d3_svg_lineHermite(points, d3_svg_lineMonotoneTangents(points));
	  }
	  d3.svg.line.radial = function() {
	    var line = d3_svg_line(d3_svg_lineRadial);
	    line.radius = line.x, delete line.x;
	    line.angle = line.y, delete line.y;
	    return line;
	  };
	  function d3_svg_lineRadial(points) {
	    var point, i = -1, n = points.length, r, a;
	    while (++i < n) {
	      point = points[i];
	      r = point[0];
	      a = point[1] - halfπ;
	      point[0] = r * Math.cos(a);
	      point[1] = r * Math.sin(a);
	    }
	    return points;
	  }
	  function d3_svg_area(projection) {
	    var x0 = d3_geom_pointX, x1 = d3_geom_pointX, y0 = 0, y1 = d3_geom_pointY, defined = d3_true, interpolate = d3_svg_lineLinear, interpolateKey = interpolate.key, interpolateReverse = interpolate, L = "L", tension = .7;
	    function area(data) {
	      var segments = [], points0 = [], points1 = [], i = -1, n = data.length, d, fx0 = d3_functor(x0), fy0 = d3_functor(y0), fx1 = x0 === x1 ? function() {
	        return x;
	      } : d3_functor(x1), fy1 = y0 === y1 ? function() {
	        return y;
	      } : d3_functor(y1), x, y;
	      function segment() {
	        segments.push("M", interpolate(projection(points1), tension), L, interpolateReverse(projection(points0.reverse()), tension), "Z");
	      }
	      while (++i < n) {
	        if (defined.call(this, d = data[i], i)) {
	          points0.push([ x = +fx0.call(this, d, i), y = +fy0.call(this, d, i) ]);
	          points1.push([ +fx1.call(this, d, i), +fy1.call(this, d, i) ]);
	        } else if (points0.length) {
	          segment();
	          points0 = [];
	          points1 = [];
	        }
	      }
	      if (points0.length) segment();
	      return segments.length ? segments.join("") : null;
	    }
	    area.x = function(_) {
	      if (!arguments.length) return x1;
	      x0 = x1 = _;
	      return area;
	    };
	    area.x0 = function(_) {
	      if (!arguments.length) return x0;
	      x0 = _;
	      return area;
	    };
	    area.x1 = function(_) {
	      if (!arguments.length) return x1;
	      x1 = _;
	      return area;
	    };
	    area.y = function(_) {
	      if (!arguments.length) return y1;
	      y0 = y1 = _;
	      return area;
	    };
	    area.y0 = function(_) {
	      if (!arguments.length) return y0;
	      y0 = _;
	      return area;
	    };
	    area.y1 = function(_) {
	      if (!arguments.length) return y1;
	      y1 = _;
	      return area;
	    };
	    area.defined = function(_) {
	      if (!arguments.length) return defined;
	      defined = _;
	      return area;
	    };
	    area.interpolate = function(_) {
	      if (!arguments.length) return interpolateKey;
	      if (typeof _ === "function") interpolateKey = interpolate = _; else interpolateKey = (interpolate = d3_svg_lineInterpolators.get(_) || d3_svg_lineLinear).key;
	      interpolateReverse = interpolate.reverse || interpolate;
	      L = interpolate.closed ? "M" : "L";
	      return area;
	    };
	    area.tension = function(_) {
	      if (!arguments.length) return tension;
	      tension = _;
	      return area;
	    };
	    return area;
	  }
	  d3_svg_lineStepBefore.reverse = d3_svg_lineStepAfter;
	  d3_svg_lineStepAfter.reverse = d3_svg_lineStepBefore;
	  d3.svg.area = function() {
	    return d3_svg_area(d3_identity);
	  };
	  d3.svg.area.radial = function() {
	    var area = d3_svg_area(d3_svg_lineRadial);
	    area.radius = area.x, delete area.x;
	    area.innerRadius = area.x0, delete area.x0;
	    area.outerRadius = area.x1, delete area.x1;
	    area.angle = area.y, delete area.y;
	    area.startAngle = area.y0, delete area.y0;
	    area.endAngle = area.y1, delete area.y1;
	    return area;
	  };
	  d3.svg.chord = function() {
	    var source = d3_source, target = d3_target, radius = d3_svg_chordRadius, startAngle = d3_svg_arcStartAngle, endAngle = d3_svg_arcEndAngle;
	    function chord(d, i) {
	      var s = subgroup(this, source, d, i), t = subgroup(this, target, d, i);
	      return "M" + s.p0 + arc(s.r, s.p1, s.a1 - s.a0) + (equals(s, t) ? curve(s.r, s.p1, s.r, s.p0) : curve(s.r, s.p1, t.r, t.p0) + arc(t.r, t.p1, t.a1 - t.a0) + curve(t.r, t.p1, s.r, s.p0)) + "Z";
	    }
	    function subgroup(self, f, d, i) {
	      var subgroup = f.call(self, d, i), r = radius.call(self, subgroup, i), a0 = startAngle.call(self, subgroup, i) - halfπ, a1 = endAngle.call(self, subgroup, i) - halfπ;
	      return {
	        r: r,
	        a0: a0,
	        a1: a1,
	        p0: [ r * Math.cos(a0), r * Math.sin(a0) ],
	        p1: [ r * Math.cos(a1), r * Math.sin(a1) ]
	      };
	    }
	    function equals(a, b) {
	      return a.a0 == b.a0 && a.a1 == b.a1;
	    }
	    function arc(r, p, a) {
	      return "A" + r + "," + r + " 0 " + +(a > π) + ",1 " + p;
	    }
	    function curve(r0, p0, r1, p1) {
	      return "Q 0,0 " + p1;
	    }
	    chord.radius = function(v) {
	      if (!arguments.length) return radius;
	      radius = d3_functor(v);
	      return chord;
	    };
	    chord.source = function(v) {
	      if (!arguments.length) return source;
	      source = d3_functor(v);
	      return chord;
	    };
	    chord.target = function(v) {
	      if (!arguments.length) return target;
	      target = d3_functor(v);
	      return chord;
	    };
	    chord.startAngle = function(v) {
	      if (!arguments.length) return startAngle;
	      startAngle = d3_functor(v);
	      return chord;
	    };
	    chord.endAngle = function(v) {
	      if (!arguments.length) return endAngle;
	      endAngle = d3_functor(v);
	      return chord;
	    };
	    return chord;
	  };
	  function d3_svg_chordRadius(d) {
	    return d.radius;
	  }
	  d3.svg.diagonal = function() {
	    var source = d3_source, target = d3_target, projection = d3_svg_diagonalProjection;
	    function diagonal(d, i) {
	      var p0 = source.call(this, d, i), p3 = target.call(this, d, i), m = (p0.y + p3.y) / 2, p = [ p0, {
	        x: p0.x,
	        y: m
	      }, {
	        x: p3.x,
	        y: m
	      }, p3 ];
	      p = p.map(projection);
	      return "M" + p[0] + "C" + p[1] + " " + p[2] + " " + p[3];
	    }
	    diagonal.source = function(x) {
	      if (!arguments.length) return source;
	      source = d3_functor(x);
	      return diagonal;
	    };
	    diagonal.target = function(x) {
	      if (!arguments.length) return target;
	      target = d3_functor(x);
	      return diagonal;
	    };
	    diagonal.projection = function(x) {
	      if (!arguments.length) return projection;
	      projection = x;
	      return diagonal;
	    };
	    return diagonal;
	  };
	  function d3_svg_diagonalProjection(d) {
	    return [ d.x, d.y ];
	  }
	  d3.svg.diagonal.radial = function() {
	    var diagonal = d3.svg.diagonal(), projection = d3_svg_diagonalProjection, projection_ = diagonal.projection;
	    diagonal.projection = function(x) {
	      return arguments.length ? projection_(d3_svg_diagonalRadialProjection(projection = x)) : projection;
	    };
	    return diagonal;
	  };
	  function d3_svg_diagonalRadialProjection(projection) {
	    return function() {
	      var d = projection.apply(this, arguments), r = d[0], a = d[1] - halfπ;
	      return [ r * Math.cos(a), r * Math.sin(a) ];
	    };
	  }
	  d3.svg.symbol = function() {
	    var type = d3_svg_symbolType, size = d3_svg_symbolSize;
	    function symbol(d, i) {
	      return (d3_svg_symbols.get(type.call(this, d, i)) || d3_svg_symbolCircle)(size.call(this, d, i));
	    }
	    symbol.type = function(x) {
	      if (!arguments.length) return type;
	      type = d3_functor(x);
	      return symbol;
	    };
	    symbol.size = function(x) {
	      if (!arguments.length) return size;
	      size = d3_functor(x);
	      return symbol;
	    };
	    return symbol;
	  };
	  function d3_svg_symbolSize() {
	    return 64;
	  }
	  function d3_svg_symbolType() {
	    return "circle";
	  }
	  function d3_svg_symbolCircle(size) {
	    var r = Math.sqrt(size / π);
	    return "M0," + r + "A" + r + "," + r + " 0 1,1 0," + -r + "A" + r + "," + r + " 0 1,1 0," + r + "Z";
	  }
	  var d3_svg_symbols = d3.map({
	    circle: d3_svg_symbolCircle,
	    cross: function(size) {
	      var r = Math.sqrt(size / 5) / 2;
	      return "M" + -3 * r + "," + -r + "H" + -r + "V" + -3 * r + "H" + r + "V" + -r + "H" + 3 * r + "V" + r + "H" + r + "V" + 3 * r + "H" + -r + "V" + r + "H" + -3 * r + "Z";
	    },
	    diamond: function(size) {
	      var ry = Math.sqrt(size / (2 * d3_svg_symbolTan30)), rx = ry * d3_svg_symbolTan30;
	      return "M0," + -ry + "L" + rx + ",0" + " 0," + ry + " " + -rx + ",0" + "Z";
	    },
	    square: function(size) {
	      var r = Math.sqrt(size) / 2;
	      return "M" + -r + "," + -r + "L" + r + "," + -r + " " + r + "," + r + " " + -r + "," + r + "Z";
	    },
	    "triangle-down": function(size) {
	      var rx = Math.sqrt(size / d3_svg_symbolSqrt3), ry = rx * d3_svg_symbolSqrt3 / 2;
	      return "M0," + ry + "L" + rx + "," + -ry + " " + -rx + "," + -ry + "Z";
	    },
	    "triangle-up": function(size) {
	      var rx = Math.sqrt(size / d3_svg_symbolSqrt3), ry = rx * d3_svg_symbolSqrt3 / 2;
	      return "M0," + -ry + "L" + rx + "," + ry + " " + -rx + "," + ry + "Z";
	    }
	  });
	  d3.svg.symbolTypes = d3_svg_symbols.keys();
	  var d3_svg_symbolSqrt3 = Math.sqrt(3), d3_svg_symbolTan30 = Math.tan(30 * d3_radians);
	  d3_selectionPrototype.transition = function(name) {
	    var id = d3_transitionInheritId || ++d3_transitionId, ns = d3_transitionNamespace(name), subgroups = [], subgroup, node, transition = d3_transitionInherit || {
	      time: Date.now(),
	      ease: d3_ease_cubicInOut,
	      delay: 0,
	      duration: 250
	    };
	    for (var j = -1, m = this.length; ++j < m; ) {
	      subgroups.push(subgroup = []);
	      for (var group = this[j], i = -1, n = group.length; ++i < n; ) {
	        if (node = group[i]) d3_transitionNode(node, i, ns, id, transition);
	        subgroup.push(node);
	      }
	    }
	    return d3_transition(subgroups, ns, id);
	  };
	  d3_selectionPrototype.interrupt = function(name) {
	    return this.each(name == null ? d3_selection_interrupt : d3_selection_interruptNS(d3_transitionNamespace(name)));
	  };
	  var d3_selection_interrupt = d3_selection_interruptNS(d3_transitionNamespace());
	  function d3_selection_interruptNS(ns) {
	    return function() {
	      var lock, activeId, active;
	      if ((lock = this[ns]) && (active = lock[activeId = lock.active])) {
	        active.timer.c = null;
	        active.timer.t = NaN;
	        if (--lock.count) delete lock[activeId]; else delete this[ns];
	        lock.active += .5;
	        active.event && active.event.interrupt.call(this, this.__data__, active.index);
	      }
	    };
	  }
	  function d3_transition(groups, ns, id) {
	    d3_subclass(groups, d3_transitionPrototype);
	    groups.namespace = ns;
	    groups.id = id;
	    return groups;
	  }
	  var d3_transitionPrototype = [], d3_transitionId = 0, d3_transitionInheritId, d3_transitionInherit;
	  d3_transitionPrototype.call = d3_selectionPrototype.call;
	  d3_transitionPrototype.empty = d3_selectionPrototype.empty;
	  d3_transitionPrototype.node = d3_selectionPrototype.node;
	  d3_transitionPrototype.size = d3_selectionPrototype.size;
	  d3.transition = function(selection, name) {
	    return selection && selection.transition ? d3_transitionInheritId ? selection.transition(name) : selection : d3.selection().transition(selection);
	  };
	  d3.transition.prototype = d3_transitionPrototype;
	  d3_transitionPrototype.select = function(selector) {
	    var id = this.id, ns = this.namespace, subgroups = [], subgroup, subnode, node;
	    selector = d3_selection_selector(selector);
	    for (var j = -1, m = this.length; ++j < m; ) {
	      subgroups.push(subgroup = []);
	      for (var group = this[j], i = -1, n = group.length; ++i < n; ) {
	        if ((node = group[i]) && (subnode = selector.call(node, node.__data__, i, j))) {
	          if ("__data__" in node) subnode.__data__ = node.__data__;
	          d3_transitionNode(subnode, i, ns, id, node[ns][id]);
	          subgroup.push(subnode);
	        } else {
	          subgroup.push(null);
	        }
	      }
	    }
	    return d3_transition(subgroups, ns, id);
	  };
	  d3_transitionPrototype.selectAll = function(selector) {
	    var id = this.id, ns = this.namespace, subgroups = [], subgroup, subnodes, node, subnode, transition;
	    selector = d3_selection_selectorAll(selector);
	    for (var j = -1, m = this.length; ++j < m; ) {
	      for (var group = this[j], i = -1, n = group.length; ++i < n; ) {
	        if (node = group[i]) {
	          transition = node[ns][id];
	          subnodes = selector.call(node, node.__data__, i, j);
	          subgroups.push(subgroup = []);
	          for (var k = -1, o = subnodes.length; ++k < o; ) {
	            if (subnode = subnodes[k]) d3_transitionNode(subnode, k, ns, id, transition);
	            subgroup.push(subnode);
	          }
	        }
	      }
	    }
	    return d3_transition(subgroups, ns, id);
	  };
	  d3_transitionPrototype.filter = function(filter) {
	    var subgroups = [], subgroup, group, node;
	    if (typeof filter !== "function") filter = d3_selection_filter(filter);
	    for (var j = 0, m = this.length; j < m; j++) {
	      subgroups.push(subgroup = []);
	      for (var group = this[j], i = 0, n = group.length; i < n; i++) {
	        if ((node = group[i]) && filter.call(node, node.__data__, i, j)) {
	          subgroup.push(node);
	        }
	      }
	    }
	    return d3_transition(subgroups, this.namespace, this.id);
	  };
	  d3_transitionPrototype.tween = function(name, tween) {
	    var id = this.id, ns = this.namespace;
	    if (arguments.length < 2) return this.node()[ns][id].tween.get(name);
	    return d3_selection_each(this, tween == null ? function(node) {
	      node[ns][id].tween.remove(name);
	    } : function(node) {
	      node[ns][id].tween.set(name, tween);
	    });
	  };
	  function d3_transition_tween(groups, name, value, tween) {
	    var id = groups.id, ns = groups.namespace;
	    return d3_selection_each(groups, typeof value === "function" ? function(node, i, j) {
	      node[ns][id].tween.set(name, tween(value.call(node, node.__data__, i, j)));
	    } : (value = tween(value), function(node) {
	      node[ns][id].tween.set(name, value);
	    }));
	  }
	  d3_transitionPrototype.attr = function(nameNS, value) {
	    if (arguments.length < 2) {
	      for (value in nameNS) this.attr(value, nameNS[value]);
	      return this;
	    }
	    var interpolate = nameNS == "transform" ? d3_interpolateTransform : d3_interpolate, name = d3.ns.qualify(nameNS);
	    function attrNull() {
	      this.removeAttribute(name);
	    }
	    function attrNullNS() {
	      this.removeAttributeNS(name.space, name.local);
	    }
	    function attrTween(b) {
	      return b == null ? attrNull : (b += "", function() {
	        var a = this.getAttribute(name), i;
	        return a !== b && (i = interpolate(a, b), function(t) {
	          this.setAttribute(name, i(t));
	        });
	      });
	    }
	    function attrTweenNS(b) {
	      return b == null ? attrNullNS : (b += "", function() {
	        var a = this.getAttributeNS(name.space, name.local), i;
	        return a !== b && (i = interpolate(a, b), function(t) {
	          this.setAttributeNS(name.space, name.local, i(t));
	        });
	      });
	    }
	    return d3_transition_tween(this, "attr." + nameNS, value, name.local ? attrTweenNS : attrTween);
	  };
	  d3_transitionPrototype.attrTween = function(nameNS, tween) {
	    var name = d3.ns.qualify(nameNS);
	    function attrTween(d, i) {
	      var f = tween.call(this, d, i, this.getAttribute(name));
	      return f && function(t) {
	        this.setAttribute(name, f(t));
	      };
	    }
	    function attrTweenNS(d, i) {
	      var f = tween.call(this, d, i, this.getAttributeNS(name.space, name.local));
	      return f && function(t) {
	        this.setAttributeNS(name.space, name.local, f(t));
	      };
	    }
	    return this.tween("attr." + nameNS, name.local ? attrTweenNS : attrTween);
	  };
	  d3_transitionPrototype.style = function(name, value, priority) {
	    var n = arguments.length;
	    if (n < 3) {
	      if (typeof name !== "string") {
	        if (n < 2) value = "";
	        for (priority in name) this.style(priority, name[priority], value);
	        return this;
	      }
	      priority = "";
	    }
	    function styleNull() {
	      this.style.removeProperty(name);
	    }
	    function styleString(b) {
	      return b == null ? styleNull : (b += "", function() {
	        var a = d3_window(this).getComputedStyle(this, null).getPropertyValue(name), i;
	        return a !== b && (i = d3_interpolate(a, b), function(t) {
	          this.style.setProperty(name, i(t), priority);
	        });
	      });
	    }
	    return d3_transition_tween(this, "style." + name, value, styleString);
	  };
	  d3_transitionPrototype.styleTween = function(name, tween, priority) {
	    if (arguments.length < 3) priority = "";
	    function styleTween(d, i) {
	      var f = tween.call(this, d, i, d3_window(this).getComputedStyle(this, null).getPropertyValue(name));
	      return f && function(t) {
	        this.style.setProperty(name, f(t), priority);
	      };
	    }
	    return this.tween("style." + name, styleTween);
	  };
	  d3_transitionPrototype.text = function(value) {
	    return d3_transition_tween(this, "text", value, d3_transition_text);
	  };
	  function d3_transition_text(b) {
	    if (b == null) b = "";
	    return function() {
	      this.textContent = b;
	    };
	  }
	  d3_transitionPrototype.remove = function() {
	    var ns = this.namespace;
	    return this.each("end.transition", function() {
	      var p;
	      if (this[ns].count < 2 && (p = this.parentNode)) p.removeChild(this);
	    });
	  };
	  d3_transitionPrototype.ease = function(value) {
	    var id = this.id, ns = this.namespace;
	    if (arguments.length < 1) return this.node()[ns][id].ease;
	    if (typeof value !== "function") value = d3.ease.apply(d3, arguments);
	    return d3_selection_each(this, function(node) {
	      node[ns][id].ease = value;
	    });
	  };
	  d3_transitionPrototype.delay = function(value) {
	    var id = this.id, ns = this.namespace;
	    if (arguments.length < 1) return this.node()[ns][id].delay;
	    return d3_selection_each(this, typeof value === "function" ? function(node, i, j) {
	      node[ns][id].delay = +value.call(node, node.__data__, i, j);
	    } : (value = +value, function(node) {
	      node[ns][id].delay = value;
	    }));
	  };
	  d3_transitionPrototype.duration = function(value) {
	    var id = this.id, ns = this.namespace;
	    if (arguments.length < 1) return this.node()[ns][id].duration;
	    return d3_selection_each(this, typeof value === "function" ? function(node, i, j) {
	      node[ns][id].duration = Math.max(1, value.call(node, node.__data__, i, j));
	    } : (value = Math.max(1, value), function(node) {
	      node[ns][id].duration = value;
	    }));
	  };
	  d3_transitionPrototype.each = function(type, listener) {
	    var id = this.id, ns = this.namespace;
	    if (arguments.length < 2) {
	      var inherit = d3_transitionInherit, inheritId = d3_transitionInheritId;
	      try {
	        d3_transitionInheritId = id;
	        d3_selection_each(this, function(node, i, j) {
	          d3_transitionInherit = node[ns][id];
	          type.call(node, node.__data__, i, j);
	        });
	      } finally {
	        d3_transitionInherit = inherit;
	        d3_transitionInheritId = inheritId;
	      }
	    } else {
	      d3_selection_each(this, function(node) {
	        var transition = node[ns][id];
	        (transition.event || (transition.event = d3.dispatch("start", "end", "interrupt"))).on(type, listener);
	      });
	    }
	    return this;
	  };
	  d3_transitionPrototype.transition = function() {
	    var id0 = this.id, id1 = ++d3_transitionId, ns = this.namespace, subgroups = [], subgroup, group, node, transition;
	    for (var j = 0, m = this.length; j < m; j++) {
	      subgroups.push(subgroup = []);
	      for (var group = this[j], i = 0, n = group.length; i < n; i++) {
	        if (node = group[i]) {
	          transition = node[ns][id0];
	          d3_transitionNode(node, i, ns, id1, {
	            time: transition.time,
	            ease: transition.ease,
	            delay: transition.delay + transition.duration,
	            duration: transition.duration
	          });
	        }
	        subgroup.push(node);
	      }
	    }
	    return d3_transition(subgroups, ns, id1);
	  };
	  function d3_transitionNamespace(name) {
	    return name == null ? "__transition__" : "__transition_" + name + "__";
	  }
	  function d3_transitionNode(node, i, ns, id, inherit) {
	    var lock = node[ns] || (node[ns] = {
	      active: 0,
	      count: 0
	    }), transition = lock[id], time, timer, duration, ease, tweens;
	    function schedule(elapsed) {
	      var delay = transition.delay;
	      timer.t = delay + time;
	      if (delay <= elapsed) return start(elapsed - delay);
	      timer.c = start;
	    }
	    function start(elapsed) {
	      var activeId = lock.active, active = lock[activeId];
	      if (active) {
	        active.timer.c = null;
	        active.timer.t = NaN;
	        --lock.count;
	        delete lock[activeId];
	        active.event && active.event.interrupt.call(node, node.__data__, active.index);
	      }
	      for (var cancelId in lock) {
	        if (+cancelId < id) {
	          var cancel = lock[cancelId];
	          cancel.timer.c = null;
	          cancel.timer.t = NaN;
	          --lock.count;
	          delete lock[cancelId];
	        }
	      }
	      timer.c = tick;
	      d3_timer(function() {
	        if (timer.c && tick(elapsed || 1)) {
	          timer.c = null;
	          timer.t = NaN;
	        }
	        return 1;
	      }, 0, time);
	      lock.active = id;
	      transition.event && transition.event.start.call(node, node.__data__, i);
	      tweens = [];
	      transition.tween.forEach(function(key, value) {
	        if (value = value.call(node, node.__data__, i)) {
	          tweens.push(value);
	        }
	      });
	      ease = transition.ease;
	      duration = transition.duration;
	    }
	    function tick(elapsed) {
	      var t = elapsed / duration, e = ease(t), n = tweens.length;
	      while (n > 0) {
	        tweens[--n].call(node, e);
	      }
	      if (t >= 1) {
	        transition.event && transition.event.end.call(node, node.__data__, i);
	        if (--lock.count) delete lock[id]; else delete node[ns];
	        return 1;
	      }
	    }
	    if (!transition) {
	      time = inherit.time;
	      timer = d3_timer(schedule, 0, time);
	      transition = lock[id] = {
	        tween: new d3_Map(),
	        time: time,
	        timer: timer,
	        delay: inherit.delay,
	        duration: inherit.duration,
	        ease: inherit.ease,
	        index: i
	      };
	      inherit = null;
	      ++lock.count;
	    }
	  }
	  d3.svg.axis = function() {
	    var scale = d3.scale.linear(), orient = d3_svg_axisDefaultOrient, innerTickSize = 6, outerTickSize = 6, tickPadding = 3, tickArguments_ = [ 10 ], tickValues = null, tickFormat_;
	    function axis(g) {
	      g.each(function() {
	        var g = d3.select(this);
	        var scale0 = this.__chart__ || scale, scale1 = this.__chart__ = scale.copy();
	        var ticks = tickValues == null ? scale1.ticks ? scale1.ticks.apply(scale1, tickArguments_) : scale1.domain() : tickValues, tickFormat = tickFormat_ == null ? scale1.tickFormat ? scale1.tickFormat.apply(scale1, tickArguments_) : d3_identity : tickFormat_, tick = g.selectAll(".tick").data(ticks, scale1), tickEnter = tick.enter().insert("g", ".domain").attr("class", "tick").style("opacity", ε), tickExit = d3.transition(tick.exit()).style("opacity", ε).remove(), tickUpdate = d3.transition(tick.order()).style("opacity", 1), tickSpacing = Math.max(innerTickSize, 0) + tickPadding, tickTransform;
	        var range = d3_scaleRange(scale1), path = g.selectAll(".domain").data([ 0 ]), pathUpdate = (path.enter().append("path").attr("class", "domain"), 
	        d3.transition(path));
	        tickEnter.append("line");
	        tickEnter.append("text");
	        var lineEnter = tickEnter.select("line"), lineUpdate = tickUpdate.select("line"), text = tick.select("text").text(tickFormat), textEnter = tickEnter.select("text"), textUpdate = tickUpdate.select("text"), sign = orient === "top" || orient === "left" ? -1 : 1, x1, x2, y1, y2;
	        if (orient === "bottom" || orient === "top") {
	          tickTransform = d3_svg_axisX, x1 = "x", y1 = "y", x2 = "x2", y2 = "y2";
	          text.attr("dy", sign < 0 ? "0em" : ".71em").style("text-anchor", "middle");
	          pathUpdate.attr("d", "M" + range[0] + "," + sign * outerTickSize + "V0H" + range[1] + "V" + sign * outerTickSize);
	        } else {
	          tickTransform = d3_svg_axisY, x1 = "y", y1 = "x", x2 = "y2", y2 = "x2";
	          text.attr("dy", ".32em").style("text-anchor", sign < 0 ? "end" : "start");
	          pathUpdate.attr("d", "M" + sign * outerTickSize + "," + range[0] + "H0V" + range[1] + "H" + sign * outerTickSize);
	        }
	        lineEnter.attr(y2, sign * innerTickSize);
	        textEnter.attr(y1, sign * tickSpacing);
	        lineUpdate.attr(x2, 0).attr(y2, sign * innerTickSize);
	        textUpdate.attr(x1, 0).attr(y1, sign * tickSpacing);
	        if (scale1.rangeBand) {
	          var x = scale1, dx = x.rangeBand() / 2;
	          scale0 = scale1 = function(d) {
	            return x(d) + dx;
	          };
	        } else if (scale0.rangeBand) {
	          scale0 = scale1;
	        } else {
	          tickExit.call(tickTransform, scale1, scale0);
	        }
	        tickEnter.call(tickTransform, scale0, scale1);
	        tickUpdate.call(tickTransform, scale1, scale1);
	      });
	    }
	    axis.scale = function(x) {
	      if (!arguments.length) return scale;
	      scale = x;
	      return axis;
	    };
	    axis.orient = function(x) {
	      if (!arguments.length) return orient;
	      orient = x in d3_svg_axisOrients ? x + "" : d3_svg_axisDefaultOrient;
	      return axis;
	    };
	    axis.ticks = function() {
	      if (!arguments.length) return tickArguments_;
	      tickArguments_ = d3_array(arguments);
	      return axis;
	    };
	    axis.tickValues = function(x) {
	      if (!arguments.length) return tickValues;
	      tickValues = x;
	      return axis;
	    };
	    axis.tickFormat = function(x) {
	      if (!arguments.length) return tickFormat_;
	      tickFormat_ = x;
	      return axis;
	    };
	    axis.tickSize = function(x) {
	      var n = arguments.length;
	      if (!n) return innerTickSize;
	      innerTickSize = +x;
	      outerTickSize = +arguments[n - 1];
	      return axis;
	    };
	    axis.innerTickSize = function(x) {
	      if (!arguments.length) return innerTickSize;
	      innerTickSize = +x;
	      return axis;
	    };
	    axis.outerTickSize = function(x) {
	      if (!arguments.length) return outerTickSize;
	      outerTickSize = +x;
	      return axis;
	    };
	    axis.tickPadding = function(x) {
	      if (!arguments.length) return tickPadding;
	      tickPadding = +x;
	      return axis;
	    };
	    axis.tickSubdivide = function() {
	      return arguments.length && axis;
	    };
	    return axis;
	  };
	  var d3_svg_axisDefaultOrient = "bottom", d3_svg_axisOrients = {
	    top: 1,
	    right: 1,
	    bottom: 1,
	    left: 1
	  };
	  function d3_svg_axisX(selection, x0, x1) {
	    selection.attr("transform", function(d) {
	      var v0 = x0(d);
	      return "translate(" + (isFinite(v0) ? v0 : x1(d)) + ",0)";
	    });
	  }
	  function d3_svg_axisY(selection, y0, y1) {
	    selection.attr("transform", function(d) {
	      var v0 = y0(d);
	      return "translate(0," + (isFinite(v0) ? v0 : y1(d)) + ")";
	    });
	  }
	  d3.svg.brush = function() {
	    var event = d3_eventDispatch(brush, "brushstart", "brush", "brushend"), x = null, y = null, xExtent = [ 0, 0 ], yExtent = [ 0, 0 ], xExtentDomain, yExtentDomain, xClamp = true, yClamp = true, resizes = d3_svg_brushResizes[0];
	    function brush(g) {
	      g.each(function() {
	        var g = d3.select(this).style("pointer-events", "all").style("-webkit-tap-highlight-color", "rgba(0,0,0,0)").on("mousedown.brush", brushstart).on("touchstart.brush", brushstart);
	        var background = g.selectAll(".background").data([ 0 ]);
	        background.enter().append("rect").attr("class", "background").style("visibility", "hidden").style("cursor", "crosshair");
	        g.selectAll(".extent").data([ 0 ]).enter().append("rect").attr("class", "extent").style("cursor", "move");
	        var resize = g.selectAll(".resize").data(resizes, d3_identity);
	        resize.exit().remove();
	        resize.enter().append("g").attr("class", function(d) {
	          return "resize " + d;
	        }).style("cursor", function(d) {
	          return d3_svg_brushCursor[d];
	        }).append("rect").attr("x", function(d) {
	          return /[ew]$/.test(d) ? -3 : null;
	        }).attr("y", function(d) {
	          return /^[ns]/.test(d) ? -3 : null;
	        }).attr("width", 6).attr("height", 6).style("visibility", "hidden");
	        resize.style("display", brush.empty() ? "none" : null);
	        var gUpdate = d3.transition(g), backgroundUpdate = d3.transition(background), range;
	        if (x) {
	          range = d3_scaleRange(x);
	          backgroundUpdate.attr("x", range[0]).attr("width", range[1] - range[0]);
	          redrawX(gUpdate);
	        }
	        if (y) {
	          range = d3_scaleRange(y);
	          backgroundUpdate.attr("y", range[0]).attr("height", range[1] - range[0]);
	          redrawY(gUpdate);
	        }
	        redraw(gUpdate);
	      });
	    }
	    brush.event = function(g) {
	      g.each(function() {
	        var event_ = event.of(this, arguments), extent1 = {
	          x: xExtent,
	          y: yExtent,
	          i: xExtentDomain,
	          j: yExtentDomain
	        }, extent0 = this.__chart__ || extent1;
	        this.__chart__ = extent1;
	        if (d3_transitionInheritId) {
	          d3.select(this).transition().each("start.brush", function() {
	            xExtentDomain = extent0.i;
	            yExtentDomain = extent0.j;
	            xExtent = extent0.x;
	            yExtent = extent0.y;
	            event_({
	              type: "brushstart"
	            });
	          }).tween("brush:brush", function() {
	            var xi = d3_interpolateArray(xExtent, extent1.x), yi = d3_interpolateArray(yExtent, extent1.y);
	            xExtentDomain = yExtentDomain = null;
	            return function(t) {
	              xExtent = extent1.x = xi(t);
	              yExtent = extent1.y = yi(t);
	              event_({
	                type: "brush",
	                mode: "resize"
	              });
	            };
	          }).each("end.brush", function() {
	            xExtentDomain = extent1.i;
	            yExtentDomain = extent1.j;
	            event_({
	              type: "brush",
	              mode: "resize"
	            });
	            event_({
	              type: "brushend"
	            });
	          });
	        } else {
	          event_({
	            type: "brushstart"
	          });
	          event_({
	            type: "brush",
	            mode: "resize"
	          });
	          event_({
	            type: "brushend"
	          });
	        }
	      });
	    };
	    function redraw(g) {
	      g.selectAll(".resize").attr("transform", function(d) {
	        return "translate(" + xExtent[+/e$/.test(d)] + "," + yExtent[+/^s/.test(d)] + ")";
	      });
	    }
	    function redrawX(g) {
	      g.select(".extent").attr("x", xExtent[0]);
	      g.selectAll(".extent,.n>rect,.s>rect").attr("width", xExtent[1] - xExtent[0]);
	    }
	    function redrawY(g) {
	      g.select(".extent").attr("y", yExtent[0]);
	      g.selectAll(".extent,.e>rect,.w>rect").attr("height", yExtent[1] - yExtent[0]);
	    }
	    function brushstart() {
	      var target = this, eventTarget = d3.select(d3.event.target), event_ = event.of(target, arguments), g = d3.select(target), resizing = eventTarget.datum(), resizingX = !/^(n|s)$/.test(resizing) && x, resizingY = !/^(e|w)$/.test(resizing) && y, dragging = eventTarget.classed("extent"), dragRestore = d3_event_dragSuppress(target), center, origin = d3.mouse(target), offset;
	      var w = d3.select(d3_window(target)).on("keydown.brush", keydown).on("keyup.brush", keyup);
	      if (d3.event.changedTouches) {
	        w.on("touchmove.brush", brushmove).on("touchend.brush", brushend);
	      } else {
	        w.on("mousemove.brush", brushmove).on("mouseup.brush", brushend);
	      }
	      g.interrupt().selectAll("*").interrupt();
	      if (dragging) {
	        origin[0] = xExtent[0] - origin[0];
	        origin[1] = yExtent[0] - origin[1];
	      } else if (resizing) {
	        var ex = +/w$/.test(resizing), ey = +/^n/.test(resizing);
	        offset = [ xExtent[1 - ex] - origin[0], yExtent[1 - ey] - origin[1] ];
	        origin[0] = xExtent[ex];
	        origin[1] = yExtent[ey];
	      } else if (d3.event.altKey) center = origin.slice();
	      g.style("pointer-events", "none").selectAll(".resize").style("display", null);
	      d3.select("body").style("cursor", eventTarget.style("cursor"));
	      event_({
	        type: "brushstart"
	      });
	      brushmove();
	      function keydown() {
	        if (d3.event.keyCode == 32) {
	          if (!dragging) {
	            center = null;
	            origin[0] -= xExtent[1];
	            origin[1] -= yExtent[1];
	            dragging = 2;
	          }
	          d3_eventPreventDefault();
	        }
	      }
	      function keyup() {
	        if (d3.event.keyCode == 32 && dragging == 2) {
	          origin[0] += xExtent[1];
	          origin[1] += yExtent[1];
	          dragging = 0;
	          d3_eventPreventDefault();
	        }
	      }
	      function brushmove() {
	        var point = d3.mouse(target), moved = false;
	        if (offset) {
	          point[0] += offset[0];
	          point[1] += offset[1];
	        }
	        if (!dragging) {
	          if (d3.event.altKey) {
	            if (!center) center = [ (xExtent[0] + xExtent[1]) / 2, (yExtent[0] + yExtent[1]) / 2 ];
	            origin[0] = xExtent[+(point[0] < center[0])];
	            origin[1] = yExtent[+(point[1] < center[1])];
	          } else center = null;
	        }
	        if (resizingX && move1(point, x, 0)) {
	          redrawX(g);
	          moved = true;
	        }
	        if (resizingY && move1(point, y, 1)) {
	          redrawY(g);
	          moved = true;
	        }
	        if (moved) {
	          redraw(g);
	          event_({
	            type: "brush",
	            mode: dragging ? "move" : "resize"
	          });
	        }
	      }
	      function move1(point, scale, i) {
	        var range = d3_scaleRange(scale), r0 = range[0], r1 = range[1], position = origin[i], extent = i ? yExtent : xExtent, size = extent[1] - extent[0], min, max;
	        if (dragging) {
	          r0 -= position;
	          r1 -= size + position;
	        }
	        min = (i ? yClamp : xClamp) ? Math.max(r0, Math.min(r1, point[i])) : point[i];
	        if (dragging) {
	          max = (min += position) + size;
	        } else {
	          if (center) position = Math.max(r0, Math.min(r1, 2 * center[i] - min));
	          if (position < min) {
	            max = min;
	            min = position;
	          } else {
	            max = position;
	          }
	        }
	        if (extent[0] != min || extent[1] != max) {
	          if (i) yExtentDomain = null; else xExtentDomain = null;
	          extent[0] = min;
	          extent[1] = max;
	          return true;
	        }
	      }
	      function brushend() {
	        brushmove();
	        g.style("pointer-events", "all").selectAll(".resize").style("display", brush.empty() ? "none" : null);
	        d3.select("body").style("cursor", null);
	        w.on("mousemove.brush", null).on("mouseup.brush", null).on("touchmove.brush", null).on("touchend.brush", null).on("keydown.brush", null).on("keyup.brush", null);
	        dragRestore();
	        event_({
	          type: "brushend"
	        });
	      }
	    }
	    brush.x = function(z) {
	      if (!arguments.length) return x;
	      x = z;
	      resizes = d3_svg_brushResizes[!x << 1 | !y];
	      return brush;
	    };
	    brush.y = function(z) {
	      if (!arguments.length) return y;
	      y = z;
	      resizes = d3_svg_brushResizes[!x << 1 | !y];
	      return brush;
	    };
	    brush.clamp = function(z) {
	      if (!arguments.length) return x && y ? [ xClamp, yClamp ] : x ? xClamp : y ? yClamp : null;
	      if (x && y) xClamp = !!z[0], yClamp = !!z[1]; else if (x) xClamp = !!z; else if (y) yClamp = !!z;
	      return brush;
	    };
	    brush.extent = function(z) {
	      var x0, x1, y0, y1, t;
	      if (!arguments.length) {
	        if (x) {
	          if (xExtentDomain) {
	            x0 = xExtentDomain[0], x1 = xExtentDomain[1];
	          } else {
	            x0 = xExtent[0], x1 = xExtent[1];
	            if (x.invert) x0 = x.invert(x0), x1 = x.invert(x1);
	            if (x1 < x0) t = x0, x0 = x1, x1 = t;
	          }
	        }
	        if (y) {
	          if (yExtentDomain) {
	            y0 = yExtentDomain[0], y1 = yExtentDomain[1];
	          } else {
	            y0 = yExtent[0], y1 = yExtent[1];
	            if (y.invert) y0 = y.invert(y0), y1 = y.invert(y1);
	            if (y1 < y0) t = y0, y0 = y1, y1 = t;
	          }
	        }
	        return x && y ? [ [ x0, y0 ], [ x1, y1 ] ] : x ? [ x0, x1 ] : y && [ y0, y1 ];
	      }
	      if (x) {
	        x0 = z[0], x1 = z[1];
	        if (y) x0 = x0[0], x1 = x1[0];
	        xExtentDomain = [ x0, x1 ];
	        if (x.invert) x0 = x(x0), x1 = x(x1);
	        if (x1 < x0) t = x0, x0 = x1, x1 = t;
	        if (x0 != xExtent[0] || x1 != xExtent[1]) xExtent = [ x0, x1 ];
	      }
	      if (y) {
	        y0 = z[0], y1 = z[1];
	        if (x) y0 = y0[1], y1 = y1[1];
	        yExtentDomain = [ y0, y1 ];
	        if (y.invert) y0 = y(y0), y1 = y(y1);
	        if (y1 < y0) t = y0, y0 = y1, y1 = t;
	        if (y0 != yExtent[0] || y1 != yExtent[1]) yExtent = [ y0, y1 ];
	      }
	      return brush;
	    };
	    brush.clear = function() {
	      if (!brush.empty()) {
	        xExtent = [ 0, 0 ], yExtent = [ 0, 0 ];
	        xExtentDomain = yExtentDomain = null;
	      }
	      return brush;
	    };
	    brush.empty = function() {
	      return !!x && xExtent[0] == xExtent[1] || !!y && yExtent[0] == yExtent[1];
	    };
	    return d3.rebind(brush, event, "on");
	  };
	  var d3_svg_brushCursor = {
	    n: "ns-resize",
	    e: "ew-resize",
	    s: "ns-resize",
	    w: "ew-resize",
	    nw: "nwse-resize",
	    ne: "nesw-resize",
	    se: "nwse-resize",
	    sw: "nesw-resize"
	  };
	  var d3_svg_brushResizes = [ [ "n", "e", "s", "w", "nw", "ne", "se", "sw" ], [ "e", "w" ], [ "n", "s" ], [] ];
	  var d3_time_format = d3_time.format = d3_locale_enUS.timeFormat;
	  var d3_time_formatUtc = d3_time_format.utc;
	  var d3_time_formatIso = d3_time_formatUtc("%Y-%m-%dT%H:%M:%S.%LZ");
	  d3_time_format.iso = Date.prototype.toISOString && +new Date("2000-01-01T00:00:00.000Z") ? d3_time_formatIsoNative : d3_time_formatIso;
	  function d3_time_formatIsoNative(date) {
	    return date.toISOString();
	  }
	  d3_time_formatIsoNative.parse = function(string) {
	    var date = new Date(string);
	    return isNaN(date) ? null : date;
	  };
	  d3_time_formatIsoNative.toString = d3_time_formatIso.toString;
	  d3_time.second = d3_time_interval(function(date) {
	    return new d3_date(Math.floor(date / 1e3) * 1e3);
	  }, function(date, offset) {
	    date.setTime(date.getTime() + Math.floor(offset) * 1e3);
	  }, function(date) {
	    return date.getSeconds();
	  });
	  d3_time.seconds = d3_time.second.range;
	  d3_time.seconds.utc = d3_time.second.utc.range;
	  d3_time.minute = d3_time_interval(function(date) {
	    return new d3_date(Math.floor(date / 6e4) * 6e4);
	  }, function(date, offset) {
	    date.setTime(date.getTime() + Math.floor(offset) * 6e4);
	  }, function(date) {
	    return date.getMinutes();
	  });
	  d3_time.minutes = d3_time.minute.range;
	  d3_time.minutes.utc = d3_time.minute.utc.range;
	  d3_time.hour = d3_time_interval(function(date) {
	    var timezone = date.getTimezoneOffset() / 60;
	    return new d3_date((Math.floor(date / 36e5 - timezone) + timezone) * 36e5);
	  }, function(date, offset) {
	    date.setTime(date.getTime() + Math.floor(offset) * 36e5);
	  }, function(date) {
	    return date.getHours();
	  });
	  d3_time.hours = d3_time.hour.range;
	  d3_time.hours.utc = d3_time.hour.utc.range;
	  d3_time.month = d3_time_interval(function(date) {
	    date = d3_time.day(date);
	    date.setDate(1);
	    return date;
	  }, function(date, offset) {
	    date.setMonth(date.getMonth() + offset);
	  }, function(date) {
	    return date.getMonth();
	  });
	  d3_time.months = d3_time.month.range;
	  d3_time.months.utc = d3_time.month.utc.range;
	  function d3_time_scale(linear, methods, format) {
	    function scale(x) {
	      return linear(x);
	    }
	    scale.invert = function(x) {
	      return d3_time_scaleDate(linear.invert(x));
	    };
	    scale.domain = function(x) {
	      if (!arguments.length) return linear.domain().map(d3_time_scaleDate);
	      linear.domain(x);
	      return scale;
	    };
	    function tickMethod(extent, count) {
	      var span = extent[1] - extent[0], target = span / count, i = d3.bisect(d3_time_scaleSteps, target);
	      return i == d3_time_scaleSteps.length ? [ methods.year, d3_scale_linearTickRange(extent.map(function(d) {
	        return d / 31536e6;
	      }), count)[2] ] : !i ? [ d3_time_scaleMilliseconds, d3_scale_linearTickRange(extent, count)[2] ] : methods[target / d3_time_scaleSteps[i - 1] < d3_time_scaleSteps[i] / target ? i - 1 : i];
	    }
	    scale.nice = function(interval, skip) {
	      var domain = scale.domain(), extent = d3_scaleExtent(domain), method = interval == null ? tickMethod(extent, 10) : typeof interval === "number" && tickMethod(extent, interval);
	      if (method) interval = method[0], skip = method[1];
	      function skipped(date) {
	        return !isNaN(date) && !interval.range(date, d3_time_scaleDate(+date + 1), skip).length;
	      }
	      return scale.domain(d3_scale_nice(domain, skip > 1 ? {
	        floor: function(date) {
	          while (skipped(date = interval.floor(date))) date = d3_time_scaleDate(date - 1);
	          return date;
	        },
	        ceil: function(date) {
	          while (skipped(date = interval.ceil(date))) date = d3_time_scaleDate(+date + 1);
	          return date;
	        }
	      } : interval));
	    };
	    scale.ticks = function(interval, skip) {
	      var extent = d3_scaleExtent(scale.domain()), method = interval == null ? tickMethod(extent, 10) : typeof interval === "number" ? tickMethod(extent, interval) : !interval.range && [ {
	        range: interval
	      }, skip ];
	      if (method) interval = method[0], skip = method[1];
	      return interval.range(extent[0], d3_time_scaleDate(+extent[1] + 1), skip < 1 ? 1 : skip);
	    };
	    scale.tickFormat = function() {
	      return format;
	    };
	    scale.copy = function() {
	      return d3_time_scale(linear.copy(), methods, format);
	    };
	    return d3_scale_linearRebind(scale, linear);
	  }
	  function d3_time_scaleDate(t) {
	    return new Date(t);
	  }
	  var d3_time_scaleSteps = [ 1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6 ];
	  var d3_time_scaleLocalMethods = [ [ d3_time.second, 1 ], [ d3_time.second, 5 ], [ d3_time.second, 15 ], [ d3_time.second, 30 ], [ d3_time.minute, 1 ], [ d3_time.minute, 5 ], [ d3_time.minute, 15 ], [ d3_time.minute, 30 ], [ d3_time.hour, 1 ], [ d3_time.hour, 3 ], [ d3_time.hour, 6 ], [ d3_time.hour, 12 ], [ d3_time.day, 1 ], [ d3_time.day, 2 ], [ d3_time.week, 1 ], [ d3_time.month, 1 ], [ d3_time.month, 3 ], [ d3_time.year, 1 ] ];
	  var d3_time_scaleLocalFormat = d3_time_format.multi([ [ ".%L", function(d) {
	    return d.getMilliseconds();
	  } ], [ ":%S", function(d) {
	    return d.getSeconds();
	  } ], [ "%I:%M", function(d) {
	    return d.getMinutes();
	  } ], [ "%I %p", function(d) {
	    return d.getHours();
	  } ], [ "%a %d", function(d) {
	    return d.getDay() && d.getDate() != 1;
	  } ], [ "%b %d", function(d) {
	    return d.getDate() != 1;
	  } ], [ "%B", function(d) {
	    return d.getMonth();
	  } ], [ "%Y", d3_true ] ]);
	  var d3_time_scaleMilliseconds = {
	    range: function(start, stop, step) {
	      return d3.range(Math.ceil(start / step) * step, +stop, step).map(d3_time_scaleDate);
	    },
	    floor: d3_identity,
	    ceil: d3_identity
	  };
	  d3_time_scaleLocalMethods.year = d3_time.year;
	  d3_time.scale = function() {
	    return d3_time_scale(d3.scale.linear(), d3_time_scaleLocalMethods, d3_time_scaleLocalFormat);
	  };
	  var d3_time_scaleUtcMethods = d3_time_scaleLocalMethods.map(function(m) {
	    return [ m[0].utc, m[1] ];
	  });
	  var d3_time_scaleUtcFormat = d3_time_formatUtc.multi([ [ ".%L", function(d) {
	    return d.getUTCMilliseconds();
	  } ], [ ":%S", function(d) {
	    return d.getUTCSeconds();
	  } ], [ "%I:%M", function(d) {
	    return d.getUTCMinutes();
	  } ], [ "%I %p", function(d) {
	    return d.getUTCHours();
	  } ], [ "%a %d", function(d) {
	    return d.getUTCDay() && d.getUTCDate() != 1;
	  } ], [ "%b %d", function(d) {
	    return d.getUTCDate() != 1;
	  } ], [ "%B", function(d) {
	    return d.getUTCMonth();
	  } ], [ "%Y", d3_true ] ]);
	  d3_time_scaleUtcMethods.year = d3_time.year.utc;
	  d3_time.scale.utc = function() {
	    return d3_time_scale(d3.scale.linear(), d3_time_scaleUtcMethods, d3_time_scaleUtcFormat);
	  };
	  d3.text = d3_xhrType(function(request) {
	    return request.responseText;
	  });
	  d3.json = function(url, callback) {
	    return d3_xhr(url, "application/json", d3_json, callback);
	  };
	  function d3_json(request) {
	    return JSON.parse(request.responseText);
	  }
	  d3.html = function(url, callback) {
	    return d3_xhr(url, "text/html", d3_html, callback);
	  };
	  function d3_html(request) {
	    var range = d3_document.createRange();
	    range.selectNode(d3_document.body);
	    return range.createContextualFragment(request.responseText);
	  }
	  d3.xml = d3_xhrType(function(request) {
	    return request.responseXML;
	  });
	  if (true) this.d3 = d3, !(__WEBPACK_AMD_DEFINE_FACTORY__ = (d3), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.call(exports, __webpack_require__, exports, module)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); else if (typeof module === "object" && module.exports) module.exports = d3; else this.d3 = d3;
	}();

/***/ }),
/* 351 */
/***/ (function(module, exports) {

	/**
	 * Returns a function, that, as long as it continues to be invoked, will not
	 * be triggered. The function will be called after it stops being called for
	 * N milliseconds. If `immediate` is passed, trigger the function on the
	 * leading edge, instead of the trailing. The function also has a property 'clear' 
	 * that is a function which will clear the timer to prevent previously scheduled executions. 
	 *
	 * @source underscore.js
	 * @see http://unscriptable.com/2009/03/20/debouncing-javascript-methods/
	 * @param {Function} function to wrap
	 * @param {Number} timeout in ms (`100`)
	 * @param {Boolean} whether to execute at the beginning (`false`)
	 * @api public
	 */
	function debounce(func, wait, immediate){
	  var timeout, args, context, timestamp, result;
	  if (null == wait) wait = 100;
	
	  function later() {
	    var last = Date.now() - timestamp;
	
	    if (last < wait && last >= 0) {
	      timeout = setTimeout(later, wait - last);
	    } else {
	      timeout = null;
	      if (!immediate) {
	        result = func.apply(context, args);
	        context = args = null;
	      }
	    }
	  };
	
	  var debounced = function(){
	    context = this;
	    args = arguments;
	    timestamp = Date.now();
	    var callNow = immediate && !timeout;
	    if (!timeout) timeout = setTimeout(later, wait);
	    if (callNow) {
	      result = func.apply(context, args);
	      context = args = null;
	    }
	
	    return result;
	  };
	
	  debounced.clear = function() {
	    if (timeout) {
	      clearTimeout(timeout);
	      timeout = null;
	    }
	  };
	  
	  debounced.flush = function() {
	    if (timeout) {
	      result = func.apply(context, args);
	      context = args = null;
	      
	      clearTimeout(timeout);
	      timeout = null;
	    }
	  };
	
	  return debounced;
	};
	
	// Adds compatibility for ES modules
	debounce.debounce = debounce;
	
	module.exports = debounce;


/***/ }),
/* 352 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	var bind = __webpack_require__(353);
	
	var GetIntrinsic = __webpack_require__(971);
	
	var $apply = GetIntrinsic('%Function.prototype.apply%');
	var $call = GetIntrinsic('%Function.prototype.call%');
	var $reflectApply = GetIntrinsic('%Reflect.apply%', true) || bind.call($call, $apply);
	
	module.exports = function callBind() {
		return $reflectApply(bind, $call, arguments);
	};
	
	module.exports.apply = function applyBind() {
		return $reflectApply(bind, $apply, arguments);
	};


/***/ }),
/* 353 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	var implementation = __webpack_require__(988);
	
	module.exports = Function.prototype.bind || implementation;


/***/ }),
/* 354 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	exports.__esModule = true;
	exports.HandlebarsEnvironment = HandlebarsEnvironment;
	// istanbul ignore next
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
	
	var _utils = __webpack_require__(62);
	
	var _exception = __webpack_require__(99);
	
	var _exception2 = _interopRequireDefault(_exception);
	
	var _helpers = __webpack_require__(355);
	
	var _decorators = __webpack_require__(1032);
	
	var _logger = __webpack_require__(357);
	
	var _logger2 = _interopRequireDefault(_logger);
	
	var _internalProtoAccess = __webpack_require__(356);
	
	var VERSION = '4.7.6';
	exports.VERSION = VERSION;
	var COMPILER_REVISION = 8;
	exports.COMPILER_REVISION = COMPILER_REVISION;
	var LAST_COMPATIBLE_COMPILER_REVISION = 7;
	
	exports.LAST_COMPATIBLE_COMPILER_REVISION = LAST_COMPATIBLE_COMPILER_REVISION;
	var REVISION_CHANGES = {
	  1: '<= 1.0.rc.2', // 1.0.rc.2 is actually rev2 but doesn't report it
	  2: '== 1.0.0-rc.3',
	  3: '== 1.0.0-rc.4',
	  4: '== 1.x.x',
	  5: '== 2.0.0-alpha.x',
	  6: '>= 2.0.0-beta.1',
	  7: '>= 4.0.0 <4.3.0',
	  8: '>= 4.3.0'
	};
	
	exports.REVISION_CHANGES = REVISION_CHANGES;
	var objectType = '[object Object]';
	
	function HandlebarsEnvironment(helpers, partials, decorators) {
	  this.helpers = helpers || {};
	  this.partials = partials || {};
	  this.decorators = decorators || {};
	
	  _helpers.registerDefaultHelpers(this);
	  _decorators.registerDefaultDecorators(this);
	}
	
	HandlebarsEnvironment.prototype = {
	  constructor: HandlebarsEnvironment,
	
	  logger: _logger2['default'],
	  log: _logger2['default'].log,
	
	  registerHelper: function registerHelper(name, fn) {
	    if (_utils.toString.call(name) === objectType) {
	      if (fn) {
	        throw new _exception2['default']('Arg not supported with multiple helpers');
	      }
	      _utils.extend(this.helpers, name);
	    } else {
	      this.helpers[name] = fn;
	    }
	  },
	  unregisterHelper: function unregisterHelper(name) {
	    delete this.helpers[name];
	  },
	
	  registerPartial: function registerPartial(name, partial) {
	    if (_utils.toString.call(name) === objectType) {
	      _utils.extend(this.partials, name);
	    } else {
	      if (typeof partial === 'undefined') {
	        throw new _exception2['default']('Attempting to register a partial called "' + name + '" as undefined');
	      }
	      this.partials[name] = partial;
	    }
	  },
	  unregisterPartial: function unregisterPartial(name) {
	    delete this.partials[name];
	  },
	
	  registerDecorator: function registerDecorator(name, fn) {
	    if (_utils.toString.call(name) === objectType) {
	      if (fn) {
	        throw new _exception2['default']('Arg not supported with multiple decorators');
	      }
	      _utils.extend(this.decorators, name);
	    } else {
	      this.decorators[name] = fn;
	    }
	  },
	  unregisterDecorator: function unregisterDecorator(name) {
	    delete this.decorators[name];
	  },
	  /**
	   * Reset the memory of illegal property accesses that have already been logged.
	   * @deprecated should only be used in handlebars test-cases
	   */
	  resetLoggedPropertyAccesses: function resetLoggedPropertyAccesses() {
	    _internalProtoAccess.resetLoggedProperties();
	  }
	};
	
	var log = _logger2['default'].log;
	
	exports.log = log;
	exports.createFrame = _utils.createFrame;
	exports.logger = _logger2['default'];
	//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2Jhc2UuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7cUJBQThDLFNBQVM7O3lCQUNqQyxhQUFhOzs7O3VCQUNJLFdBQVc7OzBCQUNSLGNBQWM7O3NCQUNyQyxVQUFVOzs7O21DQUNTLHlCQUF5Qjs7QUFFeEQsSUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDOztBQUN4QixJQUFNLGlCQUFpQixHQUFHLENBQUMsQ0FBQzs7QUFDNUIsSUFBTSxpQ0FBaUMsR0FBRyxDQUFDLENBQUM7OztBQUU1QyxJQUFNLGdCQUFnQixHQUFHO0FBQzlCLEdBQUMsRUFBRSxhQUFhO0FBQ2hCLEdBQUMsRUFBRSxlQUFlO0FBQ2xCLEdBQUMsRUFBRSxlQUFlO0FBQ2xCLEdBQUMsRUFBRSxVQUFVO0FBQ2IsR0FBQyxFQUFFLGtCQUFrQjtBQUNyQixHQUFDLEVBQUUsaUJBQWlCO0FBQ3BCLEdBQUMsRUFBRSxpQkFBaUI7QUFDcEIsR0FBQyxFQUFFLFVBQVU7Q0FDZCxDQUFDOzs7QUFFRixJQUFNLFVBQVUsR0FBRyxpQkFBaUIsQ0FBQzs7QUFFOUIsU0FBUyxxQkFBcUIsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRTtBQUNuRSxNQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sSUFBSSxFQUFFLENBQUM7QUFDN0IsTUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLElBQUksRUFBRSxDQUFDO0FBQy9CLE1BQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxJQUFJLEVBQUUsQ0FBQzs7QUFFbkMsa0NBQXVCLElBQUksQ0FBQyxDQUFDO0FBQzdCLHdDQUEwQixJQUFJLENBQUMsQ0FBQztDQUNqQzs7QUFFRCxxQkFBcUIsQ0FBQyxTQUFTLEdBQUc7QUFDaEMsYUFBVyxFQUFFLHFCQUFxQjs7QUFFbEMsUUFBTSxxQkFBUTtBQUNkLEtBQUcsRUFBRSxvQkFBTyxHQUFHOztBQUVmLGdCQUFjLEVBQUUsd0JBQVMsSUFBSSxFQUFFLEVBQUUsRUFBRTtBQUNqQyxRQUFJLGdCQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxVQUFVLEVBQUU7QUFDdEMsVUFBSSxFQUFFLEVBQUU7QUFDTixjQUFNLDJCQUFjLHlDQUF5QyxDQUFDLENBQUM7T0FDaEU7QUFDRCxvQkFBTyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO0tBQzVCLE1BQU07QUFDTCxVQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztLQUN6QjtHQUNGO0FBQ0Qsa0JBQWdCLEVBQUUsMEJBQVMsSUFBSSxFQUFFO0FBQy9CLFdBQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztHQUMzQjs7QUFFRCxpQkFBZSxFQUFFLHlCQUFTLElBQUksRUFBRSxPQUFPLEVBQUU7QUFDdkMsUUFBSSxnQkFBUyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssVUFBVSxFQUFFO0FBQ3RDLG9CQUFPLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7S0FDN0IsTUFBTTtBQUNMLFVBQUksT0FBTyxPQUFPLEtBQUssV0FBVyxFQUFFO0FBQ2xDLGNBQU0seUVBQ3dDLElBQUksb0JBQ2pELENBQUM7T0FDSDtBQUNELFVBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDO0tBQy9CO0dBQ0Y7QUFDRCxtQkFBaUIsRUFBRSwyQkFBUyxJQUFJLEVBQUU7QUFDaEMsV0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0dBQzVCOztBQUVELG1CQUFpQixFQUFFLDJCQUFTLElBQUksRUFBRSxFQUFFLEVBQUU7QUFDcEMsUUFBSSxnQkFBUyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssVUFBVSxFQUFFO0FBQ3RDLFVBQUksRUFBRSxFQUFFO0FBQ04sY0FBTSwyQkFBYyw0Q0FBNEMsQ0FBQyxDQUFDO09BQ25FO0FBQ0Qsb0JBQU8sSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztLQUMvQixNQUFNO0FBQ0wsVUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7S0FDNUI7R0FDRjtBQUNELHFCQUFtQixFQUFFLDZCQUFTLElBQUksRUFBRTtBQUNsQyxXQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7R0FDOUI7Ozs7O0FBS0QsNkJBQTJCLEVBQUEsdUNBQUc7QUFDNUIsZ0RBQXVCLENBQUM7R0FDekI7Q0FDRixDQUFDOztBQUVLLElBQUksR0FBRyxHQUFHLG9CQUFPLEdBQUcsQ0FBQzs7O1FBRW5CLFdBQVc7UUFBRSxNQUFNIiwiZmlsZSI6ImJhc2UuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVGcmFtZSwgZXh0ZW5kLCB0b1N0cmluZyB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IEV4Y2VwdGlvbiBmcm9tICcuL2V4Y2VwdGlvbic7XG5pbXBvcnQgeyByZWdpc3RlckRlZmF1bHRIZWxwZXJzIH0gZnJvbSAnLi9oZWxwZXJzJztcbmltcG9ydCB7IHJlZ2lzdGVyRGVmYXVsdERlY29yYXRvcnMgfSBmcm9tICcuL2RlY29yYXRvcnMnO1xuaW1wb3J0IGxvZ2dlciBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgeyByZXNldExvZ2dlZFByb3BlcnRpZXMgfSBmcm9tICcuL2ludGVybmFsL3Byb3RvLWFjY2Vzcyc7XG5cbmV4cG9ydCBjb25zdCBWRVJTSU9OID0gJzQuNy42JztcbmV4cG9ydCBjb25zdCBDT01QSUxFUl9SRVZJU0lPTiA9IDg7XG5leHBvcnQgY29uc3QgTEFTVF9DT01QQVRJQkxFX0NPTVBJTEVSX1JFVklTSU9OID0gNztcblxuZXhwb3J0IGNvbnN0IFJFVklTSU9OX0NIQU5HRVMgPSB7XG4gIDE6ICc8PSAxLjAucmMuMicsIC8vIDEuMC5yYy4yIGlzIGFjdHVhbGx5IHJldjIgYnV0IGRvZXNuJ3QgcmVwb3J0IGl0XG4gIDI6ICc9PSAxLjAuMC1yYy4zJyxcbiAgMzogJz09IDEuMC4wLXJjLjQnLFxuICA0OiAnPT0gMS54LngnLFxuICA1OiAnPT0gMi4wLjAtYWxwaGEueCcsXG4gIDY6ICc+PSAyLjAuMC1iZXRhLjEnLFxuICA3OiAnPj0gNC4wLjAgPDQuMy4wJyxcbiAgODogJz49IDQuMy4wJ1xufTtcblxuY29uc3Qgb2JqZWN0VHlwZSA9ICdbb2JqZWN0IE9iamVjdF0nO1xuXG5leHBvcnQgZnVuY3Rpb24gSGFuZGxlYmFyc0Vudmlyb25tZW50KGhlbHBlcnMsIHBhcnRpYWxzLCBkZWNvcmF0b3JzKSB7XG4gIHRoaXMuaGVscGVycyA9IGhlbHBlcnMgfHwge307XG4gIHRoaXMucGFydGlhbHMgPSBwYXJ0aWFscyB8fCB7fTtcbiAgdGhpcy5kZWNvcmF0b3JzID0gZGVjb3JhdG9ycyB8fCB7fTtcblxuICByZWdpc3RlckRlZmF1bHRIZWxwZXJzKHRoaXMpO1xuICByZWdpc3RlckRlZmF1bHREZWNvcmF0b3JzKHRoaXMpO1xufVxuXG5IYW5kbGViYXJzRW52aXJvbm1lbnQucHJvdG90eXBlID0ge1xuICBjb25zdHJ1Y3RvcjogSGFuZGxlYmFyc0Vudmlyb25tZW50LFxuXG4gIGxvZ2dlcjogbG9nZ2VyLFxuICBsb2c6IGxvZ2dlci5sb2csXG5cbiAgcmVnaXN0ZXJIZWxwZXI6IGZ1bmN0aW9uKG5hbWUsIGZuKSB7XG4gICAgaWYgKHRvU3RyaW5nLmNhbGwobmFtZSkgPT09IG9iamVjdFR5cGUpIHtcbiAgICAgIGlmIChmbikge1xuICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdBcmcgbm90IHN1cHBvcnRlZCB3aXRoIG11bHRpcGxlIGhlbHBlcnMnKTtcbiAgICAgIH1cbiAgICAgIGV4dGVuZCh0aGlzLmhlbHBlcnMsIG5hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmhlbHBlcnNbbmFtZV0gPSBmbjtcbiAgICB9XG4gIH0sXG4gIHVucmVnaXN0ZXJIZWxwZXI6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBkZWxldGUgdGhpcy5oZWxwZXJzW25hbWVdO1xuICB9LFxuXG4gIHJlZ2lzdGVyUGFydGlhbDogZnVuY3Rpb24obmFtZSwgcGFydGlhbCkge1xuICAgIGlmICh0b1N0cmluZy5jYWxsKG5hbWUpID09PSBvYmplY3RUeXBlKSB7XG4gICAgICBleHRlbmQodGhpcy5wYXJ0aWFscywgbmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0eXBlb2YgcGFydGlhbCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbihcbiAgICAgICAgICBgQXR0ZW1wdGluZyB0byByZWdpc3RlciBhIHBhcnRpYWwgY2FsbGVkIFwiJHtuYW1lfVwiIGFzIHVuZGVmaW5lZGBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucGFydGlhbHNbbmFtZV0gPSBwYXJ0aWFsO1xuICAgIH1cbiAgfSxcbiAgdW5yZWdpc3RlclBhcnRpYWw6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBkZWxldGUgdGhpcy5wYXJ0aWFsc1tuYW1lXTtcbiAgfSxcblxuICByZWdpc3RlckRlY29yYXRvcjogZnVuY3Rpb24obmFtZSwgZm4pIHtcbiAgICBpZiAodG9TdHJpbmcuY2FsbChuYW1lKSA9PT0gb2JqZWN0VHlwZSkge1xuICAgICAgaWYgKGZuKSB7XG4gICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ0FyZyBub3Qgc3VwcG9ydGVkIHdpdGggbXVsdGlwbGUgZGVjb3JhdG9ycycpO1xuICAgICAgfVxuICAgICAgZXh0ZW5kKHRoaXMuZGVjb3JhdG9ycywgbmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGVjb3JhdG9yc1tuYW1lXSA9IGZuO1xuICAgIH1cbiAgfSxcbiAgdW5yZWdpc3RlckRlY29yYXRvcjogZnVuY3Rpb24obmFtZSkge1xuICAgIGRlbGV0ZSB0aGlzLmRlY29yYXRvcnNbbmFtZV07XG4gIH0sXG4gIC8qKlxuICAgKiBSZXNldCB0aGUgbWVtb3J5IG9mIGlsbGVnYWwgcHJvcGVydHkgYWNjZXNzZXMgdGhhdCBoYXZlIGFscmVhZHkgYmVlbiBsb2dnZWQuXG4gICAqIEBkZXByZWNhdGVkIHNob3VsZCBvbmx5IGJlIHVzZWQgaW4gaGFuZGxlYmFycyB0ZXN0LWNhc2VzXG4gICAqL1xuICByZXNldExvZ2dlZFByb3BlcnR5QWNjZXNzZXMoKSB7XG4gICAgcmVzZXRMb2dnZWRQcm9wZXJ0aWVzKCk7XG4gIH1cbn07XG5cbmV4cG9ydCBsZXQgbG9nID0gbG9nZ2VyLmxvZztcblxuZXhwb3J0IHsgY3JlYXRlRnJhbWUsIGxvZ2dlciB9O1xuIl19


/***/ }),
/* 355 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	exports.__esModule = true;
	exports.registerDefaultHelpers = registerDefaultHelpers;
	exports.moveHelperToHooks = moveHelperToHooks;
	// istanbul ignore next
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
	
	var _helpersBlockHelperMissing = __webpack_require__(1034);
	
	var _helpersBlockHelperMissing2 = _interopRequireDefault(_helpersBlockHelperMissing);
	
	var _helpersEach = __webpack_require__(1035);
	
	var _helpersEach2 = _interopRequireDefault(_helpersEach);
	
	var _helpersHelperMissing = __webpack_require__(1036);
	
	var _helpersHelperMissing2 = _interopRequireDefault(_helpersHelperMissing);
	
	var _helpersIf = __webpack_require__(1037);
	
	var _helpersIf2 = _interopRequireDefault(_helpersIf);
	
	var _helpersLog = __webpack_require__(1038);
	
	var _helpersLog2 = _interopRequireDefault(_helpersLog);
	
	var _helpersLookup = __webpack_require__(1039);
	
	var _helpersLookup2 = _interopRequireDefault(_helpersLookup);
	
	var _helpersWith = __webpack_require__(1040);
	
	var _helpersWith2 = _interopRequireDefault(_helpersWith);
	
	function registerDefaultHelpers(instance) {
	  _helpersBlockHelperMissing2['default'](instance);
	  _helpersEach2['default'](instance);
	  _helpersHelperMissing2['default'](instance);
	  _helpersIf2['default'](instance);
	  _helpersLog2['default'](instance);
	  _helpersLookup2['default'](instance);
	  _helpersWith2['default'](instance);
	}
	
	function moveHelperToHooks(instance, helperName, keepHelper) {
	  if (instance.helpers[helperName]) {
	    instance.hooks[helperName] = instance.helpers[helperName];
	    if (!keepHelper) {
	      delete instance.helpers[helperName];
	    }
	  }
	}
	//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O3lDQUF1QyxnQ0FBZ0M7Ozs7MkJBQzlDLGdCQUFnQjs7OztvQ0FDUCwwQkFBMEI7Ozs7eUJBQ3JDLGNBQWM7Ozs7MEJBQ2IsZUFBZTs7Ozs2QkFDWixrQkFBa0I7Ozs7MkJBQ3BCLGdCQUFnQjs7OztBQUVsQyxTQUFTLHNCQUFzQixDQUFDLFFBQVEsRUFBRTtBQUMvQyx5Q0FBMkIsUUFBUSxDQUFDLENBQUM7QUFDckMsMkJBQWEsUUFBUSxDQUFDLENBQUM7QUFDdkIsb0NBQXNCLFFBQVEsQ0FBQyxDQUFDO0FBQ2hDLHlCQUFXLFFBQVEsQ0FBQyxDQUFDO0FBQ3JCLDBCQUFZLFFBQVEsQ0FBQyxDQUFDO0FBQ3RCLDZCQUFlLFFBQVEsQ0FBQyxDQUFDO0FBQ3pCLDJCQUFhLFFBQVEsQ0FBQyxDQUFDO0NBQ3hCOztBQUVNLFNBQVMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUU7QUFDbEUsTUFBSSxRQUFRLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFO0FBQ2hDLFlBQVEsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUMxRCxRQUFJLENBQUMsVUFBVSxFQUFFO0FBQ2YsYUFBTyxRQUFRLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0tBQ3JDO0dBQ0Y7Q0FDRiIsImZpbGUiOiJoZWxwZXJzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHJlZ2lzdGVyQmxvY2tIZWxwZXJNaXNzaW5nIGZyb20gJy4vaGVscGVycy9ibG9jay1oZWxwZXItbWlzc2luZyc7XG5pbXBvcnQgcmVnaXN0ZXJFYWNoIGZyb20gJy4vaGVscGVycy9lYWNoJztcbmltcG9ydCByZWdpc3RlckhlbHBlck1pc3NpbmcgZnJvbSAnLi9oZWxwZXJzL2hlbHBlci1taXNzaW5nJztcbmltcG9ydCByZWdpc3RlcklmIGZyb20gJy4vaGVscGVycy9pZic7XG5pbXBvcnQgcmVnaXN0ZXJMb2cgZnJvbSAnLi9oZWxwZXJzL2xvZyc7XG5pbXBvcnQgcmVnaXN0ZXJMb29rdXAgZnJvbSAnLi9oZWxwZXJzL2xvb2t1cCc7XG5pbXBvcnQgcmVnaXN0ZXJXaXRoIGZyb20gJy4vaGVscGVycy93aXRoJztcblxuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyRGVmYXVsdEhlbHBlcnMoaW5zdGFuY2UpIHtcbiAgcmVnaXN0ZXJCbG9ja0hlbHBlck1pc3NpbmcoaW5zdGFuY2UpO1xuICByZWdpc3RlckVhY2goaW5zdGFuY2UpO1xuICByZWdpc3RlckhlbHBlck1pc3NpbmcoaW5zdGFuY2UpO1xuICByZWdpc3RlcklmKGluc3RhbmNlKTtcbiAgcmVnaXN0ZXJMb2coaW5zdGFuY2UpO1xuICByZWdpc3Rlckxvb2t1cChpbnN0YW5jZSk7XG4gIHJlZ2lzdGVyV2l0aChpbnN0YW5jZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtb3ZlSGVscGVyVG9Ib29rcyhpbnN0YW5jZSwgaGVscGVyTmFtZSwga2VlcEhlbHBlcikge1xuICBpZiAoaW5zdGFuY2UuaGVscGVyc1toZWxwZXJOYW1lXSkge1xuICAgIGluc3RhbmNlLmhvb2tzW2hlbHBlck5hbWVdID0gaW5zdGFuY2UuaGVscGVyc1toZWxwZXJOYW1lXTtcbiAgICBpZiAoIWtlZXBIZWxwZXIpIHtcbiAgICAgIGRlbGV0ZSBpbnN0YW5jZS5oZWxwZXJzW2hlbHBlck5hbWVdO1xuICAgIH1cbiAgfVxufVxuIl19


/***/ }),
/* 356 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	exports.__esModule = true;
	exports.createProtoAccessControl = createProtoAccessControl;
	exports.resultIsAllowed = resultIsAllowed;
	exports.resetLoggedProperties = resetLoggedProperties;
	// istanbul ignore next
	
	function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
	
	var _createNewLookupObject = __webpack_require__(1041);
	
	var _logger = __webpack_require__(357);
	
	var logger = _interopRequireWildcard(_logger);
	
	var loggedProperties = Object.create(null);
	
	function createProtoAccessControl(runtimeOptions) {
	  var defaultMethodWhiteList = Object.create(null);
	  defaultMethodWhiteList['constructor'] = false;
	  defaultMethodWhiteList['__defineGetter__'] = false;
	  defaultMethodWhiteList['__defineSetter__'] = false;
	  defaultMethodWhiteList['__lookupGetter__'] = false;
	
	  var defaultPropertyWhiteList = Object.create(null);
	  // eslint-disable-next-line no-proto
	  defaultPropertyWhiteList['__proto__'] = false;
	
	  return {
	    properties: {
	      whitelist: _createNewLookupObject.createNewLookupObject(defaultPropertyWhiteList, runtimeOptions.allowedProtoProperties),
	      defaultValue: runtimeOptions.allowProtoPropertiesByDefault
	    },
	    methods: {
	      whitelist: _createNewLookupObject.createNewLookupObject(defaultMethodWhiteList, runtimeOptions.allowedProtoMethods),
	      defaultValue: runtimeOptions.allowProtoMethodsByDefault
	    }
	  };
	}
	
	function resultIsAllowed(result, protoAccessControl, propertyName) {
	  if (typeof result === 'function') {
	    return checkWhiteList(protoAccessControl.methods, propertyName);
	  } else {
	    return checkWhiteList(protoAccessControl.properties, propertyName);
	  }
	}
	
	function checkWhiteList(protoAccessControlForType, propertyName) {
	  if (protoAccessControlForType.whitelist[propertyName] !== undefined) {
	    return protoAccessControlForType.whitelist[propertyName] === true;
	  }
	  if (protoAccessControlForType.defaultValue !== undefined) {
	    return protoAccessControlForType.defaultValue;
	  }
	  logUnexpecedPropertyAccessOnce(propertyName);
	  return false;
	}
	
	function logUnexpecedPropertyAccessOnce(propertyName) {
	  if (loggedProperties[propertyName] !== true) {
	    loggedProperties[propertyName] = true;
	    logger.log('error', 'Handlebars: Access has been denied to resolve the property "' + propertyName + '" because it is not an "own property" of its parent.\n' + 'You can add a runtime option to disable the check or this warning:\n' + 'See https://handlebarsjs.com/api-reference/runtime-options.html#options-to-control-prototype-access for details');
	  }
	}
	
	function resetLoggedProperties() {
	  Object.keys(loggedProperties).forEach(function (propertyName) {
	    delete loggedProperties[propertyName];
	  });
	}
	//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2ludGVybmFsL3Byb3RvLWFjY2Vzcy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O3FDQUFzQyw0QkFBNEI7O3NCQUMxQyxXQUFXOztJQUF2QixNQUFNOztBQUVsQixJQUFNLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7O0FBRXRDLFNBQVMsd0JBQXdCLENBQUMsY0FBYyxFQUFFO0FBQ3ZELE1BQUksc0JBQXNCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNqRCx3QkFBc0IsQ0FBQyxhQUFhLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDOUMsd0JBQXNCLENBQUMsa0JBQWtCLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDbkQsd0JBQXNCLENBQUMsa0JBQWtCLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDbkQsd0JBQXNCLENBQUMsa0JBQWtCLENBQUMsR0FBRyxLQUFLLENBQUM7O0FBRW5ELE1BQUksd0JBQXdCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQzs7QUFFbkQsMEJBQXdCLENBQUMsV0FBVyxDQUFDLEdBQUcsS0FBSyxDQUFDOztBQUU5QyxTQUFPO0FBQ0wsY0FBVSxFQUFFO0FBQ1YsZUFBUyxFQUFFLDZDQUNULHdCQUF3QixFQUN4QixjQUFjLENBQUMsc0JBQXNCLENBQ3RDO0FBQ0Qsa0JBQVksRUFBRSxjQUFjLENBQUMsNkJBQTZCO0tBQzNEO0FBQ0QsV0FBTyxFQUFFO0FBQ1AsZUFBUyxFQUFFLDZDQUNULHNCQUFzQixFQUN0QixjQUFjLENBQUMsbUJBQW1CLENBQ25DO0FBQ0Qsa0JBQVksRUFBRSxjQUFjLENBQUMsMEJBQTBCO0tBQ3hEO0dBQ0YsQ0FBQztDQUNIOztBQUVNLFNBQVMsZUFBZSxDQUFDLE1BQU0sRUFBRSxrQkFBa0IsRUFBRSxZQUFZLEVBQUU7QUFDeEUsTUFBSSxPQUFPLE1BQU0sS0FBSyxVQUFVLEVBQUU7QUFDaEMsV0FBTyxjQUFjLENBQUMsa0JBQWtCLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQyxDQUFDO0dBQ2pFLE1BQU07QUFDTCxXQUFPLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLEVBQUUsWUFBWSxDQUFDLENBQUM7R0FDcEU7Q0FDRjs7QUFFRCxTQUFTLGNBQWMsQ0FBQyx5QkFBeUIsRUFBRSxZQUFZLEVBQUU7QUFDL0QsTUFBSSx5QkFBeUIsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLEtBQUssU0FBUyxFQUFFO0FBQ25FLFdBQU8seUJBQXlCLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxLQUFLLElBQUksQ0FBQztHQUNuRTtBQUNELE1BQUkseUJBQXlCLENBQUMsWUFBWSxLQUFLLFNBQVMsRUFBRTtBQUN4RCxXQUFPLHlCQUF5QixDQUFDLFlBQVksQ0FBQztHQUMvQztBQUNELGdDQUE4QixDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQzdDLFNBQU8sS0FBSyxDQUFDO0NBQ2Q7O0FBRUQsU0FBUyw4QkFBOEIsQ0FBQyxZQUFZLEVBQUU7QUFDcEQsTUFBSSxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsS0FBSyxJQUFJLEVBQUU7QUFDM0Msb0JBQWdCLENBQUMsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3RDLFVBQU0sQ0FBQyxHQUFHLENBQ1IsT0FBTyxFQUNQLGlFQUErRCxZQUFZLG9JQUNILG9IQUMyQyxDQUNwSCxDQUFDO0dBQ0g7Q0FDRjs7QUFFTSxTQUFTLHFCQUFxQixHQUFHO0FBQ3RDLFFBQU0sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBQSxZQUFZLEVBQUk7QUFDcEQsV0FBTyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztHQUN2QyxDQUFDLENBQUM7Q0FDSiIsImZpbGUiOiJwcm90by1hY2Nlc3MuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVOZXdMb29rdXBPYmplY3QgfSBmcm9tICcuL2NyZWF0ZS1uZXctbG9va3VwLW9iamVjdCc7XG5pbXBvcnQgKiBhcyBsb2dnZXIgZnJvbSAnLi4vbG9nZ2VyJztcblxuY29uc3QgbG9nZ2VkUHJvcGVydGllcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQcm90b0FjY2Vzc0NvbnRyb2wocnVudGltZU9wdGlvbnMpIHtcbiAgbGV0IGRlZmF1bHRNZXRob2RXaGl0ZUxpc3QgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBkZWZhdWx0TWV0aG9kV2hpdGVMaXN0Wydjb25zdHJ1Y3RvciddID0gZmFsc2U7XG4gIGRlZmF1bHRNZXRob2RXaGl0ZUxpc3RbJ19fZGVmaW5lR2V0dGVyX18nXSA9IGZhbHNlO1xuICBkZWZhdWx0TWV0aG9kV2hpdGVMaXN0WydfX2RlZmluZVNldHRlcl9fJ10gPSBmYWxzZTtcbiAgZGVmYXVsdE1ldGhvZFdoaXRlTGlzdFsnX19sb29rdXBHZXR0ZXJfXyddID0gZmFsc2U7XG5cbiAgbGV0IGRlZmF1bHRQcm9wZXJ0eVdoaXRlTGlzdCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b1xuICBkZWZhdWx0UHJvcGVydHlXaGl0ZUxpc3RbJ19fcHJvdG9fXyddID0gZmFsc2U7XG5cbiAgcmV0dXJuIHtcbiAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICB3aGl0ZWxpc3Q6IGNyZWF0ZU5ld0xvb2t1cE9iamVjdChcbiAgICAgICAgZGVmYXVsdFByb3BlcnR5V2hpdGVMaXN0LFxuICAgICAgICBydW50aW1lT3B0aW9ucy5hbGxvd2VkUHJvdG9Qcm9wZXJ0aWVzXG4gICAgICApLFxuICAgICAgZGVmYXVsdFZhbHVlOiBydW50aW1lT3B0aW9ucy5hbGxvd1Byb3RvUHJvcGVydGllc0J5RGVmYXVsdFxuICAgIH0sXG4gICAgbWV0aG9kczoge1xuICAgICAgd2hpdGVsaXN0OiBjcmVhdGVOZXdMb29rdXBPYmplY3QoXG4gICAgICAgIGRlZmF1bHRNZXRob2RXaGl0ZUxpc3QsXG4gICAgICAgIHJ1bnRpbWVPcHRpb25zLmFsbG93ZWRQcm90b01ldGhvZHNcbiAgICAgICksXG4gICAgICBkZWZhdWx0VmFsdWU6IHJ1bnRpbWVPcHRpb25zLmFsbG93UHJvdG9NZXRob2RzQnlEZWZhdWx0XG4gICAgfVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzdWx0SXNBbGxvd2VkKHJlc3VsdCwgcHJvdG9BY2Nlc3NDb250cm9sLCBwcm9wZXJ0eU5hbWUpIHtcbiAgaWYgKHR5cGVvZiByZXN1bHQgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gY2hlY2tXaGl0ZUxpc3QocHJvdG9BY2Nlc3NDb250cm9sLm1ldGhvZHMsIHByb3BlcnR5TmFtZSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGNoZWNrV2hpdGVMaXN0KHByb3RvQWNjZXNzQ29udHJvbC5wcm9wZXJ0aWVzLCBwcm9wZXJ0eU5hbWUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNoZWNrV2hpdGVMaXN0KHByb3RvQWNjZXNzQ29udHJvbEZvclR5cGUsIHByb3BlcnR5TmFtZSkge1xuICBpZiAocHJvdG9BY2Nlc3NDb250cm9sRm9yVHlwZS53aGl0ZWxpc3RbcHJvcGVydHlOYW1lXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHByb3RvQWNjZXNzQ29udHJvbEZvclR5cGUud2hpdGVsaXN0W3Byb3BlcnR5TmFtZV0gPT09IHRydWU7XG4gIH1cbiAgaWYgKHByb3RvQWNjZXNzQ29udHJvbEZvclR5cGUuZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gcHJvdG9BY2Nlc3NDb250cm9sRm9yVHlwZS5kZWZhdWx0VmFsdWU7XG4gIH1cbiAgbG9nVW5leHBlY2VkUHJvcGVydHlBY2Nlc3NPbmNlKHByb3BlcnR5TmFtZSk7XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gbG9nVW5leHBlY2VkUHJvcGVydHlBY2Nlc3NPbmNlKHByb3BlcnR5TmFtZSkge1xuICBpZiAobG9nZ2VkUHJvcGVydGllc1twcm9wZXJ0eU5hbWVdICE9PSB0cnVlKSB7XG4gICAgbG9nZ2VkUHJvcGVydGllc1twcm9wZXJ0eU5hbWVdID0gdHJ1ZTtcbiAgICBsb2dnZXIubG9nKFxuICAgICAgJ2Vycm9yJyxcbiAgICAgIGBIYW5kbGViYXJzOiBBY2Nlc3MgaGFzIGJlZW4gZGVuaWVkIHRvIHJlc29sdmUgdGhlIHByb3BlcnR5IFwiJHtwcm9wZXJ0eU5hbWV9XCIgYmVjYXVzZSBpdCBpcyBub3QgYW4gXCJvd24gcHJvcGVydHlcIiBvZiBpdHMgcGFyZW50LlxcbmAgK1xuICAgICAgICBgWW91IGNhbiBhZGQgYSBydW50aW1lIG9wdGlvbiB0byBkaXNhYmxlIHRoZSBjaGVjayBvciB0aGlzIHdhcm5pbmc6XFxuYCArXG4gICAgICAgIGBTZWUgaHR0cHM6Ly9oYW5kbGViYXJzanMuY29tL2FwaS1yZWZlcmVuY2UvcnVudGltZS1vcHRpb25zLmh0bWwjb3B0aW9ucy10by1jb250cm9sLXByb3RvdHlwZS1hY2Nlc3MgZm9yIGRldGFpbHNgXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzZXRMb2dnZWRQcm9wZXJ0aWVzKCkge1xuICBPYmplY3Qua2V5cyhsb2dnZWRQcm9wZXJ0aWVzKS5mb3JFYWNoKHByb3BlcnR5TmFtZSA9PiB7XG4gICAgZGVsZXRlIGxvZ2dlZFByb3BlcnRpZXNbcHJvcGVydHlOYW1lXTtcbiAgfSk7XG59XG4iXX0=


/***/ }),
/* 357 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	exports.__esModule = true;
	
	var _utils = __webpack_require__(62);
	
	var logger = {
	  methodMap: ['debug', 'info', 'warn', 'error'],
	  level: 'info',
	
	  // Maps a given level value to the `methodMap` indexes above.
	  lookupLevel: function lookupLevel(level) {
	    if (typeof level === 'string') {
	      var levelMap = _utils.indexOf(logger.methodMap, level.toLowerCase());
	      if (levelMap >= 0) {
	        level = levelMap;
	      } else {
	        level = parseInt(level, 10);
	      }
	    }
	
	    return level;
	  },
	
	  // Can be overridden in the host environment
	  log: function log(level) {
	    level = logger.lookupLevel(level);
	
	    if (typeof console !== 'undefined' && logger.lookupLevel(logger.level) <= level) {
	      var method = logger.methodMap[level];
	      // eslint-disable-next-line no-console
	      if (!console[method]) {
	        method = 'log';
	      }
	
	      for (var _len = arguments.length, message = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
	        message[_key - 1] = arguments[_key];
	      }
	
	      console[method].apply(console, message); // eslint-disable-line no-console
	    }
	  }
	};
	
	exports['default'] = logger;
	module.exports = exports['default'];
	//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2xvZ2dlci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O3FCQUF3QixTQUFTOztBQUVqQyxJQUFJLE1BQU0sR0FBRztBQUNYLFdBQVMsRUFBRSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQztBQUM3QyxPQUFLLEVBQUUsTUFBTTs7O0FBR2IsYUFBVyxFQUFFLHFCQUFTLEtBQUssRUFBRTtBQUMzQixRQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtBQUM3QixVQUFJLFFBQVEsR0FBRyxlQUFRLE1BQU0sQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7QUFDOUQsVUFBSSxRQUFRLElBQUksQ0FBQyxFQUFFO0FBQ2pCLGFBQUssR0FBRyxRQUFRLENBQUM7T0FDbEIsTUFBTTtBQUNMLGFBQUssR0FBRyxRQUFRLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO09BQzdCO0tBQ0Y7O0FBRUQsV0FBTyxLQUFLLENBQUM7R0FDZDs7O0FBR0QsS0FBRyxFQUFFLGFBQVMsS0FBSyxFQUFjO0FBQy9CLFNBQUssR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDOztBQUVsQyxRQUNFLE9BQU8sT0FBTyxLQUFLLFdBQVcsSUFDOUIsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxFQUN6QztBQUNBLFVBQUksTUFBTSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7O0FBRXJDLFVBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7QUFDcEIsY0FBTSxHQUFHLEtBQUssQ0FBQztPQUNoQjs7d0NBWG1CLE9BQU87QUFBUCxlQUFPOzs7QUFZM0IsYUFBTyxDQUFDLE1BQU0sT0FBQyxDQUFmLE9BQU8sRUFBWSxPQUFPLENBQUMsQ0FBQztLQUM3QjtHQUNGO0NBQ0YsQ0FBQzs7cUJBRWEsTUFBTSIsImZpbGUiOiJsb2dnZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmRleE9mIH0gZnJvbSAnLi91dGlscyc7XG5cbmxldCBsb2dnZXIgPSB7XG4gIG1ldGhvZE1hcDogWydkZWJ1ZycsICdpbmZvJywgJ3dhcm4nLCAnZXJyb3InXSxcbiAgbGV2ZWw6ICdpbmZvJyxcblxuICAvLyBNYXBzIGEgZ2l2ZW4gbGV2ZWwgdmFsdWUgdG8gdGhlIGBtZXRob2RNYXBgIGluZGV4ZXMgYWJvdmUuXG4gIGxvb2t1cExldmVsOiBmdW5jdGlvbihsZXZlbCkge1xuICAgIGlmICh0eXBlb2YgbGV2ZWwgPT09ICdzdHJpbmcnKSB7XG4gICAgICBsZXQgbGV2ZWxNYXAgPSBpbmRleE9mKGxvZ2dlci5tZXRob2RNYXAsIGxldmVsLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgaWYgKGxldmVsTWFwID49IDApIHtcbiAgICAgICAgbGV2ZWwgPSBsZXZlbE1hcDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldmVsID0gcGFyc2VJbnQobGV2ZWwsIDEwKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbGV2ZWw7XG4gIH0sXG5cbiAgLy8gQ2FuIGJlIG92ZXJyaWRkZW4gaW4gdGhlIGhvc3QgZW52aXJvbm1lbnRcbiAgbG9nOiBmdW5jdGlvbihsZXZlbCwgLi4ubWVzc2FnZSkge1xuICAgIGxldmVsID0gbG9nZ2VyLmxvb2t1cExldmVsKGxldmVsKTtcblxuICAgIGlmIChcbiAgICAgIHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgbG9nZ2VyLmxvb2t1cExldmVsKGxvZ2dlci5sZXZlbCkgPD0gbGV2ZWxcbiAgICApIHtcbiAgICAgIGxldCBtZXRob2QgPSBsb2dnZXIubWV0aG9kTWFwW2xldmVsXTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBpZiAoIWNvbnNvbGVbbWV0aG9kXSkge1xuICAgICAgICBtZXRob2QgPSAnbG9nJztcbiAgICAgIH1cbiAgICAgIGNvbnNvbGVbbWV0aG9kXSguLi5tZXNzYWdlKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zb2xlXG4gICAgfVxuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBsb2dnZXI7XG4iXX0=


/***/ }),
/* 358 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	exports.convertAPIOptions = convertAPIOptions;
	exports.convertJSONOptions = convertJSONOptions;
	exports.convertTOptions = convertTOptions;
	exports.appendBackwardsAPI = appendBackwardsAPI;
	
	var _logger = __webpack_require__(79);
	
	var _logger2 = _interopRequireDefault(_logger);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	function convertInterpolation(options) {
	
	  options.interpolation = {
	    unescapeSuffix: 'HTML'
	  };
	
	  options.interpolation.prefix = options.interpolationPrefix || '__';
	  options.interpolation.suffix = options.interpolationSuffix || '__';
	  options.interpolation.escapeValue = options.escapeInterpolation || false;
	
	  options.interpolation.nestingPrefix = options.reusePrefix || '$t(';
	  options.interpolation.nestingSuffix = options.reuseSuffix || ')';
	
	  return options;
	}
	
	function convertAPIOptions(options) {
	  if (options.resStore) options.resources = options.resStore;
	
	  if (options.ns && options.ns.defaultNs) {
	    options.defaultNS = options.ns.defaultNs;
	    options.ns = options.ns.namespaces;
	  } else {
	    options.defaultNS = options.ns || 'translation';
	  }
	
	  if (options.fallbackToDefaultNS && options.defaultNS) options.fallbackNS = options.defaultNS;
	
	  options.saveMissing = options.sendMissing;
	  options.saveMissingTo = options.sendMissingTo || 'current';
	  options.returnNull = options.fallbackOnNull ? false : true;
	  options.returnEmptyString = options.fallbackOnEmpty ? false : true;
	  options.returnObjects = options.returnObjectTrees;
	  options.joinArrays = '\n';
	
	  options.returnedObjectHandler = options.objectTreeKeyHandler;
	  options.parseMissingKeyHandler = options.parseMissingKey;
	  options.appendNamespaceToMissingKey = true;
	
	  options.nsSeparator = options.nsseparator;
	  options.keySeparator = options.keyseparator;
	
	  if (options.shortcutFunction === 'sprintf') {
	    options.overloadTranslationOptionHandler = function (args) {
	      var values = [];
	
	      for (var i = 1; i < args.length; i++) {
	        values.push(args[i]);
	      }
	
	      return {
	        postProcess: 'sprintf',
	        sprintf: values
	      };
	    };
	  }
	
	  options.whitelist = options.lngWhitelist;
	  options.preload = options.preload;
	  if (options.load === 'current') options.load = 'currentOnly';
	  if (options.load === 'unspecific') options.load = 'languageOnly';
	
	  // backend
	  options.backend = options.backend || {};
	  options.backend.loadPath = options.resGetPath || 'locales/__lng__/__ns__.json';
	  options.backend.addPath = options.resPostPath || 'locales/add/__lng__/__ns__';
	  options.backend.allowMultiLoading = options.dynamicLoad;
	
	  // cache
	  options.cache = options.cache || {};
	  options.cache.prefix = 'res_';
	  options.cache.expirationTime = 7 * 24 * 60 * 60 * 1000;
	  options.cache.enabled = options.useLocalStorage ? true : false;
	
	  options = convertInterpolation(options);
	  if (options.defaultVariables) options.interpolation.defaultVariables = options.defaultVariables;
	
	  // TODO: deprecation
	  // if (options.getAsync === false) throw deprecation error
	
	  return options;
	}
	
	function convertJSONOptions(options) {
	  options = convertInterpolation(options);
	  options.joinArrays = '\n';
	
	  return options;
	}
	
	function convertTOptions(options) {
	  if (options.interpolationPrefix || options.interpolationSuffix || options.escapeInterpolation) {
	    options = convertInterpolation(options);
	  }
	
	  options.nsSeparator = options.nsseparator;
	  options.keySeparator = options.keyseparator;
	
	  options.returnObjects = options.returnObjectTrees;
	
	  return options;
	}
	
	function appendBackwardsAPI(i18n) {
	  i18n.lng = function () {
	    _logger2.default.deprecate('i18next.lng() can be replaced by i18next.language for detected language or i18next.languages for languages ordered by translation lookup.');
	    return i18n.services.languageUtils.toResolveHierarchy(i18n.language)[0];
	  };
	
	  i18n.preload = function (lngs, cb) {
	    _logger2.default.deprecate('i18next.preload() can be replaced with i18next.loadLanguages()');
	    i18n.loadLanguages(lngs, cb);
	  };
	
	  i18n.setLng = function (lng, options, callback) {
	    _logger2.default.deprecate('i18next.setLng() can be replaced with i18next.changeLanguage() or i18next.getFixedT() to get a translation function with fixed language or namespace.');
	    if (typeof options === 'function') {
	      callback = options;
	      options = {};
	    }
	    if (!options) options = {};
	
	    if (options.fixLng === true) {
	      if (callback) return callback(null, i18n.getFixedT(lng));
	    }
	
	    i18n.changeLanguage(lng, callback);
	  };
	
	  i18n.addPostProcessor = function (name, fc) {
	    _logger2.default.deprecate('i18next.addPostProcessor() can be replaced by i18next.use({ type: \'postProcessor\', name: \'name\', process: fc })');
	    i18n.use({
	      type: 'postProcessor',
	      name: name,
	      process: fc
	    });
	  };
	}

/***/ }),
/* 359 */
/***/ (function(module, exports) {

	"use strict";
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	exports.default = {
	
	  processors: {},
	
	  addPostProcessor: function addPostProcessor(module) {
	    this.processors[module.name] = module;
	  },
	  handle: function handle(processors, value, key, options, translator) {
	    var _this = this;
	
	    processors.forEach(function (processor) {
	      if (_this.processors[processor]) value = _this.processors[processor].process(value, key, options, translator);
	    });
	
	    return value;
	  }
	};

/***/ }),
/* 360 */
/***/ (function(module, exports, __webpack_require__) {

	// the whatwg-fetch polyfill installs the fetch() function
	// on the global object (window or self)
	//
	// Return that as the export for use in Webpack, Browserify etc.
	__webpack_require__(1164);
	module.exports = self.fetch.bind(self);


/***/ }),
/* 361 */
/***/ (function(module, exports, __webpack_require__) {

	var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;( function( factory ) {
		if ( true ) {
	
			// AMD. Register as an anonymous module.
			!(__WEBPACK_AMD_DEFINE_ARRAY__ = [ __webpack_require__(12), __webpack_require__(114) ], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
		} else {
	
			// Browser globals
			factory( jQuery );
		}
	} ( function( $ ) {
	
	// This file is deprecated
	return $.ui.ie = !!/msie [\w.]+/.exec( navigator.userAgent.toLowerCase() );
	} ) );


/***/ }),
/* 362 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	var DataReader = __webpack_require__(364);
	
	function ArrayReader(data) {
	    if (data) {
	        this.data = data;
	        this.length = this.data.length;
	        this.index = 0;
	        this.zero = 0;
	
	        for(var i = 0; i < this.data.length; i++) {
	            data[i] = data[i] & 0xFF;
	        }
	    }
	}
	ArrayReader.prototype = new DataReader();
	/**
	 * @see DataReader.byteAt
	 */
	ArrayReader.prototype.byteAt = function(i) {
	    return this.data[this.zero + i];
	};
	/**
	 * @see DataReader.lastIndexOfSignature
	 */
	ArrayReader.prototype.lastIndexOfSignature = function(sig) {
	    var sig0 = sig.charCodeAt(0),
	        sig1 = sig.charCodeAt(1),
	        sig2 = sig.charCodeAt(2),
	        sig3 = sig.charCodeAt(3);
	    for (var i = this.length - 4; i >= 0; --i) {
	        if (this.data[i] === sig0 && this.data[i + 1] === sig1 && this.data[i + 2] === sig2 && this.data[i + 3] === sig3) {
	            return i - this.zero;
	        }
	    }
	
	    return -1;
	};
	/**
	 * @see DataReader.readData
	 */
	ArrayReader.prototype.readData = function(size) {
	    this.checkOffset(size);
	    if(size === 0) {
	        return [];
	    }
	    var result = this.data.slice(this.zero + this.index, this.zero + this.index + size);
	    this.index += size;
	    return result;
	};
	module.exports = ArrayReader;


/***/ }),
/* 363 */
/***/ (function(module, exports) {

	'use strict';
	function CompressedObject() {
	    this.compressedSize = 0;
	    this.uncompressedSize = 0;
	    this.crc32 = 0;
	    this.compressionMethod = null;
	    this.compressedContent = null;
	}
	
	CompressedObject.prototype = {
	    /**
	     * Return the decompressed content in an unspecified format.
	     * The format will depend on the decompressor.
	     * @return {Object} the decompressed content.
	     */
	    getContent: function() {
	        return null; // see implementation
	    },
	    /**
	     * Return the compressed content in an unspecified format.
	     * The format will depend on the compressed conten source.
	     * @return {Object} the compressed content.
	     */
	    getCompressedContent: function() {
	        return null; // see implementation
	    }
	};
	module.exports = CompressedObject;


/***/ }),
/* 364 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	var utils = __webpack_require__(55);
	
	function DataReader(data) {
	    this.data = null; // type : see implementation
	    this.length = 0;
	    this.index = 0;
	    this.zero = 0;
	}
	DataReader.prototype = {
	    /**
	     * Check that the offset will not go too far.
	     * @param {string} offset the additional offset to check.
	     * @throws {Error} an Error if the offset is out of bounds.
	     */
	    checkOffset: function(offset) {
	        this.checkIndex(this.index + offset);
	    },
	    /**
	     * Check that the specifed index will not be too far.
	     * @param {string} newIndex the index to check.
	     * @throws {Error} an Error if the index is out of bounds.
	     */
	    checkIndex: function(newIndex) {
	        if (this.length < this.zero + newIndex || newIndex < 0) {
	            throw new Error("End of data reached (data length = " + this.length + ", asked index = " + (newIndex) + "). Corrupted zip ?");
	        }
	    },
	    /**
	     * Change the index.
	     * @param {number} newIndex The new index.
	     * @throws {Error} if the new index is out of the data.
	     */
	    setIndex: function(newIndex) {
	        this.checkIndex(newIndex);
	        this.index = newIndex;
	    },
	    /**
	     * Skip the next n bytes.
	     * @param {number} n the number of bytes to skip.
	     * @throws {Error} if the new index is out of the data.
	     */
	    skip: function(n) {
	        this.setIndex(this.index + n);
	    },
	    /**
	     * Get the byte at the specified index.
	     * @param {number} i the index to use.
	     * @return {number} a byte.
	     */
	    byteAt: function(i) {
	        // see implementations
	    },
	    /**
	     * Get the next number with a given byte size.
	     * @param {number} size the number of bytes to read.
	     * @return {number} the corresponding number.
	     */
	    readInt: function(size) {
	        var result = 0,
	            i;
	        this.checkOffset(size);
	        for (i = this.index + size - 1; i >= this.index; i--) {
	            result = (result << 8) + this.byteAt(i);
	        }
	        this.index += size;
	        return result;
	    },
	    /**
	     * Get the next string with a given byte size.
	     * @param {number} size the number of bytes to read.
	     * @return {string} the corresponding string.
	     */
	    readString: function(size) {
	        return utils.transformTo("string", this.readData(size));
	    },
	    /**
	     * Get raw data without conversion, <size> bytes.
	     * @param {number} size the number of bytes to read.
	     * @return {Object} the raw data, implementation specific.
	     */
	    readData: function(size) {
	        // see implementations
	    },
	    /**
	     * Find the last occurence of a zip signature (4 bytes).
	     * @param {string} sig the signature to find.
	     * @return {number} the index of the last occurence, -1 if not found.
	     */
	    lastIndexOfSignature: function(sig) {
	        // see implementations
	    },
	    /**
	     * Get the next date.
	     * @return {Date} the date.
	     */
	    readDate: function() {
	        var dostime = this.readInt(4);
	        return new Date(
	        ((dostime >> 25) & 0x7f) + 1980, // year
	        ((dostime >> 21) & 0x0f) - 1, // month
	        (dostime >> 16) & 0x1f, // day
	        (dostime >> 11) & 0x1f, // hour
	        (dostime >> 5) & 0x3f, // minute
	        (dostime & 0x1f) << 1); // second
	    }
	};
	module.exports = DataReader;


/***/ }),
/* 365 */
/***/ (function(module, exports) {

	'use strict';
	exports.base64 = false;
	exports.binary = false;
	exports.dir = false;
	exports.createFolders = false;
	exports.date = null;
	exports.compression = null;
	exports.compressionOptions = null;
	exports.comment = null;
	exports.unixPermissions = null;
	exports.dosPermissions = null;


/***/ }),
/* 366 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	var base64 = __webpack_require__(224);
	
	/**
	Usage:
	   zip = new JSZip();
	   zip.file("hello.txt", "Hello, World!").file("tempfile", "nothing");
	   zip.folder("images").file("smile.gif", base64Data, {base64: true});
	   zip.file("Xmas.txt", "Ho ho ho !", {date : new Date("December 25, 2007 00:00:01")});
	   zip.remove("tempfile");
	
	   base64zip = zip.generate();
	
	**/
	
	/**
	 * Representation a of zip file in js
	 * @constructor
	 * @param {String=|ArrayBuffer=|Uint8Array=} data the data to load, if any (optional).
	 * @param {Object=} options the options for creating this objects (optional).
	 */
	function JSZip(data, options) {
	    // if this constructor is used without `new`, it adds `new` before itself:
	    if(!(this instanceof JSZip)) return new JSZip(data, options);
	
	    // object containing the files :
	    // {
	    //   "folder/" : {...},
	    //   "folder/data.txt" : {...}
	    // }
	    this.files = {};
	
	    this.comment = null;
	
	    // Where we are in the hierarchy
	    this.root = "";
	    if (data) {
	        this.load(data, options);
	    }
	    this.clone = function() {
	        var newObj = new JSZip();
	        for (var i in this) {
	            if (typeof this[i] !== "function") {
	                newObj[i] = this[i];
	            }
	        }
	        return newObj;
	    };
	}
	JSZip.prototype = __webpack_require__(227);
	JSZip.prototype.load = __webpack_require__(1071);
	JSZip.support = __webpack_require__(115);
	JSZip.defaults = __webpack_require__(365);
	
	/**
	 * @deprecated
	 * This namespace will be removed in a future version without replacement.
	 */
	JSZip.utils = __webpack_require__(1069);
	
	JSZip.base64 = {
	    /**
	     * @deprecated
	     * This method will be removed in a future version without replacement.
	     */
	    encode : function(input) {
	        return base64.encode(input);
	    },
	    /**
	     * @deprecated
	     * This method will be removed in a future version without replacement.
	     */
	    decode : function(input) {
	        return base64.decode(input);
	    }
	};
	JSZip.compressions = __webpack_require__(225);
	module.exports = JSZip;


/***/ }),
/* 367 */
/***/ (function(module, exports) {

	'use strict';
	exports.LOCAL_FILE_HEADER = "PK\x03\x04";
	exports.CENTRAL_FILE_HEADER = "PK\x01\x02";
	exports.CENTRAL_DIRECTORY_END = "PK\x05\x06";
	exports.ZIP64_CENTRAL_DIRECTORY_LOCATOR = "PK\x06\x07";
	exports.ZIP64_CENTRAL_DIRECTORY_END = "PK\x06\x06";
	exports.DATA_DESCRIPTOR = "PK\x07\x08";


/***/ }),
/* 368 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	var DataReader = __webpack_require__(364);
	var utils = __webpack_require__(55);
	
	function StringReader(data, optimizedBinaryString) {
	    this.data = data;
	    if (!optimizedBinaryString) {
	        this.data = utils.string2binary(this.data);
	    }
	    this.length = this.data.length;
	    this.index = 0;
	    this.zero = 0;
	}
	StringReader.prototype = new DataReader();
	/**
	 * @see DataReader.byteAt
	 */
	StringReader.prototype.byteAt = function(i) {
	    return this.data.charCodeAt(this.zero + i);
	};
	/**
	 * @see DataReader.lastIndexOfSignature
	 */
	StringReader.prototype.lastIndexOfSignature = function(sig) {
	    return this.data.lastIndexOf(sig) - this.zero;
	};
	/**
	 * @see DataReader.readData
	 */
	StringReader.prototype.readData = function(size) {
	    this.checkOffset(size);
	    // this will work because the constructor applied the "& 0xff" mask.
	    var result = this.data.slice(this.zero + this.index, this.zero + this.index + size);
	    this.index += size;
	    return result;
	};
	module.exports = StringReader;


/***/ }),
/* 369 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	var ArrayReader = __webpack_require__(362);
	
	function Uint8ArrayReader(data) {
	    if (data) {
	        this.data = data;
	        this.length = this.data.length;
	        this.index = 0;
	        this.zero = 0;
	    }
	}
	Uint8ArrayReader.prototype = new ArrayReader();
	/**
	 * @see DataReader.readData
	 */
	Uint8ArrayReader.prototype.readData = function(size) {
	    this.checkOffset(size);
	    if(size === 0) {
	        // in IE10, when using subarray(idx, idx), we get the array [0x00] instead of [].
	        return new Uint8Array(0);
	    }
	    var result = this.data.subarray(this.zero + this.index, this.zero + this.index + size);
	    this.index += size;
	    return result;
	};
	module.exports = Uint8ArrayReader;


/***/ }),
/* 370 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	var utils = __webpack_require__(55);
	var support = __webpack_require__(115);
	var nodeBuffer = __webpack_require__(226);
	
	/**
	 * The following functions come from pako, from pako/lib/utils/strings
	 * released under the MIT license, see pako https://github.com/nodeca/pako/
	 */
	
	// Table with utf8 lengths (calculated by first byte of sequence)
	// Note, that 5 & 6-byte values and some 4-byte values can not be represented in JS,
	// because max possible codepoint is 0x10ffff
	var _utf8len = new Array(256);
	for (var i=0; i<256; i++) {
	  _utf8len[i] = (i >= 252 ? 6 : i >= 248 ? 5 : i >= 240 ? 4 : i >= 224 ? 3 : i >= 192 ? 2 : 1);
	}
	_utf8len[254]=_utf8len[254]=1; // Invalid sequence start
	
	// convert string to array (typed, when possible)
	var string2buf = function (str) {
	    var buf, c, c2, m_pos, i, str_len = str.length, buf_len = 0;
	
	    // count binary size
	    for (m_pos = 0; m_pos < str_len; m_pos++) {
	        c = str.charCodeAt(m_pos);
	        if ((c & 0xfc00) === 0xd800 && (m_pos+1 < str_len)) {
	            c2 = str.charCodeAt(m_pos+1);
	            if ((c2 & 0xfc00) === 0xdc00) {
	                c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);
	                m_pos++;
	            }
	        }
	        buf_len += c < 0x80 ? 1 : c < 0x800 ? 2 : c < 0x10000 ? 3 : 4;
	    }
	
	    // allocate buffer
	    if (support.uint8array) {
	        buf = new Uint8Array(buf_len);
	    } else {
	        buf = new Array(buf_len);
	    }
	
	    // convert
	    for (i=0, m_pos = 0; i < buf_len; m_pos++) {
	        c = str.charCodeAt(m_pos);
	        if ((c & 0xfc00) === 0xd800 && (m_pos+1 < str_len)) {
	            c2 = str.charCodeAt(m_pos+1);
	            if ((c2 & 0xfc00) === 0xdc00) {
	                c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);
	                m_pos++;
	            }
	        }
	        if (c < 0x80) {
	            /* one byte */
	            buf[i++] = c;
	        } else if (c < 0x800) {
	            /* two bytes */
	            buf[i++] = 0xC0 | (c >>> 6);
	            buf[i++] = 0x80 | (c & 0x3f);
	        } else if (c < 0x10000) {
	            /* three bytes */
	            buf[i++] = 0xE0 | (c >>> 12);
	            buf[i++] = 0x80 | (c >>> 6 & 0x3f);
	            buf[i++] = 0x80 | (c & 0x3f);
	        } else {
	            /* four bytes */
	            buf[i++] = 0xf0 | (c >>> 18);
	            buf[i++] = 0x80 | (c >>> 12 & 0x3f);
	            buf[i++] = 0x80 | (c >>> 6 & 0x3f);
	            buf[i++] = 0x80 | (c & 0x3f);
	        }
	    }
	
	    return buf;
	};
	
	// Calculate max possible position in utf8 buffer,
	// that will not break sequence. If that's not possible
	// - (very small limits) return max size as is.
	//
	// buf[] - utf8 bytes array
	// max   - length limit (mandatory);
	var utf8border = function(buf, max) {
	    var pos;
	
	    max = max || buf.length;
	    if (max > buf.length) { max = buf.length; }
	
	    // go back from last position, until start of sequence found
	    pos = max-1;
	    while (pos >= 0 && (buf[pos] & 0xC0) === 0x80) { pos--; }
	
	    // Fuckup - very small and broken sequence,
	    // return max, because we should return something anyway.
	    if (pos < 0) { return max; }
	
	    // If we came to start of buffer - that means vuffer is too small,
	    // return max too.
	    if (pos === 0) { return max; }
	
	    return (pos + _utf8len[buf[pos]] > max) ? pos : max;
	};
	
	// convert array to string
	var buf2string = function (buf) {
	    var str, i, out, c, c_len;
	    var len = buf.length;
	
	    // Reserve max possible length (2 words per char)
	    // NB: by unknown reasons, Array is significantly faster for
	    //     String.fromCharCode.apply than Uint16Array.
	    var utf16buf = new Array(len*2);
	
	    for (out=0, i=0; i<len;) {
	        c = buf[i++];
	        // quick process ascii
	        if (c < 0x80) { utf16buf[out++] = c; continue; }
	
	        c_len = _utf8len[c];
	        // skip 5 & 6 byte codes
	        if (c_len > 4) { utf16buf[out++] = 0xfffd; i += c_len-1; continue; }
	
	        // apply mask on first byte
	        c &= c_len === 2 ? 0x1f : c_len === 3 ? 0x0f : 0x07;
	        // join the rest
	        while (c_len > 1 && i < len) {
	            c = (c << 6) | (buf[i++] & 0x3f);
	            c_len--;
	        }
	
	        // terminated by end of string?
	        if (c_len > 1) { utf16buf[out++] = 0xfffd; continue; }
	
	        if (c < 0x10000) {
	            utf16buf[out++] = c;
	        } else {
	            c -= 0x10000;
	            utf16buf[out++] = 0xd800 | ((c >> 10) & 0x3ff);
	            utf16buf[out++] = 0xdc00 | (c & 0x3ff);
	        }
	    }
	
	    // shrinkBuf(utf16buf, out)
	    if (utf16buf.length !== out) {
	        if(utf16buf.subarray) {
	            utf16buf = utf16buf.subarray(0, out);
	        } else {
	            utf16buf.length = out;
	        }
	    }
	
	    // return String.fromCharCode.apply(null, utf16buf);
	    return utils.applyFromCharCode(utf16buf);
	};
	
	
	// That's all for the pako functions.
	
	
	/**
	 * Transform a javascript string into an array (typed if possible) of bytes,
	 * UTF-8 encoded.
	 * @param {String} str the string to encode
	 * @return {Array|Uint8Array|Buffer} the UTF-8 encoded string.
	 */
	exports.utf8encode = function utf8encode(str) {
	    if (support.nodebuffer) {
	        return nodeBuffer(str, "utf-8");
	    }
	
	    return string2buf(str);
	};
	
	
	/**
	 * Transform a bytes array (or a representation) representing an UTF-8 encoded
	 * string into a javascript string.
	 * @param {Array|Uint8Array|Buffer} buf the data de decode
	 * @return {String} the decoded string.
	 */
	exports.utf8decode = function utf8decode(buf) {
	    if (support.nodebuffer) {
	        return utils.transformTo("nodebuffer", buf).toString("utf-8");
	    }
	
	    buf = utils.transformTo(support.uint8array ? "uint8array" : "array", buf);
	
	    // return buf2string(buf);
	    // Chrome prefers to work with "small" chunks of data
	    // for the method buf2string.
	    // Firefox and Chrome has their own shortcut, IE doesn't seem to really care.
	    var result = [], k = 0, len = buf.length, chunk = 65536;
	    while (k < len) {
	        var nextBoundary = utf8border(buf, Math.min(k + chunk, len));
	        if (support.uint8array) {
	            result.push(buf2string(buf.subarray(k, nextBoundary)));
	        } else {
	            result.push(buf2string(buf.slice(k, nextBoundary)));
	        }
	        k = nextBoundary;
	    }
	    return result.join("");
	
	};
	// vim: set shiftwidth=4 softtabstop=4:


/***/ }),
/* 371 */
/***/ (function(module, exports, __webpack_require__) {

	/**
	 * @module core/parse
	 */
	
	'use strict';
	
	var utils = __webpack_require__(228);
	
	
	var parseXml;
	
	if (typeof window.DOMParser != "undefined") {
	    parseXml = function(xmlStr) {
	        return ( new window.DOMParser() ).parseFromString(xmlStr, "text/xml");
	    };
	} else if (typeof window.ActiveXObject != "undefined" &&
	       new window.ActiveXObject("Microsoft.XMLDOM")) {
	    parseXml = function(xmlStr) {
	        var xmlDoc = new window.ActiveXObject("Microsoft.XMLDOM");
	        xmlDoc.async = "false";
	        xmlDoc.loadXML(xmlStr);
	        return xmlDoc;
	    };
	}
	
	/**
	 * @private
	 * @global
	 */
	
	/**
	 * A hash-table associating the node name of common WCS objects with their
	 * according parse function.
	 */
	
	var parseFunctions = {};
	
	/**
	 * @private
	 */
	
	var ns = {
	    xlink: "http://www.w3.org/1999/xlink",
	    ows: "http://www.opengis.net/ows/2.0",
	    wcs: "http://www.opengis.net/wcs/2.0",
	    gml: "http://www.opengis.net/gml/3.2",
	    gmlcov: "http://www.opengis.net/gmlcov/1.0",
	    swe: "http://www.opengis.net/swe/2.0",
	    crs: "http://www.opengis.net/wcs/crs/1.0",
	    int: "http://www.opengis.net/wcs/interpolation/1.0"
	}
	
	var xPath = utils.createXPath(ns);
	
	var xPathArray = utils.createXPathArray(ns);
	
	/**
	 * Registers a new node parsing function for a specified tagName. A function
	 * can be registered to multiple tagNames.
	 *
	 * @param tagName the tagName the function is registered to
	 *
	 * @param parseFunction the function to be executed. The function shall
	 *                      receive the tag name and a wrapped DOM object
	 *                      as parameters and shall return an object of all parsed
	 *                      attributes. For extension parsing functions only
	 *                      extensive properties shall be parsed.
	 */
	
	function pushParseFunction(tagName, parseFunction) {
	    if (parseFunctions.hasOwnProperty(tagName)) {
	        parseFunctions[tagName].push(parseFunction);
	    }
	    else {
	        parseFunctions[tagName] = [parseFunction];
	    }
	}
	
	/**
	 * Convenience function to push multiple parsing functions at one. The same
	 * rules as with `WCS.Core.pushParseFunction` apply here.
	 *
	 * @param obj a hash-table with key-value pairs, where the key is the tag name
	 *            and the value the parsing function.
	 */
	
	function pushParseFunctions(obj) {
	    for (var key in obj) {
	        pushParseFunction(key, obj[key]);
	    }
	}
	
	/**
	 * Calls all registered functions for a specified node name. A merged object
	 * with all results of each function is returned.
	 *
	 * @param tagName the tagName of the node to be parsed
	 *
	 * @param node the DOM object
	 *
	 * @returns the merged object of all parsing results
	 */
	
	function callParseFunctions(tagName, node, options) {
	    if (parseFunctions.hasOwnProperty(tagName)) {
	        var funcs = parseFunctions[tagName],
	            endResult = {};
	        for (var i = 0; i < funcs.length; ++i) {
	            var result = funcs[i](node, options);
	            utils.deepMerge(endResult, result);
	        }
	        return endResult;
	    }
	    else
	        throw new Error("No parsing function for tag name '" + tagName + "' registered.");
	}
	
	/**
	 * Parses a (EO-)WCS response to JavaScript objects. 
	 *
	 * @param xml the XML string to be parsed
	 * @param options options for parsing
	 * @param options.throwOnException if true, an exception is thrown when an
	 *                                 exception report is parsed
	 *
	 * @returns depending on the response a JavaScript object with all parsed data
	 *          or a collection thereof.
	 */
	
	function parse(xml, options) {
	    var root;
	    if (typeof xml === "string") {
	        root = parseXml(xml).documentElement;
	    }
	    else {
	        root = xml.documentElement;
	    }
	    return callParseFunctions(root.localName, root, options);
	}
	
	
	/**
	 * Parsing function for ows:ExceptionReport elements.
	 *
	 * @param node the DOM object
	 * @param options
	 * @param options.throwOnException throw an exception when an exception report
	 *                                 is parsed
	 *
	 * @returns the parsed object
	 */
	
	function parseExceptionReport(node, options) {
	    var exception = xPath(node, "ows:Exception");
	    var parsed = {
	        "code": exception.getAttribute("exceptionCode"),
	        "locator": exception.getAttribute("locator"),
	        "text": xPath(exception, "ows:ExceptionText/text()")
	    };
	    if (options && options.throwOnException) {
	        var e = new Exception(parsed.text);
	        e.locator = parsed.locator;
	        e.code = parsed.code;
	        throw e;
	    }
	    else return parsed;
	}
	
	/**
	 * Parsing function for wcs:Capabilities elements.
	 *
	 * @param node the DOM object
	 *
	 * @returns the parsed object
	 */
	
	function parseCapabilities(node) {
	    return {
	        "serviceIdentification": {
	            "title": xPath(node, "ows:ServiceIdentification/ows:Title/text()"),
	            "abstract": xPath(node, "ows:ServiceIdentification/ows:Abstract/text()"),
	            "keywords": xPathArray(node, "ows:ServiceIdentification/ows:Keywords/ows:Keyword/text()"),
	            "serviceType": xPath(node, "ows:ServiceIdentification/ows:ServiceType/text()"),
	            "serviceTypeVersion": xPath(node, "ows:ServiceIdentification/ows:ServiceTypeVersion/text()"),
	            "profiles": xPathArray(node, "ows:ServiceIdentification/ows:Profile/text()"),
	            "fees": xPath(node, "ows:ServiceIdentification/ows:Fees/text()"),
	            "accessConstraints": xPath(node, "ows:ServiceIdentification/ows:AccessConstraints/text()")
	        },
	        "serviceProvider": {
	            "providerName": xPath(node, "ows:ServiceProvider/ows:ProviderName/text()"),
	            "providerSite": xPath(node, "ows:ServiceProvider/ows:ProviderSite/@xlink:href"),
	            "individualName": xPath(node, "ows:ServiceProvider/ows:ServiceContact/ows:IndividualName/text()"),
	            "positionName": xPath(node, "ows:ServiceProvider/ows:ServiceContact/ows:PositionName/text()"),
	            "contactInfo": {
	                "phone": {
	                    "voice": xPath(node, "ows:ServiceProvider/ows:ServiceContact/ows:ContactInfo/ows:Phone/ows:Voice/text()"),
	                    "facsimile": xPath(node, "ows:ServiceProvider/ows:ServiceContact/ows:ContactInfo/ows:Phone/ows:Facsimile/text()")
	                },
	                "address": {
	                    "deliveryPoint": xPath(node, "ows:ServiceProvider/ows:ServiceContact/ows:ContactInfo/ows:Address/ows:DeliveryPoint/text()"),
	                    "city": xPath(node, "ows:ServiceProvider/ows:ServiceContact/ows:ContactInfo/ows:Address/ows:City/text()"),
	                    "administrativeArea": xPath(node, "ows:ServiceProvider/ows:ServiceContact/ows:ContactInfo/ows:Address/ows:AdministrativeArea/text()"),
	                    "postalCode": xPath(node, "ows:ServiceProvider/ows:ServiceContact/ows:ContactInfo/ows:Address/ows:PostalCode/text()"),
	                    "country": xPath(node, "ows:ServiceProvider/ows:ServiceContact/ows:ContactInfo/ows:Address/ows:Country/text()"),
	                    "electronicMailAddress": xPath(node, "ows:ServiceProvider/ows:ServiceContact/ows:ContactInfo/ows:Address/ows:ElectronicMailAddress/text()")
	                },
	                "onlineResource": xPath(node, "ows:ServiceProvider/ows:ServiceContact/ows:ContactInfo/ows:OnlineResource/@xlink:href"),
	                "hoursOfService": xPath(node, "ows:ServiceProvider/ows:ServiceContact/ows:ContactInfo/ows:HoursOfService/text()"),
	                "contactInstructions": xPath(node, "ows:ServiceProvider/ows:ServiceContact/ows:ContactInfo/ows:ContactInstructions/text()")
	            },
	            "role": xPath(node, "ows:ServiceProvider/ows:ServiceContact/ows:Role/text()")
	        },
	        "serviceMetadata": {
	            "formatsSupported": xPathArray(node, "wcs:ServiceMetadata/wcs:formatSupported/text()"),
	            "crssSupported": xPathArray(node, "wcs:ServiceMetadata/wcs:Extension/crs:CrsMetadata/crs:crsSupported/text()"),
	            "interpolationsSupported": xPathArray(node, "wcs:ServiceMetadata/wcs:Extension/int:InterpolationMetadata/int:InterpolationSupported/text()")
	        },
	        "operations": utils.map(xPathArray(node, "ows:OperationsMetadata/ows:Operation"), function(op) {
	            return {
	                "name": op.getAttribute("name"),
	                "getUrl": xPath(op, "ows:DCP/ows:HTTP/ows:Get/@xlink:href"),
	                "postUrl": xPath(op, "ows:DCP/ows:HTTP/ows:Post/@xlink:href")
	            };
	        }),
	        "contents": {
	            "coverages": utils.map(xPathArray(node, "wcs:Contents/wcs:CoverageSummary"), function(sum) {
	                return {
	                    "coverageId": xPath(sum, "wcs:CoverageId/text()"),
	                    "coverageSubtype": xPath(sum, "wcs:CoverageSubtype/text()")
	                };
	            })
	        }
	    };
	}
	
	/**
	 * Parsing function for wcs:CoverageDescriptions elements.
	 *
	 * @param node the DOM object
	 *
	 * @returns the parsed object
	 */
	
	function parseCoverageDescriptions(node) {
	    var descs = utils.map(xPathArray(node, "wcs:CoverageDescription"), function(desc) {
	        return callParseFunctions(desc.localName, desc);
	    });
	    return {"coverageDescriptions": descs};
	}
	
	/**
	 * Parsing function for wcs:CoverageDescription elements.
	 *
	 * @param node the DOM object
	 *
	 * @returns the parsed object
	 */
	
	function parseCoverageDescription(node) {
	    var low = utils.stringToIntArray(xPath(node, "gml:domainSet/gml:RectifiedGrid/gml:limits/gml:GridEnvelope/gml:low/text()|gml:domainSet/gml:ReferenceableGrid/gml:limits/gml:GridEnvelope/gml:low/text()")),
	        high = utils.stringToIntArray(xPath(node, "gml:domainSet/gml:RectifiedGrid/gml:limits/gml:GridEnvelope/gml:high/text()|gml:domainSet/gml:ReferenceableGrid/gml:limits/gml:GridEnvelope/gml:high/text()"));
	
	    var size = [];
	    for (var i = 0; i < Math.min(low.length, high.length); ++i) {
	        size.push(high[i] + 1 - low[i]);
	    }
	
	    var pos = xPath(node, "gml:domainSet/gml:RectifiedGrid/gml:origin/gml:Point/gml:pos/text()");
	    if (pos !== "") {
	        var origin = utils.stringToFloatArray(pos);
	    }
	    var offsetVectors = utils.map(xPathArray(node, "gml:domainSet/gml:RectifiedGrid/gml:offsetVector/text()"), function(offsetVector) {
	        return utils.stringToFloatArray(offsetVector);
	    });
	
	    // simplified resolution interface. does not make sense for not axis
	    // aligned offset vectors.
	    var resolution = [];
	    for (var i = 0; i < offsetVectors.length; ++i) {
	        for (var j = 0; j < offsetVectors.length; ++j) {
	            if (offsetVectors[j][i] != 0.0) {
	                resolution.push(offsetVectors[j][i]);
	            }
	            continue;
	        }
	    }
	
	    // get the grid, either rectified or referenceable
	    var grid = xPath(node, "gml:domainSet/gml:RectifiedGrid");
	    if (!grid) grid = xPath(node, "gml:domainSet/gml:ReferenceableGrid");
	
	    var obj = {
	        "coverageId": xPath(node, "wcs:CoverageId/text()"),
	        "dimensions": parseInt(xPath(node, "gml:domainSet/gml:RectifiedGrid/@dimension|gml:domainSet/gml:ReferenceableGrid/@dimension")),
	        "bounds": {
	            "projection": xPath(node, "gml:boundedBy/gml:Envelope/@srsName"),
	            "lower": utils.stringToFloatArray(xPath(node, "gml:boundedBy/gml:Envelope/gml:lowerCorner/text()")),
	            "upper": utils.stringToFloatArray(xPath(node, "gml:boundedBy/gml:Envelope/gml:upperCorner/text()"))
	        },
	        "envelope": {
	            "low": low,
	            "high": high
	        },
	        "size": size,
	        "origin": origin,
	        "offsetVectors": offsetVectors,
	        "resolution": resolution,
	        "rangeType": utils.map(xPathArray(node, "gmlcov:rangeType/swe:DataRecord/swe:field"), function(field) {
	            return {
	                "name": field.getAttribute("name"),
	                "description": xPath(field, "swe:Quantity/swe:description/text()"),
	                "uom": xPath(field, "swe:Quantity/swe:uom/@code"),
	                "nilValues": utils.map(xPathArray(field, "swe:Quantity/swe:nilValues/swe:NilValues/swe:nilValue"), function(nilValue) {
	                    return {
	                        "value": parseInt(nilValue.textContent),
	                        "reason": nilValue.getAttribute("reason")
	                    }
	                }),
	                "allowedValues": utils.stringToFloatArray(xPath(field, "swe:Quantity/swe:constraint/swe:AllowedValues/swe:interval/text()")),
	                "significantFigures": parseInt(xPath(field, "swe:Quantity/swe:constraint/swe:AllowedValues/swe:significantFigures/text()"))
	            };
	        }),
	        "coverageSubtype": xPath(node, "wcs:ServiceParameters/wcs:CoverageSubtype/text()"),
	        "nativeFormat": xPath(node, "wcs:ServiceParameters/wcs:nativeFormat/text()")
	    };
	
	    return obj;
	}
	
	/* Push core parsing functions */
	pushParseFunctions({
	    "Capabilities": parseCapabilities,
	    "ExceptionReport": parseExceptionReport,
	    "CoverageDescriptions": parseCoverageDescriptions,
	    "CoverageDescription": parseCoverageDescription,
	    "RectifiedGridCoverage": parseCoverageDescription
	});
	
	
	module.exports = {
	    pushParseFunction: pushParseFunction,
	    pushParseFunctions: pushParseFunctions,
	    parse: parse,
	    callParseFunctions: callParseFunctions
	}


/***/ }),
/* 372 */
/***/ (function(module, exports, __webpack_require__) {

	/* WEBPACK VAR INJECTION */(function(Promise) {'use strict';
	var immediate = __webpack_require__(1055);
	
	/* istanbul ignore next */
	function INTERNAL() {}
	
	var handlers = {};
	
	var REJECTED = ['REJECTED'];
	var FULFILLED = ['FULFILLED'];
	var PENDING = ['PENDING'];
	
	module.exports = Promise;
	
	function Promise(resolver) {
	  if (typeof resolver !== 'function') {
	    throw new TypeError('resolver must be a function');
	  }
	  this.state = PENDING;
	  this.queue = [];
	  this.outcome = void 0;
	  if (resolver !== INTERNAL) {
	    safelyResolveThenable(this, resolver);
	  }
	}
	
	Promise.prototype["finally"] = function (callback) {
	  if (typeof callback !== 'function') {
	    return this;
	  }
	  var p = this.constructor;
	  return this.then(resolve, reject);
	
	  function resolve(value) {
	    function yes () {
	      return value;
	    }
	    return p.resolve(callback()).then(yes);
	  }
	  function reject(reason) {
	    function no () {
	      throw reason;
	    }
	    return p.resolve(callback()).then(no);
	  }
	};
	Promise.prototype["catch"] = function (onRejected) {
	  return this.then(null, onRejected);
	};
	Promise.prototype.then = function (onFulfilled, onRejected) {
	  if (typeof onFulfilled !== 'function' && this.state === FULFILLED ||
	    typeof onRejected !== 'function' && this.state === REJECTED) {
	    return this;
	  }
	  var promise = new this.constructor(INTERNAL);
	  if (this.state !== PENDING) {
	    var resolver = this.state === FULFILLED ? onFulfilled : onRejected;
	    unwrap(promise, resolver, this.outcome);
	  } else {
	    this.queue.push(new QueueItem(promise, onFulfilled, onRejected));
	  }
	
	  return promise;
	};
	function QueueItem(promise, onFulfilled, onRejected) {
	  this.promise = promise;
	  if (typeof onFulfilled === 'function') {
	    this.onFulfilled = onFulfilled;
	    this.callFulfilled = this.otherCallFulfilled;
	  }
	  if (typeof onRejected === 'function') {
	    this.onRejected = onRejected;
	    this.callRejected = this.otherCallRejected;
	  }
	}
	QueueItem.prototype.callFulfilled = function (value) {
	  handlers.resolve(this.promise, value);
	};
	QueueItem.prototype.otherCallFulfilled = function (value) {
	  unwrap(this.promise, this.onFulfilled, value);
	};
	QueueItem.prototype.callRejected = function (value) {
	  handlers.reject(this.promise, value);
	};
	QueueItem.prototype.otherCallRejected = function (value) {
	  unwrap(this.promise, this.onRejected, value);
	};
	
	function unwrap(promise, func, value) {
	  immediate(function () {
	    var returnValue;
	    try {
	      returnValue = func(value);
	    } catch (e) {
	      return handlers.reject(promise, e);
	    }
	    if (returnValue === promise) {
	      handlers.reject(promise, new TypeError('Cannot resolve promise with itself'));
	    } else {
	      handlers.resolve(promise, returnValue);
	    }
	  });
	}
	
	handlers.resolve = function (self, value) {
	  var result = tryCatch(getThen, value);
	  if (result.status === 'error') {
	    return handlers.reject(self, result.value);
	  }
	  var thenable = result.value;
	
	  if (thenable) {
	    safelyResolveThenable(self, thenable);
	  } else {
	    self.state = FULFILLED;
	    self.outcome = value;
	    var i = -1;
	    var len = self.queue.length;
	    while (++i < len) {
	      self.queue[i].callFulfilled(value);
	    }
	  }
	  return self;
	};
	handlers.reject = function (self, error) {
	  self.state = REJECTED;
	  self.outcome = error;
	  var i = -1;
	  var len = self.queue.length;
	  while (++i < len) {
	    self.queue[i].callRejected(error);
	  }
	  return self;
	};
	
	function getThen(obj) {
	  // Make sure we only access the accessor once as required by the spec
	  var then = obj && obj.then;
	  if (obj && (typeof obj === 'object' || typeof obj === 'function') && typeof then === 'function') {
	    return function appyThen() {
	      then.apply(obj, arguments);
	    };
	  }
	}
	
	function safelyResolveThenable(self, thenable) {
	  // Either fulfill, reject or reject with error
	  var called = false;
	  function onError(value) {
	    if (called) {
	      return;
	    }
	    called = true;
	    handlers.reject(self, value);
	  }
	
	  function onSuccess(value) {
	    if (called) {
	      return;
	    }
	    called = true;
	    handlers.resolve(self, value);
	  }
	
	  function tryToUnwrap() {
	    thenable(onSuccess, onError);
	  }
	
	  var result = tryCatch(tryToUnwrap);
	  if (result.status === 'error') {
	    onError(result.value);
	  }
	}
	
	function tryCatch(func, value) {
	  var out = {};
	  try {
	    out.value = func(value);
	    out.status = 'success';
	  } catch (e) {
	    out.status = 'error';
	    out.value = e;
	  }
	  return out;
	}
	
	Promise.resolve = resolve;
	function resolve(value) {
	  if (value instanceof this) {
	    return value;
	  }
	  return handlers.resolve(new this(INTERNAL), value);
	}
	
	Promise.reject = reject;
	function reject(reason) {
	  var promise = new this(INTERNAL);
	  return handlers.reject(promise, reason);
	}
	
	Promise.all = all;
	function all(iterable) {
	  var self = this;
	  if (Object.prototype.toString.call(iterable) !== '[object Array]') {
	    return this.reject(new TypeError('must be an array'));
	  }
	
	  var len = iterable.length;
	  var called = false;
	  if (!len) {
	    return this.resolve([]);
	  }
	
	  var values = new Array(len);
	  var resolved = 0;
	  var i = -1;
	  var promise = new this(INTERNAL);
	
	  while (++i < len) {
	    allResolver(iterable[i], i);
	  }
	  return promise;
	  function allResolver(value, i) {
	    self.resolve(value).then(resolveFromAll, function (error) {
	      if (!called) {
	        called = true;
	        handlers.reject(promise, error);
	      }
	    });
	    function resolveFromAll(outValue) {
	      values[i] = outValue;
	      if (++resolved === len && !called) {
	        called = true;
	        handlers.resolve(promise, values);
	      }
	    }
	  }
	}
	
	Promise.race = race;
	function race(iterable) {
	  var self = this;
	  if (Object.prototype.toString.call(iterable) !== '[object Array]') {
	    return this.reject(new TypeError('must be an array'));
	  }
	
	  var len = iterable.length;
	  var called = false;
	  if (!len) {
	    return this.resolve([]);
	  }
	
	  var i = -1;
	  var promise = new this(INTERNAL);
	
	  while (++i < len) {
	    resolver(iterable[i]);
	  }
	  return promise;
	  function resolver(value) {
	    self.resolve(value).then(function (response) {
	      if (!called) {
	        called = true;
	        handlers.resolve(promise, response);
	      }
	    }, function (error) {
	      if (!called) {
	        called = true;
	        handlers.reject(promise, error);
	      }
	    });
	  }
	}
	
	/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(27)))

/***/ }),
/* 373 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Afrikaans [af]
	//! author : Werner Mollentze : https://github.com/wernerm
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var af = moment.defineLocale('af', {
	        months: 'Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember'.split(
	            '_'
	        ),
	        monthsShort: 'Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des'.split('_'),
	        weekdays: 'Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag'.split(
	            '_'
	        ),
	        weekdaysShort: 'Son_Maa_Din_Woe_Don_Vry_Sat'.split('_'),
	        weekdaysMin: 'So_Ma_Di_Wo_Do_Vr_Sa'.split('_'),
	        meridiemParse: /vm|nm/i,
	        isPM: function (input) {
	            return /^nm$/i.test(input);
	        },
	        meridiem: function (hours, minutes, isLower) {
	            if (hours < 12) {
	                return isLower ? 'vm' : 'VM';
	            } else {
	                return isLower ? 'nm' : 'NM';
	            }
	        },
	        longDateFormat: {
	            LT: 'HH:mm',
	            LTS: 'HH:mm:ss',
	            L: 'DD/MM/YYYY',
	            LL: 'D MMMM YYYY',
	            LLL: 'D MMMM YYYY HH:mm',
	            LLLL: 'dddd, D MMMM YYYY HH:mm',
	        },
	        calendar: {
	            sameDay: '[Vandag om] LT',
	            nextDay: '[Môre om] LT',
	            nextWeek: 'dddd [om] LT',
	            lastDay: '[Gister om] LT',
	            lastWeek: '[Laas] dddd [om] LT',
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: 'oor %s',
	            past: '%s gelede',
	            s: "'n paar sekondes",
	            ss: '%d sekondes',
	            m: "'n minuut",
	            mm: '%d minute',
	            h: "'n uur",
	            hh: '%d ure',
	            d: "'n dag",
	            dd: '%d dae',
	            M: "'n maand",
	            MM: '%d maande',
	            y: "'n jaar",
	            yy: '%d jaar',
	        },
	        dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/,
	        ordinal: function (number) {
	            return (
	                number +
	                (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de')
	            ); // Thanks to Joris Röling : https://github.com/jjupiter
	        },
	        week: {
	            dow: 1, // Maandag is die eerste dag van die week.
	            doy: 4, // Die week wat die 4de Januarie bevat is die eerste week van die jaar.
	        },
	    });
	
	    return af;
	
	})));


/***/ }),
/* 374 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Arabic (Algeria) [ar-dz]
	//! author : Amine Roukh: https://github.com/Amine27
	//! author : Abdel Said: https://github.com/abdelsaid
	//! author : Ahmed Elkhatib
	//! author : forabi https://github.com/forabi
	//! author : Noureddine LOUAHEDJ : https://github.com/noureddinem
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var pluralForm = function (n) {
	            return n === 0
	                ? 0
	                : n === 1
	                ? 1
	                : n === 2
	                ? 2
	                : n % 100 >= 3 && n % 100 <= 10
	                ? 3
	                : n % 100 >= 11
	                ? 4
	                : 5;
	        },
	        plurals = {
	            s: [
	                'أقل من ثانية',
	                'ثانية واحدة',
	                ['ثانيتان', 'ثانيتين'],
	                '%d ثوان',
	                '%d ثانية',
	                '%d ثانية',
	            ],
	            m: [
	                'أقل من دقيقة',
	                'دقيقة واحدة',
	                ['دقيقتان', 'دقيقتين'],
	                '%d دقائق',
	                '%d دقيقة',
	                '%d دقيقة',
	            ],
	            h: [
	                'أقل من ساعة',
	                'ساعة واحدة',
	                ['ساعتان', 'ساعتين'],
	                '%d ساعات',
	                '%d ساعة',
	                '%d ساعة',
	            ],
	            d: [
	                'أقل من يوم',
	                'يوم واحد',
	                ['يومان', 'يومين'],
	                '%d أيام',
	                '%d يومًا',
	                '%d يوم',
	            ],
	            M: [
	                'أقل من شهر',
	                'شهر واحد',
	                ['شهران', 'شهرين'],
	                '%d أشهر',
	                '%d شهرا',
	                '%d شهر',
	            ],
	            y: [
	                'أقل من عام',
	                'عام واحد',
	                ['عامان', 'عامين'],
	                '%d أعوام',
	                '%d عامًا',
	                '%d عام',
	            ],
	        },
	        pluralize = function (u) {
	            return function (number, withoutSuffix, string, isFuture) {
	                var f = pluralForm(number),
	                    str = plurals[u][pluralForm(number)];
	                if (f === 2) {
	                    str = str[withoutSuffix ? 0 : 1];
	                }
	                return str.replace(/%d/i, number);
	            };
	        },
	        months = [
	            'جانفي',
	            'فيفري',
	            'مارس',
	            'أفريل',
	            'ماي',
	            'جوان',
	            'جويلية',
	            'أوت',
	            'سبتمبر',
	            'أكتوبر',
	            'نوفمبر',
	            'ديسمبر',
	        ];
	
	    var arDz = moment.defineLocale('ar-dz', {
	        months: months,
	        monthsShort: months,
	        weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
	        weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),
	        weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),
	        weekdaysParseExact: true,
	        longDateFormat: {
	            LT: 'HH:mm',
	            LTS: 'HH:mm:ss',
	            L: 'D/\u200FM/\u200FYYYY',
	            LL: 'D MMMM YYYY',
	            LLL: 'D MMMM YYYY HH:mm',
	            LLLL: 'dddd D MMMM YYYY HH:mm',
	        },
	        meridiemParse: /ص|م/,
	        isPM: function (input) {
	            return 'م' === input;
	        },
	        meridiem: function (hour, minute, isLower) {
	            if (hour < 12) {
	                return 'ص';
	            } else {
	                return 'م';
	            }
	        },
	        calendar: {
	            sameDay: '[اليوم عند الساعة] LT',
	            nextDay: '[غدًا عند الساعة] LT',
	            nextWeek: 'dddd [عند الساعة] LT',
	            lastDay: '[أمس عند الساعة] LT',
	            lastWeek: 'dddd [عند الساعة] LT',
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: 'بعد %s',
	            past: 'منذ %s',
	            s: pluralize('s'),
	            ss: pluralize('s'),
	            m: pluralize('m'),
	            mm: pluralize('m'),
	            h: pluralize('h'),
	            hh: pluralize('h'),
	            d: pluralize('d'),
	            dd: pluralize('d'),
	            M: pluralize('M'),
	            MM: pluralize('M'),
	            y: pluralize('y'),
	            yy: pluralize('y'),
	        },
	        postformat: function (string) {
	            return string.replace(/,/g, '،');
	        },
	        week: {
	            dow: 0, // Sunday is the first day of the week.
	            doy: 4, // The week that contains Jan 4th is the first week of the year.
	        },
	    });
	
	    return arDz;
	
	})));


/***/ }),
/* 375 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Arabic (Kuwait) [ar-kw]
	//! author : Nusret Parlak: https://github.com/nusretparlak
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var arKw = moment.defineLocale('ar-kw', {
	        months: 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split(
	            '_'
	        ),
	        monthsShort: 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split(
	            '_'
	        ),
	        weekdays: 'الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
	        weekdaysShort: 'احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),
	        weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),
	        weekdaysParseExact: true,
	        longDateFormat: {
	            LT: 'HH:mm',
	            LTS: 'HH:mm:ss',
	            L: 'DD/MM/YYYY',
	            LL: 'D MMMM YYYY',
	            LLL: 'D MMMM YYYY HH:mm',
	            LLLL: 'dddd D MMMM YYYY HH:mm',
	        },
	        calendar: {
	            sameDay: '[اليوم على الساعة] LT',
	            nextDay: '[غدا على الساعة] LT',
	            nextWeek: 'dddd [على الساعة] LT',
	            lastDay: '[أمس على الساعة] LT',
	            lastWeek: 'dddd [على الساعة] LT',
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: 'في %s',
	            past: 'منذ %s',
	            s: 'ثوان',
	            ss: '%d ثانية',
	            m: 'دقيقة',
	            mm: '%d دقائق',
	            h: 'ساعة',
	            hh: '%d ساعات',
	            d: 'يوم',
	            dd: '%d أيام',
	            M: 'شهر',
	            MM: '%d أشهر',
	            y: 'سنة',
	            yy: '%d سنوات',
	        },
	        week: {
	            dow: 0, // Sunday is the first day of the week.
	            doy: 12, // The week that contains Jan 12th is the first week of the year.
	        },
	    });
	
	    return arKw;
	
	})));


/***/ }),
/* 376 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Arabic (Lybia) [ar-ly]
	//! author : Ali Hmer: https://github.com/kikoanis
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var symbolMap = {
	            '1': '1',
	            '2': '2',
	            '3': '3',
	            '4': '4',
	            '5': '5',
	            '6': '6',
	            '7': '7',
	            '8': '8',
	            '9': '9',
	            '0': '0',
	        },
	        pluralForm = function (n) {
	            return n === 0
	                ? 0
	                : n === 1
	                ? 1
	                : n === 2
	                ? 2
	                : n % 100 >= 3 && n % 100 <= 10
	                ? 3
	                : n % 100 >= 11
	                ? 4
	                : 5;
	        },
	        plurals = {
	            s: [
	                'أقل من ثانية',
	                'ثانية واحدة',
	                ['ثانيتان', 'ثانيتين'],
	                '%d ثوان',
	                '%d ثانية',
	                '%d ثانية',
	            ],
	            m: [
	                'أقل من دقيقة',
	                'دقيقة واحدة',
	                ['دقيقتان', 'دقيقتين'],
	                '%d دقائق',
	                '%d دقيقة',
	                '%d دقيقة',
	            ],
	            h: [
	                'أقل من ساعة',
	                'ساعة واحدة',
	                ['ساعتان', 'ساعتين'],
	                '%d ساعات',
	                '%d ساعة',
	                '%d ساعة',
	            ],
	            d: [
	                'أقل من يوم',
	                'يوم واحد',
	                ['يومان', 'يومين'],
	                '%d أيام',
	                '%d يومًا',
	                '%d يوم',
	            ],
	            M: [
	                'أقل من شهر',
	                'شهر واحد',
	                ['شهران', 'شهرين'],
	                '%d أشهر',
	                '%d شهرا',
	                '%d شهر',
	            ],
	            y: [
	                'أقل من عام',
	                'عام واحد',
	                ['عامان', 'عامين'],
	                '%d أعوام',
	                '%d عامًا',
	                '%d عام',
	            ],
	        },
	        pluralize = function (u) {
	            return function (number, withoutSuffix, string, isFuture) {
	                var f = pluralForm(number),
	                    str = plurals[u][pluralForm(number)];
	                if (f === 2) {
	                    str = str[withoutSuffix ? 0 : 1];
	                }
	                return str.replace(/%d/i, number);
	            };
	        },
	        months = [
	            'يناير',
	            'فبراير',
	            'مارس',
	            'أبريل',
	            'مايو',
	            'يونيو',
	            'يوليو',
	            'أغسطس',
	            'سبتمبر',
	            'أكتوبر',
	            'نوفمبر',
	            'ديسمبر',
	        ];
	
	    var arLy = moment.defineLocale('ar-ly', {
	        months: months,
	        monthsShort: months,
	        weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
	        weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),
	        weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),
	        weekdaysParseExact: true,
	        longDateFormat: {
	            LT: 'HH:mm',
	            LTS: 'HH:mm:ss',
	            L: 'D/\u200FM/\u200FYYYY',
	            LL: 'D MMMM YYYY',
	            LLL: 'D MMMM YYYY HH:mm',
	            LLLL: 'dddd D MMMM YYYY HH:mm',
	        },
	        meridiemParse: /ص|م/,
	        isPM: function (input) {
	            return 'م' === input;
	        },
	        meridiem: function (hour, minute, isLower) {
	            if (hour < 12) {
	                return 'ص';
	            } else {
	                return 'م';
	            }
	        },
	        calendar: {
	            sameDay: '[اليوم عند الساعة] LT',
	            nextDay: '[غدًا عند الساعة] LT',
	            nextWeek: 'dddd [عند الساعة] LT',
	            lastDay: '[أمس عند الساعة] LT',
	            lastWeek: 'dddd [عند الساعة] LT',
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: 'بعد %s',
	            past: 'منذ %s',
	            s: pluralize('s'),
	            ss: pluralize('s'),
	            m: pluralize('m'),
	            mm: pluralize('m'),
	            h: pluralize('h'),
	            hh: pluralize('h'),
	            d: pluralize('d'),
	            dd: pluralize('d'),
	            M: pluralize('M'),
	            MM: pluralize('M'),
	            y: pluralize('y'),
	            yy: pluralize('y'),
	        },
	        preparse: function (string) {
	            return string.replace(/،/g, ',');
	        },
	        postformat: function (string) {
	            return string
	                .replace(/\d/g, function (match) {
	                    return symbolMap[match];
	                })
	                .replace(/,/g, '،');
	        },
	        week: {
	            dow: 6, // Saturday is the first day of the week.
	            doy: 12, // The week that contains Jan 12th is the first week of the year.
	        },
	    });
	
	    return arLy;
	
	})));


/***/ }),
/* 377 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Arabic (Morocco) [ar-ma]
	//! author : ElFadili Yassine : https://github.com/ElFadiliY
	//! author : Abdel Said : https://github.com/abdelsaid
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var arMa = moment.defineLocale('ar-ma', {
	        months: 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split(
	            '_'
	        ),
	        monthsShort: 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split(
	            '_'
	        ),
	        weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
	        weekdaysShort: 'احد_اثنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),
	        weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),
	        weekdaysParseExact: true,
	        longDateFormat: {
	            LT: 'HH:mm',
	            LTS: 'HH:mm:ss',
	            L: 'DD/MM/YYYY',
	            LL: 'D MMMM YYYY',
	            LLL: 'D MMMM YYYY HH:mm',
	            LLLL: 'dddd D MMMM YYYY HH:mm',
	        },
	        calendar: {
	            sameDay: '[اليوم على الساعة] LT',
	            nextDay: '[غدا على الساعة] LT',
	            nextWeek: 'dddd [على الساعة] LT',
	            lastDay: '[أمس على الساعة] LT',
	            lastWeek: 'dddd [على الساعة] LT',
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: 'في %s',
	            past: 'منذ %s',
	            s: 'ثوان',
	            ss: '%d ثانية',
	            m: 'دقيقة',
	            mm: '%d دقائق',
	            h: 'ساعة',
	            hh: '%d ساعات',
	            d: 'يوم',
	            dd: '%d أيام',
	            M: 'شهر',
	            MM: '%d أشهر',
	            y: 'سنة',
	            yy: '%d سنوات',
	        },
	        week: {
	            dow: 6, // Saturday is the first day of the week.
	            doy: 12, // The week that contains Jan 12th is the first week of the year.
	        },
	    });
	
	    return arMa;
	
	})));


/***/ }),
/* 378 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Arabic (Saudi Arabia) [ar-sa]
	//! author : Suhail Alkowaileet : https://github.com/xsoh
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var symbolMap = {
	            '1': '١',
	            '2': '٢',
	            '3': '٣',
	            '4': '٤',
	            '5': '٥',
	            '6': '٦',
	            '7': '٧',
	            '8': '٨',
	            '9': '٩',
	            '0': '٠',
	        },
	        numberMap = {
	            '١': '1',
	            '٢': '2',
	            '٣': '3',
	            '٤': '4',
	            '٥': '5',
	            '٦': '6',
	            '٧': '7',
	            '٨': '8',
	            '٩': '9',
	            '٠': '0',
	        };
	
	    var arSa = moment.defineLocale('ar-sa', {
	        months: 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split(
	            '_'
	        ),
	        monthsShort: 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split(
	            '_'
	        ),
	        weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
	        weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),
	        weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),
	        weekdaysParseExact: true,
	        longDateFormat: {
	            LT: 'HH:mm',
	            LTS: 'HH:mm:ss',
	            L: 'DD/MM/YYYY',
	            LL: 'D MMMM YYYY',
	            LLL: 'D MMMM YYYY HH:mm',
	            LLLL: 'dddd D MMMM YYYY HH:mm',
	        },
	        meridiemParse: /ص|م/,
	        isPM: function (input) {
	            return 'م' === input;
	        },
	        meridiem: function (hour, minute, isLower) {
	            if (hour < 12) {
	                return 'ص';
	            } else {
	                return 'م';
	            }
	        },
	        calendar: {
	            sameDay: '[اليوم على الساعة] LT',
	            nextDay: '[غدا على الساعة] LT',
	            nextWeek: 'dddd [على الساعة] LT',
	            lastDay: '[أمس على الساعة] LT',
	            lastWeek: 'dddd [على الساعة] LT',
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: 'في %s',
	            past: 'منذ %s',
	            s: 'ثوان',
	            ss: '%d ثانية',
	            m: 'دقيقة',
	            mm: '%d دقائق',
	            h: 'ساعة',
	            hh: '%d ساعات',
	            d: 'يوم',
	            dd: '%d أيام',
	            M: 'شهر',
	            MM: '%d أشهر',
	            y: 'سنة',
	            yy: '%d سنوات',
	        },
	        preparse: function (string) {
	            return string
	                .replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {
	                    return numberMap[match];
	                })
	                .replace(/،/g, ',');
	        },
	        postformat: function (string) {
	            return string
	                .replace(/\d/g, function (match) {
	                    return symbolMap[match];
	                })
	                .replace(/,/g, '،');
	        },
	        week: {
	            dow: 0, // Sunday is the first day of the week.
	            doy: 6, // The week that contains Jan 6th is the first week of the year.
	        },
	    });
	
	    return arSa;
	
	})));


/***/ }),
/* 379 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale  :  Arabic (Tunisia) [ar-tn]
	//! author : Nader Toukabri : https://github.com/naderio
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var arTn = moment.defineLocale('ar-tn', {
	        months: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split(
	            '_'
	        ),
	        monthsShort: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split(
	            '_'
	        ),
	        weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
	        weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),
	        weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),
	        weekdaysParseExact: true,
	        longDateFormat: {
	            LT: 'HH:mm',
	            LTS: 'HH:mm:ss',
	            L: 'DD/MM/YYYY',
	            LL: 'D MMMM YYYY',
	            LLL: 'D MMMM YYYY HH:mm',
	            LLLL: 'dddd D MMMM YYYY HH:mm',
	        },
	        calendar: {
	            sameDay: '[اليوم على الساعة] LT',
	            nextDay: '[غدا على الساعة] LT',
	            nextWeek: 'dddd [على الساعة] LT',
	            lastDay: '[أمس على الساعة] LT',
	            lastWeek: 'dddd [على الساعة] LT',
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: 'في %s',
	            past: 'منذ %s',
	            s: 'ثوان',
	            ss: '%d ثانية',
	            m: 'دقيقة',
	            mm: '%d دقائق',
	            h: 'ساعة',
	            hh: '%d ساعات',
	            d: 'يوم',
	            dd: '%d أيام',
	            M: 'شهر',
	            MM: '%d أشهر',
	            y: 'سنة',
	            yy: '%d سنوات',
	        },
	        week: {
	            dow: 1, // Monday is the first day of the week.
	            doy: 4, // The week that contains Jan 4th is the first week of the year.
	        },
	    });
	
	    return arTn;
	
	})));


/***/ }),
/* 380 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Arabic [ar]
	//! author : Abdel Said: https://github.com/abdelsaid
	//! author : Ahmed Elkhatib
	//! author : forabi https://github.com/forabi
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var symbolMap = {
	            '1': '١',
	            '2': '٢',
	            '3': '٣',
	            '4': '٤',
	            '5': '٥',
	            '6': '٦',
	            '7': '٧',
	            '8': '٨',
	            '9': '٩',
	            '0': '٠',
	        },
	        numberMap = {
	            '١': '1',
	            '٢': '2',
	            '٣': '3',
	            '٤': '4',
	            '٥': '5',
	            '٦': '6',
	            '٧': '7',
	            '٨': '8',
	            '٩': '9',
	            '٠': '0',
	        },
	        pluralForm = function (n) {
	            return n === 0
	                ? 0
	                : n === 1
	                ? 1
	                : n === 2
	                ? 2
	                : n % 100 >= 3 && n % 100 <= 10
	                ? 3
	                : n % 100 >= 11
	                ? 4
	                : 5;
	        },
	        plurals = {
	            s: [
	                'أقل من ثانية',
	                'ثانية واحدة',
	                ['ثانيتان', 'ثانيتين'],
	                '%d ثوان',
	                '%d ثانية',
	                '%d ثانية',
	            ],
	            m: [
	                'أقل من دقيقة',
	                'دقيقة واحدة',
	                ['دقيقتان', 'دقيقتين'],
	                '%d دقائق',
	                '%d دقيقة',
	                '%d دقيقة',
	            ],
	            h: [
	                'أقل من ساعة',
	                'ساعة واحدة',
	                ['ساعتان', 'ساعتين'],
	                '%d ساعات',
	                '%d ساعة',
	                '%d ساعة',
	            ],
	            d: [
	                'أقل من يوم',
	                'يوم واحد',
	                ['يومان', 'يومين'],
	                '%d أيام',
	                '%d يومًا',
	                '%d يوم',
	            ],
	            M: [
	                'أقل من شهر',
	                'شهر واحد',
	                ['شهران', 'شهرين'],
	                '%d أشهر',
	                '%d شهرا',
	                '%d شهر',
	            ],
	            y: [
	                'أقل من عام',
	                'عام واحد',
	                ['عامان', 'عامين'],
	                '%d أعوام',
	                '%d عامًا',
	                '%d عام',
	            ],
	        },
	        pluralize = function (u) {
	            return function (number, withoutSuffix, string, isFuture) {
	                var f = pluralForm(number),
	                    str = plurals[u][pluralForm(number)];
	                if (f === 2) {
	                    str = str[withoutSuffix ? 0 : 1];
	                }
	                return str.replace(/%d/i, number);
	            };
	        },
	        months = [
	            'يناير',
	            'فبراير',
	            'مارس',
	            'أبريل',
	            'مايو',
	            'يونيو',
	            'يوليو',
	            'أغسطس',
	            'سبتمبر',
	            'أكتوبر',
	            'نوفمبر',
	            'ديسمبر',
	        ];
	
	    var ar = moment.defineLocale('ar', {
	        months: months,
	        monthsShort: months,
	        weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
	        weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),
	        weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),
	        weekdaysParseExact: true,
	        longDateFormat: {
	            LT: 'HH:mm',
	            LTS: 'HH:mm:ss',
	            L: 'D/\u200FM/\u200FYYYY',
	            LL: 'D MMMM YYYY',
	            LLL: 'D MMMM YYYY HH:mm',
	            LLLL: 'dddd D MMMM YYYY HH:mm',
	        },
	        meridiemParse: /ص|م/,
	        isPM: function (input) {
	            return 'م' === input;
	        },
	        meridiem: function (hour, minute, isLower) {
	            if (hour < 12) {
	                return 'ص';
	            } else {
	                return 'م';
	            }
	        },
	        calendar: {
	            sameDay: '[اليوم عند الساعة] LT',
	            nextDay: '[غدًا عند الساعة] LT',
	            nextWeek: 'dddd [عند الساعة] LT',
	            lastDay: '[أمس عند الساعة] LT',
	            lastWeek: 'dddd [عند الساعة] LT',
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: 'بعد %s',
	            past: 'منذ %s',
	            s: pluralize('s'),
	            ss: pluralize('s'),
	            m: pluralize('m'),
	            mm: pluralize('m'),
	            h: pluralize('h'),
	            hh: pluralize('h'),
	            d: pluralize('d'),
	            dd: pluralize('d'),
	            M: pluralize('M'),
	            MM: pluralize('M'),
	            y: pluralize('y'),
	            yy: pluralize('y'),
	        },
	        preparse: function (string) {
	            return string
	                .replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {
	                    return numberMap[match];
	                })
	                .replace(/،/g, ',');
	        },
	        postformat: function (string) {
	            return string
	                .replace(/\d/g, function (match) {
	                    return symbolMap[match];
	                })
	                .replace(/,/g, '،');
	        },
	        week: {
	            dow: 6, // Saturday is the first day of the week.
	            doy: 12, // The week that contains Jan 12th is the first week of the year.
	        },
	    });
	
	    return ar;
	
	})));


/***/ }),
/* 381 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Azerbaijani [az]
	//! author : topchiyev : https://github.com/topchiyev
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var suffixes = {
	        1: '-inci',
	        5: '-inci',
	        8: '-inci',
	        70: '-inci',
	        80: '-inci',
	        2: '-nci',
	        7: '-nci',
	        20: '-nci',
	        50: '-nci',
	        3: '-üncü',
	        4: '-üncü',
	        100: '-üncü',
	        6: '-ncı',
	        9: '-uncu',
	        10: '-uncu',
	        30: '-uncu',
	        60: '-ıncı',
	        90: '-ıncı',
	    };
	
	    var az = moment.defineLocale('az', {
	        months: 'yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr'.split(
	            '_'
	        ),
	        monthsShort: 'yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek'.split('_'),
	        weekdays: 'Bazar_Bazar ertəsi_Çərşənbə axşamı_Çərşənbə_Cümə axşamı_Cümə_Şənbə'.split(
	            '_'
	        ),
	        weekdaysShort: 'Baz_BzE_ÇAx_Çər_CAx_Cüm_Şən'.split('_'),
	        weekdaysMin: 'Bz_BE_ÇA_Çə_CA_Cü_Şə'.split('_'),
	        weekdaysParseExact: true,
	        longDateFormat: {
	            LT: 'HH:mm',
	            LTS: 'HH:mm:ss',
	            L: 'DD.MM.YYYY',
	            LL: 'D MMMM YYYY',
	            LLL: 'D MMMM YYYY HH:mm',
	            LLLL: 'dddd, D MMMM YYYY HH:mm',
	        },
	        calendar: {
	            sameDay: '[bugün saat] LT',
	            nextDay: '[sabah saat] LT',
	            nextWeek: '[gələn həftə] dddd [saat] LT',
	            lastDay: '[dünən] LT',
	            lastWeek: '[keçən həftə] dddd [saat] LT',
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: '%s sonra',
	            past: '%s əvvəl',
	            s: 'birneçə saniyə',
	            ss: '%d saniyə',
	            m: 'bir dəqiqə',
	            mm: '%d dəqiqə',
	            h: 'bir saat',
	            hh: '%d saat',
	            d: 'bir gün',
	            dd: '%d gün',
	            M: 'bir ay',
	            MM: '%d ay',
	            y: 'bir il',
	            yy: '%d il',
	        },
	        meridiemParse: /gecə|səhər|gündüz|axşam/,
	        isPM: function (input) {
	            return /^(gündüz|axşam)$/.test(input);
	        },
	        meridiem: function (hour, minute, isLower) {
	            if (hour < 4) {
	                return 'gecə';
	            } else if (hour < 12) {
	                return 'səhər';
	            } else if (hour < 17) {
	                return 'gündüz';
	            } else {
	                return 'axşam';
	            }
	        },
	        dayOfMonthOrdinalParse: /\d{1,2}-(ıncı|inci|nci|üncü|ncı|uncu)/,
	        ordinal: function (number) {
	            if (number === 0) {
	                // special case for zero
	                return number + '-ıncı';
	            }
	            var a = number % 10,
	                b = (number % 100) - a,
	                c = number >= 100 ? 100 : null;
	            return number + (suffixes[a] || suffixes[b] || suffixes[c]);
	        },
	        week: {
	            dow: 1, // Monday is the first day of the week.
	            doy: 7, // The week that contains Jan 7th is the first week of the year.
	        },
	    });
	
	    return az;
	
	})));


/***/ }),
/* 382 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Belarusian [be]
	//! author : Dmitry Demidov : https://github.com/demidov91
	//! author: Praleska: http://praleska.pro/
	//! Author : Menelion Elensúle : https://github.com/Oire
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    function plural(word, num) {
	        var forms = word.split('_');
	        return num % 10 === 1 && num % 100 !== 11
	            ? forms[0]
	            : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20)
	            ? forms[1]
	            : forms[2];
	    }
	    function relativeTimeWithPlural(number, withoutSuffix, key) {
	        var format = {
	            ss: withoutSuffix ? 'секунда_секунды_секунд' : 'секунду_секунды_секунд',
	            mm: withoutSuffix ? 'хвіліна_хвіліны_хвілін' : 'хвіліну_хвіліны_хвілін',
	            hh: withoutSuffix ? 'гадзіна_гадзіны_гадзін' : 'гадзіну_гадзіны_гадзін',
	            dd: 'дзень_дні_дзён',
	            MM: 'месяц_месяцы_месяцаў',
	            yy: 'год_гады_гадоў',
	        };
	        if (key === 'm') {
	            return withoutSuffix ? 'хвіліна' : 'хвіліну';
	        } else if (key === 'h') {
	            return withoutSuffix ? 'гадзіна' : 'гадзіну';
	        } else {
	            return number + ' ' + plural(format[key], +number);
	        }
	    }
	
	    var be = moment.defineLocale('be', {
	        months: {
	            format: 'студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня'.split(
	                '_'
	            ),
	            standalone: 'студзень_люты_сакавік_красавік_травень_чэрвень_ліпень_жнівень_верасень_кастрычнік_лістапад_снежань'.split(
	                '_'
	            ),
	        },
	        monthsShort: 'студ_лют_сак_крас_трав_чэрв_ліп_жнів_вер_каст_ліст_снеж'.split(
	            '_'
	        ),
	        weekdays: {
	            format: 'нядзелю_панядзелак_аўторак_сераду_чацвер_пятніцу_суботу'.split(
	                '_'
	            ),
	            standalone: 'нядзеля_панядзелак_аўторак_серада_чацвер_пятніца_субота'.split(
	                '_'
	            ),
	            isFormat: /\[ ?[Ууў] ?(?:мінулую|наступную)? ?\] ?dddd/,
	        },
	        weekdaysShort: 'нд_пн_ат_ср_чц_пт_сб'.split('_'),
	        weekdaysMin: 'нд_пн_ат_ср_чц_пт_сб'.split('_'),
	        longDateFormat: {
	            LT: 'HH:mm',
	            LTS: 'HH:mm:ss',
	            L: 'DD.MM.YYYY',
	            LL: 'D MMMM YYYY г.',
	            LLL: 'D MMMM YYYY г., HH:mm',
	            LLLL: 'dddd, D MMMM YYYY г., HH:mm',
	        },
	        calendar: {
	            sameDay: '[Сёння ў] LT',
	            nextDay: '[Заўтра ў] LT',
	            lastDay: '[Учора ў] LT',
	            nextWeek: function () {
	                return '[У] dddd [ў] LT';
	            },
	            lastWeek: function () {
	                switch (this.day()) {
	                    case 0:
	                    case 3:
	                    case 5:
	                    case 6:
	                        return '[У мінулую] dddd [ў] LT';
	                    case 1:
	                    case 2:
	                    case 4:
	                        return '[У мінулы] dddd [ў] LT';
	                }
	            },
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: 'праз %s',
	            past: '%s таму',
	            s: 'некалькі секунд',
	            m: relativeTimeWithPlural,
	            mm: relativeTimeWithPlural,
	            h: relativeTimeWithPlural,
	            hh: relativeTimeWithPlural,
	            d: 'дзень',
	            dd: relativeTimeWithPlural,
	            M: 'месяц',
	            MM: relativeTimeWithPlural,
	            y: 'год',
	            yy: relativeTimeWithPlural,
	        },
	        meridiemParse: /ночы|раніцы|дня|вечара/,
	        isPM: function (input) {
	            return /^(дня|вечара)$/.test(input);
	        },
	        meridiem: function (hour, minute, isLower) {
	            if (hour < 4) {
	                return 'ночы';
	            } else if (hour < 12) {
	                return 'раніцы';
	            } else if (hour < 17) {
	                return 'дня';
	            } else {
	                return 'вечара';
	            }
	        },
	        dayOfMonthOrdinalParse: /\d{1,2}-(і|ы|га)/,
	        ordinal: function (number, period) {
	            switch (period) {
	                case 'M':
	                case 'd':
	                case 'DDD':
	                case 'w':
	                case 'W':
	                    return (number % 10 === 2 || number % 10 === 3) &&
	                        number % 100 !== 12 &&
	                        number % 100 !== 13
	                        ? number + '-і'
	                        : number + '-ы';
	                case 'D':
	                    return number + '-га';
	                default:
	                    return number;
	            }
	        },
	        week: {
	            dow: 1, // Monday is the first day of the week.
	            doy: 7, // The week that contains Jan 7th is the first week of the year.
	        },
	    });
	
	    return be;
	
	})));


/***/ }),
/* 383 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Bulgarian [bg]
	//! author : Krasen Borisov : https://github.com/kraz
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var bg = moment.defineLocale('bg', {
	        months: 'януари_февруари_март_април_май_юни_юли_август_септември_октомври_ноември_декември'.split(
	            '_'
	        ),
	        monthsShort: 'яну_фев_мар_апр_май_юни_юли_авг_сеп_окт_ное_дек'.split('_'),
	        weekdays: 'неделя_понеделник_вторник_сряда_четвъртък_петък_събота'.split(
	            '_'
	        ),
	        weekdaysShort: 'нед_пон_вто_сря_чет_пет_съб'.split('_'),
	        weekdaysMin: 'нд_пн_вт_ср_чт_пт_сб'.split('_'),
	        longDateFormat: {
	            LT: 'H:mm',
	            LTS: 'H:mm:ss',
	            L: 'D.MM.YYYY',
	            LL: 'D MMMM YYYY',
	            LLL: 'D MMMM YYYY H:mm',
	            LLLL: 'dddd, D MMMM YYYY H:mm',
	        },
	        calendar: {
	            sameDay: '[Днес в] LT',
	            nextDay: '[Утре в] LT',
	            nextWeek: 'dddd [в] LT',
	            lastDay: '[Вчера в] LT',
	            lastWeek: function () {
	                switch (this.day()) {
	                    case 0:
	                    case 3:
	                    case 6:
	                        return '[Миналата] dddd [в] LT';
	                    case 1:
	                    case 2:
	                    case 4:
	                    case 5:
	                        return '[Миналия] dddd [в] LT';
	                }
	            },
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: 'след %s',
	            past: 'преди %s',
	            s: 'няколко секунди',
	            ss: '%d секунди',
	            m: 'минута',
	            mm: '%d минути',
	            h: 'час',
	            hh: '%d часа',
	            d: 'ден',
	            dd: '%d дена',
	            M: 'месец',
	            MM: '%d месеца',
	            y: 'година',
	            yy: '%d години',
	        },
	        dayOfMonthOrdinalParse: /\d{1,2}-(ев|ен|ти|ви|ри|ми)/,
	        ordinal: function (number) {
	            var lastDigit = number % 10,
	                last2Digits = number % 100;
	            if (number === 0) {
	                return number + '-ев';
	            } else if (last2Digits === 0) {
	                return number + '-ен';
	            } else if (last2Digits > 10 && last2Digits < 20) {
	                return number + '-ти';
	            } else if (lastDigit === 1) {
	                return number + '-ви';
	            } else if (lastDigit === 2) {
	                return number + '-ри';
	            } else if (lastDigit === 7 || lastDigit === 8) {
	                return number + '-ми';
	            } else {
	                return number + '-ти';
	            }
	        },
	        week: {
	            dow: 1, // Monday is the first day of the week.
	            doy: 7, // The week that contains Jan 7th is the first week of the year.
	        },
	    });
	
	    return bg;
	
	})));


/***/ }),
/* 384 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Bambara [bm]
	//! author : Estelle Comment : https://github.com/estellecomment
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var bm = moment.defineLocale('bm', {
	        months: 'Zanwuyekalo_Fewuruyekalo_Marisikalo_Awirilikalo_Mɛkalo_Zuwɛnkalo_Zuluyekalo_Utikalo_Sɛtanburukalo_ɔkutɔburukalo_Nowanburukalo_Desanburukalo'.split(
	            '_'
	        ),
	        monthsShort: 'Zan_Few_Mar_Awi_Mɛ_Zuw_Zul_Uti_Sɛt_ɔku_Now_Des'.split('_'),
	        weekdays: 'Kari_Ntɛnɛn_Tarata_Araba_Alamisa_Juma_Sibiri'.split('_'),
	        weekdaysShort: 'Kar_Ntɛ_Tar_Ara_Ala_Jum_Sib'.split('_'),
	        weekdaysMin: 'Ka_Nt_Ta_Ar_Al_Ju_Si'.split('_'),
	        longDateFormat: {
	            LT: 'HH:mm',
	            LTS: 'HH:mm:ss',
	            L: 'DD/MM/YYYY',
	            LL: 'MMMM [tile] D [san] YYYY',
	            LLL: 'MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm',
	            LLLL: 'dddd MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm',
	        },
	        calendar: {
	            sameDay: '[Bi lɛrɛ] LT',
	            nextDay: '[Sini lɛrɛ] LT',
	            nextWeek: 'dddd [don lɛrɛ] LT',
	            lastDay: '[Kunu lɛrɛ] LT',
	            lastWeek: 'dddd [tɛmɛnen lɛrɛ] LT',
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: '%s kɔnɔ',
	            past: 'a bɛ %s bɔ',
	            s: 'sanga dama dama',
	            ss: 'sekondi %d',
	            m: 'miniti kelen',
	            mm: 'miniti %d',
	            h: 'lɛrɛ kelen',
	            hh: 'lɛrɛ %d',
	            d: 'tile kelen',
	            dd: 'tile %d',
	            M: 'kalo kelen',
	            MM: 'kalo %d',
	            y: 'san kelen',
	            yy: 'san %d',
	        },
	        week: {
	            dow: 1, // Monday is the first day of the week.
	            doy: 4, // The week that contains Jan 4th is the first week of the year.
	        },
	    });
	
	    return bm;
	
	})));


/***/ }),
/* 385 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Bengali [bn]
	//! author : Kaushik Gandhi : https://github.com/kaushikgandhi
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var symbolMap = {
	            '1': '১',
	            '2': '২',
	            '3': '৩',
	            '4': '৪',
	            '5': '৫',
	            '6': '৬',
	            '7': '৭',
	            '8': '৮',
	            '9': '৯',
	            '0': '০',
	        },
	        numberMap = {
	            '১': '1',
	            '২': '2',
	            '৩': '3',
	            '৪': '4',
	            '৫': '5',
	            '৬': '6',
	            '৭': '7',
	            '৮': '8',
	            '৯': '9',
	            '০': '0',
	        };
	
	    var bn = moment.defineLocale('bn', {
	        months: 'জানুয়ারি_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর'.split(
	            '_'
	        ),
	        monthsShort: 'জানু_ফেব্রু_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্ট_অক্টো_নভে_ডিসে'.split(
	            '_'
	        ),
	        weekdays: 'রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার'.split(
	            '_'
	        ),
	        weekdaysShort: 'রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি'.split('_'),
	        weekdaysMin: 'রবি_সোম_মঙ্গল_বুধ_বৃহ_শুক্র_শনি'.split('_'),
	        longDateFormat: {
	            LT: 'A h:mm সময়',
	            LTS: 'A h:mm:ss সময়',
	            L: 'DD/MM/YYYY',
	            LL: 'D MMMM YYYY',
	            LLL: 'D MMMM YYYY, A h:mm সময়',
	            LLLL: 'dddd, D MMMM YYYY, A h:mm সময়',
	        },
	        calendar: {
	            sameDay: '[আজ] LT',
	            nextDay: '[আগামীকাল] LT',
	            nextWeek: 'dddd, LT',
	            lastDay: '[গতকাল] LT',
	            lastWeek: '[গত] dddd, LT',
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: '%s পরে',
	            past: '%s আগে',
	            s: 'কয়েক সেকেন্ড',
	            ss: '%d সেকেন্ড',
	            m: 'এক মিনিট',
	            mm: '%d মিনিট',
	            h: 'এক ঘন্টা',
	            hh: '%d ঘন্টা',
	            d: 'এক দিন',
	            dd: '%d দিন',
	            M: 'এক মাস',
	            MM: '%d মাস',
	            y: 'এক বছর',
	            yy: '%d বছর',
	        },
	        preparse: function (string) {
	            return string.replace(/[১২৩৪৫৬৭৮৯০]/g, function (match) {
	                return numberMap[match];
	            });
	        },
	        postformat: function (string) {
	            return string.replace(/\d/g, function (match) {
	                return symbolMap[match];
	            });
	        },
	        meridiemParse: /রাত|সকাল|দুপুর|বিকাল|রাত/,
	        meridiemHour: function (hour, meridiem) {
	            if (hour === 12) {
	                hour = 0;
	            }
	            if (
	                (meridiem === 'রাত' && hour >= 4) ||
	                (meridiem === 'দুপুর' && hour < 5) ||
	                meridiem === 'বিকাল'
	            ) {
	                return hour + 12;
	            } else {
	                return hour;
	            }
	        },
	        meridiem: function (hour, minute, isLower) {
	            if (hour < 4) {
	                return 'রাত';
	            } else if (hour < 10) {
	                return 'সকাল';
	            } else if (hour < 17) {
	                return 'দুপুর';
	            } else if (hour < 20) {
	                return 'বিকাল';
	            } else {
	                return 'রাত';
	            }
	        },
	        week: {
	            dow: 0, // Sunday is the first day of the week.
	            doy: 6, // The week that contains Jan 6th is the first week of the year.
	        },
	    });
	
	    return bn;
	
	})));


/***/ }),
/* 386 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Tibetan [bo]
	//! author : Thupten N. Chakrishar : https://github.com/vajradog
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var symbolMap = {
	            '1': '༡',
	            '2': '༢',
	            '3': '༣',
	            '4': '༤',
	            '5': '༥',
	            '6': '༦',
	            '7': '༧',
	            '8': '༨',
	            '9': '༩',
	            '0': '༠',
	        },
	        numberMap = {
	            '༡': '1',
	            '༢': '2',
	            '༣': '3',
	            '༤': '4',
	            '༥': '5',
	            '༦': '6',
	            '༧': '7',
	            '༨': '8',
	            '༩': '9',
	            '༠': '0',
	        };
	
	    var bo = moment.defineLocale('bo', {
	        months: 'ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ'.split(
	            '_'
	        ),
	        monthsShort: 'ཟླ་1_ཟླ་2_ཟླ་3_ཟླ་4_ཟླ་5_ཟླ་6_ཟླ་7_ཟླ་8_ཟླ་9_ཟླ་10_ཟླ་11_ཟླ་12'.split(
	            '_'
	        ),
	        monthsShortRegex: /^(ཟླ་\d{1,2})/,
	        monthsParseExact: true,
	        weekdays: 'གཟའ་ཉི་མ་_གཟའ་ཟླ་བ་_གཟའ་མིག་དམར་_གཟའ་ལྷག་པ་_གཟའ་ཕུར་བུ_གཟའ་པ་སངས་_གཟའ་སྤེན་པ་'.split(
	            '_'
	        ),
	        weekdaysShort: 'ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་'.split(
	            '_'
	        ),
	        weekdaysMin: 'ཉི_ཟླ_མིག_ལྷག_ཕུར_སངས_སྤེན'.split('_'),
	        longDateFormat: {
	            LT: 'A h:mm',
	            LTS: 'A h:mm:ss',
	            L: 'DD/MM/YYYY',
	            LL: 'D MMMM YYYY',
	            LLL: 'D MMMM YYYY, A h:mm',
	            LLLL: 'dddd, D MMMM YYYY, A h:mm',
	        },
	        calendar: {
	            sameDay: '[དི་རིང] LT',
	            nextDay: '[སང་ཉིན] LT',
	            nextWeek: '[བདུན་ཕྲག་རྗེས་མ], LT',
	            lastDay: '[ཁ་སང] LT',
	            lastWeek: '[བདུན་ཕྲག་མཐའ་མ] dddd, LT',
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: '%s ལ་',
	            past: '%s སྔན་ལ',
	            s: 'ལམ་སང',
	            ss: '%d སྐར་ཆ།',
	            m: 'སྐར་མ་གཅིག',
	            mm: '%d སྐར་མ',
	            h: 'ཆུ་ཚོད་གཅིག',
	            hh: '%d ཆུ་ཚོད',
	            d: 'ཉིན་གཅིག',
	            dd: '%d ཉིན་',
	            M: 'ཟླ་བ་གཅིག',
	            MM: '%d ཟླ་བ',
	            y: 'ལོ་གཅིག',
	            yy: '%d ལོ',
	        },
	        preparse: function (string) {
	            return string.replace(/[༡༢༣༤༥༦༧༨༩༠]/g, function (match) {
	                return numberMap[match];
	            });
	        },
	        postformat: function (string) {
	            return string.replace(/\d/g, function (match) {
	                return symbolMap[match];
	            });
	        },
	        meridiemParse: /མཚན་མོ|ཞོགས་ཀས|ཉིན་གུང|དགོང་དག|མཚན་མོ/,
	        meridiemHour: function (hour, meridiem) {
	            if (hour === 12) {
	                hour = 0;
	            }
	            if (
	                (meridiem === 'མཚན་མོ' && hour >= 4) ||
	                (meridiem === 'ཉིན་གུང' && hour < 5) ||
	                meridiem === 'དགོང་དག'
	            ) {
	                return hour + 12;
	            } else {
	                return hour;
	            }
	        },
	        meridiem: function (hour, minute, isLower) {
	            if (hour < 4) {
	                return 'མཚན་མོ';
	            } else if (hour < 10) {
	                return 'ཞོགས་ཀས';
	            } else if (hour < 17) {
	                return 'ཉིན་གུང';
	            } else if (hour < 20) {
	                return 'དགོང་དག';
	            } else {
	                return 'མཚན་མོ';
	            }
	        },
	        week: {
	            dow: 0, // Sunday is the first day of the week.
	            doy: 6, // The week that contains Jan 6th is the first week of the year.
	        },
	    });
	
	    return bo;
	
	})));


/***/ }),
/* 387 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Breton [br]
	//! author : Jean-Baptiste Le Duigou : https://github.com/jbleduigou
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    function relativeTimeWithMutation(number, withoutSuffix, key) {
	        var format = {
	            mm: 'munutenn',
	            MM: 'miz',
	            dd: 'devezh',
	        };
	        return number + ' ' + mutation(format[key], number);
	    }
	    function specialMutationForYears(number) {
	        switch (lastNumber(number)) {
	            case 1:
	            case 3:
	            case 4:
	            case 5:
	            case 9:
	                return number + ' bloaz';
	            default:
	                return number + ' vloaz';
	        }
	    }
	    function lastNumber(number) {
	        if (number > 9) {
	            return lastNumber(number % 10);
	        }
	        return number;
	    }
	    function mutation(text, number) {
	        if (number === 2) {
	            return softMutation(text);
	        }
	        return text;
	    }
	    function softMutation(text) {
	        var mutationTable = {
	            m: 'v',
	            b: 'v',
	            d: 'z',
	        };
	        if (mutationTable[text.charAt(0)] === undefined) {
	            return text;
	        }
	        return mutationTable[text.charAt(0)] + text.substring(1);
	    }
	
	    var monthsParse = [
	            /^gen/i,
	            /^c[ʼ\']hwe/i,
	            /^meu/i,
	            /^ebr/i,
	            /^mae/i,
	            /^(mez|eve)/i,
	            /^gou/i,
	            /^eos/i,
	            /^gwe/i,
	            /^her/i,
	            /^du/i,
	            /^ker/i,
	        ],
	        monthsRegex = /^(genver|c[ʼ\']hwevrer|meurzh|ebrel|mae|mezheven|gouere|eost|gwengolo|here|du|kerzu|gen|c[ʼ\']hwe|meu|ebr|mae|eve|gou|eos|gwe|her|du|ker)/i,
	        monthsStrictRegex = /^(genver|c[ʼ\']hwevrer|meurzh|ebrel|mae|mezheven|gouere|eost|gwengolo|here|du|kerzu)/i,
	        monthsShortStrictRegex = /^(gen|c[ʼ\']hwe|meu|ebr|mae|eve|gou|eos|gwe|her|du|ker)/i,
	        fullWeekdaysParse = [
	            /^sul/i,
	            /^lun/i,
	            /^meurzh/i,
	            /^merc[ʼ\']her/i,
	            /^yaou/i,
	            /^gwener/i,
	            /^sadorn/i,
	        ],
	        shortWeekdaysParse = [
	            /^Sul/i,
	            /^Lun/i,
	            /^Meu/i,
	            /^Mer/i,
	            /^Yao/i,
	            /^Gwe/i,
	            /^Sad/i,
	        ],
	        minWeekdaysParse = [
	            /^Su/i,
	            /^Lu/i,
	            /^Me([^r]|$)/i,
	            /^Mer/i,
	            /^Ya/i,
	            /^Gw/i,
	            /^Sa/i,
	        ];
	
	    var br = moment.defineLocale('br', {
	        months: 'Genver_Cʼhwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu'.split(
	            '_'
	        ),
	        monthsShort: 'Gen_Cʼhwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker'.split('_'),
	        weekdays: 'Sul_Lun_Meurzh_Mercʼher_Yaou_Gwener_Sadorn'.split('_'),
	        weekdaysShort: 'Sul_Lun_Meu_Mer_Yao_Gwe_Sad'.split('_'),
	        weekdaysMin: 'Su_Lu_Me_Mer_Ya_Gw_Sa'.split('_'),
	        weekdaysParse: minWeekdaysParse,
	        fullWeekdaysParse: fullWeekdaysParse,
	        shortWeekdaysParse: shortWeekdaysParse,
	        minWeekdaysParse: minWeekdaysParse,
	
	        monthsRegex: monthsRegex,
	        monthsShortRegex: monthsRegex,
	        monthsStrictRegex: monthsStrictRegex,
	        monthsShortStrictRegex: monthsShortStrictRegex,
	        monthsParse: monthsParse,
	        longMonthsParse: monthsParse,
	        shortMonthsParse: monthsParse,
	
	        longDateFormat: {
	            LT: 'HH:mm',
	            LTS: 'HH:mm:ss',
	            L: 'DD/MM/YYYY',
	            LL: 'D [a viz] MMMM YYYY',
	            LLL: 'D [a viz] MMMM YYYY HH:mm',
	            LLLL: 'dddd, D [a viz] MMMM YYYY HH:mm',
	        },
	        calendar: {
	            sameDay: '[Hiziv da] LT',
	            nextDay: '[Warcʼhoazh da] LT',
	            nextWeek: 'dddd [da] LT',
	            lastDay: '[Decʼh da] LT',
	            lastWeek: 'dddd [paset da] LT',
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: 'a-benn %s',
	            past: '%s ʼzo',
	            s: 'un nebeud segondennoù',
	            ss: '%d eilenn',
	            m: 'ur vunutenn',
	            mm: relativeTimeWithMutation,
	            h: 'un eur',
	            hh: '%d eur',
	            d: 'un devezh',
	            dd: relativeTimeWithMutation,
	            M: 'ur miz',
	            MM: relativeTimeWithMutation,
	            y: 'ur bloaz',
	            yy: specialMutationForYears,
	        },
	        dayOfMonthOrdinalParse: /\d{1,2}(añ|vet)/,
	        ordinal: function (number) {
	            var output = number === 1 ? 'añ' : 'vet';
	            return number + output;
	        },
	        week: {
	            dow: 1, // Monday is the first day of the week.
	            doy: 4, // The week that contains Jan 4th is the first week of the year.
	        },
	        meridiemParse: /a.m.|g.m./, // goude merenn | a-raok merenn
	        isPM: function (token) {
	            return token === 'g.m.';
	        },
	        meridiem: function (hour, minute, isLower) {
	            return hour < 12 ? 'a.m.' : 'g.m.';
	        },
	    });
	
	    return br;
	
	})));


/***/ }),
/* 388 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Bosnian [bs]
	//! author : Nedim Cholich : https://github.com/frontyard
	//! based on (hr) translation by Bojan Marković
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    function translate(number, withoutSuffix, key) {
	        var result = number + ' ';
	        switch (key) {
	            case 'ss':
	                if (number === 1) {
	                    result += 'sekunda';
	                } else if (number === 2 || number === 3 || number === 4) {
	                    result += 'sekunde';
	                } else {
	                    result += 'sekundi';
	                }
	                return result;
	            case 'm':
	                return withoutSuffix ? 'jedna minuta' : 'jedne minute';
	            case 'mm':
	                if (number === 1) {
	                    result += 'minuta';
	                } else if (number === 2 || number === 3 || number === 4) {
	                    result += 'minute';
	                } else {
	                    result += 'minuta';
	                }
	                return result;
	            case 'h':
	                return withoutSuffix ? 'jedan sat' : 'jednog sata';
	            case 'hh':
	                if (number === 1) {
	                    result += 'sat';
	                } else if (number === 2 || number === 3 || number === 4) {
	                    result += 'sata';
	                } else {
	                    result += 'sati';
	                }
	                return result;
	            case 'dd':
	                if (number === 1) {
	                    result += 'dan';
	                } else {
	                    result += 'dana';
	                }
	                return result;
	            case 'MM':
	                if (number === 1) {
	                    result += 'mjesec';
	                } else if (number === 2 || number === 3 || number === 4) {
	                    result += 'mjeseca';
	                } else {
	                    result += 'mjeseci';
	                }
	                return result;
	            case 'yy':
	                if (number === 1) {
	                    result += 'godina';
	                } else if (number === 2 || number === 3 || number === 4) {
	                    result += 'godine';
	                } else {
	                    result += 'godina';
	                }
	                return result;
	        }
	    }
	
	    var bs = moment.defineLocale('bs', {
	        months: 'januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar'.split(
	            '_'
	        ),
	        monthsShort: 'jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.'.split(
	            '_'
	        ),
	        monthsParseExact: true,
	        weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split(
	            '_'
	        ),
	        weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),
	        weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),
	        weekdaysParseExact: true,
	        longDateFormat: {
	            LT: 'H:mm',
	            LTS: 'H:mm:ss',
	            L: 'DD.MM.YYYY',
	            LL: 'D. MMMM YYYY',
	            LLL: 'D. MMMM YYYY H:mm',
	            LLLL: 'dddd, D. MMMM YYYY H:mm',
	        },
	        calendar: {
	            sameDay: '[danas u] LT',
	            nextDay: '[sutra u] LT',
	            nextWeek: function () {
	                switch (this.day()) {
	                    case 0:
	                        return '[u] [nedjelju] [u] LT';
	                    case 3:
	                        return '[u] [srijedu] [u] LT';
	                    case 6:
	                        return '[u] [subotu] [u] LT';
	                    case 1:
	                    case 2:
	                    case 4:
	                    case 5:
	                        return '[u] dddd [u] LT';
	                }
	            },
	            lastDay: '[jučer u] LT',
	            lastWeek: function () {
	                switch (this.day()) {
	                    case 0:
	                    case 3:
	                        return '[prošlu] dddd [u] LT';
	                    case 6:
	                        return '[prošle] [subote] [u] LT';
	                    case 1:
	                    case 2:
	                    case 4:
	                    case 5:
	                        return '[prošli] dddd [u] LT';
	                }
	            },
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: 'za %s',
	            past: 'prije %s',
	            s: 'par sekundi',
	            ss: translate,
	            m: translate,
	            mm: translate,
	            h: translate,
	            hh: translate,
	            d: 'dan',
	            dd: translate,
	            M: 'mjesec',
	            MM: translate,
	            y: 'godinu',
	            yy: translate,
	        },
	        dayOfMonthOrdinalParse: /\d{1,2}\./,
	        ordinal: '%d.',
	        week: {
	            dow: 1, // Monday is the first day of the week.
	            doy: 7, // The week that contains Jan 7th is the first week of the year.
	        },
	    });
	
	    return bs;
	
	})));


/***/ }),
/* 389 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Catalan [ca]
	//! author : Juan G. Hurtado : https://github.com/juanghurtado
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var ca = moment.defineLocale('ca', {
	        months: {
	            standalone: 'gener_febrer_març_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre'.split(
	                '_'
	            ),
	            format: "de gener_de febrer_de març_d'abril_de maig_de juny_de juliol_d'agost_de setembre_d'octubre_de novembre_de desembre".split(
	                '_'
	            ),
	            isFormat: /D[oD]?(\s)+MMMM/,
	        },
	        monthsShort: 'gen._febr._març_abr._maig_juny_jul._ag._set._oct._nov._des.'.split(
	            '_'
	        ),
	        monthsParseExact: true,
	        weekdays: 'diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte'.split(
	            '_'
	        ),
	        weekdaysShort: 'dg._dl._dt._dc._dj._dv._ds.'.split('_'),
	        weekdaysMin: 'dg_dl_dt_dc_dj_dv_ds'.split('_'),
	        weekdaysParseExact: true,
	        longDateFormat: {
	            LT: 'H:mm',
	            LTS: 'H:mm:ss',
	            L: 'DD/MM/YYYY',
	            LL: 'D MMMM [de] YYYY',
	            ll: 'D MMM YYYY',
	            LLL: 'D MMMM [de] YYYY [a les] H:mm',
	            lll: 'D MMM YYYY, H:mm',
	            LLLL: 'dddd D MMMM [de] YYYY [a les] H:mm',
	            llll: 'ddd D MMM YYYY, H:mm',
	        },
	        calendar: {
	            sameDay: function () {
	                return '[avui a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';
	            },
	            nextDay: function () {
	                return '[demà a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';
	            },
	            nextWeek: function () {
	                return 'dddd [a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';
	            },
	            lastDay: function () {
	                return '[ahir a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';
	            },
	            lastWeek: function () {
	                return (
	                    '[el] dddd [passat a ' +
	                    (this.hours() !== 1 ? 'les' : 'la') +
	                    '] LT'
	                );
	            },
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: "d'aquí %s",
	            past: 'fa %s',
	            s: 'uns segons',
	            ss: '%d segons',
	            m: 'un minut',
	            mm: '%d minuts',
	            h: 'una hora',
	            hh: '%d hores',
	            d: 'un dia',
	            dd: '%d dies',
	            M: 'un mes',
	            MM: '%d mesos',
	            y: 'un any',
	            yy: '%d anys',
	        },
	        dayOfMonthOrdinalParse: /\d{1,2}(r|n|t|è|a)/,
	        ordinal: function (number, period) {
	            var output =
	                number === 1
	                    ? 'r'
	                    : number === 2
	                    ? 'n'
	                    : number === 3
	                    ? 'r'
	                    : number === 4
	                    ? 't'
	                    : 'è';
	            if (period === 'w' || period === 'W') {
	                output = 'a';
	            }
	            return number + output;
	        },
	        week: {
	            dow: 1, // Monday is the first day of the week.
	            doy: 4, // The week that contains Jan 4th is the first week of the year.
	        },
	    });
	
	    return ca;
	
	})));


/***/ }),
/* 390 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Czech [cs]
	//! author : petrbela : https://github.com/petrbela
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var months = 'leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec'.split(
	            '_'
	        ),
	        monthsShort = 'led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro'.split('_'),
	        monthsParse = [
	            /^led/i,
	            /^úno/i,
	            /^bře/i,
	            /^dub/i,
	            /^kvě/i,
	            /^(čvn|červen$|června)/i,
	            /^(čvc|červenec|července)/i,
	            /^srp/i,
	            /^zář/i,
	            /^říj/i,
	            /^lis/i,
	            /^pro/i,
	        ],
	        // NOTE: 'červen' is substring of 'červenec'; therefore 'červenec' must precede 'červen' in the regex to be fully matched.
	        // Otherwise parser matches '1. červenec' as '1. červen' + 'ec'.
	        monthsRegex = /^(leden|únor|březen|duben|květen|červenec|července|červen|června|srpen|září|říjen|listopad|prosinec|led|úno|bře|dub|kvě|čvn|čvc|srp|zář|říj|lis|pro)/i;
	
	    function plural(n) {
	        return n > 1 && n < 5 && ~~(n / 10) !== 1;
	    }
	    function translate(number, withoutSuffix, key, isFuture) {
	        var result = number + ' ';
	        switch (key) {
	            case 's': // a few seconds / in a few seconds / a few seconds ago
	                return withoutSuffix || isFuture ? 'pár sekund' : 'pár sekundami';
	            case 'ss': // 9 seconds / in 9 seconds / 9 seconds ago
	                if (withoutSuffix || isFuture) {
	                    return result + (plural(number) ? 'sekundy' : 'sekund');
	                } else {
	                    return result + 'sekundami';
	                }
	            case 'm': // a minute / in a minute / a minute ago
	                return withoutSuffix ? 'minuta' : isFuture ? 'minutu' : 'minutou';
	            case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago
	                if (withoutSuffix || isFuture) {
	                    return result + (plural(number) ? 'minuty' : 'minut');
	                } else {
	                    return result + 'minutami';
	                }
	            case 'h': // an hour / in an hour / an hour ago
	                return withoutSuffix ? 'hodina' : isFuture ? 'hodinu' : 'hodinou';
	            case 'hh': // 9 hours / in 9 hours / 9 hours ago
	                if (withoutSuffix || isFuture) {
	                    return result + (plural(number) ? 'hodiny' : 'hodin');
	                } else {
	                    return result + 'hodinami';
	                }
	            case 'd': // a day / in a day / a day ago
	                return withoutSuffix || isFuture ? 'den' : 'dnem';
	            case 'dd': // 9 days / in 9 days / 9 days ago
	                if (withoutSuffix || isFuture) {
	                    return result + (plural(number) ? 'dny' : 'dní');
	                } else {
	                    return result + 'dny';
	                }
	            case 'M': // a month / in a month / a month ago
	                return withoutSuffix || isFuture ? 'měsíc' : 'měsícem';
	            case 'MM': // 9 months / in 9 months / 9 months ago
	                if (withoutSuffix || isFuture) {
	                    return result + (plural(number) ? 'měsíce' : 'měsíců');
	                } else {
	                    return result + 'měsíci';
	                }
	            case 'y': // a year / in a year / a year ago
	                return withoutSuffix || isFuture ? 'rok' : 'rokem';
	            case 'yy': // 9 years / in 9 years / 9 years ago
	                if (withoutSuffix || isFuture) {
	                    return result + (plural(number) ? 'roky' : 'let');
	                } else {
	                    return result + 'lety';
	                }
	        }
	    }
	
	    var cs = moment.defineLocale('cs', {
	        months: months,
	        monthsShort: monthsShort,
	        monthsRegex: monthsRegex,
	        monthsShortRegex: monthsRegex,
	        // NOTE: 'červen' is substring of 'červenec'; therefore 'červenec' must precede 'červen' in the regex to be fully matched.
	        // Otherwise parser matches '1. červenec' as '1. červen' + 'ec'.
	        monthsStrictRegex: /^(leden|ledna|února|únor|březen|března|duben|dubna|květen|května|červenec|července|červen|června|srpen|srpna|září|říjen|října|listopadu|listopad|prosinec|prosince)/i,
	        monthsShortStrictRegex: /^(led|úno|bře|dub|kvě|čvn|čvc|srp|zář|říj|lis|pro)/i,
	        monthsParse: monthsParse,
	        longMonthsParse: monthsParse,
	        shortMonthsParse: monthsParse,
	        weekdays: 'neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota'.split('_'),
	        weekdaysShort: 'ne_po_út_st_čt_pá_so'.split('_'),
	        weekdaysMin: 'ne_po_út_st_čt_pá_so'.split('_'),
	        longDateFormat: {
	            LT: 'H:mm',
	            LTS: 'H:mm:ss',
	            L: 'DD.MM.YYYY',
	            LL: 'D. MMMM YYYY',
	            LLL: 'D. MMMM YYYY H:mm',
	            LLLL: 'dddd D. MMMM YYYY H:mm',
	            l: 'D. M. YYYY',
	        },
	        calendar: {
	            sameDay: '[dnes v] LT',
	            nextDay: '[zítra v] LT',
	            nextWeek: function () {
	                switch (this.day()) {
	                    case 0:
	                        return '[v neděli v] LT';
	                    case 1:
	                    case 2:
	                        return '[v] dddd [v] LT';
	                    case 3:
	                        return '[ve středu v] LT';
	                    case 4:
	                        return '[ve čtvrtek v] LT';
	                    case 5:
	                        return '[v pátek v] LT';
	                    case 6:
	                        return '[v sobotu v] LT';
	                }
	            },
	            lastDay: '[včera v] LT',
	            lastWeek: function () {
	                switch (this.day()) {
	                    case 0:
	                        return '[minulou neděli v] LT';
	                    case 1:
	                    case 2:
	                        return '[minulé] dddd [v] LT';
	                    case 3:
	                        return '[minulou středu v] LT';
	                    case 4:
	                    case 5:
	                        return '[minulý] dddd [v] LT';
	                    case 6:
	                        return '[minulou sobotu v] LT';
	                }
	            },
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: 'za %s',
	            past: 'před %s',
	            s: translate,
	            ss: translate,
	            m: translate,
	            mm: translate,
	            h: translate,
	            hh: translate,
	            d: translate,
	            dd: translate,
	            M: translate,
	            MM: translate,
	            y: translate,
	            yy: translate,
	        },
	        dayOfMonthOrdinalParse: /\d{1,2}\./,
	        ordinal: '%d.',
	        week: {
	            dow: 1, // Monday is the first day of the week.
	            doy: 4, // The week that contains Jan 4th is the first week of the year.
	        },
	    });
	
	    return cs;
	
	})));


/***/ }),
/* 391 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Chuvash [cv]
	//! author : Anatoly Mironov : https://github.com/mirontoli
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var cv = moment.defineLocale('cv', {
	        months: 'кӑрлач_нарӑс_пуш_ака_май_ҫӗртме_утӑ_ҫурла_авӑн_юпа_чӳк_раштав'.split(
	            '_'
	        ),
	        monthsShort: 'кӑр_нар_пуш_ака_май_ҫӗр_утӑ_ҫур_авн_юпа_чӳк_раш'.split('_'),
	        weekdays: 'вырсарникун_тунтикун_ытларикун_юнкун_кӗҫнерникун_эрнекун_шӑматкун'.split(
	            '_'
	        ),
	        weekdaysShort: 'выр_тун_ытл_юн_кӗҫ_эрн_шӑм'.split('_'),
	        weekdaysMin: 'вр_тн_ыт_юн_кҫ_эр_шм'.split('_'),
	        longDateFormat: {
	            LT: 'HH:mm',
	            LTS: 'HH:mm:ss',
	            L: 'DD-MM-YYYY',
	            LL: 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ]',
	            LLL: 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm',
	            LLLL: 'dddd, YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm',
	        },
	        calendar: {
	            sameDay: '[Паян] LT [сехетре]',
	            nextDay: '[Ыран] LT [сехетре]',
	            lastDay: '[Ӗнер] LT [сехетре]',
	            nextWeek: '[Ҫитес] dddd LT [сехетре]',
	            lastWeek: '[Иртнӗ] dddd LT [сехетре]',
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: function (output) {
	                var affix = /сехет$/i.exec(output)
	                    ? 'рен'
	                    : /ҫул$/i.exec(output)
	                    ? 'тан'
	                    : 'ран';
	                return output + affix;
	            },
	            past: '%s каялла',
	            s: 'пӗр-ик ҫеккунт',
	            ss: '%d ҫеккунт',
	            m: 'пӗр минут',
	            mm: '%d минут',
	            h: 'пӗр сехет',
	            hh: '%d сехет',
	            d: 'пӗр кун',
	            dd: '%d кун',
	            M: 'пӗр уйӑх',
	            MM: '%d уйӑх',
	            y: 'пӗр ҫул',
	            yy: '%d ҫул',
	        },
	        dayOfMonthOrdinalParse: /\d{1,2}-мӗш/,
	        ordinal: '%d-мӗш',
	        week: {
	            dow: 1, // Monday is the first day of the week.
	            doy: 7, // The week that contains Jan 7th is the first week of the year.
	        },
	    });
	
	    return cv;
	
	})));


/***/ }),
/* 392 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Welsh [cy]
	//! author : Robert Allen : https://github.com/robgallen
	//! author : https://github.com/ryangreaves
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var cy = moment.defineLocale('cy', {
	        months: 'Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr'.split(
	            '_'
	        ),
	        monthsShort: 'Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag'.split(
	            '_'
	        ),
	        weekdays: 'Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn'.split(
	            '_'
	        ),
	        weekdaysShort: 'Sul_Llun_Maw_Mer_Iau_Gwe_Sad'.split('_'),
	        weekdaysMin: 'Su_Ll_Ma_Me_Ia_Gw_Sa'.split('_'),
	        weekdaysParseExact: true,
	        // time formats are the same as en-gb
	        longDateFormat: {
	            LT: 'HH:mm',
	            LTS: 'HH:mm:ss',
	            L: 'DD/MM/YYYY',
	            LL: 'D MMMM YYYY',
	            LLL: 'D MMMM YYYY HH:mm',
	            LLLL: 'dddd, D MMMM YYYY HH:mm',
	        },
	        calendar: {
	            sameDay: '[Heddiw am] LT',
	            nextDay: '[Yfory am] LT',
	            nextWeek: 'dddd [am] LT',
	            lastDay: '[Ddoe am] LT',
	            lastWeek: 'dddd [diwethaf am] LT',
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: 'mewn %s',
	            past: '%s yn ôl',
	            s: 'ychydig eiliadau',
	            ss: '%d eiliad',
	            m: 'munud',
	            mm: '%d munud',
	            h: 'awr',
	            hh: '%d awr',
	            d: 'diwrnod',
	            dd: '%d diwrnod',
	            M: 'mis',
	            MM: '%d mis',
	            y: 'blwyddyn',
	            yy: '%d flynedd',
	        },
	        dayOfMonthOrdinalParse: /\d{1,2}(fed|ain|af|il|ydd|ed|eg)/,
	        // traditional ordinal numbers above 31 are not commonly used in colloquial Welsh
	        ordinal: function (number) {
	            var b = number,
	                output = '',
	                lookup = [
	                    '',
	                    'af',
	                    'il',
	                    'ydd',
	                    'ydd',
	                    'ed',
	                    'ed',
	                    'ed',
	                    'fed',
	                    'fed',
	                    'fed', // 1af to 10fed
	                    'eg',
	                    'fed',
	                    'eg',
	                    'eg',
	                    'fed',
	                    'eg',
	                    'eg',
	                    'fed',
	                    'eg',
	                    'fed', // 11eg to 20fed
	                ];
	            if (b > 20) {
	                if (b === 40 || b === 50 || b === 60 || b === 80 || b === 100) {
	                    output = 'fed'; // not 30ain, 70ain or 90ain
	                } else {
	                    output = 'ain';
	                }
	            } else if (b > 0) {
	                output = lookup[b];
	            }
	            return number + output;
	        },
	        week: {
	            dow: 1, // Monday is the first day of the week.
	            doy: 4, // The week that contains Jan 4th is the first week of the year.
	        },
	    });
	
	    return cy;
	
	})));


/***/ }),
/* 393 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Danish [da]
	//! author : Ulrik Nielsen : https://github.com/mrbase
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var da = moment.defineLocale('da', {
	        months: 'januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december'.split(
	            '_'
	        ),
	        monthsShort: 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),
	        weekdays: 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'),
	        weekdaysShort: 'søn_man_tir_ons_tor_fre_lør'.split('_'),
	        weekdaysMin: 'sø_ma_ti_on_to_fr_lø'.split('_'),
	        longDateFormat: {
	            LT: 'HH:mm',
	            LTS: 'HH:mm:ss',
	            L: 'DD.MM.YYYY',
	            LL: 'D. MMMM YYYY',
	            LLL: 'D. MMMM YYYY HH:mm',
	            LLLL: 'dddd [d.] D. MMMM YYYY [kl.] HH:mm',
	        },
	        calendar: {
	            sameDay: '[i dag kl.] LT',
	            nextDay: '[i morgen kl.] LT',
	            nextWeek: 'på dddd [kl.] LT',
	            lastDay: '[i går kl.] LT',
	            lastWeek: '[i] dddd[s kl.] LT',
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: 'om %s',
	            past: '%s siden',
	            s: 'få sekunder',
	            ss: '%d sekunder',
	            m: 'et minut',
	            mm: '%d minutter',
	            h: 'en time',
	            hh: '%d timer',
	            d: 'en dag',
	            dd: '%d dage',
	            M: 'en måned',
	            MM: '%d måneder',
	            y: 'et år',
	            yy: '%d år',
	        },
	        dayOfMonthOrdinalParse: /\d{1,2}\./,
	        ordinal: '%d.',
	        week: {
	            dow: 1, // Monday is the first day of the week.
	            doy: 4, // The week that contains Jan 4th is the first week of the year.
	        },
	    });
	
	    return da;
	
	})));


/***/ }),
/* 394 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : German (Austria) [de-at]
	//! author : lluchs : https://github.com/lluchs
	//! author: Menelion Elensúle: https://github.com/Oire
	//! author : Martin Groller : https://github.com/MadMG
	//! author : Mikolaj Dadela : https://github.com/mik01aj
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    function processRelativeTime(number, withoutSuffix, key, isFuture) {
	        var format = {
	            m: ['eine Minute', 'einer Minute'],
	            h: ['eine Stunde', 'einer Stunde'],
	            d: ['ein Tag', 'einem Tag'],
	            dd: [number + ' Tage', number + ' Tagen'],
	            w: ['eine Woche', 'einer Woche'],
	            M: ['ein Monat', 'einem Monat'],
	            MM: [number + ' Monate', number + ' Monaten'],
	            y: ['ein Jahr', 'einem Jahr'],
	            yy: [number + ' Jahre', number + ' Jahren'],
	        };
	        return withoutSuffix ? format[key][0] : format[key][1];
	    }
	
	    var deAt = moment.defineLocale('de-at', {
	        months: 'Jänner_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split(
	            '_'
	        ),
	        monthsShort: 'Jän._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split(
	            '_'
	        ),
	        monthsParseExact: true,
	        weekdays: 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split(
	            '_'
	        ),
	        weekdaysShort: 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),
	        weekdaysMin: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),
	        weekdaysParseExact: true,
	        longDateFormat: {
	            LT: 'HH:mm',
	            LTS: 'HH:mm:ss',
	            L: 'DD.MM.YYYY',
	            LL: 'D. MMMM YYYY',
	            LLL: 'D. MMMM YYYY HH:mm',
	            LLLL: 'dddd, D. MMMM YYYY HH:mm',
	        },
	        calendar: {
	            sameDay: '[heute um] LT [Uhr]',
	            sameElse: 'L',
	            nextDay: '[morgen um] LT [Uhr]',
	            nextWeek: 'dddd [um] LT [Uhr]',
	            lastDay: '[gestern um] LT [Uhr]',
	            lastWeek: '[letzten] dddd [um] LT [Uhr]',
	        },
	        relativeTime: {
	            future: 'in %s',
	            past: 'vor %s',
	            s: 'ein paar Sekunden',
	            ss: '%d Sekunden',
	            m: processRelativeTime,
	            mm: '%d Minuten',
	            h: processRelativeTime,
	            hh: '%d Stunden',
	            d: processRelativeTime,
	            dd: processRelativeTime,
	            w: processRelativeTime,
	            ww: '%d Wochen',
	            M: processRelativeTime,
	            MM: processRelativeTime,
	            y: processRelativeTime,
	            yy: processRelativeTime,
	        },
	        dayOfMonthOrdinalParse: /\d{1,2}\./,
	        ordinal: '%d.',
	        week: {
	            dow: 1, // Monday is the first day of the week.
	            doy: 4, // The week that contains Jan 4th is the first week of the year.
	        },
	    });
	
	    return deAt;
	
	})));


/***/ }),
/* 395 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : German (Switzerland) [de-ch]
	//! author : sschueller : https://github.com/sschueller
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    function processRelativeTime(number, withoutSuffix, key, isFuture) {
	        var format = {
	            m: ['eine Minute', 'einer Minute'],
	            h: ['eine Stunde', 'einer Stunde'],
	            d: ['ein Tag', 'einem Tag'],
	            dd: [number + ' Tage', number + ' Tagen'],
	            w: ['eine Woche', 'einer Woche'],
	            M: ['ein Monat', 'einem Monat'],
	            MM: [number + ' Monate', number + ' Monaten'],
	            y: ['ein Jahr', 'einem Jahr'],
	            yy: [number + ' Jahre', number + ' Jahren'],
	        };
	        return withoutSuffix ? format[key][0] : format[key][1];
	    }
	
	    var deCh = moment.defineLocale('de-ch', {
	        months: 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split(
	            '_'
	        ),
	        monthsShort: 'Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split(
	            '_'
	        ),
	        monthsParseExact: true,
	        weekdays: 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split(
	            '_'
	        ),
	        weekdaysShort: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),
	        weekdaysMin: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),
	        weekdaysParseExact: true,
	        longDateFormat: {
	            LT: 'HH:mm',
	            LTS: 'HH:mm:ss',
	            L: 'DD.MM.YYYY',
	            LL: 'D. MMMM YYYY',
	            LLL: 'D. MMMM YYYY HH:mm',
	            LLLL: 'dddd, D. MMMM YYYY HH:mm',
	        },
	        calendar: {
	            sameDay: '[heute um] LT [Uhr]',
	            sameElse: 'L',
	            nextDay: '[morgen um] LT [Uhr]',
	            nextWeek: 'dddd [um] LT [Uhr]',
	            lastDay: '[gestern um] LT [Uhr]',
	            lastWeek: '[letzten] dddd [um] LT [Uhr]',
	        },
	        relativeTime: {
	            future: 'in %s',
	            past: 'vor %s',
	            s: 'ein paar Sekunden',
	            ss: '%d Sekunden',
	            m: processRelativeTime,
	            mm: '%d Minuten',
	            h: processRelativeTime,
	            hh: '%d Stunden',
	            d: processRelativeTime,
	            dd: processRelativeTime,
	            w: processRelativeTime,
	            ww: '%d Wochen',
	            M: processRelativeTime,
	            MM: processRelativeTime,
	            y: processRelativeTime,
	            yy: processRelativeTime,
	        },
	        dayOfMonthOrdinalParse: /\d{1,2}\./,
	        ordinal: '%d.',
	        week: {
	            dow: 1, // Monday is the first day of the week.
	            doy: 4, // The week that contains Jan 4th is the first week of the year.
	        },
	    });
	
	    return deCh;
	
	})));


/***/ }),
/* 396 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : German [de]
	//! author : lluchs : https://github.com/lluchs
	//! author: Menelion Elensúle: https://github.com/Oire
	//! author : Mikolaj Dadela : https://github.com/mik01aj
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    function processRelativeTime(number, withoutSuffix, key, isFuture) {
	        var format = {
	            m: ['eine Minute', 'einer Minute'],
	            h: ['eine Stunde', 'einer Stunde'],
	            d: ['ein Tag', 'einem Tag'],
	            dd: [number + ' Tage', number + ' Tagen'],
	            w: ['eine Woche', 'einer Woche'],
	            M: ['ein Monat', 'einem Monat'],
	            MM: [number + ' Monate', number + ' Monaten'],
	            y: ['ein Jahr', 'einem Jahr'],
	            yy: [number + ' Jahre', number + ' Jahren'],
	        };
	        return withoutSuffix ? format[key][0] : format[key][1];
	    }
	
	    var de = moment.defineLocale('de', {
	        months: 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split(
	            '_'
	        ),
	        monthsShort: 'Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split(
	            '_'
	        ),
	        monthsParseExact: true,
	        weekdays: 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split(
	            '_'
	        ),
	        weekdaysShort: 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),
	        weekdaysMin: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),
	        weekdaysParseExact: true,
	        longDateFormat: {
	            LT: 'HH:mm',
	            LTS: 'HH:mm:ss',
	            L: 'DD.MM.YYYY',
	            LL: 'D. MMMM YYYY',
	            LLL: 'D. MMMM YYYY HH:mm',
	            LLLL: 'dddd, D. MMMM YYYY HH:mm',
	        },
	        calendar: {
	            sameDay: '[heute um] LT [Uhr]',
	            sameElse: 'L',
	            nextDay: '[morgen um] LT [Uhr]',
	            nextWeek: 'dddd [um] LT [Uhr]',
	            lastDay: '[gestern um] LT [Uhr]',
	            lastWeek: '[letzten] dddd [um] LT [Uhr]',
	        },
	        relativeTime: {
	            future: 'in %s',
	            past: 'vor %s',
	            s: 'ein paar Sekunden',
	            ss: '%d Sekunden',
	            m: processRelativeTime,
	            mm: '%d Minuten',
	            h: processRelativeTime,
	            hh: '%d Stunden',
	            d: processRelativeTime,
	            dd: processRelativeTime,
	            w: processRelativeTime,
	            ww: '%d Wochen',
	            M: processRelativeTime,
	            MM: processRelativeTime,
	            y: processRelativeTime,
	            yy: processRelativeTime,
	        },
	        dayOfMonthOrdinalParse: /\d{1,2}\./,
	        ordinal: '%d.',
	        week: {
	            dow: 1, // Monday is the first day of the week.
	            doy: 4, // The week that contains Jan 4th is the first week of the year.
	        },
	    });
	
	    return de;
	
	})));


/***/ }),
/* 397 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Maldivian [dv]
	//! author : Jawish Hameed : https://github.com/jawish
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var months = [
	            'ޖެނުއަރީ',
	            'ފެބްރުއަރީ',
	            'މާރިޗު',
	            'އޭޕްރީލު',
	            'މޭ',
	            'ޖޫން',
	            'ޖުލައި',
	            'އޯގަސްޓު',
	            'ސެޕްޓެމްބަރު',
	            'އޮކްޓޯބަރު',
	            'ނޮވެމްބަރު',
	            'ޑިސެމްބަރު',
	        ],
	        weekdays = [
	            'އާދިއްތަ',
	            'ހޯމަ',
	            'އަންގާރަ',
	            'ބުދަ',
	            'ބުރާސްފަތި',
	            'ހުކުރު',
	            'ހޮނިހިރު',
	        ];
	
	    var dv = moment.defineLocale('dv', {
	        months: months,
	        monthsShort: months,
	        weekdays: weekdays,
	        weekdaysShort: weekdays,
	        weekdaysMin: 'އާދި_ހޯމަ_އަން_ބުދަ_ބުރާ_ހުކު_ހޮނި'.split('_'),
	        longDateFormat: {
	            LT: 'HH:mm',
	            LTS: 'HH:mm:ss',
	            L: 'D/M/YYYY',
	            LL: 'D MMMM YYYY',
	            LLL: 'D MMMM YYYY HH:mm',
	            LLLL: 'dddd D MMMM YYYY HH:mm',
	        },
	        meridiemParse: /މކ|މފ/,
	        isPM: function (input) {
	            return 'މފ' === input;
	        },
	        meridiem: function (hour, minute, isLower) {
	            if (hour < 12) {
	                return 'މކ';
	            } else {
	                return 'މފ';
	            }
	        },
	        calendar: {
	            sameDay: '[މިއަދު] LT',
	            nextDay: '[މާދަމާ] LT',
	            nextWeek: 'dddd LT',
	            lastDay: '[އިއްޔެ] LT',
	            lastWeek: '[ފާއިތުވި] dddd LT',
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: 'ތެރޭގައި %s',
	            past: 'ކުރިން %s',
	            s: 'ސިކުންތުކޮޅެއް',
	            ss: 'd% ސިކުންތު',
	            m: 'މިނިޓެއް',
	            mm: 'މިނިޓު %d',
	            h: 'ގަޑިއިރެއް',
	            hh: 'ގަޑިއިރު %d',
	            d: 'ދުވަހެއް',
	            dd: 'ދުވަސް %d',
	            M: 'މަހެއް',
	            MM: 'މަސް %d',
	            y: 'އަހަރެއް',
	            yy: 'އަހަރު %d',
	        },
	        preparse: function (string) {
	            return string.replace(/،/g, ',');
	        },
	        postformat: function (string) {
	            return string.replace(/,/g, '،');
	        },
	        week: {
	            dow: 7, // Sunday is the first day of the week.
	            doy: 12, // The week that contains Jan 12th is the first week of the year.
	        },
	    });
	
	    return dv;
	
	})));


/***/ }),
/* 398 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Greek [el]
	//! author : Aggelos Karalias : https://github.com/mehiel
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    function isFunction(input) {
	        return (
	            (typeof Function !== 'undefined' && input instanceof Function) ||
	            Object.prototype.toString.call(input) === '[object Function]'
	        );
	    }
	
	    var el = moment.defineLocale('el', {
	        monthsNominativeEl: 'Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος'.split(
	            '_'
	        ),
	        monthsGenitiveEl: 'Ιανουαρίου_Φεβρουαρίου_Μαρτίου_Απριλίου_Μαΐου_Ιουνίου_Ιουλίου_Αυγούστου_Σεπτεμβρίου_Οκτωβρίου_Νοεμβρίου_Δεκεμβρίου'.split(
	            '_'
	        ),
	        months: function (momentToFormat, format) {
	            if (!momentToFormat) {
	                return this._monthsNominativeEl;
	            } else if (
	                typeof format === 'string' &&
	                /D/.test(format.substring(0, format.indexOf('MMMM')))
	            ) {
	                // if there is a day number before 'MMMM'
	                return this._monthsGenitiveEl[momentToFormat.month()];
	            } else {
	                return this._monthsNominativeEl[momentToFormat.month()];
	            }
	        },
	        monthsShort: 'Ιαν_Φεβ_Μαρ_Απρ_Μαϊ_Ιουν_Ιουλ_Αυγ_Σεπ_Οκτ_Νοε_Δεκ'.split('_'),
	        weekdays: 'Κυριακή_Δευτέρα_Τρίτη_Τετάρτη_Πέμπτη_Παρασκευή_Σάββατο'.split(
	            '_'
	        ),
	        weekdaysShort: 'Κυρ_Δευ_Τρι_Τετ_Πεμ_Παρ_Σαβ'.split('_'),
	        weekdaysMin: 'Κυ_Δε_Τρ_Τε_Πε_Πα_Σα'.split('_'),
	        meridiem: function (hours, minutes, isLower) {
	            if (hours > 11) {
	                return isLower ? 'μμ' : 'ΜΜ';
	            } else {
	                return isLower ? 'πμ' : 'ΠΜ';
	            }
	        },
	        isPM: function (input) {
	            return (input + '').toLowerCase()[0] === 'μ';
	        },
	        meridiemParse: /[ΠΜ]\.?Μ?\.?/i,
	        longDateFormat: {
	            LT: 'h:mm A',
	            LTS: 'h:mm:ss A',
	            L: 'DD/MM/YYYY',
	            LL: 'D MMMM YYYY',
	            LLL: 'D MMMM YYYY h:mm A',
	            LLLL: 'dddd, D MMMM YYYY h:mm A',
	        },
	        calendarEl: {
	            sameDay: '[Σήμερα {}] LT',
	            nextDay: '[Αύριο {}] LT',
	            nextWeek: 'dddd [{}] LT',
	            lastDay: '[Χθες {}] LT',
	            lastWeek: function () {
	                switch (this.day()) {
	                    case 6:
	                        return '[το προηγούμενο] dddd [{}] LT';
	                    default:
	                        return '[την προηγούμενη] dddd [{}] LT';
	                }
	            },
	            sameElse: 'L',
	        },
	        calendar: function (key, mom) {
	            var output = this._calendarEl[key],
	                hours = mom && mom.hours();
	            if (isFunction(output)) {
	                output = output.apply(mom);
	            }
	            return output.replace('{}', hours % 12 === 1 ? 'στη' : 'στις');
	        },
	        relativeTime: {
	            future: 'σε %s',
	            past: '%s πριν',
	            s: 'λίγα δευτερόλεπτα',
	            ss: '%d δευτερόλεπτα',
	            m: 'ένα λεπτό',
	            mm: '%d λεπτά',
	            h: 'μία ώρα',
	            hh: '%d ώρες',
	            d: 'μία μέρα',
	            dd: '%d μέρες',
	            M: 'ένας μήνας',
	            MM: '%d μήνες',
	            y: 'ένας χρόνος',
	            yy: '%d χρόνια',
	        },
	        dayOfMonthOrdinalParse: /\d{1,2}η/,
	        ordinal: '%dη',
	        week: {
	            dow: 1, // Monday is the first day of the week.
	            doy: 4, // The week that contains Jan 4st is the first week of the year.
	        },
	    });
	
	    return el;
	
	})));


/***/ }),
/* 399 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : English (Australia) [en-au]
	//! author : Jared Morse : https://github.com/jarcoal
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var enAu = moment.defineLocale('en-au', {
	        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(
	            '_'
	        ),
	        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
	        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(
	            '_'
	        ),
	        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
	        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
	        longDateFormat: {
	            LT: 'h:mm A',
	            LTS: 'h:mm:ss A',
	            L: 'DD/MM/YYYY',
	            LL: 'D MMMM YYYY',
	            LLL: 'D MMMM YYYY h:mm A',
	            LLLL: 'dddd, D MMMM YYYY h:mm A',
	        },
	        calendar: {
	            sameDay: '[Today at] LT',
	            nextDay: '[Tomorrow at] LT',
	            nextWeek: 'dddd [at] LT',
	            lastDay: '[Yesterday at] LT',
	            lastWeek: '[Last] dddd [at] LT',
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: 'in %s',
	            past: '%s ago',
	            s: 'a few seconds',
	            ss: '%d seconds',
	            m: 'a minute',
	            mm: '%d minutes',
	            h: 'an hour',
	            hh: '%d hours',
	            d: 'a day',
	            dd: '%d days',
	            M: 'a month',
	            MM: '%d months',
	            y: 'a year',
	            yy: '%d years',
	        },
	        dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
	        ordinal: function (number) {
	            var b = number % 10,
	                output =
	                    ~~((number % 100) / 10) === 1
	                        ? 'th'
	                        : b === 1
	                        ? 'st'
	                        : b === 2
	                        ? 'nd'
	                        : b === 3
	                        ? 'rd'
	                        : 'th';
	            return number + output;
	        },
	        week: {
	            dow: 0, // Sunday is the first day of the week.
	            doy: 4, // The week that contains Jan 4th is the first week of the year.
	        },
	    });
	
	    return enAu;
	
	})));


/***/ }),
/* 400 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : English (Canada) [en-ca]
	//! author : Jonathan Abourbih : https://github.com/jonbca
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var enCa = moment.defineLocale('en-ca', {
	        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(
	            '_'
	        ),
	        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
	        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(
	            '_'
	        ),
	        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
	        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
	        longDateFormat: {
	            LT: 'h:mm A',
	            LTS: 'h:mm:ss A',
	            L: 'YYYY-MM-DD',
	            LL: 'MMMM D, YYYY',
	            LLL: 'MMMM D, YYYY h:mm A',
	            LLLL: 'dddd, MMMM D, YYYY h:mm A',
	        },
	        calendar: {
	            sameDay: '[Today at] LT',
	            nextDay: '[Tomorrow at] LT',
	            nextWeek: 'dddd [at] LT',
	            lastDay: '[Yesterday at] LT',
	            lastWeek: '[Last] dddd [at] LT',
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: 'in %s',
	            past: '%s ago',
	            s: 'a few seconds',
	            ss: '%d seconds',
	            m: 'a minute',
	            mm: '%d minutes',
	            h: 'an hour',
	            hh: '%d hours',
	            d: 'a day',
	            dd: '%d days',
	            M: 'a month',
	            MM: '%d months',
	            y: 'a year',
	            yy: '%d years',
	        },
	        dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
	        ordinal: function (number) {
	            var b = number % 10,
	                output =
	                    ~~((number % 100) / 10) === 1
	                        ? 'th'
	                        : b === 1
	                        ? 'st'
	                        : b === 2
	                        ? 'nd'
	                        : b === 3
	                        ? 'rd'
	                        : 'th';
	            return number + output;
	        },
	    });
	
	    return enCa;
	
	})));


/***/ }),
/* 401 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : English (United Kingdom) [en-gb]
	//! author : Chris Gedrim : https://github.com/chrisgedrim
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var enGb = moment.defineLocale('en-gb', {
	        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(
	            '_'
	        ),
	        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
	        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(
	            '_'
	        ),
	        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
	        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
	        longDateFormat: {
	            LT: 'HH:mm',
	            LTS: 'HH:mm:ss',
	            L: 'DD/MM/YYYY',
	            LL: 'D MMMM YYYY',
	            LLL: 'D MMMM YYYY HH:mm',
	            LLLL: 'dddd, D MMMM YYYY HH:mm',
	        },
	        calendar: {
	            sameDay: '[Today at] LT',
	            nextDay: '[Tomorrow at] LT',
	            nextWeek: 'dddd [at] LT',
	            lastDay: '[Yesterday at] LT',
	            lastWeek: '[Last] dddd [at] LT',
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: 'in %s',
	            past: '%s ago',
	            s: 'a few seconds',
	            ss: '%d seconds',
	            m: 'a minute',
	            mm: '%d minutes',
	            h: 'an hour',
	            hh: '%d hours',
	            d: 'a day',
	            dd: '%d days',
	            M: 'a month',
	            MM: '%d months',
	            y: 'a year',
	            yy: '%d years',
	        },
	        dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
	        ordinal: function (number) {
	            var b = number % 10,
	                output =
	                    ~~((number % 100) / 10) === 1
	                        ? 'th'
	                        : b === 1
	                        ? 'st'
	                        : b === 2
	                        ? 'nd'
	                        : b === 3
	                        ? 'rd'
	                        : 'th';
	            return number + output;
	        },
	        week: {
	            dow: 1, // Monday is the first day of the week.
	            doy: 4, // The week that contains Jan 4th is the first week of the year.
	        },
	    });
	
	    return enGb;
	
	})));


/***/ }),
/* 402 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : English (Ireland) [en-ie]
	//! author : Chris Cartlidge : https://github.com/chriscartlidge
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var enIe = moment.defineLocale('en-ie', {
	        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(
	            '_'
	        ),
	        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
	        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(
	            '_'
	        ),
	        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
	        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
	        longDateFormat: {
	            LT: 'HH:mm',
	            LTS: 'HH:mm:ss',
	            L: 'DD/MM/YYYY',
	            LL: 'D MMMM YYYY',
	            LLL: 'D MMMM YYYY HH:mm',
	            LLLL: 'dddd D MMMM YYYY HH:mm',
	        },
	        calendar: {
	            sameDay: '[Today at] LT',
	            nextDay: '[Tomorrow at] LT',
	            nextWeek: 'dddd [at] LT',
	            lastDay: '[Yesterday at] LT',
	            lastWeek: '[Last] dddd [at] LT',
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: 'in %s',
	            past: '%s ago',
	            s: 'a few seconds',
	            ss: '%d seconds',
	            m: 'a minute',
	            mm: '%d minutes',
	            h: 'an hour',
	            hh: '%d hours',
	            d: 'a day',
	            dd: '%d days',
	            M: 'a month',
	            MM: '%d months',
	            y: 'a year',
	            yy: '%d years',
	        },
	        dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
	        ordinal: function (number) {
	            var b = number % 10,
	                output =
	                    ~~((number % 100) / 10) === 1
	                        ? 'th'
	                        : b === 1
	                        ? 'st'
	                        : b === 2
	                        ? 'nd'
	                        : b === 3
	                        ? 'rd'
	                        : 'th';
	            return number + output;
	        },
	        week: {
	            dow: 1, // Monday is the first day of the week.
	            doy: 4, // The week that contains Jan 4th is the first week of the year.
	        },
	    });
	
	    return enIe;
	
	})));


/***/ }),
/* 403 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : English (Israel) [en-il]
	//! author : Chris Gedrim : https://github.com/chrisgedrim
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var enIl = moment.defineLocale('en-il', {
	        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(
	            '_'
	        ),
	        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
	        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(
	            '_'
	        ),
	        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
	        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
	        longDateFormat: {
	            LT: 'HH:mm',
	            LTS: 'HH:mm:ss',
	            L: 'DD/MM/YYYY',
	            LL: 'D MMMM YYYY',
	            LLL: 'D MMMM YYYY HH:mm',
	            LLLL: 'dddd, D MMMM YYYY HH:mm',
	        },
	        calendar: {
	            sameDay: '[Today at] LT',
	            nextDay: '[Tomorrow at] LT',
	            nextWeek: 'dddd [at] LT',
	            lastDay: '[Yesterday at] LT',
	            lastWeek: '[Last] dddd [at] LT',
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: 'in %s',
	            past: '%s ago',
	            s: 'a few seconds',
	            ss: '%d seconds',
	            m: 'a minute',
	            mm: '%d minutes',
	            h: 'an hour',
	            hh: '%d hours',
	            d: 'a day',
	            dd: '%d days',
	            M: 'a month',
	            MM: '%d months',
	            y: 'a year',
	            yy: '%d years',
	        },
	        dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
	        ordinal: function (number) {
	            var b = number % 10,
	                output =
	                    ~~((number % 100) / 10) === 1
	                        ? 'th'
	                        : b === 1
	                        ? 'st'
	                        : b === 2
	                        ? 'nd'
	                        : b === 3
	                        ? 'rd'
	                        : 'th';
	            return number + output;
	        },
	    });
	
	    return enIl;
	
	})));


/***/ }),
/* 404 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : English (India) [en-in]
	//! author : Jatin Agrawal : https://github.com/jatinag22
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var enIn = moment.defineLocale('en-in', {
	        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(
	            '_'
	        ),
	        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
	        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(
	            '_'
	        ),
	        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
	        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
	        longDateFormat: {
	            LT: 'h:mm A',
	            LTS: 'h:mm:ss A',
	            L: 'DD/MM/YYYY',
	            LL: 'D MMMM YYYY',
	            LLL: 'D MMMM YYYY h:mm A',
	            LLLL: 'dddd, D MMMM YYYY h:mm A',
	        },
	        calendar: {
	            sameDay: '[Today at] LT',
	            nextDay: '[Tomorrow at] LT',
	            nextWeek: 'dddd [at] LT',
	            lastDay: '[Yesterday at] LT',
	            lastWeek: '[Last] dddd [at] LT',
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: 'in %s',
	            past: '%s ago',
	            s: 'a few seconds',
	            ss: '%d seconds',
	            m: 'a minute',
	            mm: '%d minutes',
	            h: 'an hour',
	            hh: '%d hours',
	            d: 'a day',
	            dd: '%d days',
	            M: 'a month',
	            MM: '%d months',
	            y: 'a year',
	            yy: '%d years',
	        },
	        dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
	        ordinal: function (number) {
	            var b = number % 10,
	                output =
	                    ~~((number % 100) / 10) === 1
	                        ? 'th'
	                        : b === 1
	                        ? 'st'
	                        : b === 2
	                        ? 'nd'
	                        : b === 3
	                        ? 'rd'
	                        : 'th';
	            return number + output;
	        },
	        week: {
	            dow: 0, // Sunday is the first day of the week.
	            doy: 6, // The week that contains Jan 1st is the first week of the year.
	        },
	    });
	
	    return enIn;
	
	})));


/***/ }),
/* 405 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : English (New Zealand) [en-nz]
	//! author : Luke McGregor : https://github.com/lukemcgregor
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var enNz = moment.defineLocale('en-nz', {
	        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(
	            '_'
	        ),
	        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
	        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(
	            '_'
	        ),
	        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
	        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
	        longDateFormat: {
	            LT: 'h:mm A',
	            LTS: 'h:mm:ss A',
	            L: 'DD/MM/YYYY',
	            LL: 'D MMMM YYYY',
	            LLL: 'D MMMM YYYY h:mm A',
	            LLLL: 'dddd, D MMMM YYYY h:mm A',
	        },
	        calendar: {
	            sameDay: '[Today at] LT',
	            nextDay: '[Tomorrow at] LT',
	            nextWeek: 'dddd [at] LT',
	            lastDay: '[Yesterday at] LT',
	            lastWeek: '[Last] dddd [at] LT',
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: 'in %s',
	            past: '%s ago',
	            s: 'a few seconds',
	            ss: '%d seconds',
	            m: 'a minute',
	            mm: '%d minutes',
	            h: 'an hour',
	            hh: '%d hours',
	            d: 'a day',
	            dd: '%d days',
	            M: 'a month',
	            MM: '%d months',
	            y: 'a year',
	            yy: '%d years',
	        },
	        dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
	        ordinal: function (number) {
	            var b = number % 10,
	                output =
	                    ~~((number % 100) / 10) === 1
	                        ? 'th'
	                        : b === 1
	                        ? 'st'
	                        : b === 2
	                        ? 'nd'
	                        : b === 3
	                        ? 'rd'
	                        : 'th';
	            return number + output;
	        },
	        week: {
	            dow: 1, // Monday is the first day of the week.
	            doy: 4, // The week that contains Jan 4th is the first week of the year.
	        },
	    });
	
	    return enNz;
	
	})));


/***/ }),
/* 406 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : English (Singapore) [en-sg]
	//! author : Matthew Castrillon-Madrigal : https://github.com/techdimension
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var enSg = moment.defineLocale('en-sg', {
	        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(
	            '_'
	        ),
	        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
	        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(
	            '_'
	        ),
	        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
	        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
	        longDateFormat: {
	            LT: 'HH:mm',
	            LTS: 'HH:mm:ss',
	            L: 'DD/MM/YYYY',
	            LL: 'D MMMM YYYY',
	            LLL: 'D MMMM YYYY HH:mm',
	            LLLL: 'dddd, D MMMM YYYY HH:mm',
	        },
	        calendar: {
	            sameDay: '[Today at] LT',
	            nextDay: '[Tomorrow at] LT',
	            nextWeek: 'dddd [at] LT',
	            lastDay: '[Yesterday at] LT',
	            lastWeek: '[Last] dddd [at] LT',
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: 'in %s',
	            past: '%s ago',
	            s: 'a few seconds',
	            ss: '%d seconds',
	            m: 'a minute',
	            mm: '%d minutes',
	            h: 'an hour',
	            hh: '%d hours',
	            d: 'a day',
	            dd: '%d days',
	            M: 'a month',
	            MM: '%d months',
	            y: 'a year',
	            yy: '%d years',
	        },
	        dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
	        ordinal: function (number) {
	            var b = number % 10,
	                output =
	                    ~~((number % 100) / 10) === 1
	                        ? 'th'
	                        : b === 1
	                        ? 'st'
	                        : b === 2
	                        ? 'nd'
	                        : b === 3
	                        ? 'rd'
	                        : 'th';
	            return number + output;
	        },
	        week: {
	            dow: 1, // Monday is the first day of the week.
	            doy: 4, // The week that contains Jan 4th is the first week of the year.
	        },
	    });
	
	    return enSg;
	
	})));


/***/ }),
/* 407 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Esperanto [eo]
	//! author : Colin Dean : https://github.com/colindean
	//! author : Mia Nordentoft Imperatori : https://github.com/miestasmia
	//! comment : miestasmia corrected the translation by colindean
	//! comment : Vivakvo corrected the translation by colindean and miestasmia
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var eo = moment.defineLocale('eo', {
	        months: 'januaro_februaro_marto_aprilo_majo_junio_julio_aŭgusto_septembro_oktobro_novembro_decembro'.split(
	            '_'
	        ),
	        monthsShort: 'jan_feb_mart_apr_maj_jun_jul_aŭg_sept_okt_nov_dec'.split('_'),
	        weekdays: 'dimanĉo_lundo_mardo_merkredo_ĵaŭdo_vendredo_sabato'.split('_'),
	        weekdaysShort: 'dim_lun_mard_merk_ĵaŭ_ven_sab'.split('_'),
	        weekdaysMin: 'di_lu_ma_me_ĵa_ve_sa'.split('_'),
	        longDateFormat: {
	            LT: 'HH:mm',
	            LTS: 'HH:mm:ss',
	            L: 'YYYY-MM-DD',
	            LL: '[la] D[-an de] MMMM, YYYY',
	            LLL: '[la] D[-an de] MMMM, YYYY HH:mm',
	            LLLL: 'dddd[n], [la] D[-an de] MMMM, YYYY HH:mm',
	            llll: 'ddd, [la] D[-an de] MMM, YYYY HH:mm',
	        },
	        meridiemParse: /[ap]\.t\.m/i,
	        isPM: function (input) {
	            return input.charAt(0).toLowerCase() === 'p';
	        },
	        meridiem: function (hours, minutes, isLower) {
	            if (hours > 11) {
	                return isLower ? 'p.t.m.' : 'P.T.M.';
	            } else {
	                return isLower ? 'a.t.m.' : 'A.T.M.';
	            }
	        },
	        calendar: {
	            sameDay: '[Hodiaŭ je] LT',
	            nextDay: '[Morgaŭ je] LT',
	            nextWeek: 'dddd[n je] LT',
	            lastDay: '[Hieraŭ je] LT',
	            lastWeek: '[pasintan] dddd[n je] LT',
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: 'post %s',
	            past: 'antaŭ %s',
	            s: 'kelkaj sekundoj',
	            ss: '%d sekundoj',
	            m: 'unu minuto',
	            mm: '%d minutoj',
	            h: 'unu horo',
	            hh: '%d horoj',
	            d: 'unu tago', //ne 'diurno', ĉar estas uzita por proksimumo
	            dd: '%d tagoj',
	            M: 'unu monato',
	            MM: '%d monatoj',
	            y: 'unu jaro',
	            yy: '%d jaroj',
	        },
	        dayOfMonthOrdinalParse: /\d{1,2}a/,
	        ordinal: '%da',
	        week: {
	            dow: 1, // Monday is the first day of the week.
	            doy: 7, // The week that contains Jan 7th is the first week of the year.
	        },
	    });
	
	    return eo;
	
	})));


/***/ }),
/* 408 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Spanish (Dominican Republic) [es-do]
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split(
	            '_'
	        ),
	        monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'),
	        monthsParse = [
	            /^ene/i,
	            /^feb/i,
	            /^mar/i,
	            /^abr/i,
	            /^may/i,
	            /^jun/i,
	            /^jul/i,
	            /^ago/i,
	            /^sep/i,
	            /^oct/i,
	            /^nov/i,
	            /^dic/i,
	        ],
	        monthsRegex = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;
	
	    var esDo = moment.defineLocale('es-do', {
	        months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split(
	            '_'
	        ),
	        monthsShort: function (m, format) {
	            if (!m) {
	                return monthsShortDot;
	            } else if (/-MMM-/.test(format)) {
	                return monthsShort[m.month()];
	            } else {
	                return monthsShortDot[m.month()];
	            }
	        },
	        monthsRegex: monthsRegex,
	        monthsShortRegex: monthsRegex,
	        monthsStrictRegex: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,
	        monthsShortStrictRegex: /^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,
	        monthsParse: monthsParse,
	        longMonthsParse: monthsParse,
	        shortMonthsParse: monthsParse,
	        weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),
	        weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),
	        weekdaysMin: 'do_lu_ma_mi_ju_vi_sá'.split('_'),
	        weekdaysParseExact: true,
	        longDateFormat: {
	            LT: 'h:mm A',
	            LTS: 'h:mm:ss A',
	            L: 'DD/MM/YYYY',
	            LL: 'D [de] MMMM [de] YYYY',
	            LLL: 'D [de] MMMM [de] YYYY h:mm A',
	            LLLL: 'dddd, D [de] MMMM [de] YYYY h:mm A',
	        },
	        calendar: {
	            sameDay: function () {
	                return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
	            },
	            nextDay: function () {
	                return '[mañana a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
	            },
	            nextWeek: function () {
	                return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
	            },
	            lastDay: function () {
	                return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
	            },
	            lastWeek: function () {
	                return (
	                    '[el] dddd [pasado a la' +
	                    (this.hours() !== 1 ? 's' : '') +
	                    '] LT'
	                );
	            },
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: 'en %s',
	            past: 'hace %s',
	            s: 'unos segundos',
	            ss: '%d segundos',
	            m: 'un minuto',
	            mm: '%d minutos',
	            h: 'una hora',
	            hh: '%d horas',
	            d: 'un día',
	            dd: '%d días',
	            M: 'un mes',
	            MM: '%d meses',
	            y: 'un año',
	            yy: '%d años',
	        },
	        dayOfMonthOrdinalParse: /\d{1,2}º/,
	        ordinal: '%dº',
	        week: {
	            dow: 1, // Monday is the first day of the week.
	            doy: 4, // The week that contains Jan 4th is the first week of the year.
	        },
	    });
	
	    return esDo;
	
	})));


/***/ }),
/* 409 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Spanish (United States) [es-us]
	//! author : bustta : https://github.com/bustta
	//! author : chrisrodz : https://github.com/chrisrodz
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split(
	            '_'
	        ),
	        monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'),
	        monthsParse = [
	            /^ene/i,
	            /^feb/i,
	            /^mar/i,
	            /^abr/i,
	            /^may/i,
	            /^jun/i,
	            /^jul/i,
	            /^ago/i,
	            /^sep/i,
	            /^oct/i,
	            /^nov/i,
	            /^dic/i,
	        ],
	        monthsRegex = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;
	
	    var esUs = moment.defineLocale('es-us', {
	        months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split(
	            '_'
	        ),
	        monthsShort: function (m, format) {
	            if (!m) {
	                return monthsShortDot;
	            } else if (/-MMM-/.test(format)) {
	                return monthsShort[m.month()];
	            } else {
	                return monthsShortDot[m.month()];
	            }
	        },
	        monthsRegex: monthsRegex,
	        monthsShortRegex: monthsRegex,
	        monthsStrictRegex: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,
	        monthsShortStrictRegex: /^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,
	        monthsParse: monthsParse,
	        longMonthsParse: monthsParse,
	        shortMonthsParse: monthsParse,
	        weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),
	        weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),
	        weekdaysMin: 'do_lu_ma_mi_ju_vi_sá'.split('_'),
	        weekdaysParseExact: true,
	        longDateFormat: {
	            LT: 'h:mm A',
	            LTS: 'h:mm:ss A',
	            L: 'MM/DD/YYYY',
	            LL: 'D [de] MMMM [de] YYYY',
	            LLL: 'D [de] MMMM [de] YYYY h:mm A',
	            LLLL: 'dddd, D [de] MMMM [de] YYYY h:mm A',
	        },
	        calendar: {
	            sameDay: function () {
	                return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
	            },
	            nextDay: function () {
	                return '[mañana a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
	            },
	            nextWeek: function () {
	                return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
	            },
	            lastDay: function () {
	                return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
	            },
	            lastWeek: function () {
	                return (
	                    '[el] dddd [pasado a la' +
	                    (this.hours() !== 1 ? 's' : '') +
	                    '] LT'
	                );
	            },
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: 'en %s',
	            past: 'hace %s',
	            s: 'unos segundos',
	            ss: '%d segundos',
	            m: 'un minuto',
	            mm: '%d minutos',
	            h: 'una hora',
	            hh: '%d horas',
	            d: 'un día',
	            dd: '%d días',
	            M: 'un mes',
	            MM: '%d meses',
	            y: 'un año',
	            yy: '%d años',
	        },
	        dayOfMonthOrdinalParse: /\d{1,2}º/,
	        ordinal: '%dº',
	        week: {
	            dow: 0, // Sunday is the first day of the week.
	            doy: 6, // The week that contains Jan 6th is the first week of the year.
	        },
	    });
	
	    return esUs;
	
	})));


/***/ }),
/* 410 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Spanish [es]
	//! author : Julio Napurí : https://github.com/julionc
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split(
	            '_'
	        ),
	        monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'),
	        monthsParse = [
	            /^ene/i,
	            /^feb/i,
	            /^mar/i,
	            /^abr/i,
	            /^may/i,
	            /^jun/i,
	            /^jul/i,
	            /^ago/i,
	            /^sep/i,
	            /^oct/i,
	            /^nov/i,
	            /^dic/i,
	        ],
	        monthsRegex = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;
	
	    var es = moment.defineLocale('es', {
	        months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split(
	            '_'
	        ),
	        monthsShort: function (m, format) {
	            if (!m) {
	                return monthsShortDot;
	            } else if (/-MMM-/.test(format)) {
	                return monthsShort[m.month()];
	            } else {
	                return monthsShortDot[m.month()];
	            }
	        },
	        monthsRegex: monthsRegex,
	        monthsShortRegex: monthsRegex,
	        monthsStrictRegex: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,
	        monthsShortStrictRegex: /^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,
	        monthsParse: monthsParse,
	        longMonthsParse: monthsParse,
	        shortMonthsParse: monthsParse,
	        weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),
	        weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),
	        weekdaysMin: 'do_lu_ma_mi_ju_vi_sá'.split('_'),
	        weekdaysParseExact: true,
	        longDateFormat: {
	            LT: 'H:mm',
	            LTS: 'H:mm:ss',
	            L: 'DD/MM/YYYY',
	            LL: 'D [de] MMMM [de] YYYY',
	            LLL: 'D [de] MMMM [de] YYYY H:mm',
	            LLLL: 'dddd, D [de] MMMM [de] YYYY H:mm',
	        },
	        calendar: {
	            sameDay: function () {
	                return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
	            },
	            nextDay: function () {
	                return '[mañana a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
	            },
	            nextWeek: function () {
	                return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
	            },
	            lastDay: function () {
	                return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
	            },
	            lastWeek: function () {
	                return (
	                    '[el] dddd [pasado a la' +
	                    (this.hours() !== 1 ? 's' : '') +
	                    '] LT'
	                );
	            },
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: 'en %s',
	            past: 'hace %s',
	            s: 'unos segundos',
	            ss: '%d segundos',
	            m: 'un minuto',
	            mm: '%d minutos',
	            h: 'una hora',
	            hh: '%d horas',
	            d: 'un día',
	            dd: '%d días',
	            M: 'un mes',
	            MM: '%d meses',
	            y: 'un año',
	            yy: '%d años',
	        },
	        dayOfMonthOrdinalParse: /\d{1,2}º/,
	        ordinal: '%dº',
	        week: {
	            dow: 1, // Monday is the first day of the week.
	            doy: 4, // The week that contains Jan 4th is the first week of the year.
	        },
	        invalidDate: 'Fecha invalida',
	    });
	
	    return es;
	
	})));


/***/ }),
/* 411 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Estonian [et]
	//! author : Henry Kehlmann : https://github.com/madhenry
	//! improvements : Illimar Tambek : https://github.com/ragulka
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    function processRelativeTime(number, withoutSuffix, key, isFuture) {
	        var format = {
	            s: ['mõne sekundi', 'mõni sekund', 'paar sekundit'],
	            ss: [number + 'sekundi', number + 'sekundit'],
	            m: ['ühe minuti', 'üks minut'],
	            mm: [number + ' minuti', number + ' minutit'],
	            h: ['ühe tunni', 'tund aega', 'üks tund'],
	            hh: [number + ' tunni', number + ' tundi'],
	            d: ['ühe päeva', 'üks päev'],
	            M: ['kuu aja', 'kuu aega', 'üks kuu'],
	            MM: [number + ' kuu', number + ' kuud'],
	            y: ['ühe aasta', 'aasta', 'üks aasta'],
	            yy: [number + ' aasta', number + ' aastat'],
	        };
	        if (withoutSuffix) {
	            return format[key][2] ? format[key][2] : format[key][1];
	        }
	        return isFuture ? format[key][0] : format[key][1];
	    }
	
	    var et = moment.defineLocale('et', {
	        months: 'jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember'.split(
	            '_'
	        ),
	        monthsShort: 'jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets'.split(
	            '_'
	        ),
	        weekdays: 'pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev'.split(
	            '_'
	        ),
	        weekdaysShort: 'P_E_T_K_N_R_L'.split('_'),
	        weekdaysMin: 'P_E_T_K_N_R_L'.split('_'),
	        longDateFormat: {
	            LT: 'H:mm',
	            LTS: 'H:mm:ss',
	            L: 'DD.MM.YYYY',
	            LL: 'D. MMMM YYYY',
	            LLL: 'D. MMMM YYYY H:mm',
	            LLLL: 'dddd, D. MMMM YYYY H:mm',
	        },
	        calendar: {
	            sameDay: '[Täna,] LT',
	            nextDay: '[Homme,] LT',
	            nextWeek: '[Järgmine] dddd LT',
	            lastDay: '[Eile,] LT',
	            lastWeek: '[Eelmine] dddd LT',
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: '%s pärast',
	            past: '%s tagasi',
	            s: processRelativeTime,
	            ss: processRelativeTime,
	            m: processRelativeTime,
	            mm: processRelativeTime,
	            h: processRelativeTime,
	            hh: processRelativeTime,
	            d: processRelativeTime,
	            dd: '%d päeva',
	            M: processRelativeTime,
	            MM: processRelativeTime,
	            y: processRelativeTime,
	            yy: processRelativeTime,
	        },
	        dayOfMonthOrdinalParse: /\d{1,2}\./,
	        ordinal: '%d.',
	        week: {
	            dow: 1, // Monday is the first day of the week.
	            doy: 4, // The week that contains Jan 4th is the first week of the year.
	        },
	    });
	
	    return et;
	
	})));


/***/ }),
/* 412 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Basque [eu]
	//! author : Eneko Illarramendi : https://github.com/eillarra
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var eu = moment.defineLocale('eu', {
	        months: 'urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua'.split(
	            '_'
	        ),
	        monthsShort: 'urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.'.split(
	            '_'
	        ),
	        monthsParseExact: true,
	        weekdays: 'igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata'.split(
	            '_'
	        ),
	        weekdaysShort: 'ig._al._ar._az._og._ol._lr.'.split('_'),
	        weekdaysMin: 'ig_al_ar_az_og_ol_lr'.split('_'),
	        weekdaysParseExact: true,
	        longDateFormat: {
	            LT: 'HH:mm',
	            LTS: 'HH:mm:ss',
	            L: 'YYYY-MM-DD',
	            LL: 'YYYY[ko] MMMM[ren] D[a]',
	            LLL: 'YYYY[ko] MMMM[ren] D[a] HH:mm',
	            LLLL: 'dddd, YYYY[ko] MMMM[ren] D[a] HH:mm',
	            l: 'YYYY-M-D',
	            ll: 'YYYY[ko] MMM D[a]',
	            lll: 'YYYY[ko] MMM D[a] HH:mm',
	            llll: 'ddd, YYYY[ko] MMM D[a] HH:mm',
	        },
	        calendar: {
	            sameDay: '[gaur] LT[etan]',
	            nextDay: '[bihar] LT[etan]',
	            nextWeek: 'dddd LT[etan]',
	            lastDay: '[atzo] LT[etan]',
	            lastWeek: '[aurreko] dddd LT[etan]',
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: '%s barru',
	            past: 'duela %s',
	            s: 'segundo batzuk',
	            ss: '%d segundo',
	            m: 'minutu bat',
	            mm: '%d minutu',
	            h: 'ordu bat',
	            hh: '%d ordu',
	            d: 'egun bat',
	            dd: '%d egun',
	            M: 'hilabete bat',
	            MM: '%d hilabete',
	            y: 'urte bat',
	            yy: '%d urte',
	        },
	        dayOfMonthOrdinalParse: /\d{1,2}\./,
	        ordinal: '%d.',
	        week: {
	            dow: 1, // Monday is the first day of the week.
	            doy: 7, // The week that contains Jan 7th is the first week of the year.
	        },
	    });
	
	    return eu;
	
	})));


/***/ }),
/* 413 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Persian [fa]
	//! author : Ebrahim Byagowi : https://github.com/ebraminio
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var symbolMap = {
	            '1': '۱',
	            '2': '۲',
	            '3': '۳',
	            '4': '۴',
	            '5': '۵',
	            '6': '۶',
	            '7': '۷',
	            '8': '۸',
	            '9': '۹',
	            '0': '۰',
	        },
	        numberMap = {
	            '۱': '1',
	            '۲': '2',
	            '۳': '3',
	            '۴': '4',
	            '۵': '5',
	            '۶': '6',
	            '۷': '7',
	            '۸': '8',
	            '۹': '9',
	            '۰': '0',
	        };
	
	    var fa = moment.defineLocale('fa', {
	        months: 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split(
	            '_'
	        ),
	        monthsShort: 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split(
	            '_'
	        ),
	        weekdays: 'یک\u200cشنبه_دوشنبه_سه\u200cشنبه_چهارشنبه_پنج\u200cشنبه_جمعه_شنبه'.split(
	            '_'
	        ),
	        weekdaysShort: 'یک\u200cشنبه_دوشنبه_سه\u200cشنبه_چهارشنبه_پنج\u200cشنبه_جمعه_شنبه'.split(
	            '_'
	        ),
	        weekdaysMin: 'ی_د_س_چ_پ_ج_ش'.split('_'),
	        weekdaysParseExact: true,
	        longDateFormat: {
	            LT: 'HH:mm',
	            LTS: 'HH:mm:ss',
	            L: 'DD/MM/YYYY',
	            LL: 'D MMMM YYYY',
	            LLL: 'D MMMM YYYY HH:mm',
	            LLLL: 'dddd, D MMMM YYYY HH:mm',
	        },
	        meridiemParse: /قبل از ظهر|بعد از ظهر/,
	        isPM: function (input) {
	            return /بعد از ظهر/.test(input);
	        },
	        meridiem: function (hour, minute, isLower) {
	            if (hour < 12) {
	                return 'قبل از ظهر';
	            } else {
	                return 'بعد از ظهر';
	            }
	        },
	        calendar: {
	            sameDay: '[امروز ساعت] LT',
	            nextDay: '[فردا ساعت] LT',
	            nextWeek: 'dddd [ساعت] LT',
	            lastDay: '[دیروز ساعت] LT',
	            lastWeek: 'dddd [پیش] [ساعت] LT',
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: 'در %s',
	            past: '%s پیش',
	            s: 'چند ثانیه',
	            ss: '%d ثانیه',
	            m: 'یک دقیقه',
	            mm: '%d دقیقه',
	            h: 'یک ساعت',
	            hh: '%d ساعت',
	            d: 'یک روز',
	            dd: '%d روز',
	            M: 'یک ماه',
	            MM: '%d ماه',
	            y: 'یک سال',
	            yy: '%d سال',
	        },
	        preparse: function (string) {
	            return string
	                .replace(/[۰-۹]/g, function (match) {
	                    return numberMap[match];
	                })
	                .replace(/،/g, ',');
	        },
	        postformat: function (string) {
	            return string
	                .replace(/\d/g, function (match) {
	                    return symbolMap[match];
	                })
	                .replace(/,/g, '،');
	        },
	        dayOfMonthOrdinalParse: /\d{1,2}م/,
	        ordinal: '%dم',
	        week: {
	            dow: 6, // Saturday is the first day of the week.
	            doy: 12, // The week that contains Jan 12th is the first week of the year.
	        },
	    });
	
	    return fa;
	
	})));


/***/ }),
/* 414 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Finnish [fi]
	//! author : Tarmo Aidantausta : https://github.com/bleadof
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var numbersPast = 'nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän'.split(
	            ' '
	        ),
	        numbersFuture = [
	            'nolla',
	            'yhden',
	            'kahden',
	            'kolmen',
	            'neljän',
	            'viiden',
	            'kuuden',
	            numbersPast[7],
	            numbersPast[8],
	            numbersPast[9],
	        ];
	    function translate(number, withoutSuffix, key, isFuture) {
	        var result = '';
	        switch (key) {
	            case 's':
	                return isFuture ? 'muutaman sekunnin' : 'muutama sekunti';
	            case 'ss':
	                result = isFuture ? 'sekunnin' : 'sekuntia';
	                break;
	            case 'm':
	                return isFuture ? 'minuutin' : 'minuutti';
	            case 'mm':
	                result = isFuture ? 'minuutin' : 'minuuttia';
	                break;
	            case 'h':
	                return isFuture ? 'tunnin' : 'tunti';
	            case 'hh':
	                result = isFuture ? 'tunnin' : 'tuntia';
	                break;
	            case 'd':
	                return isFuture ? 'päivän' : 'päivä';
	            case 'dd':
	                result = isFuture ? 'päivän' : 'päivää';
	                break;
	            case 'M':
	                return isFuture ? 'kuukauden' : 'kuukausi';
	            case 'MM':
	                result = isFuture ? 'kuukauden' : 'kuukautta';
	                break;
	            case 'y':
	                return isFuture ? 'vuoden' : 'vuosi';
	            case 'yy':
	                result = isFuture ? 'vuoden' : 'vuotta';
	                break;
	        }
	        result = verbalNumber(number, isFuture) + ' ' + result;
	        return result;
	    }
	    function verbalNumber(number, isFuture) {
	        return number < 10
	            ? isFuture
	                ? numbersFuture[number]
	                : numbersPast[number]
	            : number;
	    }
	
	    var fi = moment.defineLocale('fi', {
	        months: 'tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu'.split(
	            '_'
	        ),
	        monthsShort: 'tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu'.split(
	            '_'
	        ),
	        weekdays: 'sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai'.split(
	            '_'
	        ),
	        weekdaysShort: 'su_ma_ti_ke_to_pe_la'.split('_'),
	        weekdaysMin: 'su_ma_ti_ke_to_pe_la'.split('_'),
	        longDateFormat: {
	            LT: 'HH.mm',
	            LTS: 'HH.mm.ss',
	            L: 'DD.MM.YYYY',
	            LL: 'Do MMMM[ta] YYYY',
	            LLL: 'Do MMMM[ta] YYYY, [klo] HH.mm',
	            LLLL: 'dddd, Do MMMM[ta] YYYY, [klo] HH.mm',
	            l: 'D.M.YYYY',
	            ll: 'Do MMM YYYY',
	            lll: 'Do MMM YYYY, [klo] HH.mm',
	            llll: 'ddd, Do MMM YYYY, [klo] HH.mm',
	        },
	        calendar: {
	            sameDay: '[tänään] [klo] LT',
	            nextDay: '[huomenna] [klo] LT',
	            nextWeek: 'dddd [klo] LT',
	            lastDay: '[eilen] [klo] LT',
	            lastWeek: '[viime] dddd[na] [klo] LT',
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: '%s päästä',
	            past: '%s sitten',
	            s: translate,
	            ss: translate,
	            m: translate,
	            mm: translate,
	            h: translate,
	            hh: translate,
	            d: translate,
	            dd: translate,
	            M: translate,
	            MM: translate,
	            y: translate,
	            yy: translate,
	        },
	        dayOfMonthOrdinalParse: /\d{1,2}\./,
	        ordinal: '%d.',
	        week: {
	            dow: 1, // Monday is the first day of the week.
	            doy: 4, // The week that contains Jan 4th is the first week of the year.
	        },
	    });
	
	    return fi;
	
	})));


/***/ }),
/* 415 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Filipino [fil]
	//! author : Dan Hagman : https://github.com/hagmandan
	//! author : Matthew Co : https://github.com/matthewdeeco
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var fil = moment.defineLocale('fil', {
	        months: 'Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre'.split(
	            '_'
	        ),
	        monthsShort: 'Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis'.split('_'),
	        weekdays: 'Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado'.split(
	            '_'
	        ),
	        weekdaysShort: 'Lin_Lun_Mar_Miy_Huw_Biy_Sab'.split('_'),
	        weekdaysMin: 'Li_Lu_Ma_Mi_Hu_Bi_Sab'.split('_'),
	        longDateFormat: {
	            LT: 'HH:mm',
	            LTS: 'HH:mm:ss',
	            L: 'MM/D/YYYY',
	            LL: 'MMMM D, YYYY',
	            LLL: 'MMMM D, YYYY HH:mm',
	            LLLL: 'dddd, MMMM DD, YYYY HH:mm',
	        },
	        calendar: {
	            sameDay: 'LT [ngayong araw]',
	            nextDay: '[Bukas ng] LT',
	            nextWeek: 'LT [sa susunod na] dddd',
	            lastDay: 'LT [kahapon]',
	            lastWeek: 'LT [noong nakaraang] dddd',
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: 'sa loob ng %s',
	            past: '%s ang nakalipas',
	            s: 'ilang segundo',
	            ss: '%d segundo',
	            m: 'isang minuto',
	            mm: '%d minuto',
	            h: 'isang oras',
	            hh: '%d oras',
	            d: 'isang araw',
	            dd: '%d araw',
	            M: 'isang buwan',
	            MM: '%d buwan',
	            y: 'isang taon',
	            yy: '%d taon',
	        },
	        dayOfMonthOrdinalParse: /\d{1,2}/,
	        ordinal: function (number) {
	            return number;
	        },
	        week: {
	            dow: 1, // Monday is the first day of the week.
	            doy: 4, // The week that contains Jan 4th is the first week of the year.
	        },
	    });
	
	    return fil;
	
	})));


/***/ }),
/* 416 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Faroese [fo]
	//! author : Ragnar Johannesen : https://github.com/ragnar123
	//! author : Kristian Sakarisson : https://github.com/sakarisson
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var fo = moment.defineLocale('fo', {
	        months: 'januar_februar_mars_apríl_mai_juni_juli_august_september_oktober_november_desember'.split(
	            '_'
	        ),
	        monthsShort: 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'),
	        weekdays: 'sunnudagur_mánadagur_týsdagur_mikudagur_hósdagur_fríggjadagur_leygardagur'.split(
	            '_'
	        ),
	        weekdaysShort: 'sun_mán_týs_mik_hós_frí_ley'.split('_'),
	        weekdaysMin: 'su_má_tý_mi_hó_fr_le'.split('_'),
	        longDateFormat: {
	            LT: 'HH:mm',
	            LTS: 'HH:mm:ss',
	            L: 'DD/MM/YYYY',
	            LL: 'D MMMM YYYY',
	            LLL: 'D MMMM YYYY HH:mm',
	            LLLL: 'dddd D. MMMM, YYYY HH:mm',
	        },
	        calendar: {
	            sameDay: '[Í dag kl.] LT',
	            nextDay: '[Í morgin kl.] LT',
	            nextWeek: 'dddd [kl.] LT',
	            lastDay: '[Í gjár kl.] LT',
	            lastWeek: '[síðstu] dddd [kl] LT',
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: 'um %s',
	            past: '%s síðani',
	            s: 'fá sekund',
	            ss: '%d sekundir',
	            m: 'ein minuttur',
	            mm: '%d minuttir',
	            h: 'ein tími',
	            hh: '%d tímar',
	            d: 'ein dagur',
	            dd: '%d dagar',
	            M: 'ein mánaður',
	            MM: '%d mánaðir',
	            y: 'eitt ár',
	            yy: '%d ár',
	        },
	        dayOfMonthOrdinalParse: /\d{1,2}\./,
	        ordinal: '%d.',
	        week: {
	            dow: 1, // Monday is the first day of the week.
	            doy: 4, // The week that contains Jan 4th is the first week of the year.
	        },
	    });
	
	    return fo;
	
	})));


/***/ }),
/* 417 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : French (Canada) [fr-ca]
	//! author : Jonathan Abourbih : https://github.com/jonbca
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var frCa = moment.defineLocale('fr-ca', {
	        months: 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split(
	            '_'
	        ),
	        monthsShort: 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split(
	            '_'
	        ),
	        monthsParseExact: true,
	        weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),
	        weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),
	        weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'),
	        weekdaysParseExact: true,
	        longDateFormat: {
	            LT: 'HH:mm',
	            LTS: 'HH:mm:ss',
	            L: 'YYYY-MM-DD',
	            LL: 'D MMMM YYYY',
	            LLL: 'D MMMM YYYY HH:mm',
	            LLLL: 'dddd D MMMM YYYY HH:mm',
	        },
	        calendar: {
	            sameDay: '[Aujourd’hui à] LT',
	            nextDay: '[Demain à] LT',
	            nextWeek: 'dddd [à] LT',
	            lastDay: '[Hier à] LT',
	            lastWeek: 'dddd [dernier à] LT',
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: 'dans %s',
	            past: 'il y a %s',
	            s: 'quelques secondes',
	            ss: '%d secondes',
	            m: 'une minute',
	            mm: '%d minutes',
	            h: 'une heure',
	            hh: '%d heures',
	            d: 'un jour',
	            dd: '%d jours',
	            M: 'un mois',
	            MM: '%d mois',
	            y: 'un an',
	            yy: '%d ans',
	        },
	        dayOfMonthOrdinalParse: /\d{1,2}(er|e)/,
	        ordinal: function (number, period) {
	            switch (period) {
	                // Words with masculine grammatical gender: mois, trimestre, jour
	                default:
	                case 'M':
	                case 'Q':
	                case 'D':
	                case 'DDD':
	                case 'd':
	                    return number + (number === 1 ? 'er' : 'e');
	
	                // Words with feminine grammatical gender: semaine
	                case 'w':
	                case 'W':
	                    return number + (number === 1 ? 're' : 'e');
	            }
	        },
	    });
	
	    return frCa;
	
	})));


/***/ }),
/* 418 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : French (Switzerland) [fr-ch]
	//! author : Gaspard Bucher : https://github.com/gaspard
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var frCh = moment.defineLocale('fr-ch', {
	        months: 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split(
	            '_'
	        ),
	        monthsShort: 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split(
	            '_'
	        ),
	        monthsParseExact: true,
	        weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),
	        weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),
	        weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'),
	        weekdaysParseExact: true,
	        longDateFormat: {
	            LT: 'HH:mm',
	            LTS: 'HH:mm:ss',
	            L: 'DD.MM.YYYY',
	            LL: 'D MMMM YYYY',
	            LLL: 'D MMMM YYYY HH:mm',
	            LLLL: 'dddd D MMMM YYYY HH:mm',
	        },
	        calendar: {
	            sameDay: '[Aujourd’hui à] LT',
	            nextDay: '[Demain à] LT',
	            nextWeek: 'dddd [à] LT',
	            lastDay: '[Hier à] LT',
	            lastWeek: 'dddd [dernier à] LT',
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: 'dans %s',
	            past: 'il y a %s',
	            s: 'quelques secondes',
	            ss: '%d secondes',
	            m: 'une minute',
	            mm: '%d minutes',
	            h: 'une heure',
	            hh: '%d heures',
	            d: 'un jour',
	            dd: '%d jours',
	            M: 'un mois',
	            MM: '%d mois',
	            y: 'un an',
	            yy: '%d ans',
	        },
	        dayOfMonthOrdinalParse: /\d{1,2}(er|e)/,
	        ordinal: function (number, period) {
	            switch (period) {
	                // Words with masculine grammatical gender: mois, trimestre, jour
	                default:
	                case 'M':
	                case 'Q':
	                case 'D':
	                case 'DDD':
	                case 'd':
	                    return number + (number === 1 ? 'er' : 'e');
	
	                // Words with feminine grammatical gender: semaine
	                case 'w':
	                case 'W':
	                    return number + (number === 1 ? 're' : 'e');
	            }
	        },
	        week: {
	            dow: 1, // Monday is the first day of the week.
	            doy: 4, // The week that contains Jan 4th is the first week of the year.
	        },
	    });
	
	    return frCh;
	
	})));


/***/ }),
/* 419 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : French [fr]
	//! author : John Fischer : https://github.com/jfroffice
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var monthsStrictRegex = /^(janvier|février|mars|avril|mai|juin|juillet|août|septembre|octobre|novembre|décembre)/i,
	        monthsShortStrictRegex = /(janv\.?|févr\.?|mars|avr\.?|mai|juin|juil\.?|août|sept\.?|oct\.?|nov\.?|déc\.?)/i,
	        monthsRegex = /(janv\.?|févr\.?|mars|avr\.?|mai|juin|juil\.?|août|sept\.?|oct\.?|nov\.?|déc\.?|janvier|février|mars|avril|mai|juin|juillet|août|septembre|octobre|novembre|décembre)/i,
	        monthsParse = [
	            /^janv/i,
	            /^févr/i,
	            /^mars/i,
	            /^avr/i,
	            /^mai/i,
	            /^juin/i,
	            /^juil/i,
	            /^août/i,
	            /^sept/i,
	            /^oct/i,
	            /^nov/i,
	            /^déc/i,
	        ];
	
	    var fr = moment.defineLocale('fr', {
	        months: 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split(
	            '_'
	        ),
	        monthsShort: 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split(
	            '_'
	        ),
	        monthsRegex: monthsRegex,
	        monthsShortRegex: monthsRegex,
	        monthsStrictRegex: monthsStrictRegex,
	        monthsShortStrictRegex: monthsShortStrictRegex,
	        monthsParse: monthsParse,
	        longMonthsParse: monthsParse,
	        shortMonthsParse: monthsParse,
	        weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),
	        weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),
	        weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'),
	        weekdaysParseExact: true,
	        longDateFormat: {
	            LT: 'HH:mm',
	            LTS: 'HH:mm:ss',
	            L: 'DD/MM/YYYY',
	            LL: 'D MMMM YYYY',
	            LLL: 'D MMMM YYYY HH:mm',
	            LLLL: 'dddd D MMMM YYYY HH:mm',
	        },
	        calendar: {
	            sameDay: '[Aujourd’hui à] LT',
	            nextDay: '[Demain à] LT',
	            nextWeek: 'dddd [à] LT',
	            lastDay: '[Hier à] LT',
	            lastWeek: 'dddd [dernier à] LT',
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: 'dans %s',
	            past: 'il y a %s',
	            s: 'quelques secondes',
	            ss: '%d secondes',
	            m: 'une minute',
	            mm: '%d minutes',
	            h: 'une heure',
	            hh: '%d heures',
	            d: 'un jour',
	            dd: '%d jours',
	            M: 'un mois',
	            MM: '%d mois',
	            y: 'un an',
	            yy: '%d ans',
	        },
	        dayOfMonthOrdinalParse: /\d{1,2}(er|)/,
	        ordinal: function (number, period) {
	            switch (period) {
	                // TODO: Return 'e' when day of month > 1. Move this case inside
	                // block for masculine words below.
	                // See https://github.com/moment/moment/issues/3375
	                case 'D':
	                    return number + (number === 1 ? 'er' : '');
	
	                // Words with masculine grammatical gender: mois, trimestre, jour
	                default:
	                case 'M':
	                case 'Q':
	                case 'DDD':
	                case 'd':
	                    return number + (number === 1 ? 'er' : 'e');
	
	                // Words with feminine grammatical gender: semaine
	                case 'w':
	                case 'W':
	                    return number + (number === 1 ? 're' : 'e');
	            }
	        },
	        week: {
	            dow: 1, // Monday is the first day of the week.
	            doy: 4, // The week that contains Jan 4th is the first week of the year.
	        },
	    });
	
	    return fr;
	
	})));


/***/ }),
/* 420 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Frisian [fy]
	//! author : Robin van der Vliet : https://github.com/robin0van0der0v
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var monthsShortWithDots = 'jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.'.split(
	            '_'
	        ),
	        monthsShortWithoutDots = 'jan_feb_mrt_apr_mai_jun_jul_aug_sep_okt_nov_des'.split(
	            '_'
	        );
	
	    var fy = moment.defineLocale('fy', {
	        months: 'jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber'.split(
	            '_'
	        ),
	        monthsShort: function (m, format) {
	            if (!m) {
	                return monthsShortWithDots;
	            } else if (/-MMM-/.test(format)) {
	                return monthsShortWithoutDots[m.month()];
	            } else {
	                return monthsShortWithDots[m.month()];
	            }
	        },
	        monthsParseExact: true,
	        weekdays: 'snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon'.split(
	            '_'
	        ),
	        weekdaysShort: 'si._mo._ti._wo._to._fr._so.'.split('_'),
	        weekdaysMin: 'Si_Mo_Ti_Wo_To_Fr_So'.split('_'),
	        weekdaysParseExact: true,
	        longDateFormat: {
	            LT: 'HH:mm',
	            LTS: 'HH:mm:ss',
	            L: 'DD-MM-YYYY',
	            LL: 'D MMMM YYYY',
	            LLL: 'D MMMM YYYY HH:mm',
	            LLLL: 'dddd D MMMM YYYY HH:mm',
	        },
	        calendar: {
	            sameDay: '[hjoed om] LT',
	            nextDay: '[moarn om] LT',
	            nextWeek: 'dddd [om] LT',
	            lastDay: '[juster om] LT',
	            lastWeek: '[ôfrûne] dddd [om] LT',
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: 'oer %s',
	            past: '%s lyn',
	            s: 'in pear sekonden',
	            ss: '%d sekonden',
	            m: 'ien minút',
	            mm: '%d minuten',
	            h: 'ien oere',
	            hh: '%d oeren',
	            d: 'ien dei',
	            dd: '%d dagen',
	            M: 'ien moanne',
	            MM: '%d moannen',
	            y: 'ien jier',
	            yy: '%d jierren',
	        },
	        dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/,
	        ordinal: function (number) {
	            return (
	                number +
	                (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de')
	            );
	        },
	        week: {
	            dow: 1, // Monday is the first day of the week.
	            doy: 4, // The week that contains Jan 4th is the first week of the year.
	        },
	    });
	
	    return fy;
	
	})));


/***/ }),
/* 421 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Irish or Irish Gaelic [ga]
	//! author : André Silva : https://github.com/askpt
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var months = [
	            'Eanáir',
	            'Feabhra',
	            'Márta',
	            'Aibreán',
	            'Bealtaine',
	            'Meitheamh',
	            'Iúil',
	            'Lúnasa',
	            'Meán Fómhair',
	            'Deireadh Fómhair',
	            'Samhain',
	            'Nollaig',
	        ],
	        monthsShort = [
	            'Ean',
	            'Feabh',
	            'Márt',
	            'Aib',
	            'Beal',
	            'Meith',
	            'Iúil',
	            'Lún',
	            'M.F.',
	            'D.F.',
	            'Samh',
	            'Noll',
	        ],
	        weekdays = [
	            'Dé Domhnaigh',
	            'Dé Luain',
	            'Dé Máirt',
	            'Dé Céadaoin',
	            'Déardaoin',
	            'Dé hAoine',
	            'Dé Sathairn',
	        ],
	        weekdaysShort = ['Domh', 'Luan', 'Máirt', 'Céad', 'Déar', 'Aoine', 'Sath'],
	        weekdaysMin = ['Do', 'Lu', 'Má', 'Cé', 'Dé', 'A', 'Sa'];
	
	    var ga = moment.defineLocale('ga', {
	        months: months,
	        monthsShort: monthsShort,
	        monthsParseExact: true,
	        weekdays: weekdays,
	        weekdaysShort: weekdaysShort,
	        weekdaysMin: weekdaysMin,
	        longDateFormat: {
	            LT: 'HH:mm',
	            LTS: 'HH:mm:ss',
	            L: 'DD/MM/YYYY',
	            LL: 'D MMMM YYYY',
	            LLL: 'D MMMM YYYY HH:mm',
	            LLLL: 'dddd, D MMMM YYYY HH:mm',
	        },
	        calendar: {
	            sameDay: '[Inniu ag] LT',
	            nextDay: '[Amárach ag] LT',
	            nextWeek: 'dddd [ag] LT',
	            lastDay: '[Inné ag] LT',
	            lastWeek: 'dddd [seo caite] [ag] LT',
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: 'i %s',
	            past: '%s ó shin',
	            s: 'cúpla soicind',
	            ss: '%d soicind',
	            m: 'nóiméad',
	            mm: '%d nóiméad',
	            h: 'uair an chloig',
	            hh: '%d uair an chloig',
	            d: 'lá',
	            dd: '%d lá',
	            M: 'mí',
	            MM: '%d míonna',
	            y: 'bliain',
	            yy: '%d bliain',
	        },
	        dayOfMonthOrdinalParse: /\d{1,2}(d|na|mh)/,
	        ordinal: function (number) {
	            var output = number === 1 ? 'd' : number % 10 === 2 ? 'na' : 'mh';
	            return number + output;
	        },
	        week: {
	            dow: 1, // Monday is the first day of the week.
	            doy: 4, // The week that contains Jan 4th is the first week of the year.
	        },
	    });
	
	    return ga;
	
	})));


/***/ }),
/* 422 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Scottish Gaelic [gd]
	//! author : Jon Ashdown : https://github.com/jonashdown
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var months = [
	            'Am Faoilleach',
	            'An Gearran',
	            'Am Màrt',
	            'An Giblean',
	            'An Cèitean',
	            'An t-Ògmhios',
	            'An t-Iuchar',
	            'An Lùnastal',
	            'An t-Sultain',
	            'An Dàmhair',
	            'An t-Samhain',
	            'An Dùbhlachd',
	        ],
	        monthsShort = [
	            'Faoi',
	            'Gear',
	            'Màrt',
	            'Gibl',
	            'Cèit',
	            'Ògmh',
	            'Iuch',
	            'Lùn',
	            'Sult',
	            'Dàmh',
	            'Samh',
	            'Dùbh',
	        ],
	        weekdays = [
	            'Didòmhnaich',
	            'Diluain',
	            'Dimàirt',
	            'Diciadain',
	            'Diardaoin',
	            'Dihaoine',
	            'Disathairne',
	        ],
	        weekdaysShort = ['Did', 'Dil', 'Dim', 'Dic', 'Dia', 'Dih', 'Dis'],
	        weekdaysMin = ['Dò', 'Lu', 'Mà', 'Ci', 'Ar', 'Ha', 'Sa'];
	
	    var gd = moment.defineLocale('gd', {
	        months: months,
	        monthsShort: monthsShort,
	        monthsParseExact: true,
	        weekdays: weekdays,
	        weekdaysShort: weekdaysShort,
	        weekdaysMin: weekdaysMin,
	        longDateFormat: {
	            LT: 'HH:mm',
	            LTS: 'HH:mm:ss',
	            L: 'DD/MM/YYYY',
	            LL: 'D MMMM YYYY',
	            LLL: 'D MMMM YYYY HH:mm',
	            LLLL: 'dddd, D MMMM YYYY HH:mm',
	        },
	        calendar: {
	            sameDay: '[An-diugh aig] LT',
	            nextDay: '[A-màireach aig] LT',
	            nextWeek: 'dddd [aig] LT',
	            lastDay: '[An-dè aig] LT',
	            lastWeek: 'dddd [seo chaidh] [aig] LT',
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: 'ann an %s',
	            past: 'bho chionn %s',
	            s: 'beagan diogan',
	            ss: '%d diogan',
	            m: 'mionaid',
	            mm: '%d mionaidean',
	            h: 'uair',
	            hh: '%d uairean',
	            d: 'latha',
	            dd: '%d latha',
	            M: 'mìos',
	            MM: '%d mìosan',
	            y: 'bliadhna',
	            yy: '%d bliadhna',
	        },
	        dayOfMonthOrdinalParse: /\d{1,2}(d|na|mh)/,
	        ordinal: function (number) {
	            var output = number === 1 ? 'd' : number % 10 === 2 ? 'na' : 'mh';
	            return number + output;
	        },
	        week: {
	            dow: 1, // Monday is the first day of the week.
	            doy: 4, // The week that contains Jan 4th is the first week of the year.
	        },
	    });
	
	    return gd;
	
	})));


/***/ }),
/* 423 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Galician [gl]
	//! author : Juan G. Hurtado : https://github.com/juanghurtado
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var gl = moment.defineLocale('gl', {
	        months: 'xaneiro_febreiro_marzo_abril_maio_xuño_xullo_agosto_setembro_outubro_novembro_decembro'.split(
	            '_'
	        ),
	        monthsShort: 'xan._feb._mar._abr._mai._xuñ._xul._ago._set._out._nov._dec.'.split(
	            '_'
	        ),
	        monthsParseExact: true,
	        weekdays: 'domingo_luns_martes_mércores_xoves_venres_sábado'.split('_'),
	        weekdaysShort: 'dom._lun._mar._mér._xov._ven._sáb.'.split('_'),
	        weekdaysMin: 'do_lu_ma_mé_xo_ve_sá'.split('_'),
	        weekdaysParseExact: true,
	        longDateFormat: {
	            LT: 'H:mm',
	            LTS: 'H:mm:ss',
	            L: 'DD/MM/YYYY',
	            LL: 'D [de] MMMM [de] YYYY',
	            LLL: 'D [de] MMMM [de] YYYY H:mm',
	            LLLL: 'dddd, D [de] MMMM [de] YYYY H:mm',
	        },
	        calendar: {
	            sameDay: function () {
	                return '[hoxe ' + (this.hours() !== 1 ? 'ás' : 'á') + '] LT';
	            },
	            nextDay: function () {
	                return '[mañá ' + (this.hours() !== 1 ? 'ás' : 'á') + '] LT';
	            },
	            nextWeek: function () {
	                return 'dddd [' + (this.hours() !== 1 ? 'ás' : 'a') + '] LT';
	            },
	            lastDay: function () {
	                return '[onte ' + (this.hours() !== 1 ? 'á' : 'a') + '] LT';
	            },
	            lastWeek: function () {
	                return (
	                    '[o] dddd [pasado ' + (this.hours() !== 1 ? 'ás' : 'a') + '] LT'
	                );
	            },
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: function (str) {
	                if (str.indexOf('un') === 0) {
	                    return 'n' + str;
	                }
	                return 'en ' + str;
	            },
	            past: 'hai %s',
	            s: 'uns segundos',
	            ss: '%d segundos',
	            m: 'un minuto',
	            mm: '%d minutos',
	            h: 'unha hora',
	            hh: '%d horas',
	            d: 'un día',
	            dd: '%d días',
	            M: 'un mes',
	            MM: '%d meses',
	            y: 'un ano',
	            yy: '%d anos',
	        },
	        dayOfMonthOrdinalParse: /\d{1,2}º/,
	        ordinal: '%dº',
	        week: {
	            dow: 1, // Monday is the first day of the week.
	            doy: 4, // The week that contains Jan 4th is the first week of the year.
	        },
	    });
	
	    return gl;
	
	})));


/***/ }),
/* 424 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Konkani Devanagari script [gom-deva]
	//! author : The Discoverer : https://github.com/WikiDiscoverer
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    function processRelativeTime(number, withoutSuffix, key, isFuture) {
	        var format = {
	            s: ['थोडया सॅकंडांनी', 'थोडे सॅकंड'],
	            ss: [number + ' सॅकंडांनी', number + ' सॅकंड'],
	            m: ['एका मिणटान', 'एक मिनूट'],
	            mm: [number + ' मिणटांनी', number + ' मिणटां'],
	            h: ['एका वरान', 'एक वर'],
	            hh: [number + ' वरांनी', number + ' वरां'],
	            d: ['एका दिसान', 'एक दीस'],
	            dd: [number + ' दिसांनी', number + ' दीस'],
	            M: ['एका म्हयन्यान', 'एक म्हयनो'],
	            MM: [number + ' म्हयन्यानी', number + ' म्हयने'],
	            y: ['एका वर्सान', 'एक वर्स'],
	            yy: [number + ' वर्सांनी', number + ' वर्सां'],
	        };
	        return isFuture ? format[key][0] : format[key][1];
	    }
	
	    var gomDeva = moment.defineLocale('gom-deva', {
	        months: {
	            standalone: 'जानेवारी_फेब्रुवारी_मार्च_एप्रील_मे_जून_जुलय_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर'.split(
	                '_'
	            ),
	            format: 'जानेवारीच्या_फेब्रुवारीच्या_मार्चाच्या_एप्रीलाच्या_मेयाच्या_जूनाच्या_जुलयाच्या_ऑगस्टाच्या_सप्टेंबराच्या_ऑक्टोबराच्या_नोव्हेंबराच्या_डिसेंबराच्या'.split(
	                '_'
	            ),
	            isFormat: /MMMM(\s)+D[oD]?/,
	        },
	        monthsShort: 'जाने._फेब्रु._मार्च_एप्री._मे_जून_जुल._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.'.split(
	            '_'
	        ),
	        monthsParseExact: true,
	        weekdays: 'आयतार_सोमार_मंगळार_बुधवार_बिरेस्तार_सुक्रार_शेनवार'.split('_'),
	        weekdaysShort: 'आयत._सोम._मंगळ._बुध._ब्रेस्त._सुक्र._शेन.'.split('_'),
	        weekdaysMin: 'आ_सो_मं_बु_ब्रे_सु_शे'.split('_'),
	        weekdaysParseExact: true,
	        longDateFormat: {
	            LT: 'A h:mm [वाजतां]',
	            LTS: 'A h:mm:ss [वाजतां]',
	            L: 'DD-MM-YYYY',
	            LL: 'D MMMM YYYY',
	            LLL: 'D MMMM YYYY A h:mm [वाजतां]',
	            LLLL: 'dddd, MMMM Do, YYYY, A h:mm [वाजतां]',
	            llll: 'ddd, D MMM YYYY, A h:mm [वाजतां]',
	        },
	        calendar: {
	            sameDay: '[आयज] LT',
	            nextDay: '[फाल्यां] LT',
	            nextWeek: '[फुडलो] dddd[,] LT',
	            lastDay: '[काल] LT',
	            lastWeek: '[फाटलो] dddd[,] LT',
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: '%s',
	            past: '%s आदीं',
	            s: processRelativeTime,
	            ss: processRelativeTime,
	            m: processRelativeTime,
	            mm: processRelativeTime,
	            h: processRelativeTime,
	            hh: processRelativeTime,
	            d: processRelativeTime,
	            dd: processRelativeTime,
	            M: processRelativeTime,
	            MM: processRelativeTime,
	            y: processRelativeTime,
	            yy: processRelativeTime,
	        },
	        dayOfMonthOrdinalParse: /\d{1,2}(वेर)/,
	        ordinal: function (number, period) {
	            switch (period) {
	                // the ordinal 'वेर' only applies to day of the month
	                case 'D':
	                    return number + 'वेर';
	                default:
	                case 'M':
	                case 'Q':
	                case 'DDD':
	                case 'd':
	                case 'w':
	                case 'W':
	                    return number;
	            }
	        },
	        week: {
	            dow: 1, // Monday is the first day of the week.
	            doy: 4, // The week that contains Jan 4th is the first week of the year.
	        },
	        meridiemParse: /राती|सकाळीं|दनपारां|सांजे/,
	        meridiemHour: function (hour, meridiem) {
	            if (hour === 12) {
	                hour = 0;
	            }
	            if (meridiem === 'राती') {
	                return hour < 4 ? hour : hour + 12;
	            } else if (meridiem === 'सकाळीं') {
	                return hour;
	            } else if (meridiem === 'दनपारां') {
	                return hour > 12 ? hour : hour + 12;
	            } else if (meridiem === 'सांजे') {
	                return hour + 12;
	            }
	        },
	        meridiem: function (hour, minute, isLower) {
	            if (hour < 4) {
	                return 'राती';
	            } else if (hour < 12) {
	                return 'सकाळीं';
	            } else if (hour < 16) {
	                return 'दनपारां';
	            } else if (hour < 20) {
	                return 'सांजे';
	            } else {
	                return 'राती';
	            }
	        },
	    });
	
	    return gomDeva;
	
	})));


/***/ }),
/* 425 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Konkani Latin script [gom-latn]
	//! author : The Discoverer : https://github.com/WikiDiscoverer
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    function processRelativeTime(number, withoutSuffix, key, isFuture) {
	        var format = {
	            s: ['thoddea sekondamni', 'thodde sekond'],
	            ss: [number + ' sekondamni', number + ' sekond'],
	            m: ['eka mintan', 'ek minut'],
	            mm: [number + ' mintamni', number + ' mintam'],
	            h: ['eka voran', 'ek vor'],
	            hh: [number + ' voramni', number + ' voram'],
	            d: ['eka disan', 'ek dis'],
	            dd: [number + ' disamni', number + ' dis'],
	            M: ['eka mhoinean', 'ek mhoino'],
	            MM: [number + ' mhoineamni', number + ' mhoine'],
	            y: ['eka vorsan', 'ek voros'],
	            yy: [number + ' vorsamni', number + ' vorsam'],
	        };
	        return isFuture ? format[key][0] : format[key][1];
	    }
	
	    var gomLatn = moment.defineLocale('gom-latn', {
	        months: {
	            standalone: 'Janer_Febrer_Mars_Abril_Mai_Jun_Julai_Agost_Setembr_Otubr_Novembr_Dezembr'.split(
	                '_'
	            ),
	            format: 'Janerachea_Febrerachea_Marsachea_Abrilachea_Maiachea_Junachea_Julaiachea_Agostachea_Setembrachea_Otubrachea_Novembrachea_Dezembrachea'.split(
	                '_'
	            ),
	            isFormat: /MMMM(\s)+D[oD]?/,
	        },
	        monthsShort: 'Jan._Feb._Mars_Abr._Mai_Jun_Jul._Ago._Set._Otu._Nov._Dez.'.split(
	            '_'
	        ),
	        monthsParseExact: true,
	        weekdays: "Aitar_Somar_Mongllar_Budhvar_Birestar_Sukrar_Son'var".split('_'),
	        weekdaysShort: 'Ait._Som._Mon._Bud._Bre._Suk._Son.'.split('_'),
	        weekdaysMin: 'Ai_Sm_Mo_Bu_Br_Su_Sn'.split('_'),
	        weekdaysParseExact: true,
	        longDateFormat: {
	            LT: 'A h:mm [vazta]',
	            LTS: 'A h:mm:ss [vazta]',
	            L: 'DD-MM-YYYY',
	            LL: 'D MMMM YYYY',
	            LLL: 'D MMMM YYYY A h:mm [vazta]',
	            LLLL: 'dddd, MMMM Do, YYYY, A h:mm [vazta]',
	            llll: 'ddd, D MMM YYYY, A h:mm [vazta]',
	        },
	        calendar: {
	            sameDay: '[Aiz] LT',
	            nextDay: '[Faleam] LT',
	            nextWeek: '[Fuddlo] dddd[,] LT',
	            lastDay: '[Kal] LT',
	            lastWeek: '[Fattlo] dddd[,] LT',
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: '%s',
	            past: '%s adim',
	            s: processRelativeTime,
	            ss: processRelativeTime,
	            m: processRelativeTime,
	            mm: processRelativeTime,
	            h: processRelativeTime,
	            hh: processRelativeTime,
	            d: processRelativeTime,
	            dd: processRelativeTime,
	            M: processRelativeTime,
	            MM: processRelativeTime,
	            y: processRelativeTime,
	            yy: processRelativeTime,
	        },
	        dayOfMonthOrdinalParse: /\d{1,2}(er)/,
	        ordinal: function (number, period) {
	            switch (period) {
	                // the ordinal 'er' only applies to day of the month
	                case 'D':
	                    return number + 'er';
	                default:
	                case 'M':
	                case 'Q':
	                case 'DDD':
	                case 'd':
	                case 'w':
	                case 'W':
	                    return number;
	            }
	        },
	        week: {
	            dow: 1, // Monday is the first day of the week.
	            doy: 4, // The week that contains Jan 4th is the first week of the year.
	        },
	        meridiemParse: /rati|sokallim|donparam|sanje/,
	        meridiemHour: function (hour, meridiem) {
	            if (hour === 12) {
	                hour = 0;
	            }
	            if (meridiem === 'rati') {
	                return hour < 4 ? hour : hour + 12;
	            } else if (meridiem === 'sokallim') {
	                return hour;
	            } else if (meridiem === 'donparam') {
	                return hour > 12 ? hour : hour + 12;
	            } else if (meridiem === 'sanje') {
	                return hour + 12;
	            }
	        },
	        meridiem: function (hour, minute, isLower) {
	            if (hour < 4) {
	                return 'rati';
	            } else if (hour < 12) {
	                return 'sokallim';
	            } else if (hour < 16) {
	                return 'donparam';
	            } else if (hour < 20) {
	                return 'sanje';
	            } else {
	                return 'rati';
	            }
	        },
	    });
	
	    return gomLatn;
	
	})));


/***/ }),
/* 426 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Gujarati [gu]
	//! author : Kaushik Thanki : https://github.com/Kaushik1987
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var symbolMap = {
	            '1': '૧',
	            '2': '૨',
	            '3': '૩',
	            '4': '૪',
	            '5': '૫',
	            '6': '૬',
	            '7': '૭',
	            '8': '૮',
	            '9': '૯',
	            '0': '૦',
	        },
	        numberMap = {
	            '૧': '1',
	            '૨': '2',
	            '૩': '3',
	            '૪': '4',
	            '૫': '5',
	            '૬': '6',
	            '૭': '7',
	            '૮': '8',
	            '૯': '9',
	            '૦': '0',
	        };
	
	    var gu = moment.defineLocale('gu', {
	        months: 'જાન્યુઆરી_ફેબ્રુઆરી_માર્ચ_એપ્રિલ_મે_જૂન_જુલાઈ_ઑગસ્ટ_સપ્ટેમ્બર_ઑક્ટ્બર_નવેમ્બર_ડિસેમ્બર'.split(
	            '_'
	        ),
	        monthsShort: 'જાન્યુ._ફેબ્રુ._માર્ચ_એપ્રિ._મે_જૂન_જુલા._ઑગ._સપ્ટે._ઑક્ટ્._નવે._ડિસે.'.split(
	            '_'
	        ),
	        monthsParseExact: true,
	        weekdays: 'રવિવાર_સોમવાર_મંગળવાર_બુધ્વાર_ગુરુવાર_શુક્રવાર_શનિવાર'.split(
	            '_'
	        ),
	        weekdaysShort: 'રવિ_સોમ_મંગળ_બુધ્_ગુરુ_શુક્ર_શનિ'.split('_'),
	        weekdaysMin: 'ર_સો_મં_બુ_ગુ_શુ_શ'.split('_'),
	        longDateFormat: {
	            LT: 'A h:mm વાગ્યે',
	            LTS: 'A h:mm:ss વાગ્યે',
	            L: 'DD/MM/YYYY',
	            LL: 'D MMMM YYYY',
	            LLL: 'D MMMM YYYY, A h:mm વાગ્યે',
	            LLLL: 'dddd, D MMMM YYYY, A h:mm વાગ્યે',
	        },
	        calendar: {
	            sameDay: '[આજ] LT',
	            nextDay: '[કાલે] LT',
	            nextWeek: 'dddd, LT',
	            lastDay: '[ગઇકાલે] LT',
	            lastWeek: '[પાછલા] dddd, LT',
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: '%s મા',
	            past: '%s પહેલા',
	            s: 'અમુક પળો',
	            ss: '%d સેકંડ',
	            m: 'એક મિનિટ',
	            mm: '%d મિનિટ',
	            h: 'એક કલાક',
	            hh: '%d કલાક',
	            d: 'એક દિવસ',
	            dd: '%d દિવસ',
	            M: 'એક મહિનો',
	            MM: '%d મહિનો',
	            y: 'એક વર્ષ',
	            yy: '%d વર્ષ',
	        },
	        preparse: function (string) {
	            return string.replace(/[૧૨૩૪૫૬૭૮૯૦]/g, function (match) {
	                return numberMap[match];
	            });
	        },
	        postformat: function (string) {
	            return string.replace(/\d/g, function (match) {
	                return symbolMap[match];
	            });
	        },
	        // Gujarati notation for meridiems are quite fuzzy in practice. While there exists
	        // a rigid notion of a 'Pahar' it is not used as rigidly in modern Gujarati.
	        meridiemParse: /રાત|બપોર|સવાર|સાંજ/,
	        meridiemHour: function (hour, meridiem) {
	            if (hour === 12) {
	                hour = 0;
	            }
	            if (meridiem === 'રાત') {
	                return hour < 4 ? hour : hour + 12;
	            } else if (meridiem === 'સવાર') {
	                return hour;
	            } else if (meridiem === 'બપોર') {
	                return hour >= 10 ? hour : hour + 12;
	            } else if (meridiem === 'સાંજ') {
	                return hour + 12;
	            }
	        },
	        meridiem: function (hour, minute, isLower) {
	            if (hour < 4) {
	                return 'રાત';
	            } else if (hour < 10) {
	                return 'સવાર';
	            } else if (hour < 17) {
	                return 'બપોર';
	            } else if (hour < 20) {
	                return 'સાંજ';
	            } else {
	                return 'રાત';
	            }
	        },
	        week: {
	            dow: 0, // Sunday is the first day of the week.
	            doy: 6, // The week that contains Jan 6th is the first week of the year.
	        },
	    });
	
	    return gu;
	
	})));


/***/ }),
/* 427 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Hebrew [he]
	//! author : Tomer Cohen : https://github.com/tomer
	//! author : Moshe Simantov : https://github.com/DevelopmentIL
	//! author : Tal Ater : https://github.com/TalAter
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var he = moment.defineLocale('he', {
	        months: 'ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר'.split(
	            '_'
	        ),
	        monthsShort: 'ינו׳_פבר׳_מרץ_אפר׳_מאי_יוני_יולי_אוג׳_ספט׳_אוק׳_נוב׳_דצמ׳'.split(
	            '_'
	        ),
	        weekdays: 'ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת'.split('_'),
	        weekdaysShort: 'א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳'.split('_'),
	        weekdaysMin: 'א_ב_ג_ד_ה_ו_ש'.split('_'),
	        longDateFormat: {
	            LT: 'HH:mm',
	            LTS: 'HH:mm:ss',
	            L: 'DD/MM/YYYY',
	            LL: 'D [ב]MMMM YYYY',
	            LLL: 'D [ב]MMMM YYYY HH:mm',
	            LLLL: 'dddd, D [ב]MMMM YYYY HH:mm',
	            l: 'D/M/YYYY',
	            ll: 'D MMM YYYY',
	            lll: 'D MMM YYYY HH:mm',
	            llll: 'ddd, D MMM YYYY HH:mm',
	        },
	        calendar: {
	            sameDay: '[היום ב־]LT',
	            nextDay: '[מחר ב־]LT',
	            nextWeek: 'dddd [בשעה] LT',
	            lastDay: '[אתמול ב־]LT',
	            lastWeek: '[ביום] dddd [האחרון בשעה] LT',
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: 'בעוד %s',
	            past: 'לפני %s',
	            s: 'מספר שניות',
	            ss: '%d שניות',
	            m: 'דקה',
	            mm: '%d דקות',
	            h: 'שעה',
	            hh: function (number) {
	                if (number === 2) {
	                    return 'שעתיים';
	                }
	                return number + ' שעות';
	            },
	            d: 'יום',
	            dd: function (number) {
	                if (number === 2) {
	                    return 'יומיים';
	                }
	                return number + ' ימים';
	            },
	            M: 'חודש',
	            MM: function (number) {
	                if (number === 2) {
	                    return 'חודשיים';
	                }
	                return number + ' חודשים';
	            },
	            y: 'שנה',
	            yy: function (number) {
	                if (number === 2) {
	                    return 'שנתיים';
	                } else if (number % 10 === 0 && number !== 10) {
	                    return number + ' שנה';
	                }
	                return number + ' שנים';
	            },
	        },
	        meridiemParse: /אחה"צ|לפנה"צ|אחרי הצהריים|לפני הצהריים|לפנות בוקר|בבוקר|בערב/i,
	        isPM: function (input) {
	            return /^(אחה"צ|אחרי הצהריים|בערב)$/.test(input);
	        },
	        meridiem: function (hour, minute, isLower) {
	            if (hour < 5) {
	                return 'לפנות בוקר';
	            } else if (hour < 10) {
	                return 'בבוקר';
	            } else if (hour < 12) {
	                return isLower ? 'לפנה"צ' : 'לפני הצהריים';
	            } else if (hour < 18) {
	                return isLower ? 'אחה"צ' : 'אחרי הצהריים';
	            } else {
	                return 'בערב';
	            }
	        },
	    });
	
	    return he;
	
	})));


/***/ }),
/* 428 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Hindi [hi]
	//! author : Mayank Singhal : https://github.com/mayanksinghal
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var symbolMap = {
	            '1': '१',
	            '2': '२',
	            '3': '३',
	            '4': '४',
	            '5': '५',
	            '6': '६',
	            '7': '७',
	            '8': '८',
	            '9': '९',
	            '0': '०',
	        },
	        numberMap = {
	            '१': '1',
	            '२': '2',
	            '३': '3',
	            '४': '4',
	            '५': '5',
	            '६': '6',
	            '७': '7',
	            '८': '8',
	            '९': '9',
	            '०': '0',
	        };
	
	    var hi = moment.defineLocale('hi', {
	        months: 'जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर'.split(
	            '_'
	        ),
	        monthsShort: 'जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.'.split(
	            '_'
	        ),
	        monthsParseExact: true,
	        weekdays: 'रविवार_सोमवार_मंगलवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'),
	        weekdaysShort: 'रवि_सोम_मंगल_बुध_गुरू_शुक्र_शनि'.split('_'),
	        weekdaysMin: 'र_सो_मं_बु_गु_शु_श'.split('_'),
	        longDateFormat: {
	            LT: 'A h:mm बजे',
	            LTS: 'A h:mm:ss बजे',
	            L: 'DD/MM/YYYY',
	            LL: 'D MMMM YYYY',
	            LLL: 'D MMMM YYYY, A h:mm बजे',
	            LLLL: 'dddd, D MMMM YYYY, A h:mm बजे',
	        },
	        calendar: {
	            sameDay: '[आज] LT',
	            nextDay: '[कल] LT',
	            nextWeek: 'dddd, LT',
	            lastDay: '[कल] LT',
	            lastWeek: '[पिछले] dddd, LT',
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: '%s में',
	            past: '%s पहले',
	            s: 'कुछ ही क्षण',
	            ss: '%d सेकंड',
	            m: 'एक मिनट',
	            mm: '%d मिनट',
	            h: 'एक घंटा',
	            hh: '%d घंटे',
	            d: 'एक दिन',
	            dd: '%d दिन',
	            M: 'एक महीने',
	            MM: '%d महीने',
	            y: 'एक वर्ष',
	            yy: '%d वर्ष',
	        },
	        preparse: function (string) {
	            return string.replace(/[१२३४५६७८९०]/g, function (match) {
	                return numberMap[match];
	            });
	        },
	        postformat: function (string) {
	            return string.replace(/\d/g, function (match) {
	                return symbolMap[match];
	            });
	        },
	        // Hindi notation for meridiems are quite fuzzy in practice. While there exists
	        // a rigid notion of a 'Pahar' it is not used as rigidly in modern Hindi.
	        meridiemParse: /रात|सुबह|दोपहर|शाम/,
	        meridiemHour: function (hour, meridiem) {
	            if (hour === 12) {
	                hour = 0;
	            }
	            if (meridiem === 'रात') {
	                return hour < 4 ? hour : hour + 12;
	            } else if (meridiem === 'सुबह') {
	                return hour;
	            } else if (meridiem === 'दोपहर') {
	                return hour >= 10 ? hour : hour + 12;
	            } else if (meridiem === 'शाम') {
	                return hour + 12;
	            }
	        },
	        meridiem: function (hour, minute, isLower) {
	            if (hour < 4) {
	                return 'रात';
	            } else if (hour < 10) {
	                return 'सुबह';
	            } else if (hour < 17) {
	                return 'दोपहर';
	            } else if (hour < 20) {
	                return 'शाम';
	            } else {
	                return 'रात';
	            }
	        },
	        week: {
	            dow: 0, // Sunday is the first day of the week.
	            doy: 6, // The week that contains Jan 6th is the first week of the year.
	        },
	    });
	
	    return hi;
	
	})));


/***/ }),
/* 429 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Croatian [hr]
	//! author : Bojan Marković : https://github.com/bmarkovic
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    function translate(number, withoutSuffix, key) {
	        var result = number + ' ';
	        switch (key) {
	            case 'ss':
	                if (number === 1) {
	                    result += 'sekunda';
	                } else if (number === 2 || number === 3 || number === 4) {
	                    result += 'sekunde';
	                } else {
	                    result += 'sekundi';
	                }
	                return result;
	            case 'm':
	                return withoutSuffix ? 'jedna minuta' : 'jedne minute';
	            case 'mm':
	                if (number === 1) {
	                    result += 'minuta';
	                } else if (number === 2 || number === 3 || number === 4) {
	                    result += 'minute';
	                } else {
	                    result += 'minuta';
	                }
	                return result;
	            case 'h':
	                return withoutSuffix ? 'jedan sat' : 'jednog sata';
	            case 'hh':
	                if (number === 1) {
	                    result += 'sat';
	                } else if (number === 2 || number === 3 || number === 4) {
	                    result += 'sata';
	                } else {
	                    result += 'sati';
	                }
	                return result;
	            case 'dd':
	                if (number === 1) {
	                    result += 'dan';
	                } else {
	                    result += 'dana';
	                }
	                return result;
	            case 'MM':
	                if (number === 1) {
	                    result += 'mjesec';
	                } else if (number === 2 || number === 3 || number === 4) {
	                    result += 'mjeseca';
	                } else {
	                    result += 'mjeseci';
	                }
	                return result;
	            case 'yy':
	                if (number === 1) {
	                    result += 'godina';
	                } else if (number === 2 || number === 3 || number === 4) {
	                    result += 'godine';
	                } else {
	                    result += 'godina';
	                }
	                return result;
	        }
	    }
	
	    var hr = moment.defineLocale('hr', {
	        months: {
	            format: 'siječnja_veljače_ožujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca'.split(
	                '_'
	            ),
	            standalone: 'siječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac'.split(
	                '_'
	            ),
	        },
	        monthsShort: 'sij._velj._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.'.split(
	            '_'
	        ),
	        monthsParseExact: true,
	        weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split(
	            '_'
	        ),
	        weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),
	        weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),
	        weekdaysParseExact: true,
	        longDateFormat: {
	            LT: 'H:mm',
	            LTS: 'H:mm:ss',
	            L: 'DD.MM.YYYY',
	            LL: 'Do MMMM YYYY',
	            LLL: 'Do MMMM YYYY H:mm',
	            LLLL: 'dddd, Do MMMM YYYY H:mm',
	        },
	        calendar: {
	            sameDay: '[danas u] LT',
	            nextDay: '[sutra u] LT',
	            nextWeek: function () {
	                switch (this.day()) {
	                    case 0:
	                        return '[u] [nedjelju] [u] LT';
	                    case 3:
	                        return '[u] [srijedu] [u] LT';
	                    case 6:
	                        return '[u] [subotu] [u] LT';
	                    case 1:
	                    case 2:
	                    case 4:
	                    case 5:
	                        return '[u] dddd [u] LT';
	                }
	            },
	            lastDay: '[jučer u] LT',
	            lastWeek: function () {
	                switch (this.day()) {
	                    case 0:
	                        return '[prošlu] [nedjelju] [u] LT';
	                    case 3:
	                        return '[prošlu] [srijedu] [u] LT';
	                    case 6:
	                        return '[prošle] [subote] [u] LT';
	                    case 1:
	                    case 2:
	                    case 4:
	                    case 5:
	                        return '[prošli] dddd [u] LT';
	                }
	            },
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: 'za %s',
	            past: 'prije %s',
	            s: 'par sekundi',
	            ss: translate,
	            m: translate,
	            mm: translate,
	            h: translate,
	            hh: translate,
	            d: 'dan',
	            dd: translate,
	            M: 'mjesec',
	            MM: translate,
	            y: 'godinu',
	            yy: translate,
	        },
	        dayOfMonthOrdinalParse: /\d{1,2}\./,
	        ordinal: '%d.',
	        week: {
	            dow: 1, // Monday is the first day of the week.
	            doy: 7, // The week that contains Jan 7th is the first week of the year.
	        },
	    });
	
	    return hr;
	
	})));


/***/ }),
/* 430 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Hungarian [hu]
	//! author : Adam Brunner : https://github.com/adambrunner
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var weekEndings = 'vasárnap hétfőn kedden szerdán csütörtökön pénteken szombaton'.split(
	        ' '
	    );
	    function translate(number, withoutSuffix, key, isFuture) {
	        var num = number;
	        switch (key) {
	            case 's':
	                return isFuture || withoutSuffix
	                    ? 'néhány másodperc'
	                    : 'néhány másodperce';
	            case 'ss':
	                return num + (isFuture || withoutSuffix)
	                    ? ' másodperc'
	                    : ' másodperce';
	            case 'm':
	                return 'egy' + (isFuture || withoutSuffix ? ' perc' : ' perce');
	            case 'mm':
	                return num + (isFuture || withoutSuffix ? ' perc' : ' perce');
	            case 'h':
	                return 'egy' + (isFuture || withoutSuffix ? ' óra' : ' órája');
	            case 'hh':
	                return num + (isFuture || withoutSuffix ? ' óra' : ' órája');
	            case 'd':
	                return 'egy' + (isFuture || withoutSuffix ? ' nap' : ' napja');
	            case 'dd':
	                return num + (isFuture || withoutSuffix ? ' nap' : ' napja');
	            case 'M':
	                return 'egy' + (isFuture || withoutSuffix ? ' hónap' : ' hónapja');
	            case 'MM':
	                return num + (isFuture || withoutSuffix ? ' hónap' : ' hónapja');
	            case 'y':
	                return 'egy' + (isFuture || withoutSuffix ? ' év' : ' éve');
	            case 'yy':
	                return num + (isFuture || withoutSuffix ? ' év' : ' éve');
	        }
	        return '';
	    }
	    function week(isFuture) {
	        return (
	            (isFuture ? '' : '[múlt] ') +
	            '[' +
	            weekEndings[this.day()] +
	            '] LT[-kor]'
	        );
	    }
	
	    var hu = moment.defineLocale('hu', {
	        months: 'január_február_március_április_május_június_július_augusztus_szeptember_október_november_december'.split(
	            '_'
	        ),
	        monthsShort: 'jan_feb_márc_ápr_máj_jún_júl_aug_szept_okt_nov_dec'.split(
	            '_'
	        ),
	        weekdays: 'vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat'.split('_'),
	        weekdaysShort: 'vas_hét_kedd_sze_csüt_pén_szo'.split('_'),
	        weekdaysMin: 'v_h_k_sze_cs_p_szo'.split('_'),
	        longDateFormat: {
	            LT: 'H:mm',
	            LTS: 'H:mm:ss',
	            L: 'YYYY.MM.DD.',
	            LL: 'YYYY. MMMM D.',
	            LLL: 'YYYY. MMMM D. H:mm',
	            LLLL: 'YYYY. MMMM D., dddd H:mm',
	        },
	        meridiemParse: /de|du/i,
	        isPM: function (input) {
	            return input.charAt(1).toLowerCase() === 'u';
	        },
	        meridiem: function (hours, minutes, isLower) {
	            if (hours < 12) {
	                return isLower === true ? 'de' : 'DE';
	            } else {
	                return isLower === true ? 'du' : 'DU';
	            }
	        },
	        calendar: {
	            sameDay: '[ma] LT[-kor]',
	            nextDay: '[holnap] LT[-kor]',
	            nextWeek: function () {
	                return week.call(this, true);
	            },
	            lastDay: '[tegnap] LT[-kor]',
	            lastWeek: function () {
	                return week.call(this, false);
	            },
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: '%s múlva',
	            past: '%s',
	            s: translate,
	            ss: translate,
	            m: translate,
	            mm: translate,
	            h: translate,
	            hh: translate,
	            d: translate,
	            dd: translate,
	            M: translate,
	            MM: translate,
	            y: translate,
	            yy: translate,
	        },
	        dayOfMonthOrdinalParse: /\d{1,2}\./,
	        ordinal: '%d.',
	        week: {
	            dow: 1, // Monday is the first day of the week.
	            doy: 4, // The week that contains Jan 4th is the first week of the year.
	        },
	    });
	
	    return hu;
	
	})));


/***/ }),
/* 431 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Armenian [hy-am]
	//! author : Armendarabyan : https://github.com/armendarabyan
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var hyAm = moment.defineLocale('hy-am', {
	        months: {
	            format: 'հունվարի_փետրվարի_մարտի_ապրիլի_մայիսի_հունիսի_հուլիսի_օգոստոսի_սեպտեմբերի_հոկտեմբերի_նոյեմբերի_դեկտեմբերի'.split(
	                '_'
	            ),
	            standalone: 'հունվար_փետրվար_մարտ_ապրիլ_մայիս_հունիս_հուլիս_օգոստոս_սեպտեմբեր_հոկտեմբեր_նոյեմբեր_դեկտեմբեր'.split(
	                '_'
	            ),
	        },
	        monthsShort: 'հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ'.split('_'),
	        weekdays: 'կիրակի_երկուշաբթի_երեքշաբթի_չորեքշաբթի_հինգշաբթի_ուրբաթ_շաբաթ'.split(
	            '_'
	        ),
	        weekdaysShort: 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'),
	        weekdaysMin: 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'),
	        longDateFormat: {
	            LT: 'HH:mm',
	            LTS: 'HH:mm:ss',
	            L: 'DD.MM.YYYY',
	            LL: 'D MMMM YYYY թ.',
	            LLL: 'D MMMM YYYY թ., HH:mm',
	            LLLL: 'dddd, D MMMM YYYY թ., HH:mm',
	        },
	        calendar: {
	            sameDay: '[այսօր] LT',
	            nextDay: '[վաղը] LT',
	            lastDay: '[երեկ] LT',
	            nextWeek: function () {
	                return 'dddd [օրը ժամը] LT';
	            },
	            lastWeek: function () {
	                return '[անցած] dddd [օրը ժամը] LT';
	            },
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: '%s հետո',
	            past: '%s առաջ',
	            s: 'մի քանի վայրկյան',
	            ss: '%d վայրկյան',
	            m: 'րոպե',
	            mm: '%d րոպե',
	            h: 'ժամ',
	            hh: '%d ժամ',
	            d: 'օր',
	            dd: '%d օր',
	            M: 'ամիս',
	            MM: '%d ամիս',
	            y: 'տարի',
	            yy: '%d տարի',
	        },
	        meridiemParse: /գիշերվա|առավոտվա|ցերեկվա|երեկոյան/,
	        isPM: function (input) {
	            return /^(ցերեկվա|երեկոյան)$/.test(input);
	        },
	        meridiem: function (hour) {
	            if (hour < 4) {
	                return 'գիշերվա';
	            } else if (hour < 12) {
	                return 'առավոտվա';
	            } else if (hour < 17) {
	                return 'ցերեկվա';
	            } else {
	                return 'երեկոյան';
	            }
	        },
	        dayOfMonthOrdinalParse: /\d{1,2}|\d{1,2}-(ին|րդ)/,
	        ordinal: function (number, period) {
	            switch (period) {
	                case 'DDD':
	                case 'w':
	                case 'W':
	                case 'DDDo':
	                    if (number === 1) {
	                        return number + '-ին';
	                    }
	                    return number + '-րդ';
	                default:
	                    return number;
	            }
	        },
	        week: {
	            dow: 1, // Monday is the first day of the week.
	            doy: 7, // The week that contains Jan 7th is the first week of the year.
	        },
	    });
	
	    return hyAm;
	
	})));


/***/ }),
/* 432 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Indonesian [id]
	//! author : Mohammad Satrio Utomo : https://github.com/tyok
	//! reference: http://id.wikisource.org/wiki/Pedoman_Umum_Ejaan_Bahasa_Indonesia_yang_Disempurnakan
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var id = moment.defineLocale('id', {
	        months: 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember'.split(
	            '_'
	        ),
	        monthsShort: 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Agt_Sep_Okt_Nov_Des'.split('_'),
	        weekdays: 'Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu'.split('_'),
	        weekdaysShort: 'Min_Sen_Sel_Rab_Kam_Jum_Sab'.split('_'),
	        weekdaysMin: 'Mg_Sn_Sl_Rb_Km_Jm_Sb'.split('_'),
	        longDateFormat: {
	            LT: 'HH.mm',
	            LTS: 'HH.mm.ss',
	            L: 'DD/MM/YYYY',
	            LL: 'D MMMM YYYY',
	            LLL: 'D MMMM YYYY [pukul] HH.mm',
	            LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm',
	        },
	        meridiemParse: /pagi|siang|sore|malam/,
	        meridiemHour: function (hour, meridiem) {
	            if (hour === 12) {
	                hour = 0;
	            }
	            if (meridiem === 'pagi') {
	                return hour;
	            } else if (meridiem === 'siang') {
	                return hour >= 11 ? hour : hour + 12;
	            } else if (meridiem === 'sore' || meridiem === 'malam') {
	                return hour + 12;
	            }
	        },
	        meridiem: function (hours, minutes, isLower) {
	            if (hours < 11) {
	                return 'pagi';
	            } else if (hours < 15) {
	                return 'siang';
	            } else if (hours < 19) {
	                return 'sore';
	            } else {
	                return 'malam';
	            }
	        },
	        calendar: {
	            sameDay: '[Hari ini pukul] LT',
	            nextDay: '[Besok pukul] LT',
	            nextWeek: 'dddd [pukul] LT',
	            lastDay: '[Kemarin pukul] LT',
	            lastWeek: 'dddd [lalu pukul] LT',
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: 'dalam %s',
	            past: '%s yang lalu',
	            s: 'beberapa detik',
	            ss: '%d detik',
	            m: 'semenit',
	            mm: '%d menit',
	            h: 'sejam',
	            hh: '%d jam',
	            d: 'sehari',
	            dd: '%d hari',
	            M: 'sebulan',
	            MM: '%d bulan',
	            y: 'setahun',
	            yy: '%d tahun',
	        },
	        week: {
	            dow: 0, // Sunday is the first day of the week.
	            doy: 6, // The week that contains Jan 6th is the first week of the year.
	        },
	    });
	
	    return id;
	
	})));


/***/ }),
/* 433 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Icelandic [is]
	//! author : Hinrik Örn Sigurðsson : https://github.com/hinrik
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    function plural(n) {
	        if (n % 100 === 11) {
	            return true;
	        } else if (n % 10 === 1) {
	            return false;
	        }
	        return true;
	    }
	    function translate(number, withoutSuffix, key, isFuture) {
	        var result = number + ' ';
	        switch (key) {
	            case 's':
	                return withoutSuffix || isFuture
	                    ? 'nokkrar sekúndur'
	                    : 'nokkrum sekúndum';
	            case 'ss':
	                if (plural(number)) {
	                    return (
	                        result +
	                        (withoutSuffix || isFuture ? 'sekúndur' : 'sekúndum')
	                    );
	                }
	                return result + 'sekúnda';
	            case 'm':
	                return withoutSuffix ? 'mínúta' : 'mínútu';
	            case 'mm':
	                if (plural(number)) {
	                    return (
	                        result + (withoutSuffix || isFuture ? 'mínútur' : 'mínútum')
	                    );
	                } else if (withoutSuffix) {
	                    return result + 'mínúta';
	                }
	                return result + 'mínútu';
	            case 'hh':
	                if (plural(number)) {
	                    return (
	                        result +
	                        (withoutSuffix || isFuture
	                            ? 'klukkustundir'
	                            : 'klukkustundum')
	                    );
	                }
	                return result + 'klukkustund';
	            case 'd':
	                if (withoutSuffix) {
	                    return 'dagur';
	                }
	                return isFuture ? 'dag' : 'degi';
	            case 'dd':
	                if (plural(number)) {
	                    if (withoutSuffix) {
	                        return result + 'dagar';
	                    }
	                    return result + (isFuture ? 'daga' : 'dögum');
	                } else if (withoutSuffix) {
	                    return result + 'dagur';
	                }
	                return result + (isFuture ? 'dag' : 'degi');
	            case 'M':
	                if (withoutSuffix) {
	                    return 'mánuður';
	                }
	                return isFuture ? 'mánuð' : 'mánuði';
	            case 'MM':
	                if (plural(number)) {
	                    if (withoutSuffix) {
	                        return result + 'mánuðir';
	                    }
	                    return result + (isFuture ? 'mánuði' : 'mánuðum');
	                } else if (withoutSuffix) {
	                    return result + 'mánuður';
	                }
	                return result + (isFuture ? 'mánuð' : 'mánuði');
	            case 'y':
	                return withoutSuffix || isFuture ? 'ár' : 'ári';
	            case 'yy':
	                if (plural(number)) {
	                    return result + (withoutSuffix || isFuture ? 'ár' : 'árum');
	                }
	                return result + (withoutSuffix || isFuture ? 'ár' : 'ári');
	        }
	    }
	
	    var is = moment.defineLocale('is', {
	        months: 'janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember'.split(
	            '_'
	        ),
	        monthsShort: 'jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des'.split('_'),
	        weekdays: 'sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur'.split(
	            '_'
	        ),
	        weekdaysShort: 'sun_mán_þri_mið_fim_fös_lau'.split('_'),
	        weekdaysMin: 'Su_Má_Þr_Mi_Fi_Fö_La'.split('_'),
	        longDateFormat: {
	            LT: 'H:mm',
	            LTS: 'H:mm:ss',
	            L: 'DD.MM.YYYY',
	            LL: 'D. MMMM YYYY',
	            LLL: 'D. MMMM YYYY [kl.] H:mm',
	            LLLL: 'dddd, D. MMMM YYYY [kl.] H:mm',
	        },
	        calendar: {
	            sameDay: '[í dag kl.] LT',
	            nextDay: '[á morgun kl.] LT',
	            nextWeek: 'dddd [kl.] LT',
	            lastDay: '[í gær kl.] LT',
	            lastWeek: '[síðasta] dddd [kl.] LT',
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: 'eftir %s',
	            past: 'fyrir %s síðan',
	            s: translate,
	            ss: translate,
	            m: translate,
	            mm: translate,
	            h: 'klukkustund',
	            hh: translate,
	            d: translate,
	            dd: translate,
	            M: translate,
	            MM: translate,
	            y: translate,
	            yy: translate,
	        },
	        dayOfMonthOrdinalParse: /\d{1,2}\./,
	        ordinal: '%d.',
	        week: {
	            dow: 1, // Monday is the first day of the week.
	            doy: 4, // The week that contains Jan 4th is the first week of the year.
	        },
	    });
	
	    return is;
	
	})));


/***/ }),
/* 434 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Italian (Switzerland) [it-ch]
	//! author : xfh : https://github.com/xfh
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var itCh = moment.defineLocale('it-ch', {
	        months: 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split(
	            '_'
	        ),
	        monthsShort: 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'),
	        weekdays: 'domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato'.split(
	            '_'
	        ),
	        weekdaysShort: 'dom_lun_mar_mer_gio_ven_sab'.split('_'),
	        weekdaysMin: 'do_lu_ma_me_gi_ve_sa'.split('_'),
	        longDateFormat: {
	            LT: 'HH:mm',
	            LTS: 'HH:mm:ss',
	            L: 'DD.MM.YYYY',
	            LL: 'D MMMM YYYY',
	            LLL: 'D MMMM YYYY HH:mm',
	            LLLL: 'dddd D MMMM YYYY HH:mm',
	        },
	        calendar: {
	            sameDay: '[Oggi alle] LT',
	            nextDay: '[Domani alle] LT',
	            nextWeek: 'dddd [alle] LT',
	            lastDay: '[Ieri alle] LT',
	            lastWeek: function () {
	                switch (this.day()) {
	                    case 0:
	                        return '[la scorsa] dddd [alle] LT';
	                    default:
	                        return '[lo scorso] dddd [alle] LT';
	                }
	            },
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: function (s) {
	                return (/^[0-9].+$/.test(s) ? 'tra' : 'in') + ' ' + s;
	            },
	            past: '%s fa',
	            s: 'alcuni secondi',
	            ss: '%d secondi',
	            m: 'un minuto',
	            mm: '%d minuti',
	            h: "un'ora",
	            hh: '%d ore',
	            d: 'un giorno',
	            dd: '%d giorni',
	            M: 'un mese',
	            MM: '%d mesi',
	            y: 'un anno',
	            yy: '%d anni',
	        },
	        dayOfMonthOrdinalParse: /\d{1,2}º/,
	        ordinal: '%dº',
	        week: {
	            dow: 1, // Monday is the first day of the week.
	            doy: 4, // The week that contains Jan 4th is the first week of the year.
	        },
	    });
	
	    return itCh;
	
	})));


/***/ }),
/* 435 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Italian [it]
	//! author : Lorenzo : https://github.com/aliem
	//! author: Mattia Larentis: https://github.com/nostalgiaz
	//! author: Marco : https://github.com/Manfre98
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var it = moment.defineLocale('it', {
	        months: 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split(
	            '_'
	        ),
	        monthsShort: 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'),
	        weekdays: 'domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato'.split(
	            '_'
	        ),
	        weekdaysShort: 'dom_lun_mar_mer_gio_ven_sab'.split('_'),
	        weekdaysMin: 'do_lu_ma_me_gi_ve_sa'.split('_'),
	        longDateFormat: {
	            LT: 'HH:mm',
	            LTS: 'HH:mm:ss',
	            L: 'DD/MM/YYYY',
	            LL: 'D MMMM YYYY',
	            LLL: 'D MMMM YYYY HH:mm',
	            LLLL: 'dddd D MMMM YYYY HH:mm',
	        },
	        calendar: {
	            sameDay: function () {
	                return (
	                    '[Oggi a' +
	                    (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : "ll'") +
	                    ']LT'
	                );
	            },
	            nextDay: function () {
	                return (
	                    '[Domani a' +
	                    (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : "ll'") +
	                    ']LT'
	                );
	            },
	            nextWeek: function () {
	                return (
	                    'dddd [a' +
	                    (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : "ll'") +
	                    ']LT'
	                );
	            },
	            lastDay: function () {
	                return (
	                    '[Ieri a' +
	                    (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : "ll'") +
	                    ']LT'
	                );
	            },
	            lastWeek: function () {
	                switch (this.day()) {
	                    case 0:
	                        return (
	                            '[La scorsa] dddd [a' +
	                            (this.hours() > 1
	                                ? 'lle '
	                                : this.hours() === 0
	                                ? ' '
	                                : "ll'") +
	                            ']LT'
	                        );
	                    default:
	                        return (
	                            '[Lo scorso] dddd [a' +
	                            (this.hours() > 1
	                                ? 'lle '
	                                : this.hours() === 0
	                                ? ' '
	                                : "ll'") +
	                            ']LT'
	                        );
	                }
	            },
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: 'tra %s',
	            past: '%s fa',
	            s: 'alcuni secondi',
	            ss: '%d secondi',
	            m: 'un minuto',
	            mm: '%d minuti',
	            h: "un'ora",
	            hh: '%d ore',
	            d: 'un giorno',
	            dd: '%d giorni',
	            M: 'un mese',
	            MM: '%d mesi',
	            y: 'un anno',
	            yy: '%d anni',
	        },
	        dayOfMonthOrdinalParse: /\d{1,2}º/,
	        ordinal: '%dº',
	        week: {
	            dow: 1, // Monday is the first day of the week.
	            doy: 4, // The week that contains Jan 4th is the first week of the year.
	        },
	    });
	
	    return it;
	
	})));


/***/ }),
/* 436 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Japanese [ja]
	//! author : LI Long : https://github.com/baryon
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var ja = moment.defineLocale('ja', {
	        eras: [
	            {
	                since: '2019-05-01',
	                offset: 1,
	                name: '令和',
	                narrow: '㋿',
	                abbr: 'R',
	            },
	            {
	                since: '1989-01-08',
	                until: '2019-04-30',
	                offset: 1,
	                name: '平成',
	                narrow: '㍻',
	                abbr: 'H',
	            },
	            {
	                since: '1926-12-25',
	                until: '1989-01-07',
	                offset: 1,
	                name: '昭和',
	                narrow: '㍼',
	                abbr: 'S',
	            },
	            {
	                since: '1912-07-30',
	                until: '1926-12-24',
	                offset: 1,
	                name: '大正',
	                narrow: '㍽',
	                abbr: 'T',
	            },
	            {
	                since: '1873-01-01',
	                until: '1912-07-29',
	                offset: 6,
	                name: '明治',
	                narrow: '㍾',
	                abbr: 'M',
	            },
	            {
	                since: '0001-01-01',
	                until: '1873-12-31',
	                offset: 1,
	                name: '西暦',
	                narrow: 'AD',
	                abbr: 'AD',
	            },
	            {
	                since: '0000-12-31',
	                until: -Infinity,
	                offset: 1,
	                name: '紀元前',
	                narrow: 'BC',
	                abbr: 'BC',
	            },
	        ],
	        eraYearOrdinalRegex: /(元|\d+)年/,
	        eraYearOrdinalParse: function (input, match) {
	            return match[1] === '元' ? 1 : parseInt(match[1] || input, 10);
	        },
	        months: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),
	        monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split(
	            '_'
	        ),
	        weekdays: '日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日'.split('_'),
	        weekdaysShort: '日_月_火_水_木_金_土'.split('_'),
	        weekdaysMin: '日_月_火_水_木_金_土'.split('_'),
	        longDateFormat: {
	            LT: 'HH:mm',
	            LTS: 'HH:mm:ss',
	            L: 'YYYY/MM/DD',
	            LL: 'YYYY年M月D日',
	            LLL: 'YYYY年M月D日 HH:mm',
	            LLLL: 'YYYY年M月D日 dddd HH:mm',
	            l: 'YYYY/MM/DD',
	            ll: 'YYYY年M月D日',
	            lll: 'YYYY年M月D日 HH:mm',
	            llll: 'YYYY年M月D日(ddd) HH:mm',
	        },
	        meridiemParse: /午前|午後/i,
	        isPM: function (input) {
	            return input === '午後';
	        },
	        meridiem: function (hour, minute, isLower) {
	            if (hour < 12) {
	                return '午前';
	            } else {
	                return '午後';
	            }
	        },
	        calendar: {
	            sameDay: '[今日] LT',
	            nextDay: '[明日] LT',
	            nextWeek: function (now) {
	                if (now.week() !== this.week()) {
	                    return '[来週]dddd LT';
	                } else {
	                    return 'dddd LT';
	                }
	            },
	            lastDay: '[昨日] LT',
	            lastWeek: function (now) {
	                if (this.week() !== now.week()) {
	                    return '[先週]dddd LT';
	                } else {
	                    return 'dddd LT';
	                }
	            },
	            sameElse: 'L',
	        },
	        dayOfMonthOrdinalParse: /\d{1,2}日/,
	        ordinal: function (number, period) {
	            switch (period) {
	                case 'y':
	                    return number === 1 ? '元年' : number + '年';
	                case 'd':
	                case 'D':
	                case 'DDD':
	                    return number + '日';
	                default:
	                    return number;
	            }
	        },
	        relativeTime: {
	            future: '%s後',
	            past: '%s前',
	            s: '数秒',
	            ss: '%d秒',
	            m: '1分',
	            mm: '%d分',
	            h: '1時間',
	            hh: '%d時間',
	            d: '1日',
	            dd: '%d日',
	            M: '1ヶ月',
	            MM: '%dヶ月',
	            y: '1年',
	            yy: '%d年',
	        },
	    });
	
	    return ja;
	
	})));


/***/ }),
/* 437 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Javanese [jv]
	//! author : Rony Lantip : https://github.com/lantip
	//! reference: http://jv.wikipedia.org/wiki/Basa_Jawa
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var jv = moment.defineLocale('jv', {
	        months: 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_Nopember_Desember'.split(
	            '_'
	        ),
	        monthsShort: 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nop_Des'.split('_'),
	        weekdays: 'Minggu_Senen_Seloso_Rebu_Kemis_Jemuwah_Septu'.split('_'),
	        weekdaysShort: 'Min_Sen_Sel_Reb_Kem_Jem_Sep'.split('_'),
	        weekdaysMin: 'Mg_Sn_Sl_Rb_Km_Jm_Sp'.split('_'),
	        longDateFormat: {
	            LT: 'HH.mm',
	            LTS: 'HH.mm.ss',
	            L: 'DD/MM/YYYY',
	            LL: 'D MMMM YYYY',
	            LLL: 'D MMMM YYYY [pukul] HH.mm',
	            LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm',
	        },
	        meridiemParse: /enjing|siyang|sonten|ndalu/,
	        meridiemHour: function (hour, meridiem) {
	            if (hour === 12) {
	                hour = 0;
	            }
	            if (meridiem === 'enjing') {
	                return hour;
	            } else if (meridiem === 'siyang') {
	                return hour >= 11 ? hour : hour + 12;
	            } else if (meridiem === 'sonten' || meridiem === 'ndalu') {
	                return hour + 12;
	            }
	        },
	        meridiem: function (hours, minutes, isLower) {
	            if (hours < 11) {
	                return 'enjing';
	            } else if (hours < 15) {
	                return 'siyang';
	            } else if (hours < 19) {
	                return 'sonten';
	            } else {
	                return 'ndalu';
	            }
	        },
	        calendar: {
	            sameDay: '[Dinten puniko pukul] LT',
	            nextDay: '[Mbenjang pukul] LT',
	            nextWeek: 'dddd [pukul] LT',
	            lastDay: '[Kala wingi pukul] LT',
	            lastWeek: 'dddd [kepengker pukul] LT',
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: 'wonten ing %s',
	            past: '%s ingkang kepengker',
	            s: 'sawetawis detik',
	            ss: '%d detik',
	            m: 'setunggal menit',
	            mm: '%d menit',
	            h: 'setunggal jam',
	            hh: '%d jam',
	            d: 'sedinten',
	            dd: '%d dinten',
	            M: 'sewulan',
	            MM: '%d wulan',
	            y: 'setaun',
	            yy: '%d taun',
	        },
	        week: {
	            dow: 1, // Monday is the first day of the week.
	            doy: 7, // The week that contains Jan 7th is the first week of the year.
	        },
	    });
	
	    return jv;
	
	})));


/***/ }),
/* 438 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Georgian [ka]
	//! author : Irakli Janiashvili : https://github.com/IrakliJani
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var ka = moment.defineLocale('ka', {
	        months: 'იანვარი_თებერვალი_მარტი_აპრილი_მაისი_ივნისი_ივლისი_აგვისტო_სექტემბერი_ოქტომბერი_ნოემბერი_დეკემბერი'.split(
	            '_'
	        ),
	        monthsShort: 'იან_თებ_მარ_აპრ_მაი_ივნ_ივლ_აგვ_სექ_ოქტ_ნოე_დეკ'.split('_'),
	        weekdays: {
	            standalone: 'კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი'.split(
	                '_'
	            ),
	            format: 'კვირას_ორშაბათს_სამშაბათს_ოთხშაბათს_ხუთშაბათს_პარასკევს_შაბათს'.split(
	                '_'
	            ),
	            isFormat: /(წინა|შემდეგ)/,
	        },
	        weekdaysShort: 'კვი_ორშ_სამ_ოთხ_ხუთ_პარ_შაბ'.split('_'),
	        weekdaysMin: 'კვ_ორ_სა_ოთ_ხუ_პა_შა'.split('_'),
	        longDateFormat: {
	            LT: 'HH:mm',
	            LTS: 'HH:mm:ss',
	            L: 'DD/MM/YYYY',
	            LL: 'D MMMM YYYY',
	            LLL: 'D MMMM YYYY HH:mm',
	            LLLL: 'dddd, D MMMM YYYY HH:mm',
	        },
	        calendar: {
	            sameDay: '[დღეს] LT[-ზე]',
	            nextDay: '[ხვალ] LT[-ზე]',
	            lastDay: '[გუშინ] LT[-ზე]',
	            nextWeek: '[შემდეგ] dddd LT[-ზე]',
	            lastWeek: '[წინა] dddd LT-ზე',
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: function (s) {
	                return s.replace(/(წამ|წუთ|საათ|წელ|დღ|თვ)(ი|ე)/, function (
	                    $0,
	                    $1,
	                    $2
	                ) {
	                    return $2 === 'ი' ? $1 + 'ში' : $1 + $2 + 'ში';
	                });
	            },
	            past: function (s) {
	                if (/(წამი|წუთი|საათი|დღე|თვე)/.test(s)) {
	                    return s.replace(/(ი|ე)$/, 'ის წინ');
	                }
	                if (/წელი/.test(s)) {
	                    return s.replace(/წელი$/, 'წლის წინ');
	                }
	                return s;
	            },
	            s: 'რამდენიმე წამი',
	            ss: '%d წამი',
	            m: 'წუთი',
	            mm: '%d წუთი',
	            h: 'საათი',
	            hh: '%d საათი',
	            d: 'დღე',
	            dd: '%d დღე',
	            M: 'თვე',
	            MM: '%d თვე',
	            y: 'წელი',
	            yy: '%d წელი',
	        },
	        dayOfMonthOrdinalParse: /0|1-ლი|მე-\d{1,2}|\d{1,2}-ე/,
	        ordinal: function (number) {
	            if (number === 0) {
	                return number;
	            }
	            if (number === 1) {
	                return number + '-ლი';
	            }
	            if (
	                number < 20 ||
	                (number <= 100 && number % 20 === 0) ||
	                number % 100 === 0
	            ) {
	                return 'მე-' + number;
	            }
	            return number + '-ე';
	        },
	        week: {
	            dow: 1,
	            doy: 7,
	        },
	    });
	
	    return ka;
	
	})));


/***/ }),
/* 439 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Kazakh [kk]
	//! authors : Nurlan Rakhimzhanov : https://github.com/nurlan
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var suffixes = {
	        0: '-ші',
	        1: '-ші',
	        2: '-ші',
	        3: '-ші',
	        4: '-ші',
	        5: '-ші',
	        6: '-шы',
	        7: '-ші',
	        8: '-ші',
	        9: '-шы',
	        10: '-шы',
	        20: '-шы',
	        30: '-шы',
	        40: '-шы',
	        50: '-ші',
	        60: '-шы',
	        70: '-ші',
	        80: '-ші',
	        90: '-шы',
	        100: '-ші',
	    };
	
	    var kk = moment.defineLocale('kk', {
	        months: 'қаңтар_ақпан_наурыз_сәуір_мамыр_маусым_шілде_тамыз_қыркүйек_қазан_қараша_желтоқсан'.split(
	            '_'
	        ),
	        monthsShort: 'қаң_ақп_нау_сәу_мам_мау_шіл_там_қыр_қаз_қар_жел'.split('_'),
	        weekdays: 'жексенбі_дүйсенбі_сейсенбі_сәрсенбі_бейсенбі_жұма_сенбі'.split(
	            '_'
	        ),
	        weekdaysShort: 'жек_дүй_сей_сәр_бей_жұм_сен'.split('_'),
	        weekdaysMin: 'жк_дй_сй_ср_бй_жм_сн'.split('_'),
	        longDateFormat: {
	            LT: 'HH:mm',
	            LTS: 'HH:mm:ss',
	            L: 'DD.MM.YYYY',
	            LL: 'D MMMM YYYY',
	            LLL: 'D MMMM YYYY HH:mm',
	            LLLL: 'dddd, D MMMM YYYY HH:mm',
	        },
	        calendar: {
	            sameDay: '[Бүгін сағат] LT',
	            nextDay: '[Ертең сағат] LT',
	            nextWeek: 'dddd [сағат] LT',
	            lastDay: '[Кеше сағат] LT',
	            lastWeek: '[Өткен аптаның] dddd [сағат] LT',
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: '%s ішінде',
	            past: '%s бұрын',
	            s: 'бірнеше секунд',
	            ss: '%d секунд',
	            m: 'бір минут',
	            mm: '%d минут',
	            h: 'бір сағат',
	            hh: '%d сағат',
	            d: 'бір күн',
	            dd: '%d күн',
	            M: 'бір ай',
	            MM: '%d ай',
	            y: 'бір жыл',
	            yy: '%d жыл',
	        },
	        dayOfMonthOrdinalParse: /\d{1,2}-(ші|шы)/,
	        ordinal: function (number) {
	            var a = number % 10,
	                b = number >= 100 ? 100 : null;
	            return number + (suffixes[number] || suffixes[a] || suffixes[b]);
	        },
	        week: {
	            dow: 1, // Monday is the first day of the week.
	            doy: 7, // The week that contains Jan 7th is the first week of the year.
	        },
	    });
	
	    return kk;
	
	})));


/***/ }),
/* 440 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Cambodian [km]
	//! author : Kruy Vanna : https://github.com/kruyvanna
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var symbolMap = {
	            '1': '១',
	            '2': '២',
	            '3': '៣',
	            '4': '៤',
	            '5': '៥',
	            '6': '៦',
	            '7': '៧',
	            '8': '៨',
	            '9': '៩',
	            '0': '០',
	        },
	        numberMap = {
	            '១': '1',
	            '២': '2',
	            '៣': '3',
	            '៤': '4',
	            '៥': '5',
	            '៦': '6',
	            '៧': '7',
	            '៨': '8',
	            '៩': '9',
	            '០': '0',
	        };
	
	    var km = moment.defineLocale('km', {
	        months: 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split(
	            '_'
	        ),
	        monthsShort: 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split(
	            '_'
	        ),
	        weekdays: 'អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍'.split('_'),
	        weekdaysShort: 'អា_ច_អ_ព_ព្រ_សុ_ស'.split('_'),
	        weekdaysMin: 'អា_ច_អ_ព_ព្រ_សុ_ស'.split('_'),
	        weekdaysParseExact: true,
	        longDateFormat: {
	            LT: 'HH:mm',
	            LTS: 'HH:mm:ss',
	            L: 'DD/MM/YYYY',
	            LL: 'D MMMM YYYY',
	            LLL: 'D MMMM YYYY HH:mm',
	            LLLL: 'dddd, D MMMM YYYY HH:mm',
	        },
	        meridiemParse: /ព្រឹក|ល្ងាច/,
	        isPM: function (input) {
	            return input === 'ល្ងាច';
	        },
	        meridiem: function (hour, minute, isLower) {
	            if (hour < 12) {
	                return 'ព្រឹក';
	            } else {
	                return 'ល្ងាច';
	            }
	        },
	        calendar: {
	            sameDay: '[ថ្ងៃនេះ ម៉ោង] LT',
	            nextDay: '[ស្អែក ម៉ោង] LT',
	            nextWeek: 'dddd [ម៉ោង] LT',
	            lastDay: '[ម្សិលមិញ ម៉ោង] LT',
	            lastWeek: 'dddd [សប្តាហ៍មុន] [ម៉ោង] LT',
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: '%sទៀត',
	            past: '%sមុន',
	            s: 'ប៉ុន្មានវិនាទី',
	            ss: '%d វិនាទី',
	            m: 'មួយនាទី',
	            mm: '%d នាទី',
	            h: 'មួយម៉ោង',
	            hh: '%d ម៉ោង',
	            d: 'មួយថ្ងៃ',
	            dd: '%d ថ្ងៃ',
	            M: 'មួយខែ',
	            MM: '%d ខែ',
	            y: 'មួយឆ្នាំ',
	            yy: '%d ឆ្នាំ',
	        },
	        dayOfMonthOrdinalParse: /ទី\d{1,2}/,
	        ordinal: 'ទី%d',
	        preparse: function (string) {
	            return string.replace(/[១២៣៤៥៦៧៨៩០]/g, function (match) {
	                return numberMap[match];
	            });
	        },
	        postformat: function (string) {
	            return string.replace(/\d/g, function (match) {
	                return symbolMap[match];
	            });
	        },
	        week: {
	            dow: 1, // Monday is the first day of the week.
	            doy: 4, // The week that contains Jan 4th is the first week of the year.
	        },
	    });
	
	    return km;
	
	})));


/***/ }),
/* 441 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Kannada [kn]
	//! author : Rajeev Naik : https://github.com/rajeevnaikte
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var symbolMap = {
	            '1': '೧',
	            '2': '೨',
	            '3': '೩',
	            '4': '೪',
	            '5': '೫',
	            '6': '೬',
	            '7': '೭',
	            '8': '೮',
	            '9': '೯',
	            '0': '೦',
	        },
	        numberMap = {
	            '೧': '1',
	            '೨': '2',
	            '೩': '3',
	            '೪': '4',
	            '೫': '5',
	            '೬': '6',
	            '೭': '7',
	            '೮': '8',
	            '೯': '9',
	            '೦': '0',
	        };
	
	    var kn = moment.defineLocale('kn', {
	        months: 'ಜನವರಿ_ಫೆಬ್ರವರಿ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂಬರ್_ಅಕ್ಟೋಬರ್_ನವೆಂಬರ್_ಡಿಸೆಂಬರ್'.split(
	            '_'
	        ),
	        monthsShort: 'ಜನ_ಫೆಬ್ರ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂ_ಅಕ್ಟೋ_ನವೆಂ_ಡಿಸೆಂ'.split(
	            '_'
	        ),
	        monthsParseExact: true,
	        weekdays: 'ಭಾನುವಾರ_ಸೋಮವಾರ_ಮಂಗಳವಾರ_ಬುಧವಾರ_ಗುರುವಾರ_ಶುಕ್ರವಾರ_ಶನಿವಾರ'.split(
	            '_'
	        ),
	        weekdaysShort: 'ಭಾನು_ಸೋಮ_ಮಂಗಳ_ಬುಧ_ಗುರು_ಶುಕ್ರ_ಶನಿ'.split('_'),
	        weekdaysMin: 'ಭಾ_ಸೋ_ಮಂ_ಬು_ಗು_ಶು_ಶ'.split('_'),
	        longDateFormat: {
	            LT: 'A h:mm',
	            LTS: 'A h:mm:ss',
	            L: 'DD/MM/YYYY',
	            LL: 'D MMMM YYYY',
	            LLL: 'D MMMM YYYY, A h:mm',
	            LLLL: 'dddd, D MMMM YYYY, A h:mm',
	        },
	        calendar: {
	            sameDay: '[ಇಂದು] LT',
	            nextDay: '[ನಾಳೆ] LT',
	            nextWeek: 'dddd, LT',
	            lastDay: '[ನಿನ್ನೆ] LT',
	            lastWeek: '[ಕೊನೆಯ] dddd, LT',
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: '%s ನಂತರ',
	            past: '%s ಹಿಂದೆ',
	            s: 'ಕೆಲವು ಕ್ಷಣಗಳು',
	            ss: '%d ಸೆಕೆಂಡುಗಳು',
	            m: 'ಒಂದು ನಿಮಿಷ',
	            mm: '%d ನಿಮಿಷ',
	            h: 'ಒಂದು ಗಂಟೆ',
	            hh: '%d ಗಂಟೆ',
	            d: 'ಒಂದು ದಿನ',
	            dd: '%d ದಿನ',
	            M: 'ಒಂದು ತಿಂಗಳು',
	            MM: '%d ತಿಂಗಳು',
	            y: 'ಒಂದು ವರ್ಷ',
	            yy: '%d ವರ್ಷ',
	        },
	        preparse: function (string) {
	            return string.replace(/[೧೨೩೪೫೬೭೮೯೦]/g, function (match) {
	                return numberMap[match];
	            });
	        },
	        postformat: function (string) {
	            return string.replace(/\d/g, function (match) {
	                return symbolMap[match];
	            });
	        },
	        meridiemParse: /ರಾತ್ರಿ|ಬೆಳಿಗ್ಗೆ|ಮಧ್ಯಾಹ್ನ|ಸಂಜೆ/,
	        meridiemHour: function (hour, meridiem) {
	            if (hour === 12) {
	                hour = 0;
	            }
	            if (meridiem === 'ರಾತ್ರಿ') {
	                return hour < 4 ? hour : hour + 12;
	            } else if (meridiem === 'ಬೆಳಿಗ್ಗೆ') {
	                return hour;
	            } else if (meridiem === 'ಮಧ್ಯಾಹ್ನ') {
	                return hour >= 10 ? hour : hour + 12;
	            } else if (meridiem === 'ಸಂಜೆ') {
	                return hour + 12;
	            }
	        },
	        meridiem: function (hour, minute, isLower) {
	            if (hour < 4) {
	                return 'ರಾತ್ರಿ';
	            } else if (hour < 10) {
	                return 'ಬೆಳಿಗ್ಗೆ';
	            } else if (hour < 17) {
	                return 'ಮಧ್ಯಾಹ್ನ';
	            } else if (hour < 20) {
	                return 'ಸಂಜೆ';
	            } else {
	                return 'ರಾತ್ರಿ';
	            }
	        },
	        dayOfMonthOrdinalParse: /\d{1,2}(ನೇ)/,
	        ordinal: function (number) {
	            return number + 'ನೇ';
	        },
	        week: {
	            dow: 0, // Sunday is the first day of the week.
	            doy: 6, // The week that contains Jan 6th is the first week of the year.
	        },
	    });
	
	    return kn;
	
	})));


/***/ }),
/* 442 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Korean [ko]
	//! author : Kyungwook, Park : https://github.com/kyungw00k
	//! author : Jeeeyul Lee <jeeeyul@gmail.com>
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var ko = moment.defineLocale('ko', {
	        months: '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split('_'),
	        monthsShort: '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split(
	            '_'
	        ),
	        weekdays: '일요일_월요일_화요일_수요일_목요일_금요일_토요일'.split('_'),
	        weekdaysShort: '일_월_화_수_목_금_토'.split('_'),
	        weekdaysMin: '일_월_화_수_목_금_토'.split('_'),
	        longDateFormat: {
	            LT: 'A h:mm',
	            LTS: 'A h:mm:ss',
	            L: 'YYYY.MM.DD.',
	            LL: 'YYYY년 MMMM D일',
	            LLL: 'YYYY년 MMMM D일 A h:mm',
	            LLLL: 'YYYY년 MMMM D일 dddd A h:mm',
	            l: 'YYYY.MM.DD.',
	            ll: 'YYYY년 MMMM D일',
	            lll: 'YYYY년 MMMM D일 A h:mm',
	            llll: 'YYYY년 MMMM D일 dddd A h:mm',
	        },
	        calendar: {
	            sameDay: '오늘 LT',
	            nextDay: '내일 LT',
	            nextWeek: 'dddd LT',
	            lastDay: '어제 LT',
	            lastWeek: '지난주 dddd LT',
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: '%s 후',
	            past: '%s 전',
	            s: '몇 초',
	            ss: '%d초',
	            m: '1분',
	            mm: '%d분',
	            h: '한 시간',
	            hh: '%d시간',
	            d: '하루',
	            dd: '%d일',
	            M: '한 달',
	            MM: '%d달',
	            y: '일 년',
	            yy: '%d년',
	        },
	        dayOfMonthOrdinalParse: /\d{1,2}(일|월|주)/,
	        ordinal: function (number, period) {
	            switch (period) {
	                case 'd':
	                case 'D':
	                case 'DDD':
	                    return number + '일';
	                case 'M':
	                    return number + '월';
	                case 'w':
	                case 'W':
	                    return number + '주';
	                default:
	                    return number;
	            }
	        },
	        meridiemParse: /오전|오후/,
	        isPM: function (token) {
	            return token === '오후';
	        },
	        meridiem: function (hour, minute, isUpper) {
	            return hour < 12 ? '오전' : '오후';
	        },
	    });
	
	    return ko;
	
	})));


/***/ }),
/* 443 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Kurdish [ku]
	//! author : Shahram Mebashar : https://github.com/ShahramMebashar
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var symbolMap = {
	            '1': '١',
	            '2': '٢',
	            '3': '٣',
	            '4': '٤',
	            '5': '٥',
	            '6': '٦',
	            '7': '٧',
	            '8': '٨',
	            '9': '٩',
	            '0': '٠',
	        },
	        numberMap = {
	            '١': '1',
	            '٢': '2',
	            '٣': '3',
	            '٤': '4',
	            '٥': '5',
	            '٦': '6',
	            '٧': '7',
	            '٨': '8',
	            '٩': '9',
	            '٠': '0',
	        },
	        months = [
	            'کانونی دووەم',
	            'شوبات',
	            'ئازار',
	            'نیسان',
	            'ئایار',
	            'حوزەیران',
	            'تەمموز',
	            'ئاب',
	            'ئەیلوول',
	            'تشرینی یەكەم',
	            'تشرینی دووەم',
	            'كانونی یەکەم',
	        ];
	
	    var ku = moment.defineLocale('ku', {
	        months: months,
	        monthsShort: months,
	        weekdays: 'یه‌كشه‌ممه‌_دووشه‌ممه‌_سێشه‌ممه‌_چوارشه‌ممه‌_پێنجشه‌ممه‌_هه‌ینی_شه‌ممه‌'.split(
	            '_'
	        ),
	        weekdaysShort: 'یه‌كشه‌م_دووشه‌م_سێشه‌م_چوارشه‌م_پێنجشه‌م_هه‌ینی_شه‌ممه‌'.split(
	            '_'
	        ),
	        weekdaysMin: 'ی_د_س_چ_پ_ه_ش'.split('_'),
	        weekdaysParseExact: true,
	        longDateFormat: {
	            LT: 'HH:mm',
	            LTS: 'HH:mm:ss',
	            L: 'DD/MM/YYYY',
	            LL: 'D MMMM YYYY',
	            LLL: 'D MMMM YYYY HH:mm',
	            LLLL: 'dddd, D MMMM YYYY HH:mm',
	        },
	        meridiemParse: /ئێواره‌|به‌یانی/,
	        isPM: function (input) {
	            return /ئێواره‌/.test(input);
	        },
	        meridiem: function (hour, minute, isLower) {
	            if (hour < 12) {
	                return 'به‌یانی';
	            } else {
	                return 'ئێواره‌';
	            }
	        },
	        calendar: {
	            sameDay: '[ئه‌مرۆ كاتژمێر] LT',
	            nextDay: '[به‌یانی كاتژمێر] LT',
	            nextWeek: 'dddd [كاتژمێر] LT',
	            lastDay: '[دوێنێ كاتژمێر] LT',
	            lastWeek: 'dddd [كاتژمێر] LT',
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: 'له‌ %s',
	            past: '%s',
	            s: 'چه‌ند چركه‌یه‌ك',
	            ss: 'چركه‌ %d',
	            m: 'یه‌ك خوله‌ك',
	            mm: '%d خوله‌ك',
	            h: 'یه‌ك كاتژمێر',
	            hh: '%d كاتژمێر',
	            d: 'یه‌ك ڕۆژ',
	            dd: '%d ڕۆژ',
	            M: 'یه‌ك مانگ',
	            MM: '%d مانگ',
	            y: 'یه‌ك ساڵ',
	            yy: '%d ساڵ',
	        },
	        preparse: function (string) {
	            return string
	                .replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {
	                    return numberMap[match];
	                })
	                .replace(/،/g, ',');
	        },
	        postformat: function (string) {
	            return string
	                .replace(/\d/g, function (match) {
	                    return symbolMap[match];
	                })
	                .replace(/,/g, '،');
	        },
	        week: {
	            dow: 6, // Saturday is the first day of the week.
	            doy: 12, // The week that contains Jan 12th is the first week of the year.
	        },
	    });
	
	    return ku;
	
	})));


/***/ }),
/* 444 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Kyrgyz [ky]
	//! author : Chyngyz Arystan uulu : https://github.com/chyngyz
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var suffixes = {
	        0: '-чү',
	        1: '-чи',
	        2: '-чи',
	        3: '-чү',
	        4: '-чү',
	        5: '-чи',
	        6: '-чы',
	        7: '-чи',
	        8: '-чи',
	        9: '-чу',
	        10: '-чу',
	        20: '-чы',
	        30: '-чу',
	        40: '-чы',
	        50: '-чү',
	        60: '-чы',
	        70: '-чи',
	        80: '-чи',
	        90: '-чу',
	        100: '-чү',
	    };
	
	    var ky = moment.defineLocale('ky', {
	        months: 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split(
	            '_'
	        ),
	        monthsShort: 'янв_фев_март_апр_май_июнь_июль_авг_сен_окт_ноя_дек'.split(
	            '_'
	        ),
	        weekdays: 'Жекшемби_Дүйшөмбү_Шейшемби_Шаршемби_Бейшемби_Жума_Ишемби'.split(
	            '_'
	        ),
	        weekdaysShort: 'Жек_Дүй_Шей_Шар_Бей_Жум_Ише'.split('_'),
	        weekdaysMin: 'Жк_Дй_Шй_Шр_Бй_Жм_Иш'.split('_'),
	        longDateFormat: {
	            LT: 'HH:mm',
	            LTS: 'HH:mm:ss',
	            L: 'DD.MM.YYYY',
	            LL: 'D MMMM YYYY',
	            LLL: 'D MMMM YYYY HH:mm',
	            LLLL: 'dddd, D MMMM YYYY HH:mm',
	        },
	        calendar: {
	            sameDay: '[Бүгүн саат] LT',
	            nextDay: '[Эртең саат] LT',
	            nextWeek: 'dddd [саат] LT',
	            lastDay: '[Кечээ саат] LT',
	            lastWeek: '[Өткөн аптанын] dddd [күнү] [саат] LT',
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: '%s ичинде',
	            past: '%s мурун',
	            s: 'бирнече секунд',
	            ss: '%d секунд',
	            m: 'бир мүнөт',
	            mm: '%d мүнөт',
	            h: 'бир саат',
	            hh: '%d саат',
	            d: 'бир күн',
	            dd: '%d күн',
	            M: 'бир ай',
	            MM: '%d ай',
	            y: 'бир жыл',
	            yy: '%d жыл',
	        },
	        dayOfMonthOrdinalParse: /\d{1,2}-(чи|чы|чү|чу)/,
	        ordinal: function (number) {
	            var a = number % 10,
	                b = number >= 100 ? 100 : null;
	            return number + (suffixes[number] || suffixes[a] || suffixes[b]);
	        },
	        week: {
	            dow: 1, // Monday is the first day of the week.
	            doy: 7, // The week that contains Jan 7th is the first week of the year.
	        },
	    });
	
	    return ky;
	
	})));


/***/ }),
/* 445 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Luxembourgish [lb]
	//! author : mweimerskirch : https://github.com/mweimerskirch
	//! author : David Raison : https://github.com/kwisatz
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    function processRelativeTime(number, withoutSuffix, key, isFuture) {
	        var format = {
	            m: ['eng Minutt', 'enger Minutt'],
	            h: ['eng Stonn', 'enger Stonn'],
	            d: ['een Dag', 'engem Dag'],
	            M: ['ee Mount', 'engem Mount'],
	            y: ['ee Joer', 'engem Joer'],
	        };
	        return withoutSuffix ? format[key][0] : format[key][1];
	    }
	    function processFutureTime(string) {
	        var number = string.substr(0, string.indexOf(' '));
	        if (eifelerRegelAppliesToNumber(number)) {
	            return 'a ' + string;
	        }
	        return 'an ' + string;
	    }
	    function processPastTime(string) {
	        var number = string.substr(0, string.indexOf(' '));
	        if (eifelerRegelAppliesToNumber(number)) {
	            return 'viru ' + string;
	        }
	        return 'virun ' + string;
	    }
	    /**
	     * Returns true if the word before the given number loses the '-n' ending.
	     * e.g. 'an 10 Deeg' but 'a 5 Deeg'
	     *
	     * @param number {integer}
	     * @returns {boolean}
	     */
	    function eifelerRegelAppliesToNumber(number) {
	        number = parseInt(number, 10);
	        if (isNaN(number)) {
	            return false;
	        }
	        if (number < 0) {
	            // Negative Number --> always true
	            return true;
	        } else if (number < 10) {
	            // Only 1 digit
	            if (4 <= number && number <= 7) {
	                return true;
	            }
	            return false;
	        } else if (number < 100) {
	            // 2 digits
	            var lastDigit = number % 10,
	                firstDigit = number / 10;
	            if (lastDigit === 0) {
	                return eifelerRegelAppliesToNumber(firstDigit);
	            }
	            return eifelerRegelAppliesToNumber(lastDigit);
	        } else if (number < 10000) {
	            // 3 or 4 digits --> recursively check first digit
	            while (number >= 10) {
	                number = number / 10;
	            }
	            return eifelerRegelAppliesToNumber(number);
	        } else {
	            // Anything larger than 4 digits: recursively check first n-3 digits
	            number = number / 1000;
	            return eifelerRegelAppliesToNumber(number);
	        }
	    }
	
	    var lb = moment.defineLocale('lb', {
	        months: 'Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember'.split(
	            '_'
	        ),
	        monthsShort: 'Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split(
	            '_'
	        ),
	        monthsParseExact: true,
	        weekdays: 'Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg'.split(
	            '_'
	        ),
	        weekdaysShort: 'So._Mé._Dë._Më._Do._Fr._Sa.'.split('_'),
	        weekdaysMin: 'So_Mé_Dë_Më_Do_Fr_Sa'.split('_'),
	        weekdaysParseExact: true,
	        longDateFormat: {
	            LT: 'H:mm [Auer]',
	            LTS: 'H:mm:ss [Auer]',
	            L: 'DD.MM.YYYY',
	            LL: 'D. MMMM YYYY',
	            LLL: 'D. MMMM YYYY H:mm [Auer]',
	            LLLL: 'dddd, D. MMMM YYYY H:mm [Auer]',
	        },
	        calendar: {
	            sameDay: '[Haut um] LT',
	            sameElse: 'L',
	            nextDay: '[Muer um] LT',
	            nextWeek: 'dddd [um] LT',
	            lastDay: '[Gëschter um] LT',
	            lastWeek: function () {
	                // Different date string for 'Dënschdeg' (Tuesday) and 'Donneschdeg' (Thursday) due to phonological rule
	                switch (this.day()) {
	                    case 2:
	                    case 4:
	                        return '[Leschten] dddd [um] LT';
	                    default:
	                        return '[Leschte] dddd [um] LT';
	                }
	            },
	        },
	        relativeTime: {
	            future: processFutureTime,
	            past: processPastTime,
	            s: 'e puer Sekonnen',
	            ss: '%d Sekonnen',
	            m: processRelativeTime,
	            mm: '%d Minutten',
	            h: processRelativeTime,
	            hh: '%d Stonnen',
	            d: processRelativeTime,
	            dd: '%d Deeg',
	            M: processRelativeTime,
	            MM: '%d Méint',
	            y: processRelativeTime,
	            yy: '%d Joer',
	        },
	        dayOfMonthOrdinalParse: /\d{1,2}\./,
	        ordinal: '%d.',
	        week: {
	            dow: 1, // Monday is the first day of the week.
	            doy: 4, // The week that contains Jan 4th is the first week of the year.
	        },
	    });
	
	    return lb;
	
	})));


/***/ }),
/* 446 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Lao [lo]
	//! author : Ryan Hart : https://github.com/ryanhart2
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var lo = moment.defineLocale('lo', {
	        months: 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split(
	            '_'
	        ),
	        monthsShort: 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split(
	            '_'
	        ),
	        weekdays: 'ອາທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'),
	        weekdaysShort: 'ທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'),
	        weekdaysMin: 'ທ_ຈ_ອຄ_ພ_ພຫ_ສກ_ສ'.split('_'),
	        weekdaysParseExact: true,
	        longDateFormat: {
	            LT: 'HH:mm',
	            LTS: 'HH:mm:ss',
	            L: 'DD/MM/YYYY',
	            LL: 'D MMMM YYYY',
	            LLL: 'D MMMM YYYY HH:mm',
	            LLLL: 'ວັນdddd D MMMM YYYY HH:mm',
	        },
	        meridiemParse: /ຕອນເຊົ້າ|ຕອນແລງ/,
	        isPM: function (input) {
	            return input === 'ຕອນແລງ';
	        },
	        meridiem: function (hour, minute, isLower) {
	            if (hour < 12) {
	                return 'ຕອນເຊົ້າ';
	            } else {
	                return 'ຕອນແລງ';
	            }
	        },
	        calendar: {
	            sameDay: '[ມື້ນີ້ເວລາ] LT',
	            nextDay: '[ມື້ອື່ນເວລາ] LT',
	            nextWeek: '[ວັນ]dddd[ໜ້າເວລາ] LT',
	            lastDay: '[ມື້ວານນີ້ເວລາ] LT',
	            lastWeek: '[ວັນ]dddd[ແລ້ວນີ້ເວລາ] LT',
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: 'ອີກ %s',
	            past: '%sຜ່ານມາ',
	            s: 'ບໍ່ເທົ່າໃດວິນາທີ',
	            ss: '%d ວິນາທີ',
	            m: '1 ນາທີ',
	            mm: '%d ນາທີ',
	            h: '1 ຊົ່ວໂມງ',
	            hh: '%d ຊົ່ວໂມງ',
	            d: '1 ມື້',
	            dd: '%d ມື້',
	            M: '1 ເດືອນ',
	            MM: '%d ເດືອນ',
	            y: '1 ປີ',
	            yy: '%d ປີ',
	        },
	        dayOfMonthOrdinalParse: /(ທີ່)\d{1,2}/,
	        ordinal: function (number) {
	            return 'ທີ່' + number;
	        },
	    });
	
	    return lo;
	
	})));


/***/ }),
/* 447 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Lithuanian [lt]
	//! author : Mindaugas Mozūras : https://github.com/mmozuras
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var units = {
	        ss: 'sekundė_sekundžių_sekundes',
	        m: 'minutė_minutės_minutę',
	        mm: 'minutės_minučių_minutes',
	        h: 'valanda_valandos_valandą',
	        hh: 'valandos_valandų_valandas',
	        d: 'diena_dienos_dieną',
	        dd: 'dienos_dienų_dienas',
	        M: 'mėnuo_mėnesio_mėnesį',
	        MM: 'mėnesiai_mėnesių_mėnesius',
	        y: 'metai_metų_metus',
	        yy: 'metai_metų_metus',
	    };
	    function translateSeconds(number, withoutSuffix, key, isFuture) {
	        if (withoutSuffix) {
	            return 'kelios sekundės';
	        } else {
	            return isFuture ? 'kelių sekundžių' : 'kelias sekundes';
	        }
	    }
	    function translateSingular(number, withoutSuffix, key, isFuture) {
	        return withoutSuffix
	            ? forms(key)[0]
	            : isFuture
	            ? forms(key)[1]
	            : forms(key)[2];
	    }
	    function special(number) {
	        return number % 10 === 0 || (number > 10 && number < 20);
	    }
	    function forms(key) {
	        return units[key].split('_');
	    }
	    function translate(number, withoutSuffix, key, isFuture) {
	        var result = number + ' ';
	        if (number === 1) {
	            return (
	                result + translateSingular(number, withoutSuffix, key[0], isFuture)
	            );
	        } else if (withoutSuffix) {
	            return result + (special(number) ? forms(key)[1] : forms(key)[0]);
	        } else {
	            if (isFuture) {
	                return result + forms(key)[1];
	            } else {
	                return result + (special(number) ? forms(key)[1] : forms(key)[2]);
	            }
	        }
	    }
	    var lt = moment.defineLocale('lt', {
	        months: {
	            format: 'sausio_vasario_kovo_balandžio_gegužės_birželio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio'.split(
	                '_'
	            ),
	            standalone: 'sausis_vasaris_kovas_balandis_gegužė_birželis_liepa_rugpjūtis_rugsėjis_spalis_lapkritis_gruodis'.split(
	                '_'
	            ),
	            isFormat: /D[oD]?(\[[^\[\]]*\]|\s)+MMMM?|MMMM?(\[[^\[\]]*\]|\s)+D[oD]?/,
	        },
	        monthsShort: 'sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd'.split('_'),
	        weekdays: {
	            format: 'sekmadienį_pirmadienį_antradienį_trečiadienį_ketvirtadienį_penktadienį_šeštadienį'.split(
	                '_'
	            ),
	            standalone: 'sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis'.split(
	                '_'
	            ),
	            isFormat: /dddd HH:mm/,
	        },
	        weekdaysShort: 'Sek_Pir_Ant_Tre_Ket_Pen_Šeš'.split('_'),
	        weekdaysMin: 'S_P_A_T_K_Pn_Š'.split('_'),
	        weekdaysParseExact: true,
	        longDateFormat: {
	            LT: 'HH:mm',
	            LTS: 'HH:mm:ss',
	            L: 'YYYY-MM-DD',
	            LL: 'YYYY [m.] MMMM D [d.]',
	            LLL: 'YYYY [m.] MMMM D [d.], HH:mm [val.]',
	            LLLL: 'YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]',
	            l: 'YYYY-MM-DD',
	            ll: 'YYYY [m.] MMMM D [d.]',
	            lll: 'YYYY [m.] MMMM D [d.], HH:mm [val.]',
	            llll: 'YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]',
	        },
	        calendar: {
	            sameDay: '[Šiandien] LT',
	            nextDay: '[Rytoj] LT',
	            nextWeek: 'dddd LT',
	            lastDay: '[Vakar] LT',
	            lastWeek: '[Praėjusį] dddd LT',
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: 'po %s',
	            past: 'prieš %s',
	            s: translateSeconds,
	            ss: translate,
	            m: translateSingular,
	            mm: translate,
	            h: translateSingular,
	            hh: translate,
	            d: translateSingular,
	            dd: translate,
	            M: translateSingular,
	            MM: translate,
	            y: translateSingular,
	            yy: translate,
	        },
	        dayOfMonthOrdinalParse: /\d{1,2}-oji/,
	        ordinal: function (number) {
	            return number + '-oji';
	        },
	        week: {
	            dow: 1, // Monday is the first day of the week.
	            doy: 4, // The week that contains Jan 4th is the first week of the year.
	        },
	    });
	
	    return lt;
	
	})));


/***/ }),
/* 448 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Latvian [lv]
	//! author : Kristaps Karlsons : https://github.com/skakri
	//! author : Jānis Elmeris : https://github.com/JanisE
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var units = {
	        ss: 'sekundes_sekundēm_sekunde_sekundes'.split('_'),
	        m: 'minūtes_minūtēm_minūte_minūtes'.split('_'),
	        mm: 'minūtes_minūtēm_minūte_minūtes'.split('_'),
	        h: 'stundas_stundām_stunda_stundas'.split('_'),
	        hh: 'stundas_stundām_stunda_stundas'.split('_'),
	        d: 'dienas_dienām_diena_dienas'.split('_'),
	        dd: 'dienas_dienām_diena_dienas'.split('_'),
	        M: 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'),
	        MM: 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'),
	        y: 'gada_gadiem_gads_gadi'.split('_'),
	        yy: 'gada_gadiem_gads_gadi'.split('_'),
	    };
	    /**
	     * @param withoutSuffix boolean true = a length of time; false = before/after a period of time.
	     */
	    function format(forms, number, withoutSuffix) {
	        if (withoutSuffix) {
	            // E.g. "21 minūte", "3 minūtes".
	            return number % 10 === 1 && number % 100 !== 11 ? forms[2] : forms[3];
	        } else {
	            // E.g. "21 minūtes" as in "pēc 21 minūtes".
	            // E.g. "3 minūtēm" as in "pēc 3 minūtēm".
	            return number % 10 === 1 && number % 100 !== 11 ? forms[0] : forms[1];
	        }
	    }
	    function relativeTimeWithPlural(number, withoutSuffix, key) {
	        return number + ' ' + format(units[key], number, withoutSuffix);
	    }
	    function relativeTimeWithSingular(number, withoutSuffix, key) {
	        return format(units[key], number, withoutSuffix);
	    }
	    function relativeSeconds(number, withoutSuffix) {
	        return withoutSuffix ? 'dažas sekundes' : 'dažām sekundēm';
	    }
	
	    var lv = moment.defineLocale('lv', {
	        months: 'janvāris_februāris_marts_aprīlis_maijs_jūnijs_jūlijs_augusts_septembris_oktobris_novembris_decembris'.split(
	            '_'
	        ),
	        monthsShort: 'jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec'.split('_'),
	        weekdays: 'svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena'.split(
	            '_'
	        ),
	        weekdaysShort: 'Sv_P_O_T_C_Pk_S'.split('_'),
	        weekdaysMin: 'Sv_P_O_T_C_Pk_S'.split('_'),
	        weekdaysParseExact: true,
	        longDateFormat: {
	            LT: 'HH:mm',
	            LTS: 'HH:mm:ss',
	            L: 'DD.MM.YYYY.',
	            LL: 'YYYY. [gada] D. MMMM',
	            LLL: 'YYYY. [gada] D. MMMM, HH:mm',
	            LLLL: 'YYYY. [gada] D. MMMM, dddd, HH:mm',
	        },
	        calendar: {
	            sameDay: '[Šodien pulksten] LT',
	            nextDay: '[Rīt pulksten] LT',
	            nextWeek: 'dddd [pulksten] LT',
	            lastDay: '[Vakar pulksten] LT',
	            lastWeek: '[Pagājušā] dddd [pulksten] LT',
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: 'pēc %s',
	            past: 'pirms %s',
	            s: relativeSeconds,
	            ss: relativeTimeWithPlural,
	            m: relativeTimeWithSingular,
	            mm: relativeTimeWithPlural,
	            h: relativeTimeWithSingular,
	            hh: relativeTimeWithPlural,
	            d: relativeTimeWithSingular,
	            dd: relativeTimeWithPlural,
	            M: relativeTimeWithSingular,
	            MM: relativeTimeWithPlural,
	            y: relativeTimeWithSingular,
	            yy: relativeTimeWithPlural,
	        },
	        dayOfMonthOrdinalParse: /\d{1,2}\./,
	        ordinal: '%d.',
	        week: {
	            dow: 1, // Monday is the first day of the week.
	            doy: 4, // The week that contains Jan 4th is the first week of the year.
	        },
	    });
	
	    return lv;
	
	})));


/***/ }),
/* 449 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Montenegrin [me]
	//! author : Miodrag Nikač <miodrag@restartit.me> : https://github.com/miodragnikac
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var translator = {
	        words: {
	            //Different grammatical cases
	            ss: ['sekund', 'sekunda', 'sekundi'],
	            m: ['jedan minut', 'jednog minuta'],
	            mm: ['minut', 'minuta', 'minuta'],
	            h: ['jedan sat', 'jednog sata'],
	            hh: ['sat', 'sata', 'sati'],
	            dd: ['dan', 'dana', 'dana'],
	            MM: ['mjesec', 'mjeseca', 'mjeseci'],
	            yy: ['godina', 'godine', 'godina'],
	        },
	        correctGrammaticalCase: function (number, wordKey) {
	            return number === 1
	                ? wordKey[0]
	                : number >= 2 && number <= 4
	                ? wordKey[1]
	                : wordKey[2];
	        },
	        translate: function (number, withoutSuffix, key) {
	            var wordKey = translator.words[key];
	            if (key.length === 1) {
	                return withoutSuffix ? wordKey[0] : wordKey[1];
	            } else {
	                return (
	                    number +
	                    ' ' +
	                    translator.correctGrammaticalCase(number, wordKey)
	                );
	            }
	        },
	    };
	
	    var me = moment.defineLocale('me', {
	        months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split(
	            '_'
	        ),
	        monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split(
	            '_'
	        ),
	        monthsParseExact: true,
	        weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split(
	            '_'
	        ),
	        weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),
	        weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),
	        weekdaysParseExact: true,
	        longDateFormat: {
	            LT: 'H:mm',
	            LTS: 'H:mm:ss',
	            L: 'DD.MM.YYYY',
	            LL: 'D. MMMM YYYY',
	            LLL: 'D. MMMM YYYY H:mm',
	            LLLL: 'dddd, D. MMMM YYYY H:mm',
	        },
	        calendar: {
	            sameDay: '[danas u] LT',
	            nextDay: '[sjutra u] LT',
	
	            nextWeek: function () {
	                switch (this.day()) {
	                    case 0:
	                        return '[u] [nedjelju] [u] LT';
	                    case 3:
	                        return '[u] [srijedu] [u] LT';
	                    case 6:
	                        return '[u] [subotu] [u] LT';
	                    case 1:
	                    case 2:
	                    case 4:
	                    case 5:
	                        return '[u] dddd [u] LT';
	                }
	            },
	            lastDay: '[juče u] LT',
	            lastWeek: function () {
	                var lastWeekDays = [
	                    '[prošle] [nedjelje] [u] LT',
	                    '[prošlog] [ponedjeljka] [u] LT',
	                    '[prošlog] [utorka] [u] LT',
	                    '[prošle] [srijede] [u] LT',
	                    '[prošlog] [četvrtka] [u] LT',
	                    '[prošlog] [petka] [u] LT',
	                    '[prošle] [subote] [u] LT',
	                ];
	                return lastWeekDays[this.day()];
	            },
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: 'za %s',
	            past: 'prije %s',
	            s: 'nekoliko sekundi',
	            ss: translator.translate,
	            m: translator.translate,
	            mm: translator.translate,
	            h: translator.translate,
	            hh: translator.translate,
	            d: 'dan',
	            dd: translator.translate,
	            M: 'mjesec',
	            MM: translator.translate,
	            y: 'godinu',
	            yy: translator.translate,
	        },
	        dayOfMonthOrdinalParse: /\d{1,2}\./,
	        ordinal: '%d.',
	        week: {
	            dow: 1, // Monday is the first day of the week.
	            doy: 7, // The week that contains Jan 7th is the first week of the year.
	        },
	    });
	
	    return me;
	
	})));


/***/ }),
/* 450 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Maori [mi]
	//! author : John Corrigan <robbiecloset@gmail.com> : https://github.com/johnideal
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var mi = moment.defineLocale('mi', {
	        months: 'Kohi-tāte_Hui-tanguru_Poutū-te-rangi_Paenga-whāwhā_Haratua_Pipiri_Hōngoingoi_Here-turi-kōkā_Mahuru_Whiringa-ā-nuku_Whiringa-ā-rangi_Hakihea'.split(
	            '_'
	        ),
	        monthsShort: 'Kohi_Hui_Pou_Pae_Hara_Pipi_Hōngoi_Here_Mahu_Whi-nu_Whi-ra_Haki'.split(
	            '_'
	        ),
	        monthsRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,
	        monthsStrictRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,
	        monthsShortRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,
	        monthsShortStrictRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,2}/i,
	        weekdays: 'Rātapu_Mane_Tūrei_Wenerei_Tāite_Paraire_Hātarei'.split('_'),
	        weekdaysShort: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'),
	        weekdaysMin: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'),
	        longDateFormat: {
	            LT: 'HH:mm',
	            LTS: 'HH:mm:ss',
	            L: 'DD/MM/YYYY',
	            LL: 'D MMMM YYYY',
	            LLL: 'D MMMM YYYY [i] HH:mm',
	            LLLL: 'dddd, D MMMM YYYY [i] HH:mm',
	        },
	        calendar: {
	            sameDay: '[i teie mahana, i] LT',
	            nextDay: '[apopo i] LT',
	            nextWeek: 'dddd [i] LT',
	            lastDay: '[inanahi i] LT',
	            lastWeek: 'dddd [whakamutunga i] LT',
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: 'i roto i %s',
	            past: '%s i mua',
	            s: 'te hēkona ruarua',
	            ss: '%d hēkona',
	            m: 'he meneti',
	            mm: '%d meneti',
	            h: 'te haora',
	            hh: '%d haora',
	            d: 'he ra',
	            dd: '%d ra',
	            M: 'he marama',
	            MM: '%d marama',
	            y: 'he tau',
	            yy: '%d tau',
	        },
	        dayOfMonthOrdinalParse: /\d{1,2}º/,
	        ordinal: '%dº',
	        week: {
	            dow: 1, // Monday is the first day of the week.
	            doy: 4, // The week that contains Jan 4th is the first week of the year.
	        },
	    });
	
	    return mi;
	
	})));


/***/ }),
/* 451 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Macedonian [mk]
	//! author : Borislav Mickov : https://github.com/B0k0
	//! author : Sashko Todorov : https://github.com/bkyceh
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var mk = moment.defineLocale('mk', {
	        months: 'јануари_февруари_март_април_мај_јуни_јули_август_септември_октомври_ноември_декември'.split(
	            '_'
	        ),
	        monthsShort: 'јан_фев_мар_апр_мај_јун_јул_авг_сеп_окт_ное_дек'.split('_'),
	        weekdays: 'недела_понеделник_вторник_среда_четврток_петок_сабота'.split(
	            '_'
	        ),
	        weekdaysShort: 'нед_пон_вто_сре_чет_пет_саб'.split('_'),
	        weekdaysMin: 'нe_пo_вт_ср_че_пе_сa'.split('_'),
	        longDateFormat: {
	            LT: 'H:mm',
	            LTS: 'H:mm:ss',
	            L: 'D.MM.YYYY',
	            LL: 'D MMMM YYYY',
	            LLL: 'D MMMM YYYY H:mm',
	            LLLL: 'dddd, D MMMM YYYY H:mm',
	        },
	        calendar: {
	            sameDay: '[Денес во] LT',
	            nextDay: '[Утре во] LT',
	            nextWeek: '[Во] dddd [во] LT',
	            lastDay: '[Вчера во] LT',
	            lastWeek: function () {
	                switch (this.day()) {
	                    case 0:
	                    case 3:
	                    case 6:
	                        return '[Изминатата] dddd [во] LT';
	                    case 1:
	                    case 2:
	                    case 4:
	                    case 5:
	                        return '[Изминатиот] dddd [во] LT';
	                }
	            },
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: 'за %s',
	            past: 'пред %s',
	            s: 'неколку секунди',
	            ss: '%d секунди',
	            m: 'една минута',
	            mm: '%d минути',
	            h: 'еден час',
	            hh: '%d часа',
	            d: 'еден ден',
	            dd: '%d дена',
	            M: 'еден месец',
	            MM: '%d месеци',
	            y: 'една година',
	            yy: '%d години',
	        },
	        dayOfMonthOrdinalParse: /\d{1,2}-(ев|ен|ти|ви|ри|ми)/,
	        ordinal: function (number) {
	            var lastDigit = number % 10,
	                last2Digits = number % 100;
	            if (number === 0) {
	                return number + '-ев';
	            } else if (last2Digits === 0) {
	                return number + '-ен';
	            } else if (last2Digits > 10 && last2Digits < 20) {
	                return number + '-ти';
	            } else if (lastDigit === 1) {
	                return number + '-ви';
	            } else if (lastDigit === 2) {
	                return number + '-ри';
	            } else if (lastDigit === 7 || lastDigit === 8) {
	                return number + '-ми';
	            } else {
	                return number + '-ти';
	            }
	        },
	        week: {
	            dow: 1, // Monday is the first day of the week.
	            doy: 7, // The week that contains Jan 7th is the first week of the year.
	        },
	    });
	
	    return mk;
	
	})));


/***/ }),
/* 452 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Malayalam [ml]
	//! author : Floyd Pink : https://github.com/floydpink
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var ml = moment.defineLocale('ml', {
	        months: 'ജനുവരി_ഫെബ്രുവരി_മാർച്ച്_ഏപ്രിൽ_മേയ്_ജൂൺ_ജൂലൈ_ഓഗസ്റ്റ്_സെപ്റ്റംബർ_ഒക്ടോബർ_നവംബർ_ഡിസംബർ'.split(
	            '_'
	        ),
	        monthsShort: 'ജനു._ഫെബ്രു._മാർ._ഏപ്രി._മേയ്_ജൂൺ_ജൂലൈ._ഓഗ._സെപ്റ്റ._ഒക്ടോ._നവം._ഡിസം.'.split(
	            '_'
	        ),
	        monthsParseExact: true,
	        weekdays: 'ഞായറാഴ്ച_തിങ്കളാഴ്ച_ചൊവ്വാഴ്ച_ബുധനാഴ്ച_വ്യാഴാഴ്ച_വെള്ളിയാഴ്ച_ശനിയാഴ്ച'.split(
	            '_'
	        ),
	        weekdaysShort: 'ഞായർ_തിങ്കൾ_ചൊവ്വ_ബുധൻ_വ്യാഴം_വെള്ളി_ശനി'.split('_'),
	        weekdaysMin: 'ഞാ_തി_ചൊ_ബു_വ്യാ_വെ_ശ'.split('_'),
	        longDateFormat: {
	            LT: 'A h:mm -നു',
	            LTS: 'A h:mm:ss -നു',
	            L: 'DD/MM/YYYY',
	            LL: 'D MMMM YYYY',
	            LLL: 'D MMMM YYYY, A h:mm -നു',
	            LLLL: 'dddd, D MMMM YYYY, A h:mm -നു',
	        },
	        calendar: {
	            sameDay: '[ഇന്ന്] LT',
	            nextDay: '[നാളെ] LT',
	            nextWeek: 'dddd, LT',
	            lastDay: '[ഇന്നലെ] LT',
	            lastWeek: '[കഴിഞ്ഞ] dddd, LT',
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: '%s കഴിഞ്ഞ്',
	            past: '%s മുൻപ്',
	            s: 'അൽപ നിമിഷങ്ങൾ',
	            ss: '%d സെക്കൻഡ്',
	            m: 'ഒരു മിനിറ്റ്',
	            mm: '%d മിനിറ്റ്',
	            h: 'ഒരു മണിക്കൂർ',
	            hh: '%d മണിക്കൂർ',
	            d: 'ഒരു ദിവസം',
	            dd: '%d ദിവസം',
	            M: 'ഒരു മാസം',
	            MM: '%d മാസം',
	            y: 'ഒരു വർഷം',
	            yy: '%d വർഷം',
	        },
	        meridiemParse: /രാത്രി|രാവിലെ|ഉച്ച കഴിഞ്ഞ്|വൈകുന്നേരം|രാത്രി/i,
	        meridiemHour: function (hour, meridiem) {
	            if (hour === 12) {
	                hour = 0;
	            }
	            if (
	                (meridiem === 'രാത്രി' && hour >= 4) ||
	                meridiem === 'ഉച്ച കഴിഞ്ഞ്' ||
	                meridiem === 'വൈകുന്നേരം'
	            ) {
	                return hour + 12;
	            } else {
	                return hour;
	            }
	        },
	        meridiem: function (hour, minute, isLower) {
	            if (hour < 4) {
	                return 'രാത്രി';
	            } else if (hour < 12) {
	                return 'രാവിലെ';
	            } else if (hour < 17) {
	                return 'ഉച്ച കഴിഞ്ഞ്';
	            } else if (hour < 20) {
	                return 'വൈകുന്നേരം';
	            } else {
	                return 'രാത്രി';
	            }
	        },
	    });
	
	    return ml;
	
	})));


/***/ }),
/* 453 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Mongolian [mn]
	//! author : Javkhlantugs Nyamdorj : https://github.com/javkhaanj7
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    function translate(number, withoutSuffix, key, isFuture) {
	        switch (key) {
	            case 's':
	                return withoutSuffix ? 'хэдхэн секунд' : 'хэдхэн секундын';
	            case 'ss':
	                return number + (withoutSuffix ? ' секунд' : ' секундын');
	            case 'm':
	            case 'mm':
	                return number + (withoutSuffix ? ' минут' : ' минутын');
	            case 'h':
	            case 'hh':
	                return number + (withoutSuffix ? ' цаг' : ' цагийн');
	            case 'd':
	            case 'dd':
	                return number + (withoutSuffix ? ' өдөр' : ' өдрийн');
	            case 'M':
	            case 'MM':
	                return number + (withoutSuffix ? ' сар' : ' сарын');
	            case 'y':
	            case 'yy':
	                return number + (withoutSuffix ? ' жил' : ' жилийн');
	            default:
	                return number;
	        }
	    }
	
	    var mn = moment.defineLocale('mn', {
	        months: 'Нэгдүгээр сар_Хоёрдугаар сар_Гуравдугаар сар_Дөрөвдүгээр сар_Тавдугаар сар_Зургадугаар сар_Долдугаар сар_Наймдугаар сар_Есдүгээр сар_Аравдугаар сар_Арван нэгдүгээр сар_Арван хоёрдугаар сар'.split(
	            '_'
	        ),
	        monthsShort: '1 сар_2 сар_3 сар_4 сар_5 сар_6 сар_7 сар_8 сар_9 сар_10 сар_11 сар_12 сар'.split(
	            '_'
	        ),
	        monthsParseExact: true,
	        weekdays: 'Ням_Даваа_Мягмар_Лхагва_Пүрэв_Баасан_Бямба'.split('_'),
	        weekdaysShort: 'Ням_Дав_Мяг_Лха_Пүр_Баа_Бям'.split('_'),
	        weekdaysMin: 'Ня_Да_Мя_Лх_Пү_Ба_Бя'.split('_'),
	        weekdaysParseExact: true,
	        longDateFormat: {
	            LT: 'HH:mm',
	            LTS: 'HH:mm:ss',
	            L: 'YYYY-MM-DD',
	            LL: 'YYYY оны MMMMын D',
	            LLL: 'YYYY оны MMMMын D HH:mm',
	            LLLL: 'dddd, YYYY оны MMMMын D HH:mm',
	        },
	        meridiemParse: /ҮӨ|ҮХ/i,
	        isPM: function (input) {
	            return input === 'ҮХ';
	        },
	        meridiem: function (hour, minute, isLower) {
	            if (hour < 12) {
	                return 'ҮӨ';
	            } else {
	                return 'ҮХ';
	            }
	        },
	        calendar: {
	            sameDay: '[Өнөөдөр] LT',
	            nextDay: '[Маргааш] LT',
	            nextWeek: '[Ирэх] dddd LT',
	            lastDay: '[Өчигдөр] LT',
	            lastWeek: '[Өнгөрсөн] dddd LT',
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: '%s дараа',
	            past: '%s өмнө',
	            s: translate,
	            ss: translate,
	            m: translate,
	            mm: translate,
	            h: translate,
	            hh: translate,
	            d: translate,
	            dd: translate,
	            M: translate,
	            MM: translate,
	            y: translate,
	            yy: translate,
	        },
	        dayOfMonthOrdinalParse: /\d{1,2} өдөр/,
	        ordinal: function (number, period) {
	            switch (period) {
	                case 'd':
	                case 'D':
	                case 'DDD':
	                    return number + ' өдөр';
	                default:
	                    return number;
	            }
	        },
	    });
	
	    return mn;
	
	})));


/***/ }),
/* 454 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Marathi [mr]
	//! author : Harshad Kale : https://github.com/kalehv
	//! author : Vivek Athalye : https://github.com/vnathalye
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var symbolMap = {
	            '1': '१',
	            '2': '२',
	            '3': '३',
	            '4': '४',
	            '5': '५',
	            '6': '६',
	            '7': '७',
	            '8': '८',
	            '9': '९',
	            '0': '०',
	        },
	        numberMap = {
	            '१': '1',
	            '२': '2',
	            '३': '3',
	            '४': '4',
	            '५': '5',
	            '६': '6',
	            '७': '7',
	            '८': '8',
	            '९': '9',
	            '०': '0',
	        };
	
	    function relativeTimeMr(number, withoutSuffix, string, isFuture) {
	        var output = '';
	        if (withoutSuffix) {
	            switch (string) {
	                case 's':
	                    output = 'काही सेकंद';
	                    break;
	                case 'ss':
	                    output = '%d सेकंद';
	                    break;
	                case 'm':
	                    output = 'एक मिनिट';
	                    break;
	                case 'mm':
	                    output = '%d मिनिटे';
	                    break;
	                case 'h':
	                    output = 'एक तास';
	                    break;
	                case 'hh':
	                    output = '%d तास';
	                    break;
	                case 'd':
	                    output = 'एक दिवस';
	                    break;
	                case 'dd':
	                    output = '%d दिवस';
	                    break;
	                case 'M':
	                    output = 'एक महिना';
	                    break;
	                case 'MM':
	                    output = '%d महिने';
	                    break;
	                case 'y':
	                    output = 'एक वर्ष';
	                    break;
	                case 'yy':
	                    output = '%d वर्षे';
	                    break;
	            }
	        } else {
	            switch (string) {
	                case 's':
	                    output = 'काही सेकंदां';
	                    break;
	                case 'ss':
	                    output = '%d सेकंदां';
	                    break;
	                case 'm':
	                    output = 'एका मिनिटा';
	                    break;
	                case 'mm':
	                    output = '%d मिनिटां';
	                    break;
	                case 'h':
	                    output = 'एका तासा';
	                    break;
	                case 'hh':
	                    output = '%d तासां';
	                    break;
	                case 'd':
	                    output = 'एका दिवसा';
	                    break;
	                case 'dd':
	                    output = '%d दिवसां';
	                    break;
	                case 'M':
	                    output = 'एका महिन्या';
	                    break;
	                case 'MM':
	                    output = '%d महिन्यां';
	                    break;
	                case 'y':
	                    output = 'एका वर्षा';
	                    break;
	                case 'yy':
	                    output = '%d वर्षां';
	                    break;
	            }
	        }
	        return output.replace(/%d/i, number);
	    }
	
	    var mr = moment.defineLocale('mr', {
	        months: 'जानेवारी_फेब्रुवारी_मार्च_एप्रिल_मे_जून_जुलै_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर'.split(
	            '_'
	        ),
	        monthsShort: 'जाने._फेब्रु._मार्च._एप्रि._मे._जून._जुलै._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.'.split(
	            '_'
	        ),
	        monthsParseExact: true,
	        weekdays: 'रविवार_सोमवार_मंगळवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'),
	        weekdaysShort: 'रवि_सोम_मंगळ_बुध_गुरू_शुक्र_शनि'.split('_'),
	        weekdaysMin: 'र_सो_मं_बु_गु_शु_श'.split('_'),
	        longDateFormat: {
	            LT: 'A h:mm वाजता',
	            LTS: 'A h:mm:ss वाजता',
	            L: 'DD/MM/YYYY',
	            LL: 'D MMMM YYYY',
	            LLL: 'D MMMM YYYY, A h:mm वाजता',
	            LLLL: 'dddd, D MMMM YYYY, A h:mm वाजता',
	        },
	        calendar: {
	            sameDay: '[आज] LT',
	            nextDay: '[उद्या] LT',
	            nextWeek: 'dddd, LT',
	            lastDay: '[काल] LT',
	            lastWeek: '[मागील] dddd, LT',
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: '%sमध्ये',
	            past: '%sपूर्वी',
	            s: relativeTimeMr,
	            ss: relativeTimeMr,
	            m: relativeTimeMr,
	            mm: relativeTimeMr,
	            h: relativeTimeMr,
	            hh: relativeTimeMr,
	            d: relativeTimeMr,
	            dd: relativeTimeMr,
	            M: relativeTimeMr,
	            MM: relativeTimeMr,
	            y: relativeTimeMr,
	            yy: relativeTimeMr,
	        },
	        preparse: function (string) {
	            return string.replace(/[१२३४५६७८९०]/g, function (match) {
	                return numberMap[match];
	            });
	        },
	        postformat: function (string) {
	            return string.replace(/\d/g, function (match) {
	                return symbolMap[match];
	            });
	        },
	        meridiemParse: /पहाटे|सकाळी|दुपारी|सायंकाळी|रात्री/,
	        meridiemHour: function (hour, meridiem) {
	            if (hour === 12) {
	                hour = 0;
	            }
	            if (meridiem === 'पहाटे' || meridiem === 'सकाळी') {
	                return hour;
	            } else if (
	                meridiem === 'दुपारी' ||
	                meridiem === 'सायंकाळी' ||
	                meridiem === 'रात्री'
	            ) {
	                return hour >= 12 ? hour : hour + 12;
	            }
	        },
	        meridiem: function (hour, minute, isLower) {
	            if (hour >= 0 && hour < 6) {
	                return 'पहाटे';
	            } else if (hour < 12) {
	                return 'सकाळी';
	            } else if (hour < 17) {
	                return 'दुपारी';
	            } else if (hour < 20) {
	                return 'सायंकाळी';
	            } else {
	                return 'रात्री';
	            }
	        },
	        week: {
	            dow: 0, // Sunday is the first day of the week.
	            doy: 6, // The week that contains Jan 6th is the first week of the year.
	        },
	    });
	
	    return mr;
	
	})));


/***/ }),
/* 455 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Malay [ms-my]
	//! note : DEPRECATED, the correct one is [ms]
	//! author : Weldan Jamili : https://github.com/weldan
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var msMy = moment.defineLocale('ms-my', {
	        months: 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split(
	            '_'
	        ),
	        monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'),
	        weekdays: 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'),
	        weekdaysShort: 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'),
	        weekdaysMin: 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'),
	        longDateFormat: {
	            LT: 'HH.mm',
	            LTS: 'HH.mm.ss',
	            L: 'DD/MM/YYYY',
	            LL: 'D MMMM YYYY',
	            LLL: 'D MMMM YYYY [pukul] HH.mm',
	            LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm',
	        },
	        meridiemParse: /pagi|tengahari|petang|malam/,
	        meridiemHour: function (hour, meridiem) {
	            if (hour === 12) {
	                hour = 0;
	            }
	            if (meridiem === 'pagi') {
	                return hour;
	            } else if (meridiem === 'tengahari') {
	                return hour >= 11 ? hour : hour + 12;
	            } else if (meridiem === 'petang' || meridiem === 'malam') {
	                return hour + 12;
	            }
	        },
	        meridiem: function (hours, minutes, isLower) {
	            if (hours < 11) {
	                return 'pagi';
	            } else if (hours < 15) {
	                return 'tengahari';
	            } else if (hours < 19) {
	                return 'petang';
	            } else {
	                return 'malam';
	            }
	        },
	        calendar: {
	            sameDay: '[Hari ini pukul] LT',
	            nextDay: '[Esok pukul] LT',
	            nextWeek: 'dddd [pukul] LT',
	            lastDay: '[Kelmarin pukul] LT',
	            lastWeek: 'dddd [lepas pukul] LT',
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: 'dalam %s',
	            past: '%s yang lepas',
	            s: 'beberapa saat',
	            ss: '%d saat',
	            m: 'seminit',
	            mm: '%d minit',
	            h: 'sejam',
	            hh: '%d jam',
	            d: 'sehari',
	            dd: '%d hari',
	            M: 'sebulan',
	            MM: '%d bulan',
	            y: 'setahun',
	            yy: '%d tahun',
	        },
	        week: {
	            dow: 1, // Monday is the first day of the week.
	            doy: 7, // The week that contains Jan 7th is the first week of the year.
	        },
	    });
	
	    return msMy;
	
	})));


/***/ }),
/* 456 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Malay [ms]
	//! author : Weldan Jamili : https://github.com/weldan
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var ms = moment.defineLocale('ms', {
	        months: 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split(
	            '_'
	        ),
	        monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'),
	        weekdays: 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'),
	        weekdaysShort: 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'),
	        weekdaysMin: 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'),
	        longDateFormat: {
	            LT: 'HH.mm',
	            LTS: 'HH.mm.ss',
	            L: 'DD/MM/YYYY',
	            LL: 'D MMMM YYYY',
	            LLL: 'D MMMM YYYY [pukul] HH.mm',
	            LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm',
	        },
	        meridiemParse: /pagi|tengahari|petang|malam/,
	        meridiemHour: function (hour, meridiem) {
	            if (hour === 12) {
	                hour = 0;
	            }
	            if (meridiem === 'pagi') {
	                return hour;
	            } else if (meridiem === 'tengahari') {
	                return hour >= 11 ? hour : hour + 12;
	            } else if (meridiem === 'petang' || meridiem === 'malam') {
	                return hour + 12;
	            }
	        },
	        meridiem: function (hours, minutes, isLower) {
	            if (hours < 11) {
	                return 'pagi';
	            } else if (hours < 15) {
	                return 'tengahari';
	            } else if (hours < 19) {
	                return 'petang';
	            } else {
	                return 'malam';
	            }
	        },
	        calendar: {
	            sameDay: '[Hari ini pukul] LT',
	            nextDay: '[Esok pukul] LT',
	            nextWeek: 'dddd [pukul] LT',
	            lastDay: '[Kelmarin pukul] LT',
	            lastWeek: 'dddd [lepas pukul] LT',
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: 'dalam %s',
	            past: '%s yang lepas',
	            s: 'beberapa saat',
	            ss: '%d saat',
	            m: 'seminit',
	            mm: '%d minit',
	            h: 'sejam',
	            hh: '%d jam',
	            d: 'sehari',
	            dd: '%d hari',
	            M: 'sebulan',
	            MM: '%d bulan',
	            y: 'setahun',
	            yy: '%d tahun',
	        },
	        week: {
	            dow: 1, // Monday is the first day of the week.
	            doy: 7, // The week that contains Jan 7th is the first week of the year.
	        },
	    });
	
	    return ms;
	
	})));


/***/ }),
/* 457 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Maltese (Malta) [mt]
	//! author : Alessandro Maruccia : https://github.com/alesma
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var mt = moment.defineLocale('mt', {
	        months: 'Jannar_Frar_Marzu_April_Mejju_Ġunju_Lulju_Awwissu_Settembru_Ottubru_Novembru_Diċembru'.split(
	            '_'
	        ),
	        monthsShort: 'Jan_Fra_Mar_Apr_Mej_Ġun_Lul_Aww_Set_Ott_Nov_Diċ'.split('_'),
	        weekdays: 'Il-Ħadd_It-Tnejn_It-Tlieta_L-Erbgħa_Il-Ħamis_Il-Ġimgħa_Is-Sibt'.split(
	            '_'
	        ),
	        weekdaysShort: 'Ħad_Tne_Tli_Erb_Ħam_Ġim_Sib'.split('_'),
	        weekdaysMin: 'Ħa_Tn_Tl_Er_Ħa_Ġi_Si'.split('_'),
	        longDateFormat: {
	            LT: 'HH:mm',
	            LTS: 'HH:mm:ss',
	            L: 'DD/MM/YYYY',
	            LL: 'D MMMM YYYY',
	            LLL: 'D MMMM YYYY HH:mm',
	            LLLL: 'dddd, D MMMM YYYY HH:mm',
	        },
	        calendar: {
	            sameDay: '[Illum fil-]LT',
	            nextDay: '[Għada fil-]LT',
	            nextWeek: 'dddd [fil-]LT',
	            lastDay: '[Il-bieraħ fil-]LT',
	            lastWeek: 'dddd [li għadda] [fil-]LT',
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: 'f’ %s',
	            past: '%s ilu',
	            s: 'ftit sekondi',
	            ss: '%d sekondi',
	            m: 'minuta',
	            mm: '%d minuti',
	            h: 'siegħa',
	            hh: '%d siegħat',
	            d: 'ġurnata',
	            dd: '%d ġranet',
	            M: 'xahar',
	            MM: '%d xhur',
	            y: 'sena',
	            yy: '%d sni',
	        },
	        dayOfMonthOrdinalParse: /\d{1,2}º/,
	        ordinal: '%dº',
	        week: {
	            dow: 1, // Monday is the first day of the week.
	            doy: 4, // The week that contains Jan 4th is the first week of the year.
	        },
	    });
	
	    return mt;
	
	})));


/***/ }),
/* 458 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Burmese [my]
	//! author : Squar team, mysquar.com
	//! author : David Rossellat : https://github.com/gholadr
	//! author : Tin Aung Lin : https://github.com/thanyawzinmin
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var symbolMap = {
	            '1': '၁',
	            '2': '၂',
	            '3': '၃',
	            '4': '၄',
	            '5': '၅',
	            '6': '၆',
	            '7': '၇',
	            '8': '၈',
	            '9': '၉',
	            '0': '၀',
	        },
	        numberMap = {
	            '၁': '1',
	            '၂': '2',
	            '၃': '3',
	            '၄': '4',
	            '၅': '5',
	            '၆': '6',
	            '၇': '7',
	            '၈': '8',
	            '၉': '9',
	            '၀': '0',
	        };
	
	    var my = moment.defineLocale('my', {
	        months: 'ဇန်နဝါရီ_ဖေဖော်ဝါရီ_မတ်_ဧပြီ_မေ_ဇွန်_ဇူလိုင်_သြဂုတ်_စက်တင်ဘာ_အောက်တိုဘာ_နိုဝင်ဘာ_ဒီဇင်ဘာ'.split(
	            '_'
	        ),
	        monthsShort: 'ဇန်_ဖေ_မတ်_ပြီ_မေ_ဇွန်_လိုင်_သြ_စက်_အောက်_နို_ဒီ'.split('_'),
	        weekdays: 'တနင်္ဂနွေ_တနင်္လာ_အင်္ဂါ_ဗုဒ္ဓဟူး_ကြာသပတေး_သောကြာ_စနေ'.split(
	            '_'
	        ),
	        weekdaysShort: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'),
	        weekdaysMin: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'),
	
	        longDateFormat: {
	            LT: 'HH:mm',
	            LTS: 'HH:mm:ss',
	            L: 'DD/MM/YYYY',
	            LL: 'D MMMM YYYY',
	            LLL: 'D MMMM YYYY HH:mm',
	            LLLL: 'dddd D MMMM YYYY HH:mm',
	        },
	        calendar: {
	            sameDay: '[ယနေ.] LT [မှာ]',
	            nextDay: '[မနက်ဖြန်] LT [မှာ]',
	            nextWeek: 'dddd LT [မှာ]',
	            lastDay: '[မနေ.က] LT [မှာ]',
	            lastWeek: '[ပြီးခဲ့သော] dddd LT [မှာ]',
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: 'လာမည့် %s မှာ',
	            past: 'လွန်ခဲ့သော %s က',
	            s: 'စက္ကန်.အနည်းငယ်',
	            ss: '%d စက္ကန့်',
	            m: 'တစ်မိနစ်',
	            mm: '%d မိနစ်',
	            h: 'တစ်နာရီ',
	            hh: '%d နာရီ',
	            d: 'တစ်ရက်',
	            dd: '%d ရက်',
	            M: 'တစ်လ',
	            MM: '%d လ',
	            y: 'တစ်နှစ်',
	            yy: '%d နှစ်',
	        },
	        preparse: function (string) {
	            return string.replace(/[၁၂၃၄၅၆၇၈၉၀]/g, function (match) {
	                return numberMap[match];
	            });
	        },
	        postformat: function (string) {
	            return string.replace(/\d/g, function (match) {
	                return symbolMap[match];
	            });
	        },
	        week: {
	            dow: 1, // Monday is the first day of the week.
	            doy: 4, // The week that contains Jan 4th is the first week of the year.
	        },
	    });
	
	    return my;
	
	})));


/***/ }),
/* 459 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Norwegian Bokmål [nb]
	//! authors : Espen Hovlandsdal : https://github.com/rexxars
	//!           Sigurd Gartmann : https://github.com/sigurdga
	//!           Stephen Ramthun : https://github.com/stephenramthun
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var nb = moment.defineLocale('nb', {
	        months: 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split(
	            '_'
	        ),
	        monthsShort: 'jan._feb._mars_apr._mai_juni_juli_aug._sep._okt._nov._des.'.split(
	            '_'
	        ),
	        monthsParseExact: true,
	        weekdays: 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'),
	        weekdaysShort: 'sø._ma._ti._on._to._fr._lø.'.split('_'),
	        weekdaysMin: 'sø_ma_ti_on_to_fr_lø'.split('_'),
	        weekdaysParseExact: true,
	        longDateFormat: {
	            LT: 'HH:mm',
	            LTS: 'HH:mm:ss',
	            L: 'DD.MM.YYYY',
	            LL: 'D. MMMM YYYY',
	            LLL: 'D. MMMM YYYY [kl.] HH:mm',
	            LLLL: 'dddd D. MMMM YYYY [kl.] HH:mm',
	        },
	        calendar: {
	            sameDay: '[i dag kl.] LT',
	            nextDay: '[i morgen kl.] LT',
	            nextWeek: 'dddd [kl.] LT',
	            lastDay: '[i går kl.] LT',
	            lastWeek: '[forrige] dddd [kl.] LT',
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: 'om %s',
	            past: '%s siden',
	            s: 'noen sekunder',
	            ss: '%d sekunder',
	            m: 'ett minutt',
	            mm: '%d minutter',
	            h: 'en time',
	            hh: '%d timer',
	            d: 'en dag',
	            dd: '%d dager',
	            M: 'en måned',
	            MM: '%d måneder',
	            y: 'ett år',
	            yy: '%d år',
	        },
	        dayOfMonthOrdinalParse: /\d{1,2}\./,
	        ordinal: '%d.',
	        week: {
	            dow: 1, // Monday is the first day of the week.
	            doy: 4, // The week that contains Jan 4th is the first week of the year.
	        },
	    });
	
	    return nb;
	
	})));


/***/ }),
/* 460 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Nepalese [ne]
	//! author : suvash : https://github.com/suvash
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var symbolMap = {
	            '1': '१',
	            '2': '२',
	            '3': '३',
	            '4': '४',
	            '5': '५',
	            '6': '६',
	            '7': '७',
	            '8': '८',
	            '9': '९',
	            '0': '०',
	        },
	        numberMap = {
	            '१': '1',
	            '२': '2',
	            '३': '3',
	            '४': '4',
	            '५': '5',
	            '६': '6',
	            '७': '7',
	            '८': '8',
	            '९': '9',
	            '०': '0',
	        };
	
	    var ne = moment.defineLocale('ne', {
	        months: 'जनवरी_फेब्रुवरी_मार्च_अप्रिल_मई_जुन_जुलाई_अगष्ट_सेप्टेम्बर_अक्टोबर_नोभेम्बर_डिसेम्बर'.split(
	            '_'
	        ),
	        monthsShort: 'जन._फेब्रु._मार्च_अप्रि._मई_जुन_जुलाई._अग._सेप्ट._अक्टो._नोभे._डिसे.'.split(
	            '_'
	        ),
	        monthsParseExact: true,
	        weekdays: 'आइतबार_सोमबार_मङ्गलबार_बुधबार_बिहिबार_शुक्रबार_शनिबार'.split(
	            '_'
	        ),
	        weekdaysShort: 'आइत._सोम._मङ्गल._बुध._बिहि._शुक्र._शनि.'.split('_'),
	        weekdaysMin: 'आ._सो._मं._बु._बि._शु._श.'.split('_'),
	        weekdaysParseExact: true,
	        longDateFormat: {
	            LT: 'Aको h:mm बजे',
	            LTS: 'Aको h:mm:ss बजे',
	            L: 'DD/MM/YYYY',
	            LL: 'D MMMM YYYY',
	            LLL: 'D MMMM YYYY, Aको h:mm बजे',
	            LLLL: 'dddd, D MMMM YYYY, Aको h:mm बजे',
	        },
	        preparse: function (string) {
	            return string.replace(/[१२३४५६७८९०]/g, function (match) {
	                return numberMap[match];
	            });
	        },
	        postformat: function (string) {
	            return string.replace(/\d/g, function (match) {
	                return symbolMap[match];
	            });
	        },
	        meridiemParse: /राति|बिहान|दिउँसो|साँझ/,
	        meridiemHour: function (hour, meridiem) {
	            if (hour === 12) {
	                hour = 0;
	            }
	            if (meridiem === 'राति') {
	                return hour < 4 ? hour : hour + 12;
	            } else if (meridiem === 'बिहान') {
	                return hour;
	            } else if (meridiem === 'दिउँसो') {
	                return hour >= 10 ? hour : hour + 12;
	            } else if (meridiem === 'साँझ') {
	                return hour + 12;
	            }
	        },
	        meridiem: function (hour, minute, isLower) {
	            if (hour < 3) {
	                return 'राति';
	            } else if (hour < 12) {
	                return 'बिहान';
	            } else if (hour < 16) {
	                return 'दिउँसो';
	            } else if (hour < 20) {
	                return 'साँझ';
	            } else {
	                return 'राति';
	            }
	        },
	        calendar: {
	            sameDay: '[आज] LT',
	            nextDay: '[भोलि] LT',
	            nextWeek: '[आउँदो] dddd[,] LT',
	            lastDay: '[हिजो] LT',
	            lastWeek: '[गएको] dddd[,] LT',
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: '%sमा',
	            past: '%s अगाडि',
	            s: 'केही क्षण',
	            ss: '%d सेकेण्ड',
	            m: 'एक मिनेट',
	            mm: '%d मिनेट',
	            h: 'एक घण्टा',
	            hh: '%d घण्टा',
	            d: 'एक दिन',
	            dd: '%d दिन',
	            M: 'एक महिना',
	            MM: '%d महिना',
	            y: 'एक बर्ष',
	            yy: '%d बर्ष',
	        },
	        week: {
	            dow: 0, // Sunday is the first day of the week.
	            doy: 6, // The week that contains Jan 6th is the first week of the year.
	        },
	    });
	
	    return ne;
	
	})));


/***/ }),
/* 461 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Dutch (Belgium) [nl-be]
	//! author : Joris Röling : https://github.com/jorisroling
	//! author : Jacob Middag : https://github.com/middagj
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var monthsShortWithDots = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split(
	            '_'
	        ),
	        monthsShortWithoutDots = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split(
	            '_'
	        ),
	        monthsParse = [
	            /^jan/i,
	            /^feb/i,
	            /^maart|mrt.?$/i,
	            /^apr/i,
	            /^mei$/i,
	            /^jun[i.]?$/i,
	            /^jul[i.]?$/i,
	            /^aug/i,
	            /^sep/i,
	            /^okt/i,
	            /^nov/i,
	            /^dec/i,
	        ],
	        monthsRegex = /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i;
	
	    var nlBe = moment.defineLocale('nl-be', {
	        months: 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split(
	            '_'
	        ),
	        monthsShort: function (m, format) {
	            if (!m) {
	                return monthsShortWithDots;
	            } else if (/-MMM-/.test(format)) {
	                return monthsShortWithoutDots[m.month()];
	            } else {
	                return monthsShortWithDots[m.month()];
	            }
	        },
	
	        monthsRegex: monthsRegex,
	        monthsShortRegex: monthsRegex,
	        monthsStrictRegex: /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,
	        monthsShortStrictRegex: /^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,
	
	        monthsParse: monthsParse,
	        longMonthsParse: monthsParse,
	        shortMonthsParse: monthsParse,
	
	        weekdays: 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split(
	            '_'
	        ),
	        weekdaysShort: 'zo._ma._di._wo._do._vr._za.'.split('_'),
	        weekdaysMin: 'zo_ma_di_wo_do_vr_za'.split('_'),
	        weekdaysParseExact: true,
	        longDateFormat: {
	            LT: 'HH:mm',
	            LTS: 'HH:mm:ss',
	            L: 'DD/MM/YYYY',
	            LL: 'D MMMM YYYY',
	            LLL: 'D MMMM YYYY HH:mm',
	            LLLL: 'dddd D MMMM YYYY HH:mm',
	        },
	        calendar: {
	            sameDay: '[vandaag om] LT',
	            nextDay: '[morgen om] LT',
	            nextWeek: 'dddd [om] LT',
	            lastDay: '[gisteren om] LT',
	            lastWeek: '[afgelopen] dddd [om] LT',
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: 'over %s',
	            past: '%s geleden',
	            s: 'een paar seconden',
	            ss: '%d seconden',
	            m: 'één minuut',
	            mm: '%d minuten',
	            h: 'één uur',
	            hh: '%d uur',
	            d: 'één dag',
	            dd: '%d dagen',
	            M: 'één maand',
	            MM: '%d maanden',
	            y: 'één jaar',
	            yy: '%d jaar',
	        },
	        dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/,
	        ordinal: function (number) {
	            return (
	                number +
	                (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de')
	            );
	        },
	        week: {
	            dow: 1, // Monday is the first day of the week.
	            doy: 4, // The week that contains Jan 4th is the first week of the year.
	        },
	    });
	
	    return nlBe;
	
	})));


/***/ }),
/* 462 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Dutch [nl]
	//! author : Joris Röling : https://github.com/jorisroling
	//! author : Jacob Middag : https://github.com/middagj
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var monthsShortWithDots = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split(
	            '_'
	        ),
	        monthsShortWithoutDots = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split(
	            '_'
	        ),
	        monthsParse = [
	            /^jan/i,
	            /^feb/i,
	            /^maart|mrt.?$/i,
	            /^apr/i,
	            /^mei$/i,
	            /^jun[i.]?$/i,
	            /^jul[i.]?$/i,
	            /^aug/i,
	            /^sep/i,
	            /^okt/i,
	            /^nov/i,
	            /^dec/i,
	        ],
	        monthsRegex = /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i;
	
	    var nl = moment.defineLocale('nl', {
	        months: 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split(
	            '_'
	        ),
	        monthsShort: function (m, format) {
	            if (!m) {
	                return monthsShortWithDots;
	            } else if (/-MMM-/.test(format)) {
	                return monthsShortWithoutDots[m.month()];
	            } else {
	                return monthsShortWithDots[m.month()];
	            }
	        },
	
	        monthsRegex: monthsRegex,
	        monthsShortRegex: monthsRegex,
	        monthsStrictRegex: /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,
	        monthsShortStrictRegex: /^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,
	
	        monthsParse: monthsParse,
	        longMonthsParse: monthsParse,
	        shortMonthsParse: monthsParse,
	
	        weekdays: 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split(
	            '_'
	        ),
	        weekdaysShort: 'zo._ma._di._wo._do._vr._za.'.split('_'),
	        weekdaysMin: 'zo_ma_di_wo_do_vr_za'.split('_'),
	        weekdaysParseExact: true,
	        longDateFormat: {
	            LT: 'HH:mm',
	            LTS: 'HH:mm:ss',
	            L: 'DD-MM-YYYY',
	            LL: 'D MMMM YYYY',
	            LLL: 'D MMMM YYYY HH:mm',
	            LLLL: 'dddd D MMMM YYYY HH:mm',
	        },
	        calendar: {
	            sameDay: '[vandaag om] LT',
	            nextDay: '[morgen om] LT',
	            nextWeek: 'dddd [om] LT',
	            lastDay: '[gisteren om] LT',
	            lastWeek: '[afgelopen] dddd [om] LT',
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: 'over %s',
	            past: '%s geleden',
	            s: 'een paar seconden',
	            ss: '%d seconden',
	            m: 'één minuut',
	            mm: '%d minuten',
	            h: 'één uur',
	            hh: '%d uur',
	            d: 'één dag',
	            dd: '%d dagen',
	            M: 'één maand',
	            MM: '%d maanden',
	            y: 'één jaar',
	            yy: '%d jaar',
	        },
	        dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/,
	        ordinal: function (number) {
	            return (
	                number +
	                (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de')
	            );
	        },
	        week: {
	            dow: 1, // Monday is the first day of the week.
	            doy: 4, // The week that contains Jan 4th is the first week of the year.
	        },
	    });
	
	    return nl;
	
	})));


/***/ }),
/* 463 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Nynorsk [nn]
	//! authors : https://github.com/mechuwind
	//!           Stephen Ramthun : https://github.com/stephenramthun
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var nn = moment.defineLocale('nn', {
	        months: 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split(
	            '_'
	        ),
	        monthsShort: 'jan._feb._mars_apr._mai_juni_juli_aug._sep._okt._nov._des.'.split(
	            '_'
	        ),
	        monthsParseExact: true,
	        weekdays: 'sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag'.split('_'),
	        weekdaysShort: 'su._må._ty._on._to._fr._lau.'.split('_'),
	        weekdaysMin: 'su_må_ty_on_to_fr_la'.split('_'),
	        weekdaysParseExact: true,
	        longDateFormat: {
	            LT: 'HH:mm',
	            LTS: 'HH:mm:ss',
	            L: 'DD.MM.YYYY',
	            LL: 'D. MMMM YYYY',
	            LLL: 'D. MMMM YYYY [kl.] H:mm',
	            LLLL: 'dddd D. MMMM YYYY [kl.] HH:mm',
	        },
	        calendar: {
	            sameDay: '[I dag klokka] LT',
	            nextDay: '[I morgon klokka] LT',
	            nextWeek: 'dddd [klokka] LT',
	            lastDay: '[I går klokka] LT',
	            lastWeek: '[Føregåande] dddd [klokka] LT',
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: 'om %s',
	            past: '%s sidan',
	            s: 'nokre sekund',
	            ss: '%d sekund',
	            m: 'eit minutt',
	            mm: '%d minutt',
	            h: 'ein time',
	            hh: '%d timar',
	            d: 'ein dag',
	            dd: '%d dagar',
	            M: 'ein månad',
	            MM: '%d månader',
	            y: 'eit år',
	            yy: '%d år',
	        },
	        dayOfMonthOrdinalParse: /\d{1,2}\./,
	        ordinal: '%d.',
	        week: {
	            dow: 1, // Monday is the first day of the week.
	            doy: 4, // The week that contains Jan 4th is the first week of the year.
	        },
	    });
	
	    return nn;
	
	})));


/***/ }),
/* 464 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Occitan, lengadocian dialecte [oc-lnc]
	//! author : Quentin PAGÈS : https://github.com/Quenty31
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var ocLnc = moment.defineLocale('oc-lnc', {
	        months: {
	            standalone: 'genièr_febrièr_març_abril_mai_junh_julhet_agost_setembre_octòbre_novembre_decembre'.split(
	                '_'
	            ),
	            format: "de genièr_de febrièr_de març_d'abril_de mai_de junh_de julhet_d'agost_de setembre_d'octòbre_de novembre_de decembre".split(
	                '_'
	            ),
	            isFormat: /D[oD]?(\s)+MMMM/,
	        },
	        monthsShort: 'gen._febr._març_abr._mai_junh_julh._ago._set._oct._nov._dec.'.split(
	            '_'
	        ),
	        monthsParseExact: true,
	        weekdays: 'dimenge_diluns_dimars_dimècres_dijòus_divendres_dissabte'.split(
	            '_'
	        ),
	        weekdaysShort: 'dg._dl._dm._dc._dj._dv._ds.'.split('_'),
	        weekdaysMin: 'dg_dl_dm_dc_dj_dv_ds'.split('_'),
	        weekdaysParseExact: true,
	        longDateFormat: {
	            LT: 'H:mm',
	            LTS: 'H:mm:ss',
	            L: 'DD/MM/YYYY',
	            LL: 'D MMMM [de] YYYY',
	            ll: 'D MMM YYYY',
	            LLL: 'D MMMM [de] YYYY [a] H:mm',
	            lll: 'D MMM YYYY, H:mm',
	            LLLL: 'dddd D MMMM [de] YYYY [a] H:mm',
	            llll: 'ddd D MMM YYYY, H:mm',
	        },
	        calendar: {
	            sameDay: '[uèi a] LT',
	            nextDay: '[deman a] LT',
	            nextWeek: 'dddd [a] LT',
	            lastDay: '[ièr a] LT',
	            lastWeek: 'dddd [passat a] LT',
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: "d'aquí %s",
	            past: 'fa %s',
	            s: 'unas segondas',
	            ss: '%d segondas',
	            m: 'una minuta',
	            mm: '%d minutas',
	            h: 'una ora',
	            hh: '%d oras',
	            d: 'un jorn',
	            dd: '%d jorns',
	            M: 'un mes',
	            MM: '%d meses',
	            y: 'un an',
	            yy: '%d ans',
	        },
	        dayOfMonthOrdinalParse: /\d{1,2}(r|n|t|è|a)/,
	        ordinal: function (number, period) {
	            var output =
	                number === 1
	                    ? 'r'
	                    : number === 2
	                    ? 'n'
	                    : number === 3
	                    ? 'r'
	                    : number === 4
	                    ? 't'
	                    : 'è';
	            if (period === 'w' || period === 'W') {
	                output = 'a';
	            }
	            return number + output;
	        },
	        week: {
	            dow: 1, // Monday is the first day of the week.
	            doy: 4,
	        },
	    });
	
	    return ocLnc;
	
	})));


/***/ }),
/* 465 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Punjabi (India) [pa-in]
	//! author : Harpreet Singh : https://github.com/harpreetkhalsagtbit
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var symbolMap = {
	            '1': '੧',
	            '2': '੨',
	            '3': '੩',
	            '4': '੪',
	            '5': '੫',
	            '6': '੬',
	            '7': '੭',
	            '8': '੮',
	            '9': '੯',
	            '0': '੦',
	        },
	        numberMap = {
	            '੧': '1',
	            '੨': '2',
	            '੩': '3',
	            '੪': '4',
	            '੫': '5',
	            '੬': '6',
	            '੭': '7',
	            '੮': '8',
	            '੯': '9',
	            '੦': '0',
	        };
	
	    var paIn = moment.defineLocale('pa-in', {
	        // There are months name as per Nanakshahi Calendar but they are not used as rigidly in modern Punjabi.
	        months: 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split(
	            '_'
	        ),
	        monthsShort: 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split(
	            '_'
	        ),
	        weekdays: 'ਐਤਵਾਰ_ਸੋਮਵਾਰ_ਮੰਗਲਵਾਰ_ਬੁਧਵਾਰ_ਵੀਰਵਾਰ_ਸ਼ੁੱਕਰਵਾਰ_ਸ਼ਨੀਚਰਵਾਰ'.split(
	            '_'
	        ),
	        weekdaysShort: 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'),
	        weekdaysMin: 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'),
	        longDateFormat: {
	            LT: 'A h:mm ਵਜੇ',
	            LTS: 'A h:mm:ss ਵਜੇ',
	            L: 'DD/MM/YYYY',
	            LL: 'D MMMM YYYY',
	            LLL: 'D MMMM YYYY, A h:mm ਵਜੇ',
	            LLLL: 'dddd, D MMMM YYYY, A h:mm ਵਜੇ',
	        },
	        calendar: {
	            sameDay: '[ਅਜ] LT',
	            nextDay: '[ਕਲ] LT',
	            nextWeek: '[ਅਗਲਾ] dddd, LT',
	            lastDay: '[ਕਲ] LT',
	            lastWeek: '[ਪਿਛਲੇ] dddd, LT',
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: '%s ਵਿੱਚ',
	            past: '%s ਪਿਛਲੇ',
	            s: 'ਕੁਝ ਸਕਿੰਟ',
	            ss: '%d ਸਕਿੰਟ',
	            m: 'ਇਕ ਮਿੰਟ',
	            mm: '%d ਮਿੰਟ',
	            h: 'ਇੱਕ ਘੰਟਾ',
	            hh: '%d ਘੰਟੇ',
	            d: 'ਇੱਕ ਦਿਨ',
	            dd: '%d ਦਿਨ',
	            M: 'ਇੱਕ ਮਹੀਨਾ',
	            MM: '%d ਮਹੀਨੇ',
	            y: 'ਇੱਕ ਸਾਲ',
	            yy: '%d ਸਾਲ',
	        },
	        preparse: function (string) {
	            return string.replace(/[੧੨੩੪੫੬੭੮੯੦]/g, function (match) {
	                return numberMap[match];
	            });
	        },
	        postformat: function (string) {
	            return string.replace(/\d/g, function (match) {
	                return symbolMap[match];
	            });
	        },
	        // Punjabi notation for meridiems are quite fuzzy in practice. While there exists
	        // a rigid notion of a 'Pahar' it is not used as rigidly in modern Punjabi.
	        meridiemParse: /ਰਾਤ|ਸਵੇਰ|ਦੁਪਹਿਰ|ਸ਼ਾਮ/,
	        meridiemHour: function (hour, meridiem) {
	            if (hour === 12) {
	                hour = 0;
	            }
	            if (meridiem === 'ਰਾਤ') {
	                return hour < 4 ? hour : hour + 12;
	            } else if (meridiem === 'ਸਵੇਰ') {
	                return hour;
	            } else if (meridiem === 'ਦੁਪਹਿਰ') {
	                return hour >= 10 ? hour : hour + 12;
	            } else if (meridiem === 'ਸ਼ਾਮ') {
	                return hour + 12;
	            }
	        },
	        meridiem: function (hour, minute, isLower) {
	            if (hour < 4) {
	                return 'ਰਾਤ';
	            } else if (hour < 10) {
	                return 'ਸਵੇਰ';
	            } else if (hour < 17) {
	                return 'ਦੁਪਹਿਰ';
	            } else if (hour < 20) {
	                return 'ਸ਼ਾਮ';
	            } else {
	                return 'ਰਾਤ';
	            }
	        },
	        week: {
	            dow: 0, // Sunday is the first day of the week.
	            doy: 6, // The week that contains Jan 6th is the first week of the year.
	        },
	    });
	
	    return paIn;
	
	})));


/***/ }),
/* 466 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Polish [pl]
	//! author : Rafal Hirsz : https://github.com/evoL
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var monthsNominative = 'styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień'.split(
	            '_'
	        ),
	        monthsSubjective = 'stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia'.split(
	            '_'
	        );
	    function plural(n) {
	        return n % 10 < 5 && n % 10 > 1 && ~~(n / 10) % 10 !== 1;
	    }
	    function translate(number, withoutSuffix, key) {
	        var result = number + ' ';
	        switch (key) {
	            case 'ss':
	                return result + (plural(number) ? 'sekundy' : 'sekund');
	            case 'm':
	                return withoutSuffix ? 'minuta' : 'minutę';
	            case 'mm':
	                return result + (plural(number) ? 'minuty' : 'minut');
	            case 'h':
	                return withoutSuffix ? 'godzina' : 'godzinę';
	            case 'hh':
	                return result + (plural(number) ? 'godziny' : 'godzin');
	            case 'MM':
	                return result + (plural(number) ? 'miesiące' : 'miesięcy');
	            case 'yy':
	                return result + (plural(number) ? 'lata' : 'lat');
	        }
	    }
	
	    var pl = moment.defineLocale('pl', {
	        months: function (momentToFormat, format) {
	            if (!momentToFormat) {
	                return monthsNominative;
	            } else if (format === '') {
	                // Hack: if format empty we know this is used to generate
	                // RegExp by moment. Give then back both valid forms of months
	                // in RegExp ready format.
	                return (
	                    '(' +
	                    monthsSubjective[momentToFormat.month()] +
	                    '|' +
	                    monthsNominative[momentToFormat.month()] +
	                    ')'
	                );
	            } else if (/D MMMM/.test(format)) {
	                return monthsSubjective[momentToFormat.month()];
	            } else {
	                return monthsNominative[momentToFormat.month()];
	            }
	        },
	        monthsShort: 'sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru'.split('_'),
	        weekdays: 'niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota'.split(
	            '_'
	        ),
	        weekdaysShort: 'ndz_pon_wt_śr_czw_pt_sob'.split('_'),
	        weekdaysMin: 'Nd_Pn_Wt_Śr_Cz_Pt_So'.split('_'),
	        longDateFormat: {
	            LT: 'HH:mm',
	            LTS: 'HH:mm:ss',
	            L: 'DD.MM.YYYY',
	            LL: 'D MMMM YYYY',
	            LLL: 'D MMMM YYYY HH:mm',
	            LLLL: 'dddd, D MMMM YYYY HH:mm',
	        },
	        calendar: {
	            sameDay: '[Dziś o] LT',
	            nextDay: '[Jutro o] LT',
	            nextWeek: function () {
	                switch (this.day()) {
	                    case 0:
	                        return '[W niedzielę o] LT';
	
	                    case 2:
	                        return '[We wtorek o] LT';
	
	                    case 3:
	                        return '[W środę o] LT';
	
	                    case 6:
	                        return '[W sobotę o] LT';
	
	                    default:
	                        return '[W] dddd [o] LT';
	                }
	            },
	            lastDay: '[Wczoraj o] LT',
	            lastWeek: function () {
	                switch (this.day()) {
	                    case 0:
	                        return '[W zeszłą niedzielę o] LT';
	                    case 3:
	                        return '[W zeszłą środę o] LT';
	                    case 6:
	                        return '[W zeszłą sobotę o] LT';
	                    default:
	                        return '[W zeszły] dddd [o] LT';
	                }
	            },
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: 'za %s',
	            past: '%s temu',
	            s: 'kilka sekund',
	            ss: translate,
	            m: translate,
	            mm: translate,
	            h: translate,
	            hh: translate,
	            d: '1 dzień',
	            dd: '%d dni',
	            M: 'miesiąc',
	            MM: translate,
	            y: 'rok',
	            yy: translate,
	        },
	        dayOfMonthOrdinalParse: /\d{1,2}\./,
	        ordinal: '%d.',
	        week: {
	            dow: 1, // Monday is the first day of the week.
	            doy: 4, // The week that contains Jan 4th is the first week of the year.
	        },
	    });
	
	    return pl;
	
	})));


/***/ }),
/* 467 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Portuguese (Brazil) [pt-br]
	//! author : Caio Ribeiro Pereira : https://github.com/caio-ribeiro-pereira
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var ptBr = moment.defineLocale('pt-br', {
	        months: 'janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro'.split(
	            '_'
	        ),
	        monthsShort: 'jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez'.split('_'),
	        weekdays: 'domingo_segunda-feira_terça-feira_quarta-feira_quinta-feira_sexta-feira_sábado'.split(
	            '_'
	        ),
	        weekdaysShort: 'dom_seg_ter_qua_qui_sex_sáb'.split('_'),
	        weekdaysMin: 'do_2ª_3ª_4ª_5ª_6ª_sá'.split('_'),
	        weekdaysParseExact: true,
	        longDateFormat: {
	            LT: 'HH:mm',
	            LTS: 'HH:mm:ss',
	            L: 'DD/MM/YYYY',
	            LL: 'D [de] MMMM [de] YYYY',
	            LLL: 'D [de] MMMM [de] YYYY [às] HH:mm',
	            LLLL: 'dddd, D [de] MMMM [de] YYYY [às] HH:mm',
	        },
	        calendar: {
	            sameDay: '[Hoje às] LT',
	            nextDay: '[Amanhã às] LT',
	            nextWeek: 'dddd [às] LT',
	            lastDay: '[Ontem às] LT',
	            lastWeek: function () {
	                return this.day() === 0 || this.day() === 6
	                    ? '[Último] dddd [às] LT' // Saturday + Sunday
	                    : '[Última] dddd [às] LT'; // Monday - Friday
	            },
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: 'em %s',
	            past: 'há %s',
	            s: 'poucos segundos',
	            ss: '%d segundos',
	            m: 'um minuto',
	            mm: '%d minutos',
	            h: 'uma hora',
	            hh: '%d horas',
	            d: 'um dia',
	            dd: '%d dias',
	            M: 'um mês',
	            MM: '%d meses',
	            y: 'um ano',
	            yy: '%d anos',
	        },
	        dayOfMonthOrdinalParse: /\d{1,2}º/,
	        ordinal: '%dº',
	    });
	
	    return ptBr;
	
	})));


/***/ }),
/* 468 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Portuguese [pt]
	//! author : Jefferson : https://github.com/jalex79
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var pt = moment.defineLocale('pt', {
	        months: 'janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro'.split(
	            '_'
	        ),
	        monthsShort: 'jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez'.split('_'),
	        weekdays: 'Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado'.split(
	            '_'
	        ),
	        weekdaysShort: 'Dom_Seg_Ter_Qua_Qui_Sex_Sáb'.split('_'),
	        weekdaysMin: 'Do_2ª_3ª_4ª_5ª_6ª_Sá'.split('_'),
	        weekdaysParseExact: true,
	        longDateFormat: {
	            LT: 'HH:mm',
	            LTS: 'HH:mm:ss',
	            L: 'DD/MM/YYYY',
	            LL: 'D [de] MMMM [de] YYYY',
	            LLL: 'D [de] MMMM [de] YYYY HH:mm',
	            LLLL: 'dddd, D [de] MMMM [de] YYYY HH:mm',
	        },
	        calendar: {
	            sameDay: '[Hoje às] LT',
	            nextDay: '[Amanhã às] LT',
	            nextWeek: 'dddd [às] LT',
	            lastDay: '[Ontem às] LT',
	            lastWeek: function () {
	                return this.day() === 0 || this.day() === 6
	                    ? '[Último] dddd [às] LT' // Saturday + Sunday
	                    : '[Última] dddd [às] LT'; // Monday - Friday
	            },
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: 'em %s',
	            past: 'há %s',
	            s: 'segundos',
	            ss: '%d segundos',
	            m: 'um minuto',
	            mm: '%d minutos',
	            h: 'uma hora',
	            hh: '%d horas',
	            d: 'um dia',
	            dd: '%d dias',
	            M: 'um mês',
	            MM: '%d meses',
	            y: 'um ano',
	            yy: '%d anos',
	        },
	        dayOfMonthOrdinalParse: /\d{1,2}º/,
	        ordinal: '%dº',
	        week: {
	            dow: 1, // Monday is the first day of the week.
	            doy: 4, // The week that contains Jan 4th is the first week of the year.
	        },
	    });
	
	    return pt;
	
	})));


/***/ }),
/* 469 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Romanian [ro]
	//! author : Vlad Gurdiga : https://github.com/gurdiga
	//! author : Valentin Agachi : https://github.com/avaly
	//! author : Emanuel Cepoi : https://github.com/cepem
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    function relativeTimeWithPlural(number, withoutSuffix, key) {
	        var format = {
	                ss: 'secunde',
	                mm: 'minute',
	                hh: 'ore',
	                dd: 'zile',
	                MM: 'luni',
	                yy: 'ani',
	            },
	            separator = ' ';
	        if (number % 100 >= 20 || (number >= 100 && number % 100 === 0)) {
	            separator = ' de ';
	        }
	        return number + separator + format[key];
	    }
	
	    var ro = moment.defineLocale('ro', {
	        months: 'ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie'.split(
	            '_'
	        ),
	        monthsShort: 'ian._feb._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.'.split(
	            '_'
	        ),
	        monthsParseExact: true,
	        weekdays: 'duminică_luni_marți_miercuri_joi_vineri_sâmbătă'.split('_'),
	        weekdaysShort: 'Dum_Lun_Mar_Mie_Joi_Vin_Sâm'.split('_'),
	        weekdaysMin: 'Du_Lu_Ma_Mi_Jo_Vi_Sâ'.split('_'),
	        longDateFormat: {
	            LT: 'H:mm',
	            LTS: 'H:mm:ss',
	            L: 'DD.MM.YYYY',
	            LL: 'D MMMM YYYY',
	            LLL: 'D MMMM YYYY H:mm',
	            LLLL: 'dddd, D MMMM YYYY H:mm',
	        },
	        calendar: {
	            sameDay: '[azi la] LT',
	            nextDay: '[mâine la] LT',
	            nextWeek: 'dddd [la] LT',
	            lastDay: '[ieri la] LT',
	            lastWeek: '[fosta] dddd [la] LT',
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: 'peste %s',
	            past: '%s în urmă',
	            s: 'câteva secunde',
	            ss: relativeTimeWithPlural,
	            m: 'un minut',
	            mm: relativeTimeWithPlural,
	            h: 'o oră',
	            hh: relativeTimeWithPlural,
	            d: 'o zi',
	            dd: relativeTimeWithPlural,
	            M: 'o lună',
	            MM: relativeTimeWithPlural,
	            y: 'un an',
	            yy: relativeTimeWithPlural,
	        },
	        week: {
	            dow: 1, // Monday is the first day of the week.
	            doy: 7, // The week that contains Jan 7th is the first week of the year.
	        },
	    });
	
	    return ro;
	
	})));


/***/ }),
/* 470 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Russian [ru]
	//! author : Viktorminator : https://github.com/Viktorminator
	//! author : Menelion Elensúle : https://github.com/Oire
	//! author : Коренберг Марк : https://github.com/socketpair
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    function plural(word, num) {
	        var forms = word.split('_');
	        return num % 10 === 1 && num % 100 !== 11
	            ? forms[0]
	            : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20)
	            ? forms[1]
	            : forms[2];
	    }
	    function relativeTimeWithPlural(number, withoutSuffix, key) {
	        var format = {
	            ss: withoutSuffix ? 'секунда_секунды_секунд' : 'секунду_секунды_секунд',
	            mm: withoutSuffix ? 'минута_минуты_минут' : 'минуту_минуты_минут',
	            hh: 'час_часа_часов',
	            dd: 'день_дня_дней',
	            MM: 'месяц_месяца_месяцев',
	            yy: 'год_года_лет',
	        };
	        if (key === 'm') {
	            return withoutSuffix ? 'минута' : 'минуту';
	        } else {
	            return number + ' ' + plural(format[key], +number);
	        }
	    }
	    var monthsParse = [
	        /^янв/i,
	        /^фев/i,
	        /^мар/i,
	        /^апр/i,
	        /^ма[йя]/i,
	        /^июн/i,
	        /^июл/i,
	        /^авг/i,
	        /^сен/i,
	        /^окт/i,
	        /^ноя/i,
	        /^дек/i,
	    ];
	
	    // http://new.gramota.ru/spravka/rules/139-prop : § 103
	    // Сокращения месяцев: http://new.gramota.ru/spravka/buro/search-answer?s=242637
	    // CLDR data:          http://www.unicode.org/cldr/charts/28/summary/ru.html#1753
	    var ru = moment.defineLocale('ru', {
	        months: {
	            format: 'января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря'.split(
	                '_'
	            ),
	            standalone: 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split(
	                '_'
	            ),
	        },
	        monthsShort: {
	            // по CLDR именно "июл." и "июн.", но какой смысл менять букву на точку?
	            format: 'янв._февр._мар._апр._мая_июня_июля_авг._сент._окт._нояб._дек.'.split(
	                '_'
	            ),
	            standalone: 'янв._февр._март_апр._май_июнь_июль_авг._сент._окт._нояб._дек.'.split(
	                '_'
	            ),
	        },
	        weekdays: {
	            standalone: 'воскресенье_понедельник_вторник_среда_четверг_пятница_суббота'.split(
	                '_'
	            ),
	            format: 'воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу'.split(
	                '_'
	            ),
	            isFormat: /\[ ?[Вв] ?(?:прошлую|следующую|эту)? ?] ?dddd/,
	        },
	        weekdaysShort: 'вс_пн_вт_ср_чт_пт_сб'.split('_'),
	        weekdaysMin: 'вс_пн_вт_ср_чт_пт_сб'.split('_'),
	        monthsParse: monthsParse,
	        longMonthsParse: monthsParse,
	        shortMonthsParse: monthsParse,
	
	        // полные названия с падежами, по три буквы, для некоторых, по 4 буквы, сокращения с точкой и без точки
	        monthsRegex: /^(январ[ья]|янв\.?|феврал[ья]|февр?\.?|марта?|мар\.?|апрел[ья]|апр\.?|ма[йя]|июн[ья]|июн\.?|июл[ья]|июл\.?|августа?|авг\.?|сентябр[ья]|сент?\.?|октябр[ья]|окт\.?|ноябр[ья]|нояб?\.?|декабр[ья]|дек\.?)/i,
	
	        // копия предыдущего
	        monthsShortRegex: /^(январ[ья]|янв\.?|феврал[ья]|февр?\.?|марта?|мар\.?|апрел[ья]|апр\.?|ма[йя]|июн[ья]|июн\.?|июл[ья]|июл\.?|августа?|авг\.?|сентябр[ья]|сент?\.?|октябр[ья]|окт\.?|ноябр[ья]|нояб?\.?|декабр[ья]|дек\.?)/i,
	
	        // полные названия с падежами
	        monthsStrictRegex: /^(январ[яь]|феврал[яь]|марта?|апрел[яь]|ма[яй]|июн[яь]|июл[яь]|августа?|сентябр[яь]|октябр[яь]|ноябр[яь]|декабр[яь])/i,
	
	        // Выражение, которое соответствует только сокращённым формам
	        monthsShortStrictRegex: /^(янв\.|февр?\.|мар[т.]|апр\.|ма[яй]|июн[ья.]|июл[ья.]|авг\.|сент?\.|окт\.|нояб?\.|дек\.)/i,
	        longDateFormat: {
	            LT: 'H:mm',
	            LTS: 'H:mm:ss',
	            L: 'DD.MM.YYYY',
	            LL: 'D MMMM YYYY г.',
	            LLL: 'D MMMM YYYY г., H:mm',
	            LLLL: 'dddd, D MMMM YYYY г., H:mm',
	        },
	        calendar: {
	            sameDay: '[Сегодня, в] LT',
	            nextDay: '[Завтра, в] LT',
	            lastDay: '[Вчера, в] LT',
	            nextWeek: function (now) {
	                if (now.week() !== this.week()) {
	                    switch (this.day()) {
	                        case 0:
	                            return '[В следующее] dddd, [в] LT';
	                        case 1:
	                        case 2:
	                        case 4:
	                            return '[В следующий] dddd, [в] LT';
	                        case 3:
	                        case 5:
	                        case 6:
	                            return '[В следующую] dddd, [в] LT';
	                    }
	                } else {
	                    if (this.day() === 2) {
	                        return '[Во] dddd, [в] LT';
	                    } else {
	                        return '[В] dddd, [в] LT';
	                    }
	                }
	            },
	            lastWeek: function (now) {
	                if (now.week() !== this.week()) {
	                    switch (this.day()) {
	                        case 0:
	                            return '[В прошлое] dddd, [в] LT';
	                        case 1:
	                        case 2:
	                        case 4:
	                            return '[В прошлый] dddd, [в] LT';
	                        case 3:
	                        case 5:
	                        case 6:
	                            return '[В прошлую] dddd, [в] LT';
	                    }
	                } else {
	                    if (this.day() === 2) {
	                        return '[Во] dddd, [в] LT';
	                    } else {
	                        return '[В] dddd, [в] LT';
	                    }
	                }
	            },
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: 'через %s',
	            past: '%s назад',
	            s: 'несколько секунд',
	            ss: relativeTimeWithPlural,
	            m: relativeTimeWithPlural,
	            mm: relativeTimeWithPlural,
	            h: 'час',
	            hh: relativeTimeWithPlural,
	            d: 'день',
	            dd: relativeTimeWithPlural,
	            M: 'месяц',
	            MM: relativeTimeWithPlural,
	            y: 'год',
	            yy: relativeTimeWithPlural,
	        },
	        meridiemParse: /ночи|утра|дня|вечера/i,
	        isPM: function (input) {
	            return /^(дня|вечера)$/.test(input);
	        },
	        meridiem: function (hour, minute, isLower) {
	            if (hour < 4) {
	                return 'ночи';
	            } else if (hour < 12) {
	                return 'утра';
	            } else if (hour < 17) {
	                return 'дня';
	            } else {
	                return 'вечера';
	            }
	        },
	        dayOfMonthOrdinalParse: /\d{1,2}-(й|го|я)/,
	        ordinal: function (number, period) {
	            switch (period) {
	                case 'M':
	                case 'd':
	                case 'DDD':
	                    return number + '-й';
	                case 'D':
	                    return number + '-го';
	                case 'w':
	                case 'W':
	                    return number + '-я';
	                default:
	                    return number;
	            }
	        },
	        week: {
	            dow: 1, // Monday is the first day of the week.
	            doy: 4, // The week that contains Jan 4th is the first week of the year.
	        },
	    });
	
	    return ru;
	
	})));


/***/ }),
/* 471 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Sindhi [sd]
	//! author : Narain Sagar : https://github.com/narainsagar
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var months = [
	            'جنوري',
	            'فيبروري',
	            'مارچ',
	            'اپريل',
	            'مئي',
	            'جون',
	            'جولاءِ',
	            'آگسٽ',
	            'سيپٽمبر',
	            'آڪٽوبر',
	            'نومبر',
	            'ڊسمبر',
	        ],
	        days = ['آچر', 'سومر', 'اڱارو', 'اربع', 'خميس', 'جمع', 'ڇنڇر'];
	
	    var sd = moment.defineLocale('sd', {
	        months: months,
	        monthsShort: months,
	        weekdays: days,
	        weekdaysShort: days,
	        weekdaysMin: days,
	        longDateFormat: {
	            LT: 'HH:mm',
	            LTS: 'HH:mm:ss',
	            L: 'DD/MM/YYYY',
	            LL: 'D MMMM YYYY',
	            LLL: 'D MMMM YYYY HH:mm',
	            LLLL: 'dddd، D MMMM YYYY HH:mm',
	        },
	        meridiemParse: /صبح|شام/,
	        isPM: function (input) {
	            return 'شام' === input;
	        },
	        meridiem: function (hour, minute, isLower) {
	            if (hour < 12) {
	                return 'صبح';
	            }
	            return 'شام';
	        },
	        calendar: {
	            sameDay: '[اڄ] LT',
	            nextDay: '[سڀاڻي] LT',
	            nextWeek: 'dddd [اڳين هفتي تي] LT',
	            lastDay: '[ڪالهه] LT',
	            lastWeek: '[گزريل هفتي] dddd [تي] LT',
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: '%s پوء',
	            past: '%s اڳ',
	            s: 'چند سيڪنڊ',
	            ss: '%d سيڪنڊ',
	            m: 'هڪ منٽ',
	            mm: '%d منٽ',
	            h: 'هڪ ڪلاڪ',
	            hh: '%d ڪلاڪ',
	            d: 'هڪ ڏينهن',
	            dd: '%d ڏينهن',
	            M: 'هڪ مهينو',
	            MM: '%d مهينا',
	            y: 'هڪ سال',
	            yy: '%d سال',
	        },
	        preparse: function (string) {
	            return string.replace(/،/g, ',');
	        },
	        postformat: function (string) {
	            return string.replace(/,/g, '،');
	        },
	        week: {
	            dow: 1, // Monday is the first day of the week.
	            doy: 4, // The week that contains Jan 4th is the first week of the year.
	        },
	    });
	
	    return sd;
	
	})));


/***/ }),
/* 472 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Northern Sami [se]
	//! authors : Bård Rolstad Henriksen : https://github.com/karamell
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var se = moment.defineLocale('se', {
	        months: 'ođđajagemánnu_guovvamánnu_njukčamánnu_cuoŋománnu_miessemánnu_geassemánnu_suoidnemánnu_borgemánnu_čakčamánnu_golggotmánnu_skábmamánnu_juovlamánnu'.split(
	            '_'
	        ),
	        monthsShort: 'ođđj_guov_njuk_cuo_mies_geas_suoi_borg_čakč_golg_skáb_juov'.split(
	            '_'
	        ),
	        weekdays: 'sotnabeaivi_vuossárga_maŋŋebárga_gaskavahkku_duorastat_bearjadat_lávvardat'.split(
	            '_'
	        ),
	        weekdaysShort: 'sotn_vuos_maŋ_gask_duor_bear_láv'.split('_'),
	        weekdaysMin: 's_v_m_g_d_b_L'.split('_'),
	        longDateFormat: {
	            LT: 'HH:mm',
	            LTS: 'HH:mm:ss',
	            L: 'DD.MM.YYYY',
	            LL: 'MMMM D. [b.] YYYY',
	            LLL: 'MMMM D. [b.] YYYY [ti.] HH:mm',
	            LLLL: 'dddd, MMMM D. [b.] YYYY [ti.] HH:mm',
	        },
	        calendar: {
	            sameDay: '[otne ti] LT',
	            nextDay: '[ihttin ti] LT',
	            nextWeek: 'dddd [ti] LT',
	            lastDay: '[ikte ti] LT',
	            lastWeek: '[ovddit] dddd [ti] LT',
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: '%s geažes',
	            past: 'maŋit %s',
	            s: 'moadde sekunddat',
	            ss: '%d sekunddat',
	            m: 'okta minuhta',
	            mm: '%d minuhtat',
	            h: 'okta diimmu',
	            hh: '%d diimmut',
	            d: 'okta beaivi',
	            dd: '%d beaivvit',
	            M: 'okta mánnu',
	            MM: '%d mánut',
	            y: 'okta jahki',
	            yy: '%d jagit',
	        },
	        dayOfMonthOrdinalParse: /\d{1,2}\./,
	        ordinal: '%d.',
	        week: {
	            dow: 1, // Monday is the first day of the week.
	            doy: 4, // The week that contains Jan 4th is the first week of the year.
	        },
	    });
	
	    return se;
	
	})));


/***/ }),
/* 473 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Sinhalese [si]
	//! author : Sampath Sitinamaluwa : https://github.com/sampathsris
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    /*jshint -W100*/
	    var si = moment.defineLocale('si', {
	        months: 'ජනවාරි_පෙබරවාරි_මාර්තු_අප්‍රේල්_මැයි_ජූනි_ජූලි_අගෝස්තු_සැප්තැම්බර්_ඔක්තෝබර්_නොවැම්බර්_දෙසැම්බර්'.split(
	            '_'
	        ),
	        monthsShort: 'ජන_පෙබ_මාර්_අප්_මැයි_ජූනි_ජූලි_අගෝ_සැප්_ඔක්_නොවැ_දෙසැ'.split(
	            '_'
	        ),
	        weekdays: 'ඉරිදා_සඳුදා_අඟහරුවාදා_බදාදා_බ්‍රහස්පතින්දා_සිකුරාදා_සෙනසුරාදා'.split(
	            '_'
	        ),
	        weekdaysShort: 'ඉරි_සඳු_අඟ_බදා_බ්‍රහ_සිකු_සෙන'.split('_'),
	        weekdaysMin: 'ඉ_ස_අ_බ_බ්‍ර_සි_සෙ'.split('_'),
	        weekdaysParseExact: true,
	        longDateFormat: {
	            LT: 'a h:mm',
	            LTS: 'a h:mm:ss',
	            L: 'YYYY/MM/DD',
	            LL: 'YYYY MMMM D',
	            LLL: 'YYYY MMMM D, a h:mm',
	            LLLL: 'YYYY MMMM D [වැනි] dddd, a h:mm:ss',
	        },
	        calendar: {
	            sameDay: '[අද] LT[ට]',
	            nextDay: '[හෙට] LT[ට]',
	            nextWeek: 'dddd LT[ට]',
	            lastDay: '[ඊයේ] LT[ට]',
	            lastWeek: '[පසුගිය] dddd LT[ට]',
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: '%sකින්',
	            past: '%sකට පෙර',
	            s: 'තත්පර කිහිපය',
	            ss: 'තත්පර %d',
	            m: 'මිනිත්තුව',
	            mm: 'මිනිත්තු %d',
	            h: 'පැය',
	            hh: 'පැය %d',
	            d: 'දිනය',
	            dd: 'දින %d',
	            M: 'මාසය',
	            MM: 'මාස %d',
	            y: 'වසර',
	            yy: 'වසර %d',
	        },
	        dayOfMonthOrdinalParse: /\d{1,2} වැනි/,
	        ordinal: function (number) {
	            return number + ' වැනි';
	        },
	        meridiemParse: /පෙර වරු|පස් වරු|පෙ.ව|ප.ව./,
	        isPM: function (input) {
	            return input === 'ප.ව.' || input === 'පස් වරු';
	        },
	        meridiem: function (hours, minutes, isLower) {
	            if (hours > 11) {
	                return isLower ? 'ප.ව.' : 'පස් වරු';
	            } else {
	                return isLower ? 'පෙ.ව.' : 'පෙර වරු';
	            }
	        },
	    });
	
	    return si;
	
	})));


/***/ }),
/* 474 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Slovak [sk]
	//! author : Martin Minka : https://github.com/k2s
	//! based on work of petrbela : https://github.com/petrbela
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var months = 'január_február_marec_apríl_máj_jún_júl_august_september_október_november_december'.split(
	            '_'
	        ),
	        monthsShort = 'jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec'.split('_');
	    function plural(n) {
	        return n > 1 && n < 5;
	    }
	    function translate(number, withoutSuffix, key, isFuture) {
	        var result = number + ' ';
	        switch (key) {
	            case 's': // a few seconds / in a few seconds / a few seconds ago
	                return withoutSuffix || isFuture ? 'pár sekúnd' : 'pár sekundami';
	            case 'ss': // 9 seconds / in 9 seconds / 9 seconds ago
	                if (withoutSuffix || isFuture) {
	                    return result + (plural(number) ? 'sekundy' : 'sekúnd');
	                } else {
	                    return result + 'sekundami';
	                }
	            case 'm': // a minute / in a minute / a minute ago
	                return withoutSuffix ? 'minúta' : isFuture ? 'minútu' : 'minútou';
	            case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago
	                if (withoutSuffix || isFuture) {
	                    return result + (plural(number) ? 'minúty' : 'minút');
	                } else {
	                    return result + 'minútami';
	                }
	            case 'h': // an hour / in an hour / an hour ago
	                return withoutSuffix ? 'hodina' : isFuture ? 'hodinu' : 'hodinou';
	            case 'hh': // 9 hours / in 9 hours / 9 hours ago
	                if (withoutSuffix || isFuture) {
	                    return result + (plural(number) ? 'hodiny' : 'hodín');
	                } else {
	                    return result + 'hodinami';
	                }
	            case 'd': // a day / in a day / a day ago
	                return withoutSuffix || isFuture ? 'deň' : 'dňom';
	            case 'dd': // 9 days / in 9 days / 9 days ago
	                if (withoutSuffix || isFuture) {
	                    return result + (plural(number) ? 'dni' : 'dní');
	                } else {
	                    return result + 'dňami';
	                }
	            case 'M': // a month / in a month / a month ago
	                return withoutSuffix || isFuture ? 'mesiac' : 'mesiacom';
	            case 'MM': // 9 months / in 9 months / 9 months ago
	                if (withoutSuffix || isFuture) {
	                    return result + (plural(number) ? 'mesiace' : 'mesiacov');
	                } else {
	                    return result + 'mesiacmi';
	                }
	            case 'y': // a year / in a year / a year ago
	                return withoutSuffix || isFuture ? 'rok' : 'rokom';
	            case 'yy': // 9 years / in 9 years / 9 years ago
	                if (withoutSuffix || isFuture) {
	                    return result + (plural(number) ? 'roky' : 'rokov');
	                } else {
	                    return result + 'rokmi';
	                }
	        }
	    }
	
	    var sk = moment.defineLocale('sk', {
	        months: months,
	        monthsShort: monthsShort,
	        weekdays: 'nedeľa_pondelok_utorok_streda_štvrtok_piatok_sobota'.split('_'),
	        weekdaysShort: 'ne_po_ut_st_št_pi_so'.split('_'),
	        weekdaysMin: 'ne_po_ut_st_št_pi_so'.split('_'),
	        longDateFormat: {
	            LT: 'H:mm',
	            LTS: 'H:mm:ss',
	            L: 'DD.MM.YYYY',
	            LL: 'D. MMMM YYYY',
	            LLL: 'D. MMMM YYYY H:mm',
	            LLLL: 'dddd D. MMMM YYYY H:mm',
	        },
	        calendar: {
	            sameDay: '[dnes o] LT',
	            nextDay: '[zajtra o] LT',
	            nextWeek: function () {
	                switch (this.day()) {
	                    case 0:
	                        return '[v nedeľu o] LT';
	                    case 1:
	                    case 2:
	                        return '[v] dddd [o] LT';
	                    case 3:
	                        return '[v stredu o] LT';
	                    case 4:
	                        return '[vo štvrtok o] LT';
	                    case 5:
	                        return '[v piatok o] LT';
	                    case 6:
	                        return '[v sobotu o] LT';
	                }
	            },
	            lastDay: '[včera o] LT',
	            lastWeek: function () {
	                switch (this.day()) {
	                    case 0:
	                        return '[minulú nedeľu o] LT';
	                    case 1:
	                    case 2:
	                        return '[minulý] dddd [o] LT';
	                    case 3:
	                        return '[minulú stredu o] LT';
	                    case 4:
	                    case 5:
	                        return '[minulý] dddd [o] LT';
	                    case 6:
	                        return '[minulú sobotu o] LT';
	                }
	            },
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: 'za %s',
	            past: 'pred %s',
	            s: translate,
	            ss: translate,
	            m: translate,
	            mm: translate,
	            h: translate,
	            hh: translate,
	            d: translate,
	            dd: translate,
	            M: translate,
	            MM: translate,
	            y: translate,
	            yy: translate,
	        },
	        dayOfMonthOrdinalParse: /\d{1,2}\./,
	        ordinal: '%d.',
	        week: {
	            dow: 1, // Monday is the first day of the week.
	            doy: 4, // The week that contains Jan 4th is the first week of the year.
	        },
	    });
	
	    return sk;
	
	})));


/***/ }),
/* 475 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Slovenian [sl]
	//! author : Robert Sedovšek : https://github.com/sedovsek
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    function processRelativeTime(number, withoutSuffix, key, isFuture) {
	        var result = number + ' ';
	        switch (key) {
	            case 's':
	                return withoutSuffix || isFuture
	                    ? 'nekaj sekund'
	                    : 'nekaj sekundami';
	            case 'ss':
	                if (number === 1) {
	                    result += withoutSuffix ? 'sekundo' : 'sekundi';
	                } else if (number === 2) {
	                    result += withoutSuffix || isFuture ? 'sekundi' : 'sekundah';
	                } else if (number < 5) {
	                    result += withoutSuffix || isFuture ? 'sekunde' : 'sekundah';
	                } else {
	                    result += 'sekund';
	                }
	                return result;
	            case 'm':
	                return withoutSuffix ? 'ena minuta' : 'eno minuto';
	            case 'mm':
	                if (number === 1) {
	                    result += withoutSuffix ? 'minuta' : 'minuto';
	                } else if (number === 2) {
	                    result += withoutSuffix || isFuture ? 'minuti' : 'minutama';
	                } else if (number < 5) {
	                    result += withoutSuffix || isFuture ? 'minute' : 'minutami';
	                } else {
	                    result += withoutSuffix || isFuture ? 'minut' : 'minutami';
	                }
	                return result;
	            case 'h':
	                return withoutSuffix ? 'ena ura' : 'eno uro';
	            case 'hh':
	                if (number === 1) {
	                    result += withoutSuffix ? 'ura' : 'uro';
	                } else if (number === 2) {
	                    result += withoutSuffix || isFuture ? 'uri' : 'urama';
	                } else if (number < 5) {
	                    result += withoutSuffix || isFuture ? 'ure' : 'urami';
	                } else {
	                    result += withoutSuffix || isFuture ? 'ur' : 'urami';
	                }
	                return result;
	            case 'd':
	                return withoutSuffix || isFuture ? 'en dan' : 'enim dnem';
	            case 'dd':
	                if (number === 1) {
	                    result += withoutSuffix || isFuture ? 'dan' : 'dnem';
	                } else if (number === 2) {
	                    result += withoutSuffix || isFuture ? 'dni' : 'dnevoma';
	                } else {
	                    result += withoutSuffix || isFuture ? 'dni' : 'dnevi';
	                }
	                return result;
	            case 'M':
	                return withoutSuffix || isFuture ? 'en mesec' : 'enim mesecem';
	            case 'MM':
	                if (number === 1) {
	                    result += withoutSuffix || isFuture ? 'mesec' : 'mesecem';
	                } else if (number === 2) {
	                    result += withoutSuffix || isFuture ? 'meseca' : 'mesecema';
	                } else if (number < 5) {
	                    result += withoutSuffix || isFuture ? 'mesece' : 'meseci';
	                } else {
	                    result += withoutSuffix || isFuture ? 'mesecev' : 'meseci';
	                }
	                return result;
	            case 'y':
	                return withoutSuffix || isFuture ? 'eno leto' : 'enim letom';
	            case 'yy':
	                if (number === 1) {
	                    result += withoutSuffix || isFuture ? 'leto' : 'letom';
	                } else if (number === 2) {
	                    result += withoutSuffix || isFuture ? 'leti' : 'letoma';
	                } else if (number < 5) {
	                    result += withoutSuffix || isFuture ? 'leta' : 'leti';
	                } else {
	                    result += withoutSuffix || isFuture ? 'let' : 'leti';
	                }
	                return result;
	        }
	    }
	
	    var sl = moment.defineLocale('sl', {
	        months: 'januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december'.split(
	            '_'
	        ),
	        monthsShort: 'jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.'.split(
	            '_'
	        ),
	        monthsParseExact: true,
	        weekdays: 'nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota'.split('_'),
	        weekdaysShort: 'ned._pon._tor._sre._čet._pet._sob.'.split('_'),
	        weekdaysMin: 'ne_po_to_sr_če_pe_so'.split('_'),
	        weekdaysParseExact: true,
	        longDateFormat: {
	            LT: 'H:mm',
	            LTS: 'H:mm:ss',
	            L: 'DD. MM. YYYY',
	            LL: 'D. MMMM YYYY',
	            LLL: 'D. MMMM YYYY H:mm',
	            LLLL: 'dddd, D. MMMM YYYY H:mm',
	        },
	        calendar: {
	            sameDay: '[danes ob] LT',
	            nextDay: '[jutri ob] LT',
	
	            nextWeek: function () {
	                switch (this.day()) {
	                    case 0:
	                        return '[v] [nedeljo] [ob] LT';
	                    case 3:
	                        return '[v] [sredo] [ob] LT';
	                    case 6:
	                        return '[v] [soboto] [ob] LT';
	                    case 1:
	                    case 2:
	                    case 4:
	                    case 5:
	                        return '[v] dddd [ob] LT';
	                }
	            },
	            lastDay: '[včeraj ob] LT',
	            lastWeek: function () {
	                switch (this.day()) {
	                    case 0:
	                        return '[prejšnjo] [nedeljo] [ob] LT';
	                    case 3:
	                        return '[prejšnjo] [sredo] [ob] LT';
	                    case 6:
	                        return '[prejšnjo] [soboto] [ob] LT';
	                    case 1:
	                    case 2:
	                    case 4:
	                    case 5:
	                        return '[prejšnji] dddd [ob] LT';
	                }
	            },
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: 'čez %s',
	            past: 'pred %s',
	            s: processRelativeTime,
	            ss: processRelativeTime,
	            m: processRelativeTime,
	            mm: processRelativeTime,
	            h: processRelativeTime,
	            hh: processRelativeTime,
	            d: processRelativeTime,
	            dd: processRelativeTime,
	            M: processRelativeTime,
	            MM: processRelativeTime,
	            y: processRelativeTime,
	            yy: processRelativeTime,
	        },
	        dayOfMonthOrdinalParse: /\d{1,2}\./,
	        ordinal: '%d.',
	        week: {
	            dow: 1, // Monday is the first day of the week.
	            doy: 7, // The week that contains Jan 7th is the first week of the year.
	        },
	    });
	
	    return sl;
	
	})));


/***/ }),
/* 476 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Albanian [sq]
	//! author : Flakërim Ismani : https://github.com/flakerimi
	//! author : Menelion Elensúle : https://github.com/Oire
	//! author : Oerd Cukalla : https://github.com/oerd
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var sq = moment.defineLocale('sq', {
	        months: 'Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_Nëntor_Dhjetor'.split(
	            '_'
	        ),
	        monthsShort: 'Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_Nën_Dhj'.split('_'),
	        weekdays: 'E Diel_E Hënë_E Martë_E Mërkurë_E Enjte_E Premte_E Shtunë'.split(
	            '_'
	        ),
	        weekdaysShort: 'Die_Hën_Mar_Mër_Enj_Pre_Sht'.split('_'),
	        weekdaysMin: 'D_H_Ma_Më_E_P_Sh'.split('_'),
	        weekdaysParseExact: true,
	        meridiemParse: /PD|MD/,
	        isPM: function (input) {
	            return input.charAt(0) === 'M';
	        },
	        meridiem: function (hours, minutes, isLower) {
	            return hours < 12 ? 'PD' : 'MD';
	        },
	        longDateFormat: {
	            LT: 'HH:mm',
	            LTS: 'HH:mm:ss',
	            L: 'DD/MM/YYYY',
	            LL: 'D MMMM YYYY',
	            LLL: 'D MMMM YYYY HH:mm',
	            LLLL: 'dddd, D MMMM YYYY HH:mm',
	        },
	        calendar: {
	            sameDay: '[Sot në] LT',
	            nextDay: '[Nesër në] LT',
	            nextWeek: 'dddd [në] LT',
	            lastDay: '[Dje në] LT',
	            lastWeek: 'dddd [e kaluar në] LT',
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: 'në %s',
	            past: '%s më parë',
	            s: 'disa sekonda',
	            ss: '%d sekonda',
	            m: 'një minutë',
	            mm: '%d minuta',
	            h: 'një orë',
	            hh: '%d orë',
	            d: 'një ditë',
	            dd: '%d ditë',
	            M: 'një muaj',
	            MM: '%d muaj',
	            y: 'një vit',
	            yy: '%d vite',
	        },
	        dayOfMonthOrdinalParse: /\d{1,2}\./,
	        ordinal: '%d.',
	        week: {
	            dow: 1, // Monday is the first day of the week.
	            doy: 4, // The week that contains Jan 4th is the first week of the year.
	        },
	    });
	
	    return sq;
	
	})));


/***/ }),
/* 477 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Serbian Cyrillic [sr-cyrl]
	//! author : Milan Janačković<milanjanackovic@gmail.com> : https://github.com/milan-j
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var translator = {
	        words: {
	            //Different grammatical cases
	            ss: ['секунда', 'секунде', 'секунди'],
	            m: ['један минут', 'једне минуте'],
	            mm: ['минут', 'минуте', 'минута'],
	            h: ['један сат', 'једног сата'],
	            hh: ['сат', 'сата', 'сати'],
	            dd: ['дан', 'дана', 'дана'],
	            MM: ['месец', 'месеца', 'месеци'],
	            yy: ['година', 'године', 'година'],
	        },
	        correctGrammaticalCase: function (number, wordKey) {
	            return number === 1
	                ? wordKey[0]
	                : number >= 2 && number <= 4
	                ? wordKey[1]
	                : wordKey[2];
	        },
	        translate: function (number, withoutSuffix, key) {
	            var wordKey = translator.words[key];
	            if (key.length === 1) {
	                return withoutSuffix ? wordKey[0] : wordKey[1];
	            } else {
	                return (
	                    number +
	                    ' ' +
	                    translator.correctGrammaticalCase(number, wordKey)
	                );
	            }
	        },
	    };
	
	    var srCyrl = moment.defineLocale('sr-cyrl', {
	        months: 'јануар_фебруар_март_април_мај_јун_јул_август_септембар_октобар_новембар_децембар'.split(
	            '_'
	        ),
	        monthsShort: 'јан._феб._мар._апр._мај_јун_јул_авг._сеп._окт._нов._дец.'.split(
	            '_'
	        ),
	        monthsParseExact: true,
	        weekdays: 'недеља_понедељак_уторак_среда_четвртак_петак_субота'.split('_'),
	        weekdaysShort: 'нед._пон._уто._сре._чет._пет._суб.'.split('_'),
	        weekdaysMin: 'не_по_ут_ср_че_пе_су'.split('_'),
	        weekdaysParseExact: true,
	        longDateFormat: {
	            LT: 'H:mm',
	            LTS: 'H:mm:ss',
	            L: 'DD.MM.YYYY',
	            LL: 'D. MMMM YYYY',
	            LLL: 'D. MMMM YYYY H:mm',
	            LLLL: 'dddd, D. MMMM YYYY H:mm',
	        },
	        calendar: {
	            sameDay: '[данас у] LT',
	            nextDay: '[сутра у] LT',
	            nextWeek: function () {
	                switch (this.day()) {
	                    case 0:
	                        return '[у] [недељу] [у] LT';
	                    case 3:
	                        return '[у] [среду] [у] LT';
	                    case 6:
	                        return '[у] [суботу] [у] LT';
	                    case 1:
	                    case 2:
	                    case 4:
	                    case 5:
	                        return '[у] dddd [у] LT';
	                }
	            },
	            lastDay: '[јуче у] LT',
	            lastWeek: function () {
	                var lastWeekDays = [
	                    '[прошле] [недеље] [у] LT',
	                    '[прошлог] [понедељка] [у] LT',
	                    '[прошлог] [уторка] [у] LT',
	                    '[прошле] [среде] [у] LT',
	                    '[прошлог] [четвртка] [у] LT',
	                    '[прошлог] [петка] [у] LT',
	                    '[прошле] [суботе] [у] LT',
	                ];
	                return lastWeekDays[this.day()];
	            },
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: 'за %s',
	            past: 'пре %s',
	            s: 'неколико секунди',
	            ss: translator.translate,
	            m: translator.translate,
	            mm: translator.translate,
	            h: translator.translate,
	            hh: translator.translate,
	            d: 'дан',
	            dd: translator.translate,
	            M: 'месец',
	            MM: translator.translate,
	            y: 'годину',
	            yy: translator.translate,
	        },
	        dayOfMonthOrdinalParse: /\d{1,2}\./,
	        ordinal: '%d.',
	        week: {
	            dow: 1, // Monday is the first day of the week.
	            doy: 7, // The week that contains Jan 7th is the first week of the year.
	        },
	    });
	
	    return srCyrl;
	
	})));


/***/ }),
/* 478 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Serbian [sr]
	//! author : Milan Janačković<milanjanackovic@gmail.com> : https://github.com/milan-j
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var translator = {
	        words: {
	            //Different grammatical cases
	            ss: ['sekunda', 'sekunde', 'sekundi'],
	            m: ['jedan minut', 'jedne minute'],
	            mm: ['minut', 'minute', 'minuta'],
	            h: ['jedan sat', 'jednog sata'],
	            hh: ['sat', 'sata', 'sati'],
	            dd: ['dan', 'dana', 'dana'],
	            MM: ['mesec', 'meseca', 'meseci'],
	            yy: ['godina', 'godine', 'godina'],
	        },
	        correctGrammaticalCase: function (number, wordKey) {
	            return number === 1
	                ? wordKey[0]
	                : number >= 2 && number <= 4
	                ? wordKey[1]
	                : wordKey[2];
	        },
	        translate: function (number, withoutSuffix, key) {
	            var wordKey = translator.words[key];
	            if (key.length === 1) {
	                return withoutSuffix ? wordKey[0] : wordKey[1];
	            } else {
	                return (
	                    number +
	                    ' ' +
	                    translator.correctGrammaticalCase(number, wordKey)
	                );
	            }
	        },
	    };
	
	    var sr = moment.defineLocale('sr', {
	        months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split(
	            '_'
	        ),
	        monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split(
	            '_'
	        ),
	        monthsParseExact: true,
	        weekdays: 'nedelja_ponedeljak_utorak_sreda_četvrtak_petak_subota'.split(
	            '_'
	        ),
	        weekdaysShort: 'ned._pon._uto._sre._čet._pet._sub.'.split('_'),
	        weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),
	        weekdaysParseExact: true,
	        longDateFormat: {
	            LT: 'H:mm',
	            LTS: 'H:mm:ss',
	            L: 'DD.MM.YYYY',
	            LL: 'D. MMMM YYYY',
	            LLL: 'D. MMMM YYYY H:mm',
	            LLLL: 'dddd, D. MMMM YYYY H:mm',
	        },
	        calendar: {
	            sameDay: '[danas u] LT',
	            nextDay: '[sutra u] LT',
	            nextWeek: function () {
	                switch (this.day()) {
	                    case 0:
	                        return '[u] [nedelju] [u] LT';
	                    case 3:
	                        return '[u] [sredu] [u] LT';
	                    case 6:
	                        return '[u] [subotu] [u] LT';
	                    case 1:
	                    case 2:
	                    case 4:
	                    case 5:
	                        return '[u] dddd [u] LT';
	                }
	            },
	            lastDay: '[juče u] LT',
	            lastWeek: function () {
	                var lastWeekDays = [
	                    '[prošle] [nedelje] [u] LT',
	                    '[prošlog] [ponedeljka] [u] LT',
	                    '[prošlog] [utorka] [u] LT',
	                    '[prošle] [srede] [u] LT',
	                    '[prošlog] [četvrtka] [u] LT',
	                    '[prošlog] [petka] [u] LT',
	                    '[prošle] [subote] [u] LT',
	                ];
	                return lastWeekDays[this.day()];
	            },
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: 'za %s',
	            past: 'pre %s',
	            s: 'nekoliko sekundi',
	            ss: translator.translate,
	            m: translator.translate,
	            mm: translator.translate,
	            h: translator.translate,
	            hh: translator.translate,
	            d: 'dan',
	            dd: translator.translate,
	            M: 'mesec',
	            MM: translator.translate,
	            y: 'godinu',
	            yy: translator.translate,
	        },
	        dayOfMonthOrdinalParse: /\d{1,2}\./,
	        ordinal: '%d.',
	        week: {
	            dow: 1, // Monday is the first day of the week.
	            doy: 7, // The week that contains Jan 7th is the first week of the year.
	        },
	    });
	
	    return sr;
	
	})));


/***/ }),
/* 479 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : siSwati [ss]
	//! author : Nicolai Davies<mail@nicolai.io> : https://github.com/nicolaidavies
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var ss = moment.defineLocale('ss', {
	        months: "Bhimbidvwane_Indlovana_Indlov'lenkhulu_Mabasa_Inkhwekhweti_Inhlaba_Kholwane_Ingci_Inyoni_Imphala_Lweti_Ingongoni".split(
	            '_'
	        ),
	        monthsShort: 'Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo'.split('_'),
	        weekdays: 'Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo'.split(
	            '_'
	        ),
	        weekdaysShort: 'Lis_Umb_Lsb_Les_Lsi_Lsh_Umg'.split('_'),
	        weekdaysMin: 'Li_Us_Lb_Lt_Ls_Lh_Ug'.split('_'),
	        weekdaysParseExact: true,
	        longDateFormat: {
	            LT: 'h:mm A',
	            LTS: 'h:mm:ss A',
	            L: 'DD/MM/YYYY',
	            LL: 'D MMMM YYYY',
	            LLL: 'D MMMM YYYY h:mm A',
	            LLLL: 'dddd, D MMMM YYYY h:mm A',
	        },
	        calendar: {
	            sameDay: '[Namuhla nga] LT',
	            nextDay: '[Kusasa nga] LT',
	            nextWeek: 'dddd [nga] LT',
	            lastDay: '[Itolo nga] LT',
	            lastWeek: 'dddd [leliphelile] [nga] LT',
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: 'nga %s',
	            past: 'wenteka nga %s',
	            s: 'emizuzwana lomcane',
	            ss: '%d mzuzwana',
	            m: 'umzuzu',
	            mm: '%d emizuzu',
	            h: 'lihora',
	            hh: '%d emahora',
	            d: 'lilanga',
	            dd: '%d emalanga',
	            M: 'inyanga',
	            MM: '%d tinyanga',
	            y: 'umnyaka',
	            yy: '%d iminyaka',
	        },
	        meridiemParse: /ekuseni|emini|entsambama|ebusuku/,
	        meridiem: function (hours, minutes, isLower) {
	            if (hours < 11) {
	                return 'ekuseni';
	            } else if (hours < 15) {
	                return 'emini';
	            } else if (hours < 19) {
	                return 'entsambama';
	            } else {
	                return 'ebusuku';
	            }
	        },
	        meridiemHour: function (hour, meridiem) {
	            if (hour === 12) {
	                hour = 0;
	            }
	            if (meridiem === 'ekuseni') {
	                return hour;
	            } else if (meridiem === 'emini') {
	                return hour >= 11 ? hour : hour + 12;
	            } else if (meridiem === 'entsambama' || meridiem === 'ebusuku') {
	                if (hour === 0) {
	                    return 0;
	                }
	                return hour + 12;
	            }
	        },
	        dayOfMonthOrdinalParse: /\d{1,2}/,
	        ordinal: '%d',
	        week: {
	            dow: 1, // Monday is the first day of the week.
	            doy: 4, // The week that contains Jan 4th is the first week of the year.
	        },
	    });
	
	    return ss;
	
	})));


/***/ }),
/* 480 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Swedish [sv]
	//! author : Jens Alm : https://github.com/ulmus
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var sv = moment.defineLocale('sv', {
	        months: 'januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december'.split(
	            '_'
	        ),
	        monthsShort: 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),
	        weekdays: 'söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag'.split('_'),
	        weekdaysShort: 'sön_mån_tis_ons_tor_fre_lör'.split('_'),
	        weekdaysMin: 'sö_må_ti_on_to_fr_lö'.split('_'),
	        longDateFormat: {
	            LT: 'HH:mm',
	            LTS: 'HH:mm:ss',
	            L: 'YYYY-MM-DD',
	            LL: 'D MMMM YYYY',
	            LLL: 'D MMMM YYYY [kl.] HH:mm',
	            LLLL: 'dddd D MMMM YYYY [kl.] HH:mm',
	            lll: 'D MMM YYYY HH:mm',
	            llll: 'ddd D MMM YYYY HH:mm',
	        },
	        calendar: {
	            sameDay: '[Idag] LT',
	            nextDay: '[Imorgon] LT',
	            lastDay: '[Igår] LT',
	            nextWeek: '[På] dddd LT',
	            lastWeek: '[I] dddd[s] LT',
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: 'om %s',
	            past: 'för %s sedan',
	            s: 'några sekunder',
	            ss: '%d sekunder',
	            m: 'en minut',
	            mm: '%d minuter',
	            h: 'en timme',
	            hh: '%d timmar',
	            d: 'en dag',
	            dd: '%d dagar',
	            M: 'en månad',
	            MM: '%d månader',
	            y: 'ett år',
	            yy: '%d år',
	        },
	        dayOfMonthOrdinalParse: /\d{1,2}(\:e|\:a)/,
	        ordinal: function (number) {
	            var b = number % 10,
	                output =
	                    ~~((number % 100) / 10) === 1
	                        ? ':e'
	                        : b === 1
	                        ? ':a'
	                        : b === 2
	                        ? ':a'
	                        : b === 3
	                        ? ':e'
	                        : ':e';
	            return number + output;
	        },
	        week: {
	            dow: 1, // Monday is the first day of the week.
	            doy: 4, // The week that contains Jan 4th is the first week of the year.
	        },
	    });
	
	    return sv;
	
	})));


/***/ }),
/* 481 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Swahili [sw]
	//! author : Fahad Kassim : https://github.com/fadsel
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var sw = moment.defineLocale('sw', {
	        months: 'Januari_Februari_Machi_Aprili_Mei_Juni_Julai_Agosti_Septemba_Oktoba_Novemba_Desemba'.split(
	            '_'
	        ),
	        monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des'.split('_'),
	        weekdays: 'Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi'.split(
	            '_'
	        ),
	        weekdaysShort: 'Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos'.split('_'),
	        weekdaysMin: 'J2_J3_J4_J5_Al_Ij_J1'.split('_'),
	        weekdaysParseExact: true,
	        longDateFormat: {
	            LT: 'hh:mm A',
	            LTS: 'HH:mm:ss',
	            L: 'DD.MM.YYYY',
	            LL: 'D MMMM YYYY',
	            LLL: 'D MMMM YYYY HH:mm',
	            LLLL: 'dddd, D MMMM YYYY HH:mm',
	        },
	        calendar: {
	            sameDay: '[leo saa] LT',
	            nextDay: '[kesho saa] LT',
	            nextWeek: '[wiki ijayo] dddd [saat] LT',
	            lastDay: '[jana] LT',
	            lastWeek: '[wiki iliyopita] dddd [saat] LT',
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: '%s baadaye',
	            past: 'tokea %s',
	            s: 'hivi punde',
	            ss: 'sekunde %d',
	            m: 'dakika moja',
	            mm: 'dakika %d',
	            h: 'saa limoja',
	            hh: 'masaa %d',
	            d: 'siku moja',
	            dd: 'siku %d',
	            M: 'mwezi mmoja',
	            MM: 'miezi %d',
	            y: 'mwaka mmoja',
	            yy: 'miaka %d',
	        },
	        week: {
	            dow: 1, // Monday is the first day of the week.
	            doy: 7, // The week that contains Jan 7th is the first week of the year.
	        },
	    });
	
	    return sw;
	
	})));


/***/ }),
/* 482 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Tamil [ta]
	//! author : Arjunkumar Krishnamoorthy : https://github.com/tk120404
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var symbolMap = {
	            '1': '௧',
	            '2': '௨',
	            '3': '௩',
	            '4': '௪',
	            '5': '௫',
	            '6': '௬',
	            '7': '௭',
	            '8': '௮',
	            '9': '௯',
	            '0': '௦',
	        },
	        numberMap = {
	            '௧': '1',
	            '௨': '2',
	            '௩': '3',
	            '௪': '4',
	            '௫': '5',
	            '௬': '6',
	            '௭': '7',
	            '௮': '8',
	            '௯': '9',
	            '௦': '0',
	        };
	
	    var ta = moment.defineLocale('ta', {
	        months: 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split(
	            '_'
	        ),
	        monthsShort: 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split(
	            '_'
	        ),
	        weekdays: 'ஞாயிற்றுக்கிழமை_திங்கட்கிழமை_செவ்வாய்கிழமை_புதன்கிழமை_வியாழக்கிழமை_வெள்ளிக்கிழமை_சனிக்கிழமை'.split(
	            '_'
	        ),
	        weekdaysShort: 'ஞாயிறு_திங்கள்_செவ்வாய்_புதன்_வியாழன்_வெள்ளி_சனி'.split(
	            '_'
	        ),
	        weekdaysMin: 'ஞா_தி_செ_பு_வி_வெ_ச'.split('_'),
	        longDateFormat: {
	            LT: 'HH:mm',
	            LTS: 'HH:mm:ss',
	            L: 'DD/MM/YYYY',
	            LL: 'D MMMM YYYY',
	            LLL: 'D MMMM YYYY, HH:mm',
	            LLLL: 'dddd, D MMMM YYYY, HH:mm',
	        },
	        calendar: {
	            sameDay: '[இன்று] LT',
	            nextDay: '[நாளை] LT',
	            nextWeek: 'dddd, LT',
	            lastDay: '[நேற்று] LT',
	            lastWeek: '[கடந்த வாரம்] dddd, LT',
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: '%s இல்',
	            past: '%s முன்',
	            s: 'ஒரு சில விநாடிகள்',
	            ss: '%d விநாடிகள்',
	            m: 'ஒரு நிமிடம்',
	            mm: '%d நிமிடங்கள்',
	            h: 'ஒரு மணி நேரம்',
	            hh: '%d மணி நேரம்',
	            d: 'ஒரு நாள்',
	            dd: '%d நாட்கள்',
	            M: 'ஒரு மாதம்',
	            MM: '%d மாதங்கள்',
	            y: 'ஒரு வருடம்',
	            yy: '%d ஆண்டுகள்',
	        },
	        dayOfMonthOrdinalParse: /\d{1,2}வது/,
	        ordinal: function (number) {
	            return number + 'வது';
	        },
	        preparse: function (string) {
	            return string.replace(/[௧௨௩௪௫௬௭௮௯௦]/g, function (match) {
	                return numberMap[match];
	            });
	        },
	        postformat: function (string) {
	            return string.replace(/\d/g, function (match) {
	                return symbolMap[match];
	            });
	        },
	        // refer http://ta.wikipedia.org/s/1er1
	        meridiemParse: /யாமம்|வைகறை|காலை|நண்பகல்|எற்பாடு|மாலை/,
	        meridiem: function (hour, minute, isLower) {
	            if (hour < 2) {
	                return ' யாமம்';
	            } else if (hour < 6) {
	                return ' வைகறை'; // வைகறை
	            } else if (hour < 10) {
	                return ' காலை'; // காலை
	            } else if (hour < 14) {
	                return ' நண்பகல்'; // நண்பகல்
	            } else if (hour < 18) {
	                return ' எற்பாடு'; // எற்பாடு
	            } else if (hour < 22) {
	                return ' மாலை'; // மாலை
	            } else {
	                return ' யாமம்';
	            }
	        },
	        meridiemHour: function (hour, meridiem) {
	            if (hour === 12) {
	                hour = 0;
	            }
	            if (meridiem === 'யாமம்') {
	                return hour < 2 ? hour : hour + 12;
	            } else if (meridiem === 'வைகறை' || meridiem === 'காலை') {
	                return hour;
	            } else if (meridiem === 'நண்பகல்') {
	                return hour >= 10 ? hour : hour + 12;
	            } else {
	                return hour + 12;
	            }
	        },
	        week: {
	            dow: 0, // Sunday is the first day of the week.
	            doy: 6, // The week that contains Jan 6th is the first week of the year.
	        },
	    });
	
	    return ta;
	
	})));


/***/ }),
/* 483 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Telugu [te]
	//! author : Krishna Chaitanya Thota : https://github.com/kcthota
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var te = moment.defineLocale('te', {
	        months: 'జనవరి_ఫిబ్రవరి_మార్చి_ఏప్రిల్_మే_జూన్_జులై_ఆగస్టు_సెప్టెంబర్_అక్టోబర్_నవంబర్_డిసెంబర్'.split(
	            '_'
	        ),
	        monthsShort: 'జన._ఫిబ్ర._మార్చి_ఏప్రి._మే_జూన్_జులై_ఆగ._సెప్._అక్టో._నవ._డిసె.'.split(
	            '_'
	        ),
	        monthsParseExact: true,
	        weekdays: 'ఆదివారం_సోమవారం_మంగళవారం_బుధవారం_గురువారం_శుక్రవారం_శనివారం'.split(
	            '_'
	        ),
	        weekdaysShort: 'ఆది_సోమ_మంగళ_బుధ_గురు_శుక్ర_శని'.split('_'),
	        weekdaysMin: 'ఆ_సో_మం_బు_గు_శు_శ'.split('_'),
	        longDateFormat: {
	            LT: 'A h:mm',
	            LTS: 'A h:mm:ss',
	            L: 'DD/MM/YYYY',
	            LL: 'D MMMM YYYY',
	            LLL: 'D MMMM YYYY, A h:mm',
	            LLLL: 'dddd, D MMMM YYYY, A h:mm',
	        },
	        calendar: {
	            sameDay: '[నేడు] LT',
	            nextDay: '[రేపు] LT',
	            nextWeek: 'dddd, LT',
	            lastDay: '[నిన్న] LT',
	            lastWeek: '[గత] dddd, LT',
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: '%s లో',
	            past: '%s క్రితం',
	            s: 'కొన్ని క్షణాలు',
	            ss: '%d సెకన్లు',
	            m: 'ఒక నిమిషం',
	            mm: '%d నిమిషాలు',
	            h: 'ఒక గంట',
	            hh: '%d గంటలు',
	            d: 'ఒక రోజు',
	            dd: '%d రోజులు',
	            M: 'ఒక నెల',
	            MM: '%d నెలలు',
	            y: 'ఒక సంవత్సరం',
	            yy: '%d సంవత్సరాలు',
	        },
	        dayOfMonthOrdinalParse: /\d{1,2}వ/,
	        ordinal: '%dవ',
	        meridiemParse: /రాత్రి|ఉదయం|మధ్యాహ్నం|సాయంత్రం/,
	        meridiemHour: function (hour, meridiem) {
	            if (hour === 12) {
	                hour = 0;
	            }
	            if (meridiem === 'రాత్రి') {
	                return hour < 4 ? hour : hour + 12;
	            } else if (meridiem === 'ఉదయం') {
	                return hour;
	            } else if (meridiem === 'మధ్యాహ్నం') {
	                return hour >= 10 ? hour : hour + 12;
	            } else if (meridiem === 'సాయంత్రం') {
	                return hour + 12;
	            }
	        },
	        meridiem: function (hour, minute, isLower) {
	            if (hour < 4) {
	                return 'రాత్రి';
	            } else if (hour < 10) {
	                return 'ఉదయం';
	            } else if (hour < 17) {
	                return 'మధ్యాహ్నం';
	            } else if (hour < 20) {
	                return 'సాయంత్రం';
	            } else {
	                return 'రాత్రి';
	            }
	        },
	        week: {
	            dow: 0, // Sunday is the first day of the week.
	            doy: 6, // The week that contains Jan 6th is the first week of the year.
	        },
	    });
	
	    return te;
	
	})));


/***/ }),
/* 484 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Tetun Dili (East Timor) [tet]
	//! author : Joshua Brooks : https://github.com/joshbrooks
	//! author : Onorio De J. Afonso : https://github.com/marobo
	//! author : Sonia Simoes : https://github.com/soniasimoes
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var tet = moment.defineLocale('tet', {
	        months: 'Janeiru_Fevereiru_Marsu_Abril_Maiu_Juñu_Jullu_Agustu_Setembru_Outubru_Novembru_Dezembru'.split(
	            '_'
	        ),
	        monthsShort: 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'),
	        weekdays: 'Domingu_Segunda_Tersa_Kuarta_Kinta_Sesta_Sabadu'.split('_'),
	        weekdaysShort: 'Dom_Seg_Ters_Kua_Kint_Sest_Sab'.split('_'),
	        weekdaysMin: 'Do_Seg_Te_Ku_Ki_Ses_Sa'.split('_'),
	        longDateFormat: {
	            LT: 'HH:mm',
	            LTS: 'HH:mm:ss',
	            L: 'DD/MM/YYYY',
	            LL: 'D MMMM YYYY',
	            LLL: 'D MMMM YYYY HH:mm',
	            LLLL: 'dddd, D MMMM YYYY HH:mm',
	        },
	        calendar: {
	            sameDay: '[Ohin iha] LT',
	            nextDay: '[Aban iha] LT',
	            nextWeek: 'dddd [iha] LT',
	            lastDay: '[Horiseik iha] LT',
	            lastWeek: 'dddd [semana kotuk] [iha] LT',
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: 'iha %s',
	            past: '%s liuba',
	            s: 'segundu balun',
	            ss: 'segundu %d',
	            m: 'minutu ida',
	            mm: 'minutu %d',
	            h: 'oras ida',
	            hh: 'oras %d',
	            d: 'loron ida',
	            dd: 'loron %d',
	            M: 'fulan ida',
	            MM: 'fulan %d',
	            y: 'tinan ida',
	            yy: 'tinan %d',
	        },
	        dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
	        ordinal: function (number) {
	            var b = number % 10,
	                output =
	                    ~~((number % 100) / 10) === 1
	                        ? 'th'
	                        : b === 1
	                        ? 'st'
	                        : b === 2
	                        ? 'nd'
	                        : b === 3
	                        ? 'rd'
	                        : 'th';
	            return number + output;
	        },
	        week: {
	            dow: 1, // Monday is the first day of the week.
	            doy: 4, // The week that contains Jan 4th is the first week of the year.
	        },
	    });
	
	    return tet;
	
	})));


/***/ }),
/* 485 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Tajik [tg]
	//! author : Orif N. Jr. : https://github.com/orif-jr
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var suffixes = {
	        0: '-ум',
	        1: '-ум',
	        2: '-юм',
	        3: '-юм',
	        4: '-ум',
	        5: '-ум',
	        6: '-ум',
	        7: '-ум',
	        8: '-ум',
	        9: '-ум',
	        10: '-ум',
	        12: '-ум',
	        13: '-ум',
	        20: '-ум',
	        30: '-юм',
	        40: '-ум',
	        50: '-ум',
	        60: '-ум',
	        70: '-ум',
	        80: '-ум',
	        90: '-ум',
	        100: '-ум',
	    };
	
	    var tg = moment.defineLocale('tg', {
	        months: 'январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр'.split(
	            '_'
	        ),
	        monthsShort: 'янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек'.split('_'),
	        weekdays: 'якшанбе_душанбе_сешанбе_чоршанбе_панҷшанбе_ҷумъа_шанбе'.split(
	            '_'
	        ),
	        weekdaysShort: 'яшб_дшб_сшб_чшб_пшб_ҷум_шнб'.split('_'),
	        weekdaysMin: 'яш_дш_сш_чш_пш_ҷм_шб'.split('_'),
	        longDateFormat: {
	            LT: 'HH:mm',
	            LTS: 'HH:mm:ss',
	            L: 'DD/MM/YYYY',
	            LL: 'D MMMM YYYY',
	            LLL: 'D MMMM YYYY HH:mm',
	            LLLL: 'dddd, D MMMM YYYY HH:mm',
	        },
	        calendar: {
	            sameDay: '[Имрӯз соати] LT',
	            nextDay: '[Пагоҳ соати] LT',
	            lastDay: '[Дирӯз соати] LT',
	            nextWeek: 'dddd[и] [ҳафтаи оянда соати] LT',
	            lastWeek: 'dddd[и] [ҳафтаи гузашта соати] LT',
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: 'баъди %s',
	            past: '%s пеш',
	            s: 'якчанд сония',
	            m: 'як дақиқа',
	            mm: '%d дақиқа',
	            h: 'як соат',
	            hh: '%d соат',
	            d: 'як рӯз',
	            dd: '%d рӯз',
	            M: 'як моҳ',
	            MM: '%d моҳ',
	            y: 'як сол',
	            yy: '%d сол',
	        },
	        meridiemParse: /шаб|субҳ|рӯз|бегоҳ/,
	        meridiemHour: function (hour, meridiem) {
	            if (hour === 12) {
	                hour = 0;
	            }
	            if (meridiem === 'шаб') {
	                return hour < 4 ? hour : hour + 12;
	            } else if (meridiem === 'субҳ') {
	                return hour;
	            } else if (meridiem === 'рӯз') {
	                return hour >= 11 ? hour : hour + 12;
	            } else if (meridiem === 'бегоҳ') {
	                return hour + 12;
	            }
	        },
	        meridiem: function (hour, minute, isLower) {
	            if (hour < 4) {
	                return 'шаб';
	            } else if (hour < 11) {
	                return 'субҳ';
	            } else if (hour < 16) {
	                return 'рӯз';
	            } else if (hour < 19) {
	                return 'бегоҳ';
	            } else {
	                return 'шаб';
	            }
	        },
	        dayOfMonthOrdinalParse: /\d{1,2}-(ум|юм)/,
	        ordinal: function (number) {
	            var a = number % 10,
	                b = number >= 100 ? 100 : null;
	            return number + (suffixes[number] || suffixes[a] || suffixes[b]);
	        },
	        week: {
	            dow: 1, // Monday is the first day of the week.
	            doy: 7, // The week that contains Jan 1th is the first week of the year.
	        },
	    });
	
	    return tg;
	
	})));


/***/ }),
/* 486 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Thai [th]
	//! author : Kridsada Thanabulpong : https://github.com/sirn
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var th = moment.defineLocale('th', {
	        months: 'มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม'.split(
	            '_'
	        ),
	        monthsShort: 'ม.ค._ก.พ._มี.ค._เม.ย._พ.ค._มิ.ย._ก.ค._ส.ค._ก.ย._ต.ค._พ.ย._ธ.ค.'.split(
	            '_'
	        ),
	        monthsParseExact: true,
	        weekdays: 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์'.split('_'),
	        weekdaysShort: 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์'.split('_'), // yes, three characters difference
	        weekdaysMin: 'อา._จ._อ._พ._พฤ._ศ._ส.'.split('_'),
	        weekdaysParseExact: true,
	        longDateFormat: {
	            LT: 'H:mm',
	            LTS: 'H:mm:ss',
	            L: 'DD/MM/YYYY',
	            LL: 'D MMMM YYYY',
	            LLL: 'D MMMM YYYY เวลา H:mm',
	            LLLL: 'วันddddที่ D MMMM YYYY เวลา H:mm',
	        },
	        meridiemParse: /ก่อนเที่ยง|หลังเที่ยง/,
	        isPM: function (input) {
	            return input === 'หลังเที่ยง';
	        },
	        meridiem: function (hour, minute, isLower) {
	            if (hour < 12) {
	                return 'ก่อนเที่ยง';
	            } else {
	                return 'หลังเที่ยง';
	            }
	        },
	        calendar: {
	            sameDay: '[วันนี้ เวลา] LT',
	            nextDay: '[พรุ่งนี้ เวลา] LT',
	            nextWeek: 'dddd[หน้า เวลา] LT',
	            lastDay: '[เมื่อวานนี้ เวลา] LT',
	            lastWeek: '[วัน]dddd[ที่แล้ว เวลา] LT',
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: 'อีก %s',
	            past: '%sที่แล้ว',
	            s: 'ไม่กี่วินาที',
	            ss: '%d วินาที',
	            m: '1 นาที',
	            mm: '%d นาที',
	            h: '1 ชั่วโมง',
	            hh: '%d ชั่วโมง',
	            d: '1 วัน',
	            dd: '%d วัน',
	            M: '1 เดือน',
	            MM: '%d เดือน',
	            y: '1 ปี',
	            yy: '%d ปี',
	        },
	    });
	
	    return th;
	
	})));


/***/ }),
/* 487 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Turkmen [trk]
	//! author : Atamyrat Abdyrahmanov : https://github.com/atamyratabdy
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var suffixes = {
	        1: "'inji",
	        5: "'inji",
	        8: "'inji",
	        70: "'inji",
	        80: "'inji",
	        2: "'nji",
	        7: "'nji",
	        20: "'nji",
	        50: "'nji",
	        3: "'ünji",
	        4: "'ünji",
	        100: "'ünji",
	        6: "'njy",
	        9: "'unjy",
	        10: "'unjy",
	        30: "'unjy",
	        60: "'ynjy",
	        90: "'ynjy",
	    };
	
	    var tk = moment.defineLocale('tk', {
	        months: 'Ýanwar_Fewral_Mart_Aprel_Maý_Iýun_Iýul_Awgust_Sentýabr_Oktýabr_Noýabr_Dekabr'.split(
	            '_'
	        ),
	        monthsShort: 'Ýan_Few_Mar_Apr_Maý_Iýn_Iýl_Awg_Sen_Okt_Noý_Dek'.split('_'),
	        weekdays: 'Ýekşenbe_Duşenbe_Sişenbe_Çarşenbe_Penşenbe_Anna_Şenbe'.split(
	            '_'
	        ),
	        weekdaysShort: 'Ýek_Duş_Siş_Çar_Pen_Ann_Şen'.split('_'),
	        weekdaysMin: 'Ýk_Dş_Sş_Çr_Pn_An_Şn'.split('_'),
	        longDateFormat: {
	            LT: 'HH:mm',
	            LTS: 'HH:mm:ss',
	            L: 'DD.MM.YYYY',
	            LL: 'D MMMM YYYY',
	            LLL: 'D MMMM YYYY HH:mm',
	            LLLL: 'dddd, D MMMM YYYY HH:mm',
	        },
	        calendar: {
	            sameDay: '[bugün sagat] LT',
	            nextDay: '[ertir sagat] LT',
	            nextWeek: '[indiki] dddd [sagat] LT',
	            lastDay: '[düýn] LT',
	            lastWeek: '[geçen] dddd [sagat] LT',
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: '%s soň',
	            past: '%s öň',
	            s: 'birnäçe sekunt',
	            m: 'bir minut',
	            mm: '%d minut',
	            h: 'bir sagat',
	            hh: '%d sagat',
	            d: 'bir gün',
	            dd: '%d gün',
	            M: 'bir aý',
	            MM: '%d aý',
	            y: 'bir ýyl',
	            yy: '%d ýyl',
	        },
	        ordinal: function (number, period) {
	            switch (period) {
	                case 'd':
	                case 'D':
	                case 'Do':
	                case 'DD':
	                    return number;
	                default:
	                    if (number === 0) {
	                        // special case for zero
	                        return number + "'unjy";
	                    }
	                    var a = number % 10,
	                        b = (number % 100) - a,
	                        c = number >= 100 ? 100 : null;
	                    return number + (suffixes[a] || suffixes[b] || suffixes[c]);
	            }
	        },
	        week: {
	            dow: 1, // Monday is the first day of the week.
	            doy: 7, // The week that contains Jan 7th is the first week of the year.
	        },
	    });
	
	    return tk;
	
	})));


/***/ }),
/* 488 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Tagalog (Philippines) [tl-ph]
	//! author : Dan Hagman : https://github.com/hagmandan
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var tlPh = moment.defineLocale('tl-ph', {
	        months: 'Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre'.split(
	            '_'
	        ),
	        monthsShort: 'Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis'.split('_'),
	        weekdays: 'Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado'.split(
	            '_'
	        ),
	        weekdaysShort: 'Lin_Lun_Mar_Miy_Huw_Biy_Sab'.split('_'),
	        weekdaysMin: 'Li_Lu_Ma_Mi_Hu_Bi_Sab'.split('_'),
	        longDateFormat: {
	            LT: 'HH:mm',
	            LTS: 'HH:mm:ss',
	            L: 'MM/D/YYYY',
	            LL: 'MMMM D, YYYY',
	            LLL: 'MMMM D, YYYY HH:mm',
	            LLLL: 'dddd, MMMM DD, YYYY HH:mm',
	        },
	        calendar: {
	            sameDay: 'LT [ngayong araw]',
	            nextDay: '[Bukas ng] LT',
	            nextWeek: 'LT [sa susunod na] dddd',
	            lastDay: 'LT [kahapon]',
	            lastWeek: 'LT [noong nakaraang] dddd',
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: 'sa loob ng %s',
	            past: '%s ang nakalipas',
	            s: 'ilang segundo',
	            ss: '%d segundo',
	            m: 'isang minuto',
	            mm: '%d minuto',
	            h: 'isang oras',
	            hh: '%d oras',
	            d: 'isang araw',
	            dd: '%d araw',
	            M: 'isang buwan',
	            MM: '%d buwan',
	            y: 'isang taon',
	            yy: '%d taon',
	        },
	        dayOfMonthOrdinalParse: /\d{1,2}/,
	        ordinal: function (number) {
	            return number;
	        },
	        week: {
	            dow: 1, // Monday is the first day of the week.
	            doy: 4, // The week that contains Jan 4th is the first week of the year.
	        },
	    });
	
	    return tlPh;
	
	})));


/***/ }),
/* 489 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Klingon [tlh]
	//! author : Dominika Kruk : https://github.com/amaranthrose
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var numbersNouns = 'pagh_wa’_cha’_wej_loS_vagh_jav_Soch_chorgh_Hut'.split('_');
	
	    function translateFuture(output) {
	        var time = output;
	        time =
	            output.indexOf('jaj') !== -1
	                ? time.slice(0, -3) + 'leS'
	                : output.indexOf('jar') !== -1
	                ? time.slice(0, -3) + 'waQ'
	                : output.indexOf('DIS') !== -1
	                ? time.slice(0, -3) + 'nem'
	                : time + ' pIq';
	        return time;
	    }
	
	    function translatePast(output) {
	        var time = output;
	        time =
	            output.indexOf('jaj') !== -1
	                ? time.slice(0, -3) + 'Hu’'
	                : output.indexOf('jar') !== -1
	                ? time.slice(0, -3) + 'wen'
	                : output.indexOf('DIS') !== -1
	                ? time.slice(0, -3) + 'ben'
	                : time + ' ret';
	        return time;
	    }
	
	    function translate(number, withoutSuffix, string, isFuture) {
	        var numberNoun = numberAsNoun(number);
	        switch (string) {
	            case 'ss':
	                return numberNoun + ' lup';
	            case 'mm':
	                return numberNoun + ' tup';
	            case 'hh':
	                return numberNoun + ' rep';
	            case 'dd':
	                return numberNoun + ' jaj';
	            case 'MM':
	                return numberNoun + ' jar';
	            case 'yy':
	                return numberNoun + ' DIS';
	        }
	    }
	
	    function numberAsNoun(number) {
	        var hundred = Math.floor((number % 1000) / 100),
	            ten = Math.floor((number % 100) / 10),
	            one = number % 10,
	            word = '';
	        if (hundred > 0) {
	            word += numbersNouns[hundred] + 'vatlh';
	        }
	        if (ten > 0) {
	            word += (word !== '' ? ' ' : '') + numbersNouns[ten] + 'maH';
	        }
	        if (one > 0) {
	            word += (word !== '' ? ' ' : '') + numbersNouns[one];
	        }
	        return word === '' ? 'pagh' : word;
	    }
	
	    var tlh = moment.defineLocale('tlh', {
	        months: 'tera’ jar wa’_tera’ jar cha’_tera’ jar wej_tera’ jar loS_tera’ jar vagh_tera’ jar jav_tera’ jar Soch_tera’ jar chorgh_tera’ jar Hut_tera’ jar wa’maH_tera’ jar wa’maH wa’_tera’ jar wa’maH cha’'.split(
	            '_'
	        ),
	        monthsShort: 'jar wa’_jar cha’_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar wa’maH_jar wa’maH wa’_jar wa’maH cha’'.split(
	            '_'
	        ),
	        monthsParseExact: true,
	        weekdays: 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split(
	            '_'
	        ),
	        weekdaysShort: 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split(
	            '_'
	        ),
	        weekdaysMin: 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split(
	            '_'
	        ),
	        longDateFormat: {
	            LT: 'HH:mm',
	            LTS: 'HH:mm:ss',
	            L: 'DD.MM.YYYY',
	            LL: 'D MMMM YYYY',
	            LLL: 'D MMMM YYYY HH:mm',
	            LLLL: 'dddd, D MMMM YYYY HH:mm',
	        },
	        calendar: {
	            sameDay: '[DaHjaj] LT',
	            nextDay: '[wa’leS] LT',
	            nextWeek: 'LLL',
	            lastDay: '[wa’Hu’] LT',
	            lastWeek: 'LLL',
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: translateFuture,
	            past: translatePast,
	            s: 'puS lup',
	            ss: translate,
	            m: 'wa’ tup',
	            mm: translate,
	            h: 'wa’ rep',
	            hh: translate,
	            d: 'wa’ jaj',
	            dd: translate,
	            M: 'wa’ jar',
	            MM: translate,
	            y: 'wa’ DIS',
	            yy: translate,
	        },
	        dayOfMonthOrdinalParse: /\d{1,2}\./,
	        ordinal: '%d.',
	        week: {
	            dow: 1, // Monday is the first day of the week.
	            doy: 4, // The week that contains Jan 4th is the first week of the year.
	        },
	    });
	
	    return tlh;
	
	})));


/***/ }),
/* 490 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Turkish [tr]
	//! authors : Erhan Gundogan : https://github.com/erhangundogan,
	//!           Burak Yiğit Kaya: https://github.com/BYK
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var suffixes = {
	        1: "'inci",
	        5: "'inci",
	        8: "'inci",
	        70: "'inci",
	        80: "'inci",
	        2: "'nci",
	        7: "'nci",
	        20: "'nci",
	        50: "'nci",
	        3: "'üncü",
	        4: "'üncü",
	        100: "'üncü",
	        6: "'ncı",
	        9: "'uncu",
	        10: "'uncu",
	        30: "'uncu",
	        60: "'ıncı",
	        90: "'ıncı",
	    };
	
	    var tr = moment.defineLocale('tr', {
	        months: 'Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık'.split(
	            '_'
	        ),
	        monthsShort: 'Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara'.split('_'),
	        weekdays: 'Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi'.split(
	            '_'
	        ),
	        weekdaysShort: 'Paz_Pts_Sal_Çar_Per_Cum_Cts'.split('_'),
	        weekdaysMin: 'Pz_Pt_Sa_Ça_Pe_Cu_Ct'.split('_'),
	        meridiem: function (hours, minutes, isLower) {
	            if (hours < 12) {
	                return isLower ? 'öö' : 'ÖÖ';
	            } else {
	                return isLower ? 'ös' : 'ÖS';
	            }
	        },
	        meridiemParse: /öö|ÖÖ|ös|ÖS/,
	        isPM: function (input) {
	            return input === 'ös' || input === 'ÖS';
	        },
	        longDateFormat: {
	            LT: 'HH:mm',
	            LTS: 'HH:mm:ss',
	            L: 'DD.MM.YYYY',
	            LL: 'D MMMM YYYY',
	            LLL: 'D MMMM YYYY HH:mm',
	            LLLL: 'dddd, D MMMM YYYY HH:mm',
	        },
	        calendar: {
	            sameDay: '[bugün saat] LT',
	            nextDay: '[yarın saat] LT',
	            nextWeek: '[gelecek] dddd [saat] LT',
	            lastDay: '[dün] LT',
	            lastWeek: '[geçen] dddd [saat] LT',
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: '%s sonra',
	            past: '%s önce',
	            s: 'birkaç saniye',
	            ss: '%d saniye',
	            m: 'bir dakika',
	            mm: '%d dakika',
	            h: 'bir saat',
	            hh: '%d saat',
	            d: 'bir gün',
	            dd: '%d gün',
	            M: 'bir ay',
	            MM: '%d ay',
	            y: 'bir yıl',
	            yy: '%d yıl',
	        },
	        ordinal: function (number, period) {
	            switch (period) {
	                case 'd':
	                case 'D':
	                case 'Do':
	                case 'DD':
	                    return number;
	                default:
	                    if (number === 0) {
	                        // special case for zero
	                        return number + "'ıncı";
	                    }
	                    var a = number % 10,
	                        b = (number % 100) - a,
	                        c = number >= 100 ? 100 : null;
	                    return number + (suffixes[a] || suffixes[b] || suffixes[c]);
	            }
	        },
	        week: {
	            dow: 1, // Monday is the first day of the week.
	            doy: 7, // The week that contains Jan 7th is the first week of the year.
	        },
	    });
	
	    return tr;
	
	})));


/***/ }),
/* 491 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Talossan [tzl]
	//! author : Robin van der Vliet : https://github.com/robin0van0der0v
	//! author : Iustì Canun
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    // After the year there should be a slash and the amount of years since December 26, 1979 in Roman numerals.
	    // This is currently too difficult (maybe even impossible) to add.
	    var tzl = moment.defineLocale('tzl', {
	        months: 'Januar_Fevraglh_Març_Avrïu_Mai_Gün_Julia_Guscht_Setemvar_Listopäts_Noemvar_Zecemvar'.split(
	            '_'
	        ),
	        monthsShort: 'Jan_Fev_Mar_Avr_Mai_Gün_Jul_Gus_Set_Lis_Noe_Zec'.split('_'),
	        weekdays: 'Súladi_Lúneçi_Maitzi_Márcuri_Xhúadi_Viénerçi_Sáturi'.split('_'),
	        weekdaysShort: 'Súl_Lún_Mai_Már_Xhú_Vié_Sát'.split('_'),
	        weekdaysMin: 'Sú_Lú_Ma_Má_Xh_Vi_Sá'.split('_'),
	        longDateFormat: {
	            LT: 'HH.mm',
	            LTS: 'HH.mm.ss',
	            L: 'DD.MM.YYYY',
	            LL: 'D. MMMM [dallas] YYYY',
	            LLL: 'D. MMMM [dallas] YYYY HH.mm',
	            LLLL: 'dddd, [li] D. MMMM [dallas] YYYY HH.mm',
	        },
	        meridiemParse: /d\'o|d\'a/i,
	        isPM: function (input) {
	            return "d'o" === input.toLowerCase();
	        },
	        meridiem: function (hours, minutes, isLower) {
	            if (hours > 11) {
	                return isLower ? "d'o" : "D'O";
	            } else {
	                return isLower ? "d'a" : "D'A";
	            }
	        },
	        calendar: {
	            sameDay: '[oxhi à] LT',
	            nextDay: '[demà à] LT',
	            nextWeek: 'dddd [à] LT',
	            lastDay: '[ieiri à] LT',
	            lastWeek: '[sür el] dddd [lasteu à] LT',
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: 'osprei %s',
	            past: 'ja%s',
	            s: processRelativeTime,
	            ss: processRelativeTime,
	            m: processRelativeTime,
	            mm: processRelativeTime,
	            h: processRelativeTime,
	            hh: processRelativeTime,
	            d: processRelativeTime,
	            dd: processRelativeTime,
	            M: processRelativeTime,
	            MM: processRelativeTime,
	            y: processRelativeTime,
	            yy: processRelativeTime,
	        },
	        dayOfMonthOrdinalParse: /\d{1,2}\./,
	        ordinal: '%d.',
	        week: {
	            dow: 1, // Monday is the first day of the week.
	            doy: 4, // The week that contains Jan 4th is the first week of the year.
	        },
	    });
	
	    function processRelativeTime(number, withoutSuffix, key, isFuture) {
	        var format = {
	            s: ['viensas secunds', "'iensas secunds"],
	            ss: [number + ' secunds', '' + number + ' secunds'],
	            m: ["'n míut", "'iens míut"],
	            mm: [number + ' míuts', '' + number + ' míuts'],
	            h: ["'n þora", "'iensa þora"],
	            hh: [number + ' þoras', '' + number + ' þoras'],
	            d: ["'n ziua", "'iensa ziua"],
	            dd: [number + ' ziuas', '' + number + ' ziuas'],
	            M: ["'n mes", "'iens mes"],
	            MM: [number + ' mesen', '' + number + ' mesen'],
	            y: ["'n ar", "'iens ar"],
	            yy: [number + ' ars', '' + number + ' ars'],
	        };
	        return isFuture
	            ? format[key][0]
	            : withoutSuffix
	            ? format[key][0]
	            : format[key][1];
	    }
	
	    return tzl;
	
	})));


/***/ }),
/* 492 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Central Atlas Tamazight Latin [tzm-latn]
	//! author : Abdel Said : https://github.com/abdelsaid
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var tzmLatn = moment.defineLocale('tzm-latn', {
	        months: 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split(
	            '_'
	        ),
	        monthsShort: 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split(
	            '_'
	        ),
	        weekdays: 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),
	        weekdaysShort: 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),
	        weekdaysMin: 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),
	        longDateFormat: {
	            LT: 'HH:mm',
	            LTS: 'HH:mm:ss',
	            L: 'DD/MM/YYYY',
	            LL: 'D MMMM YYYY',
	            LLL: 'D MMMM YYYY HH:mm',
	            LLLL: 'dddd D MMMM YYYY HH:mm',
	        },
	        calendar: {
	            sameDay: '[asdkh g] LT',
	            nextDay: '[aska g] LT',
	            nextWeek: 'dddd [g] LT',
	            lastDay: '[assant g] LT',
	            lastWeek: 'dddd [g] LT',
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: 'dadkh s yan %s',
	            past: 'yan %s',
	            s: 'imik',
	            ss: '%d imik',
	            m: 'minuḍ',
	            mm: '%d minuḍ',
	            h: 'saɛa',
	            hh: '%d tassaɛin',
	            d: 'ass',
	            dd: '%d ossan',
	            M: 'ayowr',
	            MM: '%d iyyirn',
	            y: 'asgas',
	            yy: '%d isgasn',
	        },
	        week: {
	            dow: 6, // Saturday is the first day of the week.
	            doy: 12, // The week that contains Jan 12th is the first week of the year.
	        },
	    });
	
	    return tzmLatn;
	
	})));


/***/ }),
/* 493 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Central Atlas Tamazight [tzm]
	//! author : Abdel Said : https://github.com/abdelsaid
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var tzm = moment.defineLocale('tzm', {
	        months: 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split(
	            '_'
	        ),
	        monthsShort: 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split(
	            '_'
	        ),
	        weekdays: 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),
	        weekdaysShort: 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),
	        weekdaysMin: 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),
	        longDateFormat: {
	            LT: 'HH:mm',
	            LTS: 'HH:mm:ss',
	            L: 'DD/MM/YYYY',
	            LL: 'D MMMM YYYY',
	            LLL: 'D MMMM YYYY HH:mm',
	            LLLL: 'dddd D MMMM YYYY HH:mm',
	        },
	        calendar: {
	            sameDay: '[ⴰⵙⴷⵅ ⴴ] LT',
	            nextDay: '[ⴰⵙⴽⴰ ⴴ] LT',
	            nextWeek: 'dddd [ⴴ] LT',
	            lastDay: '[ⴰⵚⴰⵏⵜ ⴴ] LT',
	            lastWeek: 'dddd [ⴴ] LT',
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: 'ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ %s',
	            past: 'ⵢⴰⵏ %s',
	            s: 'ⵉⵎⵉⴽ',
	            ss: '%d ⵉⵎⵉⴽ',
	            m: 'ⵎⵉⵏⵓⴺ',
	            mm: '%d ⵎⵉⵏⵓⴺ',
	            h: 'ⵙⴰⵄⴰ',
	            hh: '%d ⵜⴰⵙⵙⴰⵄⵉⵏ',
	            d: 'ⴰⵙⵙ',
	            dd: '%d oⵙⵙⴰⵏ',
	            M: 'ⴰⵢoⵓⵔ',
	            MM: '%d ⵉⵢⵢⵉⵔⵏ',
	            y: 'ⴰⵙⴳⴰⵙ',
	            yy: '%d ⵉⵙⴳⴰⵙⵏ',
	        },
	        week: {
	            dow: 6, // Saturday is the first day of the week.
	            doy: 12, // The week that contains Jan 12th is the first week of the year.
	        },
	    });
	
	    return tzm;
	
	})));


/***/ }),
/* 494 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js language configuration
	//! locale : Uyghur (China) [ug-cn]
	//! author: boyaq : https://github.com/boyaq
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js language configuration
	
	    var ugCn = moment.defineLocale('ug-cn', {
	        months: 'يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر'.split(
	            '_'
	        ),
	        monthsShort: 'يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر'.split(
	            '_'
	        ),
	        weekdays: 'يەكشەنبە_دۈشەنبە_سەيشەنبە_چارشەنبە_پەيشەنبە_جۈمە_شەنبە'.split(
	            '_'
	        ),
	        weekdaysShort: 'يە_دۈ_سە_چا_پە_جۈ_شە'.split('_'),
	        weekdaysMin: 'يە_دۈ_سە_چا_پە_جۈ_شە'.split('_'),
	        longDateFormat: {
	            LT: 'HH:mm',
	            LTS: 'HH:mm:ss',
	            L: 'YYYY-MM-DD',
	            LL: 'YYYY-يىلىM-ئاينىڭD-كۈنى',
	            LLL: 'YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm',
	            LLLL: 'dddd، YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm',
	        },
	        meridiemParse: /يېرىم كېچە|سەھەر|چۈشتىن بۇرۇن|چۈش|چۈشتىن كېيىن|كەچ/,
	        meridiemHour: function (hour, meridiem) {
	            if (hour === 12) {
	                hour = 0;
	            }
	            if (
	                meridiem === 'يېرىم كېچە' ||
	                meridiem === 'سەھەر' ||
	                meridiem === 'چۈشتىن بۇرۇن'
	            ) {
	                return hour;
	            } else if (meridiem === 'چۈشتىن كېيىن' || meridiem === 'كەچ') {
	                return hour + 12;
	            } else {
	                return hour >= 11 ? hour : hour + 12;
	            }
	        },
	        meridiem: function (hour, minute, isLower) {
	            var hm = hour * 100 + minute;
	            if (hm < 600) {
	                return 'يېرىم كېچە';
	            } else if (hm < 900) {
	                return 'سەھەر';
	            } else if (hm < 1130) {
	                return 'چۈشتىن بۇرۇن';
	            } else if (hm < 1230) {
	                return 'چۈش';
	            } else if (hm < 1800) {
	                return 'چۈشتىن كېيىن';
	            } else {
	                return 'كەچ';
	            }
	        },
	        calendar: {
	            sameDay: '[بۈگۈن سائەت] LT',
	            nextDay: '[ئەتە سائەت] LT',
	            nextWeek: '[كېلەركى] dddd [سائەت] LT',
	            lastDay: '[تۆنۈگۈن] LT',
	            lastWeek: '[ئالدىنقى] dddd [سائەت] LT',
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: '%s كېيىن',
	            past: '%s بۇرۇن',
	            s: 'نەچچە سېكونت',
	            ss: '%d سېكونت',
	            m: 'بىر مىنۇت',
	            mm: '%d مىنۇت',
	            h: 'بىر سائەت',
	            hh: '%d سائەت',
	            d: 'بىر كۈن',
	            dd: '%d كۈن',
	            M: 'بىر ئاي',
	            MM: '%d ئاي',
	            y: 'بىر يىل',
	            yy: '%d يىل',
	        },
	
	        dayOfMonthOrdinalParse: /\d{1,2}(-كۈنى|-ئاي|-ھەپتە)/,
	        ordinal: function (number, period) {
	            switch (period) {
	                case 'd':
	                case 'D':
	                case 'DDD':
	                    return number + '-كۈنى';
	                case 'w':
	                case 'W':
	                    return number + '-ھەپتە';
	                default:
	                    return number;
	            }
	        },
	        preparse: function (string) {
	            return string.replace(/،/g, ',');
	        },
	        postformat: function (string) {
	            return string.replace(/,/g, '،');
	        },
	        week: {
	            // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效
	            dow: 1, // Monday is the first day of the week.
	            doy: 7, // The week that contains Jan 1st is the first week of the year.
	        },
	    });
	
	    return ugCn;
	
	})));


/***/ }),
/* 495 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Ukrainian [uk]
	//! author : zemlanin : https://github.com/zemlanin
	//! Author : Menelion Elensúle : https://github.com/Oire
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    function plural(word, num) {
	        var forms = word.split('_');
	        return num % 10 === 1 && num % 100 !== 11
	            ? forms[0]
	            : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20)
	            ? forms[1]
	            : forms[2];
	    }
	    function relativeTimeWithPlural(number, withoutSuffix, key) {
	        var format = {
	            ss: withoutSuffix ? 'секунда_секунди_секунд' : 'секунду_секунди_секунд',
	            mm: withoutSuffix ? 'хвилина_хвилини_хвилин' : 'хвилину_хвилини_хвилин',
	            hh: withoutSuffix ? 'година_години_годин' : 'годину_години_годин',
	            dd: 'день_дні_днів',
	            MM: 'місяць_місяці_місяців',
	            yy: 'рік_роки_років',
	        };
	        if (key === 'm') {
	            return withoutSuffix ? 'хвилина' : 'хвилину';
	        } else if (key === 'h') {
	            return withoutSuffix ? 'година' : 'годину';
	        } else {
	            return number + ' ' + plural(format[key], +number);
	        }
	    }
	    function weekdaysCaseReplace(m, format) {
	        var weekdays = {
	                nominative: 'неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота'.split(
	                    '_'
	                ),
	                accusative: 'неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу'.split(
	                    '_'
	                ),
	                genitive: 'неділі_понеділка_вівторка_середи_четверга_п’ятниці_суботи'.split(
	                    '_'
	                ),
	            },
	            nounCase;
	
	        if (m === true) {
	            return weekdays['nominative']
	                .slice(1, 7)
	                .concat(weekdays['nominative'].slice(0, 1));
	        }
	        if (!m) {
	            return weekdays['nominative'];
	        }
	
	        nounCase = /(\[[ВвУу]\]) ?dddd/.test(format)
	            ? 'accusative'
	            : /\[?(?:минулої|наступної)? ?\] ?dddd/.test(format)
	            ? 'genitive'
	            : 'nominative';
	        return weekdays[nounCase][m.day()];
	    }
	    function processHoursFunction(str) {
	        return function () {
	            return str + 'о' + (this.hours() === 11 ? 'б' : '') + '] LT';
	        };
	    }
	
	    var uk = moment.defineLocale('uk', {
	        months: {
	            format: 'січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня'.split(
	                '_'
	            ),
	            standalone: 'січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень'.split(
	                '_'
	            ),
	        },
	        monthsShort: 'січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд'.split(
	            '_'
	        ),
	        weekdays: weekdaysCaseReplace,
	        weekdaysShort: 'нд_пн_вт_ср_чт_пт_сб'.split('_'),
	        weekdaysMin: 'нд_пн_вт_ср_чт_пт_сб'.split('_'),
	        longDateFormat: {
	            LT: 'HH:mm',
	            LTS: 'HH:mm:ss',
	            L: 'DD.MM.YYYY',
	            LL: 'D MMMM YYYY р.',
	            LLL: 'D MMMM YYYY р., HH:mm',
	            LLLL: 'dddd, D MMMM YYYY р., HH:mm',
	        },
	        calendar: {
	            sameDay: processHoursFunction('[Сьогодні '),
	            nextDay: processHoursFunction('[Завтра '),
	            lastDay: processHoursFunction('[Вчора '),
	            nextWeek: processHoursFunction('[У] dddd ['),
	            lastWeek: function () {
	                switch (this.day()) {
	                    case 0:
	                    case 3:
	                    case 5:
	                    case 6:
	                        return processHoursFunction('[Минулої] dddd [').call(this);
	                    case 1:
	                    case 2:
	                    case 4:
	                        return processHoursFunction('[Минулого] dddd [').call(this);
	                }
	            },
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: 'за %s',
	            past: '%s тому',
	            s: 'декілька секунд',
	            ss: relativeTimeWithPlural,
	            m: relativeTimeWithPlural,
	            mm: relativeTimeWithPlural,
	            h: 'годину',
	            hh: relativeTimeWithPlural,
	            d: 'день',
	            dd: relativeTimeWithPlural,
	            M: 'місяць',
	            MM: relativeTimeWithPlural,
	            y: 'рік',
	            yy: relativeTimeWithPlural,
	        },
	        // M. E.: those two are virtually unused but a user might want to implement them for his/her website for some reason
	        meridiemParse: /ночі|ранку|дня|вечора/,
	        isPM: function (input) {
	            return /^(дня|вечора)$/.test(input);
	        },
	        meridiem: function (hour, minute, isLower) {
	            if (hour < 4) {
	                return 'ночі';
	            } else if (hour < 12) {
	                return 'ранку';
	            } else if (hour < 17) {
	                return 'дня';
	            } else {
	                return 'вечора';
	            }
	        },
	        dayOfMonthOrdinalParse: /\d{1,2}-(й|го)/,
	        ordinal: function (number, period) {
	            switch (period) {
	                case 'M':
	                case 'd':
	                case 'DDD':
	                case 'w':
	                case 'W':
	                    return number + '-й';
	                case 'D':
	                    return number + '-го';
	                default:
	                    return number;
	            }
	        },
	        week: {
	            dow: 1, // Monday is the first day of the week.
	            doy: 7, // The week that contains Jan 7th is the first week of the year.
	        },
	    });
	
	    return uk;
	
	})));


/***/ }),
/* 496 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Urdu [ur]
	//! author : Sawood Alam : https://github.com/ibnesayeed
	//! author : Zack : https://github.com/ZackVision
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var months = [
	            'جنوری',
	            'فروری',
	            'مارچ',
	            'اپریل',
	            'مئی',
	            'جون',
	            'جولائی',
	            'اگست',
	            'ستمبر',
	            'اکتوبر',
	            'نومبر',
	            'دسمبر',
	        ],
	        days = ['اتوار', 'پیر', 'منگل', 'بدھ', 'جمعرات', 'جمعہ', 'ہفتہ'];
	
	    var ur = moment.defineLocale('ur', {
	        months: months,
	        monthsShort: months,
	        weekdays: days,
	        weekdaysShort: days,
	        weekdaysMin: days,
	        longDateFormat: {
	            LT: 'HH:mm',
	            LTS: 'HH:mm:ss',
	            L: 'DD/MM/YYYY',
	            LL: 'D MMMM YYYY',
	            LLL: 'D MMMM YYYY HH:mm',
	            LLLL: 'dddd، D MMMM YYYY HH:mm',
	        },
	        meridiemParse: /صبح|شام/,
	        isPM: function (input) {
	            return 'شام' === input;
	        },
	        meridiem: function (hour, minute, isLower) {
	            if (hour < 12) {
	                return 'صبح';
	            }
	            return 'شام';
	        },
	        calendar: {
	            sameDay: '[آج بوقت] LT',
	            nextDay: '[کل بوقت] LT',
	            nextWeek: 'dddd [بوقت] LT',
	            lastDay: '[گذشتہ روز بوقت] LT',
	            lastWeek: '[گذشتہ] dddd [بوقت] LT',
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: '%s بعد',
	            past: '%s قبل',
	            s: 'چند سیکنڈ',
	            ss: '%d سیکنڈ',
	            m: 'ایک منٹ',
	            mm: '%d منٹ',
	            h: 'ایک گھنٹہ',
	            hh: '%d گھنٹے',
	            d: 'ایک دن',
	            dd: '%d دن',
	            M: 'ایک ماہ',
	            MM: '%d ماہ',
	            y: 'ایک سال',
	            yy: '%d سال',
	        },
	        preparse: function (string) {
	            return string.replace(/،/g, ',');
	        },
	        postformat: function (string) {
	            return string.replace(/,/g, '،');
	        },
	        week: {
	            dow: 1, // Monday is the first day of the week.
	            doy: 4, // The week that contains Jan 4th is the first week of the year.
	        },
	    });
	
	    return ur;
	
	})));


/***/ }),
/* 497 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Uzbek Latin [uz-latn]
	//! author : Rasulbek Mirzayev : github.com/Rasulbeeek
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var uzLatn = moment.defineLocale('uz-latn', {
	        months: 'Yanvar_Fevral_Mart_Aprel_May_Iyun_Iyul_Avgust_Sentabr_Oktabr_Noyabr_Dekabr'.split(
	            '_'
	        ),
	        monthsShort: 'Yan_Fev_Mar_Apr_May_Iyun_Iyul_Avg_Sen_Okt_Noy_Dek'.split('_'),
	        weekdays: 'Yakshanba_Dushanba_Seshanba_Chorshanba_Payshanba_Juma_Shanba'.split(
	            '_'
	        ),
	        weekdaysShort: 'Yak_Dush_Sesh_Chor_Pay_Jum_Shan'.split('_'),
	        weekdaysMin: 'Ya_Du_Se_Cho_Pa_Ju_Sha'.split('_'),
	        longDateFormat: {
	            LT: 'HH:mm',
	            LTS: 'HH:mm:ss',
	            L: 'DD/MM/YYYY',
	            LL: 'D MMMM YYYY',
	            LLL: 'D MMMM YYYY HH:mm',
	            LLLL: 'D MMMM YYYY, dddd HH:mm',
	        },
	        calendar: {
	            sameDay: '[Bugun soat] LT [da]',
	            nextDay: '[Ertaga] LT [da]',
	            nextWeek: 'dddd [kuni soat] LT [da]',
	            lastDay: '[Kecha soat] LT [da]',
	            lastWeek: "[O'tgan] dddd [kuni soat] LT [da]",
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: 'Yaqin %s ichida',
	            past: 'Bir necha %s oldin',
	            s: 'soniya',
	            ss: '%d soniya',
	            m: 'bir daqiqa',
	            mm: '%d daqiqa',
	            h: 'bir soat',
	            hh: '%d soat',
	            d: 'bir kun',
	            dd: '%d kun',
	            M: 'bir oy',
	            MM: '%d oy',
	            y: 'bir yil',
	            yy: '%d yil',
	        },
	        week: {
	            dow: 1, // Monday is the first day of the week.
	            doy: 7, // The week that contains Jan 7th is the first week of the year.
	        },
	    });
	
	    return uzLatn;
	
	})));


/***/ }),
/* 498 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Uzbek [uz]
	//! author : Sardor Muminov : https://github.com/muminoff
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var uz = moment.defineLocale('uz', {
	        months: 'январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр'.split(
	            '_'
	        ),
	        monthsShort: 'янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек'.split('_'),
	        weekdays: 'Якшанба_Душанба_Сешанба_Чоршанба_Пайшанба_Жума_Шанба'.split('_'),
	        weekdaysShort: 'Якш_Душ_Сеш_Чор_Пай_Жум_Шан'.split('_'),
	        weekdaysMin: 'Як_Ду_Се_Чо_Па_Жу_Ша'.split('_'),
	        longDateFormat: {
	            LT: 'HH:mm',
	            LTS: 'HH:mm:ss',
	            L: 'DD/MM/YYYY',
	            LL: 'D MMMM YYYY',
	            LLL: 'D MMMM YYYY HH:mm',
	            LLLL: 'D MMMM YYYY, dddd HH:mm',
	        },
	        calendar: {
	            sameDay: '[Бугун соат] LT [да]',
	            nextDay: '[Эртага] LT [да]',
	            nextWeek: 'dddd [куни соат] LT [да]',
	            lastDay: '[Кеча соат] LT [да]',
	            lastWeek: '[Утган] dddd [куни соат] LT [да]',
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: 'Якин %s ичида',
	            past: 'Бир неча %s олдин',
	            s: 'фурсат',
	            ss: '%d фурсат',
	            m: 'бир дакика',
	            mm: '%d дакика',
	            h: 'бир соат',
	            hh: '%d соат',
	            d: 'бир кун',
	            dd: '%d кун',
	            M: 'бир ой',
	            MM: '%d ой',
	            y: 'бир йил',
	            yy: '%d йил',
	        },
	        week: {
	            dow: 1, // Monday is the first day of the week.
	            doy: 7, // The week that contains Jan 4th is the first week of the year.
	        },
	    });
	
	    return uz;
	
	})));


/***/ }),
/* 499 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Vietnamese [vi]
	//! author : Bang Nguyen : https://github.com/bangnk
	//! author : Chien Kira : https://github.com/chienkira
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var vi = moment.defineLocale('vi', {
	        months: 'tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12'.split(
	            '_'
	        ),
	        monthsShort: 'Thg 01_Thg 02_Thg 03_Thg 04_Thg 05_Thg 06_Thg 07_Thg 08_Thg 09_Thg 10_Thg 11_Thg 12'.split(
	            '_'
	        ),
	        monthsParseExact: true,
	        weekdays: 'chủ nhật_thứ hai_thứ ba_thứ tư_thứ năm_thứ sáu_thứ bảy'.split(
	            '_'
	        ),
	        weekdaysShort: 'CN_T2_T3_T4_T5_T6_T7'.split('_'),
	        weekdaysMin: 'CN_T2_T3_T4_T5_T6_T7'.split('_'),
	        weekdaysParseExact: true,
	        meridiemParse: /sa|ch/i,
	        isPM: function (input) {
	            return /^ch$/i.test(input);
	        },
	        meridiem: function (hours, minutes, isLower) {
	            if (hours < 12) {
	                return isLower ? 'sa' : 'SA';
	            } else {
	                return isLower ? 'ch' : 'CH';
	            }
	        },
	        longDateFormat: {
	            LT: 'HH:mm',
	            LTS: 'HH:mm:ss',
	            L: 'DD/MM/YYYY',
	            LL: 'D MMMM [năm] YYYY',
	            LLL: 'D MMMM [năm] YYYY HH:mm',
	            LLLL: 'dddd, D MMMM [năm] YYYY HH:mm',
	            l: 'DD/M/YYYY',
	            ll: 'D MMM YYYY',
	            lll: 'D MMM YYYY HH:mm',
	            llll: 'ddd, D MMM YYYY HH:mm',
	        },
	        calendar: {
	            sameDay: '[Hôm nay lúc] LT',
	            nextDay: '[Ngày mai lúc] LT',
	            nextWeek: 'dddd [tuần tới lúc] LT',
	            lastDay: '[Hôm qua lúc] LT',
	            lastWeek: 'dddd [tuần trước lúc] LT',
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: '%s tới',
	            past: '%s trước',
	            s: 'vài giây',
	            ss: '%d giây',
	            m: 'một phút',
	            mm: '%d phút',
	            h: 'một giờ',
	            hh: '%d giờ',
	            d: 'một ngày',
	            dd: '%d ngày',
	            M: 'một tháng',
	            MM: '%d tháng',
	            y: 'một năm',
	            yy: '%d năm',
	        },
	        dayOfMonthOrdinalParse: /\d{1,2}/,
	        ordinal: function (number) {
	            return number;
	        },
	        week: {
	            dow: 1, // Monday is the first day of the week.
	            doy: 4, // The week that contains Jan 4th is the first week of the year.
	        },
	    });
	
	    return vi;
	
	})));


/***/ }),
/* 500 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Pseudo [x-pseudo]
	//! author : Andrew Hood : https://github.com/andrewhood125
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var xPseudo = moment.defineLocale('x-pseudo', {
	        months: 'J~áñúá~rý_F~ébrú~árý_~Márc~h_Áp~ríl_~Máý_~Júñé~_Júl~ý_Áú~gúst~_Sép~témb~ér_Ó~ctób~ér_Ñ~óvém~bér_~Décé~mbér'.split(
	            '_'
	        ),
	        monthsShort: 'J~áñ_~Féb_~Már_~Ápr_~Máý_~Júñ_~Júl_~Áúg_~Sép_~Óct_~Ñóv_~Déc'.split(
	            '_'
	        ),
	        monthsParseExact: true,
	        weekdays: 'S~úñdá~ý_Mó~ñdáý~_Túé~sdáý~_Wéd~ñésd~áý_T~húrs~dáý_~Fríd~áý_S~átúr~dáý'.split(
	            '_'
	        ),
	        weekdaysShort: 'S~úñ_~Móñ_~Túé_~Wéd_~Thú_~Frí_~Sát'.split('_'),
	        weekdaysMin: 'S~ú_Mó~_Tú_~Wé_T~h_Fr~_Sá'.split('_'),
	        weekdaysParseExact: true,
	        longDateFormat: {
	            LT: 'HH:mm',
	            L: 'DD/MM/YYYY',
	            LL: 'D MMMM YYYY',
	            LLL: 'D MMMM YYYY HH:mm',
	            LLLL: 'dddd, D MMMM YYYY HH:mm',
	        },
	        calendar: {
	            sameDay: '[T~ódá~ý át] LT',
	            nextDay: '[T~ómó~rró~w át] LT',
	            nextWeek: 'dddd [át] LT',
	            lastDay: '[Ý~ést~érdá~ý át] LT',
	            lastWeek: '[L~ást] dddd [át] LT',
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: 'í~ñ %s',
	            past: '%s á~gó',
	            s: 'á ~féw ~sécó~ñds',
	            ss: '%d s~écóñ~ds',
	            m: 'á ~míñ~úté',
	            mm: '%d m~íñú~tés',
	            h: 'á~ñ hó~úr',
	            hh: '%d h~óúrs',
	            d: 'á ~dáý',
	            dd: '%d d~áýs',
	            M: 'á ~móñ~th',
	            MM: '%d m~óñt~hs',
	            y: 'á ~ýéár',
	            yy: '%d ý~éárs',
	        },
	        dayOfMonthOrdinalParse: /\d{1,2}(th|st|nd|rd)/,
	        ordinal: function (number) {
	            var b = number % 10,
	                output =
	                    ~~((number % 100) / 10) === 1
	                        ? 'th'
	                        : b === 1
	                        ? 'st'
	                        : b === 2
	                        ? 'nd'
	                        : b === 3
	                        ? 'rd'
	                        : 'th';
	            return number + output;
	        },
	        week: {
	            dow: 1, // Monday is the first day of the week.
	            doy: 4, // The week that contains Jan 4th is the first week of the year.
	        },
	    });
	
	    return xPseudo;
	
	})));


/***/ }),
/* 501 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Yoruba Nigeria [yo]
	//! author : Atolagbe Abisoye : https://github.com/andela-batolagbe
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var yo = moment.defineLocale('yo', {
	        months: 'Sẹ́rẹ́_Èrèlè_Ẹrẹ̀nà_Ìgbé_Èbibi_Òkùdu_Agẹmo_Ògún_Owewe_Ọ̀wàrà_Bélú_Ọ̀pẹ̀̀'.split(
	            '_'
	        ),
	        monthsShort: 'Sẹ́r_Èrl_Ẹrn_Ìgb_Èbi_Òkù_Agẹ_Ògú_Owe_Ọ̀wà_Bél_Ọ̀pẹ̀̀'.split('_'),
	        weekdays: 'Àìkú_Ajé_Ìsẹ́gun_Ọjọ́rú_Ọjọ́bọ_Ẹtì_Àbámẹ́ta'.split('_'),
	        weekdaysShort: 'Àìk_Ajé_Ìsẹ́_Ọjr_Ọjb_Ẹtì_Àbá'.split('_'),
	        weekdaysMin: 'Àì_Aj_Ìs_Ọr_Ọb_Ẹt_Àb'.split('_'),
	        longDateFormat: {
	            LT: 'h:mm A',
	            LTS: 'h:mm:ss A',
	            L: 'DD/MM/YYYY',
	            LL: 'D MMMM YYYY',
	            LLL: 'D MMMM YYYY h:mm A',
	            LLLL: 'dddd, D MMMM YYYY h:mm A',
	        },
	        calendar: {
	            sameDay: '[Ònì ni] LT',
	            nextDay: '[Ọ̀la ni] LT',
	            nextWeek: "dddd [Ọsẹ̀ tón'bọ] [ni] LT",
	            lastDay: '[Àna ni] LT',
	            lastWeek: 'dddd [Ọsẹ̀ tólọ́] [ni] LT',
	            sameElse: 'L',
	        },
	        relativeTime: {
	            future: 'ní %s',
	            past: '%s kọjá',
	            s: 'ìsẹjú aayá die',
	            ss: 'aayá %d',
	            m: 'ìsẹjú kan',
	            mm: 'ìsẹjú %d',
	            h: 'wákati kan',
	            hh: 'wákati %d',
	            d: 'ọjọ́ kan',
	            dd: 'ọjọ́ %d',
	            M: 'osù kan',
	            MM: 'osù %d',
	            y: 'ọdún kan',
	            yy: 'ọdún %d',
	        },
	        dayOfMonthOrdinalParse: /ọjọ́\s\d{1,2}/,
	        ordinal: 'ọjọ́ %d',
	        week: {
	            dow: 1, // Monday is the first day of the week.
	            doy: 4, // The week that contains Jan 4th is the first week of the year.
	        },
	    });
	
	    return yo;
	
	})));


/***/ }),
/* 502 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Chinese (China) [zh-cn]
	//! author : suupic : https://github.com/suupic
	//! author : Zeno Zeng : https://github.com/zenozeng
	//! author : uu109 : https://github.com/uu109
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var zhCn = moment.defineLocale('zh-cn', {
	        months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split(
	            '_'
	        ),
	        monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split(
	            '_'
	        ),
	        weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),
	        weekdaysShort: '周日_周一_周二_周三_周四_周五_周六'.split('_'),
	        weekdaysMin: '日_一_二_三_四_五_六'.split('_'),
	        longDateFormat: {
	            LT: 'HH:mm',
	            LTS: 'HH:mm:ss',
	            L: 'YYYY/MM/DD',
	            LL: 'YYYY年M月D日',
	            LLL: 'YYYY年M月D日Ah点mm分',
	            LLLL: 'YYYY年M月D日ddddAh点mm分',
	            l: 'YYYY/M/D',
	            ll: 'YYYY年M月D日',
	            lll: 'YYYY年M月D日 HH:mm',
	            llll: 'YYYY年M月D日dddd HH:mm',
	        },
	        meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,
	        meridiemHour: function (hour, meridiem) {
	            if (hour === 12) {
	                hour = 0;
	            }
	            if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {
	                return hour;
	            } else if (meridiem === '下午' || meridiem === '晚上') {
	                return hour + 12;
	            } else {
	                // '中午'
	                return hour >= 11 ? hour : hour + 12;
	            }
	        },
	        meridiem: function (hour, minute, isLower) {
	            var hm = hour * 100 + minute;
	            if (hm < 600) {
	                return '凌晨';
	            } else if (hm < 900) {
	                return '早上';
	            } else if (hm < 1130) {
	                return '上午';
	            } else if (hm < 1230) {
	                return '中午';
	            } else if (hm < 1800) {
	                return '下午';
	            } else {
	                return '晚上';
	            }
	        },
	        calendar: {
	            sameDay: '[今天]LT',
	            nextDay: '[明天]LT',
	            nextWeek: function (now) {
	                if (now.week() !== this.week()) {
	                    return '[下]dddLT';
	                } else {
	                    return '[本]dddLT';
	                }
	            },
	            lastDay: '[昨天]LT',
	            lastWeek: function (now) {
	                if (this.week() !== now.week()) {
	                    return '[上]dddLT';
	                } else {
	                    return '[本]dddLT';
	                }
	            },
	            sameElse: 'L',
	        },
	        dayOfMonthOrdinalParse: /\d{1,2}(日|月|周)/,
	        ordinal: function (number, period) {
	            switch (period) {
	                case 'd':
	                case 'D':
	                case 'DDD':
	                    return number + '日';
	                case 'M':
	                    return number + '月';
	                case 'w':
	                case 'W':
	                    return number + '周';
	                default:
	                    return number;
	            }
	        },
	        relativeTime: {
	            future: '%s后',
	            past: '%s前',
	            s: '几秒',
	            ss: '%d 秒',
	            m: '1 分钟',
	            mm: '%d 分钟',
	            h: '1 小时',
	            hh: '%d 小时',
	            d: '1 天',
	            dd: '%d 天',
	            M: '1 个月',
	            MM: '%d 个月',
	            y: '1 年',
	            yy: '%d 年',
	        },
	        week: {
	            // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效
	            dow: 1, // Monday is the first day of the week.
	            doy: 4, // The week that contains Jan 4th is the first week of the year.
	        },
	    });
	
	    return zhCn;
	
	})));


/***/ }),
/* 503 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Chinese (Hong Kong) [zh-hk]
	//! author : Ben : https://github.com/ben-lin
	//! author : Chris Lam : https://github.com/hehachris
	//! author : Konstantin : https://github.com/skfd
	//! author : Anthony : https://github.com/anthonylau
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var zhHk = moment.defineLocale('zh-hk', {
	        months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split(
	            '_'
	        ),
	        monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split(
	            '_'
	        ),
	        weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),
	        weekdaysShort: '週日_週一_週二_週三_週四_週五_週六'.split('_'),
	        weekdaysMin: '日_一_二_三_四_五_六'.split('_'),
	        longDateFormat: {
	            LT: 'HH:mm',
	            LTS: 'HH:mm:ss',
	            L: 'YYYY/MM/DD',
	            LL: 'YYYY年M月D日',
	            LLL: 'YYYY年M月D日 HH:mm',
	            LLLL: 'YYYY年M月D日dddd HH:mm',
	            l: 'YYYY/M/D',
	            ll: 'YYYY年M月D日',
	            lll: 'YYYY年M月D日 HH:mm',
	            llll: 'YYYY年M月D日dddd HH:mm',
	        },
	        meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,
	        meridiemHour: function (hour, meridiem) {
	            if (hour === 12) {
	                hour = 0;
	            }
	            if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {
	                return hour;
	            } else if (meridiem === '中午') {
	                return hour >= 11 ? hour : hour + 12;
	            } else if (meridiem === '下午' || meridiem === '晚上') {
	                return hour + 12;
	            }
	        },
	        meridiem: function (hour, minute, isLower) {
	            var hm = hour * 100 + minute;
	            if (hm < 600) {
	                return '凌晨';
	            } else if (hm < 900) {
	                return '早上';
	            } else if (hm < 1200) {
	                return '上午';
	            } else if (hm === 1200) {
	                return '中午';
	            } else if (hm < 1800) {
	                return '下午';
	            } else {
	                return '晚上';
	            }
	        },
	        calendar: {
	            sameDay: '[今天]LT',
	            nextDay: '[明天]LT',
	            nextWeek: '[下]ddddLT',
	            lastDay: '[昨天]LT',
	            lastWeek: '[上]ddddLT',
	            sameElse: 'L',
	        },
	        dayOfMonthOrdinalParse: /\d{1,2}(日|月|週)/,
	        ordinal: function (number, period) {
	            switch (period) {
	                case 'd':
	                case 'D':
	                case 'DDD':
	                    return number + '日';
	                case 'M':
	                    return number + '月';
	                case 'w':
	                case 'W':
	                    return number + '週';
	                default:
	                    return number;
	            }
	        },
	        relativeTime: {
	            future: '%s後',
	            past: '%s前',
	            s: '幾秒',
	            ss: '%d 秒',
	            m: '1 分鐘',
	            mm: '%d 分鐘',
	            h: '1 小時',
	            hh: '%d 小時',
	            d: '1 天',
	            dd: '%d 天',
	            M: '1 個月',
	            MM: '%d 個月',
	            y: '1 年',
	            yy: '%d 年',
	        },
	    });
	
	    return zhHk;
	
	})));


/***/ }),
/* 504 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Chinese (Macau) [zh-mo]
	//! author : Ben : https://github.com/ben-lin
	//! author : Chris Lam : https://github.com/hehachris
	//! author : Tan Yuanhong : https://github.com/le0tan
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var zhMo = moment.defineLocale('zh-mo', {
	        months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split(
	            '_'
	        ),
	        monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split(
	            '_'
	        ),
	        weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),
	        weekdaysShort: '週日_週一_週二_週三_週四_週五_週六'.split('_'),
	        weekdaysMin: '日_一_二_三_四_五_六'.split('_'),
	        longDateFormat: {
	            LT: 'HH:mm',
	            LTS: 'HH:mm:ss',
	            L: 'DD/MM/YYYY',
	            LL: 'YYYY年M月D日',
	            LLL: 'YYYY年M月D日 HH:mm',
	            LLLL: 'YYYY年M月D日dddd HH:mm',
	            l: 'D/M/YYYY',
	            ll: 'YYYY年M月D日',
	            lll: 'YYYY年M月D日 HH:mm',
	            llll: 'YYYY年M月D日dddd HH:mm',
	        },
	        meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,
	        meridiemHour: function (hour, meridiem) {
	            if (hour === 12) {
	                hour = 0;
	            }
	            if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {
	                return hour;
	            } else if (meridiem === '中午') {
	                return hour >= 11 ? hour : hour + 12;
	            } else if (meridiem === '下午' || meridiem === '晚上') {
	                return hour + 12;
	            }
	        },
	        meridiem: function (hour, minute, isLower) {
	            var hm = hour * 100 + minute;
	            if (hm < 600) {
	                return '凌晨';
	            } else if (hm < 900) {
	                return '早上';
	            } else if (hm < 1130) {
	                return '上午';
	            } else if (hm < 1230) {
	                return '中午';
	            } else if (hm < 1800) {
	                return '下午';
	            } else {
	                return '晚上';
	            }
	        },
	        calendar: {
	            sameDay: '[今天] LT',
	            nextDay: '[明天] LT',
	            nextWeek: '[下]dddd LT',
	            lastDay: '[昨天] LT',
	            lastWeek: '[上]dddd LT',
	            sameElse: 'L',
	        },
	        dayOfMonthOrdinalParse: /\d{1,2}(日|月|週)/,
	        ordinal: function (number, period) {
	            switch (period) {
	                case 'd':
	                case 'D':
	                case 'DDD':
	                    return number + '日';
	                case 'M':
	                    return number + '月';
	                case 'w':
	                case 'W':
	                    return number + '週';
	                default:
	                    return number;
	            }
	        },
	        relativeTime: {
	            future: '%s內',
	            past: '%s前',
	            s: '幾秒',
	            ss: '%d 秒',
	            m: '1 分鐘',
	            mm: '%d 分鐘',
	            h: '1 小時',
	            hh: '%d 小時',
	            d: '1 天',
	            dd: '%d 天',
	            M: '1 個月',
	            MM: '%d 個月',
	            y: '1 年',
	            yy: '%d 年',
	        },
	    });
	
	    return zhMo;
	
	})));


/***/ }),
/* 505 */
/***/ (function(module, exports, __webpack_require__) {

	//! moment.js locale configuration
	//! locale : Chinese (Taiwan) [zh-tw]
	//! author : Ben : https://github.com/ben-lin
	//! author : Chris Lam : https://github.com/hehachris
	
	;(function (global, factory) {
	    true ? factory(__webpack_require__(2)) :
	   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
	   factory(global.moment)
	}(this, (function (moment) { 'use strict';
	
	    //! moment.js locale configuration
	
	    var zhTw = moment.defineLocale('zh-tw', {
	        months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split(
	            '_'
	        ),
	        monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split(
	            '_'
	        ),
	        weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),
	        weekdaysShort: '週日_週一_週二_週三_週四_週五_週六'.split('_'),
	        weekdaysMin: '日_一_二_三_四_五_六'.split('_'),
	        longDateFormat: {
	            LT: 'HH:mm',
	            LTS: 'HH:mm:ss',
	            L: 'YYYY/MM/DD',
	            LL: 'YYYY年M月D日',
	            LLL: 'YYYY年M月D日 HH:mm',
	            LLLL: 'YYYY年M月D日dddd HH:mm',
	            l: 'YYYY/M/D',
	            ll: 'YYYY年M月D日',
	            lll: 'YYYY年M月D日 HH:mm',
	            llll: 'YYYY年M月D日dddd HH:mm',
	        },
	        meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,
	        meridiemHour: function (hour, meridiem) {
	            if (hour === 12) {
	                hour = 0;
	            }
	            if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {
	                return hour;
	            } else if (meridiem === '中午') {
	                return hour >= 11 ? hour : hour + 12;
	            } else if (meridiem === '下午' || meridiem === '晚上') {
	                return hour + 12;
	            }
	        },
	        meridiem: function (hour, minute, isLower) {
	            var hm = hour * 100 + minute;
	            if (hm < 600) {
	                return '凌晨';
	            } else if (hm < 900) {
	                return '早上';
	            } else if (hm < 1130) {
	                return '上午';
	            } else if (hm < 1230) {
	                return '中午';
	            } else if (hm < 1800) {
	                return '下午';
	            } else {
	                return '晚上';
	            }
	        },
	        calendar: {
	            sameDay: '[今天] LT',
	            nextDay: '[明天] LT',
	            nextWeek: '[下]dddd LT',
	            lastDay: '[昨天] LT',
	            lastWeek: '[上]dddd LT',
	            sameElse: 'L',
	        },
	        dayOfMonthOrdinalParse: /\d{1,2}(日|月|週)/,
	        ordinal: function (number, period) {
	            switch (period) {
	                case 'd':
	                case 'D':
	                case 'DDD':
	                    return number + '日';
	                case 'M':
	                    return number + '月';
	                case 'w':
	                case 'W':
	                    return number + '週';
	                default:
	                    return number;
	            }
	        },
	        relativeTime: {
	            future: '%s後',
	            past: '%s前',
	            s: '幾秒',
	            ss: '%d 秒',
	            m: '1 分鐘',
	            mm: '%d 分鐘',
	            h: '1 小時',
	            hh: '%d 小時',
	            d: '1 天',
	            dd: '%d 天',
	            M: '1 個月',
	            MM: '%d 個月',
	            y: '1 年',
	            yy: '%d 年',
	        },
	    });
	
	    return zhTw;
	
	})));


/***/ }),
/* 506 */
/***/ (function(module, exports) {

	'use strict';
	
	var numberIsNaN = function (value) {
		return value !== value;
	};
	
	module.exports = function is(a, b) {
		if (a === 0 && b === 0) {
			return 1 / a === 1 / b;
		}
		if (a === b) {
			return true;
		}
		if (numberIsNaN(a) && numberIsNaN(b)) {
			return true;
		}
		return false;
	};
	


/***/ }),
/* 507 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	var slice = Array.prototype.slice;
	var isArgs = __webpack_require__(508);
	
	var origKeys = Object.keys;
	var keysShim = origKeys ? function keys(o) { return origKeys(o); } : __webpack_require__(1085);
	
	var originalKeys = Object.keys;
	
	keysShim.shim = function shimObjectKeys() {
		if (Object.keys) {
			var keysWorksWithArguments = (function () {
				// Safari 5.0 bug
				var args = Object.keys(arguments);
				return args && args.length === arguments.length;
			}(1, 2));
			if (!keysWorksWithArguments) {
				Object.keys = function keys(object) { // eslint-disable-line func-name-matching
					if (isArgs(object)) {
						return originalKeys(slice.call(object));
					}
					return originalKeys(object);
				};
			}
		} else {
			Object.keys = keysShim;
		}
		return Object.keys || keysShim;
	};
	
	module.exports = keysShim;


/***/ }),
/* 508 */
/***/ (function(module, exports) {

	'use strict';
	
	var toStr = Object.prototype.toString;
	
	module.exports = function isArguments(value) {
		var str = toStr.call(value);
		var isArgs = str === '[object Arguments]';
		if (!isArgs) {
			isArgs = str !== '[object Array]' &&
				value !== null &&
				typeof value === 'object' &&
				typeof value.length === 'number' &&
				value.length >= 0 &&
				toStr.call(value.callee) === '[object Function]';
		}
		return isArgs;
	};


/***/ }),
/* 509 */
/***/ (function(module, exports, __webpack_require__) {

	// String encode/decode helpers
	'use strict';
	
	
	var utils = __webpack_require__(80);
	
	
	// Quick check if we can use fast array to bin string conversion
	//
	// - apply(Array) can fail on Android 2.2
	// - apply(Uint8Array) can fail on iOS 5.1 Safari
	//
	var STR_APPLY_OK = true;
	var STR_APPLY_UIA_OK = true;
	
	try { String.fromCharCode.apply(null, [ 0 ]); } catch (__) { STR_APPLY_OK = false; }
	try { String.fromCharCode.apply(null, new Uint8Array(1)); } catch (__) { STR_APPLY_UIA_OK = false; }
	
	
	// Table with utf8 lengths (calculated by first byte of sequence)
	// Note, that 5 & 6-byte values and some 4-byte values can not be represented in JS,
	// because max possible codepoint is 0x10ffff
	var _utf8len = new utils.Buf8(256);
	for (var q = 0; q < 256; q++) {
	  _utf8len[q] = (q >= 252 ? 6 : q >= 248 ? 5 : q >= 240 ? 4 : q >= 224 ? 3 : q >= 192 ? 2 : 1);
	}
	_utf8len[254] = _utf8len[254] = 1; // Invalid sequence start
	
	
	// convert string to array (typed, when possible)
	exports.string2buf = function (str) {
	  var buf, c, c2, m_pos, i, str_len = str.length, buf_len = 0;
	
	  // count binary size
	  for (m_pos = 0; m_pos < str_len; m_pos++) {
	    c = str.charCodeAt(m_pos);
	    if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) {
	      c2 = str.charCodeAt(m_pos + 1);
	      if ((c2 & 0xfc00) === 0xdc00) {
	        c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);
	        m_pos++;
	      }
	    }
	    buf_len += c < 0x80 ? 1 : c < 0x800 ? 2 : c < 0x10000 ? 3 : 4;
	  }
	
	  // allocate buffer
	  buf = new utils.Buf8(buf_len);
	
	  // convert
	  for (i = 0, m_pos = 0; i < buf_len; m_pos++) {
	    c = str.charCodeAt(m_pos);
	    if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) {
	      c2 = str.charCodeAt(m_pos + 1);
	      if ((c2 & 0xfc00) === 0xdc00) {
	        c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);
	        m_pos++;
	      }
	    }
	    if (c < 0x80) {
	      /* one byte */
	      buf[i++] = c;
	    } else if (c < 0x800) {
	      /* two bytes */
	      buf[i++] = 0xC0 | (c >>> 6);
	      buf[i++] = 0x80 | (c & 0x3f);
	    } else if (c < 0x10000) {
	      /* three bytes */
	      buf[i++] = 0xE0 | (c >>> 12);
	      buf[i++] = 0x80 | (c >>> 6 & 0x3f);
	      buf[i++] = 0x80 | (c & 0x3f);
	    } else {
	      /* four bytes */
	      buf[i++] = 0xf0 | (c >>> 18);
	      buf[i++] = 0x80 | (c >>> 12 & 0x3f);
	      buf[i++] = 0x80 | (c >>> 6 & 0x3f);
	      buf[i++] = 0x80 | (c & 0x3f);
	    }
	  }
	
	  return buf;
	};
	
	// Helper (used in 2 places)
	function buf2binstring(buf, len) {
	  // On Chrome, the arguments in a function call that are allowed is `65534`.
	  // If the length of the buffer is smaller than that, we can use this optimization,
	  // otherwise we will take a slower path.
	  if (len < 65534) {
	    if ((buf.subarray && STR_APPLY_UIA_OK) || (!buf.subarray && STR_APPLY_OK)) {
	      return String.fromCharCode.apply(null, utils.shrinkBuf(buf, len));
	    }
	  }
	
	  var result = '';
	  for (var i = 0; i < len; i++) {
	    result += String.fromCharCode(buf[i]);
	  }
	  return result;
	}
	
	
	// Convert byte array to binary string
	exports.buf2binstring = function (buf) {
	  return buf2binstring(buf, buf.length);
	};
	
	
	// Convert binary string (typed, when possible)
	exports.binstring2buf = function (str) {
	  var buf = new utils.Buf8(str.length);
	  for (var i = 0, len = buf.length; i < len; i++) {
	    buf[i] = str.charCodeAt(i);
	  }
	  return buf;
	};
	
	
	// convert array to string
	exports.buf2string = function (buf, max) {
	  var i, out, c, c_len;
	  var len = max || buf.length;
	
	  // Reserve max possible length (2 words per char)
	  // NB: by unknown reasons, Array is significantly faster for
	  //     String.fromCharCode.apply than Uint16Array.
	  var utf16buf = new Array(len * 2);
	
	  for (out = 0, i = 0; i < len;) {
	    c = buf[i++];
	    // quick process ascii
	    if (c < 0x80) { utf16buf[out++] = c; continue; }
	
	    c_len = _utf8len[c];
	    // skip 5 & 6 byte codes
	    if (c_len > 4) { utf16buf[out++] = 0xfffd; i += c_len - 1; continue; }
	
	    // apply mask on first byte
	    c &= c_len === 2 ? 0x1f : c_len === 3 ? 0x0f : 0x07;
	    // join the rest
	    while (c_len > 1 && i < len) {
	      c = (c << 6) | (buf[i++] & 0x3f);
	      c_len--;
	    }
	
	    // terminated by end of string?
	    if (c_len > 1) { utf16buf[out++] = 0xfffd; continue; }
	
	    if (c < 0x10000) {
	      utf16buf[out++] = c;
	    } else {
	      c -= 0x10000;
	      utf16buf[out++] = 0xd800 | ((c >> 10) & 0x3ff);
	      utf16buf[out++] = 0xdc00 | (c & 0x3ff);
	    }
	  }
	
	  return buf2binstring(utf16buf, out);
	};
	
	
	// Calculate max possible position in utf8 buffer,
	// that will not break sequence. If that's not possible
	// - (very small limits) return max size as is.
	//
	// buf[] - utf8 bytes array
	// max   - length limit (mandatory);
	exports.utf8border = function (buf, max) {
	  var pos;
	
	  max = max || buf.length;
	  if (max > buf.length) { max = buf.length; }
	
	  // go back from last position, until start of sequence found
	  pos = max - 1;
	  while (pos >= 0 && (buf[pos] & 0xC0) === 0x80) { pos--; }
	
	  // Very small and broken sequence,
	  // return max, because we should return something anyway.
	  if (pos < 0) { return max; }
	
	  // If we came to start of buffer - that means buffer is too small,
	  // return max too.
	  if (pos === 0) { return max; }
	
	  return (pos + _utf8len[buf[pos]] > max) ? pos : max;
	};


/***/ }),
/* 510 */
/***/ (function(module, exports) {

	'use strict';
	
	// Note: adler32 takes 12% for level 0 and 2% for level 6.
	// It isn't worth it to make additional optimizations as in original.
	// Small size is preferable.
	
	// (C) 1995-2013 Jean-loup Gailly and Mark Adler
	// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
	//
	// This software is provided 'as-is', without any express or implied
	// warranty. In no event will the authors be held liable for any damages
	// arising from the use of this software.
	//
	// Permission is granted to anyone to use this software for any purpose,
	// including commercial applications, and to alter it and redistribute it
	// freely, subject to the following restrictions:
	//
	// 1. The origin of this software must not be misrepresented; you must not
	//   claim that you wrote the original software. If you use this software
	//   in a product, an acknowledgment in the product documentation would be
	//   appreciated but is not required.
	// 2. Altered source versions must be plainly marked as such, and must not be
	//   misrepresented as being the original software.
	// 3. This notice may not be removed or altered from any source distribution.
	
	function adler32(adler, buf, len, pos) {
	  var s1 = (adler & 0xffff) |0,
	      s2 = ((adler >>> 16) & 0xffff) |0,
	      n = 0;
	
	  while (len !== 0) {
	    // Set limit ~ twice less than 5552, to keep
	    // s2 in 31-bits, because we force signed ints.
	    // in other case %= will fail.
	    n = len > 2000 ? 2000 : len;
	    len -= n;
	
	    do {
	      s1 = (s1 + buf[pos++]) |0;
	      s2 = (s2 + s1) |0;
	    } while (--n);
	
	    s1 %= 65521;
	    s2 %= 65521;
	  }
	
	  return (s1 | (s2 << 16)) |0;
	}
	
	
	module.exports = adler32;


/***/ }),
/* 511 */
/***/ (function(module, exports) {

	'use strict';
	
	// (C) 1995-2013 Jean-loup Gailly and Mark Adler
	// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
	//
	// This software is provided 'as-is', without any express or implied
	// warranty. In no event will the authors be held liable for any damages
	// arising from the use of this software.
	//
	// Permission is granted to anyone to use this software for any purpose,
	// including commercial applications, and to alter it and redistribute it
	// freely, subject to the following restrictions:
	//
	// 1. The origin of this software must not be misrepresented; you must not
	//   claim that you wrote the original software. If you use this software
	//   in a product, an acknowledgment in the product documentation would be
	//   appreciated but is not required.
	// 2. Altered source versions must be plainly marked as such, and must not be
	//   misrepresented as being the original software.
	// 3. This notice may not be removed or altered from any source distribution.
	
	module.exports = {
	
	  /* Allowed flush values; see deflate() and inflate() below for details */
	  Z_NO_FLUSH:         0,
	  Z_PARTIAL_FLUSH:    1,
	  Z_SYNC_FLUSH:       2,
	  Z_FULL_FLUSH:       3,
	  Z_FINISH:           4,
	  Z_BLOCK:            5,
	  Z_TREES:            6,
	
	  /* Return codes for the compression/decompression functions. Negative values
	  * are errors, positive values are used for special but normal events.
	  */
	  Z_OK:               0,
	  Z_STREAM_END:       1,
	  Z_NEED_DICT:        2,
	  Z_ERRNO:           -1,
	  Z_STREAM_ERROR:    -2,
	  Z_DATA_ERROR:      -3,
	  //Z_MEM_ERROR:     -4,
	  Z_BUF_ERROR:       -5,
	  //Z_VERSION_ERROR: -6,
	
	  /* compression levels */
	  Z_NO_COMPRESSION:         0,
	  Z_BEST_SPEED:             1,
	  Z_BEST_COMPRESSION:       9,
	  Z_DEFAULT_COMPRESSION:   -1,
	
	
	  Z_FILTERED:               1,
	  Z_HUFFMAN_ONLY:           2,
	  Z_RLE:                    3,
	  Z_FIXED:                  4,
	  Z_DEFAULT_STRATEGY:       0,
	
	  /* Possible values of the data_type field (though see inflate()) */
	  Z_BINARY:                 0,
	  Z_TEXT:                   1,
	  //Z_ASCII:                1, // = Z_TEXT (deprecated)
	  Z_UNKNOWN:                2,
	
	  /* The deflate compression method */
	  Z_DEFLATED:               8
	  //Z_NULL:                 null // Use -1 or null inline, depending on var type
	};


/***/ }),
/* 512 */
/***/ (function(module, exports) {

	'use strict';
	
	// Note: we can't get significant speed boost here.
	// So write code to minimize size - no pregenerated tables
	// and array tools dependencies.
	
	// (C) 1995-2013 Jean-loup Gailly and Mark Adler
	// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
	//
	// This software is provided 'as-is', without any express or implied
	// warranty. In no event will the authors be held liable for any damages
	// arising from the use of this software.
	//
	// Permission is granted to anyone to use this software for any purpose,
	// including commercial applications, and to alter it and redistribute it
	// freely, subject to the following restrictions:
	//
	// 1. The origin of this software must not be misrepresented; you must not
	//   claim that you wrote the original software. If you use this software
	//   in a product, an acknowledgment in the product documentation would be
	//   appreciated but is not required.
	// 2. Altered source versions must be plainly marked as such, and must not be
	//   misrepresented as being the original software.
	// 3. This notice may not be removed or altered from any source distribution.
	
	// Use ordinary array, since untyped makes no boost here
	function makeTable() {
	  var c, table = [];
	
	  for (var n = 0; n < 256; n++) {
	    c = n;
	    for (var k = 0; k < 8; k++) {
	      c = ((c & 1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1));
	    }
	    table[n] = c;
	  }
	
	  return table;
	}
	
	// Create table on load. Just 255 signed longs. Not a problem.
	var crcTable = makeTable();
	
	
	function crc32(crc, buf, len, pos) {
	  var t = crcTable,
	      end = pos + len;
	
	  crc ^= -1;
	
	  for (var i = pos; i < end; i++) {
	    crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xFF];
	  }
	
	  return (crc ^ (-1)); // >>> 0;
	}
	
	
	module.exports = crc32;


/***/ }),
/* 513 */
/***/ (function(module, exports) {

	'use strict';
	
	// (C) 1995-2013 Jean-loup Gailly and Mark Adler
	// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
	//
	// This software is provided 'as-is', without any express or implied
	// warranty. In no event will the authors be held liable for any damages
	// arising from the use of this software.
	//
	// Permission is granted to anyone to use this software for any purpose,
	// including commercial applications, and to alter it and redistribute it
	// freely, subject to the following restrictions:
	//
	// 1. The origin of this software must not be misrepresented; you must not
	//   claim that you wrote the original software. If you use this software
	//   in a product, an acknowledgment in the product documentation would be
	//   appreciated but is not required.
	// 2. Altered source versions must be plainly marked as such, and must not be
	//   misrepresented as being the original software.
	// 3. This notice may not be removed or altered from any source distribution.
	
	function ZStream() {
	  /* next input byte */
	  this.input = null; // JS specific, because we have no pointers
	  this.next_in = 0;
	  /* number of bytes available at input */
	  this.avail_in = 0;
	  /* total number of input bytes read so far */
	  this.total_in = 0;
	  /* next output byte should be put there */
	  this.output = null; // JS specific, because we have no pointers
	  this.next_out = 0;
	  /* remaining free space at output */
	  this.avail_out = 0;
	  /* total number of bytes output so far */
	  this.total_out = 0;
	  /* last error message, NULL if no error */
	  this.msg = ''/*Z_NULL*/;
	  /* not visible by applications */
	  this.state = null;
	  /* best guess about the data type: binary or text */
	  this.data_type = 2/*Z_UNKNOWN*/;
	  /* adler32 value of the uncompressed data */
	  this.adler = 0;
	}
	
	module.exports = ZStream;


/***/ }),
/* 514 */
/***/ (function(module, exports, __webpack_require__) {

	!function(t,i){ true?module.exports=i():"function"==typeof define&&define.amd?define(i):(t=t||self).RBush=i()}(this,function(){"use strict";function t(t,r,e,a,h){!function t(n,r,e,a,h){for(;a>e;){if(a-e>600){var o=a-e+1,s=r-e+1,l=Math.log(o),f=.5*Math.exp(2*l/3),u=.5*Math.sqrt(l*f*(o-f)/o)*(s-o/2<0?-1:1),m=Math.max(e,Math.floor(r-s*f/o+u)),c=Math.min(a,Math.floor(r+(o-s)*f/o+u));t(n,r,m,c,h)}var p=n[r],d=e,x=a;for(i(n,e,r),h(n[a],p)>0&&i(n,e,a);d<x;){for(i(n,d,x),d++,x--;h(n[d],p)<0;)d++;for(;h(n[x],p)>0;)x--}0===h(n[e],p)?i(n,e,x):i(n,++x,a),x<=r&&(e=x+1),r<=x&&(a=x-1)}}(t,r,e||0,a||t.length-1,h||n)}function i(t,i,n){var r=t[i];t[i]=t[n],t[n]=r}function n(t,i){return t<i?-1:t>i?1:0}var r=function(t){void 0===t&&(t=9),this._maxEntries=Math.max(4,t),this._minEntries=Math.max(2,Math.ceil(.4*this._maxEntries)),this.clear()};function e(t,i,n){if(!n)return i.indexOf(t);for(var r=0;r<i.length;r++)if(n(t,i[r]))return r;return-1}function a(t,i){h(t,0,t.children.length,i,t)}function h(t,i,n,r,e){e||(e=p(null)),e.minX=1/0,e.minY=1/0,e.maxX=-1/0,e.maxY=-1/0;for(var a=i;a<n;a++){var h=t.children[a];o(e,t.leaf?r(h):h)}return e}function o(t,i){return t.minX=Math.min(t.minX,i.minX),t.minY=Math.min(t.minY,i.minY),t.maxX=Math.max(t.maxX,i.maxX),t.maxY=Math.max(t.maxY,i.maxY),t}function s(t,i){return t.minX-i.minX}function l(t,i){return t.minY-i.minY}function f(t){return(t.maxX-t.minX)*(t.maxY-t.minY)}function u(t){return t.maxX-t.minX+(t.maxY-t.minY)}function m(t,i){return t.minX<=i.minX&&t.minY<=i.minY&&i.maxX<=t.maxX&&i.maxY<=t.maxY}function c(t,i){return i.minX<=t.maxX&&i.minY<=t.maxY&&i.maxX>=t.minX&&i.maxY>=t.minY}function p(t){return{children:t,height:1,leaf:!0,minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0}}function d(i,n,r,e,a){for(var h=[n,r];h.length;)if(!((r=h.pop())-(n=h.pop())<=e)){var o=n+Math.ceil((r-n)/e/2)*e;t(i,o,n,r,a),h.push(n,o,o,r)}}return r.prototype.all=function(){return this._all(this.data,[])},r.prototype.search=function(t){var i=this.data,n=[];if(!c(t,i))return n;for(var r=this.toBBox,e=[];i;){for(var a=0;a<i.children.length;a++){var h=i.children[a],o=i.leaf?r(h):h;c(t,o)&&(i.leaf?n.push(h):m(t,o)?this._all(h,n):e.push(h))}i=e.pop()}return n},r.prototype.collides=function(t){var i=this.data;if(!c(t,i))return!1;for(var n=[];i;){for(var r=0;r<i.children.length;r++){var e=i.children[r],a=i.leaf?this.toBBox(e):e;if(c(t,a)){if(i.leaf||m(t,a))return!0;n.push(e)}}i=n.pop()}return!1},r.prototype.load=function(t){if(!t||!t.length)return this;if(t.length<this._minEntries){for(var i=0;i<t.length;i++)this.insert(t[i]);return this}var n=this._build(t.slice(),0,t.length-1,0);if(this.data.children.length)if(this.data.height===n.height)this._splitRoot(this.data,n);else{if(this.data.height<n.height){var r=this.data;this.data=n,n=r}this._insert(n,this.data.height-n.height-1,!0)}else this.data=n;return this},r.prototype.insert=function(t){return t&&this._insert(t,this.data.height-1),this},r.prototype.clear=function(){return this.data=p([]),this},r.prototype.remove=function(t,i){if(!t)return this;for(var n,r,a,h=this.data,o=this.toBBox(t),s=[],l=[];h||s.length;){if(h||(h=s.pop(),r=s[s.length-1],n=l.pop(),a=!0),h.leaf){var f=e(t,h.children,i);if(-1!==f)return h.children.splice(f,1),s.push(h),this._condense(s),this}a||h.leaf||!m(h,o)?r?(n++,h=r.children[n],a=!1):h=null:(s.push(h),l.push(n),n=0,r=h,h=h.children[0])}return this},r.prototype.toBBox=function(t){return t},r.prototype.compareMinX=function(t,i){return t.minX-i.minX},r.prototype.compareMinY=function(t,i){return t.minY-i.minY},r.prototype.toJSON=function(){return this.data},r.prototype.fromJSON=function(t){return this.data=t,this},r.prototype._all=function(t,i){for(var n=[];t;)t.leaf?i.push.apply(i,t.children):n.push.apply(n,t.children),t=n.pop();return i},r.prototype._build=function(t,i,n,r){var e,h=n-i+1,o=this._maxEntries;if(h<=o)return a(e=p(t.slice(i,n+1)),this.toBBox),e;r||(r=Math.ceil(Math.log(h)/Math.log(o)),o=Math.ceil(h/Math.pow(o,r-1))),(e=p([])).leaf=!1,e.height=r;var s=Math.ceil(h/o),l=s*Math.ceil(Math.sqrt(o));d(t,i,n,l,this.compareMinX);for(var f=i;f<=n;f+=l){var u=Math.min(f+l-1,n);d(t,f,u,s,this.compareMinY);for(var m=f;m<=u;m+=s){var c=Math.min(m+s-1,u);e.children.push(this._build(t,m,c,r-1))}}return a(e,this.toBBox),e},r.prototype._chooseSubtree=function(t,i,n,r){for(;r.push(i),!i.leaf&&r.length-1!==n;){for(var e=1/0,a=1/0,h=void 0,o=0;o<i.children.length;o++){var s=i.children[o],l=f(s),u=(m=t,c=s,(Math.max(c.maxX,m.maxX)-Math.min(c.minX,m.minX))*(Math.max(c.maxY,m.maxY)-Math.min(c.minY,m.minY))-l);u<a?(a=u,e=l<e?l:e,h=s):u===a&&l<e&&(e=l,h=s)}i=h||i.children[0]}var m,c;return i},r.prototype._insert=function(t,i,n){var r=n?t:this.toBBox(t),e=[],a=this._chooseSubtree(r,this.data,i,e);for(a.children.push(t),o(a,r);i>=0&&e[i].children.length>this._maxEntries;)this._split(e,i),i--;this._adjustParentBBoxes(r,e,i)},r.prototype._split=function(t,i){var n=t[i],r=n.children.length,e=this._minEntries;this._chooseSplitAxis(n,e,r);var h=this._chooseSplitIndex(n,e,r),o=p(n.children.splice(h,n.children.length-h));o.height=n.height,o.leaf=n.leaf,a(n,this.toBBox),a(o,this.toBBox),i?t[i-1].children.push(o):this._splitRoot(n,o)},r.prototype._splitRoot=function(t,i){this.data=p([t,i]),this.data.height=t.height+1,this.data.leaf=!1,a(this.data,this.toBBox)},r.prototype._chooseSplitIndex=function(t,i,n){for(var r,e,a,o,s,l,u,m=1/0,c=1/0,p=i;p<=n-i;p++){var d=h(t,0,p,this.toBBox),x=h(t,p,n,this.toBBox),v=(e=d,a=x,o=void 0,s=void 0,l=void 0,u=void 0,o=Math.max(e.minX,a.minX),s=Math.max(e.minY,a.minY),l=Math.min(e.maxX,a.maxX),u=Math.min(e.maxY,a.maxY),Math.max(0,l-o)*Math.max(0,u-s)),M=f(d)+f(x);v<m?(m=v,r=p,c=M<c?M:c):v===m&&M<c&&(c=M,r=p)}return r||n-i},r.prototype._chooseSplitAxis=function(t,i,n){var r=t.leaf?this.compareMinX:s,e=t.leaf?this.compareMinY:l;this._allDistMargin(t,i,n,r)<this._allDistMargin(t,i,n,e)&&t.children.sort(r)},r.prototype._allDistMargin=function(t,i,n,r){t.children.sort(r);for(var e=this.toBBox,a=h(t,0,i,e),s=h(t,n-i,n,e),l=u(a)+u(s),f=i;f<n-i;f++){var m=t.children[f];o(a,t.leaf?e(m):m),l+=u(a)}for(var c=n-i-1;c>=i;c--){var p=t.children[c];o(s,t.leaf?e(p):p),l+=u(s)}return l},r.prototype._adjustParentBBoxes=function(t,i,n){for(var r=n;r>=0;r--)o(i[r],t)},r.prototype._condense=function(t){for(var i=t.length-1,n=void 0;i>=0;i--)0===t[i].children.length?i>0?(n=t[i-1].children).splice(n.indexOf(t[i]),1):this.clear():a(t[i],this.toBBox)},r});


/***/ }),
/* 515 */
/***/ (function(module, exports) {

	'use strict';
	
	var $Object = Object;
	var $TypeError = TypeError;
	
	module.exports = function flags() {
		if (this != null && this !== $Object(this)) {
			throw new $TypeError('RegExp.prototype.flags getter called on non-object');
		}
		var result = '';
		if (this.global) {
			result += 'g';
		}
		if (this.ignoreCase) {
			result += 'i';
		}
		if (this.multiline) {
			result += 'm';
		}
		if (this.dotAll) {
			result += 's';
		}
		if (this.unicode) {
			result += 'u';
		}
		if (this.sticky) {
			result += 'y';
		}
		return result;
	};


/***/ }),
/* 516 */
/***/ (function(module, exports, __webpack_require__) {

	// style-loader: Adds some css to the DOM by adding a <style> tag
	
	// load the styles
	var content = __webpack_require__(945);
	if(typeof content === 'string') content = [[module.id, content, '']];
	// add the styles to the DOM
	var update = __webpack_require__(8)(content, {});
	if(content.locals) module.exports = content.locals;
	// Hot Module Replacement
	if(false) {
		// When the styles change, update the <style> tags
		if(!content.locals) {
			module.hot.accept("!!../../../../css-loader/index.js!../../../../postcss-loader/index.js!./DownloadOptionsModalView.css", function() {
				var newContent = require("!!../../../../css-loader/index.js!../../../../postcss-loader/index.js!./DownloadOptionsModalView.css");
				if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
				update(newContent);
			});
		}
		// When the module is disposed, remove the <style> tags
		module.hot.dispose(function() { update(); });
	}

/***/ }),
/* 517 */
/***/ (function(module, exports) {

	"use strict";
	
	// ES3 safe
	var _undefined = void 0;
	
	module.exports = function (value) { return value !== _undefined && value !== null; };


/***/ }),
/* 518 */
/***/ (function(module, exports) {

	module.exports = "data:application/vnd.ms-fontobject;base64,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"

/***/ }),
/* 519 */
/***/ (function(module, exports) {

	module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB2ZXJzaW9uPSIxLjEiCiAgIHdpZHRoPSIxNTIuMTM3MjIiCiAgIGhlaWdodD0iODQuODE0NTI5IgogICBpZD0ic3ZnNTA2MiIKICAgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+PG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhNTA2OCI+PHJkZjpSREY+PGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPjxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PjxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz48ZGM6dGl0bGU+PC9kYzp0aXRsZT48L2NjOldvcms+PC9yZGY6UkRGPjwvbWV0YWRhdGE+PGRlZnMKICAgICBpZD0iZGVmczUwNjYiIC8+PHBhdGgKICAgICBkPSJtIDYzLjI5OTI1LDQwLjUyMiAtMC43NSwtMC4wMTg1IC0wLjczNzUsLTAuMDU2MjUgLTAuNzI1LC0wLjA5Mjc1IC0wLjcxMjUsLTAuMTI3Mzc1IC0wLjcsLTAuMTYyMTI1IC0wLjcsLTAuMTk2MjUgLTAuNjc1LC0wLjIyNzYyNSAtMC42NSwtMC4yNjEyNSAtMC42NSwtMC4yOTE1IC0wLjYyNSwtMC4zMTk3NSAtMC42MTI1LC0wLjM1MTYyNSAtMC41ODc1LC0wLjM3NzM3NSAtMC41NjI1LC0wLjQwNjI1IC0wLjU1LC0wLjQzMTEyNSAtMC41Mzc1LC0wLjQ1NzYyNSAtMC41LC0wLjQ4MDg3NSAtMC40ODc1LC0wLjUwNDg3NSAtMC40NSwtMC41Mjc4NzUgLTAuNDM3NSwtMC41NDk3NSAtMC40LC0wLjU3MDM3NSAtMC4zNzUsLTAuNTg5ODc1IC0wLjM1LC0wLjYwODg3NSAtMC4zMjUsLTAuNjI3Mzc1IC0wLjI4NzUsLTAuNjQ1IC0wLjI2MjUsLTAuNjU5NzUgLTAuMjI1LC0wLjY3NjI1IC0wLjIsLTAuNjg5ODc1IC0wLjE2MjUsLTAuNzA0MTI1IC0wLjEyNSwtMC43MTYzNzUgLTAuMSwtMC43Mjg1IC0wLjA1LC0wLjczODc1IC0wLjAyNSwtMC43NDg1IGMgMCwtOC4wMjI1IDYuNTEyNSwtMTQuNTMxMjUgMTQuNTM3NSwtMTQuNTMxMjUgOC4wMzc1LDAgMTQuNTM3NSw2LjUwODc1IDE0LjUzNzUsMTQuNTMxMjUgMCw4LjAzNjEyNSAtNi41LDE0LjU0NDM3NSAtMTQuNTM3NSwxNC41NDQzNzUgeiIKICAgICBpZD0icGF0aDUwNzYiCiAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6bm9uZSIgLz48cGF0aAogICAgIGQ9Ik0gNzYuMDYxMDUsNC42ODdlLTUgQyAzNC4wNTE1NSw0LjY4N2UtNSA1ZS00LDE4Ljk4NDg5MSA1ZS00LDQyLjQwMjM5MSBjIDAsMTMuMjY3MTI1IDEwLjkyMTg2LDI1LjEwMTEzNyAyOC4wMjE0OCwzMi44NzUgQyAxOS45NDA4Niw2OS43OTAwMjggMTQuNjE5MTIsNjIuMzA0MjY2IDEzLjQzOCw1My40MTgwMTYgMTAuNzUzLDMzLjIzMjAxNiAzMC4yNjgzMSwxMi41OTc2NTYgNTguNTg2NDQsMy44MDI3ODEyIDQzLjg5ODk0LDEwLjQ2Nzc4MSAzMy42NjI2MSwyNS4yMzAwMTYgMzMuNjYyNjEsNDIuNDAyMzkxIGMgMCwyMy4yMTcyNSAxOC42NDg0NCw0Mi4wNDU4OTggNDEuNzczNDQsNDIuMzgyODEyIC0wLjAzNzUsMC4wMDQ5IC0wLjA4NjcsMC4wMTQ2NSAtMC4xMzY3MiwwLjAxOTUzIDAuMjYyNSwwIDAuNTExNzIsMC4wMDk4IDAuNzYxNzIsMC4wMDk4IDQyLjAxMjUsMCA3Ni4wNzYxNywtMTguOTg0ODU5IDc2LjA3NjE3LC00Mi40MTIxMDkgMCwtMTMuMjYxMjUgLTEwLjkzNzExLC0yNS4wOTc1OTQgLTI4LjAzNzExLC0zMi44NzEwOTQxIGwgMC43NSwwLjUyMTQ4NDEgMC43MzYzMywwLjUzMTI1IDAuNzEyODksMC41NDI5NjkgMC42OTkyMiwwLjU1NDY4OCAwLjY4NzUsMC41NjY0MDYgMC42NjQwNiwwLjU3ODEyNSAwLjY0ODQ0LDAuNTg3ODkgMC42MjUsMC41OTk2MSAwLjYxMzI4LDAuNjA5Mzc1IDAuNTg3ODksMC42MjEwOTQgMC41NzQyMiwwLjYzMDg1OSAwLjU2MjUsMC42NDI1NzggMC41MzcxMSwwLjY1MjM0NCAwLjUxMzY3LDAuNjYyMTA5IDAuNSwwLjY3MTg3NSAwLjQ3NDYxLDAuNjgzNTk0IDAuNDQ5MjIsMC42OTMzNTkgMC40Mzc1LDAuNzAzMTI1IDAuNDI1NzgsMC43MTI4OTEgMC4zODY3MiwwLjcyMjY1NiAwLjM3NSwwLjczMDQ2OSAwLjM1MTU2LDAuNzQwMjM0IDAuMzM1OTQsMC43NSAwLjMwMDc4LDAuNzU5NzY2IDAuMjg3MTEsMC43Njk1MzEgMC4yNjM2NywwLjc3NzM0NCAwLjI1LDAuNzg3MTA5IDAuMjEwOTQsMC43OTQ5MjIgMC4xODc1LDAuODA0Njg4IDAuMTc1NzgsMC44MTI1IDAuMTUwMzksMC44MjAzMTIgMC4xMjUsMC44MzAwNzggYyAyLjY3NSwyMC4xOSAtMTYuODM3ODksNDAuODI1NzE2IC00NS4xNTAzOSw0OS42MTkxNDEgMTQuNjg3NSwtNi42NjUwMzggMjQuOTI1NzgsLTIxLjQyNTc4MSAyNC45MjU3OCwtMzguNjEzMjgxIDAsLTIzLjIwMjYyNSAtMTguNjUwMzksLTQyLjAyNTkzNzg3IC00MS43NzUzOSwtNDIuMzY3MTg3ODggMC4wNSwtMC4wMDUzNzUgMC4xMDAzOSwtMC4wMTUwMTU2MiAwLjE1MDM5LC0wLjAyNTM5MDYyIC0wLjI2MjUsMCAtMC41MjY1NiwtMC4wMDk3NjU2MyAtMC43ODkwNiwtMC4wMDk3NjU2MyB6IE0gNjIuODEzLDExLjMxNDUgYSAxNC4yNSwxNC4yNDk5OTkgMCAwIDEgMTQuMjUsMTQuMjUgMTQuMjUsMTQuMjQ5OTk5IDAgMCAxIC0xNC4yNSwxNC4yNSAxNC4yNSwxNC4yNDk5OTkgMCAwIDEgLTE0LjI1LC0xNC4yNSAxNC4yNSwxNC4yNDk5OTkgMCAwIDEgMTQuMjUsLTE0LjI1IHoiCiAgICAgaWQ9InBhdGg1MDc4IgogICAgIHN0eWxlPSJmaWxsOiMwMDQxNzA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiIC8+PHBhdGgKICAgICBkPSJtIDEyNC4wOTkyNSw5LjUzMTI1IDAuNzUsMC41MjEgMC43Mzc1LDAuNTMxMjUgMC43MTI1LDAuNTQ0IDAuNywwLjU1NTEyNSAwLjY4NzUsMC41NjYgMC42NjI1LDAuNTc3NjI1IDAuNjUsMC41ODczNzUgMC42MjUsMC42MDAxMjUgMC42MTI1LDAuNjA5ODc1IDAuNTg3NSwwLjYyMDEyNSAwLjU3NSwwLjYzMTI1IDAuNTYyNSwwLjY0MjYyNSAwLjUzNzUsMC42NTIzNzUgMC41MTI1LDAuNjYyNjI1IDAuNSwwLjY3MjI1IDAuNDc1LDAuNjgzNjI1IDAuNDUsMC42OTIzNzUgMC40Mzc1LDAuNzAyNjI1IDAuNDI1LDAuNzEyNSAwLjM4NzUsMC43MjI2MjUgMC4zNzUsMC43MzEzNzUgMC4zNSwwLjc0MTI1IDAuMzM3NSwwLjc1IDAuMywwLjc1OTc1IDAuMjg3NSwwLjc2OTEyNSAwLjI2MjUsMC43NzcyNSAwLjI1LDAuNzg2MTI1IDAuMjEyNSwwLjc5NjM3NSAwLjE4NzUsMC44MDM3NSAwLjE3NSwwLjgxMjUgMC4xNSwwLjgyMTI1IDAuMTI1LDAuODMwMTI1IGMgMi42NzUsMjAuMTkgLTE2LjgzNzUsNDAuODI0NzUgLTQ1LjE1LDQ5LjYxODE3NSAxNC42ODc1LC02LjY2NTAzOCAyNC45MjUsLTIxLjQyNTggMjQuOTI1LC0zOC42MTMzIDAsLTIzLjIwMjYyNSAtMTguNjUsLTQyLjAyNTg3NSAtNDEuNzc1LC00Mi4zNjcxMjUgMC4wNSwtMC4wMDUzNzUgMC4xLC0wLjAxNTEyNSAwLjE1LC0wLjAyNTUgQyA3Ni41ODY3NSwwLjAwOTc1IDc2LjMyNDI1LDAgNzYuMDYxNzUsMCAzNC4wNTIyNSwwIDAsMTguOTg0ODc1IDAsNDIuNDAyMzc1IDAsNTUuNjY5NSAxMC45MjIzOCw2Ny41MDQ1IDI4LjAyMiw3NS4yNzgzNjMgMTkuOTQwODgsNjkuNzkxIDE0LjYxODYzLDYyLjMwNDc1IDEzLjQzNzUsNTMuNDE4NSAxMC43NTI1LDMzLjIzMjUgMzAuMjY4NjMsMTIuNTk4NjI1IDU4LjU4Njc1LDMuODAzNzUgNDMuODk5MjUsMTAuNDY4NzUgMzMuNjYyMTMsMjUuMjMgMzMuNjYyMTMsNDIuNDAyMzc1IGMgMCwyMy4yMTcyNSAxOC42NDk2Miw0Mi4wNDU5MTQgNDEuNzc0NjIsNDIuMzgyODI4IC0wLjAzNzUsMC4wMDQ5IC0wLjA4NzUsMC4wMTQ2NSAtMC4xMzc1LDAuMDE5NTMgMC4yNjI1LDAgMC41MTI1LDAuMDA5OCAwLjc2MjUsMC4wMDk4IDQyLjAxMjUsMCA3Ni4wNzUsLTE4Ljk4NDg3NSA3Ni4wNzUsLTQyLjQxMjEyNSAwLC0xMy4yNjEyNSAtMTAuOTM3NSwtMjUuMDk3NjI1IC0yOC4wMzc1LC0zMi44NzExMjUgeiIKICAgICBpZD0icGF0aDUwODAiCiAgICAgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6bm9uZSIgLz48L3N2Zz4="

/***/ }),
/* 520 */
/***/ (function(module, exports) {

	module.exports = function(module) {
		if(!module.webpackPolyfill) {
			module.deprecate = function() {};
			module.paths = [];
			// module.parent = undefined by default
			module.children = [];
			module.webpackPolyfill = 1;
		}
		return module;
	}


/***/ }),
/* 521 */
/***/ (function(module, exports, __webpack_require__) {

	!function(e,t){ true?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e=e||self).toGeoJSON={})}(this,(function(e){"use strict";function t(e){return e&&e.normalize&&e.normalize(),e&&e.textContent||""}const n=[["speed","speeds"],["course","courses"],["hAcc","hAccs"],["vAcc","vAccs"],["heartRate","heartRates"]];function o(e){const n={};if(e){const o=l(e,"line");if(o){const e=t(l(o,"color")),r=parseFloat(t(l(o,"opacity"))),s=parseFloat(t(l(o,"width")));e&&(n.stroke=e),isNaN(r)||(n["stroke-opacity"]=r),isNaN(s)||(n["stroke-width"]=96*s/25.4)}}return n}function r(e,n){const o={};let r,s;for(s=0;s<n.length;s++)r=l(e,n[s]),r&&(o[n[s]]=t(r));return o}function s(e){const n=r(e,["name","cmt","desc","type","time","keywords"]),o=e.getElementsByTagNameNS("http://www.garmin.com/xmlschemas/GpxExtensions/v3","*");for(let r=0;r<o.length;r++){const s=o[r];s.parentNode.parentNode===e&&(n[s.tagName.replace(":","_")]=t(s))}const s=e.getElementsByTagName("link");s.length&&(n.links=[]);for(let e=0;e<s.length;e++)n.links.push(Object.assign({href:s[e].getAttribute("href")},r(s[e],["text","type"])));return n}function l(e,t){const n=e.getElementsByTagName(t);return n.length?n[0]:null}function i(e){const o=[parseFloat(e.getAttribute("lon")),parseFloat(e.getAttribute("lat"))],r=l(e,"ele"),s=l(e,"gpxtpx:hr")||l(e,"hr"),i=l(e,"time");let a;r&&(a=parseFloat(t(r)),isNaN(a)||o.push(a));const c={coordinates:o,time:i?t(i):null,heartRate:s?parseFloat(t(s)):null},g=l(e,"extensions");return null!==g&&n.map(e=>e[0]).filter(e=>"heartrate"!==e).forEach(e=>{const n=l(g,e);if(null!==n){const o=parseFloat(t(n));isNaN(o)||(c[e]=o)}}),c}function a(e){const t=c(e,"rtept");if(t.line)return{type:"Feature",properties:Object.assign(s(e),o(l(e,"extensions"))),geometry:{type:"LineString",coordinates:t.line}}}function c(e,t){const o=e.getElementsByTagName(t),r=[],s=[],l=o.length,a={};if(l<2)return{};for(let e=0;e<l;e++){const t=i(o[e]);r.push(t.coordinates),t.time&&s.push(t.time),n.map(e=>e[0]).forEach(n=>{(t[n]||a[n])&&(a[n]||(a[n]=Array(e).fill(null)),a[n].push(t[n]||null))})}const c={line:r,times:s};return n.forEach(e=>{a[e[0]]&&(c[e[1]]=a[e[0]]||[])}),c}function g(e){const t=e.getElementsByTagName("trkseg"),r=[],i=[],a={};let g;for(let e=0;e<t.length;e++)g=c(t[e],"trkpt"),g&&(g.line&&r.push(g.line),g.times&&g.times.length&&i.push(g.times),n.map(e=>e[1]).forEach(t=>{if(a[t]&&a[t].length||g[t]&&g[t].length){if(a[t]||(a[t]=[]),!a[t].length)for(let n=0;n<e;n++)a[t].push(Array(r[n].length).fill(null));g[t]&&g[t].length?a[t].push(g[t]):a[t].push(Array(g.line.length||0).fill(null))}}));if(0===r.length)return;const u=Object.assign(s(e),o(l(e,"extensions")));return i.length&&(u.coordTimes=1===r.length?i[0]:i),n.forEach(e=>{a[e[1]]&&a[e[1]].length&&(u[e[1]]=1===r.length?a[e[1]][0]:a[e[1]])}),{type:"Feature",properties:u,geometry:{type:1===r.length?"LineString":"MultiLineString",coordinates:1===r.length?r[0]:r}}}function*u(e){const t=e.getElementsByTagName("trk"),n=e.getElementsByTagName("rte"),o=e.getElementsByTagName("wpt");for(let e=0;e<t.length;e++){const n=g(t[e]);n&&(yield n)}for(let e=0;e<n.length;e++){const t=a(n[e]);t&&(yield t)}for(let e=0;e<o.length;e++)yield(l=o[e],{type:"Feature",properties:Object.assign(s(l),r(l,["sym"])),geometry:{type:"Point",coordinates:i(l).coordinates}});var l}const m=/\s*/g,f=/^\s*|\s*$/g,p=/\s+/;function h(e){if(!e||!e.length)return 0;let t=0;for(let n=0;n<e.length;n++)t=(t<<5)-t+e.charCodeAt(n)|0;return t}function y(e,t){const n=e.getElementsByTagName(t);return n.length?n[0]:null}function d(e){return e.replace(m,"").split(",").map(parseFloat)}function N(e){return e.replace(f,"").split(p).map(d)}function T(e){if(void 0!==e.xml)return e.xml;if(e.tagName){let t=e.tagName;for(let n=0;n<e.attributes.length;n++)t+=e.attributes[n].name+e.attributes[n].value;for(let n=0;n<e.childNodes.length;n++)t+=T(e.childNodes[n]);return t}return"#text"===e.nodeName?(e.nodeValue||e.value||"").trim():"#cdata-section"===e.nodeName?e.nodeValue:""}const b=["Polygon","LineString","Point","Track","gx:Track"];function k(e,n,o){let r=t(y(n,"color"))||"";const s="stroke"==o||"fill"===o?o:o+"-color";"#"===r.substr(0,1)&&(r=r.substr(1)),6===r.length||3===r.length?e[s]=r:8===r.length&&(e[o+"-opacity"]=parseInt(r.substr(0,2),16)/255,e[s]="#"+r.substr(6,2)+r.substr(4,2)+r.substr(2,2))}function E(e,n,o,r){const s=parseFloat(t(y(n,o)));isNaN(s)||(e[r]=s)}function x(e){let n=e.getElementsByTagName("coord");const o=[],r=[];0===n.length&&(n=e.getElementsByTagName("gx:coord"));for(let e=0;e<n.length;e++)o.push(t(n[e]).split(" ").map(parseFloat));const s=e.getElementsByTagName("when");for(let e=0;e<s.length;e++)r.push(t(s[e]));return{coords:o,times:r}}function S(e,n,o,r){const s=function e(n){let o,r,s,l,i;const a=[],c=[];if(y(n,"MultiGeometry"))return e(y(n,"MultiGeometry"));if(y(n,"MultiTrack"))return e(y(n,"MultiTrack"));if(y(n,"gx:MultiTrack"))return e(y(n,"gx:MultiTrack"));for(s=0;s<b.length;s++)if(r=n.getElementsByTagName(b[s]),r)for(l=0;l<r.length;l++)if(o=r[l],"Point"===b[s])a.push({type:"Point",coordinates:d(t(y(o,"coordinates")))});else if("LineString"===b[s])a.push({type:"LineString",coordinates:N(t(y(o,"coordinates")))});else if("Polygon"===b[s]){const e=o.getElementsByTagName("LinearRing"),n=[];for(i=0;i<e.length;i++)n.push(N(t(y(e[i],"coordinates"))));a.push({type:"Polygon",coordinates:n})}else if("Track"===b[s]||"gx:Track"===b[s]){const e=x(o);a.push({type:"LineString",coordinates:e.coords}),e.times.length&&c.push(e.times)}return{geoms:a,coordTimes:c}}(e);let l;const i={},a=t(y(e,"name")),c=t(y(e,"address"));let g=t(y(e,"styleUrl"));const u=t(y(e,"description")),m=y(e,"TimeSpan"),f=y(e,"TimeStamp"),p=y(e,"ExtendedData");let h=y(e,"IconStyle"),T=y(e,"LabelStyle"),S=y(e,"LineStyle"),A=y(e,"PolyStyle");const B=y(e,"visibility");if(a&&(i.name=a),c&&(i.address=c),g){"#"!==g[0]&&(g="#"+g),i.styleUrl=g,n[g]&&(i.styleHash=n[g]),o[g]&&(i.styleMapHash=o[g],i.styleHash=n[o[g].normal]);const e=r[i.styleHash];e&&(h||(h=y(e,"IconStyle")),T||(T=y(e,"LabelStyle")),S||(S=y(e,"LineStyle")),A||(A=y(e,"PolyStyle")))}if(u&&(i.description=u),m){const e=t(y(m,"begin")),n=t(y(m,"end"));i.timespan={begin:e,end:n}}if(f&&(i.timestamp=t(y(f,"when"))),h){k(i,h,"icon"),E(i,h,"scale","icon-scale"),E(i,h,"heading","icon-heading");const e=y(h,"hotSpot");if(e){const t=parseFloat(e.getAttribute("x")),n=parseFloat(e.getAttribute("y"));isNaN(t)||isNaN(n)||(i["icon-offset"]=[t,n])}const n=y(h,"Icon");if(n){const e=t(y(n,"href"));e&&(i.icon=e)}}if(T&&(k(i,T,"label"),E(i,T,"scale","label-scale")),S&&(k(i,S,"stroke"),E(i,S,"width","stroke-width")),A){k(i,A,"fill");const e=t(y(A,"fill")),n=t(y(A,"outline"));e&&(i["fill-opacity"]="1"===e?i["fill-opacity"]||1:0),n&&(i["stroke-opacity"]="1"===n?i["stroke-opacity"]||1:0)}if(p){const e=p.getElementsByTagName("Data"),n=p.getElementsByTagName("SimpleData");for(l=0;l<e.length;l++)i[e[l].getAttribute("name")]=t(y(e[l],"value"));for(l=0;l<n.length;l++)i[n[l].getAttribute("name")]=t(n[l])}B&&(i.visibility=t(B)),s.coordTimes.length&&(i.coordTimes=1===s.coordTimes.length?s.coordTimes[0]:s.coordTimes);const F={type:"Feature",geometry:0===s.geoms.length?null:1===s.geoms.length?s.geoms[0]:{type:"GeometryCollection",geometries:s.geoms},properties:i};return e.getAttribute("id")&&(F.id=e.getAttribute("id")),F}function*A(e){const n={},o={},r={},s=e.getElementsByTagName("Placemark"),l=e.getElementsByTagName("Style"),i=e.getElementsByTagName("StyleMap");for(let e=0;e<l.length;e++){const t=h(T(l[e])).toString(16);n["#"+l[e].getAttribute("id")]=t,o[t]=l[e]}for(let e=0;e<i.length;e++){n["#"+i[e].getAttribute("id")]=h(T(i[e])).toString(16);const o=i[e].getElementsByTagName("Pair"),s={};for(let e=0;e<o.length;e++)s[t(y(o[e],"key"))]=t(y(o[e],"styleUrl"));r["#"+i[e].getAttribute("id")]=s}for(let e=0;e<s.length;e++){const t=S(s[e],n,r,o);t&&(yield t)}}e.gpx=function(e){return{type:"FeatureCollection",features:Array.from(u(e))}},e.gpxGen=u,e.kml=function(e){return{type:"FeatureCollection",features:Array.from(A(e))}},e.kmlGen=A,Object.defineProperty(e,"__esModule",{value:!0})}));
	//# sourceMappingURL=togeojson.umd.js.map


/***/ }),
/* 522 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	var meta = __webpack_require__(118);
	
	/**
	 * Takes one or more features and returns their area in square meters.
	 *
	 * @name area
	 * @param {GeoJSON} geojson input GeoJSON feature(s)
	 * @returns {number} area in square meters
	 * @example
	 * var polygon = turf.polygon([[[125, -15], [113, -22], [154, -27], [144, -15], [125, -15]]]);
	 *
	 * var area = turf.area(polygon);
	 *
	 * //addToMap
	 * var addToMap = [polygon]
	 * polygon.properties.area = area
	 */
	function area(geojson) {
	    return meta.geomReduce(geojson, function (value, geom) {
	        return value + calculateArea(geom);
	    }, 0);
	}
	
	var RADIUS = 6378137;
	// var FLATTENING_DENOM = 298.257223563;
	// var FLATTENING = 1 / FLATTENING_DENOM;
	// var POLAR_RADIUS = RADIUS * (1 - FLATTENING);
	
	/**
	 * Calculate Area
	 *
	 * @private
	 * @param {GeoJSON} geojson GeoJSON
	 * @returns {number} area
	 */
	function calculateArea(geojson) {
	    var area = 0, i;
	    switch (geojson.type) {
	    case 'Polygon':
	        return polygonArea(geojson.coordinates);
	    case 'MultiPolygon':
	        for (i = 0; i < geojson.coordinates.length; i++) {
	            area += polygonArea(geojson.coordinates[i]);
	        }
	        return area;
	    case 'Point':
	    case 'MultiPoint':
	    case 'LineString':
	    case 'MultiLineString':
	        return 0;
	    case 'GeometryCollection':
	        for (i = 0; i < geojson.geometries.length; i++) {
	            area += calculateArea(geojson.geometries[i]);
	        }
	        return area;
	    }
	}
	
	function polygonArea(coords) {
	    var area = 0;
	    if (coords && coords.length > 0) {
	        area += Math.abs(ringArea(coords[0]));
	        for (var i = 1; i < coords.length; i++) {
	            area -= Math.abs(ringArea(coords[i]));
	        }
	    }
	    return area;
	}
	
	/**
	 * @private
	 * Calculate the approximate area of the polygon were it projected onto the earth.
	 * Note that this area will be positive if ring is oriented clockwise, otherwise it will be negative.
	 *
	 * Reference:
	 * Robert. G. Chamberlain and William H. Duquette, "Some Algorithms for Polygons on a Sphere", JPL Publication 07-03, Jet Propulsion
	 * Laboratory, Pasadena, CA, June 2007 http://trs-new.jpl.nasa.gov/dspace/handle/2014/40409
	 *
	 * @param {Array<Array<number>>} coords Ring Coordinates
	 * @returns {number} The approximate signed geodesic area of the polygon in square meters.
	 */
	function ringArea(coords) {
	    var p1;
	    var p2;
	    var p3;
	    var lowerIndex;
	    var middleIndex;
	    var upperIndex;
	    var i;
	    var area = 0;
	    var coordsLength = coords.length;
	
	    if (coordsLength > 2) {
	        for (i = 0; i < coordsLength; i++) {
	            if (i === coordsLength - 2) { // i = N-2
	                lowerIndex = coordsLength - 2;
	                middleIndex = coordsLength - 1;
	                upperIndex = 0;
	            } else if (i === coordsLength - 1) { // i = N-1
	                lowerIndex = coordsLength - 1;
	                middleIndex = 0;
	                upperIndex = 1;
	            } else { // i = 0 to N-3
	                lowerIndex = i;
	                middleIndex = i + 1;
	                upperIndex = i + 2;
	            }
	            p1 = coords[lowerIndex];
	            p2 = coords[middleIndex];
	            p3 = coords[upperIndex];
	            area += (rad(p3[0]) - rad(p1[0])) * Math.sin(rad(p2[1]));
	        }
	
	        area = area * RADIUS * RADIUS / 2;
	    }
	
	    return area;
	}
	
	function rad(_) {
	    return _ * Math.PI / 180;
	}
	
	module.exports = area;
	module.exports.default = area;


/***/ }),
/* 523 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	var helpers = __webpack_require__(68);
	var invariant = __webpack_require__(117);
	
	/**
	 * Removes redundant coordinates from any GeoJSON Geometry.
	 *
	 * @name cleanCoords
	 * @param {Geometry|Feature} geojson Feature or Geometry
	 * @param {Object} [options={}] Optional parameters
	 * @param {boolean} [options.mutate=false] allows GeoJSON input to be mutated
	 * @returns {Geometry|Feature} the cleaned input Feature/Geometry
	 * @example
	 * var line = turf.lineString([[0, 0], [0, 2], [0, 5], [0, 8], [0, 8], [0, 10]]);
	 * var multiPoint = turf.multiPoint([[0, 0], [0, 0], [2, 2]]);
	 *
	 * turf.cleanCoords(line).geometry.coordinates;
	 * //= [[0, 0], [0, 10]]
	 *
	 * turf.cleanCoords(multiPoint).geometry.coordinates;
	 * //= [[0, 0], [2, 2]]
	 */
	function cleanCoords(geojson, options) {
	    // Backwards compatible with v4.0
	    var mutate = (typeof options === 'object') ? options.mutate : options;
	    if (!geojson) throw new Error('geojson is required');
	    var type = invariant.getType(geojson);
	
	    // Store new "clean" points in this Array
	    var newCoords = [];
	
	    switch (type) {
	    case 'LineString':
	        newCoords = cleanLine(geojson);
	        break;
	    case 'MultiLineString':
	    case 'Polygon':
	        invariant.getCoords(geojson).forEach(function (line) {
	            newCoords.push(cleanLine(line));
	        });
	        break;
	    case 'MultiPolygon':
	        invariant.getCoords(geojson).forEach(function (polygons) {
	            var polyPoints = [];
	            polygons.forEach(function (ring) {
	                polyPoints.push(cleanLine(ring));
	            });
	            newCoords.push(polyPoints);
	        });
	        break;
	    case 'Point':
	        return geojson;
	    case 'MultiPoint':
	        var existing = {};
	        invariant.getCoords(geojson).forEach(function (coord) {
	            var key = coord.join('-');
	            if (!existing.hasOwnProperty(key)) {
	                newCoords.push(coord);
	                existing[key] = true;
	            }
	        });
	        break;
	    default:
	        throw new Error(type + ' geometry not supported');
	    }
	
	    // Support input mutation
	    if (geojson.coordinates) {
	        if (mutate === true) {
	            geojson.coordinates = newCoords;
	            return geojson;
	        }
	        return {type: type, coordinates: newCoords};
	    } else {
	        if (mutate === true) {
	            geojson.geometry.coordinates = newCoords;
	            return geojson;
	        }
	        return helpers.feature({type: type, coordinates: newCoords}, geojson.properties, geojson.bbox, geojson.id);
	    }
	}
	
	/**
	 * Clean Coords
	 *
	 * @private
	 * @param {Array<number>|LineString} line Line
	 * @returns {Array<number>} Cleaned coordinates
	 */
	function cleanLine(line) {
	    var points = invariant.getCoords(line);
	    // handle "clean" segment
	    if (points.length === 2 && !equals(points[0], points[1])) return points;
	
	    var prevPoint, point, nextPoint;
	    var newPoints = [];
	    var secondToLast = points.length - 1;
	
	    newPoints.push(points[0]);
	    for (var i = 1; i < secondToLast; i++) {
	        prevPoint = points[i - 1];
	        point = points[i];
	        nextPoint = points[i + 1];
	
	        if (!isPointOnLineSegment(prevPoint, nextPoint, point)) {
	            newPoints.push(point);
	        }
	    }
	    newPoints.push(nextPoint);
	    return newPoints;
	}
	
	/**
	 * Compares two points and returns if they are equals
	 *
	 * @private
	 * @param {Position} pt1 point
	 * @param {Position} pt2 point
	 * @returns {boolean} true if they are equals
	 */
	function equals(pt1, pt2) {
	    return pt1[0] === pt2[0] && pt1[1] === pt2[1];
	}
	
	/**
	 * Returns if `point` is on the segment between `start` and `end`.
	 * Borrowed from `@turf/boolean-point-on-line` to speed up the evaluation (instead of using the module as dependency)
	 *
	 * @private
	 * @param {Position} start coord pair of start of line
	 * @param {Position} end coord pair of end of line
	 * @param {Position} point coord pair of point to check
	 * @returns {boolean} true/false
	 */
	function isPointOnLineSegment(start, end, point) {
	    var x = point[0], y = point[1];
	    var startX = start[0], startY = start[1];
	    var endX = end[0], endY = end[1];
	
	    var dxc = x - startX;
	    var dyc = y - startY;
	    var dxl = endX - startX;
	    var dyl = endY - startY;
	    var cross = dxc * dyl - dyc * dxl;
	
	    if (cross !== 0) return false;
	    else if (Math.abs(dxl) >= Math.abs(dyl)) return dxl > 0 ? startX <= x && x <= endX : endX <= x && x <= startX;
	    else return dyl > 0 ? startY <= y && y <= endY : endY <= y && y <= startY;
	}
	
	module.exports = cleanCoords;
	module.exports.default = cleanCoords;


/***/ }),
/* 524 */
/***/ (function(module, exports) {

	'use strict';
	
	/**
	 * Returns a cloned copy of the passed GeoJSON Object, including possible 'Foreign Members'.
	 * ~3-5x faster than the common JSON.parse + JSON.stringify combo method.
	 *
	 * @name clone
	 * @param {GeoJSON} geojson GeoJSON Object
	 * @returns {GeoJSON} cloned GeoJSON Object
	 * @example
	 * var line = turf.lineString([[-74, 40], [-78, 42], [-82, 35]], {color: 'red'});
	 *
	 * var lineCloned = turf.clone(line);
	 */
	function clone(geojson) {
	    if (!geojson) throw new Error('geojson is required');
	
	    switch (geojson.type) {
	    case 'Feature':
	        return cloneFeature(geojson);
	    case 'FeatureCollection':
	        return cloneFeatureCollection(geojson);
	    case 'Point':
	    case 'LineString':
	    case 'Polygon':
	    case 'MultiPoint':
	    case 'MultiLineString':
	    case 'MultiPolygon':
	    case 'GeometryCollection':
	        return cloneGeometry(geojson);
	    default:
	        throw new Error('unknown GeoJSON type');
	    }
	}
	
	/**
	 * Clone Feature
	 *
	 * @private
	 * @param {Feature<any>} geojson GeoJSON Feature
	 * @returns {Feature<any>} cloned Feature
	 */
	function cloneFeature(geojson) {
	    var cloned = {type: 'Feature'};
	    // Preserve Foreign Members
	    Object.keys(geojson).forEach(function (key) {
	        switch (key) {
	        case 'type':
	        case 'properties':
	        case 'geometry':
	            return;
	        default:
	            cloned[key] = geojson[key];
	        }
	    });
	    // Add properties & geometry last
	    cloned.properties = cloneProperties(geojson.properties);
	    cloned.geometry = cloneGeometry(geojson.geometry);
	    return cloned;
	}
	
	/**
	 * Clone Properties
	 *
	 * @private
	 * @param {Object} properties GeoJSON Properties
	 * @returns {Object} cloned Properties
	 */
	function cloneProperties(properties) {
	    var cloned = {};
	    if (!properties) return cloned;
	    Object.keys(properties).forEach(function (key) {
	        var value = properties[key];
	        if (typeof value === 'object') {
	            if (value === null) {
	                // handle null
	                cloned[key] = null;
	            } else if (value.length) {
	                // handle Array
	                cloned[key] = value.map(function (item) {
	                    return item;
	                });
	            } else {
	                // handle generic Object
	                cloned[key] = cloneProperties(value);
	            }
	        } else cloned[key] = value;
	    });
	    return cloned;
	}
	
	/**
	 * Clone Feature Collection
	 *
	 * @private
	 * @param {FeatureCollection<any>} geojson GeoJSON Feature Collection
	 * @returns {FeatureCollection<any>} cloned Feature Collection
	 */
	function cloneFeatureCollection(geojson) {
	    var cloned = {type: 'FeatureCollection'};
	
	    // Preserve Foreign Members
	    Object.keys(geojson).forEach(function (key) {
	        switch (key) {
	        case 'type':
	        case 'features':
	            return;
	        default:
	            cloned[key] = geojson[key];
	        }
	    });
	    // Add features
	    cloned.features = geojson.features.map(function (feature) {
	        return cloneFeature(feature);
	    });
	    return cloned;
	}
	
	/**
	 * Clone Geometry
	 *
	 * @private
	 * @param {Geometry<any>} geometry GeoJSON Geometry
	 * @returns {Geometry<any>} cloned Geometry
	 */
	function cloneGeometry(geometry) {
	    var geom = {type: geometry.type};
	    if (geometry.bbox) geom.bbox = geometry.bbox;
	
	    if (geometry.type === 'GeometryCollection') {
	        geom.geometries = geometry.geometries.map(function (geom) {
	            return cloneGeometry(geom);
	        });
	        return geom;
	    }
	    geom.coordinates = deepSlice(geometry.coordinates);
	    return geom;
	}
	
	/**
	 * Deep Slice coordinates
	 *
	 * @private
	 * @param {Coordinates} coords Coordinates
	 * @returns {Coordinates} all coordinates sliced
	 */
	function deepSlice(coords) {
	    if (typeof coords[0] !== 'object') { return coords.slice(); }
	    return coords.map(function (coord) {
	        return deepSlice(coord);
	    });
	}
	
	module.exports = clone;
	module.exports.default = clone;


/***/ }),
/* 525 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
	
	var turfJsts = __webpack_require__(231);
	var area = _interopDefault(__webpack_require__(522));
	var helpers = __webpack_require__(68);
	var invariant = __webpack_require__(117);
	var meta = __webpack_require__(118);
	
	/**
	 * Finds the difference between two {@link Polygon|polygons} by clipping the second polygon from the first.
	 *
	 * @name difference
	 * @param {Feature<Polygon|MultiPolygon>} polygon1 input Polygon feature
	 * @param {Feature<Polygon|MultiPolygon>} polygon2 Polygon feature to difference from polygon1
	 * @returns {Feature<Polygon|MultiPolygon>|null} a Polygon or MultiPolygon feature showing the area of `polygon1` excluding the area of `polygon2` (if empty returns `null`)
	 * @example
	 * var polygon1 = turf.polygon([[
	 *   [128, -26],
	 *   [141, -26],
	 *   [141, -21],
	 *   [128, -21],
	 *   [128, -26]
	 * ]], {
	 *   "fill": "#F00",
	 *   "fill-opacity": 0.1
	 * });
	 * var polygon2 = turf.polygon([[
	 *   [126, -28],
	 *   [140, -28],
	 *   [140, -20],
	 *   [126, -20],
	 *   [126, -28]
	 * ]], {
	 *   "fill": "#00F",
	 *   "fill-opacity": 0.1
	 * });
	 *
	 * var difference = turf.difference(polygon1, polygon2);
	 *
	 * //addToMap
	 * var addToMap = [polygon1, polygon2, difference];
	 */
	function difference(polygon1, polygon2) {
	    var geom1 = invariant.getGeom(polygon1);
	    var geom2 = invariant.getGeom(polygon2);
	    var properties = polygon1.properties || {};
	
	    // Issue #721 - JSTS can't handle empty polygons
	    geom1 = removeEmptyPolygon(geom1);
	    geom2 = removeEmptyPolygon(geom2);
	    if (!geom1) return null;
	    if (!geom2) return helpers.feature(geom1, properties);
	
	    // JSTS difference operation
	    var reader = new turfJsts.GeoJSONReader();
	    var a = reader.read(geom1);
	    var b = reader.read(geom2);
	    var differenced = turfJsts.OverlayOp.difference(a, b);
	    if (differenced.isEmpty()) return null;
	    var writer = new turfJsts.GeoJSONWriter();
	    var geom = writer.write(differenced);
	
	    return helpers.feature(geom, properties);
	}
	
	/**
	 * Detect Empty Polygon
	 *
	 * @private
	 * @param {Geometry<Polygon|MultiPolygon>} geom Geometry Object
	 * @returns {Geometry<Polygon|MultiPolygon>|null} removed any polygons with no areas
	 */
	function removeEmptyPolygon(geom) {
	    switch (geom.type) {
	    case 'Polygon':
	        if (area(geom) > 1) return geom;
	        return null;
	    case 'MultiPolygon':
	        var coordinates = [];
	        meta.flattenEach(geom, function (feature$$1) {
	            if (area(feature$$1) > 1) coordinates.push(feature$$1.geometry.coordinates);
	        });
	        if (coordinates.length) return {type: 'MultiPolygon', coordinates: coordinates};
	    }
	}
	
	module.exports = difference;
	module.exports.default = difference;


/***/ }),
/* 526 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
	
	var turfJsts = __webpack_require__(231);
	var truncate = _interopDefault(__webpack_require__(528));
	var invariant = __webpack_require__(117);
	var helpers = __webpack_require__(68);
	var cleanCoords = _interopDefault(__webpack_require__(523));
	
	// depend on jsts for now http://bjornharrtell.github.io/jsts/
	/**
	 * Takes two {@link Polygon|polygons} and finds their intersection. If they share a border, returns the border; if they don't intersect, returns undefined.
	 *
	 * @name intersect
	 * @param {Feature<Polygon>} poly1 the first polygon
	 * @param {Feature<Polygon>} poly2 the second polygon
	 * @returns {Feature|null} returns a feature representing the point(s) they share (in case of a {@link Point}  or {@link MultiPoint}), the borders they share (in case of a {@link LineString} or a {@link MultiLineString}), the area they share (in case of {@link Polygon} or {@link MultiPolygon}). If they do not share any point, returns `null`.
	 * @example
	 * var poly1 = turf.polygon([[
	 *   [-122.801742, 45.48565],
	 *   [-122.801742, 45.60491],
	 *   [-122.584762, 45.60491],
	 *   [-122.584762, 45.48565],
	 *   [-122.801742, 45.48565]
	 * ]]);
	 *
	 * var poly2 = turf.polygon([[
	 *   [-122.520217, 45.535693],
	 *   [-122.64038, 45.553967],
	 *   [-122.720031, 45.526554],
	 *   [-122.669906, 45.507309],
	 *   [-122.723464, 45.446643],
	 *   [-122.532577, 45.408574],
	 *   [-122.487258, 45.477466],
	 *   [-122.520217, 45.535693]
	 * ]]);
	 *
	 * var intersection = turf.intersect(poly1, poly2);
	 *
	 * //addToMap
	 * var addToMap = [poly1, poly2, intersection];
	 */
	function intersect(poly1, poly2) {
	    var geom1 = invariant.getGeom(poly1);
	    var geom2 = invariant.getGeom(poly2);
	
	    // Return null if geometry is too narrow in coordinate precision
	    // fixes topology errors with JSTS
	    // https://github.com/Turfjs/turf/issues/463
	    // https://github.com/Turfjs/turf/pull/1004
	    if (cleanCoords(truncate(geom2, {precision: 4})).coordinates[0].length < 4) return null;
	    if (cleanCoords(truncate(geom1, {precision: 4})).coordinates[0].length < 4) return null;
	
	    var reader = new turfJsts.GeoJSONReader();
	    var a = reader.read(truncate(geom1));
	    var b = reader.read(truncate(geom2));
	    var intersection = turfJsts.OverlayOp.intersection(a, b);
	
	    // https://github.com/Turfjs/turf/issues/951
	    if (intersection.isEmpty()) return null;
	
	    var writer = new turfJsts.GeoJSONWriter();
	    var geom = writer.write(intersection);
	    return helpers.feature(geom);
	}
	
	module.exports = intersect;
	module.exports.default = intersect;


/***/ }),
/* 527 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
	
	var clone = _interopDefault(__webpack_require__(524));
	var booleanClockwise = _interopDefault(__webpack_require__(530));
	var meta = __webpack_require__(118);
	var invariant = __webpack_require__(117);
	var helpers = __webpack_require__(68);
	
	/**
	 * Rewind {@link LineString|(Multi)LineString} or {@link Polygon|(Multi)Polygon} outer ring counterclockwise and inner rings clockwise (Uses {@link http://en.wikipedia.org/wiki/Shoelace_formula|Shoelace Formula}).
	 *
	 * @name rewind
	 * @param {GeoJSON} geojson input GeoJSON Polygon
	 * @param {Object} [options={}] Optional parameters
	 * @param {boolean} [options.reverse=false] enable reverse winding
	 * @param {boolean} [options.mutate=false] allows GeoJSON input to be mutated (significant performance increase if true)
	 * @returns {GeoJSON} rewind Polygon
	 * @example
	 * var polygon = turf.polygon([[[121, -29], [138, -29], [138, -18], [121, -18], [121, -29]]]);
	 *
	 * var rewind = turf.rewind(polygon);
	 *
	 * //addToMap
	 * var addToMap = [rewind];
	 */
	function rewind(geojson, options) {
	    // Optional parameters
	    options = options || {};
	    if (!helpers.isObject(options)) throw new Error('options is invalid');
	    var reverse = options.reverse || false;
	    var mutate = options.mutate || false;
	
	    // validation
	    if (!geojson) throw new Error('<geojson> is required');
	    if (typeof reverse !== 'boolean') throw new Error('<reverse> must be a boolean');
	    if (typeof mutate !== 'boolean') throw new Error('<mutate> must be a boolean');
	
	    // prevent input mutation
	    if (mutate === false) geojson = clone(geojson);
	
	    // Support Feature Collection or Geometry Collection
	    var results = [];
	    switch (geojson.type) {
	    case 'GeometryCollection':
	        meta.geomEach(geojson, function (geometry) {
	            rewindFeature(geometry, reverse);
	        });
	        return geojson;
	    case 'FeatureCollection':
	        meta.featureEach(geojson, function (feature) {
	            meta.featureEach(rewindFeature(feature, reverse), function (result) {
	                results.push(result);
	            });
	        });
	        return helpers.featureCollection(results);
	    }
	    // Support Feature or Geometry Objects
	    return rewindFeature(geojson, reverse);
	}
	
	/**
	 * Rewind
	 *
	 * @private
	 * @param {Geometry|Feature<any>} geojson Geometry or Feature
	 * @param {Boolean} [reverse=false] enable reverse winding
	 * @returns {Geometry|Feature<any>} rewind Geometry or Feature
	 */
	function rewindFeature(geojson, reverse) {
	    var type = (geojson.type === 'Feature') ? geojson.geometry.type : geojson.type;
	
	    // Support all GeoJSON Geometry Objects
	    switch (type) {
	    case 'GeometryCollection':
	        meta.geomEach(geojson, function (geometry) {
	            rewindFeature(geometry, reverse);
	        });
	        return geojson;
	    case 'LineString':
	        rewindLineString(invariant.getCoords(geojson), reverse);
	        return geojson;
	    case 'Polygon':
	        rewindPolygon(invariant.getCoords(geojson), reverse);
	        return geojson;
	    case 'MultiLineString':
	        invariant.getCoords(geojson).forEach(function (lineCoords) {
	            rewindLineString(lineCoords, reverse);
	        });
	        return geojson;
	    case 'MultiPolygon':
	        invariant.getCoords(geojson).forEach(function (lineCoords) {
	            rewindPolygon(lineCoords, reverse);
	        });
	        return geojson;
	    case 'Point':
	    case 'MultiPoint':
	        return geojson;
	    }
	}
	
	/**
	 * Rewind LineString - outer ring clockwise
	 *
	 * @private
	 * @param {Array<Array<number>>} coords GeoJSON LineString geometry coordinates
	 * @param {Boolean} [reverse=false] enable reverse winding
	 * @returns {void} mutates coordinates
	 */
	function rewindLineString(coords, reverse) {
	    if (booleanClockwise(coords) === reverse) coords.reverse();
	}
	
	/**
	 * Rewind Polygon - outer ring counterclockwise and inner rings clockwise.
	 *
	 * @private
	 * @param {Array<Array<Array<number>>>} coords GeoJSON Polygon geometry coordinates
	 * @param {Boolean} [reverse=false] enable reverse winding
	 * @returns {void} mutates coordinates
	 */
	function rewindPolygon(coords, reverse) {
	    // outer ring
	    if (booleanClockwise(coords[0]) !== reverse) {
	        coords[0].reverse();
	    }
	    // inner rings
	    for (var i = 1; i < coords.length; i++) {
	        if (booleanClockwise(coords[i]) === reverse) {
	            coords[i].reverse();
	        }
	    }
	}
	
	module.exports = rewind;
	module.exports.default = rewind;


/***/ }),
/* 528 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	var meta = __webpack_require__(118);
	var helpers = __webpack_require__(68);
	
	/**
	 * Takes a GeoJSON Feature or FeatureCollection and truncates the precision of the geometry.
	 *
	 * @name truncate
	 * @param {GeoJSON} geojson any GeoJSON Feature, FeatureCollection, Geometry or GeometryCollection.
	 * @param {Object} [options={}] Optional parameters
	 * @param {number} [options.precision=6] coordinate decimal precision
	 * @param {number} [options.coordinates=3] maximum number of coordinates (primarly used to remove z coordinates)
	 * @param {boolean} [options.mutate=false] allows GeoJSON input to be mutated (significant performance increase if true)
	 * @returns {GeoJSON} layer with truncated geometry
	 * @example
	 * var point = turf.point([
	 *     70.46923055566859,
	 *     58.11088890802906,
	 *     1508
	 * ]);
	 * var options = {precision: 3, coordinates: 2};
	 * var truncated = turf.truncate(point, options);
	 * //=truncated.geometry.coordinates => [70.469, 58.111]
	 *
	 * //addToMap
	 * var addToMap = [truncated];
	 */
	function truncate(geojson, options) {
	    // Optional parameters
	    options = options || {};
	    if (!helpers.isObject(options)) throw new Error('options is invalid');
	    var precision = options.precision;
	    var coordinates = options.coordinates;
	    var mutate = options.mutate;
	
	    // default params
	    precision = (precision === undefined || precision === null || isNaN(precision)) ? 6 : precision;
	    coordinates = (coordinates === undefined || coordinates === null || isNaN(coordinates)) ? 3 : coordinates;
	
	    // validation
	    if (!geojson) throw new Error('<geojson> is required');
	    if (typeof precision !== 'number') throw new Error('<precision> must be a number');
	    if (typeof coordinates !== 'number') throw new Error('<coordinates> must be a number');
	
	    // prevent input mutation
	    if (mutate === false || mutate === undefined) geojson = JSON.parse(JSON.stringify(geojson));
	
	    var factor = Math.pow(10, precision);
	
	    // Truncate Coordinates
	    meta.coordEach(geojson, function (coords) {
	        truncateCoords(coords, factor, coordinates);
	    });
	    return geojson;
	}
	
	/**
	 * Truncate Coordinates - Mutates coordinates in place
	 *
	 * @private
	 * @param {Array<any>} coords Geometry Coordinates
	 * @param {number} factor rounding factor for coordinate decimal precision
	 * @param {number} coordinates maximum number of coordinates (primarly used to remove z coordinates)
	 * @returns {Array<any>} mutated coordinates
	 */
	function truncateCoords(coords, factor, coordinates) {
	    // Remove extra coordinates (usually elevation coordinates and more)
	    if (coords.length > coordinates) coords.splice(coordinates, coords.length);
	
	    // Truncate coordinate decimals
	    for (var i = 0; i < coords.length; i++) {
	        coords[i] = Math.round(coords[i] * factor) / factor;
	    }
	    return coords;
	}
	
	module.exports = truncate;
	module.exports.default = truncate;


/***/ }),
/* 529 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	var turfJsts = __webpack_require__(231);
	
	/**
	 * Takes two or more {@link Polygon|polygons} and returns a combined polygon. If the input polygons are not contiguous, this function returns a {@link MultiPolygon} feature.
	 *
	 * @name union
	 * @param {...Feature<Polygon>} A polygon to combine
	 * @returns {Feature<(Polygon|MultiPolygon)>} a combined {@link Polygon} or {@link MultiPolygon} feature
	 * @example
	 * var poly1 = turf.polygon([[
	 *     [-82.574787, 35.594087],
	 *     [-82.574787, 35.615581],
	 *     [-82.545261, 35.615581],
	 *     [-82.545261, 35.594087],
	 *     [-82.574787, 35.594087]
	 * ]], {"fill": "#0f0"});
	 * var poly2 = turf.polygon([[
	 *     [-82.560024, 35.585153],
	 *     [-82.560024, 35.602602],
	 *     [-82.52964, 35.602602],
	 *     [-82.52964, 35.585153],
	 *     [-82.560024, 35.585153]
	 * ]], {"fill": "#00f"});
	 *
	 * var union = turf.union(poly1, poly2);
	 *
	 * //addToMap
	 * var addToMap = [poly1, poly2, union];
	 */
	function union() {
	    var reader = new turfJsts.GeoJSONReader();
	    var result = reader.read(JSON.stringify(arguments[0].geometry));
	
	    for (var i = 1; i < arguments.length; i++) {
	        result = turfJsts.UnionOp.union(result, reader.read(JSON.stringify(arguments[i].geometry)));
	    }
	
	    var writer = new turfJsts.GeoJSONWriter();
	    result = writer.write(result);
	
	    return {
	        type: 'Feature',
	        geometry: result,
	        properties: arguments[0].properties
	    };
	}
	
	module.exports = union;
	module.exports.default = union;


/***/ }),
/* 530 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	var invariant = __webpack_require__(117);
	
	/**
	 * Takes a ring and return true or false whether or not the ring is clockwise or counter-clockwise.
	 *
	 * @name booleanClockwise
	 * @param {Feature<LineString>} line to be evaluated
	 * @returns {boolean} true/false
	 * @example
	 * var clockwiseRing = turf.lineString([[0,0],[1,1],[1,0],[0,0]]);
	 * var counterClockwiseRing = turf.lineString([[0,0],[1,0],[1,1],[0,0]]);
	 *
	 * turf.booleanClockwise(clockwiseRing)
	 * //=true
	 * turf.booleanClockwise(counterClockwiseRing)
	 * //=false
	 */
	function booleanClockwise(line) {
	    // validation
	    if (!line) throw new Error('line is required');
	    var type = line.geometry ? line.geometry.type : line.type;
	    if (!Array.isArray(line) && type !== 'LineString') throw new Error('geometry must be a LineString');
	
	    var ring = invariant.getCoords(line);
	    var sum = 0;
	    var i = 1;
	    var prev, cur;
	    while (i < ring.length) {
	        prev = cur || ring[0];
	        cur = ring[i];
	        sum += (cur[0] - prev[0]) * (cur[1] + prev[1]);
	        i++;
	    }
	    return sum > 0;
	}
	
	module.exports = booleanClockwise;
	module.exports.default = booleanClockwise;

/***/ }),
/* 531 */
/***/ (function(module, exports, __webpack_require__) {

	/* WEBPACK VAR INJECTION */(function(jQuery) {"use strict";
	
	/*!
	 * jQuery scrollintoview() plugin and :scrollable selector filter
	 *
	 * Version 1.8 (14 Jul 2011)
	 * Requires jQuery 1.4 or newer
	 *
	 * Copyright (c) 2011 Robert Koritnik
	 * Licensed under the terms of the MIT license
	 * http://www.opensource.org/licenses/mit-license.php
	 */
	
	(function ($) {
		var converter = {
			vertical: { x: false, y: true },
			horizontal: { x: true, y: false },
			both: { x: true, y: true },
			x: { x: true, y: false },
			y: { x: false, y: true }
		};
	
		var settings = {
			duration: "fast",
			direction: "both"
		};
	
		var rootrx = /^(?:html)$/i;
	
		// gets border dimensions
		var borders = function borders(domElement, styles) {
			styles = styles || (document.defaultView && document.defaultView.getComputedStyle ? document.defaultView.getComputedStyle(domElement, null) : domElement.currentStyle);
			var px = document.defaultView && document.defaultView.getComputedStyle ? true : false;
			var b = {
				top: parseFloat(px ? styles.borderTopWidth : $.css(domElement, "borderTopWidth")) || 0,
				left: parseFloat(px ? styles.borderLeftWidth : $.css(domElement, "borderLeftWidth")) || 0,
				bottom: parseFloat(px ? styles.borderBottomWidth : $.css(domElement, "borderBottomWidth")) || 0,
				right: parseFloat(px ? styles.borderRightWidth : $.css(domElement, "borderRightWidth")) || 0
			};
			return {
				top: b.top,
				left: b.left,
				bottom: b.bottom,
				right: b.right,
				vertical: b.top + b.bottom,
				horizontal: b.left + b.right
			};
		};
	
		var dimensions = function dimensions($element) {
			var win = $(window);
			var isRoot = rootrx.test($element[0].nodeName);
			return {
				border: isRoot ? { top: 0, left: 0, bottom: 0, right: 0 } : borders($element[0]),
				scroll: {
					top: (isRoot ? win : $element).scrollTop(),
					left: (isRoot ? win : $element).scrollLeft()
				},
				scrollbar: {
					right: isRoot ? 0 : $element.innerWidth() - $element[0].clientWidth,
					bottom: isRoot ? 0 : $element.innerHeight() - $element[0].clientHeight
				},
				rect: function () {
					var r = $element[0].getBoundingClientRect();
					return {
						top: isRoot ? 0 : r.top,
						left: isRoot ? 0 : r.left,
						bottom: isRoot ? $element[0].clientHeight : r.bottom,
						right: isRoot ? $element[0].clientWidth : r.right
					};
				}()
			};
		};
	
		$.fn.extend({
			scrollintoview: function scrollintoview(options) {
				/// <summary>Scrolls the first element in the set into view by scrolling its closest scrollable parent.</summary>
				/// <param name="options" type="Object">Additional options that can configure scrolling:
				///        duration (default: "fast") - jQuery animation speed (can be a duration string or number of milliseconds)
				///        direction (default: "both") - select possible scrollings ("vertical" or "y", "horizontal" or "x", "both")
				///        complete (default: none) - a function to call when scrolling completes (called in context of the DOM element being scrolled)
				/// </param>
				/// <return type="jQuery">Returns the same jQuery set that this function was run on.</return>
	
				options = $.extend({}, settings, options);
				options.direction = converter[typeof options.direction === "string" && options.direction.toLowerCase()] || converter.both;
	
				var dirStr = "";
				if (options.direction.x === true) dirStr = "horizontal";
				if (options.direction.y === true) dirStr = dirStr ? "both" : "vertical";
	
				var el = this.eq(0);
				var scroller = el.closest(":scrollable(" + dirStr + ")");
	
				// check if there's anything to scroll in the first place
				if (scroller.length > 0) {
					scroller = scroller.eq(0);
	
					var dim = {
						e: dimensions(el),
						s: dimensions(scroller)
					};
	
					var rel = {
						top: dim.e.rect.top - (dim.s.rect.top + dim.s.border.top),
						bottom: dim.s.rect.bottom - dim.s.border.bottom - dim.s.scrollbar.bottom - dim.e.rect.bottom,
						left: dim.e.rect.left - (dim.s.rect.left + dim.s.border.left),
						right: dim.s.rect.right - dim.s.border.right - dim.s.scrollbar.right - dim.e.rect.right
					};
	
					var animOptions = {};
	
					// vertical scroll
					if (options.direction.y === true) {
						if (rel.top < 0) {
							animOptions.scrollTop = dim.s.scroll.top + rel.top;
						} else if (rel.top > 0 && rel.bottom < 0) {
							animOptions.scrollTop = dim.s.scroll.top + Math.min(rel.top, -rel.bottom);
						}
					}
	
					// horizontal scroll
					if (options.direction.x === true) {
						if (rel.left < 0) {
							animOptions.scrollLeft = dim.s.scroll.left + rel.left;
						} else if (rel.left > 0 && rel.right < 0) {
							animOptions.scrollLeft = dim.s.scroll.left + Math.min(rel.left, -rel.right);
						}
					}
	
					// scroll if needed
					if (!$.isEmptyObject(animOptions)) {
						if (rootrx.test(scroller[0].nodeName)) {
							scroller = $("html,body");
						}
						scroller.animate(animOptions, options.duration).eq(0) // we want function to be called just once (ref. "html,body")
						.queue(function (next) {
							$.isFunction(options.complete) && options.complete.call(scroller[0]);
							next();
						});
					} else {
						// when there's nothing to scroll, just call the "complete" function
						$.isFunction(options.complete) && options.complete.call(scroller[0]);
					}
				}
	
				// return set back
				return this;
			}
		});
	
		var scrollValue = {
			auto: true,
			scroll: true,
			visible: false,
			hidden: false
		};
	
		$.extend($.expr[":"], {
			scrollable: function scrollable(element, index, meta, stack) {
				var direction = converter[typeof meta[3] === "string" && meta[3].toLowerCase()] || converter.both;
				var styles = document.defaultView && document.defaultView.getComputedStyle ? document.defaultView.getComputedStyle(element, null) : element.currentStyle;
				var overflow = {
					x: scrollValue[styles.overflowX.toLowerCase()] || false,
					y: scrollValue[styles.overflowY.toLowerCase()] || false,
					isRoot: rootrx.test(element.nodeName)
				};
	
				// check if completely unscrollable (exclude HTML element because it's special)
				if (!overflow.x && !overflow.y && !overflow.isRoot) {
					return false;
				}
	
				var size = {
					height: {
						scroll: element.scrollHeight,
						client: element.clientHeight
					},
					width: {
						scroll: element.scrollWidth,
						client: element.clientWidth
					},
					// check overflow.x/y because iPad (and possibly other tablets) don't dislay scrollbars
					scrollableX: function scrollableX() {
						return (overflow.x || overflow.isRoot) && this.width.scroll > this.width.client;
					},
					scrollableY: function scrollableY() {
						return (overflow.y || overflow.isRoot) && this.height.scroll > this.height.client;
					}
				};
				return direction.y && size.scrollableY() || direction.x && size.scrollableX();
			}
		});
	})(jQuery);
	/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(166)))

/***/ }),
/* 532 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	
	var _backbone = __webpack_require__(11);
	
	var _backbone2 = _interopRequireDefault(_backbone);
	
	var _LayerControlLayoutView = __webpack_require__(996);
	
	var _LayerControlLayoutView2 = _interopRequireDefault(_LayerControlLayoutView);
	
	var _LayerListView = __webpack_require__(555);
	
	var _LayerListView2 = _interopRequireDefault(_LayerListView);
	
	__webpack_require__(1118);
	
	function _interopRequireDefault(obj) {
	  return obj && obj.__esModule ? obj : { default: obj };
	}
	
	// eslint-disable-next-line max-len
	var LayerControlLayoutView = _backbone2.default.LayoutView.extend( /** @lends core/views/layers.LayerControlLayoutView# */{
	  template: _LayerControlLayoutView2.default,
	  templateHelpers: function templateHelpers() {
	    return {
	      baseLayersCollection: this.baseLayersCollection,
	      layersCollection: this.layersCollection,
	      overlayLayersCollection: this.overlayLayersCollection
	    };
	  },
	
	  regions: {
	    baseLayers: '.baseLayers',
	    layers: '.layers',
	    overlayLayers: '.overlayLayers'
	  },
	  className: 'layer-control',
	
	  /**
	    @constructs
	    @param {Object} options
	    @param {core/models.LayersCollection} options.layersCollection The background layers
	    @param {core/models.LayersCollection} options.baseLayersCollection The content layers
	    @param {core/models.LayersCollection} options.overlayLayersCollection The overlay layers
	   */
	  initialize: function initialize(options) {
	    this.baseLayersCollection = options.baseLayersCollection;
	    this.layersCollection = options.layersCollection;
	    this.overlayLayersCollection = options.overlayLayersCollection;
	  },
	  onShow: function onShow() {
	    if (typeof this.baseLayersCollection !== 'undefined') {
	      this.showChildView('baseLayers', new _LayerListView2.default({
	        collection: this.baseLayersCollection,
	        singleChoice: true
	      }));
	    }
	    if (typeof this.layersCollection !== 'undefined') {
	      this.showChildView('layers', new _LayerListView2.default({
	        collection: this.layersCollection,
	        fullDisplay: true,
	        sortable: true
	      }));
	    }
	    if (typeof this.overlayLayersCollection !== 'undefined') {
	      this.showChildView('overlayLayers', new _LayerListView2.default({
	        collection: this.overlayLayersCollection
	      }));
	    }
	  }
	});
	
	exports.default = LayerControlLayoutView;

/***/ }),
/* 533 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	
	var _events;
	
	var _bbox = __webpack_require__(137);
	
	var _bbox2 = _interopRequireDefault(_bbox);
	
	var _i18next = __webpack_require__(163);
	
	var _i18next2 = _interopRequireDefault(_i18next);
	
	var _jquery = __webpack_require__(12);
	
	var _jquery2 = _interopRequireDefault(_jquery);
	
	var _underscore = __webpack_require__(33);
	
	var _underscore2 = _interopRequireDefault(_underscore);
	
	var _proj = __webpack_require__(16);
	
	var _ModalView = __webpack_require__(121);
	
	var _ModalView2 = _interopRequireDefault(_ModalView);
	
	var _FullResolutionDownloadOptionsModalView = __webpack_require__(1002);
	
	var _FullResolutionDownloadOptionsModalView2 = _interopRequireDefault(_FullResolutionDownloadOptionsModalView);
	
	__webpack_require__(516);
	
	var _download = __webpack_require__(46);
	
	function _interopRequireDefault(obj) {
	  return obj && obj.__esModule ? obj : { default: obj };
	}
	
	function _defineProperty(obj, key, value) {
	  if (key in obj) {
	    Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true });
	  } else {
	    obj[key] = value;
	  }return obj;
	}
	
	exports.default = _ModalView2.default.extend({
	  template: _FullResolutionDownloadOptionsModalView2.default,
	  templateHelpers: function templateHelpers() {
	    return {
	      bbox: this.bbox.map(function (v) {
	        return v.toFixed(4);
	      }),
	      fields: this.layerModel.get('fullResolution.fields'),
	      interpolations: this.layerModel.get('fullResolution.interpolations'),
	      availableProjections: this.model.get('availableProjections'),
	      availableDownloadFormats: this.model.get('availableDownloadFormats'),
	      projection_4326: this.mapProjection === 'EPSG:4326'
	    };
	  },
	  onRender: function onRender() {
	    var _this = this;
	
	    var preferences = this.getPreferences();
	    var preferredFormat = preferences.preferredFormat;
	    var preferredInterpolation = preferences.preferredInterpolation;
	    var preferredProjection = preferences.preferredProjection;
	    var preferredScalingMethod = preferences.preferredScalingMethod;
	    var preferredSize = preferences.preferredSize;
	    var preferredResolution = preferences.preferredResolution;
	    var preferredScale = preferences.preferredScale;
	    var preferredFields = preferences.preferredFields;
	
	    if (preferredFormat) {
	      this.$('.select-format').val(preferredFormat);
	      this.model.set('format', preferredFormat);
	    }
	    if (preferredInterpolation) {
	      this.$('select[name="interpolation"]').val(preferredInterpolation);
	      this.model.set('interpolation', preferredInterpolation);
	    }
	    if (preferredProjection) {
	      this.$('.select-projection').val(preferredProjection);
	      this.model.set('projection', preferredProjection);
	    }
	    if (preferredScalingMethod) {
	      this.$('input[name="scale-method"][value=' + preferredScalingMethod + ']').prop('checked', true);
	      if (preferredScalingMethod === 'resolution' && !isNaN(preferredResolution[0]) && !isNaN(preferredResolution[1])) {
	        this.$('[name="resolution-x"]').val(preferredResolution[0]);
	        this.$('[name="resolution-y"]').val(preferredResolution[1]);
	      } else if (preferredScalingMethod === 'size' && !isNaN(preferredSize[0]) && !isNaN(preferredSize[1])) {
	        this.$('[name="size-x"]').val(preferredSize[0]);
	        this.$('[name="size-y"]').val(preferredSize[1]);
	      } else if (preferredScalingMethod === 'scale') {
	        this.$('[name="scalefactor"]').val(preferredScale * 100);
	      }
	      this.onScaleMethodChange();
	      this.onSizeOrResolutionChange();
	    }
	
	    if (preferredFields) {
	      this.$('[name="field"]').prop('checked', false);
	      preferredFields.forEach(function (field) {
	        _this.$('[name="field"][value="' + field + '"]').prop('checked', true);
	      });
	      this.model.set('fields', preferredFields);
	      this.onBandsChange();
	    }
	
	    this.checkSize();
	    this.checkValidity();
	    this.checkBands();
	    this.checkBbox();
	    this.checkResolution();
	  },
	
	  events: (_events = {
	    'change .select-projection': 'onProjectionChange',
	    'change .select-format': 'onFormatChange',
	    'change [name="field"]': 'onBandsChange',
	    'change [name="interpolation"]': 'onInterpolationChange',
	    'change [name="scale-method"]': 'onScaleMethodChange'
	  }, _defineProperty(_events, 'change [name^=\'size-\']', 'onSizeOrResolutionChange'), _defineProperty(_events, 'change [name^=\'resolution-\']', 'onSizeOrResolutionChange'), _defineProperty(_events, 'change [name="scalefactor"]', 'onSizeOrResolutionChange'), _defineProperty(_events, 'submit form', 'onFormSubmit'), _defineProperty(_events, 'click .start-download', 'onStartDownloadClicked'), _defineProperty(_events, 'click .btn-draw-bbox', 'onDrawBBoxClicked'), _defineProperty(_events, 'change .show-bbox', 'onBBoxInputChange'), _events),
	
	  initialize: function initialize(options) {
	    var _this2 = this;
	
	    this.layerModel = options.layerModel;
	    this.mapModel = options.mapModel;
	    this.mapProjection = this.mapModel.get('projection') || 'EPSG:4326';
	    this.filtersModel = options.filtersModel;
	    var filtersArea = options.mapModel.get('area');
	    if (filtersArea) {
	      if (Array.isArray(filtersArea)) {
	        this.bbox = filtersArea;
	      } else {
	        this.bbox = (0, _bbox2.default)(filtersArea);
	      }
	    } else {
	      this.bbox = options.mapModel.get('bbox');
	    }
	    this.bbox = (0, _proj.transformExtent)(this.bbox, 'EPSG:4326', this.mapProjection);
	
	    this.listenTo(this.mapModel, 'change:area', function () {
	      var bbox = _this2.mapModel.get('area');
	      if (Array.isArray(bbox)) {
	        _this2.bbox = (0, _proj.transformExtent)(bbox, 'EPSG:4326', _this2.mapProjection);
	        _this2.render();
	      }
	    });
	    // if another projection used, adjust resolution for warnings
	    var maxSizeResolution = this.layerModel.get('fullResolution.maxSizeResolution');
	    if (maxSizeResolution) {
	      this.resolution = (0, _proj.transform)([maxSizeResolution, 0], 'EPSG:4326', this.mapProjection)[0];
	    }
	    this.defaultLabelsSet();
	  },
	  onProjectionChange: function onProjectionChange() {
	    var val = this.$('.select-projection').val();
	    this.model.set('projection', val !== '' && val !== '---' ? val : null);
	    this.updatePreferences('preferredProjection', val !== '' && val !== '---' ? val : null);
	  },
	  onFormatChange: function onFormatChange() {
	    var val = this.$('.select-format').val();
	    this.model.set('format', val !== '' && val !== '---' ? val : null);
	    this.updatePreferences('preferredFormat', val !== '' && val !== '---' ? val : null);
	    this.checkBands();
	  },
	  onBandsChange: function onBandsChange() {
	    var fields = this.$('[name="field"]:checked').map(function (i, input) {
	      return input.value;
	    }).get();
	    this.model.set('fields', fields);
	    this.updatePreferences('preferredFields', fields);
	
	    this.checkSize();
	    this.checkValidity();
	    this.checkBands();
	  },
	  onInterpolationChange: function onInterpolationChange() {
	    var val = this.$('select[name="interpolation"]').val();
	    this.model.set('interpolation', val !== '' && val !== '---' ? val : null);
	    this.updatePreferences('preferredInterpolation', val !== '' && val !== '---' ? val : null);
	  },
	  onScaleMethodChange: function onScaleMethodChange() {
	    switch (this.$('input[name="scale-method"]:checked').val()) {
	      case 'full':
	        this.$('input[name^=\'resolution\']').prop('disabled', true);
	        this.$('input[name^=\'size\']').prop('disabled', true);
	        this.$('input[name="scalefactor"]').prop('disabled', true);
	        this.model.set({
	          scaleMethod: 'none'
	        });
	        break;
	      case 'resolution':
	        {
	          this.$('input[name^=\'resolution\']').prop('disabled', false);
	          this.$('input[name^=\'size\']').prop('disabled', true);
	          this.$('input[name="scalefactor"]').prop('disabled', true);
	
	          this.model.set({
	            scaleMethod: 'resolution',
	            resolutionX: parseFloat(this.$('input[name="resolution-x"]').val()),
	            resolutionY: parseFloat(this.$('input[name="resolution-y"]').val())
	          });
	          break;
	        }
	      case 'size':
	        {
	          this.$('input[name^=\'resolution\']').prop('disabled', true);
	          this.$('input[name^=\'size\']').prop('disabled', false);
	          this.$('input[name="scalefactor"]').prop('disabled', true);
	
	          this.model.set({
	            scaleMethod: 'size',
	            sizeX: parseInt(this.$('input[name="size-x"]').val(), 10),
	            sizeY: parseInt(this.$('input[name="size-y"]').val(), 10)
	          });
	          break;
	        }
	      case 'scale':
	        {
	          this.$('input[name^=\'resolution\']').prop('disabled', true);
	          this.$('input[name^=\'size\']').prop('disabled', true);
	          this.$('input[name="scalefactor"]').prop('disabled', false);
	
	          this.model.set({
	            scaleMethod: 'scale',
	            scale: parseFloat(this.$('input[name="scalefactor"]').val()) / 100
	          });
	          break;
	        }
	      default:
	        break;
	    }
	
	    this.updatePreferences('preferredScalingMethod', this.$('input[name="scale-method"]:checked').val());
	
	    this.checkSize();
	    this.checkResolution();
	    this.checkValidity();
	  },
	  onSizeOrResolutionChange: function onSizeOrResolutionChange() {
	    var resolution = [parseFloat(this.$('input[name="resolution-x"]').val()), parseFloat(this.$('input[name="resolution-y"]').val())];
	    var size = [parseInt(this.$('input[name="size-x"]').val(), 10), parseInt(this.$('input[name="size-y"]').val(), 10)];
	    var scale = parseFloat(this.$('input[name="scalefactor"]').val()) / 100;
	
	    this.model.set({
	      resolutionX: resolution[0],
	      resolutionY: resolution[1],
	      sizeX: size[0],
	      sizeY: size[1],
	      scale: scale
	    });
	
	    this.$('input[name="size-x"]').val(this.model.get('sizeX'));
	    this.$('input[name="size-y"]').val(this.model.get('sizeY'));
	
	    this.updatePreferences('preferredResolution', resolution);
	    this.updatePreferences('preferredSize', size);
	    this.updatePreferences('preferredScale', scale);
	
	    this.checkSize();
	    this.checkResolution();
	    this.checkValidity();
	  },
	  onStartDownloadClicked: function onStartDownloadClicked() {
	    // refresh values from form
	    this.onSizeOrResolutionChange();
	    var subsetProj = this.mapModel.get('projection');
	    // get numeric code and parse it into opengis def url
	    if (subsetProj) {
	      subsetProj = subsetProj.slice(subsetProj.lastIndexOf(':') + 1);
	      subsetProj = 'http://www.opengis.net/def/crs/EPSG/0/' + subsetProj;
	    }
	    var options = {
	      bbox: this.bbox,
	      outputCRS: this.model.get('projection'),
	      subsetCRS: subsetProj,
	      fields: this.model.get('fields'),
	      format: this.model.get('format'),
	      interpolation: this.model.get('interpolation')
	    };
	
	    switch (this.model.get('scaleMethod') || 'resolution') {
	      case 'resolution':
	        {
	          options.sizeX = Math.round((this.bbox[2] - this.bbox[0]) / this.model.get('resolutionX'));
	          options.sizeY = Math.round((this.bbox[3] - this.bbox[1]) / this.model.get('resolutionY'));
	          options.sizeX = options.sizeX < 1 ? 1 : options.sizeX;
	          options.sizeY = options.sizeY < 1 ? 1 : options.sizeY;
	          break;
	        }
	      case 'size':
	        options.sizeX = this.model.get('sizeX');
	        options.sizeY = this.model.get('sizeY');
	        options.sizeX = options.sizeX < 1 ? 1 : options.sizeX;
	        options.sizeY = options.sizeY < 1 ? 1 : options.sizeY;
	        break;
	      case 'scale':
	        options.scale = this.model.get('scale');
	        options.scale = options.scale < 0 ? 1 : options.scale;
	        break;
	      default:
	        break;
	    }
	    (0, _download.downloadFullResolutionWCS)(this.layerModel, this.mapModel, this.filtersModel, options);
	  },
	  onDrawBBoxClicked: function onDrawBBoxClicked() {
	    var _this3 = this;
	
	    this.mapModel.set('tool', 'bbox');
	    this.close();
	
	    this.listenToOnce(this.mapModel, 'change:tool', function () {
	      _this3.open();
	    });
	  },
	  onBBoxInputChange: function onBBoxInputChange() {
	    var bbox = this.$('.show-bbox').map(function (index, elem) {
	      return (0, _jquery2.default)(elem).val();
	    }).get().map(parseFloat);
	
	    if (bbox.reduce(function (prev, current) {
	      return prev && !isNaN(current);
	    }, true)) {
	      this.mapModel.set('drawnArea', null);
	      this.mapModel.set('area', (0, _proj.transformExtent)(bbox, this.mapProjection, 'EPSG:4326'));
	    }
	    this.checkBbox();
	  },
	  updatePreferences: function updatePreferences(key, value) {
	    var preferences = this.getPreferences();
	    preferences[key] = value;
	    localStorage.setItem('full-resolution-download-options-view-preferences-' + this.layerModel.get('id'), JSON.stringify(preferences));
	  },
	  checkSize: function checkSize() {
	    // show warning when:
	    // "sizeX * sizeY * #bands * bits/band (assume 8) / 1024 / 1024 >= maxSizeWarning"
	    var sizeX = 0;
	    var sizeY = 0;
	    var estimated_size = 0;
	    switch (this.model.get('scaleMethod') || 'resolution') {
	      case 'resolution':
	        {
	          sizeX = Math.round((this.bbox[2] - this.bbox[0]) / this.model.get('resolutionX'));
	          sizeY = Math.round((this.bbox[3] - this.bbox[1]) / this.model.get('resolutionY'));
	          break;
	        }
	      case 'size':
	        sizeX = this.model.get('sizeX');
	        sizeY = this.model.get('sizeY');
	        break;
	      case 'scale':
	        sizeX = Math.round((this.bbox[2] - this.bbox[0]) / this.resolution * this.model.get('scale'));
	        sizeY = Math.round((this.bbox[3] - this.bbox[1]) / this.resolution * this.model.get('scale'));
	        break;
	      default:
	        sizeX = Math.round((this.bbox[2] - this.bbox[0]) / this.resolution);
	        sizeY = Math.round((this.bbox[3] - this.bbox[1]) / this.resolution);
	        break;
	    }
	
	    var $sizeWarning = this.$('.size-warning');
	
	    var fields = this.model.get('fields') || [];
	    estimated_size = sizeX * sizeY * fields.length / 131072;
	    if (estimated_size >= this.layerModel.get('fullResolution.maxSizeWarning')) {
	      $sizeWarning.html(_i18next2.default.t('download_size_warning', { estimated_size: parseFloat(estimated_size).toFixed(0) }));
	      $sizeWarning.fadeIn();
	    } else if ($sizeWarning.is(':visible')) {
	      $sizeWarning.hide();
	    } else {
	      $sizeWarning.hide();
	    }
	  },
	  checkValidity: function checkValidity() {
	    var isInvalid = false;
	    switch (this.model.get('scaleMethod') || 'none') {
	      case 'none':
	        this.$('.input-resolution').removeClass('has-error');
	        this.$('.input-size').removeClass('has-error');
	        this.$('.input-scale').removeClass('has-error');
	        break;
	      case 'resolution':
	        if (isNaN(this.model.get('resolutionX')) || isNaN(this.model.get('resolutionY')) || this.model.get('resolutionX') <= 0 || this.model.get('resolutionY') <= 0) {
	          this.$('.input-resolution').addClass('has-error');
	          isInvalid = true;
	        } else {
	          this.$('.input-resolution').removeClass('has-error');
	        }
	        this.$('.input-size').removeClass('has-error');
	        this.$('.input-scale').removeClass('has-error');
	        break;
	      case 'size':
	        if (isNaN(this.model.get('sizeX')) || isNaN(this.model.get('sizeY')) || this.model.get('sizeX') <= 0 || this.model.get('sizeY') <= 0 || Math.floor(this.model.get('sizeX')) != this.model.get('sizeX') || Math.floor(this.model.get('sizeY')) != this.model.get('sizeY')) {
	          this.$('.input-size').addClass('has-error');
	          isInvalid = true;
	        } else {
	          this.$('.input-size').removeClass('has-error');
	        }
	        this.$('.input-resolution').removeClass('has-error');
	        this.$('.input-scale').removeClass('has-error');
	        break;
	      case 'scale':
	        if (isNaN(this.model.get('scale')) || this.model.get('scale') <= 0) {
	          this.$('.input-scale').addClass('has-error');
	          isInvalid = true;
	        } else {
	          this.$('.input-scale').removeClass('has-error');
	        }
	        this.$('.input-resolution').removeClass('has-error');
	        this.$('.input-size').removeClass('has-error');
	        break;
	      default:
	        break;
	    }
	
	    var fields = this.model.get('fields') || this.getPreferences().preferredFields || this.layerModel.get('fullResolution.fields').map(function (f) {
	      return f.identifier;
	    });
	    if (!fields || !fields.length) {
	      this.$('.input-fields').addClass('has-error');
	      isInvalid = true;
	    } else {
	      this.$('.input-fields').removeClass('has-error');
	    }
	
	    this.$('.start-download').prop('disabled', isInvalid);
	  },
	  checkBands: function checkBands() {
	    var formatType = this.model.get('format');
	    var format = this.model.get('availableDownloadFormats').find(function (frmt) {
	      return frmt.mimeType === formatType;
	    });
	
	    var $bandsWarning = this.$('.bands-warning');
	    if (format && !isNaN(format.maxBands)) {
	      var fields = this.model.get('fields');
	      if (fields.length > parseInt(format.maxBands, 10)) {
	        $bandsWarning.text(_i18next2.default.t('download_bands_warning', {
	          maxBands: format.maxBands,
	          requestedBands: fields.length
	        }));
	        $bandsWarning.fadeIn();
	      } else {
	        setTimeout(function () {
	          return $bandsWarning.stop(true, true).hide();
	        });
	      }
	    } else {
	      setTimeout(function () {
	        return $bandsWarning.stop(true, true).hide();
	      });
	    }
	  },
	  checkBbox: function checkBbox() {
	    var $bboxWarning = this.$('.bbox-warning');
	    var maxBboxEdgeSize = this.layerModel.get('fullResolution.maxBboxEdgeSize');
	    var maxBboxSize = (0, _proj.transform)([maxBboxEdgeSize, 0], 'EPSG:4326', this.mapProjection)[0];
	    var axisNames = Array.isArray(this.layerModel.get('fullResolution.axisNames')) ? this.layerModel.get('fullResolution.axisNames') : ['long', 'lat'];
	    if (this.bbox[3] - this.bbox[1] >= maxBboxSize) {
	      $bboxWarning.html(_i18next2.default.t('max_bbox_warning', {
	        max_bbox_size: maxBboxSize,
	        max_bbox_axis: axisNames[1],
	        max_bbox_exceed: (this.bbox[3] - this.bbox[1] - maxBboxSize).toFixed(4)
	      }));
	      $bboxWarning.fadeIn();
	    } else if (this.bbox[2] - this.bbox[0] >= maxBboxSize) {
	      $bboxWarning.html(_i18next2.default.t('max_bbox_warning', {
	        max_bbox_size: maxBboxSize,
	        max_bbox_axis: axisNames[0],
	        max_bbox_exceed: (this.bbox[2] - this.bbox[0] - maxBboxSize).toFixed(4)
	      }));
	      $bboxWarning.fadeIn();
	    } else {
	      $bboxWarning.hide();
	    }
	  },
	  checkResolution: function checkResolution() {
	    var $resoWarning = this.$('.resolution-warning');
	    var maxResolution = this.layerModel.get('fullResolution.maxAllowedResolution');
	    var maxResolutionTrans = (0, _proj.transform)([maxResolution, 0], 'EPSG:4326', this.mapProjection)[0];
	    if (this.model.get('resolutionX') >= maxResolutionTrans || this.model.get('resolutionY') >= maxResolutionTrans) {
	      $resoWarning.html(_i18next2.default.t('max_resolution_warning', {
	        max_resolution: maxResolutionTrans
	      }));
	      $resoWarning.fadeIn();
	    } else {
	      $resoWarning.hide();
	    }
	  },
	  getPreferences: function getPreferences() {
	    try {
	      return JSON.parse(localStorage.getItem('full-resolution-download-options-view-preferences-' + this.layerModel.get('id')) || '{}');
	    } catch (error) {
	      return {};
	    }
	  },
	  defaultLabelsSet: function defaultLabelsSet() {
	    _underscore2.default.each(this.model.get('availableDownloadFormats'), function (format) {
	      if (typeof format.name === 'undefined' && format.mimeType !== 'undefined') {
	        // eslint-disable-next-line no-param-reassign
	        format.name = format.mimeType;
	      }
	    });
	    _underscore2.default.each(this.model.get('availableProjections'), function (proj) {
	      if (typeof proj.name === 'undefined' && proj.identifier !== 'undefined') {
	        // eslint-disable-next-line no-param-reassign
	        proj.name = proj.identifier;
	      }
	    });
	    _underscore2.default.each(this.layerModel.get('fullResolution.fields'), function (field) {
	      if (typeof field.name === 'undefined' && typeof field.identifier !== 'undefined') {
	        // eslint-disable-next-line no-param-reassign
	        field.name = field.identifier;
	      }
	    });
	    _underscore2.default.each(this.layerModel.get('fullResolution.interpolations'), function (interpolation) {
	      if (typeof interpolation.name === 'undefined' && typeof interpolation.identifier !== 'undefined') {
	        // eslint-disable-next-line no-param-reassign
	        interpolation.name = interpolation.identifier;
	      }
	    });
	  }
	});

/***/ }),
/* 534 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	
	var _createClass = function () {
	  function defineProperties(target, props) {
	    for (var i = 0; i < props.length; i++) {
	      var descriptor = props[i];descriptor.enumerable = descriptor.enumerable || false;descriptor.configurable = true;if ("value" in descriptor) descriptor.writable = true;Object.defineProperty(target, descriptor.key, descriptor);
	    }
	  }return function (Constructor, protoProps, staticProps) {
	    if (protoProps) defineProperties(Constructor.prototype, protoProps);if (staticProps) defineProperties(Constructor, staticProps);return Constructor;
	  };
	}();
	
	var _underscore = __webpack_require__(33);
	
	var _underscore2 = _interopRequireDefault(_underscore);
	
	var _backbone = __webpack_require__(24);
	
	var _backbone2 = _interopRequireDefault(_backbone);
	
	var _RecordModel2 = __webpack_require__(241);
	
	var _RecordModel3 = _interopRequireDefault(_RecordModel2);
	
	function _interopRequireDefault(obj) {
	  return obj && obj.__esModule ? obj : { default: obj };
	}
	
	function _classCallCheck(instance, Constructor) {
	  if (!(instance instanceof Constructor)) {
	    throw new TypeError("Cannot call a class as a function");
	  }
	}
	
	function _possibleConstructorReturn(self, call) {
	  if (!self) {
	    throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
	  }return call && ((typeof call === "undefined" ? "undefined" : _typeof(call)) === "object" || typeof call === "function") ? call : self;
	}
	
	function _inherits(subClass, superClass) {
	  if (typeof superClass !== "function" && superClass !== null) {
	    throw new TypeError("Super expression must either be null or a function, not " + (typeof superClass === "undefined" ? "undefined" : _typeof(superClass)));
	  }subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } });if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;
	}
	
	var EOWCSRecordModel = function (_RecordModel) {
	  _inherits(EOWCSRecordModel, _RecordModel);
	
	  function EOWCSRecordModel() {
	    _classCallCheck(this, EOWCSRecordModel);
	
	    return _possibleConstructorReturn(this, (EOWCSRecordModel.__proto__ || Object.getPrototypeOf(EOWCSRecordModel)).apply(this, arguments));
	  }
	
	  _createClass(EOWCSRecordModel, [{
	    key: 'getThumbnailUrl',
	    value: function getThumbnailUrl() {
	      var thumbnailUrlTemplate = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : undefined;
	
	      if (thumbnailUrlTemplate) {
	        return _underscore2.default.template(thumbnailUrlTemplate, {
	          interpolate: /\{\{(.+?)\}\}/g
	        })(this.toJSON());
	      }
	      // TODO
	      return null;
	    }
	  }, {
	    key: 'getBrowseUrl',
	    value: function getBrowseUrl() {
	      var browseUrlTemplate = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : undefined;
	
	      if (browseUrlTemplate) {
	        return _underscore2.default.template(browseUrlTemplate, {
	          interpolate: /\{\{(.+?)\}\}/g
	        })(this.toJSON());
	      }
	      // TODO
	      return null;
	    }
	  }, {
	    key: 'getDescription',
	    value: function getDescription() {
	      var descriptionTemplate = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : undefined;
	
	      if (descriptionTemplate) {
	        return _underscore2.default.template(descriptionTemplate, {
	          interpolate: /\{\{(.+?)\}\}/g
	        })(this.toJSON());
	      }
	      return null;
	    }
	  }]);
	
	  return EOWCSRecordModel;
	}(_RecordModel3.default);
	
	var EOWCSCollection = _backbone2.default.Collection.extend({
	  model: EOWCSRecordModel
	});
	
	exports.default = EOWCSCollection;

/***/ }),
/* 535 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	
	var _createClass = function () {
	  function defineProperties(target, props) {
	    for (var i = 0; i < props.length; i++) {
	      var descriptor = props[i];descriptor.enumerable = descriptor.enumerable || false;descriptor.configurable = true;if ("value" in descriptor) descriptor.writable = true;Object.defineProperty(target, descriptor.key, descriptor);
	    }
	  }return function (Constructor, protoProps, staticProps) {
	    if (protoProps) defineProperties(Constructor.prototype, protoProps);if (staticProps) defineProperties(Constructor, staticProps);return Constructor;
	  };
	}();
	
	var _underscore = __webpack_require__(33);
	
	var _underscore2 = _interopRequireDefault(_underscore);
	
	var _backbone = __webpack_require__(24);
	
	var _backbone2 = _interopRequireDefault(_backbone);
	
	var _RecordModel2 = __webpack_require__(241);
	
	var _RecordModel3 = _interopRequireDefault(_RecordModel2);
	
	function _interopRequireDefault(obj) {
	  return obj && obj.__esModule ? obj : { default: obj };
	}
	
	function _classCallCheck(instance, Constructor) {
	  if (!(instance instanceof Constructor)) {
	    throw new TypeError("Cannot call a class as a function");
	  }
	}
	
	function _possibleConstructorReturn(self, call) {
	  if (!self) {
	    throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
	  }return call && ((typeof call === "undefined" ? "undefined" : _typeof(call)) === "object" || typeof call === "function") ? call : self;
	}
	
	function _inherits(subClass, superClass) {
	  if (typeof superClass !== "function" && superClass !== null) {
	    throw new TypeError("Super expression must either be null or a function, not " + (typeof superClass === "undefined" ? "undefined" : _typeof(superClass)));
	  }subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } });if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;
	}
	
	var OpenSearchRecordModel = function (_RecordModel) {
	  _inherits(OpenSearchRecordModel, _RecordModel);
	
	  function OpenSearchRecordModel() {
	    _classCallCheck(this, OpenSearchRecordModel);
	
	    return _possibleConstructorReturn(this, (OpenSearchRecordModel.__proto__ || Object.getPrototypeOf(OpenSearchRecordModel)).apply(this, arguments));
	  }
	
	  _createClass(OpenSearchRecordModel, [{
	    key: 'getThumbnailUrl',
	    value: function getThumbnailUrl() {
	      var thumbnailUrlTemplate = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : undefined;
	
	      if (thumbnailUrlTemplate) {
	        return _underscore2.default.template(thumbnailUrlTemplate, {
	          interpolate: /\{\{(.+?)\}\}/g
	        })(this.toJSON());
	      }
	
	      var properties = this.get('properties');
	      if (properties && properties.media) {
	        var media = properties.media.find(function (m) {
	          return m.category === 'THUMBNAIL';
	        });
	        if (media) {
	          return media.url;
	        }
	        // if thumbnailUrl not present, try quickLook as a fallback option
	        var quickLook = properties.media.find(function (m) {
	          return m.category === 'QUICKLOOK';
	        });
	        if (quickLook) {
	          return quickLook.url;
	        }
	      }
	      return null;
	    }
	  }, {
	    key: 'getQuickLookUrl',
	    value: function getQuickLookUrl() {
	      var quickLookUrlTemplate = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : undefined;
	
	      if (quickLookUrlTemplate) {
	        return _underscore2.default.template(quickLookUrlTemplate, {
	          interpolate: /\{\{(.+?)\}\}/g
	        })(this.toJSON());
	      }
	
	      var properties = this.get('properties');
	      if (properties && properties.media) {
	        var quickLook = properties.media.find(function (m) {
	          return m.category === 'QUICKLOOK';
	        });
	        if (quickLook) {
	          return quickLook.url;
	        }
	      }
	      return null;
	    }
	  }, {
	    key: 'getBrowseUrl',
	    value: function getBrowseUrl() {
	      var browseUrlTemplate = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : undefined;
	
	      if (browseUrlTemplate) {
	        return _underscore2.default.template(browseUrlTemplate, {
	          interpolate: /\{\{(.+?)\}\}/g
	        })(this.toJSON());
	      }
	
	      var properties = this.get('properties');
	      if (properties && properties.media) {
	        var media = properties.media.find(function (m) {
	          return m.category === 'QUICKLOOK';
	        });
	        if (media) {
	          return media.url;
	        }
	      }
	      if (properties && properties.links) {
	        var link = properties.links.find(function (l) {
	          return l.rel === 'icon';
	        });
	        if (link) {
	          return link.url;
	        }
	      }
	      return null;
	    }
	  }, {
	    key: 'getTitle',
	    value: function getTitle() {
	      var properties = this.get('properties');
	      if (properties && properties.title) {
	        return properties.title;
	      }
	      return this.get('id');
	    }
	  }, {
	    key: 'getDescription',
	    value: function getDescription() {
	      var descriptionTemplate = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : undefined;
	
	      if (descriptionTemplate) {
	        return _underscore2.default.template(descriptionTemplate, {
	          interpolate: /\{\{(.+?)\}\}/g
	        })(this.toJSON());
	      }
	
	      var properties = this.get('properties');
	      return properties.summary || properties.content;
	    }
	  }]);
	
	  return OpenSearchRecordModel;
	}(_RecordModel3.default);
	
	var OpenSearchCollection = _backbone2.default.Collection.extend({
	  model: OpenSearchRecordModel
	});
	
	exports.default = OpenSearchCollection;

/***/ }),
/* 536 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	exports.prepareRecords = prepareRecords;
	exports.convertFilters = convertFilters;
	
	var _union = __webpack_require__(529);
	
	var _union2 = _interopRequireDefault(_union);
	
	var _helpers = __webpack_require__(68);
	
	var _bbox = __webpack_require__(137);
	
	var _bbox2 = _interopRequireDefault(_bbox);
	
	function _interopRequireDefault(obj) {
	  return obj && obj.__esModule ? obj : { default: obj };
	}
	
	function _toConsumableArray(arr) {
	  if (Array.isArray(arr)) {
	    for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) {
	      arr2[i] = arr[i];
	    }return arr2;
	  } else {
	    return Array.from(arr);
	  }
	}
	
	function prepareBox(bbox) {
	  var b = [].concat(_toConsumableArray(bbox));
	  b[1] = Math.max(b[1], -90);
	  b[3] = Math.min(b[3], 90);
	
	  for (var i = 0; i <= 2; i += 2) {
	    while (b[i] > 180) {
	      b[i] -= 360;
	    }
	    while (b[i] < -180) {
	      b[i] += 360;
	    }
	  }
	  return b;
	}
	
	/**
	 * Prepares the records retrieved from OpenSearch. This involves "unwrapping" of
	 * dateline wrapped geometries and adjusting the bbox. MultiPolygons coordinates have switched order if necessary
	 * If its polygons are contiguous, merge them to a single polygon.
	 * @param {object[]} records the retrieved records
	 * @param {boolean} > if polygon coordinates are received in switched order
	 * @returns {object[]} the adjusted records.
	 */
	function prepareRecords(records, switchMultiPolygonCoordinates) {
	  return records.map(function (record) {
	    var adjustedGeometry = false;
	    if (record.geometry && record.geometry.type === 'Polygon') {
	      // normalize the geometry, so that wrapped polygons are unwrapped
	      for (var ringIndex = 0; ringIndex < record.geometry.coordinates.length; ++ringIndex) {
	        var ring = record.geometry.coordinates[ringIndex];
	        var last = null;
	        for (var i = 0; i < ring.length; ++i) {
	          var current = ring[i];
	          if (last) {
	            if (current[0] - last[0] < -180) {
	              current[0] += 360;
	              adjustedGeometry = true;
	            }
	            if (current[0] - last[0] > 180) {
	              current[0] -= 360;
	              adjustedGeometry = true;
	            }
	          }
	          last = current;
	        }
	      }
	    } else if (switchMultiPolygonCoordinates && record.geometry && record.geometry.type === 'MultiPolygon') {
	      for (var polygonIndex = 0; polygonIndex < record.geometry.coordinates.length; ++polygonIndex) {
	        for (var _ringIndex = 0; _ringIndex < record.geometry.coordinates[polygonIndex].length; ++_ringIndex) {
	          var _ring = record.geometry.coordinates[polygonIndex][_ringIndex];
	          for (var _i = 0; _i < _ring.length; ++_i) {
	            // switch latitude and longitude
	            _ring[_i].reverse();
	          }
	        }
	      }
	      if (record.geometry.coordinates.length === 2) {
	        // add 360 to the second polygon if necessary to exceed srs bounds and allow polygon union to remove connection line on dateline
	        adjustedGeometry = true;
	        var outerRingL = record.geometry.coordinates[1][0];
	        var outerRingR = record.geometry.coordinates[0][0];
	        var outerRingLLatitudes = Array.from(outerRingL, function (x) {
	          return x[1];
	        });
	        var outerRingRLatitudes = Array.from(outerRingR, function (x) {
	          return x[1];
	        });
	
	        // union to a single polygon only for non-S5P wierd multipolygons
	        // eslint-disable-next-line max-len
	        var notPerformUnion = Math.abs(Math.min.apply(Math, _toConsumableArray(outerRingLLatitudes)) + 85.05115) < 1e-8 || Math.abs(Math.min.apply(Math, _toConsumableArray(outerRingRLatitudes)) + 85.05115) < 1e-8 || Math.abs(Math.max.apply(Math, _toConsumableArray(outerRingLLatitudes)) - 85.05115) < 1e-8 || Math.abs(Math.max.apply(Math, _toConsumableArray(outerRingRLatitudes)) - 85.05115) < 1e-8;
	
	        if (!notPerformUnion) {
	          adjustedGeometry = true;
	          var outerRingLLongitudes = Array.from(outerRingL, function (x) {
	            return x[0];
	          });
	          var outerRingRLongitudes = Array.from(outerRingR, function (x) {
	            return x[0];
	          });
	
	          if (Math.abs(Math.min.apply(Math, _toConsumableArray(outerRingLLongitudes)) + 180.0) < 1e-8 && Math.abs(Math.max.apply(Math, _toConsumableArray(outerRingRLongitudes)) - 180.0) < 1e-8) {
	            for (var _i2 = 0; _i2 < outerRingL.length; ++_i2) {
	              outerRingL[_i2][0] += 360;
	            }
	          } else if (Math.abs(Math.min.apply(Math, _toConsumableArray(outerRingRLongitudes)) + 180.0) < 1e-8 && Math.abs(Math.max.apply(Math, _toConsumableArray(outerRingLLongitudes)) - 180.0) < 1e-8) {
	            for (var _i3 = 0; _i3 < outerRingR.length; ++_i3) {
	              outerRingR[_i3][0] += 360;
	            }
	          }
	
	          var polygonL = (0, _helpers.polygon)(record.geometry.coordinates[0]);
	          var polygonR = (0, _helpers.polygon)(record.geometry.coordinates[1]);
	          // union to a single polygon
	          var unioned = (0, _union2.default)(polygonL, polygonR);
	
	          // eslint-disable-next-line no-param-reassign
	          record.geometry = unioned.geometry;
	        }
	      }
	    }
	    // (re-)calculate the bounding box when not available or when the geometry
	    // was adjusted in the step before
	    if (!record.bbox || adjustedGeometry) {
	      // eslint-disable-next-line no-param-reassign
	      record.bbox = (0, _bbox2.default)(record.geometry);
	    }
	    return record;
	  });
	}
	
	/**
	 * Convert a filters model, map model, and options to an OpenSearch parameters
	 * object
	 */
	function convertFilters(filterParams, mapParams, options, format, service) {
	  var description = service.getDescription();
	  var url = description.getUrl(null, format || null);
	
	  var parameters = {};
	
	  var time = filterParams.time || mapParams.extendedTime || mapParams.time;
	  if (time) {
	    if (Array.isArray(time)) {
	      parameters['time:start'] = time[0];
	      parameters['time:end'] = time[1];
	    } else {
	      parameters['time:start'] = time;
	      parameters['time:end'] = time;
	    }
	  }
	
	  if (mapParams) {
	    var area = mapParams.area;
	    if (area) {
	      if (Array.isArray(area)) {
	        parameters['geo:box'] = prepareBox(area);
	      } else if (area.geometry) {
	        var geometry = area.geometry;
	        if (geometry.type === 'Point' && url.hasParameter('geo:lon') && url.hasParameter('geo:lat')) {
	          parameters['geo:lon'] = geometry.coordinates[0];
	          parameters['geo:lat'] = geometry.coordinates[1];
	          if (url.hasParameter('geo:radius')) {
	            parameters['geo:radius'] = 0;
	          }
	        } else {
	          parameters['geo:geometry'] = geometry;
	        }
	      }
	    } else if (mapParams && mapParams.bbox) {
	      // use the maps BBox by default
	      parameters['geo:box'] = prepareBox(mapParams.bbox);
	    }
	  }
	
	  if (options.hasOwnProperty('itemsPerPage') && url.hasParameter('count')) {
	    parameters.count = options.itemsPerPage;
	  }
	
	  if (options.hasOwnProperty('page')) {
	    if (url.hasParameter('startIndex') && options.hasOwnProperty('itemsPerPage')) {
	      parameters.startIndex = options.page * options.itemsPerPage + url.indexOffset;
	    } else if (url.hasParameter('startPage')) {
	      parameters.startPage = options.page + url.pageOffset;
	    }
	  }
	
	  Object.keys(filterParams).forEach(function (key) {
	    if (url.hasParameter(key)) {
	      parameters[key] = filterParams[key];
	    }
	  });
	
	  return parameters;
	}

/***/ }),
/* 537 */
/***/ (function(module, exports, __webpack_require__) {

	/* WEBPACK VAR INJECTION */(function(Promise) {'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	exports.search = search;
	exports.searchAllRecords = searchAllRecords;
	exports.getParameters = getParameters;
	exports.getSearchRequest = getSearchRequest;
	
	var _opensearchBrowser = __webpack_require__(663);
	
	var _paginator = __webpack_require__(309);
	
	var _OpenSearchWorker = __webpack_require__(1165);
	
	var _OpenSearchWorker2 = _interopRequireDefault(_OpenSearchWorker);
	
	var _common = __webpack_require__(536);
	
	function _interopRequireDefault(obj) {
	  return obj && obj.__esModule ? obj : { default: obj };
	}
	
	function _toConsumableArray(arr) {
	  if (Array.isArray(arr)) {
	    for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) {
	      arr2[i] = arr[i];
	    }return arr2;
	  } else {
	    return Array.from(arr);
	  }
	}
	
	// eslint-disable-next-line
	
	
	Promise.config({
	  cancellation: true
	});
	
	(0, _opensearchBrowser.config)({
	  useXHR: true
	});
	
	// cached services
	var services = {};
	var serializedServices = {};
	
	function getService(url) {
	  if (!services[url]) {
	    // add a new promise
	    services[url] = (0, _opensearchBrowser.discover)(url).then(function (service) {
	      serializedServices[url] = service.serialize();
	      return service;
	    });
	  }
	  return services[url];
	}
	
	function search(layerModel, filtersModel, mapModel) {
	  var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
	
	  var url = layerModel.get('search.url');
	  var method = layerModel.get('search.method');
	  var format = options.mimeType || layerModel.get('search.format') || null;
	  var maxUrlLength = layerModel.get('search.maxUrlLength') || 4000;
	  var dropEmptyParameters = layerModel.get('search.dropEmptyParameters') || false;
	  var switchMultiPolygonCoordinates = layerModel.get('search.switchMultiPolygonCoordinates') || false;
	  // coordinate check not necessary when search used only to get total count
	  var skipCoordinateCheck = options.skipCoordinateCheck || false;
	
	  return getService(url).then(function (service) {
	    var parameters = (0, _common.convertFilters)(filtersModel ? filtersModel.attributes : {}, mapModel ? mapModel.attributes : {}, options, format, service);
	    return service.search(parameters, {
	      type: format,
	      method: method || 'GET',
	      maxUrlLength: maxUrlLength,
	      dropEmptyParameters: dropEmptyParameters
	    });
	  }).then(function (result) {
	    if (!skipCoordinateCheck) {
	      // eslint-disable-next-line no-param-reassign
	      result.records = (0, _common.prepareRecords)(result.records, switchMultiPolygonCoordinates);
	    }
	    return result;
	  });
	}
	
	function searchAllRecords(layerModel, filtersModel, mapModel) {
	  var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
	
	  var url = layerModel.get('search.url');
	  var method = layerModel.get('search.method');
	  var format = options.mimeType || layerModel.get('search.format') || null;
	  var maxUrlLength = layerModel.get('search.maxUrlLength') || 4000;
	  var dropEmptyParameters = layerModel.get('search.dropEmptyParameters') || false;
	  var switchMultiPolygonCoordinates = layerModel.get('search.switchMultiPolygonCoordinates') || false;
	
	  var filterParams = filtersModel ? filtersModel.toJSON() : {};
	  var mapParams = mapModel ? mapModel.toJSON() : null;
	
	  var emitter = new _paginator.PagedSearchProgressEmitter();
	
	  var description = serializedServices[url];
	
	  var parseOptions = {
	    extraFields: layerModel.get('search.extraFields'),
	    namespaces: layerModel.get('search.extraFieldsNamespaces')
	  };
	
	  var worker = new _OpenSearchWorker2.default();
	  worker.postMessage(['searchAll', {
	    url: url,
	    method: method,
	    filterParams: filterParams,
	    mapParams: mapParams,
	    options: options,
	    format: format,
	    description: description,
	    maxUrlLength: maxUrlLength,
	    dropEmptyParameters: dropEmptyParameters,
	    parseOptions: parseOptions,
	    switchMultiPolygonCoordinates: switchMultiPolygonCoordinates
	  }]);
	
	  worker.onmessage = function (_ref) {
	    var data = _ref.data;
	
	    emitter.emit.apply(emitter, _toConsumableArray(data));
	  };
	
	  var terminate = function terminate() {
	    if (worker) {
	      worker.postMessage(['terminate']);
	      worker = null;
	    }
	  };
	
	  // TODO: does this cancel the requests? sure hope so
	  emitter.on('cancel', function () {
	    return terminate();
	  });
	  emitter.on('success', function () {
	    return terminate();
	  });
	  emitter.on('error', function () {
	    return terminate();
	  });
	
	  return emitter;
	}
	
	function getParameters(layerModel) {
	  var url = layerModel.get('search.url');
	  var method = layerModel.get('search.method');
	  var format = layerModel.get('search.format');
	
	  return getService(url).then(function (service) {
	    return service.getDescription().getUrl(null, format, method).parameters;
	  });
	}
	
	function getSearchRequest(layerModel, filtersModel, mapModel, options) {
	  var url = layerModel.get('search.url');
	  var method = layerModel.get('search.method');
	  var format = options.mimeType || layerModel.get('search.format') || null;
	
	  return getService(url).then(function (service) {
	    var parameters = (0, _common.convertFilters)(filtersModel ? filtersModel.attributes : {}, mapModel ? mapModel.attributes : {}, options, format, service);
	    return service.createSearchRequest(parameters, format, method || 'GET', false, true);
	  });
	}
	/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(27)))

/***/ }),
/* 538 */
/***/ (function(module, exports, __webpack_require__) {

	/* WEBPACK VAR INJECTION */(function(global) {"use strict";
	
	__webpack_require__(929);
	
	__webpack_require__(539);
	
	__webpack_require__(735);
	
	if (global._babelPolyfill) {
	  throw new Error("only one instance of babel-polyfill is allowed");
	}
	global._babelPolyfill = true;
	
	var DEFINE_PROPERTY = "defineProperty";
	function define(O, key, value) {
	  O[key] || Object[DEFINE_PROPERTY](O, key, {
	    writable: true,
	    configurable: true,
	    value: value
	  });
	}
	
	define(String.prototype, "padLeft", "".padStart);
	define(String.prototype, "padRight", "".padEnd);
	
	"pop,reverse,shift,keys,values,entries,indexOf,every,some,forEach,map,filter,find,findIndex,includes,join,slice,concat,push,splice,unshift,sort,lastIndexOf,reduce,reduceRight,copyWithin,fill".split(",").forEach(function (key) {
	  [][key] && define(Array, key, Function.call.bind([][key]));
	});
	/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))

/***/ }),
/* 539 */
/***/ (function(module, exports, __webpack_require__) {

	/* WEBPACK VAR INJECTION */(function(global, module, Promise) {"use strict";
	
	var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
	
	/**
	 * Copyright (c) 2014, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * https://raw.github.com/facebook/regenerator/master/LICENSE file. An
	 * additional grant of patent rights can be found in the PATENTS file in
	 * the same directory.
	 */
	
	!function (global) {
	  "use strict";
	
	  var Op = Object.prototype;
	  var hasOwn = Op.hasOwnProperty;
	  var undefined; // More compressible than void 0.
	  var $Symbol = typeof Symbol === "function" ? Symbol : {};
	  var iteratorSymbol = $Symbol.iterator || "@@iterator";
	  var asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator";
	  var toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag";
	
	  var inModule = ( false ? "undefined" : _typeof(module)) === "object";
	  var runtime = global.regeneratorRuntime;
	  if (runtime) {
	    if (inModule) {
	      // If regeneratorRuntime is defined globally and we're in a module,
	      // make the exports object identical to regeneratorRuntime.
	      module.exports = runtime;
	    }
	    // Don't bother evaluating the rest of this file if the runtime was
	    // already defined globally.
	    return;
	  }
	
	  // Define the runtime globally (as expected by generated code) as either
	  // module.exports (if we're in a module) or a new, empty object.
	  runtime = global.regeneratorRuntime = inModule ? module.exports : {};
	
	  function wrap(innerFn, outerFn, self, tryLocsList) {
	    // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.
	    var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;
	    var generator = Object.create(protoGenerator.prototype);
	    var context = new Context(tryLocsList || []);
	
	    // The ._invoke method unifies the implementations of the .next,
	    // .throw, and .return methods.
	    generator._invoke = makeInvokeMethod(innerFn, self, context);
	
	    return generator;
	  }
	  runtime.wrap = wrap;
	
	  // Try/catch helper to minimize deoptimizations. Returns a completion
	  // record like context.tryEntries[i].completion. This interface could
	  // have been (and was previously) designed to take a closure to be
	  // invoked without arguments, but in all the cases we care about we
	  // already have an existing method we want to call, so there's no need
	  // to create a new function object. We can even get away with assuming
	  // the method takes exactly one argument, since that happens to be true
	  // in every case, so we don't have to touch the arguments object. The
	  // only additional allocation required is the completion record, which
	  // has a stable shape and so hopefully should be cheap to allocate.
	  function tryCatch(fn, obj, arg) {
	    try {
	      return { type: "normal", arg: fn.call(obj, arg) };
	    } catch (err) {
	      return { type: "throw", arg: err };
	    }
	  }
	
	  var GenStateSuspendedStart = "suspendedStart";
	  var GenStateSuspendedYield = "suspendedYield";
	  var GenStateExecuting = "executing";
	  var GenStateCompleted = "completed";
	
	  // Returning this object from the innerFn has the same effect as
	  // breaking out of the dispatch switch statement.
	  var ContinueSentinel = {};
	
	  // Dummy constructor functions that we use as the .constructor and
	  // .constructor.prototype properties for functions that return Generator
	  // objects. For full spec compliance, you may wish to configure your
	  // minifier not to mangle the names of these two functions.
	  function Generator() {}
	  function GeneratorFunction() {}
	  function GeneratorFunctionPrototype() {}
	
	  // This is a polyfill for %IteratorPrototype% for environments that
	  // don't natively support it.
	  var IteratorPrototype = {};
	  IteratorPrototype[iteratorSymbol] = function () {
	    return this;
	  };
	
	  var getProto = Object.getPrototypeOf;
	  var NativeIteratorPrototype = getProto && getProto(getProto(values([])));
	  if (NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {
	    // This environment has a native %IteratorPrototype%; use it instead
	    // of the polyfill.
	    IteratorPrototype = NativeIteratorPrototype;
	  }
	
	  var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype);
	  GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;
	  GeneratorFunctionPrototype.constructor = GeneratorFunction;
	  GeneratorFunctionPrototype[toStringTagSymbol] = GeneratorFunction.displayName = "GeneratorFunction";
	
	  // Helper for defining the .next, .throw, and .return methods of the
	  // Iterator interface in terms of a single ._invoke method.
	  function defineIteratorMethods(prototype) {
	    ["next", "throw", "return"].forEach(function (method) {
	      prototype[method] = function (arg) {
	        return this._invoke(method, arg);
	      };
	    });
	  }
	
	  runtime.isGeneratorFunction = function (genFun) {
	    var ctor = typeof genFun === "function" && genFun.constructor;
	    return ctor ? ctor === GeneratorFunction ||
	    // For the native GeneratorFunction constructor, the best we can
	    // do is to check its .name property.
	    (ctor.displayName || ctor.name) === "GeneratorFunction" : false;
	  };
	
	  runtime.mark = function (genFun) {
	    if (Object.setPrototypeOf) {
	      Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);
	    } else {
	      genFun.__proto__ = GeneratorFunctionPrototype;
	      if (!(toStringTagSymbol in genFun)) {
	        genFun[toStringTagSymbol] = "GeneratorFunction";
	      }
	    }
	    genFun.prototype = Object.create(Gp);
	    return genFun;
	  };
	
	  // Within the body of any async function, `await x` is transformed to
	  // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test
	  // `hasOwn.call(value, "__await")` to determine if the yielded value is
	  // meant to be awaited.
	  runtime.awrap = function (arg) {
	    return { __await: arg };
	  };
	
	  function AsyncIterator(generator) {
	    function invoke(method, arg, resolve, reject) {
	      var record = tryCatch(generator[method], generator, arg);
	      if (record.type === "throw") {
	        reject(record.arg);
	      } else {
	        var result = record.arg;
	        var value = result.value;
	        if (value && (typeof value === "undefined" ? "undefined" : _typeof(value)) === "object" && hasOwn.call(value, "__await")) {
	          return Promise.resolve(value.__await).then(function (value) {
	            invoke("next", value, resolve, reject);
	          }, function (err) {
	            invoke("throw", err, resolve, reject);
	          });
	        }
	
	        return Promise.resolve(value).then(function (unwrapped) {
	          // When a yielded Promise is resolved, its final value becomes
	          // the .value of the Promise<{value,done}> result for the
	          // current iteration. If the Promise is rejected, however, the
	          // result for this iteration will be rejected with the same
	          // reason. Note that rejections of yielded Promises are not
	          // thrown back into the generator function, as is the case
	          // when an awaited Promise is rejected. This difference in
	          // behavior between yield and await is important, because it
	          // allows the consumer to decide what to do with the yielded
	          // rejection (swallow it and continue, manually .throw it back
	          // into the generator, abandon iteration, whatever). With
	          // await, by contrast, there is no opportunity to examine the
	          // rejection reason outside the generator function, so the
	          // only option is to throw it from the await expression, and
	          // let the generator function handle the exception.
	          result.value = unwrapped;
	          resolve(result);
	        }, reject);
	      }
	    }
	
	    if (_typeof(global.process) === "object" && global.process.domain) {
	      invoke = global.process.domain.bind(invoke);
	    }
	
	    var previousPromise;
	
	    function enqueue(method, arg) {
	      function callInvokeWithMethodAndArg() {
	        return new Promise(function (resolve, reject) {
	          invoke(method, arg, resolve, reject);
	        });
	      }
	
	      return previousPromise =
	      // If enqueue has been called before, then we want to wait until
	      // all previous Promises have been resolved before calling invoke,
	      // so that results are always delivered in the correct order. If
	      // enqueue has not been called before, then it is important to
	      // call invoke immediately, without waiting on a callback to fire,
	      // so that the async generator function has the opportunity to do
	      // any necessary setup in a predictable way. This predictability
	      // is why the Promise constructor synchronously invokes its
	      // executor callback, and why async functions synchronously
	      // execute code before the first await. Since we implement simple
	      // async functions in terms of async generators, it is especially
	      // important to get this right, even though it requires care.
	      previousPromise ? previousPromise.then(callInvokeWithMethodAndArg,
	      // Avoid propagating failures to Promises returned by later
	      // invocations of the iterator.
	      callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg();
	    }
	
	    // Define the unified helper method that is used to implement .next,
	    // .throw, and .return (see defineIteratorMethods).
	    this._invoke = enqueue;
	  }
	
	  defineIteratorMethods(AsyncIterator.prototype);
	  AsyncIterator.prototype[asyncIteratorSymbol] = function () {
	    return this;
	  };
	  runtime.AsyncIterator = AsyncIterator;
	
	  // Note that simple async functions are implemented on top of
	  // AsyncIterator objects; they just return a Promise for the value of
	  // the final result produced by the iterator.
	  runtime.async = function (innerFn, outerFn, self, tryLocsList) {
	    var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList));
	
	    return runtime.isGeneratorFunction(outerFn) ? iter // If outerFn is a generator, return the full iterator.
	    : iter.next().then(function (result) {
	      return result.done ? result.value : iter.next();
	    });
	  };
	
	  function makeInvokeMethod(innerFn, self, context) {
	    var state = GenStateSuspendedStart;
	
	    return function invoke(method, arg) {
	      if (state === GenStateExecuting) {
	        throw new Error("Generator is already running");
	      }
	
	      if (state === GenStateCompleted) {
	        if (method === "throw") {
	          throw arg;
	        }
	
	        // Be forgiving, per 25.3.3.3.3 of the spec:
	        // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume
	        return doneResult();
	      }
	
	      context.method = method;
	      context.arg = arg;
	
	      while (true) {
	        var delegate = context.delegate;
	        if (delegate) {
	          var delegateResult = maybeInvokeDelegate(delegate, context);
	          if (delegateResult) {
	            if (delegateResult === ContinueSentinel) continue;
	            return delegateResult;
	          }
	        }
	
	        if (context.method === "next") {
	          // Setting context._sent for legacy support of Babel's
	          // function.sent implementation.
	          context.sent = context._sent = context.arg;
	        } else if (context.method === "throw") {
	          if (state === GenStateSuspendedStart) {
	            state = GenStateCompleted;
	            throw context.arg;
	          }
	
	          context.dispatchException(context.arg);
	        } else if (context.method === "return") {
	          context.abrupt("return", context.arg);
	        }
	
	        state = GenStateExecuting;
	
	        var record = tryCatch(innerFn, self, context);
	        if (record.type === "normal") {
	          // If an exception is thrown from innerFn, we leave state ===
	          // GenStateExecuting and loop back for another invocation.
	          state = context.done ? GenStateCompleted : GenStateSuspendedYield;
	
	          if (record.arg === ContinueSentinel) {
	            continue;
	          }
	
	          return {
	            value: record.arg,
	            done: context.done
	          };
	        } else if (record.type === "throw") {
	          state = GenStateCompleted;
	          // Dispatch the exception by looping back around to the
	          // context.dispatchException(context.arg) call above.
	          context.method = "throw";
	          context.arg = record.arg;
	        }
	      }
	    };
	  }
	
	  // Call delegate.iterator[context.method](context.arg) and handle the
	  // result, either by returning a { value, done } result from the
	  // delegate iterator, or by modifying context.method and context.arg,
	  // setting context.delegate to null, and returning the ContinueSentinel.
	  function maybeInvokeDelegate(delegate, context) {
	    var method = delegate.iterator[context.method];
	    if (method === undefined) {
	      // A .throw or .return when the delegate iterator has no .throw
	      // method always terminates the yield* loop.
	      context.delegate = null;
	
	      if (context.method === "throw") {
	        if (delegate.iterator.return) {
	          // If the delegate iterator has a return method, give it a
	          // chance to clean up.
	          context.method = "return";
	          context.arg = undefined;
	          maybeInvokeDelegate(delegate, context);
	
	          if (context.method === "throw") {
	            // If maybeInvokeDelegate(context) changed context.method from
	            // "return" to "throw", let that override the TypeError below.
	            return ContinueSentinel;
	          }
	        }
	
	        context.method = "throw";
	        context.arg = new TypeError("The iterator does not provide a 'throw' method");
	      }
	
	      return ContinueSentinel;
	    }
	
	    var record = tryCatch(method, delegate.iterator, context.arg);
	
	    if (record.type === "throw") {
	      context.method = "throw";
	      context.arg = record.arg;
	      context.delegate = null;
	      return ContinueSentinel;
	    }
	
	    var info = record.arg;
	
	    if (!info) {
	      context.method = "throw";
	      context.arg = new TypeError("iterator result is not an object");
	      context.delegate = null;
	      return ContinueSentinel;
	    }
	
	    if (info.done) {
	      // Assign the result of the finished delegate to the temporary
	      // variable specified by delegate.resultName (see delegateYield).
	      context[delegate.resultName] = info.value;
	
	      // Resume execution at the desired location (see delegateYield).
	      context.next = delegate.nextLoc;
	
	      // If context.method was "throw" but the delegate handled the
	      // exception, let the outer generator proceed normally. If
	      // context.method was "next", forget context.arg since it has been
	      // "consumed" by the delegate iterator. If context.method was
	      // "return", allow the original .return call to continue in the
	      // outer generator.
	      if (context.method !== "return") {
	        context.method = "next";
	        context.arg = undefined;
	      }
	    } else {
	      // Re-yield the result returned by the delegate method.
	      return info;
	    }
	
	    // The delegate iterator is finished, so forget it and continue with
	    // the outer generator.
	    context.delegate = null;
	    return ContinueSentinel;
	  }
	
	  // Define Generator.prototype.{next,throw,return} in terms of the
	  // unified ._invoke helper method.
	  defineIteratorMethods(Gp);
	
	  Gp[toStringTagSymbol] = "Generator";
	
	  // A Generator should always return itself as the iterator object when the
	  // @@iterator function is called on it. Some browsers' implementations of the
	  // iterator prototype chain incorrectly implement this, causing the Generator
	  // object to not be returned from this call. This ensures that doesn't happen.
	  // See https://github.com/facebook/regenerator/issues/274 for more details.
	  Gp[iteratorSymbol] = function () {
	    return this;
	  };
	
	  Gp.toString = function () {
	    return "[object Generator]";
	  };
	
	  function pushTryEntry(locs) {
	    var entry = { tryLoc: locs[0] };
	
	    if (1 in locs) {
	      entry.catchLoc = locs[1];
	    }
	
	    if (2 in locs) {
	      entry.finallyLoc = locs[2];
	      entry.afterLoc = locs[3];
	    }
	
	    this.tryEntries.push(entry);
	  }
	
	  function resetTryEntry(entry) {
	    var record = entry.completion || {};
	    record.type = "normal";
	    delete record.arg;
	    entry.completion = record;
	  }
	
	  function Context(tryLocsList) {
	    // The root entry object (effectively a try statement without a catch
	    // or a finally block) gives us a place to store values thrown from
	    // locations where there is no enclosing try statement.
	    this.tryEntries = [{ tryLoc: "root" }];
	    tryLocsList.forEach(pushTryEntry, this);
	    this.reset(true);
	  }
	
	  runtime.keys = function (object) {
	    var keys = [];
	    for (var key in object) {
	      keys.push(key);
	    }
	    keys.reverse();
	
	    // Rather than returning an object with a next method, we keep
	    // things simple and return the next function itself.
	    return function next() {
	      while (keys.length) {
	        var key = keys.pop();
	        if (key in object) {
	          next.value = key;
	          next.done = false;
	          return next;
	        }
	      }
	
	      // To avoid creating an additional object, we just hang the .value
	      // and .done properties off the next function object itself. This
	      // also ensures that the minifier will not anonymize the function.
	      next.done = true;
	      return next;
	    };
	  };
	
	  function values(iterable) {
	    if (iterable) {
	      var iteratorMethod = iterable[iteratorSymbol];
	      if (iteratorMethod) {
	        return iteratorMethod.call(iterable);
	      }
	
	      if (typeof iterable.next === "function") {
	        return iterable;
	      }
	
	      if (!isNaN(iterable.length)) {
	        var i = -1,
	            next = function next() {
	          while (++i < iterable.length) {
	            if (hasOwn.call(iterable, i)) {
	              next.value = iterable[i];
	              next.done = false;
	              return next;
	            }
	          }
	
	          next.value = undefined;
	          next.done = true;
	
	          return next;
	        };
	
	        return next.next = next;
	      }
	    }
	
	    // Return an iterator with no values.
	    return { next: doneResult };
	  }
	  runtime.values = values;
	
	  function doneResult() {
	    return { value: undefined, done: true };
	  }
	
	  Context.prototype = {
	    constructor: Context,
	
	    reset: function reset(skipTempReset) {
	      this.prev = 0;
	      this.next = 0;
	      // Resetting context._sent for legacy support of Babel's
	      // function.sent implementation.
	      this.sent = this._sent = undefined;
	      this.done = false;
	      this.delegate = null;
	
	      this.method = "next";
	      this.arg = undefined;
	
	      this.tryEntries.forEach(resetTryEntry);
	
	      if (!skipTempReset) {
	        for (var name in this) {
	          // Not sure about the optimal order of these conditions:
	          if (name.charAt(0) === "t" && hasOwn.call(this, name) && !isNaN(+name.slice(1))) {
	            this[name] = undefined;
	          }
	        }
	      }
	    },
	
	    stop: function stop() {
	      this.done = true;
	
	      var rootEntry = this.tryEntries[0];
	      var rootRecord = rootEntry.completion;
	      if (rootRecord.type === "throw") {
	        throw rootRecord.arg;
	      }
	
	      return this.rval;
	    },
	
	    dispatchException: function dispatchException(exception) {
	      if (this.done) {
	        throw exception;
	      }
	
	      var context = this;
	      function handle(loc, caught) {
	        record.type = "throw";
	        record.arg = exception;
	        context.next = loc;
	
	        if (caught) {
	          // If the dispatched exception was caught by a catch block,
	          // then let that catch block handle the exception normally.
	          context.method = "next";
	          context.arg = undefined;
	        }
	
	        return !!caught;
	      }
	
	      for (var i = this.tryEntries.length - 1; i >= 0; --i) {
	        var entry = this.tryEntries[i];
	        var record = entry.completion;
	
	        if (entry.tryLoc === "root") {
	          // Exception thrown outside of any try block that could handle
	          // it, so set the completion value of the entire function to
	          // throw the exception.
	          return handle("end");
	        }
	
	        if (entry.tryLoc <= this.prev) {
	          var hasCatch = hasOwn.call(entry, "catchLoc");
	          var hasFinally = hasOwn.call(entry, "finallyLoc");
	
	          if (hasCatch && hasFinally) {
	            if (this.prev < entry.catchLoc) {
	              return handle(entry.catchLoc, true);
	            } else if (this.prev < entry.finallyLoc) {
	              return handle(entry.finallyLoc);
	            }
	          } else if (hasCatch) {
	            if (this.prev < entry.catchLoc) {
	              return handle(entry.catchLoc, true);
	            }
	          } else if (hasFinally) {
	            if (this.prev < entry.finallyLoc) {
	              return handle(entry.finallyLoc);
	            }
	          } else {
	            throw new Error("try statement without catch or finally");
	          }
	        }
	      }
	    },
	
	    abrupt: function abrupt(type, arg) {
	      for (var i = this.tryEntries.length - 1; i >= 0; --i) {
	        var entry = this.tryEntries[i];
	        if (entry.tryLoc <= this.prev && hasOwn.call(entry, "finallyLoc") && this.prev < entry.finallyLoc) {
	          var finallyEntry = entry;
	          break;
	        }
	      }
	
	      if (finallyEntry && (type === "break" || type === "continue") && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc) {
	        // Ignore the finally entry if control is not jumping to a
	        // location outside the try/catch block.
	        finallyEntry = null;
	      }
	
	      var record = finallyEntry ? finallyEntry.completion : {};
	      record.type = type;
	      record.arg = arg;
	
	      if (finallyEntry) {
	        this.method = "next";
	        this.next = finallyEntry.finallyLoc;
	        return ContinueSentinel;
	      }
	
	      return this.complete(record);
	    },
	
	    complete: function complete(record, afterLoc) {
	      if (record.type === "throw") {
	        throw record.arg;
	      }
	
	      if (record.type === "break" || record.type === "continue") {
	        this.next = record.arg;
	      } else if (record.type === "return") {
	        this.rval = this.arg = record.arg;
	        this.method = "return";
	        this.next = "end";
	      } else if (record.type === "normal" && afterLoc) {
	        this.next = afterLoc;
	      }
	
	      return ContinueSentinel;
	    },
	
	    finish: function finish(finallyLoc) {
	      for (var i = this.tryEntries.length - 1; i >= 0; --i) {
	        var entry = this.tryEntries[i];
	        if (entry.finallyLoc === finallyLoc) {
	          this.complete(entry.completion, entry.afterLoc);
	          resetTryEntry(entry);
	          return ContinueSentinel;
	        }
	      }
	    },
	
	    "catch": function _catch(tryLoc) {
	      for (var i = this.tryEntries.length - 1; i >= 0; --i) {
	        var entry = this.tryEntries[i];
	        if (entry.tryLoc === tryLoc) {
	          var record = entry.completion;
	          if (record.type === "throw") {
	            var thrown = record.arg;
	            resetTryEntry(entry);
	          }
	          return thrown;
	        }
	      }
	
	      // The context.catch method must only be called with a location
	      // argument that corresponds to a known catch block.
	      throw new Error("illegal catch attempt");
	    },
	
	    delegateYield: function delegateYield(iterable, resultName, nextLoc) {
	      this.delegate = {
	        iterator: values(iterable),
	        resultName: resultName,
	        nextLoc: nextLoc
	      };
	
	      if (this.method === "next") {
	        // Deliberately forget the last sent value so that we don't
	        // accidentally pass it on to the delegate.
	        this.arg = undefined;
	      }
	
	      return ContinueSentinel;
	    }
	  };
	}(
	// Among the various tricks for obtaining a reference to the global
	// object, this seems to be the most reliable technique that does not
	// use indirect eval (which violates Content Security Policy).
	(typeof global === "undefined" ? "undefined" : _typeof(global)) === "object" ? global : (typeof window === "undefined" ? "undefined" : _typeof(window)) === "object" ? window : (typeof self === "undefined" ? "undefined" : _typeof(self)) === "object" ? self : undefined);
	/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }()), __webpack_require__(520)(module), __webpack_require__(27)))

/***/ }),
/* 540 */
/***/ (function(module, exports) {

	"use strict";
	
	module.exports = function (Promise) {
	    function returner() {
	        return this.value;
	    }
	    function thrower() {
	        throw this.reason;
	    }
	
	    Promise.prototype["return"] = Promise.prototype.thenReturn = function (value) {
	        if (value instanceof Promise) value.suppressUnhandledRejections();
	        return this._then(returner, undefined, undefined, { value: value }, undefined);
	    };
	
	    Promise.prototype["throw"] = Promise.prototype.thenThrow = function (reason) {
	        return this._then(thrower, undefined, undefined, { reason: reason }, undefined);
	    };
	
	    Promise.prototype.catchThrow = function (reason) {
	        if (arguments.length <= 1) {
	            return this._then(undefined, thrower, undefined, { reason: reason }, undefined);
	        } else {
	            var _reason = arguments[1];
	            var handler = function handler() {
	                throw _reason;
	            };
	            return this.caught(reason, handler);
	        }
	    };
	
	    Promise.prototype.catchReturn = function (value) {
	        if (arguments.length <= 1) {
	            if (value instanceof Promise) value.suppressUnhandledRejections();
	            return this._then(undefined, returner, undefined, { value: value }, undefined);
	        } else {
	            var _value = arguments[1];
	            if (_value instanceof Promise) _value.suppressUnhandledRejections();
	            var handler = function handler() {
	                return _value;
	            };
	            return this.caught(value, handler);
	        }
	    };
	};

/***/ }),
/* 541 */
/***/ (function(module, exports) {

	"use strict";
	
	/* MIT license */
	
	module.exports = {
	  rgb2hsl: rgb2hsl,
	  rgb2hsv: rgb2hsv,
	  rgb2hwb: rgb2hwb,
	  rgb2cmyk: rgb2cmyk,
	  rgb2keyword: rgb2keyword,
	  rgb2xyz: rgb2xyz,
	  rgb2lab: rgb2lab,
	  rgb2lch: rgb2lch,
	
	  hsl2rgb: hsl2rgb,
	  hsl2hsv: hsl2hsv,
	  hsl2hwb: hsl2hwb,
	  hsl2cmyk: hsl2cmyk,
	  hsl2keyword: hsl2keyword,
	
	  hsv2rgb: hsv2rgb,
	  hsv2hsl: hsv2hsl,
	  hsv2hwb: hsv2hwb,
	  hsv2cmyk: hsv2cmyk,
	  hsv2keyword: hsv2keyword,
	
	  hwb2rgb: hwb2rgb,
	  hwb2hsl: hwb2hsl,
	  hwb2hsv: hwb2hsv,
	  hwb2cmyk: hwb2cmyk,
	  hwb2keyword: hwb2keyword,
	
	  cmyk2rgb: cmyk2rgb,
	  cmyk2hsl: cmyk2hsl,
	  cmyk2hsv: cmyk2hsv,
	  cmyk2hwb: cmyk2hwb,
	  cmyk2keyword: cmyk2keyword,
	
	  keyword2rgb: keyword2rgb,
	  keyword2hsl: keyword2hsl,
	  keyword2hsv: keyword2hsv,
	  keyword2hwb: keyword2hwb,
	  keyword2cmyk: keyword2cmyk,
	  keyword2lab: keyword2lab,
	  keyword2xyz: keyword2xyz,
	
	  xyz2rgb: xyz2rgb,
	  xyz2lab: xyz2lab,
	  xyz2lch: xyz2lch,
	
	  lab2xyz: lab2xyz,
	  lab2rgb: lab2rgb,
	  lab2lch: lab2lch,
	
	  lch2lab: lch2lab,
	  lch2xyz: lch2xyz,
	  lch2rgb: lch2rgb
	};
	
	function rgb2hsl(rgb) {
	  var r = rgb[0] / 255,
	      g = rgb[1] / 255,
	      b = rgb[2] / 255,
	      min = Math.min(r, g, b),
	      max = Math.max(r, g, b),
	      delta = max - min,
	      h,
	      s,
	      l;
	
	  if (max == min) h = 0;else if (r == max) h = (g - b) / delta;else if (g == max) h = 2 + (b - r) / delta;else if (b == max) h = 4 + (r - g) / delta;
	
	  h = Math.min(h * 60, 360);
	
	  if (h < 0) h += 360;
	
	  l = (min + max) / 2;
	
	  if (max == min) s = 0;else if (l <= 0.5) s = delta / (max + min);else s = delta / (2 - max - min);
	
	  return [h, s * 100, l * 100];
	}
	
	function rgb2hsv(rgb) {
	  var r = rgb[0],
	      g = rgb[1],
	      b = rgb[2],
	      min = Math.min(r, g, b),
	      max = Math.max(r, g, b),
	      delta = max - min,
	      h,
	      s,
	      v;
	
	  if (max == 0) s = 0;else s = delta / max * 1000 / 10;
	
	  if (max == min) h = 0;else if (r == max) h = (g - b) / delta;else if (g == max) h = 2 + (b - r) / delta;else if (b == max) h = 4 + (r - g) / delta;
	
	  h = Math.min(h * 60, 360);
	
	  if (h < 0) h += 360;
	
	  v = max / 255 * 1000 / 10;
	
	  return [h, s, v];
	}
	
	function rgb2hwb(rgb) {
	  var r = rgb[0],
	      g = rgb[1],
	      b = rgb[2],
	      h = rgb2hsl(rgb)[0],
	      w = 1 / 255 * Math.min(r, Math.min(g, b)),
	      b = 1 - 1 / 255 * Math.max(r, Math.max(g, b));
	
	  return [h, w * 100, b * 100];
	}
	
	function rgb2cmyk(rgb) {
	  var r = rgb[0] / 255,
	      g = rgb[1] / 255,
	      b = rgb[2] / 255,
	      c,
	      m,
	      y,
	      k;
	
	  k = Math.min(1 - r, 1 - g, 1 - b);
	  c = (1 - r - k) / (1 - k) || 0;
	  m = (1 - g - k) / (1 - k) || 0;
	  y = (1 - b - k) / (1 - k) || 0;
	  return [c * 100, m * 100, y * 100, k * 100];
	}
	
	function rgb2keyword(rgb) {
	  return reverseKeywords[JSON.stringify(rgb)];
	}
	
	function rgb2xyz(rgb) {
	  var r = rgb[0] / 255,
	      g = rgb[1] / 255,
	      b = rgb[2] / 255;
	
	  // assume sRGB
	  r = r > 0.04045 ? Math.pow((r + 0.055) / 1.055, 2.4) : r / 12.92;
	  g = g > 0.04045 ? Math.pow((g + 0.055) / 1.055, 2.4) : g / 12.92;
	  b = b > 0.04045 ? Math.pow((b + 0.055) / 1.055, 2.4) : b / 12.92;
	
	  var x = r * 0.4124 + g * 0.3576 + b * 0.1805;
	  var y = r * 0.2126 + g * 0.7152 + b * 0.0722;
	  var z = r * 0.0193 + g * 0.1192 + b * 0.9505;
	
	  return [x * 100, y * 100, z * 100];
	}
	
	function rgb2lab(rgb) {
	  var xyz = rgb2xyz(rgb),
	      x = xyz[0],
	      y = xyz[1],
	      z = xyz[2],
	      l,
	      a,
	      b;
	
	  x /= 95.047;
	  y /= 100;
	  z /= 108.883;
	
	  x = x > 0.008856 ? Math.pow(x, 1 / 3) : 7.787 * x + 16 / 116;
	  y = y > 0.008856 ? Math.pow(y, 1 / 3) : 7.787 * y + 16 / 116;
	  z = z > 0.008856 ? Math.pow(z, 1 / 3) : 7.787 * z + 16 / 116;
	
	  l = 116 * y - 16;
	  a = 500 * (x - y);
	  b = 200 * (y - z);
	
	  return [l, a, b];
	}
	
	function rgb2lch(args) {
	  return lab2lch(rgb2lab(args));
	}
	
	function hsl2rgb(hsl) {
	  var h = hsl[0] / 360,
	      s = hsl[1] / 100,
	      l = hsl[2] / 100,
	      t1,
	      t2,
	      t3,
	      rgb,
	      val;
	
	  if (s == 0) {
	    val = l * 255;
	    return [val, val, val];
	  }
	
	  if (l < 0.5) t2 = l * (1 + s);else t2 = l + s - l * s;
	  t1 = 2 * l - t2;
	
	  rgb = [0, 0, 0];
	  for (var i = 0; i < 3; i++) {
	    t3 = h + 1 / 3 * -(i - 1);
	    t3 < 0 && t3++;
	    t3 > 1 && t3--;
	
	    if (6 * t3 < 1) val = t1 + (t2 - t1) * 6 * t3;else if (2 * t3 < 1) val = t2;else if (3 * t3 < 2) val = t1 + (t2 - t1) * (2 / 3 - t3) * 6;else val = t1;
	
	    rgb[i] = val * 255;
	  }
	
	  return rgb;
	}
	
	function hsl2hsv(hsl) {
	  var h = hsl[0],
	      s = hsl[1] / 100,
	      l = hsl[2] / 100,
	      sv,
	      v;
	
	  if (l === 0) {
	    // no need to do calc on black
	    // also avoids divide by 0 error
	    return [0, 0, 0];
	  }
	
	  l *= 2;
	  s *= l <= 1 ? l : 2 - l;
	  v = (l + s) / 2;
	  sv = 2 * s / (l + s);
	  return [h, sv * 100, v * 100];
	}
	
	function hsl2hwb(args) {
	  return rgb2hwb(hsl2rgb(args));
	}
	
	function hsl2cmyk(args) {
	  return rgb2cmyk(hsl2rgb(args));
	}
	
	function hsl2keyword(args) {
	  return rgb2keyword(hsl2rgb(args));
	}
	
	function hsv2rgb(hsv) {
	  var h = hsv[0] / 60,
	      s = hsv[1] / 100,
	      v = hsv[2] / 100,
	      hi = Math.floor(h) % 6;
	
	  var f = h - Math.floor(h),
	      p = 255 * v * (1 - s),
	      q = 255 * v * (1 - s * f),
	      t = 255 * v * (1 - s * (1 - f)),
	      v = 255 * v;
	
	  switch (hi) {
	    case 0:
	      return [v, t, p];
	    case 1:
	      return [q, v, p];
	    case 2:
	      return [p, v, t];
	    case 3:
	      return [p, q, v];
	    case 4:
	      return [t, p, v];
	    case 5:
	      return [v, p, q];
	  }
	}
	
	function hsv2hsl(hsv) {
	  var h = hsv[0],
	      s = hsv[1] / 100,
	      v = hsv[2] / 100,
	      sl,
	      l;
	
	  l = (2 - s) * v;
	  sl = s * v;
	  sl /= l <= 1 ? l : 2 - l;
	  sl = sl || 0;
	  l /= 2;
	  return [h, sl * 100, l * 100];
	}
	
	function hsv2hwb(args) {
	  return rgb2hwb(hsv2rgb(args));
	}
	
	function hsv2cmyk(args) {
	  return rgb2cmyk(hsv2rgb(args));
	}
	
	function hsv2keyword(args) {
	  return rgb2keyword(hsv2rgb(args));
	}
	
	// http://dev.w3.org/csswg/css-color/#hwb-to-rgb
	function hwb2rgb(hwb) {
	  var h = hwb[0] / 360,
	      wh = hwb[1] / 100,
	      bl = hwb[2] / 100,
	      ratio = wh + bl,
	      i,
	      v,
	      f,
	      n;
	
	  // wh + bl cant be > 1
	  if (ratio > 1) {
	    wh /= ratio;
	    bl /= ratio;
	  }
	
	  i = Math.floor(6 * h);
	  v = 1 - bl;
	  f = 6 * h - i;
	  if ((i & 0x01) != 0) {
	    f = 1 - f;
	  }
	  n = wh + f * (v - wh); // linear interpolation
	
	  switch (i) {
	    default:
	    case 6:
	    case 0:
	      r = v;g = n;b = wh;break;
	    case 1:
	      r = n;g = v;b = wh;break;
	    case 2:
	      r = wh;g = v;b = n;break;
	    case 3:
	      r = wh;g = n;b = v;break;
	    case 4:
	      r = n;g = wh;b = v;break;
	    case 5:
	      r = v;g = wh;b = n;break;
	  }
	
	  return [r * 255, g * 255, b * 255];
	}
	
	function hwb2hsl(args) {
	  return rgb2hsl(hwb2rgb(args));
	}
	
	function hwb2hsv(args) {
	  return rgb2hsv(hwb2rgb(args));
	}
	
	function hwb2cmyk(args) {
	  return rgb2cmyk(hwb2rgb(args));
	}
	
	function hwb2keyword(args) {
	  return rgb2keyword(hwb2rgb(args));
	}
	
	function cmyk2rgb(cmyk) {
	  var c = cmyk[0] / 100,
	      m = cmyk[1] / 100,
	      y = cmyk[2] / 100,
	      k = cmyk[3] / 100,
	      r,
	      g,
	      b;
	
	  r = 1 - Math.min(1, c * (1 - k) + k);
	  g = 1 - Math.min(1, m * (1 - k) + k);
	  b = 1 - Math.min(1, y * (1 - k) + k);
	  return [r * 255, g * 255, b * 255];
	}
	
	function cmyk2hsl(args) {
	  return rgb2hsl(cmyk2rgb(args));
	}
	
	function cmyk2hsv(args) {
	  return rgb2hsv(cmyk2rgb(args));
	}
	
	function cmyk2hwb(args) {
	  return rgb2hwb(cmyk2rgb(args));
	}
	
	function cmyk2keyword(args) {
	  return rgb2keyword(cmyk2rgb(args));
	}
	
	function xyz2rgb(xyz) {
	  var x = xyz[0] / 100,
	      y = xyz[1] / 100,
	      z = xyz[2] / 100,
	      r,
	      g,
	      b;
	
	  r = x * 3.2406 + y * -1.5372 + z * -0.4986;
	  g = x * -0.9689 + y * 1.8758 + z * 0.0415;
	  b = x * 0.0557 + y * -0.2040 + z * 1.0570;
	
	  // assume sRGB
	  r = r > 0.0031308 ? 1.055 * Math.pow(r, 1.0 / 2.4) - 0.055 : r = r * 12.92;
	
	  g = g > 0.0031308 ? 1.055 * Math.pow(g, 1.0 / 2.4) - 0.055 : g = g * 12.92;
	
	  b = b > 0.0031308 ? 1.055 * Math.pow(b, 1.0 / 2.4) - 0.055 : b = b * 12.92;
	
	  r = Math.min(Math.max(0, r), 1);
	  g = Math.min(Math.max(0, g), 1);
	  b = Math.min(Math.max(0, b), 1);
	
	  return [r * 255, g * 255, b * 255];
	}
	
	function xyz2lab(xyz) {
	  var x = xyz[0],
	      y = xyz[1],
	      z = xyz[2],
	      l,
	      a,
	      b;
	
	  x /= 95.047;
	  y /= 100;
	  z /= 108.883;
	
	  x = x > 0.008856 ? Math.pow(x, 1 / 3) : 7.787 * x + 16 / 116;
	  y = y > 0.008856 ? Math.pow(y, 1 / 3) : 7.787 * y + 16 / 116;
	  z = z > 0.008856 ? Math.pow(z, 1 / 3) : 7.787 * z + 16 / 116;
	
	  l = 116 * y - 16;
	  a = 500 * (x - y);
	  b = 200 * (y - z);
	
	  return [l, a, b];
	}
	
	function xyz2lch(args) {
	  return lab2lch(xyz2lab(args));
	}
	
	function lab2xyz(lab) {
	  var l = lab[0],
	      a = lab[1],
	      b = lab[2],
	      x,
	      y,
	      z,
	      y2;
	
	  if (l <= 8) {
	    y = l * 100 / 903.3;
	    y2 = 7.787 * (y / 100) + 16 / 116;
	  } else {
	    y = 100 * Math.pow((l + 16) / 116, 3);
	    y2 = Math.pow(y / 100, 1 / 3);
	  }
	
	  x = x / 95.047 <= 0.008856 ? x = 95.047 * (a / 500 + y2 - 16 / 116) / 7.787 : 95.047 * Math.pow(a / 500 + y2, 3);
	
	  z = z / 108.883 <= 0.008859 ? z = 108.883 * (y2 - b / 200 - 16 / 116) / 7.787 : 108.883 * Math.pow(y2 - b / 200, 3);
	
	  return [x, y, z];
	}
	
	function lab2lch(lab) {
	  var l = lab[0],
	      a = lab[1],
	      b = lab[2],
	      hr,
	      h,
	      c;
	
	  hr = Math.atan2(b, a);
	  h = hr * 360 / 2 / Math.PI;
	  if (h < 0) {
	    h += 360;
	  }
	  c = Math.sqrt(a * a + b * b);
	  return [l, c, h];
	}
	
	function lab2rgb(args) {
	  return xyz2rgb(lab2xyz(args));
	}
	
	function lch2lab(lch) {
	  var l = lch[0],
	      c = lch[1],
	      h = lch[2],
	      a,
	      b,
	      hr;
	
	  hr = h / 360 * 2 * Math.PI;
	  a = c * Math.cos(hr);
	  b = c * Math.sin(hr);
	  return [l, a, b];
	}
	
	function lch2xyz(args) {
	  return lab2xyz(lch2lab(args));
	}
	
	function lch2rgb(args) {
	  return lab2rgb(lch2lab(args));
	}
	
	function keyword2rgb(keyword) {
	  return cssKeywords[keyword];
	}
	
	function keyword2hsl(args) {
	  return rgb2hsl(keyword2rgb(args));
	}
	
	function keyword2hsv(args) {
	  return rgb2hsv(keyword2rgb(args));
	}
	
	function keyword2hwb(args) {
	  return rgb2hwb(keyword2rgb(args));
	}
	
	function keyword2cmyk(args) {
	  return rgb2cmyk(keyword2rgb(args));
	}
	
	function keyword2lab(args) {
	  return rgb2lab(keyword2rgb(args));
	}
	
	function keyword2xyz(args) {
	  return rgb2xyz(keyword2rgb(args));
	}
	
	var cssKeywords = {
	  aliceblue: [240, 248, 255],
	  antiquewhite: [250, 235, 215],
	  aqua: [0, 255, 255],
	  aquamarine: [127, 255, 212],
	  azure: [240, 255, 255],
	  beige: [245, 245, 220],
	  bisque: [255, 228, 196],
	  black: [0, 0, 0],
	  blanchedalmond: [255, 235, 205],
	  blue: [0, 0, 255],
	  blueviolet: [138, 43, 226],
	  brown: [165, 42, 42],
	  burlywood: [222, 184, 135],
	  cadetblue: [95, 158, 160],
	  chartreuse: [127, 255, 0],
	  chocolate: [210, 105, 30],
	  coral: [255, 127, 80],
	  cornflowerblue: [100, 149, 237],
	  cornsilk: [255, 248, 220],
	  crimson: [220, 20, 60],
	  cyan: [0, 255, 255],
	  darkblue: [0, 0, 139],
	  darkcyan: [0, 139, 139],
	  darkgoldenrod: [184, 134, 11],
	  darkgray: [169, 169, 169],
	  darkgreen: [0, 100, 0],
	  darkgrey: [169, 169, 169],
	  darkkhaki: [189, 183, 107],
	  darkmagenta: [139, 0, 139],
	  darkolivegreen: [85, 107, 47],
	  darkorange: [255, 140, 0],
	  darkorchid: [153, 50, 204],
	  darkred: [139, 0, 0],
	  darksalmon: [233, 150, 122],
	  darkseagreen: [143, 188, 143],
	  darkslateblue: [72, 61, 139],
	  darkslategray: [47, 79, 79],
	  darkslategrey: [47, 79, 79],
	  darkturquoise: [0, 206, 209],
	  darkviolet: [148, 0, 211],
	  deeppink: [255, 20, 147],
	  deepskyblue: [0, 191, 255],
	  dimgray: [105, 105, 105],
	  dimgrey: [105, 105, 105],
	  dodgerblue: [30, 144, 255],
	  firebrick: [178, 34, 34],
	  floralwhite: [255, 250, 240],
	  forestgreen: [34, 139, 34],
	  fuchsia: [255, 0, 255],
	  gainsboro: [220, 220, 220],
	  ghostwhite: [248, 248, 255],
	  gold: [255, 215, 0],
	  goldenrod: [218, 165, 32],
	  gray: [128, 128, 128],
	  green: [0, 128, 0],
	  greenyellow: [173, 255, 47],
	  grey: [128, 128, 128],
	  honeydew: [240, 255, 240],
	  hotpink: [255, 105, 180],
	  indianred: [205, 92, 92],
	  indigo: [75, 0, 130],
	  ivory: [255, 255, 240],
	  khaki: [240, 230, 140],
	  lavender: [230, 230, 250],
	  lavenderblush: [255, 240, 245],
	  lawngreen: [124, 252, 0],
	  lemonchiffon: [255, 250, 205],
	  lightblue: [173, 216, 230],
	  lightcoral: [240, 128, 128],
	  lightcyan: [224, 255, 255],
	  lightgoldenrodyellow: [250, 250, 210],
	  lightgray: [211, 211, 211],
	  lightgreen: [144, 238, 144],
	  lightgrey: [211, 211, 211],
	  lightpink: [255, 182, 193],
	  lightsalmon: [255, 160, 122],
	  lightseagreen: [32, 178, 170],
	  lightskyblue: [135, 206, 250],
	  lightslategray: [119, 136, 153],
	  lightslategrey: [119, 136, 153],
	  lightsteelblue: [176, 196, 222],
	  lightyellow: [255, 255, 224],
	  lime: [0, 255, 0],
	  limegreen: [50, 205, 50],
	  linen: [250, 240, 230],
	  magenta: [255, 0, 255],
	  maroon: [128, 0, 0],
	  mediumaquamarine: [102, 205, 170],
	  mediumblue: [0, 0, 205],
	  mediumorchid: [186, 85, 211],
	  mediumpurple: [147, 112, 219],
	  mediumseagreen: [60, 179, 113],
	  mediumslateblue: [123, 104, 238],
	  mediumspringgreen: [0, 250, 154],
	  mediumturquoise: [72, 209, 204],
	  mediumvioletred: [199, 21, 133],
	  midnightblue: [25, 25, 112],
	  mintcream: [245, 255, 250],
	  mistyrose: [255, 228, 225],
	  moccasin: [255, 228, 181],
	  navajowhite: [255, 222, 173],
	  navy: [0, 0, 128],
	  oldlace: [253, 245, 230],
	  olive: [128, 128, 0],
	  olivedrab: [107, 142, 35],
	  orange: [255, 165, 0],
	  orangered: [255, 69, 0],
	  orchid: [218, 112, 214],
	  palegoldenrod: [238, 232, 170],
	  palegreen: [152, 251, 152],
	  paleturquoise: [175, 238, 238],
	  palevioletred: [219, 112, 147],
	  papayawhip: [255, 239, 213],
	  peachpuff: [255, 218, 185],
	  peru: [205, 133, 63],
	  pink: [255, 192, 203],
	  plum: [221, 160, 221],
	  powderblue: [176, 224, 230],
	  purple: [128, 0, 128],
	  rebeccapurple: [102, 51, 153],
	  red: [255, 0, 0],
	  rosybrown: [188, 143, 143],
	  royalblue: [65, 105, 225],
	  saddlebrown: [139, 69, 19],
	  salmon: [250, 128, 114],
	  sandybrown: [244, 164, 96],
	  seagreen: [46, 139, 87],
	  seashell: [255, 245, 238],
	  sienna: [160, 82, 45],
	  silver: [192, 192, 192],
	  skyblue: [135, 206, 235],
	  slateblue: [106, 90, 205],
	  slategray: [112, 128, 144],
	  slategrey: [112, 128, 144],
	  snow: [255, 250, 250],
	  springgreen: [0, 255, 127],
	  steelblue: [70, 130, 180],
	  tan: [210, 180, 140],
	  teal: [0, 128, 128],
	  thistle: [216, 191, 216],
	  tomato: [255, 99, 71],
	  turquoise: [64, 224, 208],
	  violet: [238, 130, 238],
	  wheat: [245, 222, 179],
	  white: [255, 255, 255],
	  whitesmoke: [245, 245, 245],
	  yellow: [255, 255, 0],
	  yellowgreen: [154, 205, 50]
	};
	
	var reverseKeywords = {};
	for (var key in cssKeywords) {
	  reverseKeywords[JSON.stringify(cssKeywords[key])] = key;
	}

/***/ }),
/* 542 */
/***/ (function(module, exports, __webpack_require__) {

	"use strict";
	
	var conversions = __webpack_require__(541);
	
	var convert = function convert() {
	  return new Converter();
	};
	
	for (var func in conversions) {
	  // export Raw versions
	  convert[func + "Raw"] = function (func) {
	    // accept array or plain args
	    return function (arg) {
	      if (typeof arg == "number") arg = Array.prototype.slice.call(arguments);
	      return conversions[func](arg);
	    };
	  }(func);
	
	  var pair = /(\w+)2(\w+)/.exec(func),
	      from = pair[1],
	      to = pair[2];
	
	  // export rgb2hsl and ["rgb"]["hsl"]
	  convert[from] = convert[from] || {};
	
	  convert[from][to] = convert[func] = function (func) {
	    return function (arg) {
	      if (typeof arg == "number") arg = Array.prototype.slice.call(arguments);
	
	      var val = conversions[func](arg);
	      if (typeof val == "string" || val === undefined) return val; // keyword
	
	      for (var i = 0; i < val.length; i++) {
	        val[i] = Math.round(val[i]);
	      }return val;
	    };
	  }(func);
	}
	
	/* Converter does lazy conversion and caching */
	var Converter = function Converter() {
	  this.convs = {};
	};
	
	/* Either get the values for a space or
	  set the values for a space, depending on args */
	Converter.prototype.routeSpace = function (space, args) {
	  var values = args[0];
	  if (values === undefined) {
	    // color.rgb()
	    return this.getValues(space);
	  }
	  // color.rgb(10, 10, 10)
	  if (typeof values == "number") {
	    values = Array.prototype.slice.call(args);
	  }
	
	  return this.setValues(space, values);
	};
	
	/* Set the values for a space, invalidating cache */
	Converter.prototype.setValues = function (space, values) {
	  this.space = space;
	  this.convs = {};
	  this.convs[space] = values;
	  return this;
	};
	
	/* Get the values for a space. If there's already
	  a conversion for the space, fetch it, otherwise
	  compute it */
	Converter.prototype.getValues = function (space) {
	  var vals = this.convs[space];
	  if (!vals) {
	    var fspace = this.space,
	        from = this.convs[fspace];
	    vals = convert[fspace][space](from);
	
	    this.convs[space] = vals;
	  }
	  return vals;
	};
	
	["rgb", "hsl", "hsv", "cmyk", "keyword"].forEach(function (space) {
	  Converter.prototype[space] = function (vals) {
	    return this.routeSpace(space, arguments);
	  };
	});
	
	module.exports = convert;

/***/ }),
/* 543 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	// B.2.3.5 String.prototype.bold()
	
	__webpack_require__(39)('bold', function (createHTML) {
	  return function bold() {
	    return createHTML(this, 'b', '', '');
	  };
	});

/***/ }),
/* 544 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	// B.2.3.7 String.prototype.fontcolor(color)
	
	__webpack_require__(39)('fontcolor', function (createHTML) {
	  return function fontcolor(color) {
	    return createHTML(this, 'font', 'color', color);
	  };
	});

/***/ }),
/* 545 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	// ECMAScript 6 symbols shim
	
	var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
	
	var global = __webpack_require__(9);
	var has = __webpack_require__(42);
	var DESCRIPTORS = __webpack_require__(25);
	var $export = __webpack_require__(3);
	var redefine = __webpack_require__(38);
	var META = __webpack_require__(78).KEY;
	var $fails = __webpack_require__(13);
	var shared = __webpack_require__(132);
	var setToStringTag = __webpack_require__(112);
	var uid = __webpack_require__(98);
	var wks = __webpack_require__(20);
	var wksExt = __webpack_require__(344);
	var wksDefine = __webpack_require__(218);
	var enumKeys = __webpack_require__(739);
	var isArray = __webpack_require__(154);
	var anObject = __webpack_require__(6);
	var isObject = __webpack_require__(15);
	var toObject = __webpack_require__(28);
	var toIObject = __webpack_require__(45);
	var toPrimitive = __webpack_require__(61);
	var createDesc = __webpack_require__(95);
	var _create = __webpack_require__(92);
	var gOPNExt = __webpack_require__(334);
	var $GOPD = __webpack_require__(43);
	var $GOPS = __webpack_require__(158);
	var $DP = __webpack_require__(26);
	var $keys = __webpack_require__(94);
	var gOPD = $GOPD.f;
	var dP = $DP.f;
	var gOPN = gOPNExt.f;
	var $Symbol = global.Symbol;
	var $JSON = global.JSON;
	var _stringify = $JSON && $JSON.stringify;
	var PROTOTYPE = 'prototype';
	var HIDDEN = wks('_hidden');
	var TO_PRIMITIVE = wks('toPrimitive');
	var isEnum = {}.propertyIsEnumerable;
	var SymbolRegistry = shared('symbol-registry');
	var AllSymbols = shared('symbols');
	var OPSymbols = shared('op-symbols');
	var ObjectProto = Object[PROTOTYPE];
	var USE_NATIVE = typeof $Symbol == 'function' && !!$GOPS.f;
	var QObject = global.QObject;
	// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173
	var setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;
	
	// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687
	var setSymbolDesc = DESCRIPTORS && $fails(function () {
	  return _create(dP({}, 'a', {
	    get: function get() {
	      return dP(this, 'a', { value: 7 }).a;
	    }
	  })).a != 7;
	}) ? function (it, key, D) {
	  var protoDesc = gOPD(ObjectProto, key);
	  if (protoDesc) delete ObjectProto[key];
	  dP(it, key, D);
	  if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);
	} : dP;
	
	var wrap = function wrap(tag) {
	  var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);
	  sym._k = tag;
	  return sym;
	};
	
	var isSymbol = USE_NATIVE && _typeof($Symbol.iterator) == 'symbol' ? function (it) {
	  return (typeof it === 'undefined' ? 'undefined' : _typeof(it)) == 'symbol';
	} : function (it) {
	  return it instanceof $Symbol;
	};
	
	var $defineProperty = function defineProperty(it, key, D) {
	  if (it === ObjectProto) $defineProperty(OPSymbols, key, D);
	  anObject(it);
	  key = toPrimitive(key, true);
	  anObject(D);
	  if (has(AllSymbols, key)) {
	    if (!D.enumerable) {
	      if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));
	      it[HIDDEN][key] = true;
	    } else {
	      if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;
	      D = _create(D, { enumerable: createDesc(0, false) });
	    }return setSymbolDesc(it, key, D);
	  }return dP(it, key, D);
	};
	var $defineProperties = function defineProperties(it, P) {
	  anObject(it);
	  var keys = enumKeys(P = toIObject(P));
	  var i = 0;
	  var l = keys.length;
	  var key;
	  while (l > i) {
	    $defineProperty(it, key = keys[i++], P[key]);
	  }return it;
	};
	var $create = function create(it, P) {
	  return P === undefined ? _create(it) : $defineProperties(_create(it), P);
	};
	var $propertyIsEnumerable = function propertyIsEnumerable(key) {
	  var E = isEnum.call(this, key = toPrimitive(key, true));
	  if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;
	  return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;
	};
	var $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {
	  it = toIObject(it);
	  key = toPrimitive(key, true);
	  if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;
	  var D = gOPD(it, key);
	  if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;
	  return D;
	};
	var $getOwnPropertyNames = function getOwnPropertyNames(it) {
	  var names = gOPN(toIObject(it));
	  var result = [];
	  var i = 0;
	  var key;
	  while (names.length > i) {
	    if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);
	  }return result;
	};
	var $getOwnPropertySymbols = function getOwnPropertySymbols(it) {
	  var IS_OP = it === ObjectProto;
	  var names = gOPN(IS_OP ? OPSymbols : toIObject(it));
	  var result = [];
	  var i = 0;
	  var key;
	  while (names.length > i) {
	    if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);
	  }return result;
	};
	
	// 19.4.1.1 Symbol([description])
	if (!USE_NATIVE) {
	  $Symbol = function _Symbol() {
	    if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');
	    var tag = uid(arguments.length > 0 ? arguments[0] : undefined);
	    var $set = function $set(value) {
	      if (this === ObjectProto) $set.call(OPSymbols, value);
	      if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;
	      setSymbolDesc(this, tag, createDesc(1, value));
	    };
	    if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });
	    return wrap(tag);
	  };
	  redefine($Symbol[PROTOTYPE], 'toString', function toString() {
	    return this._k;
	  });
	
	  $GOPD.f = $getOwnPropertyDescriptor;
	  $DP.f = $defineProperty;
	  __webpack_require__(93).f = gOPNExt.f = $getOwnPropertyNames;
	  __webpack_require__(131).f = $propertyIsEnumerable;
	  $GOPS.f = $getOwnPropertySymbols;
	
	  if (DESCRIPTORS && !__webpack_require__(77)) {
	    redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);
	  }
	
	  wksExt.f = function (name) {
	    return wrap(wks(name));
	  };
	}
	
	$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });
	
	for (var es6Symbols =
	// 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14
	'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'.split(','), j = 0; es6Symbols.length > j;) {
	  wks(es6Symbols[j++]);
	}for (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) {
	  wksDefine(wellKnownSymbols[k++]);
	}$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {
	  // 19.4.2.1 Symbol.for(key)
	  'for': function _for(key) {
	    return has(SymbolRegistry, key += '') ? SymbolRegistry[key] : SymbolRegistry[key] = $Symbol(key);
	  },
	  // 19.4.2.5 Symbol.keyFor(sym)
	  keyFor: function keyFor(sym) {
	    if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');
	    for (var key in SymbolRegistry) {
	      if (SymbolRegistry[key] === sym) return key;
	    }
	  },
	  useSetter: function useSetter() {
	    setter = true;
	  },
	  useSimple: function useSimple() {
	    setter = false;
	  }
	});
	
	$export($export.S + $export.F * !USE_NATIVE, 'Object', {
	  // 19.1.2.2 Object.create(O [, Properties])
	  create: $create,
	  // 19.1.2.4 Object.defineProperty(O, P, Attributes)
	  defineProperty: $defineProperty,
	  // 19.1.2.3 Object.defineProperties(O, Properties)
	  defineProperties: $defineProperties,
	  // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)
	  getOwnPropertyDescriptor: $getOwnPropertyDescriptor,
	  // 19.1.2.7 Object.getOwnPropertyNames(O)
	  getOwnPropertyNames: $getOwnPropertyNames,
	  // 19.1.2.8 Object.getOwnPropertySymbols(O)
	  getOwnPropertySymbols: $getOwnPropertySymbols
	});
	
	// Chrome 38 and 39 `Object.getOwnPropertySymbols` fails on primitives
	// https://bugs.chromium.org/p/v8/issues/detail?id=3443
	var FAILS_ON_PRIMITIVES = $fails(function () {
	  $GOPS.f(1);
	});
	
	$export($export.S + $export.F * FAILS_ON_PRIMITIVES, 'Object', {
	  getOwnPropertySymbols: function getOwnPropertySymbols(it) {
	    return $GOPS.f(toObject(it));
	  }
	});
	
	// 24.3.2 JSON.stringify(value [, replacer [, space]])
	$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {
	  var S = $Symbol();
	  // MS Edge converts symbol values to JSON as {}
	  // WebKit converts symbol values to JSON as null
	  // V8 throws on boxed symbols
	  return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';
	})), 'JSON', {
	  stringify: function stringify(it) {
	    var args = [it];
	    var i = 1;
	    var replacer, $replacer;
	    while (arguments.length > i) {
	      args.push(arguments[i++]);
	    }$replacer = replacer = args[1];
	    if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined
	    if (!isArray(replacer)) replacer = function replacer(key, value) {
	      if (typeof $replacer == 'function') value = $replacer.call(this, key, value);
	      if (!isSymbol(value)) return value;
	    };
	    args[1] = replacer;
	    return _stringify.apply($JSON, args);
	  }
	});
	
	// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)
	$Symbol[PROTOTYPE][TO_PRIMITIVE] || __webpack_require__(37)($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);
	// 19.4.3.5 Symbol.prototype[@@toStringTag]
	setToStringTag($Symbol, 'Symbol');
	// 20.2.1.9 Math[@@toStringTag]
	setToStringTag(Math, 'Math', true);
	// 24.3.3 JSON[@@toStringTag]
	setToStringTag(global.JSON, 'JSON', true);

/***/ }),
/* 546 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	__webpack_require__(218)('asyncIterator');

/***/ }),
/* 547 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	__webpack_require__(218)('observable');

/***/ }),
/* 548 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	
	var _backbone = __webpack_require__(11);
	
	var _backbone2 = _interopRequireDefault(_backbone);
	
	var _ExportWMSLayerItemView = __webpack_require__(989);
	
	var _ExportWMSLayerItemView2 = _interopRequireDefault(_ExportWMSLayerItemView);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var ExportWMSLayerItemView = _backbone2.default.ItemView.extend({
	  tagName: 'li',
	  template: _ExportWMSLayerItemView2.default,
	  events: {
	    mouseover: 'onMouseOver'
	  },
	  initialize: function initialize(options) {
	    this.useDetailsDisplay = options.useDetailsDisplay;
	    this.mapModel = options.mapModel;
	    this.usedView = options.usedView;
	  },
	  templateHelpers: function templateHelpers() {
	    var id = this.model.get('id');
	    var name = this.model.get('displayName') || id;
	    return { id: id, name: name };
	  },
	  onMouseOver: function onMouseOver() {
	    var url = this.usedView.triggerMethod('export:wmsurl', this.model, this.useDetailsDisplay);
	    this.$el.find('a').attr('href', url);
	  }
	});
	
	exports.default = ExportWMSLayerItemView;

/***/ }),
/* 549 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	
	var _backbone = __webpack_require__(11);
	
	var _backbone2 = _interopRequireDefault(_backbone);
	
	var _ExportWMSLayerListView = __webpack_require__(990);
	
	var _ExportWMSLayerListView2 = _interopRequireDefault(_ExportWMSLayerListView);
	
	var _i18next = __webpack_require__(245);
	
	var _i18next2 = _interopRequireDefault(_i18next);
	
	var _ExportWMSLayerItemView = __webpack_require__(548);
	
	var _ExportWMSLayerItemView2 = _interopRequireDefault(_ExportWMSLayerItemView);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var ExportWMSLayerListView = _backbone2.default.CompositeView.extend({
	  childViewContainer: '.export-wms-list',
	  childView: _ExportWMSLayerItemView2.default,
	  template: _ExportWMSLayerListView2.default,
	  templateHelpers: function templateHelpers() {
	    var buttonTitle = _i18next2.default.t('Export current view as WMS URL');
	    return { buttonTitle: buttonTitle };
	  },
	  initialize: function initialize(options) {
	    this.useDetailsDisplay = options.useDetailsDisplay;
	    this.mapModel = options.mapModel;
	    this.usedView = options.usedView;
	  },
	  childViewOptions: function childViewOptions() {
	    return {
	      useDetailsDisplay: this.useDetailsDisplay,
	      mapModel: this.mapModel,
	      usedView: this.usedView
	    };
	  }
	});
	
	exports.default = ExportWMSLayerListView;

/***/ }),
/* 550 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	
	var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
	
	var _Vector = __webpack_require__(108);
	
	var _Vector2 = _interopRequireDefault(_Vector);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
	
	function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
	
	function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
	
	/**
	 * Vector source to map a Backbone model to openlayers features.
	 */
	var ModelAttributeSource = function (_VectorSource) {
	  _inherits(ModelAttributeSource, _VectorSource);
	
	  /**
	   * @param {object} options The initial options
	   * @param {Backbone.Model} options.model The model to observe
	   * @param {string} options.attributeName The name of the attribute to observe
	   * @param {function} options.transformAttribute The function to transform the
	   *                                              attribute to a feature (or an
	   *                                              array thereof)
	   */
	  function ModelAttributeSource(options) {
	    _classCallCheck(this, ModelAttributeSource);
	
	    var _this = _possibleConstructorReturn(this, (ModelAttributeSource.__proto__ || Object.getPrototypeOf(ModelAttributeSource)).call(this, options));
	
	    _this.transformAttribute = options.transformAttribute;
	    _this.setModel(options.model, false);
	    _this.setAttributeName(options.attributeName);
	    return _this;
	  }
	
	  /**
	   * Sets the new model to observe
	   * @param {Backbone.Model} model The new model to observe
	   */
	
	
	  _createClass(ModelAttributeSource, [{
	    key: 'setModel',
	    value: function setModel(model) {
	      this.model = model;
	      this._reset();
	    }
	
	    /**
	     * Sets the new attribute to observe.
	     * @param {string} attributeName The new attribute name
	     */
	
	  }, {
	    key: 'setAttributeName',
	    value: function setAttributeName(attributeName) {
	      this.attributeName = attributeName;
	      this._reset();
	    }
	  }, {
	    key: '_reset',
	    value: function _reset() {
	      var prevModel = this.model;
	      if (prevModel) {
	        prevModel.off(null, null, this);
	      }
	      if (this.model && this.attributeName) {
	        if (this.model) {
	          this.model.on('change:' + this.attributeName, this.onAttributeChange, this);
	          this.onAttributeChange(this.model, this.model.get(this.attributeName));
	        }
	      }
	    }
	
	    // collection event handlers
	
	  }, {
	    key: 'onAttributeChange',
	    value: function onAttributeChange(model, value) {
	      this.clear();
	      var feature = this.transformAttribute(value);
	      if (Array.isArray(feature)) {
	        this.addFeatures(feature.filter(function (f) {
	          return !!f;
	        }));
	      } else if (value) {
	        this.addFeature(feature);
	      }
	    }
	  }]);
	
	  return ModelAttributeSource;
	}(_Vector2.default);
	
	exports.default = ModelAttributeSource;

/***/ }),
/* 551 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	
	var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
	
	__webpack_require__(1113);
	
	function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
	
	var ProgressBar = function () {
	  function ProgressBar(el) {
	    var _this = this;
	
	    var sources = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
	
	    _classCallCheck(this, ProgressBar);
	
	    this.loaded = 0;
	    this.loading = 0;
	    this.el = el;
	
	    this.addSources(sources);
	
	    this.loadingListener = function () {
	      _this.addLoading();
	    };
	
	    this.loadedListener = function () {
	      _this.addLoaded();
	    };
	  }
	
	  _createClass(ProgressBar, [{
	    key: 'addSources',
	    value: function addSources(sources) {
	      var _this2 = this;
	
	      sources.forEach(function (source) {
	        return _this2.addSource(source);
	      });
	    }
	  }, {
	    key: 'addSource',
	    value: function addSource(source) {
	      source.on('tileloadstart', this.loadingListener);
	      source.on('tileloadend', this.loadedListener);
	      source.on('tileloaderror', this.loadedListener);
	    }
	  }, {
	    key: 'setElement',
	    value: function setElement() {
	      var el = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
	
	      this.el = el;
	      if (this.el) {
	        this.el.style.visibility = this.visible ? 'visible' : 'hidden';
	        // width stretched to interval 5-100% of total width to improve visibility
	        var width = (5 + this.loaded / this.loading * 95).toFixed(1) + '%';
	        this.el.style.width = width;
	      }
	    }
	  }, {
	    key: 'show',
	    value: function show() {
	      this.visible = true;
	      if (this.el) {
	        this.el.style.visibility = 'visible';
	      }
	    }
	  }, {
	    key: 'hide',
	    value: function hide() {
	      this.visible = false;
	      if (this.loading === this.loaded && this.el) {
	        this.el.style.visibility = 'hidden';
	        this.el.style.width = 0;
	      }
	    }
	  }, {
	    key: 'addLoading',
	    value: function addLoading() {
	      if (this.loading === 0) {
	        this.show();
	      }
	      ++this.loading;
	      this.update();
	    }
	  }, {
	    key: 'addLoaded',
	    value: function addLoaded() {
	      var _this3 = this;
	
	      setTimeout(function () {
	        ++_this3.loaded;
	        _this3.update();
	      }, 100);
	    }
	  }, {
	    key: 'isLoading',
	    value: function isLoading() {
	      return this.loading > this.loaded;
	    }
	  }, {
	    key: 'update',
	    value: function update() {
	      var _this4 = this;
	
	      if (!this.el) {
	        return;
	      }
	      var width = (5 + this.loaded / this.loading * 95).toFixed(1) + '%';
	      this.el.style.width = width;
	      if (this.loading === this.loaded) {
	        this.loading = 0;
	        this.loaded = 0;
	        setTimeout(function () {
	          _this4.hide();
	        }, 500);
	      }
	    }
	  }]);
	
	  return ProgressBar;
	}();
	
	exports.default = ProgressBar;

/***/ }),
/* 552 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	
	var _backbone = __webpack_require__(24);
	
	var _backbone2 = _interopRequireDefault(_backbone);
	
	__webpack_require__(693);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var LayerModel = _backbone2.default.NestedModel.extend( /** @lends core/models.LayerModel# */{
	  defaults: {
	    id: null,
	    displayName: null,
	    displayColor: 'red',
	    display: {
	      visible: false,
	      protocol: null,
	      url: null,
	      urls: [],
	      id: null,
	      opacity: 1.0,
	      style: 'default',
	      attribution: null
	    },
	    search: {
	      protocol: null,
	      url: null,
	      id: null,
	      format: null,
	      method: 'GET',
	      histogramThreshold: undefined,
	      histogramBinCount: undefined
	    },
	    download: {
	      protocol: null,
	      id: null
	    },
	    fullResolution: {
	      protocol: null,
	      maxSizeWarning: 500,
	      maxSizeResolution: 0.0000858306884765625
	    }
	  },
	
	  /**
	    @constructs
	    @param {Object} options
	    @param {string} options.id The internal layer identifier. Must be unique among
	                               all layers of one collection.
	    @param {string} options.displayName The name of the layer displayed on the UI.
	    @param {boolean} [options.visible=false] The default visibility of the layer
	    @param {string} [options.displayColor] The color to identify the layer.
	     @param {Object} options.display Display specific options.
	    @param {string} options.display.protocol The display protocol to use.
	    @param {string} options.display.url The URL to access the display of the layer.
	    @param {string[]} options.display.urls The URLs to access the display of the layer.
	    @param {string} options.display.id The layer ID for the display service.
	    @param {Number} [options.display.opacity=1.0] The default opacity.
	    @param {string} [options.display.style=default] The style parameter for services like WMS.
	    @param {string} [options.display.attribution] The layer attribution.
	     @param {Object} options.search Search specific options.
	    @param {string} options.search.protocol The search protocol to use.
	    @param {string} options.search.url The URL to search on.
	    @param {Object} options.search.id The layer ID for the search service.
	     @param {Object} options.download Download specific options
	    @param {string} options.download.protocol The download protocol to use.
	    @param {string} options.download.url The URL to download from.
	    @param {Object} options.download.id The layer ID for the download service.
	   */
	  initialize: function initialize() {},
	  validate: function validate() {
	    // TODO: validate attributes
	    // if (!attrs.id) {
	    //   return 'missing mandatory identifier';
	    // }
	    // else if (!attrs.displayName) {
	    //   return 'missing mandatory display name';
	    // }
	    // else if (url === null && urls.length === 0) {
	    //   return 'missing mandatory url or urls';
	    // }
	  }
	});
	
	exports.default = LayerModel;

/***/ }),
/* 553 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	
	var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
	
	__webpack_require__(350);
	
	var _backbone = __webpack_require__(11);
	
	var _backbone2 = _interopRequireDefault(_backbone);
	
	var _d3Timeslider = __webpack_require__(729);
	
	var _d3Timeslider2 = _interopRequireDefault(_d3Timeslider);
	
	var _wms = __webpack_require__(733);
	
	var _wms2 = _interopRequireDefault(_wms);
	
	var _eoxserverWps = __webpack_require__(732);
	
	var _eoxserverWps2 = _interopRequireDefault(_eoxserverWps);
	
	var _i18next = __webpack_require__(163);
	
	var _i18next2 = _interopRequireDefault(_i18next);
	
	var _TimeSliderHistogramButton = __webpack_require__(995);
	
	var _TimeSliderHistogramButton2 = _interopRequireDefault(_TimeSliderHistogramButton);
	
	__webpack_require__(1116);
	
	var _search = __webpack_require__(168);
	
	var _FiltersModel = __webpack_require__(119);
	
	var _FiltersModel2 = _interopRequireDefault(_FiltersModel);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
	
	function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
	
	__webpack_require__(1128);
	__webpack_require__(1117);
	
	function intersects(a, b) {
	  // adapted from http://gamedev.stackexchange.com/a/913/50029
	  return !(a[0] > b[2] || a[2] < b[0] || a[3] < b[1] || a[1] > b[3]);
	}
	
	var TimeSliderView = _backbone2.default.ItemView.extend( /** @lends core/views.TimeSliderView# */{
	  template: function template() {
	    return '';
	  },
	
	  events: {
	    selectionChanged: 'onSelectionChanged',
	    recordClicked: 'onRecordClicked',
	    recordMouseover: 'onRecordMouseover',
	    recordMouseout: 'onRecordMouseout',
	    binClicked: 'onRecordsClicked',
	    binMouseover: 'onRecordsMouseover',
	    binMouseout: 'onRecordsMouseout',
	    clusterClicked: 'onRecordsClicked',
	    clusterMouseover: 'onRecordsMouseover',
	    clusterMouseout: 'onRecordsMouseout',
	    bucketClicked: 'onBucketClicked',
	    // not required at the moment
	    bucketMouseover: 'onBucketMouseover',
	    bucketMouseout: 'onBucketMouseout',
	    loadStart: 'onLoadStart',
	    loadEnd: 'onLoadEnd'
	  },
	
	  /**
	    @constructs
	    @param {Object} options
	    @param {core/models.FiltersModel} options.filtersModel The filters model to store the filters
	    @param {core/models.LayersCollection} options.layersCollection The layers to show
	                                                                   on the time slider
	    @param {core/models.MapModel} options.mapModel The map-model
	    @param {Date[]} options.domain The maximum domain to allow panning of th time slider
	  */
	  initialize: function initialize(options) {
	    this.layersCollection = options.layersCollection;
	    this.baseLayersCollection = options.baseLayersCollection;
	    this.overlayLayersCollection = options.overlayLayersCollection;
	
	    this.mapModel = options.mapModel;
	    this.highlightModel = options.highlightModel;
	
	    this.highlightFillColor = options.highlightFillColor;
	    this.highlightStrokeColor = options.highlightStrokeColor;
	    this.filterFillColor = options.filterFillColor;
	    this.filterStrokeColor = options.filterStrokeColor;
	    this.filterOutsideColor = options.filterOutsideColor;
	
	    this.domain = options.domain;
	    this.display = options.display;
	    this.singleLayerModeUsed = options.singleLayerModeUsed;
	    this.constrainTimeDomain = options.constrainTimeDomain;
	    this.timeSliderControls = options.timeSliderControls;
	    this.displayInterval = options.displayInterval;
	    this.selectableInterval = options.selectableInterval;
	    this.maxTooltips = options.maxTooltips;
	    this.timeSliderAlternativeBrush = options.timeSliderAlternativeBrush;
	    this.enableDynamicHistogram = options.enableDynamicHistogram;
	    this.searchRequests = [];
	    this.firstConfigureHistogram = true;
	    this.maxMapInterval = this.mapModel.get('maxMapInterval');
	    if (this.maxMapInterval) {
	      // initial setup if shared time
	      this.mapModel.set('extendedTime', this.mapModel.get('time'));
	    }
	  },
	  onRender: function onRender() {},
	  onAttach: function onAttach() {
	    var _this = this;
	
	    var tooltipFormatter = function tooltipFormatter(record) {
	      return record && record[2] && record[2].id ? record[2].id : '' + (record[0].toISOString() - record[1].toISOString());
	    };
	    var options = {
	      domain: this.domain,
	      display: this.display,
	      debounce: 300,
	      ticksize: 8,
	      datasets: [],
	      constrain: this.constrainTimeDomain,
	      controls: this.timeSliderControls,
	      alternativeBrush: this.timeSliderAlternativeBrush,
	      displayLimit: this.displayInterval,
	      selectionLimit: this.selectableInterval,
	      recordFilter: this.createRecordFilter(this.mapModel.get('bbox')),
	      brushTooltip: true,
	      tooltipFormatter: tooltipFormatter,
	      binTooltipFormatter: function binTooltipFormatter(bin) {
	        var records = bin;
	        var more = 0;
	        if (_this.maxTooltips && bin.length > _this.maxTooltips) {
	          records = bin.slice(0, _this.maxTooltips);
	          more = bin.length - _this.maxTooltips;
	        }
	        var tooltip = records.map(tooltipFormatter).join('<br/>');
	        if (more) {
	          return tooltip + '<br/> + ' + more + ' more';
	        }
	        return tooltip;
	      }
	    };
	    var time = this.mapModel.get('time');
	    if (time !== null) {
	      options.brush = {
	        start: time[0],
	        end: time[1]
	      };
	    }
	
	    this.timeSlider = new _d3Timeslider2.default(this.el, options);
	
	    // replace the markup for the timeslider controls
	
	    this.$('.control#pan-left .arrow-left').replaceWith('<i class="fa fa-caret-left" />');
	    this.$('.control#pan-right .arrow-right').replaceWith('<i class="fa fa-caret-right" />');
	    this.$('.control#zoom-out').html('<i class="fa fa-minus" />');
	    this.$('.control#zoom-in').html('<i class="fa fa-plus" />');
	    this.$('.control#reload .reload-arrow').replaceWith('<i class="fa fa-refresh fa-fw" />');
	
	    this.$el.append((0, _TimeSliderHistogramButton2.default)({
	      'dynamic-histogram-title': _i18next2.default.t('dynamic-histogram-title'),
	      enableDynamicHistogram: this.enableDynamicHistogram
	    }));
	    this.$('#dynamic-histogram input[type=checkbox]').change(this.toggleDynamicHistogram.bind(this));
	
	    this.configureDynamicHistogram();
	
	    this.listenTo(this.mapModel, 'change:time', this.onModelSelectionChanged);
	    this.listenTo(this.mapModel, 'change:extendedTime', function () {
	      var extendedTime = _this.mapModel.get('extendedTime');
	      if (extendedTime && !_this.maxMapInterval) {
	        _this.timeSlider.setHighlightInterval(extendedTime[0], extendedTime[1], _this.filterFillColor, _this.filterStrokeColor, _this.filterOutsideColor, true);
	      } else {
	        // do not highlight timeslider area when maxMapInterval is set
	        _this.timeSlider.setHighlightInterval(null);
	      }
	    });
	    this.listenTo(this.mapModel, 'show:time', function (timeFilter) {
	      var _timeSlider;
	
	      (_timeSlider = _this.timeSlider).center.apply(_timeSlider, _toConsumableArray(timeFilter));
	    });
	    this.listenTo(this.layersCollection, 'add', this.onLayerAdded);
	    this.listenTo(this.layersCollection, 'remove', this.onLayerRemoved);
	    this.listenTo(this.layersCollection, 'sort', this.onLayersSorted);
	    this.listenTo(this.layersCollection, 'change:display.visible', this.onLayerVisibleChanged);
	    this.listenTo(this.baseLayersCollection, 'change:display.visible', this.onSynchronizedLayerVisibleChanged);
	    this.listenTo(this.overlayLayersCollection, 'change:display.visible', this.onSynchronizedLayerVisibleChanged);
	
	    this.listenTo(this.mapModel, 'change:bbox', function (mapModel) {
	      _this.timeSlider.setRecordFilter(_this.createRecordFilter(mapModel.get('bbox')));
	    });
	    this.listenTo(this.highlightModel, 'change:highlightFeature', this.onHighlightFeatureChange);
	  },
	  addVisibleLayers: function addVisibleLayers() {
	    var _this2 = this;
	
	    // cancel ongoing timeslider requests
	    this.searchRequests.forEach(function (req) {
	      if (typeof req.emit === 'function') {
	        // PagedSearchProgressEmitter
	        req.emit('cancel');
	      } else if (typeof req.cancel === 'function') {
	        // Bluebird Promise
	        req.cancel();
	      }
	    });
	    var visibleLayers = this.layersCollection.filter(function (layerModel) {
	      return layerModel.get('display.visible') || _this2.singleLayerModeUsed;
	    });
	    visibleLayers.forEach(function (layerModel) {
	      _this2.removeLayer(layerModel);
	      _this2.addLayer(layerModel);
	    });
	    this.checkVisible(false);
	  },
	  addLayer: function addLayer(layerModel) {
	    var _this3 = this;
	
	    var source = void 0;
	    var bucketSource = void 0;
	    var mapModel = this.enableDynamicHistogram === true ? this.mapModel : null;
	    switch (layerModel.get('search').protocol) {
	      case 'EOxServer-WPS':
	        source = new _eoxserverWps2.default({
	          url: layerModel.get('search').url || layerModel.get('search').urls[0],
	          eoid: layerModel.get('search').id
	        });
	        break;
	      case 'EO-WCS':
	      case 'OpenSearch':
	        source = function source(start, end, params, callback) {
	          // set "fixed" parameters here
	          var filtersModel = new _FiltersModel2.default((layerModel.get('search.parameters') || []).reduce(function (acc, param) {
	            return param.fixed ? Object.assign(acc, _defineProperty({}, param.type, param.fixed)) : acc;
	          }, { time: [start, end] }));
	          // this should be taken from searchModel.get('defaultPageSize') to be correct, but currently set to null by default and would need some rewrites
	          var itemsPerPage = layerModel.get('search').pageSize;
	          var emitter = (0, _search.searchAllRecords)(layerModel, filtersModel, mapModel, { mimeType: 'application/atom+xml', itemsPerPage: itemsPerPage });
	          emitter.on('progress', function (result) {
	            callback(result.records.map(function (record) {
	              var time = null;
	              var properties = record.properties;
	              if (record.time) {
	                time = record.time;
	                if (time instanceof Date) {
	                  time = [time, time];
	                }
	              } else if (properties) {
	                // TODO: other property names than begin_time/end_time
	                if (properties.begin_time && properties.end_time) {
	                  time = [new Date(properties.begin_time), new Date(properties.end_time)];
	                } else if (properties.time) {
	                  if (Array.isArray(properties.time)) {
	                    time = properties.time;
	                  } else {
	                    time = [properties.time];
	                  }
	                }
	              }
	
	              if (time === null) {
	                return null;
	              }
	
	              return [].concat(_toConsumableArray(time), [record]);
	            }).filter(function (item) {
	              return item !== null;
	            }));
	          });
	          emitter.on('error', function () {
	            return callback([]);
	          });
	          _this3.searchRequests.push(emitter);
	        };
	
	        bucketSource = function bucketSource(start, end, params, callback) {
	          var filtersModel = new _FiltersModel2.default((layerModel.get('search.parameters') || []).reduce(function (acc, param) {
	            return param.fixed ? Object.assign(acc, _defineProperty({}, param.type, param.fixed)) : acc;
	          }, { time: [start, end] }));
	          var result = (0, _search.getCount)(layerModel, filtersModel, mapModel, { mimeType: 'application/atom+xml' });
	          result.then(function (count) {
	            return callback(count);
	          });
	          _this3.searchRequests.push(result);
	        };
	        break;
	      case 'WMS':
	        source = new _wms2.default({
	          url: layerModel.get('search').url || layerModel.get('search').urls[0],
	          layer: layerModel.get('search').id
	        });
	        break;
	      default:
	        // eslint-disable-next-line
	        console.warn('Unexpected search protocol ' + layerModel.get('search').protocol);
	        break;
	    }
	
	    this.timeSlider.addDataset({
	      id: layerModel.get('id'),
	      color: layerModel.get('displayColor'),
	      highlightFillColor: this.highlightFillColor,
	      highlightStrokeColor: this.highlightStrokeColor,
	      source: source,
	      noBorder: layerModel.get('noTimeSliderBorder'),
	      bucket: layerModel.get('search.lightweightBuckets'),
	      bucketSource: bucketSource,
	      histogramThreshold: layerModel.get('search.histogramThreshold'),
	      histogramBinCount: layerModel.get('search.histogramBinCount'),
	      cacheRecords: true,
	      cacheIdField: 'id',
	      cluster: true
	    });
	    this.onLayersSorted(this.layersCollection);
	  },
	  removeLayer: function removeLayer(layerModel) {
	    this.timeSlider.removeDataset(layerModel.get('id'));
	  },
	  configureDynamicHistogram: function configureDynamicHistogram() {
	    var _this4 = this;
	
	    if (this.enableDynamicHistogram) {
	      this.listenTo(this.mapModel, 'change:area', this.addVisibleLayers);
	      this.listenTo(this.mapModel, 'change:bbox', function () {
	        if (_this4.mapModel.get('area') === null) {
	          // only trigger refresh of timeslider when no area is selected through filter
	          _this4.addVisibleLayers();
	        }
	      });
	      if (this.firstConfigureHistogram === false) {
	        // to trigger refresh on toggleDynamicHistogram, but on first app load, map position changes after timeslider is initialized, so it would fetch twice
	        this.addVisibleLayers();
	      }
	    } else {
	      this.stopListening(this.mapModel, 'change:area');
	      this.stopListening(this.mapModel, 'change:bbox');
	      this.addVisibleLayers();
	    }
	    if (this.firstConfigureHistogram === true) {
	      this.firstConfigureHistogram = false;
	    }
	  },
	  toggleDynamicHistogram: function toggleDynamicHistogram() {
	    this.$('#dynamic-histogram').toggleClass('active');
	    this.enableDynamicHistogram = !this.enableDynamicHistogram;
	    this.configureDynamicHistogram();
	  },
	  checkVisible: function checkVisible() {
	    var fade = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
	
	    var visibleLayers = this.layersCollection.filter(function (m) {
	      return m.get('display.visible');
	    });
	    var visibleSynchronizedBaselayers = this.baseLayersCollection.filter(function (m) {
	      return m.get('display.visible') && m.get('display.synchronizeTime');
	    });
	    var visibleSynchronizedOverlays = this.overlayLayersCollection.filter(function (m) {
	      return m.get('display.visible') && m.get('display.synchronizeTime');
	    });
	    var displayTimeSlider = visibleLayers.length + visibleSynchronizedBaselayers.length + visibleSynchronizedOverlays.length;
	    if (displayTimeSlider || this.singleLayerModeUsed) {
	      if (fade) {
	        this.$el.fadeIn();
	      } else {
	        this.$el.show();
	      }
	    } else if (fade) {
	      this.$el.fadeOut();
	    } else {
	      this.$el.hide();
	    }
	  },
	  createRecordFilter: function createRecordFilter(bbox) {
	    return function (record) {
	      var params = record[2];
	      if (params && params.bbox) {
	        if (bbox[0] < bbox[2]) {
	          return intersects(bbox, params.bbox);
	        }
	        return intersects([-180, bbox[1], bbox[2], bbox[2]], params.bbox) || intersects([bbox[0], bbox[1], 180, bbox[2]], params.bbox);
	      }
	      return true;
	    };
	  },
	
	
	  // two way binding of time selection
	  onSelectionChanged: function onSelectionChanged(event) {
	    var selection = event.originalEvent.detail;
	    var selectionArray = [selection.start, selection.end];
	    if (this.maxMapInterval) {
	      this.mapModel.set('extendedTime', selectionArray);
	    }
	    this.mapModel.set('time', selectionArray);
	  },
	  onRecordClicked: function onRecordClicked(event) {
	    var record = event.originalEvent.detail;
	    if (record.params) {
	      this.mapModel.show(record.params);
	    }
	    if (this.maxMapInterval) {
	      this.mapModel.set('extendedTime', [record.start, record.end]);
	    }
	    this.mapModel.set('time', [record.start, record.end]);
	  },
	  onRecordMouseover: function onRecordMouseover(event) {
	    var record = event.originalEvent.detail;
	    var feature = Object.assign({}, record.params, { layerId: record.dataset });
	    this.highlightModel.highlight(feature);
	  },
	  onRecordMouseout: function onRecordMouseout(event) {
	    var record = event.originalEvent.detail;
	    this.highlightModel.unHighlight(record.params);
	  },
	  onRecordsClicked: function onRecordsClicked(event) {
	    var detail = event.originalEvent.detail;
	    var records = detail.bin || detail.records;
	    // alternative behavior for shared bbox crossing antimeridian -> make bbox go over 180 if necessary
	    // naively calculate the bounding box on WGS84
	    var validBboxList = records.filter(function (record) {
	      return record[2] && record[2].bbox;
	    }).map(function (record) {
	      return record[2].bbox;
	    });
	    var bboxNaiveCombined = validBboxList.reduce(function (lastBbox, thisBbox) {
	      if (!lastBbox) {
	        return thisBbox;
	      }
	      return [Math.min(lastBbox[0], thisBbox[0]), Math.min(lastBbox[1], thisBbox[1]), Math.max(lastBbox[2], thisBbox[2]), Math.max(lastBbox[3], thisBbox[3])];
	    }, null);
	    // naively calculate the bounding box on a "modified" WGS84, where 360° has been added to all negative longitudes
	    var bboxModifiedCombined = validBboxList.map(function (bbox) {
	      return [bbox[0] < 0 ? bbox[0] + 360 : bbox[0], bbox[1], bbox[2] < 0 ? bbox[2] + 360 : bbox[2], bbox[3]];
	    }).reduce(function (lastBbox, thisBbox) {
	      if (!lastBbox) {
	        return thisBbox;
	      }
	      return [Math.min(lastBbox[0], thisBbox[0]), Math.min(lastBbox[1], thisBbox[1]), Math.max(lastBbox[2], thisBbox[2]), Math.max(lastBbox[3], thisBbox[3])];
	    }, null);
	
	    if (bboxNaiveCombined) {
	      // take smaller one of both bboxes
	      if (bboxModifiedCombined[2] - bboxModifiedCombined[0] < bboxNaiveCombined[2] - bboxNaiveCombined[0]) {
	        this.mapModel.show({ bbox: bboxModifiedCombined });
	      } else {
	        this.mapModel.show({ bbox: bboxNaiveCombined });
	      }
	    }
	    if (this.maxMapInterval) {
	      this.mapModel.set('extendedTime', [detail.start, detail.end]);
	    }
	    this.mapModel.set('time', [detail.start, detail.end]);
	  },
	  onRecordsMouseover: function onRecordsMouseover(event) {
	    var detail = event.originalEvent.detail;
	    var bin = (detail.bin || detail.records).map(function (record) {
	      return Object.assign({}, record[2], { layerId: detail.dataset });
	    });
	    this.currentBin = bin;
	    this.highlightModel.highlight(bin);
	  },
	  onRecordsMouseout: function onRecordsMouseout() {
	    this.highlightModel.unHighlight(this.currentBin);
	  },
	  onBucketMouseover: function onBucketMouseover(event) {
	    var detail = event.originalEvent.detail;
	    this.highlightModel.highlight({
	      id: 'detail.dataset-' + detail.start.toISOString() + '-' + detail.end.toISOString(),
	      layerId: detail.dataset,
	      properties: {
	        time: [new Date(detail.start.getTime() + 1), new Date(detail.end.getTime() - 1)]
	      }
	    });
	  },
	  onBucketMouseout: function onBucketMouseout(event) {
	    var detail = event.originalEvent.detail;
	    this.highlightModel.unHighlight({
	      id: 'detail.dataset-' + detail.start.toISOString() + '-' + detail.end.toISOString(),
	      layerId: detail.dataset
	    });
	  },
	  onBucketClicked: function onBucketClicked(event) {
	    var detail = event.originalEvent.detail;
	    if (this.maxMapInterval) {
	      this.mapModel.set('extendedTime', [detail.start, detail.end]);
	    }
	    this.mapModel.set('time', [detail.start, detail.end]);
	  },
	  onModelSelectionChanged: function onModelSelectionChanged(mapModel) {
	    // eslint-disable-next-line
	    var _ref = this.maxMapInterval ? mapModel.get('extendedTime') : mapModel.get('time'),
	        _ref2 = _slicedToArray(_ref, 2),
	        low = _ref2[0],
	        high = _ref2[1];
	
	    if (this.timeSlider.options.selectionLimit) {
	      var maxTime = this.timeSlider.options.selectionLimit * 1000;
	      var dt = high.getTime() - low.getTime();
	      if (dt > maxTime) {
	        high = new Date(low.getTime() + maxTime);
	      }
	    }
	    this.timeSlider.select(low, high);
	  },
	  onLoadStart: function onLoadStart() {
	    this.$('.control#reload i').addClass('fa-spin');
	  },
	  onLoadEnd: function onLoadEnd() {
	    this.$('.control#reload i').removeClass('fa-spin');
	  },
	
	
	  // collection events
	
	  onLayerAdded: function onLayerAdded(layerModel) {
	    this.addLayer(layerModel);
	    this.checkVisible();
	  },
	  onLayerRemoved: function onLayerRemoved(layerModel) {
	    this.removeLayer(layerModel);
	    this.checkVisible();
	  },
	  onLayersSorted: function onLayersSorted(layersCollection) {
	    var ids = layersCollection.pluck('id');
	    this.timeSlider.reorderDatasets(ids);
	  },
	  onLayerVisibleChanged: function onLayerVisibleChanged(layerModel) {
	    if (layerModel.hasChanged('display') && !this.singleLayerModeUsed) {
	      if (layerModel.get('display.visible') && !this.timeSlider.hasDataset(layerModel.get('id'))) {
	        this.addLayer(layerModel);
	      } else {
	        this.removeLayer(layerModel);
	      }
	    }
	    this.checkVisible();
	  },
	  onSynchronizedLayerVisibleChanged: function onSynchronizedLayerVisibleChanged() {
	    this.checkVisible();
	  },
	  onHighlightFeatureChange: function onHighlightFeatureChange(highlightModel, feature) {
	    var _this5 = this;
	
	    var features = [];
	    if (Array.isArray(feature)) {
	      features = feature;
	    } else if (feature) {
	      features = [feature];
	    }
	
	    var layerFeatures = {};
	    features.forEach(function (f) {
	      if (f && f.layerId && f.properties.time) {
	        if (!layerFeatures[f.layerId]) {
	          layerFeatures[f.layerId] = [];
	        }
	
	        var time = f.properties.time;
	        if (time instanceof Date) {
	          time = [time, time];
	        }
	        layerFeatures[f.layerId].push(time);
	      }
	    });
	
	    this.layersCollection.forEach(function (layerModel) {
	      return _this5.timeSlider.setRecordHighlights(layerModel.get('id'), layerFeatures[layerModel.get('id')] || []);
	    });
	  }
	});
	
	exports.default = TimeSliderView;

/***/ }),
/* 554 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	
	var _backbone = __webpack_require__(11);
	
	var _backbone2 = _interopRequireDefault(_backbone);
	
	var _jquery = __webpack_require__(12);
	
	var _jquery2 = _interopRequireDefault(_jquery);
	
	__webpack_require__(192);
	
	__webpack_require__(230);
	
	var _LayerListItemView = __webpack_require__(997);
	
	var _LayerListItemView2 = _interopRequireDefault(_LayerListItemView);
	
	__webpack_require__(1119);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	// eslint-disable-next-line max-len
	var LayerListItemView = _backbone2.default.ItemView.extend( /** @lends core/views/layers.LayerListItemView# */{
	  tagName: 'li',
	  className: 'layer-list-item',
	  template: _LayerListItemView2.default,
	  events: {
	    'change .layer-visible': 'onLayerVisibleChange',
	    'click .layer-options': 'onLayerOptionsClick',
	
	    // for when no options are set
	    'click .layer-adjust-opacity': 'onLayerAdjustOpacityClick',
	    'inserted.bs.popover': 'onPopoverInserted',
	    'hidden.bs.popover': 'onPopoverHidden',
	    'click .layer-download-full-resolution': 'onLayerDownloadFullResolutionClick',
	
	    // when using options
	    'click .layer-show-options': 'onShowOptionsClick'
	  },
	
	  modelEvents: {
	    change: 'onModelChange'
	  },
	
	  /**
	    @constructs
	    @param {Object} options
	    @param {core/models.LayersCollection} options.collection The layers to display
	    @param {boolean} options.singleChoice Whether the visibility of the layers
	                                          is mutually exclusive.
	    @param {boolean} options.fullDisplay Whether the layers shall be displayed
	                                         with options, colors, etc.
	   */
	  initialize: function initialize(options) {
	    this.singleChoice = options.singleChoice;
	    this.fullDisplay = options.fullDisplay;
	  },
	  templateHelpers: function templateHelpers() {
	    return {
	      singleChoice: this.singleChoice,
	      fullDisplay: this.fullDisplay,
	      options: this.model.get('display.options')
	    };
	  },
	  onAttach: function onAttach() {
	    this.$popoverButton = this.$('[data-toggle="popover"]');
	    this.$popoverButton.popover({
	      container: 'body',
	      content: 'x',
	      trigger: 'manual'
	    });
	  },
	  onLayerAdjustOpacityClick: function onLayerAdjustOpacityClick() {
	    if (!this.isPopoverShown) {
	      this.$popoverButton.popover('show');
	    }
	  },
	  onLayerDownloadFullResolutionClick: function onLayerDownloadFullResolutionClick() {
	    this.model.trigger('download-full-resolution', this.model);
	  },
	  onPopoverInserted: function onPopoverInserted() {
	    var _this = this;
	
	    this.isPopoverShown = true;
	    var popoverId = this.$('.layer-adjust-opacity').attr('aria-describedby');
	    var $popover = (0, _jquery2.default)('#' + popoverId);
	    var $popoverContent = $popover.find('.popover-content');
	    $popover.addClass('layer-adjust-opacity-popover');
	    $popoverContent.empty().text('').css('width', '200px');
	
	    var opacity = this.model.get('display.opacity');
	    opacity = typeof opacity === 'undefined' ? 1 : opacity;
	
	    this.$slider = (0, _jquery2.default)('<input/>').appendTo($popoverContent).slider({
	      min: 0,
	      max: 100,
	      value: opacity * 100,
	      formatter: function formatter(value) {
	        return value + '%';
	      }
	    });
	    this.$slider.on('slide', function (event) {
	      _this.model.set('display.opacity', event.value / 100);
	    });
	    this.$slider.on('change', function () {
	      _this.model.set('display.opacity', parseInt(_this.$slider.val(), 10) / 100);
	    });
	    this.$slider.on('slideStop', function () {
	      return $popover.focus();
	    });
	
	    $popover.attr('tabindex', '0');
	    $popover.focus();
	
	    $popover[0].onblur = function (event) {
	      // fix for IE, as the blur event is also raised when a child gets focused:
	      // check if the currently targeted element is a descendant. Only hide the
	      // popover when the new target is outside of the popover.
	      var $target = (0, _jquery2.default)(event.explicitOriginalTarget || document.activeElement);
	      if ($target.closest($popover).length === 0) {
	        _this.$popoverButton.popover('hide');
	        $popover[0].onblur = null;
	      } else {
	        $popover.focus();
	      }
	    };
	  },
	  onPopoverHidden: function onPopoverHidden() {
	    this.isPopoverShown = false;
	    if (typeof this.$slider !== 'undefined') {
	      this.$slider.off('slide');
	      this.$slider.off('change');
	      this.$slider.slider('destroy');
	    }
	  },
	  onLayerVisibleChange: function onLayerVisibleChange() {
	    this.model.set('display.visible', this.$('.layer-visible').is(':checked'));
	  },
	  onShowOptionsClick: function onShowOptionsClick() {
	    this.model.trigger('show-options', this.model);
	  },
	  onModelChange: function onModelChange(model) {
	    // TODO: other fields required too?
	    this.$('.layer-visible').prop('checked', model.get('display.visible'));
	  },
	  hidePopover: function hidePopover() {
	    this.$popoverButton.popover('hide');
	  }
	});
	
	exports.default = LayerListItemView;

/***/ }),
/* 555 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	
	var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
	
	var _backbone = __webpack_require__(11);
	
	var _backbone2 = _interopRequireDefault(_backbone);
	
	__webpack_require__(1063);
	
	__webpack_require__(987);
	
	var _jquery = __webpack_require__(12);
	
	var _jquery2 = _interopRequireDefault(_jquery);
	
	var _LayerListItemView = __webpack_require__(554);
	
	var _LayerListItemView2 = _interopRequireDefault(_LayerListItemView);
	
	__webpack_require__(1120);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	// eslint-disable-next-line max-len
	var LayerListView = _backbone2.default.CollectionView.extend( /** @lends core/views/layers.LayerListView# */{
	  tagName: 'ul',
	  className: 'layer-list',
	  childView: _LayerListItemView2.default,
	
	  /**
	    @constructs
	    @param {Object} options
	    @param {core/models.LayersCollection} options.collection The layers to display
	    @param {boolean} options.sortable Whether layers shall be sortable.
	    @param {boolean} options.singleChoive Whether the visibility of the layers
	                                          is mutually exclusive.
	    @param {boolean} options.fullDisplay Whether the layers shall be displayed
	                                         with options, colors, etc.
	   */
	  initialize: function initialize(options) {
	    this.sortable = options.sortable;
	    this.singleChoice = options.singleChoice;
	    this.fullDisplay = options.fullDisplay;
	  },
	  childViewOptions: function childViewOptions() {
	    return {
	      singleChoice: this.singleChoice,
	      fullDisplay: this.fullDisplay
	    };
	  },
	  onAttach: function onAttach() {
	    var _this = this;
	
	    if (this.sortable) {
	      (0, _jquery2.default)(this.$el).sortable({
	        containment: this.$el,
	        axis: 'y',
	        forceHelperSize: true,
	        forcePlaceHolderSize: true,
	        placeholder: 'sortable-placeholder',
	        handle: '.fa-sort',
	        tolerance: 'pointer',
	        stop: function stop(event, ui) {
	          _this.onSortStop(event, ui);
	        }
	      });
	    }
	  },
	  onSortStop: function onSortStop() {
	    var _this2 = this;
	
	    // get the new order of the layers from the DOM
	    this.children.call('hidePopover');
	    this.children.map(function (view) {
	      return [view.$('.input-group').attr('id').substr(11), view.$el.index()];
	    }).forEach(function (_ref) {
	      var _ref2 = _slicedToArray(_ref, 2),
	          id = _ref2[0],
	          index = _ref2[1];
	
	      _this2.collection.get(id).set('ordinal', index, { silent: true });
	    });
	    this.collection.sort();
	  }
	});
	
	exports.default = LayerListView;

/***/ }),
/* 556 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	
	var _ModalView = __webpack_require__(121);
	
	var _ModalView2 = _interopRequireDefault(_ModalView);
	
	var _LayerOptionsModalView = __webpack_require__(999);
	
	var _LayerOptionsModalView2 = _interopRequireDefault(_LayerOptionsModalView);
	
	var _LayerOptionsCoreView = __webpack_require__(242);
	
	var _LayerOptionsCoreView2 = _interopRequireDefault(_LayerOptionsCoreView);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var LayerOptionsModalView = _ModalView2.default.extend({
	  template: _LayerOptionsModalView2.default,
	
	  initialize: function initialize(options) {
	    _ModalView2.default.prototype.initialize.call(this, options);
	  },
	  onRender: function onRender() {
	    this.showChildView('content', new _LayerOptionsCoreView2.default({
	      useDetailsDisplay: this.useDetailsDisplay,
	      model: this.model
	    }));
	  }
	});
	
	exports.default = LayerOptionsModalView;

/***/ }),
/* 557 */
/***/ (function(module, exports, __webpack_require__) {

	/* WEBPACK VAR INJECTION */(function(Promise) {'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	
	var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
	
	exports.download = download;
	exports.getDownloadInfos = getDownloadInfos;
	exports.downloadFullResolution = downloadFullResolution;
	
	var _util = __webpack_require__(120);
	
	var _FiltersModel = __webpack_require__(119);
	
	var _FiltersModel2 = _interopRequireDefault(_FiltersModel);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	function getCoverageXML(coverageid) {
	  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
	
	  var subsetX = options.subsetX;
	  var subsetY = options.subsetY;
	
	  if (!coverageid) {
	    throw new Error('Parameters "coverageid" is mandatory.');
	  }
	  var subsetCRS = options.subsetCRS || 'http://www.opengis.net/def/crs/EPSG/0/4326';
	  var params = ['<wcs:GetCoverage service="WCS" version="2.0.1" xmlns:wcs="http://www.opengis.net/wcs/2.0" xmlns:wcscrs="http://www.opengis.net/wcs/crs/1.0" xmlns:wcsmask="http://www.opengis.net/wcs/mask/1.0" xmlns:int="http://www.opengis.net/wcs/interpolation/1.0" xmlns:scal="http://www.opengis.net/wcs/scaling/1.0">\n     <wcs:CoverageId>' + coverageid + '</wcs:CoverageId>'];
	  var extension = [];
	
	  var axisNames = void 0;
	  if (!options.axisNames) {
	    axisNames = {
	      x: 'x',
	      y: 'y'
	    };
	  } else if (Array.isArray(options.axisNames)) {
	    axisNames = {
	      x: options.axisNames[0],
	      y: options.axisNames[1]
	    };
	  } else {
	    axisNames = options.axisNames;
	  }
	
	  if (options.format) {
	    params.push('<wcs:format>' + options.format + '</wcs:format>');
	  }
	  if (options.bbox && !options.subsetX && !options.subsetY) {
	    subsetX = [options.bbox[0], options.bbox[2]];
	    subsetY = [options.bbox[1], options.bbox[3]];
	  }
	  if (subsetX) {
	    params.push('<wcs:DimensionTrim><wcs:Dimension>' + axisNames.x + '</wcs:Dimension>\n                   <wcs:TrimLow>' + subsetX[0] + '</wcs:TrimLow>\n                   <wcs:TrimHigh>' + subsetX[1] + '</wcs:TrimHigh>\n                 </wcs:DimensionTrim>');
	  }
	  if (subsetY) {
	    params.push('<wcs:DimensionTrim><wcs:Dimension>' + axisNames.y + '</wcs:Dimension>\n                   <wcs:TrimLow>' + subsetY[0] + '</wcs:TrimLow>\n                   <wcs:TrimHigh>' + subsetY[1] + '</wcs:TrimHigh>\n                 </wcs:DimensionTrim>');
	  }
	
	  if (options.outputCRS) {
	    extension.push('<wcscrs:outputCrs>' + options.outputCRS + '</wcscrs:outputCrs>');
	  }
	
	  if (options.sizeX && options.sizeY) {
	    extension.push('\n      <scal:ScaleToSize>\n        <scal:TargetAxisSize>\n          <scal:axis>' + axisNames.x + '</scal:axis>\n          <scal:targetSize>' + options.sizeX + '</scal:targetSize>\n        </scal:TargetAxisSize>\n        <scal:TargetAxisSize>\n          <scal:axis>' + axisNames.y + '</scal:axis>\n          <scal:targetSize>' + options.sizeY + '</scal:targetSize>\n        </scal:TargetAxisSize>\n      </scal:ScaleToSize>\n    ');
	  }
	
	  extension.push('<wcscrs:subsettingCrs>' + subsetCRS + '</wcscrs:subsettingCrs>');
	
	  if (options.mask) {
	    extension.push('<wcsmask:polygonMask>' + options.mask + '</wcsmask:polygonMask>');
	  }
	
	  if (options.scale) {
	    extension.push('<scal:ScaleByFactor><scal:scaleFactor>' + options.scale + '</scal:scaleFactor></scal:ScaleByFactor>');
	  }
	
	  if (options.interpolation) {
	    extension.push('<int:Interpolation><int:globalInterpolation>' + options.interpolation + '</int:globalInterpolation></int:Interpolation>');
	  }
	
	  if (options.multipart) {
	    params.push('<wcs:mediaType>multipart/related</wcs:mediaType>');
	  }
	
	  if (extension.length > 0) {
	    params.push('<wcs:Extension>');
	    for (var i = 0; i < extension.length; ++i) {
	      params.push(extension[i]);
	    }
	    params.push('</wcs:Extension>');
	  }
	  params.push('</wcs:GetCoverage>');
	  return params.join('');
	}
	
	function getCoverageKVP(coverageid) {
	  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
	
	  var params = [['service', 'WCS'], ['version', '2.0.1'], ['request', 'GetCoverage'], ['coverageid', coverageid]];
	
	  var subsetCRS = options.subsetCRS || 'http://www.opengis.net/def/crs/EPSG/0/4326';
	
	  if (options.format) {
	    params.push(['format', options.format]);
	  }
	
	  var axisNames = void 0;
	  if (!options.axisNames) {
	    axisNames = {
	      x: 'x',
	      y: 'y'
	    };
	  } else if (Array.isArray(options.axisNames)) {
	    axisNames = {
	      x: options.axisNames[0],
	      y: options.axisNames[1]
	    };
	  } else {
	    axisNames = options.axisNames;
	  }
	
	  var subsetX = options.subsetX;
	  var subsetY = options.subsetY;
	  if (options.bbox && !options.subsetX && !options.subsetY) {
	    subsetX = [options.bbox[0], options.bbox[2]];
	    subsetY = [options.bbox[1], options.bbox[3]];
	  }
	  if (subsetX) {
	    params.push(['subset', (axisNames.x || 'x') + '(' + subsetX[0] + ',' + subsetX[1] + ')']);
	  }
	  if (subsetY) {
	    params.push(['subset', (axisNames.y || 'y') + '(' + subsetY[0] + ',' + subsetY[1] + ')']);
	  }
	
	  if (options.outputCRS) {
	    params.push(['outputCRS', options.outputCRS]);
	  }
	  if (subsetCRS && (subsetX || subsetY)) {
	    params.push(['subsettingCRS', subsetCRS]);
	  }
	  if (options.multipart) {
	    params.push(['mediatype', 'multipart/related']);
	  }
	
	  if (options.rangeSubset) {
	    params.push(['rangesubset', options.rangeSubset.join(',')]);
	  }
	
	  // scaling related stuff
	  if (options.scale) {
	    params.push(['scaleFactor', options.scale]);
	  }
	  if (options.sizeX && options.sizeY) {
	    params.push(['scaleSize', axisNames.x + '(' + options.sizeX + '),' + axisNames.y + '(' + options.sizeY + ')']);
	  }
	
	  if (options.interpolation) {
	    params.push(['interpolation', options.interpolation]);
	  }
	
	  return params.map(function (param) {
	    return param.join('=');
	  }).join('&');
	}
	
	function getIntersectingBbox(r1, r2) {
	  // computes intersection bbox of two bboxes, returns false if no intersect
	  // does not find intersection if any bbox crosses dateline and non-over 180 coordinates are used
	  var noIntersect = r2[0] > r1[2] || r2[2] < r1[0] || r2[1] > r1[3] || r2[3] < r1[1];
	  return noIntersect ? false : [Math.max(r1[0], r2[0]), Math.max(r1[1], r2[1]), Math.min(r1[2], r2[2]), Math.min(r1[3], r2[3])];
	}
	
	function computeSizeFromResolution(recordModel, filterBbox, resolutionX, resolutionY) {
	  var sizeX = null;
	  var sizeY = null;
	  var computedBbox = null;
	  var recordBbox = recordModel.get('bbox');
	  if (!recordBbox && !filterBbox) {
	    // can not compute resolution
	    return [null, null];
	  } else if (!filterBbox) {
	    // use bounding box of record as is
	    computedBbox = recordBbox;
	  } else {
	    // get intersection of two bboxes
	    computedBbox = getIntersectingBbox(recordBbox, filterBbox);
	    if (!computedBbox) {
	      // no intersection
	      return [null, null];
	    }
	  }
	  sizeX = Math.round((computedBbox[2] - computedBbox[0]) / resolutionX);
	  sizeY = Math.round((computedBbox[3] - computedBbox[1]) / resolutionY);
	  sizeX = sizeX < 1 ? 1 : sizeX;
	  sizeY = sizeY < 1 ? 1 : sizeY;
	  return [sizeX, sizeY];
	}
	
	function download(layerModel, filtersModel, recordModel, options) {
	  var requestOptions = {
	    bbox: filtersModel.get('area'),
	    outputCRS: options.outputCRS,
	    subsetCRS: options.subsetCRS,
	    format: options.format,
	    scale: options.scale,
	    interpolation: options.interpolation,
	    axisNames: layerModel.get('download.axisNames')
	  };
	  if (options.resolutionX && options.resolutionY) {
	    // compute size based on specified resolution
	    var _computeSizeFromResol = computeSizeFromResolution(recordModel, filtersModel.get('area'), options.resolutionX, options.resolutionY),
	        _computeSizeFromResol2 = _slicedToArray(_computeSizeFromResol, 2),
	        sizeX = _computeSizeFromResol2[0],
	        sizeY = _computeSizeFromResol2[1];
	
	    requestOptions.sizeX = sizeX;
	    requestOptions.sizeY = sizeY;
	  } else {
	    // use sizes directly
	    requestOptions.sizeX = options.sizeX;
	    requestOptions.sizeY = options.sizeY;
	  }
	
	  if (layerModel.get('download.method') === 'GET') {
	    var kvp = getCoverageKVP(recordModel.get('id'), requestOptions);
	    return layerModel.get('download.url') + '?' + kvp;
	  }
	  return getCoverageXML(recordModel.get('id'), requestOptions);
	}
	
	function getDownloadInfos(layerModel, filtersModel, recordModel) {
	  var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
	
	  var kvp = getCoverageKVP(recordModel.get('id'), {
	    bbox: filtersModel.get('area'),
	    outputCRS: options.outputCRS,
	    format: options.format
	  });
	  var url = layerModel.get('download.url') + '?' + kvp;
	  return Promise.resolve([{
	    href: url,
	    name: recordModel.get('id')
	  }]);
	}
	
	function downloadFullResolution(layerModel, mapModel, filtersModel, options) {
	  var requestOptions = {
	    bbox: options.bbox || mapModel.get('bbox'),
	    outputCRS: options.outputCRS,
	    subsetCRS: options.subsetCRS,
	    rangeSubset: options.fields,
	    format: options.format,
	    scale: options.scale,
	    sizeX: options.sizeX,
	    sizeY: options.sizeY,
	    interpolation: options.interpolation,
	    axisNames: layerModel.get('fullResolution.axisNames')
	  };
	  var id = layerModel.get('fullResolution.id');
	  var kvp = getCoverageKVP(id, requestOptions);
	
	  var time = mapModel.get('time');
	  if (time && !layerModel.get('fullResolution.disableTimeSubsetting')) {
	    kvp = kvp + '&subset=http://www.opengis.net/def/axis/OGC/0/time("' + (0, _util.getISODateTimeString)(time[0]) + '","' + (0, _util.getISODateTimeString)(time[1]) + '")';
	  }
	
	  var cqlMapping = layerModel.get('fullResolution.cqlMapping');
	  var cqlParameterName = layerModel.get('fullResolution.cqlParameterName');
	
	  if (cqlParameterName) {
	    var filtersModelCopy = new _FiltersModel2.default(filtersModel.attributes);
	    var cql = (0, _util.filtersToCQL)(filtersModelCopy, cqlMapping);
	    if (cql.length) {
	      kvp = kvp + '&' + cqlParameterName + '=' + cql;
	    }
	  }
	  var fullResolutionUrl = layerModel.get('fullResolution.url');
	
	  var char = '?';
	  if (fullResolutionUrl.includes('?')) {
	    char = fullResolutionUrl.endsWith('?') || fullResolutionUrl.endsWith('&') ? '' : '&';
	  }
	  return '' + fullResolutionUrl + char + kvp;
	}
	/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(27)))

/***/ }),
/* 558 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	
	var _backbone = __webpack_require__(24);
	
	var _backbone2 = _interopRequireDefault(_backbone);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	exports.default = _backbone2.default.Model.extend({
	  defaults: {
	    availableDownloadFormats: [{
	      name: 'TIFF',
	      mimeType: 'image/tiff'
	    }, {
	      name: 'PNG',
	      mimeType: 'image/png'
	    }],
	    selectedDownloadFormat: null,
	
	    availableProjections: [{
	      name: 'WGS-84',
	      identifier: 'EPSG:4326'
	    }, {
	      name: 'Web Mercator',
	      identifier: 'EPSG:3857'
	    }],
	    selectedProjection: null,
	
	    availableInterpolations: [{
	      name: 'Bilinear',
	      identifier: 'http://www.opengis.net/def/interpolation/OGC/1/bilinear'
	    }],
	    selectedInterpolation: null,
	
	    subsetByBounds: false
	  }
	});

/***/ }),
/* 559 */
/***/ (function(module, exports, __webpack_require__) {

	/* WEBPACK VAR INJECTION */(function(Promise) {'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	exports.getDownloadInfos = getDownloadInfos;
	
	var _urlParse = __webpack_require__(164);
	
	var _urlParse2 = _interopRequireDefault(_urlParse);
	
	var _rewrite = __webpack_require__(243);
	
	var _rewrite2 = _interopRequireDefault(_rewrite);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	function _toArray(arr) { return Array.isArray(arr) ? arr : Array.from(arr); } // import AWS from 'aws-sdk';
	
	
	function getChildren(element) {
	  var i = 0;
	  var nodes = element.childNodes;
	  var children = [];
	  var node = void 0;
	  while (node = nodes[i++]) {
	    if (node.nodeType === 1) {
	      children.push(node);
	    }
	  }
	  return children;
	}
	
	function parseItem(itemNode) {
	  return getChildren(itemNode).reduce(function (acc, child) {
	    acc[child.tagName] = child.textContent;
	    return acc;
	  }, {});
	}
	
	function listBucket(originAndPrefix, bucket, prefix) {
	  return fetch('' + originAndPrefix + bucket + '?list-type=2&prefix=' + prefix, {
	    credentials: 'include',
	    redirect: 'follow'
	  }).then(function (response) {
	    return response.text();
	  }).then(function (content) {
	    return new window.DOMParser().parseFromString(content, 'text/xml');
	  }).then(function (xmlDoc) {
	    return Array.from(xmlDoc.documentElement.getElementsByTagName('Contents')).map(function (item) {
	      return parseItem(item);
	    });
	  });
	}
	
	function getDownloadInfos(layerModel, recordModel) {
	  var link = recordModel.get('properties').links.find(function (l) {
	    return l.rel === 'enclosure';
	  });
	  if (link) {
	    var pathPrefix = layerModel.get('download.pathPrefix') ? layerModel.get('download.pathPrefix') : '';
	
	    var parsed = (0, _urlParse2.default)((0, _rewrite2.default)(link.href, layerModel.get('download.rewrite')));
	    if (link.href.slice(-4) !== '.zip') {
	      var origin = parsed.origin,
	          pathname = parsed.pathname;
	
	      var originAndPrefix = origin + '/' + pathPrefix;
	
	      var _pathname$slice$split = pathname.slice(1 + pathPrefix.length).split('/'),
	          _pathname$slice$split2 = _toArray(_pathname$slice$split),
	          bucket = _pathname$slice$split2[0],
	          pathParts = _pathname$slice$split2.slice(1);
	
	      var path = pathParts.join('/');
	      return listBucket(originAndPrefix, bucket, path).then(function (items) {
	        return items.map(function (item) {
	          return {
	            href: '' + originAndPrefix + bucket + '/' + item.Key,
	            size: item.Size,
	            name: item.Key.substring(path.length + 1) !== 'zip' ? item.Key.substring(path.length + 1) : item.Key.split('/')[item.Key.split('/').length - 1]
	          };
	        });
	      });
	    }
	    var name = recordModel.get('id');
	    if (parsed.query.length === 0) {
	      var parts = parsed.pathname.split('/');
	      name = parts[parts.length - 1];
	    }
	    return Promise.resolve([{ href: link.href, name: name }]);
	  }
	  return Promise.resolve([]);
	}
	/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(27)))

/***/ }),
/* 560 */
/***/ (function(module, exports, __webpack_require__) {

	/* WEBPACK VAR INJECTION */(function(Promise) {'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	exports.download = download;
	exports.getDownloadInfos = getDownloadInfos;
	
	var _jquery = __webpack_require__(12);
	
	var _jquery2 = _interopRequireDefault(_jquery);
	
	var _urlParse = __webpack_require__(164);
	
	var _urlParse2 = _interopRequireDefault(_urlParse);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	function download(recordModel) {
	  var links = recordModel.get('properties').links;
	  var url = links.find(function (link) {
	    return link.rel === 'enclosure';
	  }).href;
	
	  return (0, _jquery2.default)('<iframe src="' + url + '"></iframe>');
	}
	
	function getDownloadInfos(recordModel) {
	  var properties = recordModel.get('properties');
	  if (properties && properties.links) {
	    var url = properties.links.find(function (link) {
	      return link.rel === 'enclosure';
	    });
	    if (url) {
	      var name = recordModel.get('id');
	      var parsed = (0, _urlParse2.default)(url.href);
	      if (parsed.query.length === 0) {
	        var parts = parsed.pathname.split('/');
	        name = parts[parts.length - 1];
	      }
	
	      return Promise.resolve([{ href: url.href, name: name }]);
	    }
	  }
	  return Promise.resolve([]);
	}
	/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(27)))

/***/ }),
/* 561 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	
	var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
	
	var _events;
	
	var _bbox = __webpack_require__(137);
	
	var _bbox2 = _interopRequireDefault(_bbox);
	
	var _jquery = __webpack_require__(12);
	
	var _jquery2 = _interopRequireDefault(_jquery);
	
	var _underscore = __webpack_require__(33);
	
	var _underscore2 = _interopRequireDefault(_underscore);
	
	var _proj = __webpack_require__(16);
	
	var _ModalView = __webpack_require__(121);
	
	var _ModalView2 = _interopRequireDefault(_ModalView);
	
	var _DownloadOptionsModalView = __webpack_require__(1000);
	
	var _DownloadOptionsModalView2 = _interopRequireDefault(_DownloadOptionsModalView);
	
	__webpack_require__(516);
	
	var _FiltersModel = __webpack_require__(119);
	
	var _FiltersModel2 = _interopRequireDefault(_FiltersModel);
	
	var _download = __webpack_require__(46);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
	
	exports.default = _ModalView2.default.extend({
	  template: _DownloadOptionsModalView2.default,
	  templateHelpers: function templateHelpers() {
	    return {
	      records: this.records,
	      downloadOptions: this.showDownloadOptions,
	      bbox: this.bbox.map(function (v) {
	        return v.toFixed(4);
	      }),
	      projection_4326: this.mapProjection === 'EPSG:4326'
	    };
	  },
	  onRender: function onRender() {
	    var preferences = this.getPreferences();
	    var preferredFormat = preferences.preferredFormat;
	    var preferredInterpolation = preferences.preferredInterpolation;
	    var preferredProjection = preferences.preferredProjection;
	    var preferredScalingMethod = preferences.preferredScalingMethod;
	    var preferredSize = preferences.preferredSize;
	    var preferredResolution = preferences.preferredResolution;
	    var preferredScale = preferences.preferredScale;
	    var subsetByBounds = preferences.subsetByBounds;
	
	    if (subsetByBounds) {
	      this.$('.subset-by-bounds').prop('checked', true);
	      this.model.set('subsetByBounds', subsetByBounds);
	    }
	    if (preferredFormat) {
	      this.$('.select-format').val(preferredFormat);
	      this.model.set('selectedDownloadFormat', preferredFormat);
	    }
	    if (preferredInterpolation) {
	      this.$('.select-interpolation').val(preferredInterpolation);
	      this.model.set('selectedInterpolation', preferredInterpolation);
	    }
	    if (preferredProjection) {
	      this.$('.select-projection').val(preferredProjection);
	      this.model.set('selectedProjection', preferredProjection);
	    }
	    if (preferredScalingMethod) {
	      this.$('input[name="scale-method"][value=' + preferredScalingMethod + ']').prop('checked', true);
	      if (preferredScalingMethod === 'resolution' && !isNaN(preferredResolution[0]) && !isNaN(preferredResolution[1])) {
	        this.$('[name="resolution-x"]').val(preferredResolution[0]);
	        this.$('[name="resolution-y"]').val(preferredResolution[1]);
	      } else if (preferredScalingMethod === 'size' && !isNaN(preferredSize[0]) && !isNaN(preferredSize[1])) {
	        this.$('[name="size-x"]').val(preferredSize[0]);
	        this.$('[name="size-y"]').val(preferredSize[1]);
	      } else if (preferredScalingMethod === 'scale') {
	        this.$('[name="scalefactor"]').val(preferredScale * 100);
	      }
	      this.onScaleMethodChange();
	      this.onSizeOrResolutionChange();
	    }
	  },
	
	
	  events: (_events = {
	    'change .select-projection': 'onProjectionChange',
	    'change .select-format': 'onFormatChange',
	    'change .select-interpolation': 'onInterpolationChange',
	    'change .subset-by-bounds': 'onSubsetByBoundsChange',
	    'click .start-download': 'onStartDownloadClicked',
	    'click .btn-draw-bbox': 'onDrawBBoxClicked',
	    'change .show-bbox': 'onBBoxInputChange',
	    'change [name="scale-method"]': 'onScaleMethodChange'
	  }, _defineProperty(_events, 'change [name^=\'size-\']', 'onSizeOrResolutionChange'), _defineProperty(_events, 'change [name^=\'resolution-\']', 'onSizeOrResolutionChange'), _defineProperty(_events, 'change [name="scalefactor"]', 'onSizeOrResolutionChange'), _events),
	
	  initialize: function initialize(options) {
	    var _this = this;
	
	    this.mapModel = options.mapModel;
	    this.mapProjection = this.mapModel.get('projection') || 'EPSG:4326';
	    this.filtersModel = options.filtersModel;
	    var filtersArea = options.mapModel.get('area');
	    if (filtersArea) {
	      if (Array.isArray(filtersArea)) {
	        this.bbox = filtersArea;
	      } else {
	        this.bbox = (0, _bbox2.default)(filtersArea);
	      }
	    } else {
	      this.bbox = options.mapModel.get('bbox');
	    }
	    this.bbox = (0, _proj.transformExtent)(this.bbox, 'EPSG:4326', this.mapProjection);
	
	    this.listenTo(this.mapModel, 'change:area', function () {
	      var bbox = _this.mapModel.get('area');
	      if (Array.isArray(bbox)) {
	        _this.bbox = (0, _proj.transformExtent)(bbox, 'EPSG:4326', _this.mapProjection);
	        _this.render();
	      }
	    });
	
	    if (options.records) {
	      this.records = options.records;
	    } else {
	      var searchCollection = options.searchCollection;
	      this.records = searchCollection.reduce(function (acc, searchModel) {
	        return acc.concat(searchModel.get('downloadSelection').map(function (recordModel) {
	          return [recordModel, searchModel];
	        }));
	      }, []);
	    }
	    this.showDownloadOptions = this.records.reduce(function (acc, record) {
	      return acc || record[1].get('layerModel').get('download.protocol') === 'EO-WCS';
	    }, false);
	    this.defaultLabelsSet();
	  },
	  onProjectionChange: function onProjectionChange() {
	    var val = this.$('.select-projection').val();
	    this.model.set('selectedProjection', val !== '' && val !== '---' ? val : null);
	    this.updatePreferences('preferredProjection', val !== '' && val !== '---' ? val : null);
	  },
	  onFormatChange: function onFormatChange() {
	    var val = this.$('.select-format').val();
	    this.model.set('selectedDownloadFormat', val !== '' && val !== '---' ? val : null);
	    this.updatePreferences('preferredFormat', val !== '' && val !== '---' ? val : null);
	  },
	  onInterpolationChange: function onInterpolationChange() {
	    var val = this.$('.select-interpolation').val();
	    this.model.set('selectedInterpolation', val !== '' && val !== '---' ? val : null);
	    this.updatePreferences('preferredInterpolation', val !== '' && val !== '---' ? val : null);
	  },
	  onScaleMethodChange: function onScaleMethodChange() {
	    switch (this.$('input[name="scale-method"]:checked').val()) {
	      case 'full':
	        this.$('input[name^=\'resolution\']').prop('disabled', true);
	        this.$('input[name^=\'size\']').prop('disabled', true);
	        this.$('input[name="scalefactor"]').prop('disabled', true);
	        this.model.set({
	          scaleMethod: 'none'
	        });
	        break;
	      case 'resolution':
	        {
	          this.$('input[name^=\'resolution\']').prop('disabled', false);
	          this.$('input[name^=\'size\']').prop('disabled', true);
	          this.$('input[name="scalefactor"]').prop('disabled', true);
	
	          this.model.set({
	            scaleMethod: 'resolution',
	            resolutionX: parseFloat(this.$('input[name="resolution-x"]').val()),
	            resolutionY: parseFloat(this.$('input[name="resolution-y"]').val())
	          });
	          break;
	        }
	      case 'size':
	        {
	          this.$('input[name^=\'resolution\']').prop('disabled', true);
	          this.$('input[name^=\'size\']').prop('disabled', false);
	          this.$('input[name="scalefactor"]').prop('disabled', true);
	
	          this.model.set({
	            scaleMethod: 'size',
	            sizeX: parseInt(this.$('input[name="size-x"]').val(), 10),
	            sizeY: parseInt(this.$('input[name="size-y"]').val(), 10)
	          });
	          break;
	        }
	      case 'scale':
	        {
	          this.$('input[name^=\'resolution\']').prop('disabled', true);
	          this.$('input[name^=\'size\']').prop('disabled', true);
	          this.$('input[name="scalefactor"]').prop('disabled', false);
	
	          this.model.set({
	            scaleMethod: 'scale',
	            scale: parseFloat(this.$('input[name="scalefactor"]').val()) / 100
	          });
	          break;
	        }
	      default:
	        break;
	    }
	    this.updatePreferences('preferredScalingMethod', this.$('input[name="scale-method"]:checked').val());
	  },
	  onSizeOrResolutionChange: function onSizeOrResolutionChange() {
	    var resolution = [parseFloat(this.$('input[name="resolution-x"]').val()), parseFloat(this.$('input[name="resolution-y"]').val())];
	    var size = [parseInt(this.$('input[name="size-x"]').val(), 10), parseInt(this.$('input[name="size-y"]').val(), 10)];
	    var scale = parseFloat(this.$('input[name="scalefactor"]').val()) / 100;
	
	    this.model.set({
	      resolutionX: resolution[0],
	      resolutionY: resolution[1],
	      sizeX: size[0],
	      sizeY: size[1],
	      scale: scale
	    });
	    this.updatePreferences('preferredResolution', resolution);
	    this.updatePreferences('preferredSize', size);
	    this.updatePreferences('preferredScale', scale);
	  },
	  onDrawBBoxClicked: function onDrawBBoxClicked() {
	    var _this2 = this;
	
	    this.mapModel.set('tool', 'bbox');
	    this.close();
	
	    this.listenToOnce(this.mapModel, 'change:tool', function () {
	      _this2.open();
	    });
	  },
	  onSubsetByBoundsChange: function onSubsetByBoundsChange() {
	    var checked = this.$('.subset-by-bounds').is(':checked');
	    this.model.set('subsetByBounds', checked);
	    this.updatePreferences('subsetByBounds', checked);
	  },
	  getPreferences: function getPreferences() {
	    try {
	      return JSON.parse(localStorage.getItem('download-options-view-preferences') || '{}');
	    } catch (error) {
	      return {};
	    }
	  },
	  updatePreferences: function updatePreferences(key, value) {
	    var preferences = this.getPreferences();
	    preferences[key] = value;
	    localStorage.setItem('download-options-view-preferences', JSON.stringify(preferences));
	  },
	  defaultLabelsSet: function defaultLabelsSet() {
	    _underscore2.default.each(this.model.get('availableDownloadFormats'), function (format) {
	      if (typeof format.name === 'undefined' && format.mimeType !== 'undefined') {
	        // eslint-disable-next-line no-param-reassign
	        format.name = format.mimeType;
	      }
	    });
	    _underscore2.default.each(this.model.get('availableProjections'), function (proj) {
	      if (typeof proj.name === 'undefined' && proj.identifier !== 'undefined') {
	        // eslint-disable-next-line no-param-reassign
	        proj.name = proj.identifier;
	      }
	    });
	    _underscore2.default.each(this.model.get('availableInterpolations'), function (interpolation) {
	      if (typeof interpolation.name === 'undefined' && interpolation.identifier !== 'undefined') {
	        // eslint-disable-next-line no-param-reassign
	        interpolation.name = interpolation.identifier;
	      }
	    });
	  },
	  onBBoxInputChange: function onBBoxInputChange() {
	    var bbox = this.$('.show-bbox').map(function (index, elem) {
	      return (0, _jquery2.default)(elem).val();
	    }).get().map(parseFloat);
	
	    if (bbox.reduce(function (prev, current) {
	      return prev && !isNaN(current);
	    }, true)) {
	      this.mapModel.set('drawnArea', null);
	      this.mapModel.set('area', (0, _proj.transformExtent)(bbox, this.mapProjection, 'EPSG:4326'));
	    }
	  },
	  onStartDownloadClicked: function onStartDownloadClicked() {
	    this.onSizeOrResolutionChange();
	    var subsetProj = this.mapModel.get('projection');
	    // get numeric code and parse it into opengis def url
	    if (subsetProj) {
	      subsetProj = subsetProj.slice(subsetProj.lastIndexOf(':') + 1);
	      subsetProj = 'http://www.opengis.net/def/crs/EPSG/0/' + subsetProj;
	    }
	    var options = {
	      format: this.model.get('selectedDownloadFormat'),
	      outputCRS: this.model.get('selectedProjection'),
	      subsetCRS: subsetProj,
	      interpolation: this.model.get('selectedInterpolation')
	    };
	
	    var filtersModel = new _FiltersModel2.default();
	    if (this.model.get('subsetByBounds')) {
	      var bboxSubset = this.bbox;
	      // min-max coordinates can not be the same for subsetting
	      // do not modify the input forms & mapModel filter, only values for subset
	      if (bboxSubset[0] === bboxSubset[2]) {
	        bboxSubset[0] -= 0.001;
	        bboxSubset[2] += 0.001;
	      }
	      if (bboxSubset[1] === bboxSubset[3]) {
	        bboxSubset[1] -= 0.001;
	        bboxSubset[3] += 0.001;
	      }
	      filtersModel.set('area', bboxSubset);
	    }
	
	    switch (this.model.get('scaleMethod')) {
	      case 'resolution':
	        {
	          // size will be computed later per-record
	          options.resolutionX = this.model.get('resolutionX');
	          options.resolutionY = this.model.get('resolutionY');
	          break;
	        }
	      case 'size':
	        options.sizeX = this.model.get('sizeX');
	        options.sizeY = this.model.get('sizeY');
	        options.sizeX = options.sizeX < 1 ? 1 : options.sizeX;
	        options.sizeY = options.sizeY < 1 ? 1 : options.sizeY;
	        break;
	      case 'scale':
	        options.scale = this.model.get('scale');
	        options.scale = options.scale < 0 ? 1 : options.scale;
	        break;
	      default:
	        break;
	    }
	
	    // if EO-WCS, use a timeout
	    var timeout = this.showDownloadOptions ? 500 : 0;
	    this.records.forEach(function (_ref, i) {
	      var _ref2 = _slicedToArray(_ref, 2),
	          recordModel = _ref2[0],
	          searchModel = _ref2[1];
	
	      setTimeout(function () {
	        return (0, _download.downloadRecord)(searchModel.get('layerModel'), filtersModel, recordModel, options);
	      }, i * timeout);
	    });
	  }
	});

/***/ }),
/* 562 */
/***/ (function(module, exports, __webpack_require__) {

	/* WEBPACK VAR INJECTION */(function(Promise) {'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	
	var _backbone = __webpack_require__(11);
	
	var _backbone2 = _interopRequireDefault(_backbone);
	
	var _underscore = __webpack_require__(33);
	
	var _underscore2 = _interopRequireDefault(_underscore);
	
	var _DownloadSelectionView = __webpack_require__(1001);
	
	var _DownloadSelectionView2 = _interopRequireDefault(_DownloadSelectionView);
	
	__webpack_require__(1122);
	
	var _SelectionListView = __webpack_require__(563);
	
	var _SelectionListView2 = _interopRequireDefault(_SelectionListView);
	
	var _download = __webpack_require__(46);
	
	var _Metalink = __webpack_require__(222);
	
	var _Metalink2 = _interopRequireDefault(_Metalink);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var DownloadView = _backbone2.default.CompositeView.extend({
	  template: _DownloadSelectionView2.default,
	  templateHelpers: function templateHelpers() {
	    return {
	      termsAndConditionsUrl: this.termsAndConditionsUrl,
	      downloadEnabled: this.downloadEnabled,
	      selectFilesEnabled: typeof this.onSelectFiles !== 'undefined'
	    };
	  },
	
	  className: 'download-view',
	  childView: _SelectionListView2.default,
	  childViewContainer: '.selection-lists',
	  buildChildView: function buildChildView(child, ChildViewClass) {
	    return new ChildViewClass({
	      model: child,
	      referenceCollection: child.get('downloadSelection'),
	      mapModel: this.mapModel,
	      highlightModel: this.highlightModel,
	      fallbackThumbnailUrl: this.fallbackThumbnailUrl
	    });
	  },
	
	
	  events: {
	    'click .start-download': 'onStartDownloadClicked',
	    'click .download-as-metalink': 'onDownloadAsMetalinkClicked',
	    'click .download-as-url-list': 'onDownloadAsUrlListClicked',
	    'click .select-files': 'onSelectFilesClicked',
	    'click .deselect-all': 'onDeselectAllClicked',
	    'change .terms-and-conditions': 'onTermsAndAndConditionsChange'
	  },
	
	  childEvents: {
	    'collapse:change': 'updateViews',
	    'before:render': 'onChildBeforeRender',
	    render: 'onChildRender'
	  },
	
	  initialize: function initialize(options) {
	    var _this = this;
	
	    this.mapModel = options.mapModel;
	    this.filtersModel = options.filtersModel;
	    this.highlightModel = options.highlightModel;
	    this.termsAndConditionsUrl = options.termsAndConditionsUrl;
	    this.downloadEnabled = options.downloadEnabled;
	    this.fallbackThumbnailUrl = options.fallbackThumbnailUrl;
	
	    this.collection.each(function (searchModel) {
	      _this.listenTo(searchModel.get('downloadSelection'), 'reset update', _this.onDownloadSelectionChange);
	    });
	    this.onSelectFiles = options.onSelectFiles;
	    this.onStartDownload = options.onStartDownload;
	  },
	  onChildBeforeRender: function onChildBeforeRender() {
	    // save the scrolling position for later to get around bug in FF and other
	    // browsers. Prevent additional updates to scrolling position.
	    if (typeof this.savedScrollTop === 'undefined') {
	      this.savedScrollTop = this.$('.selection-lists')[0].scrollTop;
	    }
	  },
	  onChildRender: function onChildRender() {
	    var _this2 = this;
	
	    if (typeof this.savedScrollTop !== 'undefined') {
	      setTimeout(function () {
	        _this2.$('.selection-lists').scrollTop(_this2.savedScrollTop);
	        _this2.savedScrollTop = undefined;
	      });
	    }
	  },
	  onShown: function onShown() {
	    this.updateViews();
	  },
	  updateViews: function updateViews() {
	    // handle showing of only those products, which are in current scroll area
	    // should be triggered when download list rendered, when scrolling and when download collection changes and basket tab is visible
	    var elem = this.$('.selection-lists')[0];
	    var scrollTop = elem.scrollTop;
	    var height = elem.clientHeight;
	    var sizeAccum = 0;
	    for (var i = 0; i < this.children.length; ++i) {
	      var view = this.children.findByIndex(i);
	      var headerSize = 70;
	      var footerSize = 0;
	      var itemHeight = 153;
	      view.setSlice(sizeAccum - scrollTop, height, view, headerSize, footerSize, itemHeight);
	      sizeAccum += view.$el.outerHeight(true);
	    }
	    elem.scrollTop = scrollTop;
	  },
	  onRender: function onRender() {
	    var _this3 = this;
	
	    this.$('.selection-lists').on('scroll resize', _underscore2.default.throttle(function () {
	      _this3.updateViews.apply(_this3, arguments);
	    }, 1000 / 60));
	  },
	  onBeforeRender: function onBeforeRender() {
	    this.$('.selection-lists').off('scroll resize');
	  },
	  onAttach: function onAttach() {
	    this.triggerMethod('update:status', this._infoBadge());
	  },
	  onSelectFilesClicked: function onSelectFilesClicked() {
	    this.onSelectFiles();
	  },
	  onStartDownloadClicked: function onStartDownloadClicked() {
	    this.onStartDownload();
	  },
	  onDownloadAsMetalinkClicked: function onDownloadAsMetalinkClicked() {
	    this._getDownloadInfos().then(function (items) {
	      var content = (0, _Metalink2.default)({
	        date: new Date().toISOString(),
	        items: items
	      });
	      content = content.replace(/[\n]/g, '\r\n');
	      (0, _download.downloadCustom)('download-files.meta4', 'application/metalink4+xml', content);
	    });
	  },
	  onDownloadAsUrlListClicked: function onDownloadAsUrlListClicked() {
	    this._getDownloadInfos().then(function (infos) {
	      (0, _download.downloadCustom)('url-list.txt', 'text/plain', infos.map(function (info) {
	        return info.href;
	      }).join('\r\n'));
	    });
	  },
	  onDeselectAllClicked: function onDeselectAllClicked() {
	    this.collection.each(function (searchModel) {
	      return searchModel.get('downloadSelection').reset([]);
	    });
	  },
	  onTermsAndAndConditionsChange: function onTermsAndAndConditionsChange() {
	    this.hasAcceptedTerms = this.$('.terms-and-conditions').is(':checked');
	    this.checkButtons();
	  },
	  onDownloadSelectionChange: function onDownloadSelectionChange() {
	    this.checkButtons();
	    this.updateViews();
	  },
	  checkButtons: function checkButtons() {
	    var totalCountNotS3 = this.collection.filter(function (searchModel) {
	      return searchModel.get('layerModel').get('download.protocol') !== 'S3';
	    }).reduce(function (count, searchModel) {
	      return count + searchModel.get('downloadSelection').length;
	    }, 0);
	
	    var totalCount = this.collection.reduce(function (count, searchModel) {
	      return count + searchModel.get('downloadSelection').length;
	    }, 0);
	
	    var fullDownloadEnabled = totalCountNotS3 > 0 && this.downloadEnabled;
	    var textDownloadEnabled = totalCount > 0 && this.downloadEnabled;
	    if (this.termsAndConditionsUrl) {
	      fullDownloadEnabled = fullDownloadEnabled && this.hasAcceptedTerms;
	      textDownloadEnabled = textDownloadEnabled && this.hasAcceptedTerms;
	    }
	
	    this.$('.start-download').prop('disabled', !fullDownloadEnabled);
	
	    this.$('.dropdown-toggle').prop('disabled', !textDownloadEnabled);
	
	    this.$('.select-files').prop('disabled', !textDownloadEnabled);
	
	    this.$('.deselect-all').prop('disabled', totalCount === 0);
	
	    this.triggerMethod('update:status', this._infoBadge(totalCount));
	  },
	  _infoBadge: function _infoBadge() {
	    var totalCount = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
	
	    return '<span>(' + totalCount + ')</span>';
	  },
	  _getDownloadInfos: function _getDownloadInfos(options) {
	    var _this4 = this;
	
	    function flatten(arr) {
	      return arr.reduce(function (acc, val) {
	        return acc.concat(val);
	      }, []);
	    }
	
	    var chunks = this.collection.map(function (searchModel) {
	      return searchModel.get('downloadSelection').map(function (recordModel) {
	        return (0, _download.getDownloadInfos)(searchModel.get('layerModel'), _this4.filtersModel, recordModel, options);
	      });
	    });
	
	    return Promise.all(flatten(chunks)).then(function (received) {
	      return flatten(received);
	    });
	  }
	});
	
	exports.default = DownloadView;
	/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(27)))

/***/ }),
/* 563 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	
	var _backbone = __webpack_require__(11);
	
	var _backbone2 = _interopRequireDefault(_backbone);
	
	var _backbone3 = __webpack_require__(24);
	
	var _backbone4 = _interopRequireDefault(_backbone3);
	
	var _SelectionListView = __webpack_require__(1004);
	
	var _SelectionListView2 = _interopRequireDefault(_SelectionListView);
	
	__webpack_require__(1124);
	
	var _SelectionListViewEmpty = __webpack_require__(1005);
	
	var _SelectionListViewEmpty2 = _interopRequireDefault(_SelectionListViewEmpty);
	
	var _SelectionListItemView = __webpack_require__(244);
	
	var _SelectionListItemView2 = _interopRequireDefault(_SelectionListItemView);
	
	var _utils = __webpack_require__(169);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var EmptyView = _backbone2.default.ItemView.extend({
	  template: _SelectionListViewEmpty2.default
	});
	
	var SelectionListView = _backbone2.default.CompositeView.extend({
	  template: _SelectionListView2.default,
	  templateHelpers: function templateHelpers() {
	    var layerModel = this.model.get('layerModel');
	    return {
	      layerName: layerModel.get('displayName'),
	      layerId: layerModel.get('id'),
	      enableFullResolutionDownload: layerModel.get('fullResolution.protocol'),
	      enableProcessing: layerModel.get('processing.url')
	    };
	  },
	
	  childView: _SelectionListItemView2.default,
	  childViewContainer: '.selection-items',
	  buildChildView: function buildChildView(child, ChildViewClass) {
	    return new ChildViewClass({
	      model: child,
	      highlightModel: this.highlightModel,
	      fallbackThumbnailUrl: this.fallbackThumbnailUrl,
	      collection: this.collection
	    });
	  },
	
	  emptyView: EmptyView,
	
	  constructor: function constructor(options) {
	    var collection = new _backbone4.default.Collection();
	    collection.searchModel = options.searchModel;
	    _backbone2.default.CompositeView.prototype.constructor.call(this, Object.assign({}, options, {
	      collection: collection
	    }));
	  },
	
	  events: {
	    'click .btn-download-full-res': 'onDownloadFullResolutionClick',
	    'click .btn-processing': 'onProcessingClick'
	  },
	
	  modelEvents: {
	    'change:automaticSearch': 'onAutomaticSearchChange'
	  },
	
	  initialize: function initialize(options) {
	    this.highlightModel = options.highlightModel;
	    this.mapModel = options.mapModel;
	    this.fallbackThumbnailUrl = options.fallbackThumbnailUrl;
	    this.referenceCollection = options.referenceCollection;
	    this.setSlice = _utils.setSlice;
	  },
	  onDownloadFullResolutionClick: function onDownloadFullResolutionClick() {
	    var layerModel = this.model.get('layerModel');
	    layerModel.trigger('download-full-resolution', layerModel);
	  },
	  onProcessingClick: function onProcessingClick() {
	    this.model.trigger('start-processing', this.model);
	  },
	  onAutomaticSearchChange: function onAutomaticSearchChange() {
	    this.$('.btn-download-full-res').prop('disabled', !this.model.get('automaticSearch'));
	    this.$('.btn-processing').prop('disabled', !this.model.get('automaticSearch'));
	  }
	});
	
	exports.default = SelectionListView;

/***/ }),
/* 564 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	
	var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
	
	exports.sendProcessingRequest = sendProcessingRequest;
	
	var _util = __webpack_require__(120);
	
	var _utils = __webpack_require__(141);
	
	/*
	{
	  "collectionName": "S2_MSI_L1C_RE",
	  "productIdentifiers": [],
	  "dateRange": {
	    "startTime": "2018-02-18T00:00:00Z",
	    "endTime": "2018-02-28T00:00:00Z"
	  },
	  "regionGeometry": {
	    "type": "Feature",
	    "geometry": {
	      "type": "Polygon",
	      "coordinates": [[[11.343827077179556,47.961401004496764],[11.807999440460806,47.961401004496764],[11.807999440460806,48.30609704941864],[11.343827077179556,48.30609704941864],[11.343827077179556,47.961401004496764]]]
	    }
	  }
	}
	*/
	
	function sendProcessingRequest(searchModel, mapModel) {
	  var layerModel = searchModel.get('layerModel');
	  var downloadSelection = searchModel.get('downloadSelection');
	
	  var _mapModel$get = mapModel.get('time'),
	      _mapModel$get2 = _slicedToArray(_mapModel$get, 2),
	      start = _mapModel$get2[0],
	      end = _mapModel$get2[1];
	
	  var body = {
	    collectionName: layerModel.get('id'),
	    productIdentifiers: downloadSelection.map(function (record) {
	      return record.get('id');
	    }),
	    dateRange: {
	      startTime: (0, _util.getISODateTimeString)(start),
	      endTime: (0, _util.getISODateTimeString)(end)
	    }
	  };
	
	  var area = mapModel.get('area');
	  if (area) {
	    body.regionGeometry = Array.isArray(area) ? (0, _utils.toNormalizedFeature)(area)[0] : area;
	  }
	
	  if (layerModel.get('processing.method') == 'fetch') {
	    fetch(new Request(layerModel.get('processing.url'), {
	      method: 'POST',
	      body: JSON.stringify(body),
	      credentials: 'same-origin'
	    }));
	  } else {
	    var form = document.createElement('form');
	    var url = layerModel.get('processing.url');
	
	    form.setAttribute('method', 'post');
	    form.setAttribute("target", "_blank");
	    form.setAttribute('action', url);
	
	    var input = document.createElement('input');
	    input.setAttribute('name', 'request');
	    input.setAttribute('value', JSON.stringify(body));
	    form.appendChild(input);
	    document.body.appendChild(form);
	    form.submit();
	  }
	}

/***/ }),
/* 565 */
/***/ (function(module, exports, __webpack_require__) {

	/* WEBPACK VAR INJECTION */(function(Promise) {'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	
	var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
	
	exports.search = search;
	exports.getParameters = getParameters;
	
	var _kvp = __webpack_require__(1077);
	
	var _parse = __webpack_require__(1078);
	
	var _parse2 = __webpack_require__(371);
	
	(0, _parse2.pushParseFunctions)(_parse.parseFunctions);
	
	function convertFilters(filtersModel, mapModel, options) {
	  var parameters = {
	    sections: ['CoverageDescriptions'],
	    count: options.itemsPerPage
	  };
	
	  var time = filtersModel.get('time') || mapModel.get('time');
	  if (time) {
	    if (Array.isArray(time)) {
	      parameters.subsetTime = time.map(function (t) {
	        return t.toISOString().substring(0, 19) + 'Z';
	      });
	    } else {
	      parameters.subsetTime = time.toISOString().substring(0, 19) + 'Z';
	    }
	  }
	
	  var area = filtersModel.get('area');
	  if (area) {
	    if (Array.isArray(area)) {
	      parameters.bbox = area;
	    } else if ((typeof array === 'undefined' ? 'undefined' : _typeof(array)) === 'object') {
	      // TODO: points
	    }
	  } else if (mapModel) {
	    // use the maps BBox by default
	    parameters.bbox = mapModel.get('bbox');
	  }
	  return parameters;
	}
	
	function prepareRecords(records) {
	  return records.map(function (coverage) {
	    var bounds = coverage.bounds;
	    var bbox = [bounds.lower[1], bounds.lower[0], bounds.upper[1], bounds.upper[0]];
	
	    var geometry = {
	      type: 'MultiPolygon',
	      coordinates: [[[]]]
	    };
	    for (var i = 0; i < coverage.footprint.length; i += 2) {
	      var lon = coverage.footprint[i + 1];
	      var lat = coverage.footprint[i];
	      geometry.coordinates[0][0].push([lon, lat]);
	    }
	
	    return {
	      id: coverage.coverageId,
	      bbox: bbox,
	      properties: {
	        time: [new Date(coverage.timePeriod[0]), new Date(coverage.timePeriod[1])]
	      },
	      geometry: geometry
	    };
	  });
	}
	
	function search(layerModel, filtersModel, mapModel) {
	  var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
	
	  var parameters = convertFilters(filtersModel, mapModel, options);
	  var url = (0, _kvp.describeEOCoverageSetURL)(layerModel.get('search.url'), layerModel.get('search.id'), parameters);
	
	  return fetch(url).then(function (response) {
	    return response.text();
	  }).then(function (response) {
	    var eoCoverageSet = (0, _parse2.parse)(response, { throwOnException: true });
	    var coverageDescriptions = eoCoverageSet.coverageDescriptions || [];
	    var records = prepareRecords(coverageDescriptions);
	    return {
	      itemsPerPage: parseInt(eoCoverageSet.numberReturned, 10),
	      totalResults: parseInt(eoCoverageSet.numberMatched, 10),
	      records: records
	    };
	  });
	}
	
	function getParameters() {
	  return Promise.resolve([]);
	}
	/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(27)))

/***/ }),
/* 566 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	
	var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
	
	var _backbone = __webpack_require__(24);
	
	var _backbone2 = _interopRequireDefault(_backbone);
	
	var _debounce = __webpack_require__(351);
	
	var _debounce2 = _interopRequireDefault(_debounce);
	
	var _ = __webpack_require__(168);
	
	var _OpenSearchCollection = __webpack_require__(535);
	
	var _OpenSearchCollection2 = _interopRequireDefault(_OpenSearchCollection);
	
	var _EOWCSCollection = __webpack_require__(534);
	
	var _EOWCSCollection2 = _interopRequireDefault(_EOWCSCollection);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
	
	function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
	
	function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
	
	/**
	 *
	 *
	 * @memberof search/models
	 */
	
	var SearchModel = function (_Backbone$Model) {
	  _inherits(SearchModel, _Backbone$Model);
	
	  function SearchModel() {
	    _classCallCheck(this, SearchModel);
	
	    return _possibleConstructorReturn(this, (SearchModel.__proto__ || Object.getPrototypeOf(SearchModel)).apply(this, arguments));
	  }
	
	  _createClass(SearchModel, [{
	    key: 'defaults',
	    value: function defaults() {
	      return {
	        automaticSearch: false,
	        defaultPageSize: null, // let the catalog decide if not specified in client
	        maxCount: 150,
	        loadMore: 150,
	        totalResults: undefined,
	        isSearching: false,
	        isCancelled: false,
	        isCountInitiallyDisabled: true,
	        hasError: false,
	        errorMessage: null,
	
	        hasChanges: false,
	
	        downloadSelection: new _backbone2.default.Collection(),
	
	        hasLoaded: 0,
	        debounceTime: 250,
	        searchRequest: null,
	        searchEnabled: true
	      };
	    }
	  }, {
	    key: 'initialize',
	    value: function initialize() {
	      var layerModel = this.get('layerModel');
	      switch (layerModel.get('search.protocol')) {
	        case 'EO-WCS':
	          this.set('results', new _EOWCSCollection2.default());
	          break;
	        case 'OpenSearch':
	          this.set('results', new _OpenSearchCollection2.default());
	          break;
	        default:
	          throw new Error('Unsupported search protocol \'' + layerModel.get('search.protocol') + '\'.');
	      }
	
	      // back reference from results to collection
	      this.get('results').searchModel = this;
	      this.get('downloadSelection').searchModel = this;
	
	      this.listenTo(this, 'change:debounceTime', this.onDebounceTimeChange);
	      this.listenTo(this, 'change:automaticSearch', this.onAutomaticSearchChange);
	
	      this.listenTo(layerModel, 'change:display.visible', this.onLayerVisibleChange);
	      this.listenTo(this.get('results'), 'reset', this.onSearchCollectionReset);
	      this.listenTo(this.get('filtersModel'), 'change', this.onFiltersModelChange);
	      this.listenTo(this.get('mapModel'), 'change:bbox', this.onMapBBOXChange);
	      this.listenTo(this.get('mapModel'), 'change:area', this.onMapAreaChange);
	      this.listenTo(this.get('mapModel'), 'change:time', this.onMapTimeChange);
	      this.listenTo(this.get('mapModel'), 'change:extendedTime', this.onMapExtendedTimeChange);
	      this.listenTo(this.get('mapModel'), 'change:tool', this.onMapToolChange);
	      this.onDebounceTimeChange();
	      this.set('automaticSearch', layerModel.get('display.visible') && this.get('searchEnabled'));
	      this.set('prevAutomaticSearch', this.get('searchEnabled'));
	      if (this.get('automaticSearch')) {
	        this.set('isCountInitiallyDisabled', false);
	      }
	    }
	  }, {
	    key: 'search',
	    value: function search() {
	      var layerModel = this.get('layerModel');
	      var filtersModel = this.get('filtersModel');
	      var mapModel = this.get('mapModel');
	
	      this.doSearchDebounced(layerModel, filtersModel, mapModel);
	    }
	  }, {
	    key: 'searchMore',
	    value: function searchMore() {
	      var layerModel = this.get('layerModel');
	      var filtersModel = this.get('filtersModel');
	      var mapModel = this.get('mapModel');
	      // if loading more, total results information can be used
	      this.doSearchDebounced(layerModel, filtersModel, mapModel, false, this.get('hasLoaded'), this.get('totalResults'));
	    }
	  }, {
	    key: 'doSearch',
	    value: function doSearch(layerModel, filtersModel, mapModel) {
	      var reset = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;
	
	      var _this2 = this;
	
	      var startIndex = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0;
	      var totalResults = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : undefined;
	
	      this.cancelSearch();
	      if (reset) {
	        this.set({
	          serverItemsPerPage: 0
	        });
	      }
	      var searchOptions = {
	        itemsPerPage: this.get('serverItemsPerPage') || this.get('defaultPageSize'),
	        maxCount: startIndex === 0 ? this.get('maxCount') : this.get('loadMore'),
	        startIndex: startIndex,
	        totalResults: totalResults
	      };
	      var request = (0, _.searchAllRecords)(layerModel, filtersModel, mapModel, searchOptions);
	      this.prevRequest = request;
	      if (reset) {
	        this.set({
	          hasLoaded: 0,
	          totalResults: 0
	        });
	        this.get('results').reset([]);
	      }
	      this.set({
	        isSearching: true,
	        isCancelled: false,
	        hasError: false,
	        errorMessage: null
	      });
	
	      // return this.prevRequest.then((result) => {
	      //   this.set({
	      //     totalResults: result.totalResults,
	      //     startIndex: result.startIndex,
	      //     itemsPerPage: result.itemsPerPage,
	      //     isSearching: false,
	      //     hasLoaded: result.records.length,
	      //   });
	      //   this.get('results').reset(result.records);
	      // }).catch((error) => {
	      //   this.set({
	      //     isSearching: false,
	      //     hasError: true,
	      //   });
	      //   this.get('results').reset([]);
	      //   this.trigger('search:error', error);
	      // });
	      var prevHasLoaded = reset ? 0 : this.get('hasLoaded');
	
	      return this.prevRequest.on('progress', function (page) {
	        var hasLoaded = _this2.get('hasLoaded');
	        _this2.get('results').add(page.records);
	        _this2.set({
	          totalResults: page.totalResults,
	          startIndex: page.startIndex,
	          itemsPerPage: page.itemsPerPage,
	          hasLoaded: hasLoaded + page.records.length
	        });
	        // when load more used, serverItemsPerPage needs to be known to adjust pageSize in eoxc, because OpenSearch worker needs to know for sure the lower value in advance, as he is not checking anymore - fullasync
	        // serverItemsPerPage is cleared before each fresh sync search to go around corner case that initial area/time combination fetches less totalRecords than max serverItemsPerPage
	        if (!_this2.get('serverItemsPerPage')) {
	          _this2.set('serverItemsPerPage', page.itemsPerPage);
	          // to update search request url based on first server response
	          (0, _.getSearchRequest)(layerModel, filtersModel, mapModel, {
	            itemsPerPage: page.itemsPerPage,
	            maxCount: _this2.get('maxCount'),
	            startIndex: page.startIndex,
	            totalResults: totalResults
	          }).then(function (searchRequest) {
	            return _this2.set('searchRequest', searchRequest);
	          });
	        }
	      }).on('success', function (result) {
	        _this2.set({
	          totalResults: result.totalResults,
	          startIndex: result.startIndex,
	          itemsPerPage: result.itemsPerPage,
	          isSearching: false,
	          hasLoaded: prevHasLoaded + result.records.length
	        });
	        // this is set before?
	        // this.get('results').reset(result.records);
	      }).on('error', function (error) {
	        _this2.set({
	          isSearching: false,
	          hasError: true,
	          errorMessage: error.toString()
	        });
	        _this2.get('results').reset([]);
	        _this2.trigger('search:error', error);
	      });
	    }
	  }, {
	    key: 'onDebounceTimeChange',
	    value: function onDebounceTimeChange() {
	      var _this3 = this;
	
	      this.doSearchDebounced = (0, _debounce2.default)(function () {
	        return _this3.doSearch.apply(_this3, arguments);
	      }, this.get('debounceTime'));
	    }
	  }, {
	    key: 'onAutomaticSearchChange',
	    value: function onAutomaticSearchChange() {
	      this.set('isCountInitiallyDisabled', false);
	      if (this.get('automaticSearch') && (this.get('hasChanges') || this.get('hasError') || this.get('isCancelled'))) {
	        this.search();
	        this.set('hasChanges', false);
	      } else {
	        this.cancelSearch();
	      }
	    }
	  }, {
	    key: 'onLayerVisibleChange',
	    value: function onLayerVisibleChange() {
	      var layerModel = this.get('layerModel');
	      if (layerModel.get('display.visible')) {
	        this.set('automaticSearch', this.get('prevAutomaticSearch'));
	      } else {
	        this.set('prevAutomaticSearch', this.get('automaticSearch'));
	        this.set('automaticSearch', false);
	      }
	    }
	  }, {
	    key: 'onSearchCollectionReset',
	    value: function onSearchCollectionReset() {
	      this.trigger('search:complete', this);
	    }
	  }, {
	    key: 'onFiltersModelChange',
	    value: function onFiltersModelChange() {
	      if (this.get('automaticSearch')) {
	        this.search();
	      } else {
	        this.set('hasChanges', true);
	      }
	    }
	  }, {
	    key: 'onMapBBOXChange',
	    value: function onMapBBOXChange() {
	      if (!this.get('mapModel').get('area')) {
	        if (this.get('automaticSearch') && !this.get('mapModel').get('tool')) {
	          this.search();
	        } else {
	          this.set('hasChanges', true);
	        }
	      }
	    }
	  }, {
	    key: 'onMapAreaChange',
	    value: function onMapAreaChange() {
	      if (this.get('automaticSearch') && !this.get('mapModel').get('tool')) {
	        this.search();
	      }
	    }
	  }, {
	    key: 'onMapTimeChange',
	    value: function onMapTimeChange() {
	      if (this.get('automaticSearch') && !this.get('mapModel').get('extendedTime') && !this.get('mapModel').get('tool')) {
	        this.search();
	      }
	    }
	  }, {
	    key: 'onMapExtendedTimeChange',
	    value: function onMapExtendedTimeChange() {
	      if (this.get('automaticSearch')) {
	        this.search();
	      } else {
	        this.set('hasChanges', true);
	      }
	    }
	  }, {
	    key: 'onMapToolChange',
	    value: function onMapToolChange() {
	      if (this.get('automaticSearch') && this.get('hasChanges') && !this.get('mapModel').get('tool')) {
	        this.search();
	        this.set('hasChanges', false);
	      }
	    }
	  }, {
	    key: 'triggerShowInfo',
	    value: function triggerShowInfo(records) {
	      this.trigger('showInfo', Array.isArray(records) ? records : [records]);
	    }
	  }, {
	    key: 'stopSearching',
	    value: function stopSearching() {
	      this.set('automaticSearch', false);
	    }
	  }, {
	    key: 'continueSearching',
	    value: function continueSearching() {
	      this.set('automaticSearch', true);
	    }
	  }, {
	    key: 'cancelSearch',
	    value: function cancelSearch() {
	      if (this.prevRequest && this.get('isSearching') && !this.get('isCancelled')) {
	        this.set({
	          isSearching: false,
	          isCancelled: true
	        });
	        this.prevRequest.emit('cancel');
	      }
	    }
	  }]);
	
	  return SearchModel;
	}(_backbone2.default.Model);
	
	exports.default = SearchModel;

/***/ }),
/* 567 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	
	var _backbone = __webpack_require__(11);
	
	var _backbone2 = _interopRequireDefault(_backbone);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var template = __webpack_require__(1009);
	__webpack_require__(1125);
	
	// eslint-disable-next-line max-len
	var RecordDetailsView = _backbone2.default.LayoutView.extend( /** @lends search/views/layers.RecordDetailsView# */{
	  template: template,
	
	  className: 'record-details-view',
	
	  regions: {
	    map: '.record-details-map'
	  },
	
	  templateHelpers: function templateHelpers() {
	    return {
	      thumbnailUrl: this.model.getThumbnailUrl(),
	      browseUrl: this.model.getBrowseUrl(),
	      description: this.model.getDescription(this.descriptionTemplate),
	      title: this.model.getTitle(),
	      headerText: this.headerText
	    };
	  },
	  initialize: function initialize(options) {
	    this.mapView = options.mapView;
	    this.mapModel = options.mapModel;
	    this.descriptionTemplate = options.descriptionTemplate;
	    this.headerText = options.headerText;
	  },
	  onAttach: function onAttach() {
	    this.showChildView('map', this.mapView);
	    this.mapModel.show(this.model.attributes);
	  }
	});
	
	exports.default = RecordDetailsView;

/***/ }),
/* 568 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	
	var _RecordItemView = __webpack_require__(167);
	
	var _RecordItemView2 = _interopRequireDefault(_RecordItemView);
	
	var _download = __webpack_require__(46);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	// eslint-disable-next-line max-len
	var SearchResultItemView = _RecordItemView2.default.extend( /** @lends search/views/layers.SearchResultItemView# */{
	  className: 'result-list-item record-item',
	
	  events: Object.assign({}, _RecordItemView2.default.prototype.events, {
	    'click a': 'onChecked'
	  }),
	
	  initialize: function initialize(options) {
	    var searchModel = options.searchModel;
	    var layerModel = searchModel.get('layerModel');
	    this.layerModel = layerModel;
	    _RecordItemView2.default.prototype.initialize.call(this, Object.assign({}, options, {
	      thumbnailUrlPattern: layerModel.get('search.thumbnailUrlPattern')
	    }));
	    var downloadSelectionCollection = searchModel.get('downloadSelection');
	    this.listenTo(downloadSelectionCollection, 'reset update', this.onSelectedForDownloadChange);
	  },
	  onRender: function onRender() {
	    _RecordItemView2.default.prototype.onRender.call(this);
	    this.onSelectedForDownloadChange();
	  },
	  onChecked: function onChecked(event) {
	    event.preventDefault();
	    if ((0, _download.isRecordDownloadable)(this.layerModel, this.model)) {
	      this.model.selectForDownload(!this.model.isSelectedForDownload());
	    }
	  },
	  onSelectedForDownloadChange: function onSelectedForDownloadChange() {
	    this.$el.toggleClass('selected-for-download', this.model.isSelectedForDownload());
	  }
	});
	
	exports.default = SearchResultItemView;

/***/ }),
/* 569 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	
	var _backbone = __webpack_require__(24);
	
	var _backbone2 = _interopRequireDefault(_backbone);
	
	var _backbone3 = __webpack_require__(11);
	
	var _backbone4 = _interopRequireDefault(_backbone3);
	
	__webpack_require__(1060);
	
	var _SearchResultListView = __webpack_require__(1010);
	
	var _SearchResultListView2 = _interopRequireDefault(_SearchResultListView);
	
	__webpack_require__(1126);
	
	var _SearchResultItemView = __webpack_require__(568);
	
	var _SearchResultItemView2 = _interopRequireDefault(_SearchResultItemView);
	
	var _utils = __webpack_require__(169);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	// eslint-disable-next-line max-len
	var SearchResultListView = _backbone4.default.CompositeView.extend( /** @lends search/views/layers.SearchResultListView# */{
	  template: _SearchResultListView2.default,
	  templateHelpers: function templateHelpers() {
	    var hasMore = this.hasMore();
	    return {
	      layerName: this.model.get('layerModel').get('displayName'),
	      layerId: this.model.cid,
	      isClosed: this.isClosed,
	      hasMore: hasMore,
	      countLoadMore: hasMore ? Math.min(this.model.get('totalResults') - this.model.get('hasLoaded'), this.model.get('loadMore')) : 0,
	      hasMoreOrIsSearching: hasMore || this.model.get('isSearching')
	    };
	  },
	
	  tagName: 'ul',
	  className: 'search-result-list list-unstyled list-inline',
	
	  childView: _SearchResultItemView2.default,
	  childViewContainer: 'ul.result-list',
	
	  buildChildView: function buildChildView(child, ChildViewClass) {
	    return new ChildViewClass({
	      model: child,
	      searchModel: this.model,
	      highlightModel: this.highlightModel,
	      fallbackThumbnailUrl: this.fallbackThumbnailUrl
	    });
	  },
	
	
	  events: {
	    'click .btn-load-more': 'onLoadMoreClicked',
	    'shown.bs.collapse': 'onShown',
	    'hidden.bs.collapse': 'onHidden'
	  },
	
	  childEvents: {
	    'item:clicked': 'onItemClicked',
	    'item:info': 'onItemInfo',
	    'item:hover': 'onItemHover',
	    'item:hover:end': 'onItemHoverEnd'
	  },
	
	  constructor: function constructor(options) {
	    var collection = new _backbone2.default.Collection();
	    collection.searchModel = options.searchModel;
	    _backbone4.default.CompositeView.prototype.constructor.call(this, Object.assign({}, options, {
	      collection: collection
	    }));
	  },
	  initialize: function initialize(options) {
	    this.searchModel = options.searchModel;
	    this.highlightModel = options.highlightModel;
	    this.downloadSelectionCollection = options.downloadSelectionCollection;
	    this.fallbackThumbnailUrl = options.fallbackThumbnailUrl;
	    this.isClosed = false;
	
	    this.setSlice = _utils.setSlice;
	    this.referenceCollection = options.referenceCollection;
	
	    this.listenTo(this.model, 'change', this.render, this);
	  },
	  onLoadMoreClicked: function onLoadMoreClicked() {
	    this.model.searchMore();
	  },
	  onShown: function onShown() {
	    this.isClosed = false;
	    this.triggerMethod('collapse:change');
	  },
	  onHidden: function onHidden() {
	    this.isClosed = true;
	    this.triggerMethod('collapse:change');
	  },
	  onItemClicked: function onItemClicked(childView) {
	    this.trigger('item:clicked', childView.model);
	  },
	  onItemInfo: function onItemInfo(childView) {
	    this.trigger('item:info', {
	      record: childView.model, searchModel: this.searchModel
	    });
	  },
	  onItemHover: function onItemHover(childView) {
	    this.highlightModel.highlight(childView.model.attributes);
	  },
	  onItemHoverEnd: function onItemHoverEnd(childView) {
	    this.highlightModel.unHighlight(childView.model.attributes);
	  },
	  hasMore: function hasMore() {
	    if (this.model.get('hasError')) {
	      return false;
	    }
	    var totalResults = this.model.get('totalResults');
	    var hasLoaded = this.model.get('hasLoaded');
	    return typeof totalResults !== 'undefined' && typeof hasLoaded !== 'undefined' ? totalResults > hasLoaded : false;
	  }
	});
	
	exports.default = SearchResultListView;

/***/ }),
/* 570 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	
	var _backbone = __webpack_require__(11);
	
	var _backbone2 = _interopRequireDefault(_backbone);
	
	var _underscore = __webpack_require__(33);
	
	var _underscore2 = _interopRequireDefault(_underscore);
	
	var _jquery = __webpack_require__(12);
	
	var _jquery2 = _interopRequireDefault(_jquery);
	
	var _download = __webpack_require__(46);
	
	var _SearchResultListView = __webpack_require__(569);
	
	var _SearchResultListView2 = _interopRequireDefault(_SearchResultListView);
	
	__webpack_require__(1127);
	
	var _SearchResultView = __webpack_require__(1011);
	
	var _SearchResultView2 = _interopRequireDefault(_SearchResultView);
	
	var _NoLayerSelected = __webpack_require__(1007);
	
	var _NoLayerSelected2 = _interopRequireDefault(_NoLayerSelected);
	
	var _NoLayersAvailable = __webpack_require__(1008);
	
	var _NoLayersAvailable2 = _interopRequireDefault(_NoLayersAvailable);
	
	var _NLayersSelected = __webpack_require__(1006);
	
	var _NLayersSelected2 = _interopRequireDefault(_NLayersSelected);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	// eslint-disable-next-line max-len
	var SearchResultView = _backbone2.default.CompositeView.extend( /** @lends search/views/layers.SearchResultView# */{
	  template: _SearchResultView2.default,
	  templateHelpers: function templateHelpers() {
	    return {
	      layers: this.collection.map(function (model) {
	        return Object.assign(model.toJSON(), model.get('layerModel').toJSON());
	      })
	    };
	  },
	
	  className: 'search-result-view',
	
	  childView: _SearchResultListView2.default,
	  childViewContainer: '.result-contents',
	
	  buildChildView: function buildChildView(child, ChildViewClass) {
	    return new ChildViewClass({
	      model: child,
	      referenceCollection: child.get('results'),
	      highlightModel: this.highlightModel,
	      fallbackThumbnailUrl: this.fallbackThumbnailUrl
	    });
	  },
	
	
	  events: {
	    'change input[data-layer]': 'onLayerSelectionChange',
	    'click .select-all': 'onSelectAllClick'
	  },
	
	  childEvents: {
	    'collapse:change': 'updateViews',
	    'before:render': 'onChildBeforeRender',
	    render: 'onChildRender'
	  },
	
	  onChildBeforeRender: function onChildBeforeRender() {
	    // save the scrolling position for later to get around bug in FF and other
	    // browsers. Prevent additional updates to scrolling position.
	    if (typeof this.savedScrollTop === 'undefined') {
	      this.savedScrollTop = this.$('.result-contents')[0].scrollTop;
	    }
	  },
	  onChildRender: function onChildRender() {
	    var _this = this;
	
	    if (typeof this.savedScrollTop !== 'undefined') {
	      setTimeout(function () {
	        _this.$('.result-contents').scrollTop(_this.savedScrollTop);
	        _this.savedScrollTop = undefined;
	      });
	    }
	  },
	  initialize: function initialize(options) {
	    var _this2 = this;
	
	    this.filtersModel = options.filtersModel;
	    this.highlightModel = options.highlightModel;
	    this.fallbackThumbnailUrl = options.fallbackThumbnailUrl;
	
	    this.listenTo(this.collection, 'change', this.onSearchModelsChange);
	
	    this.collection.each(function (searchModel) {
	      _this2.listenTo(searchModel.get('layerModel'), 'change:display.visible', function (layerModel) {
	        var $checkbox = _this2.$('[data-layer="' + layerModel.get('id') + '"]');
	        if (layerModel.get('display.visible')) {
	          $checkbox.closest('label').show();
	          $checkbox.prop('checked', true);
	        } else {
	          $checkbox.closest('label').hide();
	        }
	        _this2.render();
	        _this2.onSearchModelsChange();
	      });
	
	      _this2.listenTo(searchModel.get('results'), 'reset add', _this2.onResultsChange);
	    });
	  },
	  filter: function filter(model) {
	    return model.get('automaticSearch') && model.get('layerModel').get('display.visible');
	  },
	  onAttach: function onAttach() {
	    this.onLayerSelectionChange();
	  },
	  onShown: function onShown() {
	    this.updateViews();
	  },
	  onBeforeRender: function onBeforeRender() {
	    this.$('.result-contents').off('scroll resize');
	  },
	  onRender: function onRender() {
	    var _this3 = this;
	
	    this.$('.result-contents').on('scroll resize', _underscore2.default.throttle(function () {
	      _this3.updateViews.apply(_this3, arguments);
	    }, 1000 / 60));
	  },
	  onResultsChange: function onResultsChange() {
	    var downloadableCount = this.collection.filter(function (searchModel) {
	      return searchModel.get('layerModel').get('display.visible');
	    }).map(function (searchModel) {
	      return searchModel.get('results').filter(function (recordModel) {
	        return (0, _download.isRecordDownloadable)(searchModel.get('layerModel'), recordModel);
	      }).length;
	    }).reduce(function (count, modelCount) {
	      return count + modelCount;
	    }, 0);
	
	    this.$('.select-all').prop('disabled', downloadableCount === 0);
	  },
	  updateViews: function updateViews() {
	    var elem = this.$('.result-contents')[0];
	    var scrollTop = elem.scrollTop;
	    var height = elem.clientHeight;
	    var sizeAccum = 0;
	    for (var i = 0; i < this.children.length; ++i) {
	      var view = this.children.findByIndex(i);
	      view.setSlice(sizeAccum - scrollTop, height, view, 57, 0, 153);
	      sizeAccum += view.$el.outerHeight(true);
	    }
	    elem.scrollTop = scrollTop;
	  },
	  setSelectedSearchModels: function setSelectedSearchModels(searchModels) {
	    // adjust events
	    var previousSearchModels = this.selectedSearchModels;
	    previousSearchModels.forEach(function (previousSearchModel) {
	      if (!searchModels.indexOf(previousSearchModel) !== -1) {
	        // this.stopListening(previousSearchModel.get('results'));
	        previousSearchModel.stopSearching();
	      }
	    });
	    searchModels.forEach(function (searchModel) {
	      if (!previousSearchModels.indexOf(searchModel) !== -1) {
	        // this.listenTo(searchModel.get('results'), 'reset add', this.onResultsChange);
	        searchModel.continueSearching();
	      }
	    });
	  },
	  onLayerSelectionChange: function onLayerSelectionChange(event) {
	    if (event) {
	      var $changed = (0, _jquery2.default)(event.target);
	      var searchModel = this.collection.find(function (model) {
	        return model.get('layerModel').get('id') === $changed.data('layer');
	      });
	      searchModel.set('automaticSearch', $changed.is(':checked'));
	      this.render();
	    }
	
	    this.onSearchModelsChange();
	  },
	  onSearchModelsChange: function onSearchModelsChange(searchModel) {
	    if (searchModel) {
	      // update the layers status
	      var layerModel = searchModel.get('layerModel');
	      var $status = this.$('[data-layer="' + layerModel.get('id') + '"]').parent().find('.search-status');
	
	      if (searchModel.get('isSearching')) {
	        $status.html('<i class="fa fa-circle-o-notch fa-spin fa-fw"></i>');
	      } else if (searchModel.get('hasError')) {
	        $status.html('<i class="fa fa-exclamation"></i>');
	      } else if (searchModel.get('isCancelled')) {
	        $status.html('');
	      } else if (searchModel.get('isCountInitiallyDisabled')) {
	        $status.html('');
	      } else {
	        $status.html(searchModel.get('hasLoaded') + '/' + searchModel.get('totalResults'));
	      }
	    }
	
	    // update the global status
	    var $globalStatus = this.$('.global-search-status');
	    var isSearching = this.collection.any(function (model) {
	      return model.get('isSearching');
	    });
	    var hasError = this.collection.any(function (model) {
	      return model.get('hasError') && model.get('layerModel').get('display.visible');
	    });
	
	    var selectedSearchModels = this.collection.filter(function (model) {
	      return model.get('automaticSearch');
	    });
	
	    if (hasError) {
	      $globalStatus.html('<i class="fa fa-exclamation"></i>');
	    } else if (isSearching) {
	      $globalStatus.html('<i class="fa fa-circle-o-notch fa-spin fa-fw"></i>');
	    } else if (selectedSearchModels.length) {
	      var sumTotalResults = selectedSearchModels.reduce(function (current, model) {
	        return current + model.get('totalResults');
	      }, 0);
	      var sumHasLoaded = selectedSearchModels.reduce(function (current, model) {
	        return current + model.get('hasLoaded');
	      }, 0);
	
	      if (!isNaN(sumTotalResults)) {
	        $globalStatus.html(sumHasLoaded + '/' + sumTotalResults);
	      } else {
	        $globalStatus.html('');
	      }
	    } else {
	      $globalStatus.html('');
	    }
	
	    // update the tab header
	    if (hasError) {
	      this.triggerMethod('update:status', '<i class="fa fa-exclamation"></i>');
	    } else if (isSearching) {
	      this.triggerMethod('update:status', '<i class="fa fa-circle-o-notch fa-spin fa-fw"></i>');
	    } else {
	      this.triggerMethod('update:status', '');
	    }
	
	    // update dropdown title
	    var visibleLayers = this.collection.filter(function (model) {
	      return model.get('layerModel').get('display.visible');
	    });
	    if (visibleLayers.length) {
	      if (selectedSearchModels.length) {
	        this.$('.selected-layer-names').html((0, _NLayersSelected2.default)({
	          count: selectedSearchModels.length
	        }));
	      } else {
	        this.$('.selected-layer-names').html((0, _NoLayerSelected2.default)({}));
	      }
	      this.$('.dropdown button').prop('disabled', false);
	    } else {
	      this.$('.selected-layer-names').html((0, _NoLayersAvailable2.default)({}));
	      this.$('.dropdown button').prop('disabled', true);
	    }
	
	    this.updateViews();
	  },
	  onSelectAllClick: function onSelectAllClick() {
	    var selectedSearchModels = this.collection.filter(function (model) {
	      return model.get('automaticSearch');
	    });
	    selectedSearchModels.forEach(function (searchModel) {
	      searchModel.get('results').filter(function (recordModel) {
	        return (0, _download.isRecordDownloadable)(searchModel.get('layerModel'), recordModel);
	      }).forEach(function (recordModel) {
	        return recordModel.selectForDownload();
	      });
	    });
	  }
	});
	
	exports.default = SearchResultView;

/***/ }),
/* 571 */
/***/ (function(module, exports) {

	'use strict';
	
	/* eslint complexity: [2, 18], max-statements: [2, 33] */
	
	var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
	
	module.exports = function hasSymbols() {
		if (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') {
			return false;
		}
		if (_typeof(Symbol.iterator) === 'symbol') {
			return true;
		}
	
		var obj = {};
		var sym = Symbol('test');
		var symObj = Object(sym);
		if (typeof sym === 'string') {
			return false;
		}
	
		if (Object.prototype.toString.call(sym) !== '[object Symbol]') {
			return false;
		}
		if (Object.prototype.toString.call(symObj) !== '[object Symbol]') {
			return false;
		}
	
		// temp disabled per https://github.com/ljharb/object.assign/issues/17
		// if (sym instanceof Symbol) { return false; }
		// temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4
		// if (!(symObj instanceof Symbol)) { return false; }
	
		// if (typeof Symbol.prototype.toString !== 'function') { return false; }
		// if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; }
	
		var symVal = 42;
		obj[sym] = symVal;
		for (sym in obj) {
			return false;
		} // eslint-disable-line no-restricted-syntax
		if (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) {
			return false;
		}
	
		if (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) {
			return false;
		}
	
		var syms = Object.getOwnPropertySymbols(obj);
		if (syms.length !== 1 || syms[0] !== sym) {
			return false;
		}
	
		if (!Object.prototype.propertyIsEnumerable.call(obj, sym)) {
			return false;
		}
	
		if (typeof Object.getOwnPropertyDescriptor === 'function') {
			var descriptor = Object.getOwnPropertyDescriptor(obj, sym);
			if (descriptor.value !== symVal || descriptor.enumerable !== true) {
				return false;
			}
		}
	
		return true;
	};

/***/ }),
/* 572 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	
	var _utils = __webpack_require__(136);
	
	var utils = _interopRequireWildcard(_utils);
	
	var _logger = __webpack_require__(79);
	
	var _logger2 = _interopRequireDefault(_logger);
	
	function _interopRequireDefault(obj) {
	  return obj && obj.__esModule ? obj : { default: obj };
	}
	
	function _interopRequireWildcard(obj) {
	  if (obj && obj.__esModule) {
	    return obj;
	  } else {
	    var newObj = {};if (obj != null) {
	      for (var key in obj) {
	        if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key];
	      }
	    }newObj.default = obj;return newObj;
	  }
	}
	
	function _classCallCheck(instance, Constructor) {
	  if (!(instance instanceof Constructor)) {
	    throw new TypeError("Cannot call a class as a function");
	  }
	}
	
	var Interpolator = function () {
	  function Interpolator() {
	    var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
	
	    _classCallCheck(this, Interpolator);
	
	    this.logger = _logger2.default.create('interpolator');
	
	    this.init(options, true);
	  }
	
	  Interpolator.prototype.init = function init() {
	    var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
	    var reset = arguments[1];
	
	    if (reset) {
	      this.options = options;
	      this.format = options.interpolation && options.interpolation.format || function (value) {
	        return value;
	      };
	    }
	    if (!options.interpolation) options.interpolation = { escapeValue: true };
	
	    var iOpts = options.interpolation;
	
	    this.escapeValue = iOpts.escapeValue !== undefined ? iOpts.escapeValue : true;
	
	    this.prefix = iOpts.prefix ? utils.regexEscape(iOpts.prefix) : iOpts.prefixEscaped || '{{';
	    this.suffix = iOpts.suffix ? utils.regexEscape(iOpts.suffix) : iOpts.suffixEscaped || '}}';
	    this.formatSeparator = iOpts.formatSeparator ? utils.regexEscape(iOpts.formatSeparator) : iOpts.formatSeparator || ',';
	
	    this.unescapePrefix = iOpts.unescapeSuffix ? '' : iOpts.unescapePrefix || '-';
	    this.unescapeSuffix = this.unescapePrefix ? '' : iOpts.unescapeSuffix || '';
	
	    this.nestingPrefix = iOpts.nestingPrefix ? utils.regexEscape(iOpts.nestingPrefix) : iOpts.nestingPrefixEscaped || utils.regexEscape('$t(');
	    this.nestingSuffix = iOpts.nestingSuffix ? utils.regexEscape(iOpts.nestingSuffix) : iOpts.nestingSuffixEscaped || utils.regexEscape(')');
	
	    // the regexp
	    this.resetRegExp();
	  };
	
	  Interpolator.prototype.reset = function reset() {
	    if (this.options) this.init(this.options);
	  };
	
	  Interpolator.prototype.resetRegExp = function resetRegExp() {
	    // the regexp
	    var regexpStr = this.prefix + '(.+?)' + this.suffix;
	    this.regexp = new RegExp(regexpStr, 'g');
	
	    var regexpUnescapeStr = this.prefix + this.unescapePrefix + '(.+?)' + this.unescapeSuffix + this.suffix;
	    this.regexpUnescape = new RegExp(regexpUnescapeStr, 'g');
	
	    var nestingRegexpStr = this.nestingPrefix + '(.+?)' + this.nestingSuffix;
	    this.nestingRegexp = new RegExp(nestingRegexpStr, 'g');
	  };
	
	  Interpolator.prototype.interpolate = function interpolate(str, data, lng) {
	    var _this = this;
	
	    var match = void 0,
	        value = void 0;
	
	    function regexSafe(val) {
	      return val.replace(/\$/g, '$$$$');
	    }
	
	    var handleFormat = function handleFormat(key) {
	      if (key.indexOf(_this.formatSeparator) < 0) return utils.getPath(data, key);
	
	      var p = key.split(_this.formatSeparator);
	      var k = p.shift().trim();
	      var f = p.join(_this.formatSeparator).trim();
	
	      return _this.format(utils.getPath(data, k), f, lng);
	    };
	
	    this.resetRegExp();
	
	    // unescape if has unescapePrefix/Suffix
	    while (match = this.regexpUnescape.exec(str)) {
	      var _value = handleFormat(match[1].trim());
	      str = str.replace(match[0], _value);
	      this.regexpUnescape.lastIndex = 0;
	    }
	
	    // regular escape on demand
	    while (match = this.regexp.exec(str)) {
	      value = handleFormat(match[1].trim());
	      if (typeof value !== 'string') value = utils.makeString(value);
	      if (!value) {
	        this.logger.warn('missed to pass in variable ' + match[1] + ' for interpolating ' + str);
	        value = '';
	      }
	      value = this.escapeValue ? regexSafe(utils.escape(value)) : regexSafe(value);
	      str = str.replace(match[0], value);
	      this.regexp.lastIndex = 0;
	    }
	    return str;
	  };
	
	  Interpolator.prototype.nest = function nest(str, fc) {
	    var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
	
	    var match = void 0,
	        value = void 0;
	
	    var clonedOptions = JSON.parse(JSON.stringify(options));
	    clonedOptions.applyPostProcessor = false; // avoid post processing on nested lookup
	
	    function regexSafe(val) {
	      return val.replace(/\$/g, '$$$$');
	    }
	
	    // if value is something like "myKey": "lorem $(anotherKey, { "count": {{aValueInOptions}} })"
	    function handleHasOptions(key) {
	      if (key.indexOf(',') < 0) return key;
	
	      var p = key.split(',');
	      key = p.shift();
	      var optionsString = p.join(',');
	      optionsString = this.interpolate(optionsString, clonedOptions);
	
	      try {
	        clonedOptions = JSON.parse(optionsString);
	      } catch (e) {
	        this.logger.error('failed parsing options string in nesting for key ' + key, e);
	      }
	
	      return key;
	    }
	
	    // regular escape on demand
	    while (match = this.nestingRegexp.exec(str)) {
	      value = fc(handleHasOptions.call(this, match[1].trim()), clonedOptions);
	      if (typeof value !== 'string') value = utils.makeString(value);
	      if (!value) {
	        this.logger.warn('missed to pass in variable ' + match[1] + ' for interpolating ' + str);
	        value = '';
	      }
	      value = this.escapeValue ? regexSafe(utils.escape(value)) : regexSafe(value);
	      str = str.replace(match[0], value);
	      this.regexp.lastIndex = 0;
	    }
	    return str;
	  };
	
	  return Interpolator;
	}();
	
	exports.default = Interpolator;

/***/ }),
/* 573 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	var _typeof2 = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	
	var _typeof = typeof Symbol === "function" && _typeof2(Symbol.iterator) === "symbol" ? function (obj) {
	  return typeof obj === "undefined" ? "undefined" : _typeof2(obj);
	} : function (obj) {
	  return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj === "undefined" ? "undefined" : _typeof2(obj);
	};
	
	var _logger = __webpack_require__(79);
	
	var _logger2 = _interopRequireDefault(_logger);
	
	function _interopRequireDefault(obj) {
	  return obj && obj.__esModule ? obj : { default: obj };
	}
	
	function _classCallCheck(instance, Constructor) {
	  if (!(instance instanceof Constructor)) {
	    throw new TypeError("Cannot call a class as a function");
	  }
	}
	
	// definition http://translate.sourceforge.net/wiki/l10n/pluralforms
	/* eslint-disable */
	var sets = [{ lngs: ['ach', 'ak', 'am', 'arn', 'br', 'fil', 'gun', 'ln', 'mfe', 'mg', 'mi', 'oc', 'tg', 'ti', 'tr', 'uz', 'wa'], nr: [1, 2], fc: 1 }, { lngs: ['af', 'an', 'ast', 'az', 'bg', 'bn', 'ca', 'da', 'de', 'dev', 'el', 'en', 'eo', 'es', 'es_ar', 'et', 'eu', 'fi', 'fo', 'fur', 'fy', 'gl', 'gu', 'ha', 'he', 'hi', 'hu', 'hy', 'ia', 'it', 'kn', 'ku', 'lb', 'mai', 'ml', 'mn', 'mr', 'nah', 'nap', 'nb', 'ne', 'nl', 'nn', 'no', 'nso', 'pa', 'pap', 'pms', 'ps', 'pt', 'pt_br', 'rm', 'sco', 'se', 'si', 'so', 'son', 'sq', 'sv', 'sw', 'ta', 'te', 'tk', 'ur', 'yo'], nr: [1, 2], fc: 2 }, { lngs: ['ay', 'bo', 'cgg', 'fa', 'id', 'ja', 'jbo', 'ka', 'kk', 'km', 'ko', 'ky', 'lo', 'ms', 'sah', 'su', 'th', 'tt', 'ug', 'vi', 'wo', 'zh'], nr: [1], fc: 3 }, { lngs: ['be', 'bs', 'dz', 'hr', 'ru', 'sr', 'uk'], nr: [1, 2, 5], fc: 4 }, { lngs: ['ar'], nr: [0, 1, 2, 3, 11, 100], fc: 5 }, { lngs: ['cs', 'sk'], nr: [1, 2, 5], fc: 6 }, { lngs: ['csb', 'pl'], nr: [1, 2, 5], fc: 7 }, { lngs: ['cy'], nr: [1, 2, 3, 8], fc: 8 }, { lngs: ['fr'], nr: [1, 2], fc: 9 }, { lngs: ['ga'], nr: [1, 2, 3, 7, 11], fc: 10 }, { lngs: ['gd'], nr: [1, 2, 3, 20], fc: 11 }, { lngs: ['is'], nr: [1, 2], fc: 12 }, { lngs: ['jv'], nr: [0, 1], fc: 13 }, { lngs: ['kw'], nr: [1, 2, 3, 4], fc: 14 }, { lngs: ['lt'], nr: [1, 2, 10], fc: 15 }, { lngs: ['lv'], nr: [1, 2, 0], fc: 16 }, { lngs: ['mk'], nr: [1, 2], fc: 17 }, { lngs: ['mnk'], nr: [0, 1, 2], fc: 18 }, { lngs: ['mt'], nr: [1, 2, 11, 20], fc: 19 }, { lngs: ['or'], nr: [2, 1], fc: 2 }, { lngs: ['ro'], nr: [1, 2, 20], fc: 20 }, { lngs: ['sl'], nr: [5, 1, 2, 3], fc: 21 }];
	
	var _rulesPluralsTypes = {
	  1: function _(n) {
	    return Number(n > 1);
	  },
	  2: function _(n) {
	    return Number(n != 1);
	  },
	  3: function _(n) {
	    return 0;
	  },
	  4: function _(n) {
	    return Number(n % 10 == 1 && n % 100 != 11 ? 0 : n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2);
	  },
	  5: function _(n) {
	    return Number(n === 0 ? 0 : n == 1 ? 1 : n == 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5);
	  },
	  6: function _(n) {
	    return Number(n == 1 ? 0 : n >= 2 && n <= 4 ? 1 : 2);
	  },
	  7: function _(n) {
	    return Number(n == 1 ? 0 : n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2);
	  },
	  8: function _(n) {
	    return Number(n == 1 ? 0 : n == 2 ? 1 : n != 8 && n != 11 ? 2 : 3);
	  },
	  9: function _(n) {
	    return Number(n >= 2);
	  },
	  10: function _(n) {
	    return Number(n == 1 ? 0 : n == 2 ? 1 : n < 7 ? 2 : n < 11 ? 3 : 4);
	  },
	  11: function _(n) {
	    return Number(n == 1 || n == 11 ? 0 : n == 2 || n == 12 ? 1 : n > 2 && n < 20 ? 2 : 3);
	  },
	  12: function _(n) {
	    return Number(n % 10 != 1 || n % 100 == 11);
	  },
	  13: function _(n) {
	    return Number(n !== 0);
	  },
	  14: function _(n) {
	    return Number(n == 1 ? 0 : n == 2 ? 1 : n == 3 ? 2 : 3);
	  },
	  15: function _(n) {
	    return Number(n % 10 == 1 && n % 100 != 11 ? 0 : n % 10 >= 2 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2);
	  },
	  16: function _(n) {
	    return Number(n % 10 == 1 && n % 100 != 11 ? 0 : n !== 0 ? 1 : 2);
	  },
	  17: function _(n) {
	    return Number(n == 1 || n % 10 == 1 ? 0 : 1);
	  },
	  18: function _(n) {
	    return Number(n == 0 ? 0 : n == 1 ? 1 : 2);
	  },
	  19: function _(n) {
	    return Number(n == 1 ? 0 : n === 0 || n % 100 > 1 && n % 100 < 11 ? 1 : n % 100 > 10 && n % 100 < 20 ? 2 : 3);
	  },
	  20: function _(n) {
	    return Number(n == 1 ? 0 : n === 0 || n % 100 > 0 && n % 100 < 20 ? 1 : 2);
	  },
	  21: function _(n) {
	    return Number(n % 100 == 1 ? 1 : n % 100 == 2 ? 2 : n % 100 == 3 || n % 100 == 4 ? 3 : 0);
	  }
	};
	/* eslint-enable */
	
	function createRules() {
	  var l,
	      rules = {};
	  sets.forEach(function (set) {
	    set.lngs.forEach(function (l) {
	      return rules[l] = {
	        numbers: set.nr,
	        plurals: _rulesPluralsTypes[set.fc]
	      };
	    });
	  });
	  return rules;
	}
	
	var PluralResolver = function () {
	  function PluralResolver(languageUtils) {
	    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
	
	    _classCallCheck(this, PluralResolver);
	
	    this.languageUtils = languageUtils;
	    this.options = options;
	
	    this.logger = _logger2.default.create('pluralResolver');
	
	    this.rules = createRules();
	  }
	
	  PluralResolver.prototype.addRule = function addRule(lng, obj) {
	    this.rules[lng] = obj;
	  };
	
	  PluralResolver.prototype.getRule = function getRule(code) {
	    return this.rules[this.languageUtils.getLanguagePartFromCode(code)];
	  };
	
	  PluralResolver.prototype.needsPlural = function needsPlural(code) {
	    var rule = this.getRule(code);
	
	    return rule && rule.numbers.length <= 1 ? false : true;
	  };
	
	  PluralResolver.prototype.getSuffix = function getSuffix(code, count) {
	    var _this = this;
	
	    var rule = this.getRule(code);
	
	    if (rule) {
	      var _ret = function () {
	        if (rule.numbers.length === 1) return {
	          v: ''
	        }; // only singular
	
	        var idx = rule.noAbs ? rule.plurals(count) : rule.plurals(Math.abs(count));
	        var suffix = rule.numbers[idx];
	
	        // special treatment for lngs only having singular and plural
	        if (rule.numbers.length === 2 && rule.numbers[0] === 1) {
	          if (suffix === 2) {
	            suffix = 'plural';
	          } else if (suffix === 1) {
	            suffix = '';
	          }
	        }
	
	        var returnSuffix = function returnSuffix() {
	          return _this.options.prepend && suffix.toString() ? _this.options.prepend + suffix.toString() : suffix.toString();
	        };
	
	        // COMPATIBILITY JSON
	        // v1
	        if (_this.options.compatibilityJSON === 'v1') {
	          if (suffix === 1) return {
	            v: ''
	          };
	          if (typeof suffix === 'number') return {
	            v: '_plural_' + suffix.toString()
	          };
	          return {
	            v: returnSuffix()
	          };
	        }
	        // v2
	        else if (_this.options.compatibilityJSON === 'v2' || rule.numbers.length === 2 && rule.numbers[0] === 1) {
	            return {
	              v: returnSuffix()
	            };
	          }
	          // v3 - gettext index
	          else if (rule.numbers.length === 2 && rule.numbers[0] === 1) {
	              return {
	                v: returnSuffix()
	              };
	            }
	        return {
	          v: _this.options.prepend && idx.toString() ? _this.options.prepend + idx.toString() : idx.toString()
	        };
	      }();
	
	      if ((typeof _ret === 'undefined' ? 'undefined' : _typeof(_ret)) === "object") return _ret.v;
	    } else {
	      this.logger.warn('no plural rule found for: ' + code);
	      return '';
	    }
	  };
	
	  return PluralResolver;
	}();
	
	;
	
	exports.default = PluralResolver;

/***/ }),
/* 574 */
/***/ (function(module, exports, __webpack_require__) {

	var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;"use strict";
	
	/*!
	 * jQuery UI Scroll Parent 1.12.1
	 * http://jqueryui.com
	 *
	 * Copyright jQuery Foundation and other contributors
	 * Released under the MIT license.
	 * http://jquery.org/license
	 */
	
	//>>label: scrollParent
	//>>group: Core
	//>>description: Get the closest ancestor element that is scrollable.
	//>>docs: http://api.jqueryui.com/scrollParent/
	
	(function (factory) {
		if (true) {
	
			// AMD. Register as an anonymous module.
			!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(12), __webpack_require__(114)], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
		} else {
	
			// Browser globals
			factory(jQuery);
		}
	})(function ($) {
	
		return $.fn.scrollParent = function (includeHidden) {
			var position = this.css("position"),
			    excludeStaticParent = position === "absolute",
			    overflowRegex = includeHidden ? /(auto|scroll|hidden)/ : /(auto|scroll)/,
			    scrollParent = this.parents().filter(function () {
				var parent = $(this);
				if (excludeStaticParent && parent.css("position") === "static") {
					return false;
				}
				return overflowRegex.test(parent.css("overflow") + parent.css("overflow-y") + parent.css("overflow-x"));
			}).eq(0);
	
			return position === "fixed" || !scrollParent.length ? $(this[0].ownerDocument || document) : scrollParent;
		};
	});

/***/ }),
/* 575 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	
	var _util = __webpack_require__(14);
	
	var _Target = __webpack_require__(101);
	
	var _Target2 = _interopRequireDefault(_Target);
	
	var _EventType = __webpack_require__(10);
	
	var _EventType2 = _interopRequireDefault(_EventType);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var __extends = undefined && undefined.__extends || function () {
	  var _extendStatics = function extendStatics(d, b) {
	    _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	      d.__proto__ = b;
	    } || function (d, b) {
	      for (var p in b) {
	        if (b.hasOwnProperty(p)) d[p] = b[p];
	      }
	    };
	    return _extendStatics(d, b);
	  };
	  return function (d, b) {
	    _extendStatics(d, b);
	    function __() {
	      this.constructor = d;
	    }
	    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	  };
	}();
	/**
	 * @module ol/ImageBase
	 */
	
	/**
	 * @abstract
	 */
	var ImageBase = /** @class */function (_super) {
	  __extends(ImageBase, _super);
	  /**
	   * @param {import("./extent.js").Extent} extent Extent.
	   * @param {number|undefined} resolution Resolution.
	   * @param {number} pixelRatio Pixel ratio.
	   * @param {import("./ImageState.js").default} state State.
	   */
	  function ImageBase(extent, resolution, pixelRatio, state) {
	    var _this = _super.call(this) || this;
	    /**
	     * @protected
	     * @type {import("./extent.js").Extent}
	     */
	    _this.extent = extent;
	    /**
	     * @private
	     * @type {number}
	     */
	    _this.pixelRatio_ = pixelRatio;
	    /**
	     * @protected
	     * @type {number|undefined}
	     */
	    _this.resolution = resolution;
	    /**
	     * @protected
	     * @type {import("./ImageState.js").default}
	     */
	    _this.state = state;
	    return _this;
	  }
	  /**
	   * @protected
	   */
	  ImageBase.prototype.changed = function () {
	    this.dispatchEvent(_EventType2.default.CHANGE);
	  };
	  /**
	   * @return {import("./extent.js").Extent} Extent.
	   */
	  ImageBase.prototype.getExtent = function () {
	    return this.extent;
	  };
	  /**
	   * @abstract
	   * @return {HTMLCanvasElement|HTMLImageElement|HTMLVideoElement} Image.
	   */
	  ImageBase.prototype.getImage = function () {
	    return (0, _util.abstract)();
	  };
	  /**
	   * @return {number} PixelRatio.
	   */
	  ImageBase.prototype.getPixelRatio = function () {
	    return this.pixelRatio_;
	  };
	  /**
	   * @return {number} Resolution.
	   */
	  ImageBase.prototype.getResolution = function () {
	    return (/** @type {number} */this.resolution
	    );
	  };
	  /**
	   * @return {import("./ImageState.js").default} State.
	   */
	  ImageBase.prototype.getState = function () {
	    return this.state;
	  };
	  /**
	   * Load not yet loaded URI.
	   * @abstract
	   */
	  ImageBase.prototype.load = function () {
	    (0, _util.abstract)();
	  };
	  return ImageBase;
	}(_Target2.default);
	exports.default = ImageBase;
	//# sourceMappingURL=ImageBase.js.map

/***/ }),
/* 576 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	
	var _Tile = __webpack_require__(258);
	
	var _Tile2 = _interopRequireDefault(_Tile);
	
	var _TileState = __webpack_require__(70);
	
	var _TileState2 = _interopRequireDefault(_TileState);
	
	var _dom = __webpack_require__(34);
	
	var _Image = __webpack_require__(249);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var __extends = undefined && undefined.__extends || function () {
	    var _extendStatics = function extendStatics(d, b) {
	        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	            d.__proto__ = b;
	        } || function (d, b) {
	            for (var p in b) {
	                if (b.hasOwnProperty(p)) d[p] = b[p];
	            }
	        };
	        return _extendStatics(d, b);
	    };
	    return function (d, b) {
	        _extendStatics(d, b);
	        function __() {
	            this.constructor = d;
	        }
	        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	    };
	}();
	/**
	 * @module ol/ImageTile
	 */
	
	var ImageTile = /** @class */function (_super) {
	    __extends(ImageTile, _super);
	    /**
	     * @param {import("./tilecoord.js").TileCoord} tileCoord Tile coordinate.
	     * @param {TileState} state State.
	     * @param {string} src Image source URI.
	     * @param {?string} crossOrigin Cross origin.
	     * @param {import("./Tile.js").LoadFunction} tileLoadFunction Tile load function.
	     * @param {import("./Tile.js").Options=} opt_options Tile options.
	     */
	    function ImageTile(tileCoord, state, src, crossOrigin, tileLoadFunction, opt_options) {
	        var _this = _super.call(this, tileCoord, state, opt_options) || this;
	        /**
	         * @private
	         * @type {?string}
	         */
	        _this.crossOrigin_ = crossOrigin;
	        /**
	         * Image URI
	         *
	         * @private
	         * @type {string}
	         */
	        _this.src_ = src;
	        /**
	         * @private
	         * @type {HTMLImageElement|HTMLCanvasElement}
	         */
	        _this.image_ = new Image();
	        if (crossOrigin !== null) {
	            _this.image_.crossOrigin = crossOrigin;
	        }
	        /**
	         * @private
	         * @type {?function():void}
	         */
	        _this.unlisten_ = null;
	        /**
	         * @private
	         * @type {import("./Tile.js").LoadFunction}
	         */
	        _this.tileLoadFunction_ = tileLoadFunction;
	        return _this;
	    }
	    /**
	     * @inheritDoc
	     */
	    ImageTile.prototype.disposeInternal = function () {
	        if (this.state == _TileState2.default.LOADING) {
	            this.unlistenImage_();
	            this.image_ = getBlankImage();
	        }
	        if (this.interimTile) {
	            this.interimTile.dispose();
	        }
	        _super.prototype.disposeInternal.call(this);
	    };
	    /**
	     * Get the HTML image element for this tile (may be a Canvas, Image, or Video).
	     * @return {HTMLCanvasElement|HTMLImageElement|HTMLVideoElement} Image.
	     * @api
	     */
	    ImageTile.prototype.getImage = function () {
	        return this.image_;
	    };
	    /**
	     * @inheritDoc
	     */
	    ImageTile.prototype.getKey = function () {
	        return this.src_;
	    };
	    /**
	     * Tracks loading or read errors.
	     *
	     * @private
	     */
	    ImageTile.prototype.handleImageError_ = function () {
	        this.state = _TileState2.default.ERROR;
	        this.unlistenImage_();
	        this.image_ = getBlankImage();
	        this.changed();
	    };
	    /**
	     * Tracks successful image load.
	     *
	     * @private
	     */
	    ImageTile.prototype.handleImageLoad_ = function () {
	        var image = /** @type {HTMLImageElement} */this.image_;
	        if (image.naturalWidth && image.naturalHeight) {
	            this.state = _TileState2.default.LOADED;
	        } else {
	            this.state = _TileState2.default.EMPTY;
	        }
	        this.unlistenImage_();
	        this.changed();
	    };
	    /**
	     * @inheritDoc
	     * @api
	     */
	    ImageTile.prototype.load = function () {
	        if (this.state == _TileState2.default.ERROR) {
	            this.state = _TileState2.default.IDLE;
	            this.image_ = new Image();
	            if (this.crossOrigin_ !== null) {
	                this.image_.crossOrigin = this.crossOrigin_;
	            }
	        }
	        if (this.state == _TileState2.default.IDLE) {
	            this.state = _TileState2.default.LOADING;
	            this.changed();
	            this.tileLoadFunction_(this, this.src_);
	            this.unlisten_ = (0, _Image.listenImage)(this.image_, this.handleImageLoad_.bind(this), this.handleImageError_.bind(this));
	        }
	    };
	    /**
	     * Discards event handlers which listen for load completion or errors.
	     *
	     * @private
	     */
	    ImageTile.prototype.unlistenImage_ = function () {
	        if (this.unlisten_) {
	            this.unlisten_();
	            this.unlisten_ = null;
	        }
	    };
	    return ImageTile;
	}(_Tile2.default);
	/**
	 * Get a 1-pixel blank image.
	 * @return {HTMLCanvasElement} Blank image.
	 */
	function getBlankImage() {
	    var ctx = (0, _dom.createCanvasContext2D)(1, 1);
	    ctx.fillStyle = 'rgba(0,0,0,0)';
	    ctx.fillRect(0, 0, 1, 1);
	    return ctx.canvas;
	}
	exports.default = ImageTile;
	//# sourceMappingURL=ImageTile.js.map

/***/ }),
/* 577 */
/***/ (function(module, exports) {

	"use strict";
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	/**
	 * @module ol/Kinetic
	 */
	/**
	 * @classdesc
	 * Implementation of inertial deceleration for map movement.
	 *
	 * @api
	 */
	var Kinetic = /** @class */function () {
	  /**
	   * @param {number} decay Rate of decay (must be negative).
	   * @param {number} minVelocity Minimum velocity (pixels/millisecond).
	   * @param {number} delay Delay to consider to calculate the kinetic
	   *     initial values (milliseconds).
	   */
	  function Kinetic(decay, minVelocity, delay) {
	    /**
	     * @private
	     * @type {number}
	     */
	    this.decay_ = decay;
	    /**
	     * @private
	     * @type {number}
	     */
	    this.minVelocity_ = minVelocity;
	    /**
	     * @private
	     * @type {number}
	     */
	    this.delay_ = delay;
	    /**
	     * @private
	     * @type {Array<number>}
	     */
	    this.points_ = [];
	    /**
	     * @private
	     * @type {number}
	     */
	    this.angle_ = 0;
	    /**
	     * @private
	     * @type {number}
	     */
	    this.initialVelocity_ = 0;
	  }
	  /**
	   * FIXME empty description for jsdoc
	   */
	  Kinetic.prototype.begin = function () {
	    this.points_.length = 0;
	    this.angle_ = 0;
	    this.initialVelocity_ = 0;
	  };
	  /**
	   * @param {number} x X.
	   * @param {number} y Y.
	   */
	  Kinetic.prototype.update = function (x, y) {
	    this.points_.push(x, y, Date.now());
	  };
	  /**
	   * @return {boolean} Whether we should do kinetic animation.
	   */
	  Kinetic.prototype.end = function () {
	    if (this.points_.length < 6) {
	      // at least 2 points are required (i.e. there must be at least 6 elements
	      // in the array)
	      return false;
	    }
	    var delay = Date.now() - this.delay_;
	    var lastIndex = this.points_.length - 3;
	    if (this.points_[lastIndex + 2] < delay) {
	      // the last tracked point is too old, which means that the user stopped
	      // panning before releasing the map
	      return false;
	    }
	    // get the first point which still falls into the delay time
	    var firstIndex = lastIndex - 3;
	    while (firstIndex > 0 && this.points_[firstIndex + 2] > delay) {
	      firstIndex -= 3;
	    }
	    var duration = this.points_[lastIndex + 2] - this.points_[firstIndex + 2];
	    // we don't want a duration of 0 (divide by zero)
	    // we also make sure the user panned for a duration of at least one frame
	    // (1/60s) to compute sane displacement values
	    if (duration < 1000 / 60) {
	      return false;
	    }
	    var dx = this.points_[lastIndex] - this.points_[firstIndex];
	    var dy = this.points_[lastIndex + 1] - this.points_[firstIndex + 1];
	    this.angle_ = Math.atan2(dy, dx);
	    this.initialVelocity_ = Math.sqrt(dx * dx + dy * dy) / duration;
	    return this.initialVelocity_ > this.minVelocity_;
	  };
	  /**
	   * @return {number} Total distance travelled (pixels).
	   */
	  Kinetic.prototype.getDistance = function () {
	    return (this.minVelocity_ - this.initialVelocity_) / this.decay_;
	  };
	  /**
	   * @return {number} Angle of the kinetic panning animation (radians).
	   */
	  Kinetic.prototype.getAngle = function () {
	    return this.angle_;
	  };
	  return Kinetic;
	}();
	exports.default = Kinetic;
	//# sourceMappingURL=Kinetic.js.map

/***/ }),
/* 578 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	
	var _PluggableMap = __webpack_require__(257);
	
	var _PluggableMap2 = _interopRequireDefault(_PluggableMap);
	
	var _control = __webpack_require__(582);
	
	var _interaction = __webpack_require__(601);
	
	var _obj = __webpack_require__(23);
	
	var _Composite = __webpack_require__(292);
	
	var _Composite2 = _interopRequireDefault(_Composite);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var __extends = undefined && undefined.__extends || function () {
	    var _extendStatics = function extendStatics(d, b) {
	        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	            d.__proto__ = b;
	        } || function (d, b) {
	            for (var p in b) {
	                if (b.hasOwnProperty(p)) d[p] = b[p];
	            }
	        };
	        return _extendStatics(d, b);
	    };
	    return function (d, b) {
	        _extendStatics(d, b);
	        function __() {
	            this.constructor = d;
	        }
	        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	    };
	}();
	/**
	 * @module ol/Map
	 */
	
	/**
	 * @classdesc
	 * The map is the core component of OpenLayers. For a map to render, a view,
	 * one or more layers, and a target container are needed:
	 *
	 *     import Map from 'ol/Map';
	 *     import View from 'ol/View';
	 *     import TileLayer from 'ol/layer/Tile';
	 *     import OSM from 'ol/source/OSM';
	 *
	 *     var map = new Map({
	 *       view: new View({
	 *         center: [0, 0],
	 *         zoom: 1
	 *       }),
	 *       layers: [
	 *         new TileLayer({
	 *           source: new OSM()
	 *         })
	 *       ],
	 *       target: 'map'
	 *     });
	 *
	 * The above snippet creates a map using a {@link module:ol/layer/Tile} to
	 * display {@link module:ol/source/OSM~OSM} OSM data and render it to a DOM
	 * element with the id `map`.
	 *
	 * The constructor places a viewport container (with CSS class name
	 * `ol-viewport`) in the target element (see `getViewport()`), and then two
	 * further elements within the viewport: one with CSS class name
	 * `ol-overlaycontainer-stopevent` for controls and some overlays, and one with
	 * CSS class name `ol-overlaycontainer` for other overlays (see the `stopEvent`
	 * option of {@link module:ol/Overlay~Overlay} for the difference). The map
	 * itself is placed in a further element within the viewport.
	 *
	 * Layers are stored as a {@link module:ol/Collection~Collection} in
	 * layerGroups. A top-level group is provided by the library. This is what is
	 * accessed by `getLayerGroup` and `setLayerGroup`. Layers entered in the
	 * options are added to this group, and `addLayer` and `removeLayer` change the
	 * layer collection in the group. `getLayers` is a convenience function for
	 * `getLayerGroup().getLayers()`. Note that {@link module:ol/layer/Group~Group}
	 * is a subclass of {@link module:ol/layer/Base}, so layers entered in the
	 * options or added with `addLayer` can be groups, which can contain further
	 * groups, and so on.
	 *
	 * @api
	 */
	var Map = /** @class */function (_super) {
	    __extends(Map, _super);
	    /**
	     * @param {import("./PluggableMap.js").MapOptions} options Map options.
	     */
	    function Map(options) {
	        var _this = this;
	        options = (0, _obj.assign)({}, options);
	        if (!options.controls) {
	            options.controls = (0, _control.defaults)();
	        }
	        if (!options.interactions) {
	            options.interactions = (0, _interaction.defaults)();
	        }
	        _this = _super.call(this, options) || this;
	        return _this;
	    }
	    Map.prototype.createRenderer = function () {
	        return new _Composite2.default(this);
	    };
	    return Map;
	}(_PluggableMap2.default);
	exports.default = Map;
	//# sourceMappingURL=Map.js.map

/***/ }),
/* 579 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	
	__webpack_require__(165);
	
	var _has = __webpack_require__(105);
	
	var _MapBrowserEventType = __webpack_require__(69);
	
	var _MapBrowserEventType2 = _interopRequireDefault(_MapBrowserEventType);
	
	var _MapBrowserPointerEvent = __webpack_require__(251);
	
	var _MapBrowserPointerEvent2 = _interopRequireDefault(_MapBrowserPointerEvent);
	
	var _events = __webpack_require__(30);
	
	var _Target = __webpack_require__(101);
	
	var _Target2 = _interopRequireDefault(_Target);
	
	var _EventType = __webpack_require__(175);
	
	var _EventType2 = _interopRequireDefault(_EventType);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	/**
	 * @module ol/MapBrowserEventHandler
	 */
	var __extends = undefined && undefined.__extends || function () {
	    var _extendStatics = function extendStatics(d, b) {
	        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	            d.__proto__ = b;
	        } || function (d, b) {
	            for (var p in b) {
	                if (b.hasOwnProperty(p)) d[p] = b[p];
	            }
	        };
	        return _extendStatics(d, b);
	    };
	    return function (d, b) {
	        _extendStatics(d, b);
	        function __() {
	            this.constructor = d;
	        }
	        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	    };
	}();
	
	var MapBrowserEventHandler = /** @class */function (_super) {
	    __extends(MapBrowserEventHandler, _super);
	    /**
	     * @param {import("./PluggableMap.js").default} map The map with the viewport to listen to events on.
	     * @param {number=} moveTolerance The minimal distance the pointer must travel to trigger a move.
	     */
	    function MapBrowserEventHandler(map, moveTolerance) {
	        var _this = _super.call(this, map) || this;
	        /**
	         * This is the element that we will listen to the real events on.
	         * @type {import("./PluggableMap.js").default}
	         * @private
	         */
	        _this.map_ = map;
	        /**
	         * @type {any}
	         * @private
	         */
	        _this.clickTimeoutId_;
	        /**
	         * @type {boolean}
	         * @private
	         */
	        _this.dragging_ = false;
	        /**
	         * @type {!Array<import("./events.js").EventsKey>}
	         * @private
	         */
	        _this.dragListenerKeys_ = [];
	        /**
	         * @type {number}
	         * @private
	         */
	        _this.moveTolerance_ = moveTolerance ? moveTolerance * _has.DEVICE_PIXEL_RATIO : _has.DEVICE_PIXEL_RATIO;
	        /**
	         * The most recent "down" type event (or null if none have occurred).
	         * Set on pointerdown.
	         * @type {PointerEvent}
	         * @private
	         */
	        _this.down_ = null;
	        var element = _this.map_.getViewport();
	        /**
	         * @type {number}
	         * @private
	         */
	        _this.activePointers_ = 0;
	        /**
	         * @type {!Object<number, boolean>}
	         * @private
	         */
	        _this.trackedTouches_ = {};
	        _this.element_ = element;
	        /**
	         * @type {?import("./events.js").EventsKey}
	         * @private
	         */
	        _this.pointerdownListenerKey_ = (0, _events.listen)(element, _EventType2.default.POINTERDOWN, _this.handlePointerDown_, _this);
	        /**
	         * @type {?import("./events.js").EventsKey}
	         * @private
	         */
	        _this.relayedListenerKey_ = (0, _events.listen)(element, _EventType2.default.POINTERMOVE, _this.relayEvent_, _this);
	        return _this;
	    }
	    /**
	     * @param {PointerEvent} pointerEvent Pointer
	     * event.
	     * @private
	     */
	    MapBrowserEventHandler.prototype.emulateClick_ = function (pointerEvent) {
	        var newEvent = new _MapBrowserPointerEvent2.default(_MapBrowserEventType2.default.CLICK, this.map_, pointerEvent);
	        this.dispatchEvent(newEvent);
	        if (this.clickTimeoutId_ !== undefined) {
	            // double-click
	            clearTimeout(this.clickTimeoutId_);
	            this.clickTimeoutId_ = undefined;
	            newEvent = new _MapBrowserPointerEvent2.default(_MapBrowserEventType2.default.DBLCLICK, this.map_, pointerEvent);
	            this.dispatchEvent(newEvent);
	        } else {
	            // click
	            this.clickTimeoutId_ = setTimeout(function () {
	                this.clickTimeoutId_ = undefined;
	                var newEvent = new _MapBrowserPointerEvent2.default(_MapBrowserEventType2.default.SINGLECLICK, this.map_, pointerEvent);
	                this.dispatchEvent(newEvent);
	            }.bind(this), 250);
	        }
	    };
	    /**
	     * Keeps track on how many pointers are currently active.
	     *
	     * @param {PointerEvent} pointerEvent Pointer
	     * event.
	     * @private
	     */
	    MapBrowserEventHandler.prototype.updateActivePointers_ = function (pointerEvent) {
	        var event = pointerEvent;
	        if (event.type == _MapBrowserEventType2.default.POINTERUP || event.type == _MapBrowserEventType2.default.POINTERCANCEL) {
	            delete this.trackedTouches_[event.pointerId];
	        } else if (event.type == _MapBrowserEventType2.default.POINTERDOWN) {
	            this.trackedTouches_[event.pointerId] = true;
	        }
	        this.activePointers_ = Object.keys(this.trackedTouches_).length;
	    };
	    /**
	     * @param {PointerEvent} pointerEvent Pointer
	     * event.
	     * @private
	     */
	    MapBrowserEventHandler.prototype.handlePointerUp_ = function (pointerEvent) {
	        this.updateActivePointers_(pointerEvent);
	        var newEvent = new _MapBrowserPointerEvent2.default(_MapBrowserEventType2.default.POINTERUP, this.map_, pointerEvent);
	        this.dispatchEvent(newEvent);
	        // We emulate click events on left mouse button click, touch contact, and pen
	        // contact. isMouseActionButton returns true in these cases (evt.button is set
	        // to 0).
	        // See http://www.w3.org/TR/pointerevents/#button-states
	        // We only fire click, singleclick, and doubleclick if nobody has called
	        // event.stopPropagation() or event.preventDefault().
	        if (!newEvent.propagationStopped && !this.dragging_ && this.isMouseActionButton_(pointerEvent)) {
	            this.emulateClick_(this.down_);
	        }
	        if (this.activePointers_ === 0) {
	            this.dragListenerKeys_.forEach(_events.unlistenByKey);
	            this.dragListenerKeys_.length = 0;
	            this.dragging_ = false;
	            this.down_ = null;
	        }
	    };
	    /**
	     * @param {PointerEvent} pointerEvent Pointer
	     * event.
	     * @return {boolean} If the left mouse button was pressed.
	     * @private
	     */
	    MapBrowserEventHandler.prototype.isMouseActionButton_ = function (pointerEvent) {
	        return pointerEvent.button === 0;
	    };
	    /**
	     * @param {PointerEvent} pointerEvent Pointer
	     * event.
	     * @private
	     */
	    MapBrowserEventHandler.prototype.handlePointerDown_ = function (pointerEvent) {
	        this.updateActivePointers_(pointerEvent);
	        var newEvent = new _MapBrowserPointerEvent2.default(_MapBrowserEventType2.default.POINTERDOWN, this.map_, pointerEvent);
	        this.dispatchEvent(newEvent);
	        this.down_ = pointerEvent;
	        if (this.dragListenerKeys_.length === 0) {
	            this.dragListenerKeys_.push((0, _events.listen)(document, _MapBrowserEventType2.default.POINTERMOVE, this.handlePointerMove_, this), (0, _events.listen)(document, _MapBrowserEventType2.default.POINTERUP, this.handlePointerUp_, this),
	            /* Note that the listener for `pointercancel is set up on
	             * `pointerEventHandler_` and not `documentPointerEventHandler_` like
	             * the `pointerup` and `pointermove` listeners.
	             *
	             * The reason for this is the following: `TouchSource.vacuumTouches_()`
	             * issues `pointercancel` events, when there was no `touchend` for a
	             * `touchstart`. Now, let's say a first `touchstart` is registered on
	             * `pointerEventHandler_`. The `documentPointerEventHandler_` is set up.
	             * But `documentPointerEventHandler_` doesn't know about the first
	             * `touchstart`. If there is no `touchend` for the `touchstart`, we can
	             * only receive a `touchcancel` from `pointerEventHandler_`, because it is
	             * only registered there.
	             */
	            (0, _events.listen)(this.element_, _MapBrowserEventType2.default.POINTERCANCEL, this.handlePointerUp_, this));
	        }
	    };
	    /**
	     * @param {PointerEvent} pointerEvent Pointer
	     * event.
	     * @private
	     */
	    MapBrowserEventHandler.prototype.handlePointerMove_ = function (pointerEvent) {
	        // Between pointerdown and pointerup, pointermove events are triggered.
	        // To avoid a 'false' touchmove event to be dispatched, we test if the pointer
	        // moved a significant distance.
	        if (this.isMoving_(pointerEvent)) {
	            this.dragging_ = true;
	            var newEvent = new _MapBrowserPointerEvent2.default(_MapBrowserEventType2.default.POINTERDRAG, this.map_, pointerEvent, this.dragging_);
	            this.dispatchEvent(newEvent);
	        }
	    };
	    /**
	     * Wrap and relay a pointer event.  Note that this requires that the type
	     * string for the MapBrowserPointerEvent matches the PointerEvent type.
	     * @param {PointerEvent} pointerEvent Pointer
	     * event.
	     * @private
	     */
	    MapBrowserEventHandler.prototype.relayEvent_ = function (pointerEvent) {
	        var dragging = !!(this.down_ && this.isMoving_(pointerEvent));
	        this.dispatchEvent(new _MapBrowserPointerEvent2.default(pointerEvent.type, this.map_, pointerEvent, dragging));
	    };
	    /**
	     * @param {PointerEvent} pointerEvent Pointer
	     * event.
	     * @return {boolean} Is moving.
	     * @private
	     */
	    MapBrowserEventHandler.prototype.isMoving_ = function (pointerEvent) {
	        return this.dragging_ || Math.abs(pointerEvent.clientX - this.down_.clientX) > this.moveTolerance_ || Math.abs(pointerEvent.clientY - this.down_.clientY) > this.moveTolerance_;
	    };
	    /**
	     * @inheritDoc
	     */
	    MapBrowserEventHandler.prototype.disposeInternal = function () {
	        if (this.relayedListenerKey_) {
	            (0, _events.unlistenByKey)(this.relayedListenerKey_);
	            this.relayedListenerKey_ = null;
	        }
	        if (this.pointerdownListenerKey_) {
	            (0, _events.unlistenByKey)(this.pointerdownListenerKey_);
	            this.pointerdownListenerKey_ = null;
	        }
	        this.dragListenerKeys_.forEach(_events.unlistenByKey);
	        this.dragListenerKeys_.length = 0;
	        this.element_ = null;
	        _super.prototype.disposeInternal.call(this);
	    };
	    return MapBrowserEventHandler;
	}(_Target2.default);
	exports.default = MapBrowserEventHandler;
	//# sourceMappingURL=MapBrowserEventHandler.js.map

/***/ }),
/* 580 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	
	var _TileState = __webpack_require__(70);
	
	var _TileState2 = _interopRequireDefault(_TileState);
	
	var _EventType = __webpack_require__(10);
	
	var _EventType2 = _interopRequireDefault(_EventType);
	
	var _PriorityQueue = __webpack_require__(300);
	
	var _PriorityQueue2 = _interopRequireDefault(_PriorityQueue);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var __extends = undefined && undefined.__extends || function () {
	    var _extendStatics = function extendStatics(d, b) {
	        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	            d.__proto__ = b;
	        } || function (d, b) {
	            for (var p in b) {
	                if (b.hasOwnProperty(p)) d[p] = b[p];
	            }
	        };
	        return _extendStatics(d, b);
	    };
	    return function (d, b) {
	        _extendStatics(d, b);
	        function __() {
	            this.constructor = d;
	        }
	        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	    };
	}();
	/**
	 * @module ol/TileQueue
	 */
	
	/**
	 * @typedef {function(import("./Tile.js").default, string, import("./coordinate.js").Coordinate, number): number} PriorityFunction
	 */
	var TileQueue = /** @class */function (_super) {
	    __extends(TileQueue, _super);
	    /**
	     * @param {PriorityFunction} tilePriorityFunction Tile priority function.
	     * @param {function(): ?} tileChangeCallback Function called on each tile change event.
	     */
	    function TileQueue(tilePriorityFunction, tileChangeCallback) {
	        var _this = _super.call(this,
	        /**
	         * @param {Array} element Element.
	         * @return {number} Priority.
	         */
	        function (element) {
	            return tilePriorityFunction.apply(null, element);
	        },
	        /**
	         * @param {Array} element Element.
	         * @return {string} Key.
	         */
	        function (element) {
	            return (/** @type {import("./Tile.js").default} */element[0].getKey()
	            );
	        }) || this;
	        /** @private */
	        _this.boundHandleTileChange_ = _this.handleTileChange.bind(_this);
	        /**
	         * @private
	         * @type {function(): ?}
	         */
	        _this.tileChangeCallback_ = tileChangeCallback;
	        /**
	         * @private
	         * @type {number}
	         */
	        _this.tilesLoading_ = 0;
	        /**
	         * @private
	         * @type {!Object<string,boolean>}
	         */
	        _this.tilesLoadingKeys_ = {};
	        return _this;
	    }
	    /**
	     * @inheritDoc
	     */
	    TileQueue.prototype.enqueue = function (element) {
	        var added = _super.prototype.enqueue.call(this, element);
	        if (added) {
	            var tile = element[0];
	            tile.addEventListener(_EventType2.default.CHANGE, this.boundHandleTileChange_);
	        }
	        return added;
	    };
	    /**
	     * @return {number} Number of tiles loading.
	     */
	    TileQueue.prototype.getTilesLoading = function () {
	        return this.tilesLoading_;
	    };
	    /**
	     * @param {import("./events/Event.js").default} event Event.
	     * @protected
	     */
	    TileQueue.prototype.handleTileChange = function (event) {
	        var tile = /** @type {import("./Tile.js").default} */event.target;
	        var state = tile.getState();
	        if (tile.hifi && state === _TileState2.default.LOADED || state === _TileState2.default.ERROR || state === _TileState2.default.EMPTY || state === _TileState2.default.ABORT) {
	            tile.removeEventListener(_EventType2.default.CHANGE, this.boundHandleTileChange_);
	            var tileKey = tile.getKey();
	            if (tileKey in this.tilesLoadingKeys_) {
	                delete this.tilesLoadingKeys_[tileKey];
	                --this.tilesLoading_;
	            }
	            this.tileChangeCallback_();
	        }
	    };
	    /**
	     * @param {number} maxTotalLoading Maximum number tiles to load simultaneously.
	     * @param {number} maxNewLoads Maximum number of new tiles to load.
	     */
	    TileQueue.prototype.loadMoreTiles = function (maxTotalLoading, maxNewLoads) {
	        var newLoads = 0;
	        var abortedTiles = false;
	        var state, tile, tileKey;
	        while (this.tilesLoading_ < maxTotalLoading && newLoads < maxNewLoads && this.getCount() > 0) {
	            tile = /** @type {import("./Tile.js").default} */this.dequeue()[0];
	            tileKey = tile.getKey();
	            state = tile.getState();
	            if (state === _TileState2.default.ABORT) {
	                abortedTiles = true;
	            } else if (state === _TileState2.default.IDLE && !(tileKey in this.tilesLoadingKeys_)) {
	                this.tilesLoadingKeys_[tileKey] = true;
	                ++this.tilesLoading_;
	                ++newLoads;
	                tile.load();
	            }
	        }
	        if (newLoads === 0 && abortedTiles) {
	            // Do not stop the render loop when all wanted tiles were aborted due to
	            // a small, saturated tile cache.
	            this.tileChangeCallback_();
	        }
	    };
	    return TileQueue;
	}(_PriorityQueue2.default);
	exports.default = TileQueue;
	//# sourceMappingURL=TileQueue.js.map

/***/ }),
/* 581 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	exports.createExtent = createExtent;
	exports.none = none;
	
	var _math = __webpack_require__(19);
	
	/**
	 * @typedef {function((import("./coordinate.js").Coordinate|undefined), number, import("./size.js").Size, boolean=): (import("./coordinate.js").Coordinate|undefined)} Type
	 */
	/**
	 * @param {import("./extent.js").Extent} extent Extent.
	 * @param {boolean} onlyCenter If true, the constraint will only apply to the view center.
	 * @param {boolean} smooth If true, the view will be able to go slightly out of the given extent
	 * (only during interaction and animation).
	 * @return {Type} The constraint.
	 */
	function createExtent(extent, onlyCenter, smooth) {
	    return (
	        /**
	         * @param {import("./coordinate.js").Coordinate|undefined} center Center.
	         * @param {number} resolution Resolution.
	         * @param {import("./size.js").Size} size Viewport size; unused if `onlyCenter` was specified.
	         * @param {boolean=} opt_isMoving True if an interaction or animation is in progress.
	         * @return {import("./coordinate.js").Coordinate|undefined} Center.
	         */
	        function (center, resolution, size, opt_isMoving) {
	            if (center) {
	                var viewWidth = onlyCenter ? 0 : size[0] * resolution;
	                var viewHeight = onlyCenter ? 0 : size[1] * resolution;
	                var minX = extent[0] + viewWidth / 2;
	                var maxX = extent[2] - viewWidth / 2;
	                var minY = extent[1] + viewHeight / 2;
	                var maxY = extent[3] - viewHeight / 2;
	                // note: when zooming out of bounds, min and max values for x and y may
	                // end up inverted (min > max); this has to be accounted for
	                if (minX > maxX) {
	                    minX = (maxX + minX) / 2;
	                    maxX = minX;
	                }
	                if (minY > maxY) {
	                    minY = (maxY + minY) / 2;
	                    maxY = minY;
	                }
	                var x = (0, _math.clamp)(center[0], minX, maxX);
	                var y = (0, _math.clamp)(center[1], minY, maxY);
	                var ratio = 30 * resolution;
	                // during an interaction, allow some overscroll
	                if (opt_isMoving && smooth) {
	                    x += -ratio * Math.log(1 + Math.max(0, minX - center[0]) / ratio) + ratio * Math.log(1 + Math.max(0, center[0] - maxX) / ratio);
	                    y += -ratio * Math.log(1 + Math.max(0, minY - center[1]) / ratio) + ratio * Math.log(1 + Math.max(0, center[1] - maxY) / ratio);
	                }
	                return [x, y];
	            } else {
	                return undefined;
	            }
	        }
	    );
	}
	/**
	 * @param {import("./coordinate.js").Coordinate=} center Center.
	 * @return {import("./coordinate.js").Coordinate|undefined} Center.
	 */
	/**
	 * @module ol/centerconstraint
	 */
	function none(center) {
	    return center;
	}
	//# sourceMappingURL=centerconstraint.js.map

/***/ }),
/* 582 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	exports.ZoomToExtent = exports.ZoomSlider = exports.Zoom = exports.ScaleLine = exports.Rotate = exports.OverviewMap = exports.MousePosition = exports.FullScreen = exports.Control = exports.Attribution = undefined;
	
	var _Attribution = __webpack_require__(263);
	
	Object.defineProperty(exports, 'Attribution', {
	    enumerable: true,
	    get: function get() {
	        return _interopRequireDefault(_Attribution).default;
	    }
	});
	
	var _Control = __webpack_require__(56);
	
	Object.defineProperty(exports, 'Control', {
	    enumerable: true,
	    get: function get() {
	        return _interopRequireDefault(_Control).default;
	    }
	});
	
	var _FullScreen = __webpack_require__(583);
	
	Object.defineProperty(exports, 'FullScreen', {
	    enumerable: true,
	    get: function get() {
	        return _interopRequireDefault(_FullScreen).default;
	    }
	});
	
	var _MousePosition = __webpack_require__(264);
	
	Object.defineProperty(exports, 'MousePosition', {
	    enumerable: true,
	    get: function get() {
	        return _interopRequireDefault(_MousePosition).default;
	    }
	});
	
	var _OverviewMap = __webpack_require__(584);
	
	Object.defineProperty(exports, 'OverviewMap', {
	    enumerable: true,
	    get: function get() {
	        return _interopRequireDefault(_OverviewMap).default;
	    }
	});
	
	var _Rotate = __webpack_require__(585);
	
	Object.defineProperty(exports, 'Rotate', {
	    enumerable: true,
	    get: function get() {
	        return _interopRequireDefault(_Rotate).default;
	    }
	});
	
	var _ScaleLine = __webpack_require__(586);
	
	Object.defineProperty(exports, 'ScaleLine', {
	    enumerable: true,
	    get: function get() {
	        return _interopRequireDefault(_ScaleLine).default;
	    }
	});
	
	var _Zoom = __webpack_require__(265);
	
	Object.defineProperty(exports, 'Zoom', {
	    enumerable: true,
	    get: function get() {
	        return _interopRequireDefault(_Zoom).default;
	    }
	});
	
	var _ZoomSlider = __webpack_require__(587);
	
	Object.defineProperty(exports, 'ZoomSlider', {
	    enumerable: true,
	    get: function get() {
	        return _interopRequireDefault(_ZoomSlider).default;
	    }
	});
	
	var _ZoomToExtent = __webpack_require__(588);
	
	Object.defineProperty(exports, 'ZoomToExtent', {
	    enumerable: true,
	    get: function get() {
	        return _interopRequireDefault(_ZoomToExtent).default;
	    }
	});
	exports.defaults = defaults;
	
	var _Collection = __webpack_require__(63);
	
	var _Collection2 = _interopRequireDefault(_Collection);
	
	var _Attribution2 = _interopRequireDefault(_Attribution);
	
	var _Rotate2 = _interopRequireDefault(_Rotate);
	
	var _Zoom2 = _interopRequireDefault(_Zoom);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	/**
	 * @typedef {Object} DefaultsOptions
	 * @property {boolean} [attribution=true] Include
	 * {@link module:ol/control/Attribution~Attribution}.
	 * @property {import("./control/Attribution.js").Options} [attributionOptions]
	 * Options for {@link module:ol/control/Attribution~Attribution}.
	 * @property {boolean} [rotate=true] Include
	 * {@link module:ol/control/Rotate~Rotate}.
	 * @property {import("./control/Rotate.js").Options} [rotateOptions] Options
	 * for {@link module:ol/control/Rotate~Rotate}.
	 * @property {boolean} [zoom] Include {@link module:ol/control/Zoom~Zoom}.
	 * @property {import("./control/Zoom.js").Options} [zoomOptions] Options for
	 * {@link module:ol/control/Zoom~Zoom}.
	 * @api
	 */
	/**
	 * Set of controls included in maps by default. Unless configured otherwise,
	 * this returns a collection containing an instance of each of the following
	 * controls:
	 * * {@link module:ol/control/Zoom~Zoom}
	 * * {@link module:ol/control/Rotate~Rotate}
	 * * {@link module:ol/control/Attribution~Attribution}
	 *
	 * @param {DefaultsOptions=} opt_options
	 * Defaults options.
	 * @return {Collection<import("./control/Control.js").default>}
	 * Controls.
	 * @api
	 */
	function defaults(opt_options) {
	    var options = opt_options ? opt_options : {};
	    var controls = new _Collection2.default();
	    var zoomControl = options.zoom !== undefined ? options.zoom : true;
	    if (zoomControl) {
	        controls.push(new _Zoom2.default(options.zoomOptions));
	    }
	    var rotateControl = options.rotate !== undefined ? options.rotate : true;
	    if (rotateControl) {
	        controls.push(new _Rotate2.default(options.rotateOptions));
	    }
	    var attributionControl = options.attribution !== undefined ? options.attribution : true;
	    if (attributionControl) {
	        controls.push(new _Attribution2.default(options.attributionOptions));
	    }
	    return controls;
	}
	//# sourceMappingURL=control.js.map

/***/ }),
/* 583 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	
	var _Control = __webpack_require__(56);
	
	var _Control2 = _interopRequireDefault(_Control);
	
	var _css = __webpack_require__(47);
	
	var _dom = __webpack_require__(34);
	
	var _events = __webpack_require__(30);
	
	var _EventType = __webpack_require__(10);
	
	var _EventType2 = _interopRequireDefault(_EventType);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var __extends = undefined && undefined.__extends || function () {
	    var _extendStatics = function extendStatics(d, b) {
	        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	            d.__proto__ = b;
	        } || function (d, b) {
	            for (var p in b) {
	                if (b.hasOwnProperty(p)) d[p] = b[p];
	            }
	        };
	        return _extendStatics(d, b);
	    };
	    return function (d, b) {
	        _extendStatics(d, b);
	        function __() {
	            this.constructor = d;
	        }
	        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	    };
	}();
	/**
	 * @module ol/control/FullScreen
	 */
	
	var events = ['fullscreenchange', 'webkitfullscreenchange', 'MSFullscreenChange'];
	/**
	 * @typedef {Object} Options
	 * @property {string} [className='ol-full-screen'] CSS class name.
	 * @property {string|Text} [label='\u2922'] Text label to use for the button.
	 * Instead of text, also an element (e.g. a `span` element) can be used.
	 * @property {string|Text} [labelActive='\u00d7'] Text label to use for the
	 * button when full-screen is active.
	 * Instead of text, also an element (e.g. a `span` element) can be used.
	 * @property {string} [tipLabel='Toggle full-screen'] Text label to use for the button tip.
	 * @property {boolean} [keys=false] Full keyboard access.
	 * @property {HTMLElement|string} [target] Specify a target if you want the
	 * control to be rendered outside of the map's viewport.
	 * @property {HTMLElement|string} [source] The element to be displayed
	 * fullscreen. When not provided, the element containing the map viewport will
	 * be displayed fullscreen.
	 */
	/**
	 * @classdesc
	 * Provides a button that when clicked fills up the full screen with the map.
	 * The full screen source element is by default the element containing the map viewport unless
	 * overridden by providing the `source` option. In which case, the dom
	 * element introduced using this parameter will be displayed in full screen.
	 *
	 * When in full screen mode, a close button is shown to exit full screen mode.
	 * The [Fullscreen API](http://www.w3.org/TR/fullscreen/) is used to
	 * toggle the map in full screen mode.
	 *
	 * @api
	 */
	var FullScreen = /** @class */function (_super) {
	    __extends(FullScreen, _super);
	    /**
	     * @param {Options=} opt_options Options.
	     */
	    function FullScreen(opt_options) {
	        var _this = this;
	        var options = opt_options ? opt_options : {};
	        _this = _super.call(this, {
	            element: document.createElement('div'),
	            target: options.target
	        }) || this;
	        /**
	         * @private
	         * @type {string}
	         */
	        _this.cssClassName_ = options.className !== undefined ? options.className : 'ol-full-screen';
	        var label = options.label !== undefined ? options.label : '\u2922';
	        /**
	         * @private
	         * @type {Text}
	         */
	        _this.labelNode_ = typeof label === 'string' ? document.createTextNode(label) : label;
	        var labelActive = options.labelActive !== undefined ? options.labelActive : '\xD7';
	        /**
	         * @private
	         * @type {Text}
	         */
	        _this.labelActiveNode_ = typeof labelActive === 'string' ? document.createTextNode(labelActive) : labelActive;
	        /**
	         * @private
	         * @type {HTMLElement}
	         */
	        _this.button_ = document.createElement('button');
	        var tipLabel = options.tipLabel ? options.tipLabel : 'Toggle full-screen';
	        _this.setClassName_(_this.button_, isFullScreen());
	        _this.button_.setAttribute('type', 'button');
	        _this.button_.title = tipLabel;
	        _this.button_.appendChild(_this.labelNode_);
	        _this.button_.addEventListener(_EventType2.default.CLICK, _this.handleClick_.bind(_this), false);
	        var cssClasses = _this.cssClassName_ + ' ' + _css.CLASS_UNSELECTABLE + ' ' + _css.CLASS_CONTROL + ' ' + (!isFullScreenSupported() ? _css.CLASS_UNSUPPORTED : '');
	        var element = _this.element;
	        element.className = cssClasses;
	        element.appendChild(_this.button_);
	        /**
	         * @private
	         * @type {boolean}
	         */
	        _this.keys_ = options.keys !== undefined ? options.keys : false;
	        /**
	         * @private
	         * @type {HTMLElement|string|undefined}
	         */
	        _this.source_ = options.source;
	        return _this;
	    }
	    /**
	     * @param {MouseEvent} event The event to handle
	     * @private
	     */
	    FullScreen.prototype.handleClick_ = function (event) {
	        event.preventDefault();
	        this.handleFullScreen_();
	    };
	    /**
	     * @private
	     */
	    FullScreen.prototype.handleFullScreen_ = function () {
	        if (!isFullScreenSupported()) {
	            return;
	        }
	        var map = this.getMap();
	        if (!map) {
	            return;
	        }
	        if (isFullScreen()) {
	            exitFullScreen();
	        } else {
	            var element = void 0;
	            if (this.source_) {
	                element = typeof this.source_ === 'string' ? document.getElementById(this.source_) : this.source_;
	            } else {
	                element = map.getTargetElement();
	            }
	            if (this.keys_) {
	                requestFullScreenWithKeys(element);
	            } else {
	                requestFullScreen(element);
	            }
	        }
	    };
	    /**
	     * @private
	     */
	    FullScreen.prototype.handleFullScreenChange_ = function () {
	        var map = this.getMap();
	        if (isFullScreen()) {
	            this.setClassName_(this.button_, true);
	            (0, _dom.replaceNode)(this.labelActiveNode_, this.labelNode_);
	        } else {
	            this.setClassName_(this.button_, false);
	            (0, _dom.replaceNode)(this.labelNode_, this.labelActiveNode_);
	        }
	        if (map) {
	            map.updateSize();
	        }
	    };
	    /**
	     * @param {HTMLElement} element Target element
	     * @param {boolean} fullscreen True if fullscreen class name should be active
	     * @private
	     */
	    FullScreen.prototype.setClassName_ = function (element, fullscreen) {
	        var activeClassName = this.cssClassName_ + '-true';
	        var inactiveClassName = this.cssClassName_ + '-false';
	        var nextClassName = fullscreen ? activeClassName : inactiveClassName;
	        element.classList.remove(activeClassName);
	        element.classList.remove(inactiveClassName);
	        element.classList.add(nextClassName);
	    };
	    /**
	     * @inheritDoc
	     * @api
	     */
	    FullScreen.prototype.setMap = function (map) {
	        _super.prototype.setMap.call(this, map);
	        if (map) {
	            for (var i = 0, ii = events.length; i < ii; ++i) {
	                this.listenerKeys.push((0, _events.listen)(document, events[i], this.handleFullScreenChange_, this));
	            }
	        }
	    };
	    return FullScreen;
	}(_Control2.default);
	/**
	 * @return {boolean} Fullscreen is supported by the current platform.
	 */
	function isFullScreenSupported() {
	    var body = document.body;
	    return !!(body.webkitRequestFullscreen || body.msRequestFullscreen && document.msFullscreenEnabled || body.requestFullscreen && document.fullscreenEnabled);
	}
	/**
	 * @return {boolean} Element is currently in fullscreen.
	 */
	function isFullScreen() {
	    return !!(document.webkitIsFullScreen || document.msFullscreenElement || document.fullscreenElement);
	}
	/**
	 * Request to fullscreen an element.
	 * @param {HTMLElement} element Element to request fullscreen
	 */
	function requestFullScreen(element) {
	    if (element.requestFullscreen) {
	        element.requestFullscreen();
	    } else if (element.msRequestFullscreen) {
	        element.msRequestFullscreen();
	    } else if (element.webkitRequestFullscreen) {
	        element.webkitRequestFullscreen();
	    }
	}
	/**
	 * Request to fullscreen an element with keyboard input.
	 * @param {HTMLElement} element Element to request fullscreen
	 */
	function requestFullScreenWithKeys(element) {
	    if (element.webkitRequestFullscreen) {
	        element.webkitRequestFullscreen();
	    } else {
	        requestFullScreen(element);
	    }
	}
	/**
	 * Exit fullscreen.
	 */
	function exitFullScreen() {
	    if (document.exitFullscreen) {
	        document.exitFullscreen();
	    } else if (document.msExitFullscreen) {
	        document.msExitFullscreen();
	    } else if (document.webkitExitFullscreen) {
	        document.webkitExitFullscreen();
	    }
	}
	exports.default = FullScreen;
	//# sourceMappingURL=FullScreen.js.map

/***/ }),
/* 584 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	exports.render = render;
	
	var _PluggableMap = __webpack_require__(257);
	
	var _PluggableMap2 = _interopRequireDefault(_PluggableMap);
	
	var _Composite = __webpack_require__(292);
	
	var _Composite2 = _interopRequireDefault(_Composite);
	
	var _MapEventType = __webpack_require__(142);
	
	var _MapEventType2 = _interopRequireDefault(_MapEventType);
	
	var _MapProperty = __webpack_require__(253);
	
	var _MapProperty2 = _interopRequireDefault(_MapProperty);
	
	var _Object = __webpack_require__(32);
	
	var _ObjectEventType = __webpack_require__(124);
	
	var _ObjectEventType2 = _interopRequireDefault(_ObjectEventType);
	
	var _Overlay = __webpack_require__(255);
	
	var _Overlay2 = _interopRequireDefault(_Overlay);
	
	var _OverlayPositioning = __webpack_require__(256);
	
	var _OverlayPositioning2 = _interopRequireDefault(_OverlayPositioning);
	
	var _ViewProperty = __webpack_require__(262);
	
	var _ViewProperty2 = _interopRequireDefault(_ViewProperty);
	
	var _Control = __webpack_require__(56);
	
	var _Control2 = _interopRequireDefault(_Control);
	
	var _Polygon = __webpack_require__(57);
	
	var _css = __webpack_require__(47);
	
	var _dom = __webpack_require__(34);
	
	var _events = __webpack_require__(30);
	
	var _EventType = __webpack_require__(10);
	
	var _EventType2 = _interopRequireDefault(_EventType);
	
	var _extent = __webpack_require__(4);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var __extends = undefined && undefined.__extends || function () {
	    var _extendStatics = function extendStatics(d, b) {
	        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	            d.__proto__ = b;
	        } || function (d, b) {
	            for (var p in b) {
	                if (b.hasOwnProperty(p)) d[p] = b[p];
	            }
	        };
	        return _extendStatics(d, b);
	    };
	    return function (d, b) {
	        _extendStatics(d, b);
	        function __() {
	            this.constructor = d;
	        }
	        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	    };
	}();
	/**
	 * @module ol/control/OverviewMap
	 */
	
	/**
	 * Maximum width and/or height extent ratio that determines when the overview
	 * map should be zoomed out.
	 * @type {number}
	 */
	var MAX_RATIO = 0.75;
	/**
	 * Minimum width and/or height extent ratio that determines when the overview
	 * map should be zoomed in.
	 * @type {number}
	 */
	var MIN_RATIO = 0.1;
	var ControlledMap = /** @class */function (_super) {
	    __extends(ControlledMap, _super);
	    function ControlledMap() {
	        return _super !== null && _super.apply(this, arguments) || this;
	    }
	    ControlledMap.prototype.createRenderer = function () {
	        return new _Composite2.default(this);
	    };
	    return ControlledMap;
	}(_PluggableMap2.default);
	/**
	 * @typedef {Object} Options
	 * @property {string} [className='ol-overviewmap'] CSS class name.
	 * @property {boolean} [collapsed=true] Whether the control should start collapsed or not (expanded).
	 * @property {string|HTMLElement} [collapseLabel='«'] Text label to use for the
	 * expanded overviewmap button. Instead of text, also an element (e.g. a `span` element) can be used.
	 * @property {boolean} [collapsible=true] Whether the control can be collapsed or not.
	 * @property {string|HTMLElement} [label='»'] Text label to use for the collapsed
	 * overviewmap button. Instead of text, also an element (e.g. a `span` element) can be used.
	 * @property {Array<import("../layer/Layer.js").default>|import("../Collection.js").default<import("../layer/Layer.js").default>} [layers]
	 * Layers for the overview map.
	 * @property {function(import("../MapEvent.js").default)} [render] Function called when the control
	 * should be re-rendered. This is called in a `requestAnimationFrame` callback.
	 * @property {boolean} [rotateWithView=false] Whether the control view should rotate with the main map view.
	 * @property {HTMLElement|string} [target] Specify a target if you want the control
	 * to be rendered outside of the map's viewport.
	 * @property {string} [tipLabel='Overview map'] Text label to use for the button tip.
	 * @property {import("../View.js").default} [view] Custom view for the overview map. If not provided,
	 * a default view with an EPSG:3857 projection will be used.
	 */
	/**
	 * Create a new control with a map acting as an overview map for another
	 * defined map.
	 *
	 * @api
	 */
	var OverviewMap = /** @class */function (_super) {
	    __extends(OverviewMap, _super);
	    /**
	     * @param {Options=} opt_options OverviewMap options.
	     */
	    function OverviewMap(opt_options) {
	        var _this = this;
	        var options = opt_options ? opt_options : {};
	        _this = _super.call(this, {
	            element: document.createElement('div'),
	            render: options.render || render,
	            target: options.target
	        }) || this;
	        /**
	         * @private
	         */
	        _this.boundHandleRotationChanged_ = _this.handleRotationChanged_.bind(_this);
	        /**
	         * @type {boolean}
	         * @private
	         */
	        _this.collapsed_ = options.collapsed !== undefined ? options.collapsed : true;
	        /**
	         * @private
	         * @type {boolean}
	         */
	        _this.collapsible_ = options.collapsible !== undefined ? options.collapsible : true;
	        if (!_this.collapsible_) {
	            _this.collapsed_ = false;
	        }
	        /**
	         * @private
	         * @type {boolean}
	         */
	        _this.rotateWithView_ = options.rotateWithView !== undefined ? options.rotateWithView : false;
	        /**
	         * @private
	         * @type {import("../extent.js").Extent|undefined}
	         */
	        _this.viewExtent_ = undefined;
	        var className = options.className !== undefined ? options.className : 'ol-overviewmap';
	        var tipLabel = options.tipLabel !== undefined ? options.tipLabel : 'Overview map';
	        var collapseLabel = options.collapseLabel !== undefined ? options.collapseLabel : '\xAB';
	        if (typeof collapseLabel === 'string') {
	            /**
	             * @private
	             * @type {HTMLElement}
	             */
	            _this.collapseLabel_ = document.createElement('span');
	            _this.collapseLabel_.textContent = collapseLabel;
	        } else {
	            _this.collapseLabel_ = collapseLabel;
	        }
	        var label = options.label !== undefined ? options.label : '\xBB';
	        if (typeof label === 'string') {
	            /**
	             * @private
	             * @type {HTMLElement}
	             */
	            _this.label_ = document.createElement('span');
	            _this.label_.textContent = label;
	        } else {
	            _this.label_ = label;
	        }
	        var activeLabel = _this.collapsible_ && !_this.collapsed_ ? _this.collapseLabel_ : _this.label_;
	        var button = document.createElement('button');
	        button.setAttribute('type', 'button');
	        button.title = tipLabel;
	        button.appendChild(activeLabel);
	        button.addEventListener(_EventType2.default.CLICK, _this.handleClick_.bind(_this), false);
	        /**
	         * @type {HTMLElement}
	         * @private
	         */
	        _this.ovmapDiv_ = document.createElement('div');
	        _this.ovmapDiv_.className = 'ol-overviewmap-map';
	        /**
	         * @type {ControlledMap}
	         * @private
	         */
	        _this.ovmap_ = new ControlledMap({
	            view: options.view
	        });
	        var ovmap = _this.ovmap_;
	        if (options.layers) {
	            options.layers.forEach(function (layer) {
	                ovmap.addLayer(layer);
	            });
	        }
	        var box = document.createElement('div');
	        box.className = 'ol-overviewmap-box';
	        box.style.boxSizing = 'border-box';
	        /**
	         * @type {import("../Overlay.js").default}
	         * @private
	         */
	        _this.boxOverlay_ = new _Overlay2.default({
	            position: [0, 0],
	            positioning: _OverlayPositioning2.default.CENTER_CENTER,
	            element: box
	        });
	        _this.ovmap_.addOverlay(_this.boxOverlay_);
	        var cssClasses = className + ' ' + _css.CLASS_UNSELECTABLE + ' ' + _css.CLASS_CONTROL + (_this.collapsed_ && _this.collapsible_ ? ' ' + _css.CLASS_COLLAPSED : '') + (_this.collapsible_ ? '' : ' ol-uncollapsible');
	        var element = _this.element;
	        element.className = cssClasses;
	        element.appendChild(_this.ovmapDiv_);
	        element.appendChild(button);
	        /* Interactive map */
	        var scope = _this;
	        var overlay = _this.boxOverlay_;
	        var overlayBox = _this.boxOverlay_.getElement();
	        /* Functions definition */
	        var computeDesiredMousePosition = function computeDesiredMousePosition(mousePosition) {
	            return {
	                clientX: mousePosition.clientX,
	                clientY: mousePosition.clientY
	            };
	        };
	        var move = function move(event) {
	            var position = /** @type {?} */computeDesiredMousePosition(event);
	            var coordinates = ovmap.getEventCoordinateInternal( /** @type {Event} */position);
	            overlay.setPosition(coordinates);
	        };
	        var endMoving = function endMoving(event) {
	            var coordinates = ovmap.getEventCoordinateInternal(event);
	            scope.getMap().getView().setCenterInternal(coordinates);
	            window.removeEventListener('mousemove', move);
	            window.removeEventListener('mouseup', endMoving);
	        };
	        /* Binding */
	        overlayBox.addEventListener('mousedown', function () {
	            window.addEventListener('mousemove', move);
	            window.addEventListener('mouseup', endMoving);
	        });
	        return _this;
	    }
	    /**
	     * @inheritDoc
	     * @api
	     */
	    OverviewMap.prototype.setMap = function (map) {
	        var oldMap = this.getMap();
	        if (map === oldMap) {
	            return;
	        }
	        if (oldMap) {
	            var oldView = oldMap.getView();
	            if (oldView) {
	                this.unbindView_(oldView);
	            }
	            this.ovmap_.setTarget(null);
	        }
	        _super.prototype.setMap.call(this, map);
	        if (map) {
	            this.ovmap_.setTarget(this.ovmapDiv_);
	            this.listenerKeys.push((0, _events.listen)(map, _ObjectEventType2.default.PROPERTYCHANGE, this.handleMapPropertyChange_, this));
	            var view = map.getView();
	            if (view) {
	                this.bindView_(view);
	                if (view.isDef()) {
	                    this.ovmap_.updateSize();
	                    this.resetExtent_();
	                }
	            }
	        }
	    };
	    /**
	     * Handle map property changes.  This only deals with changes to the map's view.
	     * @param {import("../Object.js").ObjectEvent} event The propertychange event.
	     * @private
	     */
	    OverviewMap.prototype.handleMapPropertyChange_ = function (event) {
	        if (event.key === _MapProperty2.default.VIEW) {
	            var oldView = /** @type {import("../View.js").default} */event.oldValue;
	            if (oldView) {
	                this.unbindView_(oldView);
	            }
	            var newView = this.getMap().getView();
	            this.bindView_(newView);
	        }
	    };
	    /**
	     * Register listeners for view property changes.
	     * @param {import("../View.js").default} view The view.
	     * @private
	     */
	    OverviewMap.prototype.bindView_ = function (view) {
	        view.addEventListener((0, _Object.getChangeEventType)(_ViewProperty2.default.ROTATION), this.boundHandleRotationChanged_);
	    };
	    /**
	     * Unregister listeners for view property changes.
	     * @param {import("../View.js").default} view The view.
	     * @private
	     */
	    OverviewMap.prototype.unbindView_ = function (view) {
	        view.removeEventListener((0, _Object.getChangeEventType)(_ViewProperty2.default.ROTATION), this.boundHandleRotationChanged_);
	    };
	    /**
	     * Handle rotation changes to the main map.
	     * @private
	     */
	    OverviewMap.prototype.handleRotationChanged_ = function () {
	        if (this.rotateWithView_) {
	            this.ovmap_.getView().setRotation(this.getMap().getView().getRotation());
	        }
	    };
	    /**
	     * Reset the overview map extent if the box size (width or
	     * height) is less than the size of the overview map size times minRatio
	     * or is greater than the size of the overview size times maxRatio.
	     *
	     * If the map extent was not reset, the box size can fits in the defined
	     * ratio sizes. This method then checks if is contained inside the overview
	     * map current extent. If not, recenter the overview map to the current
	     * main map center location.
	     * @private
	     */
	    OverviewMap.prototype.validateExtent_ = function () {
	        var map = this.getMap();
	        var ovmap = this.ovmap_;
	        if (!map.isRendered() || !ovmap.isRendered()) {
	            return;
	        }
	        var mapSize = /** @type {import("../size.js").Size} */map.getSize();
	        var view = map.getView();
	        var extent = view.calculateExtentInternal(mapSize);
	        if (this.viewExtent_ && (0, _extent.equals)(extent, this.viewExtent_)) {
	            // repeats of the same extent may indicate constraint conflicts leading to an endless cycle
	            return;
	        }
	        this.viewExtent_ = extent;
	        var ovmapSize = /** @type {import("../size.js").Size} */ovmap.getSize();
	        var ovview = ovmap.getView();
	        var ovextent = ovview.calculateExtentInternal(ovmapSize);
	        var topLeftPixel = ovmap.getPixelFromCoordinateInternal((0, _extent.getTopLeft)(extent));
	        var bottomRightPixel = ovmap.getPixelFromCoordinateInternal((0, _extent.getBottomRight)(extent));
	        var boxWidth = Math.abs(topLeftPixel[0] - bottomRightPixel[0]);
	        var boxHeight = Math.abs(topLeftPixel[1] - bottomRightPixel[1]);
	        var ovmapWidth = ovmapSize[0];
	        var ovmapHeight = ovmapSize[1];
	        if (boxWidth < ovmapWidth * MIN_RATIO || boxHeight < ovmapHeight * MIN_RATIO || boxWidth > ovmapWidth * MAX_RATIO || boxHeight > ovmapHeight * MAX_RATIO) {
	            this.resetExtent_();
	        } else if (!(0, _extent.containsExtent)(ovextent, extent)) {
	            this.recenter_();
	        }
	    };
	    /**
	     * Reset the overview map extent to half calculated min and max ratio times
	     * the extent of the main map.
	     * @private
	     */
	    OverviewMap.prototype.resetExtent_ = function () {
	        if (MAX_RATIO === 0 || MIN_RATIO === 0) {
	            return;
	        }
	        var map = this.getMap();
	        var ovmap = this.ovmap_;
	        var mapSize = /** @type {import("../size.js").Size} */map.getSize();
	        var view = map.getView();
	        var extent = view.calculateExtentInternal(mapSize);
	        var ovview = ovmap.getView();
	        // get how many times the current map overview could hold different
	        // box sizes using the min and max ratio, pick the step in the middle used
	        // to calculate the extent from the main map to set it to the overview map,
	        var steps = Math.log(MAX_RATIO / MIN_RATIO) / Math.LN2;
	        var ratio = 1 / (Math.pow(2, steps / 2) * MIN_RATIO);
	        (0, _extent.scaleFromCenter)(extent, ratio);
	        ovview.fitInternal((0, _Polygon.fromExtent)(extent));
	    };
	    /**
	     * Set the center of the overview map to the map center without changing its
	     * resolution.
	     * @private
	     */
	    OverviewMap.prototype.recenter_ = function () {
	        var map = this.getMap();
	        var ovmap = this.ovmap_;
	        var view = map.getView();
	        var ovview = ovmap.getView();
	        ovview.setCenterInternal(view.getCenterInternal());
	    };
	    /**
	     * Update the box using the main map extent
	     * @private
	     */
	    OverviewMap.prototype.updateBox_ = function () {
	        var map = this.getMap();
	        var ovmap = this.ovmap_;
	        if (!map.isRendered() || !ovmap.isRendered()) {
	            return;
	        }
	        var mapSize = /** @type {import("../size.js").Size} */map.getSize();
	        var view = map.getView();
	        var ovview = ovmap.getView();
	        var rotation = this.rotateWithView_ ? 0 : -view.getRotation();
	        var overlay = this.boxOverlay_;
	        var box = this.boxOverlay_.getElement();
	        var center = view.getCenterInternal();
	        var resolution = view.getResolution();
	        var ovresolution = ovview.getResolution();
	        var width = mapSize[0] * resolution / ovresolution;
	        var height = mapSize[1] * resolution / ovresolution;
	        // set position using center coordinates
	        overlay.setPosition(center);
	        // set box size calculated from map extent size and overview map resolution
	        if (box) {
	            box.style.width = width + 'px';
	            box.style.height = height + 'px';
	            var transform = 'rotate(' + rotation + 'rad)';
	            box.style.transform = transform;
	        }
	    };
	    /**
	     * @param {MouseEvent} event The event to handle
	     * @private
	     */
	    OverviewMap.prototype.handleClick_ = function (event) {
	        event.preventDefault();
	        this.handleToggle_();
	    };
	    /**
	     * @private
	     */
	    OverviewMap.prototype.handleToggle_ = function () {
	        this.element.classList.toggle(_css.CLASS_COLLAPSED);
	        if (this.collapsed_) {
	            (0, _dom.replaceNode)(this.collapseLabel_, this.label_);
	        } else {
	            (0, _dom.replaceNode)(this.label_, this.collapseLabel_);
	        }
	        this.collapsed_ = !this.collapsed_;
	        // manage overview map if it had not been rendered before and control
	        // is expanded
	        var ovmap = this.ovmap_;
	        if (!this.collapsed_) {
	            if (ovmap.isRendered()) {
	                this.viewExtent_ = undefined;
	                ovmap.render();
	                return;
	            }
	            ovmap.updateSize();
	            this.resetExtent_();
	            (0, _events.listenOnce)(ovmap, _MapEventType2.default.POSTRENDER, function (event) {
	                this.updateBox_();
	            }, this);
	        }
	    };
	    /**
	     * Return `true` if the overview map is collapsible, `false` otherwise.
	     * @return {boolean} True if the widget is collapsible.
	     * @api
	     */
	    OverviewMap.prototype.getCollapsible = function () {
	        return this.collapsible_;
	    };
	    /**
	     * Set whether the overview map should be collapsible.
	     * @param {boolean} collapsible True if the widget is collapsible.
	     * @api
	     */
	    OverviewMap.prototype.setCollapsible = function (collapsible) {
	        if (this.collapsible_ === collapsible) {
	            return;
	        }
	        this.collapsible_ = collapsible;
	        this.element.classList.toggle('ol-uncollapsible');
	        if (!collapsible && this.collapsed_) {
	            this.handleToggle_();
	        }
	    };
	    /**
	     * Collapse or expand the overview map according to the passed parameter. Will
	     * not do anything if the overview map isn't collapsible or if the current
	     * collapsed state is already the one requested.
	     * @param {boolean} collapsed True if the widget is collapsed.
	     * @api
	     */
	    OverviewMap.prototype.setCollapsed = function (collapsed) {
	        if (!this.collapsible_ || this.collapsed_ === collapsed) {
	            return;
	        }
	        this.handleToggle_();
	    };
	    /**
	     * Determine if the overview map is collapsed.
	     * @return {boolean} The overview map is collapsed.
	     * @api
	     */
	    OverviewMap.prototype.getCollapsed = function () {
	        return this.collapsed_;
	    };
	    /**
	     * Return `true` if the overview map view can rotate, `false` otherwise.
	     * @return {boolean} True if the control view can rotate.
	     * @api
	     */
	    OverviewMap.prototype.getRotateWithView = function () {
	        return this.rotateWithView_;
	    };
	    /**
	     * Set whether the overview map view should rotate with the main map view.
	     * @param {boolean} rotateWithView True if the control view should rotate.
	     * @api
	     */
	    OverviewMap.prototype.setRotateWithView = function (rotateWithView) {
	        if (this.rotateWithView_ === rotateWithView) {
	            return;
	        }
	        this.rotateWithView_ = rotateWithView;
	        if (this.getMap().getView().getRotation() !== 0) {
	            if (this.rotateWithView_) {
	                this.handleRotationChanged_();
	            } else {
	                this.ovmap_.getView().setRotation(0);
	            }
	            this.viewExtent_ = undefined;
	            this.validateExtent_();
	            this.updateBox_();
	        }
	    };
	    /**
	     * Return the overview map.
	     * @return {import("../PluggableMap.js").default} Overview map.
	     * @api
	     */
	    OverviewMap.prototype.getOverviewMap = function () {
	        return this.ovmap_;
	    };
	    return OverviewMap;
	}(_Control2.default);
	/**
	 * Update the overview map element.
	 * @param {import("../MapEvent.js").default} mapEvent Map event.
	 * @this {OverviewMap}
	 * @api
	 */
	function render(mapEvent) {
	    this.validateExtent_();
	    this.updateBox_();
	}
	exports.default = OverviewMap;
	//# sourceMappingURL=OverviewMap.js.map

/***/ }),
/* 585 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	exports.render = render;
	
	var _Control = __webpack_require__(56);
	
	var _Control2 = _interopRequireDefault(_Control);
	
	var _css = __webpack_require__(47);
	
	var _easing = __webpack_require__(71);
	
	var _EventType = __webpack_require__(10);
	
	var _EventType2 = _interopRequireDefault(_EventType);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var __extends = undefined && undefined.__extends || function () {
	    var _extendStatics = function extendStatics(d, b) {
	        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	            d.__proto__ = b;
	        } || function (d, b) {
	            for (var p in b) {
	                if (b.hasOwnProperty(p)) d[p] = b[p];
	            }
	        };
	        return _extendStatics(d, b);
	    };
	    return function (d, b) {
	        _extendStatics(d, b);
	        function __() {
	            this.constructor = d;
	        }
	        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	    };
	}();
	/**
	 * @module ol/control/Rotate
	 */
	
	/**
	 * @typedef {Object} Options
	 * @property {string} [className='ol-rotate'] CSS class name.
	 * @property {string|HTMLElement} [label='⇧'] Text label to use for the rotate button.
	 * Instead of text, also an element (e.g. a `span` element) can be used.
	 * @property {string} [tipLabel='Reset rotation'] Text label to use for the rotate tip.
	 * @property {number} [duration=250] Animation duration in milliseconds.
	 * @property {boolean} [autoHide=true] Hide the control when rotation is 0.
	 * @property {function(import("../MapEvent.js").default)} [render] Function called when the control should
	 * be re-rendered. This is called in a `requestAnimationFrame` callback.
	 * @property {function()} [resetNorth] Function called when the control is clicked.
	 * This will override the default `resetNorth`.
	 * @property {HTMLElement|string} [target] Specify a target if you want the control to be
	 * rendered outside of the map's viewport.
	 */
	/**
	 * @classdesc
	 * A button control to reset rotation to 0.
	 * To style this control use css selector `.ol-rotate`. A `.ol-hidden` css
	 * selector is added to the button when the rotation is 0.
	 *
	 * @api
	 */
	var Rotate = /** @class */function (_super) {
	    __extends(Rotate, _super);
	    /**
	     * @param {Options=} opt_options Rotate options.
	     */
	    function Rotate(opt_options) {
	        var _this = this;
	        var options = opt_options ? opt_options : {};
	        _this = _super.call(this, {
	            element: document.createElement('div'),
	            render: options.render || render,
	            target: options.target
	        }) || this;
	        var className = options.className !== undefined ? options.className : 'ol-rotate';
	        var label = options.label !== undefined ? options.label : '\u21E7';
	        /**
	         * @type {HTMLElement}
	         * @private
	         */
	        _this.label_ = null;
	        if (typeof label === 'string') {
	            _this.label_ = document.createElement('span');
	            _this.label_.className = 'ol-compass';
	            _this.label_.textContent = label;
	        } else {
	            _this.label_ = label;
	            _this.label_.classList.add('ol-compass');
	        }
	        var tipLabel = options.tipLabel ? options.tipLabel : 'Reset rotation';
	        var button = document.createElement('button');
	        button.className = className + '-reset';
	        button.setAttribute('type', 'button');
	        button.title = tipLabel;
	        button.appendChild(_this.label_);
	        button.addEventListener(_EventType2.default.CLICK, _this.handleClick_.bind(_this), false);
	        var cssClasses = className + ' ' + _css.CLASS_UNSELECTABLE + ' ' + _css.CLASS_CONTROL;
	        var element = _this.element;
	        element.className = cssClasses;
	        element.appendChild(button);
	        _this.callResetNorth_ = options.resetNorth ? options.resetNorth : undefined;
	        /**
	         * @type {number}
	         * @private
	         */
	        _this.duration_ = options.duration !== undefined ? options.duration : 250;
	        /**
	         * @type {boolean}
	         * @private
	         */
	        _this.autoHide_ = options.autoHide !== undefined ? options.autoHide : true;
	        /**
	         * @private
	         * @type {number|undefined}
	         */
	        _this.rotation_ = undefined;
	        if (_this.autoHide_) {
	            _this.element.classList.add(_css.CLASS_HIDDEN);
	        }
	        return _this;
	    }
	    /**
	     * @param {MouseEvent} event The event to handle
	     * @private
	     */
	    Rotate.prototype.handleClick_ = function (event) {
	        event.preventDefault();
	        if (this.callResetNorth_ !== undefined) {
	            this.callResetNorth_();
	        } else {
	            this.resetNorth_();
	        }
	    };
	    /**
	     * @private
	     */
	    Rotate.prototype.resetNorth_ = function () {
	        var map = this.getMap();
	        var view = map.getView();
	        if (!view) {
	            // the map does not have a view, so we can't act
	            // upon it
	            return;
	        }
	        if (view.getRotation() !== undefined) {
	            if (this.duration_ > 0) {
	                view.animate({
	                    rotation: 0,
	                    duration: this.duration_,
	                    easing: _easing.easeOut
	                });
	            } else {
	                view.setRotation(0);
	            }
	        }
	    };
	    return Rotate;
	}(_Control2.default);
	/**
	 * Update the rotate control element.
	 * @param {import("../MapEvent.js").default} mapEvent Map event.
	 * @this {Rotate}
	 * @api
	 */
	function render(mapEvent) {
	    var frameState = mapEvent.frameState;
	    if (!frameState) {
	        return;
	    }
	    var rotation = frameState.viewState.rotation;
	    if (rotation != this.rotation_) {
	        var transform = 'rotate(' + rotation + 'rad)';
	        if (this.autoHide_) {
	            var contains = this.element.classList.contains(_css.CLASS_HIDDEN);
	            if (!contains && rotation === 0) {
	                this.element.classList.add(_css.CLASS_HIDDEN);
	            } else if (contains && rotation !== 0) {
	                this.element.classList.remove(_css.CLASS_HIDDEN);
	            }
	        }
	        this.label_.style.transform = transform;
	    }
	    this.rotation_ = rotation;
	}
	exports.default = Rotate;
	//# sourceMappingURL=Rotate.js.map

/***/ }),
/* 586 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	exports.Units = undefined;
	exports.render = render;
	
	var _Object = __webpack_require__(32);
	
	var _asserts = __webpack_require__(29);
	
	var _Control = __webpack_require__(56);
	
	var _Control2 = _interopRequireDefault(_Control);
	
	var _css = __webpack_require__(47);
	
	var _proj = __webpack_require__(16);
	
	var _Units = __webpack_require__(65);
	
	var _Units2 = _interopRequireDefault(_Units);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var __extends = undefined && undefined.__extends || function () {
	    var _extendStatics = function extendStatics(d, b) {
	        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	            d.__proto__ = b;
	        } || function (d, b) {
	            for (var p in b) {
	                if (b.hasOwnProperty(p)) d[p] = b[p];
	            }
	        };
	        return _extendStatics(d, b);
	    };
	    return function (d, b) {
	        _extendStatics(d, b);
	        function __() {
	            this.constructor = d;
	        }
	        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	    };
	}();
	/**
	 * @module ol/control/ScaleLine
	 */
	
	/**
	 * @type {string}
	 */
	var UNITS_PROP = 'units';
	/**
	 * Units for the scale line. Supported values are `'degrees'`, `'imperial'`,
	 * `'nautical'`, `'metric'`, `'us'`.
	 * @enum {string}
	 */
	var Units = exports.Units = {
	    DEGREES: 'degrees',
	    IMPERIAL: 'imperial',
	    NAUTICAL: 'nautical',
	    METRIC: 'metric',
	    US: 'us'
	};
	/**
	 * @const
	 * @type {Array<number>}
	 */
	var LEADING_DIGITS = [1, 2, 5];
	/**
	 * @typedef {Object} Options
	 * @property {string} [className='ol-scale-line'] CSS Class name.
	 * @property {number} [minWidth=64] Minimum width in pixels.
	 * @property {function(import("../MapEvent.js").default)} [render] Function called when the control
	 * should be re-rendered. This is called in a `requestAnimationFrame` callback.
	 * @property {HTMLElement|string} [target] Specify a target if you want the control
	 * to be rendered outside of the map's viewport.
	 * @property {Units|string} [units='metric'] Units.
	 * @property {boolean} [bar=false] Render scalebars instead of a line.
	 * @property {number} [steps=4] Number of steps the scalebar should use. Use even numbers
	 * for best results. Only applies when `bar` is `true`.
	 * @property {boolean} [text=false] Render the text scale above of the scalebar. Only applies
	 * when `bar` is `true`.
	 */
	/**
	 * @classdesc
	 * A control displaying rough y-axis distances, calculated for the center of the
	 * viewport. For conformal projections (e.g. EPSG:3857, the default view
	 * projection in OpenLayers), the scale is valid for all directions.
	 * No scale line will be shown when the y-axis distance of a pixel at the
	 * viewport center cannot be calculated in the view projection.
	 * By default the scale line will show in the bottom left portion of the map,
	 * but this can be changed by using the css selector `.ol-scale-line`.
	 * When specifying `bar` as `true`, a scalebar will be rendered instead
	 * of a scaleline.
	 *
	 * @api
	 */
	var ScaleLine = /** @class */function (_super) {
	    __extends(ScaleLine, _super);
	    /**
	     * @param {Options=} opt_options Scale line options.
	     */
	    function ScaleLine(opt_options) {
	        var _this = this;
	        var options = opt_options ? opt_options : {};
	        var className = options.className !== undefined ? options.className : options.bar ? 'ol-scale-bar' : 'ol-scale-line';
	        _this = _super.call(this, {
	            element: document.createElement('div'),
	            render: options.render || render,
	            target: options.target
	        }) || this;
	        /**
	         * @private
	         * @type {HTMLElement}
	         */
	        _this.innerElement_ = document.createElement('div');
	        _this.innerElement_.className = className + '-inner';
	        _this.element.className = className + ' ' + _css.CLASS_UNSELECTABLE;
	        _this.element.appendChild(_this.innerElement_);
	        /**
	         * @private
	         * @type {?import("../View.js").State}
	         */
	        _this.viewState_ = null;
	        /**
	         * @private
	         * @type {number}
	         */
	        _this.minWidth_ = options.minWidth !== undefined ? options.minWidth : 64;
	        /**
	         * @private
	         * @type {boolean}
	         */
	        _this.renderedVisible_ = false;
	        /**
	         * @private
	         * @type {number|undefined}
	         */
	        _this.renderedWidth_ = undefined;
	        /**
	         * @private
	         * @type {string}
	         */
	        _this.renderedHTML_ = '';
	        _this.addEventListener((0, _Object.getChangeEventType)(UNITS_PROP), _this.handleUnitsChanged_);
	        _this.setUnits(options.units || Units.METRIC);
	        /**
	         * @private
	         * @type {boolean}
	         */
	        _this.scaleBar_ = options.bar || false;
	        /**
	         * @private
	         * @type {number}
	         */
	        _this.scaleBarSteps_ = options.steps || 4;
	        /**
	         * @private
	         * @type {boolean}
	         */
	        _this.scaleBarText_ = options.text || false;
	        return _this;
	    }
	    /**
	     * Return the units to use in the scale line.
	     * @return {Units} The units
	     * to use in the scale line.
	     * @observable
	     * @api
	     */
	    ScaleLine.prototype.getUnits = function () {
	        return this.get(UNITS_PROP);
	    };
	    /**
	     * @private
	     */
	    ScaleLine.prototype.handleUnitsChanged_ = function () {
	        this.updateElement_();
	    };
	    /**
	     * Set the units to use in the scale line.
	     * @param {Units} units The units to use in the scale line.
	     * @observable
	     * @api
	     */
	    ScaleLine.prototype.setUnits = function (units) {
	        this.set(UNITS_PROP, units);
	    };
	    /**
	     * @private
	     */
	    ScaleLine.prototype.updateElement_ = function () {
	        var viewState = this.viewState_;
	        if (!viewState) {
	            if (this.renderedVisible_) {
	                this.element.style.display = 'none';
	                this.renderedVisible_ = false;
	            }
	            return;
	        }
	        var center = viewState.center;
	        var projection = viewState.projection;
	        var units = this.getUnits();
	        var pointResolutionUnits = units == Units.DEGREES ? _Units2.default.DEGREES : _Units2.default.METERS;
	        var pointResolution = (0, _proj.getPointResolution)(projection, viewState.resolution, center, pointResolutionUnits);
	        var nominalCount = this.minWidth_ * pointResolution;
	        var suffix = '';
	        if (units == Units.DEGREES) {
	            var metersPerDegree = _proj.METERS_PER_UNIT[_Units2.default.DEGREES];
	            nominalCount *= metersPerDegree;
	            if (nominalCount < metersPerDegree / 60) {
	                suffix = '\u2033'; // seconds
	                pointResolution *= 3600;
	            } else if (nominalCount < metersPerDegree) {
	                suffix = '\u2032'; // minutes
	                pointResolution *= 60;
	            } else {
	                suffix = '\xB0'; // degrees
	            }
	        } else if (units == Units.IMPERIAL) {
	            if (nominalCount < 0.9144) {
	                suffix = 'in';
	                pointResolution /= 0.0254;
	            } else if (nominalCount < 1609.344) {
	                suffix = 'ft';
	                pointResolution /= 0.3048;
	            } else {
	                suffix = 'mi';
	                pointResolution /= 1609.344;
	            }
	        } else if (units == Units.NAUTICAL) {
	            pointResolution /= 1852;
	            suffix = 'nm';
	        } else if (units == Units.METRIC) {
	            if (nominalCount < 0.001) {
	                suffix = 'μm';
	                pointResolution *= 1000000;
	            } else if (nominalCount < 1) {
	                suffix = 'mm';
	                pointResolution *= 1000;
	            } else if (nominalCount < 1000) {
	                suffix = 'm';
	            } else {
	                suffix = 'km';
	                pointResolution /= 1000;
	            }
	        } else if (units == Units.US) {
	            if (nominalCount < 0.9144) {
	                suffix = 'in';
	                pointResolution *= 39.37;
	            } else if (nominalCount < 1609.344) {
	                suffix = 'ft';
	                pointResolution /= 0.30480061;
	            } else {
	                suffix = 'mi';
	                pointResolution /= 1609.3472;
	            }
	        } else {
	            (0, _asserts.assert)(false, 33); // Invalid units
	        }
	        var i = 3 * Math.floor(Math.log(this.minWidth_ * pointResolution) / Math.log(10));
	        var count, width, decimalCount;
	        while (true) {
	            decimalCount = Math.floor(i / 3);
	            var decimal = Math.pow(10, decimalCount);
	            count = LEADING_DIGITS[(i % 3 + 3) % 3] * decimal;
	            width = Math.round(count / pointResolution);
	            if (isNaN(width)) {
	                this.element.style.display = 'none';
	                this.renderedVisible_ = false;
	                return;
	            } else if (width >= this.minWidth_) {
	                break;
	            }
	            ++i;
	        }
	        var html;
	        if (this.scaleBar_) {
	            html = this.createScaleBar(width, count, suffix);
	        } else {
	            html = count.toFixed(decimalCount < 0 ? -decimalCount : 0) + ' ' + suffix;
	        }
	        if (this.renderedHTML_ != html) {
	            this.innerElement_.innerHTML = html;
	            this.renderedHTML_ = html;
	        }
	        if (this.renderedWidth_ != width) {
	            this.innerElement_.style.width = width + 'px';
	            this.renderedWidth_ = width;
	        }
	        if (!this.renderedVisible_) {
	            this.element.style.display = '';
	            this.renderedVisible_ = true;
	        }
	    };
	    /**
	     * @private
	     * @param {number} width The current width of the scalebar.
	     * @param {number} scale The current scale.
	     * @param {string} suffix The suffix to append to the scale text.
	     * @returns {string} The stringified HTML of the scalebar.
	     */
	    ScaleLine.prototype.createScaleBar = function (width, scale, suffix) {
	        var mapScale = '1 : ' + Math.round(this.getScaleForResolution()).toLocaleString();
	        var scaleSteps = [];
	        var stepWidth = width / this.scaleBarSteps_;
	        var backgroundColor = '#ffffff';
	        for (var i = 0; i < this.scaleBarSteps_; i++) {
	            if (i === 0) {
	                // create the first marker at position 0
	                scaleSteps.push(this.createMarker('absolute', i));
	            }
	            scaleSteps.push('<div>' + '<div ' + 'class="ol-scale-singlebar" ' + 'style=' + '"width: ' + stepWidth + 'px;' + 'background-color: ' + backgroundColor + ';"' + '>' + '</div>' + this.createMarker('relative', i) + (
	            /*render text every second step, except when only 2 steps */
	            i % 2 === 0 || this.scaleBarSteps_ === 2 ? this.createStepText(i, width, false, scale, suffix) : '') + '</div>');
	            if (i === this.scaleBarSteps_ - 1) {
	                {/*render text at the end */}
	                scaleSteps.push(this.createStepText(i + 1, width, true, scale, suffix));
	            }
	            // switch colors of steps between black and white
	            if (backgroundColor === '#ffffff') {
	                backgroundColor = '#000000';
	            } else {
	                backgroundColor = '#ffffff';
	            }
	        }
	        var scaleBarText;
	        if (this.scaleBarText_) {
	            scaleBarText = '<div ' + 'class="ol-scale-text" ' + 'style="width: ' + width + 'px;">' + mapScale + '</div>';
	        } else {
	            scaleBarText = '';
	        }
	        var container = '<div ' + 'style="display: flex;">' + scaleBarText + scaleSteps.join('') + '</div>';
	        return container;
	    };
	    /**
	     * Creates a marker at given position
	     * @param {string} position - The position, absolute or relative
	     * @param {number} i - The iterator
	     * @returns {string} The stringified div containing the marker
	     */
	    ScaleLine.prototype.createMarker = function (position, i) {
	        var top = position === 'absolute' ? 3 : -10;
	        return '<div ' + 'class="ol-scale-step-marker" ' + 'style="position: ' + position + ';' + 'top: ' + top + 'px;"' + '></div>';
	    };
	    /**
	     * Creates the label for a marker marker at given position
	     * @param {number} i - The iterator
	     * @param {number} width - The width the scalebar will currently use
	     * @param {boolean} isLast - Flag indicating if we add the last step text
	     * @param {number} scale - The current scale for the whole scalebar
	     * @param {string} suffix - The suffix for the scale
	     * @returns {string} The stringified div containing the step text
	     */
	    ScaleLine.prototype.createStepText = function (i, width, isLast, scale, suffix) {
	        var length = i === 0 ? 0 : Math.round(scale / this.scaleBarSteps_ * i * 100) / 100;
	        var lengthString = length + (i === 0 ? '' : ' ' + suffix);
	        var margin = i === 0 ? -3 : width / this.scaleBarSteps_ * -1;
	        var minWidth = i === 0 ? 0 : width / this.scaleBarSteps_ * 2;
	        return '<div ' + 'class="ol-scale-step-text" ' + 'style="' + 'margin-left: ' + margin + 'px;' + 'text-align: ' + (i === 0 ? 'left' : 'center') + '; ' + 'min-width: ' + minWidth + 'px;' + 'left: ' + (isLast ? width + 'px' : 'unset') + ';"' + '>' + lengthString + '</div>';
	    };
	    /**
	     * Returns the appropriate scale for the given resolution and units.
	     * @return {number} The appropriate scale.
	     */
	    ScaleLine.prototype.getScaleForResolution = function () {
	        var resolution = this.getMap().getView().getResolution();
	        var dpi = 25.4 / 0.28;
	        var mpu = this.viewState_.projection.getMetersPerUnit();
	        var inchesPerMeter = 39.37;
	        return parseFloat(resolution.toString()) * mpu * inchesPerMeter * dpi;
	    };
	    return ScaleLine;
	}(_Control2.default);
	/**
	 * Update the scale line element.
	 * @param {import("../MapEvent.js").default} mapEvent Map event.
	 * @this {ScaleLine}
	 * @api
	 */
	function render(mapEvent) {
	    var frameState = mapEvent.frameState;
	    if (!frameState) {
	        this.viewState_ = null;
	    } else {
	        this.viewState_ = frameState.viewState;
	    }
	    this.updateElement_();
	}
	exports.default = ScaleLine;
	//# sourceMappingURL=ScaleLine.js.map

/***/ }),
/* 587 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	exports.render = render;
	
	var _Control = __webpack_require__(56);
	
	var _Control2 = _interopRequireDefault(_Control);
	
	var _css = __webpack_require__(47);
	
	var _easing = __webpack_require__(71);
	
	var _events = __webpack_require__(30);
	
	var _Event = __webpack_require__(35);
	
	var _EventType = __webpack_require__(10);
	
	var _EventType2 = _interopRequireDefault(_EventType);
	
	var _math = __webpack_require__(19);
	
	var _EventType3 = __webpack_require__(175);
	
	var _EventType4 = _interopRequireDefault(_EventType3);
	
	__webpack_require__(165);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var __extends = undefined && undefined.__extends || function () {
	    var _extendStatics = function extendStatics(d, b) {
	        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	            d.__proto__ = b;
	        } || function (d, b) {
	            for (var p in b) {
	                if (b.hasOwnProperty(p)) d[p] = b[p];
	            }
	        };
	        return _extendStatics(d, b);
	    };
	    return function (d, b) {
	        _extendStatics(d, b);
	        function __() {
	            this.constructor = d;
	        }
	        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	    };
	}();
	/**
	 * @module ol/control/ZoomSlider
	 */
	
	/**
	 * The enum for available directions.
	 *
	 * @enum {number}
	 */
	var Direction = {
	    VERTICAL: 0,
	    HORIZONTAL: 1
	};
	/**
	 * @typedef {Object} Options
	 * @property {string} [className='ol-zoomslider'] CSS class name.
	 * @property {number} [duration=200] Animation duration in milliseconds.
	 * @property {function(import("../MapEvent.js").default)} [render] Function called when the control
	 * should be re-rendered. This is called in a `requestAnimationFrame` callback.
	 */
	/**
	 * @classdesc
	 * A slider type of control for zooming.
	 *
	 * Example:
	 *
	 *     map.addControl(new ZoomSlider());
	 *
	 * @api
	 */
	var ZoomSlider = /** @class */function (_super) {
	    __extends(ZoomSlider, _super);
	    /**
	     * @param {Options=} opt_options Zoom slider options.
	     */
	    function ZoomSlider(opt_options) {
	        var _this = this;
	        var options = opt_options ? opt_options : {};
	        _this = _super.call(this, {
	            element: document.createElement('div'),
	            render: options.render || render
	        }) || this;
	        /**
	          * @type {!Array.<import("../events.js").EventsKey>}
	          * @private
	          */
	        _this.dragListenerKeys_ = [];
	        /**
	         * Will hold the current resolution of the view.
	         *
	         * @type {number|undefined}
	         * @private
	         */
	        _this.currentResolution_ = undefined;
	        /**
	         * The direction of the slider. Will be determined from actual display of the
	         * container and defaults to Direction.VERTICAL.
	         *
	         * @type {Direction}
	         * @private
	         */
	        _this.direction_ = Direction.VERTICAL;
	        /**
	         * @type {boolean}
	         * @private
	         */
	        _this.dragging_;
	        /**
	         * @type {number}
	         * @private
	         */
	        _this.heightLimit_ = 0;
	        /**
	         * @type {number}
	         * @private
	         */
	        _this.widthLimit_ = 0;
	        /**
	         * @type {number|undefined}
	         * @private
	         */
	        _this.startX_;
	        /**
	         * @type {number|undefined}
	         * @private
	         */
	        _this.startY_;
	        /**
	         * The calculated thumb size (border box plus margins).  Set when initSlider_
	         * is called.
	         * @type {import("../size.js").Size}
	         * @private
	         */
	        _this.thumbSize_ = null;
	        /**
	         * Whether the slider is initialized.
	         * @type {boolean}
	         * @private
	         */
	        _this.sliderInitialized_ = false;
	        /**
	         * @type {number}
	         * @private
	         */
	        _this.duration_ = options.duration !== undefined ? options.duration : 200;
	        var className = options.className !== undefined ? options.className : 'ol-zoomslider';
	        var thumbElement = document.createElement('button');
	        thumbElement.setAttribute('type', 'button');
	        thumbElement.className = className + '-thumb ' + _css.CLASS_UNSELECTABLE;
	        var containerElement = _this.element;
	        containerElement.setAttribute('touch-action', 'none');
	        containerElement.className = className + ' ' + _css.CLASS_UNSELECTABLE + ' ' + _css.CLASS_CONTROL;
	        containerElement.appendChild(thumbElement);
	        containerElement.addEventListener(_EventType4.default.POINTERDOWN, _this.handleDraggerStart_.bind(_this), false);
	        containerElement.addEventListener(_EventType4.default.POINTERMOVE, _this.handleDraggerDrag_.bind(_this), false);
	        containerElement.addEventListener(_EventType4.default.POINTERUP, _this.handleDraggerEnd_.bind(_this), false);
	        containerElement.addEventListener(_EventType2.default.CLICK, _this.handleContainerClick_.bind(_this), false);
	        thumbElement.addEventListener(_EventType2.default.CLICK, _Event.stopPropagation, false);
	        return _this;
	    }
	    /**
	     * @inheritDoc
	     */
	    ZoomSlider.prototype.setMap = function (map) {
	        _super.prototype.setMap.call(this, map);
	        if (map) {
	            map.render();
	        }
	    };
	    /**
	     * Initializes the slider element. This will determine and set this controls
	     * direction_ and also constrain the dragging of the thumb to always be within
	     * the bounds of the container.
	     *
	     * @private
	     */
	    ZoomSlider.prototype.initSlider_ = function () {
	        var container = this.element;
	        var containerSize = {
	            width: container.offsetWidth, height: container.offsetHeight
	        };
	        var thumb = /** @type {HTMLElement} */container.firstElementChild;
	        var computedStyle = getComputedStyle(thumb);
	        var thumbWidth = thumb.offsetWidth + parseFloat(computedStyle['marginRight']) + parseFloat(computedStyle['marginLeft']);
	        var thumbHeight = thumb.offsetHeight + parseFloat(computedStyle['marginTop']) + parseFloat(computedStyle['marginBottom']);
	        this.thumbSize_ = [thumbWidth, thumbHeight];
	        if (containerSize.width > containerSize.height) {
	            this.direction_ = Direction.HORIZONTAL;
	            this.widthLimit_ = containerSize.width - thumbWidth;
	        } else {
	            this.direction_ = Direction.VERTICAL;
	            this.heightLimit_ = containerSize.height - thumbHeight;
	        }
	        this.sliderInitialized_ = true;
	    };
	    /**
	     * @param {PointerEvent} event The browser event to handle.
	     * @private
	     */
	    ZoomSlider.prototype.handleContainerClick_ = function (event) {
	        var view = this.getMap().getView();
	        var relativePosition = this.getRelativePosition_(event.offsetX - this.thumbSize_[0] / 2, event.offsetY - this.thumbSize_[1] / 2);
	        var resolution = this.getResolutionForPosition_(relativePosition);
	        var zoom = view.getConstrainedZoom(view.getZoomForResolution(resolution));
	        view.animateInternal({
	            zoom: zoom,
	            duration: this.duration_,
	            easing: _easing.easeOut
	        });
	    };
	    /**
	     * Handle dragger start events.
	     * @param {PointerEvent} event The drag event.
	     * @private
	     */
	    ZoomSlider.prototype.handleDraggerStart_ = function (event) {
	        if (!this.dragging_ && event.target === this.element.firstElementChild) {
	            var element = /** @type {HTMLElement} */this.element.firstElementChild;
	            this.getMap().getView().beginInteraction();
	            this.startX_ = event.clientX - parseFloat(element.style.left);
	            this.startY_ = event.clientY - parseFloat(element.style.top);
	            this.dragging_ = true;
	            if (this.dragListenerKeys_.length === 0) {
	                var drag = this.handleDraggerDrag_;
	                var end = this.handleDraggerEnd_;
	                this.dragListenerKeys_.push((0, _events.listen)(document, _EventType4.default.POINTERMOVE, drag, this), (0, _events.listen)(document, _EventType4.default.POINTERUP, end, this));
	            }
	        }
	    };
	    /**
	     * Handle dragger drag events.
	     *
	     * @param {PointerEvent} event The drag event.
	     * @private
	     */
	    ZoomSlider.prototype.handleDraggerDrag_ = function (event) {
	        if (this.dragging_) {
	            var deltaX = event.clientX - this.startX_;
	            var deltaY = event.clientY - this.startY_;
	            var relativePosition = this.getRelativePosition_(deltaX, deltaY);
	            this.currentResolution_ = this.getResolutionForPosition_(relativePosition);
	            this.getMap().getView().setResolution(this.currentResolution_);
	        }
	    };
	    /**
	     * Handle dragger end events.
	     * @param {PointerEvent} event The drag event.
	     * @private
	     */
	    ZoomSlider.prototype.handleDraggerEnd_ = function (event) {
	        if (this.dragging_) {
	            var view = this.getMap().getView();
	            view.endInteraction();
	            this.dragging_ = false;
	            this.startX_ = undefined;
	            this.startY_ = undefined;
	            this.dragListenerKeys_.forEach(_events.unlistenByKey);
	            this.dragListenerKeys_.length = 0;
	        }
	    };
	    /**
	     * Positions the thumb inside its container according to the given resolution.
	     *
	     * @param {number} res The res.
	     * @private
	     */
	    ZoomSlider.prototype.setThumbPosition_ = function (res) {
	        var position = this.getPositionForResolution_(res);
	        var thumb = /** @type {HTMLElement} */this.element.firstElementChild;
	        if (this.direction_ == Direction.HORIZONTAL) {
	            thumb.style.left = this.widthLimit_ * position + 'px';
	        } else {
	            thumb.style.top = this.heightLimit_ * position + 'px';
	        }
	    };
	    /**
	     * Calculates the relative position of the thumb given x and y offsets.  The
	     * relative position scales from 0 to 1.  The x and y offsets are assumed to be
	     * in pixel units within the dragger limits.
	     *
	     * @param {number} x Pixel position relative to the left of the slider.
	     * @param {number} y Pixel position relative to the top of the slider.
	     * @return {number} The relative position of the thumb.
	     * @private
	     */
	    ZoomSlider.prototype.getRelativePosition_ = function (x, y) {
	        var amount;
	        if (this.direction_ === Direction.HORIZONTAL) {
	            amount = x / this.widthLimit_;
	        } else {
	            amount = y / this.heightLimit_;
	        }
	        return (0, _math.clamp)(amount, 0, 1);
	    };
	    /**
	     * Calculates the corresponding resolution of the thumb given its relative
	     * position (where 0 is the minimum and 1 is the maximum).
	     *
	     * @param {number} position The relative position of the thumb.
	     * @return {number} The corresponding resolution.
	     * @private
	     */
	    ZoomSlider.prototype.getResolutionForPosition_ = function (position) {
	        var fn = this.getMap().getView().getResolutionForValueFunction();
	        return fn(1 - position);
	    };
	    /**
	     * Determines the relative position of the slider for the given resolution.  A
	     * relative position of 0 corresponds to the minimum view resolution.  A
	     * relative position of 1 corresponds to the maximum view resolution.
	     *
	     * @param {number} res The resolution.
	     * @return {number} The relative position value (between 0 and 1).
	     * @private
	     */
	    ZoomSlider.prototype.getPositionForResolution_ = function (res) {
	        var fn = this.getMap().getView().getValueForResolutionFunction();
	        return (0, _math.clamp)(1 - fn(res), 0, 1);
	    };
	    return ZoomSlider;
	}(_Control2.default);
	/**
	 * Update the zoomslider element.
	 * @param {import("../MapEvent.js").default} mapEvent Map event.
	 * @this {ZoomSlider}
	 * @api
	 */
	function render(mapEvent) {
	    if (!mapEvent.frameState) {
	        return;
	    }
	    if (!this.sliderInitialized_) {
	        this.initSlider_();
	    }
	    var res = mapEvent.frameState.viewState.resolution;
	    this.currentResolution_ = res;
	    this.setThumbPosition_(res);
	}
	exports.default = ZoomSlider;
	//# sourceMappingURL=ZoomSlider.js.map

/***/ }),
/* 588 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	
	var _EventType = __webpack_require__(10);
	
	var _EventType2 = _interopRequireDefault(_EventType);
	
	var _Polygon = __webpack_require__(57);
	
	var _Control = __webpack_require__(56);
	
	var _Control2 = _interopRequireDefault(_Control);
	
	var _css = __webpack_require__(47);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var __extends = undefined && undefined.__extends || function () {
	    var _extendStatics = function extendStatics(d, b) {
	        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	            d.__proto__ = b;
	        } || function (d, b) {
	            for (var p in b) {
	                if (b.hasOwnProperty(p)) d[p] = b[p];
	            }
	        };
	        return _extendStatics(d, b);
	    };
	    return function (d, b) {
	        _extendStatics(d, b);
	        function __() {
	            this.constructor = d;
	        }
	        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	    };
	}();
	/**
	 * @module ol/control/ZoomToExtent
	 */
	
	/**
	 * @typedef {Object} Options
	 * @property {string} [className='ol-zoom-extent'] Class name.
	 * @property {HTMLElement|string} [target] Specify a target if you want the control
	 * to be rendered outside of the map's viewport.
	 * @property {string|HTMLElement} [label='E'] Text label to use for the button.
	 * Instead of text, also an element (e.g. a `span` element) can be used.
	 * @property {string} [tipLabel='Fit to extent'] Text label to use for the button tip.
	 * @property {import("../extent.js").Extent} [extent] The extent to zoom to. If undefined the validity
	 * extent of the view projection is used.
	 */
	/**
	 * @classdesc
	 * A button control which, when pressed, changes the map view to a specific
	 * extent. To style this control use the css selector `.ol-zoom-extent`.
	 *
	 * @api
	 */
	var ZoomToExtent = /** @class */function (_super) {
	    __extends(ZoomToExtent, _super);
	    /**
	     * @param {Options=} opt_options Options.
	     */
	    function ZoomToExtent(opt_options) {
	        var _this = this;
	        var options = opt_options ? opt_options : {};
	        _this = _super.call(this, {
	            element: document.createElement('div'),
	            target: options.target
	        }) || this;
	        /**
	         * @type {?import("../extent.js").Extent}
	         * @protected
	         */
	        _this.extent = options.extent ? options.extent : null;
	        var className = options.className !== undefined ? options.className : 'ol-zoom-extent';
	        var label = options.label !== undefined ? options.label : 'E';
	        var tipLabel = options.tipLabel !== undefined ? options.tipLabel : 'Fit to extent';
	        var button = document.createElement('button');
	        button.setAttribute('type', 'button');
	        button.title = tipLabel;
	        button.appendChild(typeof label === 'string' ? document.createTextNode(label) : label);
	        button.addEventListener(_EventType2.default.CLICK, _this.handleClick_.bind(_this), false);
	        var cssClasses = className + ' ' + _css.CLASS_UNSELECTABLE + ' ' + _css.CLASS_CONTROL;
	        var element = _this.element;
	        element.className = cssClasses;
	        element.appendChild(button);
	        return _this;
	    }
	    /**
	     * @param {MouseEvent} event The event to handle
	     * @private
	     */
	    ZoomToExtent.prototype.handleClick_ = function (event) {
	        event.preventDefault();
	        this.handleZoomToExtent();
	    };
	    /**
	     * @protected
	     */
	    ZoomToExtent.prototype.handleZoomToExtent = function () {
	        var map = this.getMap();
	        var view = map.getView();
	        var extent = !this.extent ? view.getProjection().getExtent() : this.extent;
	        view.fitInternal((0, _Polygon.fromExtent)(extent));
	    };
	    return ZoomToExtent;
	}(_Control2.default);
	exports.default = ZoomToExtent;
	//# sourceMappingURL=ZoomToExtent.js.map

/***/ }),
/* 589 */
/***/ (function(module, exports) {

	"use strict";
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	/**
	 * @module ol/events/KeyCode
	 */
	/**
	 * @enum {number}
	 * @const
	 */
	exports.default = {
	  LEFT: 37,
	  UP: 38,
	  RIGHT: 39,
	  DOWN: 40
	};
	//# sourceMappingURL=KeyCode.js.map

/***/ }),
/* 590 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	exports.loadFeaturesXhr = loadFeaturesXhr;
	exports.xhr = xhr;
	exports.setWithCredentials = setWithCredentials;
	
	var _functions = __webpack_require__(31);
	
	var _FormatType = __webpack_require__(269);
	
	var _FormatType2 = _interopRequireDefault(_FormatType);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	/**
	 *
	 * @type {boolean}
	 * @private
	 */
	/**
	 * @module ol/featureloader
	 */
	var withCredentials = false;
	/**
	 * {@link module:ol/source/Vector} sources use a function of this type to
	 * load features.
	 *
	 * This function takes an {@link module:ol/extent~Extent} representing the area to be loaded,
	 * a `{number}` representing the resolution (map units per pixel) and an
	 * {@link module:ol/proj/Projection} for the projection  as
	 * arguments. `this` within the function is bound to the
	 * {@link module:ol/source/Vector} it's called from.
	 *
	 * The function is responsible for loading the features and adding them to the
	 * source.
	 * @typedef {function(this:(import("./source/Vector").default|import("./VectorTile.js").default), import("./extent.js").Extent, number,
	 *                    import("./proj/Projection.js").default): void} FeatureLoader
	 * @api
	 */
	/**
	 * {@link module:ol/source/Vector} sources use a function of this type to
	 * get the url to load features from.
	 *
	 * This function takes an {@link module:ol/extent~Extent} representing the area
	 * to be loaded, a `{number}` representing the resolution (map units per pixel)
	 * and an {@link module:ol/proj/Projection} for the projection  as
	 * arguments and returns a `{string}` representing the URL.
	 * @typedef {function(import("./extent.js").Extent, number, import("./proj/Projection.js").default): string} FeatureUrlFunction
	 * @api
	 */
	/**
	 * @param {string|FeatureUrlFunction} url Feature URL service.
	 * @param {import("./format/Feature.js").default} format Feature format.
	 * @param {function(this:import("./VectorTile.js").default, Array<import("./Feature.js").default>, import("./proj/Projection.js").default, import("./extent.js").Extent): void|function(this:import("./source/Vector").default, Array<import("./Feature.js").default>): void} success
	 *     Function called with the loaded features and optionally with the data
	 *     projection. Called with the vector tile or source as `this`.
	 * @param {function(this:import("./VectorTile.js").default): void|function(this:import("./source/Vector").default): void} failure
	 *     Function called when loading failed. Called with the vector tile or
	 *     source as `this`.
	 * @return {FeatureLoader} The feature loader.
	 */
	function loadFeaturesXhr(url, format, success, failure) {
	    return (
	        /**
	         * @param {import("./extent.js").Extent} extent Extent.
	         * @param {number} resolution Resolution.
	         * @param {import("./proj/Projection.js").default} projection Projection.
	         * @this {import("./source/Vector").default|import("./VectorTile.js").default}
	         */
	        function (extent, resolution, projection) {
	            var xhr = new XMLHttpRequest();
	            xhr.open('GET', typeof url === 'function' ? url(extent, resolution, projection) : url, true);
	            if (format.getType() == _FormatType2.default.ARRAY_BUFFER) {
	                xhr.responseType = 'arraybuffer';
	            }
	            xhr.withCredentials = withCredentials;
	            /**
	             * @param {Event} event Event.
	             * @private
	             */
	            xhr.onload = function (event) {
	                // status will be 0 for file:// urls
	                if (!xhr.status || xhr.status >= 200 && xhr.status < 300) {
	                    var type = format.getType();
	                    /** @type {Document|Node|Object|string|undefined} */
	                    var source = void 0;
	                    if (type == _FormatType2.default.JSON || type == _FormatType2.default.TEXT) {
	                        source = xhr.responseText;
	                    } else if (type == _FormatType2.default.XML) {
	                        source = xhr.responseXML;
	                        if (!source) {
	                            source = new DOMParser().parseFromString(xhr.responseText, 'application/xml');
	                        }
	                    } else if (type == _FormatType2.default.ARRAY_BUFFER) {
	                        source = /** @type {ArrayBuffer} */xhr.response;
	                    }
	                    if (source) {
	                        success.call(this, format.readFeatures(source, {
	                            extent: extent,
	                            featureProjection: projection
	                        }), format.readProjection(source));
	                    } else {
	                        failure.call(this);
	                    }
	                } else {
	                    failure.call(this);
	                }
	            }.bind(this);
	            /**
	             * @private
	             */
	            xhr.onerror = function () {
	                failure.call(this);
	            }.bind(this);
	            xhr.send();
	        }
	    );
	}
	/**
	 * Create an XHR feature loader for a `url` and `format`. The feature loader
	 * loads features (with XHR), parses the features, and adds them to the
	 * vector source.
	 * @param {string|FeatureUrlFunction} url Feature URL service.
	 * @param {import("./format/Feature.js").default} format Feature format.
	 * @return {FeatureLoader} The feature loader.
	 * @api
	 */
	function xhr(url, format) {
	    return loadFeaturesXhr(url, format,
	    /**
	     * @param {Array<import("./Feature.js").default>} features The loaded features.
	     * @param {import("./proj/Projection.js").default} dataProjection Data
	     * projection.
	     * @this {import("./source/Vector").default|import("./VectorTile.js").default}
	     */
	    function (features, dataProjection) {
	        var sourceOrTile = /** @type {?} */this;
	        if (typeof sourceOrTile.addFeatures === 'function') {
	            /** @type {import("./source/Vector").default} */sourceOrTile.addFeatures(features);
	        }
	    }, /* FIXME handle error */_functions.VOID);
	}
	/**
	 * Setter for the withCredentials configuration for the XHR.
	 *
	 * @param {boolean} xhrWithCredentials The value of withCredentials to set.
	 * Compare https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/
	 * @api
	 */
	function setWithCredentials(xhrWithCredentials) {
	    withCredentials = xhrWithCredentials;
	}
	//# sourceMappingURL=featureloader.js.map

/***/ }),
/* 591 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	
	var _util = __webpack_require__(14);
	
	var _Feature = __webpack_require__(268);
	
	var _Feature2 = _interopRequireDefault(_Feature);
	
	var _FormatType = __webpack_require__(269);
	
	var _FormatType2 = _interopRequireDefault(_FormatType);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var __extends = undefined && undefined.__extends || function () {
	    var _extendStatics = function extendStatics(d, b) {
	        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	            d.__proto__ = b;
	        } || function (d, b) {
	            for (var p in b) {
	                if (b.hasOwnProperty(p)) d[p] = b[p];
	            }
	        };
	        return _extendStatics(d, b);
	    };
	    return function (d, b) {
	        _extendStatics(d, b);
	        function __() {
	            this.constructor = d;
	        }
	        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	    };
	}();
	/**
	 * @module ol/format/JSONFeature
	 */
	
	/**
	 * @classdesc
	 * Abstract base class; normally only used for creating subclasses and not
	 * instantiated in apps.
	 * Base class for JSON feature formats.
	 *
	 * @abstract
	 */
	var JSONFeature = /** @class */function (_super) {
	    __extends(JSONFeature, _super);
	    function JSONFeature() {
	        return _super.call(this) || this;
	    }
	    /**
	     * @inheritDoc
	     */
	    JSONFeature.prototype.getType = function () {
	        return _FormatType2.default.JSON;
	    };
	    /**
	     * Read a feature.  Only works for a single feature. Use `readFeatures` to
	     * read a feature collection.
	     *
	     * @param {ArrayBuffer|Document|Node|Object|string} source Source.
	     * @param {import("./Feature.js").ReadOptions=} opt_options Read options.
	     * @return {import("../Feature.js").default} Feature.
	     * @api
	     */
	    JSONFeature.prototype.readFeature = function (source, opt_options) {
	        return this.readFeatureFromObject(getObject(source), this.getReadOptions(source, opt_options));
	    };
	    /**
	     * Read all features.  Works with both a single feature and a feature
	     * collection.
	     *
	     * @param {ArrayBuffer|Document|Node|Object|string} source Source.
	     * @param {import("./Feature.js").ReadOptions=} opt_options Read options.
	     * @return {Array<import("../Feature.js").default>} Features.
	     * @api
	     */
	    JSONFeature.prototype.readFeatures = function (source, opt_options) {
	        return this.readFeaturesFromObject(getObject(source), this.getReadOptions(source, opt_options));
	    };
	    /**
	     * @abstract
	     * @param {Object} object Object.
	     * @param {import("./Feature.js").ReadOptions=} opt_options Read options.
	     * @protected
	     * @return {import("../Feature.js").default} Feature.
	     */
	    JSONFeature.prototype.readFeatureFromObject = function (object, opt_options) {
	        return (0, _util.abstract)();
	    };
	    /**
	     * @abstract
	     * @param {Object} object Object.
	     * @param {import("./Feature.js").ReadOptions=} opt_options Read options.
	     * @protected
	     * @return {Array<import("../Feature.js").default>} Features.
	     */
	    JSONFeature.prototype.readFeaturesFromObject = function (object, opt_options) {
	        return (0, _util.abstract)();
	    };
	    /**
	     * Read a geometry.
	     *
	     * @param {ArrayBuffer|Document|Node|Object|string} source Source.
	     * @param {import("./Feature.js").ReadOptions=} opt_options Read options.
	     * @return {import("../geom/Geometry.js").default} Geometry.
	     * @api
	     */
	    JSONFeature.prototype.readGeometry = function (source, opt_options) {
	        return this.readGeometryFromObject(getObject(source), this.getReadOptions(source, opt_options));
	    };
	    /**
	     * @abstract
	     * @param {Object} object Object.
	     * @param {import("./Feature.js").ReadOptions=} opt_options Read options.
	     * @protected
	     * @return {import("../geom/Geometry.js").default} Geometry.
	     */
	    JSONFeature.prototype.readGeometryFromObject = function (object, opt_options) {
	        return (0, _util.abstract)();
	    };
	    /**
	     * Read the projection.
	     *
	     * @param {ArrayBuffer|Document|Node|Object|string} source Source.
	     * @return {import("../proj/Projection.js").default} Projection.
	     * @api
	     */
	    JSONFeature.prototype.readProjection = function (source) {
	        return this.readProjectionFromObject(getObject(source));
	    };
	    /**
	     * @abstract
	     * @param {Object} object Object.
	     * @protected
	     * @return {import("../proj/Projection.js").default} Projection.
	     */
	    JSONFeature.prototype.readProjectionFromObject = function (object) {
	        return (0, _util.abstract)();
	    };
	    /**
	     * Encode a feature as string.
	     *
	     * @param {import("../Feature.js").default} feature Feature.
	     * @param {import("./Feature.js").WriteOptions=} opt_options Write options.
	     * @return {string} Encoded feature.
	     * @api
	     */
	    JSONFeature.prototype.writeFeature = function (feature, opt_options) {
	        return JSON.stringify(this.writeFeatureObject(feature, opt_options));
	    };
	    /**
	     * @abstract
	     * @param {import("../Feature.js").default} feature Feature.
	     * @param {import("./Feature.js").WriteOptions=} opt_options Write options.
	     * @return {Object} Object.
	     */
	    JSONFeature.prototype.writeFeatureObject = function (feature, opt_options) {
	        return (0, _util.abstract)();
	    };
	    /**
	     * Encode an array of features as string.
	     *
	     * @param {Array<import("../Feature.js").default>} features Features.
	     * @param {import("./Feature.js").WriteOptions=} opt_options Write options.
	     * @return {string} Encoded features.
	     * @api
	     */
	    JSONFeature.prototype.writeFeatures = function (features, opt_options) {
	        return JSON.stringify(this.writeFeaturesObject(features, opt_options));
	    };
	    /**
	     * @abstract
	     * @param {Array<import("../Feature.js").default>} features Features.
	     * @param {import("./Feature.js").WriteOptions=} opt_options Write options.
	     * @return {Object} Object.
	     */
	    JSONFeature.prototype.writeFeaturesObject = function (features, opt_options) {
	        return (0, _util.abstract)();
	    };
	    /**
	     * Encode a geometry as string.
	     *
	     * @param {import("../geom/Geometry.js").default} geometry Geometry.
	     * @param {import("./Feature.js").WriteOptions=} opt_options Write options.
	     * @return {string} Encoded geometry.
	     * @api
	     */
	    JSONFeature.prototype.writeGeometry = function (geometry, opt_options) {
	        return JSON.stringify(this.writeGeometryObject(geometry, opt_options));
	    };
	    /**
	     * @abstract
	     * @param {import("../geom/Geometry.js").default} geometry Geometry.
	     * @param {import("./Feature.js").WriteOptions=} opt_options Write options.
	     * @return {Object} Object.
	     */
	    JSONFeature.prototype.writeGeometryObject = function (geometry, opt_options) {
	        return (0, _util.abstract)();
	    };
	    return JSONFeature;
	}(_Feature2.default);
	/**
	 * @param {Document|Node|Object|string} source Source.
	 * @return {Object} Object.
	 */
	function getObject(source) {
	    if (typeof source === 'string') {
	        var object = JSON.parse(source);
	        return object ? /** @type {Object} */object : null;
	    } else if (source !== null) {
	        return source;
	    } else {
	        return null;
	    }
	}
	exports.default = JSONFeature;
	//# sourceMappingURL=JSONFeature.js.map

/***/ }),
/* 592 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	
	var _XLink = __webpack_require__(271);
	
	var _XML = __webpack_require__(272);
	
	var _XML2 = _interopRequireDefault(_XML);
	
	var _xsd = __webpack_require__(273);
	
	var _xml = __webpack_require__(150);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var __extends = undefined && undefined.__extends || function () {
	    var _extendStatics = function extendStatics(d, b) {
	        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	            d.__proto__ = b;
	        } || function (d, b) {
	            for (var p in b) {
	                if (b.hasOwnProperty(p)) d[p] = b[p];
	            }
	        };
	        return _extendStatics(d, b);
	    };
	    return function (d, b) {
	        _extendStatics(d, b);
	        function __() {
	            this.constructor = d;
	        }
	        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	    };
	}();
	/**
	 * @module ol/format/OWS
	 */
	
	/**
	 * @const
	 * @type {Array<null|string>}
	 */
	var NAMESPACE_URIS = [null, 'http://www.opengis.net/ows/1.1'];
	/**
	 * @const
	 * @type {Object<string, Object<string, import("../xml.js").Parser>>}
	 */
	// @ts-ignore
	var PARSERS = (0, _xml.makeStructureNS)(NAMESPACE_URIS, {
	    'ServiceIdentification': (0, _xml.makeObjectPropertySetter)(readServiceIdentification),
	    'ServiceProvider': (0, _xml.makeObjectPropertySetter)(readServiceProvider),
	    'OperationsMetadata': (0, _xml.makeObjectPropertySetter)(readOperationsMetadata)
	});
	var OWS = /** @class */function (_super) {
	    __extends(OWS, _super);
	    function OWS() {
	        return _super.call(this) || this;
	    }
	    /**
	     * @inheritDoc
	     */
	    OWS.prototype.readFromDocument = function (doc) {
	        for (var n = doc.firstChild; n; n = n.nextSibling) {
	            if (n.nodeType == Node.ELEMENT_NODE) {
	                return this.readFromNode(n);
	            }
	        }
	        return null;
	    };
	    /**
	     * @inheritDoc
	     */
	    OWS.prototype.readFromNode = function (node) {
	        var owsObject = (0, _xml.pushParseAndPop)({}, PARSERS, node, []);
	        return owsObject ? owsObject : null;
	    };
	    return OWS;
	}(_XML2.default);
	/**
	 * @const
	 * @type {Object<string, Object<string, import("../xml.js").Parser>>}
	 */
	// @ts-ignore
	var ADDRESS_PARSERS = (0, _xml.makeStructureNS)(NAMESPACE_URIS, {
	    'DeliveryPoint': (0, _xml.makeObjectPropertySetter)(_xsd.readString),
	    'City': (0, _xml.makeObjectPropertySetter)(_xsd.readString),
	    'AdministrativeArea': (0, _xml.makeObjectPropertySetter)(_xsd.readString),
	    'PostalCode': (0, _xml.makeObjectPropertySetter)(_xsd.readString),
	    'Country': (0, _xml.makeObjectPropertySetter)(_xsd.readString),
	    'ElectronicMailAddress': (0, _xml.makeObjectPropertySetter)(_xsd.readString)
	});
	/**
	 * @const
	 * @type {Object<string, Object<string, import("../xml.js").Parser>>}
	 */
	// @ts-ignore
	var ALLOWED_VALUES_PARSERS = (0, _xml.makeStructureNS)(NAMESPACE_URIS, {
	    'Value': (0, _xml.makeObjectPropertyPusher)(readValue)
	});
	/**
	 * @const
	 * @type {Object<string, Object<string, import("../xml.js").Parser>>}
	 */
	// @ts-ignore
	var CONSTRAINT_PARSERS = (0, _xml.makeStructureNS)(NAMESPACE_URIS, {
	    'AllowedValues': (0, _xml.makeObjectPropertySetter)(readAllowedValues)
	});
	/**
	 * @const
	 * @type {Object<string, Object<string, import("../xml.js").Parser>>}
	 */
	// @ts-ignore
	var CONTACT_INFO_PARSERS = (0, _xml.makeStructureNS)(NAMESPACE_URIS, {
	    'Phone': (0, _xml.makeObjectPropertySetter)(readPhone),
	    'Address': (0, _xml.makeObjectPropertySetter)(readAddress)
	});
	/**
	 * @const
	 * @type {Object<string, Object<string, import("../xml.js").Parser>>}
	 */
	// @ts-ignore
	var DCP_PARSERS = (0, _xml.makeStructureNS)(NAMESPACE_URIS, {
	    'HTTP': (0, _xml.makeObjectPropertySetter)(readHttp)
	});
	/**
	 * @const
	 * @type {Object<string, Object<string, import("../xml.js").Parser>>}
	 */
	// @ts-ignore
	var HTTP_PARSERS = (0, _xml.makeStructureNS)(NAMESPACE_URIS, {
	    'Get': (0, _xml.makeObjectPropertyPusher)(readGet),
	    'Post': undefined // TODO
	});
	/**
	 * @const
	 * @type {Object<string, Object<string, import("../xml.js").Parser>>}
	 */
	// @ts-ignore
	var OPERATION_PARSERS = (0, _xml.makeStructureNS)(NAMESPACE_URIS, {
	    'DCP': (0, _xml.makeObjectPropertySetter)(readDcp)
	});
	/**
	 * @const
	 * @type {Object<string, Object<string, import("../xml.js").Parser>>}
	 */
	// @ts-ignore
	var OPERATIONS_METADATA_PARSERS = (0, _xml.makeStructureNS)(NAMESPACE_URIS, {
	    'Operation': readOperation
	});
	/**
	 * @const
	 * @type {Object<string, Object<string, import("../xml.js").Parser>>}
	 */
	// @ts-ignore
	var PHONE_PARSERS = (0, _xml.makeStructureNS)(NAMESPACE_URIS, {
	    'Voice': (0, _xml.makeObjectPropertySetter)(_xsd.readString),
	    'Facsimile': (0, _xml.makeObjectPropertySetter)(_xsd.readString)
	});
	/**
	 * @const
	 * @type {Object<string, Object<string, import("../xml.js").Parser>>}
	 */
	// @ts-ignore
	var REQUEST_METHOD_PARSERS = (0, _xml.makeStructureNS)(NAMESPACE_URIS, {
	    'Constraint': (0, _xml.makeObjectPropertyPusher)(readConstraint)
	});
	/**
	 * @const
	 * @type {Object<string, Object<string, import("../xml.js").Parser>>}
	 */
	// @ts-ignore
	var SERVICE_CONTACT_PARSERS = (0, _xml.makeStructureNS)(NAMESPACE_URIS, {
	    'IndividualName': (0, _xml.makeObjectPropertySetter)(_xsd.readString),
	    'PositionName': (0, _xml.makeObjectPropertySetter)(_xsd.readString),
	    'ContactInfo': (0, _xml.makeObjectPropertySetter)(readContactInfo)
	});
	/**
	 * @const
	 * @type {Object<string, Object<string, import("../xml.js").Parser>>}
	 */
	// @ts-ignore
	var SERVICE_IDENTIFICATION_PARSERS = (0, _xml.makeStructureNS)(NAMESPACE_URIS, {
	    'Abstract': (0, _xml.makeObjectPropertySetter)(_xsd.readString),
	    'AccessConstraints': (0, _xml.makeObjectPropertySetter)(_xsd.readString),
	    'Fees': (0, _xml.makeObjectPropertySetter)(_xsd.readString),
	    'Title': (0, _xml.makeObjectPropertySetter)(_xsd.readString),
	    'ServiceTypeVersion': (0, _xml.makeObjectPropertySetter)(_xsd.readString),
	    'ServiceType': (0, _xml.makeObjectPropertySetter)(_xsd.readString)
	});
	/**
	 * @const
	 * @type {Object<string, Object<string, import("../xml.js").Parser>>}
	 */
	// @ts-ignore
	var SERVICE_PROVIDER_PARSERS = (0, _xml.makeStructureNS)(NAMESPACE_URIS, {
	    'ProviderName': (0, _xml.makeObjectPropertySetter)(_xsd.readString),
	    'ProviderSite': (0, _xml.makeObjectPropertySetter)(_XLink.readHref),
	    'ServiceContact': (0, _xml.makeObjectPropertySetter)(readServiceContact)
	});
	/**
	 * @param {Element} node Node.
	 * @param {Array<*>} objectStack Object stack.
	 * @return {Object|undefined} The address.
	 */
	function readAddress(node, objectStack) {
	    return (0, _xml.pushParseAndPop)({}, ADDRESS_PARSERS, node, objectStack);
	}
	/**
	 * @param {Element} node Node.
	 * @param {Array<*>} objectStack Object stack.
	 * @return {Object|undefined} The values.
	 */
	function readAllowedValues(node, objectStack) {
	    return (0, _xml.pushParseAndPop)({}, ALLOWED_VALUES_PARSERS, node, objectStack);
	}
	/**
	 * @param {Element} node Node.
	 * @param {Array<*>} objectStack Object stack.
	 * @return {Object|undefined} The constraint.
	 */
	function readConstraint(node, objectStack) {
	    var name = node.getAttribute('name');
	    if (!name) {
	        return undefined;
	    }
	    return (0, _xml.pushParseAndPop)({ 'name': name }, CONSTRAINT_PARSERS, node, objectStack);
	}
	/**
	 * @param {Element} node Node.
	 * @param {Array<*>} objectStack Object stack.
	 * @return {Object|undefined} The contact info.
	 */
	function readContactInfo(node, objectStack) {
	    return (0, _xml.pushParseAndPop)({}, CONTACT_INFO_PARSERS, node, objectStack);
	}
	/**
	 * @param {Element} node Node.
	 * @param {Array<*>} objectStack Object stack.
	 * @return {Object|undefined} The DCP.
	 */
	function readDcp(node, objectStack) {
	    return (0, _xml.pushParseAndPop)({}, DCP_PARSERS, node, objectStack);
	}
	/**
	 * @param {Element} node Node.
	 * @param {Array<*>} objectStack Object stack.
	 * @return {Object|undefined} The GET object.
	 */
	function readGet(node, objectStack) {
	    var href = (0, _XLink.readHref)(node);
	    if (!href) {
	        return undefined;
	    }
	    return (0, _xml.pushParseAndPop)({ 'href': href }, REQUEST_METHOD_PARSERS, node, objectStack);
	}
	/**
	 * @param {Element} node Node.
	 * @param {Array<*>} objectStack Object stack.
	 * @return {Object|undefined} The HTTP object.
	 */
	function readHttp(node, objectStack) {
	    return (0, _xml.pushParseAndPop)({}, HTTP_PARSERS, node, objectStack);
	}
	/**
	 * @param {Element} node Node.
	 * @param {Array<*>} objectStack Object stack.
	 * @return {Object|undefined} The operation.
	 */
	function readOperation(node, objectStack) {
	    var name = node.getAttribute('name');
	    var value = (0, _xml.pushParseAndPop)({}, OPERATION_PARSERS, node, objectStack);
	    if (!value) {
	        return undefined;
	    }
	    var object = /** @type {Object} */objectStack[objectStack.length - 1];
	    object[name] = value;
	}
	/**
	 * @param {Element} node Node.
	 * @param {Array<*>} objectStack Object stack.
	 * @return {Object|undefined} The operations metadata.
	 */
	function readOperationsMetadata(node, objectStack) {
	    return (0, _xml.pushParseAndPop)({}, OPERATIONS_METADATA_PARSERS, node, objectStack);
	}
	/**
	 * @param {Element} node Node.
	 * @param {Array<*>} objectStack Object stack.
	 * @return {Object|undefined} The phone.
	 */
	function readPhone(node, objectStack) {
	    return (0, _xml.pushParseAndPop)({}, PHONE_PARSERS, node, objectStack);
	}
	/**
	 * @param {Element} node Node.
	 * @param {Array<*>} objectStack Object stack.
	 * @return {Object|undefined} The service identification.
	 */
	function readServiceIdentification(node, objectStack) {
	    return (0, _xml.pushParseAndPop)({}, SERVICE_IDENTIFICATION_PARSERS, node, objectStack);
	}
	/**
	 * @param {Element} node Node.
	 * @param {Array<*>} objectStack Object stack.
	 * @return {Object|undefined} The service contact.
	 */
	function readServiceContact(node, objectStack) {
	    return (0, _xml.pushParseAndPop)({}, SERVICE_CONTACT_PARSERS, node, objectStack);
	}
	/**
	 * @param {Element} node Node.
	 * @param {Array<*>} objectStack Object stack.
	 * @return {Object|undefined} The service provider.
	 */
	function readServiceProvider(node, objectStack) {
	    return (0, _xml.pushParseAndPop)({}, SERVICE_PROVIDER_PARSERS, node, objectStack);
	}
	/**
	 * @param {Node} node Node.
	 * @param {Array<*>} objectStack Object stack.
	 * @return {string|undefined} The value.
	 */
	function readValue(node, objectStack) {
	    return (0, _xsd.readString)(node);
	}
	exports.default = OWS;
	//# sourceMappingURL=OWS.js.map

/***/ }),
/* 593 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	
	var _extent = __webpack_require__(4);
	
	var _OWS = __webpack_require__(592);
	
	var _OWS2 = _interopRequireDefault(_OWS);
	
	var _XLink = __webpack_require__(271);
	
	var _XML = __webpack_require__(272);
	
	var _XML2 = _interopRequireDefault(_XML);
	
	var _xsd = __webpack_require__(273);
	
	var _xml = __webpack_require__(150);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var __extends = undefined && undefined.__extends || function () {
	    var _extendStatics = function extendStatics(d, b) {
	        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	            d.__proto__ = b;
	        } || function (d, b) {
	            for (var p in b) {
	                if (b.hasOwnProperty(p)) d[p] = b[p];
	            }
	        };
	        return _extendStatics(d, b);
	    };
	    return function (d, b) {
	        _extendStatics(d, b);
	        function __() {
	            this.constructor = d;
	        }
	        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	    };
	}();
	/**
	 * @module ol/format/WMTSCapabilities
	 */
	
	/**
	 * @const
	 * @type {Array<null|string>}
	 */
	var NAMESPACE_URIS = [null, 'http://www.opengis.net/wmts/1.0'];
	/**
	 * @const
	 * @type {Array<null|string>}
	 */
	var OWS_NAMESPACE_URIS = [null, 'http://www.opengis.net/ows/1.1'];
	/**
	 * @const
	 * @type {Object<string, Object<string, import("../xml.js").Parser>>}
	 */
	// @ts-ignore
	var PARSERS = (0, _xml.makeStructureNS)(NAMESPACE_URIS, {
	    'Contents': (0, _xml.makeObjectPropertySetter)(readContents)
	});
	/**
	 * @classdesc
	 * Format for reading WMTS capabilities data.
	 *
	 * @api
	 */
	var WMTSCapabilities = /** @class */function (_super) {
	    __extends(WMTSCapabilities, _super);
	    function WMTSCapabilities() {
	        var _this = _super.call(this) || this;
	        /**
	         * @type {OWS}
	         * @private
	         */
	        _this.owsParser_ = new _OWS2.default();
	        return _this;
	    }
	    /**
	     * @inheritDoc
	     */
	    WMTSCapabilities.prototype.readFromDocument = function (doc) {
	        for (var n = doc.firstChild; n; n = n.nextSibling) {
	            if (n.nodeType == Node.ELEMENT_NODE) {
	                return this.readFromNode(n);
	            }
	        }
	        return null;
	    };
	    /**
	     * @inheritDoc
	     */
	    WMTSCapabilities.prototype.readFromNode = function (node) {
	        var version = node.getAttribute('version').trim();
	        var WMTSCapabilityObject = this.owsParser_.readFromNode(node);
	        if (!WMTSCapabilityObject) {
	            return null;
	        }
	        WMTSCapabilityObject['version'] = version;
	        WMTSCapabilityObject = (0, _xml.pushParseAndPop)(WMTSCapabilityObject, PARSERS, node, []);
	        return WMTSCapabilityObject ? WMTSCapabilityObject : null;
	    };
	    return WMTSCapabilities;
	}(_XML2.default);
	/**
	 * @const
	 * @type {Object<string, Object<string, import("../xml.js").Parser>>}
	 */
	// @ts-ignore
	var CONTENTS_PARSERS = (0, _xml.makeStructureNS)(NAMESPACE_URIS, {
	    'Layer': (0, _xml.makeObjectPropertyPusher)(readLayer),
	    'TileMatrixSet': (0, _xml.makeObjectPropertyPusher)(readTileMatrixSet)
	});
	/**
	 * @const
	 * @type {Object<string, Object<string, import("../xml.js").Parser>>}
	 */
	// @ts-ignore
	var LAYER_PARSERS = (0, _xml.makeStructureNS)(NAMESPACE_URIS, {
	    'Style': (0, _xml.makeObjectPropertyPusher)(readStyle),
	    'Format': (0, _xml.makeObjectPropertyPusher)(_xsd.readString),
	    'TileMatrixSetLink': (0, _xml.makeObjectPropertyPusher)(readTileMatrixSetLink),
	    'Dimension': (0, _xml.makeObjectPropertyPusher)(readDimensions),
	    'ResourceURL': (0, _xml.makeObjectPropertyPusher)(readResourceUrl)
	}, (0, _xml.makeStructureNS)(OWS_NAMESPACE_URIS, {
	    'Title': (0, _xml.makeObjectPropertySetter)(_xsd.readString),
	    'Abstract': (0, _xml.makeObjectPropertySetter)(_xsd.readString),
	    'WGS84BoundingBox': (0, _xml.makeObjectPropertySetter)(readWgs84BoundingBox),
	    'Identifier': (0, _xml.makeObjectPropertySetter)(_xsd.readString)
	}));
	/**
	 * @const
	 * @type {Object<string, Object<string, import("../xml.js").Parser>>}
	 */
	// @ts-ignore
	var STYLE_PARSERS = (0, _xml.makeStructureNS)(NAMESPACE_URIS, {
	    'LegendURL': (0, _xml.makeObjectPropertyPusher)(readLegendUrl)
	}, (0, _xml.makeStructureNS)(OWS_NAMESPACE_URIS, {
	    'Title': (0, _xml.makeObjectPropertySetter)(_xsd.readString),
	    'Identifier': (0, _xml.makeObjectPropertySetter)(_xsd.readString)
	}));
	/**
	 * @const
	 * @type {Object<string, Object<string, import("../xml.js").Parser>>}
	 */
	// @ts-ignore
	var TMS_LINKS_PARSERS = (0, _xml.makeStructureNS)(NAMESPACE_URIS, {
	    'TileMatrixSet': (0, _xml.makeObjectPropertySetter)(_xsd.readString),
	    'TileMatrixSetLimits': (0, _xml.makeObjectPropertySetter)(readTileMatrixLimitsList)
	});
	/**
	 * @const
	 * @type {Object<string, Object<string, import("../xml.js").Parser>>}
	 */
	// @ts-ignore
	var TMS_LIMITS_LIST_PARSERS = (0, _xml.makeStructureNS)(NAMESPACE_URIS, {
	    'TileMatrixLimits': (0, _xml.makeArrayPusher)(readTileMatrixLimits)
	});
	/**
	 * @const
	 * @type {Object<string, Object<string, import("../xml.js").Parser>>}
	 */
	// @ts-ignore
	var TMS_LIMITS_PARSERS = (0, _xml.makeStructureNS)(NAMESPACE_URIS, {
	    'TileMatrix': (0, _xml.makeObjectPropertySetter)(_xsd.readString),
	    'MinTileRow': (0, _xml.makeObjectPropertySetter)(_xsd.readNonNegativeInteger),
	    'MaxTileRow': (0, _xml.makeObjectPropertySetter)(_xsd.readNonNegativeInteger),
	    'MinTileCol': (0, _xml.makeObjectPropertySetter)(_xsd.readNonNegativeInteger),
	    'MaxTileCol': (0, _xml.makeObjectPropertySetter)(_xsd.readNonNegativeInteger)
	});
	/**
	 * @const
	 * @type {Object<string, Object<string, import("../xml.js").Parser>>}
	 */
	// @ts-ignore
	var DIMENSION_PARSERS = (0, _xml.makeStructureNS)(NAMESPACE_URIS, {
	    'Default': (0, _xml.makeObjectPropertySetter)(_xsd.readString),
	    'Value': (0, _xml.makeObjectPropertyPusher)(_xsd.readString)
	}, (0, _xml.makeStructureNS)(OWS_NAMESPACE_URIS, {
	    'Identifier': (0, _xml.makeObjectPropertySetter)(_xsd.readString)
	}));
	/**
	 * @const
	 * @type {Object<string, Object<string, import("../xml.js").Parser>>}
	 */
	// @ts-ignore
	var WGS84_BBOX_READERS = (0, _xml.makeStructureNS)(OWS_NAMESPACE_URIS, {
	    'LowerCorner': (0, _xml.makeArrayPusher)(readCoordinates),
	    'UpperCorner': (0, _xml.makeArrayPusher)(readCoordinates)
	});
	/**
	 * @const
	 * @type {Object<string, Object<string, import("../xml.js").Parser>>}
	 */
	// @ts-ignore
	var TMS_PARSERS = (0, _xml.makeStructureNS)(NAMESPACE_URIS, {
	    'WellKnownScaleSet': (0, _xml.makeObjectPropertySetter)(_xsd.readString),
	    'TileMatrix': (0, _xml.makeObjectPropertyPusher)(readTileMatrix)
	}, (0, _xml.makeStructureNS)(OWS_NAMESPACE_URIS, {
	    'SupportedCRS': (0, _xml.makeObjectPropertySetter)(_xsd.readString),
	    'Identifier': (0, _xml.makeObjectPropertySetter)(_xsd.readString)
	}));
	/**
	 * @const
	 * @type {Object<string, Object<string, import("../xml.js").Parser>>}
	 */
	// @ts-ignore
	var TM_PARSERS = (0, _xml.makeStructureNS)(NAMESPACE_URIS, {
	    'TopLeftCorner': (0, _xml.makeObjectPropertySetter)(readCoordinates),
	    'ScaleDenominator': (0, _xml.makeObjectPropertySetter)(_xsd.readDecimal),
	    'TileWidth': (0, _xml.makeObjectPropertySetter)(_xsd.readNonNegativeInteger),
	    'TileHeight': (0, _xml.makeObjectPropertySetter)(_xsd.readNonNegativeInteger),
	    'MatrixWidth': (0, _xml.makeObjectPropertySetter)(_xsd.readNonNegativeInteger),
	    'MatrixHeight': (0, _xml.makeObjectPropertySetter)(_xsd.readNonNegativeInteger)
	}, (0, _xml.makeStructureNS)(OWS_NAMESPACE_URIS, {
	    'Identifier': (0, _xml.makeObjectPropertySetter)(_xsd.readString)
	}));
	/**
	 * @param {Element} node Node.
	 * @param {Array<*>} objectStack Object stack.
	 * @return {Object|undefined} Attribution object.
	 */
	function readContents(node, objectStack) {
	    return (0, _xml.pushParseAndPop)({}, CONTENTS_PARSERS, node, objectStack);
	}
	/**
	 * @param {Element} node Node.
	 * @param {Array<*>} objectStack Object stack.
	 * @return {Object|undefined} Layers object.
	 */
	function readLayer(node, objectStack) {
	    return (0, _xml.pushParseAndPop)({}, LAYER_PARSERS, node, objectStack);
	}
	/**
	 * @param {Element} node Node.
	 * @param {Array<*>} objectStack Object stack.
	 * @return {Object|undefined} Tile Matrix Set object.
	 */
	function readTileMatrixSet(node, objectStack) {
	    return (0, _xml.pushParseAndPop)({}, TMS_PARSERS, node, objectStack);
	}
	/**
	 * @param {Element} node Node.
	 * @param {Array<*>} objectStack Object stack.
	 * @return {Object|undefined} Style object.
	 */
	function readStyle(node, objectStack) {
	    var style = (0, _xml.pushParseAndPop)({}, STYLE_PARSERS, node, objectStack);
	    if (!style) {
	        return undefined;
	    }
	    var isDefault = node.getAttribute('isDefault') === 'true';
	    style['isDefault'] = isDefault;
	    return style;
	}
	/**
	 * @param {Element} node Node.
	 * @param {Array<*>} objectStack Object stack.
	 * @return {Object|undefined} Tile Matrix Set Link object.
	 */
	function readTileMatrixSetLink(node, objectStack) {
	    return (0, _xml.pushParseAndPop)({}, TMS_LINKS_PARSERS, node, objectStack);
	}
	/**
	 * @param {Element} node Node.
	 * @param {Array<*>} objectStack Object stack.
	 * @return {Object|undefined} Dimension object.
	 */
	function readDimensions(node, objectStack) {
	    return (0, _xml.pushParseAndPop)({}, DIMENSION_PARSERS, node, objectStack);
	}
	/**
	 * @param {Element} node Node.
	 * @param {Array<*>} objectStack Object stack.
	 * @return {Object|undefined} Resource URL object.
	 */
	function readResourceUrl(node, objectStack) {
	    var format = node.getAttribute('format');
	    var template = node.getAttribute('template');
	    var resourceType = node.getAttribute('resourceType');
	    var resource = {};
	    if (format) {
	        resource['format'] = format;
	    }
	    if (template) {
	        resource['template'] = template;
	    }
	    if (resourceType) {
	        resource['resourceType'] = resourceType;
	    }
	    return resource;
	}
	/**
	 * @param {Element} node Node.
	 * @param {Array<*>} objectStack Object stack.
	 * @return {Object|undefined} WGS84 BBox object.
	 */
	function readWgs84BoundingBox(node, objectStack) {
	    var coordinates = (0, _xml.pushParseAndPop)([], WGS84_BBOX_READERS, node, objectStack);
	    if (coordinates.length != 2) {
	        return undefined;
	    }
	    return (0, _extent.boundingExtent)(coordinates);
	}
	/**
	 * @param {Element} node Node.
	 * @param {Array<*>} objectStack Object stack.
	 * @return {Object|undefined} Legend object.
	 */
	function readLegendUrl(node, objectStack) {
	    var legend = {};
	    legend['format'] = node.getAttribute('format');
	    legend['href'] = (0, _XLink.readHref)(node);
	    return legend;
	}
	/**
	 * @param {Node} node Node.
	 * @param {Array<*>} objectStack Object stack.
	 * @return {Object|undefined} Coordinates object.
	 */
	function readCoordinates(node, objectStack) {
	    var coordinates = (0, _xsd.readString)(node).split(/\s+/);
	    if (!coordinates || coordinates.length != 2) {
	        return undefined;
	    }
	    var x = +coordinates[0];
	    var y = +coordinates[1];
	    if (isNaN(x) || isNaN(y)) {
	        return undefined;
	    }
	    return [x, y];
	}
	/**
	 * @param {Element} node Node.
	 * @param {Array<*>} objectStack Object stack.
	 * @return {Object|undefined} TileMatrix object.
	 */
	function readTileMatrix(node, objectStack) {
	    return (0, _xml.pushParseAndPop)({}, TM_PARSERS, node, objectStack);
	}
	/**
	 * @param {Element} node Node.
	 * @param {Array<*>} objectStack Object stack.
	 * @return {Object|undefined} TileMatrixSetLimits Object.
	 */
	function readTileMatrixLimitsList(node, objectStack) {
	    return (0, _xml.pushParseAndPop)([], TMS_LIMITS_LIST_PARSERS, node, objectStack);
	}
	/**
	 * @param {Element} node Node.
	 * @param {Array<*>} objectStack Object stack.
	 * @return {Object|undefined} TileMatrixLimits Array.
	 */
	function readTileMatrixLimits(node, objectStack) {
	    return (0, _xml.pushParseAndPop)({}, TMS_LIMITS_PARSERS, node, objectStack);
	}
	exports.default = WMTSCapabilities;
	//# sourceMappingURL=WMTSCapabilities.js.map

/***/ }),
/* 594 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	
	var _extent = __webpack_require__(4);
	
	var _GeometryType = __webpack_require__(22);
	
	var _GeometryType2 = _interopRequireDefault(_GeometryType);
	
	var _SimpleGeometry = __webpack_require__(64);
	
	var _SimpleGeometry2 = _interopRequireDefault(_SimpleGeometry);
	
	var _deflate = __webpack_require__(72);
	
	var _transform = __webpack_require__(104);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var __extends = undefined && undefined.__extends || function () {
	    var _extendStatics = function extendStatics(d, b) {
	        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	            d.__proto__ = b;
	        } || function (d, b) {
	            for (var p in b) {
	                if (b.hasOwnProperty(p)) d[p] = b[p];
	            }
	        };
	        return _extendStatics(d, b);
	    };
	    return function (d, b) {
	        _extendStatics(d, b);
	        function __() {
	            this.constructor = d;
	        }
	        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	    };
	}();
	/**
	 * @module ol/geom/Circle
	 */
	
	/**
	 * @classdesc
	 * Circle geometry.
	 *
	 * @api
	 */
	var Circle = /** @class */function (_super) {
	    __extends(Circle, _super);
	    /**
	     * @param {!import("../coordinate.js").Coordinate} center Center.
	     *     For internal use, flat coordinates in combination with `opt_layout` and no
	     *     `opt_radius` are also accepted.
	     * @param {number=} opt_radius Radius.
	     * @param {import("./GeometryLayout.js").default=} opt_layout Layout.
	     */
	    function Circle(center, opt_radius, opt_layout) {
	        var _this = _super.call(this) || this;
	        if (opt_layout !== undefined && opt_radius === undefined) {
	            _this.setFlatCoordinates(opt_layout, center);
	        } else {
	            var radius = opt_radius ? opt_radius : 0;
	            _this.setCenterAndRadius(center, radius, opt_layout);
	        }
	        return _this;
	    }
	    /**
	     * Make a complete copy of the geometry.
	     * @return {!Circle} Clone.
	     * @override
	     * @api
	     */
	    Circle.prototype.clone = function () {
	        return new Circle(this.flatCoordinates.slice(), undefined, this.layout);
	    };
	    /**
	     * @inheritDoc
	     */
	    Circle.prototype.closestPointXY = function (x, y, closestPoint, minSquaredDistance) {
	        var flatCoordinates = this.flatCoordinates;
	        var dx = x - flatCoordinates[0];
	        var dy = y - flatCoordinates[1];
	        var squaredDistance = dx * dx + dy * dy;
	        if (squaredDistance < minSquaredDistance) {
	            if (squaredDistance === 0) {
	                for (var i = 0; i < this.stride; ++i) {
	                    closestPoint[i] = flatCoordinates[i];
	                }
	            } else {
	                var delta = this.getRadius() / Math.sqrt(squaredDistance);
	                closestPoint[0] = flatCoordinates[0] + delta * dx;
	                closestPoint[1] = flatCoordinates[1] + delta * dy;
	                for (var i = 2; i < this.stride; ++i) {
	                    closestPoint[i] = flatCoordinates[i];
	                }
	            }
	            closestPoint.length = this.stride;
	            return squaredDistance;
	        } else {
	            return minSquaredDistance;
	        }
	    };
	    /**
	     * @inheritDoc
	     */
	    Circle.prototype.containsXY = function (x, y) {
	        var flatCoordinates = this.flatCoordinates;
	        var dx = x - flatCoordinates[0];
	        var dy = y - flatCoordinates[1];
	        return dx * dx + dy * dy <= this.getRadiusSquared_();
	    };
	    /**
	     * Return the center of the circle as {@link module:ol/coordinate~Coordinate coordinate}.
	     * @return {import("../coordinate.js").Coordinate} Center.
	     * @api
	     */
	    Circle.prototype.getCenter = function () {
	        return this.flatCoordinates.slice(0, this.stride);
	    };
	    /**
	     * @inheritDoc
	     */
	    Circle.prototype.computeExtent = function (extent) {
	        var flatCoordinates = this.flatCoordinates;
	        var radius = flatCoordinates[this.stride] - flatCoordinates[0];
	        return (0, _extent.createOrUpdate)(flatCoordinates[0] - radius, flatCoordinates[1] - radius, flatCoordinates[0] + radius, flatCoordinates[1] + radius, extent);
	    };
	    /**
	     * Return the radius of the circle.
	     * @return {number} Radius.
	     * @api
	     */
	    Circle.prototype.getRadius = function () {
	        return Math.sqrt(this.getRadiusSquared_());
	    };
	    /**
	     * @private
	     * @return {number} Radius squared.
	     */
	    Circle.prototype.getRadiusSquared_ = function () {
	        var dx = this.flatCoordinates[this.stride] - this.flatCoordinates[0];
	        var dy = this.flatCoordinates[this.stride + 1] - this.flatCoordinates[1];
	        return dx * dx + dy * dy;
	    };
	    /**
	     * @inheritDoc
	     * @api
	     */
	    Circle.prototype.getType = function () {
	        return _GeometryType2.default.CIRCLE;
	    };
	    /**
	     * @inheritDoc
	     * @api
	     */
	    Circle.prototype.intersectsExtent = function (extent) {
	        var circleExtent = this.getExtent();
	        if ((0, _extent.intersects)(extent, circleExtent)) {
	            var center = this.getCenter();
	            if (extent[0] <= center[0] && extent[2] >= center[0]) {
	                return true;
	            }
	            if (extent[1] <= center[1] && extent[3] >= center[1]) {
	                return true;
	            }
	            return (0, _extent.forEachCorner)(extent, this.intersectsCoordinate.bind(this));
	        }
	        return false;
	    };
	    /**
	     * Set the center of the circle as {@link module:ol/coordinate~Coordinate coordinate}.
	     * @param {import("../coordinate.js").Coordinate} center Center.
	     * @api
	     */
	    Circle.prototype.setCenter = function (center) {
	        var stride = this.stride;
	        var radius = this.flatCoordinates[stride] - this.flatCoordinates[0];
	        var flatCoordinates = center.slice();
	        flatCoordinates[stride] = flatCoordinates[0] + radius;
	        for (var i = 1; i < stride; ++i) {
	            flatCoordinates[stride + i] = center[i];
	        }
	        this.setFlatCoordinates(this.layout, flatCoordinates);
	        this.changed();
	    };
	    /**
	     * Set the center (as {@link module:ol/coordinate~Coordinate coordinate}) and the radius (as
	     * number) of the circle.
	     * @param {!import("../coordinate.js").Coordinate} center Center.
	     * @param {number} radius Radius.
	     * @param {import("./GeometryLayout.js").default=} opt_layout Layout.
	     * @api
	     */
	    Circle.prototype.setCenterAndRadius = function (center, radius, opt_layout) {
	        this.setLayout(opt_layout, center, 0);
	        if (!this.flatCoordinates) {
	            this.flatCoordinates = [];
	        }
	        /** @type {Array<number>} */
	        var flatCoordinates = this.flatCoordinates;
	        var offset = (0, _deflate.deflateCoordinate)(flatCoordinates, 0, center, this.stride);
	        flatCoordinates[offset++] = flatCoordinates[0] + radius;
	        for (var i = 1, ii = this.stride; i < ii; ++i) {
	            flatCoordinates[offset++] = flatCoordinates[i];
	        }
	        flatCoordinates.length = offset;
	        this.changed();
	    };
	    /**
	     * @inheritDoc
	     */
	    Circle.prototype.getCoordinates = function () {
	        return null;
	    };
	    /**
	     * @inheritDoc
	     */
	    Circle.prototype.setCoordinates = function (coordinates, opt_layout) {};
	    /**
	     * Set the radius of the circle. The radius is in the units of the projection.
	     * @param {number} radius Radius.
	     * @api
	     */
	    Circle.prototype.setRadius = function (radius) {
	        this.flatCoordinates[this.stride] = this.flatCoordinates[0] + radius;
	        this.changed();
	    };
	    /**
	     * @inheritDoc
	     * @api
	     */
	    Circle.prototype.rotate = function (angle, anchor) {
	        var center = this.getCenter();
	        var stride = this.getStride();
	        this.setCenter((0, _transform.rotate)(center, 0, center.length, stride, angle, anchor, center));
	        this.changed();
	    };
	    /**
	     * @inheritDoc
	     * @api
	     */
	    Circle.prototype.translate = function (deltaX, deltaY) {
	        var center = this.getCenter();
	        var stride = this.getStride();
	        this.setCenter((0, _transform.translate)(center, 0, center.length, stride, deltaX, deltaY, center));
	        this.changed();
	    };
	    return Circle;
	}(_SimpleGeometry2.default);
	/**
	 * Transform each coordinate of the circle from one coordinate reference system
	 * to another. The geometry is modified in place.
	 * If you do not want the geometry modified in place, first clone() it and
	 * then use this function on the clone.
	 *
	 * Internally a circle is currently represented by two points: the center of
	 * the circle `[cx, cy]`, and the point to the right of the circle
	 * `[cx + r, cy]`. This `transform` function just transforms these two points.
	 * So the resulting geometry is also a circle, and that circle does not
	 * correspond to the shape that would be obtained by transforming every point
	 * of the original circle.
	 *
	 * @param {import("../proj.js").ProjectionLike} source The current projection.  Can be a
	 *     string identifier or a {@link module:ol/proj/Projection~Projection} object.
	 * @param {import("../proj.js").ProjectionLike} destination The desired projection.  Can be a
	 *     string identifier or a {@link module:ol/proj/Projection~Projection} object.
	 * @return {Circle} This geometry.  Note that original geometry is
	 *     modified in place.
	 * @function
	 * @api
	 */
	Circle.prototype.transform;
	exports.default = Circle;
	//# sourceMappingURL=Circle.js.map

/***/ }),
/* 595 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	
	var _events = __webpack_require__(30);
	
	var _EventType = __webpack_require__(10);
	
	var _EventType2 = _interopRequireDefault(_EventType);
	
	var _extent = __webpack_require__(4);
	
	var _Geometry = __webpack_require__(274);
	
	var _Geometry2 = _interopRequireDefault(_Geometry);
	
	var _GeometryType = __webpack_require__(22);
	
	var _GeometryType2 = _interopRequireDefault(_GeometryType);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var __extends = undefined && undefined.__extends || function () {
	    var _extendStatics = function extendStatics(d, b) {
	        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	            d.__proto__ = b;
	        } || function (d, b) {
	            for (var p in b) {
	                if (b.hasOwnProperty(p)) d[p] = b[p];
	            }
	        };
	        return _extendStatics(d, b);
	    };
	    return function (d, b) {
	        _extendStatics(d, b);
	        function __() {
	            this.constructor = d;
	        }
	        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	    };
	}();
	/**
	 * @module ol/geom/GeometryCollection
	 */
	
	/**
	 * @classdesc
	 * An array of {@link module:ol/geom/Geometry} objects.
	 *
	 * @api
	 */
	var GeometryCollection = /** @class */function (_super) {
	    __extends(GeometryCollection, _super);
	    /**
	     * @param {Array<Geometry>=} opt_geometries Geometries.
	     */
	    function GeometryCollection(opt_geometries) {
	        var _this = _super.call(this) || this;
	        /**
	         * @private
	         * @type {Array<Geometry>}
	         */
	        _this.geometries_ = opt_geometries ? opt_geometries : null;
	        /**
	         * @type {Array<import("../events.js").EventsKey>}
	         */
	        _this.changeEventsKeys_ = [];
	        _this.listenGeometriesChange_();
	        return _this;
	    }
	    /**
	     * @private
	     */
	    GeometryCollection.prototype.unlistenGeometriesChange_ = function () {
	        this.changeEventsKeys_.forEach(_events.unlistenByKey);
	        this.changeEventsKeys_.length = 0;
	    };
	    /**
	     * @private
	     */
	    GeometryCollection.prototype.listenGeometriesChange_ = function () {
	        if (!this.geometries_) {
	            return;
	        }
	        for (var i = 0, ii = this.geometries_.length; i < ii; ++i) {
	            this.changeEventsKeys_.push((0, _events.listen)(this.geometries_[i], _EventType2.default.CHANGE, this.changed, this));
	        }
	    };
	    /**
	     * Make a complete copy of the geometry.
	     * @return {!GeometryCollection} Clone.
	     * @override
	     * @api
	     */
	    GeometryCollection.prototype.clone = function () {
	        var geometryCollection = new GeometryCollection(null);
	        geometryCollection.setGeometries(this.geometries_);
	        return geometryCollection;
	    };
	    /**
	     * @inheritDoc
	     */
	    GeometryCollection.prototype.closestPointXY = function (x, y, closestPoint, minSquaredDistance) {
	        if (minSquaredDistance < (0, _extent.closestSquaredDistanceXY)(this.getExtent(), x, y)) {
	            return minSquaredDistance;
	        }
	        var geometries = this.geometries_;
	        for (var i = 0, ii = geometries.length; i < ii; ++i) {
	            minSquaredDistance = geometries[i].closestPointXY(x, y, closestPoint, minSquaredDistance);
	        }
	        return minSquaredDistance;
	    };
	    /**
	     * @inheritDoc
	     */
	    GeometryCollection.prototype.containsXY = function (x, y) {
	        var geometries = this.geometries_;
	        for (var i = 0, ii = geometries.length; i < ii; ++i) {
	            if (geometries[i].containsXY(x, y)) {
	                return true;
	            }
	        }
	        return false;
	    };
	    /**
	     * @inheritDoc
	     */
	    GeometryCollection.prototype.computeExtent = function (extent) {
	        (0, _extent.createOrUpdateEmpty)(extent);
	        var geometries = this.geometries_;
	        for (var i = 0, ii = geometries.length; i < ii; ++i) {
	            (0, _extent.extend)(extent, geometries[i].getExtent());
	        }
	        return extent;
	    };
	    /**
	     * Return the geometries that make up this geometry collection.
	     * @return {Array<Geometry>} Geometries.
	     * @api
	     */
	    GeometryCollection.prototype.getGeometries = function () {
	        return cloneGeometries(this.geometries_);
	    };
	    /**
	     * @return {Array<Geometry>} Geometries.
	     */
	    GeometryCollection.prototype.getGeometriesArray = function () {
	        return this.geometries_;
	    };
	    /**
	     * @inheritDoc
	     */
	    GeometryCollection.prototype.getSimplifiedGeometry = function (squaredTolerance) {
	        if (this.simplifiedGeometryRevision !== this.getRevision()) {
	            this.simplifiedGeometryMaxMinSquaredTolerance = 0;
	            this.simplifiedGeometryRevision = this.getRevision();
	        }
	        if (squaredTolerance < 0 || this.simplifiedGeometryMaxMinSquaredTolerance !== 0 && squaredTolerance < this.simplifiedGeometryMaxMinSquaredTolerance) {
	            return this;
	        }
	        var simplifiedGeometries = [];
	        var geometries = this.geometries_;
	        var simplified = false;
	        for (var i = 0, ii = geometries.length; i < ii; ++i) {
	            var geometry = geometries[i];
	            var simplifiedGeometry = geometry.getSimplifiedGeometry(squaredTolerance);
	            simplifiedGeometries.push(simplifiedGeometry);
	            if (simplifiedGeometry !== geometry) {
	                simplified = true;
	            }
	        }
	        if (simplified) {
	            var simplifiedGeometryCollection = new GeometryCollection(null);
	            simplifiedGeometryCollection.setGeometriesArray(simplifiedGeometries);
	            return simplifiedGeometryCollection;
	        } else {
	            this.simplifiedGeometryMaxMinSquaredTolerance = squaredTolerance;
	            return this;
	        }
	    };
	    /**
	     * @inheritDoc
	     * @api
	     */
	    GeometryCollection.prototype.getType = function () {
	        return _GeometryType2.default.GEOMETRY_COLLECTION;
	    };
	    /**
	     * @inheritDoc
	     * @api
	     */
	    GeometryCollection.prototype.intersectsExtent = function (extent) {
	        var geometries = this.geometries_;
	        for (var i = 0, ii = geometries.length; i < ii; ++i) {
	            if (geometries[i].intersectsExtent(extent)) {
	                return true;
	            }
	        }
	        return false;
	    };
	    /**
	     * @return {boolean} Is empty.
	     */
	    GeometryCollection.prototype.isEmpty = function () {
	        return this.geometries_.length === 0;
	    };
	    /**
	     * @inheritDoc
	     * @api
	     */
	    GeometryCollection.prototype.rotate = function (angle, anchor) {
	        var geometries = this.geometries_;
	        for (var i = 0, ii = geometries.length; i < ii; ++i) {
	            geometries[i].rotate(angle, anchor);
	        }
	        this.changed();
	    };
	    /**
	     * @inheritDoc
	     * @api
	     */
	    GeometryCollection.prototype.scale = function (sx, opt_sy, opt_anchor) {
	        var anchor = opt_anchor;
	        if (!anchor) {
	            anchor = (0, _extent.getCenter)(this.getExtent());
	        }
	        var geometries = this.geometries_;
	        for (var i = 0, ii = geometries.length; i < ii; ++i) {
	            geometries[i].scale(sx, opt_sy, anchor);
	        }
	        this.changed();
	    };
	    /**
	     * Set the geometries that make up this geometry collection.
	     * @param {Array<Geometry>} geometries Geometries.
	     * @api
	     */
	    GeometryCollection.prototype.setGeometries = function (geometries) {
	        this.setGeometriesArray(cloneGeometries(geometries));
	    };
	    /**
	     * @param {Array<Geometry>} geometries Geometries.
	     */
	    GeometryCollection.prototype.setGeometriesArray = function (geometries) {
	        this.unlistenGeometriesChange_();
	        this.geometries_ = geometries;
	        this.listenGeometriesChange_();
	        this.changed();
	    };
	    /**
	     * @inheritDoc
	     * @api
	     */
	    GeometryCollection.prototype.applyTransform = function (transformFn) {
	        var geometries = this.geometries_;
	        for (var i = 0, ii = geometries.length; i < ii; ++i) {
	            geometries[i].applyTransform(transformFn);
	        }
	        this.changed();
	    };
	    /**
	     * @inheritDoc
	     * @api
	     */
	    GeometryCollection.prototype.translate = function (deltaX, deltaY) {
	        var geometries = this.geometries_;
	        for (var i = 0, ii = geometries.length; i < ii; ++i) {
	            geometries[i].translate(deltaX, deltaY);
	        }
	        this.changed();
	    };
	    /**
	     * @inheritDoc
	     */
	    GeometryCollection.prototype.disposeInternal = function () {
	        this.unlistenGeometriesChange_();
	        _super.prototype.disposeInternal.call(this);
	    };
	    return GeometryCollection;
	}(_Geometry2.default);
	/**
	 * @param {Array<Geometry>} geometries Geometries.
	 * @return {Array<Geometry>} Cloned geometries.
	 */
	function cloneGeometries(geometries) {
	    var clonedGeometries = [];
	    for (var i = 0, ii = geometries.length; i < ii; ++i) {
	        clonedGeometries.push(geometries[i].clone());
	    }
	    return clonedGeometries;
	}
	exports.default = GeometryCollection;
	//# sourceMappingURL=GeometryCollection.js.map

/***/ }),
/* 596 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	
	var _extent = __webpack_require__(4);
	
	var _GeometryLayout = __webpack_require__(102);
	
	var _GeometryLayout2 = _interopRequireDefault(_GeometryLayout);
	
	var _GeometryType = __webpack_require__(22);
	
	var _GeometryType2 = _interopRequireDefault(_GeometryType);
	
	var _SimpleGeometry = __webpack_require__(64);
	
	var _SimpleGeometry2 = _interopRequireDefault(_SimpleGeometry);
	
	var _area = __webpack_require__(173);
	
	var _closest = __webpack_require__(125);
	
	var _deflate = __webpack_require__(72);
	
	var _inflate = __webpack_require__(86);
	
	var _simplify = __webpack_require__(103);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var __extends = undefined && undefined.__extends || function () {
	    var _extendStatics = function extendStatics(d, b) {
	        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	            d.__proto__ = b;
	        } || function (d, b) {
	            for (var p in b) {
	                if (b.hasOwnProperty(p)) d[p] = b[p];
	            }
	        };
	        return _extendStatics(d, b);
	    };
	    return function (d, b) {
	        _extendStatics(d, b);
	        function __() {
	            this.constructor = d;
	        }
	        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	    };
	}();
	/**
	 * @module ol/geom/LinearRing
	 */
	
	/**
	 * @classdesc
	 * Linear ring geometry. Only used as part of polygon; cannot be rendered
	 * on its own.
	 *
	 * @api
	 */
	var LinearRing = /** @class */function (_super) {
	    __extends(LinearRing, _super);
	    /**
	     * @param {Array<import("../coordinate.js").Coordinate>|Array<number>} coordinates Coordinates.
	     *     For internal use, flat coordinates in combination with `opt_layout` are also accepted.
	     * @param {GeometryLayout=} opt_layout Layout.
	     */
	    function LinearRing(coordinates, opt_layout) {
	        var _this = _super.call(this) || this;
	        /**
	         * @private
	         * @type {number}
	         */
	        _this.maxDelta_ = -1;
	        /**
	         * @private
	         * @type {number}
	         */
	        _this.maxDeltaRevision_ = -1;
	        if (opt_layout !== undefined && !Array.isArray(coordinates[0])) {
	            _this.setFlatCoordinates(opt_layout, /** @type {Array<number>} */coordinates);
	        } else {
	            _this.setCoordinates( /** @type {Array<import("../coordinate.js").Coordinate>} */coordinates, opt_layout);
	        }
	        return _this;
	    }
	    /**
	     * Make a complete copy of the geometry.
	     * @return {!LinearRing} Clone.
	     * @override
	     * @api
	     */
	    LinearRing.prototype.clone = function () {
	        return new LinearRing(this.flatCoordinates.slice(), this.layout);
	    };
	    /**
	     * @inheritDoc
	     */
	    LinearRing.prototype.closestPointXY = function (x, y, closestPoint, minSquaredDistance) {
	        if (minSquaredDistance < (0, _extent.closestSquaredDistanceXY)(this.getExtent(), x, y)) {
	            return minSquaredDistance;
	        }
	        if (this.maxDeltaRevision_ != this.getRevision()) {
	            this.maxDelta_ = Math.sqrt((0, _closest.maxSquaredDelta)(this.flatCoordinates, 0, this.flatCoordinates.length, this.stride, 0));
	            this.maxDeltaRevision_ = this.getRevision();
	        }
	        return (0, _closest.assignClosestPoint)(this.flatCoordinates, 0, this.flatCoordinates.length, this.stride, this.maxDelta_, true, x, y, closestPoint, minSquaredDistance);
	    };
	    /**
	     * Return the area of the linear ring on projected plane.
	     * @return {number} Area (on projected plane).
	     * @api
	     */
	    LinearRing.prototype.getArea = function () {
	        return (0, _area.linearRing)(this.flatCoordinates, 0, this.flatCoordinates.length, this.stride);
	    };
	    /**
	     * Return the coordinates of the linear ring.
	     * @return {Array<import("../coordinate.js").Coordinate>} Coordinates.
	     * @override
	     * @api
	     */
	    LinearRing.prototype.getCoordinates = function () {
	        return (0, _inflate.inflateCoordinates)(this.flatCoordinates, 0, this.flatCoordinates.length, this.stride);
	    };
	    /**
	     * @inheritDoc
	     */
	    LinearRing.prototype.getSimplifiedGeometryInternal = function (squaredTolerance) {
	        var simplifiedFlatCoordinates = [];
	        simplifiedFlatCoordinates.length = (0, _simplify.douglasPeucker)(this.flatCoordinates, 0, this.flatCoordinates.length, this.stride, squaredTolerance, simplifiedFlatCoordinates, 0);
	        return new LinearRing(simplifiedFlatCoordinates, _GeometryLayout2.default.XY);
	    };
	    /**
	     * @inheritDoc
	     * @api
	     */
	    LinearRing.prototype.getType = function () {
	        return _GeometryType2.default.LINEAR_RING;
	    };
	    /**
	     * @inheritDoc
	     */
	    LinearRing.prototype.intersectsExtent = function (extent) {
	        return false;
	    };
	    /**
	     * Set the coordinates of the linear ring.
	     * @param {!Array<import("../coordinate.js").Coordinate>} coordinates Coordinates.
	     * @param {GeometryLayout=} opt_layout Layout.
	     * @override
	     * @api
	     */
	    LinearRing.prototype.setCoordinates = function (coordinates, opt_layout) {
	        this.setLayout(opt_layout, coordinates, 1);
	        if (!this.flatCoordinates) {
	            this.flatCoordinates = [];
	        }
	        this.flatCoordinates.length = (0, _deflate.deflateCoordinates)(this.flatCoordinates, 0, coordinates, this.stride);
	        this.changed();
	    };
	    return LinearRing;
	}(_SimpleGeometry2.default);
	exports.default = LinearRing;
	//# sourceMappingURL=LinearRing.js.map

/***/ }),
/* 597 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	exports.linearRingss = linearRingss;
	
	var _extent = __webpack_require__(4);
	
	/**
	 * @param {Array<number>} flatCoordinates Flat coordinates.
	 * @param {number} offset Offset.
	 * @param {Array<Array<number>>} endss Endss.
	 * @param {number} stride Stride.
	 * @return {Array<number>} Flat centers.
	 */
	function linearRingss(flatCoordinates, offset, endss, stride) {
	  var flatCenters = [];
	  var extent = (0, _extent.createEmpty)();
	  for (var i = 0, ii = endss.length; i < ii; ++i) {
	    var ends = endss[i];
	    extent = (0, _extent.createOrUpdateFromFlatCoordinates)(flatCoordinates, offset, ends[0], stride);
	    flatCenters.push((extent[0] + extent[2]) / 2, (extent[1] + extent[3]) / 2);
	    offset = ends[ends.length - 1];
	  }
	  return flatCenters;
	}
	//# sourceMappingURL=center.js.map
	/**
	 * @module ol/geom/flat/center
	 */

/***/ }),
/* 598 */
/***/ (function(module, exports) {

	"use strict";
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	exports.coordinates = coordinates;
	/**
	 * @module ol/geom/flat/reverse
	 */
	/**
	 * @param {Array<number>} flatCoordinates Flat coordinates.
	 * @param {number} offset Offset.
	 * @param {number} end End.
	 * @param {number} stride Stride.
	 */
	function coordinates(flatCoordinates, offset, end, stride) {
	    while (offset < end - stride) {
	        for (var i = 0; i < stride; ++i) {
	            var tmp = flatCoordinates[offset + i];
	            flatCoordinates[offset + i] = flatCoordinates[end - stride + i];
	            flatCoordinates[end - stride + i] = tmp;
	        }
	        offset += stride;
	        end -= stride;
	    }
	}
	//# sourceMappingURL=reverse.js.map

/***/ }),
/* 599 */
/***/ (function(module, exports) {

	"use strict";
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	exports.matchingChunk = matchingChunk;
	/**
	 * @module ol/geom/flat/straightchunk
	 */
	/**
	 * @param {number} maxAngle Maximum acceptable angle delta between segments.
	 * @param {Array<number>} flatCoordinates Flat coordinates.
	 * @param {number} offset Offset.
	 * @param {number} end End.
	 * @param {number} stride Stride.
	 * @return {Array<number>} Start and end of the first suitable chunk of the
	 * given `flatCoordinates`.
	 */
	function matchingChunk(maxAngle, flatCoordinates, offset, end, stride) {
	    var chunkStart = offset;
	    var chunkEnd = offset;
	    var chunkM = 0;
	    var m = 0;
	    var start = offset;
	    var acos, i, m12, m23, x1, y1, x12, y12, x23, y23;
	    for (i = offset; i < end; i += stride) {
	        var x2 = flatCoordinates[i];
	        var y2 = flatCoordinates[i + 1];
	        if (x1 !== undefined) {
	            x23 = x2 - x1;
	            y23 = y2 - y1;
	            m23 = Math.sqrt(x23 * x23 + y23 * y23);
	            if (x12 !== undefined) {
	                m += m12;
	                acos = Math.acos((x12 * x23 + y12 * y23) / (m12 * m23));
	                if (acos > maxAngle) {
	                    if (m > chunkM) {
	                        chunkM = m;
	                        chunkStart = start;
	                        chunkEnd = i;
	                    }
	                    m = 0;
	                    start = i - stride;
	                }
	            }
	            m12 = m23;
	            x12 = x23;
	            y12 = y23;
	        }
	        x1 = x2;
	        y1 = y2;
	    }
	    m += m23;
	    return m > chunkM ? [start, i] : [chunkStart, chunkEnd];
	}
	//# sourceMappingURL=straightchunk.js.map

/***/ }),
/* 600 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	exports.drawTextOnPath = drawTextOnPath;
	
	var _math = __webpack_require__(19);
	
	/**
	 * @param {Array<number>} flatCoordinates Path to put text on.
	 * @param {number} offset Start offset of the `flatCoordinates`.
	 * @param {number} end End offset of the `flatCoordinates`.
	 * @param {number} stride Stride.
	 * @param {string} text Text to place on the path.
	 * @param {number} startM m along the path where the text starts.
	 * @param {number} maxAngle Max angle between adjacent chars in radians.
	 * @param {number} scale The product of the text scale and the device pixel ratio.
	 * @param {function(string, string, Object<string, number>):number} measureAndCacheTextWidth Measure and cache text width.
	 * @param {string} font The font.
	 * @param {Object<string, number>} cache A cache of measured widths.
	 * @return {Array<Array<*>>} The result array (or null if `maxAngle` was
	 * exceeded). Entries of the array are x, y, anchorX, angle, chunk.
	 */
	function drawTextOnPath(flatCoordinates, offset, end, stride, text, startM, maxAngle, scale, measureAndCacheTextWidth, font, cache) {
	    var result = [];
	    // Keep text upright
	    var reverse = flatCoordinates[offset] > flatCoordinates[end - stride];
	    var numChars = text.length;
	    var x1 = flatCoordinates[offset];
	    var y1 = flatCoordinates[offset + 1];
	    offset += stride;
	    var x2 = flatCoordinates[offset];
	    var y2 = flatCoordinates[offset + 1];
	    var segmentM = 0;
	    var segmentLength = Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2));
	    var angleChanged = false;
	    var index, previousAngle;
	    for (var i = 0; i < numChars; ++i) {
	        index = reverse ? numChars - i - 1 : i;
	        var char = text[index];
	        var charLength = scale * measureAndCacheTextWidth(font, char, cache);
	        var charM = startM + charLength / 2;
	        while (offset < end - stride && segmentM + segmentLength < charM) {
	            x1 = x2;
	            y1 = y2;
	            offset += stride;
	            x2 = flatCoordinates[offset];
	            y2 = flatCoordinates[offset + 1];
	            segmentM += segmentLength;
	            segmentLength = Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2));
	        }
	        var segmentPos = charM - segmentM;
	        var angle = Math.atan2(y2 - y1, x2 - x1);
	        if (reverse) {
	            angle += angle > 0 ? -Math.PI : Math.PI;
	        }
	        if (previousAngle !== undefined) {
	            var delta = angle - previousAngle;
	            angleChanged = angleChanged || delta !== 0;
	            delta += delta > Math.PI ? -2 * Math.PI : delta < -Math.PI ? 2 * Math.PI : 0;
	            if (Math.abs(delta) > maxAngle) {
	                return null;
	            }
	        }
	        previousAngle = angle;
	        var interpolate = segmentPos / segmentLength;
	        var x = (0, _math.lerp)(x1, x2, interpolate);
	        var y = (0, _math.lerp)(y1, y2, interpolate);
	        result[index] = [x, y, charLength / 2, angle, char];
	        startM += charLength;
	    }
	    return angleChanged ? result : [[result[0][0], result[0][1], result[0][2], result[0][3], text]];
	}
	//# sourceMappingURL=textpath.js.map
	/**
	 * @module ol/geom/flat/textpath
	 */

/***/ }),
/* 601 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	exports.Translate = exports.Snap = exports.Select = exports.Pointer = exports.PinchZoom = exports.PinchRotate = exports.MouseWheelZoom = exports.Modify = exports.KeyboardZoom = exports.KeyboardPan = exports.Interaction = exports.Extent = exports.Draw = exports.DragZoom = exports.DragRotateAndZoom = exports.DragRotate = exports.DragPan = exports.DragBox = exports.DragAndDrop = exports.DoubleClickZoom = undefined;
	
	var _DoubleClickZoom = __webpack_require__(602);
	
	Object.defineProperty(exports, 'DoubleClickZoom', {
	    enumerable: true,
	    get: function get() {
	        return _interopRequireDefault(_DoubleClickZoom).default;
	    }
	});
	
	var _DragAndDrop = __webpack_require__(603);
	
	Object.defineProperty(exports, 'DragAndDrop', {
	    enumerable: true,
	    get: function get() {
	        return _interopRequireDefault(_DragAndDrop).default;
	    }
	});
	
	var _DragBox = __webpack_require__(282);
	
	Object.defineProperty(exports, 'DragBox', {
	    enumerable: true,
	    get: function get() {
	        return _interopRequireDefault(_DragBox).default;
	    }
	});
	
	var _DragPan = __webpack_require__(604);
	
	Object.defineProperty(exports, 'DragPan', {
	    enumerable: true,
	    get: function get() {
	        return _interopRequireDefault(_DragPan).default;
	    }
	});
	
	var _DragRotate = __webpack_require__(605);
	
	Object.defineProperty(exports, 'DragRotate', {
	    enumerable: true,
	    get: function get() {
	        return _interopRequireDefault(_DragRotate).default;
	    }
	});
	
	var _DragRotateAndZoom = __webpack_require__(606);
	
	Object.defineProperty(exports, 'DragRotateAndZoom', {
	    enumerable: true,
	    get: function get() {
	        return _interopRequireDefault(_DragRotateAndZoom).default;
	    }
	});
	
	var _DragZoom = __webpack_require__(607);
	
	Object.defineProperty(exports, 'DragZoom', {
	    enumerable: true,
	    get: function get() {
	        return _interopRequireDefault(_DragZoom).default;
	    }
	});
	
	var _Draw = __webpack_require__(283);
	
	Object.defineProperty(exports, 'Draw', {
	    enumerable: true,
	    get: function get() {
	        return _interopRequireDefault(_Draw).default;
	    }
	});
	
	var _Extent = __webpack_require__(608);
	
	Object.defineProperty(exports, 'Extent', {
	    enumerable: true,
	    get: function get() {
	        return _interopRequireDefault(_Extent).default;
	    }
	});
	
	var _Interaction = __webpack_require__(73);
	
	Object.defineProperty(exports, 'Interaction', {
	    enumerable: true,
	    get: function get() {
	        return _interopRequireDefault(_Interaction).default;
	    }
	});
	
	var _KeyboardPan = __webpack_require__(609);
	
	Object.defineProperty(exports, 'KeyboardPan', {
	    enumerable: true,
	    get: function get() {
	        return _interopRequireDefault(_KeyboardPan).default;
	    }
	});
	
	var _KeyboardZoom = __webpack_require__(610);
	
	Object.defineProperty(exports, 'KeyboardZoom', {
	    enumerable: true,
	    get: function get() {
	        return _interopRequireDefault(_KeyboardZoom).default;
	    }
	});
	
	var _Modify = __webpack_require__(611);
	
	Object.defineProperty(exports, 'Modify', {
	    enumerable: true,
	    get: function get() {
	        return _interopRequireDefault(_Modify).default;
	    }
	});
	
	var _MouseWheelZoom = __webpack_require__(612);
	
	Object.defineProperty(exports, 'MouseWheelZoom', {
	    enumerable: true,
	    get: function get() {
	        return _interopRequireDefault(_MouseWheelZoom).default;
	    }
	});
	
	var _PinchRotate = __webpack_require__(613);
	
	Object.defineProperty(exports, 'PinchRotate', {
	    enumerable: true,
	    get: function get() {
	        return _interopRequireDefault(_PinchRotate).default;
	    }
	});
	
	var _PinchZoom = __webpack_require__(614);
	
	Object.defineProperty(exports, 'PinchZoom', {
	    enumerable: true,
	    get: function get() {
	        return _interopRequireDefault(_PinchZoom).default;
	    }
	});
	
	var _Pointer = __webpack_require__(41);
	
	Object.defineProperty(exports, 'Pointer', {
	    enumerable: true,
	    get: function get() {
	        return _interopRequireDefault(_Pointer).default;
	    }
	});
	
	var _Select = __webpack_require__(615);
	
	Object.defineProperty(exports, 'Select', {
	    enumerable: true,
	    get: function get() {
	        return _interopRequireDefault(_Select).default;
	    }
	});
	
	var _Snap = __webpack_require__(616);
	
	Object.defineProperty(exports, 'Snap', {
	    enumerable: true,
	    get: function get() {
	        return _interopRequireDefault(_Snap).default;
	    }
	});
	
	var _Translate = __webpack_require__(617);
	
	Object.defineProperty(exports, 'Translate', {
	    enumerable: true,
	    get: function get() {
	        return _interopRequireDefault(_Translate).default;
	    }
	});
	exports.defaults = defaults;
	
	var _Collection = __webpack_require__(63);
	
	var _Collection2 = _interopRequireDefault(_Collection);
	
	var _Kinetic = __webpack_require__(577);
	
	var _Kinetic2 = _interopRequireDefault(_Kinetic);
	
	var _DoubleClickZoom2 = _interopRequireDefault(_DoubleClickZoom);
	
	var _DragPan2 = _interopRequireDefault(_DragPan);
	
	var _DragRotate2 = _interopRequireDefault(_DragRotate);
	
	var _DragZoom2 = _interopRequireDefault(_DragZoom);
	
	var _KeyboardPan2 = _interopRequireDefault(_KeyboardPan);
	
	var _KeyboardZoom2 = _interopRequireDefault(_KeyboardZoom);
	
	var _MouseWheelZoom2 = _interopRequireDefault(_MouseWheelZoom);
	
	var _PinchRotate2 = _interopRequireDefault(_PinchRotate);
	
	var _PinchZoom2 = _interopRequireDefault(_PinchZoom);
	
	var _condition = __webpack_require__(40);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	/**
	 * @typedef {Object} DefaultsOptions
	 * @property {boolean} [altShiftDragRotate=true] Whether Alt-Shift-drag rotate is
	 * desired.
	 * @property {boolean} [onFocusOnly=false] Interact only when the map has the
	 * focus. This affects the `MouseWheelZoom` and `DragPan` interactions and is
	 * useful when page scroll is desired for maps that do not have the browser's
	 * focus.
	 * @property {boolean} [doubleClickZoom=true] Whether double click zoom is
	 * desired.
	 * @property {boolean} [keyboard=true] Whether keyboard interaction is desired.
	 * @property {boolean} [mouseWheelZoom=true] Whether mousewheel zoom is desired.
	 * @property {boolean} [shiftDragZoom=true] Whether Shift-drag zoom is desired.
	 * @property {boolean} [dragPan=true] Whether drag pan is desired.
	 * @property {boolean} [pinchRotate=true] Whether pinch rotate is desired.
	 * @property {boolean} [pinchZoom=true] Whether pinch zoom is desired.
	 * @property {number} [zoomDelta] Zoom level delta when using keyboard or double click zoom.
	 * @property {number} [zoomDuration] Duration of the zoom animation in
	 * milliseconds.
	 */
	/**
	 * Set of interactions included in maps by default. Specific interactions can be
	 * excluded by setting the appropriate option to false in the constructor
	 * options, but the order of the interactions is fixed.  If you want to specify
	 * a different order for interactions, you will need to create your own
	 * {@link module:ol/interaction/Interaction} instances and insert
	 * them into a {@link module:ol/Collection} in the order you want
	 * before creating your {@link module:ol/Map~Map} instance. Changing the order can
	 * be of interest if the event propagation needs to be stopped at a point.
	 * The default set of interactions, in sequence, is:
	 * * {@link module:ol/interaction/DragRotate~DragRotate}
	 * * {@link module:ol/interaction/DoubleClickZoom~DoubleClickZoom}
	 * * {@link module:ol/interaction/DragPan~DragPan}
	 * * {@link module:ol/interaction/PinchRotate~PinchRotate}
	 * * {@link module:ol/interaction/PinchZoom~PinchZoom}
	 * * {@link module:ol/interaction/KeyboardPan~KeyboardPan}
	 * * {@link module:ol/interaction/KeyboardZoom~KeyboardZoom}
	 * * {@link module:ol/interaction/MouseWheelZoom~MouseWheelZoom}
	 * * {@link module:ol/interaction/DragZoom~DragZoom}
	 *
	 * @param {DefaultsOptions=} opt_options Defaults options.
	 * @return {import("./Collection.js").default<import("./interaction/Interaction.js").default>}
	 * A collection of interactions to be used with the {@link module:ol/Map~Map}
	 * constructor's `interactions` option.
	 * @api
	 */
	function defaults(opt_options) {
	    var options = opt_options ? opt_options : {};
	    var interactions = new _Collection2.default();
	    var kinetic = new _Kinetic2.default(-0.005, 0.05, 100);
	    var altShiftDragRotate = options.altShiftDragRotate !== undefined ? options.altShiftDragRotate : true;
	    if (altShiftDragRotate) {
	        interactions.push(new _DragRotate2.default());
	    }
	    var doubleClickZoom = options.doubleClickZoom !== undefined ? options.doubleClickZoom : true;
	    if (doubleClickZoom) {
	        interactions.push(new _DoubleClickZoom2.default({
	            delta: options.zoomDelta,
	            duration: options.zoomDuration
	        }));
	    }
	    var dragPan = options.dragPan !== undefined ? options.dragPan : true;
	    if (dragPan) {
	        interactions.push(new _DragPan2.default({
	            condition: options.onFocusOnly ? _condition.focus : undefined,
	            kinetic: kinetic
	        }));
	    }
	    var pinchRotate = options.pinchRotate !== undefined ? options.pinchRotate : true;
	    if (pinchRotate) {
	        interactions.push(new _PinchRotate2.default());
	    }
	    var pinchZoom = options.pinchZoom !== undefined ? options.pinchZoom : true;
	    if (pinchZoom) {
	        interactions.push(new _PinchZoom2.default({
	            duration: options.zoomDuration
	        }));
	    }
	    var keyboard = options.keyboard !== undefined ? options.keyboard : true;
	    if (keyboard) {
	        interactions.push(new _KeyboardPan2.default());
	        interactions.push(new _KeyboardZoom2.default({
	            delta: options.zoomDelta,
	            duration: options.zoomDuration
	        }));
	    }
	    var mouseWheelZoom = options.mouseWheelZoom !== undefined ? options.mouseWheelZoom : true;
	    if (mouseWheelZoom) {
	        interactions.push(new _MouseWheelZoom2.default({
	            condition: options.onFocusOnly ? _condition.focus : undefined,
	            duration: options.zoomDuration
	        }));
	    }
	    var shiftDragZoom = options.shiftDragZoom !== undefined ? options.shiftDragZoom : true;
	    if (shiftDragZoom) {
	        interactions.push(new _DragZoom2.default({
	            duration: options.zoomDuration
	        }));
	    }
	    return interactions;
	}
	//# sourceMappingURL=interaction.js.map

/***/ }),
/* 602 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	
	var _MapBrowserEventType = __webpack_require__(69);
	
	var _MapBrowserEventType2 = _interopRequireDefault(_MapBrowserEventType);
	
	var _Interaction = __webpack_require__(73);
	
	var _Interaction2 = _interopRequireDefault(_Interaction);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var __extends = undefined && undefined.__extends || function () {
	    var _extendStatics = function extendStatics(d, b) {
	        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	            d.__proto__ = b;
	        } || function (d, b) {
	            for (var p in b) {
	                if (b.hasOwnProperty(p)) d[p] = b[p];
	            }
	        };
	        return _extendStatics(d, b);
	    };
	    return function (d, b) {
	        _extendStatics(d, b);
	        function __() {
	            this.constructor = d;
	        }
	        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	    };
	}();
	/**
	 * @module ol/interaction/DoubleClickZoom
	 */
	
	/**
	 * @typedef {Object} Options
	 * @property {number} [duration=250] Animation duration in milliseconds.
	 * @property {number} [delta=1] The zoom delta applied on each double click.
	 */
	/**
	 * @classdesc
	 * Allows the user to zoom by double-clicking on the map.
	 * @api
	 */
	var DoubleClickZoom = /** @class */function (_super) {
	    __extends(DoubleClickZoom, _super);
	    /**
	     * @param {Options=} opt_options Options.
	     */
	    function DoubleClickZoom(opt_options) {
	        var _this = _super.call(this, {
	            handleEvent: handleEvent
	        }) || this;
	        var options = opt_options ? opt_options : {};
	        /**
	         * @private
	         * @type {number}
	         */
	        _this.delta_ = options.delta ? options.delta : 1;
	        /**
	         * @private
	         * @type {number}
	         */
	        _this.duration_ = options.duration !== undefined ? options.duration : 250;
	        return _this;
	    }
	    return DoubleClickZoom;
	}(_Interaction2.default);
	/**
	 * Handles the {@link module:ol/MapBrowserEvent map browser event} (if it was a
	 * doubleclick) and eventually zooms the map.
	 * @param {import("../MapBrowserEvent.js").default} mapBrowserEvent Map browser event.
	 * @return {boolean} `false` to stop event propagation.
	 * @this {DoubleClickZoom}
	 */
	function handleEvent(mapBrowserEvent) {
	    var stopEvent = false;
	    if (mapBrowserEvent.type == _MapBrowserEventType2.default.DBLCLICK) {
	        var browserEvent = /** @type {MouseEvent} */mapBrowserEvent.originalEvent;
	        var map = mapBrowserEvent.map;
	        var anchor = mapBrowserEvent.coordinate;
	        var delta = browserEvent.shiftKey ? -this.delta_ : this.delta_;
	        var view = map.getView();
	        (0, _Interaction.zoomByDelta)(view, delta, anchor, this.duration_);
	        mapBrowserEvent.preventDefault();
	        stopEvent = true;
	    }
	    return !stopEvent;
	}
	exports.default = DoubleClickZoom;
	//# sourceMappingURL=DoubleClickZoom.js.map

/***/ }),
/* 603 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	
	var _functions = __webpack_require__(31);
	
	var _events = __webpack_require__(30);
	
	var _Event = __webpack_require__(35);
	
	var _Event2 = _interopRequireDefault(_Event);
	
	var _EventType = __webpack_require__(10);
	
	var _EventType2 = _interopRequireDefault(_EventType);
	
	var _Interaction = __webpack_require__(73);
	
	var _Interaction2 = _interopRequireDefault(_Interaction);
	
	var _proj = __webpack_require__(16);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	/**
	 * @module ol/interaction/DragAndDrop
	 */
	// FIXME should handle all geo-referenced data, not just vector data
	var __extends = undefined && undefined.__extends || function () {
	    var _extendStatics = function extendStatics(d, b) {
	        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	            d.__proto__ = b;
	        } || function (d, b) {
	            for (var p in b) {
	                if (b.hasOwnProperty(p)) d[p] = b[p];
	            }
	        };
	        return _extendStatics(d, b);
	    };
	    return function (d, b) {
	        _extendStatics(d, b);
	        function __() {
	            this.constructor = d;
	        }
	        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	    };
	}();
	
	/**
	 * @typedef {Object} Options
	 * @property {Array<typeof import("../format/Feature.js").default>} [formatConstructors] Format constructors.
	 * @property {import("../source/Vector.js").default} [source] Optional vector source where features will be added.  If a source is provided
	 * all existing features will be removed and new features will be added when
	 * they are dropped on the target.  If you want to add features to a vector
	 * source without removing the existing features (append only), instead of
	 * providing the source option listen for the "addfeatures" event.
	 * @property {import("../proj.js").ProjectionLike} [projection] Target projection. By default, the map's view's projection is used.
	 * @property {HTMLElement} [target] The element that is used as the drop target, default is the viewport element.
	 */
	/**
	 * @enum {string}
	 */
	var DragAndDropEventType = {
	    /**
	     * Triggered when features are added
	     * @event DragAndDropEvent#addfeatures
	     * @api
	     */
	    ADD_FEATURES: 'addfeatures'
	};
	/**
	 * @classdesc
	 * Events emitted by {@link module:ol/interaction/DragAndDrop~DragAndDrop} instances are instances
	 * of this type.
	 */
	var DragAndDropEvent = /** @class */function (_super) {
	    __extends(DragAndDropEvent, _super);
	    /**
	     * @param {DragAndDropEventType} type Type.
	     * @param {File} file File.
	     * @param {Array<import("../Feature.js").default>=} opt_features Features.
	     * @param {import("../proj/Projection.js").default=} opt_projection Projection.
	     */
	    function DragAndDropEvent(type, file, opt_features, opt_projection) {
	        var _this = _super.call(this, type) || this;
	        /**
	         * The features parsed from dropped data.
	         * @type {Array<import("../Feature.js").FeatureLike>|undefined}
	         * @api
	         */
	        _this.features = opt_features;
	        /**
	         * The dropped file.
	         * @type {File}
	         * @api
	         */
	        _this.file = file;
	        /**
	         * The feature projection.
	         * @type {import("../proj/Projection.js").default|undefined}
	         * @api
	         */
	        _this.projection = opt_projection;
	        return _this;
	    }
	    return DragAndDropEvent;
	}(_Event2.default);
	/**
	 * @classdesc
	 * Handles input of vector data by drag and drop.
	 * @api
	 *
	 * @fires DragAndDropEvent
	 */
	var DragAndDrop = /** @class */function (_super) {
	    __extends(DragAndDrop, _super);
	    /**
	     * @param {Options=} opt_options Options.
	     */
	    function DragAndDrop(opt_options) {
	        var _this = this;
	        var options = opt_options ? opt_options : {};
	        _this = _super.call(this, {
	            handleEvent: _functions.TRUE
	        }) || this;
	        /**
	         * @private
	         * @type {Array<typeof import("../format/Feature.js").default>}
	         */
	        _this.formatConstructors_ = options.formatConstructors ? options.formatConstructors : [];
	        /**
	         * @private
	         * @type {import("../proj/Projection.js").default}
	         */
	        _this.projection_ = options.projection ? (0, _proj.get)(options.projection) : null;
	        /**
	         * @private
	         * @type {?Array<import("../events.js").EventsKey>}
	         */
	        _this.dropListenKeys_ = null;
	        /**
	         * @private
	         * @type {import("../source/Vector.js").default}
	         */
	        _this.source_ = options.source || null;
	        /**
	         * @private
	         * @type {HTMLElement}
	         */
	        _this.target = options.target ? options.target : null;
	        return _this;
	    }
	    /**
	     * @param {File} file File.
	     * @param {Event} event Load event.
	     * @private
	     */
	    DragAndDrop.prototype.handleResult_ = function (file, event) {
	        var result = event.target.result;
	        var map = this.getMap();
	        var projection = this.projection_;
	        if (!projection) {
	            var view = map.getView();
	            projection = view.getProjection();
	        }
	        var formatConstructors = this.formatConstructors_;
	        var features = [];
	        for (var i = 0, ii = formatConstructors.length; i < ii; ++i) {
	            var format = new formatConstructors[i]();
	            features = this.tryReadFeatures_(format, result, {
	                featureProjection: projection
	            });
	            if (features && features.length > 0) {
	                break;
	            }
	        }
	        if (this.source_) {
	            this.source_.clear();
	            this.source_.addFeatures(features);
	        }
	        this.dispatchEvent(new DragAndDropEvent(DragAndDropEventType.ADD_FEATURES, file, features, projection));
	    };
	    /**
	     * @private
	     */
	    DragAndDrop.prototype.registerListeners_ = function () {
	        var map = this.getMap();
	        if (map) {
	            var dropArea = this.target ? this.target : map.getViewport();
	            this.dropListenKeys_ = [(0, _events.listen)(dropArea, _EventType2.default.DROP, handleDrop, this), (0, _events.listen)(dropArea, _EventType2.default.DRAGENTER, handleStop, this), (0, _events.listen)(dropArea, _EventType2.default.DRAGOVER, handleStop, this), (0, _events.listen)(dropArea, _EventType2.default.DROP, handleStop, this)];
	        }
	    };
	    /**
	     * @inheritDoc
	     */
	    DragAndDrop.prototype.setActive = function (active) {
	        if (!this.getActive() && active) {
	            this.registerListeners_();
	        }
	        if (this.getActive() && !active) {
	            this.unregisterListeners_();
	        }
	        _super.prototype.setActive.call(this, active);
	    };
	    /**
	     * @inheritDoc
	     */
	    DragAndDrop.prototype.setMap = function (map) {
	        this.unregisterListeners_();
	        _super.prototype.setMap.call(this, map);
	        if (this.getActive()) {
	            this.registerListeners_();
	        }
	    };
	    /**
	     * @param {import("../format/Feature.js").default} format Format.
	     * @param {string} text Text.
	     * @param {import("../format/Feature.js").ReadOptions} options Read options.
	     * @private
	     * @return {Array<import("../Feature.js").FeatureLike>} Features.
	     */
	    DragAndDrop.prototype.tryReadFeatures_ = function (format, text, options) {
	        try {
	            return format.readFeatures(text, options);
	        } catch (e) {
	            return null;
	        }
	    };
	    /**
	     * @private
	     */
	    DragAndDrop.prototype.unregisterListeners_ = function () {
	        if (this.dropListenKeys_) {
	            this.dropListenKeys_.forEach(_events.unlistenByKey);
	            this.dropListenKeys_ = null;
	        }
	    };
	    return DragAndDrop;
	}(_Interaction2.default);
	/**
	 * @param {DragEvent} event Event.
	 * @this {DragAndDrop}
	 */
	function handleDrop(event) {
	    var files = event.dataTransfer.files;
	    for (var i = 0, ii = files.length; i < ii; ++i) {
	        var file = files.item(i);
	        var reader = new FileReader();
	        reader.addEventListener(_EventType2.default.LOAD, this.handleResult_.bind(this, file));
	        reader.readAsText(file);
	    }
	}
	/**
	 * @param {DragEvent} event Event.
	 */
	function handleStop(event) {
	    event.stopPropagation();
	    event.preventDefault();
	    event.dataTransfer.dropEffect = 'copy';
	}
	exports.default = DragAndDrop;
	//# sourceMappingURL=DragAndDrop.js.map

/***/ }),
/* 604 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	
	var _coordinate = __webpack_require__(84);
	
	var _easing = __webpack_require__(71);
	
	var _condition = __webpack_require__(40);
	
	var _functions = __webpack_require__(31);
	
	var _Pointer = __webpack_require__(41);
	
	var _Pointer2 = _interopRequireDefault(_Pointer);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var __extends = undefined && undefined.__extends || function () {
	    var _extendStatics = function extendStatics(d, b) {
	        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	            d.__proto__ = b;
	        } || function (d, b) {
	            for (var p in b) {
	                if (b.hasOwnProperty(p)) d[p] = b[p];
	            }
	        };
	        return _extendStatics(d, b);
	    };
	    return function (d, b) {
	        _extendStatics(d, b);
	        function __() {
	            this.constructor = d;
	        }
	        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	    };
	}();
	/**
	 * @module ol/interaction/DragPan
	 */
	
	/**
	 * @typedef {Object} Options
	 * @property {import("../events/condition.js").Condition} [condition] A function that takes an {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a boolean
	 * to indicate whether that event should be handled.
	 * Default is {@link module:ol/events/condition~noModifierKeys} and {@link module:ol/events/condition~primaryAction}.
	 * @property {import("../Kinetic.js").default} [kinetic] Kinetic inertia to apply to the pan.
	 */
	/**
	 * @classdesc
	 * Allows the user to pan the map by dragging the map.
	 * @api
	 */
	var DragPan = /** @class */function (_super) {
	    __extends(DragPan, _super);
	    /**
	     * @param {Options=} opt_options Options.
	     */
	    function DragPan(opt_options) {
	        var _this = _super.call(this, {
	            stopDown: _functions.FALSE
	        }) || this;
	        var options = opt_options ? opt_options : {};
	        /**
	         * @private
	         * @type {import("../Kinetic.js").default|undefined}
	         */
	        _this.kinetic_ = options.kinetic;
	        /**
	         * @type {import("../pixel.js").Pixel}
	         */
	        _this.lastCentroid = null;
	        /**
	         * @type {number}
	         */
	        _this.lastPointersCount_;
	        /**
	         * @type {boolean}
	         */
	        _this.panning_ = false;
	        /**
	         * @private
	         * @type {import("../events/condition.js").Condition}
	         */
	        _this.condition_ = options.condition ? options.condition : defaultCondition;
	        /**
	         * @private
	         * @type {boolean}
	         */
	        _this.noKinetic_ = false;
	        return _this;
	    }
	    /**
	     * @inheritDoc
	     */
	    DragPan.prototype.handleDragEvent = function (mapBrowserEvent) {
	        if (!this.panning_) {
	            this.panning_ = true;
	            this.getMap().getView().beginInteraction();
	        }
	        var targetPointers = this.targetPointers;
	        var centroid = (0, _Pointer.centroid)(targetPointers);
	        if (targetPointers.length == this.lastPointersCount_) {
	            if (this.kinetic_) {
	                this.kinetic_.update(centroid[0], centroid[1]);
	            }
	            if (this.lastCentroid) {
	                var delta = [this.lastCentroid[0] - centroid[0], centroid[1] - this.lastCentroid[1]];
	                var map = mapBrowserEvent.map;
	                var view = map.getView();
	                (0, _coordinate.scale)(delta, view.getResolution());
	                (0, _coordinate.rotate)(delta, view.getRotation());
	                view.adjustCenterInternal(delta);
	            }
	        } else if (this.kinetic_) {
	            // reset so we don't overestimate the kinetic energy after
	            // after one finger down, tiny drag, second finger down
	            this.kinetic_.begin();
	        }
	        this.lastCentroid = centroid;
	        this.lastPointersCount_ = targetPointers.length;
	    };
	    /**
	     * @inheritDoc
	     */
	    DragPan.prototype.handleUpEvent = function (mapBrowserEvent) {
	        var map = mapBrowserEvent.map;
	        var view = map.getView();
	        if (this.targetPointers.length === 0) {
	            if (!this.noKinetic_ && this.kinetic_ && this.kinetic_.end()) {
	                var distance = this.kinetic_.getDistance();
	                var angle = this.kinetic_.getAngle();
	                var center = view.getCenterInternal();
	                var centerpx = map.getPixelFromCoordinateInternal(center);
	                var dest = map.getCoordinateFromPixelInternal([centerpx[0] - distance * Math.cos(angle), centerpx[1] - distance * Math.sin(angle)]);
	                view.animateInternal({
	                    center: view.getConstrainedCenter(dest),
	                    duration: 500,
	                    easing: _easing.easeOut
	                });
	            }
	            if (this.panning_) {
	                this.panning_ = false;
	                view.endInteraction();
	            }
	            return false;
	        } else {
	            if (this.kinetic_) {
	                // reset so we don't overestimate the kinetic energy after
	                // after one finger up, tiny drag, second finger up
	                this.kinetic_.begin();
	            }
	            this.lastCentroid = null;
	            return true;
	        }
	    };
	    /**
	     * @inheritDoc
	     */
	    DragPan.prototype.handleDownEvent = function (mapBrowserEvent) {
	        if (this.targetPointers.length > 0 && this.condition_(mapBrowserEvent)) {
	            var map = mapBrowserEvent.map;
	            var view = map.getView();
	            this.lastCentroid = null;
	            // stop any current animation
	            if (view.getAnimating()) {
	                view.cancelAnimations();
	            }
	            if (this.kinetic_) {
	                this.kinetic_.begin();
	            }
	            // No kinetic as soon as more than one pointer on the screen is
	            // detected. This is to prevent nasty pans after pinch.
	            this.noKinetic_ = this.targetPointers.length > 1;
	            return true;
	        } else {
	            return false;
	        }
	    };
	    return DragPan;
	}(_Pointer2.default);
	/**
	 * @param {import("../MapBrowserPointerEvent.js").default} mapBrowserEvent Browser event.
	 * @return {boolean} Combined condition result.
	 */
	function defaultCondition(mapBrowserEvent) {
	    return (0, _condition.noModifierKeys)(mapBrowserEvent) && (0, _condition.primaryAction)(mapBrowserEvent);
	}
	exports.default = DragPan;
	//# sourceMappingURL=DragPan.js.map

/***/ }),
/* 605 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	
	var _rotationconstraint = __webpack_require__(177);
	
	var _condition = __webpack_require__(40);
	
	var _functions = __webpack_require__(31);
	
	var _Pointer = __webpack_require__(41);
	
	var _Pointer2 = _interopRequireDefault(_Pointer);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var __extends = undefined && undefined.__extends || function () {
	    var _extendStatics = function extendStatics(d, b) {
	        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	            d.__proto__ = b;
	        } || function (d, b) {
	            for (var p in b) {
	                if (b.hasOwnProperty(p)) d[p] = b[p];
	            }
	        };
	        return _extendStatics(d, b);
	    };
	    return function (d, b) {
	        _extendStatics(d, b);
	        function __() {
	            this.constructor = d;
	        }
	        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	    };
	}();
	/**
	 * @module ol/interaction/DragRotate
	 */
	
	/**
	 * @typedef {Object} Options
	 * @property {import("../events/condition.js").Condition} [condition] A function that takes an
	 * {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a boolean
	 * to indicate whether that event should be handled.
	 * Default is {@link module:ol/events/condition~altShiftKeysOnly}.
	 * @property {number} [duration=250] Animation duration in milliseconds.
	 */
	/**
	 * @classdesc
	 * Allows the user to rotate the map by clicking and dragging on the map,
	 * normally combined with an {@link module:ol/events/condition} that limits
	 * it to when the alt and shift keys are held down.
	 *
	 * This interaction is only supported for mouse devices.
	 * @api
	 */
	var DragRotate = /** @class */function (_super) {
	    __extends(DragRotate, _super);
	    /**
	     * @param {Options=} opt_options Options.
	     */
	    function DragRotate(opt_options) {
	        var _this = this;
	        var options = opt_options ? opt_options : {};
	        _this = _super.call(this, {
	            stopDown: _functions.FALSE
	        }) || this;
	        /**
	         * @private
	         * @type {import("../events/condition.js").Condition}
	         */
	        _this.condition_ = options.condition ? options.condition : _condition.altShiftKeysOnly;
	        /**
	         * @private
	         * @type {number|undefined}
	         */
	        _this.lastAngle_ = undefined;
	        /**
	         * @private
	         * @type {number}
	         */
	        _this.duration_ = options.duration !== undefined ? options.duration : 250;
	        return _this;
	    }
	    /**
	     * @inheritDoc
	     */
	    DragRotate.prototype.handleDragEvent = function (mapBrowserEvent) {
	        if (!(0, _condition.mouseOnly)(mapBrowserEvent)) {
	            return;
	        }
	        var map = mapBrowserEvent.map;
	        var view = map.getView();
	        if (view.getConstraints().rotation === _rotationconstraint.disable) {
	            return;
	        }
	        var size = map.getSize();
	        var offset = mapBrowserEvent.pixel;
	        var theta = Math.atan2(size[1] / 2 - offset[1], offset[0] - size[0] / 2);
	        if (this.lastAngle_ !== undefined) {
	            var delta = theta - this.lastAngle_;
	            view.adjustRotationInternal(-delta);
	        }
	        this.lastAngle_ = theta;
	    };
	    /**
	     * @inheritDoc
	     */
	    DragRotate.prototype.handleUpEvent = function (mapBrowserEvent) {
	        if (!(0, _condition.mouseOnly)(mapBrowserEvent)) {
	            return true;
	        }
	        var map = mapBrowserEvent.map;
	        var view = map.getView();
	        view.endInteraction(this.duration_);
	        return false;
	    };
	    /**
	     * @inheritDoc
	     */
	    DragRotate.prototype.handleDownEvent = function (mapBrowserEvent) {
	        if (!(0, _condition.mouseOnly)(mapBrowserEvent)) {
	            return false;
	        }
	        if ((0, _condition.mouseActionButton)(mapBrowserEvent) && this.condition_(mapBrowserEvent)) {
	            var map = mapBrowserEvent.map;
	            map.getView().beginInteraction();
	            this.lastAngle_ = undefined;
	            return true;
	        } else {
	            return false;
	        }
	    };
	    return DragRotate;
	}(_Pointer2.default);
	exports.default = DragRotate;
	//# sourceMappingURL=DragRotate.js.map

/***/ }),
/* 606 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	
	var _condition = __webpack_require__(40);
	
	var _Pointer = __webpack_require__(41);
	
	var _Pointer2 = _interopRequireDefault(_Pointer);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var __extends = undefined && undefined.__extends || function () {
	    var _extendStatics = function extendStatics(d, b) {
	        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	            d.__proto__ = b;
	        } || function (d, b) {
	            for (var p in b) {
	                if (b.hasOwnProperty(p)) d[p] = b[p];
	            }
	        };
	        return _extendStatics(d, b);
	    };
	    return function (d, b) {
	        _extendStatics(d, b);
	        function __() {
	            this.constructor = d;
	        }
	        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	    };
	}();
	/**
	 * @module ol/interaction/DragRotateAndZoom
	 */
	
	/**
	 * @typedef {Object} Options
	 * @property {import("../events/condition.js").Condition} [condition] A function that
	 * takes an {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a
	 * boolean to indicate whether that event should be handled.
	 * Default is {@link module:ol/events/condition~shiftKeyOnly}.
	 * @property {number} [duration=400] Animation duration in milliseconds.
	 */
	/**
	 * @classdesc
	 * Allows the user to zoom and rotate the map by clicking and dragging
	 * on the map.  By default, this interaction is limited to when the shift
	 * key is held down.
	 *
	 * This interaction is only supported for mouse devices.
	 *
	 * And this interaction is not included in the default interactions.
	 * @api
	 */
	var DragRotateAndZoom = /** @class */function (_super) {
	    __extends(DragRotateAndZoom, _super);
	    /**
	     * @param {Options=} opt_options Options.
	     */
	    function DragRotateAndZoom(opt_options) {
	        var _this = this;
	        var options = opt_options ? opt_options : {};
	        _this = _super.call(this, /** @type {import("./Pointer.js").Options} */options) || this;
	        /**
	         * @private
	         * @type {import("../events/condition.js").Condition}
	         */
	        _this.condition_ = options.condition ? options.condition : _condition.shiftKeyOnly;
	        /**
	         * @private
	         * @type {number|undefined}
	         */
	        _this.lastAngle_ = undefined;
	        /**
	         * @private
	         * @type {number|undefined}
	         */
	        _this.lastMagnitude_ = undefined;
	        /**
	         * @private
	         * @type {number}
	         */
	        _this.lastScaleDelta_ = 0;
	        /**
	         * @private
	         * @type {number}
	         */
	        _this.duration_ = options.duration !== undefined ? options.duration : 400;
	        return _this;
	    }
	    /**
	     * @inheritDoc
	     */
	    DragRotateAndZoom.prototype.handleDragEvent = function (mapBrowserEvent) {
	        if (!(0, _condition.mouseOnly)(mapBrowserEvent)) {
	            return;
	        }
	        var map = mapBrowserEvent.map;
	        var size = map.getSize();
	        var offset = mapBrowserEvent.pixel;
	        var deltaX = offset[0] - size[0] / 2;
	        var deltaY = size[1] / 2 - offset[1];
	        var theta = Math.atan2(deltaY, deltaX);
	        var magnitude = Math.sqrt(deltaX * deltaX + deltaY * deltaY);
	        var view = map.getView();
	        if (this.lastAngle_ !== undefined) {
	            var angleDelta = this.lastAngle_ - theta;
	            view.adjustRotationInternal(angleDelta);
	        }
	        this.lastAngle_ = theta;
	        if (this.lastMagnitude_ !== undefined) {
	            view.adjustResolutionInternal(this.lastMagnitude_ / magnitude);
	        }
	        if (this.lastMagnitude_ !== undefined) {
	            this.lastScaleDelta_ = this.lastMagnitude_ / magnitude;
	        }
	        this.lastMagnitude_ = magnitude;
	    };
	    /**
	     * @inheritDoc
	     */
	    DragRotateAndZoom.prototype.handleUpEvent = function (mapBrowserEvent) {
	        if (!(0, _condition.mouseOnly)(mapBrowserEvent)) {
	            return true;
	        }
	        var map = mapBrowserEvent.map;
	        var view = map.getView();
	        var direction = this.lastScaleDelta_ > 1 ? 1 : -1;
	        view.endInteraction(this.duration_, direction);
	        this.lastScaleDelta_ = 0;
	        return false;
	    };
	    /**
	     * @inheritDoc
	     */
	    DragRotateAndZoom.prototype.handleDownEvent = function (mapBrowserEvent) {
	        if (!(0, _condition.mouseOnly)(mapBrowserEvent)) {
	            return false;
	        }
	        if (this.condition_(mapBrowserEvent)) {
	            mapBrowserEvent.map.getView().beginInteraction();
	            this.lastAngle_ = undefined;
	            this.lastMagnitude_ = undefined;
	            return true;
	        } else {
	            return false;
	        }
	    };
	    return DragRotateAndZoom;
	}(_Pointer2.default);
	exports.default = DragRotateAndZoom;
	//# sourceMappingURL=DragRotateAndZoom.js.map

/***/ }),
/* 607 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	
	var _easing = __webpack_require__(71);
	
	var _condition = __webpack_require__(40);
	
	var _extent = __webpack_require__(4);
	
	var _DragBox = __webpack_require__(282);
	
	var _DragBox2 = _interopRequireDefault(_DragBox);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var __extends = undefined && undefined.__extends || function () {
	    var _extendStatics = function extendStatics(d, b) {
	        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	            d.__proto__ = b;
	        } || function (d, b) {
	            for (var p in b) {
	                if (b.hasOwnProperty(p)) d[p] = b[p];
	            }
	        };
	        return _extendStatics(d, b);
	    };
	    return function (d, b) {
	        _extendStatics(d, b);
	        function __() {
	            this.constructor = d;
	        }
	        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	    };
	}();
	/**
	 * @module ol/interaction/DragZoom
	 */
	
	/**
	 * @typedef {Object} Options
	 * @property {string} [className='ol-dragzoom'] CSS class name for styling the
	 * box.
	 * @property {import("../events/condition.js").Condition} [condition] A function that
	 * takes an {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a
	 * boolean to indicate whether that event should be handled.
	 * Default is {@link module:ol/events/condition~shiftKeyOnly}.
	 * @property {number} [duration=200] Animation duration in milliseconds.
	 * @property {boolean} [out=false] Use interaction for zooming out.
	 * @property {number} [minArea=64] The minimum area of the box in pixel, this value is used by the parent default
	 * `boxEndCondition` function.
	 */
	/**
	 * @classdesc
	 * Allows the user to zoom the map by clicking and dragging on the map,
	 * normally combined with an {@link module:ol/events/condition} that limits
	 * it to when a key, shift by default, is held down.
	 *
	 * To change the style of the box, use CSS and the `.ol-dragzoom` selector, or
	 * your custom one configured with `className`.
	 * @api
	 */
	var DragZoom = /** @class */function (_super) {
	    __extends(DragZoom, _super);
	    /**
	     * @param {Options=} opt_options Options.
	     */
	    function DragZoom(opt_options) {
	        var _this = this;
	        var options = opt_options ? opt_options : {};
	        var condition = options.condition ? options.condition : _condition.shiftKeyOnly;
	        _this = _super.call(this, {
	            condition: condition,
	            className: options.className || 'ol-dragzoom',
	            minArea: options.minArea,
	            onBoxEnd: onBoxEnd
	        }) || this;
	        /**
	         * @private
	         * @type {number}
	         */
	        _this.duration_ = options.duration !== undefined ? options.duration : 200;
	        /**
	         * @private
	         * @type {boolean}
	         */
	        _this.out_ = options.out !== undefined ? options.out : false;
	        return _this;
	    }
	    return DragZoom;
	}(_DragBox2.default);
	/**
	 * @this {DragZoom}
	 */
	function onBoxEnd() {
	    var map = this.getMap();
	    var view = /** @type {!import("../View.js").default} */map.getView();
	    var size = /** @type {!import("../size.js").Size} */map.getSize();
	    var extent = this.getGeometry().getExtent();
	    if (this.out_) {
	        var mapExtent = view.calculateExtentInternal(size);
	        var boxPixelExtent = (0, _extent.createOrUpdateFromCoordinates)([map.getPixelFromCoordinateInternal((0, _extent.getBottomLeft)(extent)), map.getPixelFromCoordinateInternal((0, _extent.getTopRight)(extent))]);
	        var factor = view.getResolutionForExtentInternal(boxPixelExtent, size);
	        (0, _extent.scaleFromCenter)(mapExtent, 1 / factor);
	        extent = mapExtent;
	    }
	    var resolution = view.getConstrainedResolution(view.getResolutionForExtentInternal(extent, size));
	    var center = view.getConstrainedCenter((0, _extent.getCenter)(extent), resolution);
	    view.animateInternal({
	        resolution: resolution,
	        center: center,
	        duration: this.duration_,
	        easing: _easing.easeOut
	    });
	}
	exports.default = DragZoom;
	//# sourceMappingURL=DragZoom.js.map

/***/ }),
/* 608 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	
	var _Feature = __webpack_require__(123);
	
	var _Feature2 = _interopRequireDefault(_Feature);
	
	var _MapBrowserEventType = __webpack_require__(69);
	
	var _MapBrowserEventType2 = _interopRequireDefault(_MapBrowserEventType);
	
	var _coordinate = __webpack_require__(84);
	
	var _Event = __webpack_require__(35);
	
	var _Event2 = _interopRequireDefault(_Event);
	
	var _extent = __webpack_require__(4);
	
	var _GeometryType = __webpack_require__(22);
	
	var _GeometryType2 = _interopRequireDefault(_GeometryType);
	
	var _Point = __webpack_require__(85);
	
	var _Point2 = _interopRequireDefault(_Point);
	
	var _Polygon = __webpack_require__(57);
	
	var _Pointer = __webpack_require__(41);
	
	var _Pointer2 = _interopRequireDefault(_Pointer);
	
	var _Vector = __webpack_require__(147);
	
	var _Vector2 = _interopRequireDefault(_Vector);
	
	var _Vector3 = __webpack_require__(108);
	
	var _Vector4 = _interopRequireDefault(_Vector3);
	
	var _Style = __webpack_require__(87);
	
	var _proj = __webpack_require__(16);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var __extends = undefined && undefined.__extends || function () {
	    var _extendStatics = function extendStatics(d, b) {
	        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	            d.__proto__ = b;
	        } || function (d, b) {
	            for (var p in b) {
	                if (b.hasOwnProperty(p)) d[p] = b[p];
	            }
	        };
	        return _extendStatics(d, b);
	    };
	    return function (d, b) {
	        _extendStatics(d, b);
	        function __() {
	            this.constructor = d;
	        }
	        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	    };
	}();
	/**
	 * @module ol/interaction/Extent
	 */
	
	/**
	 * @typedef {Object} Options
	 * @property {import("../extent.js").Extent} [extent] Initial extent. Defaults to no
	 * initial extent.
	 * @property {import("../style/Style.js").StyleLike} [boxStyle]
	 * Style for the drawn extent box. Defaults to
	 * {@link module:ol/style/Style~createEditing()['Polygon']}
	 * @property {number} [pixelTolerance=10] Pixel tolerance for considering the
	 * pointer close enough to a segment or vertex for editing.
	 * @property {import("../style/Style.js").StyleLike} [pointerStyle]
	 * Style for the cursor used to draw the extent. Defaults to
	 * {@link module:ol/style/Style~createEditing()['Point']}
	 * @property {boolean} [wrapX=false] Wrap the drawn extent across multiple maps
	 * in the X direction? Only affects visuals, not functionality.
	 */
	/**
	 * @enum {string}
	 */
	var ExtentEventType = {
	    /**
	     * Triggered after the extent is changed
	     * @event ExtentEvent#extentchanged
	     * @api
	     */
	    EXTENTCHANGED: 'extentchanged'
	};
	/**
	 * @classdesc
	 * Events emitted by {@link module:ol/interaction/Extent~Extent} instances are
	 * instances of this type.
	 */
	var ExtentEvent = /** @class */function (_super) {
	    __extends(ExtentEvent, _super);
	    /**
	     * @param {import("../extent.js").Extent} extent the new extent
	     */
	    function ExtentEvent(extent) {
	        var _this = _super.call(this, ExtentEventType.EXTENTCHANGED) || this;
	        /**
	         * The current extent.
	         * @type {import("../extent.js").Extent}
	         * @api
	         */
	        _this.extent = extent;
	        return _this;
	    }
	    return ExtentEvent;
	}(_Event2.default);
	/**
	 * @classdesc
	 * Allows the user to draw a vector box by clicking and dragging on the map.
	 * Once drawn, the vector box can be modified by dragging its vertices or edges.
	 * This interaction is only supported for mouse devices.
	 *
	 * @fires ExtentEvent
	 * @api
	 */
	var Extent = /** @class */function (_super) {
	    __extends(Extent, _super);
	    /**
	     * @param {Options=} opt_options Options.
	     */
	    function Extent(opt_options) {
	        var _this = this;
	        var options = opt_options || {};
	        _this = _super.call(this, /** @type {import("./Pointer.js").Options} */options) || this;
	        /**
	         * Extent of the drawn box
	         * @type {import("../extent.js").Extent}
	         * @private
	         */
	        _this.extent_ = null;
	        /**
	         * Handler for pointer move events
	         * @type {function (import("../coordinate.js").Coordinate): import("../extent.js").Extent|null}
	         * @private
	         */
	        _this.pointerHandler_ = null;
	        /**
	         * Pixel threshold to snap to extent
	         * @type {number}
	         * @private
	         */
	        _this.pixelTolerance_ = options.pixelTolerance !== undefined ? options.pixelTolerance : 10;
	        /**
	         * Is the pointer snapped to an extent vertex
	         * @type {boolean}
	         * @private
	         */
	        _this.snappedToVertex_ = false;
	        /**
	         * Feature for displaying the visible extent
	         * @type {Feature}
	         * @private
	         */
	        _this.extentFeature_ = null;
	        /**
	         * Feature for displaying the visible pointer
	         * @type {Feature<Point>}
	         * @private
	         */
	        _this.vertexFeature_ = null;
	        if (!opt_options) {
	            opt_options = {};
	        }
	        /**
	         * Layer for the extentFeature
	         * @type {VectorLayer}
	         * @private
	         */
	        _this.extentOverlay_ = new _Vector2.default({
	            source: new _Vector4.default({
	                useSpatialIndex: false,
	                wrapX: !!opt_options.wrapX
	            }),
	            style: opt_options.boxStyle ? opt_options.boxStyle : getDefaultExtentStyleFunction(),
	            updateWhileAnimating: true,
	            updateWhileInteracting: true
	        });
	        /**
	         * Layer for the vertexFeature
	         * @type {VectorLayer}
	         * @private
	         */
	        _this.vertexOverlay_ = new _Vector2.default({
	            source: new _Vector4.default({
	                useSpatialIndex: false,
	                wrapX: !!opt_options.wrapX
	            }),
	            style: opt_options.pointerStyle ? opt_options.pointerStyle : getDefaultPointerStyleFunction(),
	            updateWhileAnimating: true,
	            updateWhileInteracting: true
	        });
	        if (opt_options.extent) {
	            _this.setExtent(opt_options.extent);
	        }
	        return _this;
	    }
	    /**
	     * @param {import("../pixel.js").Pixel} pixel cursor location
	     * @param {import("../PluggableMap.js").default} map map
	     * @returns {import("../coordinate.js").Coordinate|null} snapped vertex on extent
	     * @private
	     */
	    Extent.prototype.snapToVertex_ = function (pixel, map) {
	        var pixelCoordinate = map.getCoordinateFromPixelInternal(pixel);
	        var sortByDistance = function sortByDistance(a, b) {
	            return (0, _coordinate.squaredDistanceToSegment)(pixelCoordinate, a) - (0, _coordinate.squaredDistanceToSegment)(pixelCoordinate, b);
	        };
	        var extent = this.getExtentInternal();
	        if (extent) {
	            //convert extents to line segments and find the segment closest to pixelCoordinate
	            var segments = getSegments(extent);
	            segments.sort(sortByDistance);
	            var closestSegment = segments[0];
	            var vertex = (0, _coordinate.closestOnSegment)(pixelCoordinate, closestSegment);
	            var vertexPixel = map.getPixelFromCoordinateInternal(vertex);
	            //if the distance is within tolerance, snap to the segment
	            if ((0, _coordinate.distance)(pixel, vertexPixel) <= this.pixelTolerance_) {
	                //test if we should further snap to a vertex
	                var pixel1 = map.getPixelFromCoordinateInternal(closestSegment[0]);
	                var pixel2 = map.getPixelFromCoordinateInternal(closestSegment[1]);
	                var squaredDist1 = (0, _coordinate.squaredDistance)(vertexPixel, pixel1);
	                var squaredDist2 = (0, _coordinate.squaredDistance)(vertexPixel, pixel2);
	                var dist = Math.sqrt(Math.min(squaredDist1, squaredDist2));
	                this.snappedToVertex_ = dist <= this.pixelTolerance_;
	                if (this.snappedToVertex_) {
	                    vertex = squaredDist1 > squaredDist2 ? closestSegment[1] : closestSegment[0];
	                }
	                return vertex;
	            }
	        }
	        return null;
	    };
	    /**
	     * @param {import("../MapBrowserEvent.js").default} mapBrowserEvent pointer move event
	     * @private
	     */
	    Extent.prototype.handlePointerMove_ = function (mapBrowserEvent) {
	        var pixel = mapBrowserEvent.pixel;
	        var map = mapBrowserEvent.map;
	        var vertex = this.snapToVertex_(pixel, map);
	        if (!vertex) {
	            vertex = map.getCoordinateFromPixelInternal(pixel);
	        }
	        this.createOrUpdatePointerFeature_(vertex);
	    };
	    /**
	     * @param {import("../extent.js").Extent} extent extent
	     * @returns {Feature} extent as featrue
	     * @private
	     */
	    Extent.prototype.createOrUpdateExtentFeature_ = function (extent) {
	        var extentFeature = this.extentFeature_;
	        if (!extentFeature) {
	            if (!extent) {
	                extentFeature = new _Feature2.default({});
	            } else {
	                extentFeature = new _Feature2.default((0, _Polygon.fromExtent)(extent));
	            }
	            this.extentFeature_ = extentFeature;
	            this.extentOverlay_.getSource().addFeature(extentFeature);
	        } else {
	            if (!extent) {
	                extentFeature.setGeometry(undefined);
	            } else {
	                extentFeature.setGeometry((0, _Polygon.fromExtent)(extent));
	            }
	        }
	        return extentFeature;
	    };
	    /**
	     * @param {import("../coordinate.js").Coordinate} vertex location of feature
	     * @returns {Feature} vertex as feature
	     * @private
	     */
	    Extent.prototype.createOrUpdatePointerFeature_ = function (vertex) {
	        var vertexFeature = this.vertexFeature_;
	        if (!vertexFeature) {
	            vertexFeature = new _Feature2.default(new _Point2.default(vertex));
	            this.vertexFeature_ = vertexFeature;
	            this.vertexOverlay_.getSource().addFeature(vertexFeature);
	        } else {
	            var geometry = vertexFeature.getGeometry();
	            geometry.setCoordinates(vertex);
	        }
	        return vertexFeature;
	    };
	    /**
	     * @inheritDoc
	     */
	    Extent.prototype.handleEvent = function (mapBrowserEvent) {
	        if (! /** @type {import("../MapBrowserPointerEvent.js").default} */mapBrowserEvent.pointerEvent) {
	            return true;
	        }
	        //display pointer (if not dragging)
	        if (mapBrowserEvent.type == _MapBrowserEventType2.default.POINTERMOVE && !this.handlingDownUpSequence) {
	            this.handlePointerMove_(mapBrowserEvent);
	        }
	        //call pointer to determine up/down/drag
	        _super.prototype.handleEvent.call(this, mapBrowserEvent);
	        //return false to stop propagation
	        return false;
	    };
	    /**
	     * @inheritDoc
	     */
	    Extent.prototype.handleDownEvent = function (mapBrowserEvent) {
	        var pixel = mapBrowserEvent.pixel;
	        var map = mapBrowserEvent.map;
	        var extent = this.getExtentInternal();
	        var vertex = this.snapToVertex_(pixel, map);
	        //find the extent corner opposite the passed corner
	        var getOpposingPoint = function getOpposingPoint(point) {
	            var x_ = null;
	            var y_ = null;
	            if (point[0] == extent[0]) {
	                x_ = extent[2];
	            } else if (point[0] == extent[2]) {
	                x_ = extent[0];
	            }
	            if (point[1] == extent[1]) {
	                y_ = extent[3];
	            } else if (point[1] == extent[3]) {
	                y_ = extent[1];
	            }
	            if (x_ !== null && y_ !== null) {
	                return [x_, y_];
	            }
	            return null;
	        };
	        if (vertex && extent) {
	            var x = vertex[0] == extent[0] || vertex[0] == extent[2] ? vertex[0] : null;
	            var y = vertex[1] == extent[1] || vertex[1] == extent[3] ? vertex[1] : null;
	            //snap to point
	            if (x !== null && y !== null) {
	                this.pointerHandler_ = getPointHandler(getOpposingPoint(vertex));
	                //snap to edge
	            } else if (x !== null) {
	                this.pointerHandler_ = getEdgeHandler(getOpposingPoint([x, extent[1]]), getOpposingPoint([x, extent[3]]));
	            } else if (y !== null) {
	                this.pointerHandler_ = getEdgeHandler(getOpposingPoint([extent[0], y]), getOpposingPoint([extent[2], y]));
	            }
	            //no snap - new bbox
	        } else {
	            vertex = map.getCoordinateFromPixelInternal(pixel);
	            this.setExtent([vertex[0], vertex[1], vertex[0], vertex[1]]);
	            this.pointerHandler_ = getPointHandler(vertex);
	        }
	        return true; //event handled; start downup sequence
	    };
	    /**
	     * @inheritDoc
	     */
	    Extent.prototype.handleDragEvent = function (mapBrowserEvent) {
	        if (this.pointerHandler_) {
	            var pixelCoordinate = mapBrowserEvent.coordinate;
	            this.setExtent(this.pointerHandler_(pixelCoordinate));
	            this.createOrUpdatePointerFeature_(pixelCoordinate);
	        }
	        return true;
	    };
	    /**
	     * @inheritDoc
	     */
	    Extent.prototype.handleUpEvent = function (mapBrowserEvent) {
	        this.pointerHandler_ = null;
	        //If bbox is zero area, set to null;
	        var extent = this.getExtentInternal();
	        if (!extent || (0, _extent.getArea)(extent) === 0) {
	            this.setExtent(null);
	        }
	        return false; //Stop handling downup sequence
	    };
	    /**
	     * @inheritDoc
	     */
	    Extent.prototype.setMap = function (map) {
	        this.extentOverlay_.setMap(map);
	        this.vertexOverlay_.setMap(map);
	        _super.prototype.setMap.call(this, map);
	    };
	    /**
	     * Returns the current drawn extent in the view projection (or user projection if set)
	     *
	     * @return {import("../extent.js").Extent} Drawn extent in the view projection.
	     * @api
	     */
	    Extent.prototype.getExtent = function () {
	        return (0, _proj.toUserExtent)(this.getExtentInternal(), this.getMap().getView().getProjection());
	    };
	    /**
	     * Returns the current drawn extent in the view projection
	     *
	     * @return {import("../extent.js").Extent} Drawn extent in the view projection.
	     * @api
	     */
	    Extent.prototype.getExtentInternal = function () {
	        return this.extent_;
	    };
	    /**
	     * Manually sets the drawn extent, using the view projection.
	     *
	     * @param {import("../extent.js").Extent} extent Extent
	     * @api
	     */
	    Extent.prototype.setExtent = function (extent) {
	        //Null extent means no bbox
	        this.extent_ = extent ? extent : null;
	        this.createOrUpdateExtentFeature_(extent);
	        this.dispatchEvent(new ExtentEvent(this.extent_));
	    };
	    return Extent;
	}(_Pointer2.default);
	/**
	 * Returns the default style for the drawn bbox
	 *
	 * @return {import("../style/Style.js").StyleFunction} Default Extent style
	 */
	function getDefaultExtentStyleFunction() {
	    var style = (0, _Style.createEditingStyle)();
	    return function (feature, resolution) {
	        return style[_GeometryType2.default.POLYGON];
	    };
	}
	/**
	 * Returns the default style for the pointer
	 *
	 * @return {import("../style/Style.js").StyleFunction} Default pointer style
	 */
	function getDefaultPointerStyleFunction() {
	    var style = (0, _Style.createEditingStyle)();
	    return function (feature, resolution) {
	        return style[_GeometryType2.default.POINT];
	    };
	}
	/**
	 * @param {import("../coordinate.js").Coordinate} fixedPoint corner that will be unchanged in the new extent
	 * @returns {function (import("../coordinate.js").Coordinate): import("../extent.js").Extent} event handler
	 */
	function getPointHandler(fixedPoint) {
	    return function (point) {
	        return (0, _extent.boundingExtent)([fixedPoint, point]);
	    };
	}
	/**
	 * @param {import("../coordinate.js").Coordinate} fixedP1 first corner that will be unchanged in the new extent
	 * @param {import("../coordinate.js").Coordinate} fixedP2 second corner that will be unchanged in the new extent
	 * @returns {function (import("../coordinate.js").Coordinate): import("../extent.js").Extent|null} event handler
	 */
	function getEdgeHandler(fixedP1, fixedP2) {
	    if (fixedP1[0] == fixedP2[0]) {
	        return function (point) {
	            return (0, _extent.boundingExtent)([fixedP1, [point[0], fixedP2[1]]]);
	        };
	    } else if (fixedP1[1] == fixedP2[1]) {
	        return function (point) {
	            return (0, _extent.boundingExtent)([fixedP1, [fixedP2[0], point[1]]]);
	        };
	    } else {
	        return null;
	    }
	}
	/**
	 * @param {import("../extent.js").Extent} extent extent
	 * @returns {Array<Array<import("../coordinate.js").Coordinate>>} extent line segments
	 */
	function getSegments(extent) {
	    return [[[extent[0], extent[1]], [extent[0], extent[3]]], [[extent[0], extent[3]], [extent[2], extent[3]]], [[extent[2], extent[3]], [extent[2], extent[1]]], [[extent[2], extent[1]], [extent[0], extent[1]]]];
	}
	exports.default = Extent;
	//# sourceMappingURL=Extent.js.map

/***/ }),
/* 609 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	
	var _coordinate = __webpack_require__(84);
	
	var _EventType = __webpack_require__(10);
	
	var _EventType2 = _interopRequireDefault(_EventType);
	
	var _KeyCode = __webpack_require__(589);
	
	var _KeyCode2 = _interopRequireDefault(_KeyCode);
	
	var _condition = __webpack_require__(40);
	
	var _Interaction = __webpack_require__(73);
	
	var _Interaction2 = _interopRequireDefault(_Interaction);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var __extends = undefined && undefined.__extends || function () {
	    var _extendStatics = function extendStatics(d, b) {
	        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	            d.__proto__ = b;
	        } || function (d, b) {
	            for (var p in b) {
	                if (b.hasOwnProperty(p)) d[p] = b[p];
	            }
	        };
	        return _extendStatics(d, b);
	    };
	    return function (d, b) {
	        _extendStatics(d, b);
	        function __() {
	            this.constructor = d;
	        }
	        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	    };
	}();
	/**
	 * @module ol/interaction/KeyboardPan
	 */
	
	/**
	 * @typedef {Object} Options
	 * @property {import("../events/condition.js").Condition} [condition] A function that
	 * takes an {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a
	 * boolean to indicate whether that event should be handled. Default is
	 * {@link module:ol/events/condition~noModifierKeys} and
	 * {@link module:ol/events/condition~targetNotEditable}.
	 * @property {number} [duration=100] Animation duration in milliseconds.
	 * @property {number} [pixelDelta=128] The amount of pixels to pan on each key
	 * press.
	 */
	/**
	 * @classdesc
	 * Allows the user to pan the map using keyboard arrows.
	 * Note that, although this interaction is by default included in maps,
	 * the keys can only be used when browser focus is on the element to which
	 * the keyboard events are attached. By default, this is the map div,
	 * though you can change this with the `keyboardEventTarget` in
	 * {@link module:ol/Map~Map}. `document` never loses focus but, for any other
	 * element, focus will have to be on, and returned to, this element if the keys
	 * are to function.
	 * See also {@link module:ol/interaction/KeyboardZoom~KeyboardZoom}.
	 * @api
	 */
	var KeyboardPan = /** @class */function (_super) {
	    __extends(KeyboardPan, _super);
	    /**
	     * @param {Options=} opt_options Options.
	     */
	    function KeyboardPan(opt_options) {
	        var _this = _super.call(this, {
	            handleEvent: handleEvent
	        }) || this;
	        var options = opt_options || {};
	        /**
	         * @private
	         * @param {import("../MapBrowserEvent.js").default} mapBrowserEvent Browser event.
	         * @return {boolean} Combined condition result.
	         */
	        _this.defaultCondition_ = function (mapBrowserEvent) {
	            return (0, _condition.noModifierKeys)(mapBrowserEvent) && (0, _condition.targetNotEditable)(mapBrowserEvent);
	        };
	        /**
	         * @private
	         * @type {import("../events/condition.js").Condition}
	         */
	        _this.condition_ = options.condition !== undefined ? options.condition : _this.defaultCondition_;
	        /**
	         * @private
	         * @type {number}
	         */
	        _this.duration_ = options.duration !== undefined ? options.duration : 100;
	        /**
	         * @private
	         * @type {number}
	         */
	        _this.pixelDelta_ = options.pixelDelta !== undefined ? options.pixelDelta : 128;
	        return _this;
	    }
	    return KeyboardPan;
	}(_Interaction2.default);
	/**
	 * Handles the {@link module:ol/MapBrowserEvent map browser event} if it was a
	 * `KeyEvent`, and decides the direction to pan to (if an arrow key was
	 * pressed).
	 * @param {import("../MapBrowserEvent.js").default} mapBrowserEvent Map browser event.
	 * @return {boolean} `false` to stop event propagation.
	 * @this {KeyboardPan}
	 */
	function handleEvent(mapBrowserEvent) {
	    var stopEvent = false;
	    if (mapBrowserEvent.type == _EventType2.default.KEYDOWN) {
	        var keyEvent = /** @type {KeyboardEvent} */mapBrowserEvent.originalEvent;
	        var keyCode = keyEvent.keyCode;
	        if (this.condition_(mapBrowserEvent) && (keyCode == _KeyCode2.default.DOWN || keyCode == _KeyCode2.default.LEFT || keyCode == _KeyCode2.default.RIGHT || keyCode == _KeyCode2.default.UP)) {
	            var map = mapBrowserEvent.map;
	            var view = map.getView();
	            var mapUnitsDelta = view.getResolution() * this.pixelDelta_;
	            var deltaX = 0,
	                deltaY = 0;
	            if (keyCode == _KeyCode2.default.DOWN) {
	                deltaY = -mapUnitsDelta;
	            } else if (keyCode == _KeyCode2.default.LEFT) {
	                deltaX = -mapUnitsDelta;
	            } else if (keyCode == _KeyCode2.default.RIGHT) {
	                deltaX = mapUnitsDelta;
	            } else {
	                deltaY = mapUnitsDelta;
	            }
	            var delta = [deltaX, deltaY];
	            (0, _coordinate.rotate)(delta, view.getRotation());
	            (0, _Interaction.pan)(view, delta, this.duration_);
	            mapBrowserEvent.preventDefault();
	            stopEvent = true;
	        }
	    }
	    return !stopEvent;
	}
	exports.default = KeyboardPan;
	//# sourceMappingURL=KeyboardPan.js.map

/***/ }),
/* 610 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	
	var _EventType = __webpack_require__(10);
	
	var _EventType2 = _interopRequireDefault(_EventType);
	
	var _condition = __webpack_require__(40);
	
	var _Interaction = __webpack_require__(73);
	
	var _Interaction2 = _interopRequireDefault(_Interaction);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var __extends = undefined && undefined.__extends || function () {
	    var _extendStatics = function extendStatics(d, b) {
	        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	            d.__proto__ = b;
	        } || function (d, b) {
	            for (var p in b) {
	                if (b.hasOwnProperty(p)) d[p] = b[p];
	            }
	        };
	        return _extendStatics(d, b);
	    };
	    return function (d, b) {
	        _extendStatics(d, b);
	        function __() {
	            this.constructor = d;
	        }
	        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	    };
	}();
	/**
	 * @module ol/interaction/KeyboardZoom
	 */
	
	/**
	 * @typedef {Object} Options
	 * @property {number} [duration=100] Animation duration in milliseconds.
	 * @property {import("../events/condition.js").Condition} [condition] A function that
	 * takes an {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a
	 * boolean to indicate whether that event should be handled. Default is
	 * {@link module:ol/events/condition~targetNotEditable}.
	 * @property {number} [delta=1] The zoom level delta on each key press.
	 */
	/**
	 * @classdesc
	 * Allows the user to zoom the map using keyboard + and -.
	 * Note that, although this interaction is by default included in maps,
	 * the keys can only be used when browser focus is on the element to which
	 * the keyboard events are attached. By default, this is the map div,
	 * though you can change this with the `keyboardEventTarget` in
	 * {@link module:ol/Map~Map}. `document` never loses focus but, for any other
	 * element, focus will have to be on, and returned to, this element if the keys
	 * are to function.
	 * See also {@link module:ol/interaction/KeyboardPan~KeyboardPan}.
	 * @api
	 */
	var KeyboardZoom = /** @class */function (_super) {
	    __extends(KeyboardZoom, _super);
	    /**
	     * @param {Options=} opt_options Options.
	     */
	    function KeyboardZoom(opt_options) {
	        var _this = _super.call(this, {
	            handleEvent: handleEvent
	        }) || this;
	        var options = opt_options ? opt_options : {};
	        /**
	         * @private
	         * @type {import("../events/condition.js").Condition}
	         */
	        _this.condition_ = options.condition ? options.condition : _condition.targetNotEditable;
	        /**
	         * @private
	         * @type {number}
	         */
	        _this.delta_ = options.delta ? options.delta : 1;
	        /**
	         * @private
	         * @type {number}
	         */
	        _this.duration_ = options.duration !== undefined ? options.duration : 100;
	        return _this;
	    }
	    return KeyboardZoom;
	}(_Interaction2.default);
	/**
	 * Handles the {@link module:ol/MapBrowserEvent map browser event} if it was a
	 * `KeyEvent`, and decides whether to zoom in or out (depending on whether the
	 * key pressed was '+' or '-').
	 * @param {import("../MapBrowserEvent.js").default} mapBrowserEvent Map browser event.
	 * @return {boolean} `false` to stop event propagation.
	 * @this {KeyboardZoom}
	 */
	function handleEvent(mapBrowserEvent) {
	    var stopEvent = false;
	    if (mapBrowserEvent.type == _EventType2.default.KEYDOWN || mapBrowserEvent.type == _EventType2.default.KEYPRESS) {
	        var keyEvent = /** @type {KeyboardEvent} */mapBrowserEvent.originalEvent;
	        var charCode = keyEvent.charCode;
	        if (this.condition_(mapBrowserEvent) && (charCode == '+'.charCodeAt(0) || charCode == '-'.charCodeAt(0))) {
	            var map = mapBrowserEvent.map;
	            var delta = charCode == '+'.charCodeAt(0) ? this.delta_ : -this.delta_;
	            var view = map.getView();
	            (0, _Interaction.zoomByDelta)(view, delta, undefined, this.duration_);
	            mapBrowserEvent.preventDefault();
	            stopEvent = true;
	        }
	    }
	    return !stopEvent;
	}
	exports.default = KeyboardZoom;
	//# sourceMappingURL=KeyboardZoom.js.map

/***/ }),
/* 611 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	exports.ModifyEvent = undefined;
	
	var _util = __webpack_require__(14);
	
	var _Collection = __webpack_require__(63);
	
	var _Collection2 = _interopRequireDefault(_Collection);
	
	var _CollectionEventType = __webpack_require__(83);
	
	var _CollectionEventType2 = _interopRequireDefault(_CollectionEventType);
	
	var _Feature = __webpack_require__(123);
	
	var _Feature2 = _interopRequireDefault(_Feature);
	
	var _MapBrowserEventType = __webpack_require__(69);
	
	var _MapBrowserEventType2 = _interopRequireDefault(_MapBrowserEventType);
	
	var _array = __webpack_require__(18);
	
	var _coordinate = __webpack_require__(84);
	
	var _Event = __webpack_require__(35);
	
	var _Event2 = _interopRequireDefault(_Event);
	
	var _EventType = __webpack_require__(10);
	
	var _EventType2 = _interopRequireDefault(_EventType);
	
	var _condition = __webpack_require__(40);
	
	var _extent = __webpack_require__(4);
	
	var _GeometryType = __webpack_require__(22);
	
	var _GeometryType2 = _interopRequireDefault(_GeometryType);
	
	var _Point = __webpack_require__(85);
	
	var _Point2 = _interopRequireDefault(_Point);
	
	var _Pointer = __webpack_require__(41);
	
	var _Pointer2 = _interopRequireDefault(_Pointer);
	
	var _Vector = __webpack_require__(147);
	
	var _Vector2 = _interopRequireDefault(_Vector);
	
	var _Vector3 = __webpack_require__(108);
	
	var _Vector4 = _interopRequireDefault(_Vector3);
	
	var _VectorEventType = __webpack_require__(179);
	
	var _VectorEventType2 = _interopRequireDefault(_VectorEventType);
	
	var _RBush = __webpack_require__(181);
	
	var _RBush2 = _interopRequireDefault(_RBush);
	
	var _Style = __webpack_require__(87);
	
	var _proj = __webpack_require__(16);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var __extends = undefined && undefined.__extends || function () {
	    var _extendStatics = function extendStatics(d, b) {
	        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	            d.__proto__ = b;
	        } || function (d, b) {
	            for (var p in b) {
	                if (b.hasOwnProperty(p)) d[p] = b[p];
	            }
	        };
	        return _extendStatics(d, b);
	    };
	    return function (d, b) {
	        _extendStatics(d, b);
	        function __() {
	            this.constructor = d;
	        }
	        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	    };
	}();
	/**
	 * @module ol/interaction/Modify
	 */
	
	/**
	 * The segment index assigned to a circle's center when
	 * breaking up a circle into ModifySegmentDataType segments.
	 * @type {number}
	 */
	var CIRCLE_CENTER_INDEX = 0;
	/**
	 * The segment index assigned to a circle's circumference when
	 * breaking up a circle into ModifySegmentDataType segments.
	 * @type {number}
	 */
	var CIRCLE_CIRCUMFERENCE_INDEX = 1;
	var tempExtent = [0, 0, 0, 0];
	var tempSegment = [];
	/**
	 * @enum {string}
	 */
	var ModifyEventType = {
	    /**
	     * Triggered upon feature modification start
	     * @event ModifyEvent#modifystart
	     * @api
	     */
	    MODIFYSTART: 'modifystart',
	    /**
	     * Triggered upon feature modification end
	     * @event ModifyEvent#modifyend
	     * @api
	     */
	    MODIFYEND: 'modifyend'
	};
	/**
	 * @typedef {Object} SegmentData
	 * @property {Array<number>} [depth]
	 * @property {Feature} feature
	 * @property {import("../geom/SimpleGeometry.js").default} geometry
	 * @property {number} [index]
	 * @property {Array<import("../extent.js").Extent>} segment
	 * @property {Array<SegmentData>} [featureSegments]
	 */
	/**
	 * @typedef {Object} Options
	 * @property {import("../events/condition.js").Condition} [condition] A function that
	 * takes an {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a
	 * boolean to indicate whether that event will be considered to add or move a
	 * vertex to the sketch. Default is
	 * {@link module:ol/events/condition~primaryAction}.
	 * @property {import("../events/condition.js").Condition} [deleteCondition] A function
	 * that takes an {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a
	 * boolean to indicate whether that event should be handled. By default,
	 * {@link module:ol/events/condition~singleClick} with
	 * {@link module:ol/events/condition~altKeyOnly} results in a vertex deletion.
	 * @property {import("../events/condition.js").Condition} [insertVertexCondition] A
	 * function that takes an {@link module:ol/MapBrowserEvent~MapBrowserEvent} and
	 * returns a boolean to indicate whether a new vertex should be added to the sketch
	 * features. Default is {@link module:ol/events/condition~always}.
	 * @property {number} [pixelTolerance=10] Pixel tolerance for considering the
	 * pointer close enough to a segment or vertex for editing.
	 * @property {import("../style/Style.js").StyleLike} [style]
	 * Style used for the features being modified. By default the default edit
	 * style is used (see {@link module:ol/style}).
	 * @property {VectorSource} [source] The vector source with
	 * features to modify.  If a vector source is not provided, a feature collection
	 * must be provided with the features option.
	 * @property {Collection<Feature>} [features]
	 * The features the interaction works on.  If a feature collection is not
	 * provided, a vector source must be provided with the source option.
	 * @property {boolean} [wrapX=false] Wrap the world horizontally on the sketch
	 * overlay.
	 */
	/**
	 * @classdesc
	 * Events emitted by {@link module:ol/interaction/Modify~Modify} instances are
	 * instances of this type.
	 */
	var ModifyEvent = /** @class */function (_super) {
	    __extends(ModifyEvent, _super);
	    /**
	     * @param {ModifyEventType} type Type.
	     * @param {Collection<Feature>} features
	     * The features modified.
	     * @param {import("../MapBrowserPointerEvent.js").default} mapBrowserPointerEvent
	     * Associated {@link module:ol/MapBrowserPointerEvent}.
	     */
	    function ModifyEvent(type, features, mapBrowserPointerEvent) {
	        var _this = _super.call(this, type) || this;
	        /**
	         * The features being modified.
	         * @type {Collection<Feature>}
	         * @api
	         */
	        _this.features = features;
	        /**
	         * Associated {@link module:ol/MapBrowserEvent}.
	         * @type {import("../MapBrowserEvent.js").default}
	         * @api
	         */
	        _this.mapBrowserEvent = mapBrowserPointerEvent;
	        return _this;
	    }
	    return ModifyEvent;
	}(_Event2.default);
	exports.ModifyEvent = ModifyEvent;
	/**
	 * @classdesc
	 * Interaction for modifying feature geometries.  To modify features that have
	 * been added to an existing source, construct the modify interaction with the
	 * `source` option.  If you want to modify features in a collection (for example,
	 * the collection used by a select interaction), construct the interaction with
	 * the `features` option.  The interaction must be constructed with either a
	 * `source` or `features` option.
	 *
	 * By default, the interaction will allow deletion of vertices when the `alt`
	 * key is pressed.  To configure the interaction with a different condition
	 * for deletion, use the `deleteCondition` option.
	 * @fires ModifyEvent
	 * @api
	 */
	
	var Modify = /** @class */function (_super) {
	    __extends(Modify, _super);
	    /**
	     * @param {Options} options Options.
	     */
	    function Modify(options) {
	        var _this = _super.call(this, /** @type {import("./Pointer.js").Options} */options) || this;
	        /** @private */
	        _this.boundHandleFeatureChange_ = _this.handleFeatureChange_.bind(_this);
	        /**
	         * @private
	         * @type {import("../events/condition.js").Condition}
	         */
	        _this.condition_ = options.condition ? options.condition : _condition.primaryAction;
	        /**
	         * @private
	         * @param {import("../MapBrowserEvent.js").default} mapBrowserEvent Browser event.
	         * @return {boolean} Combined condition result.
	         */
	        _this.defaultDeleteCondition_ = function (mapBrowserEvent) {
	            return (0, _condition.altKeyOnly)(mapBrowserEvent) && (0, _condition.singleClick)(mapBrowserEvent);
	        };
	        /**
	         * @type {import("../events/condition.js").Condition}
	         * @private
	         */
	        _this.deleteCondition_ = options.deleteCondition ? options.deleteCondition : _this.defaultDeleteCondition_;
	        /**
	         * @type {import("../events/condition.js").Condition}
	         * @private
	         */
	        _this.insertVertexCondition_ = options.insertVertexCondition ? options.insertVertexCondition : _condition.always;
	        /**
	         * Editing vertex.
	         * @type {Feature}
	         * @private
	         */
	        _this.vertexFeature_ = null;
	        /**
	         * Segments intersecting {@link this.vertexFeature_} by segment uid.
	         * @type {Object<string, boolean>}
	         * @private
	         */
	        _this.vertexSegments_ = null;
	        /**
	         * @type {import("../pixel.js").Pixel}
	         * @private
	         */
	        _this.lastPixel_ = [0, 0];
	        /**
	         * Tracks if the next `singleclick` event should be ignored to prevent
	         * accidental deletion right after vertex creation.
	         * @type {boolean}
	         * @private
	         */
	        _this.ignoreNextSingleClick_ = false;
	        /**
	         * @type {boolean}
	         * @private
	         */
	        _this.modified_ = false;
	        /**
	         * Segment RTree for each layer
	         * @type {RBush<SegmentData>}
	         * @private
	         */
	        _this.rBush_ = new _RBush2.default();
	        /**
	         * @type {number}
	         * @private
	         */
	        _this.pixelTolerance_ = options.pixelTolerance !== undefined ? options.pixelTolerance : 10;
	        /**
	         * @type {boolean}
	         * @private
	         */
	        _this.snappedToVertex_ = false;
	        /**
	         * Indicate whether the interaction is currently changing a feature's
	         * coordinates.
	         * @type {boolean}
	         * @private
	         */
	        _this.changingFeature_ = false;
	        /**
	         * @type {Array}
	         * @private
	         */
	        _this.dragSegments_ = [];
	        /**
	         * Draw overlay where sketch features are drawn.
	         * @type {VectorLayer}
	         * @private
	         */
	        _this.overlay_ = new _Vector2.default({
	            source: new _Vector4.default({
	                useSpatialIndex: false,
	                wrapX: !!options.wrapX
	            }),
	            style: options.style ? options.style : getDefaultStyleFunction(),
	            updateWhileAnimating: true,
	            updateWhileInteracting: true
	        });
	        /**
	         * @const
	         * @private
	         * @type {!Object<string, function(Feature, import("../geom/Geometry.js").default): void>}
	         */
	        _this.SEGMENT_WRITERS_ = {
	            'Point': _this.writePointGeometry_.bind(_this),
	            'LineString': _this.writeLineStringGeometry_.bind(_this),
	            'LinearRing': _this.writeLineStringGeometry_.bind(_this),
	            'Polygon': _this.writePolygonGeometry_.bind(_this),
	            'MultiPoint': _this.writeMultiPointGeometry_.bind(_this),
	            'MultiLineString': _this.writeMultiLineStringGeometry_.bind(_this),
	            'MultiPolygon': _this.writeMultiPolygonGeometry_.bind(_this),
	            'Circle': _this.writeCircleGeometry_.bind(_this),
	            'GeometryCollection': _this.writeGeometryCollectionGeometry_.bind(_this)
	        };
	        /**
	         * @type {VectorSource}
	         * @private
	         */
	        _this.source_ = null;
	        var features;
	        if (options.source) {
	            _this.source_ = options.source;
	            features = new _Collection2.default(_this.source_.getFeatures());
	            _this.source_.addEventListener(_VectorEventType2.default.ADDFEATURE, _this.handleSourceAdd_.bind(_this));
	            _this.source_.addEventListener(_VectorEventType2.default.REMOVEFEATURE, _this.handleSourceRemove_.bind(_this));
	        } else {
	            features = options.features;
	        }
	        if (!features) {
	            throw new Error('The modify interaction requires features or a source');
	        }
	        /**
	         * @type {Collection<Feature>}
	         * @private
	         */
	        _this.features_ = features;
	        _this.features_.forEach(_this.addFeature_.bind(_this));
	        _this.features_.addEventListener(_CollectionEventType2.default.ADD, _this.handleFeatureAdd_.bind(_this));
	        _this.features_.addEventListener(_CollectionEventType2.default.REMOVE, _this.handleFeatureRemove_.bind(_this));
	        /**
	         * @type {import("../MapBrowserPointerEvent.js").default}
	         * @private
	         */
	        _this.lastPointerEvent_ = null;
	        return _this;
	    }
	    /**
	     * @param {Feature} feature Feature.
	     * @private
	     */
	    Modify.prototype.addFeature_ = function (feature) {
	        var geometry = feature.getGeometry();
	        if (geometry) {
	            var writer = this.SEGMENT_WRITERS_[geometry.getType()];
	            if (writer) {
	                writer(feature, geometry);
	            }
	        }
	        var map = this.getMap();
	        if (map && map.isRendered() && this.getActive()) {
	            this.handlePointerAtPixel_(this.lastPixel_, map);
	        }
	        feature.addEventListener(_EventType2.default.CHANGE, this.boundHandleFeatureChange_);
	    };
	    /**
	     * @param {import("../MapBrowserPointerEvent.js").default} evt Map browser event
	     * @private
	     */
	    Modify.prototype.willModifyFeatures_ = function (evt) {
	        if (!this.modified_) {
	            this.modified_ = true;
	            this.dispatchEvent(new ModifyEvent(ModifyEventType.MODIFYSTART, this.features_, evt));
	        }
	    };
	    /**
	     * @param {Feature} feature Feature.
	     * @private
	     */
	    Modify.prototype.removeFeature_ = function (feature) {
	        this.removeFeatureSegmentData_(feature);
	        // Remove the vertex feature if the collection of canditate features is empty.
	        if (this.vertexFeature_ && this.features_.getLength() === 0) {
	            this.overlay_.getSource().removeFeature(this.vertexFeature_);
	            this.vertexFeature_ = null;
	        }
	        feature.removeEventListener(_EventType2.default.CHANGE, this.boundHandleFeatureChange_);
	    };
	    /**
	     * @param {Feature} feature Feature.
	     * @private
	     */
	    Modify.prototype.removeFeatureSegmentData_ = function (feature) {
	        var rBush = this.rBush_;
	        /** @type {Array<SegmentData>} */
	        var nodesToRemove = [];
	        rBush.forEach(
	        /**
	         * @param {SegmentData} node RTree node.
	         */
	        function (node) {
	            if (feature === node.feature) {
	                nodesToRemove.push(node);
	            }
	        });
	        for (var i = nodesToRemove.length - 1; i >= 0; --i) {
	            var nodeToRemove = nodesToRemove[i];
	            for (var j = this.dragSegments_.length - 1; j >= 0; --j) {
	                if (this.dragSegments_[j][0] === nodeToRemove) {
	                    this.dragSegments_.splice(j, 1);
	                }
	            }
	            rBush.remove(nodeToRemove);
	        }
	    };
	    /**
	     * @inheritDoc
	     */
	    Modify.prototype.setActive = function (active) {
	        if (this.vertexFeature_ && !active) {
	            this.overlay_.getSource().removeFeature(this.vertexFeature_);
	            this.vertexFeature_ = null;
	        }
	        _super.prototype.setActive.call(this, active);
	    };
	    /**
	     * @inheritDoc
	     */
	    Modify.prototype.setMap = function (map) {
	        this.overlay_.setMap(map);
	        _super.prototype.setMap.call(this, map);
	    };
	    /**
	     * Get the overlay layer that this interaction renders sketch features to.
	     * @return {VectorLayer} Overlay layer.
	     * @api
	     */
	    Modify.prototype.getOverlay = function () {
	        return this.overlay_;
	    };
	    /**
	     * @param {import("../source/Vector.js").VectorSourceEvent} event Event.
	     * @private
	     */
	    Modify.prototype.handleSourceAdd_ = function (event) {
	        if (event.feature) {
	            this.features_.push(event.feature);
	        }
	    };
	    /**
	     * @param {import("../source/Vector.js").VectorSourceEvent} event Event.
	     * @private
	     */
	    Modify.prototype.handleSourceRemove_ = function (event) {
	        if (event.feature) {
	            this.features_.remove(event.feature);
	        }
	    };
	    /**
	     * @param {import("../Collection.js").CollectionEvent} evt Event.
	     * @private
	     */
	    Modify.prototype.handleFeatureAdd_ = function (evt) {
	        this.addFeature_( /** @type {Feature} */evt.element);
	    };
	    /**
	     * @param {import("../events/Event.js").default} evt Event.
	     * @private
	     */
	    Modify.prototype.handleFeatureChange_ = function (evt) {
	        if (!this.changingFeature_) {
	            var feature = /** @type {Feature} */evt.target;
	            this.removeFeature_(feature);
	            this.addFeature_(feature);
	        }
	    };
	    /**
	     * @param {import("../Collection.js").CollectionEvent} evt Event.
	     * @private
	     */
	    Modify.prototype.handleFeatureRemove_ = function (evt) {
	        var feature = /** @type {Feature} */evt.element;
	        this.removeFeature_(feature);
	    };
	    /**
	     * @param {Feature} feature Feature
	     * @param {Point} geometry Geometry.
	     * @private
	     */
	    Modify.prototype.writePointGeometry_ = function (feature, geometry) {
	        var coordinates = geometry.getCoordinates();
	        /** @type {SegmentData} */
	        var segmentData = {
	            feature: feature,
	            geometry: geometry,
	            segment: [coordinates, coordinates]
	        };
	        this.rBush_.insert(geometry.getExtent(), segmentData);
	    };
	    /**
	     * @param {Feature} feature Feature
	     * @param {import("../geom/MultiPoint.js").default} geometry Geometry.
	     * @private
	     */
	    Modify.prototype.writeMultiPointGeometry_ = function (feature, geometry) {
	        var points = geometry.getCoordinates();
	        for (var i = 0, ii = points.length; i < ii; ++i) {
	            var coordinates = points[i];
	            /** @type {SegmentData} */
	            var segmentData = {
	                feature: feature,
	                geometry: geometry,
	                depth: [i],
	                index: i,
	                segment: [coordinates, coordinates]
	            };
	            this.rBush_.insert(geometry.getExtent(), segmentData);
	        }
	    };
	    /**
	     * @param {Feature} feature Feature
	     * @param {import("../geom/LineString.js").default} geometry Geometry.
	     * @private
	     */
	    Modify.prototype.writeLineStringGeometry_ = function (feature, geometry) {
	        var coordinates = geometry.getCoordinates();
	        for (var i = 0, ii = coordinates.length - 1; i < ii; ++i) {
	            var segment = coordinates.slice(i, i + 2);
	            /** @type {SegmentData} */
	            var segmentData = {
	                feature: feature,
	                geometry: geometry,
	                index: i,
	                segment: segment
	            };
	            this.rBush_.insert((0, _extent.boundingExtent)(segment), segmentData);
	        }
	    };
	    /**
	     * @param {Feature} feature Feature
	     * @param {import("../geom/MultiLineString.js").default} geometry Geometry.
	     * @private
	     */
	    Modify.prototype.writeMultiLineStringGeometry_ = function (feature, geometry) {
	        var lines = geometry.getCoordinates();
	        for (var j = 0, jj = lines.length; j < jj; ++j) {
	            var coordinates = lines[j];
	            for (var i = 0, ii = coordinates.length - 1; i < ii; ++i) {
	                var segment = coordinates.slice(i, i + 2);
	                /** @type {SegmentData} */
	                var segmentData = {
	                    feature: feature,
	                    geometry: geometry,
	                    depth: [j],
	                    index: i,
	                    segment: segment
	                };
	                this.rBush_.insert((0, _extent.boundingExtent)(segment), segmentData);
	            }
	        }
	    };
	    /**
	     * @param {Feature} feature Feature
	     * @param {import("../geom/Polygon.js").default} geometry Geometry.
	     * @private
	     */
	    Modify.prototype.writePolygonGeometry_ = function (feature, geometry) {
	        var rings = geometry.getCoordinates();
	        for (var j = 0, jj = rings.length; j < jj; ++j) {
	            var coordinates = rings[j];
	            for (var i = 0, ii = coordinates.length - 1; i < ii; ++i) {
	                var segment = coordinates.slice(i, i + 2);
	                /** @type {SegmentData} */
	                var segmentData = {
	                    feature: feature,
	                    geometry: geometry,
	                    depth: [j],
	                    index: i,
	                    segment: segment
	                };
	                this.rBush_.insert((0, _extent.boundingExtent)(segment), segmentData);
	            }
	        }
	    };
	    /**
	     * @param {Feature} feature Feature
	     * @param {import("../geom/MultiPolygon.js").default} geometry Geometry.
	     * @private
	     */
	    Modify.prototype.writeMultiPolygonGeometry_ = function (feature, geometry) {
	        var polygons = geometry.getCoordinates();
	        for (var k = 0, kk = polygons.length; k < kk; ++k) {
	            var rings = polygons[k];
	            for (var j = 0, jj = rings.length; j < jj; ++j) {
	                var coordinates = rings[j];
	                for (var i = 0, ii = coordinates.length - 1; i < ii; ++i) {
	                    var segment = coordinates.slice(i, i + 2);
	                    /** @type {SegmentData} */
	                    var segmentData = {
	                        feature: feature,
	                        geometry: geometry,
	                        depth: [j, k],
	                        index: i,
	                        segment: segment
	                    };
	                    this.rBush_.insert((0, _extent.boundingExtent)(segment), segmentData);
	                }
	            }
	        }
	    };
	    /**
	     * We convert a circle into two segments.  The segment at index
	     * {@link CIRCLE_CENTER_INDEX} is the
	     * circle's center (a point).  The segment at index
	     * {@link CIRCLE_CIRCUMFERENCE_INDEX} is
	     * the circumference, and is not a line segment.
	     *
	     * @param {Feature} feature Feature.
	     * @param {import("../geom/Circle.js").default} geometry Geometry.
	     * @private
	     */
	    Modify.prototype.writeCircleGeometry_ = function (feature, geometry) {
	        var coordinates = geometry.getCenter();
	        /** @type {SegmentData} */
	        var centerSegmentData = {
	            feature: feature,
	            geometry: geometry,
	            index: CIRCLE_CENTER_INDEX,
	            segment: [coordinates, coordinates]
	        };
	        /** @type {SegmentData} */
	        var circumferenceSegmentData = {
	            feature: feature,
	            geometry: geometry,
	            index: CIRCLE_CIRCUMFERENCE_INDEX,
	            segment: [coordinates, coordinates]
	        };
	        var featureSegments = [centerSegmentData, circumferenceSegmentData];
	        centerSegmentData.featureSegments = featureSegments;
	        circumferenceSegmentData.featureSegments = featureSegments;
	        this.rBush_.insert((0, _extent.createOrUpdateFromCoordinate)(coordinates), centerSegmentData);
	        this.rBush_.insert(geometry.getExtent(), circumferenceSegmentData);
	    };
	    /**
	     * @param {Feature} feature Feature
	     * @param {import("../geom/GeometryCollection.js").default} geometry Geometry.
	     * @private
	     */
	    Modify.prototype.writeGeometryCollectionGeometry_ = function (feature, geometry) {
	        var geometries = geometry.getGeometriesArray();
	        for (var i = 0; i < geometries.length; ++i) {
	            var geometry_1 = geometries[i];
	            var writer = this.SEGMENT_WRITERS_[geometry_1.getType()];
	            writer(feature, geometry_1);
	        }
	    };
	    /**
	     * @param {import("../coordinate.js").Coordinate} coordinates Coordinates.
	     * @return {Feature} Vertex feature.
	     * @private
	     */
	    Modify.prototype.createOrUpdateVertexFeature_ = function (coordinates) {
	        var vertexFeature = this.vertexFeature_;
	        if (!vertexFeature) {
	            vertexFeature = new _Feature2.default(new _Point2.default(coordinates));
	            this.vertexFeature_ = vertexFeature;
	            this.overlay_.getSource().addFeature(vertexFeature);
	        } else {
	            var geometry = vertexFeature.getGeometry();
	            geometry.setCoordinates(coordinates);
	        }
	        return vertexFeature;
	    };
	    /**
	     * Handles the {@link module:ol/MapBrowserEvent map browser event} and may modify the geometry.
	     * @override
	     */
	    Modify.prototype.handleEvent = function (mapBrowserEvent) {
	        if (! /** @type {import("../MapBrowserPointerEvent.js").default} */mapBrowserEvent.pointerEvent) {
	            return true;
	        }
	        this.lastPointerEvent_ = mapBrowserEvent;
	        var handled;
	        if (!mapBrowserEvent.map.getView().getInteracting() && mapBrowserEvent.type == _MapBrowserEventType2.default.POINTERMOVE && !this.handlingDownUpSequence) {
	            this.handlePointerMove_(mapBrowserEvent);
	        }
	        if (this.vertexFeature_ && this.deleteCondition_(mapBrowserEvent)) {
	            if (mapBrowserEvent.type != _MapBrowserEventType2.default.SINGLECLICK || !this.ignoreNextSingleClick_) {
	                handled = this.removePoint();
	            } else {
	                handled = true;
	            }
	        }
	        if (mapBrowserEvent.type == _MapBrowserEventType2.default.SINGLECLICK) {
	            this.ignoreNextSingleClick_ = false;
	        }
	        return _super.prototype.handleEvent.call(this, mapBrowserEvent) && !handled;
	    };
	    /**
	     * @inheritDoc
	     */
	    Modify.prototype.handleDragEvent = function (evt) {
	        this.ignoreNextSingleClick_ = false;
	        this.willModifyFeatures_(evt);
	        var vertex = evt.coordinate;
	        for (var i = 0, ii = this.dragSegments_.length; i < ii; ++i) {
	            var dragSegment = this.dragSegments_[i];
	            var segmentData = dragSegment[0];
	            var depth = segmentData.depth;
	            var geometry = segmentData.geometry;
	            var coordinates = void 0;
	            var segment = segmentData.segment;
	            var index = dragSegment[1];
	            while (vertex.length < geometry.getStride()) {
	                vertex.push(segment[index][vertex.length]);
	            }
	            switch (geometry.getType()) {
	                case _GeometryType2.default.POINT:
	                    coordinates = vertex;
	                    segment[0] = vertex;
	                    segment[1] = vertex;
	                    break;
	                case _GeometryType2.default.MULTI_POINT:
	                    coordinates = geometry.getCoordinates();
	                    coordinates[segmentData.index] = vertex;
	                    segment[0] = vertex;
	                    segment[1] = vertex;
	                    break;
	                case _GeometryType2.default.LINE_STRING:
	                    coordinates = geometry.getCoordinates();
	                    coordinates[segmentData.index + index] = vertex;
	                    segment[index] = vertex;
	                    break;
	                case _GeometryType2.default.MULTI_LINE_STRING:
	                    coordinates = geometry.getCoordinates();
	                    coordinates[depth[0]][segmentData.index + index] = vertex;
	                    segment[index] = vertex;
	                    break;
	                case _GeometryType2.default.POLYGON:
	                    coordinates = geometry.getCoordinates();
	                    coordinates[depth[0]][segmentData.index + index] = vertex;
	                    segment[index] = vertex;
	                    break;
	                case _GeometryType2.default.MULTI_POLYGON:
	                    coordinates = geometry.getCoordinates();
	                    coordinates[depth[1]][depth[0]][segmentData.index + index] = vertex;
	                    segment[index] = vertex;
	                    break;
	                case _GeometryType2.default.CIRCLE:
	                    segment[0] = vertex;
	                    segment[1] = vertex;
	                    if (segmentData.index === CIRCLE_CENTER_INDEX) {
	                        this.changingFeature_ = true;
	                        geometry.setCenter(vertex);
	                        this.changingFeature_ = false;
	                    } else {
	                        // We're dragging the circle's circumference:
	                        this.changingFeature_ = true;
	                        geometry.setRadius((0, _coordinate.distance)(geometry.getCenter(), vertex));
	                        this.changingFeature_ = false;
	                    }
	                    break;
	                default:
	                // pass
	            }
	            if (coordinates) {
	                this.setGeometryCoordinates_(geometry, coordinates);
	            }
	        }
	        this.createOrUpdateVertexFeature_(vertex);
	    };
	    /**
	     * @inheritDoc
	     */
	    Modify.prototype.handleDownEvent = function (evt) {
	        if (!this.condition_(evt)) {
	            return false;
	        }
	        this.handlePointerAtPixel_(evt.pixel, evt.map);
	        var pixelCoordinate = evt.coordinate;
	        this.dragSegments_.length = 0;
	        this.modified_ = false;
	        var vertexFeature = this.vertexFeature_;
	        if (vertexFeature) {
	            var projection = evt.map.getView().getProjection();
	            var insertVertices = [];
	            var vertex = vertexFeature.getGeometry().getCoordinates();
	            var vertexExtent = (0, _extent.boundingExtent)([vertex]);
	            var segmentDataMatches = this.rBush_.getInExtent(vertexExtent);
	            var componentSegments = {};
	            segmentDataMatches.sort(compareIndexes);
	            for (var i = 0, ii = segmentDataMatches.length; i < ii; ++i) {
	                var segmentDataMatch = segmentDataMatches[i];
	                var segment = segmentDataMatch.segment;
	                var uid = (0, _util.getUid)(segmentDataMatch.feature);
	                var depth = segmentDataMatch.depth;
	                if (depth) {
	                    uid += '-' + depth.join('-'); // separate feature components
	                }
	                if (!componentSegments[uid]) {
	                    componentSegments[uid] = new Array(2);
	                }
	                if (segmentDataMatch.geometry.getType() === _GeometryType2.default.CIRCLE && segmentDataMatch.index === CIRCLE_CIRCUMFERENCE_INDEX) {
	                    var closestVertex = closestOnSegmentData(pixelCoordinate, segmentDataMatch, projection);
	                    if ((0, _coordinate.equals)(closestVertex, vertex) && !componentSegments[uid][0]) {
	                        this.dragSegments_.push([segmentDataMatch, 0]);
	                        componentSegments[uid][0] = segmentDataMatch;
	                    }
	                    continue;
	                }
	                if ((0, _coordinate.equals)(segment[0], vertex) && !componentSegments[uid][0]) {
	                    this.dragSegments_.push([segmentDataMatch, 0]);
	                    componentSegments[uid][0] = segmentDataMatch;
	                    continue;
	                }
	                if ((0, _coordinate.equals)(segment[1], vertex) && !componentSegments[uid][1]) {
	                    // prevent dragging closed linestrings by the connecting node
	                    if ((segmentDataMatch.geometry.getType() === _GeometryType2.default.LINE_STRING || segmentDataMatch.geometry.getType() === _GeometryType2.default.MULTI_LINE_STRING) && componentSegments[uid][0] && componentSegments[uid][0].index === 0) {
	                        continue;
	                    }
	                    this.dragSegments_.push([segmentDataMatch, 1]);
	                    componentSegments[uid][1] = segmentDataMatch;
	                    continue;
	                }
	                if ((0, _util.getUid)(segment) in this.vertexSegments_ && !componentSegments[uid][0] && !componentSegments[uid][1] && this.insertVertexCondition_(evt)) {
	                    insertVertices.push([segmentDataMatch, vertex]);
	                }
	            }
	            if (insertVertices.length) {
	                this.willModifyFeatures_(evt);
	            }
	            for (var j = insertVertices.length - 1; j >= 0; --j) {
	                this.insertVertex_.apply(this, insertVertices[j]);
	            }
	        }
	        return !!this.vertexFeature_;
	    };
	    /**
	     * @inheritDoc
	     */
	    Modify.prototype.handleUpEvent = function (evt) {
	        for (var i = this.dragSegments_.length - 1; i >= 0; --i) {
	            var segmentData = this.dragSegments_[i][0];
	            var geometry = segmentData.geometry;
	            if (geometry.getType() === _GeometryType2.default.CIRCLE) {
	                // Update a circle object in the R* bush:
	                var coordinates = geometry.getCenter();
	                var centerSegmentData = segmentData.featureSegments[0];
	                var circumferenceSegmentData = segmentData.featureSegments[1];
	                centerSegmentData.segment[0] = coordinates;
	                centerSegmentData.segment[1] = coordinates;
	                circumferenceSegmentData.segment[0] = coordinates;
	                circumferenceSegmentData.segment[1] = coordinates;
	                this.rBush_.update((0, _extent.createOrUpdateFromCoordinate)(coordinates), centerSegmentData);
	                this.rBush_.update(geometry.getExtent(), circumferenceSegmentData);
	            } else {
	                this.rBush_.update((0, _extent.boundingExtent)(segmentData.segment), segmentData);
	            }
	        }
	        if (this.modified_) {
	            this.dispatchEvent(new ModifyEvent(ModifyEventType.MODIFYEND, this.features_, evt));
	            this.modified_ = false;
	        }
	        return false;
	    };
	    /**
	     * @param {import("../MapBrowserEvent.js").default} evt Event.
	     * @private
	     */
	    Modify.prototype.handlePointerMove_ = function (evt) {
	        this.lastPixel_ = evt.pixel;
	        this.handlePointerAtPixel_(evt.pixel, evt.map);
	    };
	    /**
	     * @param {import("../pixel.js").Pixel} pixel Pixel
	     * @param {import("../PluggableMap.js").default} map Map.
	     * @private
	     */
	    Modify.prototype.handlePointerAtPixel_ = function (pixel, map) {
	        var pixelCoordinate = map.getCoordinateFromPixel(pixel);
	        var projection = map.getView().getProjection();
	        var sortByDistance = function sortByDistance(a, b) {
	            return projectedDistanceToSegmentDataSquared(pixelCoordinate, a, projection) - projectedDistanceToSegmentDataSquared(pixelCoordinate, b, projection);
	        };
	        var viewExtent = (0, _proj.fromUserExtent)((0, _extent.createOrUpdateFromCoordinate)(pixelCoordinate, tempExtent), projection);
	        var buffer = map.getView().getResolution() * this.pixelTolerance_;
	        var box = (0, _proj.toUserExtent)((0, _extent.buffer)(viewExtent, buffer, tempExtent), projection);
	        var rBush = this.rBush_;
	        var nodes = rBush.getInExtent(box);
	        if (nodes.length > 0) {
	            nodes.sort(sortByDistance);
	            var node = nodes[0];
	            var closestSegment = node.segment;
	            var vertex = closestOnSegmentData(pixelCoordinate, node, projection);
	            var vertexPixel = map.getPixelFromCoordinate(vertex);
	            var dist = (0, _coordinate.distance)(pixel, vertexPixel);
	            if (dist <= this.pixelTolerance_) {
	                /** @type {Object<string, boolean>} */
	                var vertexSegments = {};
	                if (node.geometry.getType() === _GeometryType2.default.CIRCLE && node.index === CIRCLE_CIRCUMFERENCE_INDEX) {
	                    this.snappedToVertex_ = true;
	                    this.createOrUpdateVertexFeature_(vertex);
	                } else {
	                    var pixel1 = map.getPixelFromCoordinate(closestSegment[0]);
	                    var pixel2 = map.getPixelFromCoordinate(closestSegment[1]);
	                    var squaredDist1 = (0, _coordinate.squaredDistance)(vertexPixel, pixel1);
	                    var squaredDist2 = (0, _coordinate.squaredDistance)(vertexPixel, pixel2);
	                    dist = Math.sqrt(Math.min(squaredDist1, squaredDist2));
	                    this.snappedToVertex_ = dist <= this.pixelTolerance_;
	                    if (this.snappedToVertex_) {
	                        vertex = squaredDist1 > squaredDist2 ? closestSegment[1] : closestSegment[0];
	                    }
	                    this.createOrUpdateVertexFeature_(vertex);
	                    for (var i = 1, ii = nodes.length; i < ii; ++i) {
	                        var segment = nodes[i].segment;
	                        if ((0, _coordinate.equals)(closestSegment[0], segment[0]) && (0, _coordinate.equals)(closestSegment[1], segment[1]) || (0, _coordinate.equals)(closestSegment[0], segment[1]) && (0, _coordinate.equals)(closestSegment[1], segment[0])) {
	                            vertexSegments[(0, _util.getUid)(segment)] = true;
	                        } else {
	                            break;
	                        }
	                    }
	                }
	                vertexSegments[(0, _util.getUid)(closestSegment)] = true;
	                this.vertexSegments_ = vertexSegments;
	                return;
	            }
	        }
	        if (this.vertexFeature_) {
	            this.overlay_.getSource().removeFeature(this.vertexFeature_);
	            this.vertexFeature_ = null;
	        }
	    };
	    /**
	     * @param {SegmentData} segmentData Segment data.
	     * @param {import("../coordinate.js").Coordinate} vertex Vertex.
	     * @private
	     */
	    Modify.prototype.insertVertex_ = function (segmentData, vertex) {
	        var segment = segmentData.segment;
	        var feature = segmentData.feature;
	        var geometry = segmentData.geometry;
	        var depth = segmentData.depth;
	        var index = segmentData.index;
	        var coordinates;
	        while (vertex.length < geometry.getStride()) {
	            vertex.push(0);
	        }
	        switch (geometry.getType()) {
	            case _GeometryType2.default.MULTI_LINE_STRING:
	                coordinates = geometry.getCoordinates();
	                coordinates[depth[0]].splice(index + 1, 0, vertex);
	                break;
	            case _GeometryType2.default.POLYGON:
	                coordinates = geometry.getCoordinates();
	                coordinates[depth[0]].splice(index + 1, 0, vertex);
	                break;
	            case _GeometryType2.default.MULTI_POLYGON:
	                coordinates = geometry.getCoordinates();
	                coordinates[depth[1]][depth[0]].splice(index + 1, 0, vertex);
	                break;
	            case _GeometryType2.default.LINE_STRING:
	                coordinates = geometry.getCoordinates();
	                coordinates.splice(index + 1, 0, vertex);
	                break;
	            default:
	                return;
	        }
	        this.setGeometryCoordinates_(geometry, coordinates);
	        var rTree = this.rBush_;
	        rTree.remove(segmentData);
	        this.updateSegmentIndices_(geometry, index, depth, 1);
	        /** @type {SegmentData} */
	        var newSegmentData = {
	            segment: [segment[0], vertex],
	            feature: feature,
	            geometry: geometry,
	            depth: depth,
	            index: index
	        };
	        rTree.insert((0, _extent.boundingExtent)(newSegmentData.segment), newSegmentData);
	        this.dragSegments_.push([newSegmentData, 1]);
	        /** @type {SegmentData} */
	        var newSegmentData2 = {
	            segment: [vertex, segment[1]],
	            feature: feature,
	            geometry: geometry,
	            depth: depth,
	            index: index + 1
	        };
	        rTree.insert((0, _extent.boundingExtent)(newSegmentData2.segment), newSegmentData2);
	        this.dragSegments_.push([newSegmentData2, 0]);
	        this.ignoreNextSingleClick_ = true;
	    };
	    /**
	     * Removes the vertex currently being pointed.
	     * @return {boolean} True when a vertex was removed.
	     * @api
	     */
	    Modify.prototype.removePoint = function () {
	        if (this.lastPointerEvent_ && this.lastPointerEvent_.type != _MapBrowserEventType2.default.POINTERDRAG) {
	            var evt = this.lastPointerEvent_;
	            this.willModifyFeatures_(evt);
	            var removed = this.removeVertex_();
	            this.dispatchEvent(new ModifyEvent(ModifyEventType.MODIFYEND, this.features_, evt));
	            this.modified_ = false;
	            return removed;
	        }
	        return false;
	    };
	    /**
	     * Removes a vertex from all matching features.
	     * @return {boolean} True when a vertex was removed.
	     * @private
	     */
	    Modify.prototype.removeVertex_ = function () {
	        var dragSegments = this.dragSegments_;
	        var segmentsByFeature = {};
	        var deleted = false;
	        var component, coordinates, dragSegment, geometry, i, index, left;
	        var newIndex, right, segmentData, uid;
	        for (i = dragSegments.length - 1; i >= 0; --i) {
	            dragSegment = dragSegments[i];
	            segmentData = dragSegment[0];
	            uid = (0, _util.getUid)(segmentData.feature);
	            if (segmentData.depth) {
	                // separate feature components
	                uid += '-' + segmentData.depth.join('-');
	            }
	            if (!(uid in segmentsByFeature)) {
	                segmentsByFeature[uid] = {};
	            }
	            if (dragSegment[1] === 0) {
	                segmentsByFeature[uid].right = segmentData;
	                segmentsByFeature[uid].index = segmentData.index;
	            } else if (dragSegment[1] == 1) {
	                segmentsByFeature[uid].left = segmentData;
	                segmentsByFeature[uid].index = segmentData.index + 1;
	            }
	        }
	        for (uid in segmentsByFeature) {
	            right = segmentsByFeature[uid].right;
	            left = segmentsByFeature[uid].left;
	            index = segmentsByFeature[uid].index;
	            newIndex = index - 1;
	            if (left !== undefined) {
	                segmentData = left;
	            } else {
	                segmentData = right;
	            }
	            if (newIndex < 0) {
	                newIndex = 0;
	            }
	            geometry = segmentData.geometry;
	            coordinates = geometry.getCoordinates();
	            component = coordinates;
	            deleted = false;
	            switch (geometry.getType()) {
	                case _GeometryType2.default.MULTI_LINE_STRING:
	                    if (coordinates[segmentData.depth[0]].length > 2) {
	                        coordinates[segmentData.depth[0]].splice(index, 1);
	                        deleted = true;
	                    }
	                    break;
	                case _GeometryType2.default.LINE_STRING:
	                    if (coordinates.length > 2) {
	                        coordinates.splice(index, 1);
	                        deleted = true;
	                    }
	                    break;
	                case _GeometryType2.default.MULTI_POLYGON:
	                    component = component[segmentData.depth[1]];
	                /* falls through */
	                case _GeometryType2.default.POLYGON:
	                    component = component[segmentData.depth[0]];
	                    if (component.length > 4) {
	                        if (index == component.length - 1) {
	                            index = 0;
	                        }
	                        component.splice(index, 1);
	                        deleted = true;
	                        if (index === 0) {
	                            // close the ring again
	                            component.pop();
	                            component.push(component[0]);
	                            newIndex = component.length - 1;
	                        }
	                    }
	                    break;
	                default:
	                // pass
	            }
	            if (deleted) {
	                this.setGeometryCoordinates_(geometry, coordinates);
	                var segments = [];
	                if (left !== undefined) {
	                    this.rBush_.remove(left);
	                    segments.push(left.segment[0]);
	                }
	                if (right !== undefined) {
	                    this.rBush_.remove(right);
	                    segments.push(right.segment[1]);
	                }
	                if (left !== undefined && right !== undefined) {
	                    /** @type {SegmentData} */
	                    var newSegmentData = {
	                        depth: segmentData.depth,
	                        feature: segmentData.feature,
	                        geometry: segmentData.geometry,
	                        index: newIndex,
	                        segment: segments
	                    };
	                    this.rBush_.insert((0, _extent.boundingExtent)(newSegmentData.segment), newSegmentData);
	                }
	                this.updateSegmentIndices_(geometry, index, segmentData.depth, -1);
	                if (this.vertexFeature_) {
	                    this.overlay_.getSource().removeFeature(this.vertexFeature_);
	                    this.vertexFeature_ = null;
	                }
	                dragSegments.length = 0;
	            }
	        }
	        return deleted;
	    };
	    /**
	     * @param {import("../geom/SimpleGeometry.js").default} geometry Geometry.
	     * @param {Array} coordinates Coordinates.
	     * @private
	     */
	    Modify.prototype.setGeometryCoordinates_ = function (geometry, coordinates) {
	        this.changingFeature_ = true;
	        geometry.setCoordinates(coordinates);
	        this.changingFeature_ = false;
	    };
	    /**
	     * @param {import("../geom/SimpleGeometry.js").default} geometry Geometry.
	     * @param {number} index Index.
	     * @param {Array<number>|undefined} depth Depth.
	     * @param {number} delta Delta (1 or -1).
	     * @private
	     */
	    Modify.prototype.updateSegmentIndices_ = function (geometry, index, depth, delta) {
	        this.rBush_.forEachInExtent(geometry.getExtent(), function (segmentDataMatch) {
	            if (segmentDataMatch.geometry === geometry && (depth === undefined || segmentDataMatch.depth === undefined || (0, _array.equals)(segmentDataMatch.depth, depth)) && segmentDataMatch.index > index) {
	                segmentDataMatch.index += delta;
	            }
	        });
	    };
	    return Modify;
	}(_Pointer2.default);
	/**
	 * @param {SegmentData} a The first segment data.
	 * @param {SegmentData} b The second segment data.
	 * @return {number} The difference in indexes.
	 */
	function compareIndexes(a, b) {
	    return a.index - b.index;
	}
	/**
	 * Returns the distance from a point to a line segment.
	 *
	 * @param {import("../coordinate.js").Coordinate} pointCoordinates The coordinates of the point from
	 *        which to calculate the distance.
	 * @param {SegmentData} segmentData The object describing the line
	 *        segment we are calculating the distance to.
	 * @param {import("../proj/Projection.js").default} projection The view projection.
	 * @return {number} The square of the distance between a point and a line segment.
	 */
	function projectedDistanceToSegmentDataSquared(pointCoordinates, segmentData, projection) {
	    var geometry = segmentData.geometry;
	    if (geometry.getType() === _GeometryType2.default.CIRCLE) {
	        var circleGeometry = /** @type {import("../geom/Circle.js").default} */geometry;
	        if (segmentData.index === CIRCLE_CIRCUMFERENCE_INDEX) {
	            var distanceToCenterSquared = (0, _coordinate.squaredDistance)(circleGeometry.getCenter(), pointCoordinates);
	            var distanceToCircumference = Math.sqrt(distanceToCenterSquared) - circleGeometry.getRadius();
	            return distanceToCircumference * distanceToCircumference;
	        }
	    }
	    var coordinate = (0, _proj.fromUserCoordinate)(pointCoordinates, projection);
	    tempSegment[0] = (0, _proj.fromUserCoordinate)(segmentData.segment[0], projection);
	    tempSegment[1] = (0, _proj.fromUserCoordinate)(segmentData.segment[1], projection);
	    return (0, _coordinate.squaredDistanceToSegment)(coordinate, tempSegment);
	}
	/**
	 * Returns the point closest to a given line segment.
	 *
	 * @param {import("../coordinate.js").Coordinate} pointCoordinates The point to which a closest point
	 *        should be found.
	 * @param {SegmentData} segmentData The object describing the line
	 *        segment which should contain the closest point.
	 * @param {import("../proj/Projection.js").default} projection The view projection.
	 * @return {import("../coordinate.js").Coordinate} The point closest to the specified line segment.
	 */
	function closestOnSegmentData(pointCoordinates, segmentData, projection) {
	    var geometry = segmentData.geometry;
	    if (geometry.getType() === _GeometryType2.default.CIRCLE && segmentData.index === CIRCLE_CIRCUMFERENCE_INDEX) {
	        return geometry.getClosestPoint(pointCoordinates);
	    }
	    var coordinate = (0, _proj.fromUserCoordinate)(pointCoordinates, projection);
	    tempSegment[0] = (0, _proj.fromUserCoordinate)(segmentData.segment[0], projection);
	    tempSegment[1] = (0, _proj.fromUserCoordinate)(segmentData.segment[1], projection);
	    return (0, _proj.toUserCoordinate)((0, _coordinate.closestOnSegment)(coordinate, tempSegment), projection);
	}
	/**
	 * @return {import("../style/Style.js").StyleFunction} Styles.
	 */
	function getDefaultStyleFunction() {
	    var style = (0, _Style.createEditingStyle)();
	    return function (feature, resolution) {
	        return style[_GeometryType2.default.POINT];
	    };
	}
	exports.default = Modify;
	//# sourceMappingURL=Modify.js.map

/***/ }),
/* 612 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	exports.Mode = undefined;
	
	var _condition = __webpack_require__(40);
	
	var _EventType = __webpack_require__(10);
	
	var _EventType2 = _interopRequireDefault(_EventType);
	
	var _has = __webpack_require__(105);
	
	var _Interaction = __webpack_require__(73);
	
	var _Interaction2 = _interopRequireDefault(_Interaction);
	
	var _math = __webpack_require__(19);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var __extends = undefined && undefined.__extends || function () {
	    var _extendStatics = function extendStatics(d, b) {
	        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	            d.__proto__ = b;
	        } || function (d, b) {
	            for (var p in b) {
	                if (b.hasOwnProperty(p)) d[p] = b[p];
	            }
	        };
	        return _extendStatics(d, b);
	    };
	    return function (d, b) {
	        _extendStatics(d, b);
	        function __() {
	            this.constructor = d;
	        }
	        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	    };
	}();
	/**
	 * @module ol/interaction/MouseWheelZoom
	 */
	
	/**
	 * @enum {string}
	 */
	var Mode = exports.Mode = {
	    TRACKPAD: 'trackpad',
	    WHEEL: 'wheel'
	};
	/**
	 * @typedef {Object} Options
	 * @property {import("../events/condition.js").Condition} [condition] A function that
	 * takes an {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a
	 * boolean to indicate whether that event should be handled. Default is
	 * {@link module:ol/events/condition~always}.
	 * @property {number} [maxDelta=1] Maximum mouse wheel delta.
	 * @property {number} [duration=250] Animation duration in milliseconds.
	 * @property {number} [timeout=80] Mouse wheel timeout duration in milliseconds.
	 * @property {boolean} [useAnchor=true] Enable zooming using the mouse's
	 * location as the anchor. When set to `false`, zooming in and out will zoom to
	 * the center of the screen instead of zooming on the mouse's location.
	 */
	/**
	 * @classdesc
	 * Allows the user to zoom the map by scrolling the mouse wheel.
	 * @api
	 */
	var MouseWheelZoom = /** @class */function (_super) {
	    __extends(MouseWheelZoom, _super);
	    /**
	     * @param {Options=} opt_options Options.
	     */
	    function MouseWheelZoom(opt_options) {
	        var _this = this;
	        var options = opt_options ? opt_options : {};
	        _this = _super.call(this, /** @type {import("./Interaction.js").InteractionOptions} */options) || this;
	        /**
	         * @private
	         * @type {number}
	         */
	        _this.totalDelta_ = 0;
	        /**
	         * @private
	         * @type {number}
	         */
	        _this.lastDelta_ = 0;
	        /**
	         * @private
	         * @type {number}
	         */
	        _this.maxDelta_ = options.maxDelta !== undefined ? options.maxDelta : 1;
	        /**
	         * @private
	         * @type {number}
	         */
	        _this.duration_ = options.duration !== undefined ? options.duration : 250;
	        /**
	         * @private
	         * @type {number}
	         */
	        _this.timeout_ = options.timeout !== undefined ? options.timeout : 80;
	        /**
	         * @private
	         * @type {boolean}
	         */
	        _this.useAnchor_ = options.useAnchor !== undefined ? options.useAnchor : true;
	        /**
	         * @private
	         * @type {import("../events/condition.js").Condition}
	         */
	        _this.condition_ = options.condition ? options.condition : _condition.always;
	        /**
	         * @private
	         * @type {?import("../coordinate.js").Coordinate}
	         */
	        _this.lastAnchor_ = null;
	        /**
	         * @private
	         * @type {number|undefined}
	         */
	        _this.startTime_ = undefined;
	        /**
	         * @private
	         * @type {?}
	         */
	        _this.timeoutId_;
	        /**
	         * @private
	         * @type {Mode|undefined}
	         */
	        _this.mode_ = undefined;
	        /**
	         * Trackpad events separated by this delay will be considered separate
	         * interactions.
	         * @type {number}
	         */
	        _this.trackpadEventGap_ = 400;
	        /**
	         * @type {?}
	         */
	        _this.trackpadTimeoutId_;
	        /**
	         * The number of delta values per zoom level
	         * @private
	         * @type {number}
	         */
	        _this.trackpadDeltaPerZoom_ = 300;
	        return _this;
	    }
	    /**
	     * @private
	     */
	    MouseWheelZoom.prototype.endInteraction_ = function () {
	        this.trackpadTimeoutId_ = undefined;
	        var view = this.getMap().getView();
	        view.endInteraction(undefined, Math.sign(this.lastDelta_), this.lastAnchor_);
	    };
	    /**
	     * Handles the {@link module:ol/MapBrowserEvent map browser event} (if it was a mousewheel-event) and eventually
	     * zooms the map.
	     * @override
	     */
	    MouseWheelZoom.prototype.handleEvent = function (mapBrowserEvent) {
	        if (!this.condition_(mapBrowserEvent)) {
	            return true;
	        }
	        var type = mapBrowserEvent.type;
	        if (type !== _EventType2.default.WHEEL) {
	            return true;
	        }
	        mapBrowserEvent.preventDefault();
	        var map = mapBrowserEvent.map;
	        var wheelEvent = /** @type {WheelEvent} */mapBrowserEvent.originalEvent;
	        if (this.useAnchor_) {
	            this.lastAnchor_ = mapBrowserEvent.coordinate;
	        }
	        // Delta normalisation inspired by
	        // https://github.com/mapbox/mapbox-gl-js/blob/001c7b9/js/ui/handler/scroll_zoom.js
	        var delta;
	        if (mapBrowserEvent.type == _EventType2.default.WHEEL) {
	            delta = wheelEvent.deltaY;
	            if (_has.FIREFOX && wheelEvent.deltaMode === WheelEvent.DOM_DELTA_PIXEL) {
	                delta /= _has.DEVICE_PIXEL_RATIO;
	            }
	            if (wheelEvent.deltaMode === WheelEvent.DOM_DELTA_LINE) {
	                delta *= 40;
	            }
	        }
	        if (delta === 0) {
	            return false;
	        } else {
	            this.lastDelta_ = delta;
	        }
	        var now = Date.now();
	        if (this.startTime_ === undefined) {
	            this.startTime_ = now;
	        }
	        if (!this.mode_ || now - this.startTime_ > this.trackpadEventGap_) {
	            this.mode_ = Math.abs(delta) < 4 ? Mode.TRACKPAD : Mode.WHEEL;
	        }
	        if (this.mode_ === Mode.TRACKPAD) {
	            var view = map.getView();
	            if (this.trackpadTimeoutId_) {
	                clearTimeout(this.trackpadTimeoutId_);
	            } else {
	                view.beginInteraction();
	            }
	            this.trackpadTimeoutId_ = setTimeout(this.endInteraction_.bind(this), this.trackpadEventGap_);
	            view.adjustZoom(-delta / this.trackpadDeltaPerZoom_, this.lastAnchor_);
	            this.startTime_ = now;
	            return false;
	        }
	        this.totalDelta_ += delta;
	        var timeLeft = Math.max(this.timeout_ - (now - this.startTime_), 0);
	        clearTimeout(this.timeoutId_);
	        this.timeoutId_ = setTimeout(this.handleWheelZoom_.bind(this, map), timeLeft);
	        return false;
	    };
	    /**
	     * @private
	     * @param {import("../PluggableMap.js").default} map Map.
	     */
	    MouseWheelZoom.prototype.handleWheelZoom_ = function (map) {
	        var view = map.getView();
	        if (view.getAnimating()) {
	            view.cancelAnimations();
	        }
	        var delta = (0, _math.clamp)(this.totalDelta_, -this.maxDelta_, this.maxDelta_);
	        (0, _Interaction.zoomByDelta)(view, -delta, this.lastAnchor_, this.duration_);
	        this.mode_ = undefined;
	        this.totalDelta_ = 0;
	        this.lastAnchor_ = null;
	        this.startTime_ = undefined;
	        this.timeoutId_ = undefined;
	    };
	    /**
	     * Enable or disable using the mouse's location as an anchor when zooming
	     * @param {boolean} useAnchor true to zoom to the mouse's location, false
	     * to zoom to the center of the map
	     * @api
	     */
	    MouseWheelZoom.prototype.setMouseAnchor = function (useAnchor) {
	        this.useAnchor_ = useAnchor;
	        if (!useAnchor) {
	            this.lastAnchor_ = null;
	        }
	    };
	    return MouseWheelZoom;
	}(_Interaction2.default);
	exports.default = MouseWheelZoom;
	//# sourceMappingURL=MouseWheelZoom.js.map

/***/ }),
/* 613 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	
	var _functions = __webpack_require__(31);
	
	var _Pointer = __webpack_require__(41);
	
	var _Pointer2 = _interopRequireDefault(_Pointer);
	
	var _rotationconstraint = __webpack_require__(177);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var __extends = undefined && undefined.__extends || function () {
	    var _extendStatics = function extendStatics(d, b) {
	        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	            d.__proto__ = b;
	        } || function (d, b) {
	            for (var p in b) {
	                if (b.hasOwnProperty(p)) d[p] = b[p];
	            }
	        };
	        return _extendStatics(d, b);
	    };
	    return function (d, b) {
	        _extendStatics(d, b);
	        function __() {
	            this.constructor = d;
	        }
	        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	    };
	}();
	/**
	 * @module ol/interaction/PinchRotate
	 */
	
	/**
	 * @typedef {Object} Options
	 * @property {number} [duration=250] The duration of the animation in
	 * milliseconds.
	 * @property {number} [threshold=0.3] Minimal angle in radians to start a rotation.
	 */
	/**
	 * @classdesc
	 * Allows the user to rotate the map by twisting with two fingers
	 * on a touch screen.
	 * @api
	 */
	var PinchRotate = /** @class */function (_super) {
	    __extends(PinchRotate, _super);
	    /**
	     * @param {Options=} opt_options Options.
	     */
	    function PinchRotate(opt_options) {
	        var _this = this;
	        var options = opt_options ? opt_options : {};
	        var pointerOptions = /** @type {import("./Pointer.js").Options} */options;
	        if (!pointerOptions.stopDown) {
	            pointerOptions.stopDown = _functions.FALSE;
	        }
	        _this = _super.call(this, pointerOptions) || this;
	        /**
	         * @private
	         * @type {import("../coordinate.js").Coordinate}
	         */
	        _this.anchor_ = null;
	        /**
	         * @private
	         * @type {number|undefined}
	         */
	        _this.lastAngle_ = undefined;
	        /**
	         * @private
	         * @type {boolean}
	         */
	        _this.rotating_ = false;
	        /**
	         * @private
	         * @type {number}
	         */
	        _this.rotationDelta_ = 0.0;
	        /**
	         * @private
	         * @type {number}
	         */
	        _this.threshold_ = options.threshold !== undefined ? options.threshold : 0.3;
	        /**
	         * @private
	         * @type {number}
	         */
	        _this.duration_ = options.duration !== undefined ? options.duration : 250;
	        return _this;
	    }
	    /**
	     * @inheritDoc
	     */
	    PinchRotate.prototype.handleDragEvent = function (mapBrowserEvent) {
	        var rotationDelta = 0.0;
	        var touch0 = this.targetPointers[0];
	        var touch1 = this.targetPointers[1];
	        // angle between touches
	        var angle = Math.atan2(touch1.clientY - touch0.clientY, touch1.clientX - touch0.clientX);
	        if (this.lastAngle_ !== undefined) {
	            var delta = angle - this.lastAngle_;
	            this.rotationDelta_ += delta;
	            if (!this.rotating_ && Math.abs(this.rotationDelta_) > this.threshold_) {
	                this.rotating_ = true;
	            }
	            rotationDelta = delta;
	        }
	        this.lastAngle_ = angle;
	        var map = mapBrowserEvent.map;
	        var view = map.getView();
	        if (view.getConstraints().rotation === _rotationconstraint.disable) {
	            return;
	        }
	        // rotate anchor point.
	        // FIXME: should be the intersection point between the lines:
	        //     touch0,touch1 and previousTouch0,previousTouch1
	        var viewportPosition = map.getViewport().getBoundingClientRect();
	        var centroid = (0, _Pointer.centroid)(this.targetPointers);
	        centroid[0] -= viewportPosition.left;
	        centroid[1] -= viewportPosition.top;
	        this.anchor_ = map.getCoordinateFromPixelInternal(centroid);
	        // rotate
	        if (this.rotating_) {
	            map.render();
	            view.adjustRotationInternal(rotationDelta, this.anchor_);
	        }
	    };
	    /**
	     * @inheritDoc
	     */
	    PinchRotate.prototype.handleUpEvent = function (mapBrowserEvent) {
	        if (this.targetPointers.length < 2) {
	            var map = mapBrowserEvent.map;
	            var view = map.getView();
	            view.endInteraction(this.duration_);
	            return false;
	        } else {
	            return true;
	        }
	    };
	    /**
	     * @inheritDoc
	     */
	    PinchRotate.prototype.handleDownEvent = function (mapBrowserEvent) {
	        if (this.targetPointers.length >= 2) {
	            var map = mapBrowserEvent.map;
	            this.anchor_ = null;
	            this.lastAngle_ = undefined;
	            this.rotating_ = false;
	            this.rotationDelta_ = 0.0;
	            if (!this.handlingDownUpSequence) {
	                map.getView().beginInteraction();
	            }
	            return true;
	        } else {
	            return false;
	        }
	    };
	    return PinchRotate;
	}(_Pointer2.default);
	exports.default = PinchRotate;
	//# sourceMappingURL=PinchRotate.js.map

/***/ }),
/* 614 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	
	var _functions = __webpack_require__(31);
	
	var _Pointer = __webpack_require__(41);
	
	var _Pointer2 = _interopRequireDefault(_Pointer);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var __extends = undefined && undefined.__extends || function () {
	    var _extendStatics = function extendStatics(d, b) {
	        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	            d.__proto__ = b;
	        } || function (d, b) {
	            for (var p in b) {
	                if (b.hasOwnProperty(p)) d[p] = b[p];
	            }
	        };
	        return _extendStatics(d, b);
	    };
	    return function (d, b) {
	        _extendStatics(d, b);
	        function __() {
	            this.constructor = d;
	        }
	        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	    };
	}();
	/**
	 * @module ol/interaction/PinchZoom
	 */
	
	/**
	 * @typedef {Object} Options
	 * @property {number} [duration=400] Animation duration in milliseconds.
	 */
	/**
	 * @classdesc
	 * Allows the user to zoom the map by pinching with two fingers
	 * on a touch screen.
	 * @api
	 */
	var PinchZoom = /** @class */function (_super) {
	    __extends(PinchZoom, _super);
	    /**
	     * @param {Options=} opt_options Options.
	     */
	    function PinchZoom(opt_options) {
	        var _this = this;
	        var options = opt_options ? opt_options : {};
	        var pointerOptions = /** @type {import("./Pointer.js").Options} */options;
	        if (!pointerOptions.stopDown) {
	            pointerOptions.stopDown = _functions.FALSE;
	        }
	        _this = _super.call(this, pointerOptions) || this;
	        /**
	         * @private
	         * @type {import("../coordinate.js").Coordinate}
	         */
	        _this.anchor_ = null;
	        /**
	         * @private
	         * @type {number}
	         */
	        _this.duration_ = options.duration !== undefined ? options.duration : 400;
	        /**
	         * @private
	         * @type {number|undefined}
	         */
	        _this.lastDistance_ = undefined;
	        /**
	         * @private
	         * @type {number}
	         */
	        _this.lastScaleDelta_ = 1;
	        return _this;
	    }
	    /**
	     * @inheritDoc
	     */
	    PinchZoom.prototype.handleDragEvent = function (mapBrowserEvent) {
	        var scaleDelta = 1.0;
	        var touch0 = this.targetPointers[0];
	        var touch1 = this.targetPointers[1];
	        var dx = touch0.clientX - touch1.clientX;
	        var dy = touch0.clientY - touch1.clientY;
	        // distance between touches
	        var distance = Math.sqrt(dx * dx + dy * dy);
	        if (this.lastDistance_ !== undefined) {
	            scaleDelta = this.lastDistance_ / distance;
	        }
	        this.lastDistance_ = distance;
	        var map = mapBrowserEvent.map;
	        var view = map.getView();
	        if (scaleDelta != 1.0) {
	            this.lastScaleDelta_ = scaleDelta;
	        }
	        // scale anchor point.
	        var viewportPosition = map.getViewport().getBoundingClientRect();
	        var centroid = (0, _Pointer.centroid)(this.targetPointers);
	        centroid[0] -= viewportPosition.left;
	        centroid[1] -= viewportPosition.top;
	        this.anchor_ = map.getCoordinateFromPixelInternal(centroid);
	        // scale, bypass the resolution constraint
	        map.render();
	        view.adjustResolutionInternal(scaleDelta, this.anchor_);
	    };
	    /**
	     * @inheritDoc
	     */
	    PinchZoom.prototype.handleUpEvent = function (mapBrowserEvent) {
	        if (this.targetPointers.length < 2) {
	            var map = mapBrowserEvent.map;
	            var view = map.getView();
	            var direction = this.lastScaleDelta_ > 1 ? 1 : -1;
	            view.endInteraction(this.duration_, direction);
	            return false;
	        } else {
	            return true;
	        }
	    };
	    /**
	     * @inheritDoc
	     */
	    PinchZoom.prototype.handleDownEvent = function (mapBrowserEvent) {
	        if (this.targetPointers.length >= 2) {
	            var map = mapBrowserEvent.map;
	            this.anchor_ = null;
	            this.lastDistance_ = undefined;
	            this.lastScaleDelta_ = 1;
	            if (!this.handlingDownUpSequence) {
	                map.getView().beginInteraction();
	            }
	            return true;
	        } else {
	            return false;
	        }
	    };
	    return PinchZoom;
	}(_Pointer2.default);
	exports.default = PinchZoom;
	//# sourceMappingURL=PinchZoom.js.map

/***/ }),
/* 615 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	
	var _util = __webpack_require__(14);
	
	var _CollectionEventType = __webpack_require__(83);
	
	var _CollectionEventType2 = _interopRequireDefault(_CollectionEventType);
	
	var _array = __webpack_require__(18);
	
	var _Event = __webpack_require__(35);
	
	var _Event2 = _interopRequireDefault(_Event);
	
	var _condition = __webpack_require__(40);
	
	var _functions = __webpack_require__(31);
	
	var _GeometryType = __webpack_require__(22);
	
	var _GeometryType2 = _interopRequireDefault(_GeometryType);
	
	var _Interaction = __webpack_require__(73);
	
	var _Interaction2 = _interopRequireDefault(_Interaction);
	
	var _obj = __webpack_require__(23);
	
	var _Style = __webpack_require__(87);
	
	var _Collection = __webpack_require__(63);
	
	var _Collection2 = _interopRequireDefault(_Collection);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var __extends = undefined && undefined.__extends || function () {
	    var _extendStatics = function extendStatics(d, b) {
	        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	            d.__proto__ = b;
	        } || function (d, b) {
	            for (var p in b) {
	                if (b.hasOwnProperty(p)) d[p] = b[p];
	            }
	        };
	        return _extendStatics(d, b);
	    };
	    return function (d, b) {
	        _extendStatics(d, b);
	        function __() {
	            this.constructor = d;
	        }
	        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	    };
	}();
	/**
	 * @module ol/interaction/Select
	 */
	
	/**
	 * @enum {string}
	 */
	var SelectEventType = {
	    /**
	     * Triggered when feature(s) has been (de)selected.
	     * @event SelectEvent#select
	     * @api
	     */
	    SELECT: 'select'
	};
	/**
	 * A function that takes an {@link module:ol/Feature} or
	 * {@link module:ol/render/Feature} and an
	 * {@link module:ol/layer/Layer} and returns `true` if the feature may be
	 * selected or `false` otherwise.
	 * @typedef {function(import("../Feature.js").FeatureLike, import("../layer/Layer.js").default):boolean} FilterFunction
	 */
	/**
	 * @typedef {Object} Options
	 * @property {import("../events/condition.js").Condition} [addCondition] A function
	 * that takes an {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a
	 * boolean to indicate whether that event should be handled.
	 * By default, this is {@link module:ol/events/condition~never}. Use this if you
	 * want to use different events for add and remove instead of `toggle`.
	 * @property {import("../events/condition.js").Condition} [condition] A function that
	 * takes an {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a
	 * boolean to indicate whether that event should be handled. This is the event
	 * for the selected features as a whole. By default, this is
	 * {@link module:ol/events/condition~singleClick}. Clicking on a feature selects that
	 * feature and removes any that were in the selection. Clicking outside any
	 * feature removes all from the selection.
	 * See `toggle`, `add`, `remove` options for adding/removing extra features to/
	 * from the selection.
	 * @property {Array<import("../layer/Layer.js").default>|function(import("../layer/Layer.js").default): boolean} [layers]
	 * A list of layers from which features should be selected. Alternatively, a
	 * filter function can be provided. The function will be called for each layer
	 * in the map and should return `true` for layers that you want to be
	 * selectable. If the option is absent, all visible layers will be considered
	 * selectable.
	 * @property {import("../style/Style.js").StyleLike} [style]
	 * Style for the selected features. By default the default edit style is used
	 * (see {@link module:ol/style}).
	 * If set to `false` the selected feature's style will not change.
	 * @property {import("../events/condition.js").Condition} [removeCondition] A function
	 * that takes an {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a
	 * boolean to indicate whether that event should be handled.
	 * By default, this is {@link module:ol/events/condition~never}. Use this if you
	 * want to use different events for add and remove instead of `toggle`.
	 * @property {import("../events/condition.js").Condition} [toggleCondition] A function
	 * that takes an {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a
	 * boolean to indicate whether that event should be handled. This is in addition
	 * to the `condition` event. By default,
	 * {@link module:ol/events/condition~shiftKeyOnly}, i.e. pressing `shift` as
	 * well as the `condition` event, adds that feature to the current selection if
	 * it is not currently selected, and removes it if it is. See `add` and `remove`
	 * if you want to use different events instead of a toggle.
	 * @property {boolean} [multi=false] A boolean that determines if the default
	 * behaviour should select only single features or all (overlapping) features at
	 * the clicked map position. The default of `false` means single select.
	 * @property {import("../Collection.js").default<import("../Feature.js").default>} [features]
	 * Collection where the interaction will place selected features. Optional. If
	 * not set the interaction will create a collection. In any case the collection
	 * used by the interaction is returned by
	 * {@link module:ol/interaction/Select~Select#getFeatures}.
	 * @property {FilterFunction} [filter] A function
	 * that takes an {@link module:ol/Feature} and an
	 * {@link module:ol/layer/Layer} and returns `true` if the feature may be
	 * selected or `false` otherwise.
	 * @property {number} [hitTolerance=0] Hit-detection tolerance. Pixels inside
	 * the radius around the given position will be checked for features.
	 */
	/**
	 * @classdesc
	 * Events emitted by {@link module:ol/interaction/Select~Select} instances are instances of
	 * this type.
	 */
	var SelectEvent = /** @class */function (_super) {
	    __extends(SelectEvent, _super);
	    /**
	     * @param {SelectEventType} type The event type.
	     * @param {Array<import("../Feature.js").default>} selected Selected features.
	     * @param {Array<import("../Feature.js").default>} deselected Deselected features.
	     * @param {import("../MapBrowserEvent.js").default} mapBrowserEvent Associated
	     *     {@link module:ol/MapBrowserEvent}.
	     */
	    function SelectEvent(type, selected, deselected, mapBrowserEvent) {
	        var _this = _super.call(this, type) || this;
	        /**
	         * Selected features array.
	         * @type {Array<import("../Feature.js").default>}
	         * @api
	         */
	        _this.selected = selected;
	        /**
	         * Deselected features array.
	         * @type {Array<import("../Feature.js").default>}
	         * @api
	         */
	        _this.deselected = deselected;
	        /**
	         * Associated {@link module:ol/MapBrowserEvent}.
	         * @type {import("../MapBrowserEvent.js").default}
	         * @api
	         */
	        _this.mapBrowserEvent = mapBrowserEvent;
	        return _this;
	    }
	    return SelectEvent;
	}(_Event2.default);
	/**
	 * @classdesc
	 * Interaction for selecting vector features. By default, selected features are
	 * styled differently, so this interaction can be used for visual highlighting,
	 * as well as selecting features for other actions, such as modification or
	 * output. There are three ways of controlling which features are selected:
	 * using the browser event as defined by the `condition` and optionally the
	 * `toggle`, `add`/`remove`, and `multi` options; a `layers` filter; and a
	 * further feature filter using the `filter` option.
	 *
	 * Selected features are added to an internal unmanaged layer.
	 *
	 * @fires SelectEvent
	 * @api
	 */
	var Select = /** @class */function (_super) {
	    __extends(Select, _super);
	    /**
	     * @param {Options=} opt_options Options.
	     */
	    function Select(opt_options) {
	        var _this = _super.call(this, {
	            handleEvent: handleEvent
	        }) || this;
	        var options = opt_options ? opt_options : {};
	        /**
	         * @private
	         * @type {import("../events/condition.js").Condition}
	         */
	        _this.condition_ = options.condition ? options.condition : _condition.singleClick;
	        /**
	         * @private
	         * @type {import("../events/condition.js").Condition}
	         */
	        _this.addCondition_ = options.addCondition ? options.addCondition : _condition.never;
	        /**
	         * @private
	         * @type {import("../events/condition.js").Condition}
	         */
	        _this.removeCondition_ = options.removeCondition ? options.removeCondition : _condition.never;
	        /**
	         * @private
	         * @type {import("../events/condition.js").Condition}
	         */
	        _this.toggleCondition_ = options.toggleCondition ? options.toggleCondition : _condition.shiftKeyOnly;
	        /**
	         * @private
	         * @type {boolean}
	         */
	        _this.multi_ = options.multi ? options.multi : false;
	        /**
	         * @private
	         * @type {FilterFunction}
	         */
	        _this.filter_ = options.filter ? options.filter : _functions.TRUE;
	        /**
	         * @private
	         * @type {number}
	         */
	        _this.hitTolerance_ = options.hitTolerance ? options.hitTolerance : 0;
	        /**
	         * @private
	         * @type {import("../style/Style.js").default|Array.<import("../style/Style.js").default>|import("../style/Style.js").StyleFunction|null}
	         */
	        _this.style_ = options.style !== undefined ? options.style : getDefaultStyleFunction();
	        /**
	         * An association between selected feature (key)
	         * and original style (value)
	         * @private
	         * @type {Object.<number, import("../style/Style.js").default|Array.<import("../style/Style.js").default>|import("../style/Style.js").StyleFunction>}
	         */
	        _this.featureStyleAssociation_ = {};
	        /**
	         * @private
	         * @type {import("../Collection.js").default}
	         */
	        _this.features_ = options.features || new _Collection2.default();
	        /** @type {function(import("../layer/Layer.js").default): boolean} */
	        var layerFilter;
	        if (options.layers) {
	            if (typeof options.layers === 'function') {
	                layerFilter = options.layers;
	            } else {
	                var layers_1 = options.layers;
	                layerFilter = function layerFilter(layer) {
	                    return (0, _array.includes)(layers_1, layer);
	                };
	            }
	        } else {
	            layerFilter = _functions.TRUE;
	        }
	        /**
	         * @private
	         * @type {function(import("../layer/Layer.js").default): boolean}
	         */
	        _this.layerFilter_ = layerFilter;
	        /**
	         * An association between selected feature (key)
	         * and layer (value)
	         * @private
	         * @type {Object<string, import("../layer/Layer.js").default>}
	         */
	        _this.featureLayerAssociation_ = {};
	        var features = _this.getFeatures();
	        features.addEventListener(_CollectionEventType2.default.ADD, _this.addFeature_.bind(_this));
	        features.addEventListener(_CollectionEventType2.default.REMOVE, _this.removeFeature_.bind(_this));
	        return _this;
	    }
	    /**
	     * @param {import("../Feature.js").FeatureLike} feature Feature.
	     * @param {import("../layer/Layer.js").default} layer Layer.
	     * @private
	     */
	    Select.prototype.addFeatureLayerAssociation_ = function (feature, layer) {
	        this.featureLayerAssociation_[(0, _util.getUid)(feature)] = layer;
	    };
	    /**
	     * Get the selected features.
	     * @return {import("../Collection.js").default<import("../Feature.js").default>} Features collection.
	     * @api
	     */
	    Select.prototype.getFeatures = function () {
	        return this.features_;
	    };
	    /**
	     * Returns the Hit-detection tolerance.
	     * @returns {number} Hit tolerance in pixels.
	     * @api
	     */
	    Select.prototype.getHitTolerance = function () {
	        return this.hitTolerance_;
	    };
	    /**
	     * Returns the associated {@link module:ol/layer/Vector~Vector vectorlayer} of
	     * the (last) selected feature. Note that this will not work with any
	     * programmatic method like pushing features to
	     * {@link module:ol/interaction/Select~Select#getFeatures collection}.
	     * @param {import("../Feature.js").FeatureLike} feature Feature
	     * @return {import('../layer/Vector.js').default} Layer.
	     * @api
	     */
	    Select.prototype.getLayer = function (feature) {
	        return (
	            /** @type {import('../layer/Vector.js').default} */this.featureLayerAssociation_[(0, _util.getUid)(feature)]
	        );
	    };
	    /**
	     * Hit-detection tolerance. Pixels inside the radius around the given position
	     * will be checked for features.
	     * @param {number} hitTolerance Hit tolerance in pixels.
	     * @api
	     */
	    Select.prototype.setHitTolerance = function (hitTolerance) {
	        this.hitTolerance_ = hitTolerance;
	    };
	    /**
	     * Remove the interaction from its current map, if any,  and attach it to a new
	     * map, if any. Pass `null` to just remove the interaction from the current map.
	     * @param {import("../PluggableMap.js").default} map Map.
	     * @override
	     * @api
	     */
	    Select.prototype.setMap = function (map) {
	        var currentMap = this.getMap();
	        if (currentMap && this.style_) {
	            this.features_.forEach(this.removeSelectedStyle_.bind(this));
	        }
	        _super.prototype.setMap.call(this, map);
	        if (map && this.style_) {
	            this.features_.forEach(this.giveSelectedStyle_.bind(this));
	        }
	    };
	    /**
	     * @param {import("../Collection.js").CollectionEvent} evt Event.
	     * @private
	     */
	    Select.prototype.addFeature_ = function (evt) {
	        var feature = evt.element;
	        if (this.style_) {
	            this.giveSelectedStyle_(feature);
	        }
	    };
	    /**
	     * @param {import("../Collection.js").CollectionEvent} evt Event.
	     * @private
	     */
	    Select.prototype.removeFeature_ = function (evt) {
	        var feature = evt.element;
	        if (this.style_) {
	            this.removeSelectedStyle_(feature);
	        }
	    };
	    /**
	     * @param {import("../Feature.js").default} feature Feature
	     * @private
	     */
	    Select.prototype.giveSelectedStyle_ = function (feature) {
	        var key = (0, _util.getUid)(feature);
	        this.featureStyleAssociation_[key] = feature.getStyle();
	        feature.setStyle(this.style_);
	    };
	    /**
	     * @param {import("../Feature.js").default} feature Feature
	     * @private
	     */
	    Select.prototype.removeSelectedStyle_ = function (feature) {
	        var key = (0, _util.getUid)(feature);
	        feature.setStyle(this.featureStyleAssociation_[key]);
	        delete this.featureStyleAssociation_[key];
	    };
	    /**
	     * @param {import("../Feature.js").FeatureLike} feature Feature.
	     * @private
	     */
	    Select.prototype.removeFeatureLayerAssociation_ = function (feature) {
	        delete this.featureLayerAssociation_[(0, _util.getUid)(feature)];
	    };
	    return Select;
	}(_Interaction2.default);
	/**
	 * Handles the {@link module:ol/MapBrowserEvent map browser event} and may change the
	 * selected state of features.
	 * @param {import("../MapBrowserEvent.js").default} mapBrowserEvent Map browser event.
	 * @return {boolean} `false` to stop event propagation.
	 * @this {Select}
	 */
	function handleEvent(mapBrowserEvent) {
	    if (!this.condition_(mapBrowserEvent)) {
	        return true;
	    }
	    var add = this.addCondition_(mapBrowserEvent);
	    var remove = this.removeCondition_(mapBrowserEvent);
	    var toggle = this.toggleCondition_(mapBrowserEvent);
	    var set = !add && !remove && !toggle;
	    var map = mapBrowserEvent.map;
	    var features = this.getFeatures();
	    var deselected = [];
	    var selected = [];
	    if (set) {
	        // Replace the currently selected feature(s) with the feature(s) at the
	        // pixel, or clear the selected feature(s) if there is no feature at
	        // the pixel.
	        (0, _obj.clear)(this.featureLayerAssociation_);
	        map.forEachFeatureAtPixel(mapBrowserEvent.pixel,
	        /**
	         * @param {import("../Feature.js").FeatureLike} feature Feature.
	         * @param {import("../layer/Layer.js").default} layer Layer.
	         * @return {boolean|undefined} Continue to iterate over the features.
	         */
	        function (feature, layer) {
	            if (this.filter_(feature, layer)) {
	                selected.push(feature);
	                this.addFeatureLayerAssociation_(feature, layer);
	                return !this.multi_;
	            }
	        }.bind(this), {
	            layerFilter: this.layerFilter_,
	            hitTolerance: this.hitTolerance_
	        });
	        for (var i = features.getLength() - 1; i >= 0; --i) {
	            var feature = features.item(i);
	            var index = selected.indexOf(feature);
	            if (index > -1) {
	                // feature is already selected
	                selected.splice(index, 1);
	            } else {
	                features.remove(feature);
	                deselected.push(feature);
	            }
	        }
	        if (selected.length !== 0) {
	            features.extend(selected);
	        }
	    } else {
	        // Modify the currently selected feature(s).
	        map.forEachFeatureAtPixel(mapBrowserEvent.pixel,
	        /**
	         * @param {import("../Feature.js").FeatureLike} feature Feature.
	         * @param {import("../layer/Layer.js").default} layer Layer.
	         * @return {boolean|undefined} Continue to iterate over the features.
	         */
	        function (feature, layer) {
	            if (this.filter_(feature, layer)) {
	                if ((add || toggle) && !(0, _array.includes)(features.getArray(), feature)) {
	                    selected.push(feature);
	                    this.addFeatureLayerAssociation_(feature, layer);
	                } else if ((remove || toggle) && (0, _array.includes)(features.getArray(), feature)) {
	                    deselected.push(feature);
	                    this.removeFeatureLayerAssociation_(feature);
	                }
	                return !this.multi_;
	            }
	        }.bind(this), {
	            layerFilter: this.layerFilter_,
	            hitTolerance: this.hitTolerance_
	        });
	        for (var j = deselected.length - 1; j >= 0; --j) {
	            features.remove(deselected[j]);
	        }
	        features.extend(selected);
	    }
	    if (selected.length > 0 || deselected.length > 0) {
	        this.dispatchEvent(new SelectEvent(SelectEventType.SELECT, selected, deselected, mapBrowserEvent));
	    }
	    return true;
	}
	/**
	 * @return {import("../style/Style.js").StyleFunction} Styles.
	 */
	function getDefaultStyleFunction() {
	    var styles = (0, _Style.createEditingStyle)();
	    (0, _array.extend)(styles[_GeometryType2.default.POLYGON], styles[_GeometryType2.default.LINE_STRING]);
	    (0, _array.extend)(styles[_GeometryType2.default.GEOMETRY_COLLECTION], styles[_GeometryType2.default.LINE_STRING]);
	    return function (feature) {
	        if (!feature.getGeometry()) {
	            return null;
	        }
	        return styles[feature.getGeometry().getType()];
	    };
	}
	exports.default = Select;
	//# sourceMappingURL=Select.js.map

/***/ }),
/* 616 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	
	var _util = __webpack_require__(14);
	
	var _CollectionEventType = __webpack_require__(83);
	
	var _CollectionEventType2 = _interopRequireDefault(_CollectionEventType);
	
	var _coordinate = __webpack_require__(84);
	
	var _events = __webpack_require__(30);
	
	var _EventType = __webpack_require__(10);
	
	var _EventType2 = _interopRequireDefault(_EventType);
	
	var _extent = __webpack_require__(4);
	
	var _functions = __webpack_require__(31);
	
	var _GeometryType = __webpack_require__(22);
	
	var _GeometryType2 = _interopRequireDefault(_GeometryType);
	
	var _Polygon = __webpack_require__(57);
	
	var _Pointer = __webpack_require__(41);
	
	var _Pointer2 = _interopRequireDefault(_Pointer);
	
	var _obj = __webpack_require__(23);
	
	var _VectorEventType = __webpack_require__(179);
	
	var _VectorEventType2 = _interopRequireDefault(_VectorEventType);
	
	var _RBush = __webpack_require__(181);
	
	var _RBush2 = _interopRequireDefault(_RBush);
	
	var _proj = __webpack_require__(16);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var __extends = undefined && undefined.__extends || function () {
	    var _extendStatics = function extendStatics(d, b) {
	        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	            d.__proto__ = b;
	        } || function (d, b) {
	            for (var p in b) {
	                if (b.hasOwnProperty(p)) d[p] = b[p];
	            }
	        };
	        return _extendStatics(d, b);
	    };
	    return function (d, b) {
	        _extendStatics(d, b);
	        function __() {
	            this.constructor = d;
	        }
	        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	    };
	}();
	/**
	 * @module ol/interaction/Snap
	 */
	
	/**
	 * @typedef {Object} Result
	 * @property {boolean} snapped
	 * @property {import("../coordinate.js").Coordinate|null} vertex
	 * @property {import("../pixel.js").Pixel|null} vertexPixel
	 */
	/**
	 * @typedef {Object} SegmentData
	 * @property {import("../Feature.js").default} feature
	 * @property {Array<import("../coordinate.js").Coordinate>} segment
	 */
	/**
	 * @typedef {Object} Options
	 * @property {import("../Collection.js").default<import("../Feature.js").default>} [features] Snap to these features. Either this option or source should be provided.
	 * @property {boolean} [edge=true] Snap to edges.
	 * @property {boolean} [vertex=true] Snap to vertices.
	 * @property {number} [pixelTolerance=10] Pixel tolerance for considering the pointer close enough to a segment or
	 * vertex for snapping.
	 * @property {import("../source/Vector.js").default} [source] Snap to features from this source. Either this option or features should be provided
	 */
	/**
	 * @param  {import("../source/Vector.js").VectorSourceEvent|import("../Collection.js").CollectionEvent} evt Event.
	 * @return {import("../Feature.js").default} Feature.
	 */
	function getFeatureFromEvent(evt) {
	    if ( /** @type {import("../source/Vector.js").VectorSourceEvent} */evt.feature) {
	        return (/** @type {import("../source/Vector.js").VectorSourceEvent} */evt.feature
	        );
	    } else if ( /** @type {import("../Collection.js").CollectionEvent} */evt.element) {
	        return (/** @type {import("../Feature.js").default} */ /** @type {import("../Collection.js").CollectionEvent} */evt.element
	        );
	    }
	}
	var tempSegment = [];
	/**
	 * @classdesc
	 * Handles snapping of vector features while modifying or drawing them.  The
	 * features can come from a {@link module:ol/source/Vector} or {@link module:ol/Collection~Collection}
	 * Any interaction object that allows the user to interact
	 * with the features using the mouse can benefit from the snapping, as long
	 * as it is added before.
	 *
	 * The snap interaction modifies map browser event `coordinate` and `pixel`
	 * properties to force the snap to occur to any interaction that them.
	 *
	 * Example:
	 *
	 *     import Snap from 'ol/interaction/Snap';
	 *
	 *     const snap = new Snap({
	 *       source: source
	 *     });
	 *
	 *     map.addInteraction(snap);
	 *
	 * @api
	 */
	var Snap = /** @class */function (_super) {
	    __extends(Snap, _super);
	    /**
	     * @param {Options=} opt_options Options.
	     */
	    function Snap(opt_options) {
	        var _this = this;
	        var options = opt_options ? opt_options : {};
	        var pointerOptions = /** @type {import("./Pointer.js").Options} */options;
	        if (!pointerOptions.handleDownEvent) {
	            pointerOptions.handleDownEvent = _functions.TRUE;
	        }
	        if (!pointerOptions.stopDown) {
	            pointerOptions.stopDown = _functions.FALSE;
	        }
	        _this = _super.call(this, pointerOptions) || this;
	        /**
	         * @type {import("../source/Vector.js").default}
	         * @private
	         */
	        _this.source_ = options.source ? options.source : null;
	        /**
	         * @private
	         * @type {boolean}
	         */
	        _this.vertex_ = options.vertex !== undefined ? options.vertex : true;
	        /**
	         * @private
	         * @type {boolean}
	         */
	        _this.edge_ = options.edge !== undefined ? options.edge : true;
	        /**
	         * @type {import("../Collection.js").default<import("../Feature.js").default>}
	         * @private
	         */
	        _this.features_ = options.features ? options.features : null;
	        /**
	         * @type {Array<import("../events.js").EventsKey>}
	         * @private
	         */
	        _this.featuresListenerKeys_ = [];
	        /**
	         * @type {Object<string, import("../events.js").EventsKey>}
	         * @private
	         */
	        _this.featureChangeListenerKeys_ = {};
	        /**
	         * Extents are preserved so indexed segment can be quickly removed
	         * when its feature geometry changes
	         * @type {Object<string, import("../extent.js").Extent>}
	         * @private
	         */
	        _this.indexedFeaturesExtents_ = {};
	        /**
	         * If a feature geometry changes while a pointer drag|move event occurs, the
	         * feature doesn't get updated right away.  It will be at the next 'pointerup'
	         * event fired.
	         * @type {!Object<string, import("../Feature.js").default>}
	         * @private
	         */
	        _this.pendingFeatures_ = {};
	        /**
	         * @type {number}
	         * @private
	         */
	        _this.pixelTolerance_ = options.pixelTolerance !== undefined ? options.pixelTolerance : 10;
	        /**
	        * Segment RTree for each layer
	        * @type {import("../structs/RBush.js").default<SegmentData>}
	        * @private
	        */
	        _this.rBush_ = new _RBush2.default();
	        /**
	        * @const
	        * @private
	        * @type {Object<string, function(import("../Feature.js").default, import("../geom/Geometry.js").default): void>}
	        */
	        _this.SEGMENT_WRITERS_ = {
	            'Point': _this.writePointGeometry_.bind(_this),
	            'LineString': _this.writeLineStringGeometry_.bind(_this),
	            'LinearRing': _this.writeLineStringGeometry_.bind(_this),
	            'Polygon': _this.writePolygonGeometry_.bind(_this),
	            'MultiPoint': _this.writeMultiPointGeometry_.bind(_this),
	            'MultiLineString': _this.writeMultiLineStringGeometry_.bind(_this),
	            'MultiPolygon': _this.writeMultiPolygonGeometry_.bind(_this),
	            'GeometryCollection': _this.writeGeometryCollectionGeometry_.bind(_this),
	            'Circle': _this.writeCircleGeometry_.bind(_this)
	        };
	        return _this;
	    }
	    /**
	     * Add a feature to the collection of features that we may snap to.
	     * @param {import("../Feature.js").default} feature Feature.
	     * @param {boolean=} opt_listen Whether to listen to the feature change or not
	     *     Defaults to `true`.
	     * @api
	     */
	    Snap.prototype.addFeature = function (feature, opt_listen) {
	        var register = opt_listen !== undefined ? opt_listen : true;
	        var feature_uid = (0, _util.getUid)(feature);
	        var geometry = feature.getGeometry();
	        if (geometry) {
	            var segmentWriter = this.SEGMENT_WRITERS_[geometry.getType()];
	            if (segmentWriter) {
	                this.indexedFeaturesExtents_[feature_uid] = geometry.getExtent((0, _extent.createEmpty)());
	                segmentWriter(feature, geometry);
	            }
	        }
	        if (register) {
	            this.featureChangeListenerKeys_[feature_uid] = (0, _events.listen)(feature, _EventType2.default.CHANGE, this.handleFeatureChange_, this);
	        }
	    };
	    /**
	     * @param {import("../Feature.js").default} feature Feature.
	     * @private
	     */
	    Snap.prototype.forEachFeatureAdd_ = function (feature) {
	        this.addFeature(feature);
	    };
	    /**
	     * @param {import("../Feature.js").default} feature Feature.
	     * @private
	     */
	    Snap.prototype.forEachFeatureRemove_ = function (feature) {
	        this.removeFeature(feature);
	    };
	    /**
	     * @return {import("../Collection.js").default<import("../Feature.js").default>|Array<import("../Feature.js").default>} Features.
	     * @private
	     */
	    Snap.prototype.getFeatures_ = function () {
	        var features;
	        if (this.features_) {
	            features = this.features_;
	        } else if (this.source_) {
	            features = this.source_.getFeatures();
	        }
	        return features;
	    };
	    /**
	     * @inheritDoc
	     */
	    Snap.prototype.handleEvent = function (evt) {
	        var result = this.snapTo(evt.pixel, evt.coordinate, evt.map);
	        if (result.snapped) {
	            evt.coordinate = result.vertex.slice(0, 2);
	            evt.pixel = result.vertexPixel;
	        }
	        return _super.prototype.handleEvent.call(this, evt);
	    };
	    /**
	     * @param {import("../source/Vector.js").VectorSourceEvent|import("../Collection.js").CollectionEvent} evt Event.
	     * @private
	     */
	    Snap.prototype.handleFeatureAdd_ = function (evt) {
	        var feature = getFeatureFromEvent(evt);
	        this.addFeature(feature);
	    };
	    /**
	     * @param {import("../source/Vector.js").VectorSourceEvent|import("../Collection.js").CollectionEvent} evt Event.
	     * @private
	     */
	    Snap.prototype.handleFeatureRemove_ = function (evt) {
	        var feature = getFeatureFromEvent(evt);
	        this.removeFeature(feature);
	    };
	    /**
	     * @param {import("../events/Event.js").default} evt Event.
	     * @private
	     */
	    Snap.prototype.handleFeatureChange_ = function (evt) {
	        var feature = /** @type {import("../Feature.js").default} */evt.target;
	        if (this.handlingDownUpSequence) {
	            var uid = (0, _util.getUid)(feature);
	            if (!(uid in this.pendingFeatures_)) {
	                this.pendingFeatures_[uid] = feature;
	            }
	        } else {
	            this.updateFeature_(feature);
	        }
	    };
	    /**
	     * @inheritDoc
	     */
	    Snap.prototype.handleUpEvent = function (evt) {
	        var featuresToUpdate = (0, _obj.getValues)(this.pendingFeatures_);
	        if (featuresToUpdate.length) {
	            featuresToUpdate.forEach(this.updateFeature_.bind(this));
	            this.pendingFeatures_ = {};
	        }
	        return false;
	    };
	    /**
	     * Remove a feature from the collection of features that we may snap to.
	     * @param {import("../Feature.js").default} feature Feature
	     * @param {boolean=} opt_unlisten Whether to unlisten to the feature change
	     *     or not. Defaults to `true`.
	     * @api
	     */
	    Snap.prototype.removeFeature = function (feature, opt_unlisten) {
	        var unregister = opt_unlisten !== undefined ? opt_unlisten : true;
	        var feature_uid = (0, _util.getUid)(feature);
	        var extent = this.indexedFeaturesExtents_[feature_uid];
	        if (extent) {
	            var rBush = this.rBush_;
	            var nodesToRemove_1 = [];
	            rBush.forEachInExtent(extent, function (node) {
	                if (feature === node.feature) {
	                    nodesToRemove_1.push(node);
	                }
	            });
	            for (var i = nodesToRemove_1.length - 1; i >= 0; --i) {
	                rBush.remove(nodesToRemove_1[i]);
	            }
	        }
	        if (unregister) {
	            (0, _events.unlistenByKey)(this.featureChangeListenerKeys_[feature_uid]);
	            delete this.featureChangeListenerKeys_[feature_uid];
	        }
	    };
	    /**
	     * @inheritDoc
	     */
	    Snap.prototype.setMap = function (map) {
	        var currentMap = this.getMap();
	        var keys = this.featuresListenerKeys_;
	        var features = /** @type {Array<import("../Feature.js").default>} */this.getFeatures_();
	        if (currentMap) {
	            keys.forEach(_events.unlistenByKey);
	            keys.length = 0;
	            features.forEach(this.forEachFeatureRemove_.bind(this));
	        }
	        _super.prototype.setMap.call(this, map);
	        if (map) {
	            if (this.features_) {
	                keys.push((0, _events.listen)(this.features_, _CollectionEventType2.default.ADD, this.handleFeatureAdd_, this), (0, _events.listen)(this.features_, _CollectionEventType2.default.REMOVE, this.handleFeatureRemove_, this));
	            } else if (this.source_) {
	                keys.push((0, _events.listen)(this.source_, _VectorEventType2.default.ADDFEATURE, this.handleFeatureAdd_, this), (0, _events.listen)(this.source_, _VectorEventType2.default.REMOVEFEATURE, this.handleFeatureRemove_, this));
	            }
	            features.forEach(this.forEachFeatureAdd_.bind(this));
	        }
	    };
	    /**
	     * @param {import("../pixel.js").Pixel} pixel Pixel
	     * @param {import("../coordinate.js").Coordinate} pixelCoordinate Coordinate
	     * @param {import("../PluggableMap.js").default} map Map.
	     * @return {Result} Snap result
	     */
	    Snap.prototype.snapTo = function (pixel, pixelCoordinate, map) {
	        var lowerLeft = map.getCoordinateFromPixel([pixel[0] - this.pixelTolerance_, pixel[1] + this.pixelTolerance_]);
	        var upperRight = map.getCoordinateFromPixel([pixel[0] + this.pixelTolerance_, pixel[1] - this.pixelTolerance_]);
	        var box = (0, _extent.boundingExtent)([lowerLeft, upperRight]);
	        var segments = this.rBush_.getInExtent(box);
	        // If snapping on vertices only, don't consider circles
	        if (this.vertex_ && !this.edge_) {
	            segments = segments.filter(function (segment) {
	                return segment.feature.getGeometry().getType() !== _GeometryType2.default.CIRCLE;
	            });
	        }
	        var snapped = false;
	        var vertex = null;
	        var vertexPixel = null;
	        if (segments.length === 0) {
	            return {
	                snapped: snapped,
	                vertex: vertex,
	                vertexPixel: vertexPixel
	            };
	        }
	        var projection = map.getView().getProjection();
	        var projectedCoordinate = (0, _proj.fromUserCoordinate)(pixelCoordinate, projection);
	        var closestSegmentData;
	        var minSquaredDistance = Infinity;
	        for (var i = 0; i < segments.length; ++i) {
	            var segmentData = segments[i];
	            tempSegment[0] = (0, _proj.fromUserCoordinate)(segmentData.segment[0], projection);
	            tempSegment[1] = (0, _proj.fromUserCoordinate)(segmentData.segment[1], projection);
	            var delta = (0, _coordinate.squaredDistanceToSegment)(projectedCoordinate, tempSegment);
	            if (delta < minSquaredDistance) {
	                closestSegmentData = segmentData;
	                minSquaredDistance = delta;
	            }
	        }
	        var closestSegment = closestSegmentData.segment;
	        if (this.vertex_ && !this.edge_) {
	            var pixel1 = map.getPixelFromCoordinate(closestSegment[0]);
	            var pixel2 = map.getPixelFromCoordinate(closestSegment[1]);
	            var squaredDist1 = (0, _coordinate.squaredDistance)(pixel, pixel1);
	            var squaredDist2 = (0, _coordinate.squaredDistance)(pixel, pixel2);
	            var dist = Math.sqrt(Math.min(squaredDist1, squaredDist2));
	            if (dist <= this.pixelTolerance_) {
	                snapped = true;
	                vertex = squaredDist1 > squaredDist2 ? closestSegment[1] : closestSegment[0];
	                vertexPixel = map.getPixelFromCoordinate(vertex);
	            }
	        } else if (this.edge_) {
	            var isCircle = closestSegmentData.feature.getGeometry().getType() === _GeometryType2.default.CIRCLE;
	            if (isCircle) {
	                vertex = (0, _coordinate.closestOnCircle)(pixelCoordinate,
	                /** @type {import("../geom/Circle.js").default} */closestSegmentData.feature.getGeometry());
	            } else {
	                tempSegment[0] = (0, _proj.fromUserCoordinate)(closestSegment[0], projection);
	                tempSegment[1] = (0, _proj.fromUserCoordinate)(closestSegment[1], projection);
	                vertex = (0, _proj.toUserCoordinate)((0, _coordinate.closestOnSegment)(projectedCoordinate, tempSegment), projection);
	            }
	            vertexPixel = map.getPixelFromCoordinate(vertex);
	            if ((0, _coordinate.distance)(pixel, vertexPixel) <= this.pixelTolerance_) {
	                snapped = true;
	                if (this.vertex_ && !isCircle) {
	                    var pixel1 = map.getPixelFromCoordinate(closestSegment[0]);
	                    var pixel2 = map.getPixelFromCoordinate(closestSegment[1]);
	                    var squaredDist1 = (0, _coordinate.squaredDistance)(vertexPixel, pixel1);
	                    var squaredDist2 = (0, _coordinate.squaredDistance)(vertexPixel, pixel2);
	                    var dist = Math.sqrt(Math.min(squaredDist1, squaredDist2));
	                    if (dist <= this.pixelTolerance_) {
	                        vertex = squaredDist1 > squaredDist2 ? closestSegment[1] : closestSegment[0];
	                        vertexPixel = map.getPixelFromCoordinate(vertex);
	                    }
	                }
	            }
	        }
	        if (snapped) {
	            vertexPixel = [Math.round(vertexPixel[0]), Math.round(vertexPixel[1])];
	        }
	        return {
	            snapped: snapped,
	            vertex: vertex,
	            vertexPixel: vertexPixel
	        };
	    };
	    /**
	     * @param {import("../Feature.js").default} feature Feature
	     * @private
	     */
	    Snap.prototype.updateFeature_ = function (feature) {
	        this.removeFeature(feature, false);
	        this.addFeature(feature, false);
	    };
	    /**
	     * @param {import("../Feature.js").default} feature Feature
	     * @param {import("../geom/Circle.js").default} geometry Geometry.
	     * @private
	     */
	    Snap.prototype.writeCircleGeometry_ = function (feature, geometry) {
	        var polygon = (0, _Polygon.fromCircle)(geometry);
	        var coordinates = polygon.getCoordinates()[0];
	        for (var i = 0, ii = coordinates.length - 1; i < ii; ++i) {
	            var segment = coordinates.slice(i, i + 2);
	            var segmentData = {
	                feature: feature,
	                segment: segment
	            };
	            this.rBush_.insert((0, _extent.boundingExtent)(segment), segmentData);
	        }
	    };
	    /**
	     * @param {import("../Feature.js").default} feature Feature
	     * @param {import("../geom/GeometryCollection.js").default} geometry Geometry.
	     * @private
	     */
	    Snap.prototype.writeGeometryCollectionGeometry_ = function (feature, geometry) {
	        var geometries = geometry.getGeometriesArray();
	        for (var i = 0; i < geometries.length; ++i) {
	            var segmentWriter = this.SEGMENT_WRITERS_[geometries[i].getType()];
	            if (segmentWriter) {
	                segmentWriter(feature, geometries[i]);
	            }
	        }
	    };
	    /**
	     * @param {import("../Feature.js").default} feature Feature
	     * @param {import("../geom/LineString.js").default} geometry Geometry.
	     * @private
	     */
	    Snap.prototype.writeLineStringGeometry_ = function (feature, geometry) {
	        var coordinates = geometry.getCoordinates();
	        for (var i = 0, ii = coordinates.length - 1; i < ii; ++i) {
	            var segment = coordinates.slice(i, i + 2);
	            var segmentData = {
	                feature: feature,
	                segment: segment
	            };
	            this.rBush_.insert((0, _extent.boundingExtent)(segment), segmentData);
	        }
	    };
	    /**
	     * @param {import("../Feature.js").default} feature Feature
	     * @param {import("../geom/MultiLineString.js").default} geometry Geometry.
	     * @private
	     */
	    Snap.prototype.writeMultiLineStringGeometry_ = function (feature, geometry) {
	        var lines = geometry.getCoordinates();
	        for (var j = 0, jj = lines.length; j < jj; ++j) {
	            var coordinates = lines[j];
	            for (var i = 0, ii = coordinates.length - 1; i < ii; ++i) {
	                var segment = coordinates.slice(i, i + 2);
	                var segmentData = {
	                    feature: feature,
	                    segment: segment
	                };
	                this.rBush_.insert((0, _extent.boundingExtent)(segment), segmentData);
	            }
	        }
	    };
	    /**
	     * @param {import("../Feature.js").default} feature Feature
	     * @param {import("../geom/MultiPoint.js").default} geometry Geometry.
	     * @private
	     */
	    Snap.prototype.writeMultiPointGeometry_ = function (feature, geometry) {
	        var points = geometry.getCoordinates();
	        for (var i = 0, ii = points.length; i < ii; ++i) {
	            var coordinates = points[i];
	            var segmentData = {
	                feature: feature,
	                segment: [coordinates, coordinates]
	            };
	            this.rBush_.insert(geometry.getExtent(), segmentData);
	        }
	    };
	    /**
	     * @param {import("../Feature.js").default} feature Feature
	     * @param {import("../geom/MultiPolygon.js").default} geometry Geometry.
	     * @private
	     */
	    Snap.prototype.writeMultiPolygonGeometry_ = function (feature, geometry) {
	        var polygons = geometry.getCoordinates();
	        for (var k = 0, kk = polygons.length; k < kk; ++k) {
	            var rings = polygons[k];
	            for (var j = 0, jj = rings.length; j < jj; ++j) {
	                var coordinates = rings[j];
	                for (var i = 0, ii = coordinates.length - 1; i < ii; ++i) {
	                    var segment = coordinates.slice(i, i + 2);
	                    var segmentData = {
	                        feature: feature,
	                        segment: segment
	                    };
	                    this.rBush_.insert((0, _extent.boundingExtent)(segment), segmentData);
	                }
	            }
	        }
	    };
	    /**
	     * @param {import("../Feature.js").default} feature Feature
	     * @param {import("../geom/Point.js").default} geometry Geometry.
	     * @private
	     */
	    Snap.prototype.writePointGeometry_ = function (feature, geometry) {
	        var coordinates = geometry.getCoordinates();
	        var segmentData = {
	            feature: feature,
	            segment: [coordinates, coordinates]
	        };
	        this.rBush_.insert(geometry.getExtent(), segmentData);
	    };
	    /**
	     * @param {import("../Feature.js").default} feature Feature
	     * @param {import("../geom/Polygon.js").default} geometry Geometry.
	     * @private
	     */
	    Snap.prototype.writePolygonGeometry_ = function (feature, geometry) {
	        var rings = geometry.getCoordinates();
	        for (var j = 0, jj = rings.length; j < jj; ++j) {
	            var coordinates = rings[j];
	            for (var i = 0, ii = coordinates.length - 1; i < ii; ++i) {
	                var segment = coordinates.slice(i, i + 2);
	                var segmentData = {
	                    feature: feature,
	                    segment: segment
	                };
	                this.rBush_.insert((0, _extent.boundingExtent)(segment), segmentData);
	            }
	        }
	    };
	    return Snap;
	}(_Pointer2.default);
	exports.default = Snap;
	//# sourceMappingURL=Snap.js.map

/***/ }),
/* 617 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	exports.TranslateEvent = undefined;
	
	var _Collection = __webpack_require__(63);
	
	var _Collection2 = _interopRequireDefault(_Collection);
	
	var _Object = __webpack_require__(32);
	
	var _Event = __webpack_require__(35);
	
	var _Event2 = _interopRequireDefault(_Event);
	
	var _functions = __webpack_require__(31);
	
	var _array = __webpack_require__(18);
	
	var _Pointer = __webpack_require__(41);
	
	var _Pointer2 = _interopRequireDefault(_Pointer);
	
	var _Property = __webpack_require__(174);
	
	var _Property2 = _interopRequireDefault(_Property);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var __extends = undefined && undefined.__extends || function () {
	    var _extendStatics = function extendStatics(d, b) {
	        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	            d.__proto__ = b;
	        } || function (d, b) {
	            for (var p in b) {
	                if (b.hasOwnProperty(p)) d[p] = b[p];
	            }
	        };
	        return _extendStatics(d, b);
	    };
	    return function (d, b) {
	        _extendStatics(d, b);
	        function __() {
	            this.constructor = d;
	        }
	        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	    };
	}();
	/**
	 * @module ol/interaction/Translate
	 */
	
	/**
	 * @enum {string}
	 */
	var TranslateEventType = {
	    /**
	     * Triggered upon feature translation start.
	     * @event TranslateEvent#translatestart
	     * @api
	     */
	    TRANSLATESTART: 'translatestart',
	    /**
	     * Triggered upon feature translation.
	     * @event TranslateEvent#translating
	     * @api
	     */
	    TRANSLATING: 'translating',
	    /**
	     * Triggered upon feature translation end.
	     * @event TranslateEvent#translateend
	     * @api
	     */
	    TRANSLATEEND: 'translateend'
	};
	/**
	 * A function that takes an {@link module:ol/Feature} or
	 * {@link module:ol/render/Feature} and an
	 * {@link module:ol/layer/Layer} and returns `true` if the feature may be
	 * translated or `false` otherwise.
	 * @typedef {function(import("../Feature.js").FeatureLike, import("../layer/Layer.js").default):boolean} FilterFunction
	 */
	/**
	 * @typedef {Object} Options
	 * @property {Collection<import("../Feature.js").default>} [features] Only features contained in this collection will be able to be translated. If
	 * not specified, all features on the map will be able to be translated.
	 * @property {Array<import("../layer/Layer.js").default>|function(import("../layer/Layer.js").default): boolean} [layers] A list of layers from which features should be
	 * translated. Alternatively, a filter function can be provided. The
	 * function will be called for each layer in the map and should return
	 * `true` for layers that you want to be translatable. If the option is
	 * absent, all visible layers will be considered translatable.
	 * @property {FilterFunction} [filter] A function
	 * that takes an {@link module:ol/Feature} and an
	 * {@link module:ol/layer/Layer} and returns `true` if the feature may be
	 * translated or `false` otherwise.
	 * @property {number} [hitTolerance=0] Hit-detection tolerance. Pixels inside the radius around the given position
	 * will be checked for features.
	 */
	/**
	 * @classdesc
	 * Events emitted by {@link module:ol/interaction/Translate~Translate} instances
	 * are instances of this type.
	 */
	var TranslateEvent = /** @class */function (_super) {
	    __extends(TranslateEvent, _super);
	    /**
	     * @param {TranslateEventType} type Type.
	     * @param {Collection<import("../Feature.js").default>} features The features translated.
	     * @param {import("../coordinate.js").Coordinate} coordinate The event coordinate.
	     * @param {import("../coordinate.js").Coordinate} startCoordinate The original coordinates before.translation started
	     * @param {import("../MapBrowserEvent.js").default} mapBrowserEvent Map browser event.
	     */
	    function TranslateEvent(type, features, coordinate, startCoordinate, mapBrowserEvent) {
	        var _this = _super.call(this, type) || this;
	        /**
	         * The features being translated.
	         * @type {Collection<import("../Feature.js").default>}
	         * @api
	         */
	        _this.features = features;
	        /**
	         * The coordinate of the drag event.
	         * @const
	         * @type {import("../coordinate.js").Coordinate}
	         * @api
	         */
	        _this.coordinate = coordinate;
	        /**
	         * The coordinate of the start position before translation started.
	         * @const
	         * @type {import("../coordinate.js").Coordinate}
	         * @api
	         */
	        _this.startCoordinate = startCoordinate;
	        /**
	         * Associated {@link module:ol/MapBrowserEvent}.
	         * @type {import("../MapBrowserEvent.js").default}
	         * @api
	         */
	        _this.mapBrowserEvent = mapBrowserEvent;
	        return _this;
	    }
	    return TranslateEvent;
	}(_Event2.default);
	exports.TranslateEvent = TranslateEvent;
	/**
	 * @classdesc
	 * Interaction for translating (moving) features.
	 *
	 * @fires TranslateEvent
	 * @api
	 */
	
	var Translate = /** @class */function (_super) {
	    __extends(Translate, _super);
	    /**
	     * @param {Options=} opt_options Options.
	     */
	    function Translate(opt_options) {
	        var _this = this;
	        var options = opt_options ? opt_options : {};
	        _this = _super.call(this, /** @type {import("./Pointer.js").Options} */options) || this;
	        /**
	         * The last position we translated to.
	         * @type {import("../coordinate.js").Coordinate}
	         * @private
	         */
	        _this.lastCoordinate_ = null;
	        /**
	         * The start position before translation started.
	         * @type {import("../coordinate.js").Coordinate}
	         * @private
	         */
	        _this.startCoordinate_ = null;
	        /**
	         * @type {Collection<import("../Feature.js").default>}
	         * @private
	         */
	        _this.features_ = options.features !== undefined ? options.features : null;
	        /** @type {function(import("../layer/Layer.js").default): boolean} */
	        var layerFilter;
	        if (options.layers) {
	            if (typeof options.layers === 'function') {
	                layerFilter = options.layers;
	            } else {
	                var layers_1 = options.layers;
	                layerFilter = function layerFilter(layer) {
	                    return (0, _array.includes)(layers_1, layer);
	                };
	            }
	        } else {
	            layerFilter = _functions.TRUE;
	        }
	        /**
	         * @private
	         * @type {function(import("../layer/Layer.js").default): boolean}
	         */
	        _this.layerFilter_ = layerFilter;
	        /**
	         * @private
	         * @type {FilterFunction}
	         */
	        _this.filter_ = options.filter ? options.filter : _functions.TRUE;
	        /**
	         * @private
	         * @type {number}
	         */
	        _this.hitTolerance_ = options.hitTolerance ? options.hitTolerance : 0;
	        /**
	         * @type {import("../Feature.js").default}
	         * @private
	         */
	        _this.lastFeature_ = null;
	        _this.addEventListener((0, _Object.getChangeEventType)(_Property2.default.ACTIVE), _this.handleActiveChanged_);
	        return _this;
	    }
	    /**
	     * @inheritDoc
	     */
	    Translate.prototype.handleDownEvent = function (event) {
	        this.lastFeature_ = this.featuresAtPixel_(event.pixel, event.map);
	        if (!this.lastCoordinate_ && this.lastFeature_) {
	            this.startCoordinate_ = event.coordinate;
	            this.lastCoordinate_ = event.coordinate;
	            this.handleMoveEvent(event);
	            var features = this.features_ || new _Collection2.default([this.lastFeature_]);
	            this.dispatchEvent(new TranslateEvent(TranslateEventType.TRANSLATESTART, features, event.coordinate, this.startCoordinate_, event));
	            return true;
	        }
	        return false;
	    };
	    /**
	     * @inheritDoc
	     */
	    Translate.prototype.handleUpEvent = function (event) {
	        if (this.lastCoordinate_) {
	            this.lastCoordinate_ = null;
	            this.handleMoveEvent(event);
	            var features = this.features_ || new _Collection2.default([this.lastFeature_]);
	            this.dispatchEvent(new TranslateEvent(TranslateEventType.TRANSLATEEND, features, event.coordinate, this.startCoordinate_, event));
	            // cleanup
	            this.startCoordinate_ = null;
	            return true;
	        }
	        return false;
	    };
	    /**
	     * @inheritDoc
	     */
	    Translate.prototype.handleDragEvent = function (event) {
	        if (this.lastCoordinate_) {
	            var newCoordinate = event.coordinate;
	            var deltaX_1 = newCoordinate[0] - this.lastCoordinate_[0];
	            var deltaY_1 = newCoordinate[1] - this.lastCoordinate_[1];
	            var features = this.features_ || new _Collection2.default([this.lastFeature_]);
	            features.forEach(function (feature) {
	                var geom = feature.getGeometry();
	                geom.translate(deltaX_1, deltaY_1);
	                feature.setGeometry(geom);
	            });
	            this.lastCoordinate_ = newCoordinate;
	            this.dispatchEvent(new TranslateEvent(TranslateEventType.TRANSLATING, features, newCoordinate, this.startCoordinate_, event));
	        }
	    };
	    /**
	     * @inheritDoc
	     */
	    Translate.prototype.handleMoveEvent = function (event) {
	        var elem = event.map.getViewport();
	        // Change the cursor to grab/grabbing if hovering any of the features managed
	        // by the interaction
	        if (this.featuresAtPixel_(event.pixel, event.map)) {
	            elem.classList.remove(this.lastCoordinate_ ? 'ol-grab' : 'ol-grabbing');
	            elem.classList.add(this.lastCoordinate_ ? 'ol-grabbing' : 'ol-grab');
	        } else {
	            elem.classList.remove('ol-grab', 'ol-grabbing');
	        }
	    };
	    /**
	     * Tests to see if the given coordinates intersects any of our selected
	     * features.
	     * @param {import("../pixel.js").Pixel} pixel Pixel coordinate to test for intersection.
	     * @param {import("../PluggableMap.js").default} map Map to test the intersection on.
	     * @return {import("../Feature.js").default} Returns the feature found at the specified pixel
	     * coordinates.
	     * @private
	     */
	    Translate.prototype.featuresAtPixel_ = function (pixel, map) {
	        return map.forEachFeatureAtPixel(pixel, function (feature, layer) {
	            if (this.filter_(feature, layer)) {
	                if (!this.features_ || (0, _array.includes)(this.features_.getArray(), feature)) {
	                    return feature;
	                }
	            }
	        }.bind(this), {
	            layerFilter: this.layerFilter_,
	            hitTolerance: this.hitTolerance_
	        });
	    };
	    /**
	     * Returns the Hit-detection tolerance.
	     * @returns {number} Hit tolerance in pixels.
	     * @api
	     */
	    Translate.prototype.getHitTolerance = function () {
	        return this.hitTolerance_;
	    };
	    /**
	     * Hit-detection tolerance. Pixels inside the radius around the given position
	     * will be checked for features.
	     * @param {number} hitTolerance Hit tolerance in pixels.
	     * @api
	     */
	    Translate.prototype.setHitTolerance = function (hitTolerance) {
	        this.hitTolerance_ = hitTolerance;
	    };
	    /**
	     * @inheritDoc
	     */
	    Translate.prototype.setMap = function (map) {
	        var oldMap = this.getMap();
	        _super.prototype.setMap.call(this, map);
	        this.updateState_(oldMap);
	    };
	    /**
	     * @private
	     */
	    Translate.prototype.handleActiveChanged_ = function () {
	        this.updateState_(null);
	    };
	    /**
	     * @param {import("../PluggableMap.js").default} oldMap Old map.
	     * @private
	     */
	    Translate.prototype.updateState_ = function (oldMap) {
	        var map = this.getMap();
	        var active = this.getActive();
	        if (!map || !active) {
	            map = map || oldMap;
	            if (map) {
	                var elem = map.getViewport();
	                elem.classList.remove('ol-grab', 'ol-grabbing');
	            }
	        }
	    };
	    return Translate;
	}(_Pointer2.default);
	exports.default = Translate;
	//# sourceMappingURL=Translate.js.map

/***/ }),
/* 618 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	
	var _Layer = __webpack_require__(126);
	
	var _Layer2 = _interopRequireDefault(_Layer);
	
	var _TileProperty = __webpack_require__(621);
	
	var _TileProperty2 = _interopRequireDefault(_TileProperty);
	
	var _obj = __webpack_require__(23);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var __extends = undefined && undefined.__extends || function () {
	    var _extendStatics = function extendStatics(d, b) {
	        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	            d.__proto__ = b;
	        } || function (d, b) {
	            for (var p in b) {
	                if (b.hasOwnProperty(p)) d[p] = b[p];
	            }
	        };
	        return _extendStatics(d, b);
	    };
	    return function (d, b) {
	        _extendStatics(d, b);
	        function __() {
	            this.constructor = d;
	        }
	        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	    };
	}();
	/**
	 * @module ol/layer/BaseTile
	 */
	
	/**
	 * @typedef {Object} Options
	 * @property {string} [className='ol-layer'] A CSS class name to set to the layer element.
	 * @property {number} [opacity=1] Opacity (0, 1).
	 * @property {boolean} [visible=true] Visibility.
	 * @property {import("../extent.js").Extent} [extent] The bounding extent for layer rendering.  The layer will not be
	 * rendered outside of this extent.
	 * @property {number} [zIndex] The z-index for layer rendering.  At rendering time, the layers
	 * will be ordered, first by Z-index and then by position. When `undefined`, a `zIndex` of 0 is assumed
	 * for layers that are added to the map's `layers` collection, or `Infinity` when the layer's `setMap()`
	 * method was used.
	 * @property {number} [minResolution] The minimum resolution (inclusive) at which this layer will be
	 * visible.
	 * @property {number} [maxResolution] The maximum resolution (exclusive) below which this layer will
	 * be visible.
	 * @property {number} [preload=0] Preload. Load low-resolution tiles up to `preload` levels. `0`
	 * means no preloading.
	 * @property {import("../source/Tile.js").default} [source] Source for this layer.
	 * @property {import("../PluggableMap.js").default} [map] Sets the layer as overlay on a map. The map will not manage
	 * this layer in its layers collection, and the layer will be rendered on top. This is useful for
	 * temporary layers. The standard way to add a layer to a map and have it managed by the map is to
	 * use {@link module:ol/Map#addLayer}.
	 * @property {boolean} [useInterimTilesOnError=true] Use interim tiles on error.
	 */
	/**
	 * @classdesc
	 * For layer sources that provide pre-rendered, tiled images in grids that are
	 * organized by zoom levels for specific resolutions.
	 * Note that any property set in the options is set as a {@link module:ol/Object~BaseObject}
	 * property on the layer object; for example, setting `title: 'My Title'` in the
	 * options means that `title` is observable, and has get/set accessors.
	 *
	 * @extends {Layer<import("../source/Tile.js").default>}
	 * @api
	 */
	var BaseTileLayer = /** @class */function (_super) {
	    __extends(BaseTileLayer, _super);
	    /**
	     * @param {Options=} opt_options Tile layer options.
	     */
	    function BaseTileLayer(opt_options) {
	        var _this = this;
	        var options = opt_options ? opt_options : {};
	        var baseOptions = (0, _obj.assign)({}, options);
	        delete baseOptions.preload;
	        delete baseOptions.useInterimTilesOnError;
	        _this = _super.call(this, baseOptions) || this;
	        _this.setPreload(options.preload !== undefined ? options.preload : 0);
	        _this.setUseInterimTilesOnError(options.useInterimTilesOnError !== undefined ? options.useInterimTilesOnError : true);
	        return _this;
	    }
	    /**
	    * Return the level as number to which we will preload tiles up to.
	    * @return {number} The level to preload tiles up to.
	    * @observable
	    * @api
	    */
	    BaseTileLayer.prototype.getPreload = function () {
	        return (/** @type {number} */this.get(_TileProperty2.default.PRELOAD)
	        );
	    };
	    /**
	    * Set the level as number to which we will preload tiles up to.
	    * @param {number} preload The level to preload tiles up to.
	    * @observable
	    * @api
	    */
	    BaseTileLayer.prototype.setPreload = function (preload) {
	        this.set(_TileProperty2.default.PRELOAD, preload);
	    };
	    /**
	    * Whether we use interim tiles on error.
	    * @return {boolean} Use interim tiles on error.
	    * @observable
	    * @api
	    */
	    BaseTileLayer.prototype.getUseInterimTilesOnError = function () {
	        return (/** @type {boolean} */this.get(_TileProperty2.default.USE_INTERIM_TILES_ON_ERROR)
	        );
	    };
	    /**
	    * Set whether we use interim tiles on error.
	    * @param {boolean} useInterimTilesOnError Use interim tiles on error.
	    * @observable
	    * @api
	    */
	    BaseTileLayer.prototype.setUseInterimTilesOnError = function (useInterimTilesOnError) {
	        this.set(_TileProperty2.default.USE_INTERIM_TILES_ON_ERROR, useInterimTilesOnError);
	    };
	    return BaseTileLayer;
	}(_Layer2.default);
	exports.default = BaseTileLayer;
	//# sourceMappingURL=BaseTile.js.map

/***/ }),
/* 619 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	
	var _Layer = __webpack_require__(126);
	
	var _Layer2 = _interopRequireDefault(_Layer);
	
	var _obj = __webpack_require__(23);
	
	var _Style = __webpack_require__(87);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var __extends = undefined && undefined.__extends || function () {
	  var _extendStatics = function extendStatics(d, b) {
	    _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	      d.__proto__ = b;
	    } || function (d, b) {
	      for (var p in b) {
	        if (b.hasOwnProperty(p)) d[p] = b[p];
	      }
	    };
	    return _extendStatics(d, b);
	  };
	  return function (d, b) {
	    _extendStatics(d, b);
	    function __() {
	      this.constructor = d;
	    }
	    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	  };
	}();
	/**
	 * @module ol/layer/BaseVector
	 */
	
	/**
	 * @typedef {Object} Options
	 * @property {string} [className='ol-layer'] A CSS class name to set to the layer element.
	 * @property {number} [opacity=1] Opacity (0, 1).
	 * @property {boolean} [visible=true] Visibility.
	 * @property {import("../extent.js").Extent} [extent] The bounding extent for layer rendering.  The layer will not be
	 * rendered outside of this extent.
	 * @property {number} [zIndex] The z-index for layer rendering.  At rendering time, the layers
	 * will be ordered, first by Z-index and then by position. When `undefined`, a `zIndex` of 0 is assumed
	 * for layers that are added to the map's `layers` collection, or `Infinity` when the layer's `setMap()`
	 * method was used.
	 * @property {number} [minResolution] The minimum resolution (inclusive) at which this layer will be
	 * visible.
	 * @property {number} [maxResolution] The maximum resolution (exclusive) below which this layer will
	 * be visible.
	 * @property {import("../render.js").OrderFunction} [renderOrder] Render order. Function to be used when sorting
	 * features before rendering. By default features are drawn in the order that they are created. Use
	 * `null` to avoid the sort, but get an undefined draw order.
	 * @property {number} [renderBuffer=100] The buffer in pixels around the viewport extent used by the
	 * renderer when getting features from the vector source for the rendering or hit-detection.
	 * Recommended value: the size of the largest symbol, line width or label.
	 * @property {import("../source/Vector.js").default} [source] Source.
	 * @property {import("../PluggableMap.js").default} [map] Sets the layer as overlay on a map. The map will not manage
	 * this layer in its layers collection, and the layer will be rendered on top. This is useful for
	 * temporary layers. The standard way to add a layer to a map and have it managed by the map is to
	 * use {@link module:ol/Map#addLayer}.
	 * @property {boolean} [declutter=false] Declutter images and text. Decluttering is applied to all
	 * image and text styles of all Vector and VectorTile layers that have set this to `true`. The priority
	 * is defined by the z-index of the layer, the `zIndex` of the style and the render order of features.
	 * Higher z-index means higher priority. Within the same z-index, a feature rendered before another has
	 * higher priority.
	 * @property {import("../style/Style.js").StyleLike} [style] Layer style. See
	 * {@link module:ol/style} for default style which will be used if this is not defined.
	 * @property {boolean} [updateWhileAnimating=false] When set to `true`, feature batches will
	 * be recreated during animations. This means that no vectors will be shown clipped, but the
	 * setting will have a performance impact for large amounts of vector data. When set to `false`,
	 * batches will be recreated when no animation is active.
	 * @property {boolean} [updateWhileInteracting=false] When set to `true`, feature batches will
	 * be recreated during interactions. See also `updateWhileAnimating`.
	 */
	/**
	 * @enum {string}
	 * @private
	 */
	var Property = {
	  RENDER_ORDER: 'renderOrder'
	};
	/**
	 * @classdesc
	 * Vector data that is rendered client-side.
	 * Note that any property set in the options is set as a {@link module:ol/Object~BaseObject}
	 * property on the layer object; for example, setting `title: 'My Title'` in the
	 * options means that `title` is observable, and has get/set accessors.
	 *
	 * @template {import("../source/Vector.js").default|import("../source/VectorTile.js").default} VectorSourceType
	 * @extends {Layer<VectorSourceType>}
	 * @api
	 */
	var BaseVectorLayer = /** @class */function (_super) {
	  __extends(BaseVectorLayer, _super);
	  /**
	   * @param {Options=} opt_options Options.
	   */
	  function BaseVectorLayer(opt_options) {
	    var _this = this;
	    var options = opt_options ? opt_options : {};
	    var baseOptions = (0, _obj.assign)({}, options);
	    delete baseOptions.style;
	    delete baseOptions.renderBuffer;
	    delete baseOptions.updateWhileAnimating;
	    delete baseOptions.updateWhileInteracting;
	    _this = _super.call(this, baseOptions) || this;
	    /**
	     * @private
	     * @type {boolean}
	     */
	    _this.declutter_ = options.declutter !== undefined ? options.declutter : false;
	    /**
	     * @type {number}
	     * @private
	     */
	    _this.renderBuffer_ = options.renderBuffer !== undefined ? options.renderBuffer : 100;
	    /**
	     * User provided style.
	     * @type {import("../style/Style.js").StyleLike}
	     * @private
	     */
	    _this.style_ = null;
	    /**
	     * Style function for use within the library.
	     * @type {import("../style/Style.js").StyleFunction|undefined}
	     * @private
	     */
	    _this.styleFunction_ = undefined;
	    _this.setStyle(options.style);
	    /**
	     * @type {boolean}
	     * @private
	     */
	    _this.updateWhileAnimating_ = options.updateWhileAnimating !== undefined ? options.updateWhileAnimating : false;
	    /**
	     * @type {boolean}
	     * @private
	     */
	    _this.updateWhileInteracting_ = options.updateWhileInteracting !== undefined ? options.updateWhileInteracting : false;
	    return _this;
	  }
	  /**
	   * @return {boolean} Declutter.
	   */
	  BaseVectorLayer.prototype.getDeclutter = function () {
	    return this.declutter_;
	  };
	  /**
	   * Get the topmost feature that intersects the given pixel on the viewport. Returns a promise
	   * that resolves with an array of features. The array will either contain the topmost feature
	   * when a hit was detected, or it will be empty.
	   *
	   * The hit detection algorithm used for this method is optimized for performance, but is less
	   * accurate than the one used in {@link import("../PluggableMap.js").default#getFeaturesAtPixel}: Text
	   * is not considered, and icons are only represented by their bounding box instead of the exact
	   * image.
	   *
	   * @param {import("../pixel.js").Pixel} pixel Pixel.
	   * @return {Promise<Array<import("../Feature").default>>} Promise that resolves with an array of features.
	   * @api
	   */
	  BaseVectorLayer.prototype.getFeatures = function (pixel) {
	    return _super.prototype.getFeatures.call(this, pixel);
	  };
	  /**
	   * @return {number|undefined} Render buffer.
	   */
	  BaseVectorLayer.prototype.getRenderBuffer = function () {
	    return this.renderBuffer_;
	  };
	  /**
	   * @return {function(import("../Feature.js").default, import("../Feature.js").default): number|null|undefined} Render
	   *     order.
	   */
	  BaseVectorLayer.prototype.getRenderOrder = function () {
	    return (
	      /** @type {import("../render.js").OrderFunction|null|undefined} */this.get(Property.RENDER_ORDER)
	    );
	  };
	  /**
	   * Get the style for features.  This returns whatever was passed to the `style`
	   * option at construction or to the `setStyle` method.
	   * @return {import("../style/Style.js").StyleLike}
	   *     Layer style.
	   * @api
	   */
	  BaseVectorLayer.prototype.getStyle = function () {
	    return this.style_;
	  };
	  /**
	   * Get the style function.
	   * @return {import("../style/Style.js").StyleFunction|undefined} Layer style function.
	   * @api
	   */
	  BaseVectorLayer.prototype.getStyleFunction = function () {
	    return this.styleFunction_;
	  };
	  /**
	   * @return {boolean} Whether the rendered layer should be updated while
	   *     animating.
	   */
	  BaseVectorLayer.prototype.getUpdateWhileAnimating = function () {
	    return this.updateWhileAnimating_;
	  };
	  /**
	   * @return {boolean} Whether the rendered layer should be updated while
	   *     interacting.
	   */
	  BaseVectorLayer.prototype.getUpdateWhileInteracting = function () {
	    return this.updateWhileInteracting_;
	  };
	  /**
	   * @param {import("../render.js").OrderFunction|null|undefined} renderOrder
	   *     Render order.
	   */
	  BaseVectorLayer.prototype.setRenderOrder = function (renderOrder) {
	    this.set(Property.RENDER_ORDER, renderOrder);
	  };
	  /**
	   * Set the style for features.  This can be a single style object, an array
	   * of styles, or a function that takes a feature and resolution and returns
	   * an array of styles. If it is `undefined` the default style is used. If
	   * it is `null` the layer has no style (a `null` style), so only features
	   * that have their own styles will be rendered in the layer. See
	   * {@link module:ol/style} for information on the default style.
	   * @param {import("../style/Style.js").default|Array<import("../style/Style.js").default>|import("../style/Style.js").StyleFunction|null|undefined} style Layer style.
	   * @api
	   */
	  BaseVectorLayer.prototype.setStyle = function (style) {
	    this.style_ = style !== undefined ? style : _Style.createDefaultStyle;
	    this.styleFunction_ = style === null ? undefined : (0, _Style.toFunction)(this.style_);
	    this.changed();
	  };
	  return BaseVectorLayer;
	}(_Layer2.default);
	exports.default = BaseVectorLayer;
	//# sourceMappingURL=BaseVector.js.map

/***/ }),
/* 620 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	
	var _BaseTile = __webpack_require__(618);
	
	var _BaseTile2 = _interopRequireDefault(_BaseTile);
	
	var _TileLayer = __webpack_require__(639);
	
	var _TileLayer2 = _interopRequireDefault(_TileLayer);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var __extends = undefined && undefined.__extends || function () {
	    var _extendStatics = function extendStatics(d, b) {
	        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	            d.__proto__ = b;
	        } || function (d, b) {
	            for (var p in b) {
	                if (b.hasOwnProperty(p)) d[p] = b[p];
	            }
	        };
	        return _extendStatics(d, b);
	    };
	    return function (d, b) {
	        _extendStatics(d, b);
	        function __() {
	            this.constructor = d;
	        }
	        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	    };
	}();
	/**
	 * @module ol/layer/Tile
	 */
	
	/**
	 * @classdesc
	 * For layer sources that provide pre-rendered, tiled images in grids that are
	 * organized by zoom levels for specific resolutions.
	 * Note that any property set in the options is set as a {@link module:ol/Object~BaseObject}
	 * property on the layer object; for example, setting `title: 'My Title'` in the
	 * options means that `title` is observable, and has get/set accessors.
	 *
	 * @api
	 */
	var TileLayer = /** @class */function (_super) {
	    __extends(TileLayer, _super);
	    /**
	     * @param {import("./BaseTile.js").Options=} opt_options Tile layer options.
	     */
	    function TileLayer(opt_options) {
	        return _super.call(this, opt_options) || this;
	    }
	    /**
	     * Create a renderer for this layer.
	     * @return {import("../renderer/Layer.js").default} A layer renderer.
	     * @protected
	     */
	    TileLayer.prototype.createRenderer = function () {
	        return new _TileLayer2.default(this);
	    };
	    return TileLayer;
	}(_BaseTile2.default);
	exports.default = TileLayer;
	//# sourceMappingURL=Tile.js.map

/***/ }),
/* 621 */
/***/ (function(module, exports) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	/**
	 * @module ol/layer/TileProperty
	 */
	/**
	 * @enum {string}
	 */
	exports.default = {
	  PRELOAD: 'preload',
	  USE_INTERIM_TILES_ON_ERROR: 'useInterimTilesOnError'
	};
	//# sourceMappingURL=TileProperty.js.map

/***/ }),
/* 622 */
/***/ (function(module, exports) {

	"use strict";
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	exports.all = all;
	exports.bbox = bbox;
	exports.tile = tile;
	/**
	 * @module ol/loadingstrategy
	 */
	/**
	 * Strategy function for loading all features with a single request.
	 * @param {import("./extent.js").Extent} extent Extent.
	 * @param {number} resolution Resolution.
	 * @return {Array<import("./extent.js").Extent>} Extents.
	 * @api
	 */
	function all(extent, resolution) {
	    return [[-Infinity, -Infinity, Infinity, Infinity]];
	}
	/**
	 * Strategy function for loading features based on the view's extent and
	 * resolution.
	 * @param {import("./extent.js").Extent} extent Extent.
	 * @param {number} resolution Resolution.
	 * @return {Array<import("./extent.js").Extent>} Extents.
	 * @api
	 */
	function bbox(extent, resolution) {
	    return [extent];
	}
	/**
	 * Creates a strategy function for loading features based on a tile grid.
	 * @param {import("./tilegrid/TileGrid.js").default} tileGrid Tile grid.
	 * @return {function(import("./extent.js").Extent, number): Array<import("./extent.js").Extent>} Loading strategy.
	 * @api
	 */
	function tile(tileGrid) {
	    return (
	        /**
	         * @param {import("./extent.js").Extent} extent Extent.
	         * @param {number} resolution Resolution.
	         * @return {Array<import("./extent.js").Extent>} Extents.
	         */
	        function (extent, resolution) {
	            var z = tileGrid.getZForResolution(resolution);
	            var tileRange = tileGrid.getTileRangeForExtentAndZ(extent, z);
	            /** @type {Array<import("./extent.js").Extent>} */
	            var extents = [];
	            /** @type {import("./tilecoord.js").TileCoord} */
	            var tileCoord = [z, 0, 0];
	            for (tileCoord[1] = tileRange.minX; tileCoord[1] <= tileRange.maxX; ++tileCoord[1]) {
	                for (tileCoord[2] = tileRange.minY; tileCoord[2] <= tileRange.maxY; ++tileCoord[2]) {
	                    extents.push(tileGrid.getTileCoordExtent(tileCoord));
	                }
	            }
	            return extents;
	        }
	    );
	}
	//# sourceMappingURL=loadingstrategy.js.map

/***/ }),
/* 623 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	exports.PROJECTIONS = exports.WORLD_EXTENT = exports.EXTENT = exports.HALF_SIZE = exports.RADIUS = undefined;
	exports.fromEPSG4326 = fromEPSG4326;
	exports.toEPSG4326 = toEPSG4326;
	
	var _math = __webpack_require__(19);
	
	var _Projection = __webpack_require__(176);
	
	var _Projection2 = _interopRequireDefault(_Projection);
	
	var _Units = __webpack_require__(65);
	
	var _Units2 = _interopRequireDefault(_Units);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var __extends = undefined && undefined.__extends || function () {
	    var _extendStatics = function extendStatics(d, b) {
	        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	            d.__proto__ = b;
	        } || function (d, b) {
	            for (var p in b) {
	                if (b.hasOwnProperty(p)) d[p] = b[p];
	            }
	        };
	        return _extendStatics(d, b);
	    };
	    return function (d, b) {
	        _extendStatics(d, b);
	        function __() {
	            this.constructor = d;
	        }
	        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	    };
	}();
	/**
	 * @module ol/proj/epsg3857
	 */
	
	/**
	 * Radius of WGS84 sphere
	 *
	 * @const
	 * @type {number}
	 */
	var RADIUS = exports.RADIUS = 6378137;
	/**
	 * @const
	 * @type {number}
	 */
	var HALF_SIZE = exports.HALF_SIZE = Math.PI * RADIUS;
	/**
	 * @const
	 * @type {import("../extent.js").Extent}
	 */
	var EXTENT = exports.EXTENT = [-HALF_SIZE, -HALF_SIZE, HALF_SIZE, HALF_SIZE];
	/**
	 * @const
	 * @type {import("../extent.js").Extent}
	 */
	var WORLD_EXTENT = exports.WORLD_EXTENT = [-180, -85, 180, 85];
	/**
	 * @classdesc
	 * Projection object for web/spherical Mercator (EPSG:3857).
	 */
	var EPSG3857Projection = /** @class */function (_super) {
	    __extends(EPSG3857Projection, _super);
	    /**
	     * @param {string} code Code.
	     */
	    function EPSG3857Projection(code) {
	        return _super.call(this, {
	            code: code,
	            units: _Units2.default.METERS,
	            extent: EXTENT,
	            global: true,
	            worldExtent: WORLD_EXTENT,
	            getPointResolution: function getPointResolution(resolution, point) {
	                return resolution / (0, _math.cosh)(point[1] / RADIUS);
	            }
	        }) || this;
	    }
	    return EPSG3857Projection;
	}(_Projection2.default);
	/**
	 * Projections equal to EPSG:3857.
	 *
	 * @const
	 * @type {Array<import("./Projection.js").default>}
	 */
	var PROJECTIONS = exports.PROJECTIONS = [new EPSG3857Projection('EPSG:3857'), new EPSG3857Projection('EPSG:102100'), new EPSG3857Projection('EPSG:102113'), new EPSG3857Projection('EPSG:900913'), new EPSG3857Projection('urn:ogc:def:crs:EPSG:6.18:3:3857'), new EPSG3857Projection('urn:ogc:def:crs:EPSG::3857'), new EPSG3857Projection('http://www.opengis.net/gml/srs/epsg.xml#3857')];
	/**
	 * Transformation from EPSG:4326 to EPSG:3857.
	 *
	 * @param {Array<number>} input Input array of coordinate values.
	 * @param {Array<number>=} opt_output Output array of coordinate values.
	 * @param {number=} opt_dimension Dimension (default is `2`).
	 * @return {Array<number>} Output array of coordinate values.
	 */
	function fromEPSG4326(input, opt_output, opt_dimension) {
	    var length = input.length;
	    var dimension = opt_dimension > 1 ? opt_dimension : 2;
	    var output = opt_output;
	    if (output === undefined) {
	        if (dimension > 2) {
	            // preserve values beyond second dimension
	            output = input.slice();
	        } else {
	            output = new Array(length);
	        }
	    }
	    var halfSize = HALF_SIZE;
	    for (var i = 0; i < length; i += dimension) {
	        output[i] = halfSize * input[i] / 180;
	        var y = RADIUS * Math.log(Math.tan(Math.PI * (+input[i + 1] + 90) / 360));
	        if (y > halfSize) {
	            y = halfSize;
	        } else if (y < -halfSize) {
	            y = -halfSize;
	        }
	        output[i + 1] = y;
	    }
	    return output;
	}
	/**
	 * Transformation from EPSG:3857 to EPSG:4326.
	 *
	 * @param {Array<number>} input Input array of coordinate values.
	 * @param {Array<number>=} opt_output Output array of coordinate values.
	 * @param {number=} opt_dimension Dimension (default is `2`).
	 * @return {Array<number>} Output array of coordinate values.
	 */
	function toEPSG4326(input, opt_output, opt_dimension) {
	    var length = input.length;
	    var dimension = opt_dimension > 1 ? opt_dimension : 2;
	    var output = opt_output;
	    if (output === undefined) {
	        if (dimension > 2) {
	            // preserve values beyond second dimension
	            output = input.slice();
	        } else {
	            output = new Array(length);
	        }
	    }
	    for (var i = 0; i < length; i += dimension) {
	        output[i] = 180 * input[i] / HALF_SIZE;
	        output[i + 1] = 360 * Math.atan(Math.exp(input[i + 1] / RADIUS)) / Math.PI - 90;
	    }
	    return output;
	}
	//# sourceMappingURL=epsg3857.js.map

/***/ }),
/* 624 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	exports.PROJECTIONS = exports.METERS_PER_UNIT = exports.EXTENT = exports.RADIUS = undefined;
	
	var _Projection = __webpack_require__(176);
	
	var _Projection2 = _interopRequireDefault(_Projection);
	
	var _Units = __webpack_require__(65);
	
	var _Units2 = _interopRequireDefault(_Units);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var __extends = undefined && undefined.__extends || function () {
	    var _extendStatics = function extendStatics(d, b) {
	        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	            d.__proto__ = b;
	        } || function (d, b) {
	            for (var p in b) {
	                if (b.hasOwnProperty(p)) d[p] = b[p];
	            }
	        };
	        return _extendStatics(d, b);
	    };
	    return function (d, b) {
	        _extendStatics(d, b);
	        function __() {
	            this.constructor = d;
	        }
	        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	    };
	}();
	/**
	 * @module ol/proj/epsg4326
	 */
	
	/**
	 * Semi-major radius of the WGS84 ellipsoid.
	 *
	 * @const
	 * @type {number}
	 */
	var RADIUS = exports.RADIUS = 6378137;
	/**
	 * Extent of the EPSG:4326 projection which is the whole world.
	 *
	 * @const
	 * @type {import("../extent.js").Extent}
	 */
	var EXTENT = exports.EXTENT = [-180, -90, 180, 90];
	/**
	 * @const
	 * @type {number}
	 */
	var METERS_PER_UNIT = exports.METERS_PER_UNIT = Math.PI * RADIUS / 180;
	/**
	 * @classdesc
	 * Projection object for WGS84 geographic coordinates (EPSG:4326).
	 *
	 * Note that OpenLayers does not strictly comply with the EPSG definition.
	 * The EPSG registry defines 4326 as a CRS for Latitude,Longitude (y,x).
	 * OpenLayers treats EPSG:4326 as a pseudo-projection, with x,y coordinates.
	 */
	var EPSG4326Projection = /** @class */function (_super) {
	    __extends(EPSG4326Projection, _super);
	    /**
	     * @param {string} code Code.
	     * @param {string=} opt_axisOrientation Axis orientation.
	     */
	    function EPSG4326Projection(code, opt_axisOrientation) {
	        return _super.call(this, {
	            code: code,
	            units: _Units2.default.DEGREES,
	            extent: EXTENT,
	            axisOrientation: opt_axisOrientation,
	            global: true,
	            metersPerUnit: METERS_PER_UNIT,
	            worldExtent: EXTENT
	        }) || this;
	    }
	    return EPSG4326Projection;
	}(_Projection2.default);
	/**
	 * Projections equal to EPSG:4326.
	 *
	 * @const
	 * @type {Array<import("./Projection.js").default>}
	 */
	var PROJECTIONS = exports.PROJECTIONS = [new EPSG4326Projection('CRS:84'), new EPSG4326Projection('EPSG:4326', 'neu'), new EPSG4326Projection('urn:ogc:def:crs:EPSG::4326', 'neu'), new EPSG4326Projection('urn:ogc:def:crs:EPSG:6.6:4326', 'neu'), new EPSG4326Projection('urn:ogc:def:crs:OGC:1.3:CRS84'), new EPSG4326Projection('urn:ogc:def:crs:OGC:2:84'), new EPSG4326Projection('http://www.opengis.net/gml/srs/epsg.xml#4326', 'neu'), new EPSG4326Projection('urn:x-ogc:def:crs:EPSG:4326', 'neu')];
	//# sourceMappingURL=epsg4326.js.map

/***/ }),
/* 625 */
/***/ (function(module, exports) {

	"use strict";
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	exports.clear = clear;
	exports.get = get;
	exports.add = add;
	/**
	 * @module ol/proj/projections
	 */
	/**
	 * @type {Object<string, import("./Projection.js").default>}
	 */
	var cache = {};
	/**
	 * Clear the projections cache.
	 */
	function clear() {
	  cache = {};
	}
	/**
	 * Get a cached projection by code.
	 * @param {string} code The code for the projection.
	 * @return {import("./Projection.js").default} The projection (if cached).
	 */
	function get(code) {
	  return cache[code] || null;
	}
	/**
	 * Add a projection to the cache.
	 * @param {string} code The projection code.
	 * @param {import("./Projection.js").default} projection The projection to cache.
	 */
	function add(code, projection) {
	  cache[code] = projection;
	}
	//# sourceMappingURL=projections.js.map

/***/ }),
/* 626 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	exports.clear = clear;
	exports.add = add;
	exports.remove = remove;
	exports.get = get;
	
	var _obj = __webpack_require__(23);
	
	/**
	 * @private
	 * @type {!Object<string, Object<string, import("../proj.js").TransformFunction>>}
	 */
	var transforms = {};
	/**
	 * Clear the transform cache.
	 */
	/**
	 * @module ol/proj/transforms
	 */
	function clear() {
	    transforms = {};
	}
	/**
	 * Registers a conversion function to convert coordinates from the source
	 * projection to the destination projection.
	 *
	 * @param {import("./Projection.js").default} source Source.
	 * @param {import("./Projection.js").default} destination Destination.
	 * @param {import("../proj.js").TransformFunction} transformFn Transform.
	 */
	function add(source, destination, transformFn) {
	    var sourceCode = source.getCode();
	    var destinationCode = destination.getCode();
	    if (!(sourceCode in transforms)) {
	        transforms[sourceCode] = {};
	    }
	    transforms[sourceCode][destinationCode] = transformFn;
	}
	/**
	 * Unregisters the conversion function to convert coordinates from the source
	 * projection to the destination projection.  This method is used to clean up
	 * cached transforms during testing.
	 *
	 * @param {import("./Projection.js").default} source Source projection.
	 * @param {import("./Projection.js").default} destination Destination projection.
	 * @return {import("../proj.js").TransformFunction} transformFn The unregistered transform.
	 */
	function remove(source, destination) {
	    var sourceCode = source.getCode();
	    var destinationCode = destination.getCode();
	    var transform = transforms[sourceCode][destinationCode];
	    delete transforms[sourceCode][destinationCode];
	    if ((0, _obj.isEmpty)(transforms[sourceCode])) {
	        delete transforms[sourceCode];
	    }
	    return transform;
	}
	/**
	 * Get a transform given a source code and a destination code.
	 * @param {string} sourceCode The code for the source projection.
	 * @param {string} destinationCode The code for the destination projection.
	 * @return {import("../proj.js").TransformFunction|undefined} The transform function (if found).
	 */
	function get(sourceCode, destinationCode) {
	    var transform;
	    if (sourceCode in transforms && destinationCode in transforms[sourceCode]) {
	        transform = transforms[sourceCode][destinationCode];
	    }
	    return transform;
	}
	//# sourceMappingURL=transforms.js.map

/***/ }),
/* 627 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	exports.toContext = toContext;
	exports.getVectorContext = getVectorContext;
	exports.getRenderPixel = getRenderPixel;
	exports.renderDeclutterItems = renderDeclutterItems;
	
	var _has = __webpack_require__(105);
	
	var _transform = __webpack_require__(48);
	
	var _Immediate = __webpack_require__(290);
	
	var _Immediate2 = _interopRequireDefault(_Immediate);
	
	var _vector = __webpack_require__(294);
	
	var _proj = __webpack_require__(16);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	/**
	 * @typedef {Object} State
	 * @property {CanvasRenderingContext2D} context Canvas context that the layer is being rendered to.
	 * @property {import("./Feature.js").FeatureLike} feature
	 * @property {import("./geom/SimpleGeometry.js").default} geometry
	 * @property {number} pixelRatio Pixel ratio used by the layer renderer.
	 * @property {number} resolution Resolution that the render batch was created and optimized for.
	 * This is not the view's resolution that is being rendered.
	 * @property {number} rotation Rotation of the rendered layer in radians.
	 */
	/**
	 * A function to be used when sorting features before rendering.
	 * It takes two instances of {@link module:ol/Feature} or
	 * {@link module:ol/render/Feature} and returns a `{number}`.
	 *
	 * @typedef {function(import("./Feature.js").FeatureLike, import("./Feature.js").FeatureLike):number} OrderFunction
	 */
	/**
	 * @typedef {Object} ToContextOptions
	 * @property {import("./size.js").Size} [size] Desired size of the canvas in css
	 * pixels. When provided, both canvas and css size will be set according to the
	 * `pixelRatio`. If not provided, the current canvas and css sizes will not be
	 * altered.
	 * @property {number} [pixelRatio=window.devicePixelRatio] Pixel ratio (canvas
	 * pixel to css pixel ratio) for the canvas.
	 */
	/**
	 * Binds a Canvas Immediate API to a canvas context, to allow drawing geometries
	 * to the context's canvas.
	 *
	 * The units for geometry coordinates are css pixels relative to the top left
	 * corner of the canvas element.
	 * ```js
	 * import {toContext} from 'ol/render';
	 * import Fill from 'ol/style/Fill';
	 * import Polygon from 'ol/geom/Polygon';
	 *
	 * var canvas = document.createElement('canvas');
	 * var render = toContext(canvas.getContext('2d'),
	 *     { size: [100, 100] });
	 * render.setFillStrokeStyle(new Fill({ color: blue }));
	 * render.drawPolygon(
	 *     new Polygon([[[0, 0], [100, 100], [100, 0], [0, 0]]]));
	 * ```
	 *
	 * @param {CanvasRenderingContext2D} context Canvas context.
	 * @param {ToContextOptions=} opt_options Options.
	 * @return {CanvasImmediateRenderer} Canvas Immediate.
	 * @api
	 */
	function toContext(context, opt_options) {
	    var canvas = context.canvas;
	    var options = opt_options ? opt_options : {};
	    var pixelRatio = options.pixelRatio || _has.DEVICE_PIXEL_RATIO;
	    var size = options.size;
	    if (size) {
	        canvas.width = size[0] * pixelRatio;
	        canvas.height = size[1] * pixelRatio;
	        canvas.style.width = size[0] + 'px';
	        canvas.style.height = size[1] + 'px';
	    }
	    var extent = [0, 0, canvas.width, canvas.height];
	    var transform = (0, _transform.scale)((0, _transform.create)(), pixelRatio, pixelRatio);
	    return new _Immediate2.default(context, pixelRatio, extent, transform, 0);
	}
	/**
	 * Gets a vector context for drawing to the event's canvas.
	 * @param {import("./render/Event.js").default} event Render event.
	 * @returns {CanvasImmediateRenderer} Vector context.
	 * @api
	 */
	/**
	 * @module ol/render
	 */
	function getVectorContext(event) {
	    var frameState = event.frameState;
	    var transform = (0, _transform.multiply)(event.inversePixelTransform.slice(), frameState.coordinateToPixelTransform);
	    var squaredTolerance = (0, _vector.getSquaredTolerance)(frameState.viewState.resolution, frameState.pixelRatio);
	    var userTransform;
	    var userProjection = (0, _proj.getUserProjection)();
	    if (userProjection) {
	        userTransform = (0, _proj.getTransformFromProjections)(userProjection, frameState.viewState.projection);
	    }
	    return new _Immediate2.default(event.context, frameState.pixelRatio, frameState.extent, transform, frameState.viewState.rotation, squaredTolerance, userTransform);
	}
	/**
	 * Gets the pixel of the event's canvas context from the map viewport's CSS pixel.
	 * @param {import("./render/Event.js").default} event Render event.
	 * @param {import("./pixel.js").Pixel} pixel CSS pixel relative to the top-left
	 * corner of the map viewport.
	 * @returns {import("./pixel.js").Pixel} Pixel on the event's canvas context.
	 * @api
	 */
	function getRenderPixel(event, pixel) {
	    var result = pixel.slice(0);
	    (0, _transform.apply)(event.inversePixelTransform.slice(), result);
	    return result;
	}
	/**
	 * @param {import("./PluggableMap.js").FrameState} frameState Frame state.
	 * @param {?} declutterTree Declutter tree.
	 * @returns {?} Declutter tree.
	 */
	function renderDeclutterItems(frameState, declutterTree) {
	    if (declutterTree) {
	        declutterTree.clear();
	    }
	    var items = frameState.declutterItems;
	    for (var z = items.length - 1; z >= 0; --z) {
	        var item = items[z];
	        var zIndexItems = item.items;
	        for (var i = 0, ii = zIndexItems.length; i < ii; i += 3) {
	            declutterTree = zIndexItems[i].renderDeclutter(zIndexItems[i + 1], zIndexItems[i + 2], item.opacity, declutterTree);
	        }
	    }
	    items.length = 0;
	    return declutterTree;
	}
	//# sourceMappingURL=render.js.map

/***/ }),
/* 628 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	
	var _Disposable = __webpack_require__(122);
	
	var _Disposable2 = _interopRequireDefault(_Disposable);
	
	var _Polygon = __webpack_require__(57);
	
	var _Polygon2 = _interopRequireDefault(_Polygon);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	/**
	 * @module ol/render/Box
	 */
	var __extends = undefined && undefined.__extends || function () {
	    var _extendStatics = function extendStatics(d, b) {
	        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	            d.__proto__ = b;
	        } || function (d, b) {
	            for (var p in b) {
	                if (b.hasOwnProperty(p)) d[p] = b[p];
	            }
	        };
	        return _extendStatics(d, b);
	    };
	    return function (d, b) {
	        _extendStatics(d, b);
	        function __() {
	            this.constructor = d;
	        }
	        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	    };
	}();
	
	var RenderBox = /** @class */function (_super) {
	    __extends(RenderBox, _super);
	    /**
	     * @param {string} className CSS class name.
	     */
	    function RenderBox(className) {
	        var _this = _super.call(this) || this;
	        /**
	         * @type {import("../geom/Polygon.js").default}
	         * @private
	         */
	        _this.geometry_ = null;
	        /**
	         * @type {HTMLDivElement}
	         * @private
	         */
	        _this.element_ = document.createElement('div');
	        _this.element_.style.position = 'absolute';
	        _this.element_.className = 'ol-box ' + className;
	        /**
	         * @private
	         * @type {import("../PluggableMap.js").default}
	         */
	        _this.map_ = null;
	        /**
	         * @private
	         * @type {import("../pixel.js").Pixel}
	         */
	        _this.startPixel_ = null;
	        /**
	         * @private
	         * @type {import("../pixel.js").Pixel}
	         */
	        _this.endPixel_ = null;
	        return _this;
	    }
	    /**
	     * @inheritDoc
	     */
	    RenderBox.prototype.disposeInternal = function () {
	        this.setMap(null);
	    };
	    /**
	     * @private
	     */
	    RenderBox.prototype.render_ = function () {
	        var startPixel = this.startPixel_;
	        var endPixel = this.endPixel_;
	        var px = 'px';
	        var style = this.element_.style;
	        style.left = Math.min(startPixel[0], endPixel[0]) + px;
	        style.top = Math.min(startPixel[1], endPixel[1]) + px;
	        style.width = Math.abs(endPixel[0] - startPixel[0]) + px;
	        style.height = Math.abs(endPixel[1] - startPixel[1]) + px;
	    };
	    /**
	     * @param {import("../PluggableMap.js").default} map Map.
	     */
	    RenderBox.prototype.setMap = function (map) {
	        if (this.map_) {
	            this.map_.getOverlayContainer().removeChild(this.element_);
	            var style = this.element_.style;
	            style.left = 'inherit';
	            style.top = 'inherit';
	            style.width = 'inherit';
	            style.height = 'inherit';
	        }
	        this.map_ = map;
	        if (this.map_) {
	            this.map_.getOverlayContainer().appendChild(this.element_);
	        }
	    };
	    /**
	     * @param {import("../pixel.js").Pixel} startPixel Start pixel.
	     * @param {import("../pixel.js").Pixel} endPixel End pixel.
	     */
	    RenderBox.prototype.setPixels = function (startPixel, endPixel) {
	        this.startPixel_ = startPixel;
	        this.endPixel_ = endPixel;
	        this.createOrUpdateGeometry();
	        this.render_();
	    };
	    /**
	     * Creates or updates the cached geometry.
	     */
	    RenderBox.prototype.createOrUpdateGeometry = function () {
	        var startPixel = this.startPixel_;
	        var endPixel = this.endPixel_;
	        var pixels = [startPixel, [startPixel[0], endPixel[1]], endPixel, [endPixel[0], startPixel[1]]];
	        var coordinates = pixels.map(this.map_.getCoordinateFromPixelInternal, this.map_);
	        // close the polygon
	        coordinates[4] = coordinates[0].slice();
	        if (!this.geometry_) {
	            this.geometry_ = new _Polygon2.default([coordinates]);
	        } else {
	            this.geometry_.setCoordinates([coordinates]);
	        }
	    };
	    /**
	     * @return {import("../geom/Polygon.js").default} Geometry.
	     */
	    RenderBox.prototype.getGeometry = function () {
	        return this.geometry_;
	    };
	    return RenderBox;
	}(_Disposable2.default);
	exports.default = RenderBox;
	//# sourceMappingURL=Box.js.map

/***/ }),
/* 629 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	
	var _extent = __webpack_require__(4);
	
	var _Builder = __webpack_require__(127);
	
	var _Builder2 = _interopRequireDefault(_Builder);
	
	var _ImageBuilder = __webpack_require__(632);
	
	var _ImageBuilder2 = _interopRequireDefault(_ImageBuilder);
	
	var _LineStringBuilder = __webpack_require__(634);
	
	var _LineStringBuilder2 = _interopRequireDefault(_LineStringBuilder);
	
	var _PolygonBuilder = __webpack_require__(635);
	
	var _PolygonBuilder2 = _interopRequireDefault(_PolygonBuilder);
	
	var _TextBuilder = __webpack_require__(291);
	
	var _TextBuilder2 = _interopRequireDefault(_TextBuilder);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	/**
	 * @type {Object<import("./BuilderType").default, typeof Builder>}
	 */
	/**
	 * @module ol/render/canvas/BuilderGroup
	 */
	var BATCH_CONSTRUCTORS = {
	  'Circle': _PolygonBuilder2.default,
	  'Default': _Builder2.default,
	  'Image': _ImageBuilder2.default,
	  'LineString': _LineStringBuilder2.default,
	  'Polygon': _PolygonBuilder2.default,
	  'Text': _TextBuilder2.default
	};
	var BuilderGroup = /** @class */function () {
	  /**
	   * @param {number} tolerance Tolerance.
	   * @param {import("../../extent.js").Extent} maxExtent Max extent.
	   * @param {number} resolution Resolution.
	   * @param {number} pixelRatio Pixel ratio.
	   * @param {boolean} declutter Decluttering enabled.
	   */
	  function BuilderGroup(tolerance, maxExtent, resolution, pixelRatio, declutter) {
	    /**
	     * @type {boolean}
	     * @private
	     */
	    this.declutter_ = declutter;
	    /**
	     * @type {import("../canvas.js").DeclutterGroups}
	     * @private
	     */
	    this.declutterGroups_ = null;
	    /**
	     * @private
	     * @type {number}
	     */
	    this.tolerance_ = tolerance;
	    /**
	     * @private
	     * @type {import("../../extent.js").Extent}
	     */
	    this.maxExtent_ = maxExtent;
	    /**
	     * @private
	     * @type {number}
	     */
	    this.pixelRatio_ = pixelRatio;
	    /**
	     * @private
	     * @type {number}
	     */
	    this.resolution_ = resolution;
	    /**
	     * @private
	     * @type {!Object<string, !Object<import("./BuilderType").default, Builder>>}
	     */
	    this.buildersByZIndex_ = {};
	  }
	  /**
	   * @param {boolean} group Group with previous builder.
	   * @return {import("../canvas").DeclutterGroups} The resulting instruction groups.
	   */
	  BuilderGroup.prototype.addDeclutter = function (group) {
	    var declutter = null;
	    if (this.declutter_) {
	      if (group) {
	        declutter = this.declutterGroups_;
	        /** @type {number} */declutter[0][4]++;
	      } else {
	        declutter = [(0, _extent.createEmpty)()];
	        this.declutterGroups_ = declutter;
	        declutter[0].push(1);
	      }
	    }
	    return declutter;
	  };
	  /**
	   * @return {!Object<string, !Object<import("./BuilderType").default, import("./Builder.js").SerializableInstructions>>} The serializable instructions
	   */
	  BuilderGroup.prototype.finish = function () {
	    var builderInstructions = {};
	    for (var zKey in this.buildersByZIndex_) {
	      builderInstructions[zKey] = builderInstructions[zKey] || {};
	      var builders = this.buildersByZIndex_[zKey];
	      for (var builderKey in builders) {
	        var builderInstruction = builders[builderKey].finish();
	        builderInstructions[zKey][builderKey] = builderInstruction;
	      }
	    }
	    return builderInstructions;
	  };
	  /**
	   * @param {number|undefined} zIndex Z index.
	   * @param {import("./BuilderType.js").default} builderType Replay type.
	   * @return {import("../VectorContext.js").default} Replay.
	   */
	  BuilderGroup.prototype.getBuilder = function (zIndex, builderType) {
	    var zIndexKey = zIndex !== undefined ? zIndex.toString() : '0';
	    var replays = this.buildersByZIndex_[zIndexKey];
	    if (replays === undefined) {
	      replays = {};
	      this.buildersByZIndex_[zIndexKey] = replays;
	    }
	    var replay = replays[builderType];
	    if (replay === undefined) {
	      var Constructor = BATCH_CONSTRUCTORS[builderType];
	      replay = new Constructor(this.tolerance_, this.maxExtent_, this.resolution_, this.pixelRatio_);
	      replays[builderType] = replay;
	    }
	    return replay;
	  };
	  return BuilderGroup;
	}();
	exports.default = BuilderGroup;
	//# sourceMappingURL=BuilderGroup.js.map

/***/ }),
/* 630 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	
	var _array = __webpack_require__(18);
	
	var _extent = __webpack_require__(4);
	
	var _length = __webpack_require__(279);
	
	var _textpath = __webpack_require__(600);
	
	var _transform = __webpack_require__(104);
	
	var _canvas = __webpack_require__(74);
	
	var _Instruction = __webpack_require__(106);
	
	var _Instruction2 = _interopRequireDefault(_Instruction);
	
	var _TextBuilder = __webpack_require__(291);
	
	var _transform2 = __webpack_require__(48);
	
	var _dom = __webpack_require__(34);
	
	var _Disposable = __webpack_require__(122);
	
	var _Disposable2 = _interopRequireDefault(_Disposable);
	
	var _rbush = __webpack_require__(514);
	
	var _rbush2 = _interopRequireDefault(_rbush);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var __extends = undefined && undefined.__extends || function () {
	    var _extendStatics = function extendStatics(d, b) {
	        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	            d.__proto__ = b;
	        } || function (d, b) {
	            for (var p in b) {
	                if (b.hasOwnProperty(p)) d[p] = b[p];
	            }
	        };
	        return _extendStatics(d, b);
	    };
	    return function (d, b) {
	        _extendStatics(d, b);
	        function __() {
	            this.constructor = d;
	        }
	        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	    };
	}();
	/**
	 * @module ol/render/canvas/Executor
	 */
	
	/**
	 * @typedef {Object} SerializableInstructions
	 * @property {Array<*>} instructions The rendering instructions.
	 * @property {Array<*>} hitDetectionInstructions The rendering hit detection instructions.
	 * @property {Array<number>} coordinates The array of all coordinates.
	 * @property {!Object<string, import("../canvas.js").TextState>} textStates The text states (decluttering).
	 * @property {!Object<string, import("../canvas.js").FillState>} fillStates The fill states (decluttering).
	 * @property {!Object<string, import("../canvas.js").StrokeState>} strokeStates The stroke states (decluttering).
	 */
	/**
	 * @type {import("../../extent.js").Extent}
	 */
	var tmpExtent = (0, _extent.createEmpty)();
	/**
	 * @type {!import("../../transform.js").Transform}
	 */
	var tmpTransform = (0, _transform2.create)();
	/** @type {import("../../coordinate.js").Coordinate} */
	var p1 = [];
	/** @type {import("../../coordinate.js").Coordinate} */
	var p2 = [];
	/** @type {import("../../coordinate.js").Coordinate} */
	var p3 = [];
	/** @type {import("../../coordinate.js").Coordinate} */
	var p4 = [];
	var Executor = /** @class */function (_super) {
	    __extends(Executor, _super);
	    /**
	     * @param {number} resolution Resolution.
	     * @param {number} pixelRatio Pixel ratio.
	     * @param {boolean} overlaps The replay can have overlapping geometries.
	     * @param {SerializableInstructions} instructions The serializable instructions
	     */
	    function Executor(resolution, pixelRatio, overlaps, instructions) {
	        var _this = _super.call(this) || this;
	        /**
	         * @protected
	         * @type {boolean}
	         */
	        _this.overlaps = overlaps;
	        /**
	         * @protected
	         * @type {number}
	         */
	        _this.pixelRatio = pixelRatio;
	        /**
	         * @protected
	         * @const
	         * @type {number}
	         */
	        _this.resolution = resolution;
	        /**
	         * @private
	         * @type {boolean}
	         */
	        _this.alignFill_;
	        /**
	         * @type {Array<*>}
	         */
	        _this.declutterItems = [];
	        /**
	         * @protected
	         * @type {Array<*>}
	         */
	        _this.instructions = instructions.instructions;
	        /**
	         * @protected
	         * @type {Array<number>}
	         */
	        _this.coordinates = instructions.coordinates;
	        /**
	         * @private
	         * @type {!Object<number,import("../../coordinate.js").Coordinate|Array<import("../../coordinate.js").Coordinate>|Array<Array<import("../../coordinate.js").Coordinate>>>}
	         */
	        _this.coordinateCache_ = {};
	        /**
	         * @private
	         * @type {!import("../../transform.js").Transform}
	         */
	        _this.renderedTransform_ = (0, _transform2.create)();
	        /**
	         * @protected
	         * @type {Array<*>}
	         */
	        _this.hitDetectionInstructions = instructions.hitDetectionInstructions;
	        /**
	         * @private
	         * @type {Array<number>}
	         */
	        _this.pixelCoordinates_ = null;
	        /**
	         * @private
	         * @type {number}
	         */
	        _this.viewRotation_ = 0;
	        /**
	         * @type {!Object<string, import("../canvas.js").FillState>}
	         */
	        _this.fillStates = instructions.fillStates || {};
	        /**
	         * @type {!Object<string, import("../canvas.js").StrokeState>}
	         */
	        _this.strokeStates = instructions.strokeStates || {};
	        /**
	         * @type {!Object<string, import("../canvas.js").TextState>}
	         */
	        _this.textStates = instructions.textStates || {};
	        /**
	         * @private
	         * @type {Object<string, Object<string, number>>}
	         */
	        _this.widths_ = {};
	        return _this;
	    }
	    /**
	     * @inheritDoc
	     */
	    Executor.prototype.disposeInternal = function () {
	        _canvas.labelCache.release(this);
	        _super.prototype.disposeInternal.call(this);
	    };
	    /**
	     * @param {string} text Text.
	     * @param {string} textKey Text style key.
	     * @param {string} fillKey Fill style key.
	     * @param {string} strokeKey Stroke style key.
	     * @return {HTMLCanvasElement} Image.
	     */
	    Executor.prototype.getTextImage = function (text, textKey, fillKey, strokeKey) {
	        var label;
	        var key = strokeKey + textKey + text + fillKey + this.pixelRatio;
	        if (!_canvas.labelCache.containsKey(key)) {
	            var strokeState = strokeKey ? this.strokeStates[strokeKey] : null;
	            var fillState = fillKey ? this.fillStates[fillKey] : null;
	            var textState = this.textStates[textKey];
	            var pixelRatio = this.pixelRatio;
	            var scale = textState.scale * pixelRatio;
	            var align = _TextBuilder.TEXT_ALIGN[textState.textAlign || _canvas.defaultTextAlign];
	            var strokeWidth = strokeKey && strokeState.lineWidth ? strokeState.lineWidth : 0;
	            var lines = text.split('\n');
	            var numLines = lines.length;
	            var widths = [];
	            var width = (0, _canvas.measureTextWidths)(textState.font, lines, widths);
	            var lineHeight = (0, _canvas.measureTextHeight)(textState.font);
	            var height = lineHeight * numLines;
	            var renderWidth = width + strokeWidth;
	            var context = (0, _dom.createCanvasContext2D)(
	            // make canvas 2 pixels wider to account for italic text width measurement errors
	            Math.ceil((renderWidth + 2) * scale), Math.ceil((height + strokeWidth) * scale));
	            label = context.canvas;
	            _canvas.labelCache.set(key, label);
	            if (scale != 1) {
	                context.scale(scale, scale);
	            }
	            context.font = textState.font;
	            if (strokeKey) {
	                context.strokeStyle = strokeState.strokeStyle;
	                context.lineWidth = strokeWidth;
	                context.lineCap = strokeState.lineCap;
	                context.lineJoin = strokeState.lineJoin;
	                context.miterLimit = strokeState.miterLimit;
	                if (context.setLineDash && strokeState.lineDash.length) {
	                    context.setLineDash(strokeState.lineDash);
	                    context.lineDashOffset = strokeState.lineDashOffset;
	                }
	            }
	            if (fillKey) {
	                context.fillStyle = fillState.fillStyle;
	            }
	            context.textBaseline = 'middle';
	            context.textAlign = 'center';
	            var leftRight = 0.5 - align;
	            var x = align * renderWidth + leftRight * strokeWidth;
	            var i = void 0;
	            if (strokeKey) {
	                for (i = 0; i < numLines; ++i) {
	                    context.strokeText(lines[i], x + leftRight * widths[i], 0.5 * (strokeWidth + lineHeight) + i * lineHeight);
	                }
	            }
	            if (fillKey) {
	                for (i = 0; i < numLines; ++i) {
	                    context.fillText(lines[i], x + leftRight * widths[i], 0.5 * (strokeWidth + lineHeight) + i * lineHeight);
	                }
	            }
	        }
	        return _canvas.labelCache.get(key, this);
	    };
	    /**
	     * @param {CanvasRenderingContext2D} context Context.
	     * @param {import("../../coordinate.js").Coordinate} p1 1st point of the background box.
	     * @param {import("../../coordinate.js").Coordinate} p2 2nd point of the background box.
	     * @param {import("../../coordinate.js").Coordinate} p3 3rd point of the background box.
	     * @param {import("../../coordinate.js").Coordinate} p4 4th point of the background box.
	     * @param {Array<*>} fillInstruction Fill instruction.
	     * @param {Array<*>} strokeInstruction Stroke instruction.
	     */
	    Executor.prototype.replayTextBackground_ = function (context, p1, p2, p3, p4, fillInstruction, strokeInstruction) {
	        context.beginPath();
	        context.moveTo.apply(context, p1);
	        context.lineTo.apply(context, p2);
	        context.lineTo.apply(context, p3);
	        context.lineTo.apply(context, p4);
	        context.lineTo.apply(context, p1);
	        if (fillInstruction) {
	            this.alignFill_ = /** @type {boolean} */fillInstruction[2];
	            this.fill_(context);
	        }
	        if (strokeInstruction) {
	            this.setStrokeStyle_(context, /** @type {Array<*>} */strokeInstruction);
	            context.stroke();
	        }
	    };
	    /**
	     * @param {CanvasRenderingContext2D} context Context.
	     * @param {number} x X.
	     * @param {number} y Y.
	     * @param {HTMLImageElement|HTMLCanvasElement|HTMLVideoElement} image Image.
	     * @param {number} anchorX Anchor X.
	     * @param {number} anchorY Anchor Y.
	     * @param {import("../canvas.js").DeclutterGroup} declutterGroup Declutter group.
	     * @param {number} height Height.
	     * @param {number} opacity Opacity.
	     * @param {number} originX Origin X.
	     * @param {number} originY Origin Y.
	     * @param {number} rotation Rotation.
	     * @param {number} scale Scale.
	     * @param {boolean} snapToPixel Snap to pixel.
	     * @param {number} width Width.
	     * @param {Array<number>} padding Padding.
	     * @param {Array<*>} fillInstruction Fill instruction.
	     * @param {Array<*>} strokeInstruction Stroke instruction.
	     */
	    Executor.prototype.replayImage_ = function (context, x, y, image, anchorX, anchorY, declutterGroup, height, opacity, originX, originY, rotation, scale, snapToPixel, width, padding, fillInstruction, strokeInstruction) {
	        var fillStroke = fillInstruction || strokeInstruction;
	        anchorX *= scale;
	        anchorY *= scale;
	        x -= anchorX;
	        y -= anchorY;
	        var w = width + originX > image.width ? image.width - originX : width;
	        var h = height + originY > image.height ? image.height - originY : height;
	        var boxW = padding[3] + w * scale + padding[1];
	        var boxH = padding[0] + h * scale + padding[2];
	        var boxX = x - padding[3];
	        var boxY = y - padding[0];
	        if (fillStroke || rotation !== 0) {
	            p1[0] = boxX;
	            p4[0] = boxX;
	            p1[1] = boxY;
	            p2[1] = boxY;
	            p2[0] = boxX + boxW;
	            p3[0] = p2[0];
	            p3[1] = boxY + boxH;
	            p4[1] = p3[1];
	        }
	        var transform = null;
	        if (rotation !== 0) {
	            var centerX = x + anchorX;
	            var centerY = y + anchorY;
	            transform = (0, _transform2.compose)(tmpTransform, centerX, centerY, 1, 1, rotation, -centerX, -centerY);
	            (0, _transform2.apply)(tmpTransform, p1);
	            (0, _transform2.apply)(tmpTransform, p2);
	            (0, _transform2.apply)(tmpTransform, p3);
	            (0, _transform2.apply)(tmpTransform, p4);
	            (0, _extent.createOrUpdate)(Math.min(p1[0], p2[0], p3[0], p4[0]), Math.min(p1[1], p2[1], p3[1], p4[1]), Math.max(p1[0], p2[0], p3[0], p4[0]), Math.max(p1[1], p2[1], p3[1], p4[1]), tmpExtent);
	        } else {
	            (0, _extent.createOrUpdate)(boxX, boxY, boxX + boxW, boxY + boxH, tmpExtent);
	        }
	        var canvas = context.canvas;
	        var strokePadding = strokeInstruction ? strokeInstruction[2] * scale / 2 : 0;
	        var intersects = tmpExtent[0] - strokePadding <= canvas.width && tmpExtent[2] + strokePadding >= 0 && tmpExtent[1] - strokePadding <= canvas.height && tmpExtent[3] + strokePadding >= 0;
	        if (snapToPixel) {
	            x = Math.round(x);
	            y = Math.round(y);
	        }
	        if (declutterGroup) {
	            if (!intersects && declutterGroup[4] == 1) {
	                return;
	            }
	            (0, _extent.extend)(declutterGroup, tmpExtent);
	            var declutterArgs = intersects ? [context, transform ? transform.slice(0) : null, opacity, image, originX, originY, w, h, x, y, scale] : null;
	            if (declutterArgs) {
	                if (fillStroke) {
	                    declutterArgs.push(fillInstruction, strokeInstruction, p1, p2, p3, p4);
	                }
	                declutterGroup.push(declutterArgs);
	            }
	        } else if (intersects) {
	            if (fillStroke) {
	                this.replayTextBackground_(context, p1, p2, p3, p4,
	                /** @type {Array<*>} */fillInstruction,
	                /** @type {Array<*>} */strokeInstruction);
	            }
	            (0, _canvas.drawImage)(context, transform, opacity, image, originX, originY, w, h, x, y, scale);
	        }
	    };
	    /**
	     * @private
	     * @param {CanvasRenderingContext2D} context Context.
	     */
	    Executor.prototype.fill_ = function (context) {
	        if (this.alignFill_) {
	            var origin_1 = (0, _transform2.apply)(this.renderedTransform_, [0, 0]);
	            var repeatSize = 512 * this.pixelRatio;
	            context.save();
	            context.translate(origin_1[0] % repeatSize, origin_1[1] % repeatSize);
	            context.rotate(this.viewRotation_);
	        }
	        context.fill();
	        if (this.alignFill_) {
	            context.restore();
	        }
	    };
	    /**
	     * @private
	     * @param {CanvasRenderingContext2D} context Context.
	     * @param {Array<*>} instruction Instruction.
	     */
	    Executor.prototype.setStrokeStyle_ = function (context, instruction) {
	        context.strokeStyle = /** @type {import("../../colorlike.js").ColorLike} */instruction[1];
	        context.lineWidth = /** @type {number} */instruction[2];
	        context.lineCap = /** @type {CanvasLineCap} */instruction[3];
	        context.lineJoin = /** @type {CanvasLineJoin} */instruction[4];
	        context.miterLimit = /** @type {number} */instruction[5];
	        if (context.setLineDash) {
	            context.lineDashOffset = /** @type {number} */instruction[7];
	            context.setLineDash( /** @type {Array<number>} */instruction[6]);
	        }
	    };
	    /**
	     * @param {import("../canvas.js").DeclutterGroup} declutterGroup Declutter group.
	     * @param {import("../../Feature.js").FeatureLike} feature Feature.
	     * @param {number} opacity Layer opacity.
	     * @param {?} declutterTree Declutter tree.
	     * @return {?} Declutter tree.
	     */
	    Executor.prototype.renderDeclutter = function (declutterGroup, feature, opacity, declutterTree) {
	        if (declutterGroup && declutterGroup.length > 5) {
	            var groupCount = declutterGroup[4];
	            if (groupCount == 1 || groupCount == declutterGroup.length - 5) {
	                /** @type {import("../../structs/RBush.js").Entry} */
	                var box = {
	                    minX: /** @type {number} */declutterGroup[0],
	                    minY: /** @type {number} */declutterGroup[1],
	                    maxX: /** @type {number} */declutterGroup[2],
	                    maxY: /** @type {number} */declutterGroup[3],
	                    value: feature
	                };
	                if (!declutterTree) {
	                    declutterTree = new _rbush2.default(9);
	                }
	                if (!declutterTree.collides(box)) {
	                    declutterTree.insert(box);
	                    for (var j = 5, jj = declutterGroup.length; j < jj; ++j) {
	                        var declutterData = /** @type {Array} */declutterGroup[j];
	                        var context = declutterData[0];
	                        var currentAlpha = context.globalAlpha;
	                        if (currentAlpha !== opacity) {
	                            context.globalAlpha = opacity;
	                        }
	                        if (declutterData.length > 11) {
	                            this.replayTextBackground_(declutterData[0], declutterData[13], declutterData[14], declutterData[15], declutterData[16], declutterData[11], declutterData[12]);
	                        }
	                        _canvas.drawImage.apply(undefined, declutterData);
	                        if (currentAlpha !== opacity) {
	                            context.globalAlpha = currentAlpha;
	                        }
	                    }
	                }
	                declutterGroup.length = 5;
	                (0, _extent.createOrUpdateEmpty)(declutterGroup);
	            }
	        }
	        return declutterTree;
	    };
	    /**
	     * @private
	     * @param {string} text The text to draw.
	     * @param {string} textKey The key of the text state.
	     * @param {string} strokeKey The key for the stroke state.
	     * @param {string} fillKey The key for the fill state.
	     * @return {{label: HTMLCanvasElement, anchorX: number, anchorY: number}} The text image and its anchor.
	     */
	    Executor.prototype.drawTextImageWithPointPlacement_ = function (text, textKey, strokeKey, fillKey) {
	        var textState = this.textStates[textKey];
	        var label = this.getTextImage(text, textKey, fillKey, strokeKey);
	        var strokeState = this.strokeStates[strokeKey];
	        var pixelRatio = this.pixelRatio;
	        var align = _TextBuilder.TEXT_ALIGN[textState.textAlign || _canvas.defaultTextAlign];
	        var baseline = _TextBuilder.TEXT_ALIGN[textState.textBaseline || _canvas.defaultTextBaseline];
	        var strokeWidth = strokeState && strokeState.lineWidth ? strokeState.lineWidth : 0;
	        // Remove the 2 pixels we added in getTextImage() for the anchor
	        var width = label.width / pixelRatio - 2 * textState.scale;
	        var anchorX = align * width + 2 * (0.5 - align) * strokeWidth;
	        var anchorY = baseline * label.height / pixelRatio + 2 * (0.5 - baseline) * strokeWidth;
	        return {
	            label: label,
	            anchorX: anchorX,
	            anchorY: anchorY
	        };
	    };
	    /**
	     * @private
	     * @param {CanvasRenderingContext2D} context Context.
	     * @param {import("../../transform.js").Transform} transform Transform.
	     * @param {Array<*>} instructions Instructions array.
	     * @param {boolean} snapToPixel Snap point symbols and text to integer pixels.
	     * @param {function(import("../../Feature.js").FeatureLike): T|undefined} featureCallback Feature callback.
	     * @param {import("../../extent.js").Extent=} opt_hitExtent Only check features that intersect this
	     *     extent.
	     * @return {T|undefined} Callback result.
	     * @template T
	     */
	    Executor.prototype.execute_ = function (context, transform, instructions, snapToPixel, featureCallback, opt_hitExtent) {
	        this.declutterItems.length = 0;
	        /** @type {Array<number>} */
	        var pixelCoordinates;
	        if (this.pixelCoordinates_ && (0, _array.equals)(transform, this.renderedTransform_)) {
	            pixelCoordinates = this.pixelCoordinates_;
	        } else {
	            if (!this.pixelCoordinates_) {
	                this.pixelCoordinates_ = [];
	            }
	            pixelCoordinates = (0, _transform.transform2D)(this.coordinates, 0, this.coordinates.length, 2, transform, this.pixelCoordinates_);
	            (0, _transform2.setFromArray)(this.renderedTransform_, transform);
	        }
	        var i = 0; // instruction index
	        var ii = instructions.length; // end of instructions
	        var d = 0; // data index
	        var dd; // end of per-instruction data
	        var anchorX, anchorY, prevX, prevY, roundX, roundY, declutterGroup, declutterGroups, image, text, textKey;
	        var strokeKey, fillKey;
	        var pendingFill = 0;
	        var pendingStroke = 0;
	        var lastFillInstruction = null;
	        var lastStrokeInstruction = null;
	        var coordinateCache = this.coordinateCache_;
	        var viewRotation = this.viewRotation_;
	        var viewRotationFromTransform = Math.round(Math.atan2(-transform[1], transform[0]) * 1e12) / 1e12;
	        var state = /** @type {import("../../render.js").State} */{
	            context: context,
	            pixelRatio: this.pixelRatio,
	            resolution: this.resolution,
	            rotation: viewRotation
	        };
	        // When the batch size gets too big, performance decreases. 200 is a good
	        // balance between batch size and number of fill/stroke instructions.
	        var batchSize = this.instructions != instructions || this.overlaps ? 0 : 200;
	        var /** @type {import("../../Feature.js").FeatureLike} */feature;
	        var x, y;
	        while (i < ii) {
	            var instruction = instructions[i];
	            var type = /** @type {CanvasInstruction} */instruction[0];
	            switch (type) {
	                case _Instruction2.default.BEGIN_GEOMETRY:
	                    feature = /** @type {import("../../Feature.js").FeatureLike} */instruction[1];
	                    if (!feature.getGeometry()) {
	                        i = /** @type {number} */instruction[2];
	                    } else if (opt_hitExtent !== undefined && !(0, _extent.intersects)(opt_hitExtent, instruction[3])) {
	                        i = /** @type {number} */instruction[2] + 1;
	                    } else {
	                        ++i;
	                    }
	                    break;
	                case _Instruction2.default.BEGIN_PATH:
	                    if (pendingFill > batchSize) {
	                        this.fill_(context);
	                        pendingFill = 0;
	                    }
	                    if (pendingStroke > batchSize) {
	                        context.stroke();
	                        pendingStroke = 0;
	                    }
	                    if (!pendingFill && !pendingStroke) {
	                        context.beginPath();
	                        prevX = NaN;
	                        prevY = NaN;
	                    }
	                    ++i;
	                    break;
	                case _Instruction2.default.CIRCLE:
	                    d = /** @type {number} */instruction[1];
	                    var x1 = pixelCoordinates[d];
	                    var y1 = pixelCoordinates[d + 1];
	                    var x2 = pixelCoordinates[d + 2];
	                    var y2 = pixelCoordinates[d + 3];
	                    var dx = x2 - x1;
	                    var dy = y2 - y1;
	                    var r = Math.sqrt(dx * dx + dy * dy);
	                    context.moveTo(x1 + r, y1);
	                    context.arc(x1, y1, r, 0, 2 * Math.PI, true);
	                    ++i;
	                    break;
	                case _Instruction2.default.CLOSE_PATH:
	                    context.closePath();
	                    ++i;
	                    break;
	                case _Instruction2.default.CUSTOM:
	                    d = /** @type {number} */instruction[1];
	                    dd = instruction[2];
	                    var geometry = /** @type {import("../../geom/SimpleGeometry.js").default} */instruction[3];
	                    var renderer = instruction[4];
	                    var fn = instruction.length == 6 ? instruction[5] : undefined;
	                    state.geometry = geometry;
	                    state.feature = feature;
	                    if (!(i in coordinateCache)) {
	                        coordinateCache[i] = [];
	                    }
	                    var coords = coordinateCache[i];
	                    if (fn) {
	                        fn(pixelCoordinates, d, dd, 2, coords);
	                    } else {
	                        coords[0] = pixelCoordinates[d];
	                        coords[1] = pixelCoordinates[d + 1];
	                        coords.length = 2;
	                    }
	                    renderer(coords, state);
	                    ++i;
	                    break;
	                case _Instruction2.default.DRAW_IMAGE:
	                    d = /** @type {number} */instruction[1];
	                    dd = /** @type {number} */instruction[2];
	                    image = /** @type {HTMLCanvasElement|HTMLVideoElement|HTMLImageElement} */instruction[3];
	                    // Remaining arguments in DRAW_IMAGE are in alphabetical order
	                    anchorX = /** @type {number} */instruction[4];
	                    anchorY = /** @type {number} */instruction[5];
	                    declutterGroups = featureCallback ? null : instruction[6];
	                    var height = /** @type {number} */instruction[7];
	                    var opacity = /** @type {number} */instruction[8];
	                    var originX = /** @type {number} */instruction[9];
	                    var originY = /** @type {number} */instruction[10];
	                    var rotateWithView = /** @type {boolean} */instruction[11];
	                    var rotation = /** @type {number} */instruction[12];
	                    var scale = /** @type {number} */instruction[13];
	                    var width = /** @type {number} */instruction[14];
	                    if (!image && instruction.length >= 19) {
	                        // create label images
	                        text = /** @type {string} */instruction[18];
	                        textKey = /** @type {string} */instruction[19];
	                        strokeKey = /** @type {string} */instruction[20];
	                        fillKey = /** @type {string} */instruction[21];
	                        var labelWithAnchor = this.drawTextImageWithPointPlacement_(text, textKey, strokeKey, fillKey);
	                        image = labelWithAnchor.label;
	                        instruction[3] = image;
	                        var textOffsetX = /** @type {number} */instruction[22];
	                        anchorX = (labelWithAnchor.anchorX - textOffsetX) * this.pixelRatio;
	                        instruction[4] = anchorX;
	                        var textOffsetY = /** @type {number} */instruction[23];
	                        anchorY = (labelWithAnchor.anchorY - textOffsetY) * this.pixelRatio;
	                        instruction[5] = anchorY;
	                        height = image.height;
	                        instruction[7] = height;
	                        width = image.width;
	                        instruction[14] = width;
	                    }
	                    var geometryWidths = void 0;
	                    if (instruction.length > 24) {
	                        geometryWidths = /** @type {number} */instruction[24];
	                    }
	                    var padding = void 0,
	                        backgroundFill = void 0,
	                        backgroundStroke = void 0;
	                    if (instruction.length > 16) {
	                        padding = /** @type {Array<number>} */instruction[15];
	                        backgroundFill = /** @type {boolean} */instruction[16];
	                        backgroundStroke = /** @type {boolean} */instruction[17];
	                    } else {
	                        padding = _canvas.defaultPadding;
	                        backgroundFill = false;
	                        backgroundStroke = false;
	                    }
	                    if (rotateWithView && viewRotationFromTransform) {
	                        // Canvas is expected to be rotated to reverse view rotation.
	                        rotation += viewRotation;
	                    } else if (!rotateWithView && !viewRotationFromTransform) {
	                        // Canvas is not rotated, images need to be rotated back to be north-up.
	                        rotation -= viewRotation;
	                    }
	                    var widthIndex = 0;
	                    var declutterGroupIndex = 0;
	                    for (; d < dd; d += 2) {
	                        if (geometryWidths && geometryWidths[widthIndex++] < width / this.pixelRatio) {
	                            continue;
	                        }
	                        if (declutterGroups) {
	                            var index = Math.floor(declutterGroupIndex);
	                            if (declutterGroups.length < index + 1) {
	                                declutterGroup = (0, _extent.createEmpty)();
	                                declutterGroup.push(declutterGroups[0][4]);
	                                declutterGroups.push(declutterGroup);
	                            }
	                            declutterGroup = declutterGroups[index];
	                        }
	                        this.replayImage_(context, pixelCoordinates[d], pixelCoordinates[d + 1], image, anchorX, anchorY, declutterGroup, height, opacity, originX, originY, rotation, scale, snapToPixel, width, padding, backgroundFill ? /** @type {Array<*>} */lastFillInstruction : null, backgroundStroke ? /** @type {Array<*>} */lastStrokeInstruction : null);
	                        if (declutterGroup) {
	                            if (declutterGroupIndex === Math.floor(declutterGroupIndex)) {
	                                this.declutterItems.push(this, declutterGroup, feature);
	                            }
	                            declutterGroupIndex += 1 / declutterGroup[4];
	                        }
	                    }
	                    ++i;
	                    break;
	                case _Instruction2.default.DRAW_CHARS:
	                    var begin = /** @type {number} */instruction[1];
	                    var end = /** @type {number} */instruction[2];
	                    var baseline = /** @type {number} */instruction[3];
	                    declutterGroup = featureCallback ? null : instruction[4];
	                    var overflow = /** @type {number} */instruction[5];
	                    fillKey = /** @type {string} */instruction[6];
	                    var maxAngle = /** @type {number} */instruction[7];
	                    var measurePixelRatio = /** @type {number} */instruction[8];
	                    var offsetY = /** @type {number} */instruction[9];
	                    strokeKey = /** @type {string} */instruction[10];
	                    var strokeWidth = /** @type {number} */instruction[11];
	                    text = /** @type {string} */instruction[12];
	                    textKey = /** @type {string} */instruction[13];
	                    var pixelRatioScale = /** @type {number} */instruction[14];
	                    var textState = this.textStates[textKey];
	                    var font = textState.font;
	                    var textScale = textState.scale * measurePixelRatio;
	                    var cachedWidths = void 0;
	                    if (font in this.widths_) {
	                        cachedWidths = this.widths_[font];
	                    } else {
	                        cachedWidths = {};
	                        this.widths_[font] = cachedWidths;
	                    }
	                    var pathLength = (0, _length.lineStringLength)(pixelCoordinates, begin, end, 2);
	                    var textLength = textScale * (0, _canvas.measureAndCacheTextWidth)(font, text, cachedWidths);
	                    if (overflow || textLength <= pathLength) {
	                        var textAlign = this.textStates[textKey].textAlign;
	                        var startM = (pathLength - textLength) * _TextBuilder.TEXT_ALIGN[textAlign];
	                        var parts = (0, _textpath.drawTextOnPath)(pixelCoordinates, begin, end, 2, text, startM, maxAngle, textScale, _canvas.measureAndCacheTextWidth, font, cachedWidths);
	                        if (parts) {
	                            var c = void 0,
	                                cc = void 0,
	                                chars = void 0,
	                                label = void 0,
	                                part = void 0;
	                            if (strokeKey) {
	                                for (c = 0, cc = parts.length; c < cc; ++c) {
	                                    part = parts[c]; // x, y, anchorX, rotation, chunk
	                                    chars = /** @type {string} */part[4];
	                                    label = this.getTextImage(chars, textKey, '', strokeKey);
	                                    anchorX = /** @type {number} */part[2] + strokeWidth;
	                                    anchorY = baseline * label.height + (0.5 - baseline) * 2 * strokeWidth - offsetY;
	                                    this.replayImage_(context,
	                                    /** @type {number} */part[0], /** @type {number} */part[1], label, anchorX, anchorY, declutterGroup, label.height, 1, 0, 0,
	                                    /** @type {number} */part[3], pixelRatioScale, false, label.width, _canvas.defaultPadding, null, null);
	                                }
	                            }
	                            if (fillKey) {
	                                for (c = 0, cc = parts.length; c < cc; ++c) {
	                                    part = parts[c]; // x, y, anchorX, rotation, chunk
	                                    chars = /** @type {string} */part[4];
	                                    label = this.getTextImage(chars, textKey, fillKey, '');
	                                    anchorX = /** @type {number} */part[2];
	                                    anchorY = baseline * label.height - offsetY;
	                                    this.replayImage_(context,
	                                    /** @type {number} */part[0], /** @type {number} */part[1], label, anchorX, anchorY, declutterGroup, label.height, 1, 0, 0,
	                                    /** @type {number} */part[3], pixelRatioScale, false, label.width, _canvas.defaultPadding, null, null);
	                                }
	                            }
	                        }
	                    }
	                    this.declutterItems.push(this, declutterGroup, feature);
	                    ++i;
	                    break;
	                case _Instruction2.default.END_GEOMETRY:
	                    if (featureCallback !== undefined) {
	                        feature = /** @type {import("../../Feature.js").FeatureLike} */instruction[1];
	                        var result = featureCallback(feature);
	                        if (result) {
	                            return result;
	                        }
	                    }
	                    ++i;
	                    break;
	                case _Instruction2.default.FILL:
	                    if (batchSize) {
	                        pendingFill++;
	                    } else {
	                        this.fill_(context);
	                    }
	                    ++i;
	                    break;
	                case _Instruction2.default.MOVE_TO_LINE_TO:
	                    d = /** @type {number} */instruction[1];
	                    dd = /** @type {number} */instruction[2];
	                    x = pixelCoordinates[d];
	                    y = pixelCoordinates[d + 1];
	                    roundX = x + 0.5 | 0;
	                    roundY = y + 0.5 | 0;
	                    if (roundX !== prevX || roundY !== prevY) {
	                        context.moveTo(x, y);
	                        prevX = roundX;
	                        prevY = roundY;
	                    }
	                    for (d += 2; d < dd; d += 2) {
	                        x = pixelCoordinates[d];
	                        y = pixelCoordinates[d + 1];
	                        roundX = x + 0.5 | 0;
	                        roundY = y + 0.5 | 0;
	                        if (d == dd - 2 || roundX !== prevX || roundY !== prevY) {
	                            context.lineTo(x, y);
	                            prevX = roundX;
	                            prevY = roundY;
	                        }
	                    }
	                    ++i;
	                    break;
	                case _Instruction2.default.SET_FILL_STYLE:
	                    lastFillInstruction = instruction;
	                    this.alignFill_ = instruction[2];
	                    if (pendingFill) {
	                        this.fill_(context);
	                        pendingFill = 0;
	                        if (pendingStroke) {
	                            context.stroke();
	                            pendingStroke = 0;
	                        }
	                    }
	                    context.fillStyle = /** @type {import("../../colorlike.js").ColorLike} */instruction[1];
	                    ++i;
	                    break;
	                case _Instruction2.default.SET_STROKE_STYLE:
	                    lastStrokeInstruction = instruction;
	                    if (pendingStroke) {
	                        context.stroke();
	                        pendingStroke = 0;
	                    }
	                    this.setStrokeStyle_(context, /** @type {Array<*>} */instruction);
	                    ++i;
	                    break;
	                case _Instruction2.default.STROKE:
	                    if (batchSize) {
	                        pendingStroke++;
	                    } else {
	                        context.stroke();
	                    }
	                    ++i;
	                    break;
	                default:
	                    ++i; // consume the instruction anyway, to avoid an infinite loop
	                    break;
	            }
	        }
	        if (pendingFill) {
	            this.fill_(context);
	        }
	        if (pendingStroke) {
	            context.stroke();
	        }
	        return undefined;
	    };
	    /**
	     * @param {CanvasRenderingContext2D} context Context.
	     * @param {import("../../transform.js").Transform} transform Transform.
	     * @param {number} viewRotation View rotation.
	     * @param {boolean} snapToPixel Snap point symbols and text to integer pixels.
	     */
	    Executor.prototype.execute = function (context, transform, viewRotation, snapToPixel) {
	        this.viewRotation_ = viewRotation;
	        this.execute_(context, transform, this.instructions, snapToPixel, undefined, undefined);
	    };
	    /**
	     * @param {CanvasRenderingContext2D} context Context.
	     * @param {import("../../transform.js").Transform} transform Transform.
	     * @param {number} viewRotation View rotation.
	     * @param {function(import("../../Feature.js").FeatureLike): T=} opt_featureCallback
	     *     Feature callback.
	     * @param {import("../../extent.js").Extent=} opt_hitExtent Only check features that intersect this
	     *     extent.
	     * @return {T|undefined} Callback result.
	     * @template T
	     */
	    Executor.prototype.executeHitDetection = function (context, transform, viewRotation, opt_featureCallback, opt_hitExtent) {
	        this.viewRotation_ = viewRotation;
	        return this.execute_(context, transform, this.hitDetectionInstructions, true, opt_featureCallback, opt_hitExtent);
	    };
	    return Executor;
	}(_Disposable2.default);
	exports.default = Executor;
	//# sourceMappingURL=Executor.js.map

/***/ }),
/* 631 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	exports.getCircleArray = getCircleArray;
	exports.replayDeclutter = replayDeclutter;
	
	var _array = __webpack_require__(18);
	
	var _dom = __webpack_require__(34);
	
	var _extent = __webpack_require__(4);
	
	var _transform = __webpack_require__(104);
	
	var _obj = __webpack_require__(23);
	
	var _BuilderType = __webpack_require__(289);
	
	var _BuilderType2 = _interopRequireDefault(_BuilderType);
	
	var _transform2 = __webpack_require__(48);
	
	var _Executor = __webpack_require__(630);
	
	var _Executor2 = _interopRequireDefault(_Executor);
	
	var _Disposable = __webpack_require__(122);
	
	var _Disposable2 = _interopRequireDefault(_Disposable);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	/**
	 * @module ol/render/canvas/ExecutorGroup
	 */
	var __extends = undefined && undefined.__extends || function () {
	    var _extendStatics = function extendStatics(d, b) {
	        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	            d.__proto__ = b;
	        } || function (d, b) {
	            for (var p in b) {
	                if (b.hasOwnProperty(p)) d[p] = b[p];
	            }
	        };
	        return _extendStatics(d, b);
	    };
	    return function (d, b) {
	        _extendStatics(d, b);
	        function __() {
	            this.constructor = d;
	        }
	        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	    };
	}();
	
	/**
	 * @const
	 * @type {Array<BuilderType>}
	 */
	var ORDER = [_BuilderType2.default.POLYGON, _BuilderType2.default.CIRCLE, _BuilderType2.default.LINE_STRING, _BuilderType2.default.IMAGE, _BuilderType2.default.TEXT, _BuilderType2.default.DEFAULT];
	var ExecutorGroup = /** @class */function (_super) {
	    __extends(ExecutorGroup, _super);
	    /**
	     * @param {import("../../extent.js").Extent} maxExtent Max extent for clipping. When a
	     * `maxExtent` was set on the Buillder for this executor group, the same `maxExtent`
	     * should be set here, unless the target context does not exceet that extent (which
	     * can be the case when rendering to tiles).
	     * @param {number} resolution Resolution.
	     * @param {number} pixelRatio Pixel ratio.
	     * @param {boolean} overlaps The executor group can have overlapping geometries.
	     * @param {!Object<string, !Object<BuilderType, import("./Builder.js").SerializableInstructions>>} allInstructions
	     * The serializable instructions.
	     * @param {number=} opt_renderBuffer Optional rendering buffer.
	     */
	    function ExecutorGroup(maxExtent, resolution, pixelRatio, overlaps, allInstructions, opt_renderBuffer) {
	        var _this = _super.call(this) || this;
	        /**
	         * @private
	         * @type {import("../../extent.js").Extent}
	         */
	        _this.maxExtent_ = maxExtent;
	        /**
	         * @private
	         * @type {boolean}
	         */
	        _this.overlaps_ = overlaps;
	        /**
	         * @private
	         * @type {number}
	         */
	        _this.pixelRatio_ = pixelRatio;
	        /**
	         * @private
	         * @type {number}
	         */
	        _this.resolution_ = resolution;
	        /**
	         * @private
	         * @type {number|undefined}
	         */
	        _this.renderBuffer_ = opt_renderBuffer;
	        /**
	         * @private
	         * @type {!Object<string, !Object<BuilderType, import("./Executor").default>>}
	         */
	        _this.executorsByZIndex_ = {};
	        /**
	         * @private
	         * @type {CanvasRenderingContext2D}
	         */
	        _this.hitDetectionContext_ = null;
	        /**
	         * @private
	         * @type {import("../../transform.js").Transform}
	         */
	        _this.hitDetectionTransform_ = (0, _transform2.create)();
	        _this.createExecutors_(allInstructions);
	        return _this;
	    }
	    /**
	     * @param {CanvasRenderingContext2D} context Context.
	     * @param {import("../../transform.js").Transform} transform Transform.
	     */
	    ExecutorGroup.prototype.clip = function (context, transform) {
	        var flatClipCoords = this.getClipCoords(transform);
	        context.beginPath();
	        context.moveTo(flatClipCoords[0], flatClipCoords[1]);
	        context.lineTo(flatClipCoords[2], flatClipCoords[3]);
	        context.lineTo(flatClipCoords[4], flatClipCoords[5]);
	        context.lineTo(flatClipCoords[6], flatClipCoords[7]);
	        context.clip();
	    };
	    /**
	     * Create executors and populate them using the provided instructions.
	     * @private
	     * @param {!Object<string, !Object<BuilderType, import("./Builder.js").SerializableInstructions>>} allInstructions The serializable instructions
	     */
	    ExecutorGroup.prototype.createExecutors_ = function (allInstructions) {
	        for (var zIndex in allInstructions) {
	            var executors = this.executorsByZIndex_[zIndex];
	            if (executors === undefined) {
	                executors = {};
	                this.executorsByZIndex_[zIndex] = executors;
	            }
	            var instructionByZindex = allInstructions[zIndex];
	            for (var builderType in instructionByZindex) {
	                var instructions = instructionByZindex[builderType];
	                executors[builderType] = new _Executor2.default(this.resolution_, this.pixelRatio_, this.overlaps_, instructions);
	            }
	        }
	    };
	    /**
	     * @inheritDoc
	     */
	    ExecutorGroup.prototype.disposeInternal = function () {
	        for (var z in this.executorsByZIndex_) {
	            var executors = this.executorsByZIndex_[z];
	            for (var key in executors) {
	                executors[key].disposeInternal();
	            }
	        }
	        if (this.hitDetectionContext_) {
	            var canvas = this.hitDetectionContext_.canvas;
	            canvas.width = 0;
	            canvas.height = 0;
	        }
	        _super.prototype.disposeInternal.call(this);
	    };
	    /**
	     * @param {Array<BuilderType>} executors Executors.
	     * @return {boolean} Has executors of the provided types.
	     */
	    ExecutorGroup.prototype.hasExecutors = function (executors) {
	        for (var zIndex in this.executorsByZIndex_) {
	            var candidates = this.executorsByZIndex_[zIndex];
	            for (var i = 0, ii = executors.length; i < ii; ++i) {
	                if (executors[i] in candidates) {
	                    return true;
	                }
	            }
	        }
	        return false;
	    };
	    /**
	     * @param {import("../../coordinate.js").Coordinate} coordinate Coordinate.
	     * @param {number} resolution Resolution.
	     * @param {number} rotation Rotation.
	     * @param {number} hitTolerance Hit tolerance in pixels.
	     * @param {function(import("../../Feature.js").FeatureLike): T} callback Feature callback.
	     * @param {Array<import("../../Feature.js").FeatureLike>} declutteredFeatures Decluttered features.
	     * @return {T|undefined} Callback result.
	     * @template T
	     */
	    ExecutorGroup.prototype.forEachFeatureAtCoordinate = function (coordinate, resolution, rotation, hitTolerance, callback, declutteredFeatures) {
	        hitTolerance = Math.round(hitTolerance);
	        var contextSize = hitTolerance * 2 + 1;
	        var transform = (0, _transform2.compose)(this.hitDetectionTransform_, hitTolerance + 0.5, hitTolerance + 0.5, 1 / resolution, -1 / resolution, -rotation, -coordinate[0], -coordinate[1]);
	        if (!this.hitDetectionContext_) {
	            this.hitDetectionContext_ = (0, _dom.createCanvasContext2D)(contextSize, contextSize);
	        }
	        var context = this.hitDetectionContext_;
	        if (context.canvas.width !== contextSize || context.canvas.height !== contextSize) {
	            context.canvas.width = contextSize;
	            context.canvas.height = contextSize;
	        } else {
	            context.clearRect(0, 0, contextSize, contextSize);
	        }
	        /**
	         * @type {import("../../extent.js").Extent}
	         */
	        var hitExtent;
	        if (this.renderBuffer_ !== undefined) {
	            hitExtent = (0, _extent.createEmpty)();
	            (0, _extent.extendCoordinate)(hitExtent, coordinate);
	            (0, _extent.buffer)(hitExtent, resolution * (this.renderBuffer_ + hitTolerance), hitExtent);
	        }
	        var mask = getCircleArray(hitTolerance);
	        var builderType;
	        /**
	         * @param {import("../../Feature.js").FeatureLike} feature Feature.
	         * @return {?} Callback result.
	         */
	        function featureCallback(feature) {
	            var imageData = context.getImageData(0, 0, contextSize, contextSize).data;
	            for (var i_1 = 0; i_1 < contextSize; i_1++) {
	                for (var j_1 = 0; j_1 < contextSize; j_1++) {
	                    if (mask[i_1][j_1]) {
	                        if (imageData[(j_1 * contextSize + i_1) * 4 + 3] > 0) {
	                            var result_1 = void 0;
	                            if (!(declutteredFeatures && (builderType == _BuilderType2.default.IMAGE || builderType == _BuilderType2.default.TEXT)) || declutteredFeatures.indexOf(feature) !== -1) {
	                                result_1 = callback(feature);
	                            }
	                            if (result_1) {
	                                return result_1;
	                            } else {
	                                context.clearRect(0, 0, contextSize, contextSize);
	                                return undefined;
	                            }
	                        }
	                    }
	                }
	            }
	        }
	        /** @type {Array<number>} */
	        var zs = Object.keys(this.executorsByZIndex_).map(Number);
	        zs.sort(_array.numberSafeCompareFunction);
	        var i, j, executors, executor, result;
	        for (i = zs.length - 1; i >= 0; --i) {
	            var zIndexKey = zs[i].toString();
	            executors = this.executorsByZIndex_[zIndexKey];
	            for (j = ORDER.length - 1; j >= 0; --j) {
	                builderType = ORDER[j];
	                executor = executors[builderType];
	                if (executor !== undefined) {
	                    result = executor.executeHitDetection(context, transform, rotation, featureCallback, hitExtent);
	                    if (result) {
	                        return result;
	                    }
	                }
	            }
	        }
	        return undefined;
	    };
	    /**
	     * @param {import("../../transform.js").Transform} transform Transform.
	     * @return {Array<number>} Clip coordinates.
	     */
	    ExecutorGroup.prototype.getClipCoords = function (transform) {
	        var maxExtent = this.maxExtent_;
	        if (!maxExtent) {
	            return null;
	        }
	        var minX = maxExtent[0];
	        var minY = maxExtent[1];
	        var maxX = maxExtent[2];
	        var maxY = maxExtent[3];
	        var flatClipCoords = [minX, minY, minX, maxY, maxX, maxY, maxX, minY];
	        (0, _transform.transform2D)(flatClipCoords, 0, 8, 2, transform, flatClipCoords);
	        return flatClipCoords;
	    };
	    /**
	     * @return {boolean} Is empty.
	     */
	    ExecutorGroup.prototype.isEmpty = function () {
	        return (0, _obj.isEmpty)(this.executorsByZIndex_);
	    };
	    /**
	     * @param {CanvasRenderingContext2D} context Context.
	     * @param {import("../../transform.js").Transform} transform Transform.
	     * @param {number} viewRotation View rotation.
	     * @param {boolean} snapToPixel Snap point symbols and test to integer pixel.
	     * @param {Array<BuilderType>=} opt_builderTypes Ordered replay types to replay.
	     *     Default is {@link module:ol/render/replay~ORDER}
	     * @param {Object<string, import("../canvas.js").DeclutterGroup>=} opt_declutterReplays Declutter replays.
	     */
	    ExecutorGroup.prototype.execute = function (context, transform, viewRotation, snapToPixel, opt_builderTypes, opt_declutterReplays) {
	        /** @type {Array<number>} */
	        var zs = Object.keys(this.executorsByZIndex_).map(Number);
	        zs.sort(_array.numberSafeCompareFunction);
	        // setup clipping so that the parts of over-simplified geometries are not
	        // visible outside the current extent when panning
	        if (this.maxExtent_) {
	            context.save();
	            this.clip(context, transform);
	        }
	        var builderTypes = opt_builderTypes ? opt_builderTypes : ORDER;
	        var i, ii, j, jj, replays, replay;
	        for (i = 0, ii = zs.length; i < ii; ++i) {
	            var zIndexKey = zs[i].toString();
	            replays = this.executorsByZIndex_[zIndexKey];
	            for (j = 0, jj = builderTypes.length; j < jj; ++j) {
	                var builderType = builderTypes[j];
	                replay = replays[builderType];
	                if (replay !== undefined) {
	                    if (opt_declutterReplays && (builderType == _BuilderType2.default.IMAGE || builderType == _BuilderType2.default.TEXT)) {
	                        var declutter = opt_declutterReplays[zIndexKey];
	                        if (!declutter) {
	                            opt_declutterReplays[zIndexKey] = [replay, transform.slice(0)];
	                        } else {
	                            declutter.push(replay, transform.slice(0));
	                        }
	                    } else {
	                        replay.execute(context, transform, viewRotation, snapToPixel);
	                    }
	                }
	            }
	        }
	        if (this.maxExtent_) {
	            context.restore();
	        }
	    };
	    return ExecutorGroup;
	}(_Disposable2.default);
	/**
	 * This cache is used for storing calculated pixel circles for increasing performance.
	 * It is a static property to allow each Replaygroup to access it.
	 * @type {Object<number, Array<Array<(boolean|undefined)>>>}
	 */
	var circleArrayCache = {
	    0: [[true]]
	};
	/**
	 * This method fills a row in the array from the given coordinate to the
	 * middle with `true`.
	 * @param {Array<Array<(boolean|undefined)>>} array The array that will be altered.
	 * @param {number} x X coordinate.
	 * @param {number} y Y coordinate.
	 */
	function fillCircleArrayRowToMiddle(array, x, y) {
	    var i;
	    var radius = Math.floor(array.length / 2);
	    if (x >= radius) {
	        for (i = radius; i < x; i++) {
	            array[i][y] = true;
	        }
	    } else if (x < radius) {
	        for (i = x + 1; i < radius; i++) {
	            array[i][y] = true;
	        }
	    }
	}
	/**
	 * This methods creates a circle inside a fitting array. Points inside the
	 * circle are marked by true, points on the outside are undefined.
	 * It uses the midpoint circle algorithm.
	 * A cache is used to increase performance.
	 * @param {number} radius Radius.
	 * @returns {Array<Array<(boolean|undefined)>>} An array with marked circle points.
	 */
	function getCircleArray(radius) {
	    if (circleArrayCache[radius] !== undefined) {
	        return circleArrayCache[radius];
	    }
	    var arraySize = radius * 2 + 1;
	    var arr = new Array(arraySize);
	    for (var i = 0; i < arraySize; i++) {
	        arr[i] = new Array(arraySize);
	    }
	    var x = radius;
	    var y = 0;
	    var error = 0;
	    while (x >= y) {
	        fillCircleArrayRowToMiddle(arr, radius + x, radius + y);
	        fillCircleArrayRowToMiddle(arr, radius + y, radius + x);
	        fillCircleArrayRowToMiddle(arr, radius - y, radius + x);
	        fillCircleArrayRowToMiddle(arr, radius - x, radius + y);
	        fillCircleArrayRowToMiddle(arr, radius - x, radius - y);
	        fillCircleArrayRowToMiddle(arr, radius - y, radius - x);
	        fillCircleArrayRowToMiddle(arr, radius + y, radius - x);
	        fillCircleArrayRowToMiddle(arr, radius + x, radius - y);
	        y++;
	        error += 1 + 2 * y;
	        if (2 * (error - x) + 1 > 0) {
	            x -= 1;
	            error += 1 - 2 * x;
	        }
	    }
	    circleArrayCache[radius] = arr;
	    return arr;
	}
	/**
	 * @param {!Object<string, Array<*>>} declutterReplays Declutter replays.
	 * @param {CanvasRenderingContext2D} context Context.
	 * @param {number} rotation Rotation.
	 * @param {number} opacity Opacity.
	 * @param {boolean} snapToPixel Snap point symbols and text to integer pixels.
	 * @param {Array<import("../../PluggableMap.js").DeclutterItems>} declutterItems Declutter items.
	 */
	function replayDeclutter(declutterReplays, context, rotation, opacity, snapToPixel, declutterItems) {
	    var zs = Object.keys(declutterReplays).map(Number).sort(_array.numberSafeCompareFunction);
	    for (var z = 0, zz = zs.length; z < zz; ++z) {
	        var executorData = declutterReplays[zs[z].toString()];
	        var currentExecutor = void 0;
	        for (var i = 0, ii = executorData.length; i < ii;) {
	            var executor = executorData[i++];
	            if (executor !== currentExecutor) {
	                currentExecutor = executor;
	                declutterItems.push({
	                    items: executor.declutterItems,
	                    opacity: opacity
	                });
	            }
	            var transform = executorData[i++];
	            executor.execute(context, transform, rotation, snapToPixel);
	        }
	    }
	}
	exports.default = ExecutorGroup;
	//# sourceMappingURL=ExecutorGroup.js.map

/***/ }),
/* 632 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	
	var _Instruction = __webpack_require__(106);
	
	var _Instruction2 = _interopRequireDefault(_Instruction);
	
	var _Builder = __webpack_require__(127);
	
	var _Builder2 = _interopRequireDefault(_Builder);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var __extends = undefined && undefined.__extends || function () {
	  var _extendStatics = function extendStatics(d, b) {
	    _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	      d.__proto__ = b;
	    } || function (d, b) {
	      for (var p in b) {
	        if (b.hasOwnProperty(p)) d[p] = b[p];
	      }
	    };
	    return _extendStatics(d, b);
	  };
	  return function (d, b) {
	    _extendStatics(d, b);
	    function __() {
	      this.constructor = d;
	    }
	    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	  };
	}();
	/**
	 * @module ol/render/canvas/ImageBuilder
	 */
	
	var CanvasImageBuilder = /** @class */function (_super) {
	  __extends(CanvasImageBuilder, _super);
	  /**
	   * @param {number} tolerance Tolerance.
	   * @param {import("../../extent.js").Extent} maxExtent Maximum extent.
	   * @param {number} resolution Resolution.
	   * @param {number} pixelRatio Pixel ratio.
	   */
	  function CanvasImageBuilder(tolerance, maxExtent, resolution, pixelRatio) {
	    var _this = _super.call(this, tolerance, maxExtent, resolution, pixelRatio) || this;
	    /**
	     * @private
	     * @type {import("../canvas.js").DeclutterGroups}
	     */
	    _this.declutterGroups_ = null;
	    /**
	     * @private
	     * @type {HTMLCanvasElement|HTMLVideoElement|HTMLImageElement}
	     */
	    _this.hitDetectionImage_ = null;
	    /**
	     * @private
	     * @type {HTMLCanvasElement|HTMLVideoElement|HTMLImageElement}
	     */
	    _this.image_ = null;
	    /**
	     * @private
	     * @type {number|undefined}
	     */
	    _this.anchorX_ = undefined;
	    /**
	     * @private
	     * @type {number|undefined}
	     */
	    _this.anchorY_ = undefined;
	    /**
	     * @private
	     * @type {number|undefined}
	     */
	    _this.height_ = undefined;
	    /**
	     * @private
	     * @type {number|undefined}
	     */
	    _this.opacity_ = undefined;
	    /**
	     * @private
	     * @type {number|undefined}
	     */
	    _this.originX_ = undefined;
	    /**
	     * @private
	     * @type {number|undefined}
	     */
	    _this.originY_ = undefined;
	    /**
	     * @private
	     * @type {boolean|undefined}
	     */
	    _this.rotateWithView_ = undefined;
	    /**
	     * @private
	     * @type {number|undefined}
	     */
	    _this.rotation_ = undefined;
	    /**
	     * @private
	     * @type {number|undefined}
	     */
	    _this.scale_ = undefined;
	    /**
	     * @private
	     * @type {number|undefined}
	     */
	    _this.width_ = undefined;
	    return _this;
	  }
	  /**
	   * @param {Array<number>} flatCoordinates Flat coordinates.
	   * @param {number} offset Offset.
	   * @param {number} end End.
	   * @param {number} stride Stride.
	   * @private
	   * @return {number} My end.
	   */
	  CanvasImageBuilder.prototype.drawCoordinates_ = function (flatCoordinates, offset, end, stride) {
	    return this.appendFlatCoordinates(flatCoordinates, offset, end, stride, false, false);
	  };
	  /**
	   * @inheritDoc
	   */
	  CanvasImageBuilder.prototype.drawPoint = function (pointGeometry, feature) {
	    if (!this.image_) {
	      return;
	    }
	    this.beginGeometry(pointGeometry, feature);
	    var flatCoordinates = pointGeometry.getFlatCoordinates();
	    var stride = pointGeometry.getStride();
	    var myBegin = this.coordinates.length;
	    var myEnd = this.drawCoordinates_(flatCoordinates, 0, flatCoordinates.length, stride);
	    this.instructions.push([_Instruction2.default.DRAW_IMAGE, myBegin, myEnd, this.image_,
	    // Remaining arguments to DRAW_IMAGE are in alphabetical order
	    this.anchorX_, this.anchorY_, this.declutterGroups_, this.height_, this.opacity_, this.originX_, this.originY_, this.rotateWithView_, this.rotation_, this.scale_ * this.pixelRatio, this.width_]);
	    this.hitDetectionInstructions.push([_Instruction2.default.DRAW_IMAGE, myBegin, myEnd, this.hitDetectionImage_,
	    // Remaining arguments to DRAW_IMAGE are in alphabetical order
	    this.anchorX_, this.anchorY_, this.declutterGroups_, this.height_, this.opacity_, this.originX_, this.originY_, this.rotateWithView_, this.rotation_, this.scale_, this.width_]);
	    this.endGeometry(feature);
	  };
	  /**
	   * @inheritDoc
	   */
	  CanvasImageBuilder.prototype.drawMultiPoint = function (multiPointGeometry, feature) {
	    if (!this.image_) {
	      return;
	    }
	    this.beginGeometry(multiPointGeometry, feature);
	    var flatCoordinates = multiPointGeometry.getFlatCoordinates();
	    var stride = multiPointGeometry.getStride();
	    var myBegin = this.coordinates.length;
	    var myEnd = this.drawCoordinates_(flatCoordinates, 0, flatCoordinates.length, stride);
	    this.instructions.push([_Instruction2.default.DRAW_IMAGE, myBegin, myEnd, this.image_,
	    // Remaining arguments to DRAW_IMAGE are in alphabetical order
	    this.anchorX_, this.anchorY_, this.declutterGroups_, this.height_, this.opacity_, this.originX_, this.originY_, this.rotateWithView_, this.rotation_, this.scale_ * this.pixelRatio, this.width_]);
	    this.hitDetectionInstructions.push([_Instruction2.default.DRAW_IMAGE, myBegin, myEnd, this.hitDetectionImage_,
	    // Remaining arguments to DRAW_IMAGE are in alphabetical order
	    this.anchorX_, this.anchorY_, this.declutterGroups_, this.height_, this.opacity_, this.originX_, this.originY_, this.rotateWithView_, this.rotation_, this.scale_, this.width_]);
	    this.endGeometry(feature);
	  };
	  /**
	   * @inheritDoc
	   */
	  CanvasImageBuilder.prototype.finish = function () {
	    this.reverseHitDetectionInstructions();
	    // FIXME this doesn't really protect us against further calls to draw*Geometry
	    this.anchorX_ = undefined;
	    this.anchorY_ = undefined;
	    this.hitDetectionImage_ = null;
	    this.image_ = null;
	    this.height_ = undefined;
	    this.scale_ = undefined;
	    this.opacity_ = undefined;
	    this.originX_ = undefined;
	    this.originY_ = undefined;
	    this.rotateWithView_ = undefined;
	    this.rotation_ = undefined;
	    this.width_ = undefined;
	    return _super.prototype.finish.call(this);
	  };
	  /**
	   * @inheritDoc
	   */
	  CanvasImageBuilder.prototype.setImageStyle = function (imageStyle, declutterGroups) {
	    var anchor = imageStyle.getAnchor();
	    var size = imageStyle.getSize();
	    var hitDetectionImage = imageStyle.getHitDetectionImage(1);
	    var image = imageStyle.getImage(1);
	    var origin = imageStyle.getOrigin();
	    this.anchorX_ = anchor[0];
	    this.anchorY_ = anchor[1];
	    this.declutterGroups_ = /** @type {import("../canvas.js").DeclutterGroups} */declutterGroups;
	    this.hitDetectionImage_ = hitDetectionImage;
	    this.image_ = image;
	    this.height_ = size[1];
	    this.opacity_ = imageStyle.getOpacity();
	    this.originX_ = origin[0];
	    this.originY_ = origin[1];
	    this.rotateWithView_ = imageStyle.getRotateWithView();
	    this.rotation_ = imageStyle.getRotation();
	    this.scale_ = imageStyle.getScale();
	    this.width_ = size[0];
	  };
	  return CanvasImageBuilder;
	}(_Builder2.default);
	exports.default = CanvasImageBuilder;
	//# sourceMappingURL=ImageBuilder.js.map

/***/ }),
/* 633 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	
	var _util = __webpack_require__(14);
	
	var _LRUCache = __webpack_require__(299);
	
	var _LRUCache2 = _interopRequireDefault(_LRUCache);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var __extends = undefined && undefined.__extends || function () {
	    var _extendStatics = function extendStatics(d, b) {
	        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	            d.__proto__ = b;
	        } || function (d, b) {
	            for (var p in b) {
	                if (b.hasOwnProperty(p)) d[p] = b[p];
	            }
	        };
	        return _extendStatics(d, b);
	    };
	    return function (d, b) {
	        _extendStatics(d, b);
	        function __() {
	            this.constructor = d;
	        }
	        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	    };
	}();
	
	/**
	 * @module ol/render/canvas/LabelCache
	 */
	/**
	 * @classdesc
	 * Cache of pre-rendered labels.
	 */
	var LabelCache = /** @class */function (_super) {
	    __extends(LabelCache, _super);
	    /**
	     * @inheritDoc
	     */
	    function LabelCache(opt_highWaterMark) {
	        var _this = _super.call(this, opt_highWaterMark) || this;
	        _this.consumers = {};
	        return _this;
	    }
	    LabelCache.prototype.clear = function () {
	        this.consumers = {};
	        _super.prototype.clear.call(this);
	    };
	    /**
	     * @override
	     * @param {string} key Label key.
	     * @param {import("./Executor.js").default} consumer Label consumer.
	     * @return {HTMLCanvasElement} Label.
	     */
	    LabelCache.prototype.get = function (key, consumer) {
	        var canvas = _super.prototype.get.call(this, key);
	        var consumerId = (0, _util.getUid)(consumer);
	        if (!(consumerId in this.consumers)) {
	            this.consumers[consumerId] = {};
	        }
	        this.consumers[consumerId][key] = true;
	        return canvas;
	    };
	    LabelCache.prototype.prune = function () {
	        outer: while (this.canExpireCache()) {
	            var key = this.peekLastKey();
	            for (var consumerId in this.consumers) {
	                if (key in this.consumers[consumerId]) {
	                    break outer;
	                }
	            }
	            var canvas = this.pop();
	            canvas.width = 0;
	            canvas.height = 0;
	            for (var consumerId in this.consumers) {
	                delete this.consumers[consumerId][key];
	            }
	        }
	    };
	    /**
	     * @param {import("./Executor.js").default} consumer Label consumer.
	     */
	    LabelCache.prototype.release = function (consumer) {
	        delete this.consumers[(0, _util.getUid)(consumer)];
	    };
	    return LabelCache;
	}(_LRUCache2.default);
	exports.default = LabelCache;
	//# sourceMappingURL=LabelCache.js.map

/***/ }),
/* 634 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	
	var _Instruction = __webpack_require__(106);
	
	var _Instruction2 = _interopRequireDefault(_Instruction);
	
	var _Builder = __webpack_require__(127);
	
	var _Builder2 = _interopRequireDefault(_Builder);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var __extends = undefined && undefined.__extends || function () {
	    var _extendStatics = function extendStatics(d, b) {
	        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	            d.__proto__ = b;
	        } || function (d, b) {
	            for (var p in b) {
	                if (b.hasOwnProperty(p)) d[p] = b[p];
	            }
	        };
	        return _extendStatics(d, b);
	    };
	    return function (d, b) {
	        _extendStatics(d, b);
	        function __() {
	            this.constructor = d;
	        }
	        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	    };
	}();
	/**
	 * @module ol/render/canvas/LineStringBuilder
	 */
	
	var CanvasLineStringBuilder = /** @class */function (_super) {
	    __extends(CanvasLineStringBuilder, _super);
	    /**
	     * @param {number} tolerance Tolerance.
	     * @param {import("../../extent.js").Extent} maxExtent Maximum extent.
	     * @param {number} resolution Resolution.
	     * @param {number} pixelRatio Pixel ratio.
	     */
	    function CanvasLineStringBuilder(tolerance, maxExtent, resolution, pixelRatio) {
	        return _super.call(this, tolerance, maxExtent, resolution, pixelRatio) || this;
	    }
	    /**
	     * @param {Array<number>} flatCoordinates Flat coordinates.
	     * @param {number} offset Offset.
	     * @param {number} end End.
	     * @param {number} stride Stride.
	     * @private
	     * @return {number} end.
	     */
	    CanvasLineStringBuilder.prototype.drawFlatCoordinates_ = function (flatCoordinates, offset, end, stride) {
	        var myBegin = this.coordinates.length;
	        var myEnd = this.appendFlatCoordinates(flatCoordinates, offset, end, stride, false, false);
	        var moveToLineToInstruction = [_Instruction2.default.MOVE_TO_LINE_TO, myBegin, myEnd];
	        this.instructions.push(moveToLineToInstruction);
	        this.hitDetectionInstructions.push(moveToLineToInstruction);
	        return end;
	    };
	    /**
	     * @inheritDoc
	     */
	    CanvasLineStringBuilder.prototype.drawLineString = function (lineStringGeometry, feature) {
	        var state = this.state;
	        var strokeStyle = state.strokeStyle;
	        var lineWidth = state.lineWidth;
	        if (strokeStyle === undefined || lineWidth === undefined) {
	            return;
	        }
	        this.updateStrokeStyle(state, this.applyStroke);
	        this.beginGeometry(lineStringGeometry, feature);
	        this.hitDetectionInstructions.push([_Instruction2.default.SET_STROKE_STYLE, state.strokeStyle, state.lineWidth, state.lineCap, state.lineJoin, state.miterLimit, state.lineDash, state.lineDashOffset], _Instruction.beginPathInstruction);
	        var flatCoordinates = lineStringGeometry.getFlatCoordinates();
	        var stride = lineStringGeometry.getStride();
	        this.drawFlatCoordinates_(flatCoordinates, 0, flatCoordinates.length, stride);
	        this.hitDetectionInstructions.push(_Instruction.strokeInstruction);
	        this.endGeometry(feature);
	    };
	    /**
	     * @inheritDoc
	     */
	    CanvasLineStringBuilder.prototype.drawMultiLineString = function (multiLineStringGeometry, feature) {
	        var state = this.state;
	        var strokeStyle = state.strokeStyle;
	        var lineWidth = state.lineWidth;
	        if (strokeStyle === undefined || lineWidth === undefined) {
	            return;
	        }
	        this.updateStrokeStyle(state, this.applyStroke);
	        this.beginGeometry(multiLineStringGeometry, feature);
	        this.hitDetectionInstructions.push([_Instruction2.default.SET_STROKE_STYLE, state.strokeStyle, state.lineWidth, state.lineCap, state.lineJoin, state.miterLimit, state.lineDash, state.lineDashOffset], _Instruction.beginPathInstruction);
	        var ends = multiLineStringGeometry.getEnds();
	        var flatCoordinates = multiLineStringGeometry.getFlatCoordinates();
	        var stride = multiLineStringGeometry.getStride();
	        var offset = 0;
	        for (var i = 0, ii = ends.length; i < ii; ++i) {
	            offset = this.drawFlatCoordinates_(flatCoordinates, offset, ends[i], stride);
	        }
	        this.hitDetectionInstructions.push(_Instruction.strokeInstruction);
	        this.endGeometry(feature);
	    };
	    /**
	     * @inheritDoc
	     */
	    CanvasLineStringBuilder.prototype.finish = function () {
	        var state = this.state;
	        if (state.lastStroke != undefined && state.lastStroke != this.coordinates.length) {
	            this.instructions.push(_Instruction.strokeInstruction);
	        }
	        this.reverseHitDetectionInstructions();
	        this.state = null;
	        return _super.prototype.finish.call(this);
	    };
	    /**
	     * @inheritDoc.
	     */
	    CanvasLineStringBuilder.prototype.applyStroke = function (state) {
	        if (state.lastStroke != undefined && state.lastStroke != this.coordinates.length) {
	            this.instructions.push(_Instruction.strokeInstruction);
	            state.lastStroke = this.coordinates.length;
	        }
	        state.lastStroke = 0;
	        _super.prototype.applyStroke.call(this, state);
	        this.instructions.push(_Instruction.beginPathInstruction);
	    };
	    return CanvasLineStringBuilder;
	}(_Builder2.default);
	exports.default = CanvasLineStringBuilder;
	//# sourceMappingURL=LineStringBuilder.js.map

/***/ }),
/* 635 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	
	var _simplify = __webpack_require__(103);
	
	var _canvas = __webpack_require__(74);
	
	var _Instruction = __webpack_require__(106);
	
	var _Instruction2 = _interopRequireDefault(_Instruction);
	
	var _Builder = __webpack_require__(127);
	
	var _Builder2 = _interopRequireDefault(_Builder);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var __extends = undefined && undefined.__extends || function () {
	    var _extendStatics = function extendStatics(d, b) {
	        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	            d.__proto__ = b;
	        } || function (d, b) {
	            for (var p in b) {
	                if (b.hasOwnProperty(p)) d[p] = b[p];
	            }
	        };
	        return _extendStatics(d, b);
	    };
	    return function (d, b) {
	        _extendStatics(d, b);
	        function __() {
	            this.constructor = d;
	        }
	        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	    };
	}();
	/**
	 * @module ol/render/canvas/PolygonBuilder
	 */
	
	var CanvasPolygonBuilder = /** @class */function (_super) {
	    __extends(CanvasPolygonBuilder, _super);
	    /**
	     * @param {number} tolerance Tolerance.
	     * @param {import("../../extent.js").Extent} maxExtent Maximum extent.
	     * @param {number} resolution Resolution.
	     * @param {number} pixelRatio Pixel ratio.
	     */
	    function CanvasPolygonBuilder(tolerance, maxExtent, resolution, pixelRatio) {
	        return _super.call(this, tolerance, maxExtent, resolution, pixelRatio) || this;
	    }
	    /**
	     * @param {Array<number>} flatCoordinates Flat coordinates.
	     * @param {number} offset Offset.
	     * @param {Array<number>} ends Ends.
	     * @param {number} stride Stride.
	     * @private
	     * @return {number} End.
	     */
	    CanvasPolygonBuilder.prototype.drawFlatCoordinatess_ = function (flatCoordinates, offset, ends, stride) {
	        var state = this.state;
	        var fill = state.fillStyle !== undefined;
	        var stroke = state.strokeStyle !== undefined;
	        var numEnds = ends.length;
	        this.instructions.push(_Instruction.beginPathInstruction);
	        this.hitDetectionInstructions.push(_Instruction.beginPathInstruction);
	        for (var i = 0; i < numEnds; ++i) {
	            var end = ends[i];
	            var myBegin = this.coordinates.length;
	            var myEnd = this.appendFlatCoordinates(flatCoordinates, offset, end, stride, true, !stroke);
	            var moveToLineToInstruction = [_Instruction2.default.MOVE_TO_LINE_TO, myBegin, myEnd];
	            this.instructions.push(moveToLineToInstruction);
	            this.hitDetectionInstructions.push(moveToLineToInstruction);
	            if (stroke) {
	                // Performance optimization: only call closePath() when we have a stroke.
	                // Otherwise the ring is closed already (see appendFlatCoordinates above).
	                this.instructions.push(_Instruction.closePathInstruction);
	                this.hitDetectionInstructions.push(_Instruction.closePathInstruction);
	            }
	            offset = end;
	        }
	        if (fill) {
	            this.instructions.push(_Instruction.fillInstruction);
	            this.hitDetectionInstructions.push(_Instruction.fillInstruction);
	        }
	        if (stroke) {
	            this.instructions.push(_Instruction.strokeInstruction);
	            this.hitDetectionInstructions.push(_Instruction.strokeInstruction);
	        }
	        return offset;
	    };
	    /**
	     * @inheritDoc
	     */
	    CanvasPolygonBuilder.prototype.drawCircle = function (circleGeometry, feature) {
	        var state = this.state;
	        var fillStyle = state.fillStyle;
	        var strokeStyle = state.strokeStyle;
	        if (fillStyle === undefined && strokeStyle === undefined) {
	            return;
	        }
	        this.setFillStrokeStyles_();
	        this.beginGeometry(circleGeometry, feature);
	        if (state.fillStyle !== undefined) {
	            this.hitDetectionInstructions.push([_Instruction2.default.SET_FILL_STYLE, _canvas.defaultFillStyle]);
	        }
	        if (state.strokeStyle !== undefined) {
	            this.hitDetectionInstructions.push([_Instruction2.default.SET_STROKE_STYLE, state.strokeStyle, state.lineWidth, state.lineCap, state.lineJoin, state.miterLimit, state.lineDash, state.lineDashOffset]);
	        }
	        var flatCoordinates = circleGeometry.getFlatCoordinates();
	        var stride = circleGeometry.getStride();
	        var myBegin = this.coordinates.length;
	        this.appendFlatCoordinates(flatCoordinates, 0, flatCoordinates.length, stride, false, false);
	        var circleInstruction = [_Instruction2.default.CIRCLE, myBegin];
	        this.instructions.push(_Instruction.beginPathInstruction, circleInstruction);
	        this.hitDetectionInstructions.push(_Instruction.beginPathInstruction, circleInstruction);
	        if (state.fillStyle !== undefined) {
	            this.instructions.push(_Instruction.fillInstruction);
	            this.hitDetectionInstructions.push(_Instruction.fillInstruction);
	        }
	        if (state.strokeStyle !== undefined) {
	            this.instructions.push(_Instruction.strokeInstruction);
	            this.hitDetectionInstructions.push(_Instruction.strokeInstruction);
	        }
	        this.endGeometry(feature);
	    };
	    /**
	     * @inheritDoc
	     */
	    CanvasPolygonBuilder.prototype.drawPolygon = function (polygonGeometry, feature) {
	        var state = this.state;
	        var fillStyle = state.fillStyle;
	        var strokeStyle = state.strokeStyle;
	        if (fillStyle === undefined && strokeStyle === undefined) {
	            return;
	        }
	        this.setFillStrokeStyles_();
	        this.beginGeometry(polygonGeometry, feature);
	        if (state.fillStyle !== undefined) {
	            this.hitDetectionInstructions.push([_Instruction2.default.SET_FILL_STYLE, _canvas.defaultFillStyle]);
	        }
	        if (state.strokeStyle !== undefined) {
	            this.hitDetectionInstructions.push([_Instruction2.default.SET_STROKE_STYLE, state.strokeStyle, state.lineWidth, state.lineCap, state.lineJoin, state.miterLimit, state.lineDash, state.lineDashOffset]);
	        }
	        var ends = polygonGeometry.getEnds();
	        var flatCoordinates = polygonGeometry.getOrientedFlatCoordinates();
	        var stride = polygonGeometry.getStride();
	        this.drawFlatCoordinatess_(flatCoordinates, 0, ends, stride);
	        this.endGeometry(feature);
	    };
	    /**
	     * @inheritDoc
	     */
	    CanvasPolygonBuilder.prototype.drawMultiPolygon = function (multiPolygonGeometry, feature) {
	        var state = this.state;
	        var fillStyle = state.fillStyle;
	        var strokeStyle = state.strokeStyle;
	        if (fillStyle === undefined && strokeStyle === undefined) {
	            return;
	        }
	        this.setFillStrokeStyles_();
	        this.beginGeometry(multiPolygonGeometry, feature);
	        if (state.fillStyle !== undefined) {
	            this.hitDetectionInstructions.push([_Instruction2.default.SET_FILL_STYLE, _canvas.defaultFillStyle]);
	        }
	        if (state.strokeStyle !== undefined) {
	            this.hitDetectionInstructions.push([_Instruction2.default.SET_STROKE_STYLE, state.strokeStyle, state.lineWidth, state.lineCap, state.lineJoin, state.miterLimit, state.lineDash, state.lineDashOffset]);
	        }
	        var endss = multiPolygonGeometry.getEndss();
	        var flatCoordinates = multiPolygonGeometry.getOrientedFlatCoordinates();
	        var stride = multiPolygonGeometry.getStride();
	        var offset = 0;
	        for (var i = 0, ii = endss.length; i < ii; ++i) {
	            offset = this.drawFlatCoordinatess_(flatCoordinates, offset, endss[i], stride);
	        }
	        this.endGeometry(feature);
	    };
	    /**
	     * @inheritDoc
	     */
	    CanvasPolygonBuilder.prototype.finish = function () {
	        this.reverseHitDetectionInstructions();
	        this.state = null;
	        // We want to preserve topology when drawing polygons.  Polygons are
	        // simplified using quantization and point elimination. However, we might
	        // have received a mix of quantized and non-quantized geometries, so ensure
	        // that all are quantized by quantizing all coordinates in the batch.
	        var tolerance = this.tolerance;
	        if (tolerance !== 0) {
	            var coordinates = this.coordinates;
	            for (var i = 0, ii = coordinates.length; i < ii; ++i) {
	                coordinates[i] = (0, _simplify.snap)(coordinates[i], tolerance);
	            }
	        }
	        return _super.prototype.finish.call(this);
	    };
	    /**
	     * @private
	     */
	    CanvasPolygonBuilder.prototype.setFillStrokeStyles_ = function () {
	        var state = this.state;
	        var fillStyle = state.fillStyle;
	        if (fillStyle !== undefined) {
	            this.updateFillStyle(state, this.createFill);
	        }
	        if (state.strokeStyle !== undefined) {
	            this.updateStrokeStyle(state, this.applyStroke);
	        }
	    };
	    return CanvasPolygonBuilder;
	}(_Builder2.default);
	exports.default = CanvasPolygonBuilder;
	//# sourceMappingURL=PolygonBuilder.js.map

/***/ }),
/* 636 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	exports.createHitDetectionImageData = createHitDetectionImageData;
	exports.hitDetect = hitDetect;
	
	var _Immediate = __webpack_require__(290);
	
	var _Immediate2 = _interopRequireDefault(_Immediate);
	
	var _dom = __webpack_require__(34);
	
	var _style = __webpack_require__(653);
	
	var _IconAnchorUnits = __webpack_require__(301);
	
	var _IconAnchorUnits2 = _interopRequireDefault(_IconAnchorUnits);
	
	var _GeometryType = __webpack_require__(22);
	
	var _GeometryType2 = _interopRequireDefault(_GeometryType);
	
	var _extent = __webpack_require__(4);
	
	var _array = __webpack_require__(18);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	/**
	 * @param {import("../../size.js").Size} size Canvas size in css pixels.
	 * @param {Array<import("../../transform.js").Transform>} transforms Transforms
	 * for rendering features to all worlds of the viewport, from coordinates to css
	 * pixels.
	 * @param {Array<import("../../Feature.js").FeatureLike>} features
	 * Features to consider for hit detection.
	 * @param {import("../../style/Style.js").StyleFunction|undefined} styleFunction
	 * Layer style function.
	 * @param {import("../../extent.js").Extent} extent Extent.
	 * @param {number} resolution Resolution.
	 * @param {number} rotation Rotation.
	 * @return {ImageData} Hit detection image data.
	 */
	function createHitDetectionImageData(size, transforms, features, styleFunction, extent, resolution, rotation) {
	    var width = size[0] / 2;
	    var height = size[1] / 2;
	    var context = (0, _dom.createCanvasContext2D)(width, height);
	    context.imageSmoothingEnabled = false;
	    var canvas = context.canvas;
	    var renderer = new _Immediate2.default(context, 0.5, extent, null, rotation);
	    var featureCount = features.length;
	    // Stretch hit detection index to use the whole available color range
	    var indexFactor = Math.ceil(256 * 256 * 256 / featureCount);
	    var featuresByZIndex = {};
	    for (var i = 0; i < featureCount; ++i) {
	        var feature = features[i];
	        var featureStyleFunction = feature.getStyleFunction() || styleFunction;
	        if (!styleFunction) {
	            continue;
	        }
	        var styles = featureStyleFunction(feature, resolution);
	        if (!Array.isArray(styles)) {
	            styles = [styles];
	        }
	        var index = i * indexFactor;
	        var color = '#' + ('000000' + index.toString(16)).slice(-6);
	        for (var j = 0, jj = styles.length; j < jj; ++j) {
	            var originalStyle = styles[j];
	            var style = originalStyle.clone();
	            var fill = style.getFill();
	            if (fill) {
	                fill.setColor(color);
	            }
	            var stroke = style.getStroke();
	            if (stroke) {
	                stroke.setColor(color);
	            }
	            style.setText(undefined);
	            var image = originalStyle.getImage();
	            if (image) {
	                var imgSize = image.getImageSize();
	                var canvas_1 = document.createElement('canvas');
	                canvas_1.width = imgSize[0];
	                canvas_1.height = imgSize[1];
	                var imgContext = canvas_1.getContext('2d', { alpha: false });
	                imgContext.fillStyle = color;
	                var img = imgContext.canvas;
	                imgContext.fillRect(0, 0, img.width, img.height);
	                var width_1 = imgSize ? imgSize[0] : img.width;
	                var height_1 = imgSize ? imgSize[1] : img.height;
	                var iconContext = (0, _dom.createCanvasContext2D)(width_1, height_1);
	                iconContext.drawImage(img, 0, 0);
	                style.setImage(new _style.Icon({
	                    img: img,
	                    imgSize: imgSize,
	                    anchor: image.getAnchor(),
	                    anchorXUnits: _IconAnchorUnits2.default.PIXELS,
	                    anchorYUnits: _IconAnchorUnits2.default.PIXELS,
	                    offset: image.getOrigin(),
	                    size: image.getSize(),
	                    opacity: image.getOpacity(),
	                    scale: image.getScale(),
	                    rotation: image.getRotation(),
	                    rotateWithView: image.getRotateWithView()
	                }));
	            }
	            var zIndex = Number(style.getZIndex());
	            var byGeometryType = featuresByZIndex[zIndex];
	            if (!byGeometryType) {
	                byGeometryType = {};
	                featuresByZIndex[zIndex] = byGeometryType;
	                byGeometryType[_GeometryType2.default.POLYGON] = [];
	                byGeometryType[_GeometryType2.default.CIRCLE] = [];
	                byGeometryType[_GeometryType2.default.LINE_STRING] = [];
	                byGeometryType[_GeometryType2.default.POINT] = [];
	            }
	            var geometry = style.getGeometryFunction()(feature);
	            if (geometry && (0, _extent.intersects)(extent, geometry.getExtent())) {
	                byGeometryType[geometry.getType().replace('Multi', '')].push(geometry, style);
	            }
	        }
	    }
	    var zIndexKeys = Object.keys(featuresByZIndex).map(Number).sort(_array.numberSafeCompareFunction);
	    for (var i = 0, ii = zIndexKeys.length; i < ii; ++i) {
	        var byGeometryType = featuresByZIndex[zIndexKeys[i]];
	        for (var type in byGeometryType) {
	            var geomAndStyle = byGeometryType[type];
	            for (var j = 0, jj = geomAndStyle.length; j < jj; j += 2) {
	                renderer.setStyle(geomAndStyle[j + 1]);
	                for (var k = 0, kk = transforms.length; k < kk; ++k) {
	                    renderer.setTransform(transforms[k]);
	                    renderer.drawGeometry(geomAndStyle[j]);
	                }
	            }
	        }
	    }
	    return context.getImageData(0, 0, canvas.width, canvas.height);
	}
	/**
	 * @param {import("../../pixel").Pixel} pixel Pixel coordinate on the hit
	 * detection canvas in css pixels.
	 * @param {Array<import("../../Feature").FeatureLike>} features Features. Has to
	 * match the `features` array that was passed to `createHitDetectionImageData()`.
	 * @param {ImageData} imageData Hit detection image data generated by
	 * `createHitDetectionImageData()`.
	 * @return {Array<import("../../Feature").FeatureLike>} features Features.
	 */
	/**
	 * @module ol/render/canvas/hitdetet
	 */
	function hitDetect(pixel, features, imageData) {
	    var resultFeatures = [];
	    if (imageData) {
	        var index = (Math.round(pixel[0] / 2) + Math.round(pixel[1] / 2) * imageData.width) * 4;
	        var r = imageData.data[index];
	        var g = imageData.data[index + 1];
	        var b = imageData.data[index + 2];
	        var i = b + 256 * (g + 256 * r);
	        var indexFactor = Math.ceil(256 * 256 * 256 / features.length);
	        if (i % indexFactor === 0) {
	            resultFeatures.push(features[i / indexFactor]);
	        }
	    }
	    return resultFeatures;
	}
	//# sourceMappingURL=hitdetect.js.map

/***/ }),
/* 637 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	
	var _util = __webpack_require__(14);
	
	var _ImageState = __webpack_require__(100);
	
	var _ImageState2 = _interopRequireDefault(_ImageState);
	
	var _Observable = __webpack_require__(254);
	
	var _Observable2 = _interopRequireDefault(_Observable);
	
	var _EventType = __webpack_require__(10);
	
	var _EventType2 = _interopRequireDefault(_EventType);
	
	var _State = __webpack_require__(107);
	
	var _State2 = _interopRequireDefault(_State);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var __extends = undefined && undefined.__extends || function () {
	    var _extendStatics = function extendStatics(d, b) {
	        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	            d.__proto__ = b;
	        } || function (d, b) {
	            for (var p in b) {
	                if (b.hasOwnProperty(p)) d[p] = b[p];
	            }
	        };
	        return _extendStatics(d, b);
	    };
	    return function (d, b) {
	        _extendStatics(d, b);
	        function __() {
	            this.constructor = d;
	        }
	        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	    };
	}();
	/**
	 * @module ol/renderer/Layer
	 */
	
	/**
	 * @template {import("../layer/Layer.js").default} LayerType
	 */
	var LayerRenderer = /** @class */function (_super) {
	    __extends(LayerRenderer, _super);
	    /**
	     * @param {LayerType} layer Layer.
	     */
	    function LayerRenderer(layer) {
	        var _this = _super.call(this) || this;
	        /** @private */
	        _this.boundHandleImageChange_ = _this.handleImageChange_.bind(_this);
	        /**
	         * @private
	         * @type {LayerType}
	         */
	        _this.layer_ = layer;
	        return _this;
	    }
	    /**
	     * Asynchronous layer level hit detection.
	     * @param {import("../pixel.js").Pixel} pixel Pixel.
	     * @return {Promise<Array<import("../Feature").default>>} Promise that resolves with
	     * an array of features.
	     */
	    LayerRenderer.prototype.getFeatures = function (pixel) {
	        return (0, _util.abstract)();
	    };
	    /**
	     * Determine whether render should be called.
	     * @abstract
	     * @param {import("../PluggableMap.js").FrameState} frameState Frame state.
	     * @return {boolean} Layer is ready to be rendered.
	     */
	    LayerRenderer.prototype.prepareFrame = function (frameState) {
	        return (0, _util.abstract)();
	    };
	    /**
	     * Render the layer.
	     * @abstract
	     * @param {import("../PluggableMap.js").FrameState} frameState Frame state.
	     * @param {HTMLElement} target Target that may be used to render content to.
	     * @return {HTMLElement} The rendered element.
	     */
	    LayerRenderer.prototype.renderFrame = function (frameState, target) {
	        return (0, _util.abstract)();
	    };
	    /**
	     * @param {Object<number, Object<string, import("../Tile.js").default>>} tiles Lookup of loaded tiles by zoom level.
	     * @param {number} zoom Zoom level.
	     * @param {import("../Tile.js").default} tile Tile.
	     */
	    LayerRenderer.prototype.loadedTileCallback = function (tiles, zoom, tile) {
	        if (!tiles[zoom]) {
	            tiles[zoom] = {};
	        }
	        tiles[zoom][tile.tileCoord.toString()] = tile;
	    };
	    /**
	     * Create a function that adds loaded tiles to the tile lookup.
	     * @param {import("../source/Tile.js").default} source Tile source.
	     * @param {import("../proj/Projection.js").default} projection Projection of the tiles.
	     * @param {Object<number, Object<string, import("../Tile.js").default>>} tiles Lookup of loaded tiles by zoom level.
	     * @return {function(number, import("../TileRange.js").default):boolean} A function that can be
	     *     called with a zoom level and a tile range to add loaded tiles to the lookup.
	     * @protected
	     */
	    LayerRenderer.prototype.createLoadedTileFinder = function (source, projection, tiles) {
	        return (
	            /**
	             * @param {number} zoom Zoom level.
	             * @param {import("../TileRange.js").default} tileRange Tile range.
	             * @return {boolean} The tile range is fully loaded.
	             * @this {LayerRenderer}
	             */
	            function (zoom, tileRange) {
	                var callback = this.loadedTileCallback.bind(this, tiles, zoom);
	                return source.forEachLoadedTile(projection, zoom, tileRange, callback);
	            }.bind(this)
	        );
	    };
	    /**
	     * @abstract
	     * @param {import("../coordinate.js").Coordinate} coordinate Coordinate.
	     * @param {import("../PluggableMap.js").FrameState} frameState Frame state.
	     * @param {number} hitTolerance Hit tolerance in pixels.
	     * @param {function(import("../Feature.js").FeatureLike, import("../layer/Layer.js").default): T} callback Feature callback.
	     * @param {Array<import("../Feature.js").FeatureLike>} declutteredFeatures Decluttered features.
	     * @return {T|void} Callback result.
	     * @template T
	     */
	    LayerRenderer.prototype.forEachFeatureAtCoordinate = function (coordinate, frameState, hitTolerance, callback, declutteredFeatures) {};
	    /**
	     * @abstract
	     * @param {import("../pixel.js").Pixel} pixel Pixel.
	     * @param {import("../PluggableMap.js").FrameState} frameState FrameState.
	     * @param {number} hitTolerance Hit tolerance in pixels.
	     * @return {Uint8ClampedArray|Uint8Array} The result.  If there is no data at the pixel
	     *    location, null will be returned.  If there is data, but pixel values cannot be
	     *    returned, and empty array will be returned.
	     */
	    LayerRenderer.prototype.getDataAtPixel = function (pixel, frameState, hitTolerance) {
	        return (0, _util.abstract)();
	    };
	    /**
	     * @return {LayerType} Layer.
	     */
	    LayerRenderer.prototype.getLayer = function () {
	        return this.layer_;
	    };
	    /**
	     * Perform action necessary to get the layer rendered after new fonts have loaded
	     * @abstract
	     */
	    LayerRenderer.prototype.handleFontsChanged = function () {};
	    /**
	     * Handle changes in image state.
	     * @param {import("../events/Event.js").default} event Image change event.
	     * @private
	     */
	    LayerRenderer.prototype.handleImageChange_ = function (event) {
	        var image = /** @type {import("../Image.js").default} */event.target;
	        if (image.getState() === _ImageState2.default.LOADED) {
	            this.renderIfReadyAndVisible();
	        }
	    };
	    /**
	     * Load the image if not already loaded, and register the image change
	     * listener if needed.
	     * @param {import("../ImageBase.js").default} image Image.
	     * @return {boolean} `true` if the image is already loaded, `false` otherwise.
	     * @protected
	     */
	    LayerRenderer.prototype.loadImage = function (image) {
	        var imageState = image.getState();
	        if (imageState != _ImageState2.default.LOADED && imageState != _ImageState2.default.ERROR) {
	            image.addEventListener(_EventType2.default.CHANGE, this.boundHandleImageChange_);
	        }
	        if (imageState == _ImageState2.default.IDLE) {
	            image.load();
	            imageState = image.getState();
	        }
	        return imageState == _ImageState2.default.LOADED;
	    };
	    /**
	     * @protected
	     */
	    LayerRenderer.prototype.renderIfReadyAndVisible = function () {
	        var layer = this.getLayer();
	        if (layer.getVisible() && layer.getSourceState() == _State2.default.READY) {
	            layer.changed();
	        }
	    };
	    return LayerRenderer;
	}(_Observable2.default);
	exports.default = LayerRenderer;
	//# sourceMappingURL=Layer.js.map

/***/ }),
/* 638 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	
	var _util = __webpack_require__(14);
	
	var _Disposable = __webpack_require__(122);
	
	var _Disposable2 = _interopRequireDefault(_Disposable);
	
	var _extent = __webpack_require__(4);
	
	var _functions = __webpack_require__(31);
	
	var _Layer = __webpack_require__(126);
	
	var _IconImageCache = __webpack_require__(303);
	
	var _transform = __webpack_require__(48);
	
	var _render = __webpack_require__(627);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var __extends = undefined && undefined.__extends || function () {
	    var _extendStatics = function extendStatics(d, b) {
	        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	            d.__proto__ = b;
	        } || function (d, b) {
	            for (var p in b) {
	                if (b.hasOwnProperty(p)) d[p] = b[p];
	            }
	        };
	        return _extendStatics(d, b);
	    };
	    return function (d, b) {
	        _extendStatics(d, b);
	        function __() {
	            this.constructor = d;
	        }
	        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	    };
	}();
	/**
	 * @module ol/renderer/Map
	 */
	
	/**
	 * @abstract
	 */
	var MapRenderer = /** @class */function (_super) {
	    __extends(MapRenderer, _super);
	    /**
	     * @param {import("../PluggableMap.js").default} map Map.
	     */
	    function MapRenderer(map) {
	        var _this = _super.call(this) || this;
	        /**
	         * @private
	         * @type {import("../PluggableMap.js").default}
	         */
	        _this.map_ = map;
	        /**
	         * @private
	         */
	        _this.declutterTree_ = null;
	        return _this;
	    }
	    /**
	     * @abstract
	     * @param {import("../render/EventType.js").default} type Event type.
	     * @param {import("../PluggableMap.js").FrameState} frameState Frame state.
	     */
	    MapRenderer.prototype.dispatchRenderEvent = function (type, frameState) {
	        (0, _util.abstract)();
	    };
	    /**
	     * @param {import("../PluggableMap.js").FrameState} frameState FrameState.
	     * @protected
	     */
	    MapRenderer.prototype.calculateMatrices2D = function (frameState) {
	        var viewState = frameState.viewState;
	        var coordinateToPixelTransform = frameState.coordinateToPixelTransform;
	        var pixelToCoordinateTransform = frameState.pixelToCoordinateTransform;
	        (0, _transform.compose)(coordinateToPixelTransform, frameState.size[0] / 2, frameState.size[1] / 2, 1 / viewState.resolution, -1 / viewState.resolution, -viewState.rotation, -viewState.center[0], -viewState.center[1]);
	        (0, _transform.makeInverse)(pixelToCoordinateTransform, coordinateToPixelTransform);
	    };
	    /**
	     * @param {import("../coordinate.js").Coordinate} coordinate Coordinate.
	     * @param {import("../PluggableMap.js").FrameState} frameState FrameState.
	     * @param {number} hitTolerance Hit tolerance in pixels.
	     * @param {boolean} checkWrapped Check for wrapped geometries.
	     * @param {function(this: S, import("../Feature.js").FeatureLike,
	     *     import("../layer/Layer.js").default): T} callback Feature callback.
	     * @param {S} thisArg Value to use as `this` when executing `callback`.
	     * @param {function(this: U, import("../layer/Layer.js").default): boolean} layerFilter Layer filter
	     *     function, only layers which are visible and for which this function
	     *     returns `true` will be tested for features.  By default, all visible
	     *     layers will be tested.
	     * @param {U} thisArg2 Value to use as `this` when executing `layerFilter`.
	     * @return {T|undefined} Callback result.
	     * @template S,T,U
	     */
	    MapRenderer.prototype.forEachFeatureAtCoordinate = function (coordinate, frameState, hitTolerance, checkWrapped, callback, thisArg, layerFilter, thisArg2) {
	        var result;
	        var viewState = frameState.viewState;
	        /**
	         * @param {boolean} managed Managed layer.
	         * @param {import("../Feature.js").FeatureLike} feature Feature.
	         * @param {import("../layer/Layer.js").default} layer Layer.
	         * @return {?} Callback result.
	         */
	        function forEachFeatureAtCoordinate(managed, feature, layer) {
	            return callback.call(thisArg, feature, managed ? layer : null);
	        }
	        var projection = viewState.projection;
	        var translatedCoordinate = coordinate;
	        var offsets = [[0, 0]];
	        if (projection.canWrapX()) {
	            var projectionExtent = projection.getExtent();
	            var worldWidth = (0, _extent.getWidth)(projectionExtent);
	            var x = coordinate[0];
	            if (x < projectionExtent[0] || x > projectionExtent[2]) {
	                var worldsAway = Math.ceil((projectionExtent[0] - x) / worldWidth);
	                translatedCoordinate = [x + worldWidth * worldsAway, coordinate[1]];
	            }
	            if (checkWrapped) {
	                offsets.push([-worldWidth, 0], [worldWidth, 0]);
	            }
	        }
	        var layerStates = frameState.layerStatesArray;
	        var numLayers = layerStates.length;
	        var declutteredFeatures;
	        if (this.declutterTree_) {
	            declutteredFeatures = this.declutterTree_.all().map(function (entry) {
	                return entry.value;
	            });
	        }
	        var tmpCoord = [];
	        for (var i = 0; i < offsets.length; i++) {
	            for (var j = numLayers - 1; j >= 0; --j) {
	                var layerState = layerStates[j];
	                var layer = /** @type {import("../layer/Layer.js").default} */layerState.layer;
	                if (layer.hasRenderer() && (0, _Layer.inView)(layerState, viewState) && layerFilter.call(thisArg2, layer)) {
	                    var layerRenderer = layer.getRenderer();
	                    var source = layer.getSource();
	                    if (layerRenderer && source) {
	                        var coordinates = source.getWrapX() ? translatedCoordinate : coordinate;
	                        var callback_1 = forEachFeatureAtCoordinate.bind(null, layerState.managed);
	                        tmpCoord[0] = coordinates[0] + offsets[i][0];
	                        tmpCoord[1] = coordinates[1] + offsets[i][1];
	                        result = layerRenderer.forEachFeatureAtCoordinate(tmpCoord, frameState, hitTolerance, callback_1, declutteredFeatures);
	                    }
	                    if (result) {
	                        return result;
	                    }
	                }
	            }
	        }
	        return undefined;
	    };
	    /**
	     * @abstract
	     * @param {import("../pixel.js").Pixel} pixel Pixel.
	     * @param {import("../PluggableMap.js").FrameState} frameState FrameState.
	     * @param {number} hitTolerance Hit tolerance in pixels.
	     * @param {function(this: S, import("../layer/Layer.js").default, (Uint8ClampedArray|Uint8Array)): T} callback Layer
	     *     callback.
	     * @param {function(this: U, import("../layer/Layer.js").default): boolean} layerFilter Layer filter
	     *     function, only layers which are visible and for which this function
	     *     returns `true` will be tested for features.  By default, all visible
	     *     layers will be tested.
	     * @return {T|undefined} Callback result.
	     * @template S,T,U
	     */
	    MapRenderer.prototype.forEachLayerAtPixel = function (pixel, frameState, hitTolerance, callback, layerFilter) {
	        return (0, _util.abstract)();
	    };
	    /**
	     * @param {import("../coordinate.js").Coordinate} coordinate Coordinate.
	     * @param {import("../PluggableMap.js").FrameState} frameState FrameState.
	     * @param {number} hitTolerance Hit tolerance in pixels.
	     * @param {boolean} checkWrapped Check for wrapped geometries.
	     * @param {function(this: U, import("../layer/Layer.js").default): boolean} layerFilter Layer filter
	     *     function, only layers which are visible and for which this function
	     *     returns `true` will be tested for features.  By default, all visible
	     *     layers will be tested.
	     * @param {U} thisArg Value to use as `this` when executing `layerFilter`.
	     * @return {boolean} Is there a feature at the given coordinate?
	     * @template U
	     */
	    MapRenderer.prototype.hasFeatureAtCoordinate = function (coordinate, frameState, hitTolerance, checkWrapped, layerFilter, thisArg) {
	        var hasFeature = this.forEachFeatureAtCoordinate(coordinate, frameState, hitTolerance, checkWrapped, _functions.TRUE, this, layerFilter, thisArg);
	        return hasFeature !== undefined;
	    };
	    /**
	     * @return {import("../PluggableMap.js").default} Map.
	     */
	    MapRenderer.prototype.getMap = function () {
	        return this.map_;
	    };
	    /**
	     * Render.
	     * @param {?import("../PluggableMap.js").FrameState} frameState Frame state.
	     */
	    MapRenderer.prototype.renderFrame = function (frameState) {
	        this.declutterTree_ = (0, _render.renderDeclutterItems)(frameState, this.declutterTree_);
	    };
	    /**
	     * @param {import("../PluggableMap.js").FrameState} frameState Frame state.
	     * @protected
	     */
	    MapRenderer.prototype.scheduleExpireIconCache = function (frameState) {
	        if (_IconImageCache.shared.canExpireCache()) {
	            frameState.postRenderFunctions.push(expireIconCache);
	        }
	    };
	    return MapRenderer;
	}(_Disposable2.default);
	/**
	 * @param {import("../PluggableMap.js").default} map Map.
	 * @param {import("../PluggableMap.js").FrameState} frameState Frame state.
	 */
	function expireIconCache(map, frameState) {
	    _IconImageCache.shared.expire();
	}
	exports.default = MapRenderer;
	//# sourceMappingURL=Map.js.map

/***/ }),
/* 639 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	
	var _util = __webpack_require__(14);
	
	var _proj = __webpack_require__(16);
	
	var _TileRange = __webpack_require__(260);
	
	var _TileRange2 = _interopRequireDefault(_TileRange);
	
	var _TileState = __webpack_require__(70);
	
	var _TileState2 = _interopRequireDefault(_TileState);
	
	var _extent = __webpack_require__(4);
	
	var _Layer = __webpack_require__(293);
	
	var _Layer2 = _interopRequireDefault(_Layer);
	
	var _transform = __webpack_require__(48);
	
	var _array = __webpack_require__(18);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var __extends = undefined && undefined.__extends || function () {
	    var _extendStatics = function extendStatics(d, b) {
	        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	            d.__proto__ = b;
	        } || function (d, b) {
	            for (var p in b) {
	                if (b.hasOwnProperty(p)) d[p] = b[p];
	            }
	        };
	        return _extendStatics(d, b);
	    };
	    return function (d, b) {
	        _extendStatics(d, b);
	        function __() {
	            this.constructor = d;
	        }
	        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	    };
	}();
	/**
	 * @module ol/renderer/canvas/TileLayer
	 */
	
	/**
	 * @classdesc
	 * Canvas renderer for tile layers.
	 * @api
	 */
	var CanvasTileLayerRenderer = /** @class */function (_super) {
	    __extends(CanvasTileLayerRenderer, _super);
	    /**
	     * @param {import("../../layer/Tile.js").default|import("../../layer/VectorTile.js").default} tileLayer Tile layer.
	     */
	    function CanvasTileLayerRenderer(tileLayer) {
	        var _this = _super.call(this, tileLayer) || this;
	        /**
	         * Rendered extent has changed since the previous `renderFrame()` call
	         * @type {boolean}
	         */
	        _this.extentChanged = true;
	        /**
	         * @private
	         * @type {?import("../../extent.js").Extent}
	         */
	        _this.renderedExtent_ = null;
	        /**
	         * @protected
	         * @type {number}
	         */
	        _this.renderedPixelRatio;
	        /**
	         * @protected
	         * @type {import("../../proj/Projection.js").default}
	         */
	        _this.renderedProjection = null;
	        /**
	         * @protected
	         * @type {number}
	         */
	        _this.renderedRevision;
	        /**
	         * @protected
	         * @type {!Array<import("../../Tile.js").default>}
	         */
	        _this.renderedTiles = [];
	        /**
	         * @private
	         * @type {boolean}
	         */
	        _this.newTiles_ = false;
	        /**
	         * @protected
	         * @type {import("../../extent.js").Extent}
	         */
	        _this.tmpExtent = (0, _extent.createEmpty)();
	        /**
	         * @private
	         * @type {import("../../TileRange.js").default}
	         */
	        _this.tmpTileRange_ = new _TileRange2.default(0, 0, 0, 0);
	        return _this;
	    }
	    /**
	     * @protected
	     * @param {import("../../Tile.js").default} tile Tile.
	     * @return {boolean} Tile is drawable.
	     */
	    CanvasTileLayerRenderer.prototype.isDrawableTile = function (tile) {
	        var tileLayer = this.getLayer();
	        var tileState = tile.getState();
	        var useInterimTilesOnError = tileLayer.getUseInterimTilesOnError();
	        return tileState == _TileState2.default.LOADED || tileState == _TileState2.default.EMPTY || tileState == _TileState2.default.ERROR && !useInterimTilesOnError;
	    };
	    /**
	     * @param {number} z Tile coordinate z.
	     * @param {number} x Tile coordinate x.
	     * @param {number} y Tile coordinate y.
	     * @param {import("../../PluggableMap.js").FrameState} frameState Frame state.
	     * @return {!import("../../Tile.js").default} Tile.
	     */
	    CanvasTileLayerRenderer.prototype.getTile = function (z, x, y, frameState) {
	        var pixelRatio = frameState.pixelRatio;
	        var projection = frameState.viewState.projection;
	        var tileLayer = this.getLayer();
	        var tileSource = tileLayer.getSource();
	        var tile = tileSource.getTile(z, x, y, pixelRatio, projection);
	        if (tile.getState() == _TileState2.default.ERROR) {
	            if (!tileLayer.getUseInterimTilesOnError()) {
	                // When useInterimTilesOnError is false, we consider the error tile as loaded.
	                tile.setState(_TileState2.default.LOADED);
	            } else if (tileLayer.getPreload() > 0) {
	                // Preloaded tiles for lower resolutions might have finished loading.
	                this.newTiles_ = true;
	            }
	        }
	        if (!this.isDrawableTile(tile)) {
	            tile = tile.getInterimTile();
	        }
	        return tile;
	    };
	    /**
	     * @inheritDoc
	     */
	    CanvasTileLayerRenderer.prototype.loadedTileCallback = function (tiles, zoom, tile) {
	        if (this.isDrawableTile(tile)) {
	            return _super.prototype.loadedTileCallback.call(this, tiles, zoom, tile);
	        }
	        return false;
	    };
	    /**
	     * @inheritDoc
	     */
	    CanvasTileLayerRenderer.prototype.prepareFrame = function (frameState) {
	        return !!this.getLayer().getSource();
	    };
	    /**
	     * TODO: File a TypeScript issue about inheritDoc not being followed
	     * all the way.  Without this explicit return type, the VectorTileLayer
	     * renderFrame function does not pass.
	     *
	     * @inheritDoc
	     * @returns {HTMLElement} The rendered element.
	     */
	    CanvasTileLayerRenderer.prototype.renderFrame = function (frameState, target) {
	        var layerState = frameState.layerStatesArray[frameState.layerIndex];
	        var viewState = frameState.viewState;
	        var projection = viewState.projection;
	        var viewResolution = viewState.resolution;
	        var viewCenter = viewState.center;
	        var rotation = viewState.rotation;
	        var pixelRatio = frameState.pixelRatio;
	        var tileLayer = this.getLayer();
	        var tileSource = tileLayer.getSource();
	        var sourceRevision = tileSource.getRevision();
	        var tileGrid = tileSource.getTileGridForProjection(projection);
	        var z = tileGrid.getZForResolution(viewResolution, tileSource.zDirection);
	        var tileResolution = tileGrid.getResolution(z);
	        var extent = frameState.extent;
	        var layerExtent = layerState.extent && (0, _proj.fromUserExtent)(layerState.extent, projection);
	        if (layerExtent) {
	            extent = (0, _extent.getIntersection)(extent, (0, _proj.fromUserExtent)(layerState.extent, projection));
	        }
	        var tilePixelRatio = tileSource.getTilePixelRatio(pixelRatio);
	        // desired dimensions of the canvas in pixels
	        var width = Math.round(frameState.size[0] * tilePixelRatio);
	        var height = Math.round(frameState.size[1] * tilePixelRatio);
	        if (rotation) {
	            var size = Math.round(Math.sqrt(width * width + height * height));
	            width = size;
	            height = size;
	        }
	        var dx = tileResolution * width / 2 / tilePixelRatio;
	        var dy = tileResolution * height / 2 / tilePixelRatio;
	        var canvasExtent = [viewCenter[0] - dx, viewCenter[1] - dy, viewCenter[0] + dx, viewCenter[1] + dy];
	        var tileRange = tileGrid.getTileRangeForExtentAndZ(extent, z);
	        /**
	         * @type {Object<number, Object<string, import("../../Tile.js").default>>}
	         */
	        var tilesToDrawByZ = {};
	        tilesToDrawByZ[z] = {};
	        var findLoadedTiles = this.createLoadedTileFinder(tileSource, projection, tilesToDrawByZ);
	        var tmpExtent = this.tmpExtent;
	        var tmpTileRange = this.tmpTileRange_;
	        this.newTiles_ = false;
	        for (var x = tileRange.minX; x <= tileRange.maxX; ++x) {
	            for (var y = tileRange.minY; y <= tileRange.maxY; ++y) {
	                var tile = this.getTile(z, x, y, frameState);
	                if (this.isDrawableTile(tile)) {
	                    var uid = (0, _util.getUid)(this);
	                    if (tile.getState() == _TileState2.default.LOADED) {
	                        tilesToDrawByZ[z][tile.tileCoord.toString()] = tile;
	                        var inTransition = tile.inTransition(uid);
	                        if (!this.newTiles_ && (inTransition || this.renderedTiles.indexOf(tile) === -1)) {
	                            this.newTiles_ = true;
	                        }
	                    }
	                    if (tile.getAlpha(uid, frameState.time) === 1) {
	                        // don't look for alt tiles if alpha is 1
	                        continue;
	                    }
	                }
	                var childTileRange = tileGrid.getTileCoordChildTileRange(tile.tileCoord, tmpTileRange, tmpExtent);
	                var covered = false;
	                if (childTileRange) {
	                    covered = findLoadedTiles(z + 1, childTileRange);
	                }
	                if (!covered) {
	                    tileGrid.forEachTileCoordParentTileRange(tile.tileCoord, findLoadedTiles, tmpTileRange, tmpExtent);
	                }
	            }
	        }
	        var canvasScale = tileResolution / viewResolution;
	        // set forward and inverse pixel transforms
	        (0, _transform.compose)(this.pixelTransform, frameState.size[0] / 2, frameState.size[1] / 2, 1 / tilePixelRatio, 1 / tilePixelRatio, rotation, -width / 2, -height / 2);
	        var canvasTransform = this.createTransformString(this.pixelTransform);
	        this.useContainer(target, canvasTransform, layerState.opacity);
	        var context = this.context;
	        var canvas = context.canvas;
	        (0, _transform.makeInverse)(this.inversePixelTransform, this.pixelTransform);
	        // set scale transform for calculating tile positions on the canvas
	        (0, _transform.compose)(this.tempTransform_, width / 2, height / 2, canvasScale, canvasScale, 0, -width / 2, -height / 2);
	        if (canvas.width != width || canvas.height != height) {
	            canvas.width = width;
	            canvas.height = height;
	        } else if (!this.containerReused) {
	            context.clearRect(0, 0, width, height);
	        }
	        if (layerExtent) {
	            this.clipUnrotated(context, frameState, layerExtent);
	        }
	        this.preRender(context, frameState);
	        this.renderedTiles.length = 0;
	        /** @type {Array<number>} */
	        var zs = Object.keys(tilesToDrawByZ).map(Number);
	        zs.sort(_array.numberSafeCompareFunction);
	        var clips, clipZs, currentClip;
	        if (layerState.opacity === 1 && (!this.containerReused || tileSource.getOpaque(frameState.viewState.projection))) {
	            zs = zs.reverse();
	        } else {
	            clips = [];
	            clipZs = [];
	        }
	        for (var i = zs.length - 1; i >= 0; --i) {
	            var currentZ = zs[i];
	            var currentTilePixelSize = tileSource.getTilePixelSize(currentZ, pixelRatio, projection);
	            var currentResolution = tileGrid.getResolution(currentZ);
	            var currentScale = currentResolution / tileResolution;
	            var dx_1 = currentTilePixelSize[0] * currentScale * canvasScale;
	            var dy_1 = currentTilePixelSize[1] * currentScale * canvasScale;
	            var originTileCoord = tileGrid.getTileCoordForCoordAndZ((0, _extent.getTopLeft)(canvasExtent), currentZ);
	            var originTileExtent = tileGrid.getTileCoordExtent(originTileCoord);
	            var origin_1 = (0, _transform.apply)(this.tempTransform_, [tilePixelRatio * (originTileExtent[0] - canvasExtent[0]) / tileResolution, tilePixelRatio * (canvasExtent[3] - originTileExtent[3]) / tileResolution]);
	            var tileGutter = tilePixelRatio * tileSource.getGutterForProjection(projection);
	            var tilesToDraw = tilesToDrawByZ[currentZ];
	            for (var tileCoordKey in tilesToDraw) {
	                var tile = /** @type {import("../../ImageTile.js").default} */tilesToDraw[tileCoordKey];
	                var tileCoord = tile.tileCoord;
	                // Calculate integer positions and sizes so that tiles align
	                var floatX = origin_1[0] - (originTileCoord[1] - tileCoord[1]) * dx_1;
	                var nextX = Math.round(floatX + dx_1);
	                var floatY = origin_1[1] - (originTileCoord[2] - tileCoord[2]) * dy_1;
	                var nextY = Math.round(floatY + dy_1);
	                var x = Math.round(floatX);
	                var y = Math.round(floatY);
	                var w = nextX - x;
	                var h = nextY - y;
	                var transition = z === currentZ;
	                var inTransition = transition && tile.getAlpha((0, _util.getUid)(this), frameState.time) !== 1;
	                if (!inTransition) {
	                    if (clips) {
	                        // Clip mask for regions in this tile that already filled by a higher z tile
	                        context.save();
	                        currentClip = [x, y, x + w, y, x + w, y + h, x, y + h];
	                        for (var i_1 = 0, ii = clips.length; i_1 < ii; ++i_1) {
	                            if (z !== currentZ && currentZ < clipZs[i_1]) {
	                                var clip = clips[i_1];
	                                context.beginPath();
	                                // counter-clockwise (outer ring) for current tile
	                                context.moveTo(currentClip[0], currentClip[1]);
	                                context.lineTo(currentClip[2], currentClip[3]);
	                                context.lineTo(currentClip[4], currentClip[5]);
	                                context.lineTo(currentClip[6], currentClip[7]);
	                                // clockwise (inner ring) for higher z tile
	                                context.moveTo(clip[6], clip[7]);
	                                context.lineTo(clip[4], clip[5]);
	                                context.lineTo(clip[2], clip[3]);
	                                context.lineTo(clip[0], clip[1]);
	                                context.clip();
	                            }
	                        }
	                        clips.push(currentClip);
	                        clipZs.push(currentZ);
	                    } else {
	                        context.clearRect(x, y, w, h);
	                    }
	                }
	                this.drawTileImage(tile, frameState, x, y, w, h, tileGutter, transition, layerState.opacity);
	                if (clips && !inTransition) {
	                    context.restore();
	                }
	                this.renderedTiles.push(tile);
	                this.updateUsedTiles(frameState.usedTiles, tileSource, tile);
	            }
	        }
	        this.renderedRevision = sourceRevision;
	        this.renderedResolution = tileResolution;
	        this.extentChanged = !this.renderedExtent_ || !(0, _extent.equals)(this.renderedExtent_, canvasExtent);
	        this.renderedExtent_ = canvasExtent;
	        this.renderedPixelRatio = pixelRatio;
	        this.renderedProjection = projection;
	        this.manageTilePyramid(frameState, tileSource, tileGrid, pixelRatio, projection, extent, z, tileLayer.getPreload());
	        this.updateCacheSize_(frameState, tileSource);
	        this.scheduleExpireCache(frameState, tileSource);
	        this.postRender(context, frameState);
	        if (layerState.extent) {
	            context.restore();
	        }
	        if (canvasTransform !== canvas.style.transform) {
	            canvas.style.transform = canvasTransform;
	        }
	        return this.container;
	    };
	    /**
	     * @param {import("../../ImageTile.js").default} tile Tile.
	     * @param {import("../../PluggableMap.js").FrameState} frameState Frame state.
	     * @param {number} x Left of the tile.
	     * @param {number} y Top of the tile.
	     * @param {number} w Width of the tile.
	     * @param {number} h Height of the tile.
	     * @param {number} gutter Tile gutter.
	     * @param {boolean} transition Apply an alpha transition.
	     * @param {number} opacity Opacity.
	     */
	    CanvasTileLayerRenderer.prototype.drawTileImage = function (tile, frameState, x, y, w, h, gutter, transition, opacity) {
	        var image = this.getTileImage(tile);
	        if (!image) {
	            return;
	        }
	        var uid = (0, _util.getUid)(this);
	        var tileAlpha = transition ? tile.getAlpha(uid, frameState.time) : 1;
	        var alpha = opacity * tileAlpha;
	        var alphaChanged = alpha !== this.context.globalAlpha;
	        if (alphaChanged) {
	            this.context.save();
	            this.context.globalAlpha = alpha;
	        }
	        this.context.drawImage(image, gutter, gutter, image.width - 2 * gutter, image.height - 2 * gutter, x, y, w, h);
	        if (alphaChanged) {
	            this.context.restore();
	        }
	        if (tileAlpha !== 1) {
	            frameState.animate = true;
	        } else if (transition) {
	            tile.endTransition(uid);
	        }
	    };
	    /**
	     * @inheritDoc
	     */
	    CanvasTileLayerRenderer.prototype.getImage = function () {
	        var context = this.context;
	        return context ? context.canvas : null;
	    };
	    /**
	     * Get the image from a tile.
	     * @param {import("../../ImageTile.js").default} tile Tile.
	     * @return {HTMLCanvasElement|HTMLImageElement|HTMLVideoElement} Image.
	     * @protected
	     */
	    CanvasTileLayerRenderer.prototype.getTileImage = function (tile) {
	        return tile.getImage();
	    };
	    /**
	     * @param {import("../../PluggableMap.js").FrameState} frameState Frame state.
	     * @param {import("../../source/Tile.js").default} tileSource Tile source.
	     * @protected
	     */
	    CanvasTileLayerRenderer.prototype.scheduleExpireCache = function (frameState, tileSource) {
	        if (tileSource.canExpireCache()) {
	            /**
	             * @param {import("../../source/Tile.js").default} tileSource Tile source.
	             * @param {import("../../PluggableMap.js").default} map Map.
	             * @param {import("../../PluggableMap.js").FrameState} frameState Frame state.
	             */
	            var postRenderFunction = function (tileSource, map, frameState) {
	                var tileSourceKey = (0, _util.getUid)(tileSource);
	                if (tileSourceKey in frameState.usedTiles) {
	                    tileSource.expireCache(frameState.viewState.projection, frameState.usedTiles[tileSourceKey]);
	                }
	            }.bind(null, tileSource);
	            frameState.postRenderFunctions.push(
	            /** @type {import("../../PluggableMap.js").PostRenderFunction} */postRenderFunction);
	        }
	    };
	    /**
	     * @param {!Object<string, !Object<string, boolean>>} usedTiles Used tiles.
	     * @param {import("../../source/Tile.js").default} tileSource Tile source.
	     * @param {import('../../Tile.js').default} tile Tile.
	     * @protected
	     */
	    CanvasTileLayerRenderer.prototype.updateUsedTiles = function (usedTiles, tileSource, tile) {
	        // FIXME should we use tilesToDrawByZ instead?
	        var tileSourceKey = (0, _util.getUid)(tileSource);
	        if (!(tileSourceKey in usedTiles)) {
	            usedTiles[tileSourceKey] = {};
	        }
	        usedTiles[tileSourceKey][tile.getKey()] = true;
	    };
	    /**
	     * Check if the cache is big enough, and increase its size if necessary.
	     * @param {import("../../PluggableMap.js").FrameState} frameState Frame state.
	     * @param {import("../../source/Tile.js").default} tileSource Tile source.
	     * @private
	     */
	    CanvasTileLayerRenderer.prototype.updateCacheSize_ = function (frameState, tileSource) {
	        var tileSourceKey = (0, _util.getUid)(tileSource);
	        var size = 0;
	        if (tileSourceKey in frameState.usedTiles) {
	            size += Object.keys(frameState.usedTiles[tileSourceKey]).length;
	        }
	        if (tileSourceKey in frameState.wantedTiles) {
	            size += Object.keys(frameState.wantedTiles[tileSourceKey]).length;
	        }
	        var tileCache = tileSource.tileCache;
	        if (tileCache.highWaterMark < size) {
	            tileCache.highWaterMark = size;
	        }
	    };
	    /**
	     * Manage tile pyramid.
	     * This function performs a number of functions related to the tiles at the
	     * current zoom and lower zoom levels:
	     * - registers idle tiles in frameState.wantedTiles so that they are not
	     *   discarded by the tile queue
	     * - enqueues missing tiles
	     * @param {import("../../PluggableMap.js").FrameState} frameState Frame state.
	     * @param {import("../../source/Tile.js").default} tileSource Tile source.
	     * @param {import("../../tilegrid/TileGrid.js").default} tileGrid Tile grid.
	     * @param {number} pixelRatio Pixel ratio.
	     * @param {import("../../proj/Projection.js").default} projection Projection.
	     * @param {import("../../extent.js").Extent} extent Extent.
	     * @param {number} currentZ Current Z.
	     * @param {number} preload Load low resolution tiles up to 'preload' levels.
	     * @param {function(import("../../Tile.js").default)=} opt_tileCallback Tile callback.
	     * @protected
	     */
	    CanvasTileLayerRenderer.prototype.manageTilePyramid = function (frameState, tileSource, tileGrid, pixelRatio, projection, extent, currentZ, preload, opt_tileCallback) {
	        var tileSourceKey = (0, _util.getUid)(tileSource);
	        if (!(tileSourceKey in frameState.wantedTiles)) {
	            frameState.wantedTiles[tileSourceKey] = {};
	        }
	        var wantedTiles = frameState.wantedTiles[tileSourceKey];
	        var tileQueue = frameState.tileQueue;
	        var minZoom = tileGrid.getMinZoom();
	        var tile, tileRange, tileResolution, x, y, z;
	        for (z = minZoom; z <= currentZ; ++z) {
	            tileRange = tileGrid.getTileRangeForExtentAndZ(extent, z, tileRange);
	            tileResolution = tileGrid.getResolution(z);
	            for (x = tileRange.minX; x <= tileRange.maxX; ++x) {
	                for (y = tileRange.minY; y <= tileRange.maxY; ++y) {
	                    if (currentZ - z <= preload) {
	                        tile = tileSource.getTile(z, x, y, pixelRatio, projection);
	                        if (tile.getState() == _TileState2.default.IDLE) {
	                            wantedTiles[tile.getKey()] = true;
	                            if (!tileQueue.isKeyQueued(tile.getKey())) {
	                                tileQueue.enqueue([tile, tileSourceKey, tileGrid.getTileCoordCenter(tile.tileCoord), tileResolution]);
	                            }
	                        }
	                        if (opt_tileCallback !== undefined) {
	                            opt_tileCallback(tile);
	                        }
	                    } else {
	                        tileSource.useTile(z, x, y, projection);
	                    }
	                }
	            }
	        }
	    };
	    return CanvasTileLayerRenderer;
	}(_Layer2.default);
	/**
	 * @function
	 * @return {import("../../layer/Tile.js").default|import("../../layer/VectorTile.js").default}
	 */
	CanvasTileLayerRenderer.prototype.getLayer;
	exports.default = CanvasTileLayerRenderer;
	//# sourceMappingURL=TileLayer.js.map

/***/ }),
/* 640 */
/***/ (function(module, exports, __webpack_require__) {

	/* WEBPACK VAR INJECTION */(function(Promise) {'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	
	var _util = __webpack_require__(14);
	
	var _ViewHint = __webpack_require__(170);
	
	var _ViewHint2 = _interopRequireDefault(_ViewHint);
	
	var _extent = __webpack_require__(4);
	
	var _proj = __webpack_require__(16);
	
	var _BuilderGroup = __webpack_require__(629);
	
	var _BuilderGroup2 = _interopRequireDefault(_BuilderGroup);
	
	var _ExecutorGroup = __webpack_require__(631);
	
	var _ExecutorGroup2 = _interopRequireDefault(_ExecutorGroup);
	
	var _Layer = __webpack_require__(293);
	
	var _Layer2 = _interopRequireDefault(_Layer);
	
	var _vector = __webpack_require__(294);
	
	var _transform = __webpack_require__(48);
	
	var _hitdetect = __webpack_require__(636);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var __extends = undefined && undefined.__extends || function () {
	    var _extendStatics = function extendStatics(d, b) {
	        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	            d.__proto__ = b;
	        } || function (d, b) {
	            for (var p in b) {
	                if (b.hasOwnProperty(p)) d[p] = b[p];
	            }
	        };
	        return _extendStatics(d, b);
	    };
	    return function (d, b) {
	        _extendStatics(d, b);
	        function __() {
	            this.constructor = d;
	        }
	        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	    };
	}();
	/**
	 * @module ol/renderer/canvas/VectorLayer
	 */
	
	/**
	 * @classdesc
	 * Canvas renderer for vector layers.
	 * @api
	 */
	var CanvasVectorLayerRenderer = /** @class */function (_super) {
	    __extends(CanvasVectorLayerRenderer, _super);
	    /**
	     * @param {import("../../layer/Vector.js").default} vectorLayer Vector layer.
	     */
	    function CanvasVectorLayerRenderer(vectorLayer) {
	        var _this = _super.call(this, vectorLayer) || this;
	        /** @private */
	        _this.boundHandleStyleImageChange_ = _this.handleStyleImageChange_.bind(_this);
	        /**
	         * @type {boolean}
	         */
	        _this.animatingOrInteracting_;
	        /**
	         * @private
	         * @type {boolean}
	         */
	        _this.dirty_ = false;
	        /**
	         * @type {ImageData}
	         */
	        _this.hitDetectionImageData_ = null;
	        /**
	         * @type {Array<import("../../Feature.js").default>}
	         */
	        _this.renderedFeatures_ = null;
	        /**
	         * @private
	         * @type {number}
	         */
	        _this.renderedRevision_ = -1;
	        /**
	         * @private
	         * @type {number}
	         */
	        _this.renderedResolution_ = NaN;
	        /**
	         * @private
	         * @type {import("../../extent.js").Extent}
	         */
	        _this.renderedExtent_ = (0, _extent.createEmpty)();
	        /**
	         * @private
	         * @type {number}
	         */
	        _this.renderedRotation_;
	        /**
	         * @private
	         * @type {import("../../coordinate").Coordinate}
	         */
	        _this.renderedCenter_ = null;
	        /**
	         * @private
	         * @type {import("../../proj/Projection").default}
	         */
	        _this.renderedProjection_ = null;
	        /**
	         * @private
	         * @type {function(import("../../Feature.js").default, import("../../Feature.js").default): number|null}
	         */
	        _this.renderedRenderOrder_ = null;
	        /**
	         * @private
	         * @type {import("../../render/canvas/ExecutorGroup").default}
	         */
	        _this.replayGroup_ = null;
	        /**
	         * A new replay group had to be created by `prepareFrame()`
	         * @type {boolean}
	         */
	        _this.replayGroupChanged = true;
	        return _this;
	    }
	    /**
	     * @inheritDoc
	     */
	    CanvasVectorLayerRenderer.prototype.useContainer = function (target, transform, opacity) {
	        if (opacity < 1) {
	            target = null;
	        }
	        _super.prototype.useContainer.call(this, target, transform, opacity);
	    };
	    /**
	     * @inheritDoc
	     */
	    CanvasVectorLayerRenderer.prototype.renderFrame = function (frameState, target) {
	        var pixelRatio = frameState.pixelRatio;
	        var layerState = frameState.layerStatesArray[frameState.layerIndex];
	        // set forward and inverse pixel transforms
	        (0, _transform.makeScale)(this.pixelTransform, 1 / pixelRatio, 1 / pixelRatio);
	        (0, _transform.makeInverse)(this.inversePixelTransform, this.pixelTransform);
	        var canvasTransform = (0, _transform.toString)(this.pixelTransform);
	        this.useContainer(target, canvasTransform, layerState.opacity);
	        var context = this.context;
	        var canvas = context.canvas;
	        var replayGroup = this.replayGroup_;
	        if (!replayGroup || replayGroup.isEmpty()) {
	            if (!this.containerReused && canvas.width > 0) {
	                canvas.width = 0;
	            }
	            return this.container;
	        }
	        // resize and clear
	        var width = Math.round(frameState.size[0] * pixelRatio);
	        var height = Math.round(frameState.size[1] * pixelRatio);
	        if (canvas.width != width || canvas.height != height) {
	            canvas.width = width;
	            canvas.height = height;
	            if (canvas.style.transform !== canvasTransform) {
	                canvas.style.transform = canvasTransform;
	            }
	        } else if (!this.containerReused) {
	            context.clearRect(0, 0, width, height);
	        }
	        this.preRender(context, frameState);
	        var extent = frameState.extent;
	        var viewState = frameState.viewState;
	        var center = viewState.center;
	        var resolution = viewState.resolution;
	        var projection = viewState.projection;
	        var rotation = viewState.rotation;
	        var projectionExtent = projection.getExtent();
	        var vectorSource = this.getLayer().getSource();
	        // clipped rendering if layer extent is set
	        var clipped = false;
	        if (layerState.extent) {
	            var layerExtent = (0, _proj.fromUserExtent)(layerState.extent, projection);
	            clipped = !(0, _extent.containsExtent)(layerExtent, frameState.extent) && (0, _extent.intersects)(layerExtent, frameState.extent);
	            if (clipped) {
	                this.clip(context, frameState, layerExtent);
	            }
	        }
	        var viewHints = frameState.viewHints;
	        var snapToPixel = !(viewHints[_ViewHint2.default.ANIMATING] || viewHints[_ViewHint2.default.INTERACTING]);
	        var transform = this.getRenderTransform(center, resolution, rotation, pixelRatio, width, height, 0);
	        var declutterReplays = this.getLayer().getDeclutter() ? {} : null;
	        replayGroup.execute(context, transform, rotation, snapToPixel, undefined, declutterReplays);
	        if (vectorSource.getWrapX() && projection.canWrapX() && !(0, _extent.containsExtent)(projectionExtent, extent)) {
	            var startX = extent[0];
	            var worldWidth = (0, _extent.getWidth)(projectionExtent);
	            var world = 0;
	            var offsetX = void 0;
	            while (startX < projectionExtent[0]) {
	                --world;
	                offsetX = worldWidth * world;
	                var transform_1 = this.getRenderTransform(center, resolution, rotation, pixelRatio, width, height, offsetX);
	                replayGroup.execute(context, transform_1, rotation, snapToPixel, undefined, declutterReplays);
	                startX += worldWidth;
	            }
	            world = 0;
	            startX = extent[2];
	            while (startX > projectionExtent[2]) {
	                ++world;
	                offsetX = worldWidth * world;
	                var transform_2 = this.getRenderTransform(center, resolution, rotation, pixelRatio, width, height, offsetX);
	                replayGroup.execute(context, transform_2, rotation, snapToPixel, undefined, declutterReplays);
	                startX -= worldWidth;
	            }
	        }
	        if (declutterReplays) {
	            var viewHints_1 = frameState.viewHints;
	            var hifi = !(viewHints_1[_ViewHint2.default.ANIMATING] || viewHints_1[_ViewHint2.default.INTERACTING]);
	            (0, _ExecutorGroup.replayDeclutter)(declutterReplays, context, rotation, 1, hifi, frameState.declutterItems);
	        }
	        if (clipped) {
	            context.restore();
	        }
	        this.postRender(context, frameState);
	        var opacity = layerState.opacity;
	        var container = this.container;
	        if (opacity !== parseFloat(container.style.opacity)) {
	            container.style.opacity = opacity === 1 ? '' : opacity;
	        }
	        return this.container;
	    };
	    /**
	     * @inheritDoc
	     */
	    CanvasVectorLayerRenderer.prototype.getFeatures = function (pixel) {
	        return new Promise(function (resolve, reject) {
	            if (!this.hitDetectionImageData_ && !this.animatingOrInteracting_) {
	                requestAnimationFrame(function () {
	                    var size = [this.context.canvas.width, this.context.canvas.height];
	                    (0, _transform.apply)(this.pixelTransform, size);
	                    var center = this.renderedCenter_;
	                    var resolution = this.renderedResolution_;
	                    var rotation = this.renderedRotation_;
	                    var projection = this.renderedProjection_;
	                    var extent = this.renderedExtent_;
	                    var layer = this.getLayer();
	                    var transforms = [];
	                    var width = size[0] / 2;
	                    var height = size[1] / 2;
	                    transforms.push(this.getRenderTransform(center, resolution, rotation, 0.5, width, height, 0).slice());
	                    var source = layer.getSource();
	                    var projectionExtent = projection.getExtent();
	                    if (source.getWrapX() && projection.canWrapX() && !(0, _extent.containsExtent)(projectionExtent, extent)) {
	                        var startX = extent[0];
	                        var worldWidth = (0, _extent.getWidth)(projectionExtent);
	                        var world = 0;
	                        var offsetX = void 0;
	                        while (startX < projectionExtent[0]) {
	                            --world;
	                            offsetX = worldWidth * world;
	                            transforms.push(this.getRenderTransform(center, resolution, rotation, 0.5, width, height, offsetX).slice());
	                            startX += worldWidth;
	                        }
	                        world = 0;
	                        startX = extent[2];
	                        while (startX > projectionExtent[2]) {
	                            ++world;
	                            offsetX = worldWidth * world;
	                            transforms.push(this.getRenderTransform(center, resolution, rotation, 0.5, width, height, offsetX).slice());
	                            startX -= worldWidth;
	                        }
	                    }
	                    this.hitDetectionImageData_ = (0, _hitdetect.createHitDetectionImageData)(size, transforms, this.renderedFeatures_, layer.getStyleFunction(), extent, resolution, rotation);
	                    resolve((0, _hitdetect.hitDetect)(pixel, this.renderedFeatures_, this.hitDetectionImageData_));
	                }.bind(this));
	            } else {
	                resolve((0, _hitdetect.hitDetect)(pixel, this.renderedFeatures_, this.hitDetectionImageData_));
	            }
	        }.bind(this));
	    };
	    /**
	     * @inheritDoc
	     */
	    CanvasVectorLayerRenderer.prototype.forEachFeatureAtCoordinate = function (coordinate, frameState, hitTolerance, callback, declutteredFeatures) {
	        if (!this.replayGroup_) {
	            return undefined;
	        } else {
	            var resolution = frameState.viewState.resolution;
	            var rotation = frameState.viewState.rotation;
	            var layer_1 = this.getLayer();
	            /** @type {!Object<string, boolean>} */
	            var features_1 = {};
	            var result = this.replayGroup_.forEachFeatureAtCoordinate(coordinate, resolution, rotation, hitTolerance,
	            /**
	             * @param {import("../../Feature.js").FeatureLike} feature Feature.
	             * @return {?} Callback result.
	             */
	            function (feature) {
	                var key = (0, _util.getUid)(feature);
	                if (!(key in features_1)) {
	                    features_1[key] = true;
	                    return callback(feature, layer_1);
	                }
	            }, layer_1.getDeclutter() ? declutteredFeatures : null);
	            return result;
	        }
	    };
	    /**
	     * @inheritDoc
	     */
	    CanvasVectorLayerRenderer.prototype.handleFontsChanged = function () {
	        var layer = this.getLayer();
	        if (layer.getVisible() && this.replayGroup_) {
	            layer.changed();
	        }
	    };
	    /**
	     * Handle changes in image style state.
	     * @param {import("../../events/Event.js").default} event Image style change event.
	     * @private
	     */
	    CanvasVectorLayerRenderer.prototype.handleStyleImageChange_ = function (event) {
	        this.renderIfReadyAndVisible();
	    };
	    /**
	     * @inheritDoc
	     */
	    CanvasVectorLayerRenderer.prototype.prepareFrame = function (frameState) {
	        var vectorLayer = this.getLayer();
	        var vectorSource = vectorLayer.getSource();
	        var animating = frameState.viewHints[_ViewHint2.default.ANIMATING];
	        var interacting = frameState.viewHints[_ViewHint2.default.INTERACTING];
	        var updateWhileAnimating = vectorLayer.getUpdateWhileAnimating();
	        var updateWhileInteracting = vectorLayer.getUpdateWhileInteracting();
	        if (!this.dirty_ && !updateWhileAnimating && animating || !updateWhileInteracting && interacting) {
	            this.animatingOrInteracting_ = true;
	            return true;
	        }
	        this.animatingOrInteracting_ = false;
	        var frameStateExtent = frameState.extent;
	        var viewState = frameState.viewState;
	        var projection = viewState.projection;
	        var resolution = viewState.resolution;
	        var pixelRatio = frameState.pixelRatio;
	        var vectorLayerRevision = vectorLayer.getRevision();
	        var vectorLayerRenderBuffer = vectorLayer.getRenderBuffer();
	        var vectorLayerRenderOrder = vectorLayer.getRenderOrder();
	        if (vectorLayerRenderOrder === undefined) {
	            vectorLayerRenderOrder = _vector.defaultOrder;
	        }
	        var center = viewState.center.slice();
	        var extent = (0, _extent.buffer)(frameStateExtent, vectorLayerRenderBuffer * resolution);
	        var projectionExtent = viewState.projection.getExtent();
	        if (vectorSource.getWrapX() && viewState.projection.canWrapX() && !(0, _extent.containsExtent)(projectionExtent, frameState.extent)) {
	            // For the replay group, we need an extent that intersects the real world
	            // (-180° to +180°). To support geometries in a coordinate range from -540°
	            // to +540°, we add at least 1 world width on each side of the projection
	            // extent. If the viewport is wider than the world, we need to add half of
	            // the viewport width to make sure we cover the whole viewport.
	            var worldWidth = (0, _extent.getWidth)(projectionExtent);
	            var gutter = Math.max((0, _extent.getWidth)(extent) / 2, worldWidth);
	            extent[0] = projectionExtent[0] - gutter;
	            extent[2] = projectionExtent[2] + gutter;
	            var worldsAway = Math.floor((center[0] - projectionExtent[0]) / worldWidth);
	            center[0] -= worldsAway * worldWidth;
	        }
	        if (!this.dirty_ && this.renderedResolution_ == resolution && this.renderedRevision_ == vectorLayerRevision && this.renderedRenderOrder_ == vectorLayerRenderOrder && (0, _extent.containsExtent)(this.renderedExtent_, extent)) {
	            this.replayGroupChanged = false;
	            return true;
	        }
	        if (this.replayGroup_) {
	            this.replayGroup_.dispose();
	        }
	        this.replayGroup_ = null;
	        this.dirty_ = false;
	        var replayGroup = new _BuilderGroup2.default((0, _vector.getTolerance)(resolution, pixelRatio), extent, resolution, pixelRatio, vectorLayer.getDeclutter());
	        var userProjection = (0, _proj.getUserProjection)();
	        var userTransform;
	        if (userProjection) {
	            vectorSource.loadFeatures((0, _proj.toUserExtent)(extent, projection), resolution, userProjection);
	            userTransform = (0, _proj.getTransformFromProjections)(userProjection, projection);
	        } else {
	            vectorSource.loadFeatures(extent, resolution, projection);
	        }
	        var squaredTolerance = (0, _vector.getSquaredTolerance)(resolution, pixelRatio);
	        /**
	         * @param {import("../../Feature.js").default} feature Feature.
	         * @this {CanvasVectorLayerRenderer}
	         */
	        var render = function (feature) {
	            var styles;
	            var styleFunction = feature.getStyleFunction() || vectorLayer.getStyleFunction();
	            if (styleFunction) {
	                styles = styleFunction(feature, resolution);
	            }
	            if (styles) {
	                var dirty = this.renderFeature(feature, squaredTolerance, styles, replayGroup, userTransform);
	                this.dirty_ = this.dirty_ || dirty;
	            }
	        }.bind(this);
	        var userExtent = (0, _proj.toUserExtent)(extent, projection);
	        /** @type {Array<import("../../Feature.js").default>} */
	        var features = vectorSource.getFeaturesInExtent(userExtent);
	        if (vectorLayerRenderOrder) {
	            features.sort(vectorLayerRenderOrder);
	        }
	        for (var i = 0, ii = features.length; i < ii; ++i) {
	            render(features[i]);
	        }
	        this.renderedFeatures_ = features;
	        var replayGroupInstructions = replayGroup.finish();
	        var executorGroup = new _ExecutorGroup2.default(extent, resolution, pixelRatio, vectorSource.getOverlaps(), replayGroupInstructions, vectorLayer.getRenderBuffer());
	        this.renderedResolution_ = resolution;
	        this.renderedRevision_ = vectorLayerRevision;
	        this.renderedRenderOrder_ = vectorLayerRenderOrder;
	        this.renderedExtent_ = extent;
	        this.renderedRotation_ = viewState.rotation;
	        this.renderedCenter_ = center;
	        this.renderedProjection_ = projection;
	        this.replayGroup_ = executorGroup;
	        this.hitDetectionImageData_ = null;
	        this.replayGroupChanged = true;
	        return true;
	    };
	    /**
	     * @param {import("../../Feature.js").default} feature Feature.
	     * @param {number} squaredTolerance Squared render tolerance.
	     * @param {import("../../style/Style.js").default|Array<import("../../style/Style.js").default>} styles The style or array of styles.
	     * @param {import("../../render/canvas/BuilderGroup.js").default} builderGroup Builder group.
	     * @param {import("../../proj.js").TransformFunction} opt_transform Transform from user to view projection.
	     * @return {boolean} `true` if an image is loading.
	     */
	    CanvasVectorLayerRenderer.prototype.renderFeature = function (feature, squaredTolerance, styles, builderGroup, opt_transform) {
	        if (!styles) {
	            return false;
	        }
	        var loading = false;
	        if (Array.isArray(styles)) {
	            for (var i = 0, ii = styles.length; i < ii; ++i) {
	                loading = (0, _vector.renderFeature)(builderGroup, feature, styles[i], squaredTolerance, this.boundHandleStyleImageChange_, opt_transform) || loading;
	            }
	        } else {
	            loading = (0, _vector.renderFeature)(builderGroup, feature, styles, squaredTolerance, this.boundHandleStyleImageChange_, opt_transform);
	        }
	        return loading;
	    };
	    return CanvasVectorLayerRenderer;
	}(_Layer2.default);
	exports.default = CanvasVectorLayerRenderer;
	//# sourceMappingURL=VectorLayer.js.map
	/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(27)))

/***/ }),
/* 641 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	
	var _common = __webpack_require__(296);
	
	var _Tile = __webpack_require__(258);
	
	var _Tile2 = _interopRequireDefault(_Tile);
	
	var _TileState = __webpack_require__(70);
	
	var _TileState2 = _interopRequireDefault(_TileState);
	
	var _events = __webpack_require__(30);
	
	var _EventType = __webpack_require__(10);
	
	var _EventType2 = _interopRequireDefault(_EventType);
	
	var _extent = __webpack_require__(4);
	
	var _math = __webpack_require__(19);
	
	var _reproj = __webpack_require__(295);
	
	var _Triangulation = __webpack_require__(642);
	
	var _Triangulation2 = _interopRequireDefault(_Triangulation);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var __extends = undefined && undefined.__extends || function () {
	    var _extendStatics = function extendStatics(d, b) {
	        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	            d.__proto__ = b;
	        } || function (d, b) {
	            for (var p in b) {
	                if (b.hasOwnProperty(p)) d[p] = b[p];
	            }
	        };
	        return _extendStatics(d, b);
	    };
	    return function (d, b) {
	        _extendStatics(d, b);
	        function __() {
	            this.constructor = d;
	        }
	        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	    };
	}();
	/**
	 * @module ol/reproj/Tile
	 */
	
	/**
	 * @typedef {function(number, number, number, number) : import("../Tile.js").default} FunctionType
	 */
	/**
	 * @classdesc
	 * Class encapsulating single reprojected tile.
	 * See {@link module:ol/source/TileImage~TileImage}.
	 *
	 */
	var ReprojTile = /** @class */function (_super) {
	    __extends(ReprojTile, _super);
	    /**
	     * @param {import("../proj/Projection.js").default} sourceProj Source projection.
	     * @param {import("../tilegrid/TileGrid.js").default} sourceTileGrid Source tile grid.
	     * @param {import("../proj/Projection.js").default} targetProj Target projection.
	     * @param {import("../tilegrid/TileGrid.js").default} targetTileGrid Target tile grid.
	     * @param {import("../tilecoord.js").TileCoord} tileCoord Coordinate of the tile.
	     * @param {import("../tilecoord.js").TileCoord} wrappedTileCoord Coordinate of the tile wrapped in X.
	     * @param {number} pixelRatio Pixel ratio.
	     * @param {number} gutter Gutter of the source tiles.
	     * @param {FunctionType} getTileFunction
	     *     Function returning source tiles (z, x, y, pixelRatio).
	     * @param {number=} opt_errorThreshold Acceptable reprojection error (in px).
	     * @param {boolean=} opt_renderEdges Render reprojection edges.
	     */
	    function ReprojTile(sourceProj, sourceTileGrid, targetProj, targetTileGrid, tileCoord, wrappedTileCoord, pixelRatio, gutter, getTileFunction, opt_errorThreshold, opt_renderEdges) {
	        var _this = _super.call(this, tileCoord, _TileState2.default.IDLE) || this;
	        /**
	         * @private
	         * @type {boolean}
	         */
	        _this.renderEdges_ = opt_renderEdges !== undefined ? opt_renderEdges : false;
	        /**
	         * @private
	         * @type {number}
	         */
	        _this.pixelRatio_ = pixelRatio;
	        /**
	         * @private
	         * @type {number}
	         */
	        _this.gutter_ = gutter;
	        /**
	         * @private
	         * @type {HTMLCanvasElement}
	         */
	        _this.canvas_ = null;
	        /**
	         * @private
	         * @type {import("../tilegrid/TileGrid.js").default}
	         */
	        _this.sourceTileGrid_ = sourceTileGrid;
	        /**
	         * @private
	         * @type {import("../tilegrid/TileGrid.js").default}
	         */
	        _this.targetTileGrid_ = targetTileGrid;
	        /**
	         * @private
	         * @type {import("../tilecoord.js").TileCoord}
	         */
	        _this.wrappedTileCoord_ = wrappedTileCoord ? wrappedTileCoord : tileCoord;
	        /**
	         * @private
	         * @type {!Array<import("../Tile.js").default>}
	         */
	        _this.sourceTiles_ = [];
	        /**
	         * @private
	         * @type {?Array<import("../events.js").EventsKey>}
	         */
	        _this.sourcesListenerKeys_ = null;
	        /**
	         * @private
	         * @type {number}
	         */
	        _this.sourceZ_ = 0;
	        var targetExtent = targetTileGrid.getTileCoordExtent(_this.wrappedTileCoord_);
	        var maxTargetExtent = _this.targetTileGrid_.getExtent();
	        var maxSourceExtent = _this.sourceTileGrid_.getExtent();
	        var limitedTargetExtent = maxTargetExtent ? (0, _extent.getIntersection)(targetExtent, maxTargetExtent) : targetExtent;
	        if ((0, _extent.getArea)(limitedTargetExtent) === 0) {
	            // Tile is completely outside range -> EMPTY
	            // TODO: is it actually correct that the source even creates the tile ?
	            _this.state = _TileState2.default.EMPTY;
	            return _this;
	        }
	        var sourceProjExtent = sourceProj.getExtent();
	        if (sourceProjExtent) {
	            if (!maxSourceExtent) {
	                maxSourceExtent = sourceProjExtent;
	            } else {
	                maxSourceExtent = (0, _extent.getIntersection)(maxSourceExtent, sourceProjExtent);
	            }
	        }
	        var targetResolution = targetTileGrid.getResolution(_this.wrappedTileCoord_[0]);
	        var targetCenter = (0, _extent.getCenter)(limitedTargetExtent);
	        var sourceResolution = (0, _reproj.calculateSourceResolution)(sourceProj, targetProj, targetCenter, targetResolution);
	        if (!isFinite(sourceResolution) || sourceResolution <= 0) {
	            // invalid sourceResolution -> EMPTY
	            // probably edges of the projections when no extent is defined
	            _this.state = _TileState2.default.EMPTY;
	            return _this;
	        }
	        var errorThresholdInPixels = opt_errorThreshold !== undefined ? opt_errorThreshold : _common.ERROR_THRESHOLD;
	        /**
	         * @private
	         * @type {!import("./Triangulation.js").default}
	         */
	        _this.triangulation_ = new _Triangulation2.default(sourceProj, targetProj, limitedTargetExtent, maxSourceExtent, sourceResolution * errorThresholdInPixels);
	        if (_this.triangulation_.getTriangles().length === 0) {
	            // no valid triangles -> EMPTY
	            _this.state = _TileState2.default.EMPTY;
	            return _this;
	        }
	        _this.sourceZ_ = sourceTileGrid.getZForResolution(sourceResolution);
	        var sourceExtent = _this.triangulation_.calculateSourceExtent();
	        if (maxSourceExtent) {
	            if (sourceProj.canWrapX()) {
	                sourceExtent[1] = (0, _math.clamp)(sourceExtent[1], maxSourceExtent[1], maxSourceExtent[3]);
	                sourceExtent[3] = (0, _math.clamp)(sourceExtent[3], maxSourceExtent[1], maxSourceExtent[3]);
	            } else {
	                sourceExtent = (0, _extent.getIntersection)(sourceExtent, maxSourceExtent);
	            }
	        }
	        if (!(0, _extent.getArea)(sourceExtent)) {
	            _this.state = _TileState2.default.EMPTY;
	        } else {
	            var sourceRange = sourceTileGrid.getTileRangeForExtentAndZ(sourceExtent, _this.sourceZ_);
	            for (var srcX = sourceRange.minX; srcX <= sourceRange.maxX; srcX++) {
	                for (var srcY = sourceRange.minY; srcY <= sourceRange.maxY; srcY++) {
	                    var tile = getTileFunction(_this.sourceZ_, srcX, srcY, pixelRatio);
	                    if (tile) {
	                        _this.sourceTiles_.push(tile);
	                    }
	                }
	            }
	            if (_this.sourceTiles_.length === 0) {
	                _this.state = _TileState2.default.EMPTY;
	            }
	        }
	        return _this;
	    }
	    /**
	     * @inheritDoc
	     */
	    ReprojTile.prototype.disposeInternal = function () {
	        if (this.state == _TileState2.default.LOADING) {
	            this.unlistenSources_();
	        }
	        _super.prototype.disposeInternal.call(this);
	    };
	    /**
	     * Get the HTML Canvas element for this tile.
	     * @return {HTMLCanvasElement} Canvas.
	     */
	    ReprojTile.prototype.getImage = function () {
	        return this.canvas_;
	    };
	    /**
	     * @private
	     */
	    ReprojTile.prototype.reproject_ = function () {
	        var sources = [];
	        this.sourceTiles_.forEach(function (tile, i, arr) {
	            if (tile && tile.getState() == _TileState2.default.LOADED) {
	                sources.push({
	                    extent: this.sourceTileGrid_.getTileCoordExtent(tile.tileCoord),
	                    image: tile.getImage()
	                });
	            }
	        }.bind(this));
	        this.sourceTiles_.length = 0;
	        if (sources.length === 0) {
	            this.state = _TileState2.default.ERROR;
	        } else {
	            var z = this.wrappedTileCoord_[0];
	            var size = this.targetTileGrid_.getTileSize(z);
	            var width = typeof size === 'number' ? size : size[0];
	            var height = typeof size === 'number' ? size : size[1];
	            var targetResolution = this.targetTileGrid_.getResolution(z);
	            var sourceResolution = this.sourceTileGrid_.getResolution(this.sourceZ_);
	            var targetExtent = this.targetTileGrid_.getTileCoordExtent(this.wrappedTileCoord_);
	            this.canvas_ = (0, _reproj.render)(width, height, this.pixelRatio_, sourceResolution, this.sourceTileGrid_.getExtent(), targetResolution, targetExtent, this.triangulation_, sources, this.gutter_, this.renderEdges_);
	            this.state = _TileState2.default.LOADED;
	        }
	        this.changed();
	    };
	    /**
	     * @inheritDoc
	     */
	    ReprojTile.prototype.load = function () {
	        if (this.state == _TileState2.default.IDLE) {
	            this.state = _TileState2.default.LOADING;
	            this.changed();
	            var leftToLoad_1 = 0;
	            this.sourcesListenerKeys_ = [];
	            this.sourceTiles_.forEach(function (tile, i, arr) {
	                var state = tile.getState();
	                if (state == _TileState2.default.IDLE || state == _TileState2.default.LOADING) {
	                    leftToLoad_1++;
	                    var sourceListenKey_1 = (0, _events.listen)(tile, _EventType2.default.CHANGE, function (e) {
	                        var state = tile.getState();
	                        if (state == _TileState2.default.LOADED || state == _TileState2.default.ERROR || state == _TileState2.default.EMPTY) {
	                            (0, _events.unlistenByKey)(sourceListenKey_1);
	                            leftToLoad_1--;
	                            if (leftToLoad_1 === 0) {
	                                this.unlistenSources_();
	                                this.reproject_();
	                            }
	                        }
	                    }, this);
	                    this.sourcesListenerKeys_.push(sourceListenKey_1);
	                }
	            }.bind(this));
	            this.sourceTiles_.forEach(function (tile, i, arr) {
	                var state = tile.getState();
	                if (state == _TileState2.default.IDLE) {
	                    tile.load();
	                }
	            });
	            if (leftToLoad_1 === 0) {
	                setTimeout(this.reproject_.bind(this), 0);
	            }
	        }
	    };
	    /**
	     * @private
	     */
	    ReprojTile.prototype.unlistenSources_ = function () {
	        this.sourcesListenerKeys_.forEach(_events.unlistenByKey);
	        this.sourcesListenerKeys_ = null;
	    };
	    return ReprojTile;
	}(_Tile2.default);
	exports.default = ReprojTile;
	//# sourceMappingURL=Tile.js.map

/***/ }),
/* 642 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	
	var _extent = __webpack_require__(4);
	
	var _math = __webpack_require__(19);
	
	var _proj = __webpack_require__(16);
	
	/**
	 * Single triangle; consists of 3 source points and 3 target points.
	 * @typedef {Object} Triangle
	 * @property {Array<import("../coordinate.js").Coordinate>} source
	 * @property {Array<import("../coordinate.js").Coordinate>} target
	 */
	/**
	 * Maximum number of subdivision steps during raster reprojection triangulation.
	 * Prevents high memory usage and large number of proj4 calls (for certain
	 * transformations and areas). At most `2*(2^this)` triangles are created for
	 * each triangulated extent (tile/image).
	 * @type {number}
	 */
	var MAX_SUBDIVISION = 10;
	/**
	 * Maximum allowed size of triangle relative to world width. When transforming
	 * corners of world extent between certain projections, the resulting
	 * triangulation seems to have zero error and no subdivision is performed. If
	 * the triangle width is more than this (relative to world width; 0-1),
	 * subdivison is forced (up to `MAX_SUBDIVISION`). Default is `0.25`.
	 * @type {number}
	 */
	/**
	 * @module ol/reproj/Triangulation
	 */
	var MAX_TRIANGLE_WIDTH = 0.25;
	/**
	 * @classdesc
	 * Class containing triangulation of the given target extent.
	 * Used for determining source data and the reprojection itself.
	 */
	var Triangulation = /** @class */function () {
	    /**
	     * @param {import("../proj/Projection.js").default} sourceProj Source projection.
	     * @param {import("../proj/Projection.js").default} targetProj Target projection.
	     * @param {import("../extent.js").Extent} targetExtent Target extent to triangulate.
	     * @param {import("../extent.js").Extent} maxSourceExtent Maximal source extent that can be used.
	     * @param {number} errorThreshold Acceptable error (in source units).
	     */
	    function Triangulation(sourceProj, targetProj, targetExtent, maxSourceExtent, errorThreshold) {
	        /**
	         * @type {import("../proj/Projection.js").default}
	         * @private
	         */
	        this.sourceProj_ = sourceProj;
	        /**
	         * @type {import("../proj/Projection.js").default}
	         * @private
	         */
	        this.targetProj_ = targetProj;
	        /** @type {!Object<string, import("../coordinate.js").Coordinate>} */
	        var transformInvCache = {};
	        var transformInv = (0, _proj.getTransform)(this.targetProj_, this.sourceProj_);
	        /**
	         * @param {import("../coordinate.js").Coordinate} c A coordinate.
	         * @return {import("../coordinate.js").Coordinate} Transformed coordinate.
	         * @private
	         */
	        this.transformInv_ = function (c) {
	            var key = c[0] + '/' + c[1];
	            if (!transformInvCache[key]) {
	                transformInvCache[key] = transformInv(c);
	            }
	            return transformInvCache[key];
	        };
	        /**
	         * @type {import("../extent.js").Extent}
	         * @private
	         */
	        this.maxSourceExtent_ = maxSourceExtent;
	        /**
	         * @type {number}
	         * @private
	         */
	        this.errorThresholdSquared_ = errorThreshold * errorThreshold;
	        /**
	         * @type {Array<Triangle>}
	         * @private
	         */
	        this.triangles_ = [];
	        /**
	         * Indicates that the triangulation crosses edge of the source projection.
	         * @type {boolean}
	         * @private
	         */
	        this.wrapsXInSource_ = false;
	        /**
	         * @type {boolean}
	         * @private
	         */
	        this.canWrapXInSource_ = this.sourceProj_.canWrapX() && !!maxSourceExtent && !!this.sourceProj_.getExtent() && (0, _extent.getWidth)(maxSourceExtent) == (0, _extent.getWidth)(this.sourceProj_.getExtent());
	        /**
	         * @type {?number}
	         * @private
	         */
	        this.sourceWorldWidth_ = this.sourceProj_.getExtent() ? (0, _extent.getWidth)(this.sourceProj_.getExtent()) : null;
	        /**
	         * @type {?number}
	         * @private
	         */
	        this.targetWorldWidth_ = this.targetProj_.getExtent() ? (0, _extent.getWidth)(this.targetProj_.getExtent()) : null;
	        var destinationTopLeft = (0, _extent.getTopLeft)(targetExtent);
	        var destinationTopRight = (0, _extent.getTopRight)(targetExtent);
	        var destinationBottomRight = (0, _extent.getBottomRight)(targetExtent);
	        var destinationBottomLeft = (0, _extent.getBottomLeft)(targetExtent);
	        var sourceTopLeft = this.transformInv_(destinationTopLeft);
	        var sourceTopRight = this.transformInv_(destinationTopRight);
	        var sourceBottomRight = this.transformInv_(destinationBottomRight);
	        var sourceBottomLeft = this.transformInv_(destinationBottomLeft);
	        this.addQuad_(destinationTopLeft, destinationTopRight, destinationBottomRight, destinationBottomLeft, sourceTopLeft, sourceTopRight, sourceBottomRight, sourceBottomLeft, MAX_SUBDIVISION);
	        if (this.wrapsXInSource_) {
	            var leftBound_1 = Infinity;
	            this.triangles_.forEach(function (triangle, i, arr) {
	                leftBound_1 = Math.min(leftBound_1, triangle.source[0][0], triangle.source[1][0], triangle.source[2][0]);
	            });
	            // Shift triangles to be as close to `leftBound` as possible
	            // (if the distance is more than `worldWidth / 2` it can be closer.
	            this.triangles_.forEach(function (triangle) {
	                if (Math.max(triangle.source[0][0], triangle.source[1][0], triangle.source[2][0]) - leftBound_1 > this.sourceWorldWidth_ / 2) {
	                    var newTriangle = [[triangle.source[0][0], triangle.source[0][1]], [triangle.source[1][0], triangle.source[1][1]], [triangle.source[2][0], triangle.source[2][1]]];
	                    if (newTriangle[0][0] - leftBound_1 > this.sourceWorldWidth_ / 2) {
	                        newTriangle[0][0] -= this.sourceWorldWidth_;
	                    }
	                    if (newTriangle[1][0] - leftBound_1 > this.sourceWorldWidth_ / 2) {
	                        newTriangle[1][0] -= this.sourceWorldWidth_;
	                    }
	                    if (newTriangle[2][0] - leftBound_1 > this.sourceWorldWidth_ / 2) {
	                        newTriangle[2][0] -= this.sourceWorldWidth_;
	                    }
	                    // Rarely (if the extent contains both the dateline and prime meridian)
	                    // the shift can in turn break some triangles.
	                    // Detect this here and don't shift in such cases.
	                    var minX = Math.min(newTriangle[0][0], newTriangle[1][0], newTriangle[2][0]);
	                    var maxX = Math.max(newTriangle[0][0], newTriangle[1][0], newTriangle[2][0]);
	                    if (maxX - minX < this.sourceWorldWidth_ / 2) {
	                        triangle.source = newTriangle;
	                    }
	                }
	            }.bind(this));
	        }
	        transformInvCache = {};
	    }
	    /**
	     * Adds triangle to the triangulation.
	     * @param {import("../coordinate.js").Coordinate} a The target a coordinate.
	     * @param {import("../coordinate.js").Coordinate} b The target b coordinate.
	     * @param {import("../coordinate.js").Coordinate} c The target c coordinate.
	     * @param {import("../coordinate.js").Coordinate} aSrc The source a coordinate.
	     * @param {import("../coordinate.js").Coordinate} bSrc The source b coordinate.
	     * @param {import("../coordinate.js").Coordinate} cSrc The source c coordinate.
	     * @private
	     */
	    Triangulation.prototype.addTriangle_ = function (a, b, c, aSrc, bSrc, cSrc) {
	        this.triangles_.push({
	            source: [aSrc, bSrc, cSrc],
	            target: [a, b, c]
	        });
	    };
	    /**
	     * Adds quad (points in clock-wise order) to the triangulation
	     * (and reprojects the vertices) if valid.
	     * Performs quad subdivision if needed to increase precision.
	     *
	     * @param {import("../coordinate.js").Coordinate} a The target a coordinate.
	     * @param {import("../coordinate.js").Coordinate} b The target b coordinate.
	     * @param {import("../coordinate.js").Coordinate} c The target c coordinate.
	     * @param {import("../coordinate.js").Coordinate} d The target d coordinate.
	     * @param {import("../coordinate.js").Coordinate} aSrc The source a coordinate.
	     * @param {import("../coordinate.js").Coordinate} bSrc The source b coordinate.
	     * @param {import("../coordinate.js").Coordinate} cSrc The source c coordinate.
	     * @param {import("../coordinate.js").Coordinate} dSrc The source d coordinate.
	     * @param {number} maxSubdivision Maximal allowed subdivision of the quad.
	     * @private
	     */
	    Triangulation.prototype.addQuad_ = function (a, b, c, d, aSrc, bSrc, cSrc, dSrc, maxSubdivision) {
	        var sourceQuadExtent = (0, _extent.boundingExtent)([aSrc, bSrc, cSrc, dSrc]);
	        var sourceCoverageX = this.sourceWorldWidth_ ? (0, _extent.getWidth)(sourceQuadExtent) / this.sourceWorldWidth_ : null;
	        var sourceWorldWidth = /** @type {number} */this.sourceWorldWidth_;
	        // when the quad is wrapped in the source projection
	        // it covers most of the projection extent, but not fully
	        var wrapsX = this.sourceProj_.canWrapX() && sourceCoverageX > 0.5 && sourceCoverageX < 1;
	        var needsSubdivision = false;
	        if (maxSubdivision > 0) {
	            if (this.targetProj_.isGlobal() && this.targetWorldWidth_) {
	                var targetQuadExtent = (0, _extent.boundingExtent)([a, b, c, d]);
	                var targetCoverageX = (0, _extent.getWidth)(targetQuadExtent) / this.targetWorldWidth_;
	                needsSubdivision = targetCoverageX > MAX_TRIANGLE_WIDTH || needsSubdivision;
	            }
	            if (!wrapsX && this.sourceProj_.isGlobal() && sourceCoverageX) {
	                needsSubdivision = sourceCoverageX > MAX_TRIANGLE_WIDTH || needsSubdivision;
	            }
	        }
	        if (!needsSubdivision && this.maxSourceExtent_) {
	            if (!(0, _extent.intersects)(sourceQuadExtent, this.maxSourceExtent_)) {
	                // whole quad outside source projection extent -> ignore
	                return;
	            }
	        }
	        if (!needsSubdivision) {
	            if (!isFinite(aSrc[0]) || !isFinite(aSrc[1]) || !isFinite(bSrc[0]) || !isFinite(bSrc[1]) || !isFinite(cSrc[0]) || !isFinite(cSrc[1]) || !isFinite(dSrc[0]) || !isFinite(dSrc[1])) {
	                if (maxSubdivision > 0) {
	                    needsSubdivision = true;
	                } else {
	                    return;
	                }
	            }
	        }
	        if (maxSubdivision > 0) {
	            if (!needsSubdivision) {
	                var center = [(a[0] + c[0]) / 2, (a[1] + c[1]) / 2];
	                var centerSrc = this.transformInv_(center);
	                var dx = void 0;
	                if (wrapsX) {
	                    var centerSrcEstimX = ((0, _math.modulo)(aSrc[0], sourceWorldWidth) + (0, _math.modulo)(cSrc[0], sourceWorldWidth)) / 2;
	                    dx = centerSrcEstimX - (0, _math.modulo)(centerSrc[0], sourceWorldWidth);
	                } else {
	                    dx = (aSrc[0] + cSrc[0]) / 2 - centerSrc[0];
	                }
	                var dy = (aSrc[1] + cSrc[1]) / 2 - centerSrc[1];
	                var centerSrcErrorSquared = dx * dx + dy * dy;
	                needsSubdivision = centerSrcErrorSquared > this.errorThresholdSquared_;
	            }
	            if (needsSubdivision) {
	                if (Math.abs(a[0] - c[0]) <= Math.abs(a[1] - c[1])) {
	                    // split horizontally (top & bottom)
	                    var bc = [(b[0] + c[0]) / 2, (b[1] + c[1]) / 2];
	                    var bcSrc = this.transformInv_(bc);
	                    var da = [(d[0] + a[0]) / 2, (d[1] + a[1]) / 2];
	                    var daSrc = this.transformInv_(da);
	                    this.addQuad_(a, b, bc, da, aSrc, bSrc, bcSrc, daSrc, maxSubdivision - 1);
	                    this.addQuad_(da, bc, c, d, daSrc, bcSrc, cSrc, dSrc, maxSubdivision - 1);
	                } else {
	                    // split vertically (left & right)
	                    var ab = [(a[0] + b[0]) / 2, (a[1] + b[1]) / 2];
	                    var abSrc = this.transformInv_(ab);
	                    var cd = [(c[0] + d[0]) / 2, (c[1] + d[1]) / 2];
	                    var cdSrc = this.transformInv_(cd);
	                    this.addQuad_(a, ab, cd, d, aSrc, abSrc, cdSrc, dSrc, maxSubdivision - 1);
	                    this.addQuad_(ab, b, c, cd, abSrc, bSrc, cSrc, cdSrc, maxSubdivision - 1);
	                }
	                return;
	            }
	        }
	        if (wrapsX) {
	            if (!this.canWrapXInSource_) {
	                return;
	            }
	            this.wrapsXInSource_ = true;
	        }
	        this.addTriangle_(a, c, d, aSrc, cSrc, dSrc);
	        this.addTriangle_(a, b, c, aSrc, bSrc, cSrc);
	    };
	    /**
	     * Calculates extent of the 'source' coordinates from all the triangles.
	     *
	     * @return {import("../extent.js").Extent} Calculated extent.
	     */
	    Triangulation.prototype.calculateSourceExtent = function () {
	        var extent = (0, _extent.createEmpty)();
	        this.triangles_.forEach(function (triangle, i, arr) {
	            var src = triangle.source;
	            (0, _extent.extendCoordinate)(extent, src[0]);
	            (0, _extent.extendCoordinate)(extent, src[1]);
	            (0, _extent.extendCoordinate)(extent, src[2]);
	        });
	        return extent;
	    };
	    /**
	     * @return {Array<Triangle>} Array of the calculated triangles.
	     */
	    Triangulation.prototype.getTriangles = function () {
	        return this.triangles_;
	    };
	    return Triangulation;
	}();
	exports.default = Triangulation;
	//# sourceMappingURL=Triangulation.js.map

/***/ }),
/* 643 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	exports.createSnapToResolutions = createSnapToResolutions;
	exports.createSnapToPower = createSnapToPower;
	exports.createMinMaxResolution = createMinMaxResolution;
	
	var _array = __webpack_require__(18);
	
	var _extent = __webpack_require__(4);
	
	var _math = __webpack_require__(19);
	
	/**
	 * @typedef {function((number|undefined), number, import("./size.js").Size, boolean=): (number|undefined)} Type
	 */
	/**
	 * Returns a modified resolution taking into acocunt the viewport size and maximum
	 * allowed extent.
	 * @param {number} resolution Resolution
	 * @param {import("./extent.js").Extent=} maxExtent Maximum allowed extent.
	 * @param {import("./size.js").Size} viewportSize Viewport size.
	 * @return {number} Capped resolution.
	 */
	function getViewportClampedResolution(resolution, maxExtent, viewportSize) {
	    var xResolution = (0, _extent.getWidth)(maxExtent) / viewportSize[0];
	    var yResolution = (0, _extent.getHeight)(maxExtent) / viewportSize[1];
	    return Math.min(resolution, Math.min(xResolution, yResolution));
	}
	/**
	 * Returns a modified resolution to be between maxResolution and minResolution while
	 * still allowing the value to be slightly out of bounds.
	 * Note: the computation is based on the logarithm function (ln):
	 *  - at 1, ln(x) is 0
	 *  - above 1, ln(x) keeps increasing but at a much slower pace than x
	 * The final result is clamped to prevent getting too far away from bounds.
	 * @param {number} resolution Resolution.
	 * @param {number} maxResolution Max resolution.
	 * @param {number} minResolution Min resolution.
	 * @return {number} Smoothed resolution.
	 */
	/**
	 * @module ol/resolutionconstraint
	 */
	function getSmoothClampedResolution(resolution, maxResolution, minResolution) {
	    var result = Math.min(resolution, maxResolution);
	    var ratio = 50;
	    result *= Math.log(1 + ratio * Math.max(0, resolution / maxResolution - 1)) / ratio + 1;
	    if (minResolution) {
	        result = Math.max(result, minResolution);
	        result /= Math.log(1 + ratio * Math.max(0, minResolution / resolution - 1)) / ratio + 1;
	    }
	    return (0, _math.clamp)(result, minResolution / 2, maxResolution * 2);
	}
	/**
	 * @param {Array<number>} resolutions Resolutions.
	 * @param {boolean=} opt_smooth If true, the view will be able to slightly exceed resolution limits. Default: true.
	 * @param {import("./extent.js").Extent=} opt_maxExtent Maximum allowed extent.
	 * @return {Type} Zoom function.
	 */
	function createSnapToResolutions(resolutions, opt_smooth, opt_maxExtent) {
	    return (
	        /**
	         * @param {number|undefined} resolution Resolution.
	         * @param {number} direction Direction.
	         * @param {import("./size.js").Size} size Viewport size.
	         * @param {boolean=} opt_isMoving True if an interaction or animation is in progress.
	         * @return {number|undefined} Resolution.
	         */
	        function (resolution, direction, size, opt_isMoving) {
	            if (resolution !== undefined) {
	                var maxResolution = resolutions[0];
	                var minResolution = resolutions[resolutions.length - 1];
	                var cappedMaxRes = opt_maxExtent ? getViewportClampedResolution(maxResolution, opt_maxExtent, size) : maxResolution;
	                // during interacting or animating, allow intermediary values
	                if (opt_isMoving) {
	                    var smooth = opt_smooth !== undefined ? opt_smooth : true;
	                    if (!smooth) {
	                        return (0, _math.clamp)(resolution, minResolution, cappedMaxRes);
	                    }
	                    return getSmoothClampedResolution(resolution, cappedMaxRes, minResolution);
	                }
	                var capped = Math.min(cappedMaxRes, resolution);
	                var z = Math.floor((0, _array.linearFindNearest)(resolutions, capped, direction));
	                if (resolutions[z] > cappedMaxRes && z < resolutions.length - 1) {
	                    return resolutions[z + 1];
	                }
	                return resolutions[z];
	            } else {
	                return undefined;
	            }
	        }
	    );
	}
	/**
	 * @param {number} power Power.
	 * @param {number} maxResolution Maximum resolution.
	 * @param {number=} opt_minResolution Minimum resolution.
	 * @param {boolean=} opt_smooth If true, the view will be able to slightly exceed resolution limits. Default: true.
	 * @param {import("./extent.js").Extent=} opt_maxExtent Maximum allowed extent.
	 * @return {Type} Zoom function.
	 */
	function createSnapToPower(power, maxResolution, opt_minResolution, opt_smooth, opt_maxExtent) {
	    return (
	        /**
	         * @param {number|undefined} resolution Resolution.
	         * @param {number} direction Direction.
	         * @param {import("./size.js").Size} size Viewport size.
	         * @param {boolean=} opt_isMoving True if an interaction or animation is in progress.
	         * @return {number|undefined} Resolution.
	         */
	        function (resolution, direction, size, opt_isMoving) {
	            if (resolution !== undefined) {
	                var cappedMaxRes = opt_maxExtent ? getViewportClampedResolution(maxResolution, opt_maxExtent, size) : maxResolution;
	                var minResolution = opt_minResolution !== undefined ? opt_minResolution : 0;
	                // during interacting or animating, allow intermediary values
	                if (opt_isMoving) {
	                    var smooth = opt_smooth !== undefined ? opt_smooth : true;
	                    if (!smooth) {
	                        return (0, _math.clamp)(resolution, minResolution, cappedMaxRes);
	                    }
	                    return getSmoothClampedResolution(resolution, cappedMaxRes, minResolution);
	                }
	                var tolerance = 1e-9;
	                var minZoomLevel = Math.ceil(Math.log(maxResolution / cappedMaxRes) / Math.log(power) - tolerance);
	                var offset = -direction * (0.5 - tolerance) + 0.5;
	                var capped = Math.min(cappedMaxRes, resolution);
	                var cappedZoomLevel = Math.floor(Math.log(maxResolution / capped) / Math.log(power) + offset);
	                var zoomLevel = Math.max(minZoomLevel, cappedZoomLevel);
	                var newResolution = maxResolution / Math.pow(power, zoomLevel);
	                return (0, _math.clamp)(newResolution, minResolution, cappedMaxRes);
	            } else {
	                return undefined;
	            }
	        }
	    );
	}
	/**
	 * @param {number} maxResolution Max resolution.
	 * @param {number} minResolution Min resolution.
	 * @param {boolean=} opt_smooth If true, the view will be able to slightly exceed resolution limits. Default: true.
	 * @param {import("./extent.js").Extent=} opt_maxExtent Maximum allowed extent.
	 * @return {Type} Zoom function.
	 */
	function createMinMaxResolution(maxResolution, minResolution, opt_smooth, opt_maxExtent) {
	    return (
	        /**
	         * @param {number|undefined} resolution Resolution.
	         * @param {number} direction Direction.
	         * @param {import("./size.js").Size} size Viewport size.
	         * @param {boolean=} opt_isMoving True if an interaction or animation is in progress.
	         * @return {number|undefined} Resolution.
	         */
	        function (resolution, direction, size, opt_isMoving) {
	            if (resolution !== undefined) {
	                var cappedMaxRes = opt_maxExtent ? getViewportClampedResolution(maxResolution, opt_maxExtent, size) : maxResolution;
	                var smooth = opt_smooth !== undefined ? opt_smooth : true;
	                if (!smooth || !opt_isMoving) {
	                    return (0, _math.clamp)(resolution, minResolution, cappedMaxRes);
	                }
	                return getSmoothClampedResolution(resolution, cappedMaxRes, minResolution);
	            } else {
	                return undefined;
	            }
	        }
	    );
	}
	//# sourceMappingURL=resolutionconstraint.js.map

/***/ }),
/* 644 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	exports.TileSourceEvent = undefined;
	
	var _util = __webpack_require__(14);
	
	var _TileCache = __webpack_require__(259);
	
	var _TileCache2 = _interopRequireDefault(_TileCache);
	
	var _TileState = __webpack_require__(70);
	
	var _TileState2 = _interopRequireDefault(_TileState);
	
	var _Event = __webpack_require__(35);
	
	var _Event2 = _interopRequireDefault(_Event);
	
	var _proj = __webpack_require__(16);
	
	var _size = __webpack_require__(128);
	
	var _Source = __webpack_require__(297);
	
	var _Source2 = _interopRequireDefault(_Source);
	
	var _tilecoord = __webpack_require__(88);
	
	var _tilegrid = __webpack_require__(185);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var __extends = undefined && undefined.__extends || function () {
	    var _extendStatics = function extendStatics(d, b) {
	        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	            d.__proto__ = b;
	        } || function (d, b) {
	            for (var p in b) {
	                if (b.hasOwnProperty(p)) d[p] = b[p];
	            }
	        };
	        return _extendStatics(d, b);
	    };
	    return function (d, b) {
	        _extendStatics(d, b);
	        function __() {
	            this.constructor = d;
	        }
	        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	    };
	}();
	/**
	 * @module ol/source/Tile
	 */
	
	/**
	 * @typedef {Object} Options
	 * @property {import("./Source.js").AttributionLike} [attributions]
	 * @property {boolean} [attributionsCollapsible=true] Attributions are collapsible.
	 * @property {number} [cacheSize]
	 * @property {boolean} [opaque]
	 * @property {number} [tilePixelRatio]
	 * @property {import("../proj.js").ProjectionLike} [projection]
	 * @property {import("./State.js").default} [state]
	 * @property {import("../tilegrid/TileGrid.js").default} [tileGrid]
	 * @property {boolean} [wrapX=true]
	 * @property {number} [transition]
	 * @property {string} [key]
	 * @property {number} [zDirection=0]
	 */
	/**
	 * @classdesc
	 * Abstract base class; normally only used for creating subclasses and not
	 * instantiated in apps.
	 * Base class for sources providing images divided into a tile grid.
	 * @abstract
	 * @api
	 */
	var TileSource = /** @class */function (_super) {
	    __extends(TileSource, _super);
	    /**
	     * @param {Options} options SourceTile source options.
	     */
	    function TileSource(options) {
	        var _this = _super.call(this, {
	            attributions: options.attributions,
	            attributionsCollapsible: options.attributionsCollapsible,
	            projection: options.projection,
	            state: options.state,
	            wrapX: options.wrapX
	        }) || this;
	        /**
	         * @private
	         * @type {boolean}
	         */
	        _this.opaque_ = options.opaque !== undefined ? options.opaque : false;
	        /**
	         * @private
	         * @type {number}
	         */
	        _this.tilePixelRatio_ = options.tilePixelRatio !== undefined ? options.tilePixelRatio : 1;
	        /**
	         * @protected
	         * @type {import("../tilegrid/TileGrid.js").default}
	         */
	        _this.tileGrid = options.tileGrid !== undefined ? options.tileGrid : null;
	        var cacheSize = options.cacheSize;
	        if (cacheSize === undefined) {
	            var tileSize = [256, 256];
	            var tileGrid = options.tileGrid;
	            if (tileGrid) {
	                (0, _size.toSize)(tileGrid.getTileSize(tileGrid.getMinZoom()), tileSize);
	            }
	            var canUseScreen = typeof screen !== 'undefined';
	            var width = canUseScreen ? screen.availWidth || screen.width : 1920;
	            var height = canUseScreen ? screen.availHeight || screen.height : 1080;
	            cacheSize = 4 * Math.ceil(width / tileSize[0]) * Math.ceil(height / tileSize[1]);
	        }
	        /**
	         * @protected
	         * @type {import("../TileCache.js").default}
	         */
	        _this.tileCache = new _TileCache2.default(cacheSize);
	        /**
	         * @protected
	         * @type {import("../size.js").Size}
	         */
	        _this.tmpSize = [0, 0];
	        /**
	         * @private
	         * @type {string}
	         */
	        _this.key_ = options.key || '';
	        /**
	         * @protected
	         * @type {import("../Tile.js").Options}
	         */
	        _this.tileOptions = { transition: options.transition };
	        /**
	         * zDirection hint, read by the renderer. Indicates which resolution should be used
	         * by a renderer if the views resolution does not match any resolution of the tile source.
	         * If 0, the nearest resolution will be used. If 1, the nearest lower resolution
	         * will be used. If -1, the nearest higher resolution will be used.
	         * @type {number}
	         */
	        _this.zDirection = options.zDirection ? options.zDirection : 0;
	        return _this;
	    }
	    /**
	     * @return {boolean} Can expire cache.
	     */
	    TileSource.prototype.canExpireCache = function () {
	        return this.tileCache.canExpireCache();
	    };
	    /**
	     * @param {import("../proj/Projection.js").default} projection Projection.
	     * @param {!Object<string, import("../TileRange.js").default>} usedTiles Used tiles.
	     */
	    TileSource.prototype.expireCache = function (projection, usedTiles) {
	        var tileCache = this.getTileCacheForProjection(projection);
	        if (tileCache) {
	            tileCache.expireCache(usedTiles);
	        }
	    };
	    /**
	     * @param {import("../proj/Projection.js").default} projection Projection.
	     * @param {number} z Zoom level.
	     * @param {import("../TileRange.js").default} tileRange Tile range.
	     * @param {function(import("../Tile.js").default):(boolean|void)} callback Called with each
	     *     loaded tile.  If the callback returns `false`, the tile will not be
	     *     considered loaded.
	     * @return {boolean} The tile range is fully covered with loaded tiles.
	     */
	    TileSource.prototype.forEachLoadedTile = function (projection, z, tileRange, callback) {
	        var tileCache = this.getTileCacheForProjection(projection);
	        if (!tileCache) {
	            return false;
	        }
	        var covered = true;
	        var tile, tileCoordKey, loaded;
	        for (var x = tileRange.minX; x <= tileRange.maxX; ++x) {
	            for (var y = tileRange.minY; y <= tileRange.maxY; ++y) {
	                tileCoordKey = (0, _tilecoord.getKeyZXY)(z, x, y);
	                loaded = false;
	                if (tileCache.containsKey(tileCoordKey)) {
	                    tile = /** @type {!import("../Tile.js").default} */tileCache.get(tileCoordKey);
	                    loaded = tile.getState() === _TileState2.default.LOADED;
	                    if (loaded) {
	                        loaded = callback(tile) !== false;
	                    }
	                }
	                if (!loaded) {
	                    covered = false;
	                }
	            }
	        }
	        return covered;
	    };
	    /**
	     * @param {import("../proj/Projection.js").default} projection Projection.
	     * @return {number} Gutter.
	     */
	    TileSource.prototype.getGutterForProjection = function (projection) {
	        return 0;
	    };
	    /**
	     * Return the key to be used for all tiles in the source.
	     * @return {string} The key for all tiles.
	     * @protected
	     */
	    TileSource.prototype.getKey = function () {
	        return this.key_;
	    };
	    /**
	     * Set the value to be used as the key for all tiles in the source.
	     * @param {string} key The key for tiles.
	     * @protected
	     */
	    TileSource.prototype.setKey = function (key) {
	        if (this.key_ !== key) {
	            this.key_ = key;
	            this.changed();
	        }
	    };
	    /**
	     * @param {import("../proj/Projection.js").default} projection Projection.
	     * @return {boolean} Opaque.
	     */
	    TileSource.prototype.getOpaque = function (projection) {
	        return this.opaque_;
	    };
	    /**
	     * @inheritDoc
	     */
	    TileSource.prototype.getResolutions = function () {
	        return this.tileGrid.getResolutions();
	    };
	    /**
	     * @abstract
	     * @param {number} z Tile coordinate z.
	     * @param {number} x Tile coordinate x.
	     * @param {number} y Tile coordinate y.
	     * @param {number} pixelRatio Pixel ratio.
	     * @param {import("../proj/Projection.js").default} projection Projection.
	     * @return {!import("../Tile.js").default} Tile.
	     */
	    TileSource.prototype.getTile = function (z, x, y, pixelRatio, projection) {
	        return (0, _util.abstract)();
	    };
	    /**
	     * Return the tile grid of the tile source.
	     * @return {import("../tilegrid/TileGrid.js").default} Tile grid.
	     * @api
	     */
	    TileSource.prototype.getTileGrid = function () {
	        return this.tileGrid;
	    };
	    /**
	     * @param {import("../proj/Projection.js").default} projection Projection.
	     * @return {!import("../tilegrid/TileGrid.js").default} Tile grid.
	     */
	    TileSource.prototype.getTileGridForProjection = function (projection) {
	        if (!this.tileGrid) {
	            return (0, _tilegrid.getForProjection)(projection);
	        } else {
	            return this.tileGrid;
	        }
	    };
	    /**
	     * @param {import("../proj/Projection.js").default} projection Projection.
	     * @return {import("../TileCache.js").default} Tile cache.
	     * @protected
	     */
	    TileSource.prototype.getTileCacheForProjection = function (projection) {
	        var thisProj = this.getProjection();
	        if (thisProj && !(0, _proj.equivalent)(thisProj, projection)) {
	            return null;
	        } else {
	            return this.tileCache;
	        }
	    };
	    /**
	     * Get the tile pixel ratio for this source. Subclasses may override this
	     * method, which is meant to return a supported pixel ratio that matches the
	     * provided `pixelRatio` as close as possible.
	     * @param {number} pixelRatio Pixel ratio.
	     * @return {number} Tile pixel ratio.
	     */
	    TileSource.prototype.getTilePixelRatio = function (pixelRatio) {
	        return this.tilePixelRatio_;
	    };
	    /**
	     * @param {number} z Z.
	     * @param {number} pixelRatio Pixel ratio.
	     * @param {import("../proj/Projection.js").default} projection Projection.
	     * @return {import("../size.js").Size} Tile size.
	     */
	    TileSource.prototype.getTilePixelSize = function (z, pixelRatio, projection) {
	        var tileGrid = this.getTileGridForProjection(projection);
	        var tilePixelRatio = this.getTilePixelRatio(pixelRatio);
	        var tileSize = (0, _size.toSize)(tileGrid.getTileSize(z), this.tmpSize);
	        if (tilePixelRatio == 1) {
	            return tileSize;
	        } else {
	            return (0, _size.scale)(tileSize, tilePixelRatio, this.tmpSize);
	        }
	    };
	    /**
	     * Returns a tile coordinate wrapped around the x-axis. When the tile coordinate
	     * is outside the resolution and extent range of the tile grid, `null` will be
	     * returned.
	     * @param {import("../tilecoord.js").TileCoord} tileCoord Tile coordinate.
	     * @param {import("../proj/Projection.js").default=} opt_projection Projection.
	     * @return {import("../tilecoord.js").TileCoord} Tile coordinate to be passed to the tileUrlFunction or
	     *     null if no tile URL should be created for the passed `tileCoord`.
	     */
	    TileSource.prototype.getTileCoordForTileUrlFunction = function (tileCoord, opt_projection) {
	        var projection = opt_projection !== undefined ? opt_projection : this.getProjection();
	        var tileGrid = this.getTileGridForProjection(projection);
	        if (this.getWrapX() && projection.isGlobal()) {
	            tileCoord = (0, _tilegrid.wrapX)(tileGrid, tileCoord, projection);
	        }
	        return (0, _tilecoord.withinExtentAndZ)(tileCoord, tileGrid) ? tileCoord : null;
	    };
	    /**
	     * Remove all cached tiles from the source. The next render cycle will fetch new tiles.
	     * @api
	     */
	    TileSource.prototype.clear = function () {
	        this.tileCache.clear();
	    };
	    /**
	     * @inheritDoc
	     */
	    TileSource.prototype.refresh = function () {
	        this.clear();
	        _super.prototype.refresh.call(this);
	    };
	    /**
	     * Marks a tile coord as being used, without triggering a load.
	     * @abstract
	     * @param {number} z Tile coordinate z.
	     * @param {number} x Tile coordinate x.
	     * @param {number} y Tile coordinate y.
	     * @param {import("../proj/Projection.js").default} projection Projection.
	     */
	    TileSource.prototype.useTile = function (z, x, y, projection) {};
	    return TileSource;
	}(_Source2.default);
	/**
	 * @classdesc
	 * Events emitted by {@link module:ol/source/Tile~TileSource} instances are instances of this
	 * type.
	 */
	var TileSourceEvent = /** @class */function (_super) {
	    __extends(TileSourceEvent, _super);
	    /**
	     * @param {string} type Type.
	     * @param {import("../Tile.js").default} tile The tile.
	     */
	    function TileSourceEvent(type, tile) {
	        var _this = _super.call(this, type) || this;
	        /**
	         * The tile related to the event.
	         * @type {import("../Tile.js").default}
	         * @api
	         */
	        _this.tile = tile;
	        return _this;
	    }
	    return TileSourceEvent;
	}(_Event2.default);
	exports.TileSourceEvent = TileSourceEvent;
	exports.default = TileSource;
	//# sourceMappingURL=Tile.js.map

/***/ }),
/* 645 */
/***/ (function(module, exports) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	/**
	 * @module ol/source/TileEventType
	 */
	/**
	 * @enum {string}
	 */
	exports.default = {
	  /**
	   * Triggered when a tile starts loading.
	   * @event module:ol/source/Tile.TileSourceEvent#tileloadstart
	   * @api
	   */
	  TILELOADSTART: 'tileloadstart',
	  /**
	   * Triggered when a tile finishes loading, either when its data is loaded,
	   * or when loading was aborted because the tile is no longer needed.
	   * @event module:ol/source/Tile.TileSourceEvent#tileloadend
	   * @api
	   */
	  TILELOADEND: 'tileloadend',
	  /**
	   * Triggered if tile loading results in an error.
	   * @event module:ol/source/Tile.TileSourceEvent#tileloaderror
	   * @api
	   */
	  TILELOADERROR: 'tileloaderror'
	};
	//# sourceMappingURL=TileEventType.js.map

/***/ }),
/* 646 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	
	var _common = __webpack_require__(652);
	
	var _asserts = __webpack_require__(29);
	
	var _extent = __webpack_require__(4);
	
	var _obj = __webpack_require__(23);
	
	var _math = __webpack_require__(19);
	
	var _proj = __webpack_require__(16);
	
	var _reproj = __webpack_require__(295);
	
	var _size = __webpack_require__(128);
	
	var _TileImage = __webpack_require__(178);
	
	var _TileImage2 = _interopRequireDefault(_TileImage);
	
	var _WMSServerType = __webpack_require__(648);
	
	var _WMSServerType2 = _interopRequireDefault(_WMSServerType);
	
	var _tilecoord = __webpack_require__(88);
	
	var _string = __webpack_require__(180);
	
	var _uri = __webpack_require__(188);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	/**
	 * @module ol/source/TileWMS
	 */
	var __extends = undefined && undefined.__extends || function () {
	    var _extendStatics = function extendStatics(d, b) {
	        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	            d.__proto__ = b;
	        } || function (d, b) {
	            for (var p in b) {
	                if (b.hasOwnProperty(p)) d[p] = b[p];
	            }
	        };
	        return _extendStatics(d, b);
	    };
	    return function (d, b) {
	        _extendStatics(d, b);
	        function __() {
	            this.constructor = d;
	        }
	        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	    };
	}();
	
	/**
	 * @typedef {Object} Options
	 * @property {import("./Source.js").AttributionLike} [attributions] Attributions.
	 * @property {number} [cacheSize] Tile cache size. The default depends on the screen size. Will increase if too small.
	 * @property {null|string} [crossOrigin] The `crossOrigin` attribute for loaded images.  Note that
	 * you must provide a `crossOrigin` value if you want to access pixel data with the Canvas renderer.
	 * See https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_enabled_image for more detail.
	 * @property {Object<string,*>} params WMS request parameters.
	 * At least a `LAYERS` param is required. `STYLES` is
	 * `''` by default. `VERSION` is `1.3.0` by default. `WIDTH`, `HEIGHT`, `BBOX`
	 * and `CRS` (`SRS` for WMS version < 1.3.0) will be set dynamically.
	 * @property {number} [gutter=0]
	 * The size in pixels of the gutter around image tiles to ignore. By setting
	 * this property to a non-zero value, images will be requested that are wider
	 * and taller than the tile size by a value of `2 x gutter`.
	 * Using a non-zero value allows artifacts of rendering at tile edges to be
	 * ignored. If you control the WMS service it is recommended to address
	 * "artifacts at tile edges" issues by properly configuring the WMS service. For
	 * example, MapServer has a `tile_map_edge_buffer` configuration parameter for
	 * this. See http://mapserver.org/output/tile_mode.html.
	 * @property {boolean} [hidpi=true] Use the `ol/Map#pixelRatio` value when requesting
	 * the image from the remote server.
	 * @property {import("../proj.js").ProjectionLike} [projection] Projection. Default is the view projection.
	 * @property {number} [reprojectionErrorThreshold=0.5] Maximum allowed reprojection error (in pixels).
	 * Higher values can increase reprojection performance, but decrease precision.
	 * @property {typeof import("../ImageTile.js").default} [tileClass] Class used to instantiate image tiles.
	 * Default is {@link module:ol/ImageTile~ImageTile}.
	 * @property {import("../tilegrid/TileGrid.js").default} [tileGrid] Tile grid. Base this on the resolutions,
	 * tilesize and extent supported by the server.
	 * If this is not defined, a default grid will be used: if there is a projection
	 * extent, the grid will be based on that; if not, a grid based on a global
	 * extent with origin at 0,0 will be used..
	 * @property {import("./WMSServerType.js").default|string} [serverType]
	 * The type of the remote WMS server. Currently only used when `hidpi` is
	 * `true`.
	 * @property {import("../Tile.js").LoadFunction} [tileLoadFunction] Optional function to load a tile given a URL. The default is
	 * ```js
	 * function(imageTile, src) {
	 *   imageTile.getImage().src = src;
	 * };
	 * ```
	 * @property {string} [url] WMS service URL.
	 * @property {Array<string>} [urls] WMS service urls.
	 * Use this instead of `url` when the WMS supports multiple urls for GetMap requests.
	 * @property {boolean} [wrapX=true] Whether to wrap the world horizontally.
	 * When set to `false`, only one world
	 * will be rendered. When `true`, tiles will be requested for one world only,
	 * but they will be wrapped horizontally to render multiple worlds.
	 * @property {number} [transition] Duration of the opacity transition for rendering.
	 * To disable the opacity transition, pass `transition: 0`.
	 */
	/**
	 * @classdesc
	 * Layer source for tile data from WMS servers.
	 * @api
	 */
	var TileWMS = /** @class */function (_super) {
	    __extends(TileWMS, _super);
	    /**
	     * @param {Options=} [opt_options] Tile WMS options.
	     */
	    function TileWMS(opt_options) {
	        var _this = this;
	        var options = opt_options ? opt_options : /** @type {Options} */{};
	        var params = options.params || {};
	        var transparent = 'TRANSPARENT' in params ? params['TRANSPARENT'] : true;
	        _this = _super.call(this, {
	            attributions: options.attributions,
	            cacheSize: options.cacheSize,
	            crossOrigin: options.crossOrigin,
	            opaque: !transparent,
	            projection: options.projection,
	            reprojectionErrorThreshold: options.reprojectionErrorThreshold,
	            tileClass: options.tileClass,
	            tileGrid: options.tileGrid,
	            tileLoadFunction: options.tileLoadFunction,
	            tileUrlFunction: tileUrlFunction,
	            url: options.url,
	            urls: options.urls,
	            wrapX: options.wrapX !== undefined ? options.wrapX : true,
	            transition: options.transition
	        }) || this;
	        /**
	         * @private
	         * @type {number}
	         */
	        _this.gutter_ = options.gutter !== undefined ? options.gutter : 0;
	        /**
	         * @private
	         * @type {!Object}
	         */
	        _this.params_ = params;
	        /**
	         * @private
	         * @type {boolean}
	         */
	        _this.v13_ = true;
	        /**
	         * @private
	         * @type {import("./WMSServerType.js").default|undefined}
	         */
	        _this.serverType_ = /** @type {import("./WMSServerType.js").default|undefined} */options.serverType;
	        /**
	         * @private
	         * @type {boolean}
	         */
	        _this.hidpi_ = options.hidpi !== undefined ? options.hidpi : true;
	        /**
	         * @private
	         * @type {import("../extent.js").Extent}
	         */
	        _this.tmpExtent_ = (0, _extent.createEmpty)();
	        _this.updateV13_();
	        _this.setKey(_this.getKeyForParams_());
	        return _this;
	    }
	    /**
	     * Return the GetFeatureInfo URL for the passed coordinate, resolution, and
	     * projection. Return `undefined` if the GetFeatureInfo URL cannot be
	     * constructed.
	     * @param {import("../coordinate.js").Coordinate} coordinate Coordinate.
	     * @param {number} resolution Resolution.
	     * @param {import("../proj.js").ProjectionLike} projection Projection.
	     * @param {!Object} params GetFeatureInfo params. `INFO_FORMAT` at least should
	     *     be provided. If `QUERY_LAYERS` is not provided then the layers specified
	     *     in the `LAYERS` parameter will be used. `VERSION` should not be
	     *     specified here.
	     * @return {string|undefined} GetFeatureInfo URL.
	     * @api
	     */
	    TileWMS.prototype.getFeatureInfoUrl = function (coordinate, resolution, projection, params) {
	        var projectionObj = (0, _proj.get)(projection);
	        var sourceProjectionObj = this.getProjection();
	        var tileGrid = this.getTileGrid();
	        if (!tileGrid) {
	            tileGrid = this.getTileGridForProjection(projectionObj);
	        }
	        var z = tileGrid.getZForResolution(resolution, this.zDirection);
	        var tileCoord = tileGrid.getTileCoordForCoordAndZ(coordinate, z);
	        if (tileGrid.getResolutions().length <= tileCoord[0]) {
	            return undefined;
	        }
	        var tileResolution = tileGrid.getResolution(tileCoord[0]);
	        var tileExtent = tileGrid.getTileCoordExtent(tileCoord, this.tmpExtent_);
	        var tileSize = (0, _size.toSize)(tileGrid.getTileSize(tileCoord[0]), this.tmpSize);
	        var gutter = this.gutter_;
	        if (gutter !== 0) {
	            tileSize = (0, _size.buffer)(tileSize, gutter, this.tmpSize);
	            tileExtent = (0, _extent.buffer)(tileExtent, tileResolution * gutter, tileExtent);
	        }
	        if (sourceProjectionObj && sourceProjectionObj !== projectionObj) {
	            tileResolution = (0, _reproj.calculateSourceResolution)(sourceProjectionObj, projectionObj, coordinate, tileResolution);
	            tileExtent = (0, _proj.transformExtent)(tileExtent, projectionObj, sourceProjectionObj);
	            coordinate = (0, _proj.transform)(coordinate, projectionObj, sourceProjectionObj);
	        }
	        var baseParams = {
	            'SERVICE': 'WMS',
	            'VERSION': _common.DEFAULT_WMS_VERSION,
	            'REQUEST': 'GetFeatureInfo',
	            'FORMAT': 'image/png',
	            'TRANSPARENT': true,
	            'QUERY_LAYERS': this.params_['LAYERS']
	        };
	        (0, _obj.assign)(baseParams, this.params_, params);
	        var x = Math.floor((coordinate[0] - tileExtent[0]) / tileResolution);
	        var y = Math.floor((tileExtent[3] - coordinate[1]) / tileResolution);
	        baseParams[this.v13_ ? 'I' : 'X'] = x;
	        baseParams[this.v13_ ? 'J' : 'Y'] = y;
	        return this.getRequestUrl_(tileCoord, tileSize, tileExtent, 1, sourceProjectionObj || projectionObj, baseParams);
	    };
	    /**
	     * Return the GetLegendGraphic URL, optionally optimized for the passed
	     * resolution and possibly including any passed specific parameters. Returns
	     * `undefined` if the GetLegendGraphic URL cannot be constructed.
	     *
	     * @param {number} [resolution] Resolution. If set to undefined, `SCALE`
	     *     will not be calculated and included in URL.
	     * @param {Object} [params] GetLegendGraphic params. If `LAYER` is set, the
	     *     request is generated for this wms layer, else it will try to use the
	     *     configured wms layer. Default `FORMAT` is `image/png`.
	     *     `VERSION` should not be specified here.
	     * @return {string|undefined} GetLegendGraphic URL.
	     * @api
	     */
	    TileWMS.prototype.getLegendUrl = function (resolution, params) {
	        if (this.urls[0] === undefined) {
	            return undefined;
	        }
	        var baseParams = {
	            'SERVICE': 'WMS',
	            'VERSION': _common.DEFAULT_WMS_VERSION,
	            'REQUEST': 'GetLegendGraphic',
	            'FORMAT': 'image/png'
	        };
	        if (params === undefined || params['LAYER'] === undefined) {
	            var layers = this.params_.LAYERS;
	            var isSingleLayer = !Array.isArray(layers) || layers.length === 1;
	            if (!isSingleLayer) {
	                return undefined;
	            }
	            baseParams['LAYER'] = layers;
	        }
	        if (resolution !== undefined) {
	            var mpu = this.getProjection() ? this.getProjection().getMetersPerUnit() : 1;
	            var dpi = 25.4 / 0.28;
	            var inchesPerMeter = 39.37;
	            baseParams['SCALE'] = resolution * mpu * inchesPerMeter * dpi;
	        }
	        (0, _obj.assign)(baseParams, params);
	        return (0, _uri.appendParams)( /** @type {string} */this.urls[0], baseParams);
	    };
	    /**
	     * @inheritDoc
	     */
	    TileWMS.prototype.getGutter = function () {
	        return this.gutter_;
	    };
	    /**
	     * Get the user-provided params, i.e. those passed to the constructor through
	     * the "params" option, and possibly updated using the updateParams method.
	     * @return {Object} Params.
	     * @api
	     */
	    TileWMS.prototype.getParams = function () {
	        return this.params_;
	    };
	    /**
	     * @param {import("../tilecoord.js").TileCoord} tileCoord Tile coordinate.
	     * @param {import("../size.js").Size} tileSize Tile size.
	     * @param {import("../extent.js").Extent} tileExtent Tile extent.
	     * @param {number} pixelRatio Pixel ratio.
	     * @param {import("../proj/Projection.js").default} projection Projection.
	     * @param {Object} params Params.
	     * @return {string|undefined} Request URL.
	     * @private
	     */
	    TileWMS.prototype.getRequestUrl_ = function (tileCoord, tileSize, tileExtent, pixelRatio, projection, params) {
	        var urls = this.urls;
	        if (!urls) {
	            return undefined;
	        }
	        params['WIDTH'] = tileSize[0];
	        params['HEIGHT'] = tileSize[1];
	        params[this.v13_ ? 'CRS' : 'SRS'] = projection.getCode();
	        if (!('STYLES' in this.params_)) {
	            params['STYLES'] = '';
	        }
	        if (pixelRatio != 1) {
	            switch (this.serverType_) {
	                case _WMSServerType2.default.GEOSERVER:
	                    var dpi = 90 * pixelRatio + 0.5 | 0;
	                    if ('FORMAT_OPTIONS' in params) {
	                        params['FORMAT_OPTIONS'] += ';dpi:' + dpi;
	                    } else {
	                        params['FORMAT_OPTIONS'] = 'dpi:' + dpi;
	                    }
	                    break;
	                case _WMSServerType2.default.MAPSERVER:
	                    params['MAP_RESOLUTION'] = 90 * pixelRatio;
	                    break;
	                case _WMSServerType2.default.CARMENTA_SERVER:
	                case _WMSServerType2.default.QGIS:
	                    params['DPI'] = 90 * pixelRatio;
	                    break;
	                default:
	                    (0, _asserts.assert)(false, 52); // Unknown `serverType` configured
	                    break;
	            }
	        }
	        var axisOrientation = projection.getAxisOrientation();
	        var bbox = tileExtent;
	        if (this.v13_ && axisOrientation.substr(0, 2) == 'ne') {
	            var tmp = void 0;
	            tmp = tileExtent[0];
	            bbox[0] = tileExtent[1];
	            bbox[1] = tmp;
	            tmp = tileExtent[2];
	            bbox[2] = tileExtent[3];
	            bbox[3] = tmp;
	        }
	        params['BBOX'] = bbox.join(',');
	        var url;
	        if (urls.length == 1) {
	            url = urls[0];
	        } else {
	            var index = (0, _math.modulo)((0, _tilecoord.hash)(tileCoord), urls.length);
	            url = urls[index];
	        }
	        return (0, _uri.appendParams)(url, params);
	    };
	    /**
	     * @inheritDoc
	     */
	    TileWMS.prototype.getTilePixelRatio = function (pixelRatio) {
	        return !this.hidpi_ || this.serverType_ === undefined ? 1 :
	        /** @type {number} */pixelRatio;
	    };
	    /**
	     * @private
	     * @return {string} The key for the current params.
	     */
	    TileWMS.prototype.getKeyForParams_ = function () {
	        var i = 0;
	        var res = [];
	        for (var key in this.params_) {
	            res[i++] = key + '-' + this.params_[key];
	        }
	        return res.join('/');
	    };
	    /**
	     * Update the user-provided params.
	     * @param {Object} params Params.
	     * @api
	     */
	    TileWMS.prototype.updateParams = function (params) {
	        (0, _obj.assign)(this.params_, params);
	        this.updateV13_();
	        this.setKey(this.getKeyForParams_());
	    };
	    /**
	     * @private
	     */
	    TileWMS.prototype.updateV13_ = function () {
	        var version = this.params_['VERSION'] || _common.DEFAULT_WMS_VERSION;
	        this.v13_ = (0, _string.compareVersions)(version, '1.3') >= 0;
	    };
	    return TileWMS;
	}(_TileImage2.default);
	/**
	 * @param {import("../tilecoord.js").TileCoord} tileCoord The tile coordinate
	 * @param {number} pixelRatio The pixel ratio
	 * @param {import("../proj/Projection.js").default} projection The projection
	 * @return {string|undefined} The tile URL
	 * @this {TileWMS}
	 */
	function tileUrlFunction(tileCoord, pixelRatio, projection) {
	    var tileGrid = this.getTileGrid();
	    if (!tileGrid) {
	        tileGrid = this.getTileGridForProjection(projection);
	    }
	    if (tileGrid.getResolutions().length <= tileCoord[0]) {
	        return undefined;
	    }
	    if (pixelRatio != 1 && (!this.hidpi_ || this.serverType_ === undefined)) {
	        pixelRatio = 1;
	    }
	    var tileResolution = tileGrid.getResolution(tileCoord[0]);
	    var tileExtent = tileGrid.getTileCoordExtent(tileCoord, this.tmpExtent_);
	    var tileSize = (0, _size.toSize)(tileGrid.getTileSize(tileCoord[0]), this.tmpSize);
	    var gutter = this.gutter_;
	    if (gutter !== 0) {
	        tileSize = (0, _size.buffer)(tileSize, gutter, this.tmpSize);
	        tileExtent = (0, _extent.buffer)(tileExtent, tileResolution * gutter, tileExtent);
	    }
	    if (pixelRatio != 1) {
	        tileSize = (0, _size.scale)(tileSize, pixelRatio, this.tmpSize);
	    }
	    var baseParams = {
	        'SERVICE': 'WMS',
	        'VERSION': _common.DEFAULT_WMS_VERSION,
	        'REQUEST': 'GetMap',
	        'FORMAT': 'image/png',
	        'TRANSPARENT': true
	    };
	    (0, _obj.assign)(baseParams, this.params_);
	    return this.getRequestUrl_(tileCoord, tileSize, tileExtent, pixelRatio, projection, baseParams);
	}
	exports.default = TileWMS;
	//# sourceMappingURL=TileWMS.js.map

/***/ }),
/* 647 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	
	var _util = __webpack_require__(14);
	
	var _TileState = __webpack_require__(70);
	
	var _TileState2 = _interopRequireDefault(_TileState);
	
	var _tileurlfunction = __webpack_require__(307);
	
	var _Tile = __webpack_require__(644);
	
	var _Tile2 = _interopRequireDefault(_Tile);
	
	var _TileEventType = __webpack_require__(645);
	
	var _TileEventType2 = _interopRequireDefault(_TileEventType);
	
	var _tilecoord = __webpack_require__(88);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var __extends = undefined && undefined.__extends || function () {
	    var _extendStatics = function extendStatics(d, b) {
	        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	            d.__proto__ = b;
	        } || function (d, b) {
	            for (var p in b) {
	                if (b.hasOwnProperty(p)) d[p] = b[p];
	            }
	        };
	        return _extendStatics(d, b);
	    };
	    return function (d, b) {
	        _extendStatics(d, b);
	        function __() {
	            this.constructor = d;
	        }
	        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	    };
	}();
	/**
	 * @module ol/source/UrlTile
	 */
	
	/**
	 * @typedef {Object} Options
	 * @property {import("./Source.js").AttributionLike} [attributions]
	 * @property {boolean} [attributionsCollapsible=true] Attributions are collapsible.
	 * @property {number} [cacheSize]
	 * @property {boolean} [opaque]
	 * @property {import("../proj.js").ProjectionLike} [projection]
	 * @property {import("./State.js").default} [state]
	 * @property {import("../tilegrid/TileGrid.js").default} [tileGrid]
	 * @property {import("../Tile.js").LoadFunction} tileLoadFunction
	 * @property {number} [tilePixelRatio]
	 * @property {import("../Tile.js").UrlFunction} [tileUrlFunction]
	 * @property {string} [url]
	 * @property {Array<string>} [urls]
	 * @property {boolean} [wrapX=true]
	 * @property {number} [transition]
	 * @property {string} [key]
	 * @property {number} [zDirection=0]
	 */
	/**
	 * @classdesc
	 * Base class for sources providing tiles divided into a tile grid over http.
	 *
	 * @fires import("./Tile.js").TileSourceEvent
	 */
	var UrlTile = /** @class */function (_super) {
	    __extends(UrlTile, _super);
	    /**
	     * @param {Options} options Image tile options.
	     */
	    function UrlTile(options) {
	        var _this = _super.call(this, {
	            attributions: options.attributions,
	            cacheSize: options.cacheSize,
	            opaque: options.opaque,
	            projection: options.projection,
	            state: options.state,
	            tileGrid: options.tileGrid,
	            tilePixelRatio: options.tilePixelRatio,
	            wrapX: options.wrapX,
	            transition: options.transition,
	            key: options.key,
	            attributionsCollapsible: options.attributionsCollapsible,
	            zDirection: options.zDirection
	        }) || this;
	        /**
	         * @private
	         * @type {boolean}
	         */
	        _this.generateTileUrlFunction_ = !options.tileUrlFunction;
	        /**
	         * @protected
	         * @type {import("../Tile.js").LoadFunction}
	         */
	        _this.tileLoadFunction = options.tileLoadFunction;
	        /**
	         * @protected
	         * @type {import("../Tile.js").UrlFunction}
	         */
	        _this.tileUrlFunction = options.tileUrlFunction ? options.tileUrlFunction.bind(_this) : _tileurlfunction.nullTileUrlFunction;
	        /**
	         * @protected
	         * @type {!Array<string>|null}
	         */
	        _this.urls = null;
	        if (options.urls) {
	            _this.setUrls(options.urls);
	        } else if (options.url) {
	            _this.setUrl(options.url);
	        }
	        /**
	         * @private
	         * @type {!Object<string, boolean>}
	         */
	        _this.tileLoadingKeys_ = {};
	        return _this;
	    }
	    /**
	     * Return the tile load function of the source.
	     * @return {import("../Tile.js").LoadFunction} TileLoadFunction
	     * @api
	     */
	    UrlTile.prototype.getTileLoadFunction = function () {
	        return this.tileLoadFunction;
	    };
	    /**
	     * Return the tile URL function of the source.
	     * @return {import("../Tile.js").UrlFunction} TileUrlFunction
	     * @api
	     */
	    UrlTile.prototype.getTileUrlFunction = function () {
	        return this.tileUrlFunction;
	    };
	    /**
	     * Return the URLs used for this source.
	     * When a tileUrlFunction is used instead of url or urls,
	     * null will be returned.
	     * @return {!Array<string>|null} URLs.
	     * @api
	     */
	    UrlTile.prototype.getUrls = function () {
	        return this.urls;
	    };
	    /**
	     * Handle tile change events.
	     * @param {import("../events/Event.js").default} event Event.
	     * @protected
	     */
	    UrlTile.prototype.handleTileChange = function (event) {
	        var tile = /** @type {import("../Tile.js").default} */event.target;
	        var uid = (0, _util.getUid)(tile);
	        var tileState = tile.getState();
	        var type;
	        if (tileState == _TileState2.default.LOADING) {
	            this.tileLoadingKeys_[uid] = true;
	            type = _TileEventType2.default.TILELOADSTART;
	        } else if (uid in this.tileLoadingKeys_) {
	            delete this.tileLoadingKeys_[uid];
	            type = tileState == _TileState2.default.ERROR ? _TileEventType2.default.TILELOADERROR : tileState == _TileState2.default.LOADED || tileState == _TileState2.default.ABORT ? _TileEventType2.default.TILELOADEND : undefined;
	        }
	        if (type != undefined) {
	            this.dispatchEvent(new _Tile.TileSourceEvent(type, tile));
	        }
	    };
	    /**
	     * Set the tile load function of the source.
	     * @param {import("../Tile.js").LoadFunction} tileLoadFunction Tile load function.
	     * @api
	     */
	    UrlTile.prototype.setTileLoadFunction = function (tileLoadFunction) {
	        this.tileCache.clear();
	        this.tileLoadFunction = tileLoadFunction;
	        this.changed();
	    };
	    /**
	     * Set the tile URL function of the source.
	     * @param {import("../Tile.js").UrlFunction} tileUrlFunction Tile URL function.
	     * @param {string=} key Optional new tile key for the source.
	     * @api
	     */
	    UrlTile.prototype.setTileUrlFunction = function (tileUrlFunction, key) {
	        this.tileUrlFunction = tileUrlFunction;
	        this.tileCache.pruneExceptNewestZ();
	        if (typeof key !== 'undefined') {
	            this.setKey(key);
	        } else {
	            this.changed();
	        }
	    };
	    /**
	     * Set the URL to use for requests.
	     * @param {string} url URL.
	     * @api
	     */
	    UrlTile.prototype.setUrl = function (url) {
	        var urls = (0, _tileurlfunction.expandUrl)(url);
	        this.urls = urls;
	        this.setUrls(urls);
	    };
	    /**
	     * Set the URLs to use for requests.
	     * @param {Array<string>} urls URLs.
	     * @api
	     */
	    UrlTile.prototype.setUrls = function (urls) {
	        this.urls = urls;
	        var key = urls.join('\n');
	        if (this.generateTileUrlFunction_) {
	            this.setTileUrlFunction((0, _tileurlfunction.createFromTemplates)(urls, this.tileGrid), key);
	        } else {
	            this.setKey(key);
	        }
	    };
	    /**
	     * @inheritDoc
	     */
	    UrlTile.prototype.useTile = function (z, x, y) {
	        var tileCoordKey = (0, _tilecoord.getKeyZXY)(z, x, y);
	        if (this.tileCache.containsKey(tileCoordKey)) {
	            this.tileCache.get(tileCoordKey);
	        }
	    };
	    return UrlTile;
	}(_Tile2.default);
	exports.default = UrlTile;
	//# sourceMappingURL=UrlTile.js.map

/***/ }),
/* 648 */
/***/ (function(module, exports) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	/**
	 * @module ol/source/WMSServerType
	 */
	/**
	 * Available server types: `'carmentaserver'`, `'geoserver'`, `'mapserver'`,
	 *     `'qgis'`. These are servers that have vendor parameters beyond the WMS
	 *     specification that OpenLayers can make use of.
	 * @enum {string}
	 */
	exports.default = {
	  /**
	   * HiDPI support for [Carmenta Server](https://www.carmenta.com/en/products/carmenta-server)
	   * @api
	   */
	  CARMENTA_SERVER: 'carmentaserver',
	  /**
	   * HiDPI support for [GeoServer](https://geoserver.org/)
	   * @api
	   */
	  GEOSERVER: 'geoserver',
	  /**
	   * HiDPI support for [MapServer](https://mapserver.org/)
	   * @api
	   */
	  MAPSERVER: 'mapserver',
	  /**
	   * HiDPI support for [QGIS](https://qgis.org/)
	   * @api
	   */
	  QGIS: 'qgis'
	};
	//# sourceMappingURL=WMSServerType.js.map

/***/ }),
/* 649 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	exports.optionsFromCapabilities = optionsFromCapabilities;
	
	var _tileurlfunction = __webpack_require__(307);
	
	var _array = __webpack_require__(18);
	
	var _extent = __webpack_require__(4);
	
	var _obj = __webpack_require__(23);
	
	var _proj = __webpack_require__(16);
	
	var _TileImage = __webpack_require__(178);
	
	var _TileImage2 = _interopRequireDefault(_TileImage);
	
	var _WMTSRequestEncoding = __webpack_require__(650);
	
	var _WMTSRequestEncoding2 = _interopRequireDefault(_WMTSRequestEncoding);
	
	var _WMTS = __webpack_require__(306);
	
	var _uri = __webpack_require__(188);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	/**
	 * @module ol/source/WMTS
	 */
	var __extends = undefined && undefined.__extends || function () {
	    var _extendStatics = function extendStatics(d, b) {
	        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	            d.__proto__ = b;
	        } || function (d, b) {
	            for (var p in b) {
	                if (b.hasOwnProperty(p)) d[p] = b[p];
	            }
	        };
	        return _extendStatics(d, b);
	    };
	    return function (d, b) {
	        _extendStatics(d, b);
	        function __() {
	            this.constructor = d;
	        }
	        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	    };
	}();
	
	/**
	 * @typedef {Object} Options
	 * @property {import("./Source.js").AttributionLike} [attributions] Attributions.
	 * @property {number} [cacheSize] Tile cache size. The default depends on the screen size. Will increase if too small.
	 * @property {null|string} [crossOrigin] The `crossOrigin` attribute for loaded images.  Note that
	 * you must provide a `crossOrigin` value if you want to access pixel data with the Canvas renderer.
	 * See https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_enabled_image for more detail.
	 * @property {import("../tilegrid/WMTS.js").default} tileGrid Tile grid.
	 * @property {import("../proj.js").ProjectionLike} [projection] Projection. Default is the view projection.
	 * @property {number} [reprojectionErrorThreshold=0.5] Maximum allowed reprojection error (in pixels).
	 * Higher values can increase reprojection performance, but decrease precision.
	 * @property {import("./WMTSRequestEncoding.js").default|string} [requestEncoding='KVP'] Request encoding.
	 * @property {string} layer Layer name as advertised in the WMTS capabilities.
	 * @property {string} style Style name as advertised in the WMTS capabilities.
	 * @property {typeof import("../ImageTile.js").default} [tileClass]  Class used to instantiate image tiles. Default is {@link module:ol/ImageTile~ImageTile}.
	 * @property {number} [tilePixelRatio=1] The pixel ratio used by the tile service.
	 * For example, if the tile service advertizes 256px by 256px tiles but actually sends 512px
	 * by 512px images (for retina/hidpi devices) then `tilePixelRatio`
	 * should be set to `2`.
	 * @property {string} [format='image/jpeg'] Image format. Only used when `requestEncoding` is `'KVP'`.
	 * @property {string} [version='1.0.0'] WMTS version.
	 * @property {string} matrixSet Matrix set.
	 * @property {!Object} [dimensions] Additional "dimensions" for tile requests.
	 * This is an object with properties named like the advertised WMTS dimensions.
	 * @property {string} [url]  A URL for the service.
	 * For the RESTful request encoding, this is a URL
	 * template.  For KVP encoding, it is normal URL. A `{?-?}` template pattern,
	 * for example `subdomain{a-f}.domain.com`, may be used instead of defining
	 * each one separately in the `urls` option.
	 * @property {import("../Tile.js").LoadFunction} [tileLoadFunction] Optional function to load a tile given a URL. The default is
	 * ```js
	 * function(imageTile, src) {
	 *   imageTile.getImage().src = src;
	 * };
	 * ```
	 * @property {Array<string>} [urls] An array of URLs.
	 * Requests will be distributed among the URLs in this array.
	 * @property {boolean} [wrapX=false] Whether to wrap the world horizontally.
	 * @property {number} [transition] Duration of the opacity transition for rendering.
	 * To disable the opacity transition, pass `transition: 0`.
	 */
	/**
	 * @classdesc
	 * Layer source for tile data from WMTS servers.
	 * @api
	 */
	var WMTS = /** @class */function (_super) {
	    __extends(WMTS, _super);
	    /**
	     * @param {Options} options WMTS options.
	     */
	    function WMTS(options) {
	        // TODO: add support for TileMatrixLimits
	        var _this = this;
	        var requestEncoding = options.requestEncoding !== undefined ?
	        /** @type {import("./WMTSRequestEncoding.js").default} */options.requestEncoding : _WMTSRequestEncoding2.default.KVP;
	        // FIXME: should we create a default tileGrid?
	        // we could issue a getCapabilities xhr to retrieve missing configuration
	        var tileGrid = options.tileGrid;
	        var urls = options.urls;
	        if (urls === undefined && options.url !== undefined) {
	            urls = (0, _tileurlfunction.expandUrl)(options.url);
	        }
	        _this = _super.call(this, {
	            attributions: options.attributions,
	            cacheSize: options.cacheSize,
	            crossOrigin: options.crossOrigin,
	            projection: options.projection,
	            reprojectionErrorThreshold: options.reprojectionErrorThreshold,
	            tileClass: options.tileClass,
	            tileGrid: tileGrid,
	            tileLoadFunction: options.tileLoadFunction,
	            tilePixelRatio: options.tilePixelRatio,
	            tileUrlFunction: _tileurlfunction.nullTileUrlFunction,
	            urls: urls,
	            wrapX: options.wrapX !== undefined ? options.wrapX : false,
	            transition: options.transition
	        }) || this;
	        /**
	         * @private
	         * @type {string}
	         */
	        _this.version_ = options.version !== undefined ? options.version : '1.0.0';
	        /**
	         * @private
	         * @type {string}
	         */
	        _this.format_ = options.format !== undefined ? options.format : 'image/jpeg';
	        /**
	         * @private
	         * @type {!Object}
	         */
	        _this.dimensions_ = options.dimensions !== undefined ? options.dimensions : {};
	        /**
	         * @private
	         * @type {string}
	         */
	        _this.layer_ = options.layer;
	        /**
	         * @private
	         * @type {string}
	         */
	        _this.matrixSet_ = options.matrixSet;
	        /**
	         * @private
	         * @type {string}
	         */
	        _this.style_ = options.style;
	        // FIXME: should we guess this requestEncoding from options.url(s)
	        //        structure? that would mean KVP only if a template is not provided.
	        /**
	         * @private
	         * @type {import("./WMTSRequestEncoding.js").default}
	         */
	        _this.requestEncoding_ = requestEncoding;
	        _this.setKey(_this.getKeyForDimensions_());
	        if (urls && urls.length > 0) {
	            _this.tileUrlFunction = (0, _tileurlfunction.createFromTileUrlFunctions)(urls.map(createFromWMTSTemplate.bind(_this)));
	        }
	        return _this;
	    }
	    /**
	     * Set the URLs to use for requests.
	     * URLs may contain OCG conform URL Template Variables: {TileMatrix}, {TileRow}, {TileCol}.
	     * @override
	     */
	    WMTS.prototype.setUrls = function (urls) {
	        this.urls = urls;
	        var key = urls.join('\n');
	        this.setTileUrlFunction((0, _tileurlfunction.createFromTileUrlFunctions)(urls.map(createFromWMTSTemplate.bind(this))), key);
	    };
	    /**
	     * Get the dimensions, i.e. those passed to the constructor through the
	     * "dimensions" option, and possibly updated using the updateDimensions
	     * method.
	     * @return {!Object} Dimensions.
	     * @api
	     */
	    WMTS.prototype.getDimensions = function () {
	        return this.dimensions_;
	    };
	    /**
	     * Return the image format of the WMTS source.
	     * @return {string} Format.
	     * @api
	     */
	    WMTS.prototype.getFormat = function () {
	        return this.format_;
	    };
	    /**
	     * Return the layer of the WMTS source.
	     * @return {string} Layer.
	     * @api
	     */
	    WMTS.prototype.getLayer = function () {
	        return this.layer_;
	    };
	    /**
	     * Return the matrix set of the WMTS source.
	     * @return {string} MatrixSet.
	     * @api
	     */
	    WMTS.prototype.getMatrixSet = function () {
	        return this.matrixSet_;
	    };
	    /**
	     * Return the request encoding, either "KVP" or "REST".
	     * @return {import("./WMTSRequestEncoding.js").default} Request encoding.
	     * @api
	     */
	    WMTS.prototype.getRequestEncoding = function () {
	        return this.requestEncoding_;
	    };
	    /**
	     * Return the style of the WMTS source.
	     * @return {string} Style.
	     * @api
	     */
	    WMTS.prototype.getStyle = function () {
	        return this.style_;
	    };
	    /**
	     * Return the version of the WMTS source.
	     * @return {string} Version.
	     * @api
	     */
	    WMTS.prototype.getVersion = function () {
	        return this.version_;
	    };
	    /**
	     * @private
	     * @return {string} The key for the current dimensions.
	     */
	    WMTS.prototype.getKeyForDimensions_ = function () {
	        var i = 0;
	        var res = [];
	        for (var key in this.dimensions_) {
	            res[i++] = key + '-' + this.dimensions_[key];
	        }
	        return res.join('/');
	    };
	    /**
	     * Update the dimensions.
	     * @param {Object} dimensions Dimensions.
	     * @api
	     */
	    WMTS.prototype.updateDimensions = function (dimensions) {
	        (0, _obj.assign)(this.dimensions_, dimensions);
	        this.setKey(this.getKeyForDimensions_());
	    };
	    return WMTS;
	}(_TileImage2.default);
	exports.default = WMTS;
	/**
	 * Generate source options from a capabilities object.
	 * @param {Object} wmtsCap An object representing the capabilities document.
	 * @param {!Object} config Configuration properties for the layer.  Defaults for
	 *                  the layer will apply if not provided.
	 *
	 * Required config properties:
	 *  - layer - {string} The layer identifier.
	 *
	 * Optional config properties:
	 *  - matrixSet - {string} The matrix set identifier, required if there is
	 *       more than one matrix set in the layer capabilities.
	 *  - projection - {string} The desired CRS when no matrixSet is specified.
	 *       eg: "EPSG:3857". If the desired projection is not available,
	 *       an error is thrown.
	 *  - requestEncoding - {string} url encoding format for the layer. Default is
	 *       the first tile url format found in the GetCapabilities response.
	 *  - style - {string} The name of the style
	 *  - format - {string} Image format for the layer. Default is the first
	 *       format returned in the GetCapabilities response.
	 *  - crossOrigin - {string|null|undefined} Cross origin. Default is `undefined`.
	 * @return {?Options} WMTS source options object or `null` if the layer was not found.
	 * @api
	 */
	
	function optionsFromCapabilities(wmtsCap, config) {
	    var layers = wmtsCap['Contents']['Layer'];
	    var l = (0, _array.find)(layers, function (elt, index, array) {
	        return elt['Identifier'] == config['layer'];
	    });
	    if (l === null) {
	        return null;
	    }
	    var tileMatrixSets = wmtsCap['Contents']['TileMatrixSet'];
	    var idx;
	    if (l['TileMatrixSetLink'].length > 1) {
	        if ('projection' in config) {
	            idx = (0, _array.findIndex)(l['TileMatrixSetLink'], function (elt, index, array) {
	                var tileMatrixSet = (0, _array.find)(tileMatrixSets, function (el) {
	                    return el['Identifier'] == elt['TileMatrixSet'];
	                });
	                var supportedCRS = tileMatrixSet['SupportedCRS'];
	                var proj1 = (0, _proj.get)(supportedCRS.replace(/urn:ogc:def:crs:(\w+):(.*:)?(\w+)$/, '$1:$3')) || (0, _proj.get)(supportedCRS);
	                var proj2 = (0, _proj.get)(config['projection']);
	                if (proj1 && proj2) {
	                    return (0, _proj.equivalent)(proj1, proj2);
	                } else {
	                    return supportedCRS == config['projection'];
	                }
	            });
	        } else {
	            idx = (0, _array.findIndex)(l['TileMatrixSetLink'], function (elt, index, array) {
	                return elt['TileMatrixSet'] == config['matrixSet'];
	            });
	        }
	    } else {
	        idx = 0;
	    }
	    if (idx < 0) {
	        idx = 0;
	    }
	    var matrixSet = /** @type {string} */l['TileMatrixSetLink'][idx]['TileMatrixSet'];
	    var matrixLimits = /** @type {Array<Object>} */l['TileMatrixSetLink'][idx]['TileMatrixSetLimits'];
	    var format = /** @type {string} */l['Format'][0];
	    if ('format' in config) {
	        format = config['format'];
	    }
	    idx = (0, _array.findIndex)(l['Style'], function (elt, index, array) {
	        if ('style' in config) {
	            return elt['Title'] == config['style'];
	        } else {
	            return elt['isDefault'];
	        }
	    });
	    if (idx < 0) {
	        idx = 0;
	    }
	    var style = /** @type {string} */l['Style'][idx]['Identifier'];
	    var dimensions = {};
	    if ('Dimension' in l) {
	        l['Dimension'].forEach(function (elt, index, array) {
	            var key = elt['Identifier'];
	            var value = elt['Default'];
	            if (value === undefined) {
	                value = elt['Value'][0];
	            }
	            dimensions[key] = value;
	        });
	    }
	    var matrixSets = wmtsCap['Contents']['TileMatrixSet'];
	    var matrixSetObj = (0, _array.find)(matrixSets, function (elt, index, array) {
	        return elt['Identifier'] == matrixSet;
	    });
	    var projection;
	    var code = matrixSetObj['SupportedCRS'];
	    if (code) {
	        projection = (0, _proj.get)(code.replace(/urn:ogc:def:crs:(\w+):(.*:)?(\w+)$/, '$1:$3')) || (0, _proj.get)(code);
	    }
	    if ('projection' in config) {
	        var projConfig = (0, _proj.get)(config['projection']);
	        if (projConfig) {
	            if (!projection || (0, _proj.equivalent)(projConfig, projection)) {
	                projection = projConfig;
	            }
	        }
	    }
	    var wgs84BoundingBox = l['WGS84BoundingBox'];
	    var extent, wrapX;
	    if (wgs84BoundingBox !== undefined) {
	        var wgs84ProjectionExtent = (0, _proj.get)('EPSG:4326').getExtent();
	        wrapX = wgs84BoundingBox[0] == wgs84ProjectionExtent[0] && wgs84BoundingBox[2] == wgs84ProjectionExtent[2];
	        extent = (0, _proj.transformExtent)(wgs84BoundingBox, 'EPSG:4326', projection);
	        var projectionExtent = projection.getExtent();
	        if (projectionExtent) {
	            // If possible, do a sanity check on the extent - it should never be
	            // bigger than the validity extent of the projection of a matrix set.
	            if (!(0, _extent.containsExtent)(projectionExtent, extent)) {
	                extent = undefined;
	            }
	        }
	    }
	    var tileGrid = (0, _WMTS.createFromCapabilitiesMatrixSet)(matrixSetObj, extent, matrixLimits);
	    /** @type {!Array<string>} */
	    var urls = [];
	    var requestEncoding = config['requestEncoding'];
	    requestEncoding = requestEncoding !== undefined ? requestEncoding : '';
	    if ('OperationsMetadata' in wmtsCap && 'GetTile' in wmtsCap['OperationsMetadata']) {
	        var gets = wmtsCap['OperationsMetadata']['GetTile']['DCP']['HTTP']['Get'];
	        for (var i = 0, ii = gets.length; i < ii; ++i) {
	            if (gets[i]['Constraint']) {
	                var constraint = (0, _array.find)(gets[i]['Constraint'], function (element) {
	                    return element['name'] == 'GetEncoding';
	                });
	                var encodings = constraint['AllowedValues']['Value'];
	                if (requestEncoding === '') {
	                    // requestEncoding not provided, use the first encoding from the list
	                    requestEncoding = encodings[0];
	                }
	                if (requestEncoding === _WMTSRequestEncoding2.default.KVP) {
	                    if ((0, _array.includes)(encodings, _WMTSRequestEncoding2.default.KVP)) {
	                        urls.push( /** @type {string} */gets[i]['href']);
	                    }
	                } else {
	                    break;
	                }
	            } else if (gets[i]['href']) {
	                requestEncoding = _WMTSRequestEncoding2.default.KVP;
	                urls.push( /** @type {string} */gets[i]['href']);
	            }
	        }
	    }
	    if (urls.length === 0) {
	        requestEncoding = _WMTSRequestEncoding2.default.REST;
	        l['ResourceURL'].forEach(function (element) {
	            if (element['resourceType'] === 'tile') {
	                format = element['format'];
	                urls.push( /** @type {string} */element['template']);
	            }
	        });
	    }
	    return {
	        urls: urls,
	        layer: config['layer'],
	        matrixSet: matrixSet,
	        format: format,
	        projection: projection,
	        requestEncoding: requestEncoding,
	        tileGrid: tileGrid,
	        style: style,
	        dimensions: dimensions,
	        wrapX: wrapX,
	        crossOrigin: config['crossOrigin']
	    };
	}
	/**
	 * @param {string} template Template.
	 * @return {import("../Tile.js").UrlFunction} Tile URL function.
	 * @this {WMTS}
	 */
	function createFromWMTSTemplate(template) {
	    var requestEncoding = this.requestEncoding_;
	    // context property names are lower case to allow for a case insensitive
	    // replacement as some services use different naming conventions
	    var context = {
	        'layer': this.layer_,
	        'style': this.style_,
	        'tilematrixset': this.matrixSet_
	    };
	    if (requestEncoding == _WMTSRequestEncoding2.default.KVP) {
	        (0, _obj.assign)(context, {
	            'Service': 'WMTS',
	            'Request': 'GetTile',
	            'Version': this.version_,
	            'Format': this.format_
	        });
	    }
	    // TODO: we may want to create our own appendParams function so that params
	    // order conforms to wmts spec guidance, and so that we can avoid to escape
	    // special template params
	    template = requestEncoding == _WMTSRequestEncoding2.default.KVP ? (0, _uri.appendParams)(template, context) : template.replace(/\{(\w+?)\}/g, function (m, p) {
	        return p.toLowerCase() in context ? context[p.toLowerCase()] : m;
	    });
	    var tileGrid = /** @type {import("../tilegrid/WMTS.js").default} */this.tileGrid;
	    var dimensions = this.dimensions_;
	    return (
	        /**
	         * @param {import("../tilecoord.js").TileCoord} tileCoord Tile coordinate.
	         * @param {number} pixelRatio Pixel ratio.
	         * @param {import("../proj/Projection.js").default} projection Projection.
	         * @return {string|undefined} Tile URL.
	         */
	        function (tileCoord, pixelRatio, projection) {
	            if (!tileCoord) {
	                return undefined;
	            } else {
	                var localContext_1 = {
	                    'TileMatrix': tileGrid.getMatrixId(tileCoord[0]),
	                    'TileCol': tileCoord[1],
	                    'TileRow': tileCoord[2]
	                };
	                (0, _obj.assign)(localContext_1, dimensions);
	                var url = template;
	                if (requestEncoding == _WMTSRequestEncoding2.default.KVP) {
	                    url = (0, _uri.appendParams)(url, localContext_1);
	                } else {
	                    url = url.replace(/\{(\w+?)\}/g, function (m, p) {
	                        return localContext_1[p];
	                    });
	                }
	                return url;
	            }
	        }
	    );
	}
	//# sourceMappingURL=WMTS.js.map

/***/ }),
/* 650 */
/***/ (function(module, exports) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	/**
	 * @module ol/source/WMTSRequestEncoding
	 */
	/**
	 * Request encoding. One of 'KVP', 'REST'.
	 * @enum {string}
	 */
	exports.default = {
	  KVP: 'KVP',
	  REST: 'REST' // see spec §10
	};
	//# sourceMappingURL=WMTSRequestEncoding.js.map

/***/ }),
/* 651 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	
	var _TileImage = __webpack_require__(178);
	
	var _TileImage2 = _interopRequireDefault(_TileImage);
	
	var _tilegrid = __webpack_require__(185);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	/**
	 * @module ol/source/XYZ
	 */
	var __extends = undefined && undefined.__extends || function () {
	    var _extendStatics = function extendStatics(d, b) {
	        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	            d.__proto__ = b;
	        } || function (d, b) {
	            for (var p in b) {
	                if (b.hasOwnProperty(p)) d[p] = b[p];
	            }
	        };
	        return _extendStatics(d, b);
	    };
	    return function (d, b) {
	        _extendStatics(d, b);
	        function __() {
	            this.constructor = d;
	        }
	        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	    };
	}();
	
	/**
	 * @typedef {Object} Options
	 * @property {import("./Source.js").AttributionLike} [attributions] Attributions.
	 * @property {boolean} [attributionsCollapsible=true] Attributions are collapsible.
	 * @property {number} [cacheSize] Tile cache size. The default depends on the screen size. Will increase if too small.
	 * @property {null|string} [crossOrigin] The `crossOrigin` attribute for loaded images.  Note that
	 * you must provide a `crossOrigin` value if you want to access pixel data with the Canvas renderer.
	 * See https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_enabled_image for more detail.
	 * @property {boolean} [opaque=true] Whether the layer is opaque.
	 * @property {import("../proj.js").ProjectionLike} [projection='EPSG:3857'] Projection.
	 * @property {number} [reprojectionErrorThreshold=0.5] Maximum allowed reprojection error (in pixels).
	 * Higher values can increase reprojection performance, but decrease precision.
	 * @property {number} [maxZoom=18] Optional max zoom level.
	 * @property {number} [minZoom=0] Optional min zoom level.
	 * @property {import("../tilegrid/TileGrid.js").default} [tileGrid] Tile grid.
	 * @property {import("../Tile.js").LoadFunction} [tileLoadFunction] Optional function to load a tile given a URL. The default is
	 * ```js
	 * function(imageTile, src) {
	 *   imageTile.getImage().src = src;
	 * };
	 * ```
	 * @property {number} [tilePixelRatio=1] The pixel ratio used by the tile service.
	 * For example, if the tile service advertizes 256px by 256px tiles but actually sends 512px
	 * by 512px images (for retina/hidpi devices) then `tilePixelRatio`
	 * should be set to `2`.
	 * @property {number|import("../size.js").Size} [tileSize=[256, 256]] The tile size used by the tile service.
	 * @property {import("../Tile.js").UrlFunction} [tileUrlFunction] Optional function to get
	 * tile URL given a tile coordinate and the projection.
	 * Required if url or urls are not provided.
	 * @property {string} [url] URL template. Must include `{x}`, `{y}` or `{-y}`,
	 * and `{z}` placeholders. A `{?-?}` template pattern, for example `subdomain{a-f}.domain.com`,
	 * may be used instead of defining each one separately in the `urls` option.
	 * @property {Array<string>} [urls] An array of URL templates.
	 * @property {boolean} [wrapX=true] Whether to wrap the world horizontally.
	 * @property {number} [transition] Duration of the opacity transition for rendering.
	 * To disable the opacity transition, pass `transition: 0`.
	 * @property {number} [zDirection=0] Indicate which resolution should be used
	 * by a renderer if the view resolution does not match any resolution of the tile source.
	 * If 0, the nearest resolution will be used. If 1, the nearest lower resolution
	 * will be used. If -1, the nearest higher resolution will be used.
	 */
	/**
	 * @classdesc
	 * Layer source for tile data with URLs in a set XYZ format that are
	 * defined in a URL template. By default, this follows the widely-used
	 * Google grid where `x` 0 and `y` 0 are in the top left. Grids like
	 * TMS where `x` 0 and `y` 0 are in the bottom left can be used by
	 * using the `{-y}` placeholder in the URL template, so long as the
	 * source does not have a custom tile grid. In this case,
	 * {@link module:ol/source/TileImage} can be used with a `tileUrlFunction`
	 * such as:
	 *
	 *  tileUrlFunction: function(coordinate) {
	 *    return 'http://mapserver.com/' + coordinate[0] + '/' +
	 *        coordinate[1] + '/' + coordinate[2] + '.png';
	 *    }
	 *
	 * @api
	 */
	var XYZ = /** @class */function (_super) {
	    __extends(XYZ, _super);
	    /**
	     * @param {Options=} opt_options XYZ options.
	     */
	    function XYZ(opt_options) {
	        var _this = this;
	        var options = opt_options || {};
	        var projection = options.projection !== undefined ? options.projection : 'EPSG:3857';
	        var tileGrid = options.tileGrid !== undefined ? options.tileGrid : (0, _tilegrid.createXYZ)({
	            extent: (0, _tilegrid.extentFromProjection)(projection),
	            maxZoom: options.maxZoom,
	            minZoom: options.minZoom,
	            tileSize: options.tileSize
	        });
	        _this = _super.call(this, {
	            attributions: options.attributions,
	            cacheSize: options.cacheSize,
	            crossOrigin: options.crossOrigin,
	            opaque: options.opaque,
	            projection: projection,
	            reprojectionErrorThreshold: options.reprojectionErrorThreshold,
	            tileGrid: tileGrid,
	            tileLoadFunction: options.tileLoadFunction,
	            tilePixelRatio: options.tilePixelRatio,
	            tileUrlFunction: options.tileUrlFunction,
	            url: options.url,
	            urls: options.urls,
	            wrapX: options.wrapX !== undefined ? options.wrapX : true,
	            transition: options.transition,
	            attributionsCollapsible: options.attributionsCollapsible,
	            zDirection: options.zDirection
	        }) || this;
	        return _this;
	    }
	    return XYZ;
	}(_TileImage2.default);
	exports.default = XYZ;
	//# sourceMappingURL=XYZ.js.map

/***/ }),
/* 652 */
/***/ (function(module, exports) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	/**
	 * @module ol/source/common
	 */
	/**
	 * Default WMS version.
	 * @type {string}
	 */
	var DEFAULT_WMS_VERSION = exports.DEFAULT_WMS_VERSION = '1.3.0';
	//# sourceMappingURL=common.js.map

/***/ }),
/* 653 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	
	var _Circle = __webpack_require__(182);
	
	Object.defineProperty(exports, 'Circle', {
	  enumerable: true,
	  get: function get() {
	    return _interopRequireDefault(_Circle).default;
	  }
	});
	
	var _Fill = __webpack_require__(149);
	
	Object.defineProperty(exports, 'Fill', {
	  enumerable: true,
	  get: function get() {
	    return _interopRequireDefault(_Fill).default;
	  }
	});
	
	var _Icon = __webpack_require__(654);
	
	Object.defineProperty(exports, 'Icon', {
	  enumerable: true,
	  get: function get() {
	    return _interopRequireDefault(_Icon).default;
	  }
	});
	
	var _IconImage = __webpack_require__(302);
	
	Object.defineProperty(exports, 'IconImage', {
	  enumerable: true,
	  get: function get() {
	    return _interopRequireDefault(_IconImage).default;
	  }
	});
	
	var _Image = __webpack_require__(183);
	
	Object.defineProperty(exports, 'Image', {
	  enumerable: true,
	  get: function get() {
	    return _interopRequireDefault(_Image).default;
	  }
	});
	
	var _RegularShape = __webpack_require__(304);
	
	Object.defineProperty(exports, 'RegularShape', {
	  enumerable: true,
	  get: function get() {
	    return _interopRequireDefault(_RegularShape).default;
	  }
	});
	
	var _Stroke = __webpack_require__(184);
	
	Object.defineProperty(exports, 'Stroke', {
	  enumerable: true,
	  get: function get() {
	    return _interopRequireDefault(_Stroke).default;
	  }
	});
	
	var _Style = __webpack_require__(87);
	
	Object.defineProperty(exports, 'Style', {
	  enumerable: true,
	  get: function get() {
	    return _interopRequireDefault(_Style).default;
	  }
	});
	
	var _Text = __webpack_require__(656);
	
	Object.defineProperty(exports, 'Text', {
	  enumerable: true,
	  get: function get() {
	    return _interopRequireDefault(_Text).default;
	  }
	});

	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

/***/ }),
/* 654 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	    value: true
	});
	
	var _util = __webpack_require__(14);
	
	var _ImageState = __webpack_require__(100);
	
	var _ImageState2 = _interopRequireDefault(_ImageState);
	
	var _asserts = __webpack_require__(29);
	
	var _color = __webpack_require__(143);
	
	var _EventType = __webpack_require__(10);
	
	var _EventType2 = _interopRequireDefault(_EventType);
	
	var _IconAnchorUnits = __webpack_require__(301);
	
	var _IconAnchorUnits2 = _interopRequireDefault(_IconAnchorUnits);
	
	var _IconImage = __webpack_require__(302);
	
	var _IconOrigin = __webpack_require__(655);
	
	var _IconOrigin2 = _interopRequireDefault(_IconOrigin);
	
	var _Image = __webpack_require__(183);
	
	var _Image2 = _interopRequireDefault(_Image);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var __extends = undefined && undefined.__extends || function () {
	    var _extendStatics = function extendStatics(d, b) {
	        _extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (d, b) {
	            d.__proto__ = b;
	        } || function (d, b) {
	            for (var p in b) {
	                if (b.hasOwnProperty(p)) d[p] = b[p];
	            }
	        };
	        return _extendStatics(d, b);
	    };
	    return function (d, b) {
	        _extendStatics(d, b);
	        function __() {
	            this.constructor = d;
	        }
	        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
	    };
	}();
	/**
	 * @module ol/style/Icon
	 */
	
	/**
	 * @typedef {Object} Options
	 * @property {Array<number>} [anchor=[0.5, 0.5]] Anchor. Default value is the icon center.
	 * @property {import("./IconOrigin.js").default} [anchorOrigin='top-left'] Origin of the anchor: `bottom-left`, `bottom-right`,
	 * `top-left` or `top-right`.
	 * @property {import("./IconAnchorUnits.js").default} [anchorXUnits='fraction'] Units in which the anchor x value is
	 * specified. A value of `'fraction'` indicates the x value is a fraction of the icon. A value of `'pixels'` indicates
	 * the x value in pixels.
	 * @property {import("./IconAnchorUnits.js").default} [anchorYUnits='fraction'] Units in which the anchor y value is
	 * specified. A value of `'fraction'` indicates the y value is a fraction of the icon. A value of `'pixels'` indicates
	 * the y value in pixels.
	 * @property {import("../color.js").Color|string} [color] Color to tint the icon. If not specified,
	 * the icon will be left as is.
	 * @property {null|string} [crossOrigin] The `crossOrigin` attribute for loaded images. Note that you must provide a
	 * `crossOrigin` value if you want to access pixel data with the Canvas renderer.
	 * See https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_enabled_image for more detail.
	 * @property {HTMLImageElement|HTMLCanvasElement} [img] Image object for the icon. If the `src` option is not provided then the
	 * provided image must already be loaded. And in that case, it is required
	 * to provide the size of the image, with the `imgSize` option.
	 * @property {Array<number>} [offset=[0, 0]] Offset, which, together with the size and the offset origin, define the
	 * sub-rectangle to use from the original icon image.
	 * @property {import("./IconOrigin.js").default} [offsetOrigin='top-left'] Origin of the offset: `bottom-left`, `bottom-right`,
	 * `top-left` or `top-right`.
	 * @property {number} [opacity=1] Opacity of the icon.
	 * @property {number} [scale=1] Scale.
	 * @property {boolean} [rotateWithView=false] Whether to rotate the icon with the view.
	 * @property {number} [rotation=0] Rotation in radians (positive rotation clockwise).
	 * @property {import("../size.js").Size} [size] Icon size in pixel. Can be used together with `offset` to define the
	 * sub-rectangle to use from the origin (sprite) icon image.
	 * @property {import("../size.js").Size} [imgSize] Image size in pixels. Only required if `img` is set and `src` is not, and
	 * for SVG images in Internet Explorer 11. The provided `imgSize` needs to match the actual size of the image.
	 * @property {string} [src] Image source URI.
	 */
	/**
	 * @classdesc
	 * Set icon style for vector features.
	 * @api
	 */
	var Icon = /** @class */function (_super) {
	    __extends(Icon, _super);
	    /**
	     * @param {Options=} opt_options Options.
	     */
	    function Icon(opt_options) {
	        var _this = this;
	        var options = opt_options || {};
	        /**
	         * @type {number}
	         */
	        var opacity = options.opacity !== undefined ? options.opacity : 1;
	        /**
	         * @type {number}
	         */
	        var rotation = options.rotation !== undefined ? options.rotation : 0;
	        /**
	         * @type {number}
	         */
	        var scale = options.scale !== undefined ? options.scale : 1;
	        /**
	         * @type {boolean}
	         */
	        var rotateWithView = options.rotateWithView !== undefined ? options.rotateWithView : false;
	        _this = _super.call(this, {
	            opacity: opacity,
	            rotation: rotation,
	            scale: scale,
	            rotateWithView: rotateWithView
	        }) || this;
	        /**
	         * @private
	         * @type {Array<number>}
	         */
	        _this.anchor_ = options.anchor !== undefined ? options.anchor : [0.5, 0.5];
	        /**
	         * @private
	         * @type {Array<number>}
	         */
	        _this.normalizedAnchor_ = null;
	        /**
	         * @private
	         * @type {import("./IconOrigin.js").default}
	         */
	        _this.anchorOrigin_ = options.anchorOrigin !== undefined ? options.anchorOrigin : _IconOrigin2.default.TOP_LEFT;
	        /**
	         * @private
	         * @type {import("./IconAnchorUnits.js").default}
	         */
	        _this.anchorXUnits_ = options.anchorXUnits !== undefined ? options.anchorXUnits : _IconAnchorUnits2.default.FRACTION;
	        /**
	         * @private
	         * @type {import("./IconAnchorUnits.js").default}
	         */
	        _this.anchorYUnits_ = options.anchorYUnits !== undefined ? options.anchorYUnits : _IconAnchorUnits2.default.FRACTION;
	        /**
	         * @private
	         * @type {?string}
	         */
	        _this.crossOrigin_ = options.crossOrigin !== undefined ? options.crossOrigin : null;
	        /**
	         * @type {HTMLImageElement|HTMLCanvasElement}
	         */
	        var image = options.img !== undefined ? options.img : null;
	        /**
	         * @type {import("../size.js").Size}
	         */
	        var imgSize = options.imgSize !== undefined ? options.imgSize : null;
	        /**
	         * @type {string|undefined}
	         */
	        var src = options.src;
	        (0, _asserts.assert)(!(src !== undefined && image), 4); // `image` and `src` cannot be provided at the same time
	        (0, _asserts.assert)(!image || image && imgSize, 5); // `imgSize` must be set when `image` is provided
	        if ((src === undefined || src.length === 0) && image) {
	            src = /** @type {HTMLImageElement} */image.src || (0, _util.getUid)(image);
	        }
	        (0, _asserts.assert)(src !== undefined && src.length > 0, 6); // A defined and non-empty `src` or `image` must be provided
	        /**
	         * @type {import("../ImageState.js").default}
	         */
	        var imageState = options.src !== undefined ? _ImageState2.default.IDLE : _ImageState2.default.LOADED;
	        /**
	         * @private
	         * @type {import("../color.js").Color}
	         */
	        _this.color_ = options.color !== undefined ? (0, _color.asArray)(options.color) : null;
	        /**
	         * @private
	         * @type {import("./IconImage.js").default}
	         */
	        _this.iconImage_ = (0, _IconImage.get)(image, /** @type {string} */src, imgSize, _this.crossOrigin_, imageState, _this.color_);
	        /**
	         * @private
	         * @type {Array<number>}
	         */
	        _this.offset_ = options.offset !== undefined ? options.offset : [0, 0];
	        /**
	         * @private
	         * @type {import("./IconOrigin.js").default}
	         */
	        _this.offsetOrigin_ = options.offsetOrigin !== undefined ? options.offsetOrigin : _IconOrigin2.default.TOP_LEFT;
	        /**
	         * @private
	         * @type {Array<number>}
	         */
	        _this.origin_ = null;
	        /**
	         * @private
	         * @type {import("../size.js").Size}
	         */
	        _this.size_ = options.size !== undefined ? options.size : null;
	        return _this;
	    }
	    /**
	     * Clones the style. The underlying Image/HTMLCanvasElement is not cloned.
	     * @return {Icon} The cloned style.
	     * @api
	     */
	    Icon.prototype.clone = function () {
	        return new Icon({
	            anchor: this.anchor_.slice(),
	            anchorOrigin: this.anchorOrigin_,
	            anchorXUnits: this.anchorXUnits_,
	            anchorYUnits: this.anchorYUnits_,
	            crossOrigin: this.crossOrigin_,
	            color: this.color_ && this.color_.slice ? this.color_.slice() : this.color_ || undefined,
	            src: this.getSrc(),
	            offset: this.offset_.slice(),
	            offsetOrigin: this.offsetOrigin_,
	            size: this.size_ !== null ? this.size_.slice() : undefined,
	            opacity: this.getOpacity(),
	            scale: this.getScale(),
	            rotation: this.getRotation(),
	            rotateWithView: this.getRotateWithView()
	        });
	    };
	    /**
	     * @inheritDoc
	     * @api
	     */
	    Icon.prototype.getAnchor = function () {
	        if (this.normalizedAnchor_) {
	            return this.normalizedAnchor_;
	        }
	        var anchor = this.anchor_;
	        var size = this.getSize();
	        if (this.anchorXUnits_ == _IconAnchorUnits2.default.FRACTION || this.anchorYUnits_ == _IconAnchorUnits2.default.FRACTION) {
	            if (!size) {
	                return null;
	            }
	            anchor = this.anchor_.slice();
	            if (this.anchorXUnits_ == _IconAnchorUnits2.default.FRACTION) {
	                anchor[0] *= size[0];
	            }
	            if (this.anchorYUnits_ == _IconAnchorUnits2.default.FRACTION) {
	                anchor[1] *= size[1];
	            }
	        }
	        if (this.anchorOrigin_ != _IconOrigin2.default.TOP_LEFT) {
	            if (!size) {
	                return null;
	            }
	            if (anchor === this.anchor_) {
	                anchor = this.anchor_.slice();
	            }
	            if (this.anchorOrigin_ == _IconOrigin2.default.TOP_RIGHT || this.anchorOrigin_ == _IconOrigin2.default.BOTTOM_RIGHT) {
	                anchor[0] = -anchor[0] + size[0];
	            }
	            if (this.anchorOrigin_ == _IconOrigin2.default.BOTTOM_LEFT || this.anchorOrigin_ == _IconOrigin2.default.BOTTOM_RIGHT) {
	                anchor[1] = -anchor[1] + size[1];
	            }
	        }
	        this.normalizedAnchor_ = anchor;
	        return this.normalizedAnchor_;
	    };
	    /**
	     * Set the anchor point. The anchor determines the center point for the
	     * symbolizer.
	     *
	     * @param {Array<number>} anchor Anchor.
	     * @api
	     */
	    Icon.prototype.setAnchor = function (anchor) {
	        this.anchor_ = anchor;
	        this.normalizedAnchor_ = null;
	    };
	    /**
	     * Get the icon color.
	     * @return {import("../color.js").Color} Color.
	     * @api
	     */
	    Icon.prototype.getColor = function () {
	        return this.color_;
	    };
	    /**
	     * Get the image icon.
	     * @param {number} pixelRatio Pixel ratio.
	     * @return {HTMLImageElement|HTMLCanvasElement} Image or Canvas element.
	     * @override
	     * @api
	     */
	    Icon.prototype.getImage = function (pixelRatio) {
	        return this.iconImage_.getImage(pixelRatio);
	    };
	    /**
	     * @override
	     */
	    Icon.prototype.getImageSize = function () {
	        return this.iconImage_.getSize();
	    };
	    /**
	     * @override
	     */
	    Icon.prototype.getHitDetectionImageSize = function () {
	        return this.getImageSize();
	    };
	    /**
	     * @override
	     */
	    Icon.prototype.getImageState = function () {
	        return this.iconImage_.getImageState();
	    };
	    /**
	     * @override
	     */
	    Icon.prototype.getHitDetectionImage = function (pixelRatio) {
	        return this.iconImage_.getHitDetectionImage(pixelRatio);
	    };
	    /**
	     * @inheritDoc
	     * @api
	     */
	    Icon.prototype.getOrigin = function () {
	        if (this.origin_) {
	            return this.origin_;
	        }
	        var offset = this.offset_;
	        if (this.offsetOrigin_ != _IconOrigin2.default.TOP_LEFT) {
	            var size = this.getSize();
	            var iconImageSize = this.iconImage_.getSize();
	            if (!size || !iconImageSize) {
	                return null;
	            }
	            offset = offset.slice();
	            if (this.offsetOrigin_ == _IconOrigin2.default.TOP_RIGHT || this.offsetOrigin_ == _IconOrigin2.default.BOTTOM_RIGHT) {
	                offset[0] = iconImageSize[0] - size[0] - offset[0];
	            }
	            if (this.offsetOrigin_ == _IconOrigin2.default.BOTTOM_LEFT || this.offsetOrigin_ == _IconOrigin2.default.BOTTOM_RIGHT) {
	                offset[1] = iconImageSize[1] - size[1] - offset[1];
	            }
	        }
	        this.origin_ = offset;
	        return this.origin_;
	    };
	    /**
	     * Get the image URL.
	     * @return {string|undefined} Image src.
	     * @api
	     */
	    Icon.prototype.getSrc = function () {
	        return this.iconImage_.getSrc();
	    };
	    /**
	     * @inheritDoc
	     * @api
	     */
	    Icon.prototype.getSize = function () {
	        return !this.size_ ? this.iconImage_.getSize() : this.size_;
	    };
	    /**
	     * @override
	     */
	    Icon.prototype.listenImageChange = function (listener) {
	        this.iconImage_.addEventListener(_EventType2.default.CHANGE, listener);
	    };
	    /**
	     * Load not yet loaded URI.
	     * When rendering a feature with an icon style, the vector renderer will
	     * automatically call this method. However, you might want to call this
	     * method yourself for preloading or other purposes.
	     * @override
	     * @api
	     */
	    Icon.prototype.load = function () {
	        this.iconImage_.load();
	    };
	    /**
	     * @override
	     */
	    Icon.prototype.unlistenImageChange = function (listener) {
	        this.iconImage_.removeEventListener(_EventType2.default.CHANGE, listener);
	    };
	    return Icon;
	}(_Image2.default);
	exports.default = Icon;
	//# sourceMappingURL=Icon.js.map

/***/ }),
/* 655 */
/***/ (function(module, exports) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	/**
	 * @module ol/style/IconOrigin
	 */
	/**
	 * Icon origin. One of 'bottom-left', 'bottom-right', 'top-left', 'top-right'.
	 * @enum {string}
	 */
	exports.default = {
	  BOTTOM_LEFT: 'bottom-left',
	  BOTTOM_RIGHT: 'bottom-right',
	  TOP_LEFT: 'top-left',
	  TOP_RIGHT: 'top-right'
	};
	//# sourceMappingURL=IconOrigin.js.map

/***/ }),
/* 656 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	
	var _Fill = __webpack_require__(149);
	
	var _Fill2 = _interopRequireDefault(_Fill);
	
	var _TextPlacement = __webpack_require__(305);
	
	var _TextPlacement2 = _interopRequireDefault(_TextPlacement);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	/**
	 * The default fill color to use if no fill was set at construction time; a
	 * blackish `#333`.
	 *
	 * @const {string}
	 */
	/**
	 * @module ol/style/Text
	 */
	var DEFAULT_FILL_COLOR = '#333';
	/**
	 * @typedef {Object} Options
	 * @property {string} [font] Font style as CSS 'font' value, see:
	 * https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/font. Default is '10px sans-serif'
	 * @property {number} [maxAngle=Math.PI/4] When `placement` is set to `'line'`, allow a maximum angle between adjacent characters.
	 * The expected value is in radians, and the default is 45° (`Math.PI / 4`).
	 * @property {number} [offsetX=0] Horizontal text offset in pixels. A positive will shift the text right.
	 * @property {number} [offsetY=0] Vertical text offset in pixels. A positive will shift the text down.
	 * @property {boolean} [overflow=false] For polygon labels or when `placement` is set to `'line'`, allow text to exceed
	 * the width of the polygon at the label position or the length of the path that it follows.
	 * @property {import("./TextPlacement.js").default|string} [placement='point'] Text placement.
	 * @property {number} [scale] Scale.
	 * @property {boolean} [rotateWithView=false] Whether to rotate the text with the view.
	 * @property {number} [rotation=0] Rotation in radians (positive rotation clockwise).
	 * @property {string} [text] Text content.
	 * @property {string} [textAlign] Text alignment. Possible values: 'left', 'right', 'center', 'end' or 'start'.
	 * Default is 'center' for `placement: 'point'`. For `placement: 'line'`, the default is to let the renderer choose a
	 * placement where `maxAngle` is not exceeded.
	 * @property {string} [textBaseline='middle'] Text base line. Possible values: 'bottom', 'top', 'middle', 'alphabetic',
	 * 'hanging', 'ideographic'.
	 * @property {import("./Fill.js").default} [fill] Fill style. If none is provided, we'll use a dark fill-style (#333).
	 * @property {import("./Stroke.js").default} [stroke] Stroke style.
	 * @property {import("./Fill.js").default} [backgroundFill] Fill style for the text background when `placement` is
	 * `'point'`. Default is no fill.
	 * @property {import("./Stroke.js").default} [backgroundStroke] Stroke style for the text background  when `placement`
	 * is `'point'`. Default is no stroke.
	 * @property {Array<number>} [padding=[0, 0, 0, 0]] Padding in pixels around the text for decluttering and background. The order of
	 * values in the array is `[top, right, bottom, left]`.
	 */
	/**
	 * @classdesc
	 * Set text style for vector features.
	 * @api
	 */
	var Text = /** @class */function () {
	  /**
	   * @param {Options=} opt_options Options.
	   */
	  function Text(opt_options) {
	    var options = opt_options || {};
	    /**
	     * @private
	     * @type {string|undefined}
	     */
	    this.font_ = options.font;
	    /**
	     * @private
	     * @type {number|undefined}
	     */
	    this.rotation_ = options.rotation;
	    /**
	     * @private
	     * @type {boolean|undefined}
	     */
	    this.rotateWithView_ = options.rotateWithView;
	    /**
	     * @private
	     * @type {number|undefined}
	     */
	    this.scale_ = options.scale;
	    /**
	     * @private
	     * @type {string|undefined}
	     */
	    this.text_ = options.text;
	    /**
	     * @private
	     * @type {string|undefined}
	     */
	    this.textAlign_ = options.textAlign;
	    /**
	     * @private
	     * @type {string|undefined}
	     */
	    this.textBaseline_ = options.textBaseline;
	    /**
	     * @private
	     * @type {import("./Fill.js").default}
	     */
	    this.fill_ = options.fill !== undefined ? options.fill : new _Fill2.default({ color: DEFAULT_FILL_COLOR });
	    /**
	     * @private
	     * @type {number}
	     */
	    this.maxAngle_ = options.maxAngle !== undefined ? options.maxAngle : Math.PI / 4;
	    /**
	     * @private
	     * @type {import("./TextPlacement.js").default|string}
	     */
	    this.placement_ = options.placement !== undefined ? options.placement : _TextPlacement2.default.POINT;
	    /**
	     * @private
	     * @type {boolean}
	     */
	    this.overflow_ = !!options.overflow;
	    /**
	     * @private
	     * @type {import("./Stroke.js").default}
	     */
	    this.stroke_ = options.stroke !== undefined ? options.stroke : null;
	    /**
	     * @private
	     * @type {number}
	     */
	    this.offsetX_ = options.offsetX !== undefined ? options.offsetX : 0;
	    /**
	     * @private
	     * @type {number}
	     */
	    this.offsetY_ = options.offsetY !== undefined ? options.offsetY : 0;
	    /**
	     * @private
	     * @type {import("./Fill.js").default}
	     */
	    this.backgroundFill_ = options.backgroundFill ? options.backgroundFill : null;
	    /**
	     * @private
	     * @type {import("./Stroke.js").default}
	     */
	    this.backgroundStroke_ = options.backgroundStroke ? options.backgroundStroke : null;
	    /**
	     * @private
	     * @type {Array<number>}
	     */
	    this.padding_ = options.padding === undefined ? null : options.padding;
	  }
	  /**
	   * Clones the style.
	   * @return {Text} The cloned style.
	   * @api
	   */
	  Text.prototype.clone = function () {
	    return new Text({
	      font: this.getFont(),
	      placement: this.getPlacement(),
	      maxAngle: this.getMaxAngle(),
	      overflow: this.getOverflow(),
	      rotation: this.getRotation(),
	      rotateWithView: this.getRotateWithView(),
	      scale: this.getScale(),
	      text: this.getText(),
	      textAlign: this.getTextAlign(),
	      textBaseline: this.getTextBaseline(),
	      fill: this.getFill() ? this.getFill().clone() : undefined,
	      stroke: this.getStroke() ? this.getStroke().clone() : undefined,
	      offsetX: this.getOffsetX(),
	      offsetY: this.getOffsetY(),
	      backgroundFill: this.getBackgroundFill() ? this.getBackgroundFill().clone() : undefined,
	      backgroundStroke: this.getBackgroundStroke() ? this.getBackgroundStroke().clone() : undefined,
	      padding: this.getPadding()
	    });
	  };
	  /**
	   * Get the `overflow` configuration.
	   * @return {boolean} Let text overflow the length of the path they follow.
	   * @api
	   */
	  Text.prototype.getOverflow = function () {
	    return this.overflow_;
	  };
	  /**
	   * Get the font name.
	   * @return {string|undefined} Font.
	   * @api
	   */
	  Text.prototype.getFont = function () {
	    return this.font_;
	  };
	  /**
	   * Get the maximum angle between adjacent characters.
	   * @return {number} Angle in radians.
	   * @api
	   */
	  Text.prototype.getMaxAngle = function () {
	    return this.maxAngle_;
	  };
	  /**
	   * Get the label placement.
	   * @return {import("./TextPlacement.js").default|string} Text placement.
	   * @api
	   */
	  Text.prototype.getPlacement = function () {
	    return this.placement_;
	  };
	  /**
	   * Get the x-offset for the text.
	   * @return {number} Horizontal text offset.
	   * @api
	   */
	  Text.prototype.getOffsetX = function () {
	    return this.offsetX_;
	  };
	  /**
	   * Get the y-offset for the text.
	   * @return {number} Vertical text offset.
	   * @api
	   */
	  Text.prototype.getOffsetY = function () {
	    return this.offsetY_;
	  };
	  /**
	   * Get the fill style for the text.
	   * @return {import("./Fill.js").default} Fill style.
	   * @api
	   */
	  Text.prototype.getFill = function () {
	    return this.fill_;
	  };
	  /**
	   * Determine whether the text rotates with the map.
	   * @return {boolean|undefined} Rotate with map.
	   * @api
	   */
	  Text.prototype.getRotateWithView = function () {
	    return this.rotateWithView_;
	  };
	  /**
	   * Get the text rotation.
	   * @return {number|undefined} Rotation.
	   * @api
	   */
	  Text.prototype.getRotation = function () {
	    return this.rotation_;
	  };
	  /**
	   * Get the text scale.
	   * @return {number|undefined} Scale.
	   * @api
	   */
	  Text.prototype.getScale = function () {
	    return this.scale_;
	  };
	  /**
	   * Get the stroke style for the text.
	   * @return {import("./Stroke.js").default} Stroke style.
	   * @api
	   */
	  Text.prototype.getStroke = function () {
	    return this.stroke_;
	  };
	  /**
	   * Get the text to be rendered.
	   * @return {string|undefined} Text.
	   * @api
	   */
	  Text.prototype.getText = function () {
	    return this.text_;
	  };
	  /**
	   * Get the text alignment.
	   * @return {string|undefined} Text align.
	   * @api
	   */
	  Text.prototype.getTextAlign = function () {
	    return this.textAlign_;
	  };
	  /**
	   * Get the text baseline.
	   * @return {string|undefined} Text baseline.
	   * @api
	   */
	  Text.prototype.getTextBaseline = function () {
	    return this.textBaseline_;
	  };
	  /**
	   * Get the background fill style for the text.
	   * @return {import("./Fill.js").default} Fill style.
	   * @api
	   */
	  Text.prototype.getBackgroundFill = function () {
	    return this.backgroundFill_;
	  };
	  /**
	   * Get the background stroke style for the text.
	   * @return {import("./Stroke.js").default} Stroke style.
	   * @api
	   */
	  Text.prototype.getBackgroundStroke = function () {
	    return this.backgroundStroke_;
	  };
	  /**
	   * Get the padding for the text.
	   * @return {Array<number>} Padding.
	   * @api
	   */
	  Text.prototype.getPadding = function () {
	    return this.padding_;
	  };
	  /**
	   * Set the `overflow` property.
	   *
	   * @param {boolean} overflow Let text overflow the path that it follows.
	   * @api
	   */
	  Text.prototype.setOverflow = function (overflow) {
	    this.overflow_ = overflow;
	  };
	  /**
	   * Set the font.
	   *
	   * @param {string|undefined} font Font.
	   * @api
	   */
	  Text.prototype.setFont = function (font) {
	    this.font_ = font;
	  };
	  /**
	   * Set the maximum angle between adjacent characters.
	   *
	   * @param {number} maxAngle Angle in radians.
	   * @api
	   */
	  Text.prototype.setMaxAngle = function (maxAngle) {
	    this.maxAngle_ = maxAngle;
	  };
	  /**
	   * Set the x offset.
	   *
	   * @param {number} offsetX Horizontal text offset.
	   * @api
	   */
	  Text.prototype.setOffsetX = function (offsetX) {
	    this.offsetX_ = offsetX;
	  };
	  /**
	   * Set the y offset.
	   *
	   * @param {number} offsetY Vertical text offset.
	   * @api
	   */
	  Text.prototype.setOffsetY = function (offsetY) {
	    this.offsetY_ = offsetY;
	  };
	  /**
	   * Set the text placement.
	   *
	   * @param {import("./TextPlacement.js").default|string} placement Placement.
	   * @api
	   */
	  Text.prototype.setPlacement = function (placement) {
	    this.placement_ = placement;
	  };
	  /**
	   * Set whether to rotate the text with the view.
	   *
	   * @param {boolean} rotateWithView Rotate with map.
	   * @api
	   */
	  Text.prototype.setRotateWithView = function (rotateWithView) {
	    this.rotateWithView_ = rotateWithView;
	  };
	  /**
	   * Set the fill.
	   *
	   * @param {import("./Fill.js").default} fill Fill style.
	   * @api
	   */
	  Text.prototype.setFill = function (fill) {
	    this.fill_ = fill;
	  };
	  /**
	   * Set the rotation.
	   *
	   * @param {number|undefined} rotation Rotation.
	   * @api
	   */
	  Text.prototype.setRotation = function (rotation) {
	    this.rotation_ = rotation;
	  };
	  /**
	   * Set the scale.
	   *
	   * @param {number|undefined} scale Scale.
	   * @api
	   */
	  Text.prototype.setScale = function (scale) {
	    this.scale_ = scale;
	  };
	  /**
	   * Set the stroke.
	   *
	   * @param {import("./Stroke.js").default} stroke Stroke style.
	   * @api
	   */
	  Text.prototype.setStroke = function (stroke) {
	    this.stroke_ = stroke;
	  };
	  /**
	   * Set the text.
	   *
	   * @param {string|undefined} text Text.
	   * @api
	   */
	  Text.prototype.setText = function (text) {
	    this.text_ = text;
	  };
	  /**
	   * Set the text alignment.
	   *
	   * @param {string|undefined} textAlign Text align.
	   * @api
	   */
	  Text.prototype.setTextAlign = function (textAlign) {
	    this.textAlign_ = textAlign;
	  };
	  /**
	   * Set the text baseline.
	   *
	   * @param {string|undefined} textBaseline Text baseline.
	   * @api
	   */
	  Text.prototype.setTextBaseline = function (textBaseline) {
	    this.textBaseline_ = textBaseline;
	  };
	  /**
	   * Set the background fill.
	   *
	   * @param {import("./Fill.js").default} fill Fill style.
	   * @api
	   */
	  Text.prototype.setBackgroundFill = function (fill) {
	    this.backgroundFill_ = fill;
	  };
	  /**
	   * Set the background stroke.
	   *
	   * @param {import("./Stroke.js").default} stroke Stroke style.
	   * @api
	   */
	  Text.prototype.setBackgroundStroke = function (stroke) {
	    this.backgroundStroke_ = stroke;
	  };
	  /**
	   * Set the padding (`[top, right, bottom, left]`).
	   *
	   * @param {!Array<number>} padding Padding.
	   * @api
	   */
	  Text.prototype.setPadding = function (padding) {
	    this.padding_ = padding;
	  };
	  return Text;
	}();
	exports.default = Text;
	//# sourceMappingURL=Text.js.map

/***/ }),
/* 657 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	exports.OpenSearchDescription = undefined;
	
	var _createClass = function () {
	  function defineProperties(target, props) {
	    for (var i = 0; i < props.length; i++) {
	      var descriptor = props[i];descriptor.enumerable = descriptor.enumerable || false;descriptor.configurable = true;if ("value" in descriptor) descriptor.writable = true;Object.defineProperty(target, descriptor.key, descriptor);
	    }
	  }return function (Constructor, protoProps, staticProps) {
	    if (protoProps) defineProperties(Constructor.prototype, protoProps);if (staticProps) defineProperties(Constructor, staticProps);return Constructor;
	  };
	}();
	
	var _url = __webpack_require__(666);
	
	var _utils = __webpack_require__(49);
	
	function _classCallCheck(instance, Constructor) {
	  if (!(instance instanceof Constructor)) {
	    throw new TypeError("Cannot call a class as a function");
	  }
	}
	
	/**
	 * Class to parse the OpenSearchDescription XML document and get the saerch URLs
	 */
	var OpenSearchDescription = exports.OpenSearchDescription = function () {
	  /**
	   * Create an OpenSearchDescription object
	   * @param {object} values The object containing the parsed description
	   * @param {string} [values.shortName] The short name of the OpenSearch service
	   * @param {string} [values.description] The description of the service
	   * @param {string} [values.tags] The associated tags of the service
	   * @param {string} [values.contact] The contact information of the service
	   * @param {OpenSearchUrl[]} [values.urls] The parsed URLs of the service
	   * @param {string} [values.longName] The long name of the service
	   * @param {object[]} [values.images] The associated images of the service
	   * @param {object[]} [values.queries] Prepared queries for the service
	   * @param {string} [values.developer] The developer information of the service
	   * @param {string} [values.attribution] The attribution for the service
	   * @param {string} [values.syndicationRight] Syndication rights for the service
	   * @param {string} [values.adultContent] Information about the adult content of the service
	   * @param {string} [values.language] The language settings for the service
	   * @param {string} [values.outputEncoding] The output encoding
	   * @param {string} [values.inputEncoding] The input encoding
	   */
	  function OpenSearchDescription(values) {
	    _classCallCheck(this, OpenSearchDescription);
	
	    this.shortName = values.shortName;
	    this.description = values.description;
	    this.tags = values.tags;
	    this.contact = values.contact;
	    this.urls = values.urls;
	    this.longName = values.longName;
	    this.images = values.images;
	    this.queries = values.queries;
	    this.developer = values.developer;
	    this.attribution = values.attribution;
	    this.syndicationRight = values.syndicationRight;
	    this.adultContent = values.adultContent;
	    this.language = values.language;
	    this.outputEncoding = values.outputEncoding;
	    this.inputEncoding = values.inputEncoding;
	  }
	
	  /**
	   * Get the {@link OpenSearchUrl} for the given parameters, mime type and HTTP
	   * method. Return the first matching URL or null.
	   * @param {object} [parameters=null] An object containing search parameters
	   * @param {string} [type=null] The mime-type for the URL
	   * @param {string} [method='GET'] The preferred HTTP method of the URL
	   * @returns {OpenSearchUrl|null}
	   */
	
	  _createClass(OpenSearchDescription, [{
	    key: 'getUrl',
	    value: function getUrl() {
	      var urls = this.getUrls.apply(this, arguments);
	      if (urls.length) {
	        return urls[0];
	      }
	      return null;
	    }
	
	    /**
	     * Get an array of {@link OpenSearchUrl} for the given parameters, mime type and HTTP
	     * method.
	     * @param {object} [parameters=null] An object containing search parameters
	     * @param {string|Array} [type=null] The mime-type for the URL
	     * @param {string|Array} [method=null] The preferred HTTP method of the URL
	     * @returns {OpenSearchUrl[]}
	     */
	
	  }, {
	    key: 'getUrls',
	    value: function getUrls() {
	      var parameters = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
	      var type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
	      var method = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
	
	      var urls = this.urls.filter(function (url) {
	        return (0, _utils.find)(url.relations, function (rel) {
	          return rel === 'results';
	        });
	      });
	
	      if (type) {
	        urls = urls.filter(function (url) {
	          return Array.isArray(type) ? type.indexOf(url.type) > -1 : url.type === type;
	        });
	      }
	      if (method) {
	        urls = urls.filter(function (url) {
	          return Array.isArray(method) ? method.indexOf(url.method) > -1 : url.method === method;
	        });
	      }
	
	      if (parameters) {
	        return urls.filter(function (url) {
	          return url.isCompatible(parameters);
	        });
	      }
	      return urls;
	    }
	
	    /**
	     * Parse an OpenSearch Description XML Document.
	     * @param {string} xml The XML String to parse.
	     * @returns {OpenSearchDescription} The parsed description document
	     */
	
	  }, {
	    key: 'serialize',
	
	    /**
	     * Serialize the OpenSearch description to a simple object.
	     * @returns {object} The serialized description
	     */
	    value: function serialize() {
	      return {
	        shortName: this.shortName,
	        description: this.description,
	        tags: this.tags,
	        contact: this.contact,
	        urls: this.urls.map(function (url) {
	          return url.serialize();
	        }),
	        longName: this.longName,
	        images: this.images,
	        queries: this.queries,
	        developer: this.developer,
	        attribution: this.attribution,
	        syndicationRight: this.syndicationRight,
	        adultContent: this.adultContent,
	        language: this.language,
	        outputEncoding: this.outputEncoding,
	        inputEncoding: this.inputEncoding
	      };
	    }
	
	    /**
	     * Deserialize an OpenSearch description from an object.
	     * @param {object} values The serialized description
	     * @returns {OpenSearchDescription} The deserialized description
	     */
	
	  }], [{
	    key: 'fromXml',
	    value: function fromXml(xml) {
	      var xmlDoc = (0, _utils.parseXml)(xml).documentElement;
	
	      var values = {
	        shortName: (0, _utils.getText)(xmlDoc, 'os', 'ShortName'),
	        description: (0, _utils.getText)(xmlDoc, 'os', 'Description'),
	        tags: (0, _utils.getText)(xmlDoc, 'os', 'Tags'),
	        contact: (0, _utils.getText)(xmlDoc, 'os', 'Contact'),
	        urls: (0, _utils.getElements)(xmlDoc, 'os', 'Url').map(function (node) {
	          return _url.OpenSearchUrl.fromNode(node);
	        }),
	        longName: (0, _utils.getText)(xmlDoc, 'os', 'LongName'),
	        images: (0, _utils.getElements)(xmlDoc, 'os', 'Image').map(function (node) {
	          return {
	            height: parseInt(node.getAttribute('height'), 10),
	            width: parseInt(node.getAttribute('width'), 10),
	            type: node.getAttribute('type'),
	            url: node.textContent
	          };
	        }),
	        queries: (0, _utils.getElements)(xmlDoc, 'os', 'Query').map(function (node) {
	          var query = { role: node.getAttribute('role') };
	          for (var i = 0; i < node.attributes.length; ++i) {
	            var attribute = node.attributes[i];
	            query[attribute.name] = attribute.value;
	          }
	          return query;
	        }),
	        developer: (0, _utils.getText)(xmlDoc, 'os', 'Developer'),
	        attribution: (0, _utils.getText)(xmlDoc, 'os', 'Attribution'),
	        syndicationRight: (0, _utils.getText)(xmlDoc, 'os', 'SyndicationRight'),
	        adultContent: (0, _utils.getText)(xmlDoc, 'os', 'AdultContent'),
	        language: (0, _utils.getText)(xmlDoc, 'os', 'Language'),
	        outputEncoding: (0, _utils.getText)(xmlDoc, 'os', 'OutputEncoding'),
	        inputEncoding: (0, _utils.getText)(xmlDoc, 'os', 'InputEncoding')
	      };
	      return new OpenSearchDescription(values);
	    }
	  }, {
	    key: 'deserialize',
	    value: function deserialize(values) {
	      return new OpenSearchDescription((0, _utils.assign)({}, values, {
	        urls: values.urls.map(function (urlDesc) {
	          return _url.OpenSearchUrl.deserialize(urlDesc);
	        })
	      }));
	    }
	  }]);
	
	  return OpenSearchDescription;
	}();

/***/ }),
/* 658 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	exports.getErrorFromXml = getErrorFromXml;
	
	var _utils = __webpack_require__(49);
	
	/**
	 * @module opensearch/error
	 */
	
	/**
	 * Try to parse an OWS ExceptionReport and create an Error object from the
	 * parsed values.
	 * @param {string} xmlStr The XML string to parse the exception from.
	 * @returns {Error|null} The parsed error object or null of parsing failed.
	 */
	function getErrorFromXml(xmlStr) {
	  try {
	    var root = (0, _utils.parseXml)(xmlStr).documentElement;
	    var exceptionElement = (0, _utils.getFirstElement)(root, root.namespaceURI, 'Exception');
	
	    if (!exceptionElement) {
	      return null;
	    }
	
	    var message = ((0, _utils.getText)(exceptionElement, exceptionElement.namespaceURI, 'ExceptionText') || '').trim();
	    var code = exceptionElement.getAttribute('exceptionCode');
	    return new Error(message.length ? message : code);
	  } catch (error) {
	    return null;
	  }
	}

/***/ }),
/* 659 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	exports.AtomFormat = undefined;
	
	var _createClass = function () {
	  function defineProperties(target, props) {
	    for (var i = 0; i < props.length; i++) {
	      var descriptor = props[i];descriptor.enumerable = descriptor.enumerable || false;descriptor.configurable = true;if ("value" in descriptor) descriptor.writable = true;Object.defineProperty(target, descriptor.key, descriptor);
	    }
	  }return function (Constructor, protoProps, staticProps) {
	    if (protoProps) defineProperties(Constructor.prototype, protoProps);if (staticProps) defineProperties(Constructor, staticProps);return Constructor;
	  };
	}();
	
	var _utils = __webpack_require__(49);
	
	var _base = __webpack_require__(308);
	
	function _classCallCheck(instance, Constructor) {
	  if (!(instance instanceof Constructor)) {
	    throw new TypeError("Cannot call a class as a function");
	  }
	}
	
	function _possibleConstructorReturn(self, call) {
	  if (!self) {
	    throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
	  }return call && ((typeof call === "undefined" ? "undefined" : _typeof(call)) === "object" || typeof call === "function") ? call : self;
	}
	
	function _inherits(subClass, superClass) {
	  if (typeof superClass !== "function" && superClass !== null) {
	    throw new TypeError("Super expression must either be null or a function, not " + (typeof superClass === "undefined" ? "undefined" : _typeof(superClass)));
	  }subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } });if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;
	}
	
	/**
	 * @module opensearch/formats/atom
	 */
	
	/**
	 * Class to parse Atom feeds
	 * @constructor AtomFormat
	 * @implements {module:opensearch/formats.FormatInterface}
	 */
	var AtomFormat = exports.AtomFormat = function (_BaseFeedFormat) {
	  _inherits(AtomFormat, _BaseFeedFormat);
	
	  function AtomFormat() {
	    _classCallCheck(this, AtomFormat);
	
	    return _possibleConstructorReturn(this, (AtomFormat.__proto__ || Object.getPrototypeOf(AtomFormat)).apply(this, arguments));
	  }
	
	  _createClass(AtomFormat, [{
	    key: 'parse',
	
	    /**
	     * Parse the given XML.
	     * @param {string} text The XML string to parse.
	     * @returns {module:opensearch/formats.SearchResult} The parsed search result
	     */
	    value: function parse(text) {
	      var _this2 = this;
	
	      var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
	          _ref$extraFields = _ref.extraFields,
	          extraFields = _ref$extraFields === undefined ? undefined : _ref$extraFields,
	          _ref$namespaces = _ref.namespaces,
	          namespaces = _ref$namespaces === undefined ? undefined : _ref$namespaces;
	
	      var xmlDoc = (0, _utils.parseXml)(text).documentElement;
	      var records = (0, _utils.getElements)(xmlDoc, 'atom', 'entry').map(function (node) {
	        var entry = {
	          id: (0, _utils.getText)(node, 'dc', 'identifier') || (0, _utils.getText)(node, 'atom', 'id'),
	          properties: {
	            title: (0, _utils.getText)(node, 'atom', 'title'),
	            updated: new Date((0, _utils.getText)(node, 'atom', 'updated')),
	            content: (0, _utils.getText)(node, 'atom', 'content'),
	            summary: (0, _utils.getText)(node, 'atom', 'summary'),
	            links: _this2.parseLinks(node),
	            media: _this2.parseMedia(node)
	          }
	        };
	
	        var box = _this2.parseBox(node);
	        if (box) {
	          entry.bbox = box;
	        }
	
	        var geometry = _this2.parseGeometry(node);
	        if (geometry) {
	          entry.geometry = geometry;
	
	          if (!entry.bbox) {
	            entry.bbox = _this2.getBoxFromGeometry(geometry);
	          }
	        }
	
	        var date = _this2.parseDate(node);
	        if (date) {
	          entry.properties.time = date;
	        }
	
	        var eop = _this2.parseEOP(node);
	        if (eop) {
	          entry.properties.eop = eop;
	        }
	
	        var s3Path = _this2.parseS3Path(node);
	        if (s3Path) {
	          entry.properties.s3Path = s3Path;
	        }
	
	        if (extraFields) {
	          _this2.parseExtraFields(node, extraFields, namespaces, entry);
	        }
	
	        return entry;
	      });
	
	      return {
	        totalResults: parseInt((0, _utils.getText)(xmlDoc, 'os', 'totalResults'), 10),
	        startIndex: parseInt((0, _utils.getText)(xmlDoc, 'os', 'startIndex'), 10),
	        itemsPerPage: parseInt((0, _utils.getText)(xmlDoc, 'os', 'itemsPerPage'), 10),
	        query: {}, // TODO:
	        links: this.parseLinks(xmlDoc),
	        records: records
	      };
	    }
	  }]);
	
	  return AtomFormat;
	}(_base.BaseFeedFormat);

/***/ }),
/* 660 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	exports.GeoJSONFormat = undefined;
	
	var _createClass = function () {
	  function defineProperties(target, props) {
	    for (var i = 0; i < props.length; i++) {
	      var descriptor = props[i];descriptor.enumerable = descriptor.enumerable || false;descriptor.configurable = true;if ("value" in descriptor) descriptor.writable = true;Object.defineProperty(target, descriptor.key, descriptor);
	    }
	  }return function (Constructor, protoProps, staticProps) {
	    if (protoProps) defineProperties(Constructor.prototype, protoProps);if (staticProps) defineProperties(Constructor, staticProps);return Constructor;
	  };
	}();
	
	var _utils = __webpack_require__(49);
	
	function _classCallCheck(instance, Constructor) {
	  if (!(instance instanceof Constructor)) {
	    throw new TypeError("Cannot call a class as a function");
	  }
	}
	
	/**
	 * @module opensearch/formats/geojson
	 */
	
	/**
	 * Class to parse GeoJSON results
	 * @constructor GeoJSONFormat
	 * @implements {module:opensearch/formats.FormatInterface}
	 */
	var GeoJSONFormat = exports.GeoJSONFormat = function () {
	  function GeoJSONFormat() {
	    _classCallCheck(this, GeoJSONFormat);
	  }
	
	  _createClass(GeoJSONFormat, [{
	    key: 'parse',
	
	    /**
	     * Parse the given JSON.
	     * @param {string} text The JSON string to parse.
	     * @returns {module:opensearch/formats.SearchResult} The parsed search result
	     */
	    value: function parse(text) {
	      var result = JSON.parse(text);
	      var records = result.features.map(function (item) {
	        if (!Object.prototype.hasOwnProperty.call(item, 'id') && Object.prototype.hasOwnProperty.call(item.properties, 'id')) {
	          return (0, _utils.assign)({
	            id: item.properties.id
	          }, item);
	        }
	        return item;
	      });
	
	      return {
	        // TODO: parse properties of featurecollection
	        records: records
	      };
	    }
	  }]);
	
	  return GeoJSONFormat;
	}();

/***/ }),
/* 661 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	exports.RSSFormat = undefined;
	
	var _createClass = function () {
	  function defineProperties(target, props) {
	    for (var i = 0; i < props.length; i++) {
	      var descriptor = props[i];descriptor.enumerable = descriptor.enumerable || false;descriptor.configurable = true;if ("value" in descriptor) descriptor.writable = true;Object.defineProperty(target, descriptor.key, descriptor);
	    }
	  }return function (Constructor, protoProps, staticProps) {
	    if (protoProps) defineProperties(Constructor.prototype, protoProps);if (staticProps) defineProperties(Constructor, staticProps);return Constructor;
	  };
	}();
	
	var _utils = __webpack_require__(49);
	
	var _base = __webpack_require__(308);
	
	function _classCallCheck(instance, Constructor) {
	  if (!(instance instanceof Constructor)) {
	    throw new TypeError("Cannot call a class as a function");
	  }
	}
	
	function _possibleConstructorReturn(self, call) {
	  if (!self) {
	    throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
	  }return call && ((typeof call === "undefined" ? "undefined" : _typeof(call)) === "object" || typeof call === "function") ? call : self;
	}
	
	function _inherits(subClass, superClass) {
	  if (typeof superClass !== "function" && superClass !== null) {
	    throw new TypeError("Super expression must either be null or a function, not " + (typeof superClass === "undefined" ? "undefined" : _typeof(superClass)));
	  }subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } });if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;
	}
	
	/**
	 * @module opensearch/formats/rss
	 */
	
	/**
	 * Class to parse RSS feeds
	 * @constructor RSSFormat
	 * @implements {module:opensearch/formats.FormatInterface}
	 */
	var RSSFormat = exports.RSSFormat = function (_BaseFeedFormat) {
	  _inherits(RSSFormat, _BaseFeedFormat);
	
	  function RSSFormat() {
	    _classCallCheck(this, RSSFormat);
	
	    return _possibleConstructorReturn(this, (RSSFormat.__proto__ || Object.getPrototypeOf(RSSFormat)).apply(this, arguments));
	  }
	
	  _createClass(RSSFormat, [{
	    key: 'parse',
	
	    /**
	     * Parse the given XML.
	     * @param {string} text The XML string to parse.
	     * @returns {module:opensearch/formats.SearchResult} The parsed search result
	     */
	    value: function parse(text) {
	      var _this2 = this;
	
	      var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
	          _ref$extraFields = _ref.extraFields,
	          extraFields = _ref$extraFields === undefined ? undefined : _ref$extraFields,
	          _ref$namespaces = _ref.namespaces,
	          namespaces = _ref$namespaces === undefined ? undefined : _ref$namespaces;
	
	      var xmlDoc = (0, _utils.parseXml)(text).documentElement;
	      var channel = (0, _utils.getFirstElement)(xmlDoc, null, 'channel');
	      var records = (0, _utils.getElements)(channel, null, 'item').map(function (node) {
	        var item = {
	          id: (0, _utils.getText)(node, 'dc', 'identifier') || (0, _utils.getText)(node, null, 'guid'),
	          properties: {
	            title: (0, _utils.getText)(node, null, 'title'),
	            content: (0, _utils.getText)(node, null, 'description'),
	            summary: (0, _utils.getText)(node, null, 'description'),
	            links: _this2.parseLinks(node),
	            media: _this2.parseMedia(node)
	          }
	        };
	
	        var box = _this2.parseBox(node);
	        if (box) {
	          item.bbox = box;
	        }
	
	        var geometry = _this2.parseGeometry(node);
	        if (geometry) {
	          item.geometry = geometry;
	
	          if (!item.bbox) {
	            item.bbox = _this2.getBoxFromGeometry(geometry);
	          }
	        }
	
	        var date = _this2.parseDate(node);
	        if (date) {
	          item.properties.time = date;
	        }
	
	        var eop = _this2.parseEOP(node);
	        if (eop) {
	          item.properties.eop = eop;
	        }
	
	        var s3Path = _this2.parseS3Path(node);
	        if (s3Path) {
	          item.properties.s3Path = s3Path;
	        }
	
	        if (extraFields) {
	          _this2.parseExtraFields(node, extraFields, namespaces, item);
	        }
	
	        return item;
	      });
	
	      return {
	        totalResults: parseInt((0, _utils.getText)(channel, 'os', 'totalResults'), 10),
	        startIndex: parseInt((0, _utils.getText)(channel, 'os', 'startIndex'), 10),
	        itemsPerPage: parseInt((0, _utils.getText)(channel, 'os', 'itemsPerPage'), 10),
	        query: {}, // TODO:
	        links: this.parseLinks(xmlDoc),
	        records: records
	      };
	    }
	  }]);
	
	  return RSSFormat;
	}(_base.BaseFeedFormat);

/***/ }),
/* 662 */
/***/ (function(module, exports) {

	"use strict";
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	
	var _slicedToArray = function () {
	  function sliceIterator(arr, i) {
	    var _arr = [];var _n = true;var _d = false;var _e = undefined;try {
	      for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {
	        _arr.push(_s.value);if (i && _arr.length === i) break;
	      }
	    } catch (err) {
	      _d = true;_e = err;
	    } finally {
	      try {
	        if (!_n && _i["return"]) _i["return"]();
	      } finally {
	        if (_d) throw _e;
	      }
	    }return _arr;
	  }return function (arr, i) {
	    if (Array.isArray(arr)) {
	      return arr;
	    } else if (Symbol.iterator in Object(arr)) {
	      return sliceIterator(arr, i);
	    } else {
	      throw new TypeError("Invalid attempt to destructure non-iterable instance");
	    }
	  };
	}();
	
	var _createClass = function () {
	  function defineProperties(target, props) {
	    for (var i = 0; i < props.length; i++) {
	      var descriptor = props[i];descriptor.enumerable = descriptor.enumerable || false;descriptor.configurable = true;if ("value" in descriptor) descriptor.writable = true;Object.defineProperty(target, descriptor.key, descriptor);
	    }
	  }return function (Constructor, protoProps, staticProps) {
	    if (protoProps) defineProperties(Constructor.prototype, protoProps);if (staticProps) defineProperties(Constructor, staticProps);return Constructor;
	  };
	}();
	
	function _classCallCheck(instance, Constructor) {
	  if (!(instance instanceof Constructor)) {
	    throw new TypeError("Cannot call a class as a function");
	  }
	}
	
	/**
	 * @module opensearch/formats/suggestions-json
	 */
	
	/**
	 * Class to parse SuggestionsJSONFormat results
	 * @constructor SuggestionsJSONFormat
	 */
	var SuggestionsJSONFormat = exports.SuggestionsJSONFormat = function () {
	  function SuggestionsJSONFormat() {
	    _classCallCheck(this, SuggestionsJSONFormat);
	  }
	
	  _createClass(SuggestionsJSONFormat, [{
	    key: "parse",
	
	    /**
	     * Parse the given JSON.
	     * @param {string} text The JSON string to parse.
	     * @returns {module:opensearch/formats.Suggestion[]} The parsed suggestions
	     */
	    value: function parse(text) {
	      var result = JSON.parse(text);
	
	      var _result = _slicedToArray(result, 4),
	          completions = _result[1],
	          descriptions = _result[2],
	          urls = _result[3];
	
	      return completions.map(function (completion, index) {
	        return {
	          completion: completion,
	          description: descriptions && descriptions[index],
	          url: urls && urls[index]
	        };
	      });
	    }
	  }]);
	
	  return SuggestionsJSONFormat;
	}();

/***/ }),
/* 663 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	exports.registerFormat = exports.config = undefined;
	exports.discover = discover;
	exports.fromXml = fromXml;
	exports.deserialize = deserialize;
	
	var _service = __webpack_require__(665);
	
	var _config = __webpack_require__(151);
	
	var _formats = __webpack_require__(189);
	
	/**
	 * @module opensearch
	 */
	
	/**
	 * Accesses an OpenSearch service and discovers it.
	 * @param {object} url The URL to find the OpenSearchDescription XML document
	 * @returns {Promise<OpenSearchService>} The {@link OpenSearchService} as a Promise
	 */
	function discover(url) {
	  return _service.OpenSearchService.discover(url);
	}
	
	/**
	 * Creates a new {@link OpenSearchService} from the given XML string containing
	 *                                         the OpenSearch description document.
	 * @param {string} xml The XML string containing the OpenSearch description document.
	 * @returns {OpenSearchService} The {@link OpenSearchService}
	 */
	function fromXml(xml) {
	  return _service.OpenSearchService.fromXml(xml);
	}
	
	/**
	 * Deserialize a previously serialized {@link OpenSearchService}.
	 * @param {object} values The serialized service description
	 * @returns {OpenSearchService} The deserialized service
	 */
	function deserialize(values) {
	  return _service.OpenSearchService.deserialize(values);
	}
	
	exports.config = _config.config;
	exports.registerFormat = _formats.registerFormat;

/***/ }),
/* 664 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	exports.OpenSearchParameter = undefined;
	
	var _createClass = function () {
	  function defineProperties(target, props) {
	    for (var i = 0; i < props.length; i++) {
	      var descriptor = props[i];descriptor.enumerable = descriptor.enumerable || false;descriptor.configurable = true;if ("value" in descriptor) descriptor.writable = true;Object.defineProperty(target, descriptor.key, descriptor);
	    }
	  }return function (Constructor, protoProps, staticProps) {
	    if (protoProps) defineProperties(Constructor.prototype, protoProps);if (staticProps) defineProperties(Constructor, staticProps);return Constructor;
	  };
	}();
	
	var _utils = __webpack_require__(49);
	
	function _classCallCheck(instance, Constructor) {
	  if (!(instance instanceof Constructor)) {
	    throw new TypeError("Cannot call a class as a function");
	  }
	}
	
	/**
	 * @module opensearch/parameter
	 */
	
	var typeRE = /{([a-zA-Z:]+)([?]?)}/;
	var typeREglobal = /{([a-zA-Z:]+)([?]?)}/g;
	
	function parseType(value) {
	  var match = typeRE.exec(value);
	  if (match) {
	    return match[1];
	  }
	  return null;
	}
	
	function isMandatory(value) {
	  return typeRE.exec(value)[2] !== '?';
	}
	
	function formatDate(value) {
	  var pattern = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined;
	
	  var rePattern = pattern ? new RegExp(pattern) : null;
	  if (value instanceof Date) {
	    var isoString = value.toISOString();
	    var formatted = isoString;
	    if (!rePattern || rePattern.test(formatted)) {
	      return formatted;
	    }
	
	    // Try without milliseconds
	    formatted = isoString.split('.')[0] + 'Z';
	    if (!rePattern || rePattern.test(formatted)) {
	      return formatted;
	    }
	
	    // Try without Zulu
	    formatted = isoString.slice(0, -1);
	    if (!rePattern || rePattern.test(formatted)) {
	      return formatted;
	    }
	
	    // Try without Zulu and milliseconds
	    formatted = isoString.split('.')[0];
	    if (!rePattern || rePattern.test(formatted)) {
	      return formatted;
	    }
	
	    // as fallback return the default ISO format
	    return isoString;
	  }
	  return value;
	}
	
	function eoValueToString(value) {
	  var isDate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
	  var pattern = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined;
	
	  var convertDate = function convertDate(dateValue) {
	    return formatDate(dateValue, pattern);
	  };
	
	  if (typeof value === 'string') {
	    return value;
	  } else if (typeof value === 'number') {
	    return value.toString();
	  } else if (isDate && value instanceof Date) {
	    return convertDate(value);
	  } else if (Array.isArray(value)) {
	    if (isDate) {
	      return '{' + value.map(convertDate).join(',') + '}';
	    }
	    return '{' + value.join(',') + '}';
	  }
	
	  var left = null;
	  var right = null;
	  if (Object.prototype.hasOwnProperty.call(value, 'min')) {
	    left = '[' + (isDate ? convertDate(value.min) : value.min);
	  } else if (Object.prototype.hasOwnProperty.call(value, 'minExclusive')) {
	    left = ']' + (isDate ? convertDate(value.minExclusive) : value.minExclusive);
	  }
	
	  if (Object.prototype.hasOwnProperty.call(value, 'max')) {
	    right = (isDate ? convertDate(value.max) : value.max) + ']';
	  } else if (Object.prototype.hasOwnProperty.call(value, 'maxExclusive')) {
	    right = (isDate ? convertDate(value.maxExclusive) : value.maxExclusive) + '[';
	  }
	
	  if (left !== null && right !== null) {
	    return left + ',' + right;
	  } else if (left !== null) {
	    return left;
	  }
	  return right;
	}
	
	function _serializeValue(value, type, pattern) {
	  switch (type) {
	    case 'time:start':
	    case 'time:end':
	      return formatDate(value, pattern);
	    case 'geo:box':
	      if (Array.isArray(value)) {
	        return value.join(',');
	      }
	      break;
	    case 'geo:geometry':
	      return (0, _utils.toWKT)(value);
	    case 'eo:orbitNumber':
	    case 'eo:track':
	    case 'eo:frame':
	    case 'eo:cloudCover':
	    case 'eo:snowCover':
	    case 'eo:startTimeFromAscendingNode':
	    case 'eo:completionTimeFromAscendingNode':
	    case 'eo:illuminationAzimuthAngle':
	    case 'eo:illuminationZenithAngle':
	    case 'eo:illuminationElevationAngle':
	    case 'eo:minimumIncidenceAngle':
	    case 'eo:maximumIncidenceAngle':
	    case 'eo:dopplerFrequency':
	    case 'eo:incidenceAngleVariation':
	      return eoValueToString(value, false, pattern);
	    case 'eo:availabilityTime':
	    case 'eo:creationDate':
	    case 'eo:modificationDate':
	    case 'eo:processingDate':
	      return eoValueToString(value, true, pattern);
	    default:
	      break;
	  }
	  return value;
	}
	
	/**
	 * Class to describe a single OpenSearch URL parameter.
	 */
	
	var OpenSearchParameter = exports.OpenSearchParameter = function () {
	  /**
	   * Class to describe a single OpenSearch URL parameter.
	   * @param {string|string[]} type The type(s) of the parameter
	   * @param {string} name The name of the parameter
	   * @param {boolean} mandatory Whether the parameter is mandatory
	   * @param {object[]} [options=null] The possible values for this parameter
	   * @param {string} options[].label The label of the option
	   * @param {string} options[].value The value of the option
	   * @param {Number} [minExclusive=undefined] The minimum value allowed for this
	                                              parameter (exclusive)
	   * @param {Number} [maxExclusive=undefined] The maximum value allowed for this
	                                              parameter (exclusive)
	   * @param {Number} [minInclusive=undefined] The minimum value allowed for this
	                                              parameter (inclusive)
	   * @param {Number} [maxInclusive=undefined] The maximum value allowed for this
	                                              parameter (inclusive)
	   */
	  function OpenSearchParameter(type, name, mandatory) {
	    var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;
	    var minExclusive = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : undefined;
	    var maxExclusive = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : undefined;
	    var minInclusive = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : undefined;
	    var maxInclusive = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : undefined;
	    var pattern = arguments.length > 8 && arguments[8] !== undefined ? arguments[8] : undefined;
	
	    _classCallCheck(this, OpenSearchParameter);
	
	    this._type = type;
	    this._name = name;
	    this._mandatory = mandatory;
	    this._options = options;
	    this._minExclusive = minExclusive;
	    this._maxExclusive = maxExclusive;
	    this._minInclusive = minInclusive;
	    this._maxInclusive = maxInclusive;
	    this._pattern = pattern;
	  }
	
	  /**
	   * The type of the parameter
	   * @readonly
	   */
	
	  _createClass(OpenSearchParameter, [{
	    key: 'combined',
	
	    /**
	     * Combines this parameter with the values of another parameter.
	     * @param {OpenSearchParameter} other the other parameter
	     * @returns {OpenSearchParameter} the combined parameter
	     */
	    value: function combined(other) {
	      return new OpenSearchParameter(this.type, this.name, (0, _utils.isNullOrUndefined)(this.mandatory) ? other.mandatory : this.mandatory, (0, _utils.isNullOrUndefined)(this.options) ? other.options : this.options, (0, _utils.isNullOrUndefined)(this.minExclusive) ? other.minExclusive : this.minExclusive, (0, _utils.isNullOrUndefined)(this.maxExclusive) ? other.maxExclusive : this.maxExclusive, (0, _utils.isNullOrUndefined)(this.minInclusive) ? other.minInclusive : this.minInclusive, (0, _utils.isNullOrUndefined)(this.maxInclusive) ? other.maxInclusive : this.maxInclusive, (0, _utils.isNullOrUndefined)(this.pattern) ? other.pattern : this.pattern);
	    }
	
	    /**
	     * Serialize the given value according to the internal type to be sent in a
	     * request.
	     * @param {Number|string|Date|array|object} value The value to serialize. The
	     *                                                allowed types depend on the
	     *                                                internal type.
	     * @param {string} [type] For multi-parameters, this parameter indicates what
	     *                        of the multiple values to serialize.
	     * @returns {string} the serialized value.
	     */
	
	  }, {
	    key: 'serializeValue',
	    value: function serializeValue(value) {
	      var type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined;
	
	      var types = this.type;
	
	      if (this.isMulti && type) {
	        if (Array.isArray(value)) {
	          return _serializeValue(value[this.types.indexOf(type)], type, this.pattern);
	        } else if (Object.prototype.hasOwnProperty.call(value, type)) {
	          return _serializeValue(value[type], type, this.pattern);
	        }
	        return _serializeValue(value, type, this.pattern);
	      }
	      return _serializeValue(value, types, this.pattern);
	    }
	
	    /**
	     * Constructs a new OpenSearchParameter from a DOM-Node.
	     * @param {DOMNode} node the node to create the parameter from.
	     * @returns {OpenSearchParameter} the constructed parameters object.
	     */
	
	  }, {
	    key: 'serialize',
	
	    /**
	     * Serialize the parameter to a simple object.
	     * @returns {object} The serialized parameter
	     */
	    value: function serialize() {
	      var values = {
	        type: this._type,
	        name: this._name,
	        mandatory: this._mandatory,
	        options: this._options,
	        pattern: this._pattern
	      };
	
	      if (typeof this._minExclusive !== 'undefined') {
	        values.minExclusive = this._minExclusive;
	      }
	      if (typeof this._maxExclusive !== 'undefined') {
	        values.maxExclusive = this._maxExclusive;
	      }
	      if (typeof this._minInclusive !== 'undefined') {
	        values.minInclusive = this._minInclusive;
	      }
	      if (typeof this._maxInclusive !== 'undefined') {
	        values.maxInclusive = this._maxInclusive;
	      }
	      return values;
	    }
	
	    /**
	     * Deserialize a parameter from a simple object.
	     * @param {object} values The serialized parameter
	     * @returns {OpenSearchParameter} The deserialized parameter
	     */
	
	  }, {
	    key: 'type',
	    get: function get() {
	      return this._type;
	    }
	
	    /**
	     * The name of the parameter
	     * @readonly
	     */
	
	  }, {
	    key: 'name',
	    get: function get() {
	      return this._name;
	    }
	
	    /**
	     * Whether the parameter is mandatory
	     * @readonly
	     */
	
	  }, {
	    key: 'mandatory',
	    get: function get() {
	      return this._mandatory;
	    }
	
	    /**
	     * The possible values for this parameter
	     * @readonly
	     */
	
	  }, {
	    key: 'options',
	    get: function get() {
	      return this._options;
	    }
	
	    /**
	     * The minimum value allowed for this parameter (exclusive)
	     * @readonly
	     */
	
	  }, {
	    key: 'minExclusive',
	    get: function get() {
	      return this._minExclusive;
	    }
	
	    /**
	     * The maximum value allowed for this parameter (exclusive)
	     * @readonly
	     */
	
	  }, {
	    key: 'maxExclusive',
	    get: function get() {
	      return this._maxExclusive;
	    }
	
	    /**
	     * The minimum value allowed for this parameter (inclusive)
	     * @readonly
	     */
	
	  }, {
	    key: 'minInclusive',
	    get: function get() {
	      return this._minInclusive;
	    }
	
	    /**
	     * The maximum value allowed for this parameter (inclusive)
	     * @readonly
	     */
	
	  }, {
	    key: 'maxInclusive',
	    get: function get() {
	      return this._maxInclusive;
	    }
	
	    /**
	     * The pattern, serialized values have to conform to.
	     * @readonly
	     */
	
	  }, {
	    key: 'pattern',
	    get: function get() {
	      return this._pattern;
	    }
	
	    /**
	     * Checks whether this parameter handles multiple sub-parameters.
	     * e.g: time={time:start}/{time:end}
	     * @readonly
	     */
	
	  }, {
	    key: 'isMulti',
	    get: function get() {
	      return Array.isArray(this.type);
	    }
	  }], [{
	    key: 'fromNode',
	    value: function fromNode(node) {
	      var type = parseType(node.getAttribute('value'));
	      var name = node.getAttribute('name');
	      var mandatory = node.hasAttribute('minimum') ? node.getAttribute('minimum') !== '0' : undefined;
	      var minExclusive = node.hasAttribute('minExclusive') ? parseInt(node.getAttribute('minExclusive'), 10) : undefined;
	      var maxExclusive = node.hasAttribute('maxExclusive') ? parseInt(node.getAttribute('maxExclusive'), 10) : undefined;
	      var minInclusive = node.hasAttribute('minInclusive') ? parseInt(node.getAttribute('minInclusive'), 10) : undefined;
	      var maxInclusive = node.hasAttribute('maxInclusive') ? parseInt(node.getAttribute('maxInclusive'), 10) : undefined;
	      var pattern = node.hasAttribute('pattern') ? node.getAttribute('pattern') : undefined;
	      var optionNodes = (0, _utils.getElements)(node, 'parameters', 'Option');
	      var options = void 0;
	      if (optionNodes.length) {
	        options = optionNodes.map(function (optionNode) {
	          return {
	            label: optionNode.getAttribute('label'),
	            value: optionNode.getAttribute('value')
	          };
	        });
	      }
	      return new OpenSearchParameter(type, name, mandatory, options, minExclusive, maxExclusive, minInclusive, maxInclusive, pattern);
	    }
	
	    /**
	     * Constructs a new OpenSearchParameter from a key value pair (e.g: from the
	     * query part of a KVP-URL). Returns null, when the value could not be parsed.
	     * @param {DOMNode} key the key of the key-value-pair.
	     * @param {DOMNode} value the value of the key-value-pair.
	     * @returns {OpenSearchParameter|null} the constructed parameters object.
	     */
	
	  }, {
	    key: 'fromKeyValuePair',
	    value: function fromKeyValuePair(key, value) {
	      var type = parseType(value);
	      if (type) {
	        var multi = value.match(typeREglobal);
	        if (multi.length > 1) {
	          var types = multi.map(parseType);
	          var mandatory = multi.map(isMandatory).reduce(function (acc, v) {
	            return acc || v;
	          }, false);
	          return new OpenSearchParameter(types, key, mandatory);
	        }
	        return new OpenSearchParameter(type, key, isMandatory(value));
	      }
	      return null;
	    }
	  }, {
	    key: 'deserialize',
	    value: function deserialize(values) {
	      return new OpenSearchParameter(values.type, values.name, values.mandatory, values.options, values.minExclusive, values.maxExclusive, values.minInclusive, values.maxInclusive, values.pattern);
	    }
	  }]);
	
	  return OpenSearchParameter;
	}();

/***/ }),
/* 665 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	exports.OpenSearchService = undefined;
	
	var _createClass = function () {
	  function defineProperties(target, props) {
	    for (var i = 0; i < props.length; i++) {
	      var descriptor = props[i];descriptor.enumerable = descriptor.enumerable || false;descriptor.configurable = true;if ("value" in descriptor) descriptor.writable = true;Object.defineProperty(target, descriptor.key, descriptor);
	    }
	  }return function (Constructor, protoProps, staticProps) {
	    if (protoProps) defineProperties(Constructor.prototype, protoProps);if (staticProps) defineProperties(Constructor, staticProps);return Constructor;
	  };
	}();
	
	__webpack_require__(360);
	
	var _description = __webpack_require__(657);
	
	var _paginator = __webpack_require__(309);
	
	var _search2 = __webpack_require__(310);
	
	var _formats = __webpack_require__(189);
	
	var _utils = __webpack_require__(49);
	
	var _config3 = __webpack_require__(151);
	
	function _classCallCheck(instance, Constructor) {
	  if (!(instance instanceof Constructor)) {
	    throw new TypeError("Cannot call a class as a function");
	  }
	}
	
	/**
	 * Class to perform searches.
	 */
	var OpenSearchService = exports.OpenSearchService = function () {
	  /**
	   * Create an OpenSearchDescription object
	   * @param {OpenSearchDescription} descriptionDocument The parsed description document
	   */
	  function OpenSearchService(descriptionDocument) {
	    _classCallCheck(this, OpenSearchService);
	
	    this.descriptionDocument = descriptionDocument;
	  }
	
	  /**
	   * Get the underlying {@link OpenSearchDescription} object.
	   * @returns {OpenSearchDescription}
	   */
	
	  _createClass(OpenSearchService, [{
	    key: 'getDescription',
	    value: function getDescription() {
	      return this.descriptionDocument;
	    }
	
	    /**
	     * Get the URL for the given parameters.
	     * @param {object} parameters An object mapping the name or type to the value
	     * @param {string} [type=null] The preferred transfer type.
	     * @param {string} [method=null] The preferred HTTP method type.
	     * @returns {OpenSearchUrl} The resulting URL objec.
	     */
	
	  }, {
	    key: 'getUrl',
	    value: function getUrl(parameters, type, method) {
	      var url = this.descriptionDocument.getUrl(parameters, type, method);
	      if (!url) {
	        // try to give better feedback, when just one URL is possible
	        var alternativeUrls = this.descriptionDocument.getUrls(null, type, method);
	        if (alternativeUrls.length === 1) {
	          var missingParamNames = alternativeUrls[0].getMissingMandatoryParameters(parameters).map(function (p) {
	            return '"' + p.type + '"';
	          });
	          var unsupportedParameterKeys = alternativeUrls[0].getUnsupportedParameterKeys(parameters).map(function (k) {
	            return '"' + k + '"';
	          });
	
	          var terms = [];
	          if (missingParamNames.length) {
	            terms.push('missing parameters: ' + missingParamNames.join(', '));
	          }
	          if (unsupportedParameterKeys.length) {
	            terms.push('unsupported parameters keys: ' + unsupportedParameterKeys.join(', '));
	          }
	          throw new Error('No matching URL found, ' + terms.join(' and '));
	        }
	
	        // standard error, when multiple/no URLs with that type/method are specified
	        throw new Error('No URL found for type \'' + type + '\' and the given parameters.');
	      }
	      return url;
	    }
	
	    /**
	     * Returns a base request object for the given parameters. This allows to
	     * inspect the request values before sending them to the server.
	     * @param {object} parameters An object mapping the name or type to the value
	     * @param {string} [type=null] The preferred transfer type.
	     * @param {string} [method=null] The preferred HTTP method type.
	     * @returns {object} The search request
	     */
	
	  }, {
	    key: 'createSearchRequest',
	    value: function createSearchRequest(parameters) {
	      var type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
	      var method = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
	
	      var url = null;
	      if (!type) {
	        // try to find a suitable URL
	        var supportedTypes = (0, _formats.getSupportedTypes)();
	        for (var i = 0; i < supportedTypes.length; ++i) {
	          url = this.descriptionDocument.getUrl(parameters, supportedTypes[i], method);
	          if (url && url.isCompatible(parameters)) {
	            break;
	          }
	        }
	        if (!url) {
	          throw new Error('No compatible URL found.');
	        }
	      } else {
	        url = this.getUrl(parameters, type, method);
	      }
	
	      return (0, _search2.createBaseRequest)(url, parameters);
	    }
	
	    /**
	     * Checks whether this URL is compatible with the given parameters
	     * @param {object} parameters An object mapping the name or type to the value
	     * @param {string} [options.type=null] The preferred transfer type.
	     * @param {string} [options.method=null] The preferred HTTP method type.
	     * @param {boolean} [options.raw=false] Whether the response shall be parsed or returned raw.
	     * @param {number} [options.maxUrlLength=undefined] The maximum URL length. URLs longer than that
	     *                                                  will result in errors.
	     * @param {boolean} [options.dropEmptyParameters=false] Whether unused parameter keys shall
	     *                                                      be dropped from the request.
	     * @param {object} [options.parseOptions=undefined] Additional options for the format.
	     * @param {object} [options.headers=undefined] Specific headers to send to the service.
	     * @returns {Promise<array>|Promise<Response>} The search result as a Promise
	     */
	
	  }, {
	    key: 'search',
	    value: function search(parameters) {
	      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
	      var _options$type = options.type,
	          type = _options$type === undefined ? null : _options$type,
	          _options$method = options.method,
	          method = _options$method === undefined ? null : _options$method;
	
	      var url = null;
	      if (!type) {
	        // try to find a suitable URL
	        var supportedTypes = (0, _formats.getSupportedTypes)();
	        for (var i = 0; i < supportedTypes.length; ++i) {
	          url = this.descriptionDocument.getUrl(parameters, supportedTypes[i], method);
	          if (url && url.isCompatible(parameters)) {
	            break;
	          }
	        }
	        if (!url) {
	          throw new Error('No compatible URL found.');
	        }
	      } else {
	        url = this.getUrl(parameters, type, method);
	      }
	
	      return (0, _search2.search)(url, parameters, options);
	    }
	
	    /**
	     * Gets the suggestions for the current search parameters.
	     * @param {object} parameters An object mapping the name or type to the value
	     * @param {string} [method=null] The preferred HTTP method type.
	     * @param {number} [maxUrlLength=undefined] The maximum URL length. URLs longer than that
	     *                                          will result in errors.
	     * @returns {Promise<Suggestion[]>} The fetched suggestions.
	     */
	
	  }, {
	    key: 'getSuggestions',
	    value: function getSuggestions(parameters) {
	      var method = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
	      var maxUrlLength = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined;
	
	      var type = 'application/x-suggestions+json';
	      var url = void 0;
	      try {
	        url = this.getUrl(parameters, type, method);
	      } catch (error) {
	        var _config = (0, _config3.config)(),
	            _Promise = _config.Promise;
	
	        return _Promise.reject(new Error('No suggestion URL found.'));
	      }
	      return (0, _search2.search)(url, parameters, type, false, maxUrlLength);
	    }
	
	    /**
	     * Creates a new Paginator object to enable a simpler search result handling
	     * for multi-page results.
	     * @param {object} parameters An object mapping the name or type to the value
	     * @param {object} [options={}] Additional options for the paginator
	     * @param {string} [options.type=null] The preferred transfer type.
	     * @param {string} [options.method=null] The preferred HTTP method type.
	     * @returns {OpenSearchPaginator} The created Paginator object.
	     */
	
	  }, {
	    key: 'getPaginator',
	    value: function getPaginator(parameters) {
	      var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
	      var _options$type2 = options.type,
	          type = _options$type2 === undefined ? null : _options$type2,
	          _options$method2 = options.method,
	          method = _options$method2 === undefined ? null : _options$method2;
	
	      return new _paginator.OpenSearchPaginator(this.getUrl(parameters, type, method), parameters, options);
	    }
	
	    /**
	     * Accesses an OpenSearch service and discovers it.
	     * @param {object} url The URL to find the OpenSearchDescription XML document
	     * @returns {Promise<OpenSearchService>} The {@link OpenSearchService} as a Promise
	     */
	
	  }, {
	    key: 'serialize',
	
	    /**
	     * Serialize the service to a simple object.
	     * @returns {object} The serialized service description
	     */
	    value: function serialize() {
	      return {
	        description: this.descriptionDocument.serialize()
	      };
	    }
	
	    /**
	     * Deserialize an OpenSearch description from an object.
	     * @param {object} values The serialized service description
	     * @returns {OpenSearchService} The deserialized service
	     */
	
	  }], [{
	    key: 'discover',
	    value: function discover(url) {
	      var _config2 = (0, _config3.config)(),
	          useXHR = _config2.useXHR,
	          Promise = _config2.Promise;
	
	      if (useXHR) {
	        return new Promise(function (resolve, reject, onCancel) {
	          var xhr = (0, _utils.createXHR)(url);
	          xhr.onload = function () {
	            try {
	              resolve(OpenSearchService.fromXml(xhr.responseText));
	            } catch (error) {
	              reject(error);
	            }
	          };
	          xhr.onerror = function () {
	            reject(new TypeError('Failed to fetch'));
	          };
	          if (onCancel && typeof onCancel === 'function') {
	            onCancel(function () {
	              xhr.abort();
	            });
	          }
	        });
	      }
	      return (0, _utils.fetchAndCheck)(url).then(function (response) {
	        return response.text();
	      }).then(function (response) {
	        return OpenSearchService.fromXml(response);
	      });
	    }
	
	    /**
	     * Create a new {@link OpenSearchService} from an OSDD XML string.
	     * @param {string} xml The XML string to parse the description from
	     * @returns {OpenSearchService} The created service object
	     */
	
	  }, {
	    key: 'fromXml',
	    value: function fromXml(xml) {
	      return new OpenSearchService(_description.OpenSearchDescription.fromXml(xml));
	    }
	  }, {
	    key: 'deserialize',
	    value: function deserialize(values) {
	      return new OpenSearchService(_description.OpenSearchDescription.deserialize(values.description));
	    }
	  }]);
	
	  return OpenSearchService;
	}();

/***/ }),
/* 666 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	var _typeof2 = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	exports.OpenSearchUrl = undefined;
	
	var _typeof = typeof Symbol === "function" && _typeof2(Symbol.iterator) === "symbol" ? function (obj) {
	  return typeof obj === "undefined" ? "undefined" : _typeof2(obj);
	} : function (obj) {
	  return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj === "undefined" ? "undefined" : _typeof2(obj);
	};
	
	var _createClass = function () {
	  function defineProperties(target, props) {
	    for (var i = 0; i < props.length; i++) {
	      var descriptor = props[i];descriptor.enumerable = descriptor.enumerable || false;descriptor.configurable = true;if ("value" in descriptor) descriptor.writable = true;Object.defineProperty(target, descriptor.key, descriptor);
	    }
	  }return function (Constructor, protoProps, staticProps) {
	    if (protoProps) defineProperties(Constructor.prototype, protoProps);if (staticProps) defineProperties(Constructor, staticProps);return Constructor;
	  };
	}();
	
	var _urlParse = __webpack_require__(164);
	
	var _urlParse2 = _interopRequireDefault(_urlParse);
	
	var _utils = __webpack_require__(49);
	
	var _parameter = __webpack_require__(664);
	
	function _interopRequireDefault(obj) {
	  return obj && obj.__esModule ? obj : { default: obj };
	}
	
	function _classCallCheck(instance, Constructor) {
	  if (!(instance instanceof Constructor)) {
	    throw new TypeError("Cannot call a class as a function");
	  }
	}
	
	/**
	 * @module opensearch/url
	 */
	
	function isParameterMissing(parameterValues, parameter) {
	  if (Object.prototype.hasOwnProperty.call(parameterValues, parameter.name)) {
	    return false;
	  } else if (parameter.isMulti) {
	    var types = parameter.type;
	    for (var i = 0; i < types.length; ++i) {
	      var type = types[i];
	      if (Object.prototype.hasOwnProperty.call(parameterValues, type)) {
	        return false;
	      }
	    }
	    return true;
	  }
	  return !Object.prototype.hasOwnProperty.call(parameterValues, parameter.type);
	}
	
	/**
	 * Class to parse a single URL of an OpenSearchDescription XML document and
	 * to create HTTP requests for searches.
	 * @property {string} type The mime-type for the content the URL is referring to
	 * @property {string} url The URL template or base URL
	 * @property {array} parameters The template/request parameters of the URL
	 * @property {string} method The HTTP method
	 * @property {string} enctype The encoding type
	 * @property {Number} indexOffset the index offset of this URL
	 * @property {Number} pageOffset the page offset of this URL
	 */
	
	var OpenSearchUrl = exports.OpenSearchUrl = function () {
	  /**
	   * Create an OpenSearchUrl object
	   * @param {string} type The mime-type for the content the URL is referring to
	   * @param {string} url The URL template or base URL
	   * @param {OpenSearchParameter[]} parameters The template/request parameters of the URL
	   * @param {string} [method='GET'] The HTTP method
	   * @param {string} [enctype='application/x-www-form-urlencoded'] The encoding type
	   * @param {Number} [indexOffset=1] The index offset of this URL
	   * @param {Number} [pageOffset=1] The page offset of this URL
	   * @param {string[]} [relations=['results']] The relations of this URL.
	   */
	  function OpenSearchUrl(type, url) {
	    var parameters = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
	    var method = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 'GET';
	    var enctype = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 'application/x-www-form-urlencoded';
	    var indexOffset = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 1;
	
	    var _this = this;
	
	    var pageOffset = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : 1;
	    var relations = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : ['results'];
	
	    _classCallCheck(this, OpenSearchUrl);
	
	    this._type = type;
	    this._url = url;
	    this._method = method;
	    this._enctype = enctype;
	    this._indexOffset = indexOffset;
	    this._pageOffset = pageOffset;
	    this._relations = relations;
	
	    this._parameters = parameters;
	    this._parametersByName = {};
	    this._parametersByType = {};
	    this._multiParameters = {};
	    parameters.forEach(function (param) {
	      var paramType = param.type;
	      if (Array.isArray(paramType)) {
	        for (var i = 0; i < paramType.length; ++i) {
	          _this._parametersByType[paramType[i]] = param;
	        }
	      } else {
	        _this._parametersByType[paramType] = param;
	      }
	      _this._parametersByName[param.name] = param;
	    });
	  }
	
	  /**
	   * The mime-type for the content the URL is referring to
	   * @readonly
	   */
	
	  _createClass(OpenSearchUrl, [{
	    key: 'hasParameter',
	
	    /**
	     * Returns whether the URL has a template parameter of the given type
	     * @param {string} type The parameter type to check
	     * @returns {boolean} Whether the URL has a parameter of that type
	     */
	    value: function hasParameter(type) {
	      return Object.prototype.hasOwnProperty.call(this._parametersByType, type);
	    }
	
	    /**
	     * Get the parameter of the specified type, if available
	     * @param {string} type The parameter type to check
	     * @returns {OpenSearchParameter} The parameter of the given type or null
	     */
	
	  }, {
	    key: 'getParameter',
	    value: function getParameter(type) {
	      return this._parametersByType[type];
	    }
	
	    /**
	     * Checks whether this URL is compatible with the given parameters
	     * @param {object} parameters An object mapping the name or type to the value
	     * @returns {boolean} Whether or not the URL is compatible with the given parameters
	     */
	
	  }, {
	    key: 'isCompatible',
	    value: function isCompatible(parameters) {
	      var _this2 = this;
	
	      var compatible = true;
	      Object.keys(parameters).forEach(function (key) {
	        if (!Object.prototype.hasOwnProperty.call(_this2._parametersByType, key) && !Object.prototype.hasOwnProperty.call(_this2._parametersByName, key)) {
	          compatible = false;
	        }
	      });
	      if (!compatible) {
	        return false;
	      }
	
	      if (this.getMissingMandatoryParameters(parameters).length) {
	        return false;
	      }
	      return true;
	    }
	
	    /**
	     *
	     */
	
	  }, {
	    key: 'getMissingMandatoryParameters',
	    value: function getMissingMandatoryParameters(parameterValues) {
	      return this.parameters.filter(function (parameter) {
	        return parameter.mandatory;
	      }).filter(function (parameter) {
	        return isParameterMissing(parameterValues, parameter);
	      });
	    }
	
	    /**
	     *
	     */
	
	  }, {
	    key: 'getMissingOptionalParameters',
	    value: function getMissingOptionalParameters(parameterValues) {
	      return this.parameters.filter(function (parameter) {
	        return !parameter.mandatory;
	      }).filter(function (parameter) {
	        return isParameterMissing(parameterValues, parameter);
	      });
	    }
	
	    /**
	     *
	     */
	
	  }, {
	    key: 'getUnsupportedParameterKeys',
	    value: function getUnsupportedParameterKeys(parameters) {
	      var _this3 = this;
	
	      return Object.keys(parameters).filter(function (key) {
	        return !Object.prototype.hasOwnProperty.call(_this3._parametersByType, key) && !Object.prototype.hasOwnProperty.call(_this3._parametersByName, key);
	      });
	    }
	
	    /**
	     * Checks and Serializes the given parameter values to an intermediate form:
	     * a list of triplets: parameter name, parameter type, serialized value.
	     * @param {object} values The parameter values to serialize
	     * @returns {array[]} An array of triplets
	     */
	
	  }, {
	    key: 'serializeValues',
	    value: function serializeValues(values) {
	      var _this4 = this;
	
	      Object.keys(values).forEach(function (key) {
	        if (!Object.prototype.hasOwnProperty.call(_this4._parametersByType, key) && !Object.prototype.hasOwnProperty.call(_this4._parametersByName, key)) {
	          throw new Error('Invalid parameter \'' + key + '\'.');
	        }
	      });
	
	      var missingMandatoryParameters = this.getMissingMandatoryParameters(values).map(function (parameter) {
	        return parameter.type;
	      });
	
	      if (missingMandatoryParameters.length) {
	        throw new Error('Missing mandatory parameters: ' + missingMandatoryParameters.join(', '));
	      }
	      var serialized = [];
	      var parameters = this.parameters;
	      for (var i = 0; i < parameters.length; ++i) {
	        var parameter = parameters[i];
	        if (parameter.isMulti) {
	          var types = parameter.type;
	          for (var j = 0; j < types.length; ++j) {
	            var type = types[j];
	            var value = void 0;
	            if (Array.isArray(values[parameter.name]) || _typeof(values[parameter.name]) === 'object') {
	              value = parameter.serializeValue(values[parameter.name], type);
	            } else {
	              value = parameter.serializeValue(values, type);
	            }
	            serialized.push([parameter.name, type, value]);
	          }
	        } else {
	          var _value = void 0;
	          if (Object.prototype.hasOwnProperty.call(values, parameter.name)) {
	            _value = parameter.serializeValue(values[parameter.name]);
	          } else if (Object.prototype.hasOwnProperty.call(values, parameter.type)) {
	            _value = parameter.serializeValue(values[parameter.type]);
	          } else {
	            _value = '';
	          }
	          serialized.push([parameter.name, parameter.type, _value]);
	        }
	      }
	      return serialized;
	    }
	
	    /**
	     * Construct a {@link OpenSearchUrl} from a DOMNode
	     * @param {DOMNode} node The DOM node from the OpenSearchDescription XML document
	     * @returns {OpenSearchUrl} The constructed OpenSearchUrl object
	     */
	
	  }, {
	    key: 'serialize',
	
	    /**
	     * Serialize the URL to a simple object.
	     * @returns {object} The serialized URL
	     */
	    value: function serialize() {
	      return {
	        type: this._type,
	        url: this._url,
	        method: this._method,
	        enctype: this._enctype,
	        indexOffset: this._indexOffset,
	        pageOffset: this._pageOffset,
	        relations: this._relations,
	        parameters: this._parameters.map(function (parameter) {
	          return parameter.serialize();
	        })
	      };
	    }
	
	    /**
	     * Deserialize a parameter from a simple object.
	     * @param {object} values The serialized URL
	     * @returns {OpenSearchUrl} The deserialized URL
	     */
	
	  }, {
	    key: 'type',
	    get: function get() {
	      return this._type;
	    }
	
	    /**
	     * The URL template or base URL
	     * @readonly
	     */
	
	  }, {
	    key: 'url',
	    get: function get() {
	      return this._url;
	    }
	
	    /**
	     * The HTTP method
	     * @readonly
	     */
	
	  }, {
	    key: 'method',
	    get: function get() {
	      return this._method;
	    }
	
	    /**
	     * The encoding type
	     * @readonly
	     */
	
	  }, {
	    key: 'enctype',
	    get: function get() {
	      return this._enctype;
	    }
	
	    /**
	     * The index offset of this URL
	     * @readonly
	     */
	
	  }, {
	    key: 'indexOffset',
	    get: function get() {
	      return this._indexOffset;
	    }
	
	    /**
	     * The page offset of this URL
	     * @readonly
	     */
	
	  }, {
	    key: 'pageOffset',
	    get: function get() {
	      return this._pageOffset;
	    }
	
	    /**
	     * The page offset of this URL
	     * @readonly
	     */
	
	  }, {
	    key: 'relations',
	    get: function get() {
	      return this._relations;
	    }
	
	    /**
	     * The template/request parameters of the URL
	     * @readonly
	     */
	
	  }, {
	    key: 'parameters',
	    get: function get() {
	      return this._parameters;
	    }
	  }], [{
	    key: 'fromNode',
	    value: function fromNode(node) {
	      var parameterNodes = (0, _utils.getElements)(node, 'parameters', 'Parameter');
	      var method = (0, _utils.getAttributeNS)(node, 'parameters', 'method');
	      var enctype = (0, _utils.getAttributeNS)(node, 'parameters', 'enctype');
	      var indexOffset = node.hasAttribute('indexOffset') ? parseInt(node.getAttribute('indexOffset'), 10) : 1;
	      var pageOffset = node.hasAttribute('pageOffset') ? parseInt(node.getAttribute('pageOffset'), 10) : 1;
	      var rel = node.getAttribute('rel');
	      var relations = !rel || rel === '' ? undefined : rel.split(' ');
	
	      var parsed = (0, _urlParse2.default)(node.getAttribute('template'), true);
	      var parametersFromTemplate = Object.keys(parsed.query).map(function (name) {
	        return _parameter.OpenSearchParameter.fromKeyValuePair(name, parsed.query[name]);
	      }).filter(function (parameter) {
	        return parameter;
	      });
	      var parametersFromNode = parameterNodes.map(_parameter.OpenSearchParameter.fromNode);
	
	      var parametersNotInTemplate = parametersFromNode.filter(function (p1) {
	        return !(0, _utils.find)(parametersFromTemplate, function (p2) {
	          return p1.name === p2.name;
	        });
	      }).map(function (param) {
	        // eslint-disable-next-line no-underscore-dangle, no-param-reassign
	        param._mandatory = typeof param.mandatory === 'undefined' ? true : param.mandatory;
	        return param;
	      });
	
	      // merge parameters from node and template
	      var parameters = parametersFromTemplate.map(function (p1) {
	        var p2 = (0, _utils.find)(parametersFromNode, function (p) {
	          return p1.name === p.name;
	        });
	        if (p2) {
	          return p1.combined(p2);
	        }
	        return p1;
	      }).concat(parametersNotInTemplate);
	
	      return new OpenSearchUrl(node.getAttribute('type'), node.getAttribute('template'), parameters, method, enctype, indexOffset, pageOffset, relations);
	    }
	
	    /**
	     * Construct a {@link OpenSearchUrl} from a template URL
	     * @param {string} type The mime-type
	     * @param {string} templateUrl The template URL string.
	     * @param {string} [method='GET'] The HTTP method
	     * @param {string} [enctype='application/x-www-form-urlencoded'] The encoding type
	     * @returns {OpenSearchUrl} The constructed OpenSearchUrl object
	     */
	
	  }, {
	    key: 'fromTemplateUrl',
	    value: function fromTemplateUrl(type, templateUrl) {
	      var method = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'GET';
	      var enctype = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 'application/x-www-form-urlencoded';
	
	      var parsed = (0, _urlParse2.default)(templateUrl, true);
	      var parameters = Object.keys(parsed.query).map(function (name) {
	        return _parameter.OpenSearchParameter.fromKeyValuePair(name, parsed.query[name]);
	      }).filter(function (parameter) {
	        return parameter;
	      });
	      return new OpenSearchUrl(type, templateUrl, parameters, method, enctype);
	    }
	  }, {
	    key: 'deserialize',
	    value: function deserialize(values) {
	      return new OpenSearchUrl(values.type, values.url, values.parameters.map(function (parameterDesc) {
	        return _parameter.OpenSearchParameter.deserialize(parameterDesc);
	      }), values.method, values.enctype, values.indexOffset, values.pageOffset, values.relations);
	    }
	  }]);
	
	  return OpenSearchUrl;
	}();

/***/ }),
/* 667 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	var convert = __webpack_require__(542);
	
	module.exports = function (cstr) {
	    var m, conv, parts, alpha;
	    if (m = /^((?:rgb|hs[lv]|cmyk|xyz|lab)a?)\s*\(([^\)]*)\)/.exec(cstr)) {
	        var name = m[1];
	        var base = name.replace(/a$/, '');
	        var size = base === 'cmyk' ? 4 : 3;
	        conv = convert[base];
	
	        parts = m[2].replace(/^\s+|\s+$/g, '').split(/\s*,\s*/).map(function (x, i) {
	            if (/%$/.test(x) && i === size) {
	                return parseFloat(x) / 100;
	            } else if (/%$/.test(x)) {
	                return parseFloat(x);
	            }
	            return parseFloat(x);
	        });
	        if (name === base) parts.push(1);
	        alpha = parts[size] === undefined ? 1 : parts[size];
	        parts = parts.slice(0, size);
	
	        conv[base] = function () {
	            return parts;
	        };
	    } else if (/^#[A-Fa-f0-9]+$/.test(cstr)) {
	        var base = cstr.replace(/^#/, '');
	        var size = base.length;
	        conv = convert.rgb;
	        parts = base.split(size === 3 ? /(.)/ : /(..)/);
	        parts = parts.filter(Boolean).map(function (x) {
	            if (size === 3) {
	                return parseInt(x + x, 16);
	            } else {
	                return parseInt(x, 16);
	            }
	        });
	        alpha = 1;
	        conv.rgb = function () {
	            return parts;
	        };
	        if (!parts[0]) parts[0] = 0;
	        if (!parts[1]) parts[1] = 0;
	        if (!parts[2]) parts[2] = 0;
	    } else {
	        conv = convert.keyword;
	        conv.keyword = function () {
	            return cstr;
	        };
	        parts = cstr;
	        alpha = 1;
	    }
	
	    var res = {
	        rgb: undefined,
	        hsl: undefined,
	        hsv: undefined,
	        cmyk: undefined,
	        keyword: undefined,
	        hex: undefined
	    };
	    try {
	        res.rgb = conv.rgb(parts);
	    } catch (e) {}
	    try {
	        res.hsl = conv.hsl(parts);
	    } catch (e) {}
	    try {
	        res.hsv = conv.hsv(parts);
	    } catch (e) {}
	    try {
	        res.cmyk = conv.cmyk(parts);
	    } catch (e) {}
	    try {
	        res.keyword = conv.keyword(parts);
	    } catch (e) {}
	
	    if (res.rgb) res.hex = '#' + res.rgb.map(function (x) {
	        var s = x.toString(16);
	        if (s.length === 1) return '0' + s;
	        return s;
	    }).join('');
	
	    if (res.rgb) res.rgba = res.rgb.concat(alpha);
	    if (res.hsl) res.hsla = res.hsl.concat(alpha);
	    if (res.hsv) res.hsva = res.hsv.concat(alpha);
	    if (res.cmyk) res.cmyka = res.cmyk.concat(alpha);
	
	    return res;
	};

/***/ }),
/* 668 */
/***/ (function(module, exports) {

	/* WEBPACK VAR INJECTION */(function(global) {'use strict';
	
	var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
	
	/**
	 *
	 *
	 * @author Jerry Bendy <jerry@icewingcc.com>
	 * @licence MIT
	 *
	 */
	
	(function (self) {
	    'use strict';
	
	    var nativeURLSearchParams = function () {
	        // #41 Fix issue in RN
	        try {
	            if (self.URLSearchParams && new self.URLSearchParams('foo=bar').get('foo') === 'bar') {
	                return self.URLSearchParams;
	            }
	        } catch (e) {}
	        return null;
	    }(),
	        isSupportObjectConstructor = nativeURLSearchParams && new nativeURLSearchParams({ a: 1 }).toString() === 'a=1',
	
	    // There is a bug in safari 10.1 (and earlier) that incorrectly decodes `%2B` as an empty space and not a plus.
	    decodesPlusesCorrectly = nativeURLSearchParams && new nativeURLSearchParams('s=%2B').get('s') === '+',
	        __URLSearchParams__ = "__URLSearchParams__",
	
	    // Fix bug in Edge which cannot encode ' &' correctly
	    encodesAmpersandsCorrectly = nativeURLSearchParams ? function () {
	        var ampersandTest = new nativeURLSearchParams();
	        ampersandTest.append('s', ' &');
	        return ampersandTest.toString() === 's=+%26';
	    }() : true,
	        prototype = URLSearchParamsPolyfill.prototype,
	        iterable = !!(self.Symbol && self.Symbol.iterator);
	
	    if (nativeURLSearchParams && isSupportObjectConstructor && decodesPlusesCorrectly && encodesAmpersandsCorrectly) {
	        return;
	    }
	
	    /**
	     * Make a URLSearchParams instance
	     *
	     * @param {object|string|URLSearchParams} search
	     * @constructor
	     */
	    function URLSearchParamsPolyfill(search) {
	        search = search || "";
	
	        // support construct object with another URLSearchParams instance
	        if (search instanceof URLSearchParams || search instanceof URLSearchParamsPolyfill) {
	            search = search.toString();
	        }
	        this[__URLSearchParams__] = parseToDict(search);
	    }
	
	    /**
	     * Appends a specified key/value pair as a new search parameter.
	     *
	     * @param {string} name
	     * @param {string} value
	     */
	    prototype.append = function (name, value) {
	        appendTo(this[__URLSearchParams__], name, value);
	    };
	
	    /**
	     * Deletes the given search parameter, and its associated value,
	     * from the list of all search parameters.
	     *
	     * @param {string} name
	     */
	    prototype['delete'] = function (name) {
	        delete this[__URLSearchParams__][name];
	    };
	
	    /**
	     * Returns the first value associated to the given search parameter.
	     *
	     * @param {string} name
	     * @returns {string|null}
	     */
	    prototype.get = function (name) {
	        var dict = this[__URLSearchParams__];
	        return this.has(name) ? dict[name][0] : null;
	    };
	
	    /**
	     * Returns all the values association with a given search parameter.
	     *
	     * @param {string} name
	     * @returns {Array}
	     */
	    prototype.getAll = function (name) {
	        var dict = this[__URLSearchParams__];
	        return this.has(name) ? dict[name].slice(0) : [];
	    };
	
	    /**
	     * Returns a Boolean indicating if such a search parameter exists.
	     *
	     * @param {string} name
	     * @returns {boolean}
	     */
	    prototype.has = function (name) {
	        return hasOwnProperty(this[__URLSearchParams__], name);
	    };
	
	    /**
	     * Sets the value associated to a given search parameter to
	     * the given value. If there were several values, delete the
	     * others.
	     *
	     * @param {string} name
	     * @param {string} value
	     */
	    prototype.set = function set(name, value) {
	        this[__URLSearchParams__][name] = ['' + value];
	    };
	
	    /**
	     * Returns a string containg a query string suitable for use in a URL.
	     *
	     * @returns {string}
	     */
	    prototype.toString = function () {
	        var dict = this[__URLSearchParams__],
	            query = [],
	            i,
	            key,
	            name,
	            value;
	        for (key in dict) {
	            name = encode(key);
	            for (i = 0, value = dict[key]; i < value.length; i++) {
	                query.push(name + '=' + encode(value[i]));
	            }
	        }
	        return query.join('&');
	    };
	
	    // There is a bug in Safari 10.1 and `Proxy`ing it is not enough.
	    var forSureUsePolyfill = !decodesPlusesCorrectly;
	    var useProxy = !forSureUsePolyfill && nativeURLSearchParams && !isSupportObjectConstructor && self.Proxy;
	    /*
	     * Apply polifill to global object and append other prototype into it
	     */
	    Object.defineProperty(self, 'URLSearchParams', {
	        value: useProxy ?
	        // Safari 10.0 doesn't support Proxy, so it won't extend URLSearchParams on safari 10.0
	        new Proxy(nativeURLSearchParams, {
	            construct: function construct(target, args) {
	                return new target(new URLSearchParamsPolyfill(args[0]).toString());
	            }
	        }) : URLSearchParamsPolyfill
	    });
	
	    var USPProto = self.URLSearchParams.prototype;
	
	    USPProto.polyfill = true;
	
	    /**
	     *
	     * @param {function} callback
	     * @param {object} thisArg
	     */
	    USPProto.forEach = USPProto.forEach || function (callback, thisArg) {
	        var dict = parseToDict(this.toString());
	        Object.getOwnPropertyNames(dict).forEach(function (name) {
	            dict[name].forEach(function (value) {
	                callback.call(thisArg, value, name, this);
	            }, this);
	        }, this);
	    };
	
	    /**
	     * Sort all name-value pairs
	     */
	    USPProto.sort = USPProto.sort || function () {
	        var dict = parseToDict(this.toString()),
	            keys = [],
	            k,
	            i,
	            j;
	        for (k in dict) {
	            keys.push(k);
	        }
	        keys.sort();
	
	        for (i = 0; i < keys.length; i++) {
	            this['delete'](keys[i]);
	        }
	        for (i = 0; i < keys.length; i++) {
	            var key = keys[i],
	                values = dict[key];
	            for (j = 0; j < values.length; j++) {
	                this.append(key, values[j]);
	            }
	        }
	    };
	
	    /**
	     * Returns an iterator allowing to go through all keys of
	     * the key/value pairs contained in this object.
	     *
	     * @returns {function}
	     */
	    USPProto.keys = USPProto.keys || function () {
	        var items = [];
	        this.forEach(function (item, name) {
	            items.push(name);
	        });
	        return makeIterator(items);
	    };
	
	    /**
	     * Returns an iterator allowing to go through all values of
	     * the key/value pairs contained in this object.
	     *
	     * @returns {function}
	     */
	    USPProto.values = USPProto.values || function () {
	        var items = [];
	        this.forEach(function (item) {
	            items.push(item);
	        });
	        return makeIterator(items);
	    };
	
	    /**
	     * Returns an iterator allowing to go through all key/value
	     * pairs contained in this object.
	     *
	     * @returns {function}
	     */
	    USPProto.entries = USPProto.entries || function () {
	        var items = [];
	        this.forEach(function (item, name) {
	            items.push([name, item]);
	        });
	        return makeIterator(items);
	    };
	
	    if (iterable) {
	        USPProto[self.Symbol.iterator] = USPProto[self.Symbol.iterator] || USPProto.entries;
	    }
	
	    function encode(str) {
	        var replace = {
	            '!': '%21',
	            "'": '%27',
	            '(': '%28',
	            ')': '%29',
	            '~': '%7E',
	            '%20': '+',
	            '%00': '\x00'
	        };
	        return encodeURIComponent(str).replace(/[!'\(\)~]|%20|%00/g, function (match) {
	            return replace[match];
	        });
	    }
	
	    function decode(str) {
	        return str.replace(/[ +]/g, '%20').replace(/(%[a-f0-9]{2})+/ig, function (match) {
	            return decodeURIComponent(match);
	        });
	    }
	
	    function makeIterator(arr) {
	        var iterator = {
	            next: function next() {
	                var value = arr.shift();
	                return { done: value === undefined, value: value };
	            }
	        };
	
	        if (iterable) {
	            iterator[self.Symbol.iterator] = function () {
	                return iterator;
	            };
	        }
	
	        return iterator;
	    }
	
	    function parseToDict(search) {
	        var dict = {};
	
	        if ((typeof search === 'undefined' ? 'undefined' : _typeof(search)) === "object") {
	            // if `search` is an array, treat it as a sequence
	            if (isArray(search)) {
	                for (var i = 0; i < search.length; i++) {
	                    var item = search[i];
	                    if (isArray(item) && item.length === 2) {
	                        appendTo(dict, item[0], item[1]);
	                    } else {
	                        throw new TypeError("Failed to construct 'URLSearchParams': Sequence initializer must only contain pair elements");
	                    }
	                }
	            } else {
	                for (var key in search) {
	                    if (search.hasOwnProperty(key)) {
	                        appendTo(dict, key, search[key]);
	                    }
	                }
	            }
	        } else {
	            // remove first '?'
	            if (search.indexOf("?") === 0) {
	                search = search.slice(1);
	            }
	
	            var pairs = search.split("&");
	            for (var j = 0; j < pairs.length; j++) {
	                var value = pairs[j],
	                    index = value.indexOf('=');
	
	                if (-1 < index) {
	                    appendTo(dict, decode(value.slice(0, index)), decode(value.slice(index + 1)));
	                } else {
	                    if (value) {
	                        appendTo(dict, decode(value), '');
	                    }
	                }
	            }
	        }
	
	        return dict;
	    }
	
	    function appendTo(dict, name, value) {
	        var val = typeof value === 'string' ? value : value !== null && value !== undefined && typeof value.toString === 'function' ? value.toString() : JSON.stringify(value);
	
	        // #47 Prevent using `hasOwnProperty` as a property name
	        if (hasOwnProperty(dict, name)) {
	            dict[name].push(val);
	        } else {
	            dict[name] = [val];
	        }
	    }
	
	    function isArray(val) {
	        return !!val && '[object Array]' === Object.prototype.toString.call(val);
	    }
	
	    function hasOwnProperty(obj, prop) {
	        return Object.prototype.hasOwnProperty.call(obj, prop);
	    }
	})(typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : undefined);
	/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))

/***/ }),
/* 669 */
/***/ (function(module, exports, __webpack_require__) {

	/* WEBPACK VAR INJECTION */(function(Promise) {'use strict';
	
	var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
	
	var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); // require styles
	// eslint-disable-line import/no-extraneous-dependencies
	// eslint-disable-line import/no-extraneous-dependencies
	
	
	// import './static/code-de.css';
	
	
	__webpack_require__(1110);
	
	var _jquery = __webpack_require__(12);
	
	var _jquery2 = _interopRequireDefault(_jquery);
	
	__webpack_require__(223);
	
	__webpack_require__(668);
	
	var _underscore = __webpack_require__(33);
	
	var _underscore2 = _interopRequireDefault(_underscore);
	
	var _backbone = __webpack_require__(24);
	
	var _backbone2 = _interopRequireDefault(_backbone);
	
	var _backbone3 = __webpack_require__(11);
	
	var _backbone4 = _interopRequireDefault(_backbone3);
	
	__webpack_require__(726);
	
	var _LayersCollection = __webpack_require__(233);
	
	var _LayersCollection2 = _interopRequireDefault(_LayersCollection);
	
	var _MapModel = __webpack_require__(240);
	
	var _MapModel2 = _interopRequireDefault(_MapModel);
	
	var _FiltersModel = __webpack_require__(119);
	
	var _FiltersModel2 = _interopRequireDefault(_FiltersModel);
	
	var _HighlightModel = __webpack_require__(239);
	
	var _HighlightModel2 = _interopRequireDefault(_HighlightModel);
	
	var _TimeSliderView = __webpack_require__(553);
	
	var _TimeSliderView2 = _interopRequireDefault(_TimeSliderView);
	
	var _LayerControlLayoutView = __webpack_require__(532);
	
	var _LayerControlLayoutView2 = _interopRequireDefault(_LayerControlLayoutView);
	
	var _LayerOptionsModalView = __webpack_require__(556);
	
	var _LayerOptionsModalView2 = _interopRequireDefault(_LayerOptionsModalView);
	
	var _SearchResultView = __webpack_require__(570);
	
	var _SearchResultView2 = _interopRequireDefault(_SearchResultView);
	
	var _SearchModel = __webpack_require__(566);
	
	var _SearchModel2 = _interopRequireDefault(_SearchModel);
	
	var _search = __webpack_require__(168);
	
	var _utils = __webpack_require__(141);
	
	var _package = __webpack_require__(1064);
	
	var _DownloadOptionsModel = __webpack_require__(558);
	
	var _DownloadOptionsModel2 = _interopRequireDefault(_DownloadOptionsModel);
	
	var _DownloadSelectionView = __webpack_require__(562);
	
	var _DownloadSelectionView2 = _interopRequireDefault(_DownloadSelectionView);
	
	var _DownloadOptionsModalView = __webpack_require__(561);
	
	var _DownloadOptionsModalView2 = _interopRequireDefault(_DownloadOptionsModalView);
	
	var _FullResolutionDownloadOptionsModalView = __webpack_require__(533);
	
	var _FullResolutionDownloadOptionsModalView2 = _interopRequireDefault(_FullResolutionDownloadOptionsModalView);
	
	var _processing = __webpack_require__(564);
	
	var _OpenLayersMapView = __webpack_require__(238);
	
	var _OpenLayersMapView2 = _interopRequireDefault(_OpenLayersMapView);
	
	var _RootLayoutView = __webpack_require__(674);
	
	var _RootLayoutView2 = _interopRequireDefault(_RootLayoutView);
	
	var _RootFiltersView = __webpack_require__(691);
	
	var _RootFiltersView2 = _interopRequireDefault(_RootFiltersView);
	
	var _SidePanelView = __webpack_require__(676);
	
	var _SidePanelView2 = _interopRequireDefault(_SidePanelView);
	
	var _StopSelectionView = __webpack_require__(677);
	
	var _StopSelectionView2 = _interopRequireDefault(_StopSelectionView);
	
	var _WarningsView = __webpack_require__(678);
	
	var _WarningsView2 = _interopRequireDefault(_WarningsView);
	
	var _RecordsDetailsModalView = __webpack_require__(673);
	
	var _RecordsDetailsModalView2 = _interopRequireDefault(_RecordsDetailsModalView);
	
	var _SelectFilesModalView = __webpack_require__(675);
	
	var _SelectFilesModalView2 = _interopRequireDefault(_SelectFilesModalView);
	
	var _CombinedResultView = __webpack_require__(679);
	
	var _CombinedResultView2 = _interopRequireDefault(_CombinedResultView);
	
	var _WarningsCollection = __webpack_require__(670);
	
	var _WarningsCollection2 = _interopRequireDefault(_WarningsCollection);
	
	var _tutorial = __webpack_require__(672);
	
	var _tutorial2 = _interopRequireDefault(_tutorial);
	
	var _utils2 = __webpack_require__(312);
	
	var _i18next = __webpack_require__(190);
	
	var _i18next2 = _interopRequireDefault(_i18next);
	
	var _package2 = __webpack_require__(1066);
	
	var _no_thumbnail_available = __webpack_require__(1161);
	
	var _no_thumbnail_available2 = _interopRequireDefault(_no_thumbnail_available);
	
	__webpack_require__(1129);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
	
	var englishTranslation = __webpack_require__(1067);
	
	function combineParameter(setting, param) {
	  var options = setting.options || param.options;
	  return {
	    type: param.type,
	    name: param.name,
	    title: param.title || setting.title,
	    mandatory: setting.mandatory || param.mandatory,
	    options: options,
	    minExclusive: param.minExclusive,
	    maxExclusive: param.maxExclusive,
	    minInclusive: param.minInclusive,
	    maxInclusive: param.maxInclusive,
	    range: setting.range,
	    min: setting.min,
	    max: setting.max,
	    step: setting.step || 1,
	    default: setting.default || setting.fixed,
	    fixed: setting.fixed
	  };
	}
	
	window.Application = _backbone4.default.Application.extend({
	  initialize: function initialize(_ref) {
	    var config = _ref.config,
	        configPath = _ref.configPath,
	        container = _ref.container,
	        navbarTemplate = _ref.navbarTemplate;
	
	    this.config = config;
	    this.configPath = configPath;
	    this.container = container;
	    this.navbarTemplate = navbarTemplate;
	  },
	  onStart: function onStart() {
	    var _this = this;
	
	    if (this.config) {
	      this.onConfigLoaded(this.config);
	    } else {
	      _jquery2.default.getJSON(this.configPath, function (config) {
	        _this.onConfigLoaded(config);
	      });
	    }
	  },
	  onConfigLoaded: function onConfigLoaded(config) {
	    var _this2 = this;
	
	    this.config = config;
	    _i18next2.default.init({
	      nsSeparator: '#',
	      lng: this.config.settings.language || 'en',
	      fallbackLng: 'en',
	      resources: {
	        en: {
	          translation: englishTranslation
	        }
	      }
	    }, function () {
	      _this2.onI18NextInitialized(config);
	    });
	  },
	  onI18NextInitialized: function onI18NextInitialized(config) {
	    var _this3 = this;
	
	    var baseLayersCollection = new _LayersCollection2.default(config.baseLayers, {
	      exclusiveVisibility: true
	    });
	    var layersCollection = new _LayersCollection2.default(config.layers);
	    var overlayLayersCollection = new _LayersCollection2.default(config.overlayLayers);
	
	    var promises = layersCollection.map(function (layerModel) {
	      var parameterSettings = layerModel.get('search.parameters') || config.settings.parameters;
	      if (layerModel.get('search.protocol') && parameterSettings) {
	        return (0, _search.getParameters)(layerModel).then(function (parameters) {
	          return [layerModel, parameters, null];
	        }).catch(function (error) {
	          return [layerModel, null, error];
	        });
	      }
	      return null;
	    }).filter(function (promise) {
	      return !!promise;
	    });
	
	    if (promises.length) {
	      Promise.all(promises).then(function (layersPlusParametersPlusErrors) {
	        var failedLayers = layersPlusParametersPlusErrors.filter(function (layerPlusParameters) {
	          return layerPlusParameters[2];
	        }).map(function (layerPlusParameters) {
	          return layerPlusParameters[0];
	        });
	
	        layersPlusParametersPlusErrors.filter(function (layerPlusParameters) {
	          return !layerPlusParameters[2];
	        }).forEach(function (_ref2) {
	          var _ref3 = _slicedToArray(_ref2, 2),
	              layerModel = _ref3[0],
	              retrievedParameters = _ref3[1];
	
	          var parameterSettings = layerModel.get('search.parameters') || config.settings.parameters;
	          var combinedParameters = parameterSettings.map(function (param) {
	            var retrievedParameter = retrievedParameters.find(function (p) {
	              return p.type === param.type;
	            });
	            if (!retrievedParameter) {
	              console.warn(layerModel.get('displayName') + ' does not have a parameter ' + param.type);
	              return null;
	            }
	            return combineParameter(param, retrievedParameter);
	          }).filter(function (param) {
	            return !!param;
	          });
	
	          layerModel.set('search.parameters', combinedParameters);
	        });
	        _this3.onRun(config, baseLayersCollection, layersCollection, overlayLayersCollection, failedLayers);
	      });
	    } else {
	      this.onRun(config, baseLayersCollection, layersCollection, overlayLayersCollection, []);
	    }
	  },
	  onRun: function onRun(config, baseLayersCollection, layersCollection, overlayLayersCollection, failedLayers) {
	    var _this4 = this;
	
	    var configSettings = config.settings;
	
	    // allow custom translations from the settings
	    if (configSettings.translations) {
	      Object.keys(configSettings.translations).forEach(function (lng) {
	        return _i18next2.default.addResourceBundle(lng, 'translation', configSettings.translations[lng], true, true);
	      });
	    }
	
	    _underscore2.default.defaults(configSettings, {
	      center: [0, 0],
	      zoom: 2,
	      minZoom: 0,
	      maxZoom: 28,
	      searchDebounceTime: 250,
	      constrainTimeDomain: false,
	      displayInterval: null,
	      selectableInterval: null,
	      maxTooltips: null,
	      timeSliderControls: false,
	      maxMapInterval: null,
	      constrainOutCoords: false,
	      highlightFillColor: 'rgba(255, 255, 255, 0.2)',
	      highlightStrokeColor: '#cccccc',
	      highlightStrokeWidth: 1,
	      filterFillColor: 'rgba(0, 165, 255, 0)',
	      filterStrokeColor: 'rgba(0, 165, 255, 1)',
	      filterOutsideColor: 'rgba(0, 0, 0, 0.5)',
	      footprintFillColor: 'rgba(255, 255, 255, 0.2)',
	      footprintStrokeColor: '#cccccc',
	      selectedFootprintFillColor: 'rgba(255, 0, 0, 0.2)',
	      selectedFootprintStrokeColor: '#ff0000',
	      leftPanelOpen: false,
	      rightPanelOpen: false,
	      leftPanelTabIndex: 0,
	      rightPanelTabIndex: 0,
	      enableSingleLayerMode: true,
	      disableSearchParams: false,
	      downloadFormats: [],
	      downloadProjections: [],
	      downloadInterpolations: [],
	      uploadEnabled: true,
	      downloadEnabled: true,
	      searchEnabled: true,
	      selectFilesDownloadEnabled: true,
	      filterSettings: null
	    });
	    // determine if singleLayerModeUsed
	    var searchEnabledLayers = layersCollection.filter(function (layerModel) {
	      return layerModel.get('search.protocol');
	    });
	    var singleLayerModeUsed = searchEnabledLayers.length === 1 && configSettings.enableSingleLayerMode;
	
	    // intercept searchParams to see if config change from user (url)
	    var settings = (0, _utils2.updateConfigBySearchParams)(configSettings);
	    if (singleLayerModeUsed && !config.disableSearchParams) {
	      // intercept searchParams to see if custom filters set from user (url)
	      (0, _utils2.updateFiltersBySearchParams)(searchEnabledLayers);
	    }
	
	    // set up config
	    var mapModel = new _MapModel2.default({
	      center: settings.center,
	      zoom: settings.zoom,
	      minZoom: settings.minZoom,
	      maxZoom: settings.maxZoom,
	      projection: settings.projection,
	      maxMapInterval: (0, _utils.parseDuration)(settings.maxMapInterval),
	      time: [new Date(settings.selectedTimeDomain[0]), new Date(settings.selectedTimeDomain[1])]
	    });
	    var filtersModel = new _FiltersModel2.default({});
	    var highlightModel = new _HighlightModel2.default();
	
	    var searchModels = searchEnabledLayers.map(function (layerModel) {
	      return new _SearchModel2.default({
	        layerModel: layerModel,
	        // apply defaults / fixed values
	        filtersModel: new _FiltersModel2.default((layerModel.get('search.parameters') || []).reduce(function (acc, param) {
	          return param.default || param.fixed ? Object.assign(acc, _defineProperty({}, param.type, param.default || param.fixed)) : acc;
	        }, {})),
	        mapModel: mapModel,
	        defaultPageSize: layerModel.get('search.pageSize'),
	        maxCount: layerModel.get('search.searchLimit'),
	        loadMore: layerModel.get('search.loadMore'),
	        extraParameters: layerModel.get('search.extraParameters'),
	        searchEnabled: typeof layerModel.get('search.searchEnabled') !== 'undefined' ? layerModel.get('search.searchEnabled') : settings.searchEnabled,
	        debounceTime: settings.searchDebounceTime
	      });
	    });
	    var searchCollection = new _backbone2.default.Collection(searchModels);
	
	    if (singleLayerModeUsed && !config.disableSearchParams) {
	      // update url searchParams when filter change listener
	      searchModels[0].get('filtersModel').on('change', function (fModel) {
	        (0, _utils2.setSearchParamsFilterChange)(fModel);
	      });
	    }
	
	    // set up layout
	    var layout = new _RootLayoutView2.default({
	      el: (0, _jquery2.default)(this.container),
	      mapModel: mapModel,
	      searchCollection: searchCollection
	    });
	    layout.render();
	
	    var domain = {
	      start: new Date(settings.timeDomain[0]),
	      end: new Date(settings.timeDomain[1])
	    };
	    var display = settings.displayTimeDomain ? {
	      start: new Date(settings.displayTimeDomain[0]),
	      end: new Date(settings.displayTimeDomain[1])
	    } : domain;
	
	    layout.showChildView('timeSlider', new _TimeSliderView2.default({
	      layersCollection: layersCollection,
	      baseLayersCollection: baseLayersCollection,
	      overlayLayersCollection: overlayLayersCollection,
	      mapModel: mapModel,
	      filtersModel: filtersModel,
	      highlightModel: highlightModel,
	      highlightFillColor: settings.highlightFillColor,
	      highlightStrokeColor: settings.highlightStrokeColor,
	      filterFillColor: settings.filterFillColor,
	      filterStrokeColor: settings.filterStrokeColor,
	      filterOutsideColor: settings.filterOutsideColor,
	      domain: domain,
	      display: display,
	      constrainTimeDomain: settings.constrainTimeDomain,
	      timeSliderControls: settings.timeSliderControls,
	      timeSliderAlternativeBrush: settings.timeSliderAlternativeBrush,
	      displayInterval: settings.displayInterval,
	      selectableInterval: settings.selectableInterval,
	      maxTooltips: settings.maxTooltips,
	      enableDynamicHistogram: settings.enableDynamicHistogram,
	      singleLayerModeUsed: singleLayerModeUsed
	    }));
	
	    // set up panels
	
	    var startDownload = function startDownload(records) {
	      layout.showChildView('modals', new _DownloadOptionsModalView2.default({
	        records: records,
	        searchCollection: new _backbone2.default.Collection(searchCollection.filter(function (searchModel) {
	          return searchModel.get('layerModel').get('download.protocol') !== 'S3';
	        })),
	        filtersModel: filtersModel,
	        mapModel: mapModel,
	        model: new _DownloadOptionsModel2.default({
	          availableDownloadFormats: settings.downloadFormats,
	          availableProjections: settings.downloadProjections,
	          availableInterpolations: settings.downloadInterpolations
	        })
	      }));
	    };
	
	    var showRecordDetails = function showRecordDetails(records) {
	      layout.showChildView('modals', new _RecordsDetailsModalView2.default({
	        baseLayersCollection: baseLayersCollection,
	        overlayLayersCollection: overlayLayersCollection,
	        layersCollection: layersCollection,
	        records: records,
	        highlightFillColor: settings.highlightFillColor,
	        highlightStrokeColor: settings.highlightStrokeColor,
	        filterFillColor: settings.filterFillColor,
	        filterStrokeColor: settings.filterStrokeColor,
	        filterOutsideColor: settings.filterOutsideColor,
	        onStartDownload: startDownload,
	        projection: settings.projection
	      }));
	    };
	
	    var selectFiles = settings.selectFilesDownloadEnabled ? function () {
	      layout.showChildView('modals', new _SelectFilesModalView2.default({
	        collection: searchCollection,
	        onStartDownload: startDownload
	      }));
	    } : undefined;
	
	    layersCollection.on('show-options', function (layerModel, useDetailsDisplay) {
	      layout.showChildView('topModals', new _LayerOptionsModalView2.default({ model: layerModel, useDetailsDisplay: useDetailsDisplay }));
	    });
	
	    layersCollection.on('download-full-resolution', function (layerModel) {
	      var searchModel = searchCollection.find(function (model) {
	        return model.get('layerModel') === layerModel;
	      });
	      layout.showChildView('modals', new _FullResolutionDownloadOptionsModalView2.default({
	        layerModel: layerModel,
	        mapModel: mapModel,
	        filtersModel: searchModel ? searchModel.get('filtersModel') : null,
	        model: new _DownloadOptionsModel2.default({
	          availableDownloadFormats: settings.downloadFormats,
	          availableProjections: settings.downloadProjections
	        })
	      }));
	    });
	
	    searchCollection.on('start-processing', function (searchModel) {
	      (0, _processing.sendProcessingRequest)(searchModel, mapModel);
	    });
	
	    var mainOLView = new _OpenLayersMapView2.default({
	      mapModel: mapModel,
	      filtersModel: filtersModel,
	      baseLayersCollection: baseLayersCollection,
	      overlayLayersCollection: overlayLayersCollection,
	      layersCollection: layersCollection,
	      searchCollection: searchCollection,
	      highlightModel: highlightModel,
	      highlightFillColor: settings.highlightFillColor,
	      highlightStrokeColor: settings.highlightStrokeColor,
	      highlightStrokeWidth: settings.highlightStrokeWidth,
	      filterFillColor: settings.filterFillColor,
	      filterStrokeColor: settings.filterStrokeColor,
	      filterOutsideColor: settings.filterOutsideColor,
	      footprintFillColor: settings.footprintFillColor,
	      footprintStrokeColor: settings.footprintStrokeColor,
	      selectedFootprintFillColor: settings.selectedFootprintFillColor,
	      selectedFootprintStrokeColor: settings.selectedFootprintStrokeColor,
	      onFeatureClicked: function onFeatureClicked(records) {
	        showRecordDetails(records);
	      },
	
	      constrainOutCoords: settings.constrainOutCoords,
	      singleLayerModeUsed: singleLayerModeUsed
	    });
	
	    layout.showChildView('content', mainOLView);
	    if (!config.disableSearchParams && typeof mainOLView.setupSearchParamsEvents === 'function') {
	      mainOLView.setupSearchParamsEvents();
	      mainOLView.setSearchParamCenter();
	      // zoom is not explicitely set, as some other event already triggers it
	    }
	
	    layout.showChildView('leftPanel', new _SidePanelView2.default({
	      position: 'left',
	      icon: 'fa-cog',
	      defaultOpen: settings.leftPanelOpen,
	      openTabIndex: settings.leftPanelTabIndex,
	      views: [{
	        name: 'Filters',
	        view: new _RootFiltersView2.default({
	          filtersModel: filtersModel,
	          layersCollection: layersCollection,
	          baseLayersCollection: baseLayersCollection,
	          overlayLayersCollection: overlayLayersCollection,
	          mapModel: mapModel,
	          highlightModel: highlightModel,
	          searchCollection: searchCollection,
	          uploadEnabled: settings.uploadEnabled,
	          domain: domain,
	          constrainTimeDomain: settings.constrainTimeDomain,
	          filterSettings: settings.filterSettings,
	          singleLayerModeUsed: singleLayerModeUsed
	        })
	      }, {
	        name: 'Layers',
	        view: new _LayerControlLayoutView2.default({
	          mapModel: mapModel,
	          filtersModel: filtersModel,
	          baseLayersCollection: baseLayersCollection,
	          overlayLayersCollection: overlayLayersCollection,
	          layersCollection: layersCollection
	        })
	      }]
	    }));
	
	    var termsAndConditionsUrl = settings.termsAndConditionsUrl;
	    if ((typeof termsAndConditionsUrl === 'undefined' ? 'undefined' : _typeof(termsAndConditionsUrl)) === 'object') {
	      termsAndConditionsUrl = termsAndConditionsUrl[settings.language];
	    }
	
	    if (singleLayerModeUsed) {
	      // single layer view
	      layout.showChildView('rightPanel', new _SidePanelView2.default({
	        position: 'right',
	        icon: 'fa-list',
	        defaultOpen: settings.rightPanelOpen,
	        views: [{
	          name: 'Search Results',
	          hasInfo: true,
	          view: new _CombinedResultView2.default({
	            mapModel: mapModel,
	            filtersModel: filtersModel,
	            highlightModel: highlightModel,
	            collection: searchCollection,
	            downloadEnabled: settings.downloadEnabled,
	            onStartDownload: startDownload,
	            onSelectFiles: selectFiles,
	            fallbackThumbnailUrl: _no_thumbnail_available2.default,
	            termsAndConditionsUrl: termsAndConditionsUrl
	          })
	        }]
	      }));
	    } else {
	      // multi layer view
	      layout.showChildView('rightPanel', new _SidePanelView2.default({
	        position: 'right',
	        icon: 'fa-list',
	        defaultOpen: settings.rightPanelOpen,
	        openTabIndex: settings.rightPanelTabIndex,
	        views: [{
	          name: 'Search Results',
	          hasInfo: true,
	          view: new _SearchResultView2.default({
	            mapModel: mapModel,
	            filtersModel: filtersModel,
	            highlightModel: highlightModel,
	            collection: searchCollection,
	            fallbackThumbnailUrl: _no_thumbnail_available2.default
	          })
	        }, {
	          name: 'Basket',
	          hasInfo: true,
	          view: new _DownloadSelectionView2.default({
	            mapModel: mapModel,
	            filtersModel: filtersModel,
	            highlightModel: highlightModel,
	            collection: searchCollection,
	            onStartDownload: startDownload,
	            onSelectFiles: selectFiles,
	            termsAndConditionsUrl: termsAndConditionsUrl,
	            downloadEnabled: settings.downloadEnabled,
	            fallbackThumbnailUrl: _no_thumbnail_available2.default
	          })
	        }]
	      }));
	    }
	
	    layout.$('.search-result-view .select-all,.download-view .download-control .btn').removeClass('btn-sm');
	    layout.$('.tools, .selections').removeClass('btn-group-justified');
	
	    // hook up record info modal
	    searchCollection.each(function (searchModel) {
	      searchModel.on('showInfo', function (recordModels) {
	        showRecordDetails(recordModels.map(function (recordModel) {
	          return [recordModel, searchModel];
	        }));
	      });
	    });
	
	    layout.showChildView('bottomPanel', new _StopSelectionView2.default({ mapModel: mapModel }));
	
	    var warningsCollection = new _WarningsCollection2.default([]);
	    layout.showChildView('topPanel', new _WarningsView2.default({ collection: warningsCollection }));
	
	    // show a warning for every layer that failed to be accessed
	    failedLayers.forEach(function (layer) {
	      return warningsCollection.setWarning(_i18next2.default.t('layer_failed', { value: layer.get('displayName') }));
	    });
	
	    if (settings.extent) {
	      mapModel.show({ bbox: settings.extent });
	    }
	
	    // create a dynamic style to set up the border/background color of record
	    // items in the search results and download selection view.
	
	    (0, _jquery2.default)('<style>\n      .record-item:hover, .record-item.highlighted {\n        background-color: ' + (0, _utils2.premultiplyColor)(settings.highlightFillColor) + ';\n        border-color: ' + (0, _utils2.premultiplyColor)(settings.highlightStrokeColor) + ';\n      }\n      .record-item.selected-for-download {\n        background-color: ' + (0, _utils2.premultiplyColor)(settings.selectedFootprintFillColor) + ';\n        border-color: ' + (0, _utils2.premultiplyColor)(settings.selectedFootprintStrokeColor) + ';\n      }\n      </style>\n    ').appendTo('head');
	
	    // mundi specific behavior fix, hard-coding class names selectors
	    function updateStyleOnScrollPresent(selectorArray) {
	      // accepts an array of jquery objects
	      // if any has vertical scroll
	      // set its padding-right, else remove padding-right
	      function hasVerticalScroll(node) {
	        // returns true if node has a visible scroll if a node, else false
	        return node ? node.scrollHeight > node.offsetHeight : false;
	      }
	      selectorArray.forEach(function (selector) {
	        if (hasVerticalScroll(selector[0])) {
	          (0, _jquery2.default)(selector).css('padding-right', '8px');
	        } else {
	          (0, _jquery2.default)(selector).css('padding-right', '0px');
	        }
	      });
	    }
	
	    _jquery2.default.fn.sizeChanged = _utils2.sizeChangedEvent;
	
	    updateStyleOnScrollPresent([(0, _jquery2.default)('.filters-view'), (0, _jquery2.default)('.layer-control')]);
	
	    (0, _jquery2.default)(window).on('resize', function () {
	      updateStyleOnScrollPresent([(0, _jquery2.default)('.filters-view'), (0, _jquery2.default)('.layer-control')]);
	    });
	
	    (0, _jquery2.default)('.panel').sizeChanged(function () {
	      updateStyleOnScrollPresent([(0, _jquery2.default)('.filters-view'), (0, _jquery2.default)('.layer-control')]);
	    });
	
	    // use set timeout here so that vendor info is always at the end of the attribution list
	    setTimeout(function () {
	      var vendorInfoHTML = '<li>Powered&nbsp;by&nbsp;<a href="https://github.com/eoxc" target="_blank">EOxC</a>&nbsp;&copy;&nbsp;<a href="https://eox.at" target="_blank">EOX&nbsp;<i class="icon-eox-eye"/></a>\n      <!-- prism Client version ' + _package2.version + ' https://github.com/eoxc/prism/releases/tag/v' + _package2.version + ' -->\n      <!-- eoxc version ' + _package.version + ' https://github.com/eoxc/eoxc/releases/tag/v' + _package.version + ' --></li>';
	      (0, _jquery2.default)(_this4.container).find('.ol-attribution ul').append(vendorInfoHTML);
	    });
	
	    if (Object.prototype.hasOwnProperty.call(settings, 'tutorial')) {
	      if (settings.tutorial !== 'disabled') {
	        var tutWidg = (0, _tutorial2.default)();
	
	        if (settings.tutorial !== 'disabled') {
	          (0, _jquery2.default)('.ol-attribution').append('<button type="button" title="' + _i18next2.default.t('Tutorial') + '" id="tutorial" style="float:right;">\n            <span>\n              <i style="font-size:0.8em;" class="fa fa-book" aria-hidden="true"></i>\n            </span>\n          </button>');
	
	          (0, _jquery2.default)('#tutorial').click(function () {
	            // Iterate through anno elements to see if any is open and needs to
	            // be closed
	            /* eslint-disable no-underscore-dangle */
	            var cv = tutWidg;
	            while (cv._chainNext) {
	              if (cv._annoElem) {
	                cv.hide();
	              }
	              cv = cv._chainNext;
	            }
	            /* eslint-enable no-underscore-dangle */
	            tutWidg.show();
	          });
	        }
	
	        if (settings.tutorial === 'always') {
	          tutWidg.show();
	        }
	
	        if (settings.tutorial === 'once') {
	          if (typeof Storage !== 'undefined') {
	            if (localStorage.getItem('firstVisit') === null) {
	              // Open tutorial automatically if it is the first visit
	              tutWidg.show();
	              localStorage.setItem('firstVisit', false);
	            }
	          }
	        }
	      }
	    }
	    _backbone2.default.history.start({ pushState: false });
	  }
	});
	/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(27)))

/***/ }),
/* 670 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	
	var _backbone = __webpack_require__(24);
	
	var _backbone2 = _interopRequireDefault(_backbone);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var WarningModel = _backbone2.default.Model.extend({
	  idAttribute: 'message'
	});
	
	exports.default = _backbone2.default.Collection.extend({
	  model: WarningModel,
	  initialize: function initialize() {
	    this.dismissedWarnings = new Set([]);
	  },
	  setWarning: function setWarning(message) {
	    var doShow = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
	
	    if (doShow && !this.dismissedWarnings.has(message)) {
	      this.add({ message: message });
	    } else {
	      this.unsetWarning(message);
	    }
	  },
	  unsetWarning: function unsetWarning(message) {
	    this.remove(message);
	  },
	  dismiss: function dismiss(message) {
	    this.unsetWarning(message);
	    this.dismissedWarnings.add(message);
	  }
	});

/***/ }),
/* 671 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	__webpack_require__.p = __webpack_require__(1101)('prism');

/***/ }),
/* 672 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	exports.default = getTutorialWidget;
	
	var _anno = __webpack_require__(734);
	
	var _i18next = __webpack_require__(190);
	
	var _i18next2 = _interopRequireDefault(_i18next);
	
	var _jquery = __webpack_require__(12);
	
	var _jquery2 = _interopRequireDefault(_jquery);
	
	__webpack_require__(1109);
	
	__webpack_require__(1130);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	function getTutorialWidget() {
	  _anno.AnnoButton.DoneButton.text = _i18next2.default.t('Skip');
	  _anno.AnnoButton.DoneButton.className = 'anno-btn-low-importance';
	
	  var finishButton = _jquery2.default.extend(true, {}, _anno.AnnoButton.DoneButton);
	  finishButton.text = _i18next2.default.t('End');
	
	  _anno.AnnoButton.NextButton.text = _i18next2.default.t('Next');
	  _anno.AnnoButton.BackButton.text = _i18next2.default.t('Back');
	
	  var tutorialWidget = new _anno.Anno([{
	    target: '.ol-viewport',
	    position: 'center-top',
	    className: 'complete-page-tag',
	    content: _i18next2.default.t('tutorial1'),
	    buttons: [_anno.AnnoButton.DoneButton, _anno.AnnoButton.NextButton],
	    onShow: function onShow(anno, $target, $annoElem) {
	      $annoElem.find('.anno-arrow').hide();
	    }
	  }, {
	    target: '.ol-viewport',
	    position: 'center-top',
	    className: 'complete-page-tag',
	    content: _i18next2.default.t('tutorial2'),
	    buttons: [_anno.AnnoButton.BackButton, _anno.AnnoButton.DoneButton, _anno.AnnoButton.NextButton]
	  }, {
	    target: '#timeSlider',
	    position: 'center-top',
	    content: _i18next2.default.t('tutorial3'),
	    buttons: [_anno.AnnoButton.BackButton, _anno.AnnoButton.DoneButton, _anno.AnnoButton.NextButton]
	  }, {
	    target: '#rightPanel .side-panel-right',
	    position: 'left',
	    content: _i18next2.default.t('tutorial4'),
	    buttons: [_anno.AnnoButton.BackButton, _anno.AnnoButton.DoneButton, _anno.AnnoButton.NextButton],
	    onShow: function onShow() {
	      if (!(0, _jquery2.default)('#rightPanel button').hasClass('out')) {
	        (0, _jquery2.default)('#rightPanel button')[0].click();
	      }
	      if (!(0, _jquery2.default)('#rightPanel .nav.nav-tabs :nth-child(1)').hasClass('active')) {
	        (0, _jquery2.default)('#rightPanel .nav.nav-tabs :nth-child(1) a').click();
	      }
	    }
	  }, {
	    target: '#leftPanel .side-panel-left',
	    position: 'right',
	    content: _i18next2.default.t('tutorial5'),
	    buttons: [_anno.AnnoButton.BackButton, _anno.AnnoButton.DoneButton, _anno.AnnoButton.NextButton],
	    onShow: function onShow() {
	      if (!(0, _jquery2.default)('#leftPanel button').hasClass('out')) {
	        (0, _jquery2.default)('#leftPanel button')[0].click();
	      }
	      if (!(0, _jquery2.default)('#leftPanel .nav.nav-tabs :nth-child(1)').hasClass('active')) {
	        (0, _jquery2.default)('#leftPanel .nav.nav-tabs :nth-child(1) a').click();
	      }
	    }
	  }, {
	    target: '#leftPanel .side-panel-left',
	    position: 'right',
	    content: _i18next2.default.t('tutorial6'),
	    buttons: [_anno.AnnoButton.BackButton, finishButton],
	    onShow: function onShow() {
	      if (!(0, _jquery2.default)('#leftPanel button').hasClass('out')) {
	        (0, _jquery2.default)('#leftPanel button')[0].click();
	      }
	      if (!(0, _jquery2.default)('#leftPanel .nav.nav-tabs :nth-child(2)').hasClass('active')) {
	        (0, _jquery2.default)('#leftPanel .nav.nav-tabs :nth-child(2) a').click();
	      }
	    }
	  }]);
	
	  return tutorialWidget;
	}

/***/ }),
/* 673 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	
	var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
	
	var _jquery = __webpack_require__(12);
	
	var _jquery2 = _interopRequireDefault(_jquery);
	
	var _ModalView = __webpack_require__(121);
	
	var _ModalView2 = _interopRequireDefault(_ModalView);
	
	var _OpenLayersMapView = __webpack_require__(238);
	
	var _OpenLayersMapView2 = _interopRequireDefault(_OpenLayersMapView);
	
	var _RecordDetailsView = __webpack_require__(567);
	
	var _RecordDetailsView2 = _interopRequireDefault(_RecordDetailsView);
	
	var _FiltersModel = __webpack_require__(119);
	
	var _FiltersModel2 = _interopRequireDefault(_FiltersModel);
	
	var _HighlightModel = __webpack_require__(239);
	
	var _HighlightModel2 = _interopRequireDefault(_HighlightModel);
	
	var _MapModel = __webpack_require__(240);
	
	var _MapModel2 = _interopRequireDefault(_MapModel);
	
	var _LayersCollection = __webpack_require__(233);
	
	var _LayersCollection2 = _interopRequireDefault(_LayersCollection);
	
	var _download = __webpack_require__(46);
	
	var _LayerOptionsCoreView = __webpack_require__(242);
	
	var _LayerOptionsCoreView2 = _interopRequireDefault(_LayerOptionsCoreView);
	
	var _RecordsDetailsModalView = __webpack_require__(1012);
	
	var _RecordsDetailsModalView2 = _interopRequireDefault(_RecordsDetailsModalView);
	
	__webpack_require__(1132);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
	
	var RecordsDetailsModalView = _ModalView2.default.extend({
	  template: _RecordsDetailsModalView2.default,
	
	  className: 'record-details-modal-view modal fade',
	
	  templateHelpers: function templateHelpers() {
	    return {
	      title: '',
	      hasNext: this.currentRecordIndex < this.records.length - 1,
	      hasPrev: this.currentRecordIndex > 0,
	      hasMore: this.records.length > 1
	    };
	  },
	
	
	  events: {
	    'click .records-next': 'onRecordsNextClicked',
	    'click .records-prev': 'onRecordsPrevClicked',
	    'shown.bs.modal': 'onModalShown',
	    'change .is-selected': 'onDownloadSelectionChange'
	  },
	
	  regions: {
	    content: '.modal-body',
	    'layer-options': '.layer-options'
	  },
	
	  initialize: function initialize(options) {
	    var _this = this;
	
	    this.records = options.records;
	    this.currentRecordIndex = 0;
	
	    this.baseLayersCollection = options.baseLayersCollection;
	    this.overlayLayersCollection = options.overlayLayersCollection;
	    this.layersCollection = options.layersCollection;
	    this.highlightFillColor = options.highlightFillColor;
	    this.highlightStrokeColor = options.highlightStrokeColor;
	
	    this.filterFillColor = options.filterFillColor;
	    this.filterStrokeColor = options.filterStrokeColor;
	    this.filterOutsideColor = options.filterOutsideColor;
	    this.projection = options.projection;
	
	    this.mapModel = new _MapModel2.default({ center: [0, 0], zoom: 5, noclick: true, projection: this.projection });
	    this.highlightModel = new _HighlightModel2.default();
	    this.filtersModel = new _FiltersModel2.default();
	
	    this.$el.sizeChanged(function () {
	      _this.updateResultsPanelSize();
	    });
	  },
	  onModalShown: function onModalShown() {
	    this.updateRecord.apply(this, _toConsumableArray(this.records[this.currentRecordIndex]));
	    this.updateResultsPanelSize();
	  },
	  updateResultsPanelSize: function updateResultsPanelSize() {
	    // resize results holding div based on variable footer and header sizes
	    var restHeightCombined = (0, _jquery2.default)('.modal-header').outerHeight(true) + (0, _jquery2.default)('.modal-footer').outerHeight(true);
	    (0, _jquery2.default)('.modal-body').height('calc(100% - ' + restHeightCombined + 'px)');
	  },
	  updateRecord: function updateRecord(recordModel, searchModel) {
	    var time = recordModel.get('properties').time;
	    if (time instanceof Date) {
	      time = [time, time];
	    }
	    var layerModel = searchModel.get('layerModel');
	    var displayParams = layerModel.get('detailsDisplay') || layerModel.get('display');
	    this.mapModel.set('time', time);
	    this.mapView = new _OpenLayersMapView2.default({
	      mapModel: this.mapModel,
	      filtersModel: this.filtersModel,
	      highlightModel: this.highlightModel,
	      baseLayersCollection: this.baseLayersCollection,
	      overlayLayersCollection: this.overlayLayersCollection,
	      layersCollection: new _LayersCollection2.default([layerModel]),
	      highlightFillColor: this.highlightFillColor,
	      highlightStrokeColor: this.highlightStrokeColor,
	      filterFillColor: this.filterFillColor,
	      filterStrokeColor: this.filterStrokeColor,
	      filterOutsideColor: this.filterOutsideColor,
	      staticHighlight: true,
	      useDetailsDisplay: true
	    });
	    var detailsView = new _RecordDetailsView2.default({
	      model: recordModel,
	      mapModel: this.mapModel,
	      mapView: this.mapView,
	      descriptionTemplate: layerModel.get('search.descriptionTemplate'),
	      headerText: 'Description of'
	    });
	    this.showChildView('content', detailsView);
	
	    this.filtersModel.set('area', recordModel.attributes.geometry);
	
	    this.mapModel.show(recordModel.attributes);
	    this.highlightModel.highlight(recordModel.attributes);
	
	    this.$('.modal-title').text(layerModel.get('displayName') + ' - ' + time[0].toISOString());
	    this.$('.records-prev').toggleClass('disabled', !(this.currentRecordIndex > 0));
	    this.$('.records-next').toggleClass('disabled', !(this.currentRecordIndex < this.records.length - 1));
	    this.$('.current-record').text(this.currentRecordIndex + 1);
	    this.$('.record-count').text(this.records.length);
	
	    var downloadSelection = searchModel.get('downloadSelection');
	    var isSelectedForDownload = downloadSelection.findIndex(function (model) {
	      return model.get('id') === recordModel.get('id');
	    }) !== -1;
	    this.$('.is-selected').prop('checked', isSelectedForDownload);
	    this.$('.is-selected').parent().toggle(!!(0, _download.isRecordDownloadable)(layerModel, recordModel));
	
	    this.$('.layer-options-dropdown').toggle(!!displayParams.options);
	    this.showChildView('layer-options', new _LayerOptionsCoreView2.default({
	      model: layerModel, useDetailsDisplay: true
	    }));
	  },
	  onRecordsPrevClicked: function onRecordsPrevClicked() {
	    if (this.currentRecordIndex > 0) {
	      this.currentRecordIndex -= 1;
	      this.updateRecord.apply(this, _toConsumableArray(this.records[this.currentRecordIndex]));
	    }
	  },
	  onRecordsNextClicked: function onRecordsNextClicked() {
	    if (this.currentRecordIndex < this.records.length - 1) {
	      this.currentRecordIndex += 1;
	      this.updateRecord.apply(this, _toConsumableArray(this.records[this.currentRecordIndex]));
	    }
	  },
	  onDownloadSelectionChange: function onDownloadSelectionChange() {
	    var _records$currentRecor = _slicedToArray(this.records[this.currentRecordIndex], 2),
	        recordModel = _records$currentRecor[0],
	        searchModel = _records$currentRecor[1];
	
	    var downloadSelection = searchModel.get('downloadSelection');
	    if (this.$('.is-selected').is(':checked')) {
	      downloadSelection.add(recordModel);
	    } else {
	      downloadSelection.remove(recordModel);
	    }
	  }
	});
	
	exports.default = RecordsDetailsModalView;

/***/ }),
/* 674 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	
	var _backbone = __webpack_require__(11);
	
	var _backbone2 = _interopRequireDefault(_backbone);
	
	__webpack_require__(1135);
	
	__webpack_require__(1131);
	
	var _RootLayoutView = __webpack_require__(1013);
	
	var _RootLayoutView2 = _interopRequireDefault(_RootLayoutView);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	exports.default = _backbone2.default.LayoutView.extend({
	  template: _RootLayoutView2.default,
	  regions: {
	    content: '#content',
	    leftPanel: '#leftPanel',
	    rightPanel: '#rightPanel',
	    bottomPanel: '#bottomPanel',
	    topPanel: '#topPanel',
	    infoPanel: '#infoPanel',
	    timeSlider: '#timeSlider',
	    modals: '#modals',
	    topModals: '#top-modals'
	  },
	
	  initialize: function initialize(options) {
	    var _this = this;
	
	    this.listenTo(options.mapModel, 'change:tool', function (model, tool) {
	      if (tool) {
	        _this.$('#timeSlider,#leftPanel,#rightPanel,#infoPanel,#topPanel').fadeOut('fast');
	        _this.$('#bottomPanel').fadeIn('fast').css('display', 'flex');
	      } else {
	        _this.$('#timeSlider,#leftPanel,#rightPanel,#infoPanel,#topPanel').fadeIn('fast');
	        _this.$('#bottomPanel').fadeOut('fast');
	      }
	    });
	  }
	});

/***/ }),
/* 675 */
/***/ (function(module, exports, __webpack_require__) {

	/* WEBPACK VAR INJECTION */(function(Promise) {'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	
	var _jquery = __webpack_require__(12);
	
	var _jquery2 = _interopRequireDefault(_jquery);
	
	var _backbone = __webpack_require__(11);
	
	var _backbone2 = _interopRequireDefault(_backbone);
	
	var _ModalView = __webpack_require__(121);
	
	var _ModalView2 = _interopRequireDefault(_ModalView);
	
	var _download = __webpack_require__(46);
	
	var _Metalink = __webpack_require__(222);
	
	var _Metalink2 = _interopRequireDefault(_Metalink);
	
	var _SelectFilesModalView = __webpack_require__(1014);
	
	var _SelectFilesModalView2 = _interopRequireDefault(_SelectFilesModalView);
	
	__webpack_require__(1133);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var FileStructureView = _backbone2.default.ItemView.extend({
	  template: function template(_ref) {
	    var infos = _ref.infos;
	    return '' + infos.map(function (_ref2) {
	      var displayName = _ref2.displayName,
	          id = _ref2.id,
	          recordsAndFileInfos = _ref2.recordsAndFileInfos;
	      return '\n    <h2>' + displayName + '</h2>\n    <ul class="list-unstyled">\n      ' + recordsAndFileInfos.map(function (_ref3) {
	        var recordId = _ref3.recordId,
	            timestamp = _ref3.timestamp,
	            fileInfos = _ref3.fileInfos;
	        return '\n        <li class="record-list-item checkbox">\n          <label>\n            <input type="checkbox" checked="true" class="record-checkbox">\n            <a href="#select-files-' + id + '-' + recordId + '" class="collapsed" data-toggle="collapse"><b>' + timestamp + ': ' + recordId + '</b><span class="caret"></span></a>\n          </label>\n          <ul class="collapse" id="select-files-' + id + '-' + recordId + '">\n            ' + fileInfos.map(function (_ref4) {
	          var name = _ref4.name,
	              href = _ref4.href;
	          return '\n              <li class="checkbox">\n                <label>\n                  <input type="checkbox" class="record-file-checkbox" checked="checked" data-name="' + name + '" data-href="' + href + '">' + name + '\n                </label>\n                <a href="' + href + '" target="_blank"> <i class="fa fa-external-link"></i></a>\n              </li>\n            ';
	        }).join('') + '\n          </ul>\n        </li>\n      ';
	      }).join('') + '\n    </ul>';
	    });
	  },
	  templateHelpers: function templateHelpers() {
	    return {
	      infos: this.infoStructure.filter(function (_ref5) {
	        var recordsAndFileInfos = _ref5.recordsAndFileInfos;
	        return recordsAndFileInfos.length > 0;
	      }).map(function (_ref6) {
	        var searchModel = _ref6.searchModel,
	            recordsAndFileInfos = _ref6.recordsAndFileInfos;
	        return {
	          displayName: searchModel.get('layerModel').get('displayName'),
	          recordsAndFileInfos: recordsAndFileInfos.filter(function (_ref7) {
	            var fileInfos = _ref7.fileInfos;
	            return fileInfos.length > 0;
	          }).map(function (_ref8) {
	            var recordModel = _ref8.recordModel,
	                fileInfos = _ref8.fileInfos;
	            return {
	              recordId: recordModel.get('id'),
	              timestamp: Array.isArray(recordModel.get('properties').time) ? recordModel.get('properties').time[0].toISOString() : recordModel.get('properties').time.toISOString(),
	              fileInfos: fileInfos
	            };
	          })
	        };
	      })
	    };
	  },
	
	
	  events: {
	    'change .record-checkbox': 'onRecordCheckboxChange',
	    'change .record-file-checkbox': 'onRecordFileCheckboxChange'
	  },
	
	  initialize: function initialize(options) {
	    this.infoStructure = options.infoStructure;
	  },
	  onRecordCheckboxChange: function onRecordCheckboxChange(event) {
	    var $target = (0, _jquery2.default)(event.target);
	    $target.closest('.record-list-item').find('.record-file-checkbox').prop('checked', $target.is(':checked')).trigger('change');
	  },
	  onRecordFileCheckboxChange: function onRecordFileCheckboxChange(event) {
	    var $target = (0, _jquery2.default)(event.target);
	    var $li = $target.closest('.record-list-item');
	    var all = $li.find('.record-file-checkbox').length;
	    var checked = $li.find('.record-file-checkbox:checked').length;
	
	    $li.find('.record-checkbox').prop('checked', all === checked);
	  }
	});
	
	var SelectFilesModalView = _ModalView2.default.extend({
	  template: _SelectFilesModalView2.default,
	  templateHelpers: function templateHelpers() {},
	
	  events: {
	    'click .start-download': 'onStartDownloadClicked',
	    'click .download-as-metalink': 'onDownloadAsMetalinkClicked',
	    'click .download-as-url-list': 'onDownloadAsUrlListClicked',
	    'change .record-file-checkbox': 'checkButtons'
	  },
	
	  regions: {
	    content: '.modal-body'
	  },
	
	  initialize: function initialize(options) {
	    var _this = this;
	
	    this.searchCollection = options.searchCollection;
	    this.onStartDownload = options.onStartDownload;
	    this.$el.sizeChanged(function () {
	      _this.updateResultsPanelSize();
	    });
	  },
	  onRender: function onRender() {
	    var _this2 = this;
	
	    this._getDownloadInfoStructure({}).then(function (infoStructure) {
	      _this2.showChildView('content', new FileStructureView({ infoStructure: infoStructure }));
	      _this2.$('.spinner').fadeOut();
	      _this2.checkButtons();
	    });
	  },
	  onModalShown: function onModalShown() {},
	  onStartDownloadClicked: function onStartDownloadClicked() {
	    // NOT easy... :(
	    // this.close();
	    // const items = this._getSelectedDownloadInfos();
	    // this.onStartDownload(items);
	  },
	  onDownloadAsMetalinkClicked: function onDownloadAsMetalinkClicked() {
	    this.close();
	    var items = this._getSelectedDownloadInfos();
	    var content = (0, _Metalink2.default)({
	      date: new Date().toISOString(),
	      items: items
	    });
	    content = content.replace(/[\n]/g, '\r\n');
	    (0, _download.downloadCustom)('download-files.meta4', 'application/metalink4+xml', content);
	  },
	  onDownloadAsUrlListClicked: function onDownloadAsUrlListClicked() {
	    this.close();
	    var infos = this._getSelectedDownloadInfos();
	    (0, _download.downloadCustom)('url-list.txt', 'text/plain', infos.map(function (info) {
	      return info.href;
	    }).join('\r\n'));
	  },
	  checkButtons: function checkButtons() {
	    this.$('.start-download,.dropdown-toggle,.download-as-metalink,.download-as-url-list').prop('disabled', this.$('.record-file-checkbox:checked').length === 0);
	  },
	  _getDownloadInfoStructure: function _getDownloadInfoStructure(options) {
	    var _this3 = this;
	
	    return Promise.all(this.collection.map(function (searchModel) {
	      return Promise.all(searchModel.get('downloadSelection').map(function (recordModel) {
	        return (0, _download.getDownloadInfos)(searchModel.get('layerModel'), _this3.filtersModel, recordModel, options).then(function (fileInfos) {
	          return {
	            recordModel: recordModel,
	            fileInfos: fileInfos
	          };
	        });
	      })).then(function (recordsAndFileInfos) {
	        return {
	          searchModel: searchModel,
	          recordsAndFileInfos: recordsAndFileInfos
	        };
	      });
	    }));
	  },
	  updateResultsPanelSize: function updateResultsPanelSize() {
	    // resize results holding div based on variable footer and header sizes
	    var restHeightCombined = (0, _jquery2.default)('.modal-header').outerHeight(true) + (0, _jquery2.default)('.modal-footer').outerHeight(true);
	    (0, _jquery2.default)('.modal-body').height('calc(100% - ' + restHeightCombined + 'px)');
	  },
	  _getSelectedDownloadInfos: function _getSelectedDownloadInfos() {
	    return this.$('[type="checkbox"]:checked').toArray().map(function (elem) {
	      return {
	        name: elem.dataset.name,
	        href: elem.dataset.href
	      };
	    });
	  }
	});
	
	exports.default = SelectFilesModalView;
	/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(27)))

/***/ }),
/* 676 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	
	var _backbone = __webpack_require__(11);
	
	var _backbone2 = _interopRequireDefault(_backbone);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	__webpack_require__(1134);
	var template = __webpack_require__(1015);
	
	exports.default = _backbone2.default.LayoutView.extend({
	  template: template,
	
	  templateHelpers: function templateHelpers() {
	    return {
	      position: this.position,
	      isLeft: this.position === 'left',
	      icon: this.icon,
	      views: this.views
	    };
	  },
	
	
	  events: {
	    'click .toggle-side-panel': 'onToggleSidePanelClicked',
	    'shown.bs.tab [data-toggle="tab"]': 'onTabShown'
	  },
	
	  initialize: function initialize(options) {
	    this.position = options.position || 'left';
	    this.views = options.views;
	    this.icon = options.icon;
	    this.defaultOpen = options.defaultOpen;
	    this.openTabIndex = options.openTabIndex;
	  },
	  onBeforeShow: function onBeforeShow() {
	    var _this = this;
	
	    this.views.forEach(function (viewConfig, index) {
	      _this.addRegion('region-' + index, '#' + _this.position + '-' + index);
	      _this.showChildView('region-' + index, viewConfig.view);
	      if (viewConfig.hasInfo) {
	        _this.listenTo(viewConfig.view, 'update:status', function (status) {
	          _this.$('[href="#' + _this.position + '-' + index + '"] .info').html(status);
	        });
	      }
	    });
	
	    if (this.defaultOpen) {
	      this.onToggleSidePanelClicked();
	    }
	
	    if (typeof this.openTabIndex !== 'undefined' && parseInt(this.openTabIndex, 10) > 0) {
	      // to trigger respective event
	      this.$('a[href="#' + this.position + '-' + this.openTabIndex + '"]').tab('show');
	      // to manually reset active on tab contents
	      for (var i = 0; i < this.views.length; i++) {
	        if (this.openTabIndex === i) {
	          this.$('#' + this.position + '-' + i).addClass('active');
	        } else {
	          this.$('#' + this.position + '-' + i).removeClass('active');
	        }
	      }
	    }
	  },
	  onToggleSidePanelClicked: function onToggleSidePanelClicked() {
	    this.$('.side-panel').toggleClass('in');
	    this.$('.toggle-side-panel-out').toggleClass('out');
	  },
	  onTabShown: function onTabShown(e) {
	    var view = this.views[parseInt(e.target.href.split('#')[1].split('-')[1])].view;
	    view.triggerMethod('shown');
	  }
	});

/***/ }),
/* 677 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	
	var _backbone = __webpack_require__(11);
	
	var _backbone2 = _interopRequireDefault(_backbone);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	exports.default = _backbone2.default.ItemView.extend({
	  template: function template() {
	    return '<button class="btn btn-danger" style="box-shadow: 3px 3px 3px rgba(0, 0, 0, 0.39); border: 1px solid black;">Stop Selection</button>';
	  },
	  events: {
	    'click button': 'onStopSelectionClicked'
	  },
	  initialize: function initialize(options) {
	    this.mapModel = options.mapModel;
	  },
	  onStopSelectionClicked: function onStopSelectionClicked() {
	    this.mapModel.set('tool', null);
	  }
	});

/***/ }),
/* 678 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	
	var _backbone = __webpack_require__(11);
	
	var _backbone2 = _interopRequireDefault(_backbone);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	__webpack_require__(1136);
	
	var WarningView = _backbone2.default.ItemView.extend({
	  template: function template(_ref) {
	    var message = _ref.message;
	    return '<div class="alert alert-warning" role="alert">\n    <button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span></button>\n    ' + message + '\n  </div>';
	  },
	  events: {
	    'click .close': 'onCloseClick'
	  },
	  onCloseClick: function onCloseClick() {
	    this.model.collection.dismiss(this.model.get('message'));
	  }
	});
	
	exports.default = _backbone2.default.CollectionView.extend({
	  childView: WarningView
	  // template: () => '<div class="alert alert-danger">Narrow down search to show all results</div>',
	});

/***/ }),
/* 679 */
/***/ (function(module, exports, __webpack_require__) {

	/* WEBPACK VAR INJECTION */(function(Promise) {'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	
	var _backbone = __webpack_require__(11);
	
	var _backbone2 = _interopRequireDefault(_backbone);
	
	var _underscore = __webpack_require__(33);
	
	var _underscore2 = _interopRequireDefault(_underscore);
	
	var _jquery = __webpack_require__(12);
	
	var _jquery2 = _interopRequireDefault(_jquery);
	
	var _download = __webpack_require__(46);
	
	var _Metalink = __webpack_require__(222);
	
	var _Metalink2 = _interopRequireDefault(_Metalink);
	
	var _utils = __webpack_require__(169);
	
	var _SearchResultHeaderView = __webpack_require__(681);
	
	var _SearchResultHeaderView2 = _interopRequireDefault(_SearchResultHeaderView);
	
	var _SearchResultListView = __webpack_require__(683);
	
	var _SearchResultListView2 = _interopRequireDefault(_SearchResultListView);
	
	var _DownloadListView = __webpack_require__(680);
	
	var _DownloadListView2 = _interopRequireDefault(_DownloadListView);
	
	__webpack_require__(1137);
	
	var _CombinedResultView = __webpack_require__(1016);
	
	var _CombinedResultView2 = _interopRequireDefault(_CombinedResultView);
	
	var _NoProductSelected = __webpack_require__(1018);
	
	var _NoProductSelected2 = _interopRequireDefault(_NoProductSelected);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	// eslint-disable-next-line max-len
	// eslint-disable-line import/no-extraneous-dependencies
	var CombinedResultView = _backbone2.default.LayoutView.extend({
	  template: _CombinedResultView2.default,
	  templateHelpers: function templateHelpers() {
	    var id = this.layerModel.get('id');
	    var enableFullResolutionDownload = this.layerModel.get('fullResolution.protocol');
	    var enableProcessing = this.layerModel.get('processing.url');
	    var selectFilesEnabled = typeof this.onSelectFiles !== 'undefined';
	    var automaticSearch = this.singleModel.get('automaticSearch');
	    var anySelectedToDisplay = this.singleModel.get('downloadSelection').length > 0 || automaticSearch;
	    return {
	      id: id,
	      enableFullResolutionDownload: enableFullResolutionDownload,
	      enableProcessing: enableProcessing,
	      selectFilesEnabled: selectFilesEnabled,
	      anySelectedToDisplay: anySelectedToDisplay,
	      automaticSearch: automaticSearch,
	      downloadEnabled: this.downloadEnabled
	    };
	  },
	
	
	  EmptyView: _backbone2.default.ItemView.extend({
	    template: _NoProductSelected2.default
	  }),
	
	  regions: {
	    results: '.result-contents',
	    header: '.search-results-header'
	  },
	
	  className: 'search-result-view',
	
	  events: {
	    'change input[data-layer]': 'onLayerSelectionChange',
	    'click .deselect-all': 'onDeselectAllClicked',
	    'click .select-files': 'onSelectFilesClicked',
	    'click .start-download': 'onStartDownloadClicked',
	    'click .download-as-metalink': 'onDownloadAsMetalinkClicked',
	    'click .download-as-url-list': 'onDownloadAsUrlListClicked',
	    'click .download-full-res': 'onDownloadFullResolutionClick',
	    'click .start-processing': 'onProcessingClick'
	  },
	
	  childEvents: {
	    'click:selected-count': 'onSelectedCountClick',
	    'change:terms-and-conditions': 'onTermsAndAndConditionsChange',
	    'list:render': 'onSearchListRender',
	    'downloadlist:itemRemoved': 'downloadListItemRemoved'
	  },
	
	  initialize: function initialize(options) {
	    this.singleModel = this.collection.models[0];
	    this.layerModel = this.singleModel.get('layerModel');
	    this.filtersModel = options.filtersModel;
	    this.highlightModel = options.highlightModel;
	    this.fallbackThumbnailUrl = options.fallbackThumbnailUrl;
	    this.termsAndConditionsUrl = options.termsAndConditionsUrl;
	    this.downloadEnabled = options.downloadEnabled;
	    this.onStartDownload = options.onStartDownload;
	    this.onSelectFiles = options.onSelectFiles;
	
	    this.hasAcceptedTerms = false;
	    this.displaySelected = false;
	
	    this.listenTo(this.collection, 'change', this.onSearchModelsChange);
	
	    this.listenTo(this.singleModel.get('downloadSelection'), 'reset update', this.onDownloadSelectionChange);
	  },
	  onAttach: function onAttach() {
	    this.updateHeaderArea();
	    this.updateResultsPanelSize();
	  },
	  onShown: function onShown() {
	    this.updateViews();
	  },
	  onRender: function onRender() {
	    this.renderResultContent();
	    this.checkButtons();
	  },
	  saveScrollPosition: function saveScrollPosition() {
	    // save the scrolling position for later to get around bug in FF and other
	    // browsers. Prevent additional updates to scrolling position.
	    if (typeof this.savedScrollTop === 'undefined') {
	      var scrolledElement = this.$('.result-contents');
	      this.savedScrollTop = scrolledElement.scrollTop();
	    }
	  },
	  onSearchListRender: function onSearchListRender() {
	    var _this = this;
	
	    // scroll position update from previous state
	    this.$('.result-contents').off('scroll resize');
	    this.$('.result-contents').on('scroll resize', _underscore2.default.throttle(function () {
	      _this.updateViews.apply(_this, arguments);
	    }, 1000 / 60));
	    if (typeof this.savedScrollTop !== 'undefined') {
	      var scrolledElement = this.$('.result-contents')[0];
	      if (typeof scrolledElement !== 'undefined') {
	        setTimeout(function () {
	          _this.$('.result-contents').scrollTop(_this.savedScrollTop);
	          _this.savedScrollTop = undefined;
	        });
	      }
	    }
	  },
	  downloadListItemRemoved: function downloadListItemRemoved() {
	    this.updateViews();
	  },
	  renderResultContent: function renderResultContent() {
	    // create a child view in results region
	    var searchEnabled = this.singleModel.get('automaticSearch');
	    var anySelectedToDisplay = this.singleModel.get('downloadSelection').length > 0;
	
	    if (!searchEnabled && !anySelectedToDisplay) {
	      // display empty template
	      this.showChildView('results', new this.EmptyView(), {});
	    } else if (!searchEnabled && anySelectedToDisplay || this.displaySelected) {
	      // display only selected products
	      var options = {
	        referenceCollection: this.singleModel.get('downloadSelection'),
	        highlightModel: this.highlightModel,
	        fallbackThumbnailUrl: this.fallbackThumbnailUrl,
	        searchModel: this.singleModel
	      };
	      this.showChildView('results', new _DownloadListView2.default(options));
	    } else {
	      // display search results
	      var _options = {
	        searchModel: this.singleModel,
	        referenceCollection: this.singleModel.get('results'),
	        highlightModel: this.highlightModel,
	        fallbackThumbnailUrl: this.fallbackThumbnailUrl
	      };
	      this.showChildView('results', new _SearchResultListView2.default(_options));
	    }
	    this.checkButtons();
	  },
	  updateViews: function updateViews() {
	    // handle showing of only those products, which are in current scroll area
	    var elem = this.$('.result-contents')[0];
	    var scrollTop = elem.scrollTop;
	    var height = elem.clientHeight;
	    var view = this.getRegion('results').currentView;
	    if (typeof view !== 'undefined' && typeof view.referenceCollection !== 'undefined') {
	      var headerSize = 0;
	      var footerSize = 0;
	      var itemHeight = 153;
	      (0, _utils.setSlice)(-scrollTop, height, view, headerSize, footerSize, itemHeight);
	    }
	    elem.scrollTop = scrollTop;
	  },
	  updateHeaderArea: function updateHeaderArea() {
	    // create a child view in header region
	    var options = {
	      collection: this.collection,
	      singleModel: this.singleModel,
	      termsAndConditionsUrl: this.termsAndConditionsUrl,
	      displaySelected: this.displaySelected,
	      hasAcceptedTerms: this.hasAcceptedTerms
	    };
	    this.showChildView('header', new _SearchResultHeaderView2.default(options));
	  },
	  updateResultsPanelSize: function updateResultsPanelSize() {
	    // resize results holding div based on variable footer and header sizes
	    var restHeightCombined = this.$('.search-results-toggle').outerHeight(true) + this.$('.search-results-header').outerHeight(true) + this.$('.download-disabled-warning').outerHeight(true) + this.$('.search-results-footer').outerHeight(true) + parseInt(this.$('.result-contents').css('marginBottom'), 10) + parseInt(this.$('.result-contents').css('marginTop'), 10);
	    this.$('.result-contents').height('calc(100% - ' + restHeightCombined + 'px)');
	  },
	  onSearchModelsChange: function onSearchModelsChange() {
	    // update the global status
	    var isSearching = this.singleModel.get('isSearching');
	    var hasError = this.singleModel.get('hasError');
	
	    // update the tab header
	    if (hasError) {
	      this.triggerMethod('update:status', '<i class="fa fa-exclamation"></i>');
	    } else if (isSearching) {
	      this.triggerMethod('update:status', '<i class="fa fa-circle-o-notch fa-spin fa-fw"></i>');
	    } else {
	      this.triggerMethod('update:status', '');
	    }
	    this.updateViews();
	    this.updateHeaderArea();
	    this.updateResultsPanelSize();
	  },
	  onLayerSelectionChange: function onLayerSelectionChange(event) {
	    if (event) {
	      var $changed = (0, _jquery2.default)(event.target);
	      this.singleModel.set('automaticSearch', $changed.is(':checked'));
	      this.saveScrollPosition();
	      this.render();
	    }
	    this.onSearchModelsChange();
	  },
	  onTermsAndAndConditionsChange: function onTermsAndAndConditionsChange(childView, status) {
	    this.hasAcceptedTerms = status;
	    this.checkButtons();
	  },
	  onDeselectAllClicked: function onDeselectAllClicked() {
	    this.singleModel.get('downloadSelection').reset([]);
	  },
	  onDownloadFullResolutionClick: function onDownloadFullResolutionClick() {
	    var layerModel = this.singleModel.get('layerModel');
	    layerModel.trigger('download-full-resolution', layerModel);
	  },
	  onProcessingClick: function onProcessingClick() {
	    this.singleModel.trigger('start-processing', this.singleModel);
	  },
	  onStartDownloadClicked: function onStartDownloadClicked() {
	    this.onStartDownload();
	  },
	  onSelectFilesClicked: function onSelectFilesClicked() {
	    this.onSelectFiles();
	  },
	  onDownloadAsMetalinkClicked: function onDownloadAsMetalinkClicked() {
	    this.getDownloadInfos().then(function (items) {
	      var content = (0, _Metalink2.default)({
	        date: new Date().toISOString(),
	        items: items
	      });
	      content = content.replace(/[\n]/g, '\r\n');
	      (0, _download.downloadCustom)('download-files.meta4', 'application/metalink4+xml', content);
	    });
	  },
	  onDownloadAsUrlListClicked: function onDownloadAsUrlListClicked() {
	    this.getDownloadInfos().then(function (infos) {
	      (0, _download.downloadCustom)('url-list.txt', 'text/plain', infos.map(function (info) {
	        return info.href;
	      }).join('\r\n'));
	    });
	  },
	  onSelectAllClick: function onSelectAllClick() {
	    var _this2 = this;
	
	    this.singleModel.get('results').filter(function (recordModel) {
	      return (0, _download.isRecordDownloadable)(_this2.singleModel.get('layerModel'), recordModel);
	    }).forEach(function (recordModel) {
	      return recordModel.selectForDownload();
	    });
	  },
	  onDownloadSelectionChange: function onDownloadSelectionChange() {
	    var downloadSelection = this.singleModel.get('downloadSelection');
	    if (typeof downloadSelection !== 'undefined' && downloadSelection.length === 0) {
	      if (!this.singleModel.get('automaticSearch') || this.displaySelected) {
	        this.displaySelected = false;
	        this.renderResultContent();
	        this.onSearchModelsChange();
	      }
	      this.displaySelected = false;
	    }
	    this.checkButtons();
	  },
	  onSelectedCountClick: function onSelectedCountClick() {
	    this.saveScrollPosition();
	    this.displaySelected = !this.displaySelected;
	    this.render();
	    this.onSearchModelsChange();
	  },
	  checkButtons: function checkButtons() {
	    var totalCountNotS3 = this.collection.filter(function (searchModel) {
	      return searchModel.get('layerModel').get('download.protocol') !== 'S3';
	    }).reduce(function (count, searchModel) {
	      return count + searchModel.get('downloadSelection').length;
	    }, 0);
	
	    var totalCount = this.collection.reduce(function (count, searchModel) {
	      return count + searchModel.get('downloadSelection').length;
	    }, 0);
	
	    var fullDownloadEnabled = totalCountNotS3 > 0 && this.downloadEnabled;
	    var textDownloadEnabled = totalCount > 0 && this.downloadEnabled;
	    if (this.termsAndConditionsUrl) {
	      fullDownloadEnabled = fullDownloadEnabled && this.hasAcceptedTerms;
	      textDownloadEnabled = textDownloadEnabled && this.hasAcceptedTerms;
	    }
	
	    this.$('.start-download').prop('disabled', !fullDownloadEnabled);
	
	    this.$('.dropdown-toggle').prop('disabled', !textDownloadEnabled);
	
	    this.$('.select-files').prop('disabled', !textDownloadEnabled);
	
	    this.$('.deselect-all').prop('disabled', totalCount === 0);
	  },
	  getDownloadInfos: function getDownloadInfos(options) {
	    var _this3 = this;
	
	    function flatten(arr) {
	      return arr.reduce(function (acc, val) {
	        return acc.concat(val);
	      }, []);
	    }
	
	    var chunks = this.collection.map(function (searchModel) {
	      return searchModel.get('downloadSelection').map(function (recordModel) {
	        return (0, _download.getDownloadInfos)(searchModel.get('layerModel'), _this3.filtersModel, recordModel, options);
	      });
	    });
	
	    return Promise.all(flatten(chunks)).then(function (received) {
	      return flatten(received);
	    });
	  }
	});
	
	exports.default = CombinedResultView;
	/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(27)))

/***/ }),
/* 680 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	
	var _backbone = __webpack_require__(24);
	
	var _backbone2 = _interopRequireDefault(_backbone);
	
	var _backbone3 = __webpack_require__(11);
	
	var _backbone4 = _interopRequireDefault(_backbone3);
	
	var _SelectionListItemView = __webpack_require__(244);
	
	var _SelectionListItemView2 = _interopRequireDefault(_SelectionListItemView);
	
	var _DownloadListView = __webpack_require__(1017);
	
	var _DownloadListView2 = _interopRequireDefault(_DownloadListView);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var DownloadListView = _backbone4.default.CompositeView.extend({
	  template: _DownloadListView2.default,
	  childView: _SelectionListItemView2.default,
	  childViewContainer: '.selection-items',
	  buildChildView: function buildChildView(child, ChildViewClass) {
	    return new ChildViewClass({
	      model: child,
	      highlightModel: this.highlightModel,
	      fallbackThumbnailUrl: this.fallbackThumbnailUrl,
	      collection: this.collection
	    });
	  },
	  constructor: function constructor(options) {
	    var collection = new _backbone2.default.Collection();
	    collection.searchModel = options.searchModel;
	    _backbone4.default.CompositeView.prototype.constructor.call(this, Object.assign({}, options, {
	      collection: collection
	    }));
	  },
	  initialize: function initialize(options) {
	    this.highlightModel = options.highlightModel;
	    this.fallbackThumbnailUrl = options.fallbackThumbnailUrl;
	    this.searchModel = options.searchModel;
	    this.referenceCollection = options.referenceCollection;
	    this.listenTo(this.searchModel.get('downloadSelection'), 'update', this.onDownloadListItemRemoved);
	  },
	  onRender: function onRender() {
	    this.triggerMethod('list:render');
	  },
	  onDownloadListItemRemoved: function onDownloadListItemRemoved() {
	    // passing event up to parent
	    this.triggerMethod('downloadlist:itemRemoved');
	  }
	});
	
	exports.default = DownloadListView;

/***/ }),
/* 681 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	
	var _backbone = __webpack_require__(11);
	
	var _backbone2 = _interopRequireDefault(_backbone);
	
	var _download = __webpack_require__(46);
	
	__webpack_require__(1138);
	
	var _SearchResultHeaderView = __webpack_require__(1019);
	
	var _SearchResultHeaderView2 = _interopRequireDefault(_SearchResultHeaderView);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var SearchResultHeaderView = _backbone2.default.ItemView.extend({
	  template: _SearchResultHeaderView2.default,
	  templateHelpers: function templateHelpers() {
	    var hasLoaded = this.singleModel.get('hasLoaded');
	    var hasMore = this.hasMore();
	    var hasError = this.singleModel.get('hasError');
	    var loadMore = this.singleModel.get('loadMore');
	    var totalResults = this.singleModel.get('totalResults');
	    var layerModel = this.singleModel.get('layerModel');
	    var downloadSelection = this.singleModel.get('downloadSelection');
	    var downloadSelectionSize = typeof downloadSelection !== 'undefined' ? downloadSelection.length : 0;
	    var downloadableCount = this.collection.filter(function (searchModel) {
	      return searchModel.get('layerModel').get('display.visible');
	    }).map(function (searchModel) {
	      return searchModel.get('results').filter(function (recordModel) {
	        return (0, _download.isRecordDownloadable)(searchModel.get('layerModel'), recordModel);
	      }).length;
	    }).reduce(function (count, modelCount) {
	      return count + modelCount;
	    }, 0);
	    return {
	      termsAndConditionsUrl: this.termsAndConditionsUrl,
	      hasMore: hasMore,
	      totalResults: totalResults,
	      hasLoaded: hasLoaded,
	      hasError: hasError,
	      loadMore: loadMore,
	      countLoadMore: hasMore ? Math.min(totalResults - hasLoaded, loadMore) : 0,
	      automaticSearch: this.singleModel.get('automaticSearch'),
	      layerName: layerModel.get('displayName'),
	      anySelectedToDisplay: downloadSelectionSize > 0 || this.singleModel.get('automaticSearch'),
	      isSearching: this.singleModel.get('isSearching'),
	      downloadableListEmpty: downloadableCount === 0,
	      searchRequest: this.searchRequest,
	      displaySelected: this.displaySelected,
	      hasAcceptedTerms: this.hasAcceptedTerms
	    };
	  },
	
	
	  events: {
	    'click .btn-load-more': 'onLoadMoreClicked',
	    'click .select-all-combined': 'onSelectAllClick',
	    'click .btn-selected-count': 'onSelectedCountClick',
	    'change .terms-and-conditions': 'onTermsAndAndConditionsChange'
	  },
	
	  initialize: function initialize(options) {
	    this.singleModel = options.singleModel;
	    this.termsAndConditionsUrl = options.termsAndConditionsUrl;
	    this.searchRequest = this.singleModel.get('searchRequest');
	    this.displaySelected = options.displaySelected;
	    this.hasAcceptedTerms = options.hasAcceptedTerms;
	
	    this.listenTo(this.singleModel.get('downloadSelection'), 'reset update', this.onDownloadSelectionChange);
	  },
	  onRender: function onRender() {
	    this.refreshSelectedButton();
	  },
	  onSelectedCountClick: function onSelectedCountClick() {
	    // change handled at parent view through event listener
	    this.triggerMethod('click:selected-count');
	  },
	  onDownloadSelectionChange: function onDownloadSelectionChange() {
	    this.refreshSelectedButton();
	  },
	  onSelectAllClick: function onSelectAllClick() {
	    var _this = this;
	
	    this.singleModel.get('results').filter(function (recordModel) {
	      return (0, _download.isRecordDownloadable)(_this.singleModel.get('layerModel'), recordModel);
	    }).forEach(function (recordModel) {
	      return recordModel.selectForDownload();
	    });
	  },
	  onLoadMoreClicked: function onLoadMoreClicked() {
	    this.singleModel.searchMore();
	  },
	  onTermsAndAndConditionsChange: function onTermsAndAndConditionsChange() {
	    // change handled at parent view through event listener
	    this.hasAcceptedTerms = this.$('.terms-and-conditions').is(':checked');
	    this.triggerMethod('change:terms-and-conditions', this.hasAcceptedTerms);
	  },
	  hasMore: function hasMore() {
	    if (this.singleModel.get('hasError')) {
	      return false;
	    }
	    var totalResults = this.singleModel.get('totalResults');
	    var hasLoaded = this.singleModel.get('hasLoaded');
	    return typeof totalResults !== 'undefined' && typeof hasLoaded !== 'undefined' ? totalResults > hasLoaded : false;
	  },
	  refreshSelectedButton: function refreshSelectedButton() {
	    var selectedProducts = this.singleModel.get('downloadSelection');
	    var selectedCount = typeof selectedProducts !== 'undefined' ? selectedProducts.length : 0;
	    this.$('.btn-selected-count').prop('disabled', selectedCount === 0 || this.singleModel.get('automaticSearch') === false);
	    if (this.displaySelected && this.singleModel.get('automaticSearch') === true) {
	      this.$('.btn-selected-count').html('<span class="caret selected-count-caret"></span>\n Show all products');
	    } else {
	      this.$('.btn-selected-count').html('Selected (' + selectedCount + ')');
	    }
	  }
	});
	
	exports.default = SearchResultHeaderView;

/***/ }),
/* 682 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	
	var _RecordItemView = __webpack_require__(167);
	
	var _RecordItemView2 = _interopRequireDefault(_RecordItemView);
	
	var _download = __webpack_require__(46);
	
	var _SearchResultItemView = __webpack_require__(1020);
	
	var _SearchResultItemView2 = _interopRequireDefault(_SearchResultItemView);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	// eslint-disable-next-line max-len
	var SearchResultItemView = _RecordItemView2.default.extend({
	  template: _SearchResultItemView2.default,
	  className: 'result-list-item record-item',
	
	  events: Object.assign({}, _RecordItemView2.default.prototype.events, {
	    'click a': 'onChecked'
	  }),
	
	  initialize: function initialize(options) {
	    var searchModel = options.searchModel;
	    this.layerModel = searchModel.get('layerModel');
	    _RecordItemView2.default.prototype.initialize.call(this, Object.assign({}, options, {
	      thumbnailUrlPattern: this.layerModel.get('search.thumbnailUrlPattern'),
	      collection: options.model.collection
	    }));
	    var downloadSelectionCollection = searchModel.get('downloadSelection');
	    this.listenTo(downloadSelectionCollection, 'reset update', this.onSelectedForDownloadChange);
	  },
	  onRender: function onRender() {
	    _RecordItemView2.default.prototype.onRender.call(this);
	    this.onSelectedForDownloadChange();
	  },
	  onChecked: function onChecked(event) {
	    event.preventDefault();
	    if ((0, _download.isRecordDownloadable)(this.layerModel, this.model)) {
	      this.model.selectForDownload(!this.model.isSelectedForDownload());
	    }
	  },
	  onSelectedForDownloadChange: function onSelectedForDownloadChange() {
	    this.$el.toggleClass('selected-for-download', this.model.isSelectedForDownload());
	  }
	});
	
	exports.default = SearchResultItemView;

/***/ }),
/* 683 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	
	var _backbone = __webpack_require__(24);
	
	var _backbone2 = _interopRequireDefault(_backbone);
	
	var _backbone3 = __webpack_require__(11);
	
	var _backbone4 = _interopRequireDefault(_backbone3);
	
	var _SearchResultItemView = __webpack_require__(682);
	
	var _SearchResultItemView2 = _interopRequireDefault(_SearchResultItemView);
	
	var _SearchResultListView = __webpack_require__(1021);
	
	var _SearchResultListView2 = _interopRequireDefault(_SearchResultListView);
	
	__webpack_require__(1139);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	// eslint-disable-next-line max-len
	var SearchResultListView = _backbone4.default.CompositeView.extend({
	  template: _SearchResultListView2.default,
	  templateHelpers: function templateHelpers() {
	    return {
	      hasError: this.searchModel.get('hasError')
	    };
	  },
	
	  tagName: 'ul',
	  className: 'search-result-list list-unstyled list-inline',
	
	  childView: _SearchResultItemView2.default,
	  childViewContainer: 'ul.result-list',
	
	  buildChildView: function buildChildView(child, ChildViewClass) {
	    return new ChildViewClass({
	      model: child,
	      searchModel: this.searchModel,
	      highlightModel: this.highlightModel,
	      fallbackThumbnailUrl: this.fallbackThumbnailUrl
	    });
	  },
	
	
	  childEvents: {
	    'item:clicked': 'onItemClicked',
	    'item:info': 'onItemInfo',
	    'item:hover': 'onItemHover',
	    'item:hover:end': 'onItemHoverEnd'
	  },
	
	  constructor: function constructor(options) {
	    var collection = new _backbone2.default.Collection();
	    collection.searchModel = options.searchModel;
	    _backbone4.default.CompositeView.prototype.constructor.call(this, Object.assign({}, options, {
	      collection: collection
	    }));
	  },
	  initialize: function initialize(options) {
	    this.searchModel = options.searchModel;
	    this.highlightModel = options.highlightModel;
	    this.fallbackThumbnailUrl = options.fallbackThumbnailUrl;
	    this.referenceCollection = options.referenceCollection;
	  },
	  onRender: function onRender() {
	    this.triggerMethod('list:render');
	  },
	  onItemClicked: function onItemClicked(childView) {
	    this.trigger('item:clicked', childView.model);
	  },
	  onItemInfo: function onItemInfo(childView) {
	    this.trigger('item:info', {
	      record: childView.model, searchModel: this.searchModel
	    });
	  },
	  onItemHover: function onItemHover(childView) {
	    this.highlightModel.highlight(childView.model.attributes);
	  },
	  onItemHoverEnd: function onItemHoverEnd(childView) {
	    this.highlightModel.unHighlight(childView.model.attributes);
	  }
	});
	
	exports.default = SearchResultListView;

/***/ }),
/* 684 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	
	var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
	
	var _jquery = __webpack_require__(12);
	
	var _jquery2 = _interopRequireDefault(_jquery);
	
	var _backbone = __webpack_require__(24);
	
	var _backbone2 = _interopRequireDefault(_backbone);
	
	var _backbone3 = __webpack_require__(11);
	
	var _backbone4 = _interopRequireDefault(_backbone3);
	
	var _i18next = __webpack_require__(163);
	
	var _i18next2 = _interopRequireDefault(_i18next);
	
	var _AreaFilterView = __webpack_require__(1022);
	
	var _AreaFilterView2 = _interopRequireDefault(_AreaFilterView);
	
	__webpack_require__(1140);
	
	var _FeatureListView = __webpack_require__(690);
	
	var _FeatureListView2 = _interopRequireDefault(_FeatureListView);
	
	var _utils = __webpack_require__(312);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var AreaFilterView = _backbone4.default.LayoutView.extend({
	  template: _AreaFilterView2.default,
	  templateHelpers: function templateHelpers() {
	    return {
	      uploadEnabled: this.uploadEnabled,
	      collapsed: this.collapsed
	    };
	  },
	
	  className: 'panel panel-default',
	  events: {
	    'change .show-point input': 'onPointInputChange',
	    'change .show-bbox input': 'onBBoxInputChange',
	    'click .tool-point': 'onToolPointClicked',
	    'click .tool-bbox': 'onToolBBoxClicked',
	    'click .tool-polygon': 'onToolPolygonClicked',
	    'click .tool-clear': 'onToolClearClicked',
	    'click .tool-show-feature': 'onToolShowFeatureClicked',
	    'change :file': 'onFileChanged'
	  },
	
	  initialize: function initialize(options) {
	    this.mapModel = options.mapModel;
	    this.highlightModel = options.highlightModel;
	    this.uploadEnabled = options.uploadEnabled;
	    this.featureListCollection = new _backbone2.default.Collection();
	
	    this.listenTo(this.mapModel, 'change:area', this.onMapAreaChanged);
	    this.listenTo(this.mapModel, 'change:tool', this.onMapToolChanged);
	    this.listenTo(this.mapModel, 'change:bbox', this.onMapBBOXChanged);
	
	    // set according to configured filter
	    if (options.settings) {
	      this.collapsed = options.settings.collapsed;
	      this.settings = options.settings.settings;
	    } else {
	      this.collapsed = false;
	      this.settings = null;
	    }
	  },
	
	
	  // Marionette event listeners
	
	  onBeforeShow: function onBeforeShow() {
	    if (this.uploadEnabled) {
	      this.addRegion('featureList', '.feature-list');
	      this.showChildView('featureList', new _FeatureListView2.default({
	        mapModel: this.mapModel,
	        highlightModel: this.highlightModel,
	        collection: this.featureListCollection
	      }));
	
	      (0, _jquery2.default)(this.el).find('[data-toggle="tooltip"]').tooltip();
	    }
	
	    if (this.settings && this.settings.type && this.settings.coordinates) {
	      // delegate feature creation to eoxc because of OL dependency
	      this.mapModel.trigger('manual:filterFromConfig', this.settings.type, this.settings.coordinates);
	    }
	  },
	
	
	  // DOM event listeners
	
	  onPointInputChange: function onPointInputChange() {
	    var coordinates = this.$('.show-point input[type=number]').map(function (index, elem) {
	      return (0, _jquery2.default)(elem).val();
	    }).get().map(parseFloat);
	
	    if (coordinates.reduce(function (prev, current) {
	      return prev && !isNaN(current);
	    }, true)) {
	      this.mapModel.set('drawnArea', null);
	      this.mapModel.set('area', {
	        geometry: { type: 'Point', coordinates: coordinates },
	        type: 'Feature'
	      });
	    }
	  },
	  onBBoxInputChange: function onBBoxInputChange() {
	    var bbox = this.$('.show-bbox input[type=number]').map(function (index, elem) {
	      return (0, _jquery2.default)(elem).val();
	    }).get().map(parseFloat);
	
	    if (bbox.reduce(function (prev, current) {
	      return prev && !isNaN(current);
	    }, true)) {
	      this.mapModel.set('drawnArea', null);
	      this.mapModel.set('area', bbox);
	    }
	  },
	  onToolPointClicked: function onToolPointClicked() {
	    this.mapModel.set('tool', 'point');
	  },
	  onToolBBoxClicked: function onToolBBoxClicked() {
	    this.mapModel.set('tool', 'bbox');
	  },
	  onToolPolygonClicked: function onToolPolygonClicked() {
	    this.mapModel.set('tool', 'polygon');
	  },
	  onToolClearClicked: function onToolClearClicked(event) {
	    event.preventDefault();
	    this.mapModel.set('tool', null);
	    this.mapModel.set('drawnArea', null);
	    this.mapModel.set('area', null);
	  },
	  onToolShowFeatureClicked: function onToolShowFeatureClicked(event) {
	    event.preventDefault();
	    var area = this.mapModel.get('drawnArea') || this.mapModel.get('area');
	    this.mapModel.show(area);
	  },
	  onFileChanged: function onFileChanged(event) {
	    var _this = this;
	
	    var currentTarget = event.currentTarget;
	    var $input = (0, _jquery2.default)(event.target).parents('.input-group').find(':text');
	    if (currentTarget.files && currentTarget.files.length) {
	      var files = Array.from(currentTarget.files);
	      var names = files.map(function (file) {
	        return file.name;
	      }).join(', ');
	
	      $input.val(names);
	
	      (0, _utils.parseFeaturesFromFiles)(files).then(function (features) {
	        _this.featureListCollection.reset(features);
	        _this.$('.select-feature').prop('disabled', false);
	        _this.$('.panel-features').fadeIn('fast');
	      }).catch(function (error) {
	        $input.val('');
	        currentTarget.value = '';
	        _this.featureListCollection.reset([]);
	        throw error;
	      });
	    } else {
	      $input.val('');
	      this.featureListCollection.reset([]);
	    }
	  },
	
	
	  // model event listeners
	
	  onMapAreaChanged: function onMapAreaChanged(mapModel) {
	    var area = mapModel.get('area');
	
	    if (Array.isArray(area) && area.length === 4) {
	      var _area = _slicedToArray(area, 4),
	          minx = _area[0],
	          miny = _area[1],
	          maxx = _area[2],
	          maxy = _area[3];
	
	      this.$('.show-bbox input[type=number]:eq(0)').val(minx);
	      this.$('.show-bbox input[type=number]:eq(1)').attr('max', maxy).val(miny);
	      this.$('.show-bbox input[type=number]:eq(2)').val(maxx);
	      this.$('.show-bbox input[type=number]:eq(3)').attr('min', miny).val(maxy);
	      this.$('.show-bbox:hidden').slideDown();
	      this.$('.show-geometry').not('.show-bbox').slideUp();
	    } else if (area && area.geometry && area.geometry.type === 'Point') {
	      this.$('.show-point input[type=number]:eq(0)').val(area.geometry.coordinates[0]);
	      this.$('.show-point input[type=number]:eq(1)').val(area.geometry.coordinates[1]);
	      this.$('.show-point:hidden').slideDown();
	      this.$('.show-geometry').not('.show-point').slideUp();
	    } else if (area && area.geometry) {
	      var name = _i18next2.default.t('Drawn Shape');
	      if (area.properties) {
	        var keys = ['name', 'NAME']; // TODO: more
	        for (var i = 0; i < keys.length; ++i) {
	          if (area.properties.hasOwnProperty(keys[i])) {
	            name = area.properties[keys[i]];
	            break;
	          }
	        }
	      }
	      this.$('.show-polygon input[type=text]').val(name);
	      this.$('.show-polygon:hidden').slideDown();
	      this.$('.show-geometry').not('.show-polygon').slideUp();
	    }
	
	    if (area) {
	      this.$('#selection-wrapper').show();
	      this.$('#map-bbox-wrapper').slideUp();
	    } else {
	      this.$('#selection-wrapper').slideUp();
	      this.$('#map-bbox-wrapper').slideDown();
	    }
	  },
	  onMapToolChanged: function onMapToolChanged(mapModel, tool) {
	    this.$('.tool').removeClass('active');
	    if (tool) {
	      this.$('.tool-' + tool).addClass('active');
	    }
	  },
	  onMapBBOXChanged: function onMapBBOXChanged() {
	    var bbox = this.mapModel.get('bbox');
	    this.$('#map-bbox-wrapper input:eq(0)').val(bbox[0].toFixed(2));
	    this.$('#map-bbox-wrapper input:eq(1)').val(bbox[1].toFixed(2));
	    this.$('#map-bbox-wrapper input:eq(2)').val(bbox[2].toFixed(2));
	    this.$('#map-bbox-wrapper input:eq(3)').val(bbox[3].toFixed(2));
	  }
	});
	
	exports.default = AreaFilterView;

/***/ }),
/* 685 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	
	var _BaseExtraParameterView = __webpack_require__(191);
	
	var _BaseExtraParameterView2 = _interopRequireDefault(_BaseExtraParameterView);
	
	var _ExtraParameterPlainView = __webpack_require__(1023);
	
	var _ExtraParameterPlainView2 = _interopRequireDefault(_ExtraParameterPlainView);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var ExtraParameterPlainView = _BaseExtraParameterView2.default.extend({
	  template: _ExtraParameterPlainView2.default,
	
	  events: {
	    'change input[type="text"]': 'onInputChange'
	  },
	
	  onInputChange: function onInputChange() {
	    var type = this.model.get('type');
	    var value = this.$('input[type="text"]').val();
	    if (!value || value === '') {
	      this.trigger('value:unset', type);
	    } else {
	      this.trigger('value:change', type, value);
	    }
	  }
	});
	
	exports.default = ExtraParameterPlainView;

/***/ }),
/* 686 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	
	var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
	
	var _jquery = __webpack_require__(12);
	
	var _jquery2 = _interopRequireDefault(_jquery);
	
	__webpack_require__(192);
	
	__webpack_require__(230);
	
	var _BaseExtraParameterView = __webpack_require__(191);
	
	var _BaseExtraParameterView2 = _interopRequireDefault(_BaseExtraParameterView);
	
	var _ExtraParameterRangeView = __webpack_require__(1024);
	
	var _ExtraParameterRangeView2 = _interopRequireDefault(_ExtraParameterRangeView);
	
	__webpack_require__(1141);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var ExtraParameterRangeView = _BaseExtraParameterView2.default.extend({
	  template: _ExtraParameterRangeView2.default,
	
	  templateHelpers: function templateHelpers() {
	    var defaultValue = this.model.get('default');
	    var low = defaultValue ? defaultValue[0] || defaultValue.min : this.model.get('min');
	    var high = defaultValue ? defaultValue[1] || defaultValue.max : this.model.get('max');
	    var step = this.model.get('step');
	
	    return Object.assign(_BaseExtraParameterView2.default.prototype.templateHelpers.call(this), {
	      low: low,
	      high: high,
	      step: step
	    });
	  },
	
	
	  events: {
	    'slideStop input[data-provide="slider"]': 'onSliderStop'
	  },
	
	  onAttach: function onAttach() {
	    this.$('[data-provide="slider"]').slider({
	      tooltip_position: 'top',
	      formatter: function formatter(value) {
	        if (Array.isArray(value)) {
	          return value[0] + ' - ' + value[1];
	        }
	        return value;
	      }
	    });
	  },
	  onSliderStop: function onSliderStop(event) {
	    var $target = (0, _jquery2.default)(event.target);
	    var type = this.model.get('type');
	
	    var _event$value = _slicedToArray(event.value, 2),
	        low = _event$value[0],
	        high = _event$value[1];
	
	    if ($target.data('slider-min') === low && $target.data('slider-max') === high) {
	      this.trigger('value:unset', type);
	    } else {
	      this.trigger('value:change', type, { min: low, max: high });
	    }
	  }
	});
	
	exports.default = ExtraParameterRangeView;

/***/ }),
/* 687 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	
	var _BaseExtraParameterView = __webpack_require__(191);
	
	var _BaseExtraParameterView2 = _interopRequireDefault(_BaseExtraParameterView);
	
	var _ExtraParameterSelectView = __webpack_require__(1025);
	
	var _ExtraParameterSelectView2 = _interopRequireDefault(_ExtraParameterSelectView);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var ExtraParameterSelectView = _BaseExtraParameterView2.default.extend({
	  template: _ExtraParameterSelectView2.default,
	
	  templateHelpers: function templateHelpers() {
	    var defaultValue = this.model.get('default');
	    return Object.assign(_BaseExtraParameterView2.default.prototype.templateHelpers.call(this), {
	      options: this.model.get('options').map(function (option) {
	        return Object.assign({}, option, {
	          isSelected: option.value === defaultValue
	        });
	      })
	    });
	  },
	
	
	  events: {
	    'change select': 'onSelectChange'
	  },
	
	  onSelectChange: function onSelectChange() {
	    var type = this.model.get('type');
	    var value = this.$('select').val();
	    if (!value || value === '') {
	      this.trigger('value:unset', type);
	    } else {
	      this.trigger('value:change', type, value);
	    }
	  }
	});
	
	exports.default = ExtraParameterSelectView;

/***/ }),
/* 688 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	
	var _backbone = __webpack_require__(11);
	
	var _backbone2 = _interopRequireDefault(_backbone);
	
	var _ExtraParametersListView = __webpack_require__(1026);
	
	var _ExtraParametersListView2 = _interopRequireDefault(_ExtraParametersListView);
	
	__webpack_require__(1142);
	
	var _ExtraParameterRangeView = __webpack_require__(686);
	
	var _ExtraParameterRangeView2 = _interopRequireDefault(_ExtraParameterRangeView);
	
	var _ExtraParameterSelectView = __webpack_require__(687);
	
	var _ExtraParameterSelectView2 = _interopRequireDefault(_ExtraParameterSelectView);
	
	var _ExtraParameterPlainView = __webpack_require__(685);
	
	var _ExtraParameterPlainView2 = _interopRequireDefault(_ExtraParameterPlainView);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var ExtraParametersListView = _backbone2.default.CompositeView.extend({
	  template: _ExtraParametersListView2.default,
	  templateHelpers: function templateHelpers() {
	    var layerModel = this.searchModel.get('layerModel');
	    return {
	      name: layerModel.get('displayName'),
	      id: layerModel.cid,
	      collapsed: this.collapsed,
	      singleLayerModeUsed: this.singleLayerModeUsed
	    };
	  },
	
	  className: 'panel panel-default',
	
	  initialize: function initialize(options) {
	    this.searchModel = options.searchModel;
	    this.filtersModel = options.searchModel.get('filtersModel');
	    this.listenTo(this.searchModel, 'change display.visible', this.onChangeVisible);
	    this.singleLayerModeUsed = options.singleLayerModeUsed;
	    // set according to configured filter
	    // additional filters are by default collapsed=true
	    if (options.settings) {
	      if (typeof options.settings.collapsed !== 'undefined') {
	        this.collapsed = options.settings.collapsed;
	      } else {
	        this.collapsed = true;
	      }
	    } else {
	      this.collapsed = true;
	    }
	  },
	  childViewContainer: function childViewContainer() {
	    return '#collapse-additional-filters-' + this.searchModel.get('layerModel').cid;
	  },
	  filter: function filter(parameter) {
	    // exclude 'fixed' parameters
	    return !parameter.get('fixed');
	  },
	  getChildView: function getChildView(parameter) {
	    if (parameter.get('range')) {
	      return _ExtraParameterRangeView2.default;
	    } else if (parameter.get('options')) {
	      return _ExtraParameterSelectView2.default;
	    }
	    return _ExtraParameterPlainView2.default;
	  },
	  onRender: function onRender() {
	    this.onChangeVisible();
	  },
	  onChangeVisible: function onChangeVisible() {
	    this.$el.css('display', this.searchModel.get('layerModel').get('display.visible') ? '' : 'none');
	  },
	
	
	  childEvents: {
	    'value:unset': 'onParameterValueUnset',
	    'value:change': 'onParameterValueChange'
	  },
	  onParameterValueUnset: function onParameterValueUnset(childView, type) {
	    this.filtersModel.unset(type);
	  },
	  onParameterValueChange: function onParameterValueChange(childView, type, value) {
	    this.filtersModel.set(type, value);
	  }
	});
	
	exports.default = ExtraParametersListView;

/***/ }),
/* 689 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	
	var _backbone = __webpack_require__(11);
	
	var _backbone2 = _interopRequireDefault(_backbone);
	
	var _FeatureListItemView = __webpack_require__(1027);
	
	var _FeatureListItemView2 = _interopRequireDefault(_FeatureListItemView);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var nameAttributes = ['NAME', 'name', 'ID', 'id'];
	
	var FeatureListItemView = _backbone2.default.ItemView.extend({
	  tagName: 'li',
	  template: _FeatureListItemView2.default,
	  templateHelpers: function templateHelpers() {
	    var name = void 0;
	    var hasName = false;
	    var properties = this.model.get('properties');
	
	    if (properties) {
	      for (var i = 0; i < nameAttributes.length; ++i) {
	        name = properties[nameAttributes[i]];
	        if (name) {
	          hasName = true;
	          break;
	        }
	      }
	    }
	
	    return { hasName: hasName, name: name };
	  },
	
	  triggers: {
	    'click a': 'item:clicked',
	    mouseover: 'item:hover',
	    mouseout: 'item:hover:end'
	  }
	});
	
	exports.default = FeatureListItemView;

/***/ }),
/* 690 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	
	var _jquery = __webpack_require__(12);
	
	var _jquery2 = _interopRequireDefault(_jquery);
	
	var _backbone = __webpack_require__(11);
	
	var _backbone2 = _interopRequireDefault(_backbone);
	
	var _FeatureListView = __webpack_require__(1028);
	
	var _FeatureListView2 = _interopRequireDefault(_FeatureListView);
	
	var _FeatureListItemView = __webpack_require__(689);
	
	var _FeatureListItemView2 = _interopRequireDefault(_FeatureListItemView);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var FeatureListView = _backbone2.default.CompositeView.extend({
	  className: 'dropdown',
	  template: _FeatureListView2.default,
	
	  childView: _FeatureListItemView2.default,
	  childViewContainer: '.dropdown-menu',
	
	  childEvents: {
	    'item:clicked': 'onItemClicked',
	    'item:hover': 'onItemHover',
	    'item:hover:end': 'onItemHoverEnd'
	  },
	
	  initialize: function initialize(options) {
	    this.mapModel = options.mapModel;
	    this.highlightModel = options.highlightModel;
	    this.listenTo(this.collection, 'reset', this.onCollectionReset);
	  },
	  onBeforeShow: function onBeforeShow() {
	    var _this = this;
	
	    // and when you show it, move it to the body
	    this.$el.on('show.bs.dropdown', function (e) {
	      // grab the menu
	      _this.dropdownMenu = (0, _jquery2.default)(e.target).find('.dropdown-menu');
	
	      // detach it and append it to the body
	      (0, _jquery2.default)('body').append(_this.dropdownMenu.detach());
	
	      // grab the new offset position
	      var eOffset = (0, _jquery2.default)(e.target).offset();
	
	      // make sure to place it where it would normally go (this could be improved)
	      _this.dropdownMenu.css({
	        display: 'block',
	        top: eOffset.top + (0, _jquery2.default)(e.target).outerHeight(),
	        left: eOffset.left
	      });
	    });
	
	    // and when you hide it, reattach the drop down, and hide it normally
	    this.$el.on('hide.bs.dropdown', function (e) {
	      (0, _jquery2.default)(e.target).append(_this.dropdownMenu.detach());
	      _this.dropdownMenu.hide();
	    });
	  },
	  onCollectionReset: function onCollectionReset() {
	    this.$('button').prop('disabled', this.collection.length === 0);
	  },
	  onItemClicked: function onItemClicked(childView) {
	    this.mapModel.set('drawnArea', null);
	    this.mapModel.set('area', childView.model.attributes);
	    this.dropdownMenu.hide();
	  },
	  onItemHover: function onItemHover(childView) {
	    this.highlightModel.highlight(childView.model.attributes);
	  },
	  onItemHoverEnd: function onItemHoverEnd(childView) {
	    this.highlightModel.unHighlight(childView.model.attributes);
	  }
	});
	
	exports.default = FeatureListView;

/***/ }),
/* 691 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	
	var _backbone = __webpack_require__(24);
	
	var _backbone2 = _interopRequireDefault(_backbone);
	
	var _backbone3 = __webpack_require__(11);
	
	var _backbone4 = _interopRequireDefault(_backbone3);
	
	var _RootFiltersView = __webpack_require__(1029);
	
	var _RootFiltersView2 = _interopRequireDefault(_RootFiltersView);
	
	__webpack_require__(1143);
	
	var _TimeFilterView = __webpack_require__(692);
	
	var _TimeFilterView2 = _interopRequireDefault(_TimeFilterView);
	
	var _AreaFilterView = __webpack_require__(684);
	
	var _AreaFilterView2 = _interopRequireDefault(_AreaFilterView);
	
	var _ExtraParametersListView = __webpack_require__(688);
	
	var _ExtraParametersListView2 = _interopRequireDefault(_ExtraParametersListView);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var RootFiltersView = _backbone4.default.LayoutView.extend({
	  template: _RootFiltersView2.default,
	  templateHelpers: function templateHelpers() {
	    var searchModelsWithParameters = this.searchCollection.filter(function (searchModel) {
	      return (searchModel.get('layerModel').get('search.parameters') || []).filter(function (param) {
	        return !param.fixed;
	      }).length;
	    });
	    return {
	      searchModelsWithParameters: searchModelsWithParameters,
	      layerIdsWithParameters: searchModelsWithParameters.map(function (searchModel) {
	        return searchModel.get('layerModel').cid;
	      })
	    };
	  },
	
	  tagName: 'form',
	  className: 'filters-view',
	  regions: {
	    timeFilter: '#time-filter',
	    areaFilter: '#area-filter',
	    extraParameters: '#extra-parameters'
	  },
	
	  initialize: function initialize(options) {
	    this.mapModel = options.mapModel;
	    this.highlightModel = options.highlightModel;
	    this.filtersModel = options.filtersModel;
	    this.searchCollection = options.searchCollection;
	    this.uploadEnabled = options.uploadEnabled;
	    this.domain = options.domain;
	    this.constrainTimeDomain = options.constrainTimeDomain;
	    this.filterSettings = options.filterSettings;
	    this.singleLayerModeUsed = options.singleLayerModeUsed;
	    this.layersCollection = options.layersCollection;
	    this.baseLayersCollection = options.baseLayersCollection;
	    this.overlayLayersCollection = options.overlayLayersCollection;
	  },
	  onBeforeShow: function onBeforeShow() {
	    var _this = this;
	
	    var options = {
	      mapModel: this.mapModel,
	      highlightModel: this.highlightModel,
	      filtersModel: this.filtersModel
	    };
	    // check out which filters to show
	    if (this.filterSettings) {
	      var fs = this.filterSettings;
	      if (fs.time) {
	        this.timeSettings = fs.time;
	        this.timeFilterHidden = this.timeSettings.hidden;
	      }
	      if (fs.area) {
	        this.areaSettings = fs.area;
	        this.areaFilterHidden = this.areaSettings.hidden;
	      }
	    }
	
	    if (!this.timeFilterHidden) {
	      this.showChildView('timeFilter', new _TimeFilterView2.default(Object.assign({}, options, {
	        constrainTimeDomain: this.constrainTimeDomain,
	        domain: this.domain,
	        settings: this.timeSettings,
	        layersCollection: this.layersCollection,
	        overlayLayersCollection: this.overlayLayersCollection,
	        baseLayersCollection: this.baseLayersCollection
	      })));
	    }
	    if (!this.areaFilterHidden) {
	      this.showChildView('areaFilter', new _AreaFilterView2.default(Object.assign({}, options, {
	        uploadEnabled: this.uploadEnabled,
	        settings: this.areaSettings
	      })));
	    }
	    this.templateHelpers().searchModelsWithParameters.forEach(function (searchModel) {
	      var layerModel = searchModel.get('layerModel');
	      var layerId = layerModel.cid;
	      var paramFs = layerModel.get('search.parametersFilterSettings');
	      var additionalFilterHidden = false;
	      if (paramFs) {
	        additionalFilterHidden = paramFs.hidden;
	      }
	      if (!additionalFilterHidden) {
	        _this.addRegion('extraParameters' + layerId, '#extra-parameters-' + layerId);
	        _this.showChildView('extraParameters' + layerId, new _ExtraParametersListView2.default(Object.assign({}, options, {
	          searchModel: searchModel,
	          collection: new _backbone2.default.Collection(layerModel.get('search.parameters')),
	          settings: paramFs,
	          singleLayerModeUsed: _this.singleLayerModeUsed
	        })));
	      }
	    });
	  }
	});
	
	exports.default = RootFiltersView;

/***/ }),
/* 692 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	
	var _backbone = __webpack_require__(11);
	
	var _backbone2 = _interopRequireDefault(_backbone);
	
	var _moment = __webpack_require__(2);
	
	var _moment2 = _interopRequireDefault(_moment);
	
	__webpack_require__(1080);
	
	__webpack_require__(970);
	
	__webpack_require__(1111);
	
	var _jquery = __webpack_require__(12);
	
	var _jquery2 = _interopRequireDefault(_jquery);
	
	var _TimeFilterView = __webpack_require__(1030);
	
	var _TimeFilterView2 = _interopRequireDefault(_TimeFilterView);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	var TimeFilterView = _backbone2.default.ItemView.extend({
	  template: _TimeFilterView2.default,
	  templateHelpers: function templateHelpers() {
	    return {
	      maxMapInterval: this.maxMapInterval,
	      collapsed: this.collapsed
	    };
	  },
	
	  className: 'panel panel-default',
	  events: {
	    'dp.change .datetime': 'onDateInputChange',
	    'click .tool-show-time': 'onShowTimeClicked',
	    'click .tool-clear-time': 'onClearTimeClicked'
	  },
	
	  initialize: function initialize(options) {
	    this.mapModel = options.mapModel;
	    this.layersCollection = options.layersCollection;
	    this.baseLayersCollection = options.baseLayersCollection;
	    this.overlayLayersCollection = options.overlayLayersCollection;
	    this.maxMapInterval = this.mapModel.get('maxMapInterval');
	    this.domain = options.domain;
	    this.constrainTimeDomain = options.constrainTimeDomain;
	    this.listenTo(this.mapModel, 'change:time', this.onMapTimeChanged);
	    this.listenTo(this.mapModel, 'change:extendedTime', this.onMapExtendedTimeChanged);
	    this.listenTo(this.mapModel, 'change:exceedMaxMapInterval', this.onMapIntervalExceeded);
	    // set according to configured filter
	    if (options.settings) {
	      this.collapsed = options.settings.collapsed;
	      this.settings = options.settings.settings;
	    } else {
	      this.collapsed = false;
	      this.settings = null;
	    }
	  },
	
	
	  // Marionette event listeners
	
	  onBeforeShow: function onBeforeShow() {
	    var _this = this;
	
	    if (!this.maxMapInterval) {
	      this.$('.time-buttons').hide();
	    }
	    var minDate = this.constrainTimeDomain ? this.domain.start : false;
	    var maxDate = this.constrainTimeDomain ? this.domain.end : false;
	    ['start', 'end'].forEach(function (label) {
	      var $elem = _this.$('input.' + label);
	      $elem.datetimepicker({
	        locale: 'en',
	        format: 'YYYY-MM-DD HH:mm:ss',
	        dayViewHeaderFormat: 'YYYY-MM',
	        useCurrent: false,
	        showTodayButton: true,
	        showClose: true,
	        timeZone: 'UTC',
	        widgetPositioning: {
	          horizontal: 'right',
	          vertical: 'top'
	        },
	        widgetParent: '#app',
	        keyBinds: {
	          enter: function enter() {
	            var value = $elem.find('input').val();
	            this.date(value);
	            this.viewDate(value);
	            this.hide();
	          },
	
	          left: null,
	          right: null,
	          delete: null
	        },
	        icons: {
	          close: 'glyphicon glyphicon-ok'
	        },
	        minDate: minDate,
	        maxDate: maxDate
	      });
	      // mundi specific calendar absolute positioning floating above the app
	      $elem.on('dp.show', function () {
	        var dateInputRect = _this.el.getBoundingClientRect();
	        (0, _jquery2.default)('.bootstrap-datetimepicker-widget').css({
	          left: dateInputRect.left + 'px',
	          top: dateInputRect.top - 4 + 'px'
	        });
	      });
	    });
	  },
	  onAttach: function onAttach() {
	    // set according to configured filter
	    if (this.settings && Array.isArray(this.settings.mapTime)) {
	      var mapTime = this.settings.mapTime.map(function (t) {
	        return _moment2.default.utc(t).toDate();
	      });
	      if (mapTime[1] < mapTime[0]) {
	        mapTime.reverse();
	      }
	      this.mapModel.set('extendedTime', mapTime);
	      this.mapModel.set('time', mapTime);
	      this.onShowTimeClicked();
	    } else {
	      this.onMapExtendedTimeChanged(this.mapModel);
	      this.onMapTimeChanged();
	    }
	    this.onMapIntervalExceeded(this.mapModel);
	  },
	
	
	  // DOM event listeners
	
	  onDateInputChange: function onDateInputChange() {
	    var start = this.$('.datetime.start').data('DateTimePicker').date();
	    var end = this.$('.datetime.end').data('DateTimePicker').date();
	
	    if (!this.updatingTime && start && end) {
	      var startDate = start.toDate();
	      var endDate = end.toDate();
	      var time = startDate < endDate ? [startDate, endDate] : [endDate, startDate];
	      this.mapModel.set('extendedTime', time);
	      if (this.maxMapInterval) {
	        this.mapModel.set('time', time);
	        this.onShowTimeClicked();
	      }
	    }
	  },
	  onShowTimeClicked: function onShowTimeClicked() {
	    // modify time to show 1.1 * larger area on timeSlider
	    // this makes dragging of handles more user friendly
	    var extendedTime = this.mapModel.get('extendedTime');
	    var timeDiff = extendedTime[1] - extendedTime[0];
	    var startDateObjectSubtracted = new Date(extendedTime[0].getTime() - timeDiff * 0.05);
	    var startDateObjectAdded = new Date(extendedTime[1].getTime() + timeDiff * 0.05);
	    extendedTime = [startDateObjectSubtracted, startDateObjectAdded];
	    this.mapModel.showTime(extendedTime);
	  },
	  onClearTimeClicked: function onClearTimeClicked() {
	    this.mapModel.unset('extendedTime');
	    this.onMapTimeChanged();
	  },
	
	
	  // model event listeners
	
	  onMapTimeChanged: function onMapTimeChanged() {
	    var time = this.mapModel.get('time');
	
	    // if a filter is set explicitly, do not update the text
	    if (!this.maxMapInterval && this.mapModel.get('extendedTime')) {
	      return;
	    }
	
	    this.updatingTime = true;
	    this.$('.start').data('DateTimePicker').date(_moment2.default.utc(time[0]));
	    this.$('.end').data('DateTimePicker').date(_moment2.default.utc(time[1]));
	    this.$('.start').data('DateTimePicker').viewDate(_moment2.default.utc(time[0]));
	    this.$('.end').data('DateTimePicker').viewDate(_moment2.default.utc(time[1]));
	    this.updatingTime = false;
	  },
	  onMapExtendedTimeChanged: function onMapExtendedTimeChanged(mapModel) {
	    var time = mapModel.get('extendedTime') || this.mapModel.get('time');
	    this.updatingTime = true;
	    this.$('.start').data('DateTimePicker').date(_moment2.default.utc(time[0]));
	    this.$('.end').data('DateTimePicker').date(_moment2.default.utc(time[1]));
	    this.$('.start').data('DateTimePicker').viewDate(_moment2.default.utc(time[0]));
	    this.$('.end').data('DateTimePicker').viewDate(_moment2.default.utc(time[1]));
	
	    if (mapModel.get('extendedTime') || this.maxMapInterval) {
	      this.$('.time-buttons').slideDown();
	    } else {
	      this.$('.time-buttons').slideUp();
	    }
	    this.updatingTime = false;
	  },
	  onMapIntervalExceeded: function onMapIntervalExceeded(mapModel) {
	    var newInterval = mapModel.changed.exceedMaxMapInterval;
	    var visibleLayers = this.layersCollection.filter(function (model) {
	      return model.get('display.visible');
	    });
	    var visibleTimeBaselayers = this.baseLayersCollection.filter(function (model) {
	      return model.get('display.visible') && model.get('display.synchronizeTime');
	    });
	    var visibleTimeOverlays = this.overlayLayersCollection.filter(function (model) {
	      return model.get('display.visible') && model.get('display.synchronizeTime');
	    });
	    var anyTimeLayerVisible = visibleLayers.length + visibleTimeBaselayers.length + visibleTimeOverlays.length;
	    if (this.maxMapInterval && anyTimeLayerVisible && newInterval) {
	      var formattedStart = _moment2.default.utc(newInterval[0]).format('YYYY-MM-DD HH:mm:ss');
	      var formattedEnd = _moment2.default.utc(newInterval[1]).format('YYYY-MM-DD HH:mm:ss');
	      this.$('#map-time-limit-exceeded').slideDown();
	      this.$('#map-time-limit-exceeded').html('Map tiles display is limited to <br> <b>' + formattedStart + ' - ' + formattedEnd + '</b>');
	    } else {
	      this.$('#map-time-limit-exceeded').slideUp();
	    }
	  }
	});
	
	exports.default = TimeFilterView;

/***/ }),
/* 693 */
/***/ (function(module, exports, __webpack_require__) {

	/**
	 * Backbone-Nested 2.0.4 - An extension of Backbone.js that keeps track of nested attributes
	 *
	 * http://afeld.github.com/backbone-nested/
	 *
	 * Copyright (c) 2011-2012 Aidan Feldman
	 * MIT Licensed (LICENSE)
	 */
	/*global define, require, module */
	(function(root, factory){
	  if (true) {
	      // Define as CommonJS export:
	      module.exports = factory(__webpack_require__(12), __webpack_require__(33), __webpack_require__(24));
	  } else if (typeof define === 'function' && define.amd) {
	      // Define as AMD:
	      define(["jquery", "underscore", "backbone"], factory);
	  } else {
	      // Just run it:
	      factory(root.$, root._, root.Backbone);
	  }
	}(this, function($, _, Backbone) {
	  'use strict';
	
	
	  Backbone.NestedModel = Backbone.Model.extend({
	
	    get: function(attrStrOrPath){
	      return Backbone.NestedModel.walkThenGet(this.attributes, attrStrOrPath);
	    },
	
	    previous: function(attrStrOrPath){
	      return Backbone.NestedModel.walkThenGet(this._previousAttributes, attrStrOrPath);
	    },
	
	    has: function(attr){
	      // for some reason this is not how Backbone.Model is implemented - it accesses the attributes object directly
	      var result = this.get(attr);
	      return !(result === null || _.isUndefined(result));
	    },
	
	    set: function(key, value, opts){
	      var newAttrs = Backbone.NestedModel.deepClone(this.attributes),
	        attrPath,
	        unsetObj,
	        validated;
	
	      if (_.isString(key)){
	        // Backbone 0.9.0+ syntax: `model.set(key, val)` - convert the key to an attribute path
	        attrPath = Backbone.NestedModel.attrPath(key);
	      } else if (_.isArray(key)){
	        // attribute path
	        attrPath = key;
	      }
	
	      if (attrPath){
	        opts = opts || {};
	        this._setAttr(newAttrs, attrPath, value, opts);
	      } else { // it's an Object
	        opts = value || {};
	        var attrs = key;
	        for (var _attrStr in attrs) {
	          if (attrs.hasOwnProperty(_attrStr)) {
	            this._setAttr(newAttrs,
	                          Backbone.NestedModel.attrPath(_attrStr),
	                          opts.unset ? void 0 : attrs[_attrStr],
	                          opts);
	          }
	        }
	      }
	
	      this._nestedChanges = Backbone.NestedModel.__super__.changedAttributes.call(this);
	
	      if (opts.unset && attrPath && attrPath.length === 1){ // assume it is a singular attribute being unset
	        // unsetting top-level attribute
	        unsetObj = {};
	        unsetObj[key] = void 0;
	        this._nestedChanges = _.omit(this._nestedChanges, _.keys(unsetObj));
	        validated = Backbone.NestedModel.__super__.set.call(this, unsetObj, opts);
	      } else {
	        unsetObj = newAttrs;
	
	        // normal set(), or an unset of nested attribute
	        if (opts.unset && attrPath){
	          // make sure Backbone.Model won't unset the top-level attribute
	          opts = _.extend({}, opts);
	          delete opts.unset;
	        } else if (opts.unset && _.isObject(key)) {
	          unsetObj = key;
	        }
	        this._nestedChanges = _.omit(this._nestedChanges, _.keys(unsetObj));
	        validated = Backbone.NestedModel.__super__.set.call(this, unsetObj, opts);
	      }
	
	
	      if (!validated){
	        // reset changed attributes
	        this.changed = {};
	        this._nestedChanges = {};
	        return false;
	      }
	
	
	      this._runDelayedTriggers();
	      return this;
	    },
	
	    unset: function(attr, options) {
	      return this.set(attr, void 0, _.extend({}, options, {unset: true}));
	    },
	
	    clear: function(options) {
	      this._nestedChanges = {};
	
	      // Mostly taken from Backbone.Model.set, modified to work for NestedModel.
	      options = options || {};
	      // clone attributes so validate method can't mutate it from underneath us.
	      var attrs = _.clone(this.attributes);
	      if (!options.silent && this.validate && !this.validate(attrs, options)) {
	        return false; // Should maybe return this instead?
	      }
	
	      var changed = this.changed = {};
	      var model = this;
	
	      var setChanged = function(obj, prefix, options) {
	        // obj will be an Array or an Object
	        _.each(obj, function(val, attr){
	          var changedPath = prefix;
	          if (_.isArray(obj)){
	            // assume there is a prefix
	            changedPath += '[' + attr + ']';
	          } else if (prefix){
	            changedPath += '.' + attr;
	          } else {
	            changedPath = attr;
	          }
	
	          val = obj[attr];
	          if (_.isObject(val)) { // clear child attrs
	            setChanged(val, changedPath, options);
	          }
	          if (!options.silent) model._delayedChange(changedPath, null, options);
	          changed[changedPath] = null;
	        });
	      };
	      setChanged(this.attributes, '', options);
	
	      this.attributes = {};
	
	      // Fire the `"change"` events.
	      if (!options.silent) this._delayedTrigger('change');
	
	      this._runDelayedTriggers();
	      return this;
	    },
	
	    add: function(attrStr, value, opts){
	      var current = this.get(attrStr);
	      if (!_.isArray(current)) throw new Error('current value is not an array');
	      return this.set(attrStr + '[' + current.length + ']', value, opts);
	    },
	
	    remove: function(attrStr, opts){
	      opts = opts || {};
	
	      var attrPath = Backbone.NestedModel.attrPath(attrStr),
	        aryPath = _.initial(attrPath),
	        val = this.get(aryPath),
	        i = _.last(attrPath);
	
	      if (!_.isArray(val)){
	        throw new Error("remove() must be called on a nested array");
	      }
	
	      // only trigger if an element is actually being removed
	      var trigger = !opts.silent && (val.length >= i + 1),
	        oldEl = val[i];
	
	      // remove the element from the array
	      val.splice(i, 1);
	      opts.silent = true; // Triggers should only be fired in trigger section below
	      this.set(aryPath, val, opts);
	
	      if (trigger){
	        attrStr = Backbone.NestedModel.createAttrStr(aryPath);
	        this.trigger('remove:' + attrStr, this, oldEl);
	        for (var aryCount = aryPath.length; aryCount >= 1; aryCount--) {
	          attrStr = Backbone.NestedModel.createAttrStr(_.first(aryPath, aryCount));
	          this.trigger('change:' + attrStr, this, oldEl);
	        }
	        this.trigger('change', this, oldEl);
	      }
	
	      return this;
	    },
	
	    changedAttributes: function(diff) {
	      var backboneChanged = Backbone.NestedModel.__super__.changedAttributes.call(this, diff);
	      if (_.isObject(backboneChanged)) {
	        return _.extend({}, this._nestedChanges, backboneChanged);
	      }
	      return false;
	    },
	
	    toJSON: function(){
	      return Backbone.NestedModel.deepClone(this.attributes);
	    },
	
	
	    // private
	    _getDelayedTriggers: function(){
	        if (typeof this._delayedTriggers === "undefined"){
	            this._delayedTriggers = [];
	        }
	        return this._delayedTriggers;
	    },
	    _delayedTrigger: function(/* the trigger args */){
	      this._getDelayedTriggers().push(arguments);
	    },
	
	    _delayedChange: function(attrStr, newVal, options){
	      this._delayedTrigger('change:' + attrStr, this, newVal, options);
	
	      // Check if `change` even *exists*, as it won't when the model is
	      // freshly created.
	      if (!this.changed) {
	        this.changed = {};
	      }
	
	      this.changed[attrStr] = newVal;
	    },
	
	    _runDelayedTriggers: function(){
	      while (this._getDelayedTriggers().length > 0){
	        this.trigger.apply(this, this._getDelayedTriggers().shift());
	      }
	    },
	
	    // note: modifies `newAttrs`
	    _setAttr: function(newAttrs, attrPath, newValue, opts){
	      opts = opts || {};
	
	      var fullPathLength = attrPath.length;
	      var model = this;
	
	      Backbone.NestedModel.walkPath(newAttrs, attrPath, function(val, path, next){
	        var attr = _.last(path);
	        var attrStr = Backbone.NestedModel.createAttrStr(path);
	
	        // See if this is a new value being set
	        var isNewValue = !_.isEqual(val[attr], newValue);
	
	        if (path.length === fullPathLength){
	          // reached the attribute to be set
	
	          if (opts.unset){
	            // unset the value
	            delete val[attr];
	
	            // Trigger Remove Event if array being set to null
	            if (_.isArray(val)){
	              var parentPath = Backbone.NestedModel.createAttrStr(_.initial(attrPath));
	              model._delayedTrigger('remove:' + parentPath, model, val[attr]);
	            }
	          } else {
	            // Set the new value
	            val[attr] = newValue;
	          }
	
	          // Trigger Change Event if new values are being set
	          if (!opts.silent && _.isObject(newValue) && isNewValue){
	            var visited = [];
	            var checkChanges = function(obj, prefix) {
	              // Don't choke on circular references
	              if(_.indexOf(visited, obj) > -1) {
	                return;
	              } else {
	                visited.push(obj);
	              }
	
	              var nestedAttr, nestedVal;
	              for (var a in obj){
	                if (obj.hasOwnProperty(a)) {
	                  nestedAttr = prefix + '.' + a;
	                  nestedVal = obj[a];
	                  if (!_.isEqual(model.get(nestedAttr), nestedVal)) {
	                    model._delayedChange(nestedAttr, nestedVal, opts);
	                  }
	                  if (_.isObject(nestedVal)) {
	                    checkChanges(nestedVal, nestedAttr);
	                  }
	                }
	              }
	            };
	            checkChanges(newValue, attrStr);
	
	          }
	
	
	        } else if (!val[attr]){
	          if (_.isNumber(next)){
	            val[attr] = [];
	          } else {
	            val[attr] = {};
	          }
	        }
	
	        if (!opts.silent){
	          // let the superclass handle change events for top-level attributes
	          if (path.length > 1 && isNewValue){
	            model._delayedChange(attrStr, val[attr], opts);
	          }
	
	          if (_.isArray(val[attr])){
	            model._delayedTrigger('add:' + attrStr, model, val[attr]);
	          }
	        }
	      });
	    }
	
	  }, {
	    // class methods
	
	    attrPath: function(attrStrOrPath){
	      var path;
	
	      if (_.isString(attrStrOrPath)){
	        // TODO this parsing can probably be more efficient
	        path = (attrStrOrPath === '') ? [''] : attrStrOrPath.match(/[^\.\[\]]+/g);
	        path = _.map(path, function(val){
	          // convert array accessors to numbers
	          return val.match(/^\d+$/) ? parseInt(val, 10) : val;
	        });
	      } else {
	        path = attrStrOrPath;
	      }
	
	      return path;
	    },
	
	    createAttrStr: function(attrPath){
	      var attrStr = attrPath[0];
	      _.each(_.rest(attrPath), function(attr){
	        attrStr += _.isNumber(attr) ? ('[' + attr + ']') : ('.' + attr);
	      });
	
	      return attrStr;
	    },
	
	    deepClone: function(obj){
	      return $.extend(true, {}, obj);
	    },
	
	    walkPath: function(obj, attrPath, callback, scope){
	      var val = obj,
	        childAttr;
	
	      // walk through the child attributes
	      for (var i = 0; i < attrPath.length; i++){
	        callback.call(scope || this, val, attrPath.slice(0, i + 1), attrPath[i + 1]);
	
	        childAttr = attrPath[i];
	        val = val[childAttr];
	        if (!val) break; // at the leaf
	      }
	    },
	
	    walkThenGet: function(attributes, attrStrOrPath){
	      var attrPath = Backbone.NestedModel.attrPath(attrStrOrPath),
	        result;
	
	      Backbone.NestedModel.walkPath(attributes, attrPath, function(val, path){
	        var attr = _.last(path);
	        if (path.length === attrPath.length){
	          // attribute found
	          result = val[attr];
	        }
	      });
	
	      return result;
	    }
	
	  });
	
	  return Backbone;
	}));


/***/ }),
/* 694 */
/***/ (function(module, exports, __webpack_require__) {

	var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;// Backbone.BabySitter
	// -------------------
	// v0.1.11
	//
	// Copyright (c)2016 Derick Bailey, Muted Solutions, LLC.
	// Distributed under MIT license
	//
	// http://github.com/marionettejs/backbone.babysitter
	
	(function(root, factory) {
	
	  if (true) {
	    !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(24), __webpack_require__(33)], __WEBPACK_AMD_DEFINE_RESULT__ = function(Backbone, _) {
	      return factory(Backbone, _);
	    }.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
	  } else if (typeof exports !== 'undefined') {
	    var Backbone = require('backbone');
	    var _ = require('underscore');
	    module.exports = factory(Backbone, _);
	  } else {
	    factory(root.Backbone, root._);
	  }
	
	}(this, function(Backbone, _) {
	  'use strict';
	
	  var previousChildViewContainer = Backbone.ChildViewContainer;
	
	  // BabySitter.ChildViewContainer
	  // -----------------------------
	  //
	  // Provide a container to store, retrieve and
	  // shut down child views.
	  
	  Backbone.ChildViewContainer = (function (Backbone, _) {
	  
	    // Container Constructor
	    // ---------------------
	  
	    var Container = function(views){
	      this._views = {};
	      this._indexByModel = {};
	      this._indexByCustom = {};
	      this._updateLength();
	  
	      _.each(views, this.add, this);
	    };
	  
	    // Container Methods
	    // -----------------
	  
	    _.extend(Container.prototype, {
	  
	      // Add a view to this container. Stores the view
	      // by `cid` and makes it searchable by the model
	      // cid (and model itself). Optionally specify
	      // a custom key to store an retrieve the view.
	      add: function(view, customIndex){
	        var viewCid = view.cid;
	  
	        // store the view
	        this._views[viewCid] = view;
	  
	        // index it by model
	        if (view.model){
	          this._indexByModel[view.model.cid] = viewCid;
	        }
	  
	        // index by custom
	        if (customIndex){
	          this._indexByCustom[customIndex] = viewCid;
	        }
	  
	        this._updateLength();
	        return this;
	      },
	  
	      // Find a view by the model that was attached to
	      // it. Uses the model's `cid` to find it.
	      findByModel: function(model){
	        return this.findByModelCid(model.cid);
	      },
	  
	      // Find a view by the `cid` of the model that was attached to
	      // it. Uses the model's `cid` to find the view `cid` and
	      // retrieve the view using it.
	      findByModelCid: function(modelCid){
	        var viewCid = this._indexByModel[modelCid];
	        return this.findByCid(viewCid);
	      },
	  
	      // Find a view by a custom indexer.
	      findByCustom: function(index){
	        var viewCid = this._indexByCustom[index];
	        return this.findByCid(viewCid);
	      },
	  
	      // Find by index. This is not guaranteed to be a
	      // stable index.
	      findByIndex: function(index){
	        return _.values(this._views)[index];
	      },
	  
	      // retrieve a view by its `cid` directly
	      findByCid: function(cid){
	        return this._views[cid];
	      },
	  
	      // Remove a view
	      remove: function(view){
	        var viewCid = view.cid;
	  
	        // delete model index
	        if (view.model){
	          delete this._indexByModel[view.model.cid];
	        }
	  
	        // delete custom index
	        _.any(this._indexByCustom, function(cid, key) {
	          if (cid === viewCid) {
	            delete this._indexByCustom[key];
	            return true;
	          }
	        }, this);
	  
	        // remove the view from the container
	        delete this._views[viewCid];
	  
	        // update the length
	        this._updateLength();
	        return this;
	      },
	  
	      // Call a method on every view in the container,
	      // passing parameters to the call method one at a
	      // time, like `function.call`.
	      call: function(method){
	        this.apply(method, _.tail(arguments));
	      },
	  
	      // Apply a method on every view in the container,
	      // passing parameters to the call method one at a
	      // time, like `function.apply`.
	      apply: function(method, args){
	        _.each(this._views, function(view){
	          if (_.isFunction(view[method])){
	            view[method].apply(view, args || []);
	          }
	        });
	      },
	  
	      // Update the `.length` attribute on this container
	      _updateLength: function(){
	        this.length = _.size(this._views);
	      }
	    });
	  
	    // Borrowing this code from Backbone.Collection:
	    // http://backbonejs.org/docs/backbone.html#section-106
	    //
	    // Mix in methods from Underscore, for iteration, and other
	    // collection related features.
	    var methods = ['forEach', 'each', 'map', 'find', 'detect', 'filter',
	      'select', 'reject', 'every', 'all', 'some', 'any', 'include',
	      'contains', 'invoke', 'toArray', 'first', 'initial', 'rest',
	      'last', 'without', 'isEmpty', 'pluck', 'reduce'];
	  
	    _.each(methods, function(method) {
	      Container.prototype[method] = function() {
	        var views = _.values(this._views);
	        var args = [views].concat(_.toArray(arguments));
	        return _[method].apply(_, args);
	      };
	    });
	  
	    // return the public API
	    return Container;
	  })(Backbone, _);
	  
	
	  Backbone.ChildViewContainer.VERSION = '0.1.11';
	
	  Backbone.ChildViewContainer.noConflict = function () {
	    Backbone.ChildViewContainer = previousChildViewContainer;
	    return this;
	  };
	
	  return Backbone.ChildViewContainer;
	
	}));


/***/ }),
/* 695 */
/***/ (function(module, exports, __webpack_require__) {

	var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;// Backbone.Wreqr (Backbone.Marionette)
	// ----------------------------------
	// v1.4.0
	//
	// Copyright (c)2016 Derick Bailey, Muted Solutions, LLC.
	// Distributed under MIT license
	//
	// http://github.com/marionettejs/backbone.wreqr
	
	
	(function(root, factory) {
	
	  if (true) {
	    !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(24), __webpack_require__(33)], __WEBPACK_AMD_DEFINE_RESULT__ = function(Backbone, _) {
	      return factory(Backbone, _);
	    }.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
	  } else if (typeof exports !== 'undefined') {
	    var Backbone = require('backbone');
	    var _ = require('underscore');
	    module.exports = factory(Backbone, _);
	  } else {
	    factory(root.Backbone, root._);
	  }
	
	}(this, function(Backbone, _) {
	  "use strict";
	
	  var previousWreqr = Backbone.Wreqr;
	
	  var Wreqr = Backbone.Wreqr = {};
	
	  Backbone.Wreqr.VERSION = '1.4.0';
	
	  Backbone.Wreqr.noConflict = function () {
	    Backbone.Wreqr = previousWreqr;
	    return this;
	  };
	
	  // Handlers
	  // --------
	  // A registry of functions to call, given a name
	  
	  Wreqr.Handlers = (function(Backbone, _){
	    "use strict";
	    
	    // Constructor
	    // -----------
	  
	    var Handlers = function(options){
	      this.options = options;
	      this._wreqrHandlers = {};
	      
	      if (_.isFunction(this.initialize)){
	        this.initialize(options);
	      }
	    };
	  
	    Handlers.extend = Backbone.Model.extend;
	  
	    // Instance Members
	    // ----------------
	  
	    _.extend(Handlers.prototype, Backbone.Events, {
	  
	      // Add multiple handlers using an object literal configuration
	      setHandlers: function(handlers){
	        _.each(handlers, _.bind(function(handler, name){
	          var context = null;
	  
	          if (_.isObject(handler) && !_.isFunction(handler)){
	            context = handler.context;
	            handler = handler.callback;
	          }
	  
	          this.setHandler(name, handler, context);
	        }, this));
	      },
	  
	      // Add a handler for the given name, with an
	      // optional context to run the handler within
	      setHandler: function(name, handler, context){
	        var config = {
	          callback: handler,
	          context: context
	        };
	  
	        this._wreqrHandlers[name] = config;
	  
	        this.trigger("handler:add", name, handler, context);
	      },
	  
	      // Determine whether or not a handler is registered
	      hasHandler: function(name){
	        return !! this._wreqrHandlers[name];
	      },
	  
	      // Get the currently registered handler for
	      // the specified name. Throws an exception if
	      // no handler is found.
	      getHandler: function(name){
	        var config = this._wreqrHandlers[name];
	  
	        if (!config){
	          return;
	        }
	  
	        return function(){
	          return config.callback.apply(config.context, arguments);
	        };
	      },
	  
	      // Remove a handler for the specified name
	      removeHandler: function(name){
	        delete this._wreqrHandlers[name];
	      },
	  
	      // Remove all handlers from this registry
	      removeAllHandlers: function(){
	        this._wreqrHandlers = {};
	      }
	    });
	  
	    return Handlers;
	  })(Backbone, _);
	  
	  // Wreqr.CommandStorage
	  // --------------------
	  //
	  // Store and retrieve commands for execution.
	  Wreqr.CommandStorage = (function(){
	    "use strict";
	  
	    // Constructor function
	    var CommandStorage = function(options){
	      this.options = options;
	      this._commands = {};
	  
	      if (_.isFunction(this.initialize)){
	        this.initialize(options);
	      }
	    };
	  
	    // Instance methods
	    _.extend(CommandStorage.prototype, Backbone.Events, {
	  
	      // Get an object literal by command name, that contains
	      // the `commandName` and the `instances` of all commands
	      // represented as an array of arguments to process
	      getCommands: function(commandName){
	        var commands = this._commands[commandName];
	  
	        // we don't have it, so add it
	        if (!commands){
	  
	          // build the configuration
	          commands = {
	            command: commandName, 
	            instances: []
	          };
	  
	          // store it
	          this._commands[commandName] = commands;
	        }
	  
	        return commands;
	      },
	  
	      // Add a command by name, to the storage and store the
	      // args for the command
	      addCommand: function(commandName, args){
	        var command = this.getCommands(commandName);
	        command.instances.push(args);
	      },
	  
	      // Clear all commands for the given `commandName`
	      clearCommands: function(commandName){
	        var command = this.getCommands(commandName);
	        command.instances = [];
	      }
	    });
	  
	    return CommandStorage;
	  })();
	  
	  // Wreqr.Commands
	  // --------------
	  //
	  // A simple command pattern implementation. Register a command
	  // handler and execute it.
	  Wreqr.Commands = (function(Wreqr, _){
	    "use strict";
	  
	    return Wreqr.Handlers.extend({
	      // default storage type
	      storageType: Wreqr.CommandStorage,
	  
	      constructor: function(options){
	        this.options = options || {};
	  
	        this._initializeStorage(this.options);
	        this.on("handler:add", this._executeCommands, this);
	  
	        Wreqr.Handlers.prototype.constructor.apply(this, arguments);
	      },
	  
	      // Execute a named command with the supplied args
	      execute: function(name){
	        name = arguments[0];
	        var args = _.rest(arguments);
	  
	        if (this.hasHandler(name)){
	          this.getHandler(name).apply(this, args);
	        } else {
	          this.storage.addCommand(name, args);
	        }
	  
	      },
	  
	      // Internal method to handle bulk execution of stored commands
	      _executeCommands: function(name, handler, context){
	        var command = this.storage.getCommands(name);
	  
	        // loop through and execute all the stored command instances
	        _.each(command.instances, function(args){
	          handler.apply(context, args);
	        });
	  
	        this.storage.clearCommands(name);
	      },
	  
	      // Internal method to initialize storage either from the type's
	      // `storageType` or the instance `options.storageType`.
	      _initializeStorage: function(options){
	        var storage;
	  
	        var StorageType = options.storageType || this.storageType;
	        if (_.isFunction(StorageType)){
	          storage = new StorageType();
	        } else {
	          storage = StorageType;
	        }
	  
	        this.storage = storage;
	      }
	    });
	  
	  })(Wreqr, _);
	  
	  // Wreqr.RequestResponse
	  // ---------------------
	  //
	  // A simple request/response implementation. Register a
	  // request handler, and return a response from it
	  Wreqr.RequestResponse = (function(Wreqr, _){
	    "use strict";
	  
	    return Wreqr.Handlers.extend({
	      request: function(name){
	        if (this.hasHandler(name)) {
	          return this.getHandler(name).apply(this, _.rest(arguments));
	        }
	      }
	    });
	  
	  })(Wreqr, _);
	  
	  // Event Aggregator
	  // ----------------
	  // A pub-sub object that can be used to decouple various parts
	  // of an application through event-driven architecture.
	  
	  Wreqr.EventAggregator = (function(Backbone, _){
	    "use strict";
	    var EA = function(){};
	  
	    // Copy the `extend` function used by Backbone's classes
	    EA.extend = Backbone.Model.extend;
	  
	    // Copy the basic Backbone.Events on to the event aggregator
	    _.extend(EA.prototype, Backbone.Events);
	  
	    return EA;
	  })(Backbone, _);
	  
	  // Wreqr.Channel
	  // --------------
	  //
	  // An object that wraps the three messaging systems:
	  // EventAggregator, RequestResponse, Commands
	  Wreqr.Channel = (function(Wreqr){
	    "use strict";
	  
	    var Channel = function(channelName) {
	      this.vent        = new Backbone.Wreqr.EventAggregator();
	      this.reqres      = new Backbone.Wreqr.RequestResponse();
	      this.commands    = new Backbone.Wreqr.Commands();
	      this.channelName = channelName;
	    };
	  
	    _.extend(Channel.prototype, {
	  
	      // Remove all handlers from the messaging systems of this channel
	      reset: function() {
	        this.vent.off();
	        this.vent.stopListening();
	        this.reqres.removeAllHandlers();
	        this.commands.removeAllHandlers();
	        return this;
	      },
	  
	      // Connect a hash of events; one for each messaging system
	      connectEvents: function(hash, context) {
	        this._connect('vent', hash, context);
	        return this;
	      },
	  
	      connectCommands: function(hash, context) {
	        this._connect('commands', hash, context);
	        return this;
	      },
	  
	      connectRequests: function(hash, context) {
	        this._connect('reqres', hash, context);
	        return this;
	      },
	  
	      // Attach the handlers to a given message system `type`
	      _connect: function(type, hash, context) {
	        if (!hash) {
	          return;
	        }
	  
	        context = context || this;
	        var method = (type === 'vent') ? 'on' : 'setHandler';
	  
	        _.each(hash, _.bind(function(fn, eventName) {
	          this[type][method](eventName, _.bind(fn, context));
	        }, this));
	      }
	    });
	  
	  
	    return Channel;
	  })(Wreqr);
	  
	  // Wreqr.Radio
	  // --------------
	  //
	  // An object that lets you communicate with many channels.
	  Wreqr.radio = (function(Wreqr, _){
	    "use strict";
	  
	    var Radio = function() {
	      this._channels = {};
	      this.vent = {};
	      this.commands = {};
	      this.reqres = {};
	      this._proxyMethods();
	    };
	  
	    _.extend(Radio.prototype, {
	  
	      channel: function(channelName) {
	        if (!channelName) {
	          throw new Error('Channel must receive a name');
	        }
	  
	        return this._getChannel( channelName );
	      },
	  
	      _getChannel: function(channelName) {
	        var channel = this._channels[channelName];
	  
	        if(!channel) {
	          channel = new Wreqr.Channel(channelName);
	          this._channels[channelName] = channel;
	        }
	  
	        return channel;
	      },
	  
	      _proxyMethods: function() {
	        _.each(['vent', 'commands', 'reqres'], _.bind(function(system) {
	          _.each( messageSystems[system], _.bind(function(method) {
	            this[system][method] = proxyMethod(this, system, method);
	          }, this));
	        }, this));
	      }
	    });
	  
	  
	    var messageSystems = {
	      vent: [
	        'on',
	        'off',
	        'trigger',
	        'once',
	        'stopListening',
	        'listenTo',
	        'listenToOnce'
	      ],
	  
	      commands: [
	        'execute',
	        'setHandler',
	        'setHandlers',
	        'removeHandler',
	        'removeAllHandlers'
	      ],
	  
	      reqres: [
	        'request',
	        'setHandler',
	        'setHandlers',
	        'removeHandler',
	        'removeAllHandlers'
	      ]
	    };
	  
	    var proxyMethod = function(radio, system, method) {
	      return function(channelName) {
	        var messageSystem = radio._getChannel(channelName)[system];
	  
	        return messageSystem[method].apply(messageSystem, _.rest(arguments));
	      };
	    };
	  
	    return new Radio();
	  
	  })(Wreqr, _);
	  
	
	  return Backbone.Wreqr;
	
	}));


/***/ }),
/* 696 */
/***/ (function(module, exports) {

	'use strict'
	
	exports.byteLength = byteLength
	exports.toByteArray = toByteArray
	exports.fromByteArray = fromByteArray
	
	var lookup = []
	var revLookup = []
	var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array
	
	var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
	for (var i = 0, len = code.length; i < len; ++i) {
	  lookup[i] = code[i]
	  revLookup[code.charCodeAt(i)] = i
	}
	
	// Support decoding URL-safe base64 strings, as Node.js does.
	// See: https://en.wikipedia.org/wiki/Base64#URL_applications
	revLookup['-'.charCodeAt(0)] = 62
	revLookup['_'.charCodeAt(0)] = 63
	
	function getLens (b64) {
	  var len = b64.length
	
	  if (len % 4 > 0) {
	    throw new Error('Invalid string. Length must be a multiple of 4')
	  }
	
	  // Trim off extra bytes after placeholder bytes are found
	  // See: https://github.com/beatgammit/base64-js/issues/42
	  var validLen = b64.indexOf('=')
	  if (validLen === -1) validLen = len
	
	  var placeHoldersLen = validLen === len
	    ? 0
	    : 4 - (validLen % 4)
	
	  return [validLen, placeHoldersLen]
	}
	
	// base64 is 4/3 + up to two characters of the original data
	function byteLength (b64) {
	  var lens = getLens(b64)
	  var validLen = lens[0]
	  var placeHoldersLen = lens[1]
	  return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen
	}
	
	function _byteLength (b64, validLen, placeHoldersLen) {
	  return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen
	}
	
	function toByteArray (b64) {
	  var tmp
	  var lens = getLens(b64)
	  var validLen = lens[0]
	  var placeHoldersLen = lens[1]
	
	  var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))
	
	  var curByte = 0
	
	  // if there are placeholders, only get up to the last complete 4 chars
	  var len = placeHoldersLen > 0
	    ? validLen - 4
	    : validLen
	
	  var i
	  for (i = 0; i < len; i += 4) {
	    tmp =
	      (revLookup[b64.charCodeAt(i)] << 18) |
	      (revLookup[b64.charCodeAt(i + 1)] << 12) |
	      (revLookup[b64.charCodeAt(i + 2)] << 6) |
	      revLookup[b64.charCodeAt(i + 3)]
	    arr[curByte++] = (tmp >> 16) & 0xFF
	    arr[curByte++] = (tmp >> 8) & 0xFF
	    arr[curByte++] = tmp & 0xFF
	  }
	
	  if (placeHoldersLen === 2) {
	    tmp =
	      (revLookup[b64.charCodeAt(i)] << 2) |
	      (revLookup[b64.charCodeAt(i + 1)] >> 4)
	    arr[curByte++] = tmp & 0xFF
	  }
	
	  if (placeHoldersLen === 1) {
	    tmp =
	      (revLookup[b64.charCodeAt(i)] << 10) |
	      (revLookup[b64.charCodeAt(i + 1)] << 4) |
	      (revLookup[b64.charCodeAt(i + 2)] >> 2)
	    arr[curByte++] = (tmp >> 8) & 0xFF
	    arr[curByte++] = tmp & 0xFF
	  }
	
	  return arr
	}
	
	function tripletToBase64 (num) {
	  return lookup[num >> 18 & 0x3F] +
	    lookup[num >> 12 & 0x3F] +
	    lookup[num >> 6 & 0x3F] +
	    lookup[num & 0x3F]
	}
	
	function encodeChunk (uint8, start, end) {
	  var tmp
	  var output = []
	  for (var i = start; i < end; i += 3) {
	    tmp =
	      ((uint8[i] << 16) & 0xFF0000) +
	      ((uint8[i + 1] << 8) & 0xFF00) +
	      (uint8[i + 2] & 0xFF)
	    output.push(tripletToBase64(tmp))
	  }
	  return output.join('')
	}
	
	function fromByteArray (uint8) {
	  var tmp
	  var len = uint8.length
	  var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes
	  var parts = []
	  var maxChunkLength = 16383 // must be multiple of 3
	
	  // go through the array every three bytes, we'll deal with trailing stuff later
	  for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
	    parts.push(encodeChunk(
	      uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)
	    ))
	  }
	
	  // pad the end with zeros, but make sure to not forget the extra bytes
	  if (extraBytes === 1) {
	    tmp = uint8[len - 1]
	    parts.push(
	      lookup[tmp >> 2] +
	      lookup[(tmp << 4) & 0x3F] +
	      '=='
	    )
	  } else if (extraBytes === 2) {
	    tmp = (uint8[len - 2] << 8) + uint8[len - 1]
	    parts.push(
	      lookup[tmp >> 10] +
	      lookup[(tmp >> 4) & 0x3F] +
	      lookup[(tmp << 2) & 0x3F] +
	      '='
	    )
	  }
	
	  return parts.join('')
	}


/***/ }),
/* 697 */
/***/ (function(module, exports) {

	"use strict";
	module.exports = function(Promise) {
	var SomePromiseArray = Promise._SomePromiseArray;
	function any(promises) {
	    var ret = new SomePromiseArray(promises);
	    var promise = ret.promise();
	    ret.setHowMany(1);
	    ret.setUnwrap();
	    ret.init();
	    return promise;
	}
	
	Promise.any = function (promises) {
	    return any(promises);
	};
	
	Promise.prototype.any = function () {
	    return any(this);
	};
	
	};


/***/ }),
/* 698 */
/***/ (function(module, exports, __webpack_require__) {

	/* WEBPACK VAR INJECTION */(function(process) {"use strict";
	var firstLineError;
	try {throw new Error(); } catch (e) {firstLineError = e;}
	var schedule = __webpack_require__(719);
	var Queue = __webpack_require__(716);
	var util = __webpack_require__(17);
	
	function Async() {
	    this._customScheduler = false;
	    this._isTickUsed = false;
	    this._lateQueue = new Queue(16);
	    this._normalQueue = new Queue(16);
	    this._haveDrainedQueues = false;
	    this._trampolineEnabled = true;
	    var self = this;
	    this.drainQueues = function () {
	        self._drainQueues();
	    };
	    this._schedule = schedule;
	}
	
	Async.prototype.setScheduler = function(fn) {
	    var prev = this._schedule;
	    this._schedule = fn;
	    this._customScheduler = true;
	    return prev;
	};
	
	Async.prototype.hasCustomScheduler = function() {
	    return this._customScheduler;
	};
	
	Async.prototype.enableTrampoline = function() {
	    this._trampolineEnabled = true;
	};
	
	Async.prototype.disableTrampolineIfNecessary = function() {
	    if (util.hasDevTools) {
	        this._trampolineEnabled = false;
	    }
	};
	
	Async.prototype.haveItemsQueued = function () {
	    return this._isTickUsed || this._haveDrainedQueues;
	};
	
	
	Async.prototype.fatalError = function(e, isNode) {
	    if (isNode) {
	        process.stderr.write("Fatal " + (e instanceof Error ? e.stack : e) +
	            "\n");
	        process.exit(2);
	    } else {
	        this.throwLater(e);
	    }
	};
	
	Async.prototype.throwLater = function(fn, arg) {
	    if (arguments.length === 1) {
	        arg = fn;
	        fn = function () { throw arg; };
	    }
	    if (typeof setTimeout !== "undefined") {
	        setTimeout(function() {
	            fn(arg);
	        }, 0);
	    } else try {
	        this._schedule(function() {
	            fn(arg);
	        });
	    } catch (e) {
	        throw new Error("No async scheduler available\u000a\u000a    See http://goo.gl/MqrFmX\u000a");
	    }
	};
	
	function AsyncInvokeLater(fn, receiver, arg) {
	    this._lateQueue.push(fn, receiver, arg);
	    this._queueTick();
	}
	
	function AsyncInvoke(fn, receiver, arg) {
	    this._normalQueue.push(fn, receiver, arg);
	    this._queueTick();
	}
	
	function AsyncSettlePromises(promise) {
	    this._normalQueue._pushOne(promise);
	    this._queueTick();
	}
	
	if (!util.hasDevTools) {
	    Async.prototype.invokeLater = AsyncInvokeLater;
	    Async.prototype.invoke = AsyncInvoke;
	    Async.prototype.settlePromises = AsyncSettlePromises;
	} else {
	    Async.prototype.invokeLater = function (fn, receiver, arg) {
	        if (this._trampolineEnabled) {
	            AsyncInvokeLater.call(this, fn, receiver, arg);
	        } else {
	            this._schedule(function() {
	                setTimeout(function() {
	                    fn.call(receiver, arg);
	                }, 100);
	            });
	        }
	    };
	
	    Async.prototype.invoke = function (fn, receiver, arg) {
	        if (this._trampolineEnabled) {
	            AsyncInvoke.call(this, fn, receiver, arg);
	        } else {
	            this._schedule(function() {
	                fn.call(receiver, arg);
	            });
	        }
	    };
	
	    Async.prototype.settlePromises = function(promise) {
	        if (this._trampolineEnabled) {
	            AsyncSettlePromises.call(this, promise);
	        } else {
	            this._schedule(function() {
	                promise._settlePromises();
	            });
	        }
	    };
	}
	
	function _drainQueue(queue) {
	    while (queue.length() > 0) {
	        _drainQueueStep(queue);
	    }
	}
	
	function _drainQueueStep(queue) {
	    var fn = queue.shift();
	    if (typeof fn !== "function") {
	        fn._settlePromises();
	    } else {
	        var receiver = queue.shift();
	        var arg = queue.shift();
	        fn.call(receiver, arg);
	    }
	}
	
	Async.prototype._drainQueues = function () {
	    _drainQueue(this._normalQueue);
	    this._reset();
	    this._haveDrainedQueues = true;
	    _drainQueue(this._lateQueue);
	};
	
	Async.prototype._queueTick = function () {
	    if (!this._isTickUsed) {
	        this._isTickUsed = true;
	        this._schedule(this.drainQueues);
	    }
	};
	
	Async.prototype._reset = function () {
	    this._isTickUsed = false;
	};
	
	module.exports = Async;
	module.exports.firstLineError = firstLineError;
	
	/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(116)))

/***/ }),
/* 699 */
/***/ (function(module, exports) {

	"use strict";
	module.exports = function(Promise, INTERNAL, tryConvertToPromise, debug) {
	var calledBind = false;
	var rejectThis = function(_, e) {
	    this._reject(e);
	};
	
	var targetRejected = function(e, context) {
	    context.promiseRejectionQueued = true;
	    context.bindingPromise._then(rejectThis, rejectThis, null, this, e);
	};
	
	var bindingResolved = function(thisArg, context) {
	    if (((this._bitField & 50397184) === 0)) {
	        this._resolveCallback(context.target);
	    }
	};
	
	var bindingRejected = function(e, context) {
	    if (!context.promiseRejectionQueued) this._reject(e);
	};
	
	Promise.prototype.bind = function (thisArg) {
	    if (!calledBind) {
	        calledBind = true;
	        Promise.prototype._propagateFrom = debug.propagateFromFunction();
	        Promise.prototype._boundValue = debug.boundValueFunction();
	    }
	    var maybePromise = tryConvertToPromise(thisArg);
	    var ret = new Promise(INTERNAL);
	    ret._propagateFrom(this, 1);
	    var target = this._target();
	    ret._setBoundTo(maybePromise);
	    if (maybePromise instanceof Promise) {
	        var context = {
	            promiseRejectionQueued: false,
	            promise: ret,
	            target: target,
	            bindingPromise: maybePromise
	        };
	        target._then(INTERNAL, targetRejected, undefined, ret, context);
	        maybePromise._then(
	            bindingResolved, bindingRejected, undefined, ret, context);
	        ret._setOnCancel(maybePromise);
	    } else {
	        ret._resolveCallback(target);
	    }
	    return ret;
	};
	
	Promise.prototype._setBoundTo = function (obj) {
	    if (obj !== undefined) {
	        this._bitField = this._bitField | 2097152;
	        this._boundTo = obj;
	    } else {
	        this._bitField = this._bitField & (~2097152);
	    }
	};
	
	Promise.prototype._isBound = function () {
	    return (this._bitField & 2097152) === 2097152;
	};
	
	Promise.bind = function (thisArg, value) {
	    return Promise.resolve(value).bind(thisArg);
	};
	};


/***/ }),
/* 700 */
/***/ (function(module, exports, __webpack_require__) {

	"use strict";
	var cr = Object.create;
	if (cr) {
	    var callerCache = cr(null);
	    var getterCache = cr(null);
	    callerCache[" size"] = getterCache[" size"] = 0;
	}
	
	module.exports = function(Promise) {
	var util = __webpack_require__(17);
	var canEvaluate = util.canEvaluate;
	var isIdentifier = util.isIdentifier;
	
	var getMethodCaller;
	var getGetter;
	if (true) {
	var makeMethodCaller = function (methodName) {
	    return new Function("ensureMethod", "                                    \n\
	        return function(obj) {                                               \n\
	            'use strict'                                                     \n\
	            var len = this.length;                                           \n\
	            ensureMethod(obj, 'methodName');                                 \n\
	            switch(len) {                                                    \n\
	                case 1: return obj.methodName(this[0]);                      \n\
	                case 2: return obj.methodName(this[0], this[1]);             \n\
	                case 3: return obj.methodName(this[0], this[1], this[2]);    \n\
	                case 0: return obj.methodName();                             \n\
	                default:                                                     \n\
	                    return obj.methodName.apply(obj, this);                  \n\
	            }                                                                \n\
	        };                                                                   \n\
	        ".replace(/methodName/g, methodName))(ensureMethod);
	};
	
	var makeGetter = function (propertyName) {
	    return new Function("obj", "                                             \n\
	        'use strict';                                                        \n\
	        return obj.propertyName;                                             \n\
	        ".replace("propertyName", propertyName));
	};
	
	var getCompiled = function(name, compiler, cache) {
	    var ret = cache[name];
	    if (typeof ret !== "function") {
	        if (!isIdentifier(name)) {
	            return null;
	        }
	        ret = compiler(name);
	        cache[name] = ret;
	        cache[" size"]++;
	        if (cache[" size"] > 512) {
	            var keys = Object.keys(cache);
	            for (var i = 0; i < 256; ++i) delete cache[keys[i]];
	            cache[" size"] = keys.length - 256;
	        }
	    }
	    return ret;
	};
	
	getMethodCaller = function(name) {
	    return getCompiled(name, makeMethodCaller, callerCache);
	};
	
	getGetter = function(name) {
	    return getCompiled(name, makeGetter, getterCache);
	};
	}
	
	function ensureMethod(obj, methodName) {
	    var fn;
	    if (obj != null) fn = obj[methodName];
	    if (typeof fn !== "function") {
	        var message = "Object " + util.classString(obj) + " has no method '" +
	            util.toString(methodName) + "'";
	        throw new Promise.TypeError(message);
	    }
	    return fn;
	}
	
	function caller(obj) {
	    var methodName = this.pop();
	    var fn = ensureMethod(obj, methodName);
	    return fn.apply(obj, this);
	}
	Promise.prototype.call = function (methodName) {
	    var $_len = arguments.length;var args = new Array(Math.max($_len - 1, 0)); for(var $_i = 1; $_i < $_len; ++$_i) {args[$_i - 1] = arguments[$_i];};
	    if (true) {
	        if (canEvaluate) {
	            var maybeCaller = getMethodCaller(methodName);
	            if (maybeCaller !== null) {
	                return this._then(
	                    maybeCaller, undefined, undefined, args, undefined);
	            }
	        }
	    }
	    args.push(methodName);
	    return this._then(caller, undefined, undefined, args, undefined);
	};
	
	function namedGetter(obj) {
	    return obj[this];
	}
	function indexedGetter(obj) {
	    var index = +this;
	    if (index < 0) index = Math.max(0, index + obj.length);
	    return obj[index];
	}
	Promise.prototype.get = function (propertyName) {
	    var isIndex = (typeof propertyName === "number");
	    var getter;
	    if (!isIndex) {
	        if (canEvaluate) {
	            var maybeGetter = getGetter(propertyName);
	            getter = maybeGetter !== null ? maybeGetter : namedGetter;
	        } else {
	            getter = namedGetter;
	        }
	    } else {
	        getter = indexedGetter;
	    }
	    return this._then(getter, undefined, undefined, propertyName, undefined);
	};
	};


/***/ }),
/* 701 */
/***/ (function(module, exports, __webpack_require__) {

	"use strict";
	module.exports = function(Promise, PromiseArray, apiRejection, debug) {
	var util = __webpack_require__(17);
	var tryCatch = util.tryCatch;
	var errorObj = util.errorObj;
	var async = Promise._async;
	
	Promise.prototype["break"] = Promise.prototype.cancel = function() {
	    if (!debug.cancellation()) return this._warn("cancellation is disabled");
	
	    var promise = this;
	    var child = promise;
	    while (promise._isCancellable()) {
	        if (!promise._cancelBy(child)) {
	            if (child._isFollowing()) {
	                child._followee().cancel();
	            } else {
	                child._cancelBranched();
	            }
	            break;
	        }
	
	        var parent = promise._cancellationParent;
	        if (parent == null || !parent._isCancellable()) {
	            if (promise._isFollowing()) {
	                promise._followee().cancel();
	            } else {
	                promise._cancelBranched();
	            }
	            break;
	        } else {
	            if (promise._isFollowing()) promise._followee().cancel();
	            promise._setWillBeCancelled();
	            child = promise;
	            promise = parent;
	        }
	    }
	};
	
	Promise.prototype._branchHasCancelled = function() {
	    this._branchesRemainingToCancel--;
	};
	
	Promise.prototype._enoughBranchesHaveCancelled = function() {
	    return this._branchesRemainingToCancel === undefined ||
	           this._branchesRemainingToCancel <= 0;
	};
	
	Promise.prototype._cancelBy = function(canceller) {
	    if (canceller === this) {
	        this._branchesRemainingToCancel = 0;
	        this._invokeOnCancel();
	        return true;
	    } else {
	        this._branchHasCancelled();
	        if (this._enoughBranchesHaveCancelled()) {
	            this._invokeOnCancel();
	            return true;
	        }
	    }
	    return false;
	};
	
	Promise.prototype._cancelBranched = function() {
	    if (this._enoughBranchesHaveCancelled()) {
	        this._cancel();
	    }
	};
	
	Promise.prototype._cancel = function() {
	    if (!this._isCancellable()) return;
	    this._setCancelled();
	    async.invoke(this._cancelPromises, this, undefined);
	};
	
	Promise.prototype._cancelPromises = function() {
	    if (this._length() > 0) this._settlePromises();
	};
	
	Promise.prototype._unsetOnCancel = function() {
	    this._onCancelField = undefined;
	};
	
	Promise.prototype._isCancellable = function() {
	    return this.isPending() && !this._isCancelled();
	};
	
	Promise.prototype.isCancellable = function() {
	    return this.isPending() && !this.isCancelled();
	};
	
	Promise.prototype._doInvokeOnCancel = function(onCancelCallback, internalOnly) {
	    if (util.isArray(onCancelCallback)) {
	        for (var i = 0; i < onCancelCallback.length; ++i) {
	            this._doInvokeOnCancel(onCancelCallback[i], internalOnly);
	        }
	    } else if (onCancelCallback !== undefined) {
	        if (typeof onCancelCallback === "function") {
	            if (!internalOnly) {
	                var e = tryCatch(onCancelCallback).call(this._boundValue());
	                if (e === errorObj) {
	                    this._attachExtraTrace(e.e);
	                    async.throwLater(e.e);
	                }
	            }
	        } else {
	            onCancelCallback._resultCancelled(this);
	        }
	    }
	};
	
	Promise.prototype._invokeOnCancel = function() {
	    var onCancelCallback = this._onCancel();
	    this._unsetOnCancel();
	    async.invoke(this._doInvokeOnCancel, this, onCancelCallback);
	};
	
	Promise.prototype._invokeInternalOnCancel = function() {
	    if (this._isCancellable()) {
	        this._doInvokeOnCancel(this._onCancel(), true);
	        this._unsetOnCancel();
	    }
	};
	
	Promise.prototype._resultCancelled = function() {
	    this.cancel();
	};
	
	};


/***/ }),
/* 702 */
/***/ (function(module, exports) {

	"use strict";
	module.exports = function(Promise) {
	var longStackTraces = false;
	var contextStack = [];
	
	Promise.prototype._promiseCreated = function() {};
	Promise.prototype._pushContext = function() {};
	Promise.prototype._popContext = function() {return null;};
	Promise._peekContext = Promise.prototype._peekContext = function() {};
	
	function Context() {
	    this._trace = new Context.CapturedTrace(peekContext());
	}
	Context.prototype._pushContext = function () {
	    if (this._trace !== undefined) {
	        this._trace._promiseCreated = null;
	        contextStack.push(this._trace);
	    }
	};
	
	Context.prototype._popContext = function () {
	    if (this._trace !== undefined) {
	        var trace = contextStack.pop();
	        var ret = trace._promiseCreated;
	        trace._promiseCreated = null;
	        return ret;
	    }
	    return null;
	};
	
	function createContext() {
	    if (longStackTraces) return new Context();
	}
	
	function peekContext() {
	    var lastIndex = contextStack.length - 1;
	    if (lastIndex >= 0) {
	        return contextStack[lastIndex];
	    }
	    return undefined;
	}
	Context.CapturedTrace = null;
	Context.create = createContext;
	Context.deactivateLongStackTraces = function() {};
	Context.activateLongStackTraces = function() {
	    var Promise_pushContext = Promise.prototype._pushContext;
	    var Promise_popContext = Promise.prototype._popContext;
	    var Promise_PeekContext = Promise._peekContext;
	    var Promise_peekContext = Promise.prototype._peekContext;
	    var Promise_promiseCreated = Promise.prototype._promiseCreated;
	    Context.deactivateLongStackTraces = function() {
	        Promise.prototype._pushContext = Promise_pushContext;
	        Promise.prototype._popContext = Promise_popContext;
	        Promise._peekContext = Promise_PeekContext;
	        Promise.prototype._peekContext = Promise_peekContext;
	        Promise.prototype._promiseCreated = Promise_promiseCreated;
	        longStackTraces = false;
	    };
	    longStackTraces = true;
	    Promise.prototype._pushContext = Context.prototype._pushContext;
	    Promise.prototype._popContext = Context.prototype._popContext;
	    Promise._peekContext = Promise.prototype._peekContext = peekContext;
	    Promise.prototype._promiseCreated = function() {
	        var ctx = this._peekContext();
	        if (ctx && ctx._promiseCreated == null) ctx._promiseCreated = this;
	    };
	};
	return Context;
	};


/***/ }),
/* 703 */
/***/ (function(module, exports, __webpack_require__) {

	/* WEBPACK VAR INJECTION */(function(process) {"use strict";
	module.exports = function(Promise, Context) {
	var getDomain = Promise._getDomain;
	var async = Promise._async;
	var Warning = __webpack_require__(75).Warning;
	var util = __webpack_require__(17);
	var es5 = __webpack_require__(89);
	var canAttachTrace = util.canAttachTrace;
	var unhandledRejectionHandled;
	var possiblyUnhandledRejection;
	var bluebirdFramePattern =
	    /[\\\/]bluebird[\\\/]js[\\\/](release|debug|instrumented)/;
	var nodeFramePattern = /\((?:timers\.js):\d+:\d+\)/;
	var parseLinePattern = /[\/<\(](.+?):(\d+):(\d+)\)?\s*$/;
	var stackFramePattern = null;
	var formatStack = null;
	var indentStackFrames = false;
	var printWarning;
	var debugging = !!(util.env("BLUEBIRD_DEBUG") != 0 &&
	                        (false ||
	                         util.env("BLUEBIRD_DEBUG") ||
	                         util.env("NODE_ENV") === "development"));
	
	var warnings = !!(util.env("BLUEBIRD_WARNINGS") != 0 &&
	    (debugging || util.env("BLUEBIRD_WARNINGS")));
	
	var longStackTraces = !!(util.env("BLUEBIRD_LONG_STACK_TRACES") != 0 &&
	    (debugging || util.env("BLUEBIRD_LONG_STACK_TRACES")));
	
	var wForgottenReturn = util.env("BLUEBIRD_W_FORGOTTEN_RETURN") != 0 &&
	    (warnings || !!util.env("BLUEBIRD_W_FORGOTTEN_RETURN"));
	
	Promise.prototype.suppressUnhandledRejections = function() {
	    var target = this._target();
	    target._bitField = ((target._bitField & (~1048576)) |
	                      524288);
	};
	
	Promise.prototype._ensurePossibleRejectionHandled = function () {
	    if ((this._bitField & 524288) !== 0) return;
	    this._setRejectionIsUnhandled();
	    var self = this;
	    setTimeout(function() {
	        self._notifyUnhandledRejection();
	    }, 1);
	};
	
	Promise.prototype._notifyUnhandledRejectionIsHandled = function () {
	    fireRejectionEvent("rejectionHandled",
	                                  unhandledRejectionHandled, undefined, this);
	};
	
	Promise.prototype._setReturnedNonUndefined = function() {
	    this._bitField = this._bitField | 268435456;
	};
	
	Promise.prototype._returnedNonUndefined = function() {
	    return (this._bitField & 268435456) !== 0;
	};
	
	Promise.prototype._notifyUnhandledRejection = function () {
	    if (this._isRejectionUnhandled()) {
	        var reason = this._settledValue();
	        this._setUnhandledRejectionIsNotified();
	        fireRejectionEvent("unhandledRejection",
	                                      possiblyUnhandledRejection, reason, this);
	    }
	};
	
	Promise.prototype._setUnhandledRejectionIsNotified = function () {
	    this._bitField = this._bitField | 262144;
	};
	
	Promise.prototype._unsetUnhandledRejectionIsNotified = function () {
	    this._bitField = this._bitField & (~262144);
	};
	
	Promise.prototype._isUnhandledRejectionNotified = function () {
	    return (this._bitField & 262144) > 0;
	};
	
	Promise.prototype._setRejectionIsUnhandled = function () {
	    this._bitField = this._bitField | 1048576;
	};
	
	Promise.prototype._unsetRejectionIsUnhandled = function () {
	    this._bitField = this._bitField & (~1048576);
	    if (this._isUnhandledRejectionNotified()) {
	        this._unsetUnhandledRejectionIsNotified();
	        this._notifyUnhandledRejectionIsHandled();
	    }
	};
	
	Promise.prototype._isRejectionUnhandled = function () {
	    return (this._bitField & 1048576) > 0;
	};
	
	Promise.prototype._warn = function(message, shouldUseOwnTrace, promise) {
	    return warn(message, shouldUseOwnTrace, promise || this);
	};
	
	Promise.onPossiblyUnhandledRejection = function (fn) {
	    var domain = getDomain();
	    possiblyUnhandledRejection =
	        typeof fn === "function" ? (domain === null ?
	                                            fn : util.domainBind(domain, fn))
	                                 : undefined;
	};
	
	Promise.onUnhandledRejectionHandled = function (fn) {
	    var domain = getDomain();
	    unhandledRejectionHandled =
	        typeof fn === "function" ? (domain === null ?
	                                            fn : util.domainBind(domain, fn))
	                                 : undefined;
	};
	
	var disableLongStackTraces = function() {};
	Promise.longStackTraces = function () {
	    if (async.haveItemsQueued() && !config.longStackTraces) {
	        throw new Error("cannot enable long stack traces after promises have been created\u000a\u000a    See http://goo.gl/MqrFmX\u000a");
	    }
	    if (!config.longStackTraces && longStackTracesIsSupported()) {
	        var Promise_captureStackTrace = Promise.prototype._captureStackTrace;
	        var Promise_attachExtraTrace = Promise.prototype._attachExtraTrace;
	        var Promise_dereferenceTrace = Promise.prototype._dereferenceTrace;
	        config.longStackTraces = true;
	        disableLongStackTraces = function() {
	            if (async.haveItemsQueued() && !config.longStackTraces) {
	                throw new Error("cannot enable long stack traces after promises have been created\u000a\u000a    See http://goo.gl/MqrFmX\u000a");
	            }
	            Promise.prototype._captureStackTrace = Promise_captureStackTrace;
	            Promise.prototype._attachExtraTrace = Promise_attachExtraTrace;
	            Promise.prototype._dereferenceTrace = Promise_dereferenceTrace;
	            Context.deactivateLongStackTraces();
	            async.enableTrampoline();
	            config.longStackTraces = false;
	        };
	        Promise.prototype._captureStackTrace = longStackTracesCaptureStackTrace;
	        Promise.prototype._attachExtraTrace = longStackTracesAttachExtraTrace;
	        Promise.prototype._dereferenceTrace = longStackTracesDereferenceTrace;
	        Context.activateLongStackTraces();
	        async.disableTrampolineIfNecessary();
	    }
	};
	
	Promise.hasLongStackTraces = function () {
	    return config.longStackTraces && longStackTracesIsSupported();
	};
	
	var fireDomEvent = (function() {
	    try {
	        if (typeof CustomEvent === "function") {
	            var event = new CustomEvent("CustomEvent");
	            util.global.dispatchEvent(event);
	            return function(name, event) {
	                var eventData = {
	                    detail: event,
	                    cancelable: true
	                };
	                es5.defineProperty(
	                    eventData, "promise", {value: event.promise});
	                es5.defineProperty(eventData, "reason", {value: event.reason});
	                var domEvent = new CustomEvent(name.toLowerCase(), eventData);
	                return !util.global.dispatchEvent(domEvent);
	            };
	        } else if (typeof Event === "function") {
	            var event = new Event("CustomEvent");
	            util.global.dispatchEvent(event);
	            return function(name, event) {
	                var domEvent = new Event(name.toLowerCase(), {
	                    cancelable: true
	                });
	                domEvent.detail = event;
	                es5.defineProperty(domEvent, "promise", {value: event.promise});
	                es5.defineProperty(domEvent, "reason", {value: event.reason});
	                return !util.global.dispatchEvent(domEvent);
	            };
	        } else {
	            var event = document.createEvent("CustomEvent");
	            event.initCustomEvent("testingtheevent", false, true, {});
	            util.global.dispatchEvent(event);
	            return function(name, event) {
	                var domEvent = document.createEvent("CustomEvent");
	                domEvent.initCustomEvent(name.toLowerCase(), false, true,
	                    event);
	                return !util.global.dispatchEvent(domEvent);
	            };
	        }
	    } catch (e) {}
	    return function() {
	        return false;
	    };
	})();
	
	var fireGlobalEvent = (function() {
	    if (util.isNode) {
	        return function() {
	            return process.emit.apply(process, arguments);
	        };
	    } else {
	        if (!util.global) {
	            return function() {
	                return false;
	            };
	        }
	        return function(name) {
	            var methodName = "on" + name.toLowerCase();
	            var method = util.global[methodName];
	            if (!method) return false;
	            method.apply(util.global, [].slice.call(arguments, 1));
	            return true;
	        };
	    }
	})();
	
	function generatePromiseLifecycleEventObject(name, promise) {
	    return {promise: promise};
	}
	
	var eventToObjectGenerator = {
	    promiseCreated: generatePromiseLifecycleEventObject,
	    promiseFulfilled: generatePromiseLifecycleEventObject,
	    promiseRejected: generatePromiseLifecycleEventObject,
	    promiseResolved: generatePromiseLifecycleEventObject,
	    promiseCancelled: generatePromiseLifecycleEventObject,
	    promiseChained: function(name, promise, child) {
	        return {promise: promise, child: child};
	    },
	    warning: function(name, warning) {
	        return {warning: warning};
	    },
	    unhandledRejection: function (name, reason, promise) {
	        return {reason: reason, promise: promise};
	    },
	    rejectionHandled: generatePromiseLifecycleEventObject
	};
	
	var activeFireEvent = function (name) {
	    var globalEventFired = false;
	    try {
	        globalEventFired = fireGlobalEvent.apply(null, arguments);
	    } catch (e) {
	        async.throwLater(e);
	        globalEventFired = true;
	    }
	
	    var domEventFired = false;
	    try {
	        domEventFired = fireDomEvent(name,
	                    eventToObjectGenerator[name].apply(null, arguments));
	    } catch (e) {
	        async.throwLater(e);
	        domEventFired = true;
	    }
	
	    return domEventFired || globalEventFired;
	};
	
	Promise.config = function(opts) {
	    opts = Object(opts);
	    if ("longStackTraces" in opts) {
	        if (opts.longStackTraces) {
	            Promise.longStackTraces();
	        } else if (!opts.longStackTraces && Promise.hasLongStackTraces()) {
	            disableLongStackTraces();
	        }
	    }
	    if ("warnings" in opts) {
	        var warningsOption = opts.warnings;
	        config.warnings = !!warningsOption;
	        wForgottenReturn = config.warnings;
	
	        if (util.isObject(warningsOption)) {
	            if ("wForgottenReturn" in warningsOption) {
	                wForgottenReturn = !!warningsOption.wForgottenReturn;
	            }
	        }
	    }
	    if ("cancellation" in opts && opts.cancellation && !config.cancellation) {
	        if (async.haveItemsQueued()) {
	            throw new Error(
	                "cannot enable cancellation after promises are in use");
	        }
	        Promise.prototype._clearCancellationData =
	            cancellationClearCancellationData;
	        Promise.prototype._propagateFrom = cancellationPropagateFrom;
	        Promise.prototype._onCancel = cancellationOnCancel;
	        Promise.prototype._setOnCancel = cancellationSetOnCancel;
	        Promise.prototype._attachCancellationCallback =
	            cancellationAttachCancellationCallback;
	        Promise.prototype._execute = cancellationExecute;
	        propagateFromFunction = cancellationPropagateFrom;
	        config.cancellation = true;
	    }
	    if ("monitoring" in opts) {
	        if (opts.monitoring && !config.monitoring) {
	            config.monitoring = true;
	            Promise.prototype._fireEvent = activeFireEvent;
	        } else if (!opts.monitoring && config.monitoring) {
	            config.monitoring = false;
	            Promise.prototype._fireEvent = defaultFireEvent;
	        }
	    }
	    return Promise;
	};
	
	function defaultFireEvent() { return false; }
	
	Promise.prototype._fireEvent = defaultFireEvent;
	Promise.prototype._execute = function(executor, resolve, reject) {
	    try {
	        executor(resolve, reject);
	    } catch (e) {
	        return e;
	    }
	};
	Promise.prototype._onCancel = function () {};
	Promise.prototype._setOnCancel = function (handler) { ; };
	Promise.prototype._attachCancellationCallback = function(onCancel) {
	    ;
	};
	Promise.prototype._captureStackTrace = function () {};
	Promise.prototype._attachExtraTrace = function () {};
	Promise.prototype._dereferenceTrace = function () {};
	Promise.prototype._clearCancellationData = function() {};
	Promise.prototype._propagateFrom = function (parent, flags) {
	    ;
	    ;
	};
	
	function cancellationExecute(executor, resolve, reject) {
	    var promise = this;
	    try {
	        executor(resolve, reject, function(onCancel) {
	            if (typeof onCancel !== "function") {
	                throw new TypeError("onCancel must be a function, got: " +
	                                    util.toString(onCancel));
	            }
	            promise._attachCancellationCallback(onCancel);
	        });
	    } catch (e) {
	        return e;
	    }
	}
	
	function cancellationAttachCancellationCallback(onCancel) {
	    if (!this._isCancellable()) return this;
	
	    var previousOnCancel = this._onCancel();
	    if (previousOnCancel !== undefined) {
	        if (util.isArray(previousOnCancel)) {
	            previousOnCancel.push(onCancel);
	        } else {
	            this._setOnCancel([previousOnCancel, onCancel]);
	        }
	    } else {
	        this._setOnCancel(onCancel);
	    }
	}
	
	function cancellationOnCancel() {
	    return this._onCancelField;
	}
	
	function cancellationSetOnCancel(onCancel) {
	    this._onCancelField = onCancel;
	}
	
	function cancellationClearCancellationData() {
	    this._cancellationParent = undefined;
	    this._onCancelField = undefined;
	}
	
	function cancellationPropagateFrom(parent, flags) {
	    if ((flags & 1) !== 0) {
	        this._cancellationParent = parent;
	        var branchesRemainingToCancel = parent._branchesRemainingToCancel;
	        if (branchesRemainingToCancel === undefined) {
	            branchesRemainingToCancel = 0;
	        }
	        parent._branchesRemainingToCancel = branchesRemainingToCancel + 1;
	    }
	    if ((flags & 2) !== 0 && parent._isBound()) {
	        this._setBoundTo(parent._boundTo);
	    }
	}
	
	function bindingPropagateFrom(parent, flags) {
	    if ((flags & 2) !== 0 && parent._isBound()) {
	        this._setBoundTo(parent._boundTo);
	    }
	}
	var propagateFromFunction = bindingPropagateFrom;
	
	function boundValueFunction() {
	    var ret = this._boundTo;
	    if (ret !== undefined) {
	        if (ret instanceof Promise) {
	            if (ret.isFulfilled()) {
	                return ret.value();
	            } else {
	                return undefined;
	            }
	        }
	    }
	    return ret;
	}
	
	function longStackTracesCaptureStackTrace() {
	    this._trace = new CapturedTrace(this._peekContext());
	}
	
	function longStackTracesAttachExtraTrace(error, ignoreSelf) {
	    if (canAttachTrace(error)) {
	        var trace = this._trace;
	        if (trace !== undefined) {
	            if (ignoreSelf) trace = trace._parent;
	        }
	        if (trace !== undefined) {
	            trace.attachExtraTrace(error);
	        } else if (!error.__stackCleaned__) {
	            var parsed = parseStackAndMessage(error);
	            util.notEnumerableProp(error, "stack",
	                parsed.message + "\n" + parsed.stack.join("\n"));
	            util.notEnumerableProp(error, "__stackCleaned__", true);
	        }
	    }
	}
	
	function longStackTracesDereferenceTrace() {
	    this._trace = undefined;
	}
	
	function checkForgottenReturns(returnValue, promiseCreated, name, promise,
	                               parent) {
	    if (returnValue === undefined && promiseCreated !== null &&
	        wForgottenReturn) {
	        if (parent !== undefined && parent._returnedNonUndefined()) return;
	        if ((promise._bitField & 65535) === 0) return;
	
	        if (name) name = name + " ";
	        var handlerLine = "";
	        var creatorLine = "";
	        if (promiseCreated._trace) {
	            var traceLines = promiseCreated._trace.stack.split("\n");
	            var stack = cleanStack(traceLines);
	            for (var i = stack.length - 1; i >= 0; --i) {
	                var line = stack[i];
	                if (!nodeFramePattern.test(line)) {
	                    var lineMatches = line.match(parseLinePattern);
	                    if (lineMatches) {
	                        handlerLine  = "at " + lineMatches[1] +
	                            ":" + lineMatches[2] + ":" + lineMatches[3] + " ";
	                    }
	                    break;
	                }
	            }
	
	            if (stack.length > 0) {
	                var firstUserLine = stack[0];
	                for (var i = 0; i < traceLines.length; ++i) {
	
	                    if (traceLines[i] === firstUserLine) {
	                        if (i > 0) {
	                            creatorLine = "\n" + traceLines[i - 1];
	                        }
	                        break;
	                    }
	                }
	
	            }
	        }
	        var msg = "a promise was created in a " + name +
	            "handler " + handlerLine + "but was not returned from it, " +
	            "see http://goo.gl/rRqMUw" +
	            creatorLine;
	        promise._warn(msg, true, promiseCreated);
	    }
	}
	
	function deprecated(name, replacement) {
	    var message = name +
	        " is deprecated and will be removed in a future version.";
	    if (replacement) message += " Use " + replacement + " instead.";
	    return warn(message);
	}
	
	function warn(message, shouldUseOwnTrace, promise) {
	    if (!config.warnings) return;
	    var warning = new Warning(message);
	    var ctx;
	    if (shouldUseOwnTrace) {
	        promise._attachExtraTrace(warning);
	    } else if (config.longStackTraces && (ctx = Promise._peekContext())) {
	        ctx.attachExtraTrace(warning);
	    } else {
	        var parsed = parseStackAndMessage(warning);
	        warning.stack = parsed.message + "\n" + parsed.stack.join("\n");
	    }
	
	    if (!activeFireEvent("warning", warning)) {
	        formatAndLogError(warning, "", true);
	    }
	}
	
	function reconstructStack(message, stacks) {
	    for (var i = 0; i < stacks.length - 1; ++i) {
	        stacks[i].push("From previous event:");
	        stacks[i] = stacks[i].join("\n");
	    }
	    if (i < stacks.length) {
	        stacks[i] = stacks[i].join("\n");
	    }
	    return message + "\n" + stacks.join("\n");
	}
	
	function removeDuplicateOrEmptyJumps(stacks) {
	    for (var i = 0; i < stacks.length; ++i) {
	        if (stacks[i].length === 0 ||
	            ((i + 1 < stacks.length) && stacks[i][0] === stacks[i+1][0])) {
	            stacks.splice(i, 1);
	            i--;
	        }
	    }
	}
	
	function removeCommonRoots(stacks) {
	    var current = stacks[0];
	    for (var i = 1; i < stacks.length; ++i) {
	        var prev = stacks[i];
	        var currentLastIndex = current.length - 1;
	        var currentLastLine = current[currentLastIndex];
	        var commonRootMeetPoint = -1;
	
	        for (var j = prev.length - 1; j >= 0; --j) {
	            if (prev[j] === currentLastLine) {
	                commonRootMeetPoint = j;
	                break;
	            }
	        }
	
	        for (var j = commonRootMeetPoint; j >= 0; --j) {
	            var line = prev[j];
	            if (current[currentLastIndex] === line) {
	                current.pop();
	                currentLastIndex--;
	            } else {
	                break;
	            }
	        }
	        current = prev;
	    }
	}
	
	function cleanStack(stack) {
	    var ret = [];
	    for (var i = 0; i < stack.length; ++i) {
	        var line = stack[i];
	        var isTraceLine = "    (No stack trace)" === line ||
	            stackFramePattern.test(line);
	        var isInternalFrame = isTraceLine && shouldIgnore(line);
	        if (isTraceLine && !isInternalFrame) {
	            if (indentStackFrames && line.charAt(0) !== " ") {
	                line = "    " + line;
	            }
	            ret.push(line);
	        }
	    }
	    return ret;
	}
	
	function stackFramesAsArray(error) {
	    var stack = error.stack.replace(/\s+$/g, "").split("\n");
	    for (var i = 0; i < stack.length; ++i) {
	        var line = stack[i];
	        if ("    (No stack trace)" === line || stackFramePattern.test(line)) {
	            break;
	        }
	    }
	    if (i > 0 && error.name != "SyntaxError") {
	        stack = stack.slice(i);
	    }
	    return stack;
	}
	
	function parseStackAndMessage(error) {
	    var stack = error.stack;
	    var message = error.toString();
	    stack = typeof stack === "string" && stack.length > 0
	                ? stackFramesAsArray(error) : ["    (No stack trace)"];
	    return {
	        message: message,
	        stack: error.name == "SyntaxError" ? stack : cleanStack(stack)
	    };
	}
	
	function formatAndLogError(error, title, isSoft) {
	    if (typeof console !== "undefined") {
	        var message;
	        if (util.isObject(error)) {
	            var stack = error.stack;
	            message = title + formatStack(stack, error);
	        } else {
	            message = title + String(error);
	        }
	        if (typeof printWarning === "function") {
	            printWarning(message, isSoft);
	        } else if (typeof console.log === "function" ||
	            typeof console.log === "object") {
	            console.log(message);
	        }
	    }
	}
	
	function fireRejectionEvent(name, localHandler, reason, promise) {
	    var localEventFired = false;
	    try {
	        if (typeof localHandler === "function") {
	            localEventFired = true;
	            if (name === "rejectionHandled") {
	                localHandler(promise);
	            } else {
	                localHandler(reason, promise);
	            }
	        }
	    } catch (e) {
	        async.throwLater(e);
	    }
	
	    if (name === "unhandledRejection") {
	        if (!activeFireEvent(name, reason, promise) && !localEventFired) {
	            formatAndLogError(reason, "Unhandled rejection ");
	        }
	    } else {
	        activeFireEvent(name, promise);
	    }
	}
	
	function formatNonError(obj) {
	    var str;
	    if (typeof obj === "function") {
	        str = "[function " +
	            (obj.name || "anonymous") +
	            "]";
	    } else {
	        str = obj && typeof obj.toString === "function"
	            ? obj.toString() : util.toString(obj);
	        var ruselessToString = /\[object [a-zA-Z0-9$_]+\]/;
	        if (ruselessToString.test(str)) {
	            try {
	                var newStr = JSON.stringify(obj);
	                str = newStr;
	            }
	            catch(e) {
	
	            }
	        }
	        if (str.length === 0) {
	            str = "(empty array)";
	        }
	    }
	    return ("(<" + snip(str) + ">, no stack trace)");
	}
	
	function snip(str) {
	    var maxChars = 41;
	    if (str.length < maxChars) {
	        return str;
	    }
	    return str.substr(0, maxChars - 3) + "...";
	}
	
	function longStackTracesIsSupported() {
	    return typeof captureStackTrace === "function";
	}
	
	var shouldIgnore = function() { return false; };
	var parseLineInfoRegex = /[\/<\(]([^:\/]+):(\d+):(?:\d+)\)?\s*$/;
	function parseLineInfo(line) {
	    var matches = line.match(parseLineInfoRegex);
	    if (matches) {
	        return {
	            fileName: matches[1],
	            line: parseInt(matches[2], 10)
	        };
	    }
	}
	
	function setBounds(firstLineError, lastLineError) {
	    if (!longStackTracesIsSupported()) return;
	    var firstStackLines = (firstLineError.stack || "").split("\n");
	    var lastStackLines = (lastLineError.stack || "").split("\n");
	    var firstIndex = -1;
	    var lastIndex = -1;
	    var firstFileName;
	    var lastFileName;
	    for (var i = 0; i < firstStackLines.length; ++i) {
	        var result = parseLineInfo(firstStackLines[i]);
	        if (result) {
	            firstFileName = result.fileName;
	            firstIndex = result.line;
	            break;
	        }
	    }
	    for (var i = 0; i < lastStackLines.length; ++i) {
	        var result = parseLineInfo(lastStackLines[i]);
	        if (result) {
	            lastFileName = result.fileName;
	            lastIndex = result.line;
	            break;
	        }
	    }
	    if (firstIndex < 0 || lastIndex < 0 || !firstFileName || !lastFileName ||
	        firstFileName !== lastFileName || firstIndex >= lastIndex) {
	        return;
	    }
	
	    shouldIgnore = function(line) {
	        if (bluebirdFramePattern.test(line)) return true;
	        var info = parseLineInfo(line);
	        if (info) {
	            if (info.fileName === firstFileName &&
	                (firstIndex <= info.line && info.line <= lastIndex)) {
	                return true;
	            }
	        }
	        return false;
	    };
	}
	
	function CapturedTrace(parent) {
	    this._parent = parent;
	    this._promisesCreated = 0;
	    var length = this._length = 1 + (parent === undefined ? 0 : parent._length);
	    captureStackTrace(this, CapturedTrace);
	    if (length > 32) this.uncycle();
	}
	util.inherits(CapturedTrace, Error);
	Context.CapturedTrace = CapturedTrace;
	
	CapturedTrace.prototype.uncycle = function() {
	    var length = this._length;
	    if (length < 2) return;
	    var nodes = [];
	    var stackToIndex = {};
	
	    for (var i = 0, node = this; node !== undefined; ++i) {
	        nodes.push(node);
	        node = node._parent;
	    }
	    length = this._length = i;
	    for (var i = length - 1; i >= 0; --i) {
	        var stack = nodes[i].stack;
	        if (stackToIndex[stack] === undefined) {
	            stackToIndex[stack] = i;
	        }
	    }
	    for (var i = 0; i < length; ++i) {
	        var currentStack = nodes[i].stack;
	        var index = stackToIndex[currentStack];
	        if (index !== undefined && index !== i) {
	            if (index > 0) {
	                nodes[index - 1]._parent = undefined;
	                nodes[index - 1]._length = 1;
	            }
	            nodes[i]._parent = undefined;
	            nodes[i]._length = 1;
	            var cycleEdgeNode = i > 0 ? nodes[i - 1] : this;
	
	            if (index < length - 1) {
	                cycleEdgeNode._parent = nodes[index + 1];
	                cycleEdgeNode._parent.uncycle();
	                cycleEdgeNode._length =
	                    cycleEdgeNode._parent._length + 1;
	            } else {
	                cycleEdgeNode._parent = undefined;
	                cycleEdgeNode._length = 1;
	            }
	            var currentChildLength = cycleEdgeNode._length + 1;
	            for (var j = i - 2; j >= 0; --j) {
	                nodes[j]._length = currentChildLength;
	                currentChildLength++;
	            }
	            return;
	        }
	    }
	};
	
	CapturedTrace.prototype.attachExtraTrace = function(error) {
	    if (error.__stackCleaned__) return;
	    this.uncycle();
	    var parsed = parseStackAndMessage(error);
	    var message = parsed.message;
	    var stacks = [parsed.stack];
	
	    var trace = this;
	    while (trace !== undefined) {
	        stacks.push(cleanStack(trace.stack.split("\n")));
	        trace = trace._parent;
	    }
	    removeCommonRoots(stacks);
	    removeDuplicateOrEmptyJumps(stacks);
	    util.notEnumerableProp(error, "stack", reconstructStack(message, stacks));
	    util.notEnumerableProp(error, "__stackCleaned__", true);
	};
	
	var captureStackTrace = (function stackDetection() {
	    var v8stackFramePattern = /^\s*at\s*/;
	    var v8stackFormatter = function(stack, error) {
	        if (typeof stack === "string") return stack;
	
	        if (error.name !== undefined &&
	            error.message !== undefined) {
	            return error.toString();
	        }
	        return formatNonError(error);
	    };
	
	    if (typeof Error.stackTraceLimit === "number" &&
	        typeof Error.captureStackTrace === "function") {
	        Error.stackTraceLimit += 6;
	        stackFramePattern = v8stackFramePattern;
	        formatStack = v8stackFormatter;
	        var captureStackTrace = Error.captureStackTrace;
	
	        shouldIgnore = function(line) {
	            return bluebirdFramePattern.test(line);
	        };
	        return function(receiver, ignoreUntil) {
	            Error.stackTraceLimit += 6;
	            captureStackTrace(receiver, ignoreUntil);
	            Error.stackTraceLimit -= 6;
	        };
	    }
	    var err = new Error();
	
	    if (typeof err.stack === "string" &&
	        err.stack.split("\n")[0].indexOf("stackDetection@") >= 0) {
	        stackFramePattern = /@/;
	        formatStack = v8stackFormatter;
	        indentStackFrames = true;
	        return function captureStackTrace(o) {
	            o.stack = new Error().stack;
	        };
	    }
	
	    var hasStackAfterThrow;
	    try { throw new Error(); }
	    catch(e) {
	        hasStackAfterThrow = ("stack" in e);
	    }
	    if (!("stack" in err) && hasStackAfterThrow &&
	        typeof Error.stackTraceLimit === "number") {
	        stackFramePattern = v8stackFramePattern;
	        formatStack = v8stackFormatter;
	        return function captureStackTrace(o) {
	            Error.stackTraceLimit += 6;
	            try { throw new Error(); }
	            catch(e) { o.stack = e.stack; }
	            Error.stackTraceLimit -= 6;
	        };
	    }
	
	    formatStack = function(stack, error) {
	        if (typeof stack === "string") return stack;
	
	        if ((typeof error === "object" ||
	            typeof error === "function") &&
	            error.name !== undefined &&
	            error.message !== undefined) {
	            return error.toString();
	        }
	        return formatNonError(error);
	    };
	
	    return null;
	
	})([]);
	
	if (typeof console !== "undefined" && typeof console.warn !== "undefined") {
	    printWarning = function (message) {
	        console.warn(message);
	    };
	    if (util.isNode && process.stderr.isTTY) {
	        printWarning = function(message, isSoft) {
	            var color = isSoft ? "\u001b[33m" : "\u001b[31m";
	            console.warn(color + message + "\u001b[0m\n");
	        };
	    } else if (!util.isNode && typeof (new Error().stack) === "string") {
	        printWarning = function(message, isSoft) {
	            console.warn("%c" + message,
	                        isSoft ? "color: darkorange" : "color: red");
	        };
	    }
	}
	
	var config = {
	    warnings: warnings,
	    longStackTraces: false,
	    cancellation: false,
	    monitoring: false
	};
	
	if (longStackTraces) Promise.longStackTraces();
	
	return {
	    longStackTraces: function() {
	        return config.longStackTraces;
	    },
	    warnings: function() {
	        return config.warnings;
	    },
	    cancellation: function() {
	        return config.cancellation;
	    },
	    monitoring: function() {
	        return config.monitoring;
	    },
	    propagateFromFunction: function() {
	        return propagateFromFunction;
	    },
	    boundValueFunction: function() {
	        return boundValueFunction;
	    },
	    checkForgottenReturns: checkForgottenReturns,
	    setBounds: setBounds,
	    warn: warn,
	    deprecated: deprecated,
	    CapturedTrace: CapturedTrace,
	    fireDomEvent: fireDomEvent,
	    fireGlobalEvent: fireGlobalEvent
	};
	};
	
	/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(116)))

/***/ }),
/* 704 */
/***/ (function(module, exports) {

	"use strict";
	module.exports = function(Promise, INTERNAL) {
	var PromiseReduce = Promise.reduce;
	var PromiseAll = Promise.all;
	
	function promiseAllThis() {
	    return PromiseAll(this);
	}
	
	function PromiseMapSeries(promises, fn) {
	    return PromiseReduce(promises, fn, INTERNAL, INTERNAL);
	}
	
	Promise.prototype.each = function (fn) {
	    return PromiseReduce(this, fn, INTERNAL, 0)
	              ._then(promiseAllThis, undefined, undefined, this, undefined);
	};
	
	Promise.prototype.mapSeries = function (fn) {
	    return PromiseReduce(this, fn, INTERNAL, INTERNAL);
	};
	
	Promise.each = function (promises, fn) {
	    return PromiseReduce(promises, fn, INTERNAL, 0)
	              ._then(promiseAllThis, undefined, undefined, promises, undefined);
	};
	
	Promise.mapSeries = PromiseMapSeries;
	};
	


/***/ }),
/* 705 */
/***/ (function(module, exports) {

	"use strict";
	module.exports = function(Promise, INTERNAL) {
	var PromiseMap = Promise.map;
	
	Promise.prototype.filter = function (fn, options) {
	    return PromiseMap(this, fn, options, INTERNAL);
	};
	
	Promise.filter = function (promises, fn, options) {
	    return PromiseMap(promises, fn, options, INTERNAL);
	};
	};


/***/ }),
/* 706 */
/***/ (function(module, exports, __webpack_require__) {

	"use strict";
	module.exports = function(Promise, tryConvertToPromise, NEXT_FILTER) {
	var util = __webpack_require__(17);
	var CancellationError = Promise.CancellationError;
	var errorObj = util.errorObj;
	var catchFilter = __webpack_require__(313)(NEXT_FILTER);
	
	function PassThroughHandlerContext(promise, type, handler) {
	    this.promise = promise;
	    this.type = type;
	    this.handler = handler;
	    this.called = false;
	    this.cancelPromise = null;
	}
	
	PassThroughHandlerContext.prototype.isFinallyHandler = function() {
	    return this.type === 0;
	};
	
	function FinallyHandlerCancelReaction(finallyHandler) {
	    this.finallyHandler = finallyHandler;
	}
	
	FinallyHandlerCancelReaction.prototype._resultCancelled = function() {
	    checkCancel(this.finallyHandler);
	};
	
	function checkCancel(ctx, reason) {
	    if (ctx.cancelPromise != null) {
	        if (arguments.length > 1) {
	            ctx.cancelPromise._reject(reason);
	        } else {
	            ctx.cancelPromise._cancel();
	        }
	        ctx.cancelPromise = null;
	        return true;
	    }
	    return false;
	}
	
	function succeed() {
	    return finallyHandler.call(this, this.promise._target()._settledValue());
	}
	function fail(reason) {
	    if (checkCancel(this, reason)) return;
	    errorObj.e = reason;
	    return errorObj;
	}
	function finallyHandler(reasonOrValue) {
	    var promise = this.promise;
	    var handler = this.handler;
	
	    if (!this.called) {
	        this.called = true;
	        var ret = this.isFinallyHandler()
	            ? handler.call(promise._boundValue())
	            : handler.call(promise._boundValue(), reasonOrValue);
	        if (ret === NEXT_FILTER) {
	            return ret;
	        } else if (ret !== undefined) {
	            promise._setReturnedNonUndefined();
	            var maybePromise = tryConvertToPromise(ret, promise);
	            if (maybePromise instanceof Promise) {
	                if (this.cancelPromise != null) {
	                    if (maybePromise._isCancelled()) {
	                        var reason =
	                            new CancellationError("late cancellation observer");
	                        promise._attachExtraTrace(reason);
	                        errorObj.e = reason;
	                        return errorObj;
	                    } else if (maybePromise.isPending()) {
	                        maybePromise._attachCancellationCallback(
	                            new FinallyHandlerCancelReaction(this));
	                    }
	                }
	                return maybePromise._then(
	                    succeed, fail, undefined, this, undefined);
	            }
	        }
	    }
	
	    if (promise.isRejected()) {
	        checkCancel(this);
	        errorObj.e = reasonOrValue;
	        return errorObj;
	    } else {
	        checkCancel(this);
	        return reasonOrValue;
	    }
	}
	
	Promise.prototype._passThrough = function(handler, type, success, fail) {
	    if (typeof handler !== "function") return this.then();
	    return this._then(success,
	                      fail,
	                      undefined,
	                      new PassThroughHandlerContext(this, type, handler),
	                      undefined);
	};
	
	Promise.prototype.lastly =
	Promise.prototype["finally"] = function (handler) {
	    return this._passThrough(handler,
	                             0,
	                             finallyHandler,
	                             finallyHandler);
	};
	
	
	Promise.prototype.tap = function (handler) {
	    return this._passThrough(handler, 1, finallyHandler);
	};
	
	Promise.prototype.tapCatch = function (handlerOrPredicate) {
	    var len = arguments.length;
	    if(len === 1) {
	        return this._passThrough(handlerOrPredicate,
	                                 1,
	                                 undefined,
	                                 finallyHandler);
	    } else {
	         var catchInstances = new Array(len - 1),
	            j = 0, i;
	        for (i = 0; i < len - 1; ++i) {
	            var item = arguments[i];
	            if (util.isObject(item)) {
	                catchInstances[j++] = item;
	            } else {
	                return Promise.reject(new TypeError(
	                    "tapCatch statement predicate: "
	                    + "expecting an object but got " + util.classString(item)
	                ));
	            }
	        }
	        catchInstances.length = j;
	        var handler = arguments[i];
	        return this._passThrough(catchFilter(catchInstances, handler, this),
	                                 1,
	                                 undefined,
	                                 finallyHandler);
	    }
	
	};
	
	return PassThroughHandlerContext;
	};


/***/ }),
/* 707 */
/***/ (function(module, exports, __webpack_require__) {

	"use strict";
	module.exports = function(Promise,
	                          apiRejection,
	                          INTERNAL,
	                          tryConvertToPromise,
	                          Proxyable,
	                          debug) {
	var errors = __webpack_require__(75);
	var TypeError = errors.TypeError;
	var util = __webpack_require__(17);
	var errorObj = util.errorObj;
	var tryCatch = util.tryCatch;
	var yieldHandlers = [];
	
	function promiseFromYieldHandler(value, yieldHandlers, traceParent) {
	    for (var i = 0; i < yieldHandlers.length; ++i) {
	        traceParent._pushContext();
	        var result = tryCatch(yieldHandlers[i])(value);
	        traceParent._popContext();
	        if (result === errorObj) {
	            traceParent._pushContext();
	            var ret = Promise.reject(errorObj.e);
	            traceParent._popContext();
	            return ret;
	        }
	        var maybePromise = tryConvertToPromise(result, traceParent);
	        if (maybePromise instanceof Promise) return maybePromise;
	    }
	    return null;
	}
	
	function PromiseSpawn(generatorFunction, receiver, yieldHandler, stack) {
	    if (debug.cancellation()) {
	        var internal = new Promise(INTERNAL);
	        var _finallyPromise = this._finallyPromise = new Promise(INTERNAL);
	        this._promise = internal.lastly(function() {
	            return _finallyPromise;
	        });
	        internal._captureStackTrace();
	        internal._setOnCancel(this);
	    } else {
	        var promise = this._promise = new Promise(INTERNAL);
	        promise._captureStackTrace();
	    }
	    this._stack = stack;
	    this._generatorFunction = generatorFunction;
	    this._receiver = receiver;
	    this._generator = undefined;
	    this._yieldHandlers = typeof yieldHandler === "function"
	        ? [yieldHandler].concat(yieldHandlers)
	        : yieldHandlers;
	    this._yieldedPromise = null;
	    this._cancellationPhase = false;
	}
	util.inherits(PromiseSpawn, Proxyable);
	
	PromiseSpawn.prototype._isResolved = function() {
	    return this._promise === null;
	};
	
	PromiseSpawn.prototype._cleanup = function() {
	    this._promise = this._generator = null;
	    if (debug.cancellation() && this._finallyPromise !== null) {
	        this._finallyPromise._fulfill();
	        this._finallyPromise = null;
	    }
	};
	
	PromiseSpawn.prototype._promiseCancelled = function() {
	    if (this._isResolved()) return;
	    var implementsReturn = typeof this._generator["return"] !== "undefined";
	
	    var result;
	    if (!implementsReturn) {
	        var reason = new Promise.CancellationError(
	            "generator .return() sentinel");
	        Promise.coroutine.returnSentinel = reason;
	        this._promise._attachExtraTrace(reason);
	        this._promise._pushContext();
	        result = tryCatch(this._generator["throw"]).call(this._generator,
	                                                         reason);
	        this._promise._popContext();
	    } else {
	        this._promise._pushContext();
	        result = tryCatch(this._generator["return"]).call(this._generator,
	                                                          undefined);
	        this._promise._popContext();
	    }
	    this._cancellationPhase = true;
	    this._yieldedPromise = null;
	    this._continue(result);
	};
	
	PromiseSpawn.prototype._promiseFulfilled = function(value) {
	    this._yieldedPromise = null;
	    this._promise._pushContext();
	    var result = tryCatch(this._generator.next).call(this._generator, value);
	    this._promise._popContext();
	    this._continue(result);
	};
	
	PromiseSpawn.prototype._promiseRejected = function(reason) {
	    this._yieldedPromise = null;
	    this._promise._attachExtraTrace(reason);
	    this._promise._pushContext();
	    var result = tryCatch(this._generator["throw"])
	        .call(this._generator, reason);
	    this._promise._popContext();
	    this._continue(result);
	};
	
	PromiseSpawn.prototype._resultCancelled = function() {
	    if (this._yieldedPromise instanceof Promise) {
	        var promise = this._yieldedPromise;
	        this._yieldedPromise = null;
	        promise.cancel();
	    }
	};
	
	PromiseSpawn.prototype.promise = function () {
	    return this._promise;
	};
	
	PromiseSpawn.prototype._run = function () {
	    this._generator = this._generatorFunction.call(this._receiver);
	    this._receiver =
	        this._generatorFunction = undefined;
	    this._promiseFulfilled(undefined);
	};
	
	PromiseSpawn.prototype._continue = function (result) {
	    var promise = this._promise;
	    if (result === errorObj) {
	        this._cleanup();
	        if (this._cancellationPhase) {
	            return promise.cancel();
	        } else {
	            return promise._rejectCallback(result.e, false);
	        }
	    }
	
	    var value = result.value;
	    if (result.done === true) {
	        this._cleanup();
	        if (this._cancellationPhase) {
	            return promise.cancel();
	        } else {
	            return promise._resolveCallback(value);
	        }
	    } else {
	        var maybePromise = tryConvertToPromise(value, this._promise);
	        if (!(maybePromise instanceof Promise)) {
	            maybePromise =
	                promiseFromYieldHandler(maybePromise,
	                                        this._yieldHandlers,
	                                        this._promise);
	            if (maybePromise === null) {
	                this._promiseRejected(
	                    new TypeError(
	                        "A value %s was yielded that could not be treated as a promise\u000a\u000a    See http://goo.gl/MqrFmX\u000a\u000a".replace("%s", String(value)) +
	                        "From coroutine:\u000a" +
	                        this._stack.split("\n").slice(1, -7).join("\n")
	                    )
	                );
	                return;
	            }
	        }
	        maybePromise = maybePromise._target();
	        var bitField = maybePromise._bitField;
	        ;
	        if (((bitField & 50397184) === 0)) {
	            this._yieldedPromise = maybePromise;
	            maybePromise._proxy(this, null);
	        } else if (((bitField & 33554432) !== 0)) {
	            Promise._async.invoke(
	                this._promiseFulfilled, this, maybePromise._value()
	            );
	        } else if (((bitField & 16777216) !== 0)) {
	            Promise._async.invoke(
	                this._promiseRejected, this, maybePromise._reason()
	            );
	        } else {
	            this._promiseCancelled();
	        }
	    }
	};
	
	Promise.coroutine = function (generatorFunction, options) {
	    if (typeof generatorFunction !== "function") {
	        throw new TypeError("generatorFunction must be a function\u000a\u000a    See http://goo.gl/MqrFmX\u000a");
	    }
	    var yieldHandler = Object(options).yieldHandler;
	    var PromiseSpawn$ = PromiseSpawn;
	    var stack = new Error().stack;
	    return function () {
	        var generator = generatorFunction.apply(this, arguments);
	        var spawn = new PromiseSpawn$(undefined, undefined, yieldHandler,
	                                      stack);
	        var ret = spawn.promise();
	        spawn._generator = generator;
	        spawn._promiseFulfilled(undefined);
	        return ret;
	    };
	};
	
	Promise.coroutine.addYieldHandler = function(fn) {
	    if (typeof fn !== "function") {
	        throw new TypeError("expecting a function but got " + util.classString(fn));
	    }
	    yieldHandlers.push(fn);
	};
	
	Promise.spawn = function (generatorFunction) {
	    debug.deprecated("Promise.spawn()", "Promise.coroutine()");
	    if (typeof generatorFunction !== "function") {
	        return apiRejection("generatorFunction must be a function\u000a\u000a    See http://goo.gl/MqrFmX\u000a");
	    }
	    var spawn = new PromiseSpawn(generatorFunction, this);
	    var ret = spawn.promise();
	    spawn._run(Promise.spawn);
	    return ret;
	};
	};


/***/ }),
/* 708 */
/***/ (function(module, exports, __webpack_require__) {

	"use strict";
	module.exports =
	function(Promise, PromiseArray, tryConvertToPromise, INTERNAL, async,
	         getDomain) {
	var util = __webpack_require__(17);
	var canEvaluate = util.canEvaluate;
	var tryCatch = util.tryCatch;
	var errorObj = util.errorObj;
	var reject;
	
	if (true) {
	if (canEvaluate) {
	    var thenCallback = function(i) {
	        return new Function("value", "holder", "                             \n\
	            'use strict';                                                    \n\
	            holder.pIndex = value;                                           \n\
	            holder.checkFulfillment(this);                                   \n\
	            ".replace(/Index/g, i));
	    };
	
	    var promiseSetter = function(i) {
	        return new Function("promise", "holder", "                           \n\
	            'use strict';                                                    \n\
	            holder.pIndex = promise;                                         \n\
	            ".replace(/Index/g, i));
	    };
	
	    var generateHolderClass = function(total) {
	        var props = new Array(total);
	        for (var i = 0; i < props.length; ++i) {
	            props[i] = "this.p" + (i+1);
	        }
	        var assignment = props.join(" = ") + " = null;";
	        var cancellationCode= "var promise;\n" + props.map(function(prop) {
	            return "                                                         \n\
	                promise = " + prop + ";                                      \n\
	                if (promise instanceof Promise) {                            \n\
	                    promise.cancel();                                        \n\
	                }                                                            \n\
	            ";
	        }).join("\n");
	        var passedArguments = props.join(", ");
	        var name = "Holder$" + total;
	
	
	        var code = "return function(tryCatch, errorObj, Promise, async) {    \n\
	            'use strict';                                                    \n\
	            function [TheName](fn) {                                         \n\
	                [TheProperties]                                              \n\
	                this.fn = fn;                                                \n\
	                this.asyncNeeded = true;                                     \n\
	                this.now = 0;                                                \n\
	            }                                                                \n\
	                                                                             \n\
	            [TheName].prototype._callFunction = function(promise) {          \n\
	                promise._pushContext();                                      \n\
	                var ret = tryCatch(this.fn)([ThePassedArguments]);           \n\
	                promise._popContext();                                       \n\
	                if (ret === errorObj) {                                      \n\
	                    promise._rejectCallback(ret.e, false);                   \n\
	                } else {                                                     \n\
	                    promise._resolveCallback(ret);                           \n\
	                }                                                            \n\
	            };                                                               \n\
	                                                                             \n\
	            [TheName].prototype.checkFulfillment = function(promise) {       \n\
	                var now = ++this.now;                                        \n\
	                if (now === [TheTotal]) {                                    \n\
	                    if (this.asyncNeeded) {                                  \n\
	                        async.invoke(this._callFunction, this, promise);     \n\
	                    } else {                                                 \n\
	                        this._callFunction(promise);                         \n\
	                    }                                                        \n\
	                                                                             \n\
	                }                                                            \n\
	            };                                                               \n\
	                                                                             \n\
	            [TheName].prototype._resultCancelled = function() {              \n\
	                [CancellationCode]                                           \n\
	            };                                                               \n\
	                                                                             \n\
	            return [TheName];                                                \n\
	        }(tryCatch, errorObj, Promise, async);                               \n\
	        ";
	
	        code = code.replace(/\[TheName\]/g, name)
	            .replace(/\[TheTotal\]/g, total)
	            .replace(/\[ThePassedArguments\]/g, passedArguments)
	            .replace(/\[TheProperties\]/g, assignment)
	            .replace(/\[CancellationCode\]/g, cancellationCode);
	
	        return new Function("tryCatch", "errorObj", "Promise", "async", code)
	                           (tryCatch, errorObj, Promise, async);
	    };
	
	    var holderClasses = [];
	    var thenCallbacks = [];
	    var promiseSetters = [];
	
	    for (var i = 0; i < 8; ++i) {
	        holderClasses.push(generateHolderClass(i + 1));
	        thenCallbacks.push(thenCallback(i + 1));
	        promiseSetters.push(promiseSetter(i + 1));
	    }
	
	    reject = function (reason) {
	        this._reject(reason);
	    };
	}}
	
	Promise.join = function () {
	    var last = arguments.length - 1;
	    var fn;
	    if (last > 0 && typeof arguments[last] === "function") {
	        fn = arguments[last];
	        if (true) {
	            if (last <= 8 && canEvaluate) {
	                var ret = new Promise(INTERNAL);
	                ret._captureStackTrace();
	                var HolderClass = holderClasses[last - 1];
	                var holder = new HolderClass(fn);
	                var callbacks = thenCallbacks;
	
	                for (var i = 0; i < last; ++i) {
	                    var maybePromise = tryConvertToPromise(arguments[i], ret);
	                    if (maybePromise instanceof Promise) {
	                        maybePromise = maybePromise._target();
	                        var bitField = maybePromise._bitField;
	                        ;
	                        if (((bitField & 50397184) === 0)) {
	                            maybePromise._then(callbacks[i], reject,
	                                               undefined, ret, holder);
	                            promiseSetters[i](maybePromise, holder);
	                            holder.asyncNeeded = false;
	                        } else if (((bitField & 33554432) !== 0)) {
	                            callbacks[i].call(ret,
	                                              maybePromise._value(), holder);
	                        } else if (((bitField & 16777216) !== 0)) {
	                            ret._reject(maybePromise._reason());
	                        } else {
	                            ret._cancel();
	                        }
	                    } else {
	                        callbacks[i].call(ret, maybePromise, holder);
	                    }
	                }
	
	                if (!ret._isFateSealed()) {
	                    if (holder.asyncNeeded) {
	                        var domain = getDomain();
	                        if (domain !== null) {
	                            holder.fn = util.domainBind(domain, holder.fn);
	                        }
	                    }
	                    ret._setAsyncGuaranteed();
	                    ret._setOnCancel(holder);
	                }
	                return ret;
	            }
	        }
	    }
	    var $_len = arguments.length;var args = new Array($_len); for(var $_i = 0; $_i < $_len; ++$_i) {args[$_i] = arguments[$_i];};
	    if (fn) args.pop();
	    var ret = new PromiseArray(args).promise();
	    return fn !== undefined ? ret.spread(fn) : ret;
	};
	
	};


/***/ }),
/* 709 */
/***/ (function(module, exports, __webpack_require__) {

	"use strict";
	module.exports = function(Promise,
	                          PromiseArray,
	                          apiRejection,
	                          tryConvertToPromise,
	                          INTERNAL,
	                          debug) {
	var getDomain = Promise._getDomain;
	var util = __webpack_require__(17);
	var tryCatch = util.tryCatch;
	var errorObj = util.errorObj;
	var async = Promise._async;
	
	function MappingPromiseArray(promises, fn, limit, _filter) {
	    this.constructor$(promises);
	    this._promise._captureStackTrace();
	    var domain = getDomain();
	    this._callback = domain === null ? fn : util.domainBind(domain, fn);
	    this._preservedValues = _filter === INTERNAL
	        ? new Array(this.length())
	        : null;
	    this._limit = limit;
	    this._inFlight = 0;
	    this._queue = [];
	    async.invoke(this._asyncInit, this, undefined);
	}
	util.inherits(MappingPromiseArray, PromiseArray);
	
	MappingPromiseArray.prototype._asyncInit = function() {
	    this._init$(undefined, -2);
	};
	
	MappingPromiseArray.prototype._init = function () {};
	
	MappingPromiseArray.prototype._promiseFulfilled = function (value, index) {
	    var values = this._values;
	    var length = this.length();
	    var preservedValues = this._preservedValues;
	    var limit = this._limit;
	
	    if (index < 0) {
	        index = (index * -1) - 1;
	        values[index] = value;
	        if (limit >= 1) {
	            this._inFlight--;
	            this._drainQueue();
	            if (this._isResolved()) return true;
	        }
	    } else {
	        if (limit >= 1 && this._inFlight >= limit) {
	            values[index] = value;
	            this._queue.push(index);
	            return false;
	        }
	        if (preservedValues !== null) preservedValues[index] = value;
	
	        var promise = this._promise;
	        var callback = this._callback;
	        var receiver = promise._boundValue();
	        promise._pushContext();
	        var ret = tryCatch(callback).call(receiver, value, index, length);
	        var promiseCreated = promise._popContext();
	        debug.checkForgottenReturns(
	            ret,
	            promiseCreated,
	            preservedValues !== null ? "Promise.filter" : "Promise.map",
	            promise
	        );
	        if (ret === errorObj) {
	            this._reject(ret.e);
	            return true;
	        }
	
	        var maybePromise = tryConvertToPromise(ret, this._promise);
	        if (maybePromise instanceof Promise) {
	            maybePromise = maybePromise._target();
	            var bitField = maybePromise._bitField;
	            ;
	            if (((bitField & 50397184) === 0)) {
	                if (limit >= 1) this._inFlight++;
	                values[index] = maybePromise;
	                maybePromise._proxy(this, (index + 1) * -1);
	                return false;
	            } else if (((bitField & 33554432) !== 0)) {
	                ret = maybePromise._value();
	            } else if (((bitField & 16777216) !== 0)) {
	                this._reject(maybePromise._reason());
	                return true;
	            } else {
	                this._cancel();
	                return true;
	            }
	        }
	        values[index] = ret;
	    }
	    var totalResolved = ++this._totalResolved;
	    if (totalResolved >= length) {
	        if (preservedValues !== null) {
	            this._filter(values, preservedValues);
	        } else {
	            this._resolve(values);
	        }
	        return true;
	    }
	    return false;
	};
	
	MappingPromiseArray.prototype._drainQueue = function () {
	    var queue = this._queue;
	    var limit = this._limit;
	    var values = this._values;
	    while (queue.length > 0 && this._inFlight < limit) {
	        if (this._isResolved()) return;
	        var index = queue.pop();
	        this._promiseFulfilled(values[index], index);
	    }
	};
	
	MappingPromiseArray.prototype._filter = function (booleans, values) {
	    var len = values.length;
	    var ret = new Array(len);
	    var j = 0;
	    for (var i = 0; i < len; ++i) {
	        if (booleans[i]) ret[j++] = values[i];
	    }
	    ret.length = j;
	    this._resolve(ret);
	};
	
	MappingPromiseArray.prototype.preservedValues = function () {
	    return this._preservedValues;
	};
	
	function map(promises, fn, options, _filter) {
	    if (typeof fn !== "function") {
	        return apiRejection("expecting a function but got " + util.classString(fn));
	    }
	
	    var limit = 0;
	    if (options !== undefined) {
	        if (typeof options === "object" && options !== null) {
	            if (typeof options.concurrency !== "number") {
	                return Promise.reject(
	                    new TypeError("'concurrency' must be a number but it is " +
	                                    util.classString(options.concurrency)));
	            }
	            limit = options.concurrency;
	        } else {
	            return Promise.reject(new TypeError(
	                            "options argument must be an object but it is " +
	                             util.classString(options)));
	        }
	    }
	    limit = typeof limit === "number" &&
	        isFinite(limit) && limit >= 1 ? limit : 0;
	    return new MappingPromiseArray(promises, fn, limit, _filter).promise();
	}
	
	Promise.prototype.map = function (fn, options) {
	    return map(this, fn, options, null);
	};
	
	Promise.map = function (promises, fn, options, _filter) {
	    return map(promises, fn, options, _filter);
	};
	
	
	};


/***/ }),
/* 710 */
/***/ (function(module, exports, __webpack_require__) {

	"use strict";
	module.exports =
	function(Promise, INTERNAL, tryConvertToPromise, apiRejection, debug) {
	var util = __webpack_require__(17);
	var tryCatch = util.tryCatch;
	
	Promise.method = function (fn) {
	    if (typeof fn !== "function") {
	        throw new Promise.TypeError("expecting a function but got " + util.classString(fn));
	    }
	    return function () {
	        var ret = new Promise(INTERNAL);
	        ret._captureStackTrace();
	        ret._pushContext();
	        var value = tryCatch(fn).apply(this, arguments);
	        var promiseCreated = ret._popContext();
	        debug.checkForgottenReturns(
	            value, promiseCreated, "Promise.method", ret);
	        ret._resolveFromSyncValue(value);
	        return ret;
	    };
	};
	
	Promise.attempt = Promise["try"] = function (fn) {
	    if (typeof fn !== "function") {
	        return apiRejection("expecting a function but got " + util.classString(fn));
	    }
	    var ret = new Promise(INTERNAL);
	    ret._captureStackTrace();
	    ret._pushContext();
	    var value;
	    if (arguments.length > 1) {
	        debug.deprecated("calling Promise.try with more than 1 argument");
	        var arg = arguments[1];
	        var ctx = arguments[2];
	        value = util.isArray(arg) ? tryCatch(fn).apply(ctx, arg)
	                                  : tryCatch(fn).call(ctx, arg);
	    } else {
	        value = tryCatch(fn)();
	    }
	    var promiseCreated = ret._popContext();
	    debug.checkForgottenReturns(
	        value, promiseCreated, "Promise.try", ret);
	    ret._resolveFromSyncValue(value);
	    return ret;
	};
	
	Promise.prototype._resolveFromSyncValue = function (value) {
	    if (value === util.errorObj) {
	        this._rejectCallback(value.e, false);
	    } else {
	        this._resolveCallback(value, true);
	    }
	};
	};


/***/ }),
/* 711 */
/***/ (function(module, exports, __webpack_require__) {

	"use strict";
	module.exports = function(Promise) {
	var util = __webpack_require__(17);
	var async = Promise._async;
	var tryCatch = util.tryCatch;
	var errorObj = util.errorObj;
	
	function spreadAdapter(val, nodeback) {
	    var promise = this;
	    if (!util.isArray(val)) return successAdapter.call(promise, val, nodeback);
	    var ret =
	        tryCatch(nodeback).apply(promise._boundValue(), [null].concat(val));
	    if (ret === errorObj) {
	        async.throwLater(ret.e);
	    }
	}
	
	function successAdapter(val, nodeback) {
	    var promise = this;
	    var receiver = promise._boundValue();
	    var ret = val === undefined
	        ? tryCatch(nodeback).call(receiver, null)
	        : tryCatch(nodeback).call(receiver, null, val);
	    if (ret === errorObj) {
	        async.throwLater(ret.e);
	    }
	}
	function errorAdapter(reason, nodeback) {
	    var promise = this;
	    if (!reason) {
	        var newReason = new Error(reason + "");
	        newReason.cause = reason;
	        reason = newReason;
	    }
	    var ret = tryCatch(nodeback).call(promise._boundValue(), reason);
	    if (ret === errorObj) {
	        async.throwLater(ret.e);
	    }
	}
	
	Promise.prototype.asCallback = Promise.prototype.nodeify = function (nodeback,
	                                                                     options) {
	    if (typeof nodeback == "function") {
	        var adapter = successAdapter;
	        if (options !== undefined && Object(options).spread) {
	            adapter = spreadAdapter;
	        }
	        this._then(
	            adapter,
	            errorAdapter,
	            undefined,
	            this,
	            nodeback
	        );
	    }
	    return this;
	};
	};


/***/ }),
/* 712 */
/***/ (function(module, exports, __webpack_require__) {

	/* WEBPACK VAR INJECTION */(function(Promise, process) {"use strict";
	module.exports = function() {
	var makeSelfResolutionError = function () {
	    return new TypeError("circular promise resolution chain\u000a\u000a    See http://goo.gl/MqrFmX\u000a");
	};
	var reflectHandler = function() {
	    return new Promise.PromiseInspection(this._target());
	};
	var apiRejection = function(msg) {
	    return Promise.reject(new TypeError(msg));
	};
	function Proxyable() {}
	var UNDEFINED_BINDING = {};
	var util = __webpack_require__(17);
	
	var getDomain;
	if (util.isNode) {
	    getDomain = function() {
	        var ret = process.domain;
	        if (ret === undefined) ret = null;
	        return ret;
	    };
	} else {
	    getDomain = function() {
	        return null;
	    };
	}
	util.notEnumerableProp(Promise, "_getDomain", getDomain);
	
	var es5 = __webpack_require__(89);
	var Async = __webpack_require__(698);
	var async = new Async();
	es5.defineProperty(Promise, "_async", {value: async});
	var errors = __webpack_require__(75);
	var TypeError = Promise.TypeError = errors.TypeError;
	Promise.RangeError = errors.RangeError;
	var CancellationError = Promise.CancellationError = errors.CancellationError;
	Promise.TimeoutError = errors.TimeoutError;
	Promise.OperationalError = errors.OperationalError;
	Promise.RejectionError = errors.OperationalError;
	Promise.AggregateError = errors.AggregateError;
	var INTERNAL = function(){};
	var APPLY = {};
	var NEXT_FILTER = {};
	var tryConvertToPromise = __webpack_require__(723)(Promise, INTERNAL);
	var PromiseArray =
	    __webpack_require__(713)(Promise, INTERNAL,
	                               tryConvertToPromise, apiRejection, Proxyable);
	var Context = __webpack_require__(702)(Promise);
	 /*jshint unused:false*/
	var createContext = Context.create;
	var debug = __webpack_require__(703)(Promise, Context);
	var CapturedTrace = debug.CapturedTrace;
	var PassThroughHandlerContext =
	    __webpack_require__(706)(Promise, tryConvertToPromise, NEXT_FILTER);
	var catchFilter = __webpack_require__(313)(NEXT_FILTER);
	var nodebackForPromise = __webpack_require__(314);
	var errorObj = util.errorObj;
	var tryCatch = util.tryCatch;
	function check(self, executor) {
	    if (self == null || self.constructor !== Promise) {
	        throw new TypeError("the promise constructor cannot be invoked directly\u000a\u000a    See http://goo.gl/MqrFmX\u000a");
	    }
	    if (typeof executor !== "function") {
	        throw new TypeError("expecting a function but got " + util.classString(executor));
	    }
	
	}
	
	function Promise(executor) {
	    if (executor !== INTERNAL) {
	        check(this, executor);
	    }
	    this._bitField = 0;
	    this._fulfillmentHandler0 = undefined;
	    this._rejectionHandler0 = undefined;
	    this._promise0 = undefined;
	    this._receiver0 = undefined;
	    this._resolveFromExecutor(executor);
	    this._promiseCreated();
	    this._fireEvent("promiseCreated", this);
	}
	
	Promise.prototype.toString = function () {
	    return "[object Promise]";
	};
	
	Promise.prototype.caught = Promise.prototype["catch"] = function (fn) {
	    var len = arguments.length;
	    if (len > 1) {
	        var catchInstances = new Array(len - 1),
	            j = 0, i;
	        for (i = 0; i < len - 1; ++i) {
	            var item = arguments[i];
	            if (util.isObject(item)) {
	                catchInstances[j++] = item;
	            } else {
	                return apiRejection("Catch statement predicate: " +
	                    "expecting an object but got " + util.classString(item));
	            }
	        }
	        catchInstances.length = j;
	        fn = arguments[i];
	
	        if (typeof fn !== "function") {
	            throw new TypeError("The last argument to .catch() " +
	                "must be a function, got " + util.toString(fn));
	        }
	        return this.then(undefined, catchFilter(catchInstances, fn, this));
	    }
	    return this.then(undefined, fn);
	};
	
	Promise.prototype.reflect = function () {
	    return this._then(reflectHandler,
	        reflectHandler, undefined, this, undefined);
	};
	
	Promise.prototype.then = function (didFulfill, didReject) {
	    if (debug.warnings() && arguments.length > 0 &&
	        typeof didFulfill !== "function" &&
	        typeof didReject !== "function") {
	        var msg = ".then() only accepts functions but was passed: " +
	                util.classString(didFulfill);
	        if (arguments.length > 1) {
	            msg += ", " + util.classString(didReject);
	        }
	        this._warn(msg);
	    }
	    return this._then(didFulfill, didReject, undefined, undefined, undefined);
	};
	
	Promise.prototype.done = function (didFulfill, didReject) {
	    var promise =
	        this._then(didFulfill, didReject, undefined, undefined, undefined);
	    promise._setIsFinal();
	};
	
	Promise.prototype.spread = function (fn) {
	    if (typeof fn !== "function") {
	        return apiRejection("expecting a function but got " + util.classString(fn));
	    }
	    return this.all()._then(fn, undefined, undefined, APPLY, undefined);
	};
	
	Promise.prototype.toJSON = function () {
	    var ret = {
	        isFulfilled: false,
	        isRejected: false,
	        fulfillmentValue: undefined,
	        rejectionReason: undefined
	    };
	    if (this.isFulfilled()) {
	        ret.fulfillmentValue = this.value();
	        ret.isFulfilled = true;
	    } else if (this.isRejected()) {
	        ret.rejectionReason = this.reason();
	        ret.isRejected = true;
	    }
	    return ret;
	};
	
	Promise.prototype.all = function () {
	    if (arguments.length > 0) {
	        this._warn(".all() was passed arguments but it does not take any");
	    }
	    return new PromiseArray(this).promise();
	};
	
	Promise.prototype.error = function (fn) {
	    return this.caught(util.originatesFromRejection, fn);
	};
	
	Promise.getNewLibraryCopy = module.exports;
	
	Promise.is = function (val) {
	    return val instanceof Promise;
	};
	
	Promise.fromNode = Promise.fromCallback = function(fn) {
	    var ret = new Promise(INTERNAL);
	    ret._captureStackTrace();
	    var multiArgs = arguments.length > 1 ? !!Object(arguments[1]).multiArgs
	                                         : false;
	    var result = tryCatch(fn)(nodebackForPromise(ret, multiArgs));
	    if (result === errorObj) {
	        ret._rejectCallback(result.e, true);
	    }
	    if (!ret._isFateSealed()) ret._setAsyncGuaranteed();
	    return ret;
	};
	
	Promise.all = function (promises) {
	    return new PromiseArray(promises).promise();
	};
	
	Promise.cast = function (obj) {
	    var ret = tryConvertToPromise(obj);
	    if (!(ret instanceof Promise)) {
	        ret = new Promise(INTERNAL);
	        ret._captureStackTrace();
	        ret._setFulfilled();
	        ret._rejectionHandler0 = obj;
	    }
	    return ret;
	};
	
	Promise.resolve = Promise.fulfilled = Promise.cast;
	
	Promise.reject = Promise.rejected = function (reason) {
	    var ret = new Promise(INTERNAL);
	    ret._captureStackTrace();
	    ret._rejectCallback(reason, true);
	    return ret;
	};
	
	Promise.setScheduler = function(fn) {
	    if (typeof fn !== "function") {
	        throw new TypeError("expecting a function but got " + util.classString(fn));
	    }
	    return async.setScheduler(fn);
	};
	
	Promise.prototype._then = function (
	    didFulfill,
	    didReject,
	    _,    receiver,
	    internalData
	) {
	    var haveInternalData = internalData !== undefined;
	    var promise = haveInternalData ? internalData : new Promise(INTERNAL);
	    var target = this._target();
	    var bitField = target._bitField;
	
	    if (!haveInternalData) {
	        promise._propagateFrom(this, 3);
	        promise._captureStackTrace();
	        if (receiver === undefined &&
	            ((this._bitField & 2097152) !== 0)) {
	            if (!((bitField & 50397184) === 0)) {
	                receiver = this._boundValue();
	            } else {
	                receiver = target === this ? undefined : this._boundTo;
	            }
	        }
	        this._fireEvent("promiseChained", this, promise);
	    }
	
	    var domain = getDomain();
	    if (!((bitField & 50397184) === 0)) {
	        var handler, value, settler = target._settlePromiseCtx;
	        if (((bitField & 33554432) !== 0)) {
	            value = target._rejectionHandler0;
	            handler = didFulfill;
	        } else if (((bitField & 16777216) !== 0)) {
	            value = target._fulfillmentHandler0;
	            handler = didReject;
	            target._unsetRejectionIsUnhandled();
	        } else {
	            settler = target._settlePromiseLateCancellationObserver;
	            value = new CancellationError("late cancellation observer");
	            target._attachExtraTrace(value);
	            handler = didReject;
	        }
	
	        async.invoke(settler, target, {
	            handler: domain === null ? handler
	                : (typeof handler === "function" &&
	                    util.domainBind(domain, handler)),
	            promise: promise,
	            receiver: receiver,
	            value: value
	        });
	    } else {
	        target._addCallbacks(didFulfill, didReject, promise, receiver, domain);
	    }
	
	    return promise;
	};
	
	Promise.prototype._length = function () {
	    return this._bitField & 65535;
	};
	
	Promise.prototype._isFateSealed = function () {
	    return (this._bitField & 117506048) !== 0;
	};
	
	Promise.prototype._isFollowing = function () {
	    return (this._bitField & 67108864) === 67108864;
	};
	
	Promise.prototype._setLength = function (len) {
	    this._bitField = (this._bitField & -65536) |
	        (len & 65535);
	};
	
	Promise.prototype._setFulfilled = function () {
	    this._bitField = this._bitField | 33554432;
	    this._fireEvent("promiseFulfilled", this);
	};
	
	Promise.prototype._setRejected = function () {
	    this._bitField = this._bitField | 16777216;
	    this._fireEvent("promiseRejected", this);
	};
	
	Promise.prototype._setFollowing = function () {
	    this._bitField = this._bitField | 67108864;
	    this._fireEvent("promiseResolved", this);
	};
	
	Promise.prototype._setIsFinal = function () {
	    this._bitField = this._bitField | 4194304;
	};
	
	Promise.prototype._isFinal = function () {
	    return (this._bitField & 4194304) > 0;
	};
	
	Promise.prototype._unsetCancelled = function() {
	    this._bitField = this._bitField & (~65536);
	};
	
	Promise.prototype._setCancelled = function() {
	    this._bitField = this._bitField | 65536;
	    this._fireEvent("promiseCancelled", this);
	};
	
	Promise.prototype._setWillBeCancelled = function() {
	    this._bitField = this._bitField | 8388608;
	};
	
	Promise.prototype._setAsyncGuaranteed = function() {
	    if (async.hasCustomScheduler()) return;
	    this._bitField = this._bitField | 134217728;
	};
	
	Promise.prototype._receiverAt = function (index) {
	    var ret = index === 0 ? this._receiver0 : this[
	            index * 4 - 4 + 3];
	    if (ret === UNDEFINED_BINDING) {
	        return undefined;
	    } else if (ret === undefined && this._isBound()) {
	        return this._boundValue();
	    }
	    return ret;
	};
	
	Promise.prototype._promiseAt = function (index) {
	    return this[
	            index * 4 - 4 + 2];
	};
	
	Promise.prototype._fulfillmentHandlerAt = function (index) {
	    return this[
	            index * 4 - 4 + 0];
	};
	
	Promise.prototype._rejectionHandlerAt = function (index) {
	    return this[
	            index * 4 - 4 + 1];
	};
	
	Promise.prototype._boundValue = function() {};
	
	Promise.prototype._migrateCallback0 = function (follower) {
	    var bitField = follower._bitField;
	    var fulfill = follower._fulfillmentHandler0;
	    var reject = follower._rejectionHandler0;
	    var promise = follower._promise0;
	    var receiver = follower._receiverAt(0);
	    if (receiver === undefined) receiver = UNDEFINED_BINDING;
	    this._addCallbacks(fulfill, reject, promise, receiver, null);
	};
	
	Promise.prototype._migrateCallbackAt = function (follower, index) {
	    var fulfill = follower._fulfillmentHandlerAt(index);
	    var reject = follower._rejectionHandlerAt(index);
	    var promise = follower._promiseAt(index);
	    var receiver = follower._receiverAt(index);
	    if (receiver === undefined) receiver = UNDEFINED_BINDING;
	    this._addCallbacks(fulfill, reject, promise, receiver, null);
	};
	
	Promise.prototype._addCallbacks = function (
	    fulfill,
	    reject,
	    promise,
	    receiver,
	    domain
	) {
	    var index = this._length();
	
	    if (index >= 65535 - 4) {
	        index = 0;
	        this._setLength(0);
	    }
	
	    if (index === 0) {
	        this._promise0 = promise;
	        this._receiver0 = receiver;
	        if (typeof fulfill === "function") {
	            this._fulfillmentHandler0 =
	                domain === null ? fulfill : util.domainBind(domain, fulfill);
	        }
	        if (typeof reject === "function") {
	            this._rejectionHandler0 =
	                domain === null ? reject : util.domainBind(domain, reject);
	        }
	    } else {
	        var base = index * 4 - 4;
	        this[base + 2] = promise;
	        this[base + 3] = receiver;
	        if (typeof fulfill === "function") {
	            this[base + 0] =
	                domain === null ? fulfill : util.domainBind(domain, fulfill);
	        }
	        if (typeof reject === "function") {
	            this[base + 1] =
	                domain === null ? reject : util.domainBind(domain, reject);
	        }
	    }
	    this._setLength(index + 1);
	    return index;
	};
	
	Promise.prototype._proxy = function (proxyable, arg) {
	    this._addCallbacks(undefined, undefined, arg, proxyable, null);
	};
	
	Promise.prototype._resolveCallback = function(value, shouldBind) {
	    if (((this._bitField & 117506048) !== 0)) return;
	    if (value === this)
	        return this._rejectCallback(makeSelfResolutionError(), false);
	    var maybePromise = tryConvertToPromise(value, this);
	    if (!(maybePromise instanceof Promise)) return this._fulfill(value);
	
	    if (shouldBind) this._propagateFrom(maybePromise, 2);
	
	    var promise = maybePromise._target();
	
	    if (promise === this) {
	        this._reject(makeSelfResolutionError());
	        return;
	    }
	
	    var bitField = promise._bitField;
	    if (((bitField & 50397184) === 0)) {
	        var len = this._length();
	        if (len > 0) promise._migrateCallback0(this);
	        for (var i = 1; i < len; ++i) {
	            promise._migrateCallbackAt(this, i);
	        }
	        this._setFollowing();
	        this._setLength(0);
	        this._setFollowee(promise);
	    } else if (((bitField & 33554432) !== 0)) {
	        this._fulfill(promise._value());
	    } else if (((bitField & 16777216) !== 0)) {
	        this._reject(promise._reason());
	    } else {
	        var reason = new CancellationError("late cancellation observer");
	        promise._attachExtraTrace(reason);
	        this._reject(reason);
	    }
	};
	
	Promise.prototype._rejectCallback =
	function(reason, synchronous, ignoreNonErrorWarnings) {
	    var trace = util.ensureErrorObject(reason);
	    var hasStack = trace === reason;
	    if (!hasStack && !ignoreNonErrorWarnings && debug.warnings()) {
	        var message = "a promise was rejected with a non-error: " +
	            util.classString(reason);
	        this._warn(message, true);
	    }
	    this._attachExtraTrace(trace, synchronous ? hasStack : false);
	    this._reject(reason);
	};
	
	Promise.prototype._resolveFromExecutor = function (executor) {
	    if (executor === INTERNAL) return;
	    var promise = this;
	    this._captureStackTrace();
	    this._pushContext();
	    var synchronous = true;
	    var r = this._execute(executor, function(value) {
	        promise._resolveCallback(value);
	    }, function (reason) {
	        promise._rejectCallback(reason, synchronous);
	    });
	    synchronous = false;
	    this._popContext();
	
	    if (r !== undefined) {
	        promise._rejectCallback(r, true);
	    }
	};
	
	Promise.prototype._settlePromiseFromHandler = function (
	    handler, receiver, value, promise
	) {
	    var bitField = promise._bitField;
	    if (((bitField & 65536) !== 0)) return;
	    promise._pushContext();
	    var x;
	    if (receiver === APPLY) {
	        if (!value || typeof value.length !== "number") {
	            x = errorObj;
	            x.e = new TypeError("cannot .spread() a non-array: " +
	                                    util.classString(value));
	        } else {
	            x = tryCatch(handler).apply(this._boundValue(), value);
	        }
	    } else {
	        x = tryCatch(handler).call(receiver, value);
	    }
	    var promiseCreated = promise._popContext();
	    bitField = promise._bitField;
	    if (((bitField & 65536) !== 0)) return;
	
	    if (x === NEXT_FILTER) {
	        promise._reject(value);
	    } else if (x === errorObj) {
	        promise._rejectCallback(x.e, false);
	    } else {
	        debug.checkForgottenReturns(x, promiseCreated, "",  promise, this);
	        promise._resolveCallback(x);
	    }
	};
	
	Promise.prototype._target = function() {
	    var ret = this;
	    while (ret._isFollowing()) ret = ret._followee();
	    return ret;
	};
	
	Promise.prototype._followee = function() {
	    return this._rejectionHandler0;
	};
	
	Promise.prototype._setFollowee = function(promise) {
	    this._rejectionHandler0 = promise;
	};
	
	Promise.prototype._settlePromise = function(promise, handler, receiver, value) {
	    var isPromise = promise instanceof Promise;
	    var bitField = this._bitField;
	    var asyncGuaranteed = ((bitField & 134217728) !== 0);
	    if (((bitField & 65536) !== 0)) {
	        if (isPromise) promise._invokeInternalOnCancel();
	
	        if (receiver instanceof PassThroughHandlerContext &&
	            receiver.isFinallyHandler()) {
	            receiver.cancelPromise = promise;
	            if (tryCatch(handler).call(receiver, value) === errorObj) {
	                promise._reject(errorObj.e);
	            }
	        } else if (handler === reflectHandler) {
	            promise._fulfill(reflectHandler.call(receiver));
	        } else if (receiver instanceof Proxyable) {
	            receiver._promiseCancelled(promise);
	        } else if (isPromise || promise instanceof PromiseArray) {
	            promise._cancel();
	        } else {
	            receiver.cancel();
	        }
	    } else if (typeof handler === "function") {
	        if (!isPromise) {
	            handler.call(receiver, value, promise);
	        } else {
	            if (asyncGuaranteed) promise._setAsyncGuaranteed();
	            this._settlePromiseFromHandler(handler, receiver, value, promise);
	        }
	    } else if (receiver instanceof Proxyable) {
	        if (!receiver._isResolved()) {
	            if (((bitField & 33554432) !== 0)) {
	                receiver._promiseFulfilled(value, promise);
	            } else {
	                receiver._promiseRejected(value, promise);
	            }
	        }
	    } else if (isPromise) {
	        if (asyncGuaranteed) promise._setAsyncGuaranteed();
	        if (((bitField & 33554432) !== 0)) {
	            promise._fulfill(value);
	        } else {
	            promise._reject(value);
	        }
	    }
	};
	
	Promise.prototype._settlePromiseLateCancellationObserver = function(ctx) {
	    var handler = ctx.handler;
	    var promise = ctx.promise;
	    var receiver = ctx.receiver;
	    var value = ctx.value;
	    if (typeof handler === "function") {
	        if (!(promise instanceof Promise)) {
	            handler.call(receiver, value, promise);
	        } else {
	            this._settlePromiseFromHandler(handler, receiver, value, promise);
	        }
	    } else if (promise instanceof Promise) {
	        promise._reject(value);
	    }
	};
	
	Promise.prototype._settlePromiseCtx = function(ctx) {
	    this._settlePromise(ctx.promise, ctx.handler, ctx.receiver, ctx.value);
	};
	
	Promise.prototype._settlePromise0 = function(handler, value, bitField) {
	    var promise = this._promise0;
	    var receiver = this._receiverAt(0);
	    this._promise0 = undefined;
	    this._receiver0 = undefined;
	    this._settlePromise(promise, handler, receiver, value);
	};
	
	Promise.prototype._clearCallbackDataAtIndex = function(index) {
	    var base = index * 4 - 4;
	    this[base + 2] =
	    this[base + 3] =
	    this[base + 0] =
	    this[base + 1] = undefined;
	};
	
	Promise.prototype._fulfill = function (value) {
	    var bitField = this._bitField;
	    if (((bitField & 117506048) >>> 16)) return;
	    if (value === this) {
	        var err = makeSelfResolutionError();
	        this._attachExtraTrace(err);
	        return this._reject(err);
	    }
	    this._setFulfilled();
	    this._rejectionHandler0 = value;
	
	    if ((bitField & 65535) > 0) {
	        if (((bitField & 134217728) !== 0)) {
	            this._settlePromises();
	        } else {
	            async.settlePromises(this);
	        }
	        this._dereferenceTrace();
	    }
	};
	
	Promise.prototype._reject = function (reason) {
	    var bitField = this._bitField;
	    if (((bitField & 117506048) >>> 16)) return;
	    this._setRejected();
	    this._fulfillmentHandler0 = reason;
	
	    if (this._isFinal()) {
	        return async.fatalError(reason, util.isNode);
	    }
	
	    if ((bitField & 65535) > 0) {
	        async.settlePromises(this);
	    } else {
	        this._ensurePossibleRejectionHandled();
	    }
	};
	
	Promise.prototype._fulfillPromises = function (len, value) {
	    for (var i = 1; i < len; i++) {
	        var handler = this._fulfillmentHandlerAt(i);
	        var promise = this._promiseAt(i);
	        var receiver = this._receiverAt(i);
	        this._clearCallbackDataAtIndex(i);
	        this._settlePromise(promise, handler, receiver, value);
	    }
	};
	
	Promise.prototype._rejectPromises = function (len, reason) {
	    for (var i = 1; i < len; i++) {
	        var handler = this._rejectionHandlerAt(i);
	        var promise = this._promiseAt(i);
	        var receiver = this._receiverAt(i);
	        this._clearCallbackDataAtIndex(i);
	        this._settlePromise(promise, handler, receiver, reason);
	    }
	};
	
	Promise.prototype._settlePromises = function () {
	    var bitField = this._bitField;
	    var len = (bitField & 65535);
	
	    if (len > 0) {
	        if (((bitField & 16842752) !== 0)) {
	            var reason = this._fulfillmentHandler0;
	            this._settlePromise0(this._rejectionHandler0, reason, bitField);
	            this._rejectPromises(len, reason);
	        } else {
	            var value = this._rejectionHandler0;
	            this._settlePromise0(this._fulfillmentHandler0, value, bitField);
	            this._fulfillPromises(len, value);
	        }
	        this._setLength(0);
	    }
	    this._clearCancellationData();
	};
	
	Promise.prototype._settledValue = function() {
	    var bitField = this._bitField;
	    if (((bitField & 33554432) !== 0)) {
	        return this._rejectionHandler0;
	    } else if (((bitField & 16777216) !== 0)) {
	        return this._fulfillmentHandler0;
	    }
	};
	
	if (typeof Symbol !== "undefined" && Symbol.toStringTag) {
	    es5.defineProperty(Promise.prototype, Symbol.toStringTag, {
	        get: function () {
	            return "Object";
	        }
	    });
	}
	
	function deferResolve(v) {this.promise._resolveCallback(v);}
	function deferReject(v) {this.promise._rejectCallback(v, false);}
	
	Promise.defer = Promise.pending = function() {
	    debug.deprecated("Promise.defer", "new Promise");
	    var promise = new Promise(INTERNAL);
	    return {
	        promise: promise,
	        resolve: deferResolve,
	        reject: deferReject
	    };
	};
	
	util.notEnumerableProp(Promise,
	                       "_makeSelfResolutionError",
	                       makeSelfResolutionError);
	
	__webpack_require__(710)(Promise, INTERNAL, tryConvertToPromise, apiRejection,
	    debug);
	__webpack_require__(699)(Promise, INTERNAL, tryConvertToPromise, debug);
	__webpack_require__(701)(Promise, PromiseArray, apiRejection, debug);
	__webpack_require__(540)(Promise);
	__webpack_require__(722)(Promise);
	__webpack_require__(708)(
	    Promise, PromiseArray, tryConvertToPromise, INTERNAL, async, getDomain);
	Promise.Promise = Promise;
	Promise.version = "3.5.5";
	__webpack_require__(700)(Promise);
	__webpack_require__(707)(Promise, apiRejection, INTERNAL, tryConvertToPromise, Proxyable, debug);
	__webpack_require__(709)(Promise, PromiseArray, apiRejection, tryConvertToPromise, INTERNAL, debug);
	__webpack_require__(711)(Promise);
	__webpack_require__(714)(Promise, INTERNAL);
	__webpack_require__(715)(Promise, PromiseArray, tryConvertToPromise, apiRejection);
	__webpack_require__(717)(Promise, INTERNAL, tryConvertToPromise, apiRejection);
	__webpack_require__(718)(Promise, PromiseArray, apiRejection, tryConvertToPromise, INTERNAL, debug);
	__webpack_require__(720)(Promise, PromiseArray, debug);
	__webpack_require__(721)(Promise, PromiseArray, apiRejection);
	__webpack_require__(724)(Promise, INTERNAL, debug);
	__webpack_require__(725)(Promise, apiRejection, tryConvertToPromise, createContext, INTERNAL, debug);
	__webpack_require__(697)(Promise);
	__webpack_require__(704)(Promise, INTERNAL);
	__webpack_require__(705)(Promise, INTERNAL);
	                                                         
	    util.toFastProperties(Promise);                                          
	    util.toFastProperties(Promise.prototype);                                
	    function fillTypes(value) {                                              
	        var p = new Promise(INTERNAL);                                       
	        p._fulfillmentHandler0 = value;                                      
	        p._rejectionHandler0 = value;                                        
	        p._promise0 = value;                                                 
	        p._receiver0 = value;                                                
	    }                                                                        
	    // Complete slack tracking, opt out of field-type tracking and           
	    // stabilize map                                                         
	    fillTypes({a: 1});                                                       
	    fillTypes({b: 2});                                                       
	    fillTypes({c: 3});                                                       
	    fillTypes(1);                                                            
	    fillTypes(function(){});                                                 
	    fillTypes(undefined);                                                    
	    fillTypes(false);                                                        
	    fillTypes(new Promise(INTERNAL));                                        
	    debug.setBounds(Async.firstLineError, util.lastLineError);               
	    return Promise;                                                          
	
	};
	
	/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(27), __webpack_require__(116)))

/***/ }),
/* 713 */
/***/ (function(module, exports, __webpack_require__) {

	"use strict";
	module.exports = function(Promise, INTERNAL, tryConvertToPromise,
	    apiRejection, Proxyable) {
	var util = __webpack_require__(17);
	var isArray = util.isArray;
	
	function toResolutionValue(val) {
	    switch(val) {
	    case -2: return [];
	    case -3: return {};
	    case -6: return new Map();
	    }
	}
	
	function PromiseArray(values) {
	    var promise = this._promise = new Promise(INTERNAL);
	    if (values instanceof Promise) {
	        promise._propagateFrom(values, 3);
	    }
	    promise._setOnCancel(this);
	    this._values = values;
	    this._length = 0;
	    this._totalResolved = 0;
	    this._init(undefined, -2);
	}
	util.inherits(PromiseArray, Proxyable);
	
	PromiseArray.prototype.length = function () {
	    return this._length;
	};
	
	PromiseArray.prototype.promise = function () {
	    return this._promise;
	};
	
	PromiseArray.prototype._init = function init(_, resolveValueIfEmpty) {
	    var values = tryConvertToPromise(this._values, this._promise);
	    if (values instanceof Promise) {
	        values = values._target();
	        var bitField = values._bitField;
	        ;
	        this._values = values;
	
	        if (((bitField & 50397184) === 0)) {
	            this._promise._setAsyncGuaranteed();
	            return values._then(
	                init,
	                this._reject,
	                undefined,
	                this,
	                resolveValueIfEmpty
	           );
	        } else if (((bitField & 33554432) !== 0)) {
	            values = values._value();
	        } else if (((bitField & 16777216) !== 0)) {
	            return this._reject(values._reason());
	        } else {
	            return this._cancel();
	        }
	    }
	    values = util.asArray(values);
	    if (values === null) {
	        var err = apiRejection(
	            "expecting an array or an iterable object but got " + util.classString(values)).reason();
	        this._promise._rejectCallback(err, false);
	        return;
	    }
	
	    if (values.length === 0) {
	        if (resolveValueIfEmpty === -5) {
	            this._resolveEmptyArray();
	        }
	        else {
	            this._resolve(toResolutionValue(resolveValueIfEmpty));
	        }
	        return;
	    }
	    this._iterate(values);
	};
	
	PromiseArray.prototype._iterate = function(values) {
	    var len = this.getActualLength(values.length);
	    this._length = len;
	    this._values = this.shouldCopyValues() ? new Array(len) : this._values;
	    var result = this._promise;
	    var isResolved = false;
	    var bitField = null;
	    for (var i = 0; i < len; ++i) {
	        var maybePromise = tryConvertToPromise(values[i], result);
	
	        if (maybePromise instanceof Promise) {
	            maybePromise = maybePromise._target();
	            bitField = maybePromise._bitField;
	        } else {
	            bitField = null;
	        }
	
	        if (isResolved) {
	            if (bitField !== null) {
	                maybePromise.suppressUnhandledRejections();
	            }
	        } else if (bitField !== null) {
	            if (((bitField & 50397184) === 0)) {
	                maybePromise._proxy(this, i);
	                this._values[i] = maybePromise;
	            } else if (((bitField & 33554432) !== 0)) {
	                isResolved = this._promiseFulfilled(maybePromise._value(), i);
	            } else if (((bitField & 16777216) !== 0)) {
	                isResolved = this._promiseRejected(maybePromise._reason(), i);
	            } else {
	                isResolved = this._promiseCancelled(i);
	            }
	        } else {
	            isResolved = this._promiseFulfilled(maybePromise, i);
	        }
	    }
	    if (!isResolved) result._setAsyncGuaranteed();
	};
	
	PromiseArray.prototype._isResolved = function () {
	    return this._values === null;
	};
	
	PromiseArray.prototype._resolve = function (value) {
	    this._values = null;
	    this._promise._fulfill(value);
	};
	
	PromiseArray.prototype._cancel = function() {
	    if (this._isResolved() || !this._promise._isCancellable()) return;
	    this._values = null;
	    this._promise._cancel();
	};
	
	PromiseArray.prototype._reject = function (reason) {
	    this._values = null;
	    this._promise._rejectCallback(reason, false);
	};
	
	PromiseArray.prototype._promiseFulfilled = function (value, index) {
	    this._values[index] = value;
	    var totalResolved = ++this._totalResolved;
	    if (totalResolved >= this._length) {
	        this._resolve(this._values);
	        return true;
	    }
	    return false;
	};
	
	PromiseArray.prototype._promiseCancelled = function() {
	    this._cancel();
	    return true;
	};
	
	PromiseArray.prototype._promiseRejected = function (reason) {
	    this._totalResolved++;
	    this._reject(reason);
	    return true;
	};
	
	PromiseArray.prototype._resultCancelled = function() {
	    if (this._isResolved()) return;
	    var values = this._values;
	    this._cancel();
	    if (values instanceof Promise) {
	        values.cancel();
	    } else {
	        for (var i = 0; i < values.length; ++i) {
	            if (values[i] instanceof Promise) {
	                values[i].cancel();
	            }
	        }
	    }
	};
	
	PromiseArray.prototype.shouldCopyValues = function () {
	    return true;
	};
	
	PromiseArray.prototype.getActualLength = function (len) {
	    return len;
	};
	
	return PromiseArray;
	};


/***/ }),
/* 714 */
/***/ (function(module, exports, __webpack_require__) {

	"use strict";
	module.exports = function(Promise, INTERNAL) {
	var THIS = {};
	var util = __webpack_require__(17);
	var nodebackForPromise = __webpack_require__(314);
	var withAppended = util.withAppended;
	var maybeWrapAsError = util.maybeWrapAsError;
	var canEvaluate = util.canEvaluate;
	var TypeError = __webpack_require__(75).TypeError;
	var defaultSuffix = "Async";
	var defaultPromisified = {__isPromisified__: true};
	var noCopyProps = [
	    "arity",    "length",
	    "name",
	    "arguments",
	    "caller",
	    "callee",
	    "prototype",
	    "__isPromisified__"
	];
	var noCopyPropsPattern = new RegExp("^(?:" + noCopyProps.join("|") + ")$");
	
	var defaultFilter = function(name) {
	    return util.isIdentifier(name) &&
	        name.charAt(0) !== "_" &&
	        name !== "constructor";
	};
	
	function propsFilter(key) {
	    return !noCopyPropsPattern.test(key);
	}
	
	function isPromisified(fn) {
	    try {
	        return fn.__isPromisified__ === true;
	    }
	    catch (e) {
	        return false;
	    }
	}
	
	function hasPromisified(obj, key, suffix) {
	    var val = util.getDataPropertyOrDefault(obj, key + suffix,
	                                            defaultPromisified);
	    return val ? isPromisified(val) : false;
	}
	function checkValid(ret, suffix, suffixRegexp) {
	    for (var i = 0; i < ret.length; i += 2) {
	        var key = ret[i];
	        if (suffixRegexp.test(key)) {
	            var keyWithoutAsyncSuffix = key.replace(suffixRegexp, "");
	            for (var j = 0; j < ret.length; j += 2) {
	                if (ret[j] === keyWithoutAsyncSuffix) {
	                    throw new TypeError("Cannot promisify an API that has normal methods with '%s'-suffix\u000a\u000a    See http://goo.gl/MqrFmX\u000a"
	                        .replace("%s", suffix));
	                }
	            }
	        }
	    }
	}
	
	function promisifiableMethods(obj, suffix, suffixRegexp, filter) {
	    var keys = util.inheritedDataKeys(obj);
	    var ret = [];
	    for (var i = 0; i < keys.length; ++i) {
	        var key = keys[i];
	        var value = obj[key];
	        var passesDefaultFilter = filter === defaultFilter
	            ? true : defaultFilter(key, value, obj);
	        if (typeof value === "function" &&
	            !isPromisified(value) &&
	            !hasPromisified(obj, key, suffix) &&
	            filter(key, value, obj, passesDefaultFilter)) {
	            ret.push(key, value);
	        }
	    }
	    checkValid(ret, suffix, suffixRegexp);
	    return ret;
	}
	
	var escapeIdentRegex = function(str) {
	    return str.replace(/([$])/, "\\$");
	};
	
	var makeNodePromisifiedEval;
	if (true) {
	var switchCaseArgumentOrder = function(likelyArgumentCount) {
	    var ret = [likelyArgumentCount];
	    var min = Math.max(0, likelyArgumentCount - 1 - 3);
	    for(var i = likelyArgumentCount - 1; i >= min; --i) {
	        ret.push(i);
	    }
	    for(var i = likelyArgumentCount + 1; i <= 3; ++i) {
	        ret.push(i);
	    }
	    return ret;
	};
	
	var argumentSequence = function(argumentCount) {
	    return util.filledRange(argumentCount, "_arg", "");
	};
	
	var parameterDeclaration = function(parameterCount) {
	    return util.filledRange(
	        Math.max(parameterCount, 3), "_arg", "");
	};
	
	var parameterCount = function(fn) {
	    if (typeof fn.length === "number") {
	        return Math.max(Math.min(fn.length, 1023 + 1), 0);
	    }
	    return 0;
	};
	
	makeNodePromisifiedEval =
	function(callback, receiver, originalName, fn, _, multiArgs) {
	    var newParameterCount = Math.max(0, parameterCount(fn) - 1);
	    var argumentOrder = switchCaseArgumentOrder(newParameterCount);
	    var shouldProxyThis = typeof callback === "string" || receiver === THIS;
	
	    function generateCallForArgumentCount(count) {
	        var args = argumentSequence(count).join(", ");
	        var comma = count > 0 ? ", " : "";
	        var ret;
	        if (shouldProxyThis) {
	            ret = "ret = callback.call(this, {{args}}, nodeback); break;\n";
	        } else {
	            ret = receiver === undefined
	                ? "ret = callback({{args}}, nodeback); break;\n"
	                : "ret = callback.call(receiver, {{args}}, nodeback); break;\n";
	        }
	        return ret.replace("{{args}}", args).replace(", ", comma);
	    }
	
	    function generateArgumentSwitchCase() {
	        var ret = "";
	        for (var i = 0; i < argumentOrder.length; ++i) {
	            ret += "case " + argumentOrder[i] +":" +
	                generateCallForArgumentCount(argumentOrder[i]);
	        }
	
	        ret += "                                                             \n\
	        default:                                                             \n\
	            var args = new Array(len + 1);                                   \n\
	            var i = 0;                                                       \n\
	            for (var i = 0; i < len; ++i) {                                  \n\
	               args[i] = arguments[i];                                       \n\
	            }                                                                \n\
	            args[i] = nodeback;                                              \n\
	            [CodeForCall]                                                    \n\
	            break;                                                           \n\
	        ".replace("[CodeForCall]", (shouldProxyThis
	                                ? "ret = callback.apply(this, args);\n"
	                                : "ret = callback.apply(receiver, args);\n"));
	        return ret;
	    }
	
	    var getFunctionCode = typeof callback === "string"
	                                ? ("this != null ? this['"+callback+"'] : fn")
	                                : "fn";
	    var body = "'use strict';                                                \n\
	        var ret = function (Parameters) {                                    \n\
	            'use strict';                                                    \n\
	            var len = arguments.length;                                      \n\
	            var promise = new Promise(INTERNAL);                             \n\
	            promise._captureStackTrace();                                    \n\
	            var nodeback = nodebackForPromise(promise, " + multiArgs + ");   \n\
	            var ret;                                                         \n\
	            var callback = tryCatch([GetFunctionCode]);                      \n\
	            switch(len) {                                                    \n\
	                [CodeForSwitchCase]                                          \n\
	            }                                                                \n\
	            if (ret === errorObj) {                                          \n\
	                promise._rejectCallback(maybeWrapAsError(ret.e), true, true);\n\
	            }                                                                \n\
	            if (!promise._isFateSealed()) promise._setAsyncGuaranteed();     \n\
	            return promise;                                                  \n\
	        };                                                                   \n\
	        notEnumerableProp(ret, '__isPromisified__', true);                   \n\
	        return ret;                                                          \n\
	    ".replace("[CodeForSwitchCase]", generateArgumentSwitchCase())
	        .replace("[GetFunctionCode]", getFunctionCode);
	    body = body.replace("Parameters", parameterDeclaration(newParameterCount));
	    return new Function("Promise",
	                        "fn",
	                        "receiver",
	                        "withAppended",
	                        "maybeWrapAsError",
	                        "nodebackForPromise",
	                        "tryCatch",
	                        "errorObj",
	                        "notEnumerableProp",
	                        "INTERNAL",
	                        body)(
	                    Promise,
	                    fn,
	                    receiver,
	                    withAppended,
	                    maybeWrapAsError,
	                    nodebackForPromise,
	                    util.tryCatch,
	                    util.errorObj,
	                    util.notEnumerableProp,
	                    INTERNAL);
	};
	}
	
	function makeNodePromisifiedClosure(callback, receiver, _, fn, __, multiArgs) {
	    var defaultThis = (function() {return this;})();
	    var method = callback;
	    if (typeof method === "string") {
	        callback = fn;
	    }
	    function promisified() {
	        var _receiver = receiver;
	        if (receiver === THIS) _receiver = this;
	        var promise = new Promise(INTERNAL);
	        promise._captureStackTrace();
	        var cb = typeof method === "string" && this !== defaultThis
	            ? this[method] : callback;
	        var fn = nodebackForPromise(promise, multiArgs);
	        try {
	            cb.apply(_receiver, withAppended(arguments, fn));
	        } catch(e) {
	            promise._rejectCallback(maybeWrapAsError(e), true, true);
	        }
	        if (!promise._isFateSealed()) promise._setAsyncGuaranteed();
	        return promise;
	    }
	    util.notEnumerableProp(promisified, "__isPromisified__", true);
	    return promisified;
	}
	
	var makeNodePromisified = canEvaluate
	    ? makeNodePromisifiedEval
	    : makeNodePromisifiedClosure;
	
	function promisifyAll(obj, suffix, filter, promisifier, multiArgs) {
	    var suffixRegexp = new RegExp(escapeIdentRegex(suffix) + "$");
	    var methods =
	        promisifiableMethods(obj, suffix, suffixRegexp, filter);
	
	    for (var i = 0, len = methods.length; i < len; i+= 2) {
	        var key = methods[i];
	        var fn = methods[i+1];
	        var promisifiedKey = key + suffix;
	        if (promisifier === makeNodePromisified) {
	            obj[promisifiedKey] =
	                makeNodePromisified(key, THIS, key, fn, suffix, multiArgs);
	        } else {
	            var promisified = promisifier(fn, function() {
	                return makeNodePromisified(key, THIS, key,
	                                           fn, suffix, multiArgs);
	            });
	            util.notEnumerableProp(promisified, "__isPromisified__", true);
	            obj[promisifiedKey] = promisified;
	        }
	    }
	    util.toFastProperties(obj);
	    return obj;
	}
	
	function promisify(callback, receiver, multiArgs) {
	    return makeNodePromisified(callback, receiver, undefined,
	                                callback, null, multiArgs);
	}
	
	Promise.promisify = function (fn, options) {
	    if (typeof fn !== "function") {
	        throw new TypeError("expecting a function but got " + util.classString(fn));
	    }
	    if (isPromisified(fn)) {
	        return fn;
	    }
	    options = Object(options);
	    var receiver = options.context === undefined ? THIS : options.context;
	    var multiArgs = !!options.multiArgs;
	    var ret = promisify(fn, receiver, multiArgs);
	    util.copyDescriptors(fn, ret, propsFilter);
	    return ret;
	};
	
	Promise.promisifyAll = function (target, options) {
	    if (typeof target !== "function" && typeof target !== "object") {
	        throw new TypeError("the target of promisifyAll must be an object or a function\u000a\u000a    See http://goo.gl/MqrFmX\u000a");
	    }
	    options = Object(options);
	    var multiArgs = !!options.multiArgs;
	    var suffix = options.suffix;
	    if (typeof suffix !== "string") suffix = defaultSuffix;
	    var filter = options.filter;
	    if (typeof filter !== "function") filter = defaultFilter;
	    var promisifier = options.promisifier;
	    if (typeof promisifier !== "function") promisifier = makeNodePromisified;
	
	    if (!util.isIdentifier(suffix)) {
	        throw new RangeError("suffix must be a valid identifier\u000a\u000a    See http://goo.gl/MqrFmX\u000a");
	    }
	
	    var keys = util.inheritedDataKeys(target);
	    for (var i = 0; i < keys.length; ++i) {
	        var value = target[keys[i]];
	        if (keys[i] !== "constructor" &&
	            util.isClass(value)) {
	            promisifyAll(value.prototype, suffix, filter, promisifier,
	                multiArgs);
	            promisifyAll(value, suffix, filter, promisifier, multiArgs);
	        }
	    }
	
	    return promisifyAll(target, suffix, filter, promisifier, multiArgs);
	};
	};
	


/***/ }),
/* 715 */
/***/ (function(module, exports, __webpack_require__) {

	"use strict";
	module.exports = function(
	    Promise, PromiseArray, tryConvertToPromise, apiRejection) {
	var util = __webpack_require__(17);
	var isObject = util.isObject;
	var es5 = __webpack_require__(89);
	var Es6Map;
	if (typeof Map === "function") Es6Map = Map;
	
	var mapToEntries = (function() {
	    var index = 0;
	    var size = 0;
	
	    function extractEntry(value, key) {
	        this[index] = value;
	        this[index + size] = key;
	        index++;
	    }
	
	    return function mapToEntries(map) {
	        size = map.size;
	        index = 0;
	        var ret = new Array(map.size * 2);
	        map.forEach(extractEntry, ret);
	        return ret;
	    };
	})();
	
	var entriesToMap = function(entries) {
	    var ret = new Es6Map();
	    var length = entries.length / 2 | 0;
	    for (var i = 0; i < length; ++i) {
	        var key = entries[length + i];
	        var value = entries[i];
	        ret.set(key, value);
	    }
	    return ret;
	};
	
	function PropertiesPromiseArray(obj) {
	    var isMap = false;
	    var entries;
	    if (Es6Map !== undefined && obj instanceof Es6Map) {
	        entries = mapToEntries(obj);
	        isMap = true;
	    } else {
	        var keys = es5.keys(obj);
	        var len = keys.length;
	        entries = new Array(len * 2);
	        for (var i = 0; i < len; ++i) {
	            var key = keys[i];
	            entries[i] = obj[key];
	            entries[i + len] = key;
	        }
	    }
	    this.constructor$(entries);
	    this._isMap = isMap;
	    this._init$(undefined, isMap ? -6 : -3);
	}
	util.inherits(PropertiesPromiseArray, PromiseArray);
	
	PropertiesPromiseArray.prototype._init = function () {};
	
	PropertiesPromiseArray.prototype._promiseFulfilled = function (value, index) {
	    this._values[index] = value;
	    var totalResolved = ++this._totalResolved;
	    if (totalResolved >= this._length) {
	        var val;
	        if (this._isMap) {
	            val = entriesToMap(this._values);
	        } else {
	            val = {};
	            var keyOffset = this.length();
	            for (var i = 0, len = this.length(); i < len; ++i) {
	                val[this._values[i + keyOffset]] = this._values[i];
	            }
	        }
	        this._resolve(val);
	        return true;
	    }
	    return false;
	};
	
	PropertiesPromiseArray.prototype.shouldCopyValues = function () {
	    return false;
	};
	
	PropertiesPromiseArray.prototype.getActualLength = function (len) {
	    return len >> 1;
	};
	
	function props(promises) {
	    var ret;
	    var castValue = tryConvertToPromise(promises);
	
	    if (!isObject(castValue)) {
	        return apiRejection("cannot await properties of a non-object\u000a\u000a    See http://goo.gl/MqrFmX\u000a");
	    } else if (castValue instanceof Promise) {
	        ret = castValue._then(
	            Promise.props, undefined, undefined, undefined, undefined);
	    } else {
	        ret = new PropertiesPromiseArray(castValue).promise();
	    }
	
	    if (castValue instanceof Promise) {
	        ret._propagateFrom(castValue, 2);
	    }
	    return ret;
	}
	
	Promise.prototype.props = function () {
	    return props(this);
	};
	
	Promise.props = function (promises) {
	    return props(promises);
	};
	};


/***/ }),
/* 716 */
/***/ (function(module, exports) {

	"use strict";
	function arrayMove(src, srcIndex, dst, dstIndex, len) {
	    for (var j = 0; j < len; ++j) {
	        dst[j + dstIndex] = src[j + srcIndex];
	        src[j + srcIndex] = void 0;
	    }
	}
	
	function Queue(capacity) {
	    this._capacity = capacity;
	    this._length = 0;
	    this._front = 0;
	}
	
	Queue.prototype._willBeOverCapacity = function (size) {
	    return this._capacity < size;
	};
	
	Queue.prototype._pushOne = function (arg) {
	    var length = this.length();
	    this._checkCapacity(length + 1);
	    var i = (this._front + length) & (this._capacity - 1);
	    this[i] = arg;
	    this._length = length + 1;
	};
	
	Queue.prototype.push = function (fn, receiver, arg) {
	    var length = this.length() + 3;
	    if (this._willBeOverCapacity(length)) {
	        this._pushOne(fn);
	        this._pushOne(receiver);
	        this._pushOne(arg);
	        return;
	    }
	    var j = this._front + length - 3;
	    this._checkCapacity(length);
	    var wrapMask = this._capacity - 1;
	    this[(j + 0) & wrapMask] = fn;
	    this[(j + 1) & wrapMask] = receiver;
	    this[(j + 2) & wrapMask] = arg;
	    this._length = length;
	};
	
	Queue.prototype.shift = function () {
	    var front = this._front,
	        ret = this[front];
	
	    this[front] = undefined;
	    this._front = (front + 1) & (this._capacity - 1);
	    this._length--;
	    return ret;
	};
	
	Queue.prototype.length = function () {
	    return this._length;
	};
	
	Queue.prototype._checkCapacity = function (size) {
	    if (this._capacity < size) {
	        this._resizeTo(this._capacity << 1);
	    }
	};
	
	Queue.prototype._resizeTo = function (capacity) {
	    var oldCapacity = this._capacity;
	    this._capacity = capacity;
	    var front = this._front;
	    var length = this._length;
	    var moveItemsCount = (front + length) & (oldCapacity - 1);
	    arrayMove(this, 0, this, oldCapacity, moveItemsCount);
	};
	
	module.exports = Queue;


/***/ }),
/* 717 */
/***/ (function(module, exports, __webpack_require__) {

	"use strict";
	module.exports = function(
	    Promise, INTERNAL, tryConvertToPromise, apiRejection) {
	var util = __webpack_require__(17);
	
	var raceLater = function (promise) {
	    return promise.then(function(array) {
	        return race(array, promise);
	    });
	};
	
	function race(promises, parent) {
	    var maybePromise = tryConvertToPromise(promises);
	
	    if (maybePromise instanceof Promise) {
	        return raceLater(maybePromise);
	    } else {
	        promises = util.asArray(promises);
	        if (promises === null)
	            return apiRejection("expecting an array or an iterable object but got " + util.classString(promises));
	    }
	
	    var ret = new Promise(INTERNAL);
	    if (parent !== undefined) {
	        ret._propagateFrom(parent, 3);
	    }
	    var fulfill = ret._fulfill;
	    var reject = ret._reject;
	    for (var i = 0, len = promises.length; i < len; ++i) {
	        var val = promises[i];
	
	        if (val === undefined && !(i in promises)) {
	            continue;
	        }
	
	        Promise.cast(val)._then(fulfill, reject, undefined, ret, null);
	    }
	    return ret;
	}
	
	Promise.race = function (promises) {
	    return race(promises, undefined);
	};
	
	Promise.prototype.race = function () {
	    return race(this, undefined);
	};
	
	};


/***/ }),
/* 718 */
/***/ (function(module, exports, __webpack_require__) {

	"use strict";
	module.exports = function(Promise,
	                          PromiseArray,
	                          apiRejection,
	                          tryConvertToPromise,
	                          INTERNAL,
	                          debug) {
	var getDomain = Promise._getDomain;
	var util = __webpack_require__(17);
	var tryCatch = util.tryCatch;
	
	function ReductionPromiseArray(promises, fn, initialValue, _each) {
	    this.constructor$(promises);
	    var domain = getDomain();
	    this._fn = domain === null ? fn : util.domainBind(domain, fn);
	    if (initialValue !== undefined) {
	        initialValue = Promise.resolve(initialValue);
	        initialValue._attachCancellationCallback(this);
	    }
	    this._initialValue = initialValue;
	    this._currentCancellable = null;
	    if(_each === INTERNAL) {
	        this._eachValues = Array(this._length);
	    } else if (_each === 0) {
	        this._eachValues = null;
	    } else {
	        this._eachValues = undefined;
	    }
	    this._promise._captureStackTrace();
	    this._init$(undefined, -5);
	}
	util.inherits(ReductionPromiseArray, PromiseArray);
	
	ReductionPromiseArray.prototype._gotAccum = function(accum) {
	    if (this._eachValues !== undefined && 
	        this._eachValues !== null && 
	        accum !== INTERNAL) {
	        this._eachValues.push(accum);
	    }
	};
	
	ReductionPromiseArray.prototype._eachComplete = function(value) {
	    if (this._eachValues !== null) {
	        this._eachValues.push(value);
	    }
	    return this._eachValues;
	};
	
	ReductionPromiseArray.prototype._init = function() {};
	
	ReductionPromiseArray.prototype._resolveEmptyArray = function() {
	    this._resolve(this._eachValues !== undefined ? this._eachValues
	                                                 : this._initialValue);
	};
	
	ReductionPromiseArray.prototype.shouldCopyValues = function () {
	    return false;
	};
	
	ReductionPromiseArray.prototype._resolve = function(value) {
	    this._promise._resolveCallback(value);
	    this._values = null;
	};
	
	ReductionPromiseArray.prototype._resultCancelled = function(sender) {
	    if (sender === this._initialValue) return this._cancel();
	    if (this._isResolved()) return;
	    this._resultCancelled$();
	    if (this._currentCancellable instanceof Promise) {
	        this._currentCancellable.cancel();
	    }
	    if (this._initialValue instanceof Promise) {
	        this._initialValue.cancel();
	    }
	};
	
	ReductionPromiseArray.prototype._iterate = function (values) {
	    this._values = values;
	    var value;
	    var i;
	    var length = values.length;
	    if (this._initialValue !== undefined) {
	        value = this._initialValue;
	        i = 0;
	    } else {
	        value = Promise.resolve(values[0]);
	        i = 1;
	    }
	
	    this._currentCancellable = value;
	
	    if (!value.isRejected()) {
	        for (; i < length; ++i) {
	            var ctx = {
	                accum: null,
	                value: values[i],
	                index: i,
	                length: length,
	                array: this
	            };
	            value = value._then(gotAccum, undefined, undefined, ctx, undefined);
	        }
	    }
	
	    if (this._eachValues !== undefined) {
	        value = value
	            ._then(this._eachComplete, undefined, undefined, this, undefined);
	    }
	    value._then(completed, completed, undefined, value, this);
	};
	
	Promise.prototype.reduce = function (fn, initialValue) {
	    return reduce(this, fn, initialValue, null);
	};
	
	Promise.reduce = function (promises, fn, initialValue, _each) {
	    return reduce(promises, fn, initialValue, _each);
	};
	
	function completed(valueOrReason, array) {
	    if (this.isFulfilled()) {
	        array._resolve(valueOrReason);
	    } else {
	        array._reject(valueOrReason);
	    }
	}
	
	function reduce(promises, fn, initialValue, _each) {
	    if (typeof fn !== "function") {
	        return apiRejection("expecting a function but got " + util.classString(fn));
	    }
	    var array = new ReductionPromiseArray(promises, fn, initialValue, _each);
	    return array.promise();
	}
	
	function gotAccum(accum) {
	    this.accum = accum;
	    this.array._gotAccum(accum);
	    var value = tryConvertToPromise(this.value, this.array._promise);
	    if (value instanceof Promise) {
	        this.array._currentCancellable = value;
	        return value._then(gotValue, undefined, undefined, this, undefined);
	    } else {
	        return gotValue.call(this, value);
	    }
	}
	
	function gotValue(value) {
	    var array = this.array;
	    var promise = array._promise;
	    var fn = tryCatch(array._fn);
	    promise._pushContext();
	    var ret;
	    if (array._eachValues !== undefined) {
	        ret = fn.call(promise._boundValue(), value, this.index, this.length);
	    } else {
	        ret = fn.call(promise._boundValue(),
	                              this.accum, value, this.index, this.length);
	    }
	    if (ret instanceof Promise) {
	        array._currentCancellable = ret;
	    }
	    var promiseCreated = promise._popContext();
	    debug.checkForgottenReturns(
	        ret,
	        promiseCreated,
	        array._eachValues !== undefined ? "Promise.each" : "Promise.reduce",
	        promise
	    );
	    return ret;
	}
	};


/***/ }),
/* 719 */
/***/ (function(module, exports, __webpack_require__) {

	/* WEBPACK VAR INJECTION */(function(global, process, setImmediate) {"use strict";
	var util = __webpack_require__(17);
	var schedule;
	var noAsyncScheduler = function() {
	    throw new Error("No async scheduler available\u000a\u000a    See http://goo.gl/MqrFmX\u000a");
	};
	var NativePromise = util.getNativePromise();
	if (util.isNode && typeof MutationObserver === "undefined") {
	    var GlobalSetImmediate = global.setImmediate;
	    var ProcessNextTick = process.nextTick;
	    schedule = util.isRecentNode
	                ? function(fn) { GlobalSetImmediate.call(global, fn); }
	                : function(fn) { ProcessNextTick.call(process, fn); };
	} else if (typeof NativePromise === "function" &&
	           typeof NativePromise.resolve === "function") {
	    var nativePromise = NativePromise.resolve();
	    schedule = function(fn) {
	        nativePromise.then(fn);
	    };
	} else if ((typeof MutationObserver !== "undefined") &&
	          !(typeof window !== "undefined" &&
	            window.navigator &&
	            (window.navigator.standalone || window.cordova)) &&
	          ("classList" in document.documentElement)) {
	    schedule = (function() {
	        var div = document.createElement("div");
	        var opts = {attributes: true};
	        var toggleScheduled = false;
	        var div2 = document.createElement("div");
	        var o2 = new MutationObserver(function() {
	            div.classList.toggle("foo");
	            toggleScheduled = false;
	        });
	        o2.observe(div2, opts);
	
	        var scheduleToggle = function() {
	            if (toggleScheduled) return;
	            toggleScheduled = true;
	            div2.classList.toggle("foo");
	        };
	
	        return function schedule(fn) {
	            var o = new MutationObserver(function() {
	                o.disconnect();
	                fn();
	            });
	            o.observe(div, opts);
	            scheduleToggle();
	        };
	    })();
	} else if (typeof setImmediate !== "undefined") {
	    schedule = function (fn) {
	        setImmediate(fn);
	    };
	} else if (typeof setTimeout !== "undefined") {
	    schedule = function (fn) {
	        setTimeout(fn, 0);
	    };
	} else {
	    schedule = noAsyncScheduler;
	}
	module.exports = schedule;
	
	/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }()), __webpack_require__(116), __webpack_require__(1144).setImmediate))

/***/ }),
/* 720 */
/***/ (function(module, exports, __webpack_require__) {

	"use strict";
	module.exports =
	    function(Promise, PromiseArray, debug) {
	var PromiseInspection = Promise.PromiseInspection;
	var util = __webpack_require__(17);
	
	function SettledPromiseArray(values) {
	    this.constructor$(values);
	}
	util.inherits(SettledPromiseArray, PromiseArray);
	
	SettledPromiseArray.prototype._promiseResolved = function (index, inspection) {
	    this._values[index] = inspection;
	    var totalResolved = ++this._totalResolved;
	    if (totalResolved >= this._length) {
	        this._resolve(this._values);
	        return true;
	    }
	    return false;
	};
	
	SettledPromiseArray.prototype._promiseFulfilled = function (value, index) {
	    var ret = new PromiseInspection();
	    ret._bitField = 33554432;
	    ret._settledValueField = value;
	    return this._promiseResolved(index, ret);
	};
	SettledPromiseArray.prototype._promiseRejected = function (reason, index) {
	    var ret = new PromiseInspection();
	    ret._bitField = 16777216;
	    ret._settledValueField = reason;
	    return this._promiseResolved(index, ret);
	};
	
	Promise.settle = function (promises) {
	    debug.deprecated(".settle()", ".reflect()");
	    return new SettledPromiseArray(promises).promise();
	};
	
	Promise.prototype.settle = function () {
	    return Promise.settle(this);
	};
	};


/***/ }),
/* 721 */
/***/ (function(module, exports, __webpack_require__) {

	"use strict";
	module.exports =
	function(Promise, PromiseArray, apiRejection) {
	var util = __webpack_require__(17);
	var RangeError = __webpack_require__(75).RangeError;
	var AggregateError = __webpack_require__(75).AggregateError;
	var isArray = util.isArray;
	var CANCELLATION = {};
	
	
	function SomePromiseArray(values) {
	    this.constructor$(values);
	    this._howMany = 0;
	    this._unwrap = false;
	    this._initialized = false;
	}
	util.inherits(SomePromiseArray, PromiseArray);
	
	SomePromiseArray.prototype._init = function () {
	    if (!this._initialized) {
	        return;
	    }
	    if (this._howMany === 0) {
	        this._resolve([]);
	        return;
	    }
	    this._init$(undefined, -5);
	    var isArrayResolved = isArray(this._values);
	    if (!this._isResolved() &&
	        isArrayResolved &&
	        this._howMany > this._canPossiblyFulfill()) {
	        this._reject(this._getRangeError(this.length()));
	    }
	};
	
	SomePromiseArray.prototype.init = function () {
	    this._initialized = true;
	    this._init();
	};
	
	SomePromiseArray.prototype.setUnwrap = function () {
	    this._unwrap = true;
	};
	
	SomePromiseArray.prototype.howMany = function () {
	    return this._howMany;
	};
	
	SomePromiseArray.prototype.setHowMany = function (count) {
	    this._howMany = count;
	};
	
	SomePromiseArray.prototype._promiseFulfilled = function (value) {
	    this._addFulfilled(value);
	    if (this._fulfilled() === this.howMany()) {
	        this._values.length = this.howMany();
	        if (this.howMany() === 1 && this._unwrap) {
	            this._resolve(this._values[0]);
	        } else {
	            this._resolve(this._values);
	        }
	        return true;
	    }
	    return false;
	
	};
	SomePromiseArray.prototype._promiseRejected = function (reason) {
	    this._addRejected(reason);
	    return this._checkOutcome();
	};
	
	SomePromiseArray.prototype._promiseCancelled = function () {
	    if (this._values instanceof Promise || this._values == null) {
	        return this._cancel();
	    }
	    this._addRejected(CANCELLATION);
	    return this._checkOutcome();
	};
	
	SomePromiseArray.prototype._checkOutcome = function() {
	    if (this.howMany() > this._canPossiblyFulfill()) {
	        var e = new AggregateError();
	        for (var i = this.length(); i < this._values.length; ++i) {
	            if (this._values[i] !== CANCELLATION) {
	                e.push(this._values[i]);
	            }
	        }
	        if (e.length > 0) {
	            this._reject(e);
	        } else {
	            this._cancel();
	        }
	        return true;
	    }
	    return false;
	};
	
	SomePromiseArray.prototype._fulfilled = function () {
	    return this._totalResolved;
	};
	
	SomePromiseArray.prototype._rejected = function () {
	    return this._values.length - this.length();
	};
	
	SomePromiseArray.prototype._addRejected = function (reason) {
	    this._values.push(reason);
	};
	
	SomePromiseArray.prototype._addFulfilled = function (value) {
	    this._values[this._totalResolved++] = value;
	};
	
	SomePromiseArray.prototype._canPossiblyFulfill = function () {
	    return this.length() - this._rejected();
	};
	
	SomePromiseArray.prototype._getRangeError = function (count) {
	    var message = "Input array must contain at least " +
	            this._howMany + " items but contains only " + count + " items";
	    return new RangeError(message);
	};
	
	SomePromiseArray.prototype._resolveEmptyArray = function () {
	    this._reject(this._getRangeError(0));
	};
	
	function some(promises, howMany) {
	    if ((howMany | 0) !== howMany || howMany < 0) {
	        return apiRejection("expecting a positive integer\u000a\u000a    See http://goo.gl/MqrFmX\u000a");
	    }
	    var ret = new SomePromiseArray(promises);
	    var promise = ret.promise();
	    ret.setHowMany(howMany);
	    ret.init();
	    return promise;
	}
	
	Promise.some = function (promises, howMany) {
	    return some(promises, howMany);
	};
	
	Promise.prototype.some = function (howMany) {
	    return some(this, howMany);
	};
	
	Promise._SomePromiseArray = SomePromiseArray;
	};


/***/ }),
/* 722 */
/***/ (function(module, exports) {

	"use strict";
	module.exports = function(Promise) {
	function PromiseInspection(promise) {
	    if (promise !== undefined) {
	        promise = promise._target();
	        this._bitField = promise._bitField;
	        this._settledValueField = promise._isFateSealed()
	            ? promise._settledValue() : undefined;
	    }
	    else {
	        this._bitField = 0;
	        this._settledValueField = undefined;
	    }
	}
	
	PromiseInspection.prototype._settledValue = function() {
	    return this._settledValueField;
	};
	
	var value = PromiseInspection.prototype.value = function () {
	    if (!this.isFulfilled()) {
	        throw new TypeError("cannot get fulfillment value of a non-fulfilled promise\u000a\u000a    See http://goo.gl/MqrFmX\u000a");
	    }
	    return this._settledValue();
	};
	
	var reason = PromiseInspection.prototype.error =
	PromiseInspection.prototype.reason = function () {
	    if (!this.isRejected()) {
	        throw new TypeError("cannot get rejection reason of a non-rejected promise\u000a\u000a    See http://goo.gl/MqrFmX\u000a");
	    }
	    return this._settledValue();
	};
	
	var isFulfilled = PromiseInspection.prototype.isFulfilled = function() {
	    return (this._bitField & 33554432) !== 0;
	};
	
	var isRejected = PromiseInspection.prototype.isRejected = function () {
	    return (this._bitField & 16777216) !== 0;
	};
	
	var isPending = PromiseInspection.prototype.isPending = function () {
	    return (this._bitField & 50397184) === 0;
	};
	
	var isResolved = PromiseInspection.prototype.isResolved = function () {
	    return (this._bitField & 50331648) !== 0;
	};
	
	PromiseInspection.prototype.isCancelled = function() {
	    return (this._bitField & 8454144) !== 0;
	};
	
	Promise.prototype.__isCancelled = function() {
	    return (this._bitField & 65536) === 65536;
	};
	
	Promise.prototype._isCancelled = function() {
	    return this._target().__isCancelled();
	};
	
	Promise.prototype.isCancelled = function() {
	    return (this._target()._bitField & 8454144) !== 0;
	};
	
	Promise.prototype.isPending = function() {
	    return isPending.call(this._target());
	};
	
	Promise.prototype.isRejected = function() {
	    return isRejected.call(this._target());
	};
	
	Promise.prototype.isFulfilled = function() {
	    return isFulfilled.call(this._target());
	};
	
	Promise.prototype.isResolved = function() {
	    return isResolved.call(this._target());
	};
	
	Promise.prototype.value = function() {
	    return value.call(this._target());
	};
	
	Promise.prototype.reason = function() {
	    var target = this._target();
	    target._unsetRejectionIsUnhandled();
	    return reason.call(target);
	};
	
	Promise.prototype._value = function() {
	    return this._settledValue();
	};
	
	Promise.prototype._reason = function() {
	    this._unsetRejectionIsUnhandled();
	    return this._settledValue();
	};
	
	Promise.PromiseInspection = PromiseInspection;
	};


/***/ }),
/* 723 */
/***/ (function(module, exports, __webpack_require__) {

	"use strict";
	module.exports = function(Promise, INTERNAL) {
	var util = __webpack_require__(17);
	var errorObj = util.errorObj;
	var isObject = util.isObject;
	
	function tryConvertToPromise(obj, context) {
	    if (isObject(obj)) {
	        if (obj instanceof Promise) return obj;
	        var then = getThen(obj);
	        if (then === errorObj) {
	            if (context) context._pushContext();
	            var ret = Promise.reject(then.e);
	            if (context) context._popContext();
	            return ret;
	        } else if (typeof then === "function") {
	            if (isAnyBluebirdPromise(obj)) {
	                var ret = new Promise(INTERNAL);
	                obj._then(
	                    ret._fulfill,
	                    ret._reject,
	                    undefined,
	                    ret,
	                    null
	                );
	                return ret;
	            }
	            return doThenable(obj, then, context);
	        }
	    }
	    return obj;
	}
	
	function doGetThen(obj) {
	    return obj.then;
	}
	
	function getThen(obj) {
	    try {
	        return doGetThen(obj);
	    } catch (e) {
	        errorObj.e = e;
	        return errorObj;
	    }
	}
	
	var hasProp = {}.hasOwnProperty;
	function isAnyBluebirdPromise(obj) {
	    try {
	        return hasProp.call(obj, "_promise0");
	    } catch (e) {
	        return false;
	    }
	}
	
	function doThenable(x, then, context) {
	    var promise = new Promise(INTERNAL);
	    var ret = promise;
	    if (context) context._pushContext();
	    promise._captureStackTrace();
	    if (context) context._popContext();
	    var synchronous = true;
	    var result = util.tryCatch(then).call(x, resolve, reject);
	    synchronous = false;
	
	    if (promise && result === errorObj) {
	        promise._rejectCallback(result.e, true, true);
	        promise = null;
	    }
	
	    function resolve(value) {
	        if (!promise) return;
	        promise._resolveCallback(value);
	        promise = null;
	    }
	
	    function reject(reason) {
	        if (!promise) return;
	        promise._rejectCallback(reason, synchronous, true);
	        promise = null;
	    }
	    return ret;
	}
	
	return tryConvertToPromise;
	};


/***/ }),
/* 724 */
/***/ (function(module, exports, __webpack_require__) {

	"use strict";
	module.exports = function(Promise, INTERNAL, debug) {
	var util = __webpack_require__(17);
	var TimeoutError = Promise.TimeoutError;
	
	function HandleWrapper(handle)  {
	    this.handle = handle;
	}
	
	HandleWrapper.prototype._resultCancelled = function() {
	    clearTimeout(this.handle);
	};
	
	var afterValue = function(value) { return delay(+this).thenReturn(value); };
	var delay = Promise.delay = function (ms, value) {
	    var ret;
	    var handle;
	    if (value !== undefined) {
	        ret = Promise.resolve(value)
	                ._then(afterValue, null, null, ms, undefined);
	        if (debug.cancellation() && value instanceof Promise) {
	            ret._setOnCancel(value);
	        }
	    } else {
	        ret = new Promise(INTERNAL);
	        handle = setTimeout(function() { ret._fulfill(); }, +ms);
	        if (debug.cancellation()) {
	            ret._setOnCancel(new HandleWrapper(handle));
	        }
	        ret._captureStackTrace();
	    }
	    ret._setAsyncGuaranteed();
	    return ret;
	};
	
	Promise.prototype.delay = function (ms) {
	    return delay(ms, this);
	};
	
	var afterTimeout = function (promise, message, parent) {
	    var err;
	    if (typeof message !== "string") {
	        if (message instanceof Error) {
	            err = message;
	        } else {
	            err = new TimeoutError("operation timed out");
	        }
	    } else {
	        err = new TimeoutError(message);
	    }
	    util.markAsOriginatingFromRejection(err);
	    promise._attachExtraTrace(err);
	    promise._reject(err);
	
	    if (parent != null) {
	        parent.cancel();
	    }
	};
	
	function successClear(value) {
	    clearTimeout(this.handle);
	    return value;
	}
	
	function failureClear(reason) {
	    clearTimeout(this.handle);
	    throw reason;
	}
	
	Promise.prototype.timeout = function (ms, message) {
	    ms = +ms;
	    var ret, parent;
	
	    var handleWrapper = new HandleWrapper(setTimeout(function timeoutTimeout() {
	        if (ret.isPending()) {
	            afterTimeout(ret, message, parent);
	        }
	    }, ms));
	
	    if (debug.cancellation()) {
	        parent = this.then();
	        ret = parent._then(successClear, failureClear,
	                            undefined, handleWrapper, undefined);
	        ret._setOnCancel(handleWrapper);
	    } else {
	        ret = this._then(successClear, failureClear,
	                            undefined, handleWrapper, undefined);
	    }
	
	    return ret;
	};
	
	};


/***/ }),
/* 725 */
/***/ (function(module, exports, __webpack_require__) {

	"use strict";
	module.exports = function (Promise, apiRejection, tryConvertToPromise,
	    createContext, INTERNAL, debug) {
	    var util = __webpack_require__(17);
	    var TypeError = __webpack_require__(75).TypeError;
	    var inherits = __webpack_require__(17).inherits;
	    var errorObj = util.errorObj;
	    var tryCatch = util.tryCatch;
	    var NULL = {};
	
	    function thrower(e) {
	        setTimeout(function(){throw e;}, 0);
	    }
	
	    function castPreservingDisposable(thenable) {
	        var maybePromise = tryConvertToPromise(thenable);
	        if (maybePromise !== thenable &&
	            typeof thenable._isDisposable === "function" &&
	            typeof thenable._getDisposer === "function" &&
	            thenable._isDisposable()) {
	            maybePromise._setDisposable(thenable._getDisposer());
	        }
	        return maybePromise;
	    }
	    function dispose(resources, inspection) {
	        var i = 0;
	        var len = resources.length;
	        var ret = new Promise(INTERNAL);
	        function iterator() {
	            if (i >= len) return ret._fulfill();
	            var maybePromise = castPreservingDisposable(resources[i++]);
	            if (maybePromise instanceof Promise &&
	                maybePromise._isDisposable()) {
	                try {
	                    maybePromise = tryConvertToPromise(
	                        maybePromise._getDisposer().tryDispose(inspection),
	                        resources.promise);
	                } catch (e) {
	                    return thrower(e);
	                }
	                if (maybePromise instanceof Promise) {
	                    return maybePromise._then(iterator, thrower,
	                                              null, null, null);
	                }
	            }
	            iterator();
	        }
	        iterator();
	        return ret;
	    }
	
	    function Disposer(data, promise, context) {
	        this._data = data;
	        this._promise = promise;
	        this._context = context;
	    }
	
	    Disposer.prototype.data = function () {
	        return this._data;
	    };
	
	    Disposer.prototype.promise = function () {
	        return this._promise;
	    };
	
	    Disposer.prototype.resource = function () {
	        if (this.promise().isFulfilled()) {
	            return this.promise().value();
	        }
	        return NULL;
	    };
	
	    Disposer.prototype.tryDispose = function(inspection) {
	        var resource = this.resource();
	        var context = this._context;
	        if (context !== undefined) context._pushContext();
	        var ret = resource !== NULL
	            ? this.doDispose(resource, inspection) : null;
	        if (context !== undefined) context._popContext();
	        this._promise._unsetDisposable();
	        this._data = null;
	        return ret;
	    };
	
	    Disposer.isDisposer = function (d) {
	        return (d != null &&
	                typeof d.resource === "function" &&
	                typeof d.tryDispose === "function");
	    };
	
	    function FunctionDisposer(fn, promise, context) {
	        this.constructor$(fn, promise, context);
	    }
	    inherits(FunctionDisposer, Disposer);
	
	    FunctionDisposer.prototype.doDispose = function (resource, inspection) {
	        var fn = this.data();
	        return fn.call(resource, resource, inspection);
	    };
	
	    function maybeUnwrapDisposer(value) {
	        if (Disposer.isDisposer(value)) {
	            this.resources[this.index]._setDisposable(value);
	            return value.promise();
	        }
	        return value;
	    }
	
	    function ResourceList(length) {
	        this.length = length;
	        this.promise = null;
	        this[length-1] = null;
	    }
	
	    ResourceList.prototype._resultCancelled = function() {
	        var len = this.length;
	        for (var i = 0; i < len; ++i) {
	            var item = this[i];
	            if (item instanceof Promise) {
	                item.cancel();
	            }
	        }
	    };
	
	    Promise.using = function () {
	        var len = arguments.length;
	        if (len < 2) return apiRejection(
	                        "you must pass at least 2 arguments to Promise.using");
	        var fn = arguments[len - 1];
	        if (typeof fn !== "function") {
	            return apiRejection("expecting a function but got " + util.classString(fn));
	        }
	        var input;
	        var spreadArgs = true;
	        if (len === 2 && Array.isArray(arguments[0])) {
	            input = arguments[0];
	            len = input.length;
	            spreadArgs = false;
	        } else {
	            input = arguments;
	            len--;
	        }
	        var resources = new ResourceList(len);
	        for (var i = 0; i < len; ++i) {
	            var resource = input[i];
	            if (Disposer.isDisposer(resource)) {
	                var disposer = resource;
	                resource = resource.promise();
	                resource._setDisposable(disposer);
	            } else {
	                var maybePromise = tryConvertToPromise(resource);
	                if (maybePromise instanceof Promise) {
	                    resource =
	                        maybePromise._then(maybeUnwrapDisposer, null, null, {
	                            resources: resources,
	                            index: i
	                    }, undefined);
	                }
	            }
	            resources[i] = resource;
	        }
	
	        var reflectedResources = new Array(resources.length);
	        for (var i = 0; i < reflectedResources.length; ++i) {
	            reflectedResources[i] = Promise.resolve(resources[i]).reflect();
	        }
	
	        var resultPromise = Promise.all(reflectedResources)
	            .then(function(inspections) {
	                for (var i = 0; i < inspections.length; ++i) {
	                    var inspection = inspections[i];
	                    if (inspection.isRejected()) {
	                        errorObj.e = inspection.error();
	                        return errorObj;
	                    } else if (!inspection.isFulfilled()) {
	                        resultPromise.cancel();
	                        return;
	                    }
	                    inspections[i] = inspection.value();
	                }
	                promise._pushContext();
	
	                fn = tryCatch(fn);
	                var ret = spreadArgs
	                    ? fn.apply(undefined, inspections) : fn(inspections);
	                var promiseCreated = promise._popContext();
	                debug.checkForgottenReturns(
	                    ret, promiseCreated, "Promise.using", promise);
	                return ret;
	            });
	
	        var promise = resultPromise.lastly(function() {
	            var inspection = new Promise.PromiseInspection(resultPromise);
	            return dispose(resources, inspection);
	        });
	        resources.promise = promise;
	        promise._setOnCancel(resources);
	        return promise;
	    };
	
	    Promise.prototype._setDisposable = function (disposer) {
	        this._bitField = this._bitField | 131072;
	        this._disposer = disposer;
	    };
	
	    Promise.prototype._isDisposable = function () {
	        return (this._bitField & 131072) > 0;
	    };
	
	    Promise.prototype._getDisposer = function () {
	        return this._disposer;
	    };
	
	    Promise.prototype._unsetDisposable = function () {
	        this._bitField = this._bitField & (~131072);
	        this._disposer = undefined;
	    };
	
	    Promise.prototype.disposer = function (fn) {
	        if (typeof fn === "function") {
	            return new FunctionDisposer(fn, this, createContext());
	        }
	        throw new TypeError();
	    };
	
	};


/***/ }),
/* 726 */
/***/ (function(module, exports, __webpack_require__) {

	/* WEBPACK VAR INJECTION */(function(jQuery) {/*!
	 * Bootstrap v3.4.1 (https://getbootstrap.com/)
	 * Copyright 2011-2019 Twitter, Inc.
	 * Licensed under the MIT license
	 */
	if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");!function(t){"use strict";var e=jQuery.fn.jquery.split(" ")[0].split(".");if(e[0]<2&&e[1]<9||1==e[0]&&9==e[1]&&e[2]<1||3<e[0])throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4")}(),function(n){"use strict";n.fn.emulateTransitionEnd=function(t){var e=!1,i=this;n(this).one("bsTransitionEnd",function(){e=!0});return setTimeout(function(){e||n(i).trigger(n.support.transition.end)},t),this},n(function(){n.support.transition=function o(){var t=document.createElement("bootstrap"),e={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var i in e)if(t.style[i]!==undefined)return{end:e[i]};return!1}(),n.support.transition&&(n.event.special.bsTransitionEnd={bindType:n.support.transition.end,delegateType:n.support.transition.end,handle:function(t){if(n(t.target).is(this))return t.handleObj.handler.apply(this,arguments)}})})}(jQuery),function(s){"use strict";var e='[data-dismiss="alert"]',a=function(t){s(t).on("click",e,this.close)};a.VERSION="3.4.1",a.TRANSITION_DURATION=150,a.prototype.close=function(t){var e=s(this),i=e.attr("data-target");i||(i=(i=e.attr("href"))&&i.replace(/.*(?=#[^\s]*$)/,"")),i="#"===i?[]:i;var o=s(document).find(i);function n(){o.detach().trigger("closed.bs.alert").remove()}t&&t.preventDefault(),o.length||(o=e.closest(".alert")),o.trigger(t=s.Event("close.bs.alert")),t.isDefaultPrevented()||(o.removeClass("in"),s.support.transition&&o.hasClass("fade")?o.one("bsTransitionEnd",n).emulateTransitionEnd(a.TRANSITION_DURATION):n())};var t=s.fn.alert;s.fn.alert=function o(i){return this.each(function(){var t=s(this),e=t.data("bs.alert");e||t.data("bs.alert",e=new a(this)),"string"==typeof i&&e[i].call(t)})},s.fn.alert.Constructor=a,s.fn.alert.noConflict=function(){return s.fn.alert=t,this},s(document).on("click.bs.alert.data-api",e,a.prototype.close)}(jQuery),function(s){"use strict";var n=function(t,e){this.$element=s(t),this.options=s.extend({},n.DEFAULTS,e),this.isLoading=!1};function i(o){return this.each(function(){var t=s(this),e=t.data("bs.button"),i="object"==typeof o&&o;e||t.data("bs.button",e=new n(this,i)),"toggle"==o?e.toggle():o&&e.setState(o)})}n.VERSION="3.4.1",n.DEFAULTS={loadingText:"loading..."},n.prototype.setState=function(t){var e="disabled",i=this.$element,o=i.is("input")?"val":"html",n=i.data();t+="Text",null==n.resetText&&i.data("resetText",i[o]()),setTimeout(s.proxy(function(){i[o](null==n[t]?this.options[t]:n[t]),"loadingText"==t?(this.isLoading=!0,i.addClass(e).attr(e,e).prop(e,!0)):this.isLoading&&(this.isLoading=!1,i.removeClass(e).removeAttr(e).prop(e,!1))},this),0)},n.prototype.toggle=function(){var t=!0,e=this.$element.closest('[data-toggle="buttons"]');if(e.length){var i=this.$element.find("input");"radio"==i.prop("type")?(i.prop("checked")&&(t=!1),e.find(".active").removeClass("active"),this.$element.addClass("active")):"checkbox"==i.prop("type")&&(i.prop("checked")!==this.$element.hasClass("active")&&(t=!1),this.$element.toggleClass("active")),i.prop("checked",this.$element.hasClass("active")),t&&i.trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active")),this.$element.toggleClass("active")};var t=s.fn.button;s.fn.button=i,s.fn.button.Constructor=n,s.fn.button.noConflict=function(){return s.fn.button=t,this},s(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(t){var e=s(t.target).closest(".btn");i.call(e,"toggle"),s(t.target).is('input[type="radio"], input[type="checkbox"]')||(t.preventDefault(),e.is("input,button")?e.trigger("focus"):e.find("input:visible,button:visible").first().trigger("focus"))}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(t){s(t.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(t.type))})}(jQuery),function(p){"use strict";var c=function(t,e){this.$element=p(t),this.$indicators=this.$element.find(".carousel-indicators"),this.options=e,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",p.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",p.proxy(this.pause,this)).on("mouseleave.bs.carousel",p.proxy(this.cycle,this))};function r(n){return this.each(function(){var t=p(this),e=t.data("bs.carousel"),i=p.extend({},c.DEFAULTS,t.data(),"object"==typeof n&&n),o="string"==typeof n?n:i.slide;e||t.data("bs.carousel",e=new c(this,i)),"number"==typeof n?e.to(n):o?e[o]():i.interval&&e.pause().cycle()})}c.VERSION="3.4.1",c.TRANSITION_DURATION=600,c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},c.prototype.keydown=function(t){if(!/input|textarea/i.test(t.target.tagName)){switch(t.which){case 37:this.prev();break;case 39:this.next();break;default:return}t.preventDefault()}},c.prototype.cycle=function(t){return t||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(p.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(t){return this.$items=t.parent().children(".item"),this.$items.index(t||this.$active)},c.prototype.getItemForDirection=function(t,e){var i=this.getItemIndex(e);if(("prev"==t&&0===i||"next"==t&&i==this.$items.length-1)&&!this.options.wrap)return e;var o=(i+("prev"==t?-1:1))%this.$items.length;return this.$items.eq(o)},c.prototype.to=function(t){var e=this,i=this.getItemIndex(this.$active=this.$element.find(".item.active"));if(!(t>this.$items.length-1||t<0))return this.sliding?this.$element.one("slid.bs.carousel",function(){e.to(t)}):i==t?this.pause().cycle():this.slide(i<t?"next":"prev",this.$items.eq(t))},c.prototype.pause=function(t){return t||(this.paused=!0),this.$element.find(".next, .prev").length&&p.support.transition&&(this.$element.trigger(p.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){if(!this.sliding)return this.slide("next")},c.prototype.prev=function(){if(!this.sliding)return this.slide("prev")},c.prototype.slide=function(t,e){var i=this.$element.find(".item.active"),o=e||this.getItemForDirection(t,i),n=this.interval,s="next"==t?"left":"right",a=this;if(o.hasClass("active"))return this.sliding=!1;var r=o[0],l=p.Event("slide.bs.carousel",{relatedTarget:r,direction:s});if(this.$element.trigger(l),!l.isDefaultPrevented()){if(this.sliding=!0,n&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var h=p(this.$indicators.children()[this.getItemIndex(o)]);h&&h.addClass("active")}var d=p.Event("slid.bs.carousel",{relatedTarget:r,direction:s});return p.support.transition&&this.$element.hasClass("slide")?(o.addClass(t),"object"==typeof o&&o.length&&o[0].offsetWidth,i.addClass(s),o.addClass(s),i.one("bsTransitionEnd",function(){o.removeClass([t,s].join(" ")).addClass("active"),i.removeClass(["active",s].join(" ")),a.sliding=!1,setTimeout(function(){a.$element.trigger(d)},0)}).emulateTransitionEnd(c.TRANSITION_DURATION)):(i.removeClass("active"),o.addClass("active"),this.sliding=!1,this.$element.trigger(d)),n&&this.cycle(),this}};var t=p.fn.carousel;p.fn.carousel=r,p.fn.carousel.Constructor=c,p.fn.carousel.noConflict=function(){return p.fn.carousel=t,this};var e=function(t){var e=p(this),i=e.attr("href");i&&(i=i.replace(/.*(?=#[^\s]+$)/,""));var o=e.attr("data-target")||i,n=p(document).find(o);if(n.hasClass("carousel")){var s=p.extend({},n.data(),e.data()),a=e.attr("data-slide-to");a&&(s.interval=!1),r.call(n,s),a&&n.data("bs.carousel").to(a),t.preventDefault()}};p(document).on("click.bs.carousel.data-api","[data-slide]",e).on("click.bs.carousel.data-api","[data-slide-to]",e),p(window).on("load",function(){p('[data-ride="carousel"]').each(function(){var t=p(this);r.call(t,t.data())})})}(jQuery),function(a){"use strict";var r=function(t,e){this.$element=a(t),this.options=a.extend({},r.DEFAULTS,e),this.$trigger=a('[data-toggle="collapse"][href="#'+t.id+'"],[data-toggle="collapse"][data-target="#'+t.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};function n(t){var e,i=t.attr("data-target")||(e=t.attr("href"))&&e.replace(/.*(?=#[^\s]+$)/,"");return a(document).find(i)}function l(o){return this.each(function(){var t=a(this),e=t.data("bs.collapse"),i=a.extend({},r.DEFAULTS,t.data(),"object"==typeof o&&o);!e&&i.toggle&&/show|hide/.test(o)&&(i.toggle=!1),e||t.data("bs.collapse",e=new r(this,i)),"string"==typeof o&&e[o]()})}r.VERSION="3.4.1",r.TRANSITION_DURATION=350,r.DEFAULTS={toggle:!0},r.prototype.dimension=function(){return this.$element.hasClass("width")?"width":"height"},r.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var t,e=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(e&&e.length&&(t=e.data("bs.collapse"))&&t.transitioning)){var i=a.Event("show.bs.collapse");if(this.$element.trigger(i),!i.isDefaultPrevented()){e&&e.length&&(l.call(e,"hide"),t||e.data("bs.collapse",null));var o=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[o](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var n=function(){this.$element.removeClass("collapsing").addClass("collapse in")[o](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return n.call(this);var s=a.camelCase(["scroll",o].join("-"));this.$element.one("bsTransitionEnd",a.proxy(n,this)).emulateTransitionEnd(r.TRANSITION_DURATION)[o](this.$element[0][s])}}}},r.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var t=a.Event("hide.bs.collapse");if(this.$element.trigger(t),!t.isDefaultPrevented()){var e=this.dimension();this.$element[e](this.$element[e]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var i=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};if(!a.support.transition)return i.call(this);this.$element[e](0).one("bsTransitionEnd",a.proxy(i,this)).emulateTransitionEnd(r.TRANSITION_DURATION)}}},r.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},r.prototype.getParent=function(){return a(document).find(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(a.proxy(function(t,e){var i=a(e);this.addAriaAndCollapsedClass(n(i),i)},this)).end()},r.prototype.addAriaAndCollapsedClass=function(t,e){var i=t.hasClass("in");t.attr("aria-expanded",i),e.toggleClass("collapsed",!i).attr("aria-expanded",i)};var t=a.fn.collapse;a.fn.collapse=l,a.fn.collapse.Constructor=r,a.fn.collapse.noConflict=function(){return a.fn.collapse=t,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(t){var e=a(this);e.attr("data-target")||t.preventDefault();var i=n(e),o=i.data("bs.collapse")?"toggle":e.data();l.call(i,o)})}(jQuery),function(a){"use strict";var r='[data-toggle="dropdown"]',o=function(t){a(t).on("click.bs.dropdown",this.toggle)};function l(t){var e=t.attr("data-target");e||(e=(e=t.attr("href"))&&/#[A-Za-z]/.test(e)&&e.replace(/.*(?=#[^\s]*$)/,""));var i="#"!==e?a(document).find(e):null;return i&&i.length?i:t.parent()}function s(o){o&&3===o.which||(a(".dropdown-backdrop").remove(),a(r).each(function(){var t=a(this),e=l(t),i={relatedTarget:this};e.hasClass("open")&&(o&&"click"==o.type&&/input|textarea/i.test(o.target.tagName)&&a.contains(e[0],o.target)||(e.trigger(o=a.Event("hide.bs.dropdown",i)),o.isDefaultPrevented()||(t.attr("aria-expanded","false"),e.removeClass("open").trigger(a.Event("hidden.bs.dropdown",i)))))}))}o.VERSION="3.4.1",o.prototype.toggle=function(t){var e=a(this);if(!e.is(".disabled, :disabled")){var i=l(e),o=i.hasClass("open");if(s(),!o){"ontouchstart"in document.documentElement&&!i.closest(".navbar-nav").length&&a(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(a(this)).on("click",s);var n={relatedTarget:this};if(i.trigger(t=a.Event("show.bs.dropdown",n)),t.isDefaultPrevented())return;e.trigger("focus").attr("aria-expanded","true"),i.toggleClass("open").trigger(a.Event("shown.bs.dropdown",n))}return!1}},o.prototype.keydown=function(t){if(/(38|40|27|32)/.test(t.which)&&!/input|textarea/i.test(t.target.tagName)){var e=a(this);if(t.preventDefault(),t.stopPropagation(),!e.is(".disabled, :disabled")){var i=l(e),o=i.hasClass("open");if(!o&&27!=t.which||o&&27==t.which)return 27==t.which&&i.find(r).trigger("focus"),e.trigger("click");var n=i.find(".dropdown-menu li:not(.disabled):visible a");if(n.length){var s=n.index(t.target);38==t.which&&0<s&&s--,40==t.which&&s<n.length-1&&s++,~s||(s=0),n.eq(s).trigger("focus")}}}};var t=a.fn.dropdown;a.fn.dropdown=function e(i){return this.each(function(){var t=a(this),e=t.data("bs.dropdown");e||t.data("bs.dropdown",e=new o(this)),"string"==typeof i&&e[i].call(t)})},a.fn.dropdown.Constructor=o,a.fn.dropdown.noConflict=function(){return a.fn.dropdown=t,this},a(document).on("click.bs.dropdown.data-api",s).on("click.bs.dropdown.data-api",".dropdown form",function(t){t.stopPropagation()}).on("click.bs.dropdown.data-api",r,o.prototype.toggle).on("keydown.bs.dropdown.data-api",r,o.prototype.keydown).on("keydown.bs.dropdown.data-api",".dropdown-menu",o.prototype.keydown)}(jQuery),function(a){"use strict";var s=function(t,e){this.options=e,this.$body=a(document.body),this.$element=a(t),this.$dialog=this.$element.find(".modal-dialog"),this.$backdrop=null,this.isShown=null,this.originalBodyPad=null,this.scrollbarWidth=0,this.ignoreBackdropClick=!1,this.fixedContent=".navbar-fixed-top, .navbar-fixed-bottom",this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,a.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))};function r(o,n){return this.each(function(){var t=a(this),e=t.data("bs.modal"),i=a.extend({},s.DEFAULTS,t.data(),"object"==typeof o&&o);e||t.data("bs.modal",e=new s(this,i)),"string"==typeof o?e[o](n):i.show&&e.show(n)})}s.VERSION="3.4.1",s.TRANSITION_DURATION=300,s.BACKDROP_TRANSITION_DURATION=150,s.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},s.prototype.toggle=function(t){return this.isShown?this.hide():this.show(t)},s.prototype.show=function(i){var o=this,t=a.Event("show.bs.modal",{relatedTarget:i});this.$element.trigger(t),this.isShown||t.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.setScrollbar(),this.$body.addClass("modal-open"),this.escape(),this.resize(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',a.proxy(this.hide,this)),this.$dialog.on("mousedown.dismiss.bs.modal",function(){o.$element.one("mouseup.dismiss.bs.modal",function(t){a(t.target).is(o.$element)&&(o.ignoreBackdropClick=!0)})}),this.backdrop(function(){var t=a.support.transition&&o.$element.hasClass("fade");o.$element.parent().length||o.$element.appendTo(o.$body),o.$element.show().scrollTop(0),o.adjustDialog(),t&&o.$element[0].offsetWidth,o.$element.addClass("in"),o.enforceFocus();var e=a.Event("shown.bs.modal",{relatedTarget:i});t?o.$dialog.one("bsTransitionEnd",function(){o.$element.trigger("focus").trigger(e)}).emulateTransitionEnd(s.TRANSITION_DURATION):o.$element.trigger("focus").trigger(e)}))},s.prototype.hide=function(t){t&&t.preventDefault(),t=a.Event("hide.bs.modal"),this.$element.trigger(t),this.isShown&&!t.isDefaultPrevented()&&(this.isShown=!1,this.escape(),this.resize(),a(document).off("focusin.bs.modal"),this.$element.removeClass("in").off("click.dismiss.bs.modal").off("mouseup.dismiss.bs.modal"),this.$dialog.off("mousedown.dismiss.bs.modal"),a.support.transition&&this.$element.hasClass("fade")?this.$element.one("bsTransitionEnd",a.proxy(this.hideModal,this)).emulateTransitionEnd(s.TRANSITION_DURATION):this.hideModal())},s.prototype.enforceFocus=function(){a(document).off("focusin.bs.modal").on("focusin.bs.modal",a.proxy(function(t){document===t.target||this.$element[0]===t.target||this.$element.has(t.target).length||this.$element.trigger("focus")},this))},s.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keydown.dismiss.bs.modal",a.proxy(function(t){27==t.which&&this.hide()},this)):this.isShown||this.$element.off("keydown.dismiss.bs.modal")},s.prototype.resize=function(){this.isShown?a(window).on("resize.bs.modal",a.proxy(this.handleUpdate,this)):a(window).off("resize.bs.modal")},s.prototype.hideModal=function(){var t=this;this.$element.hide(),this.backdrop(function(){t.$body.removeClass("modal-open"),t.resetAdjustments(),t.resetScrollbar(),t.$element.trigger("hidden.bs.modal")})},s.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},s.prototype.backdrop=function(t){var e=this,i=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var o=a.support.transition&&i;if(this.$backdrop=a(document.createElement("div")).addClass("modal-backdrop "+i).appendTo(this.$body),this.$element.on("click.dismiss.bs.modal",a.proxy(function(t){this.ignoreBackdropClick?this.ignoreBackdropClick=!1:t.target===t.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus():this.hide())},this)),o&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!t)return;o?this.$backdrop.one("bsTransitionEnd",t).emulateTransitionEnd(s.BACKDROP_TRANSITION_DURATION):t()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var n=function(){e.removeBackdrop(),t&&t()};a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",n).emulateTransitionEnd(s.BACKDROP_TRANSITION_DURATION):n()}else t&&t()},s.prototype.handleUpdate=function(){this.adjustDialog()},s.prototype.adjustDialog=function(){var t=this.$element[0].scrollHeight>document.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&t?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!t?this.scrollbarWidth:""})},s.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},s.prototype.checkScrollbar=function(){var t=window.innerWidth;if(!t){var e=document.documentElement.getBoundingClientRect();t=e.right-Math.abs(e.left)}this.bodyIsOverflowing=document.body.clientWidth<t,this.scrollbarWidth=this.measureScrollbar()},s.prototype.setScrollbar=function(){var t=parseInt(this.$body.css("padding-right")||0,10);this.originalBodyPad=document.body.style.paddingRight||"";var n=this.scrollbarWidth;this.bodyIsOverflowing&&(this.$body.css("padding-right",t+n),a(this.fixedContent).each(function(t,e){var i=e.style.paddingRight,o=a(e).css("padding-right");a(e).data("padding-right",i).css("padding-right",parseFloat(o)+n+"px")}))},s.prototype.resetScrollbar=function(){this.$body.css("padding-right",this.originalBodyPad),a(this.fixedContent).each(function(t,e){var i=a(e).data("padding-right");a(e).removeData("padding-right"),e.style.paddingRight=i||""})},s.prototype.measureScrollbar=function(){var t=document.createElement("div");t.className="modal-scrollbar-measure",this.$body.append(t);var e=t.offsetWidth-t.clientWidth;return this.$body[0].removeChild(t),e};var t=a.fn.modal;a.fn.modal=r,a.fn.modal.Constructor=s,a.fn.modal.noConflict=function(){return a.fn.modal=t,this},a(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(t){var e=a(this),i=e.attr("href"),o=e.attr("data-target")||i&&i.replace(/.*(?=#[^\s]+$)/,""),n=a(document).find(o),s=n.data("bs.modal")?"toggle":a.extend({remote:!/#/.test(i)&&i},n.data(),e.data());e.is("a")&&t.preventDefault(),n.one("show.bs.modal",function(t){t.isDefaultPrevented()||n.one("hidden.bs.modal",function(){e.is(":visible")&&e.trigger("focus")})}),r.call(n,s,this)})}(jQuery),function(g){"use strict";var o=["sanitize","whiteList","sanitizeFn"],a=["background","cite","href","itemtype","longdesc","poster","src","xlink:href"],t={"*":["class","dir","id","lang","role",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],div:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},r=/^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi,l=/^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i;function u(t,e){var i=t.nodeName.toLowerCase();if(-1!==g.inArray(i,e))return-1===g.inArray(i,a)||Boolean(t.nodeValue.match(r)||t.nodeValue.match(l));for(var o=g(e).filter(function(t,e){return e instanceof RegExp}),n=0,s=o.length;n<s;n++)if(i.match(o[n]))return!0;return!1}function n(t,e,i){if(0===t.length)return t;if(i&&"function"==typeof i)return i(t);if(!document.implementation||!document.implementation.createHTMLDocument)return t;var o=document.implementation.createHTMLDocument("sanitization");o.body.innerHTML=t;for(var n=g.map(e,function(t,e){return e}),s=g(o.body).find("*"),a=0,r=s.length;a<r;a++){var l=s[a],h=l.nodeName.toLowerCase();if(-1!==g.inArray(h,n))for(var d=g.map(l.attributes,function(t){return t}),p=[].concat(e["*"]||[],e[h]||[]),c=0,f=d.length;c<f;c++)u(d[c],p)||l.removeAttribute(d[c].nodeName);else l.parentNode.removeChild(l)}return o.body.innerHTML}var m=function(t,e){this.type=null,this.options=null,this.enabled=null,this.timeout=null,this.hoverState=null,this.$element=null,this.inState=null,this.init("tooltip",t,e)};m.VERSION="3.4.1",m.TRANSITION_DURATION=150,m.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0},sanitize:!0,sanitizeFn:null,whiteList:t},m.prototype.init=function(t,e,i){if(this.enabled=!0,this.type=t,this.$element=g(e),this.options=this.getOptions(i),this.$viewport=this.options.viewport&&g(document).find(g.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var o=this.options.trigger.split(" "),n=o.length;n--;){var s=o[n];if("click"==s)this.$element.on("click."+this.type,this.options.selector,g.proxy(this.toggle,this));else if("manual"!=s){var a="hover"==s?"mouseenter":"focusin",r="hover"==s?"mouseleave":"focusout";this.$element.on(a+"."+this.type,this.options.selector,g.proxy(this.enter,this)),this.$element.on(r+"."+this.type,this.options.selector,g.proxy(this.leave,this))}}this.options.selector?this._options=g.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},m.prototype.getDefaults=function(){return m.DEFAULTS},m.prototype.getOptions=function(t){var e=this.$element.data();for(var i in e)e.hasOwnProperty(i)&&-1!==g.inArray(i,o)&&delete e[i];return(t=g.extend({},this.getDefaults(),e,t)).delay&&"number"==typeof t.delay&&(t.delay={show:t.delay,hide:t.delay}),t.sanitize&&(t.template=n(t.template,t.whiteList,t.sanitizeFn)),t},m.prototype.getDelegateOptions=function(){var i={},o=this.getDefaults();return this._options&&g.each(this._options,function(t,e){o[t]!=e&&(i[t]=e)}),i},m.prototype.enter=function(t){var e=t instanceof this.constructor?t:g(t.currentTarget).data("bs."+this.type);if(e||(e=new this.constructor(t.currentTarget,this.getDelegateOptions()),g(t.currentTarget).data("bs."+this.type,e)),t instanceof g.Event&&(e.inState["focusin"==t.type?"focus":"hover"]=!0),e.tip().hasClass("in")||"in"==e.hoverState)e.hoverState="in";else{if(clearTimeout(e.timeout),e.hoverState="in",!e.options.delay||!e.options.delay.show)return e.show();e.timeout=setTimeout(function(){"in"==e.hoverState&&e.show()},e.options.delay.show)}},m.prototype.isInStateTrue=function(){for(var t in this.inState)if(this.inState[t])return!0;return!1},m.prototype.leave=function(t){var e=t instanceof this.constructor?t:g(t.currentTarget).data("bs."+this.type);if(e||(e=new this.constructor(t.currentTarget,this.getDelegateOptions()),g(t.currentTarget).data("bs."+this.type,e)),t instanceof g.Event&&(e.inState["focusout"==t.type?"focus":"hover"]=!1),!e.isInStateTrue()){if(clearTimeout(e.timeout),e.hoverState="out",!e.options.delay||!e.options.delay.hide)return e.hide();e.timeout=setTimeout(function(){"out"==e.hoverState&&e.hide()},e.options.delay.hide)}},m.prototype.show=function(){var t=g.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(t);var e=g.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(t.isDefaultPrevented()||!e)return;var i=this,o=this.tip(),n=this.getUID(this.type);this.setContent(),o.attr("id",n),this.$element.attr("aria-describedby",n),this.options.animation&&o.addClass("fade");var s="function"==typeof this.options.placement?this.options.placement.call(this,o[0],this.$element[0]):this.options.placement,a=/\s?auto?\s?/i,r=a.test(s);r&&(s=s.replace(a,"")||"top"),o.detach().css({top:0,left:0,display:"block"}).addClass(s).data("bs."+this.type,this),this.options.container?o.appendTo(g(document).find(this.options.container)):o.insertAfter(this.$element),this.$element.trigger("inserted.bs."+this.type);var l=this.getPosition(),h=o[0].offsetWidth,d=o[0].offsetHeight;if(r){var p=s,c=this.getPosition(this.$viewport);s="bottom"==s&&l.bottom+d>c.bottom?"top":"top"==s&&l.top-d<c.top?"bottom":"right"==s&&l.right+h>c.width?"left":"left"==s&&l.left-h<c.left?"right":s,o.removeClass(p).addClass(s)}var f=this.getCalculatedOffset(s,l,h,d);this.applyPlacement(f,s);var u=function(){var t=i.hoverState;i.$element.trigger("shown.bs."+i.type),i.hoverState=null,"out"==t&&i.leave(i)};g.support.transition&&this.$tip.hasClass("fade")?o.one("bsTransitionEnd",u).emulateTransitionEnd(m.TRANSITION_DURATION):u()}},m.prototype.applyPlacement=function(t,e){var i=this.tip(),o=i[0].offsetWidth,n=i[0].offsetHeight,s=parseInt(i.css("margin-top"),10),a=parseInt(i.css("margin-left"),10);isNaN(s)&&(s=0),isNaN(a)&&(a=0),t.top+=s,t.left+=a,g.offset.setOffset(i[0],g.extend({using:function(t){i.css({top:Math.round(t.top),left:Math.round(t.left)})}},t),0),i.addClass("in");var r=i[0].offsetWidth,l=i[0].offsetHeight;"top"==e&&l!=n&&(t.top=t.top+n-l);var h=this.getViewportAdjustedDelta(e,t,r,l);h.left?t.left+=h.left:t.top+=h.top;var d=/top|bottom/.test(e),p=d?2*h.left-o+r:2*h.top-n+l,c=d?"offsetWidth":"offsetHeight";i.offset(t),this.replaceArrow(p,i[0][c],d)},m.prototype.replaceArrow=function(t,e,i){this.arrow().css(i?"left":"top",50*(1-t/e)+"%").css(i?"top":"left","")},m.prototype.setContent=function(){var t=this.tip(),e=this.getTitle();this.options.html?(this.options.sanitize&&(e=n(e,this.options.whiteList,this.options.sanitizeFn)),t.find(".tooltip-inner").html(e)):t.find(".tooltip-inner").text(e),t.removeClass("fade in top bottom left right")},m.prototype.hide=function(t){var e=this,i=g(this.$tip),o=g.Event("hide.bs."+this.type);function n(){"in"!=e.hoverState&&i.detach(),e.$element&&e.$element.removeAttr("aria-describedby").trigger("hidden.bs."+e.type),t&&t()}if(this.$element.trigger(o),!o.isDefaultPrevented())return i.removeClass("in"),g.support.transition&&i.hasClass("fade")?i.one("bsTransitionEnd",n).emulateTransitionEnd(m.TRANSITION_DURATION):n(),this.hoverState=null,this},m.prototype.fixTitle=function(){var t=this.$element;(t.attr("title")||"string"!=typeof t.attr("data-original-title"))&&t.attr("data-original-title",t.attr("title")||"").attr("title","")},m.prototype.hasContent=function(){return this.getTitle()},m.prototype.getPosition=function(t){var e=(t=t||this.$element)[0],i="BODY"==e.tagName,o=e.getBoundingClientRect();null==o.width&&(o=g.extend({},o,{width:o.right-o.left,height:o.bottom-o.top}));var n=window.SVGElement&&e instanceof window.SVGElement,s=i?{top:0,left:0}:n?null:t.offset(),a={scroll:i?document.documentElement.scrollTop||document.body.scrollTop:t.scrollTop()},r=i?{width:g(window).width(),height:g(window).height()}:null;return g.extend({},o,a,r,s)},m.prototype.getCalculatedOffset=function(t,e,i,o){return"bottom"==t?{top:e.top+e.height,left:e.left+e.width/2-i/2}:"top"==t?{top:e.top-o,left:e.left+e.width/2-i/2}:"left"==t?{top:e.top+e.height/2-o/2,left:e.left-i}:{top:e.top+e.height/2-o/2,left:e.left+e.width}},m.prototype.getViewportAdjustedDelta=function(t,e,i,o){var n={top:0,left:0};if(!this.$viewport)return n;var s=this.options.viewport&&this.options.viewport.padding||0,a=this.getPosition(this.$viewport);if(/right|left/.test(t)){var r=e.top-s-a.scroll,l=e.top+s-a.scroll+o;r<a.top?n.top=a.top-r:l>a.top+a.height&&(n.top=a.top+a.height-l)}else{var h=e.left-s,d=e.left+s+i;h<a.left?n.left=a.left-h:d>a.right&&(n.left=a.left+a.width-d)}return n},m.prototype.getTitle=function(){var t=this.$element,e=this.options;return t.attr("data-original-title")||("function"==typeof e.title?e.title.call(t[0]):e.title)},m.prototype.getUID=function(t){for(;t+=~~(1e6*Math.random()),document.getElementById(t););return t},m.prototype.tip=function(){if(!this.$tip&&(this.$tip=g(this.options.template),1!=this.$tip.length))throw new Error(this.type+" `template` option must consist of exactly 1 top-level element!");return this.$tip},m.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},m.prototype.enable=function(){this.enabled=!0},m.prototype.disable=function(){this.enabled=!1},m.prototype.toggleEnabled=function(){this.enabled=!this.enabled},m.prototype.toggle=function(t){var e=this;t&&((e=g(t.currentTarget).data("bs."+this.type))||(e=new this.constructor(t.currentTarget,this.getDelegateOptions()),g(t.currentTarget).data("bs."+this.type,e))),t?(e.inState.click=!e.inState.click,e.isInStateTrue()?e.enter(e):e.leave(e)):e.tip().hasClass("in")?e.leave(e):e.enter(e)},m.prototype.destroy=function(){var t=this;clearTimeout(this.timeout),this.hide(function(){t.$element.off("."+t.type).removeData("bs."+t.type),t.$tip&&t.$tip.detach(),t.$tip=null,t.$arrow=null,t.$viewport=null,t.$element=null})},m.prototype.sanitizeHtml=function(t){return n(t,this.options.whiteList,this.options.sanitizeFn)};var e=g.fn.tooltip;g.fn.tooltip=function i(o){return this.each(function(){var t=g(this),e=t.data("bs.tooltip"),i="object"==typeof o&&o;!e&&/destroy|hide/.test(o)||(e||t.data("bs.tooltip",e=new m(this,i)),"string"==typeof o&&e[o]())})},g.fn.tooltip.Constructor=m,g.fn.tooltip.noConflict=function(){return g.fn.tooltip=e,this}}(jQuery),function(n){"use strict";var s=function(t,e){this.init("popover",t,e)};if(!n.fn.tooltip)throw new Error("Popover requires tooltip.js");s.VERSION="3.4.1",s.DEFAULTS=n.extend({},n.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),((s.prototype=n.extend({},n.fn.tooltip.Constructor.prototype)).constructor=s).prototype.getDefaults=function(){return s.DEFAULTS},s.prototype.setContent=function(){var t=this.tip(),e=this.getTitle(),i=this.getContent();if(this.options.html){var o=typeof i;this.options.sanitize&&(e=this.sanitizeHtml(e),"string"===o&&(i=this.sanitizeHtml(i))),t.find(".popover-title").html(e),t.find(".popover-content").children().detach().end()["string"===o?"html":"append"](i)}else t.find(".popover-title").text(e),t.find(".popover-content").children().detach().end().text(i);t.removeClass("fade top bottom left right in"),t.find(".popover-title").html()||t.find(".popover-title").hide()},s.prototype.hasContent=function(){return this.getTitle()||this.getContent()},s.prototype.getContent=function(){var t=this.$element,e=this.options;return t.attr("data-content")||("function"==typeof e.content?e.content.call(t[0]):e.content)},s.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var t=n.fn.popover;n.fn.popover=function e(o){return this.each(function(){var t=n(this),e=t.data("bs.popover"),i="object"==typeof o&&o;!e&&/destroy|hide/.test(o)||(e||t.data("bs.popover",e=new s(this,i)),"string"==typeof o&&e[o]())})},n.fn.popover.Constructor=s,n.fn.popover.noConflict=function(){return n.fn.popover=t,this}}(jQuery),function(s){"use strict";function n(t,e){this.$body=s(document.body),this.$scrollElement=s(t).is(document.body)?s(window):s(t),this.options=s.extend({},n.DEFAULTS,e),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",s.proxy(this.process,this)),this.refresh(),this.process()}function e(o){return this.each(function(){var t=s(this),e=t.data("bs.scrollspy"),i="object"==typeof o&&o;e||t.data("bs.scrollspy",e=new n(this,i)),"string"==typeof o&&e[o]()})}n.VERSION="3.4.1",n.DEFAULTS={offset:10},n.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},n.prototype.refresh=function(){var t=this,o="offset",n=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),s.isWindow(this.$scrollElement[0])||(o="position",n=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var t=s(this),e=t.data("target")||t.attr("href"),i=/^#./.test(e)&&s(e);return i&&i.length&&i.is(":visible")&&[[i[o]().top+n,e]]||null}).sort(function(t,e){return t[0]-e[0]}).each(function(){t.offsets.push(this[0]),t.targets.push(this[1])})},n.prototype.process=function(){var t,e=this.$scrollElement.scrollTop()+this.options.offset,i=this.getScrollHeight(),o=this.options.offset+i-this.$scrollElement.height(),n=this.offsets,s=this.targets,a=this.activeTarget;if(this.scrollHeight!=i&&this.refresh(),o<=e)return a!=(t=s[s.length-1])&&this.activate(t);if(a&&e<n[0])return this.activeTarget=null,this.clear();for(t=n.length;t--;)a!=s[t]&&e>=n[t]&&(n[t+1]===undefined||e<n[t+1])&&this.activate(s[t])},n.prototype.activate=function(t){this.activeTarget=t,this.clear();var e=this.selector+'[data-target="'+t+'"],'+this.selector+'[href="'+t+'"]',i=s(e).parents("li").addClass("active");i.parent(".dropdown-menu").length&&(i=i.closest("li.dropdown").addClass("active")),i.trigger("activate.bs.scrollspy")},n.prototype.clear=function(){s(this.selector).parentsUntil(this.options.target,".active").removeClass("active")};var t=s.fn.scrollspy;s.fn.scrollspy=e,s.fn.scrollspy.Constructor=n,s.fn.scrollspy.noConflict=function(){return s.fn.scrollspy=t,this},s(window).on("load.bs.scrollspy.data-api",function(){s('[data-spy="scroll"]').each(function(){var t=s(this);e.call(t,t.data())})})}(jQuery),function(r){"use strict";var a=function(t){this.element=r(t)};function e(i){return this.each(function(){var t=r(this),e=t.data("bs.tab");e||t.data("bs.tab",e=new a(this)),"string"==typeof i&&e[i]()})}a.VERSION="3.4.1",a.TRANSITION_DURATION=150,a.prototype.show=function(){var t=this.element,e=t.closest("ul:not(.dropdown-menu)"),i=t.data("target");if(i||(i=(i=t.attr("href"))&&i.replace(/.*(?=#[^\s]*$)/,"")),!t.parent("li").hasClass("active")){var o=e.find(".active:last a"),n=r.Event("hide.bs.tab",{relatedTarget:t[0]}),s=r.Event("show.bs.tab",{relatedTarget:o[0]});if(o.trigger(n),t.trigger(s),!s.isDefaultPrevented()&&!n.isDefaultPrevented()){var a=r(document).find(i);this.activate(t.closest("li"),e),this.activate(a,a.parent(),function(){o.trigger({type:"hidden.bs.tab",relatedTarget:t[0]}),t.trigger({type:"shown.bs.tab",relatedTarget:o[0]})})}}},a.prototype.activate=function(t,e,i){var o=e.find("> .active"),n=i&&r.support.transition&&(o.length&&o.hasClass("fade")||!!e.find("> .fade").length);function s(){o.removeClass("active").find("> .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),t.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),n?(t[0].offsetWidth,t.addClass("in")):t.removeClass("fade"),t.parent(".dropdown-menu").length&&t.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),i&&i()}o.length&&n?o.one("bsTransitionEnd",s).emulateTransitionEnd(a.TRANSITION_DURATION):s(),o.removeClass("in")};var t=r.fn.tab;r.fn.tab=e,r.fn.tab.Constructor=a,r.fn.tab.noConflict=function(){return r.fn.tab=t,this};var i=function(t){t.preventDefault(),e.call(r(this),"show")};r(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',i).on("click.bs.tab.data-api",'[data-toggle="pill"]',i)}(jQuery),function(l){"use strict";var h=function(t,e){this.options=l.extend({},h.DEFAULTS,e);var i=this.options.target===h.DEFAULTS.target?l(this.options.target):l(document).find(this.options.target);this.$target=i.on("scroll.bs.affix.data-api",l.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",l.proxy(this.checkPositionWithEventLoop,this)),this.$element=l(t),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};function i(o){return this.each(function(){var t=l(this),e=t.data("bs.affix"),i="object"==typeof o&&o;e||t.data("bs.affix",e=new h(this,i)),"string"==typeof o&&e[o]()})}h.VERSION="3.4.1",h.RESET="affix affix-top affix-bottom",h.DEFAULTS={offset:0,target:window},h.prototype.getState=function(t,e,i,o){var n=this.$target.scrollTop(),s=this.$element.offset(),a=this.$target.height();if(null!=i&&"top"==this.affixed)return n<i&&"top";if("bottom"==this.affixed)return null!=i?!(n+this.unpin<=s.top)&&"bottom":!(n+a<=t-o)&&"bottom";var r=null==this.affixed,l=r?n:s.top;return null!=i&&n<=i?"top":null!=o&&t-o<=l+(r?a:e)&&"bottom"},h.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(h.RESET).addClass("affix");var t=this.$target.scrollTop(),e=this.$element.offset();return this.pinnedOffset=e.top-t},h.prototype.checkPositionWithEventLoop=function(){setTimeout(l.proxy(this.checkPosition,this),1)},h.prototype.checkPosition=function(){if(this.$element.is(":visible")){var t=this.$element.height(),e=this.options.offset,i=e.top,o=e.bottom,n=Math.max(l(document).height(),l(document.body).height());"object"!=typeof e&&(o=i=e),"function"==typeof i&&(i=e.top(this.$element)),"function"==typeof o&&(o=e.bottom(this.$element));var s=this.getState(n,t,i,o);if(this.affixed!=s){null!=this.unpin&&this.$element.css("top","");var a="affix"+(s?"-"+s:""),r=l.Event(a+".bs.affix");if(this.$element.trigger(r),r.isDefaultPrevented())return;this.affixed=s,this.unpin="bottom"==s?this.getPinnedOffset():null,this.$element.removeClass(h.RESET).addClass(a).trigger(a.replace("affix","affixed")+".bs.affix")}"bottom"==s&&this.$element.offset({top:n-t-o})}};var t=l.fn.affix;l.fn.affix=i,l.fn.affix.Constructor=h,l.fn.affix.noConflict=function(){return l.fn.affix=t,this},l(window).on("load",function(){l('[data-spy="affix"]').each(function(){var t=l(this),e=t.data();e.offset=e.offset||{},null!=e.offsetBottom&&(e.offset.bottom=e.offsetBottom),null!=e.offsetTop&&(e.offset.top=e.offsetTop),i.call(t,e)})})}(jQuery);
	/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(12)))

/***/ }),
/* 727 */
/***/ (function(module, exports, __webpack_require__) {

	var BucketCache, bisect, covers, insort, ref, toTime,
	  slice = [].slice;
	
	ref = __webpack_require__(109), insort = ref.insort, bisect = ref.bisect;
	
	toTime = function(date) {
	  if ((date != null ? date.getTime : void 0) != null) {
	    return date.getTime();
	  } else {
	    return date;
	  }
	};
	
	covers = function(start, end, offsetItems, resolution) {
	  var i, item, last, len, others, previous;
	  if (offsetItems.length === 0) {
	    return false;
	  }
	  last = offsetItems[offsetItems.length - 1];
	  if (offsetItems[0].offset > start || last.offset + last.width < end) {
	    return false;
	  }
	  previous = offsetItems[0], others = 2 <= offsetItems.length ? slice.call(offsetItems, 1) : [];
	  for (i = 0, len = others.length; i < len; i++) {
	    item = others[i];
	    if (previous.offset + previous.width < item.offset) {
	      return false;
	    }
	    previous = item;
	  }
	  return true;
	};
	
	BucketCache = (function() {
	  function BucketCache() {
	    this.clear();
	  }
	
	  BucketCache.prototype.clear = function() {
	    this.resolutions = [];
	    return this.cache = {};
	  };
	
	  BucketCache.prototype.getBucket = function(resolution, offset) {
	    var ref1, time;
	    time = toTime(offset);
	    return (ref1 = this.cache[resolution]) != null ? ref1.buckets[time] : void 0;
	  };
	
	  BucketCache.prototype.getBucketApproximate = function(resolution, offset) {
	    var bucket, denom, nextOffset, nextOffsetIndex, nextResolution, res, resolutionIndex, time, value;
	    time = toTime(offset);
	    bucket = this.getBucket(resolution, time);
	    if (bucket != null) {
	      return [bucket, true];
	    }
	    resolutionIndex = bisect(this.resolutions, resolution);
	    while (resolutionIndex >= 0) {
	      nextResolution = this.resolutions[resolutionIndex];
	      resolutionIndex -= 1;
	      if (nextResolution == null) {
	        continue;
	      }
	      res = this.cache[nextResolution];
	      nextOffsetIndex = bisect(res.offsets, time) - 1;
	      nextOffset = res.offsets[nextOffsetIndex];
	      if (nextOffset <= offset && (nextOffset + nextResolution) >= (time + resolution)) {
	        value = res.buckets[nextOffset].count;
	        denom = nextResolution / resolution;
	        return [Math.round(value / denom), false];
	      }
	    }
	    return [0, false];
	  };
	
	  BucketCache.prototype.hasBucket = function(resolution, offset) {
	    var ref1, time;
	    time = toTime(offset);
	    return ((ref1 = this.cache[resolution]) != null ? ref1.buckets[time] : void 0) != null;
	  };
	
	  BucketCache.prototype.setBucket = function(resolution, offset, width, count) {
	    var time;
	    time = toTime(offset);
	    this.prepareResolution(resolution);
	    this.cache[resolution].buckets[time] = {
	      offset: time,
	      count: count,
	      width: width
	    };
	    return insort(this.cache[resolution].offsets, time);
	  };
	
	  BucketCache.prototype.reserveBucket = function(resolution, offset) {
	    var time;
	    time = toTime(offset);
	    this.prepareResolution(resolution);
	    if (!this.hasBucket(resolution, time)) {
	      return this.cache[resolution].buckets[time] = null;
	    }
	  };
	
	  BucketCache.prototype.isBucketReserved = function(resolution, offset) {
	    var time;
	    time = toTime(offset);
	    if (this.cache[resolution] != null) {
	      return this.cache[resolution].buckets[time] === null;
	    }
	  };
	
	  BucketCache.prototype.hasBucketOrReserved = function(resolution, offset) {
	    var time;
	    time = toTime(offset);
	    return this.hasBucket(resolution, time) || this.isBucketReserved(resolution, time);
	  };
	
	  BucketCache.prototype.isCountLower = function(start, end, lowerThan) {
	    var count, endTime, i, len, offsetsIntersecting, offsetsWithin, ref1, res, resolution, startTime, sum, sumReducer;
	    startTime = toTime(start);
	    endTime = toTime(end);
	    count = 0;
	    sumReducer = function(acc, offset) {
	      return acc + res.buckets[offset].count;
	    };
	    ref1 = this.resolutions;
	    for (i = 0, len = ref1.length; i < len; i++) {
	      resolution = ref1[i];
	      res = this.cache[resolution];
	      offsetsWithin = res.offsets.filter(function(offset) {
	        return offset >= startTime && (offset + resolution) <= endTime;
	      });
	      sum = offsetsWithin.reduce(sumReducer, 0);
	      if (sum > lowerThan) {
	        return [false, true];
	      }
	      offsetsIntersecting = res.offsets.filter(function(offset) {
	        return (offset + resolution) > startTime && offset < endTime;
	      });
	      sum = offsetsIntersecting.reduce(sumReducer, 0);
	      if (sum < lowerThan && covers(startTime, endTime, offsetsIntersecting, resolution)) {
	        return [true, true];
	      }
	    }
	    return [false, false];
	  };
	
	  BucketCache.prototype.hasResolution = function(resolution) {
	    return this.cache[resolution] != null;
	  };
	
	  BucketCache.prototype.prepareResolution = function(resolution) {
	    if (!this.hasResolution(resolution)) {
	      this.cache[resolution] = {
	        buckets: {},
	        offsets: []
	      };
	      return insort(this.resolutions, resolution);
	    }
	  };
	
	  return BucketCache;
	
	})();
	
	module.exports = BucketCache;


/***/ }),
/* 728 */
/***/ (function(module, exports, __webpack_require__) {

	var RecordCache, after, intersects, merged, ref, split, subtract,
	  slice = [].slice;
	
	ref = __webpack_require__(109), after = ref.after, split = ref.split, intersects = ref.intersects, merged = ref.merged, subtract = ref.subtract;
	
	RecordCache = (function() {
	  function RecordCache(idProperty) {
	    this.idProperty = idProperty;
	    if (this.idProperty) {
	      this.predicate = function(a, b) {
	        return a[2][this.idProperty] === b[2][this.idProperty];
	      };
	    } else {
	      this.predicate = function(a, b) {
	        return a[0] === b[0] && a[1] === b[1];
	      };
	    }
	    this.clear();
	  }
	
	  RecordCache.prototype.clear = function() {
	    this.buckets = [];
	    return this.reservedBuckets = [];
	  };
	
	  RecordCache.prototype.add = function(start, end, records) {
	    var bucketEnd, bucketRecords, bucketStart, combined, high, i, intersecting, len, low, notIntersecting, ref1;
	    this.unReserve(start, end);
	    intersecting = this.getIntersecting(start, end);
	    notIntersecting = this.buckets.filter(function(arg) {
	      var endA, startA;
	      startA = arg[0], endA = arg[1];
	      return !intersects([start, end], [startA, endA]);
	    });
	    low = start;
	    high = end;
	    combined = records;
	    for (i = 0, len = intersecting.length; i < len; i++) {
	      ref1 = intersecting[i], bucketStart = ref1[0], bucketEnd = ref1[1], bucketRecords = ref1[2];
	      if (bucketStart < low) {
	        low = bucketStart;
	      }
	      if (bucketEnd > high) {
	        high = bucketEnd;
	      }
	      combined = merged(combined, bucketRecords, this.predicate);
	    }
	    this.buckets = notIntersecting;
	    return this.buckets.push([low, high, combined]);
	  };
	
	  RecordCache.prototype.get = function(start, end) {
	    var first, i, intersecting, intersection, len, others, records;
	    intersecting = this.getIntersecting(start, end);
	    if (intersecting.length === 0) {
	      return [];
	    }
	    first = intersecting[0], others = 2 <= intersecting.length ? slice.call(intersecting, 1) : [];
	    records = first[2];
	    for (i = 0, len = others.length; i < len; i++) {
	      intersection = others[i];
	      records = merged(records, intersection[2], this.predicate);
	    }
	    return records;
	  };
	
	  RecordCache.prototype.reserve = function(start, end) {
	    var intersecting, max, min, nonIntersecting, ref1;
	    ref1 = split(this.reservedBuckets, function(arg) {
	      var endA, startA;
	      startA = arg[0], endA = arg[1];
	      return intersects([start, end], [startA, endA]);
	    }), intersecting = ref1[0], nonIntersecting = ref1[1];
	    if (intersecting.length) {
	      min = new Date(d3.min(intersecting, function(b) {
	        return b[0];
	      }));
	      max = new Date(d3.max(intersecting, function(b) {
	        return b[1];
	      }));
	      if (start < min) {
	        min = start;
	      }
	      if (start > max) {
	        max = end;
	      }
	      nonIntersecting.push([min, max]);
	    } else {
	      nonIntersecting.push([start, end]);
	    }
	    return this.reservedBuckets = nonIntersecting;
	  };
	
	  RecordCache.prototype.unReserve = function(start, end) {
	    var int, intersecting, intervals, nonIntersecting, ref1;
	    ref1 = split(this.reservedBuckets, function(arg) {
	      var endA, startA;
	      startA = arg[0], endA = arg[1];
	      return intersects([start, end], [startA, endA]);
	    }), intersecting = ref1[0], nonIntersecting = ref1[1];
	    int = [start, end];
	    intervals = intersecting.map(function(interval) {
	      return subtract(interval, int);
	    }).reduce(function(acc, curr) {
	      return acc.concat(curr);
	    }, []);
	    return this.reservedBuckets = nonIntersecting.concat(intervals);
	  };
	
	  RecordCache.prototype.getMissing = function(start, end) {
	    var bucket, i, intersecting, interval, intervals, j, len, len1, newIntervals;
	    intersecting = this.getIntersecting(start, end, true);
	    intervals = [[start, end]];
	    for (i = 0, len = intersecting.length; i < len; i++) {
	      bucket = intersecting[i];
	      newIntervals = [];
	      for (j = 0, len1 = intervals.length; j < len1; j++) {
	        interval = intervals[j];
	        newIntervals = newIntervals.concat(subtract(interval, bucket));
	      }
	      intervals = newIntervals;
	    }
	    return intervals;
	  };
	
	  RecordCache.prototype.getIntersecting = function(start, end, includeReserved) {
	    var records;
	    if (includeReserved == null) {
	      includeReserved = false;
	    }
	    records = this.buckets.filter(function(arg) {
	      var endA, startA;
	      startA = arg[0], endA = arg[1];
	      return intersects([start, end], [startA, endA]);
	    });
	    if (includeReserved) {
	      records = records.concat(this.reservedBuckets.filter(function(arg) {
	        var endA, startA;
	        startA = arg[0], endA = arg[1];
	        return intersects([start, end], [startA, endA]);
	      }));
	    }
	    return records;
	  };
	
	  return RecordCache;
	
	})();
	
	module.exports = RecordCache;


/***/ }),
/* 729 */
/***/ (function(module, exports, __webpack_require__) {

	var BucketDataset, EventEmitter, PathDataset, RecordDataset, Source, TimeSlider, after, centerTooltipOn, d3, intersects, merged, offsetDate, parseDuration, pixelWidth, ref, split, subtract,
	  extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
	  hasProp = {}.hasOwnProperty,
	  slice = [].slice;
	
	d3 = __webpack_require__(350);
	
	ref = __webpack_require__(109), split = ref.split, intersects = ref.intersects, merged = ref.merged, after = ref.after, subtract = ref.subtract, parseDuration = ref.parseDuration, offsetDate = ref.offsetDate, centerTooltipOn = ref.centerTooltipOn, pixelWidth = ref.pixelWidth;
	
	EventEmitter = __webpack_require__(317);
	
	RecordDataset = __webpack_require__(316);
	
	BucketDataset = __webpack_require__(730);
	
	PathDataset = __webpack_require__(731);
	
	TimeSlider = (function(superClass) {
	  extend(TimeSlider, superClass);
	
	  function TimeSlider(element1, options) {
	    var base, base1, base2, base3, base4, base5, base6, base7, base8, base9, customFormats, definition, domain, fn, j, len, maxScale, minScale, ref1;
	    this.element = element1;
	    this.options = options != null ? options : {};
	    TimeSlider.__super__.constructor.call(this, this.element);
	    this.brushTooltip = this.options.brushTooltip;
	    this.brushTooltipOffset = [30, 20];
	    this.tooltip = d3.select(this.element).append("div").attr("class", "timeslider-tooltip").style("opacity", 0);
	    this.tooltipBrushMin = d3.select(this.element).append("div").attr("class", "timeslider-tooltip").style("opacity", 0);
	    this.tooltipBrushMax = d3.select(this.element).append("div").attr("class", "timeslider-tooltip").style("opacity", 0);
	    this.tooltipFormatter = this.options.tooltipFormatter || function(record) {
	      var ref1, ref2;
	      return ((ref1 = record[2]) != null ? ref1.id : void 0) || ((ref2 = record[2]) != null ? ref2.name : void 0);
	    };
	    this.binTooltipFormatter = this.options.binTooltipFormatter || (function(_this) {
	      return function(bin) {
	        return bin.map(_this.tooltipFormatter).filter(function(tooltip) {
	          return tooltip != null;
	        }).join("<br>");
	      };
	    })(this);
	    this.originalDisplay = this.element.style.display;
	    this.svg = d3.select(this.element).append('svg').attr('class', 'timeslider');
	
	    /* TODO: what does this do??? */
	    this.useBBox = false;
	    if (this.svg[0][0].clientWidth === 0) {
	      d3.select(this.element).select('svg').append('rect').attr('width', '100%').attr('height', '100%').attr('opacity', '0');
	      this.useBBox = true;
	    }
	    if (this.useBBox) {
	      if (this.svg[0][0].getBoundingClientRect) {
	        this.options.width = this.svg[0][0].getBoundingClientRect().width;
	        this.options.height = this.svg[0][0].getBoundingClientRect().height;
	      } else {
	        this.options.width = this.svg[0][0].getBBox().width;
	        this.options.height = this.svg[0][0].getBBox().height;
	      }
	    } else {
	      this.options.width = this.svg[0][0].clientWidth;
	      this.options.height = this.svg[0][0].clientHeight;
	    }
	    if (this.options.alternativeBrush) {
	      this.options.height = this.options.height - 18;
	    }
	
	    /* END-TODO */
	    this.options.selectionLimit = this.options.selectionLimit ? parseDuration(this.options.selectionLimit) : null;
	    (base = this.options).brush || (base.brush = {});
	    (base1 = this.options.brush).start || (base1.start = this.options.start);
	    if (this.options.selectionLimit) {
	      (base2 = this.options.brush).end || (base2.end = offsetDate(this.options.brush.start, this.options.selectionLimit));
	    } else {
	      (base3 = this.options.brush).end || (base3.end = new Date(new Date(this.options.brush.start).setDate(this.options.brush.start.getDate() + 3)));
	    }
	    this.selectionConstraint = [offsetDate(this.options.brush.start, -this.options.selectionLimit), offsetDate(this.options.brush.end, this.options.selectionLimit)];
	    domain = this.options.domain;
	    this.options.displayLimit = this.options.displayLimit ? parseDuration(this.options.displayLimit) : null;
	    (base4 = this.options).display || (base4.display = {});
	    if (!this.options.display.start && this.options.displayLimit) {
	      this.options.display.start = offsetDate(domain.end, -this.options.displayLimit);
	    } else {
	      (base5 = this.options.display).start || (base5.start = domain.start);
	    }
	    (base6 = this.options.display).end || (base6.end = domain.end);
	    if (this.options.displayLimit !== null && (this.options.display.end - this.options.display.start) > this.options.displayLimit * 1000) {
	      this.options.display.start = offsetDate(this.options.display.end, -this.options.displayLimit);
	    }
	    (base7 = this.options).debounce || (base7.debounce = 50);
	    (base8 = this.options).ticksize || (base8.ticksize = 3);
	    (base9 = this.options).datasets || (base9.datasets = []);
	    this.recordFilter = this.options.recordFilter;
	    this.datasets = {};
	    this.ordinal = 0;
	    this.simplifyDate = d3.time.format.utc("%d.%m.%Y - %H:%M:%S");
	    customFormats = d3.time.format.utc.multi([
	      [
	        ".%L", function(d) {
	          return d.getUTCMilliseconds();
	        }
	      ], [
	        ":%S", function(d) {
	          return d.getUTCSeconds();
	        }
	      ], [
	        "%H:%M", function(d) {
	          return d.getUTCMinutes();
	        }
	      ], [
	        "%H:%M", function(d) {
	          return d.getUTCHours();
	        }
	      ], [
	        "%b %d %Y ", function(d) {
	          return d.getUTCDay() && d.getUTCDate() !== 1;
	        }
	      ], [
	        "%b %d %Y", function(d) {
	          return d.getUTCDate() !== 1;
	        }
	      ], [
	        "%B %Y", function(d) {
	          return d.getUTCMonth();
	        }
	      ], [
	        "%Y", function() {
	          return true;
	        }
	      ]
	    ]);
	    this.scales = {
	      x: d3.time.scale.utc().domain([this.options.display.start, this.options.display.end]).range([0, this.options.width]),
	      y: d3.scale.linear().range([this.options.height - 29, 0])
	    };
	    this.axis = {
	      x: d3.svg.axis().scale(this.scales.x).innerTickSize(this.options.height - 15).tickFormat(customFormats),
	      y: d3.svg.axis().scale(this.scales.y).orient("left")
	    };
	    this.svg.append('g').attr('class', 'mainaxis').call(this.axis.x);
	    this.svg.select('.mainaxis').append('rect').attr('class', 'mainaxis-overlay').style('opacity', 0).style('fill', '#666').attr('height', this.options.height - 22).attr('width', this.options.width);
	    d3.select(this.element).select('g.mainaxis .domain').attr('transform', "translate(0, " + (this.options.height - 18) + ")");
	    this.setBrushTooltip = (function(_this) {
	      return function(active) {
	        return _this.brushTooltip = active;
	      };
	    })(this);
	    this.setBrushTooltipOffset = (function(_this) {
	      return function(offset) {
	        return _this.brushTooltipOffset = offset;
	      };
	    })(this);
	    this.brush = d3.svg.brush().x(this.scales.x).on('brushstart', (function(_this) {
	      return function() {
	        _this.brushing = true;
	        _this.prevTranslate = _this.options.zoom.translate();
	        _this.prevScale = _this.options.zoom.scale();
	        _this.selectionConstraint = null;
	        if (_this.brushTooltip) {
	          _this.tooltipBrushMin.transition().duration(100).style("opacity", .9);
	          return _this.tooltipBrushMax.transition().duration(100).style("opacity", .9);
	        }
	      };
	    })(this)).on('brushend', (function(_this) {
	      return function() {
	        _this.brushing = false;
	        _this.options.zoom.translate(_this.prevTranslate);
	        _this.options.zoom.scale(_this.prevScale);
	        _this.checkBrush();
	        _this.redraw();
	        _this.selectionConstraint = null;
	        _this.dispatch('selectionChanged', {
	          start: _this.brush.extent()[0],
	          end: _this.brush.extent()[1]
	        });
	        if (_this.brushTooltip) {
	          _this.tooltipBrushMin.transition().duration(100).style("opacity", 0);
	          _this.tooltipBrushMax.transition().duration(100).style("opacity", 0);
	        }
	        return _this.wasBrushing = true;
	      };
	    })(this)).on('brush', (function(_this) {
	      return function() {
	        var high, low, ref1, ref2;
	        if (_this.options.selectionLimit !== null) {
	          if (_this.selectionConstraint === null) {
	            ref1 = _this.brush.extent(), low = ref1[0], high = ref1[1];
	            _this.selectionConstraint = [offsetDate(high, -_this.options.selectionLimit), offsetDate(low, _this.options.selectionLimit)];
	          } else {
	            if (d3.event.mode === "move") {
	              ref2 = _this.brush.extent(), low = ref2[0], high = ref2[1];
	              _this.selectionConstraint = [offsetDate(high, -_this.options.selectionLimit), offsetDate(low, _this.options.selectionLimit)];
	            }
	            _this.checkBrush();
	          }
	        }
	        return _this.redraw();
	      };
	    })(this)).extent([this.options.brush.start, this.options.brush.end]);
	    this.svg.append('g').attr('class', 'highlight').selectAll('rect').attr('height', "" + (this.options.height - 19)).attr('y', 0);
	    this.gBrush = this.svg.append('g').attr('class', 'brush').call(this.brush);
	    if (!this.options.alternativeBrush) {
	      this.gBrush.selectAll('rect').attr('height', "" + (this.options.height - 19)).attr('y', 0);
	    } else {
	      this.gBrush.selectAll('rect').attr('height', 4).attr('y', "" + (this.options.height + 4));
	      this.gBrush.selectAll('.resize').append('circle').attr('class', 'handle-circle').attr('fill', '#000000').attr('cursor', 'ew-resize').attr('r', 8).attr('cx', 0).attr('cy', this.options.height + 6);
	    }
	    if (this.brushTooltip) {
	      this.gBrush.selectAll('.resize.w').on('mouseover', (function(_this) {
	        return function() {
	          return _this.tooltipBrushMin.transition().duration(100).style('opacity', 0.9);
	        };
	      })(this)).on('mouseout', (function(_this) {
	        return function() {
	          if (!_this.brushing) {
	            return _this.tooltipBrushMin.transition().duration(100).style('opacity', 0);
	          }
	        };
	      })(this));
	      this.gBrush.selectAll('.resize.e').on('mouseover', (function(_this) {
	        return function() {
	          return _this.tooltipBrushMax.transition().duration(100).style('opacity', 0.9);
	        };
	      })(this)).on('mouseout', (function(_this) {
	        return function() {
	          if (!_this.brushing) {
	            return _this.tooltipBrushMax.transition().duration(100).style('opacity', 0);
	          }
	        };
	      })(this));
	    }
	    this.svg.append('g').attr('class', 'datasets').attr('width', this.options.width).attr('height', this.options.height).attr('transform', "translate(0, " + (this.options.height - 23) + ")");
	    d3.select(window).on('resize', (function(_this) {
	      return function() {
	        var svg;
	        svg = d3.select(_this.element).select('svg.timeslider')[0][0];
	        if (_this.useBBox) {
	          if (svg.getBoundingClientRect) {
	            _this.options.width = svg.getBoundingClientRect().width;
	          } else {
	            _this.options.width = svg.getBBox().width;
	          }
	        } else {
	          _this.options.width = svg.clientWidth;
	        }
	        _this.scales.x.range([0, _this.options.width]);
	        return _this.redraw();
	      };
	    })(this));
	    minScale = (this.options.display.start - this.options.display.end) / (this.options.domain.start - this.options.domain.end);
	    if (!this.options.constrain) {
	      minScale = 0;
	    }
	    maxScale = Math.abs(this.options.display.start - this.options.display.end) / 2000;
	    this.options.zoom = d3.behavior.zoom().x(this.scales.x).size([this.options.width, this.options.height]).scaleExtent([minScale, maxScale]).on('zoomstart', (function(_this) {
	      return function() {
	        _this.prevScale2 = _this.options.zoom.scale();
	        return _this.prevDomain = _this.scales.x.domain();
	      };
	    })(this)).on('zoom', (function(_this) {
	      return function() {
	        var end, high, low, ref1, ref2, ref3, ref4, start;
	        if (_this.brushing) {
	          _this.options.zoom.scale(_this.prevScale);
	          return _this.options.zoom.translate(_this.prevTranslate);
	        } else {
	          if (_this.options.displayLimit !== null && d3.event.scale < _this.prevScale2) {
	            ref1 = _this.scales.x.domain(), low = ref1[0], high = ref1[1];
	            if ((high.getTime() - low.getTime()) > _this.options.displayLimit * 1000) {
	              ref2 = _this.prevDomain, start = ref2[0], end = ref2[1];
	            } else {
	              ref3 = _this.scales.x.domain(), start = ref3[0], end = ref3[1];
	            }
	          } else {
	            ref4 = _this.scales.x.domain(), start = ref4[0], end = ref4[1];
	          }
	          _this.center(start, end, false);
	          _this.prevScale2 = _this.options.zoom.scale();
	          return _this.prevDomain = _this.scales.x.domain();
	        }
	      };
	    })(this)).on('zoomend', (function(_this) {
	      return function() {
	        var dataset, display;
	        display = _this.scales.x.domain();
	        _this.dispatch('displayChanged', {
	          start: display[0],
	          end: display[1]
	        });
	        if (!_this.wasBrushing) {
	          for (dataset in _this.datasets) {
	            _this.reloadDataset(dataset);
	          }
	        }
	        return _this.wasBrushing = false;
	      };
	    })(this));
	    this.svg.call(this.options.zoom);
	    ref1 = this.options.datasets;
	    fn = (function(_this) {
	      return function(definition) {
	        return _this.addDataset(definition);
	      };
	    })(this);
	    for (j = 0, len = ref1.length; j < len; j++) {
	      definition = ref1[j];
	      fn(definition);
	    }
	    if (this.options.display) {
	      this.center(this.options.display.start, this.options.display.end);
	    }
	    if (this.options.controls) {
	      d3.select(this.element).append("div").attr("id", "pan-left").attr("class", "control").on("click", (function(_this) {
	        return function() {
	          var d, e, ref2, s;
	          ref2 = _this.scales.x.domain(), s = ref2[0], e = ref2[1];
	          d = Math.abs(e - s) / 10;
	          s = new Date(s.getTime() - d);
	          e = new Date(e.getTime() - d);
	          return _this.center(s, e);
	        };
	      })(this)).append("div").attr("class", "arrow-left");
	      d3.select(this.element).append("div").attr("id", "pan-right").attr("class", "control").on("click", (function(_this) {
	        return function() {
	          var d, e, ref2, s;
	          ref2 = _this.scales.x.domain(), s = ref2[0], e = ref2[1];
	          d = Math.abs(e - s) / 10;
	          s = new Date(s.getTime() + d);
	          e = new Date(e.getTime() + d);
	          return _this.center(s, e);
	        };
	      })(this)).append("div").attr("class", "arrow-right");
	      d3.select(this.element).append("div").attr("id", "zoom-in").attr("class", "control").text("+").on("click", (function(_this) {
	        return function() {
	          var d, e, ref2, ref3, s;
	          ref2 = _this.scales.x.domain(), s = ref2[0], e = ref2[1];
	          d = Math.abs(e - s) / 10;
	          s = new Date(s.getTime() + (d / 2));
	          e = new Date(e.getTime() - (d / 2));
	          if ((e - s) < 2 * 1000) {
	            ref3 = _this.scales.x.domain(), s = ref3[0], e = ref3[1];
	          }
	          return _this.center(s, e);
	        };
	      })(this));
	      d3.select(this.element).append("div").attr("id", "zoom-out").attr("class", "control").html("&ndash;").on("click", (function(_this) {
	        return function() {
	          var d, e, high, low, ref2, ref3, ref4, s;
	          ref2 = _this.scales.x.domain(), s = ref2[0], e = ref2[1];
	          d = Math.abs(e - s) / 10;
	          s = new Date(s.getTime() - (d / 2));
	          e = new Date(e.getTime() + (d / 2));
	          ref3 = _this.scales.x.domain(), low = ref3[0], high = ref3[1];
	          if (_this.options.displayLimit !== null && (e - s) > _this.options.displayLimit * 1000) {
	            ref4 = _this.scales.x.domain(), s = ref4[0], e = ref4[1];
	          }
	          return _this.center(s, e);
	        };
	      })(this));
	      d3.select(this.element).append("div").attr("id", "reload").attr("class", "control").on("click", (function(_this) {
	        return function() {
	          var dataset, results;
	          results = [];
	          for (dataset in _this.datasets) {
	            results.push(_this.reloadDataset(dataset, true));
	          }
	          return results;
	        };
	      })(this)).append("div").attr("class", "reload-arrow");
	    }
	  }
	
	
	  /*
	  ## Private API
	   */
	
	  TimeSlider.prototype.checkBrush = function() {
	    var a, b, ref1, ref2, ref3, ref4, ref5, ref6, ref7, x, y;
	    if (this.selectionConstraint || ((ref1 = this.highlightInterval) != null ? ref1.constrain : void 0)) {
	      if (this.selectionConstraint) {
	        ref2 = this.selectionConstraint, a = ref2[0], b = ref2[1];
	      }
	      if (!this.selectionConstraint) {
	        ref3 = [this.highlightInterval.start, this.highlightInterval.end], a = ref3[0], b = ref3[1];
	      }
	      if ((ref4 = this.highlightInterval) != null ? ref4.constrain : void 0) {
	        ref5 = [a > this.highlightInterval.start ? a : this.highlightInterval.start, b < this.highlightInterval.end ? b : this.highlightInterval.end], a = ref5[0], b = ref5[1];
	      }
	      ref6 = this.brush.extent(), x = ref6[0], y = ref6[1];
	      if (x > y) {
	        ref7 = [y, x], x = ref7[0], y = ref7[1];
	      }
	      if (x < a) {
	        x = a;
	      }
	      if (x > b) {
	        x = b;
	      }
	      if (y > b) {
	        y = b;
	      }
	      if (y < a) {
	        y = a;
	      }
	      return this.brush.extent([x, y]);
	    }
	  };
	
	  TimeSlider.prototype.redraw = function() {
	    var brushExtent, dataset, datasetId, drawOptions, end, offheight, ref1, start;
	    this.brush.x(this.scales.x).extent(this.brush.extent());
	    d3.select(this.element).select('g.mainaxis').call(this.axis.x);
	    d3.select(this.element).select('g.brush').call(this.brush);
	    if (this.brushTooltip) {
	      offheight = 0;
	      if (this.svg[0][0].parentElement != null) {
	        offheight = this.svg[0][0].parentElement.offsetHeight;
	      } else {
	        offheight = this.svg[0][0].parentNode.offsetHeight;
	      }
	      this.tooltipBrushMin.html(this.simplifyDate(this.brush.extent()[0]));
	      this.tooltipBrushMax.html(this.simplifyDate(this.brush.extent()[1]));
	      centerTooltipOn(this.tooltipBrushMin, d3.select(this.element).select('g.brush .extent')[0][0], 'left', [0, -20]);
	      centerTooltipOn(this.tooltipBrushMax, d3.select(this.element).select('g.brush .extent')[0][0], 'right');
	    }
	    brushExtent = d3.select(this.element).select('g.brush .extent');
	    if (parseFloat(brushExtent.attr('width')) < 1) {
	      brushExtent.attr('width', 1);
	    }
	    drawOptions = {
	      height: this.options.height,
	      ticksize: this.options.ticksize,
	      scales: this.scales,
	      axes: this.axis,
	      recordFilter: this.recordFilter,
	      tooltip: this.tooltip,
	      tooltipFormatter: this.tooltipFormatter,
	      binTooltipFormatter: this.binTooltipFormatter
	    };
	    this.drawHighlights();
	    ref1 = this.scales.x.domain(), start = ref1[0], end = ref1[1];
	    for (datasetId in this.datasets) {
	      dataset = this.datasets[datasetId];
	      if (!dataset.lineplot) {
	        dataset.draw(start, end, drawOptions);
	      }
	    }
	    for (datasetId in this.datasets) {
	      dataset = this.datasets[datasetId];
	      if (dataset.lineplot) {
	        dataset.draw(start, end, drawOptions);
	      }
	    }
	    return d3.select(this.element).selectAll('.mainaxis g.tick text').classed('tick-date', function(d) {
	      return !(d.getUTCMilliseconds() | d.getUTCSeconds() | d.getUTCMinutes() | d.getUTCHours());
	    });
	  };
	
	  TimeSlider.prototype.drawHighlights = function() {
	    var end, height, left, right, start, width;
	    d3.select(this.element).selectAll('.highlight .interval').remove();
	    if (this.highlightInterval) {
	      start = this.highlightInterval.start;
	      end = this.highlightInterval.end;
	      left = this.scales.x(start);
	      width = pixelWidth([start, end], this.scales.x);
	      right = left + width;
	      height = this.options.height - 19;
	      d3.select(this.element).selectAll('.highlight').append('rect').attr('class', 'interval').attr('x', left).attr('width', width).attr('y', 0).attr('height', height).attr('stroke', this.highlightInterval.strokeColor).attr('stroke-width', 1).attr('fill', this.highlightInterval.fillColor);
	      if (this.highlightInterval.outsideColor) {
	        if (left > 0) {
	          d3.select(this.element).selectAll('.highlight').append('rect').attr('class', 'interval').attr('x', 0).attr('width', left).attr('y', 0).attr('height', height).attr('fill', this.highlightInterval.outsideColor);
	        }
	        return d3.select(this.element).selectAll('.highlight').append('rect').attr('class', 'interval').attr('x', right).attr('width', 2000).attr('y', 0).attr('height', height).attr('fill', this.highlightInterval.outsideColor);
	      }
	    }
	  };
	
	  TimeSlider.prototype.reloadDataset = function(datasetId, clearCaches) {
	    var dataset, end, ref1, start, syncOptions;
	    if (clearCaches == null) {
	      clearCaches = false;
	    }
	    dataset = this.datasets[datasetId];
	    ref1 = this.scales.x.domain(), start = ref1[0], end = ref1[1];
	    if (clearCaches) {
	      dataset.clearCaches();
	    }
	    syncOptions = {
	      height: this.options.height,
	      ticksize: this.options.ticksize,
	      scales: this.scales,
	      axes: this.axis,
	      recordFilter: this.recordFilter,
	      tooltip: this.tooltip,
	      tooltipFormatter: this.tooltipFormatter,
	      binTooltipFormatter: this.binTooltipFormatter
	    };
	    return dataset.sync(start, end, syncOptions);
	  };
	
	  TimeSlider.prototype.checkLoading = function() {
	    var id, isLoading;
	    isLoading = false;
	    for (id in this.datasets) {
	      if (this.datasets[id].isSyncing()) {
	        isLoading = true;
	      }
	    }
	    this.svg.classed('loading', isLoading);
	    d3.select('.reload-arrow').classed('arrowloading', isLoading);
	    if (this.isLoading !== isLoading) {
	      if (isLoading) {
	        this.dispatch('loadStart');
	      } else {
	        this.dispatch('loadEnd');
	      }
	      return this.isLoading = isLoading;
	    }
	  };
	
	
	  /*
	  ## Public API
	   */
	
	  TimeSlider.prototype.hide = function() {
	    this.element.style.display = 'none';
	    return true;
	  };
	
	  TimeSlider.prototype.show = function() {
	    this.element.style.display = this.originalDisplay;
	    return true;
	  };
	
	  TimeSlider.prototype.domain = function() {
	    var end, params, ref1, start;
	    params = 1 <= arguments.length ? slice.call(arguments, 0) : [];
	    if (params.length !== 2) {
	      return false;
	    }
	    start = new Date(params[0]);
	    end = new Date(params[1]);
	    if (end < start) {
	      ref1 = [end, start], start = ref1[0], end = ref1[1];
	    }
	    this.options.domain.start = start;
	    this.options.domain.end = end;
	    this.scales.x.domain([this.options.domain.start, this.options.domain.end]);
	    this.redraw();
	    return true;
	  };
	
	  TimeSlider.prototype.select = function() {
	    var end, params, ref1, ref2, start;
	    params = 1 <= arguments.length ? slice.call(arguments, 0) : [];
	    if (params.length !== 2) {
	      return false;
	    }
	    start = new Date(params[0]);
	    end = new Date(params[1]);
	    if (end < start) {
	      ref1 = [end, start], start = ref1[0], end = ref1[1];
	    }
	    if (start < this.options.start) {
	      start = this.options.start;
	    }
	    if (end > this.options.end) {
	      end = this.options.end;
	    }
	    if ((ref2 = this.highlightInterval) != null ? ref2.constrain : void 0) {
	      if (start < this.highlightInterval.start) {
	        start = this.highlightInterval.start;
	      }
	      if (end > this.highlightInterval.end) {
	        end = this.highlightInterval.end;
	      }
	    }
	    d3.select(this.element).select('g.brush').call(this.brush.extent([start, end]));
	    this.dispatch('selectionChanged', {
	      start: this.brush.extent()[0],
	      end: this.brush.extent()[1]
	    }, this.element);
	    return true;
	  };
	
	  TimeSlider.prototype.addDataset = function(definition) {
	    var dataset, datasetOptions, element, id, index, lineplot;
	    if (this.options.datasetIndex == null) {
	      this.options.datasetIndex = 0;
	    }
	    if (this.options.linegraphIndex == null) {
	      this.options.linegraphIndex = 0;
	    }
	    index = this.options.datasetIndex;
	    lineplot = false;
	    id = definition.id;
	    this.ordinal++;
	    if (!definition.lineplot) {
	      index = this.options.datasetIndex++;
	      this.svg.select('g.datasets').insert('g', ':first-child').attr('class', 'dataset').attr('id', "dataset-" + this.ordinal);
	    } else {
	      index = this.options.linegraphIndex++;
	      lineplot = true;
	      this.svg.select('g.datasets').append('g').attr('class', 'dataset').attr('id', "dataset-" + this.ordinal);
	    }
	    element = this.svg.select("g.datasets #dataset-" + this.ordinal);
	    datasetOptions = {
	      id: id,
	      index: index,
	      color: definition.color,
	      noBorder: definition.noBorder,
	      highlightFillColor: definition.highlightFillColor,
	      highlightStrokeColor: definition.highlightStrokeColor,
	      source: definition.source,
	      bucketSource: definition.bucketSource,
	      records: definition.records,
	      lineplot: lineplot,
	      debounceTime: this.options.debounce,
	      ordinal: this.ordinal,
	      element: element,
	      histogramThreshold: definition.histogramThreshold,
	      histogramBinCount: definition.histogramBinCount,
	      cacheRecords: definition.cacheRecords,
	      cluster: definition.cluster
	    };
	    if (definition.lineplot) {
	      dataset = new PathDataset(datasetOptions);
	    } else if (definition.bucket) {
	      dataset = new BucketDataset(datasetOptions);
	    } else {
	      dataset = new RecordDataset(datasetOptions);
	    }
	    element.data([dataset]);
	    dataset.on('syncing', (function(_this) {
	      return function() {
	        return _this.checkLoading();
	      };
	    })(this));
	    dataset.on('synced', (function(_this) {
	      return function() {
	        _this.redraw();
	        return _this.checkLoading();
	      };
	    })(this));
	    this.datasets[id] = dataset;
	    return this.reloadDataset(id);
	  };
	
	  TimeSlider.prototype.removeDataset = function(id) {
	    var dataset, i, lp, ordinal;
	    if (this.datasets[id] == null) {
	      return false;
	    }
	    dataset = this.datasets[id];
	    i = dataset.index;
	    lp = dataset.lineplot;
	    ordinal = dataset.ordinal;
	    delete this.datasets[id];
	    if (lp) {
	      this.options.linegraphIndex--;
	    } else {
	      this.options.datasetIndex--;
	    }
	    d3.select(this.element).select("g.dataset#dataset-" + ordinal).remove();
	    for (dataset in this.datasets) {
	      if (lp === this.datasets[dataset].lineplot) {
	        if (this.datasets[dataset].index > i) {
	          this.datasets[dataset].index -= 1;
	        }
	      }
	    }
	    this.redraw();
	    return true;
	  };
	
	  TimeSlider.prototype.reorderDatasets = function(ids) {
	    return d3.select(this.element).selectAll('g.dataset').sort(function(a, b) {
	      var ia, ib;
	      ia = ids.indexOf(a.id);
	      ib = ids.indexOf(b.id);
	      if (ia > ib) {
	        return -1;
	      } else if (ia < ib) {
	        return 1;
	      } else {
	        return 0;
	      }
	    });
	  };
	
	  TimeSlider.prototype.hasDataset = function(id) {
	    if (this.datasets[id] == null) {
	      return false;
	    }
	  };
	
	  TimeSlider.prototype.center = function(start, end, doReload) {
	    var dataset, diff, newEnd, newStart, ref1;
	    if (doReload == null) {
	      doReload = true;
	    }
	    start = new Date(start);
	    end = new Date(end);
	    if (end < start) {
	      ref1 = [end, start], start = ref1[0], end = ref1[1];
	    }
	    diff = end - start;
	    if (this.options.constrain && start < this.options.domain.start) {
	      start = this.options.domain.start;
	      newEnd = new Date(start.getTime() + diff);
	      end = newEnd < this.options.domain.end ? newEnd : this.options.domain.end;
	    }
	    if (this.options.constrain && end > this.options.domain.end) {
	      end = this.options.domain.end;
	      newStart = new Date(end.getTime() - diff);
	      start = newStart > this.options.domain.start ? newStart : this.options.domain.start;
	    }
	    if (this.options.displayLimit !== null && (end - start) > this.options.displayLimit * 1000) {
	      start = offsetDate(end, -this.options.displayLimit);
	    }
	    this.options.zoom.scale((this.options.display.end - this.options.display.start) / (end - start));
	    this.options.zoom.translate([this.options.zoom.translate()[0] - this.scales.x(start), 0]);
	    this.redraw();
	    if (doReload) {
	      for (dataset in this.datasets) {
	        this.reloadDataset(dataset);
	      }
	    }
	    return true;
	  };
	
	  TimeSlider.prototype.zoom = function() {
	    var diff, end, newEnd, newStart, params, ref1, start;
	    params = 1 <= arguments.length ? slice.call(arguments, 0) : [];
	    start = new Date(params[0]);
	    end = new Date(params[1]);
	    if (end < start) {
	      ref1 = [end, start], start = ref1[0], end = ref1[1];
	    }
	    diff = end - start;
	    if (this.options.constrain && start < this.options.domain.start) {
	      start = this.options.domain.start;
	      newEnd = new Date(start.getTime() + diff);
	      end = newEnd < this.options.domain.end ? newEnd : this.options.domain.end;
	    }
	    if (this.options.constrain && end > this.options.domain.end) {
	      end = this.options.domain.end;
	      newStart = new Date(end.getTime() - diff);
	      start = newStart > this.options.domain.start ? newStart : this.options.domain.start;
	    }
	    if (this.options.displayLimit !== null && (end - start) > this.options.displayLimit * 1000) {
	      start = offsetDate(end, -this.options.displayLimit);
	    }
	    d3.transition().duration(750).tween('zoom', (function(_this) {
	      return function() {
	        var iScale;
	        iScale = d3.interpolate(_this.options.zoom.scale(), (_this.options.domain.end - _this.options.domain.start) / (end - start));
	        return function(t) {
	          var iPan;
	          iPan = d3.interpolate(_this.options.zoom.translate()[0], _this.options.zoom.translate()[0] - _this.scales.x(start));
	          _this.options.zoom.scale(iScale(t));
	          _this.options.zoom.translate([iPan(t), 0]);
	          return _this.redraw();
	        };
	      };
	    })(this)).each('end', (function(_this) {
	      return function() {
	        var dataset, results;
	        results = [];
	        for (dataset in _this.datasets) {
	          results.push(_this.reloadDataset(dataset));
	        }
	        return results;
	      };
	    })(this));
	    return true;
	  };
	
	  TimeSlider.prototype.reset = function() {
	    this.zoom(this.options.domain.start, this.options.domain.end);
	    return true;
	  };
	
	  TimeSlider.prototype.setBrushTooltip = function(brushTooltip) {
	    this.brushTooltip = brushTooltip;
	  };
	
	  TimeSlider.prototype.setBrushTooltipOffset = function(brushTooltipOffset) {
	    this.brushTooltipOffset = brushTooltipOffset;
	  };
	
	  TimeSlider.prototype.setRecordFilter = function(recordFilter) {
	    this.recordFilter = recordFilter;
	    this.redraw();
	    return true;
	  };
	
	  TimeSlider.prototype.setTooltipFormatter = function(tooltipFormatter) {
	    this.tooltipFormatter = tooltipFormatter;
	  };
	
	  TimeSlider.prototype.setBinTooltipFormatter = function(binTooltipFormatter) {
	    this.binTooltipFormatter = binTooltipFormatter;
	  };
	
	  TimeSlider.prototype.setHighlightInterval = function(start, end, fillColor, strokeColor, outsideColor, constrain) {
	    if (constrain == null) {
	      constrain = false;
	    }
	    if (start && end) {
	      this.highlightInterval = {
	        start: start,
	        end: end,
	        fillColor: fillColor,
	        strokeColor: strokeColor,
	        outsideColor: outsideColor,
	        constrain: constrain
	      };
	      if (constrain) {
	        this.checkBrush();
	      }
	    } else {
	      this.highlightInterval = null;
	    }
	    return this.redraw();
	  };
	
	  TimeSlider.prototype.setRecordHighlights = function(datasetId, intervals) {
	    var dataset;
	    if (intervals == null) {
	      intervals = [];
	    }
	    dataset = this.datasets[datasetId];
	    if (dataset != null) {
	      dataset.setRecordHighlights(intervals);
	      return this.redraw();
	    }
	  };
	
	  return TimeSlider;
	
	})(EventEmitter);
	
	Source = (function() {
	  function Source() {}
	
	  Source.prototype.fetch = function(start, end, params, callback) {};
	
	  return Source;
	
	})();
	
	module.exports = TimeSlider;


/***/ }),
/* 730 */
/***/ (function(module, exports, __webpack_require__) {

	var BucketCache, BucketDataset, RecordDataset, after, centerTooltipOn, intersects, ref,
	  extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
	  hasProp = {}.hasOwnProperty;
	
	RecordDataset = __webpack_require__(316);
	
	BucketCache = __webpack_require__(727);
	
	ref = __webpack_require__(109), after = ref.after, centerTooltipOn = ref.centerTooltipOn, intersects = ref.intersects;
	
	BucketDataset = (function(superClass) {
	  extend(BucketDataset, superClass);
	
	  function BucketDataset(options) {
	    var currentBucketSyncState, lastBucketSyncState;
	    BucketDataset.__super__.constructor.call(this, options);
	    this.bucketCache = new BucketCache();
	    this.bucketSource = options.bucketSource;
	    currentBucketSyncState = 0;
	    lastBucketSyncState = 0;
	    this.toFetch = 0;
	  }
	
	  BucketDataset.prototype.useBuckets = function(start, end, preferRecords) {
	    var count, definite, isLower, ref1;
	    if (preferRecords == null) {
	      preferRecords = false;
	    }
	    ref1 = this.bucketCache.isCountLower(start, end, this.histogramThreshold, preferRecords), isLower = ref1[0], definite = ref1[1];
	    if (preferRecords && !definite) {
	      count = this.cache.get(start, end).length;
	      if (count > 0 && count < this.histogramThreshold) {
	        return true;
	      }
	    }
	    return !isLower || !definite;
	  };
	
	  BucketDataset.prototype.makeTicks = function(scale) {
	    var i, resolution, ticks;
	    ticks = scale.ticks(this.histogramBinCount || 20);
	    resolution = d3.median((function() {
	      var j, ref1, results;
	      results = [];
	      for (i = j = 1, ref1 = ticks.length - 1; 1 <= ref1 ? j <= ref1 : j >= ref1; i = 1 <= ref1 ? ++j : --j) {
	        results.push(ticks[i] - ticks[i - 1]);
	      }
	      return results;
	    })());
	    ticks = [new Date(ticks[0].getTime() - resolution)].concat(ticks).concat([new Date(ticks[ticks.length - 1].getTime() + resolution)]);
	    return [ticks, resolution];
	  };
	
	  BucketDataset.prototype.isSyncing = function() {
	    return this.toFetch > 0;
	  };
	
	  BucketDataset.prototype.doFetch = function(start, end, params) {
	    var definite, isLower, ref1, ref2, resolution, scales, ticks;
	    scales = params.scales;
	    ref1 = this.makeTicks(scales.x), ticks = ref1[0], resolution = ref1[1];
	    ref2 = this.bucketCache.isCountLower(start, end, this.histogramThreshold), isLower = ref2[0], definite = ref2[1];
	    if (this.useBuckets(start, end)) {
	      return this.doFetchBuckets(start, end, resolution, ticks, params);
	    } else {
	      return BucketDataset.__super__.doFetch.call(this, start, end, params);
	    }
	  };
	
	  BucketDataset.prototype.doFetchBuckets = function(start, end, resolution, ticks, params) {
	    var bucketsToFetch, dt, i, j, len, next, source, summaryCallback, tick;
	    source = this.getSourceFunction(this.bucketSource);
	    bucketsToFetch = [];
	    for (i = j = 0, len = ticks.length; j < len; i = ++j) {
	      tick = ticks[i];
	      if (!this.bucketCache.hasBucketOrReserved(resolution, tick)) {
	        next = ticks[i + 1];
	        if (next) {
	          dt = next.getTime() - tick.getTime();
	        }
	        bucketsToFetch.push([tick, dt]);
	      }
	    }
	    if (bucketsToFetch.length > 0) {
	      this.toFetch += bucketsToFetch.length;
	      this.listeners.syncing();
	      summaryCallback = after(bucketsToFetch.length, (function(_this) {
	        return function() {
	          if (!_this.useBuckets(start, end)) {
	            return RecordDataset.prototype.doFetch.call(_this, start, end, params);
	          }
	        };
	      })(this));
	      return bucketsToFetch.forEach((function(_this) {
	        return function(arg) {
	          var a, b, bucket, dt;
	          bucket = arg[0], dt = arg[1];
	          _this.bucketCache.reserveBucket(resolution, bucket);
	          a = new Date(bucket);
	          b = new Date(bucket.getTime() + (dt || resolution));
	          return source(a, b, params, function(count) {
	            _this.bucketCache.setBucket(resolution, a, dt, count);
	            _this.toFetch -= 1;
	            _this.listeners.synced();
	            return summaryCallback();
	          });
	        };
	      })(this));
	    }
	  };
	
	  BucketDataset.prototype.draw = function(start, end, options) {
	    var ref1, resolution, scales, ticks;
	    if (this.useBuckets(start, end, true)) {
	      scales = options.scales;
	      ref1 = this.makeTicks(scales.x), ticks = ref1[0], resolution = ref1[1];
	      this.element.selectAll('.record').remove();
	      this.element.selectAll('.bin').remove();
	      return this.drawBuckets(ticks, resolution, options);
	    } else {
	      this.element.selectAll('.bucket').remove();
	      return BucketDataset.__super__.draw.call(this, start, end, options);
	    }
	  };
	
	  BucketDataset.prototype.drawBuckets = function(ticks, resolution, options) {
	    var bars, buckets, height, missingIntervals, scales, y;
	    scales = options.scales, height = options.height;
	    buckets = ticks.map((function(_this) {
	      return function(tick) {
	        var bucket, definite, end, ref1;
	        ref1 = _this.bucketCache.getBucketApproximate(resolution, tick), bucket = ref1[0], definite = ref1[1];
	        if (bucket.width != null) {
	          end = new Date(tick.getTime() + bucket.width);
	        }
	        return [tick, end, bucket.count, definite];
	      };
	    })(this));
	    y = d3.scale.linear().domain([
	      0, d3.max(buckets, function(d) {
	        return d[2];
	      })
	    ]).range([2, height - 29]).clamp(true);
	    bars = this.element.selectAll('.bucket').data(buckets);
	    bars.attr('class', 'bucket').call((function(_this) {
	      return function(bucketElement) {
	        return _this.setupBuckets(bucketElement, y, resolution, options);
	      };
	    })(this));
	    bars.enter().append('rect').call((function(_this) {
	      return function(bucketElement) {
	        return _this.setupBuckets(bucketElement, y, resolution, options);
	      };
	    })(this));
	    bars.exit().remove();
	    missingIntervals = buckets.filter(function(bucket) {
	      return !bucket[3];
	    }).map(function(bucket) {
	      if (bucket[1]) {
	        return bucket;
	      } else {
	        return [bucket[0], new Date(bucket[0].getTime() + resolution)];
	      }
	    });
	    return this.drawMissing(missingIntervals, true, scales, options);
	  };
	
	  BucketDataset.prototype.setupBuckets = function(bucketElement, y, resolution, arg) {
	    var binTooltipFormatter, scales, tooltip;
	    scales = arg.scales, tooltip = arg.tooltip, binTooltipFormatter = arg.binTooltipFormatter;
	    bucketElement.attr('class', 'bucket').attr('fill', (function(_this) {
	      return function(d) {
	        var highlight, interval;
	        interval = [d[0], d[1] || new Date(d[0].getTime() + resolution)];
	        highlight = _this.recordHighlights.reduce(function(acc, int) {
	          return acc || intersects(int, interval);
	        }, false);
	        if (highlight) {
	          return _this.highlightFillColor;
	        } else {
	          return _this.color;
	        }
	      };
	    })(this)).attr('stroke', (function(_this) {
	      return function(d) {
	        var highlight, interval;
	        interval = [d[0], d[1] || new Date(d[0].getTime() + resolution)];
	        highlight = _this.recordHighlights.reduce(function(acc, int) {
	          return acc || intersects(int, interval);
	        }, false);
	        if (highlight) {
	          return _this.highlightStrokeColor;
	        } else if (_this.noBorder) {
	          return d3.rgb(_this.color);
	        } else {
	          return d3.rgb(_this.color).darker();
	        }
	      };
	    })(this)).attr('fill-opacity', function(d) {
	      if (d[2]) {
	        return 1;
	      } else {
	        return 0.5;
	      }
	    }).attr('x', 1).attr('width', (function(_this) {
	      return function(d) {
	        return scales.x(d[1] || new Date(d[0].getTime() + resolution)) - scales.x(d[0]) - 1;
	      };
	    })(this)).attr('transform', (function(_this) {
	      return function(d) {
	        return "translate(" + (scales.x(d[0])) + ", " + (-y(d[2]) || 0) + ")";
	      };
	    })(this)).attr('height', function(d) {
	      if (d[2]) {
	        return y(d[2]);
	      } else {
	        return 0;
	      }
	    }).attr('stroke-width', this.noBorder ? 2 : 1);
	    return bucketElement.on('mouseover', (function(_this) {
	      return function(bucket) {
	        var message;
	        _this.dispatch('bucketMouseover', {
	          dataset: _this.id,
	          start: bucket[0],
	          end: bucket[1] || new Date(bucket[0].getTime() + resolution),
	          count: bucket[2]
	        });
	        if (bucket) {
	          message = "" + (bucket[2] != null ? bucket[2] : void 0);
	          if (message.length) {
	            tooltip.html(message).transition().duration(200).style('opacity', .9);
	            return centerTooltipOn(tooltip, d3.event.target);
	          }
	        }
	      };
	    })(this)).on('mouseout', (function(_this) {
	      return function(bucket) {
	        _this.dispatch('bucketMouseout', {
	          dataset: _this.id,
	          start: bucket[0],
	          end: bucket[1] || new Date(bucket[0].getTime() + resolution),
	          count: bucket[2]
	        });
	        return tooltip.transition().duration(500).style('opacity', 0);
	      };
	    })(this)).on('click', (function(_this) {
	      return function(bucket) {
	        return _this.dispatch('bucketClicked', {
	          dataset: _this.id,
	          start: bucket[0],
	          end: bucket[1] || new Date(bucket[0].getTime() + resolution),
	          count: bucket[2]
	        });
	      };
	    })(this));
	  };
	
	  BucketDataset.prototype.clearCaches = function() {
	    if (this.cache) {
	      this.cache.clear();
	    }
	    if (this.bucketCache) {
	      return this.bucketCache.clear();
	    }
	  };
	
	  return BucketDataset;
	
	})(RecordDataset);
	
	module.exports = BucketDataset;


/***/ }),
/* 731 */
/***/ (function(module, exports, __webpack_require__) {

	var Dataset, PathDataset,
	  extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
	  hasProp = {}.hasOwnProperty;
	
	Dataset = __webpack_require__(315);
	
	PathDataset = (function(superClass) {
	  extend(PathDataset, superClass);
	
	  function PathDataset(options) {
	    PathDataset.__super__.constructor.call(this, options);
	  }
	
	  PathDataset.prototype.draw = function(start, end, options) {
	    var axes, data, height, scales;
	    scales = options.scales, axes = options.axes, height = options.height;
	    data = this.records || this.paths;
	    if (data && data.length) {
	      return this.drawPaths(data, scales, axes, height);
	    }
	  };
	
	  PathDataset.prototype.drawPaths = function(data, scales, axes, height) {
	    var line, step;
	    scales.y.domain(d3.extent(data, function(d) {
	      return d[1];
	    }));
	    this.element.selectAll('path').remove();
	    this.element.selectAll('.y.axis').remove();
	    line = d3.svg.line().x((function(_this) {
	      return function(a) {
	        return scales.x(new Date(a[0]));
	      };
	    })(this)).y((function(_this) {
	      return function(a) {
	        return scales.y(a[1]);
	      };
	    })(this));
	    this.element.append('path').datum(data).attr('class', 'line').attr('d', line).attr('stroke', this.color).attr('stroke-width', '1.5px').attr('fill', 'none').attr('transform', "translate(0, " + (-height + 29) + ")");
	    step = (scales.y.domain()[1] - scales.y.domain()[0]) / 4;
	    axes.y.tickValues(d3.range(scales.y.domain()[0], scales.y.domain()[1] + step, step));
	    this.element.append('g').attr('class', 'y axis').attr('fill', this.color).call(axes.y).attr('transform', "translate(" + ((this.index + 1) * 30) + ", " + (-height + 29) + ")");
	    this.element.selectAll('.axis .domain').attr('stroke-width', '1').attr('stroke', this.color).attr('shape-rendering', 'crispEdges').attr('fill', 'none');
	    this.element.selectAll('.axis line').attr('stroke-width', '1').attr('shape-rendering', 'crispEdges').attr('stroke', this.color);
	    return this.element.selectAll('.axis path').attr('stroke-width', '1').attr('shape-rendering', 'crispEdges').attr('stroke', this.color);
	  };
	
	  return PathDataset;
	
	})(Dataset);
	
	module.exports = PathDataset;


/***/ }),
/* 732 */
/***/ (function(module, exports) {

	var EOxServerWPSSource;
	
	EOxServerWPSSource = (function() {
	  function EOxServerWPSSource(options) {
	    this.options = options != null ? options : {};
	  }
	
	  EOxServerWPSSource.prototype.formatDate = function(date) {
	    return date.toISOString().substring(0, 19) + "Z";
	  };
	
	  EOxServerWPSSource.prototype.fetch = function(start, end, params, callback) {
	    return d3.csv(this.options.url + "?service=wps&request=execute&version=1.0.0&identifier=getTimeData&DataInputs=collection=" + this.options.eoid + "%3Bbegin_time=" + (this.formatDate(start)) + "%3Bend_time=" + (this.formatDate(end)) + "&RawDataOutput=times").row((function(_this) {
	      return function(row) {
	        return [
	          new Date(row.starttime), new Date(row.endtime), {
	            id: row.identifier,
	            bbox: row.bbox.replace(/[()]/g, '').split(',').map(parseFloat)
	          }
	        ];
	      };
	    })(this)).get((function(_this) {
	      return function(error, rows) {
	        if (!error) {
	          return callback(rows);
	        }
	      };
	    })(this));
	  };
	
	  return EOxServerWPSSource;
	
	})();
	
	module.exports = EOxServerWPSSource;


/***/ }),
/* 733 */
/***/ (function(module, exports) {

	var CapabilitiesCache, WMSSource, cache;
	
	CapabilitiesCache = (function() {
	  function CapabilitiesCache() {
	    this.callbacks = {};
	    this.responses = {};
	  }
	
	  CapabilitiesCache.prototype.startRequest = function(url) {
	    return d3.xml(url + "?service=wms&request=getCapabilities", 'application/xml', (function(_this) {
	      return function(error, response) {
	        var i, internalCallback, len, ref, results;
	        if (!error) {
	          _this.responses[url] = {
	            layers: {},
	            document: response
	          };
	          ref = _this.callbacks[url];
	          results = [];
	          for (i = 0, len = ref.length; i < len; i++) {
	            internalCallback = ref[i];
	            results.push(internalCallback(response));
	          }
	          return results;
	        }
	      };
	    })(this));
	  };
	
	  CapabilitiesCache.prototype.parseLayer = function(url, layerName) {
	    var doc, e, i, len, ref;
	    doc = d3.select(this.responses[url].document);
	    ref = doc.selectAll('Layer > Dimension[name="time"]')[0];
	    for (i = 0, len = ref.length; i < len; i++) {
	      e = ref[i];
	      if (layerName === d3.select(e.parentNode).select('Name').text()) {
	        return d3.select(e).text().split(',').map(function(item) {
	          var record;
	          record = item.split("/").slice(0, 2).map(function(time) {
	            return new Date(time);
	          });
	          record.push({});
	          return record;
	        });
	      }
	    }
	  };
	
	  CapabilitiesCache.prototype.getLayer = function(url, layerName) {
	    var response;
	    response = this.responses[url];
	    if (response.layers[layerName] == null) {
	      response.layers[layerName] = this.parseLayer(url, layerName);
	    }
	    return response.layers[layerName];
	  };
	
	  CapabilitiesCache.prototype.addCallback = function(url, layerName, callback) {
	    var internalCallback;
	    internalCallback = (function(_this) {
	      return function(response) {
	        return callback(_this.getLayer(url, layerName));
	      };
	    })(this);
	    if (this.callbacks[url] != null) {
	      return this.callbacks[url].push(internalCallback);
	    } else {
	      this.callbacks[url] = [internalCallback];
	      return this.startRequest(url);
	    }
	  };
	
	  CapabilitiesCache.prototype.get = function(url, layerName, callback) {
	    if (this.responses[url] != null) {
	      return callback(this.getLayer(url, layerName));
	    } else {
	      return this.addCallback(url, layerName, callback);
	    }
	  };
	
	  return CapabilitiesCache;
	
	})();
	
	cache = new CapabilitiesCache;
	
	WMSSource = (function() {
	  function WMSSource(options) {
	    this.options = options;
	  }
	
	  WMSSource.prototype.fetch = function(start, end, params, callback) {
	    return cache.get(this.options.url, this.options.layer, (function(_this) {
	      return function(layer) {
	        return callback(layer);
	      };
	    })(this));
	  };
	
	  return WMSSource;
	
	})();
	
	module.exports = WMSSource;


/***/ }),
/* 734 */
/***/ (function(module, exports, __webpack_require__) {

	/* WEBPACK VAR INJECTION */(function(jQuery) {var $, Anno, AnnoButton,
	  indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };
	
	$ = __webpack_require__(166);
	
	__webpack_require__(531);
	
	exports.Anno = Anno = (function() {
	  var _returnFromOnShow;
	
	  function Anno(arg) {
	    var key, options, others, val;
	    if (arg.__proto__ === Array.prototype) {
	      options = arg.shift();
	      others = arg;
	    } else {
	      options = arg;
	    }
	    if (options instanceof Anno) {
	      console.warn('Anno constructor parameter is already an Anno object.');
	    }
	    if (options == null) {
	      console.warn("new Anno() created with no options. It's recommended" + " to supply at least target and content.");
	    }
	    for (key in options) {
	      val = options[key];
	      if (key === 'chainTo' || key === 'start' || key === 'show' || key === 'hide' || key === 'hideAnno' || key === 'chainSize' || key === 'chainIndex' || key === 'version') {
	        console.warn(("Anno: Overriding '" + key + "' is not recommended. Can ") + "you override a delegated function instead?");
	      }
	    }
	    for (key in options) {
	      val = options[key];
	      this[key] = val;
	    }
	    if ((others != null ? others.length : void 0) > 0) {
	      this.chainTo(new Anno(others));
	    }
	    return;
	  }
	
	  Anno.setDefaults = function(options) {
	    var key, results, val;
	    results = [];
	    for (key in options) {
	      val = options[key];
	      results.push(Anno.prototype[key] = val);
	    }
	    return results;
	  };
	
	  Anno.prototype.chainTo = function(obj) {
	    if (obj != null) {
	      if (this._chainNext == null) {
	        this._chainNext = obj instanceof Anno ? obj : new Anno(obj);
	        this._chainNext._chainPrev = this;
	      } else {
	        this._chainNext.chainTo(obj);
	      }
	    } else {
	      console.error("Can't chainTo a null object.");
	    }
	    return this;
	  };
	
	  Anno.prototype._chainNext = null;
	
	  Anno.prototype._chainPrev = null;
	
	  Anno.chain = function(array) {
	    console.warn('Anno.chain([...]) is deprecated. Use ' + '`new Anno([...])` instead.');
	    return new Anno(array);
	  };
	
	  Anno.prototype.chainSize = function() {
	    if (this._chainNext != null) {
	      return this._chainNext.chainSize();
	    } else {
	      return 1 + this.chainIndex();
	    }
	  };
	
	  Anno.prototype.chainIndex = function(index) {
	    var find;
	    if (index != null) {
	      return (find = function(curr, i, u) {
	        var ci;
	        if (curr != null) {
	          ci = curr.chainIndex();
	          if ((0 <= ci && ci < i)) {
	            return find(curr._chainNext, i, u);
	          } else if ((i < ci && ci <= u)) {
	            return find(curr._chainPrev, i, u);
	          } else if (ci === i) {
	            return curr;
	          }
	        } else {
	          return console.error(("Couldn't switch to index '" + i + "'. Chain size ") + ("is '" + u + "'"));
	        }
	      })(this, index, this.chainSize());
	    } else {
	      if (this._chainPrev != null) {
	        return 1 + this._chainPrev.chainIndex();
	      } else {
	        return 0;
	      }
	    }
	  };
	
	  Anno.prototype.show = function() {
	    var $target, lastButton;
	    $target = this.targetFn();
	    if (this._annoElem != null) {
	      console.warn(("Anno elem for '" + this.target + "' has already been ") + "generated.  Did you call show() twice?");
	    }
	    this._annoElem = this.annoElem();
	    this.emphasiseTarget();
	    this.showOverlay();
	    $target.after(this._annoElem);
	    this._annoElem.addClass('anno-target-' + this.arrowPositionFn());
	    this.positionAnnoElem();
	    setTimeout(((function(_this) {
	      return function() {
	        return _this._annoElem.removeClass('anno-hidden');
	      };
	    })(this)), 50);
	    $target.scrollintoview();
	    setTimeout(((function(_this) {
	      return function() {
	        return _this._annoElem.scrollintoview();
	      };
	    })(this)), 300);
	    lastButton = this._annoElem.find('button').last();
	    if (this.rightArrowClicksLastButton) {
	      lastButton.keydown(function(evt) {
	        if (evt.keyCode === 39) {
	          return $(this).click();
	        }
	      });
	    }
	    if (this.autoFocusLastButton && $target.find(':focus').length === 0) {
	      lastButton.focus();
	    }
	    this._returnFromOnShow = this.onShow(this, $target, this._annoElem);
	    return this;
	  };
	
	  Anno.prototype.start = function() {
	    return this.show();
	  };
	
	  Anno.prototype.rightArrowClicksLastButton = true;
	
	  Anno.prototype.autoFocusLastButton = true;
	
	  Anno.prototype.onShow = function(anno, $target, $annoElem) {};
	
	  _returnFromOnShow = null;
	
	  Anno.prototype.hide = function() {
	    this.hideAnno();
	    setTimeout(this.hideOverlay, 50);
	    return this;
	  };
	
	  Anno.prototype.hideAnno = function() {
	    if (this._annoElem != null) {
	      this._annoElem.addClass('anno-hidden');
	      this.deemphasiseTarget();
	      this.onHide(this, this.targetFn(), this._annoElem, this._returnFromOnShow);
	      (function(annoEl) {
	        return setTimeout((function() {
	          return annoEl.remove();
	        }), 300);
	      })(this._annoElem);
	      this._annoElem = null;
	    } else {
	      console.warn(("Can't hideAnno() for '" + this.target + "' when @_annoElem ") + "is null.  Did you call hideAnno() twice?");
	    }
	    return this;
	  };
	
	  Anno.prototype.onHide = function(anno, $target, $annoElem, returnFromOnShow) {};
	
	  Anno.prototype.switchTo = function(otherAnno) {
	    if (otherAnno != null) {
	      this.hideAnno();
	      return otherAnno.show();
	    } else {
	      console.warn("Can't switchTo a null object. Hiding instead.");
	      return this.hide();
	    }
	  };
	
	  Anno.prototype.switchToChainNext = function() {
	    return this.switchTo(this._chainNext);
	  };
	
	  Anno.prototype.switchToChainPrev = function() {
	    return this.switchTo(this._chainPrev);
	  };
	
	  Anno.prototype.target = 'h1';
	
	  Anno.prototype.targetFn = function() {
	    var r;
	    if (typeof this.target === 'string') {
	      r = $(this.target).filter(':not(.anno-placeholder)');
	      if (r.length === 0) {
	        console.error("Couldn't find Anno.target '" + this.target + "'.");
	      }
	      if (r.length > 1) {
	        console.warn(("Anno target '" + this.target + "' matched " + r.length + " ") + "elements. Targeting the first one.");
	      }
	      return r.first();
	    } else if (this.target instanceof jQuery) {
	      if (this.target.length > 1) {
	        console.warn(("Anno jQuery target matched " + this.target.length + " ") + "elements. Targeting the first one.");
	      }
	      return this.target.first();
	    } else if (this.target instanceof HTMLElement) {
	      return $(this.target);
	    } else if (typeof this.target === 'function') {
	      return this.target();
	    } else {
	      console.error("Unrecognised Anno.target. Please supply a jQuery " + "selector string, a jQuery object, a raw DOM element or a " + "function returning a jQuery element. target:");
	      return console.error(this.target);
	    }
	  };
	
	  Anno.prototype.annoElem = function() {
	    this._annoElem = $("<div class='anno anno-hidden " + this.className + "'>\n<div class='anno-inner'>  <div class='anno-arrow'></div>  </div>\n</div>");
	    this._annoElem.find('.anno-inner').append(this.contentElem()).append(this.buttonsElem());
	    return this._annoElem;
	  };
	
	  Anno.prototype._annoElem = null;
	
	  Anno.prototype.className = '';
	
	  Anno.prototype.content = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.';
	
	  Anno.prototype.contentFn = function() {
	    return this.content;
	  };
	
	  Anno.prototype.contentElem = function() {
	    return $("<div class='anno-content'>" + this.contentFn() + "</div>");
	  };
	
	  Anno.prototype.showOverlay = function() {
	    var $e;
	    if ($('.anno-overlay').length === 0) {
	      $('body').append($e = this.overlayElem().addClass('anno-hidden'));
	      return setTimeout((function() {
	        return $e.removeClass('anno-hidden');
	      }), 10);
	    } else {
	      return $('.anno-overlay').replaceWith(this.overlayElem());
	    }
	  };
	
	  Anno.prototype.overlayElem = function() {
	    return $("<div class='anno-overlay " + this.overlayClassName + "'></div>").click((function(_this) {
	      return function(evt) {
	        return _this.overlayClick.call(_this, _this, evt);
	      };
	    })(this));
	  };
	
	  Anno.prototype.overlayClassName = '';
	
	  Anno.prototype.overlayClick = function(anno, evt) {
	    return anno.hide();
	  };
	
	  Anno.prototype.hideOverlay = function() {
	    $('.anno-overlay').addClass('anno-hidden');
	    return setTimeout((function() {
	      return $('.anno-overlay').remove();
	    }), 300);
	  };
	
	  Anno.prototype.emphasiseTarget = function($target) {
	    var origbg, origheight, origleft, origtop, origwidth, origzindex, placeholder, ppos, startposition, tpos;
	    if ($target == null) {
	      $target = this.targetFn();
	    }
	    this._undoEmphasise = [];
	    $target.closest(':scrollable').on('mousewheel', function(evt) {
	      evt.preventDefault();
	      return evt.stopPropagation();
	    });
	    this._undoEmphasise.push(function($t) {
	      return $t.closest(':scrollable').off('mousewheel');
	    });
	    if ($target.css('position') === 'static') {
	      $target.after(placeholder = $target.clone().addClass('anno-placeholder'));
	      (function(_this) {
	        return (function(placeholder) {
	          return _this._undoEmphasise.push(function() {
	            return placeholder.remove();
	          });
	        });
	      })(this)(placeholder);
	      startposition = $target.prop('style').position;
	      (function(_this) {
	        return (function(startposition) {
	          return _this._undoEmphasise.push(function($t) {
	            return $t.css({
	              position: startposition
	            });
	          });
	        });
	      })(this)(startposition);
	      $target.css({
	        position: 'absolute'
	      });
	      if ($target.outerWidth() !== placeholder.outerWidth()) {
	        origwidth = $target.prop('style').width;
	        (function(_this) {
	          return (function(origwidth) {
	            return _this._undoEmphasise.push(function($t) {
	              return $t.css({
	                width: origwidth
	              });
	            });
	          });
	        })(this)(origwidth);
	        $target.css('width', placeholder.outerWidth());
	      }
	      if ($target.outerHeight() !== placeholder.outerHeight()) {
	        origheight = $target.prop('style').height;
	        (function(_this) {
	          return (function(origheight) {
	            return _this._undoEmphasise.push(function($t) {
	              return $t.css({
	                height: origheight
	              });
	            });
	          });
	        })(this)(origheight);
	        $target.css('height', placeholder.outerHeight());
	      }
	      ppos = placeholder.position();
	      tpos = $target.position();
	      if (tpos.top !== ppos.top) {
	        origtop = $target.prop('style').top;
	        (function(_this) {
	          return (function(origtop) {
	            return _this._undoEmphasise.push(function($t) {
	              return $t.css({
	                top: origtop
	              });
	            });
	          });
	        })(this)(origtop);
	        $target.css('top', ppos.top);
	      }
	      if (tpos.left !== ppos.left) {
	        origleft = $target.prop('style').left;
	        (function(_this) {
	          return (function(origleft) {
	            return _this._undoEmphasise.push(function($t) {
	              return $t.css({
	                left: origleft
	              });
	            });
	          });
	        })(this)(origleft);
	        $target.css('left', ppos.left);
	      }
	    }
	    if ($target.css('backgroundColor') === 'rgba(0, 0, 0, 0)' || $target.css('backgroundColor') === 'transparent') {
	      console.warn(("Anno.js target '" + this.target + "' has a transparent bg; ") + "filling it white temporarily.");
	      origbg = $target.prop('style').background;
	      (function(_this) {
	        return (function(origbg) {
	          return _this._undoEmphasise.push(function($t) {
	            return $t.css({
	              background: origbg
	            });
	          });
	        });
	      })(this)(origbg);
	      $target.css({
	        background: 'white'
	      });
	    }
	    origzindex = $target.prop('style').zIndex;
	    (function(_this) {
	      return (function(origzindex) {
	        return _this._undoEmphasise.push(function($t) {
	          return $t.css({
	            zIndex: origzindex
	          });
	        });
	      });
	    })(this)(origzindex);
	    $target.css({
	      zIndex: '1001'
	    });
	    return $target;
	  };
	
	  Anno.prototype._undoEmphasise = [];
	
	  Anno.prototype.deemphasiseTarget = function() {
	    var $target, fn, j, len, ref;
	    $target = this.targetFn();
	    ref = this._undoEmphasise;
	    for (j = 0, len = ref.length; j < len; j++) {
	      fn = ref[j];
	      fn($target);
	    }
	    return $target;
	  };
	
	  Anno.prototype.position = null;
	
	  Anno.prototype.positionAnnoElem = function(annoEl) {
	    var $targetEl, offset, pos;
	    if (annoEl == null) {
	      annoEl = this._annoElem;
	    }
	    pos = this.positionFn();
	    $targetEl = this.targetFn();
	    offset = $targetEl.position();
	    switch (pos) {
	      case 'top':
	      case 'bottom':
	        annoEl.css({
	          left: offset.left + 'px'
	        });
	        break;
	      case 'center-top':
	      case 'center-bottom':
	        annoEl.css({
	          left: offset.left + ($targetEl.outerWidth() / 2 - annoEl.outerWidth() / 2) + 'px'
	        });
	        break;
	      case 'left':
	      case 'right':
	        annoEl.css({
	          top: offset.top + 'px'
	        });
	        break;
	      case 'center-left':
	      case 'center-right':
	        annoEl.css({
	          top: offset.top + ($targetEl.outerHeight() / 2 - annoEl.outerHeight() / 2) + 'px'
	        });
	    }
	    switch (pos) {
	      case 'top':
	      case 'center-top':
	        annoEl.css({
	          top: offset.top - annoEl.outerHeight() + 'px'
	        });
	        break;
	      case 'bottom':
	      case 'center-bottom':
	        annoEl.css({
	          top: offset.top + $targetEl.outerHeight() + 'px'
	        });
	        break;
	      case 'left':
	      case 'center-left':
	        annoEl.css({
	          left: offset.left - annoEl.outerWidth() + 'px'
	        });
	        break;
	      case 'right':
	      case 'center-right':
	        annoEl.css({
	          left: offset.left + $targetEl.outerWidth() + 'px'
	        });
	        break;
	      default:
	        if ((pos.left != null) || (pos.right != null) || (pos.top != null) || (pos.bottom != null)) {
	          annoEl.css(pos);
	        } else {
	          console.error("Unrecognised position: '" + pos + "'");
	        }
	    }
	    return annoEl;
	  };
	
	  Anno.prototype.positionFn = function() {
	    var $container, $target, allowed, annoBounds, bad, containerOffset, targetBounds, targetOffset, viewBounds;
	    if (this.position != null) {
	      return this.position;
	    } else if (this._annoElem != null) {
	      $target = this.targetFn();
	      $container = $target.closest(':scrollable');
	      if ($container.length === 0) {
	        $container = $('body');
	      }
	      targetOffset = $target.offset();
	      containerOffset = $container.offset();
	      targetBounds = {
	        left: targetOffset.left - containerOffset.left,
	        top: targetOffset.top - containerOffset.top
	      };
	      targetBounds.right = targetBounds.left + $target.outerWidth();
	      targetBounds.bottom = targetBounds.top + $target.outerHeight();
	      viewBounds = {
	        w: $container.width() || $container.width(),
	        h: $container.height() || $container.height()
	      };
	      annoBounds = {
	        w: this._annoElem.outerWidth(),
	        h: this._annoElem.outerHeight()
	      };
	      bad = [];
	      if (annoBounds.w > targetBounds.left) {
	        bad = bad.concat(['left', 'center-left']);
	      }
	      if (annoBounds.h > targetBounds.top) {
	        bad = bad.concat(['top', 'center-top']);
	      }
	      if (annoBounds.w + targetBounds.right > viewBounds.w) {
	        bad = bad.concat(['right', 'center-right']);
	      }
	      if (annoBounds.h + targetBounds.bottom > viewBounds.h) {
	        bad = bad.concat(['bottom', 'center-bottom']);
	      }
	      allowed = Anno.preferredPositions.filter(function(p) {
	        return indexOf.call(bad, p) < 0;
	      });
	      if (allowed.length === 0) {
	        console.error(("Anno couldn't guess a position for '" + this.target + "'. ") + "Please supply one in the constructor.");
	      } else {
	        console.warn(("Anno: guessing position:'" + allowed[0] + "' for ") + ("'" + this.target + "'. Possible Anno.preferredPositions: [" + allowed + "]."));
	      }
	      return this.position = allowed[0];
	    }
	  };
	
	  Anno.preferredPositions = ['bottom', 'right', 'left', 'top', 'center-bottom', 'center-right', 'center-left', 'center-top'];
	
	  Anno.prototype.arrowPositionFn = function() {
	    var pos, r;
	    if (this.arrowPosition != null) {
	      return this.arrowPosition;
	    } else if (typeof this.positionFn() === 'string') {
	      return {
	        'top': 'bottom',
	        'center-top': 'center-bottom',
	        'left': 'right',
	        'center-left': 'center-right',
	        'right': 'left',
	        'center-right': 'center-left',
	        'bottom': 'top',
	        'center-bottom': 'center-top'
	      }[this.positionFn()];
	    } else {
	      pos = {
	        l: parseInt(this.positionFn().left, 10),
	        t: parseInt(this.positionFn().top, 10)
	      };
	      if (Math.abs(pos.l) > Math.abs(pos.t)) {
	        r = pos.l < 0 ? 'center-right' : 'center-left';
	      } else {
	        r = pos.t < 0 ? 'center-bottom' : 'center-top';
	      }
	      console.warn(("Guessing arrowPosition:'" + r + "' for " + this.target + ". ") + "Include this in your constructor for consistency.");
	      return r;
	    }
	  };
	
	  Anno.prototype.arrowPosition = null;
	
	  Anno.prototype.buttons = [{}];
	
	  Anno.prototype.buttonsFn = function() {
	    if (this.buttons instanceof Array) {
	      return this.buttons.map(function(b) {
	        return new AnnoButton(b);
	      });
	    } else {
	      return [new AnnoButton(this.buttons)];
	    }
	  };
	
	  Anno.prototype.buttonsElem = function() {
	    var b;
	    return $("<div class='anno-btn-container'></div>").append((function() {
	      var j, len, ref, results;
	      ref = this.buttonsFn();
	      results = [];
	      for (j = 0, len = ref.length; j < len; j++) {
	        b = ref[j];
	        results.push(b.buttonElem(this));
	      }
	      return results;
	    }).call(this));
	  };
	
	  return Anno;
	
	})();
	
	exports.AnnoButton = AnnoButton = (function() {
	  function AnnoButton(options) {
	    var key, val;
	    for (key in options) {
	      val = options[key];
	      this[key] = val;
	    }
	  }
	
	  AnnoButton.prototype.buttonElem = function(anno) {
	    return $("<button class='anno-btn'></button>").html(this.textFn(anno)).addClass(this.className).click((function(_this) {
	      return function(evt) {
	        return _this.click.call(anno, anno, evt);
	      };
	    })(this));
	  };
	
	  AnnoButton.prototype.textFn = function(anno) {
	    if (this.text != null) {
	      return this.text;
	    } else if (anno._chainNext != null) {
	      return 'Next';
	    } else {
	      return 'Done';
	    }
	  };
	
	  AnnoButton.prototype.text = null;
	
	  AnnoButton.prototype.className = '';
	
	  AnnoButton.prototype.click = function(anno, evt) {
	    if (anno._chainNext != null) {
	      return anno.switchToChainNext();
	    } else {
	      return anno.hide();
	    }
	  };
	
	  AnnoButton.NextButton = new AnnoButton({
	    text: 'Next',
	    click: function() {
	      return this.switchToChainNext();
	    }
	  });
	
	  AnnoButton.DoneButton = new AnnoButton({
	    text: 'Done',
	    click: function() {
	      return this.hide();
	    }
	  });
	
	  AnnoButton.BackButton = new AnnoButton({
	    text: 'Back',
	    className: 'anno-btn-low-importance',
	    click: function() {
	      return this.switchToChainPrev();
	    }
	  });
	
	  return AnnoButton;

	})();
	
	/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(166)))

/***/ }),
/* 735 */
/***/ (function(module, exports, __webpack_require__) {

	__webpack_require__(742);
	module.exports = __webpack_require__(51).RegExp.escape;


/***/ }),
/* 736 */
/***/ (function(module, exports, __webpack_require__) {

	var isObject = __webpack_require__(15);
	var isArray = __webpack_require__(154);
	var SPECIES = __webpack_require__(20)('species');
	
	module.exports = function (original) {
	  var C;
	  if (isArray(original)) {
	    C = original.constructor;
	    // cross-realm fallback
	    if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;
	    if (isObject(C)) {
	      C = C[SPECIES];
	      if (C === null) C = undefined;
	    }
	  } return C === undefined ? Array : C;
	};


/***/ }),
/* 737 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	// 20.3.4.36 / 15.9.5.43 Date.prototype.toISOString()
	var fails = __webpack_require__(13);
	var getTime = Date.prototype.getTime;
	var $toISOString = Date.prototype.toISOString;
	
	var lz = function (num) {
	  return num > 9 ? num : '0' + num;
	};
	
	// PhantomJS / old WebKit has a broken implementations
	module.exports = (fails(function () {
	  return $toISOString.call(new Date(-5e13 - 1)) != '0385-07-25T07:06:39.999Z';
	}) || !fails(function () {
	  $toISOString.call(new Date(NaN));
	})) ? function toISOString() {
	  if (!isFinite(getTime.call(this))) throw RangeError('Invalid time value');
	  var d = this;
	  var y = d.getUTCFullYear();
	  var m = d.getUTCMilliseconds();
	  var s = y < 0 ? '-' : y > 9999 ? '+' : '';
	  return s + ('00000' + Math.abs(y)).slice(s ? -6 : -4) +
	    '-' + lz(d.getUTCMonth() + 1) + '-' + lz(d.getUTCDate()) +
	    'T' + lz(d.getUTCHours()) + ':' + lz(d.getUTCMinutes()) +
	    ':' + lz(d.getUTCSeconds()) + '.' + (m > 99 ? m : '0' + lz(m)) + 'Z';
	} : $toISOString;


/***/ }),
/* 738 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	var anObject = __webpack_require__(6);
	var toPrimitive = __webpack_require__(61);
	var NUMBER = 'number';
	
	module.exports = function (hint) {
	  if (hint !== 'string' && hint !== NUMBER && hint !== 'default') throw TypeError('Incorrect hint');
	  return toPrimitive(anObject(this), hint != NUMBER);
	};


/***/ }),
/* 739 */
/***/ (function(module, exports, __webpack_require__) {

	// all enumerable object keys, includes symbols
	var getKeys = __webpack_require__(94);
	var gOPS = __webpack_require__(158);
	var pIE = __webpack_require__(131);
	module.exports = function (it) {
	  var result = getKeys(it);
	  var getSymbols = gOPS.f;
	  if (getSymbols) {
	    var symbols = getSymbols(it);
	    var isEnum = pIE.f;
	    var i = 0;
	    var key;
	    while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);
	  } return result;
	};


/***/ }),
/* 740 */
/***/ (function(module, exports, __webpack_require__) {

	module.exports = __webpack_require__(132)('native-function-to-string', Function.toString);


/***/ }),
/* 741 */
/***/ (function(module, exports) {

	module.exports = function (regExp, replace) {
	  var replacer = replace === Object(replace) ? function (part) {
	    return replace[part];
	  } : replace;
	  return function (it) {
	    return String(it).replace(regExp, replacer);
	  };
	};


/***/ }),
/* 742 */
/***/ (function(module, exports, __webpack_require__) {

	// https://github.com/benjamingr/RexExp.escape
	var $export = __webpack_require__(3);
	var $re = __webpack_require__(741)(/[\\^$*+?.()|[\]{}]/g, '\\$&');
	
	$export($export.S, 'RegExp', { escape: function escape(it) { return $re(it); } });


/***/ }),
/* 743 */
/***/ (function(module, exports, __webpack_require__) {

	// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)
	var $export = __webpack_require__(3);
	
	$export($export.P, 'Array', { copyWithin: __webpack_require__(319) });
	
	__webpack_require__(76)('copyWithin');


/***/ }),
/* 744 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	var $export = __webpack_require__(3);
	var $every = __webpack_require__(58)(4);
	
	$export($export.P + $export.F * !__webpack_require__(53)([].every, true), 'Array', {
	  // 22.1.3.5 / 15.4.4.16 Array.prototype.every(callbackfn [, thisArg])
	  every: function every(callbackfn /* , thisArg */) {
	    return $every(this, callbackfn, arguments[1]);
	  }
	});


/***/ }),
/* 745 */
/***/ (function(module, exports, __webpack_require__) {

	// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)
	var $export = __webpack_require__(3);
	
	$export($export.P, 'Array', { fill: __webpack_require__(195) });
	
	__webpack_require__(76)('fill');


/***/ }),
/* 746 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	var $export = __webpack_require__(3);
	var $filter = __webpack_require__(58)(2);
	
	$export($export.P + $export.F * !__webpack_require__(53)([].filter, true), 'Array', {
	  // 22.1.3.7 / 15.4.4.20 Array.prototype.filter(callbackfn [, thisArg])
	  filter: function filter(callbackfn /* , thisArg */) {
	    return $filter(this, callbackfn, arguments[1]);
	  }
	});


/***/ }),
/* 747 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	// 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined)
	var $export = __webpack_require__(3);
	var $find = __webpack_require__(58)(6);
	var KEY = 'findIndex';
	var forced = true;
	// Shouldn't skip holes
	if (KEY in []) Array(1)[KEY](function () { forced = false; });
	$export($export.P + $export.F * forced, 'Array', {
	  findIndex: function findIndex(callbackfn /* , that = undefined */) {
	    return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);
	  }
	});
	__webpack_require__(76)(KEY);


/***/ }),
/* 748 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)
	var $export = __webpack_require__(3);
	var $find = __webpack_require__(58)(5);
	var KEY = 'find';
	var forced = true;
	// Shouldn't skip holes
	if (KEY in []) Array(1)[KEY](function () { forced = false; });
	$export($export.P + $export.F * forced, 'Array', {
	  find: function find(callbackfn /* , that = undefined */) {
	    return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);
	  }
	});
	__webpack_require__(76)(KEY);


/***/ }),
/* 749 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	var $export = __webpack_require__(3);
	var $forEach = __webpack_require__(58)(0);
	var STRICT = __webpack_require__(53)([].forEach, true);
	
	$export($export.P + $export.F * !STRICT, 'Array', {
	  // 22.1.3.10 / 15.4.4.18 Array.prototype.forEach(callbackfn [, thisArg])
	  forEach: function forEach(callbackfn /* , thisArg */) {
	    return $forEach(this, callbackfn, arguments[1]);
	  }
	});


/***/ }),
/* 750 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	var ctx = __webpack_require__(52);
	var $export = __webpack_require__(3);
	var toObject = __webpack_require__(28);
	var call = __webpack_require__(327);
	var isArrayIter = __webpack_require__(203);
	var toLength = __webpack_require__(21);
	var createProperty = __webpack_require__(197);
	var getIterFn = __webpack_require__(219);
	
	$export($export.S + $export.F * !__webpack_require__(156)(function (iter) { Array.from(iter); }), 'Array', {
	  // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)
	  from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {
	    var O = toObject(arrayLike);
	    var C = typeof this == 'function' ? this : Array;
	    var aLen = arguments.length;
	    var mapfn = aLen > 1 ? arguments[1] : undefined;
	    var mapping = mapfn !== undefined;
	    var index = 0;
	    var iterFn = getIterFn(O);
	    var length, result, step, iterator;
	    if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);
	    // if object isn't iterable or it's array with default iterator - use simple case
	    if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {
	      for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {
	        createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);
	      }
	    } else {
	      length = toLength(O.length);
	      for (result = new C(length); length > index; index++) {
	        createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);
	      }
	    }
	    result.length = index;
	    return result;
	  }
	});


/***/ }),
/* 751 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	var $export = __webpack_require__(3);
	var $indexOf = __webpack_require__(152)(false);
	var $native = [].indexOf;
	var NEGATIVE_ZERO = !!$native && 1 / [1].indexOf(1, -0) < 0;
	
	$export($export.P + $export.F * (NEGATIVE_ZERO || !__webpack_require__(53)($native)), 'Array', {
	  // 22.1.3.11 / 15.4.4.14 Array.prototype.indexOf(searchElement [, fromIndex])
	  indexOf: function indexOf(searchElement /* , fromIndex = 0 */) {
	    return NEGATIVE_ZERO
	      // convert -0 to +0
	      ? $native.apply(this, arguments) || 0
	      : $indexOf(this, searchElement, arguments[1]);
	  }
	});


/***/ }),
/* 752 */
/***/ (function(module, exports, __webpack_require__) {

	// 22.1.2.2 / 15.4.3.2 Array.isArray(arg)
	var $export = __webpack_require__(3);
	
	$export($export.S, 'Array', { isArray: __webpack_require__(154) });


/***/ }),
/* 753 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	// 22.1.3.13 Array.prototype.join(separator)
	var $export = __webpack_require__(3);
	var toIObject = __webpack_require__(45);
	var arrayJoin = [].join;
	
	// fallback for not array-like strings
	$export($export.P + $export.F * (__webpack_require__(130) != Object || !__webpack_require__(53)(arrayJoin)), 'Array', {
	  join: function join(separator) {
	    return arrayJoin.call(toIObject(this), separator === undefined ? ',' : separator);
	  }
	});


/***/ }),
/* 754 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	var $export = __webpack_require__(3);
	var toIObject = __webpack_require__(45);
	var toInteger = __webpack_require__(54);
	var toLength = __webpack_require__(21);
	var $native = [].lastIndexOf;
	var NEGATIVE_ZERO = !!$native && 1 / [1].lastIndexOf(1, -0) < 0;
	
	$export($export.P + $export.F * (NEGATIVE_ZERO || !__webpack_require__(53)($native)), 'Array', {
	  // 22.1.3.14 / 15.4.4.15 Array.prototype.lastIndexOf(searchElement [, fromIndex])
	  lastIndexOf: function lastIndexOf(searchElement /* , fromIndex = @[*-1] */) {
	    // convert -0 to +0
	    if (NEGATIVE_ZERO) return $native.apply(this, arguments) || 0;
	    var O = toIObject(this);
	    var length = toLength(O.length);
	    var index = length - 1;
	    if (arguments.length > 1) index = Math.min(index, toInteger(arguments[1]));
	    if (index < 0) index = length + index;
	    for (;index >= 0; index--) if (index in O) if (O[index] === searchElement) return index || 0;
	    return -1;
	  }
	});


/***/ }),
/* 755 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	var $export = __webpack_require__(3);
	var $map = __webpack_require__(58)(1);
	
	$export($export.P + $export.F * !__webpack_require__(53)([].map, true), 'Array', {
	  // 22.1.3.15 / 15.4.4.19 Array.prototype.map(callbackfn [, thisArg])
	  map: function map(callbackfn /* , thisArg */) {
	    return $map(this, callbackfn, arguments[1]);
	  }
	});


/***/ }),
/* 756 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	var $export = __webpack_require__(3);
	var createProperty = __webpack_require__(197);
	
	// WebKit Array.of isn't generic
	$export($export.S + $export.F * __webpack_require__(13)(function () {
	  function F() { /* empty */ }
	  return !(Array.of.call(F) instanceof F);
	}), 'Array', {
	  // 22.1.2.3 Array.of( ...items)
	  of: function of(/* ...args */) {
	    var index = 0;
	    var aLen = arguments.length;
	    var result = new (typeof this == 'function' ? this : Array)(aLen);
	    while (aLen > index) createProperty(result, index, arguments[index++]);
	    result.length = aLen;
	    return result;
	  }
	});


/***/ }),
/* 757 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	var $export = __webpack_require__(3);
	var $reduce = __webpack_require__(321);
	
	$export($export.P + $export.F * !__webpack_require__(53)([].reduceRight, true), 'Array', {
	  // 22.1.3.19 / 15.4.4.22 Array.prototype.reduceRight(callbackfn [, initialValue])
	  reduceRight: function reduceRight(callbackfn /* , initialValue */) {
	    return $reduce(this, callbackfn, arguments.length, arguments[1], true);
	  }
	});


/***/ }),
/* 758 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	var $export = __webpack_require__(3);
	var $reduce = __webpack_require__(321);
	
	$export($export.P + $export.F * !__webpack_require__(53)([].reduce, true), 'Array', {
	  // 22.1.3.18 / 15.4.4.21 Array.prototype.reduce(callbackfn [, initialValue])
	  reduce: function reduce(callbackfn /* , initialValue */) {
	    return $reduce(this, callbackfn, arguments.length, arguments[1], false);
	  }
	});


/***/ }),
/* 759 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	var $export = __webpack_require__(3);
	var html = __webpack_require__(201);
	var cof = __webpack_require__(50);
	var toAbsoluteIndex = __webpack_require__(81);
	var toLength = __webpack_require__(21);
	var arraySlice = [].slice;
	
	// fallback for not array-like ES3 strings and DOM objects
	$export($export.P + $export.F * __webpack_require__(13)(function () {
	  if (html) arraySlice.call(html);
	}), 'Array', {
	  slice: function slice(begin, end) {
	    var len = toLength(this.length);
	    var klass = cof(this);
	    end = end === undefined ? len : end;
	    if (klass == 'Array') return arraySlice.call(this, begin, end);
	    var start = toAbsoluteIndex(begin, len);
	    var upTo = toAbsoluteIndex(end, len);
	    var size = toLength(upTo - start);
	    var cloned = new Array(size);
	    var i = 0;
	    for (; i < size; i++) cloned[i] = klass == 'String'
	      ? this.charAt(start + i)
	      : this[start + i];
	    return cloned;
	  }
	});


/***/ }),
/* 760 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	var $export = __webpack_require__(3);
	var $some = __webpack_require__(58)(3);
	
	$export($export.P + $export.F * !__webpack_require__(53)([].some, true), 'Array', {
	  // 22.1.3.23 / 15.4.4.17 Array.prototype.some(callbackfn [, thisArg])
	  some: function some(callbackfn /* , thisArg */) {
	    return $some(this, callbackfn, arguments[1]);
	  }
	});


/***/ }),
/* 761 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	var $export = __webpack_require__(3);
	var aFunction = __webpack_require__(36);
	var toObject = __webpack_require__(28);
	var fails = __webpack_require__(13);
	var $sort = [].sort;
	var test = [1, 2, 3];
	
	$export($export.P + $export.F * (fails(function () {
	  // IE8-
	  test.sort(undefined);
	}) || !fails(function () {
	  // V8 bug
	  test.sort(null);
	  // Old WebKit
	}) || !__webpack_require__(53)($sort)), 'Array', {
	  // 22.1.3.25 Array.prototype.sort(comparefn)
	  sort: function sort(comparefn) {
	    return comparefn === undefined
	      ? $sort.call(toObject(this))
	      : $sort.call(toObject(this), aFunction(comparefn));
	  }
	});


/***/ }),
/* 762 */
/***/ (function(module, exports, __webpack_require__) {

	__webpack_require__(97)('Array');


/***/ }),
/* 763 */
/***/ (function(module, exports, __webpack_require__) {

	// 20.3.3.1 / 15.9.4.4 Date.now()
	var $export = __webpack_require__(3);
	
	$export($export.S, 'Date', { now: function () { return new Date().getTime(); } });


/***/ }),
/* 764 */
/***/ (function(module, exports, __webpack_require__) {

	// 20.3.4.36 / 15.9.5.43 Date.prototype.toISOString()
	var $export = __webpack_require__(3);
	var toISOString = __webpack_require__(737);
	
	// PhantomJS / old WebKit has a broken implementations
	$export($export.P + $export.F * (Date.prototype.toISOString !== toISOString), 'Date', {
	  toISOString: toISOString
	});


/***/ }),
/* 765 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	var $export = __webpack_require__(3);
	var toObject = __webpack_require__(28);
	var toPrimitive = __webpack_require__(61);
	
	$export($export.P + $export.F * __webpack_require__(13)(function () {
	  return new Date(NaN).toJSON() !== null
	    || Date.prototype.toJSON.call({ toISOString: function () { return 1; } }) !== 1;
	}), 'Date', {
	  // eslint-disable-next-line no-unused-vars
	  toJSON: function toJSON(key) {
	    var O = toObject(this);
	    var pv = toPrimitive(O);
	    return typeof pv == 'number' && !isFinite(pv) ? null : O.toISOString();
	  }
	});


/***/ }),
/* 766 */
/***/ (function(module, exports, __webpack_require__) {

	var TO_PRIMITIVE = __webpack_require__(20)('toPrimitive');
	var proto = Date.prototype;
	
	if (!(TO_PRIMITIVE in proto)) __webpack_require__(37)(proto, TO_PRIMITIVE, __webpack_require__(738));


/***/ }),
/* 767 */
/***/ (function(module, exports, __webpack_require__) {

	var DateProto = Date.prototype;
	var INVALID_DATE = 'Invalid Date';
	var TO_STRING = 'toString';
	var $toString = DateProto[TO_STRING];
	var getTime = DateProto.getTime;
	if (new Date(NaN) + '' != INVALID_DATE) {
	  __webpack_require__(38)(DateProto, TO_STRING, function toString() {
	    var value = getTime.call(this);
	    // eslint-disable-next-line no-self-compare
	    return value === value ? $toString.call(this) : INVALID_DATE;
	  });
	}


/***/ }),
/* 768 */
/***/ (function(module, exports, __webpack_require__) {

	// 19.2.3.2 / 15.3.4.5 Function.prototype.bind(thisArg, args...)
	var $export = __webpack_require__(3);
	
	$export($export.P, 'Function', { bind: __webpack_require__(322) });


/***/ }),
/* 769 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	var isObject = __webpack_require__(15);
	var getPrototypeOf = __webpack_require__(44);
	var HAS_INSTANCE = __webpack_require__(20)('hasInstance');
	var FunctionProto = Function.prototype;
	// 19.2.3.6 Function.prototype[@@hasInstance](V)
	if (!(HAS_INSTANCE in FunctionProto)) __webpack_require__(26).f(FunctionProto, HAS_INSTANCE, { value: function (O) {
	  if (typeof this != 'function' || !isObject(O)) return false;
	  if (!isObject(this.prototype)) return O instanceof this;
	  // for environment w/o native `@@hasInstance` logic enough `instanceof`, but add this:
	  while (O = getPrototypeOf(O)) if (this.prototype === O) return true;
	  return false;
	} });


/***/ }),
/* 770 */
/***/ (function(module, exports, __webpack_require__) {

	var dP = __webpack_require__(26).f;
	var FProto = Function.prototype;
	var nameRE = /^\s*function ([^ (]*)/;
	var NAME = 'name';
	
	// 19.2.4.2 name
	NAME in FProto || __webpack_require__(25) && dP(FProto, NAME, {
	  configurable: true,
	  get: function () {
	    try {
	      return ('' + this).match(nameRE)[1];
	    } catch (e) {
	      return '';
	    }
	  }
	});


/***/ }),
/* 771 */
/***/ (function(module, exports, __webpack_require__) {

	// 20.2.2.3 Math.acosh(x)
	var $export = __webpack_require__(3);
	var log1p = __webpack_require__(330);
	var sqrt = Math.sqrt;
	var $acosh = Math.acosh;
	
	$export($export.S + $export.F * !($acosh
	  // V8 bug: https://code.google.com/p/v8/issues/detail?id=3509
	  && Math.floor($acosh(Number.MAX_VALUE)) == 710
	  // Tor Browser bug: Math.acosh(Infinity) -> NaN
	  && $acosh(Infinity) == Infinity
	), 'Math', {
	  acosh: function acosh(x) {
	    return (x = +x) < 1 ? NaN : x > 94906265.62425156
	      ? Math.log(x) + Math.LN2
	      : log1p(x - 1 + sqrt(x - 1) * sqrt(x + 1));
	  }
	});


/***/ }),
/* 772 */
/***/ (function(module, exports, __webpack_require__) {

	// 20.2.2.5 Math.asinh(x)
	var $export = __webpack_require__(3);
	var $asinh = Math.asinh;
	
	function asinh(x) {
	  return !isFinite(x = +x) || x == 0 ? x : x < 0 ? -asinh(-x) : Math.log(x + Math.sqrt(x * x + 1));
	}
	
	// Tor Browser bug: Math.asinh(0) -> -0
	$export($export.S + $export.F * !($asinh && 1 / $asinh(0) > 0), 'Math', { asinh: asinh });


/***/ }),
/* 773 */
/***/ (function(module, exports, __webpack_require__) {

	// 20.2.2.7 Math.atanh(x)
	var $export = __webpack_require__(3);
	var $atanh = Math.atanh;
	
	// Tor Browser bug: Math.atanh(-0) -> 0
	$export($export.S + $export.F * !($atanh && 1 / $atanh(-0) < 0), 'Math', {
	  atanh: function atanh(x) {
	    return (x = +x) == 0 ? x : Math.log((1 + x) / (1 - x)) / 2;
	  }
	});


/***/ }),
/* 774 */
/***/ (function(module, exports, __webpack_require__) {

	// 20.2.2.9 Math.cbrt(x)
	var $export = __webpack_require__(3);
	var sign = __webpack_require__(207);
	
	$export($export.S, 'Math', {
	  cbrt: function cbrt(x) {
	    return sign(x = +x) * Math.pow(Math.abs(x), 1 / 3);
	  }
	});


/***/ }),
/* 775 */
/***/ (function(module, exports, __webpack_require__) {

	// 20.2.2.11 Math.clz32(x)
	var $export = __webpack_require__(3);
	
	$export($export.S, 'Math', {
	  clz32: function clz32(x) {
	    return (x >>>= 0) ? 31 - Math.floor(Math.log(x + 0.5) * Math.LOG2E) : 32;
	  }
	});


/***/ }),
/* 776 */
/***/ (function(module, exports, __webpack_require__) {

	// 20.2.2.12 Math.cosh(x)
	var $export = __webpack_require__(3);
	var exp = Math.exp;
	
	$export($export.S, 'Math', {
	  cosh: function cosh(x) {
	    return (exp(x = +x) + exp(-x)) / 2;
	  }
	});


/***/ }),
/* 777 */
/***/ (function(module, exports, __webpack_require__) {

	// 20.2.2.14 Math.expm1(x)
	var $export = __webpack_require__(3);
	var $expm1 = __webpack_require__(206);
	
	$export($export.S + $export.F * ($expm1 != Math.expm1), 'Math', { expm1: $expm1 });


/***/ }),
/* 778 */
/***/ (function(module, exports, __webpack_require__) {

	// 20.2.2.16 Math.fround(x)
	var $export = __webpack_require__(3);
	
	$export($export.S, 'Math', { fround: __webpack_require__(329) });


/***/ }),
/* 779 */
/***/ (function(module, exports, __webpack_require__) {

	// 20.2.2.17 Math.hypot([value1[, value2[, … ]]])
	var $export = __webpack_require__(3);
	var abs = Math.abs;
	
	$export($export.S, 'Math', {
	  hypot: function hypot(value1, value2) { // eslint-disable-line no-unused-vars
	    var sum = 0;
	    var i = 0;
	    var aLen = arguments.length;
	    var larg = 0;
	    var arg, div;
	    while (i < aLen) {
	      arg = abs(arguments[i++]);
	      if (larg < arg) {
	        div = larg / arg;
	        sum = sum * div * div + 1;
	        larg = arg;
	      } else if (arg > 0) {
	        div = arg / larg;
	        sum += div * div;
	      } else sum += arg;
	    }
	    return larg === Infinity ? Infinity : larg * Math.sqrt(sum);
	  }
	});


/***/ }),
/* 780 */
/***/ (function(module, exports, __webpack_require__) {

	// 20.2.2.18 Math.imul(x, y)
	var $export = __webpack_require__(3);
	var $imul = Math.imul;
	
	// some WebKit versions fails with big numbers, some has wrong arity
	$export($export.S + $export.F * __webpack_require__(13)(function () {
	  return $imul(0xffffffff, 5) != -5 || $imul.length != 2;
	}), 'Math', {
	  imul: function imul(x, y) {
	    var UINT16 = 0xffff;
	    var xn = +x;
	    var yn = +y;
	    var xl = UINT16 & xn;
	    var yl = UINT16 & yn;
	    return 0 | xl * yl + ((UINT16 & xn >>> 16) * yl + xl * (UINT16 & yn >>> 16) << 16 >>> 0);
	  }
	});


/***/ }),
/* 781 */
/***/ (function(module, exports, __webpack_require__) {

	// 20.2.2.21 Math.log10(x)
	var $export = __webpack_require__(3);
	
	$export($export.S, 'Math', {
	  log10: function log10(x) {
	    return Math.log(x) * Math.LOG10E;
	  }
	});


/***/ }),
/* 782 */
/***/ (function(module, exports, __webpack_require__) {

	// 20.2.2.20 Math.log1p(x)
	var $export = __webpack_require__(3);
	
	$export($export.S, 'Math', { log1p: __webpack_require__(330) });


/***/ }),
/* 783 */
/***/ (function(module, exports, __webpack_require__) {

	// 20.2.2.22 Math.log2(x)
	var $export = __webpack_require__(3);
	
	$export($export.S, 'Math', {
	  log2: function log2(x) {
	    return Math.log(x) / Math.LN2;
	  }
	});


/***/ }),
/* 784 */
/***/ (function(module, exports, __webpack_require__) {

	// 20.2.2.28 Math.sign(x)
	var $export = __webpack_require__(3);
	
	$export($export.S, 'Math', { sign: __webpack_require__(207) });


/***/ }),
/* 785 */
/***/ (function(module, exports, __webpack_require__) {

	// 20.2.2.30 Math.sinh(x)
	var $export = __webpack_require__(3);
	var expm1 = __webpack_require__(206);
	var exp = Math.exp;
	
	// V8 near Chromium 38 has a problem with very small numbers
	$export($export.S + $export.F * __webpack_require__(13)(function () {
	  return !Math.sinh(-2e-17) != -2e-17;
	}), 'Math', {
	  sinh: function sinh(x) {
	    return Math.abs(x = +x) < 1
	      ? (expm1(x) - expm1(-x)) / 2
	      : (exp(x - 1) - exp(-x - 1)) * (Math.E / 2);
	  }
	});


/***/ }),
/* 786 */
/***/ (function(module, exports, __webpack_require__) {

	// 20.2.2.33 Math.tanh(x)
	var $export = __webpack_require__(3);
	var expm1 = __webpack_require__(206);
	var exp = Math.exp;
	
	$export($export.S, 'Math', {
	  tanh: function tanh(x) {
	    var a = expm1(x = +x);
	    var b = expm1(-x);
	    return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp(x) + exp(-x));
	  }
	});


/***/ }),
/* 787 */
/***/ (function(module, exports, __webpack_require__) {

	// 20.2.2.34 Math.trunc(x)
	var $export = __webpack_require__(3);
	
	$export($export.S, 'Math', {
	  trunc: function trunc(it) {
	    return (it > 0 ? Math.floor : Math.ceil)(it);
	  }
	});


/***/ }),
/* 788 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	var global = __webpack_require__(9);
	var has = __webpack_require__(42);
	var cof = __webpack_require__(50);
	var inheritIfRequired = __webpack_require__(202);
	var toPrimitive = __webpack_require__(61);
	var fails = __webpack_require__(13);
	var gOPN = __webpack_require__(93).f;
	var gOPD = __webpack_require__(43).f;
	var dP = __webpack_require__(26).f;
	var $trim = __webpack_require__(113).trim;
	var NUMBER = 'Number';
	var $Number = global[NUMBER];
	var Base = $Number;
	var proto = $Number.prototype;
	// Opera ~12 has broken Object#toString
	var BROKEN_COF = cof(__webpack_require__(92)(proto)) == NUMBER;
	var TRIM = 'trim' in String.prototype;
	
	// 7.1.3 ToNumber(argument)
	var toNumber = function (argument) {
	  var it = toPrimitive(argument, false);
	  if (typeof it == 'string' && it.length > 2) {
	    it = TRIM ? it.trim() : $trim(it, 3);
	    var first = it.charCodeAt(0);
	    var third, radix, maxCode;
	    if (first === 43 || first === 45) {
	      third = it.charCodeAt(2);
	      if (third === 88 || third === 120) return NaN; // Number('+0x1') should be NaN, old V8 fix
	    } else if (first === 48) {
	      switch (it.charCodeAt(1)) {
	        case 66: case 98: radix = 2; maxCode = 49; break; // fast equal /^0b[01]+$/i
	        case 79: case 111: radix = 8; maxCode = 55; break; // fast equal /^0o[0-7]+$/i
	        default: return +it;
	      }
	      for (var digits = it.slice(2), i = 0, l = digits.length, code; i < l; i++) {
	        code = digits.charCodeAt(i);
	        // parseInt parses a string to a first unavailable symbol
	        // but ToNumber should return NaN if a string contains unavailable symbols
	        if (code < 48 || code > maxCode) return NaN;
	      } return parseInt(digits, radix);
	    }
	  } return +it;
	};
	
	if (!$Number(' 0o1') || !$Number('0b1') || $Number('+0x1')) {
	  $Number = function Number(value) {
	    var it = arguments.length < 1 ? 0 : value;
	    var that = this;
	    return that instanceof $Number
	      // check on 1..constructor(foo) case
	      && (BROKEN_COF ? fails(function () { proto.valueOf.call(that); }) : cof(that) != NUMBER)
	        ? inheritIfRequired(new Base(toNumber(it)), that, $Number) : toNumber(it);
	  };
	  for (var keys = __webpack_require__(25) ? gOPN(Base) : (
	    // ES3:
	    'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' +
	    // ES6 (in case, if modules with ES6 Number statics required before):
	    'EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,' +
	    'MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger'
	  ).split(','), j = 0, key; keys.length > j; j++) {
	    if (has(Base, key = keys[j]) && !has($Number, key)) {
	      dP($Number, key, gOPD(Base, key));
	    }
	  }
	  $Number.prototype = proto;
	  proto.constructor = $Number;
	  __webpack_require__(38)(global, NUMBER, $Number);
	}


/***/ }),
/* 789 */
/***/ (function(module, exports, __webpack_require__) {

	// 20.1.2.1 Number.EPSILON
	var $export = __webpack_require__(3);
	
	$export($export.S, 'Number', { EPSILON: Math.pow(2, -52) });


/***/ }),
/* 790 */
/***/ (function(module, exports, __webpack_require__) {

	// 20.1.2.2 Number.isFinite(number)
	var $export = __webpack_require__(3);
	var _isFinite = __webpack_require__(9).isFinite;
	
	$export($export.S, 'Number', {
	  isFinite: function isFinite(it) {
	    return typeof it == 'number' && _isFinite(it);
	  }
	});


/***/ }),
/* 791 */
/***/ (function(module, exports, __webpack_require__) {

	// 20.1.2.3 Number.isInteger(number)
	var $export = __webpack_require__(3);
	
	$export($export.S, 'Number', { isInteger: __webpack_require__(326) });


/***/ }),
/* 792 */
/***/ (function(module, exports, __webpack_require__) {

	// 20.1.2.4 Number.isNaN(number)
	var $export = __webpack_require__(3);
	
	$export($export.S, 'Number', {
	  isNaN: function isNaN(number) {
	    // eslint-disable-next-line no-self-compare
	    return number != number;
	  }
	});


/***/ }),
/* 793 */
/***/ (function(module, exports, __webpack_require__) {

	// 20.1.2.5 Number.isSafeInteger(number)
	var $export = __webpack_require__(3);
	var isInteger = __webpack_require__(326);
	var abs = Math.abs;
	
	$export($export.S, 'Number', {
	  isSafeInteger: function isSafeInteger(number) {
	    return isInteger(number) && abs(number) <= 0x1fffffffffffff;
	  }
	});


/***/ }),
/* 794 */
/***/ (function(module, exports, __webpack_require__) {

	// 20.1.2.6 Number.MAX_SAFE_INTEGER
	var $export = __webpack_require__(3);
	
	$export($export.S, 'Number', { MAX_SAFE_INTEGER: 0x1fffffffffffff });


/***/ }),
/* 795 */
/***/ (function(module, exports, __webpack_require__) {

	// 20.1.2.10 Number.MIN_SAFE_INTEGER
	var $export = __webpack_require__(3);
	
	$export($export.S, 'Number', { MIN_SAFE_INTEGER: -0x1fffffffffffff });


/***/ }),
/* 796 */
/***/ (function(module, exports, __webpack_require__) {

	var $export = __webpack_require__(3);
	var $parseFloat = __webpack_require__(338);
	// 20.1.2.12 Number.parseFloat(string)
	$export($export.S + $export.F * (Number.parseFloat != $parseFloat), 'Number', { parseFloat: $parseFloat });


/***/ }),
/* 797 */
/***/ (function(module, exports, __webpack_require__) {

	var $export = __webpack_require__(3);
	var $parseInt = __webpack_require__(339);
	// 20.1.2.13 Number.parseInt(string, radix)
	$export($export.S + $export.F * (Number.parseInt != $parseInt), 'Number', { parseInt: $parseInt });


/***/ }),
/* 798 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	var $export = __webpack_require__(3);
	var toInteger = __webpack_require__(54);
	var aNumberValue = __webpack_require__(318);
	var repeat = __webpack_require__(214);
	var $toFixed = 1.0.toFixed;
	var floor = Math.floor;
	var data = [0, 0, 0, 0, 0, 0];
	var ERROR = 'Number.toFixed: incorrect invocation!';
	var ZERO = '0';
	
	var multiply = function (n, c) {
	  var i = -1;
	  var c2 = c;
	  while (++i < 6) {
	    c2 += n * data[i];
	    data[i] = c2 % 1e7;
	    c2 = floor(c2 / 1e7);
	  }
	};
	var divide = function (n) {
	  var i = 6;
	  var c = 0;
	  while (--i >= 0) {
	    c += data[i];
	    data[i] = floor(c / n);
	    c = (c % n) * 1e7;
	  }
	};
	var numToString = function () {
	  var i = 6;
	  var s = '';
	  while (--i >= 0) {
	    if (s !== '' || i === 0 || data[i] !== 0) {
	      var t = String(data[i]);
	      s = s === '' ? t : s + repeat.call(ZERO, 7 - t.length) + t;
	    }
	  } return s;
	};
	var pow = function (x, n, acc) {
	  return n === 0 ? acc : n % 2 === 1 ? pow(x, n - 1, acc * x) : pow(x * x, n / 2, acc);
	};
	var log = function (x) {
	  var n = 0;
	  var x2 = x;
	  while (x2 >= 4096) {
	    n += 12;
	    x2 /= 4096;
	  }
	  while (x2 >= 2) {
	    n += 1;
	    x2 /= 2;
	  } return n;
	};
	
	$export($export.P + $export.F * (!!$toFixed && (
	  0.00008.toFixed(3) !== '0.000' ||
	  0.9.toFixed(0) !== '1' ||
	  1.255.toFixed(2) !== '1.25' ||
	  1000000000000000128.0.toFixed(0) !== '1000000000000000128'
	) || !__webpack_require__(13)(function () {
	  // V8 ~ Android 4.3-
	  $toFixed.call({});
	})), 'Number', {
	  toFixed: function toFixed(fractionDigits) {
	    var x = aNumberValue(this, ERROR);
	    var f = toInteger(fractionDigits);
	    var s = '';
	    var m = ZERO;
	    var e, z, j, k;
	    if (f < 0 || f > 20) throw RangeError(ERROR);
	    // eslint-disable-next-line no-self-compare
	    if (x != x) return 'NaN';
	    if (x <= -1e21 || x >= 1e21) return String(x);
	    if (x < 0) {
	      s = '-';
	      x = -x;
	    }
	    if (x > 1e-21) {
	      e = log(x * pow(2, 69, 1)) - 69;
	      z = e < 0 ? x * pow(2, -e, 1) : x / pow(2, e, 1);
	      z *= 0x10000000000000;
	      e = 52 - e;
	      if (e > 0) {
	        multiply(0, z);
	        j = f;
	        while (j >= 7) {
	          multiply(1e7, 0);
	          j -= 7;
	        }
	        multiply(pow(10, j, 1), 0);
	        j = e - 1;
	        while (j >= 23) {
	          divide(1 << 23);
	          j -= 23;
	        }
	        divide(1 << j);
	        multiply(1, 1);
	        divide(2);
	        m = numToString();
	      } else {
	        multiply(0, z);
	        multiply(1 << -e, 0);
	        m = numToString() + repeat.call(ZERO, f);
	      }
	    }
	    if (f > 0) {
	      k = m.length;
	      m = s + (k <= f ? '0.' + repeat.call(ZERO, f - k) + m : m.slice(0, k - f) + '.' + m.slice(k - f));
	    } else {
	      m = s + m;
	    } return m;
	  }
	});


/***/ }),
/* 799 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	var $export = __webpack_require__(3);
	var $fails = __webpack_require__(13);
	var aNumberValue = __webpack_require__(318);
	var $toPrecision = 1.0.toPrecision;
	
	$export($export.P + $export.F * ($fails(function () {
	  // IE7-
	  return $toPrecision.call(1, undefined) !== '1';
	}) || !$fails(function () {
	  // V8 ~ Android 4.3-
	  $toPrecision.call({});
	})), 'Number', {
	  toPrecision: function toPrecision(precision) {
	    var that = aNumberValue(this, 'Number#toPrecision: incorrect invocation!');
	    return precision === undefined ? $toPrecision.call(that) : $toPrecision.call(that, precision);
	  }
	});


/***/ }),
/* 800 */
/***/ (function(module, exports, __webpack_require__) {

	// 19.1.3.1 Object.assign(target, source)
	var $export = __webpack_require__(3);
	
	$export($export.S + $export.F, 'Object', { assign: __webpack_require__(332) });


/***/ }),
/* 801 */
/***/ (function(module, exports, __webpack_require__) {

	var $export = __webpack_require__(3);
	// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])
	$export($export.S, 'Object', { create: __webpack_require__(92) });


/***/ }),
/* 802 */
/***/ (function(module, exports, __webpack_require__) {

	var $export = __webpack_require__(3);
	// 19.1.2.3 / 15.2.3.7 Object.defineProperties(O, Properties)
	$export($export.S + $export.F * !__webpack_require__(25), 'Object', { defineProperties: __webpack_require__(333) });


/***/ }),
/* 803 */
/***/ (function(module, exports, __webpack_require__) {

	var $export = __webpack_require__(3);
	// 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)
	$export($export.S + $export.F * !__webpack_require__(25), 'Object', { defineProperty: __webpack_require__(26).f });


/***/ }),
/* 804 */
/***/ (function(module, exports, __webpack_require__) {

	// 19.1.2.5 Object.freeze(O)
	var isObject = __webpack_require__(15);
	var meta = __webpack_require__(78).onFreeze;
	
	__webpack_require__(60)('freeze', function ($freeze) {
	  return function freeze(it) {
	    return $freeze && isObject(it) ? $freeze(meta(it)) : it;
	  };
	});


/***/ }),
/* 805 */
/***/ (function(module, exports, __webpack_require__) {

	// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)
	var toIObject = __webpack_require__(45);
	var $getOwnPropertyDescriptor = __webpack_require__(43).f;
	
	__webpack_require__(60)('getOwnPropertyDescriptor', function () {
	  return function getOwnPropertyDescriptor(it, key) {
	    return $getOwnPropertyDescriptor(toIObject(it), key);
	  };
	});


/***/ }),
/* 806 */
/***/ (function(module, exports, __webpack_require__) {

	// 19.1.2.7 Object.getOwnPropertyNames(O)
	__webpack_require__(60)('getOwnPropertyNames', function () {
	  return __webpack_require__(334).f;
	});


/***/ }),
/* 807 */
/***/ (function(module, exports, __webpack_require__) {

	// 19.1.2.9 Object.getPrototypeOf(O)
	var toObject = __webpack_require__(28);
	var $getPrototypeOf = __webpack_require__(44);
	
	__webpack_require__(60)('getPrototypeOf', function () {
	  return function getPrototypeOf(it) {
	    return $getPrototypeOf(toObject(it));
	  };
	});


/***/ }),
/* 808 */
/***/ (function(module, exports, __webpack_require__) {

	// 19.1.2.11 Object.isExtensible(O)
	var isObject = __webpack_require__(15);
	
	__webpack_require__(60)('isExtensible', function ($isExtensible) {
	  return function isExtensible(it) {
	    return isObject(it) ? $isExtensible ? $isExtensible(it) : true : false;
	  };
	});


/***/ }),
/* 809 */
/***/ (function(module, exports, __webpack_require__) {

	// 19.1.2.12 Object.isFrozen(O)
	var isObject = __webpack_require__(15);
	
	__webpack_require__(60)('isFrozen', function ($isFrozen) {
	  return function isFrozen(it) {
	    return isObject(it) ? $isFrozen ? $isFrozen(it) : false : true;
	  };
	});


/***/ }),
/* 810 */
/***/ (function(module, exports, __webpack_require__) {

	// 19.1.2.13 Object.isSealed(O)
	var isObject = __webpack_require__(15);
	
	__webpack_require__(60)('isSealed', function ($isSealed) {
	  return function isSealed(it) {
	    return isObject(it) ? $isSealed ? $isSealed(it) : false : true;
	  };
	});


/***/ }),
/* 811 */
/***/ (function(module, exports, __webpack_require__) {

	// 19.1.3.10 Object.is(value1, value2)
	var $export = __webpack_require__(3);
	$export($export.S, 'Object', { is: __webpack_require__(341) });


/***/ }),
/* 812 */
/***/ (function(module, exports, __webpack_require__) {

	// 19.1.2.14 Object.keys(O)
	var toObject = __webpack_require__(28);
	var $keys = __webpack_require__(94);
	
	__webpack_require__(60)('keys', function () {
	  return function keys(it) {
	    return $keys(toObject(it));
	  };
	});


/***/ }),
/* 813 */
/***/ (function(module, exports, __webpack_require__) {

	// 19.1.2.15 Object.preventExtensions(O)
	var isObject = __webpack_require__(15);
	var meta = __webpack_require__(78).onFreeze;
	
	__webpack_require__(60)('preventExtensions', function ($preventExtensions) {
	  return function preventExtensions(it) {
	    return $preventExtensions && isObject(it) ? $preventExtensions(meta(it)) : it;
	  };
	});


/***/ }),
/* 814 */
/***/ (function(module, exports, __webpack_require__) {

	// 19.1.2.17 Object.seal(O)
	var isObject = __webpack_require__(15);
	var meta = __webpack_require__(78).onFreeze;
	
	__webpack_require__(60)('seal', function ($seal) {
	  return function seal(it) {
	    return $seal && isObject(it) ? $seal(meta(it)) : it;
	  };
	});


/***/ }),
/* 815 */
/***/ (function(module, exports, __webpack_require__) {

	// 19.1.3.19 Object.setPrototypeOf(O, proto)
	var $export = __webpack_require__(3);
	$export($export.S, 'Object', { setPrototypeOf: __webpack_require__(211).set });


/***/ }),
/* 816 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	// 19.1.3.6 Object.prototype.toString()
	var classof = __webpack_require__(110);
	var test = {};
	test[__webpack_require__(20)('toStringTag')] = 'z';
	if (test + '' != '[object z]') {
	  __webpack_require__(38)(Object.prototype, 'toString', function toString() {
	    return '[object ' + classof(this) + ']';
	  }, true);
	}


/***/ }),
/* 817 */
/***/ (function(module, exports, __webpack_require__) {

	var $export = __webpack_require__(3);
	var $parseFloat = __webpack_require__(338);
	// 18.2.4 parseFloat(string)
	$export($export.G + $export.F * (parseFloat != $parseFloat), { parseFloat: $parseFloat });


/***/ }),
/* 818 */
/***/ (function(module, exports, __webpack_require__) {

	var $export = __webpack_require__(3);
	var $parseInt = __webpack_require__(339);
	// 18.2.5 parseInt(string, radix)
	$export($export.G + $export.F * (parseInt != $parseInt), { parseInt: $parseInt });


/***/ }),
/* 819 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	var LIBRARY = __webpack_require__(77);
	var global = __webpack_require__(9);
	var ctx = __webpack_require__(52);
	var classof = __webpack_require__(110);
	var $export = __webpack_require__(3);
	var isObject = __webpack_require__(15);
	var aFunction = __webpack_require__(36);
	var anInstance = __webpack_require__(90);
	var forOf = __webpack_require__(91);
	var speciesConstructor = __webpack_require__(133);
	var task = __webpack_require__(216).set;
	var microtask = __webpack_require__(208)();
	var newPromiseCapabilityModule = __webpack_require__(209);
	var perform = __webpack_require__(340);
	var userAgent = __webpack_require__(162);
	var promiseResolve = __webpack_require__(237);
	var PROMISE = 'Promise';
	var TypeError = global.TypeError;
	var process = global.process;
	var versions = process && process.versions;
	var v8 = versions && versions.v8 || '';
	var $Promise = global[PROMISE];
	var isNode = classof(process) == 'process';
	var empty = function () { /* empty */ };
	var Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;
	var newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;
	
	var USE_NATIVE = !!function () {
	  try {
	    // correct subclassing with @@species support
	    var promise = $Promise.resolve(1);
	    var FakePromise = (promise.constructor = {})[__webpack_require__(20)('species')] = function (exec) {
	      exec(empty, empty);
	    };
	    // unhandled rejections tracking support, NodeJS Promise without it fails @@species test
	    return (isNode || typeof PromiseRejectionEvent == 'function')
	      && promise.then(empty) instanceof FakePromise
	      // v8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables
	      // https://bugs.chromium.org/p/chromium/issues/detail?id=830565
	      // we can't detect it synchronously, so just check versions
	      && v8.indexOf('6.6') !== 0
	      && userAgent.indexOf('Chrome/66') === -1;
	  } catch (e) { /* empty */ }
	}();
	
	// helpers
	var isThenable = function (it) {
	  var then;
	  return isObject(it) && typeof (then = it.then) == 'function' ? then : false;
	};
	var notify = function (promise, isReject) {
	  if (promise._n) return;
	  promise._n = true;
	  var chain = promise._c;
	  microtask(function () {
	    var value = promise._v;
	    var ok = promise._s == 1;
	    var i = 0;
	    var run = function (reaction) {
	      var handler = ok ? reaction.ok : reaction.fail;
	      var resolve = reaction.resolve;
	      var reject = reaction.reject;
	      var domain = reaction.domain;
	      var result, then, exited;
	      try {
	        if (handler) {
	          if (!ok) {
	            if (promise._h == 2) onHandleUnhandled(promise);
	            promise._h = 1;
	          }
	          if (handler === true) result = value;
	          else {
	            if (domain) domain.enter();
	            result = handler(value); // may throw
	            if (domain) {
	              domain.exit();
	              exited = true;
	            }
	          }
	          if (result === reaction.promise) {
	            reject(TypeError('Promise-chain cycle'));
	          } else if (then = isThenable(result)) {
	            then.call(result, resolve, reject);
	          } else resolve(result);
	        } else reject(value);
	      } catch (e) {
	        if (domain && !exited) domain.exit();
	        reject(e);
	      }
	    };
	    while (chain.length > i) run(chain[i++]); // variable length - can't use forEach
	    promise._c = [];
	    promise._n = false;
	    if (isReject && !promise._h) onUnhandled(promise);
	  });
	};
	var onUnhandled = function (promise) {
	  task.call(global, function () {
	    var value = promise._v;
	    var unhandled = isUnhandled(promise);
	    var result, handler, console;
	    if (unhandled) {
	      result = perform(function () {
	        if (isNode) {
	          process.emit('unhandledRejection', value, promise);
	        } else if (handler = global.onunhandledrejection) {
	          handler({ promise: promise, reason: value });
	        } else if ((console = global.console) && console.error) {
	          console.error('Unhandled promise rejection', value);
	        }
	      });
	      // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should
	      promise._h = isNode || isUnhandled(promise) ? 2 : 1;
	    } promise._a = undefined;
	    if (unhandled && result.e) throw result.v;
	  });
	};
	var isUnhandled = function (promise) {
	  return promise._h !== 1 && (promise._a || promise._c).length === 0;
	};
	var onHandleUnhandled = function (promise) {
	  task.call(global, function () {
	    var handler;
	    if (isNode) {
	      process.emit('rejectionHandled', promise);
	    } else if (handler = global.onrejectionhandled) {
	      handler({ promise: promise, reason: promise._v });
	    }
	  });
	};
	var $reject = function (value) {
	  var promise = this;
	  if (promise._d) return;
	  promise._d = true;
	  promise = promise._w || promise; // unwrap
	  promise._v = value;
	  promise._s = 2;
	  if (!promise._a) promise._a = promise._c.slice();
	  notify(promise, true);
	};
	var $resolve = function (value) {
	  var promise = this;
	  var then;
	  if (promise._d) return;
	  promise._d = true;
	  promise = promise._w || promise; // unwrap
	  try {
	    if (promise === value) throw TypeError("Promise can't be resolved itself");
	    if (then = isThenable(value)) {
	      microtask(function () {
	        var wrapper = { _w: promise, _d: false }; // wrap
	        try {
	          then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));
	        } catch (e) {
	          $reject.call(wrapper, e);
	        }
	      });
	    } else {
	      promise._v = value;
	      promise._s = 1;
	      notify(promise, false);
	    }
	  } catch (e) {
	    $reject.call({ _w: promise, _d: false }, e); // wrap
	  }
	};
	
	// constructor polyfill
	if (!USE_NATIVE) {
	  // 25.4.3.1 Promise(executor)
	  $Promise = function Promise(executor) {
	    anInstance(this, $Promise, PROMISE, '_h');
	    aFunction(executor);
	    Internal.call(this);
	    try {
	      executor(ctx($resolve, this, 1), ctx($reject, this, 1));
	    } catch (err) {
	      $reject.call(this, err);
	    }
	  };
	  // eslint-disable-next-line no-unused-vars
	  Internal = function Promise(executor) {
	    this._c = [];             // <- awaiting reactions
	    this._a = undefined;      // <- checked in isUnhandled reactions
	    this._s = 0;              // <- state
	    this._d = false;          // <- done
	    this._v = undefined;      // <- value
	    this._h = 0;              // <- rejection state, 0 - default, 1 - handled, 2 - unhandled
	    this._n = false;          // <- notify
	  };
	  Internal.prototype = __webpack_require__(96)($Promise.prototype, {
	    // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)
	    then: function then(onFulfilled, onRejected) {
	      var reaction = newPromiseCapability(speciesConstructor(this, $Promise));
	      reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;
	      reaction.fail = typeof onRejected == 'function' && onRejected;
	      reaction.domain = isNode ? process.domain : undefined;
	      this._c.push(reaction);
	      if (this._a) this._a.push(reaction);
	      if (this._s) notify(this, false);
	      return reaction.promise;
	    },
	    // 25.4.5.1 Promise.prototype.catch(onRejected)
	    'catch': function (onRejected) {
	      return this.then(undefined, onRejected);
	    }
	  });
	  OwnPromiseCapability = function () {
	    var promise = new Internal();
	    this.promise = promise;
	    this.resolve = ctx($resolve, promise, 1);
	    this.reject = ctx($reject, promise, 1);
	  };
	  newPromiseCapabilityModule.f = newPromiseCapability = function (C) {
	    return C === $Promise || C === Wrapper
	      ? new OwnPromiseCapability(C)
	      : newGenericPromiseCapability(C);
	  };
	}
	
	$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });
	__webpack_require__(112)($Promise, PROMISE);
	__webpack_require__(97)(PROMISE);
	Wrapper = __webpack_require__(51)[PROMISE];
	
	// statics
	$export($export.S + $export.F * !USE_NATIVE, PROMISE, {
	  // 25.4.4.5 Promise.reject(r)
	  reject: function reject(r) {
	    var capability = newPromiseCapability(this);
	    var $$reject = capability.reject;
	    $$reject(r);
	    return capability.promise;
	  }
	});
	$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {
	  // 25.4.4.6 Promise.resolve(x)
	  resolve: function resolve(x) {
	    return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);
	  }
	});
	$export($export.S + $export.F * !(USE_NATIVE && __webpack_require__(156)(function (iter) {
	  $Promise.all(iter)['catch'](empty);
	})), PROMISE, {
	  // 25.4.4.1 Promise.all(iterable)
	  all: function all(iterable) {
	    var C = this;
	    var capability = newPromiseCapability(C);
	    var resolve = capability.resolve;
	    var reject = capability.reject;
	    var result = perform(function () {
	      var values = [];
	      var index = 0;
	      var remaining = 1;
	      forOf(iterable, false, function (promise) {
	        var $index = index++;
	        var alreadyCalled = false;
	        values.push(undefined);
	        remaining++;
	        C.resolve(promise).then(function (value) {
	          if (alreadyCalled) return;
	          alreadyCalled = true;
	          values[$index] = value;
	          --remaining || resolve(values);
	        }, reject);
	      });
	      --remaining || resolve(values);
	    });
	    if (result.e) reject(result.v);
	    return capability.promise;
	  },
	  // 25.4.4.4 Promise.race(iterable)
	  race: function race(iterable) {
	    var C = this;
	    var capability = newPromiseCapability(C);
	    var reject = capability.reject;
	    var result = perform(function () {
	      forOf(iterable, false, function (promise) {
	        C.resolve(promise).then(capability.resolve, reject);
	      });
	    });
	    if (result.e) reject(result.v);
	    return capability.promise;
	  }
	});


/***/ }),
/* 820 */
/***/ (function(module, exports, __webpack_require__) {

	// 26.1.1 Reflect.apply(target, thisArgument, argumentsList)
	var $export = __webpack_require__(3);
	var aFunction = __webpack_require__(36);
	var anObject = __webpack_require__(6);
	var rApply = (__webpack_require__(9).Reflect || {}).apply;
	var fApply = Function.apply;
	// MS Edge argumentsList argument is optional
	$export($export.S + $export.F * !__webpack_require__(13)(function () {
	  rApply(function () { /* empty */ });
	}), 'Reflect', {
	  apply: function apply(target, thisArgument, argumentsList) {
	    var T = aFunction(target);
	    var L = anObject(argumentsList);
	    return rApply ? rApply(T, thisArgument, L) : fApply.call(T, thisArgument, L);
	  }
	});


/***/ }),
/* 821 */
/***/ (function(module, exports, __webpack_require__) {

	// 26.1.2 Reflect.construct(target, argumentsList [, newTarget])
	var $export = __webpack_require__(3);
	var create = __webpack_require__(92);
	var aFunction = __webpack_require__(36);
	var anObject = __webpack_require__(6);
	var isObject = __webpack_require__(15);
	var fails = __webpack_require__(13);
	var bind = __webpack_require__(322);
	var rConstruct = (__webpack_require__(9).Reflect || {}).construct;
	
	// MS Edge supports only 2 arguments and argumentsList argument is optional
	// FF Nightly sets third argument as `new.target`, but does not create `this` from it
	var NEW_TARGET_BUG = fails(function () {
	  function F() { /* empty */ }
	  return !(rConstruct(function () { /* empty */ }, [], F) instanceof F);
	});
	var ARGS_BUG = !fails(function () {
	  rConstruct(function () { /* empty */ });
	});
	
	$export($export.S + $export.F * (NEW_TARGET_BUG || ARGS_BUG), 'Reflect', {
	  construct: function construct(Target, args /* , newTarget */) {
	    aFunction(Target);
	    anObject(args);
	    var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);
	    if (ARGS_BUG && !NEW_TARGET_BUG) return rConstruct(Target, args, newTarget);
	    if (Target == newTarget) {
	      // w/o altered newTarget, optimization for 0-4 arguments
	      switch (args.length) {
	        case 0: return new Target();
	        case 1: return new Target(args[0]);
	        case 2: return new Target(args[0], args[1]);
	        case 3: return new Target(args[0], args[1], args[2]);
	        case 4: return new Target(args[0], args[1], args[2], args[3]);
	      }
	      // w/o altered newTarget, lot of arguments case
	      var $args = [null];
	      $args.push.apply($args, args);
	      return new (bind.apply(Target, $args))();
	    }
	    // with altered newTarget, not support built-in constructors
	    var proto = newTarget.prototype;
	    var instance = create(isObject(proto) ? proto : Object.prototype);
	    var result = Function.apply.call(Target, instance, args);
	    return isObject(result) ? result : instance;
	  }
	});


/***/ }),
/* 822 */
/***/ (function(module, exports, __webpack_require__) {

	// 26.1.3 Reflect.defineProperty(target, propertyKey, attributes)
	var dP = __webpack_require__(26);
	var $export = __webpack_require__(3);
	var anObject = __webpack_require__(6);
	var toPrimitive = __webpack_require__(61);
	
	// MS Edge has broken Reflect.defineProperty - throwing instead of returning false
	$export($export.S + $export.F * __webpack_require__(13)(function () {
	  // eslint-disable-next-line no-undef
	  Reflect.defineProperty(dP.f({}, 1, { value: 1 }), 1, { value: 2 });
	}), 'Reflect', {
	  defineProperty: function defineProperty(target, propertyKey, attributes) {
	    anObject(target);
	    propertyKey = toPrimitive(propertyKey, true);
	    anObject(attributes);
	    try {
	      dP.f(target, propertyKey, attributes);
	      return true;
	    } catch (e) {
	      return false;
	    }
	  }
	});


/***/ }),
/* 823 */
/***/ (function(module, exports, __webpack_require__) {

	// 26.1.4 Reflect.deleteProperty(target, propertyKey)
	var $export = __webpack_require__(3);
	var gOPD = __webpack_require__(43).f;
	var anObject = __webpack_require__(6);
	
	$export($export.S, 'Reflect', {
	  deleteProperty: function deleteProperty(target, propertyKey) {
	    var desc = gOPD(anObject(target), propertyKey);
	    return desc && !desc.configurable ? false : delete target[propertyKey];
	  }
	});


/***/ }),
/* 824 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	// 26.1.5 Reflect.enumerate(target)
	var $export = __webpack_require__(3);
	var anObject = __webpack_require__(6);
	var Enumerate = function (iterated) {
	  this._t = anObject(iterated); // target
	  this._i = 0;                  // next index
	  var keys = this._k = [];      // keys
	  var key;
	  for (key in iterated) keys.push(key);
	};
	__webpack_require__(204)(Enumerate, 'Object', function () {
	  var that = this;
	  var keys = that._k;
	  var key;
	  do {
	    if (that._i >= keys.length) return { value: undefined, done: true };
	  } while (!((key = keys[that._i++]) in that._t));
	  return { value: key, done: false };
	});
	
	$export($export.S, 'Reflect', {
	  enumerate: function enumerate(target) {
	    return new Enumerate(target);
	  }
	});


/***/ }),
/* 825 */
/***/ (function(module, exports, __webpack_require__) {

	// 26.1.7 Reflect.getOwnPropertyDescriptor(target, propertyKey)
	var gOPD = __webpack_require__(43);
	var $export = __webpack_require__(3);
	var anObject = __webpack_require__(6);
	
	$export($export.S, 'Reflect', {
	  getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey) {
	    return gOPD.f(anObject(target), propertyKey);
	  }
	});


/***/ }),
/* 826 */
/***/ (function(module, exports, __webpack_require__) {

	// 26.1.8 Reflect.getPrototypeOf(target)
	var $export = __webpack_require__(3);
	var getProto = __webpack_require__(44);
	var anObject = __webpack_require__(6);
	
	$export($export.S, 'Reflect', {
	  getPrototypeOf: function getPrototypeOf(target) {
	    return getProto(anObject(target));
	  }
	});


/***/ }),
/* 827 */
/***/ (function(module, exports, __webpack_require__) {

	// 26.1.6 Reflect.get(target, propertyKey [, receiver])
	var gOPD = __webpack_require__(43);
	var getPrototypeOf = __webpack_require__(44);
	var has = __webpack_require__(42);
	var $export = __webpack_require__(3);
	var isObject = __webpack_require__(15);
	var anObject = __webpack_require__(6);
	
	function get(target, propertyKey /* , receiver */) {
	  var receiver = arguments.length < 3 ? target : arguments[2];
	  var desc, proto;
	  if (anObject(target) === receiver) return target[propertyKey];
	  if (desc = gOPD.f(target, propertyKey)) return has(desc, 'value')
	    ? desc.value
	    : desc.get !== undefined
	      ? desc.get.call(receiver)
	      : undefined;
	  if (isObject(proto = getPrototypeOf(target))) return get(proto, propertyKey, receiver);
	}
	
	$export($export.S, 'Reflect', { get: get });


/***/ }),
/* 828 */
/***/ (function(module, exports, __webpack_require__) {

	// 26.1.9 Reflect.has(target, propertyKey)
	var $export = __webpack_require__(3);
	
	$export($export.S, 'Reflect', {
	  has: function has(target, propertyKey) {
	    return propertyKey in target;
	  }
	});


/***/ }),
/* 829 */
/***/ (function(module, exports, __webpack_require__) {

	// 26.1.10 Reflect.isExtensible(target)
	var $export = __webpack_require__(3);
	var anObject = __webpack_require__(6);
	var $isExtensible = Object.isExtensible;
	
	$export($export.S, 'Reflect', {
	  isExtensible: function isExtensible(target) {
	    anObject(target);
	    return $isExtensible ? $isExtensible(target) : true;
	  }
	});


/***/ }),
/* 830 */
/***/ (function(module, exports, __webpack_require__) {

	// 26.1.11 Reflect.ownKeys(target)
	var $export = __webpack_require__(3);
	
	$export($export.S, 'Reflect', { ownKeys: __webpack_require__(337) });


/***/ }),
/* 831 */
/***/ (function(module, exports, __webpack_require__) {

	// 26.1.12 Reflect.preventExtensions(target)
	var $export = __webpack_require__(3);
	var anObject = __webpack_require__(6);
	var $preventExtensions = Object.preventExtensions;
	
	$export($export.S, 'Reflect', {
	  preventExtensions: function preventExtensions(target) {
	    anObject(target);
	    try {
	      if ($preventExtensions) $preventExtensions(target);
	      return true;
	    } catch (e) {
	      return false;
	    }
	  }
	});


/***/ }),
/* 832 */
/***/ (function(module, exports, __webpack_require__) {

	// 26.1.14 Reflect.setPrototypeOf(target, proto)
	var $export = __webpack_require__(3);
	var setProto = __webpack_require__(211);
	
	if (setProto) $export($export.S, 'Reflect', {
	  setPrototypeOf: function setPrototypeOf(target, proto) {
	    setProto.check(target, proto);
	    try {
	      setProto.set(target, proto);
	      return true;
	    } catch (e) {
	      return false;
	    }
	  }
	});


/***/ }),
/* 833 */
/***/ (function(module, exports, __webpack_require__) {

	// 26.1.13 Reflect.set(target, propertyKey, V [, receiver])
	var dP = __webpack_require__(26);
	var gOPD = __webpack_require__(43);
	var getPrototypeOf = __webpack_require__(44);
	var has = __webpack_require__(42);
	var $export = __webpack_require__(3);
	var createDesc = __webpack_require__(95);
	var anObject = __webpack_require__(6);
	var isObject = __webpack_require__(15);
	
	function set(target, propertyKey, V /* , receiver */) {
	  var receiver = arguments.length < 4 ? target : arguments[3];
	  var ownDesc = gOPD.f(anObject(target), propertyKey);
	  var existingDescriptor, proto;
	  if (!ownDesc) {
	    if (isObject(proto = getPrototypeOf(target))) {
	      return set(proto, propertyKey, V, receiver);
	    }
	    ownDesc = createDesc(0);
	  }
	  if (has(ownDesc, 'value')) {
	    if (ownDesc.writable === false || !isObject(receiver)) return false;
	    if (existingDescriptor = gOPD.f(receiver, propertyKey)) {
	      if (existingDescriptor.get || existingDescriptor.set || existingDescriptor.writable === false) return false;
	      existingDescriptor.value = V;
	      dP.f(receiver, propertyKey, existingDescriptor);
	    } else dP.f(receiver, propertyKey, createDesc(0, V));
	    return true;
	  }
	  return ownDesc.set === undefined ? false : (ownDesc.set.call(receiver, V), true);
	}
	
	$export($export.S, 'Reflect', { set: set });


/***/ }),
/* 834 */
/***/ (function(module, exports, __webpack_require__) {

	var global = __webpack_require__(9);
	var inheritIfRequired = __webpack_require__(202);
	var dP = __webpack_require__(26).f;
	var gOPN = __webpack_require__(93).f;
	var isRegExp = __webpack_require__(155);
	var $flags = __webpack_require__(129);
	var $RegExp = global.RegExp;
	var Base = $RegExp;
	var proto = $RegExp.prototype;
	var re1 = /a/g;
	var re2 = /a/g;
	// "new" creates a new object, old webkit buggy here
	var CORRECT_NEW = new $RegExp(re1) !== re1;
	
	if (__webpack_require__(25) && (!CORRECT_NEW || __webpack_require__(13)(function () {
	  re2[__webpack_require__(20)('match')] = false;
	  // RegExp constructor can alter flags and IsRegExp works correct with @@match
	  return $RegExp(re1) != re1 || $RegExp(re2) == re2 || $RegExp(re1, 'i') != '/a/i';
	}))) {
	  $RegExp = function RegExp(p, f) {
	    var tiRE = this instanceof $RegExp;
	    var piRE = isRegExp(p);
	    var fiU = f === undefined;
	    return !tiRE && piRE && p.constructor === $RegExp && fiU ? p
	      : inheritIfRequired(CORRECT_NEW
	        ? new Base(piRE && !fiU ? p.source : p, f)
	        : Base((piRE = p instanceof $RegExp) ? p.source : p, piRE && fiU ? $flags.call(p) : f)
	      , tiRE ? this : proto, $RegExp);
	  };
	  var proxy = function (key) {
	    key in $RegExp || dP($RegExp, key, {
	      configurable: true,
	      get: function () { return Base[key]; },
	      set: function (it) { Base[key] = it; }
	    });
	  };
	  for (var keys = gOPN(Base), i = 0; keys.length > i;) proxy(keys[i++]);
	  proto.constructor = $RegExp;
	  $RegExp.prototype = proto;
	  __webpack_require__(38)(global, 'RegExp', $RegExp);
	}
	
	__webpack_require__(97)('RegExp');


/***/ }),
/* 835 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	var anObject = __webpack_require__(6);
	var toLength = __webpack_require__(21);
	var advanceStringIndex = __webpack_require__(194);
	var regExpExec = __webpack_require__(159);
	
	// @@match logic
	__webpack_require__(153)('match', 1, function (defined, MATCH, $match, maybeCallNative) {
	  return [
	    // `String.prototype.match` method
	    // https://tc39.github.io/ecma262/#sec-string.prototype.match
	    function match(regexp) {
	      var O = defined(this);
	      var fn = regexp == undefined ? undefined : regexp[MATCH];
	      return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));
	    },
	    // `RegExp.prototype[@@match]` method
	    // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@match
	    function (regexp) {
	      var res = maybeCallNative($match, regexp, this);
	      if (res.done) return res.value;
	      var rx = anObject(regexp);
	      var S = String(this);
	      if (!rx.global) return regExpExec(rx, S);
	      var fullUnicode = rx.unicode;
	      rx.lastIndex = 0;
	      var A = [];
	      var n = 0;
	      var result;
	      while ((result = regExpExec(rx, S)) !== null) {
	        var matchStr = String(result[0]);
	        A[n] = matchStr;
	        if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);
	        n++;
	      }
	      return n === 0 ? null : A;
	    }
	  ];
	});


/***/ }),
/* 836 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	var anObject = __webpack_require__(6);
	var toObject = __webpack_require__(28);
	var toLength = __webpack_require__(21);
	var toInteger = __webpack_require__(54);
	var advanceStringIndex = __webpack_require__(194);
	var regExpExec = __webpack_require__(159);
	var max = Math.max;
	var min = Math.min;
	var floor = Math.floor;
	var SUBSTITUTION_SYMBOLS = /\$([$&`']|\d\d?|<[^>]*>)/g;
	var SUBSTITUTION_SYMBOLS_NO_NAMED = /\$([$&`']|\d\d?)/g;
	
	var maybeToString = function (it) {
	  return it === undefined ? it : String(it);
	};
	
	// @@replace logic
	__webpack_require__(153)('replace', 2, function (defined, REPLACE, $replace, maybeCallNative) {
	  return [
	    // `String.prototype.replace` method
	    // https://tc39.github.io/ecma262/#sec-string.prototype.replace
	    function replace(searchValue, replaceValue) {
	      var O = defined(this);
	      var fn = searchValue == undefined ? undefined : searchValue[REPLACE];
	      return fn !== undefined
	        ? fn.call(searchValue, O, replaceValue)
	        : $replace.call(String(O), searchValue, replaceValue);
	    },
	    // `RegExp.prototype[@@replace]` method
	    // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@replace
	    function (regexp, replaceValue) {
	      var res = maybeCallNative($replace, regexp, this, replaceValue);
	      if (res.done) return res.value;
	
	      var rx = anObject(regexp);
	      var S = String(this);
	      var functionalReplace = typeof replaceValue === 'function';
	      if (!functionalReplace) replaceValue = String(replaceValue);
	      var global = rx.global;
	      if (global) {
	        var fullUnicode = rx.unicode;
	        rx.lastIndex = 0;
	      }
	      var results = [];
	      while (true) {
	        var result = regExpExec(rx, S);
	        if (result === null) break;
	        results.push(result);
	        if (!global) break;
	        var matchStr = String(result[0]);
	        if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);
	      }
	      var accumulatedResult = '';
	      var nextSourcePosition = 0;
	      for (var i = 0; i < results.length; i++) {
	        result = results[i];
	        var matched = String(result[0]);
	        var position = max(min(toInteger(result.index), S.length), 0);
	        var captures = [];
	        // NOTE: This is equivalent to
	        //   captures = result.slice(1).map(maybeToString)
	        // but for some reason `nativeSlice.call(result, 1, result.length)` (called in
	        // the slice polyfill when slicing native arrays) "doesn't work" in safari 9 and
	        // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it.
	        for (var j = 1; j < result.length; j++) captures.push(maybeToString(result[j]));
	        var namedCaptures = result.groups;
	        if (functionalReplace) {
	          var replacerArgs = [matched].concat(captures, position, S);
	          if (namedCaptures !== undefined) replacerArgs.push(namedCaptures);
	          var replacement = String(replaceValue.apply(undefined, replacerArgs));
	        } else {
	          replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue);
	        }
	        if (position >= nextSourcePosition) {
	          accumulatedResult += S.slice(nextSourcePosition, position) + replacement;
	          nextSourcePosition = position + matched.length;
	        }
	      }
	      return accumulatedResult + S.slice(nextSourcePosition);
	    }
	  ];
	
	    // https://tc39.github.io/ecma262/#sec-getsubstitution
	  function getSubstitution(matched, str, position, captures, namedCaptures, replacement) {
	    var tailPos = position + matched.length;
	    var m = captures.length;
	    var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED;
	    if (namedCaptures !== undefined) {
	      namedCaptures = toObject(namedCaptures);
	      symbols = SUBSTITUTION_SYMBOLS;
	    }
	    return $replace.call(replacement, symbols, function (match, ch) {
	      var capture;
	      switch (ch.charAt(0)) {
	        case '$': return '$';
	        case '&': return matched;
	        case '`': return str.slice(0, position);
	        case "'": return str.slice(tailPos);
	        case '<':
	          capture = namedCaptures[ch.slice(1, -1)];
	          break;
	        default: // \d\d?
	          var n = +ch;
	          if (n === 0) return match;
	          if (n > m) {
	            var f = floor(n / 10);
	            if (f === 0) return match;
	            if (f <= m) return captures[f - 1] === undefined ? ch.charAt(1) : captures[f - 1] + ch.charAt(1);
	            return match;
	          }
	          capture = captures[n - 1];
	      }
	      return capture === undefined ? '' : capture;
	    });
	  }
	});


/***/ }),
/* 837 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	var anObject = __webpack_require__(6);
	var sameValue = __webpack_require__(341);
	var regExpExec = __webpack_require__(159);
	
	// @@search logic
	__webpack_require__(153)('search', 1, function (defined, SEARCH, $search, maybeCallNative) {
	  return [
	    // `String.prototype.search` method
	    // https://tc39.github.io/ecma262/#sec-string.prototype.search
	    function search(regexp) {
	      var O = defined(this);
	      var fn = regexp == undefined ? undefined : regexp[SEARCH];
	      return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));
	    },
	    // `RegExp.prototype[@@search]` method
	    // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@search
	    function (regexp) {
	      var res = maybeCallNative($search, regexp, this);
	      if (res.done) return res.value;
	      var rx = anObject(regexp);
	      var S = String(this);
	      var previousLastIndex = rx.lastIndex;
	      if (!sameValue(previousLastIndex, 0)) rx.lastIndex = 0;
	      var result = regExpExec(rx, S);
	      if (!sameValue(rx.lastIndex, previousLastIndex)) rx.lastIndex = previousLastIndex;
	      return result === null ? -1 : result.index;
	    }
	  ];
	});


/***/ }),
/* 838 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	var isRegExp = __webpack_require__(155);
	var anObject = __webpack_require__(6);
	var speciesConstructor = __webpack_require__(133);
	var advanceStringIndex = __webpack_require__(194);
	var toLength = __webpack_require__(21);
	var callRegExpExec = __webpack_require__(159);
	var regexpExec = __webpack_require__(210);
	var fails = __webpack_require__(13);
	var $min = Math.min;
	var $push = [].push;
	var $SPLIT = 'split';
	var LENGTH = 'length';
	var LAST_INDEX = 'lastIndex';
	var MAX_UINT32 = 0xffffffff;
	
	// babel-minify transpiles RegExp('x', 'y') -> /x/y and it causes SyntaxError
	var SUPPORTS_Y = !fails(function () { RegExp(MAX_UINT32, 'y'); });
	
	// @@split logic
	__webpack_require__(153)('split', 2, function (defined, SPLIT, $split, maybeCallNative) {
	  var internalSplit;
	  if (
	    'abbc'[$SPLIT](/(b)*/)[1] == 'c' ||
	    'test'[$SPLIT](/(?:)/, -1)[LENGTH] != 4 ||
	    'ab'[$SPLIT](/(?:ab)*/)[LENGTH] != 2 ||
	    '.'[$SPLIT](/(.?)(.?)/)[LENGTH] != 4 ||
	    '.'[$SPLIT](/()()/)[LENGTH] > 1 ||
	    ''[$SPLIT](/.?/)[LENGTH]
	  ) {
	    // based on es5-shim implementation, need to rework it
	    internalSplit = function (separator, limit) {
	      var string = String(this);
	      if (separator === undefined && limit === 0) return [];
	      // If `separator` is not a regex, use native split
	      if (!isRegExp(separator)) return $split.call(string, separator, limit);
	      var output = [];
	      var flags = (separator.ignoreCase ? 'i' : '') +
	                  (separator.multiline ? 'm' : '') +
	                  (separator.unicode ? 'u' : '') +
	                  (separator.sticky ? 'y' : '');
	      var lastLastIndex = 0;
	      var splitLimit = limit === undefined ? MAX_UINT32 : limit >>> 0;
	      // Make `global` and avoid `lastIndex` issues by working with a copy
	      var separatorCopy = new RegExp(separator.source, flags + 'g');
	      var match, lastIndex, lastLength;
	      while (match = regexpExec.call(separatorCopy, string)) {
	        lastIndex = separatorCopy[LAST_INDEX];
	        if (lastIndex > lastLastIndex) {
	          output.push(string.slice(lastLastIndex, match.index));
	          if (match[LENGTH] > 1 && match.index < string[LENGTH]) $push.apply(output, match.slice(1));
	          lastLength = match[0][LENGTH];
	          lastLastIndex = lastIndex;
	          if (output[LENGTH] >= splitLimit) break;
	        }
	        if (separatorCopy[LAST_INDEX] === match.index) separatorCopy[LAST_INDEX]++; // Avoid an infinite loop
	      }
	      if (lastLastIndex === string[LENGTH]) {
	        if (lastLength || !separatorCopy.test('')) output.push('');
	      } else output.push(string.slice(lastLastIndex));
	      return output[LENGTH] > splitLimit ? output.slice(0, splitLimit) : output;
	    };
	  // Chakra, V8
	  } else if ('0'[$SPLIT](undefined, 0)[LENGTH]) {
	    internalSplit = function (separator, limit) {
	      return separator === undefined && limit === 0 ? [] : $split.call(this, separator, limit);
	    };
	  } else {
	    internalSplit = $split;
	  }
	
	  return [
	    // `String.prototype.split` method
	    // https://tc39.github.io/ecma262/#sec-string.prototype.split
	    function split(separator, limit) {
	      var O = defined(this);
	      var splitter = separator == undefined ? undefined : separator[SPLIT];
	      return splitter !== undefined
	        ? splitter.call(separator, O, limit)
	        : internalSplit.call(String(O), separator, limit);
	    },
	    // `RegExp.prototype[@@split]` method
	    // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@split
	    //
	    // NOTE: This cannot be properly polyfilled in engines that don't support
	    // the 'y' flag.
	    function (regexp, limit) {
	      var res = maybeCallNative(internalSplit, regexp, this, limit, internalSplit !== $split);
	      if (res.done) return res.value;
	
	      var rx = anObject(regexp);
	      var S = String(this);
	      var C = speciesConstructor(rx, RegExp);
	
	      var unicodeMatching = rx.unicode;
	      var flags = (rx.ignoreCase ? 'i' : '') +
	                  (rx.multiline ? 'm' : '') +
	                  (rx.unicode ? 'u' : '') +
	                  (SUPPORTS_Y ? 'y' : 'g');
	
	      // ^(? + rx + ) is needed, in combination with some S slicing, to
	      // simulate the 'y' flag.
	      var splitter = new C(SUPPORTS_Y ? rx : '^(?:' + rx.source + ')', flags);
	      var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;
	      if (lim === 0) return [];
	      if (S.length === 0) return callRegExpExec(splitter, S) === null ? [S] : [];
	      var p = 0;
	      var q = 0;
	      var A = [];
	      while (q < S.length) {
	        splitter.lastIndex = SUPPORTS_Y ? q : 0;
	        var z = callRegExpExec(splitter, SUPPORTS_Y ? S : S.slice(q));
	        var e;
	        if (
	          z === null ||
	          (e = $min(toLength(splitter.lastIndex + (SUPPORTS_Y ? 0 : q)), S.length)) === p
	        ) {
	          q = advanceStringIndex(S, q, unicodeMatching);
	        } else {
	          A.push(S.slice(p, q));
	          if (A.length === lim) return A;
	          for (var i = 1; i <= z.length - 1; i++) {
	            A.push(z[i]);
	            if (A.length === lim) return A;
	          }
	          q = p = e;
	        }
	      }
	      A.push(S.slice(p));
	      return A;
	    }
	  ];
	});


/***/ }),
/* 839 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	__webpack_require__(347);
	var anObject = __webpack_require__(6);
	var $flags = __webpack_require__(129);
	var DESCRIPTORS = __webpack_require__(25);
	var TO_STRING = 'toString';
	var $toString = /./[TO_STRING];
	
	var define = function (fn) {
	  __webpack_require__(38)(RegExp.prototype, TO_STRING, fn, true);
	};
	
	// 21.2.5.14 RegExp.prototype.toString()
	if (__webpack_require__(13)(function () { return $toString.call({ source: 'a', flags: 'b' }) != '/a/b'; })) {
	  define(function toString() {
	    var R = anObject(this);
	    return '/'.concat(R.source, '/',
	      'flags' in R ? R.flags : !DESCRIPTORS && R instanceof RegExp ? $flags.call(R) : undefined);
	  });
	// FF44- RegExp#toString has a wrong name
	} else if ($toString.name != TO_STRING) {
	  define(function toString() {
	    return $toString.call(this);
	  });
	}


/***/ }),
/* 840 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	// B.2.3.2 String.prototype.anchor(name)
	__webpack_require__(39)('anchor', function (createHTML) {
	  return function anchor(name) {
	    return createHTML(this, 'a', 'name', name);
	  };
	});


/***/ }),
/* 841 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	// B.2.3.3 String.prototype.big()
	__webpack_require__(39)('big', function (createHTML) {
	  return function big() {
	    return createHTML(this, 'big', '', '');
	  };
	});


/***/ }),
/* 842 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	// B.2.3.4 String.prototype.blink()
	__webpack_require__(39)('blink', function (createHTML) {
	  return function blink() {
	    return createHTML(this, 'blink', '', '');
	  };
	});


/***/ }),
/* 843 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	var $export = __webpack_require__(3);
	var $at = __webpack_require__(160)(false);
	$export($export.P, 'String', {
	  // 21.1.3.3 String.prototype.codePointAt(pos)
	  codePointAt: function codePointAt(pos) {
	    return $at(this, pos);
	  }
	});


/***/ }),
/* 844 */
/***/ (function(module, exports, __webpack_require__) {

	// 21.1.3.6 String.prototype.endsWith(searchString [, endPosition])
	'use strict';
	var $export = __webpack_require__(3);
	var toLength = __webpack_require__(21);
	var context = __webpack_require__(213);
	var ENDS_WITH = 'endsWith';
	var $endsWith = ''[ENDS_WITH];
	
	$export($export.P + $export.F * __webpack_require__(200)(ENDS_WITH), 'String', {
	  endsWith: function endsWith(searchString /* , endPosition = @length */) {
	    var that = context(this, searchString, ENDS_WITH);
	    var endPosition = arguments.length > 1 ? arguments[1] : undefined;
	    var len = toLength(that.length);
	    var end = endPosition === undefined ? len : Math.min(toLength(endPosition), len);
	    var search = String(searchString);
	    return $endsWith
	      ? $endsWith.call(that, search, end)
	      : that.slice(end - search.length, end) === search;
	  }
	});


/***/ }),
/* 845 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	// B.2.3.6 String.prototype.fixed()
	__webpack_require__(39)('fixed', function (createHTML) {
	  return function fixed() {
	    return createHTML(this, 'tt', '', '');
	  };
	});


/***/ }),
/* 846 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	// B.2.3.8 String.prototype.fontsize(size)
	__webpack_require__(39)('fontsize', function (createHTML) {
	  return function fontsize(size) {
	    return createHTML(this, 'font', 'size', size);
	  };
	});


/***/ }),
/* 847 */
/***/ (function(module, exports, __webpack_require__) {

	var $export = __webpack_require__(3);
	var toAbsoluteIndex = __webpack_require__(81);
	var fromCharCode = String.fromCharCode;
	var $fromCodePoint = String.fromCodePoint;
	
	// length should be 1, old FF problem
	$export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', {
	  // 21.1.2.2 String.fromCodePoint(...codePoints)
	  fromCodePoint: function fromCodePoint(x) { // eslint-disable-line no-unused-vars
	    var res = [];
	    var aLen = arguments.length;
	    var i = 0;
	    var code;
	    while (aLen > i) {
	      code = +arguments[i++];
	      if (toAbsoluteIndex(code, 0x10ffff) !== code) throw RangeError(code + ' is not a valid code point');
	      res.push(code < 0x10000
	        ? fromCharCode(code)
	        : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00)
	      );
	    } return res.join('');
	  }
	});


/***/ }),
/* 848 */
/***/ (function(module, exports, __webpack_require__) {

	// 21.1.3.7 String.prototype.includes(searchString, position = 0)
	'use strict';
	var $export = __webpack_require__(3);
	var context = __webpack_require__(213);
	var INCLUDES = 'includes';
	
	$export($export.P + $export.F * __webpack_require__(200)(INCLUDES), 'String', {
	  includes: function includes(searchString /* , position = 0 */) {
	    return !!~context(this, searchString, INCLUDES)
	      .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);
	  }
	});


/***/ }),
/* 849 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	// B.2.3.9 String.prototype.italics()
	__webpack_require__(39)('italics', function (createHTML) {
	  return function italics() {
	    return createHTML(this, 'i', '', '');
	  };
	});


/***/ }),
/* 850 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	var $at = __webpack_require__(160)(true);
	
	// 21.1.3.27 String.prototype[@@iterator]()
	__webpack_require__(205)(String, 'String', function (iterated) {
	  this._t = String(iterated); // target
	  this._i = 0;                // next index
	// 21.1.5.2.1 %StringIteratorPrototype%.next()
	}, function () {
	  var O = this._t;
	  var index = this._i;
	  var point;
	  if (index >= O.length) return { value: undefined, done: true };
	  point = $at(O, index);
	  this._i += point.length;
	  return { value: point, done: false };
	});


/***/ }),
/* 851 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	// B.2.3.10 String.prototype.link(url)
	__webpack_require__(39)('link', function (createHTML) {
	  return function link(url) {
	    return createHTML(this, 'a', 'href', url);
	  };
	});


/***/ }),
/* 852 */
/***/ (function(module, exports, __webpack_require__) {

	var $export = __webpack_require__(3);
	var toIObject = __webpack_require__(45);
	var toLength = __webpack_require__(21);
	
	$export($export.S, 'String', {
	  // 21.1.2.4 String.raw(callSite, ...substitutions)
	  raw: function raw(callSite) {
	    var tpl = toIObject(callSite.raw);
	    var len = toLength(tpl.length);
	    var aLen = arguments.length;
	    var res = [];
	    var i = 0;
	    while (len > i) {
	      res.push(String(tpl[i++]));
	      if (i < aLen) res.push(String(arguments[i]));
	    } return res.join('');
	  }
	});


/***/ }),
/* 853 */
/***/ (function(module, exports, __webpack_require__) {

	var $export = __webpack_require__(3);
	
	$export($export.P, 'String', {
	  // 21.1.3.13 String.prototype.repeat(count)
	  repeat: __webpack_require__(214)
	});


/***/ }),
/* 854 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	// B.2.3.11 String.prototype.small()
	__webpack_require__(39)('small', function (createHTML) {
	  return function small() {
	    return createHTML(this, 'small', '', '');
	  };
	});


/***/ }),
/* 855 */
/***/ (function(module, exports, __webpack_require__) {

	// 21.1.3.18 String.prototype.startsWith(searchString [, position ])
	'use strict';
	var $export = __webpack_require__(3);
	var toLength = __webpack_require__(21);
	var context = __webpack_require__(213);
	var STARTS_WITH = 'startsWith';
	var $startsWith = ''[STARTS_WITH];
	
	$export($export.P + $export.F * __webpack_require__(200)(STARTS_WITH), 'String', {
	  startsWith: function startsWith(searchString /* , position = 0 */) {
	    var that = context(this, searchString, STARTS_WITH);
	    var index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length));
	    var search = String(searchString);
	    return $startsWith
	      ? $startsWith.call(that, search, index)
	      : that.slice(index, index + search.length) === search;
	  }
	});


/***/ }),
/* 856 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	// B.2.3.12 String.prototype.strike()
	__webpack_require__(39)('strike', function (createHTML) {
	  return function strike() {
	    return createHTML(this, 'strike', '', '');
	  };
	});


/***/ }),
/* 857 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	// B.2.3.13 String.prototype.sub()
	__webpack_require__(39)('sub', function (createHTML) {
	  return function sub() {
	    return createHTML(this, 'sub', '', '');
	  };
	});


/***/ }),
/* 858 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	// B.2.3.14 String.prototype.sup()
	__webpack_require__(39)('sup', function (createHTML) {
	  return function sup() {
	    return createHTML(this, 'sup', '', '');
	  };
	});


/***/ }),
/* 859 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	// 21.1.3.25 String.prototype.trim()
	__webpack_require__(113)('trim', function ($trim) {
	  return function trim() {
	    return $trim(this, 3);
	  };
	});


/***/ }),
/* 860 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	var $export = __webpack_require__(3);
	var $typed = __webpack_require__(161);
	var buffer = __webpack_require__(217);
	var anObject = __webpack_require__(6);
	var toAbsoluteIndex = __webpack_require__(81);
	var toLength = __webpack_require__(21);
	var isObject = __webpack_require__(15);
	var ArrayBuffer = __webpack_require__(9).ArrayBuffer;
	var speciesConstructor = __webpack_require__(133);
	var $ArrayBuffer = buffer.ArrayBuffer;
	var $DataView = buffer.DataView;
	var $isView = $typed.ABV && ArrayBuffer.isView;
	var $slice = $ArrayBuffer.prototype.slice;
	var VIEW = $typed.VIEW;
	var ARRAY_BUFFER = 'ArrayBuffer';
	
	$export($export.G + $export.W + $export.F * (ArrayBuffer !== $ArrayBuffer), { ArrayBuffer: $ArrayBuffer });
	
	$export($export.S + $export.F * !$typed.CONSTR, ARRAY_BUFFER, {
	  // 24.1.3.1 ArrayBuffer.isView(arg)
	  isView: function isView(it) {
	    return $isView && $isView(it) || isObject(it) && VIEW in it;
	  }
	});
	
	$export($export.P + $export.U + $export.F * __webpack_require__(13)(function () {
	  return !new $ArrayBuffer(2).slice(1, undefined).byteLength;
	}), ARRAY_BUFFER, {
	  // 24.1.4.3 ArrayBuffer.prototype.slice(start, end)
	  slice: function slice(start, end) {
	    if ($slice !== undefined && end === undefined) return $slice.call(anObject(this), start); // FF fix
	    var len = anObject(this).byteLength;
	    var first = toAbsoluteIndex(start, len);
	    var fin = toAbsoluteIndex(end === undefined ? len : end, len);
	    var result = new (speciesConstructor(this, $ArrayBuffer))(toLength(fin - first));
	    var viewS = new $DataView(this);
	    var viewT = new $DataView(result);
	    var index = 0;
	    while (first < fin) {
	      viewT.setUint8(index++, viewS.getUint8(first++));
	    } return result;
	  }
	});
	
	__webpack_require__(97)(ARRAY_BUFFER);


/***/ }),
/* 861 */
/***/ (function(module, exports, __webpack_require__) {

	var $export = __webpack_require__(3);
	$export($export.G + $export.W + $export.F * !__webpack_require__(161).ABV, {
	  DataView: __webpack_require__(217).DataView
	});


/***/ }),
/* 862 */
/***/ (function(module, exports, __webpack_require__) {

	__webpack_require__(67)('Float32', 4, function (init) {
	  return function Float32Array(data, byteOffset, length) {
	    return init(this, data, byteOffset, length);
	  };
	});


/***/ }),
/* 863 */
/***/ (function(module, exports, __webpack_require__) {

	__webpack_require__(67)('Float64', 8, function (init) {
	  return function Float64Array(data, byteOffset, length) {
	    return init(this, data, byteOffset, length);
	  };
	});


/***/ }),
/* 864 */
/***/ (function(module, exports, __webpack_require__) {

	__webpack_require__(67)('Int16', 2, function (init) {
	  return function Int16Array(data, byteOffset, length) {
	    return init(this, data, byteOffset, length);
	  };
	});


/***/ }),
/* 865 */
/***/ (function(module, exports, __webpack_require__) {

	__webpack_require__(67)('Int32', 4, function (init) {
	  return function Int32Array(data, byteOffset, length) {
	    return init(this, data, byteOffset, length);
	  };
	});


/***/ }),
/* 866 */
/***/ (function(module, exports, __webpack_require__) {

	__webpack_require__(67)('Int8', 1, function (init) {
	  return function Int8Array(data, byteOffset, length) {
	    return init(this, data, byteOffset, length);
	  };
	});


/***/ }),
/* 867 */
/***/ (function(module, exports, __webpack_require__) {

	__webpack_require__(67)('Uint16', 2, function (init) {
	  return function Uint16Array(data, byteOffset, length) {
	    return init(this, data, byteOffset, length);
	  };
	});


/***/ }),
/* 868 */
/***/ (function(module, exports, __webpack_require__) {

	__webpack_require__(67)('Uint32', 4, function (init) {
	  return function Uint32Array(data, byteOffset, length) {
	    return init(this, data, byteOffset, length);
	  };
	});


/***/ }),
/* 869 */
/***/ (function(module, exports, __webpack_require__) {

	__webpack_require__(67)('Uint8', 1, function (init) {
	  return function Uint8Array(data, byteOffset, length) {
	    return init(this, data, byteOffset, length);
	  };
	});


/***/ }),
/* 870 */
/***/ (function(module, exports, __webpack_require__) {

	__webpack_require__(67)('Uint8', 1, function (init) {
	  return function Uint8ClampedArray(data, byteOffset, length) {
	    return init(this, data, byteOffset, length);
	  };
	}, true);


/***/ }),
/* 871 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	var weak = __webpack_require__(236);
	var validate = __webpack_require__(82);
	var WEAK_SET = 'WeakSet';
	
	// 23.4 WeakSet Objects
	__webpack_require__(138)(WEAK_SET, function (get) {
	  return function WeakSet() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };
	}, {
	  // 23.4.3.1 WeakSet.prototype.add(value)
	  add: function add(value) {
	    return weak.def(validate(this, WEAK_SET), value, true);
	  }
	}, weak, false, true);


/***/ }),
/* 872 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	// https://tc39.github.io/proposal-flatMap/#sec-Array.prototype.flatMap
	var $export = __webpack_require__(3);
	var flattenIntoArray = __webpack_require__(323);
	var toObject = __webpack_require__(28);
	var toLength = __webpack_require__(21);
	var aFunction = __webpack_require__(36);
	var arraySpeciesCreate = __webpack_require__(196);
	
	$export($export.P, 'Array', {
	  flatMap: function flatMap(callbackfn /* , thisArg */) {
	    var O = toObject(this);
	    var sourceLen, A;
	    aFunction(callbackfn);
	    sourceLen = toLength(O.length);
	    A = arraySpeciesCreate(O, 0);
	    flattenIntoArray(A, O, O, sourceLen, 0, 1, callbackfn, arguments[1]);
	    return A;
	  }
	});
	
	__webpack_require__(76)('flatMap');


/***/ }),
/* 873 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	// https://tc39.github.io/proposal-flatMap/#sec-Array.prototype.flatten
	var $export = __webpack_require__(3);
	var flattenIntoArray = __webpack_require__(323);
	var toObject = __webpack_require__(28);
	var toLength = __webpack_require__(21);
	var toInteger = __webpack_require__(54);
	var arraySpeciesCreate = __webpack_require__(196);
	
	$export($export.P, 'Array', {
	  flatten: function flatten(/* depthArg = 1 */) {
	    var depthArg = arguments[0];
	    var O = toObject(this);
	    var sourceLen = toLength(O.length);
	    var A = arraySpeciesCreate(O, 0);
	    flattenIntoArray(A, O, O, sourceLen, 0, depthArg === undefined ? 1 : toInteger(depthArg));
	    return A;
	  }
	});
	
	__webpack_require__(76)('flatten');


/***/ }),
/* 874 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	// https://github.com/tc39/Array.prototype.includes
	var $export = __webpack_require__(3);
	var $includes = __webpack_require__(152)(true);
	
	$export($export.P, 'Array', {
	  includes: function includes(el /* , fromIndex = 0 */) {
	    return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);
	  }
	});
	
	__webpack_require__(76)('includes');


/***/ }),
/* 875 */
/***/ (function(module, exports, __webpack_require__) {

	// https://github.com/rwaldron/tc39-notes/blob/master/es6/2014-09/sept-25.md#510-globalasap-for-enqueuing-a-microtask
	var $export = __webpack_require__(3);
	var microtask = __webpack_require__(208)();
	var process = __webpack_require__(9).process;
	var isNode = __webpack_require__(50)(process) == 'process';
	
	$export($export.G, {
	  asap: function asap(fn) {
	    var domain = isNode && process.domain;
	    microtask(domain ? domain.bind(fn) : fn);
	  }
	});


/***/ }),
/* 876 */
/***/ (function(module, exports, __webpack_require__) {

	// https://github.com/ljharb/proposal-is-error
	var $export = __webpack_require__(3);
	var cof = __webpack_require__(50);
	
	$export($export.S, 'Error', {
	  isError: function isError(it) {
	    return cof(it) === 'Error';
	  }
	});


/***/ }),
/* 877 */
/***/ (function(module, exports, __webpack_require__) {

	// https://github.com/tc39/proposal-global
	var $export = __webpack_require__(3);
	
	$export($export.G, { global: __webpack_require__(9) });


/***/ }),
/* 878 */
/***/ (function(module, exports, __webpack_require__) {

	// https://tc39.github.io/proposal-setmap-offrom/#sec-map.from
	__webpack_require__(139)('Map');


/***/ }),
/* 879 */
/***/ (function(module, exports, __webpack_require__) {

	// https://tc39.github.io/proposal-setmap-offrom/#sec-map.of
	__webpack_require__(140)('Map');


/***/ }),
/* 880 */
/***/ (function(module, exports, __webpack_require__) {

	// https://github.com/DavidBruant/Map-Set.prototype.toJSON
	var $export = __webpack_require__(3);
	
	$export($export.P + $export.R, 'Map', { toJSON: __webpack_require__(235)('Map') });


/***/ }),
/* 881 */
/***/ (function(module, exports, __webpack_require__) {

	// https://rwaldron.github.io/proposal-math-extensions/
	var $export = __webpack_require__(3);
	
	$export($export.S, 'Math', {
	  clamp: function clamp(x, lower, upper) {
	    return Math.min(upper, Math.max(lower, x));
	  }
	});


/***/ }),
/* 882 */
/***/ (function(module, exports, __webpack_require__) {

	// https://rwaldron.github.io/proposal-math-extensions/
	var $export = __webpack_require__(3);
	
	$export($export.S, 'Math', { DEG_PER_RAD: Math.PI / 180 });


/***/ }),
/* 883 */
/***/ (function(module, exports, __webpack_require__) {

	// https://rwaldron.github.io/proposal-math-extensions/
	var $export = __webpack_require__(3);
	var RAD_PER_DEG = 180 / Math.PI;
	
	$export($export.S, 'Math', {
	  degrees: function degrees(radians) {
	    return radians * RAD_PER_DEG;
	  }
	});


/***/ }),
/* 884 */
/***/ (function(module, exports, __webpack_require__) {

	// https://rwaldron.github.io/proposal-math-extensions/
	var $export = __webpack_require__(3);
	var scale = __webpack_require__(331);
	var fround = __webpack_require__(329);
	
	$export($export.S, 'Math', {
	  fscale: function fscale(x, inLow, inHigh, outLow, outHigh) {
	    return fround(scale(x, inLow, inHigh, outLow, outHigh));
	  }
	});


/***/ }),
/* 885 */
/***/ (function(module, exports, __webpack_require__) {

	// https://gist.github.com/BrendanEich/4294d5c212a6d2254703
	var $export = __webpack_require__(3);
	
	$export($export.S, 'Math', {
	  iaddh: function iaddh(x0, x1, y0, y1) {
	    var $x0 = x0 >>> 0;
	    var $x1 = x1 >>> 0;
	    var $y0 = y0 >>> 0;
	    return $x1 + (y1 >>> 0) + (($x0 & $y0 | ($x0 | $y0) & ~($x0 + $y0 >>> 0)) >>> 31) | 0;
	  }
	});


/***/ }),
/* 886 */
/***/ (function(module, exports, __webpack_require__) {

	// https://gist.github.com/BrendanEich/4294d5c212a6d2254703
	var $export = __webpack_require__(3);
	
	$export($export.S, 'Math', {
	  imulh: function imulh(u, v) {
	    var UINT16 = 0xffff;
	    var $u = +u;
	    var $v = +v;
	    var u0 = $u & UINT16;
	    var v0 = $v & UINT16;
	    var u1 = $u >> 16;
	    var v1 = $v >> 16;
	    var t = (u1 * v0 >>> 0) + (u0 * v0 >>> 16);
	    return u1 * v1 + (t >> 16) + ((u0 * v1 >>> 0) + (t & UINT16) >> 16);
	  }
	});


/***/ }),
/* 887 */
/***/ (function(module, exports, __webpack_require__) {

	// https://gist.github.com/BrendanEich/4294d5c212a6d2254703
	var $export = __webpack_require__(3);
	
	$export($export.S, 'Math', {
	  isubh: function isubh(x0, x1, y0, y1) {
	    var $x0 = x0 >>> 0;
	    var $x1 = x1 >>> 0;
	    var $y0 = y0 >>> 0;
	    return $x1 - (y1 >>> 0) - ((~$x0 & $y0 | ~($x0 ^ $y0) & $x0 - $y0 >>> 0) >>> 31) | 0;
	  }
	});


/***/ }),
/* 888 */
/***/ (function(module, exports, __webpack_require__) {

	// https://rwaldron.github.io/proposal-math-extensions/
	var $export = __webpack_require__(3);
	
	$export($export.S, 'Math', { RAD_PER_DEG: 180 / Math.PI });


/***/ }),
/* 889 */
/***/ (function(module, exports, __webpack_require__) {

	// https://rwaldron.github.io/proposal-math-extensions/
	var $export = __webpack_require__(3);
	var DEG_PER_RAD = Math.PI / 180;
	
	$export($export.S, 'Math', {
	  radians: function radians(degrees) {
	    return degrees * DEG_PER_RAD;
	  }
	});


/***/ }),
/* 890 */
/***/ (function(module, exports, __webpack_require__) {

	// https://rwaldron.github.io/proposal-math-extensions/
	var $export = __webpack_require__(3);
	
	$export($export.S, 'Math', { scale: __webpack_require__(331) });


/***/ }),
/* 891 */
/***/ (function(module, exports, __webpack_require__) {

	// http://jfbastien.github.io/papers/Math.signbit.html
	var $export = __webpack_require__(3);
	
	$export($export.S, 'Math', { signbit: function signbit(x) {
	  // eslint-disable-next-line no-self-compare
	  return (x = +x) != x ? x : x == 0 ? 1 / x == Infinity : x > 0;
	} });


/***/ }),
/* 892 */
/***/ (function(module, exports, __webpack_require__) {

	// https://gist.github.com/BrendanEich/4294d5c212a6d2254703
	var $export = __webpack_require__(3);
	
	$export($export.S, 'Math', {
	  umulh: function umulh(u, v) {
	    var UINT16 = 0xffff;
	    var $u = +u;
	    var $v = +v;
	    var u0 = $u & UINT16;
	    var v0 = $v & UINT16;
	    var u1 = $u >>> 16;
	    var v1 = $v >>> 16;
	    var t = (u1 * v0 >>> 0) + (u0 * v0 >>> 16);
	    return u1 * v1 + (t >>> 16) + ((u0 * v1 >>> 0) + (t & UINT16) >>> 16);
	  }
	});


/***/ }),
/* 893 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	var $export = __webpack_require__(3);
	var toObject = __webpack_require__(28);
	var aFunction = __webpack_require__(36);
	var $defineProperty = __webpack_require__(26);
	
	// B.2.2.2 Object.prototype.__defineGetter__(P, getter)
	__webpack_require__(25) && $export($export.P + __webpack_require__(157), 'Object', {
	  __defineGetter__: function __defineGetter__(P, getter) {
	    $defineProperty.f(toObject(this), P, { get: aFunction(getter), enumerable: true, configurable: true });
	  }
	});


/***/ }),
/* 894 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	var $export = __webpack_require__(3);
	var toObject = __webpack_require__(28);
	var aFunction = __webpack_require__(36);
	var $defineProperty = __webpack_require__(26);
	
	// B.2.2.3 Object.prototype.__defineSetter__(P, setter)
	__webpack_require__(25) && $export($export.P + __webpack_require__(157), 'Object', {
	  __defineSetter__: function __defineSetter__(P, setter) {
	    $defineProperty.f(toObject(this), P, { set: aFunction(setter), enumerable: true, configurable: true });
	  }
	});


/***/ }),
/* 895 */
/***/ (function(module, exports, __webpack_require__) {

	// https://github.com/tc39/proposal-object-values-entries
	var $export = __webpack_require__(3);
	var $entries = __webpack_require__(336)(true);
	
	$export($export.S, 'Object', {
	  entries: function entries(it) {
	    return $entries(it);
	  }
	});


/***/ }),
/* 896 */
/***/ (function(module, exports, __webpack_require__) {

	// https://github.com/tc39/proposal-object-getownpropertydescriptors
	var $export = __webpack_require__(3);
	var ownKeys = __webpack_require__(337);
	var toIObject = __webpack_require__(45);
	var gOPD = __webpack_require__(43);
	var createProperty = __webpack_require__(197);
	
	$export($export.S, 'Object', {
	  getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {
	    var O = toIObject(object);
	    var getDesc = gOPD.f;
	    var keys = ownKeys(O);
	    var result = {};
	    var i = 0;
	    var key, desc;
	    while (keys.length > i) {
	      desc = getDesc(O, key = keys[i++]);
	      if (desc !== undefined) createProperty(result, key, desc);
	    }
	    return result;
	  }
	});


/***/ }),
/* 897 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	var $export = __webpack_require__(3);
	var toObject = __webpack_require__(28);
	var toPrimitive = __webpack_require__(61);
	var getPrototypeOf = __webpack_require__(44);
	var getOwnPropertyDescriptor = __webpack_require__(43).f;
	
	// B.2.2.4 Object.prototype.__lookupGetter__(P)
	__webpack_require__(25) && $export($export.P + __webpack_require__(157), 'Object', {
	  __lookupGetter__: function __lookupGetter__(P) {
	    var O = toObject(this);
	    var K = toPrimitive(P, true);
	    var D;
	    do {
	      if (D = getOwnPropertyDescriptor(O, K)) return D.get;
	    } while (O = getPrototypeOf(O));
	  }
	});


/***/ }),
/* 898 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	var $export = __webpack_require__(3);
	var toObject = __webpack_require__(28);
	var toPrimitive = __webpack_require__(61);
	var getPrototypeOf = __webpack_require__(44);
	var getOwnPropertyDescriptor = __webpack_require__(43).f;
	
	// B.2.2.5 Object.prototype.__lookupSetter__(P)
	__webpack_require__(25) && $export($export.P + __webpack_require__(157), 'Object', {
	  __lookupSetter__: function __lookupSetter__(P) {
	    var O = toObject(this);
	    var K = toPrimitive(P, true);
	    var D;
	    do {
	      if (D = getOwnPropertyDescriptor(O, K)) return D.set;
	    } while (O = getPrototypeOf(O));
	  }
	});


/***/ }),
/* 899 */
/***/ (function(module, exports, __webpack_require__) {

	// https://github.com/tc39/proposal-object-values-entries
	var $export = __webpack_require__(3);
	var $values = __webpack_require__(336)(false);
	
	$export($export.S, 'Object', {
	  values: function values(it) {
	    return $values(it);
	  }
	});


/***/ }),
/* 900 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	// https://github.com/zenparsing/es-observable
	var $export = __webpack_require__(3);
	var global = __webpack_require__(9);
	var core = __webpack_require__(51);
	var microtask = __webpack_require__(208)();
	var OBSERVABLE = __webpack_require__(20)('observable');
	var aFunction = __webpack_require__(36);
	var anObject = __webpack_require__(6);
	var anInstance = __webpack_require__(90);
	var redefineAll = __webpack_require__(96);
	var hide = __webpack_require__(37);
	var forOf = __webpack_require__(91);
	var RETURN = forOf.RETURN;
	
	var getMethod = function (fn) {
	  return fn == null ? undefined : aFunction(fn);
	};
	
	var cleanupSubscription = function (subscription) {
	  var cleanup = subscription._c;
	  if (cleanup) {
	    subscription._c = undefined;
	    cleanup();
	  }
	};
	
	var subscriptionClosed = function (subscription) {
	  return subscription._o === undefined;
	};
	
	var closeSubscription = function (subscription) {
	  if (!subscriptionClosed(subscription)) {
	    subscription._o = undefined;
	    cleanupSubscription(subscription);
	  }
	};
	
	var Subscription = function (observer, subscriber) {
	  anObject(observer);
	  this._c = undefined;
	  this._o = observer;
	  observer = new SubscriptionObserver(this);
	  try {
	    var cleanup = subscriber(observer);
	    var subscription = cleanup;
	    if (cleanup != null) {
	      if (typeof cleanup.unsubscribe === 'function') cleanup = function () { subscription.unsubscribe(); };
	      else aFunction(cleanup);
	      this._c = cleanup;
	    }
	  } catch (e) {
	    observer.error(e);
	    return;
	  } if (subscriptionClosed(this)) cleanupSubscription(this);
	};
	
	Subscription.prototype = redefineAll({}, {
	  unsubscribe: function unsubscribe() { closeSubscription(this); }
	});
	
	var SubscriptionObserver = function (subscription) {
	  this._s = subscription;
	};
	
	SubscriptionObserver.prototype = redefineAll({}, {
	  next: function next(value) {
	    var subscription = this._s;
	    if (!subscriptionClosed(subscription)) {
	      var observer = subscription._o;
	      try {
	        var m = getMethod(observer.next);
	        if (m) return m.call(observer, value);
	      } catch (e) {
	        try {
	          closeSubscription(subscription);
	        } finally {
	          throw e;
	        }
	      }
	    }
	  },
	  error: function error(value) {
	    var subscription = this._s;
	    if (subscriptionClosed(subscription)) throw value;
	    var observer = subscription._o;
	    subscription._o = undefined;
	    try {
	      var m = getMethod(observer.error);
	      if (!m) throw value;
	      value = m.call(observer, value);
	    } catch (e) {
	      try {
	        cleanupSubscription(subscription);
	      } finally {
	        throw e;
	      }
	    } cleanupSubscription(subscription);
	    return value;
	  },
	  complete: function complete(value) {
	    var subscription = this._s;
	    if (!subscriptionClosed(subscription)) {
	      var observer = subscription._o;
	      subscription._o = undefined;
	      try {
	        var m = getMethod(observer.complete);
	        value = m ? m.call(observer, value) : undefined;
	      } catch (e) {
	        try {
	          cleanupSubscription(subscription);
	        } finally {
	          throw e;
	        }
	      } cleanupSubscription(subscription);
	      return value;
	    }
	  }
	});
	
	var $Observable = function Observable(subscriber) {
	  anInstance(this, $Observable, 'Observable', '_f')._f = aFunction(subscriber);
	};
	
	redefineAll($Observable.prototype, {
	  subscribe: function subscribe(observer) {
	    return new Subscription(observer, this._f);
	  },
	  forEach: function forEach(fn) {
	    var that = this;
	    return new (core.Promise || global.Promise)(function (resolve, reject) {
	      aFunction(fn);
	      var subscription = that.subscribe({
	        next: function (value) {
	          try {
	            return fn(value);
	          } catch (e) {
	            reject(e);
	            subscription.unsubscribe();
	          }
	        },
	        error: reject,
	        complete: resolve
	      });
	    });
	  }
	});
	
	redefineAll($Observable, {
	  from: function from(x) {
	    var C = typeof this === 'function' ? this : $Observable;
	    var method = getMethod(anObject(x)[OBSERVABLE]);
	    if (method) {
	      var observable = anObject(method.call(x));
	      return observable.constructor === C ? observable : new C(function (observer) {
	        return observable.subscribe(observer);
	      });
	    }
	    return new C(function (observer) {
	      var done = false;
	      microtask(function () {
	        if (!done) {
	          try {
	            if (forOf(x, false, function (it) {
	              observer.next(it);
	              if (done) return RETURN;
	            }) === RETURN) return;
	          } catch (e) {
	            if (done) throw e;
	            observer.error(e);
	            return;
	          } observer.complete();
	        }
	      });
	      return function () { done = true; };
	    });
	  },
	  of: function of() {
	    for (var i = 0, l = arguments.length, items = new Array(l); i < l;) items[i] = arguments[i++];
	    return new (typeof this === 'function' ? this : $Observable)(function (observer) {
	      var done = false;
	      microtask(function () {
	        if (!done) {
	          for (var j = 0; j < items.length; ++j) {
	            observer.next(items[j]);
	            if (done) return;
	          } observer.complete();
	        }
	      });
	      return function () { done = true; };
	    });
	  }
	});
	
	hide($Observable.prototype, OBSERVABLE, function () { return this; });
	
	$export($export.G, { Observable: $Observable });
	
	__webpack_require__(97)('Observable');


/***/ }),
/* 901 */
/***/ (function(module, exports, __webpack_require__) {

	// https://github.com/tc39/proposal-promise-finally
	'use strict';
	var $export = __webpack_require__(3);
	var core = __webpack_require__(51);
	var global = __webpack_require__(9);
	var speciesConstructor = __webpack_require__(133);
	var promiseResolve = __webpack_require__(237);
	
	$export($export.P + $export.R, 'Promise', { 'finally': function (onFinally) {
	  var C = speciesConstructor(this, core.Promise || global.Promise);
	  var isFunction = typeof onFinally == 'function';
	  return this.then(
	    isFunction ? function (x) {
	      return promiseResolve(C, onFinally()).then(function () { return x; });
	    } : onFinally,
	    isFunction ? function (e) {
	      return promiseResolve(C, onFinally()).then(function () { throw e; });
	    } : onFinally
	  );
	} });


/***/ }),
/* 902 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	// https://github.com/tc39/proposal-promise-try
	var $export = __webpack_require__(3);
	var newPromiseCapability = __webpack_require__(209);
	var perform = __webpack_require__(340);
	
	$export($export.S, 'Promise', { 'try': function (callbackfn) {
	  var promiseCapability = newPromiseCapability.f(this);
	  var result = perform(callbackfn);
	  (result.e ? promiseCapability.reject : promiseCapability.resolve)(result.v);
	  return promiseCapability.promise;
	} });


/***/ }),
/* 903 */
/***/ (function(module, exports, __webpack_require__) {

	var metadata = __webpack_require__(66);
	var anObject = __webpack_require__(6);
	var toMetaKey = metadata.key;
	var ordinaryDefineOwnMetadata = metadata.set;
	
	metadata.exp({ defineMetadata: function defineMetadata(metadataKey, metadataValue, target, targetKey) {
	  ordinaryDefineOwnMetadata(metadataKey, metadataValue, anObject(target), toMetaKey(targetKey));
	} });


/***/ }),
/* 904 */
/***/ (function(module, exports, __webpack_require__) {

	var metadata = __webpack_require__(66);
	var anObject = __webpack_require__(6);
	var toMetaKey = metadata.key;
	var getOrCreateMetadataMap = metadata.map;
	var store = metadata.store;
	
	metadata.exp({ deleteMetadata: function deleteMetadata(metadataKey, target /* , targetKey */) {
	  var targetKey = arguments.length < 3 ? undefined : toMetaKey(arguments[2]);
	  var metadataMap = getOrCreateMetadataMap(anObject(target), targetKey, false);
	  if (metadataMap === undefined || !metadataMap['delete'](metadataKey)) return false;
	  if (metadataMap.size) return true;
	  var targetMetadata = store.get(target);
	  targetMetadata['delete'](targetKey);
	  return !!targetMetadata.size || store['delete'](target);
	} });


/***/ }),
/* 905 */
/***/ (function(module, exports, __webpack_require__) {

	var Set = __webpack_require__(348);
	var from = __webpack_require__(320);
	var metadata = __webpack_require__(66);
	var anObject = __webpack_require__(6);
	var getPrototypeOf = __webpack_require__(44);
	var ordinaryOwnMetadataKeys = metadata.keys;
	var toMetaKey = metadata.key;
	
	var ordinaryMetadataKeys = function (O, P) {
	  var oKeys = ordinaryOwnMetadataKeys(O, P);
	  var parent = getPrototypeOf(O);
	  if (parent === null) return oKeys;
	  var pKeys = ordinaryMetadataKeys(parent, P);
	  return pKeys.length ? oKeys.length ? from(new Set(oKeys.concat(pKeys))) : pKeys : oKeys;
	};
	
	metadata.exp({ getMetadataKeys: function getMetadataKeys(target /* , targetKey */) {
	  return ordinaryMetadataKeys(anObject(target), arguments.length < 2 ? undefined : toMetaKey(arguments[1]));
	} });


/***/ }),
/* 906 */
/***/ (function(module, exports, __webpack_require__) {

	var metadata = __webpack_require__(66);
	var anObject = __webpack_require__(6);
	var getPrototypeOf = __webpack_require__(44);
	var ordinaryHasOwnMetadata = metadata.has;
	var ordinaryGetOwnMetadata = metadata.get;
	var toMetaKey = metadata.key;
	
	var ordinaryGetMetadata = function (MetadataKey, O, P) {
	  var hasOwn = ordinaryHasOwnMetadata(MetadataKey, O, P);
	  if (hasOwn) return ordinaryGetOwnMetadata(MetadataKey, O, P);
	  var parent = getPrototypeOf(O);
	  return parent !== null ? ordinaryGetMetadata(MetadataKey, parent, P) : undefined;
	};
	
	metadata.exp({ getMetadata: function getMetadata(metadataKey, target /* , targetKey */) {
	  return ordinaryGetMetadata(metadataKey, anObject(target), arguments.length < 3 ? undefined : toMetaKey(arguments[2]));
	} });


/***/ }),
/* 907 */
/***/ (function(module, exports, __webpack_require__) {

	var metadata = __webpack_require__(66);
	var anObject = __webpack_require__(6);
	var ordinaryOwnMetadataKeys = metadata.keys;
	var toMetaKey = metadata.key;
	
	metadata.exp({ getOwnMetadataKeys: function getOwnMetadataKeys(target /* , targetKey */) {
	  return ordinaryOwnMetadataKeys(anObject(target), arguments.length < 2 ? undefined : toMetaKey(arguments[1]));
	} });


/***/ }),
/* 908 */
/***/ (function(module, exports, __webpack_require__) {

	var metadata = __webpack_require__(66);
	var anObject = __webpack_require__(6);
	var ordinaryGetOwnMetadata = metadata.get;
	var toMetaKey = metadata.key;
	
	metadata.exp({ getOwnMetadata: function getOwnMetadata(metadataKey, target /* , targetKey */) {
	  return ordinaryGetOwnMetadata(metadataKey, anObject(target)
	    , arguments.length < 3 ? undefined : toMetaKey(arguments[2]));
	} });


/***/ }),
/* 909 */
/***/ (function(module, exports, __webpack_require__) {

	var metadata = __webpack_require__(66);
	var anObject = __webpack_require__(6);
	var getPrototypeOf = __webpack_require__(44);
	var ordinaryHasOwnMetadata = metadata.has;
	var toMetaKey = metadata.key;
	
	var ordinaryHasMetadata = function (MetadataKey, O, P) {
	  var hasOwn = ordinaryHasOwnMetadata(MetadataKey, O, P);
	  if (hasOwn) return true;
	  var parent = getPrototypeOf(O);
	  return parent !== null ? ordinaryHasMetadata(MetadataKey, parent, P) : false;
	};
	
	metadata.exp({ hasMetadata: function hasMetadata(metadataKey, target /* , targetKey */) {
	  return ordinaryHasMetadata(metadataKey, anObject(target), arguments.length < 3 ? undefined : toMetaKey(arguments[2]));
	} });


/***/ }),
/* 910 */
/***/ (function(module, exports, __webpack_require__) {

	var metadata = __webpack_require__(66);
	var anObject = __webpack_require__(6);
	var ordinaryHasOwnMetadata = metadata.has;
	var toMetaKey = metadata.key;
	
	metadata.exp({ hasOwnMetadata: function hasOwnMetadata(metadataKey, target /* , targetKey */) {
	  return ordinaryHasOwnMetadata(metadataKey, anObject(target)
	    , arguments.length < 3 ? undefined : toMetaKey(arguments[2]));
	} });


/***/ }),
/* 911 */
/***/ (function(module, exports, __webpack_require__) {

	var $metadata = __webpack_require__(66);
	var anObject = __webpack_require__(6);
	var aFunction = __webpack_require__(36);
	var toMetaKey = $metadata.key;
	var ordinaryDefineOwnMetadata = $metadata.set;
	
	$metadata.exp({ metadata: function metadata(metadataKey, metadataValue) {
	  return function decorator(target, targetKey) {
	    ordinaryDefineOwnMetadata(
	      metadataKey, metadataValue,
	      (targetKey !== undefined ? anObject : aFunction)(target),
	      toMetaKey(targetKey)
	    );
	  };
	} });


/***/ }),
/* 912 */
/***/ (function(module, exports, __webpack_require__) {

	// https://tc39.github.io/proposal-setmap-offrom/#sec-set.from
	__webpack_require__(139)('Set');


/***/ }),
/* 913 */
/***/ (function(module, exports, __webpack_require__) {

	// https://tc39.github.io/proposal-setmap-offrom/#sec-set.of
	__webpack_require__(140)('Set');


/***/ }),
/* 914 */
/***/ (function(module, exports, __webpack_require__) {

	// https://github.com/DavidBruant/Map-Set.prototype.toJSON
	var $export = __webpack_require__(3);
	
	$export($export.P + $export.R, 'Set', { toJSON: __webpack_require__(235)('Set') });


/***/ }),
/* 915 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	// https://github.com/mathiasbynens/String.prototype.at
	var $export = __webpack_require__(3);
	var $at = __webpack_require__(160)(true);
	
	$export($export.P, 'String', {
	  at: function at(pos) {
	    return $at(this, pos);
	  }
	});


/***/ }),
/* 916 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	// https://tc39.github.io/String.prototype.matchAll/
	var $export = __webpack_require__(3);
	var defined = __webpack_require__(59);
	var toLength = __webpack_require__(21);
	var isRegExp = __webpack_require__(155);
	var getFlags = __webpack_require__(129);
	var RegExpProto = RegExp.prototype;
	
	var $RegExpStringIterator = function (regexp, string) {
	  this._r = regexp;
	  this._s = string;
	};
	
	__webpack_require__(204)($RegExpStringIterator, 'RegExp String', function next() {
	  var match = this._r.exec(this._s);
	  return { value: match, done: match === null };
	});
	
	$export($export.P, 'String', {
	  matchAll: function matchAll(regexp) {
	    defined(this);
	    if (!isRegExp(regexp)) throw TypeError(regexp + ' is not a regexp!');
	    var S = String(this);
	    var flags = 'flags' in RegExpProto ? String(regexp.flags) : getFlags.call(regexp);
	    var rx = new RegExp(regexp.source, ~flags.indexOf('g') ? flags : 'g' + flags);
	    rx.lastIndex = toLength(regexp.lastIndex);
	    return new $RegExpStringIterator(rx, S);
	  }
	});


/***/ }),
/* 917 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	// https://github.com/tc39/proposal-string-pad-start-end
	var $export = __webpack_require__(3);
	var $pad = __webpack_require__(342);
	var userAgent = __webpack_require__(162);
	
	// https://github.com/zloirock/core-js/issues/280
	var WEBKIT_BUG = /Version\/10\.\d+(\.\d+)?( Mobile\/\w+)? Safari\//.test(userAgent);
	
	$export($export.P + $export.F * WEBKIT_BUG, 'String', {
	  padEnd: function padEnd(maxLength /* , fillString = ' ' */) {
	    return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false);
	  }
	});


/***/ }),
/* 918 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	// https://github.com/tc39/proposal-string-pad-start-end
	var $export = __webpack_require__(3);
	var $pad = __webpack_require__(342);
	var userAgent = __webpack_require__(162);
	
	// https://github.com/zloirock/core-js/issues/280
	var WEBKIT_BUG = /Version\/10\.\d+(\.\d+)?( Mobile\/\w+)? Safari\//.test(userAgent);
	
	$export($export.P + $export.F * WEBKIT_BUG, 'String', {
	  padStart: function padStart(maxLength /* , fillString = ' ' */) {
	    return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true);
	  }
	});


/***/ }),
/* 919 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	// https://github.com/sebmarkbage/ecmascript-string-left-right-trim
	__webpack_require__(113)('trimLeft', function ($trim) {
	  return function trimLeft() {
	    return $trim(this, 1);
	  };
	}, 'trimStart');


/***/ }),
/* 920 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	// https://github.com/sebmarkbage/ecmascript-string-left-right-trim
	__webpack_require__(113)('trimRight', function ($trim) {
	  return function trimRight() {
	    return $trim(this, 2);
	  };
	}, 'trimEnd');


/***/ }),
/* 921 */
/***/ (function(module, exports, __webpack_require__) {

	// https://github.com/tc39/proposal-global
	var $export = __webpack_require__(3);
	
	$export($export.S, 'System', { global: __webpack_require__(9) });


/***/ }),
/* 922 */
/***/ (function(module, exports, __webpack_require__) {

	// https://tc39.github.io/proposal-setmap-offrom/#sec-weakmap.from
	__webpack_require__(139)('WeakMap');


/***/ }),
/* 923 */
/***/ (function(module, exports, __webpack_require__) {

	// https://tc39.github.io/proposal-setmap-offrom/#sec-weakmap.of
	__webpack_require__(140)('WeakMap');


/***/ }),
/* 924 */
/***/ (function(module, exports, __webpack_require__) {

	// https://tc39.github.io/proposal-setmap-offrom/#sec-weakset.from
	__webpack_require__(139)('WeakSet');


/***/ }),
/* 925 */
/***/ (function(module, exports, __webpack_require__) {

	// https://tc39.github.io/proposal-setmap-offrom/#sec-weakset.of
	__webpack_require__(140)('WeakSet');


/***/ }),
/* 926 */
/***/ (function(module, exports, __webpack_require__) {

	var $iterators = __webpack_require__(220);
	var getKeys = __webpack_require__(94);
	var redefine = __webpack_require__(38);
	var global = __webpack_require__(9);
	var hide = __webpack_require__(37);
	var Iterators = __webpack_require__(111);
	var wks = __webpack_require__(20);
	var ITERATOR = wks('iterator');
	var TO_STRING_TAG = wks('toStringTag');
	var ArrayValues = Iterators.Array;
	
	var DOMIterables = {
	  CSSRuleList: true, // TODO: Not spec compliant, should be false.
	  CSSStyleDeclaration: false,
	  CSSValueList: false,
	  ClientRectList: false,
	  DOMRectList: false,
	  DOMStringList: false,
	  DOMTokenList: true,
	  DataTransferItemList: false,
	  FileList: false,
	  HTMLAllCollection: false,
	  HTMLCollection: false,
	  HTMLFormElement: false,
	  HTMLSelectElement: false,
	  MediaList: true, // TODO: Not spec compliant, should be false.
	  MimeTypeArray: false,
	  NamedNodeMap: false,
	  NodeList: true,
	  PaintRequestList: false,
	  Plugin: false,
	  PluginArray: false,
	  SVGLengthList: false,
	  SVGNumberList: false,
	  SVGPathSegList: false,
	  SVGPointList: false,
	  SVGStringList: false,
	  SVGTransformList: false,
	  SourceBufferList: false,
	  StyleSheetList: true, // TODO: Not spec compliant, should be false.
	  TextTrackCueList: false,
	  TextTrackList: false,
	  TouchList: false
	};
	
	for (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) {
	  var NAME = collections[i];
	  var explicit = DOMIterables[NAME];
	  var Collection = global[NAME];
	  var proto = Collection && Collection.prototype;
	  var key;
	  if (proto) {
	    if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues);
	    if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);
	    Iterators[NAME] = ArrayValues;
	    if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true);
	  }
	}


/***/ }),
/* 927 */
/***/ (function(module, exports, __webpack_require__) {

	var $export = __webpack_require__(3);
	var $task = __webpack_require__(216);
	$export($export.G + $export.B, {
	  setImmediate: $task.set,
	  clearImmediate: $task.clear
	});


/***/ }),
/* 928 */
/***/ (function(module, exports, __webpack_require__) {

	// ie9- setTimeout & setInterval additional parameters fix
	var global = __webpack_require__(9);
	var $export = __webpack_require__(3);
	var userAgent = __webpack_require__(162);
	var slice = [].slice;
	var MSIE = /MSIE .\./.test(userAgent); // <- dirty ie9- check
	var wrap = function (set) {
	  return function (fn, time /* , ...args */) {
	    var boundArgs = arguments.length > 2;
	    var args = boundArgs ? slice.call(arguments, 2) : false;
	    return set(boundArgs ? function () {
	      // eslint-disable-next-line no-new-func
	      (typeof fn == 'function' ? fn : Function(fn)).apply(this, args);
	    } : fn, time);
	  };
	};
	$export($export.G + $export.B + $export.F * MSIE, {
	  setTimeout: wrap(global.setTimeout),
	  setInterval: wrap(global.setInterval)
	});


/***/ }),
/* 929 */
/***/ (function(module, exports, __webpack_require__) {

	__webpack_require__(545);
	__webpack_require__(801);
	__webpack_require__(803);
	__webpack_require__(802);
	__webpack_require__(805);
	__webpack_require__(807);
	__webpack_require__(812);
	__webpack_require__(806);
	__webpack_require__(804);
	__webpack_require__(814);
	__webpack_require__(813);
	__webpack_require__(809);
	__webpack_require__(810);
	__webpack_require__(808);
	__webpack_require__(800);
	__webpack_require__(811);
	__webpack_require__(815);
	__webpack_require__(816);
	__webpack_require__(768);
	__webpack_require__(770);
	__webpack_require__(769);
	__webpack_require__(818);
	__webpack_require__(817);
	__webpack_require__(788);
	__webpack_require__(798);
	__webpack_require__(799);
	__webpack_require__(789);
	__webpack_require__(790);
	__webpack_require__(791);
	__webpack_require__(792);
	__webpack_require__(793);
	__webpack_require__(794);
	__webpack_require__(795);
	__webpack_require__(796);
	__webpack_require__(797);
	__webpack_require__(771);
	__webpack_require__(772);
	__webpack_require__(773);
	__webpack_require__(774);
	__webpack_require__(775);
	__webpack_require__(776);
	__webpack_require__(777);
	__webpack_require__(778);
	__webpack_require__(779);
	__webpack_require__(780);
	__webpack_require__(781);
	__webpack_require__(782);
	__webpack_require__(783);
	__webpack_require__(784);
	__webpack_require__(785);
	__webpack_require__(786);
	__webpack_require__(787);
	__webpack_require__(847);
	__webpack_require__(852);
	__webpack_require__(859);
	__webpack_require__(850);
	__webpack_require__(843);
	__webpack_require__(844);
	__webpack_require__(848);
	__webpack_require__(853);
	__webpack_require__(855);
	__webpack_require__(840);
	__webpack_require__(841);
	__webpack_require__(842);
	__webpack_require__(543);
	__webpack_require__(845);
	__webpack_require__(544);
	__webpack_require__(846);
	__webpack_require__(849);
	__webpack_require__(851);
	__webpack_require__(854);
	__webpack_require__(856);
	__webpack_require__(857);
	__webpack_require__(858);
	__webpack_require__(763);
	__webpack_require__(765);
	__webpack_require__(764);
	__webpack_require__(767);
	__webpack_require__(766);
	__webpack_require__(752);
	__webpack_require__(750);
	__webpack_require__(756);
	__webpack_require__(753);
	__webpack_require__(759);
	__webpack_require__(761);
	__webpack_require__(749);
	__webpack_require__(755);
	__webpack_require__(746);
	__webpack_require__(760);
	__webpack_require__(744);
	__webpack_require__(758);
	__webpack_require__(757);
	__webpack_require__(751);
	__webpack_require__(754);
	__webpack_require__(743);
	__webpack_require__(745);
	__webpack_require__(748);
	__webpack_require__(747);
	__webpack_require__(762);
	__webpack_require__(220);
	__webpack_require__(834);
	__webpack_require__(346);
	__webpack_require__(839);
	__webpack_require__(347);
	__webpack_require__(835);
	__webpack_require__(836);
	__webpack_require__(837);
	__webpack_require__(838);
	__webpack_require__(819);
	__webpack_require__(345);
	__webpack_require__(348);
	__webpack_require__(349);
	__webpack_require__(871);
	__webpack_require__(860);
	__webpack_require__(861);
	__webpack_require__(866);
	__webpack_require__(869);
	__webpack_require__(870);
	__webpack_require__(864);
	__webpack_require__(867);
	__webpack_require__(865);
	__webpack_require__(868);
	__webpack_require__(862);
	__webpack_require__(863);
	__webpack_require__(820);
	__webpack_require__(821);
	__webpack_require__(822);
	__webpack_require__(823);
	__webpack_require__(824);
	__webpack_require__(827);
	__webpack_require__(825);
	__webpack_require__(826);
	__webpack_require__(828);
	__webpack_require__(829);
	__webpack_require__(830);
	__webpack_require__(831);
	__webpack_require__(833);
	__webpack_require__(832);
	__webpack_require__(874);
	__webpack_require__(872);
	__webpack_require__(873);
	__webpack_require__(915);
	__webpack_require__(918);
	__webpack_require__(917);
	__webpack_require__(919);
	__webpack_require__(920);
	__webpack_require__(916);
	__webpack_require__(546);
	__webpack_require__(547);
	__webpack_require__(896);
	__webpack_require__(899);
	__webpack_require__(895);
	__webpack_require__(893);
	__webpack_require__(894);
	__webpack_require__(897);
	__webpack_require__(898);
	__webpack_require__(880);
	__webpack_require__(914);
	__webpack_require__(879);
	__webpack_require__(913);
	__webpack_require__(923);
	__webpack_require__(925);
	__webpack_require__(878);
	__webpack_require__(912);
	__webpack_require__(922);
	__webpack_require__(924);
	__webpack_require__(877);
	__webpack_require__(921);
	__webpack_require__(876);
	__webpack_require__(881);
	__webpack_require__(882);
	__webpack_require__(883);
	__webpack_require__(884);
	__webpack_require__(885);
	__webpack_require__(887);
	__webpack_require__(886);
	__webpack_require__(888);
	__webpack_require__(889);
	__webpack_require__(890);
	__webpack_require__(892);
	__webpack_require__(891);
	__webpack_require__(901);
	__webpack_require__(902);
	__webpack_require__(903);
	__webpack_require__(904);
	__webpack_require__(906);
	__webpack_require__(905);
	__webpack_require__(908);
	__webpack_require__(907);
	__webpack_require__(909);
	__webpack_require__(910);
	__webpack_require__(911);
	__webpack_require__(875);
	__webpack_require__(900);
	__webpack_require__(928);
	__webpack_require__(927);
	__webpack_require__(926);
	module.exports = __webpack_require__(51);


/***/ }),
/* 930 */
/***/ (function(module, exports, __webpack_require__) {

	exports = module.exports = __webpack_require__(7)();
	// imports
	
	
	// module
	exports.push([module.id, ".fa-border{padding:.2em .25em .15em;border:.08em solid #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-fw{width:1.28571429em;text-align:center}.fa-glass:before{content:\"\\F000\"}.fa-music:before{content:\"\\F001\"}.fa-search:before{content:\"\\F002\"}.fa-envelope-o:before{content:\"\\F003\"}.fa-heart:before{content:\"\\F004\"}.fa-star:before{content:\"\\F005\"}.fa-star-o:before{content:\"\\F006\"}.fa-user:before{content:\"\\F007\"}.fa-film:before{content:\"\\F008\"}.fa-th-large:before{content:\"\\F009\"}.fa-th:before{content:\"\\F00A\"}.fa-th-list:before{content:\"\\F00B\"}.fa-check:before{content:\"\\F00C\"}.fa-close:before,.fa-remove:before,.fa-times:before{content:\"\\F00D\"}.fa-search-plus:before{content:\"\\F00E\"}.fa-search-minus:before{content:\"\\F010\"}.fa-power-off:before{content:\"\\F011\"}.fa-signal:before{content:\"\\F012\"}.fa-cog:before,.fa-gear:before{content:\"\\F013\"}.fa-trash-o:before{content:\"\\F014\"}.fa-home:before{content:\"\\F015\"}.fa-file-o:before{content:\"\\F016\"}.fa-clock-o:before{content:\"\\F017\"}.fa-road:before{content:\"\\F018\"}.fa-download:before{content:\"\\F019\"}.fa-arrow-circle-o-down:before{content:\"\\F01A\"}.fa-arrow-circle-o-up:before{content:\"\\F01B\"}.fa-inbox:before{content:\"\\F01C\"}.fa-play-circle-o:before{content:\"\\F01D\"}.fa-repeat:before,.fa-rotate-right:before{content:\"\\F01E\"}.fa-refresh:before{content:\"\\F021\"}.fa-list-alt:before{content:\"\\F022\"}.fa-lock:before{content:\"\\F023\"}.fa-flag:before{content:\"\\F024\"}.fa-headphones:before{content:\"\\F025\"}.fa-volume-off:before{content:\"\\F026\"}.fa-volume-down:before{content:\"\\F027\"}.fa-volume-up:before{content:\"\\F028\"}.fa-qrcode:before{content:\"\\F029\"}.fa-barcode:before{content:\"\\F02A\"}.fa-tag:before{content:\"\\F02B\"}.fa-tags:before{content:\"\\F02C\"}.fa-book:before{content:\"\\F02D\"}.fa-bookmark:before{content:\"\\F02E\"}.fa-print:before{content:\"\\F02F\"}.fa-camera:before{content:\"\\F030\"}.fa-font:before{content:\"\\F031\"}.fa-bold:before{content:\"\\F032\"}.fa-italic:before{content:\"\\F033\"}.fa-text-height:before{content:\"\\F034\"}.fa-text-width:before{content:\"\\F035\"}.fa-align-left:before{content:\"\\F036\"}.fa-align-center:before{content:\"\\F037\"}.fa-align-right:before{content:\"\\F038\"}.fa-align-justify:before{content:\"\\F039\"}.fa-list:before{content:\"\\F03A\"}.fa-dedent:before,.fa-outdent:before{content:\"\\F03B\"}.fa-indent:before{content:\"\\F03C\"}.fa-video-camera:before{content:\"\\F03D\"}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:\"\\F03E\"}.fa-pencil:before{content:\"\\F040\"}.fa-map-marker:before{content:\"\\F041\"}.fa-adjust:before{content:\"\\F042\"}.fa-tint:before{content:\"\\F043\"}.fa-edit:before,.fa-pencil-square-o:before{content:\"\\F044\"}.fa-share-square-o:before{content:\"\\F045\"}.fa-check-square-o:before{content:\"\\F046\"}.fa-arrows:before{content:\"\\F047\"}.fa-step-backward:before{content:\"\\F048\"}.fa-fast-backward:before{content:\"\\F049\"}.fa-backward:before{content:\"\\F04A\"}.fa-play:before{content:\"\\F04B\"}.fa-pause:before{content:\"\\F04C\"}.fa-stop:before{content:\"\\F04D\"}.fa-forward:before{content:\"\\F04E\"}.fa-fast-forward:before{content:\"\\F050\"}.fa-step-forward:before{content:\"\\F051\"}.fa-eject:before{content:\"\\F052\"}.fa-chevron-left:before{content:\"\\F053\"}.fa-chevron-right:before{content:\"\\F054\"}.fa-plus-circle:before{content:\"\\F055\"}.fa-minus-circle:before{content:\"\\F056\"}.fa-times-circle:before{content:\"\\F057\"}.fa-check-circle:before{content:\"\\F058\"}.fa-question-circle:before{content:\"\\F059\"}.fa-info-circle:before{content:\"\\F05A\"}.fa-crosshairs:before{content:\"\\F05B\"}.fa-times-circle-o:before{content:\"\\F05C\"}.fa-check-circle-o:before{content:\"\\F05D\"}.fa-ban:before{content:\"\\F05E\"}.fa-arrow-left:before{content:\"\\F060\"}.fa-arrow-right:before{content:\"\\F061\"}.fa-arrow-up:before{content:\"\\F062\"}.fa-arrow-down:before{content:\"\\F063\"}.fa-mail-forward:before,.fa-share:before{content:\"\\F064\"}.fa-expand:before{content:\"\\F065\"}.fa-compress:before{content:\"\\F066\"}.fa-plus:before{content:\"\\F067\"}.fa-minus:before{content:\"\\F068\"}.fa-asterisk:before{content:\"\\F069\"}.fa-exclamation-circle:before{content:\"\\F06A\"}.fa-gift:before{content:\"\\F06B\"}.fa-leaf:before{content:\"\\F06C\"}.fa-fire:before{content:\"\\F06D\"}.fa-eye:before{content:\"\\F06E\"}.fa-eye-slash:before{content:\"\\F070\"}.fa-exclamation-triangle:before,.fa-warning:before{content:\"\\F071\"}.fa-plane:before{content:\"\\F072\"}.fa-calendar:before{content:\"\\F073\"}.fa-random:before{content:\"\\F074\"}.fa-comment:before{content:\"\\F075\"}.fa-magnet:before{content:\"\\F076\"}.fa-chevron-up:before{content:\"\\F077\"}.fa-chevron-down:before{content:\"\\F078\"}.fa-retweet:before{content:\"\\F079\"}.fa-shopping-cart:before{content:\"\\F07A\"}.fa-folder:before{content:\"\\F07B\"}.fa-folder-open:before{content:\"\\F07C\"}.fa-arrows-v:before{content:\"\\F07D\"}.fa-arrows-h:before{content:\"\\F07E\"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:\"\\F080\"}.fa-twitter-square:before{content:\"\\F081\"}.fa-facebook-square:before{content:\"\\F082\"}.fa-camera-retro:before{content:\"\\F083\"}.fa-key:before{content:\"\\F084\"}.fa-cogs:before,.fa-gears:before{content:\"\\F085\"}.fa-comments:before{content:\"\\F086\"}.fa-thumbs-o-up:before{content:\"\\F087\"}.fa-thumbs-o-down:before{content:\"\\F088\"}.fa-star-half:before{content:\"\\F089\"}.fa-heart-o:before{content:\"\\F08A\"}.fa-sign-out:before{content:\"\\F08B\"}.fa-linkedin-square:before{content:\"\\F08C\"}.fa-thumb-tack:before{content:\"\\F08D\"}.fa-external-link:before{content:\"\\F08E\"}.fa-sign-in:before{content:\"\\F090\"}.fa-trophy:before{content:\"\\F091\"}.fa-github-square:before{content:\"\\F092\"}.fa-upload:before{content:\"\\F093\"}.fa-lemon-o:before{content:\"\\F094\"}.fa-phone:before{content:\"\\F095\"}.fa-square-o:before{content:\"\\F096\"}.fa-bookmark-o:before{content:\"\\F097\"}.fa-phone-square:before{content:\"\\F098\"}.fa-twitter:before{content:\"\\F099\"}.fa-facebook-f:before,.fa-facebook:before{content:\"\\F09A\"}.fa-github:before{content:\"\\F09B\"}.fa-unlock:before{content:\"\\F09C\"}.fa-credit-card:before{content:\"\\F09D\"}.fa-feed:before,.fa-rss:before{content:\"\\F09E\"}.fa-hdd-o:before{content:\"\\F0A0\"}.fa-bullhorn:before{content:\"\\F0A1\"}.fa-bell:before{content:\"\\F0F3\"}.fa-certificate:before{content:\"\\F0A3\"}.fa-hand-o-right:before{content:\"\\F0A4\"}.fa-hand-o-left:before{content:\"\\F0A5\"}.fa-hand-o-up:before{content:\"\\F0A6\"}.fa-hand-o-down:before{content:\"\\F0A7\"}.fa-arrow-circle-left:before{content:\"\\F0A8\"}.fa-arrow-circle-right:before{content:\"\\F0A9\"}.fa-arrow-circle-up:before{content:\"\\F0AA\"}.fa-arrow-circle-down:before{content:\"\\F0AB\"}.fa-globe:before{content:\"\\F0AC\"}.fa-wrench:before{content:\"\\F0AD\"}.fa-tasks:before{content:\"\\F0AE\"}.fa-filter:before{content:\"\\F0B0\"}.fa-briefcase:before{content:\"\\F0B1\"}.fa-arrows-alt:before{content:\"\\F0B2\"}.fa-group:before,.fa-users:before{content:\"\\F0C0\"}.fa-chain:before,.fa-link:before{content:\"\\F0C1\"}.fa-cloud:before{content:\"\\F0C2\"}.fa-flask:before{content:\"\\F0C3\"}.fa-cut:before,.fa-scissors:before{content:\"\\F0C4\"}.fa-copy:before,.fa-files-o:before{content:\"\\F0C5\"}.fa-paperclip:before{content:\"\\F0C6\"}.fa-floppy-o:before,.fa-save:before{content:\"\\F0C7\"}.fa-square:before{content:\"\\F0C8\"}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:\"\\F0C9\"}.fa-list-ul:before{content:\"\\F0CA\"}.fa-list-ol:before{content:\"\\F0CB\"}.fa-strikethrough:before{content:\"\\F0CC\"}.fa-underline:before{content:\"\\F0CD\"}.fa-table:before{content:\"\\F0CE\"}.fa-magic:before{content:\"\\F0D0\"}.fa-truck:before{content:\"\\F0D1\"}.fa-pinterest:before{content:\"\\F0D2\"}.fa-pinterest-square:before{content:\"\\F0D3\"}.fa-google-plus-square:before{content:\"\\F0D4\"}.fa-google-plus:before{content:\"\\F0D5\"}.fa-money:before{content:\"\\F0D6\"}.fa-caret-down:before{content:\"\\F0D7\"}.fa-caret-up:before{content:\"\\F0D8\"}.fa-caret-left:before{content:\"\\F0D9\"}.fa-caret-right:before{content:\"\\F0DA\"}.fa-columns:before{content:\"\\F0DB\"}.fa-sort:before,.fa-unsorted:before{content:\"\\F0DC\"}.fa-sort-desc:before,.fa-sort-down:before{content:\"\\F0DD\"}.fa-sort-asc:before,.fa-sort-up:before{content:\"\\F0DE\"}.fa-envelope:before{content:\"\\F0E0\"}.fa-linkedin:before{content:\"\\F0E1\"}.fa-rotate-left:before,.fa-undo:before{content:\"\\F0E2\"}.fa-gavel:before,.fa-legal:before{content:\"\\F0E3\"}.fa-dashboard:before,.fa-tachometer:before{content:\"\\F0E4\"}.fa-comment-o:before{content:\"\\F0E5\"}.fa-comments-o:before{content:\"\\F0E6\"}.fa-bolt:before,.fa-flash:before{content:\"\\F0E7\"}.fa-sitemap:before{content:\"\\F0E8\"}.fa-umbrella:before{content:\"\\F0E9\"}.fa-clipboard:before,.fa-paste:before{content:\"\\F0EA\"}.fa-lightbulb-o:before{content:\"\\F0EB\"}.fa-exchange:before{content:\"\\F0EC\"}.fa-cloud-download:before{content:\"\\F0ED\"}.fa-cloud-upload:before{content:\"\\F0EE\"}.fa-user-md:before{content:\"\\F0F0\"}.fa-stethoscope:before{content:\"\\F0F1\"}.fa-suitcase:before{content:\"\\F0F2\"}.fa-bell-o:before{content:\"\\F0A2\"}.fa-coffee:before{content:\"\\F0F4\"}.fa-cutlery:before{content:\"\\F0F5\"}.fa-file-text-o:before{content:\"\\F0F6\"}.fa-building-o:before{content:\"\\F0F7\"}.fa-hospital-o:before{content:\"\\F0F8\"}.fa-ambulance:before{content:\"\\F0F9\"}.fa-medkit:before{content:\"\\F0FA\"}.fa-fighter-jet:before{content:\"\\F0FB\"}.fa-beer:before{content:\"\\F0FC\"}.fa-h-square:before{content:\"\\F0FD\"}.fa-plus-square:before{content:\"\\F0FE\"}.fa-angle-double-left:before{content:\"\\F100\"}.fa-angle-double-right:before{content:\"\\F101\"}.fa-angle-double-up:before{content:\"\\F102\"}.fa-angle-double-down:before{content:\"\\F103\"}.fa-angle-left:before{content:\"\\F104\"}.fa-angle-right:before{content:\"\\F105\"}.fa-angle-up:before{content:\"\\F106\"}.fa-angle-down:before{content:\"\\F107\"}.fa-desktop:before{content:\"\\F108\"}.fa-laptop:before{content:\"\\F109\"}.fa-tablet:before{content:\"\\F10A\"}.fa-mobile-phone:before,.fa-mobile:before{content:\"\\F10B\"}.fa-circle-o:before{content:\"\\F10C\"}.fa-quote-left:before{content:\"\\F10D\"}.fa-quote-right:before{content:\"\\F10E\"}.fa-spinner:before{content:\"\\F110\"}.fa-circle:before{content:\"\\F111\"}.fa-mail-reply:before,.fa-reply:before{content:\"\\F112\"}.fa-github-alt:before{content:\"\\F113\"}.fa-folder-o:before{content:\"\\F114\"}.fa-folder-open-o:before{content:\"\\F115\"}.fa-smile-o:before{content:\"\\F118\"}.fa-frown-o:before{content:\"\\F119\"}.fa-meh-o:before{content:\"\\F11A\"}.fa-gamepad:before{content:\"\\F11B\"}.fa-keyboard-o:before{content:\"\\F11C\"}.fa-flag-o:before{content:\"\\F11D\"}.fa-flag-checkered:before{content:\"\\F11E\"}.fa-terminal:before{content:\"\\F120\"}.fa-code:before{content:\"\\F121\"}.fa-mail-reply-all:before,.fa-reply-all:before{content:\"\\F122\"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:\"\\F123\"}.fa-location-arrow:before{content:\"\\F124\"}.fa-crop:before{content:\"\\F125\"}.fa-code-fork:before{content:\"\\F126\"}.fa-chain-broken:before,.fa-unlink:before{content:\"\\F127\"}.fa-question:before{content:\"\\F128\"}.fa-info:before{content:\"\\F129\"}.fa-exclamation:before{content:\"\\F12A\"}.fa-superscript:before{content:\"\\F12B\"}.fa-subscript:before{content:\"\\F12C\"}.fa-eraser:before{content:\"\\F12D\"}.fa-puzzle-piece:before{content:\"\\F12E\"}.fa-microphone:before{content:\"\\F130\"}.fa-microphone-slash:before{content:\"\\F131\"}.fa-shield:before{content:\"\\F132\"}.fa-calendar-o:before{content:\"\\F133\"}.fa-fire-extinguisher:before{content:\"\\F134\"}.fa-rocket:before{content:\"\\F135\"}.fa-maxcdn:before{content:\"\\F136\"}.fa-chevron-circle-left:before{content:\"\\F137\"}.fa-chevron-circle-right:before{content:\"\\F138\"}.fa-chevron-circle-up:before{content:\"\\F139\"}.fa-chevron-circle-down:before{content:\"\\F13A\"}.fa-html5:before{content:\"\\F13B\"}.fa-css3:before{content:\"\\F13C\"}.fa-anchor:before{content:\"\\F13D\"}.fa-unlock-alt:before{content:\"\\F13E\"}.fa-bullseye:before{content:\"\\F140\"}.fa-ellipsis-h:before{content:\"\\F141\"}.fa-ellipsis-v:before{content:\"\\F142\"}.fa-rss-square:before{content:\"\\F143\"}.fa-play-circle:before{content:\"\\F144\"}.fa-ticket:before{content:\"\\F145\"}.fa-minus-square:before{content:\"\\F146\"}.fa-minus-square-o:before{content:\"\\F147\"}.fa-level-up:before{content:\"\\F148\"}.fa-level-down:before{content:\"\\F149\"}.fa-check-square:before{content:\"\\F14A\"}.fa-pencil-square:before{content:\"\\F14B\"}.fa-external-link-square:before{content:\"\\F14C\"}.fa-share-square:before{content:\"\\F14D\"}.fa-compass:before{content:\"\\F14E\"}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:\"\\F150\"}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:\"\\F151\"}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:\"\\F152\"}.fa-eur:before,.fa-euro:before{content:\"\\F153\"}.fa-gbp:before{content:\"\\F154\"}.fa-dollar:before,.fa-usd:before{content:\"\\F155\"}.fa-inr:before,.fa-rupee:before{content:\"\\F156\"}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:\"\\F157\"}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:\"\\F158\"}.fa-krw:before,.fa-won:before{content:\"\\F159\"}.fa-bitcoin:before,.fa-btc:before{content:\"\\F15A\"}.fa-file:before{content:\"\\F15B\"}.fa-file-text:before{content:\"\\F15C\"}.fa-sort-alpha-asc:before{content:\"\\F15D\"}.fa-sort-alpha-desc:before{content:\"\\F15E\"}.fa-sort-amount-asc:before{content:\"\\F160\"}.fa-sort-amount-desc:before{content:\"\\F161\"}.fa-sort-numeric-asc:before{content:\"\\F162\"}.fa-sort-numeric-desc:before{content:\"\\F163\"}.fa-thumbs-up:before{content:\"\\F164\"}.fa-thumbs-down:before{content:\"\\F165\"}.fa-youtube-square:before{content:\"\\F166\"}.fa-youtube:before{content:\"\\F167\"}.fa-xing:before{content:\"\\F168\"}.fa-xing-square:before{content:\"\\F169\"}.fa-youtube-play:before{content:\"\\F16A\"}.fa-dropbox:before{content:\"\\F16B\"}.fa-stack-overflow:before{content:\"\\F16C\"}.fa-instagram:before{content:\"\\F16D\"}.fa-flickr:before{content:\"\\F16E\"}.fa-adn:before{content:\"\\F170\"}.fa-bitbucket:before{content:\"\\F171\"}.fa-bitbucket-square:before{content:\"\\F172\"}.fa-tumblr:before{content:\"\\F173\"}.fa-tumblr-square:before{content:\"\\F174\"}.fa-long-arrow-down:before{content:\"\\F175\"}.fa-long-arrow-up:before{content:\"\\F176\"}.fa-long-arrow-left:before{content:\"\\F177\"}.fa-long-arrow-right:before{content:\"\\F178\"}.fa-apple:before{content:\"\\F179\"}.fa-windows:before{content:\"\\F17A\"}.fa-android:before{content:\"\\F17B\"}.fa-linux:before{content:\"\\F17C\"}.fa-dribbble:before{content:\"\\F17D\"}.fa-skype:before{content:\"\\F17E\"}.fa-foursquare:before{content:\"\\F180\"}.fa-trello:before{content:\"\\F181\"}.fa-female:before{content:\"\\F182\"}.fa-male:before{content:\"\\F183\"}.fa-gittip:before,.fa-gratipay:before{content:\"\\F184\"}.fa-sun-o:before{content:\"\\F185\"}.fa-moon-o:before{content:\"\\F186\"}.fa-archive:before{content:\"\\F187\"}.fa-bug:before{content:\"\\F188\"}.fa-vk:before{content:\"\\F189\"}.fa-weibo:before{content:\"\\F18A\"}.fa-renren:before{content:\"\\F18B\"}.fa-pagelines:before{content:\"\\F18C\"}.fa-stack-exchange:before{content:\"\\F18D\"}.fa-arrow-circle-o-right:before{content:\"\\F18E\"}.fa-arrow-circle-o-left:before{content:\"\\F190\"}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:\"\\F191\"}.fa-dot-circle-o:before{content:\"\\F192\"}.fa-wheelchair:before{content:\"\\F193\"}.fa-vimeo-square:before{content:\"\\F194\"}.fa-try:before,.fa-turkish-lira:before{content:\"\\F195\"}.fa-plus-square-o:before{content:\"\\F196\"}.fa-space-shuttle:before{content:\"\\F197\"}.fa-slack:before{content:\"\\F198\"}.fa-envelope-square:before{content:\"\\F199\"}.fa-wordpress:before{content:\"\\F19A\"}.fa-openid:before{content:\"\\F19B\"}.fa-bank:before,.fa-institution:before,.fa-university:before{content:\"\\F19C\"}.fa-graduation-cap:before,.fa-mortar-board:before{content:\"\\F19D\"}.fa-yahoo:before{content:\"\\F19E\"}.fa-google:before{content:\"\\F1A0\"}.fa-reddit:before{content:\"\\F1A1\"}.fa-reddit-square:before{content:\"\\F1A2\"}.fa-stumbleupon-circle:before{content:\"\\F1A3\"}.fa-stumbleupon:before{content:\"\\F1A4\"}.fa-delicious:before{content:\"\\F1A5\"}.fa-digg:before{content:\"\\F1A6\"}.fa-pied-piper-pp:before{content:\"\\F1A7\"}.fa-pied-piper-alt:before{content:\"\\F1A8\"}.fa-drupal:before{content:\"\\F1A9\"}.fa-joomla:before{content:\"\\F1AA\"}.fa-language:before{content:\"\\F1AB\"}.fa-fax:before{content:\"\\F1AC\"}.fa-building:before{content:\"\\F1AD\"}.fa-child:before{content:\"\\F1AE\"}.fa-paw:before{content:\"\\F1B0\"}.fa-spoon:before{content:\"\\F1B1\"}.fa-cube:before{content:\"\\F1B2\"}.fa-cubes:before{content:\"\\F1B3\"}.fa-behance:before{content:\"\\F1B4\"}.fa-behance-square:before{content:\"\\F1B5\"}.fa-steam:before{content:\"\\F1B6\"}.fa-steam-square:before{content:\"\\F1B7\"}.fa-recycle:before{content:\"\\F1B8\"}.fa-automobile:before,.fa-car:before{content:\"\\F1B9\"}.fa-cab:before,.fa-taxi:before{content:\"\\F1BA\"}.fa-tree:before{content:\"\\F1BB\"}.fa-spotify:before{content:\"\\F1BC\"}.fa-deviantart:before{content:\"\\F1BD\"}.fa-soundcloud:before{content:\"\\F1BE\"}.fa-database:before{content:\"\\F1C0\"}.fa-file-pdf-o:before{content:\"\\F1C1\"}.fa-file-word-o:before{content:\"\\F1C2\"}.fa-file-excel-o:before{content:\"\\F1C3\"}.fa-file-powerpoint-o:before{content:\"\\F1C4\"}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:\"\\F1C5\"}.fa-file-archive-o:before,.fa-file-zip-o:before{content:\"\\F1C6\"}.fa-file-audio-o:before,.fa-file-sound-o:before{content:\"\\F1C7\"}.fa-file-movie-o:before,.fa-file-video-o:before{content:\"\\F1C8\"}.fa-file-code-o:before{content:\"\\F1C9\"}.fa-vine:before{content:\"\\F1CA\"}.fa-codepen:before{content:\"\\F1CB\"}.fa-jsfiddle:before{content:\"\\F1CC\"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:\"\\F1CD\"}.fa-circle-o-notch:before{content:\"\\F1CE\"}.fa-ra:before,.fa-rebel:before,.fa-resistance:before{content:\"\\F1D0\"}.fa-empire:before,.fa-ge:before{content:\"\\F1D1\"}.fa-git-square:before{content:\"\\F1D2\"}.fa-git:before{content:\"\\F1D3\"}.fa-hacker-news:before,.fa-y-combinator-square:before,.fa-yc-square:before{content:\"\\F1D4\"}.fa-tencent-weibo:before{content:\"\\F1D5\"}.fa-qq:before{content:\"\\F1D6\"}.fa-wechat:before,.fa-weixin:before{content:\"\\F1D7\"}.fa-paper-plane:before,.fa-send:before{content:\"\\F1D8\"}.fa-paper-plane-o:before,.fa-send-o:before{content:\"\\F1D9\"}.fa-history:before{content:\"\\F1DA\"}.fa-circle-thin:before{content:\"\\F1DB\"}.fa-header:before{content:\"\\F1DC\"}.fa-paragraph:before{content:\"\\F1DD\"}.fa-sliders:before{content:\"\\F1DE\"}.fa-share-alt:before{content:\"\\F1E0\"}.fa-share-alt-square:before{content:\"\\F1E1\"}.fa-bomb:before{content:\"\\F1E2\"}.fa-futbol-o:before,.fa-soccer-ball-o:before{content:\"\\F1E3\"}.fa-tty:before{content:\"\\F1E4\"}.fa-binoculars:before{content:\"\\F1E5\"}.fa-plug:before{content:\"\\F1E6\"}.fa-slideshare:before{content:\"\\F1E7\"}.fa-twitch:before{content:\"\\F1E8\"}.fa-yelp:before{content:\"\\F1E9\"}.fa-newspaper-o:before{content:\"\\F1EA\"}.fa-wifi:before{content:\"\\F1EB\"}.fa-calculator:before{content:\"\\F1EC\"}.fa-paypal:before{content:\"\\F1ED\"}.fa-google-wallet:before{content:\"\\F1EE\"}.fa-cc-visa:before{content:\"\\F1F0\"}.fa-cc-mastercard:before{content:\"\\F1F1\"}.fa-cc-discover:before{content:\"\\F1F2\"}.fa-cc-amex:before{content:\"\\F1F3\"}.fa-cc-paypal:before{content:\"\\F1F4\"}.fa-cc-stripe:before{content:\"\\F1F5\"}.fa-bell-slash:before{content:\"\\F1F6\"}.fa-bell-slash-o:before{content:\"\\F1F7\"}.fa-trash:before{content:\"\\F1F8\"}.fa-copyright:before{content:\"\\F1F9\"}.fa-at:before{content:\"\\F1FA\"}.fa-eyedropper:before{content:\"\\F1FB\"}.fa-paint-brush:before{content:\"\\F1FC\"}.fa-birthday-cake:before{content:\"\\F1FD\"}.fa-area-chart:before{content:\"\\F1FE\"}.fa-pie-chart:before{content:\"\\F200\"}.fa-line-chart:before{content:\"\\F201\"}.fa-lastfm:before{content:\"\\F202\"}.fa-lastfm-square:before{content:\"\\F203\"}.fa-toggle-off:before{content:\"\\F204\"}.fa-toggle-on:before{content:\"\\F205\"}.fa-bicycle:before{content:\"\\F206\"}.fa-bus:before{content:\"\\F207\"}.fa-ioxhost:before{content:\"\\F208\"}.fa-angellist:before{content:\"\\F209\"}.fa-cc:before{content:\"\\F20A\"}.fa-ils:before,.fa-shekel:before,.fa-sheqel:before{content:\"\\F20B\"}.fa-meanpath:before{content:\"\\F20C\"}.fa-buysellads:before{content:\"\\F20D\"}.fa-connectdevelop:before{content:\"\\F20E\"}.fa-dashcube:before{content:\"\\F210\"}.fa-forumbee:before{content:\"\\F211\"}.fa-leanpub:before{content:\"\\F212\"}.fa-sellsy:before{content:\"\\F213\"}.fa-shirtsinbulk:before{content:\"\\F214\"}.fa-simplybuilt:before{content:\"\\F215\"}.fa-skyatlas:before{content:\"\\F216\"}.fa-cart-plus:before{content:\"\\F217\"}.fa-cart-arrow-down:before{content:\"\\F218\"}.fa-diamond:before{content:\"\\F219\"}.fa-ship:before{content:\"\\F21A\"}.fa-user-secret:before{content:\"\\F21B\"}.fa-motorcycle:before{content:\"\\F21C\"}.fa-street-view:before{content:\"\\F21D\"}.fa-heartbeat:before{content:\"\\F21E\"}.fa-venus:before{content:\"\\F221\"}.fa-mars:before{content:\"\\F222\"}.fa-mercury:before{content:\"\\F223\"}.fa-intersex:before,.fa-transgender:before{content:\"\\F224\"}.fa-transgender-alt:before{content:\"\\F225\"}.fa-venus-double:before{content:\"\\F226\"}.fa-mars-double:before{content:\"\\F227\"}.fa-venus-mars:before{content:\"\\F228\"}.fa-mars-stroke:before{content:\"\\F229\"}.fa-mars-stroke-v:before{content:\"\\F22A\"}.fa-mars-stroke-h:before{content:\"\\F22B\"}.fa-neuter:before{content:\"\\F22C\"}.fa-genderless:before{content:\"\\F22D\"}.fa-facebook-official:before{content:\"\\F230\"}.fa-pinterest-p:before{content:\"\\F231\"}.fa-whatsapp:before{content:\"\\F232\"}.fa-server:before{content:\"\\F233\"}.fa-user-plus:before{content:\"\\F234\"}.fa-user-times:before{content:\"\\F235\"}.fa-bed:before,.fa-hotel:before{content:\"\\F236\"}.fa-viacoin:before{content:\"\\F237\"}.fa-train:before{content:\"\\F238\"}.fa-subway:before{content:\"\\F239\"}.fa-medium:before{content:\"\\F23A\"}.fa-y-combinator:before,.fa-yc:before{content:\"\\F23B\"}.fa-optin-monster:before{content:\"\\F23C\"}.fa-opencart:before{content:\"\\F23D\"}.fa-expeditedssl:before{content:\"\\F23E\"}.fa-battery-4:before,.fa-battery-full:before,.fa-battery:before{content:\"\\F240\"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:\"\\F241\"}.fa-battery-2:before,.fa-battery-half:before{content:\"\\F242\"}.fa-battery-1:before,.fa-battery-quarter:before{content:\"\\F243\"}.fa-battery-0:before,.fa-battery-empty:before{content:\"\\F244\"}.fa-mouse-pointer:before{content:\"\\F245\"}.fa-i-cursor:before{content:\"\\F246\"}.fa-object-group:before{content:\"\\F247\"}.fa-object-ungroup:before{content:\"\\F248\"}.fa-sticky-note:before{content:\"\\F249\"}.fa-sticky-note-o:before{content:\"\\F24A\"}.fa-cc-jcb:before{content:\"\\F24B\"}.fa-cc-diners-club:before{content:\"\\F24C\"}.fa-clone:before{content:\"\\F24D\"}.fa-balance-scale:before{content:\"\\F24E\"}.fa-hourglass-o:before{content:\"\\F250\"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:\"\\F251\"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:\"\\F252\"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:\"\\F253\"}.fa-hourglass:before{content:\"\\F254\"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:\"\\F255\"}.fa-hand-paper-o:before,.fa-hand-stop-o:before{content:\"\\F256\"}.fa-hand-scissors-o:before{content:\"\\F257\"}.fa-hand-lizard-o:before{content:\"\\F258\"}.fa-hand-spock-o:before{content:\"\\F259\"}.fa-hand-pointer-o:before{content:\"\\F25A\"}.fa-hand-peace-o:before{content:\"\\F25B\"}.fa-trademark:before{content:\"\\F25C\"}.fa-registered:before{content:\"\\F25D\"}.fa-creative-commons:before{content:\"\\F25E\"}.fa-gg:before{content:\"\\F260\"}.fa-gg-circle:before{content:\"\\F261\"}.fa-tripadvisor:before{content:\"\\F262\"}.fa-odnoklassniki:before{content:\"\\F263\"}.fa-odnoklassniki-square:before{content:\"\\F264\"}.fa-get-pocket:before{content:\"\\F265\"}.fa-wikipedia-w:before{content:\"\\F266\"}.fa-safari:before{content:\"\\F267\"}.fa-chrome:before{content:\"\\F268\"}.fa-firefox:before{content:\"\\F269\"}.fa-opera:before{content:\"\\F26A\"}.fa-internet-explorer:before{content:\"\\F26B\"}.fa-television:before,.fa-tv:before{content:\"\\F26C\"}.fa-contao:before{content:\"\\F26D\"}.fa-500px:before{content:\"\\F26E\"}.fa-amazon:before{content:\"\\F270\"}.fa-calendar-plus-o:before{content:\"\\F271\"}.fa-calendar-minus-o:before{content:\"\\F272\"}.fa-calendar-times-o:before{content:\"\\F273\"}.fa-calendar-check-o:before{content:\"\\F274\"}.fa-industry:before{content:\"\\F275\"}.fa-map-pin:before{content:\"\\F276\"}.fa-map-signs:before{content:\"\\F277\"}.fa-map-o:before{content:\"\\F278\"}.fa-map:before{content:\"\\F279\"}.fa-commenting:before{content:\"\\F27A\"}.fa-commenting-o:before{content:\"\\F27B\"}.fa-houzz:before{content:\"\\F27C\"}.fa-vimeo:before{content:\"\\F27D\"}.fa-black-tie:before{content:\"\\F27E\"}.fa-fonticons:before{content:\"\\F280\"}.fa-reddit-alien:before{content:\"\\F281\"}.fa-edge:before{content:\"\\F282\"}.fa-credit-card-alt:before{content:\"\\F283\"}.fa-codiepie:before{content:\"\\F284\"}.fa-modx:before{content:\"\\F285\"}.fa-fort-awesome:before{content:\"\\F286\"}.fa-usb:before{content:\"\\F287\"}.fa-product-hunt:before{content:\"\\F288\"}.fa-mixcloud:before{content:\"\\F289\"}.fa-scribd:before{content:\"\\F28A\"}.fa-pause-circle:before{content:\"\\F28B\"}.fa-pause-circle-o:before{content:\"\\F28C\"}.fa-stop-circle:before{content:\"\\F28D\"}.fa-stop-circle-o:before{content:\"\\F28E\"}.fa-shopping-bag:before{content:\"\\F290\"}.fa-shopping-basket:before{content:\"\\F291\"}.fa-hashtag:before{content:\"\\F292\"}.fa-bluetooth:before{content:\"\\F293\"}.fa-bluetooth-b:before{content:\"\\F294\"}.fa-percent:before{content:\"\\F295\"}.fa-gitlab:before{content:\"\\F296\"}.fa-wpbeginner:before{content:\"\\F297\"}.fa-wpforms:before{content:\"\\F298\"}.fa-envira:before{content:\"\\F299\"}.fa-universal-access:before{content:\"\\F29A\"}.fa-wheelchair-alt:before{content:\"\\F29B\"}.fa-question-circle-o:before{content:\"\\F29C\"}.fa-blind:before{content:\"\\F29D\"}.fa-audio-description:before{content:\"\\F29E\"}.fa-volume-control-phone:before{content:\"\\F2A0\"}.fa-braille:before{content:\"\\F2A1\"}.fa-assistive-listening-systems:before{content:\"\\F2A2\"}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before{content:\"\\F2A3\"}.fa-deaf:before,.fa-deafness:before,.fa-hard-of-hearing:before{content:\"\\F2A4\"}.fa-glide:before{content:\"\\F2A5\"}.fa-glide-g:before{content:\"\\F2A6\"}.fa-sign-language:before,.fa-signing:before{content:\"\\F2A7\"}.fa-low-vision:before{content:\"\\F2A8\"}.fa-viadeo:before{content:\"\\F2A9\"}.fa-viadeo-square:before{content:\"\\F2AA\"}.fa-snapchat:before{content:\"\\F2AB\"}.fa-snapchat-ghost:before{content:\"\\F2AC\"}.fa-snapchat-square:before{content:\"\\F2AD\"}.fa-pied-piper:before{content:\"\\F2AE\"}.fa-first-order:before{content:\"\\F2B0\"}.fa-yoast:before{content:\"\\F2B1\"}.fa-themeisle:before{content:\"\\F2B2\"}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:\"\\F2B3\"}.fa-fa:before,.fa-font-awesome:before{content:\"\\F2B4\"}.fa-handshake-o:before{content:\"\\F2B5\"}.fa-envelope-open:before{content:\"\\F2B6\"}.fa-envelope-open-o:before{content:\"\\F2B7\"}.fa-linode:before{content:\"\\F2B8\"}.fa-address-book:before{content:\"\\F2B9\"}.fa-address-book-o:before{content:\"\\F2BA\"}.fa-address-card:before,.fa-vcard:before{content:\"\\F2BB\"}.fa-address-card-o:before,.fa-vcard-o:before{content:\"\\F2BC\"}.fa-user-circle:before{content:\"\\F2BD\"}.fa-user-circle-o:before{content:\"\\F2BE\"}.fa-user-o:before{content:\"\\F2C0\"}.fa-id-badge:before{content:\"\\F2C1\"}.fa-drivers-license:before,.fa-id-card:before{content:\"\\F2C2\"}.fa-drivers-license-o:before,.fa-id-card-o:before{content:\"\\F2C3\"}.fa-quora:before{content:\"\\F2C4\"}.fa-free-code-camp:before{content:\"\\F2C5\"}.fa-telegram:before{content:\"\\F2C6\"}.fa-thermometer-4:before,.fa-thermometer-full:before,.fa-thermometer:before{content:\"\\F2C7\"}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:\"\\F2C8\"}.fa-thermometer-2:before,.fa-thermometer-half:before{content:\"\\F2C9\"}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:\"\\F2CA\"}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:\"\\F2CB\"}.fa-shower:before{content:\"\\F2CC\"}.fa-bath:before,.fa-bathtub:before,.fa-s15:before{content:\"\\F2CD\"}.fa-podcast:before{content:\"\\F2CE\"}.fa-window-maximize:before{content:\"\\F2D0\"}.fa-window-minimize:before{content:\"\\F2D1\"}.fa-window-restore:before{content:\"\\F2D2\"}.fa-times-rectangle:before,.fa-window-close:before{content:\"\\F2D3\"}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:\"\\F2D4\"}.fa-bandcamp:before{content:\"\\F2D5\"}.fa-grav:before{content:\"\\F2D6\"}.fa-etsy:before{content:\"\\F2D7\"}.fa-imdb:before{content:\"\\F2D8\"}.fa-ravelry:before{content:\"\\F2D9\"}.fa-eercast:before{content:\"\\F2DA\"}.fa-microchip:before{content:\"\\F2DB\"}.fa-snowflake-o:before{content:\"\\F2DC\"}.fa-superpowers:before{content:\"\\F2DD\"}.fa-wpexplorer:before{content:\"\\F2DE\"}.fa-meetup:before{content:\"\\F2E0\"}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}@font-face{font-family:FontAwesome;src:url(" + __webpack_require__(1154) + ");src:url(" + __webpack_require__(1153) + "?#iefix&v=4.7.0) format('embedded-opentype'),url(" + __webpack_require__(1157) + ") format('woff2'),url(" + __webpack_require__(1158) + ") format('woff'),url(" + __webpack_require__(1156) + ") format('truetype'),url(" + __webpack_require__(1155) + "#fontawesomeregular) format('svg');font-weight:400;font-style:normal}.fa-rotate-90{-ms-filter:\"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)\";transform:rotate(90deg)}.fa-rotate-180{-ms-filter:\"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)\";transform:rotate(180deg)}.fa-rotate-270{-ms-filter:\"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)\";transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:\"progid:DXImageTransform.Microsoft.BasicImage(rotation=0,mirror=1)\";transform:scale(-1,1)}.fa-flip-vertical{-ms-filter:\"progid:DXImageTransform.Microsoft.BasicImage(rotation=2,mirror=1)\";transform:scale(1,-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{filter:none}.fa-spin{animation:fa-spin 2s infinite linear}.fa-pulse{animation:fa-spin 1s infinite steps(8)}@keyframes fa-spin{0%{transform:rotate(0deg)}to{transform:rotate(359deg)}}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}", ""]);
	
	// exports


/***/ }),
/* 931 */
/***/ (function(module, exports, __webpack_require__) {

	exports = module.exports = __webpack_require__(7)();
	// imports
	
	
	// module
	exports.push([module.id, ".anno{position:absolute;padding:15px;z-index:5000;width:300px;cursor:default;text-transform:none;text-align:left;line-height:.9em;transition:all .3s cubic-bezier(0.68,0,0.265,1);transition-property:opacity,margin}.anno .anno-inner{position:relative;background:#fff;box-shadow:0 5px 20px 0 rgba(0,0,0,.35)}.anno .anno-inner .anno-content{padding:15px 20px;line-height:1.3em;font-family:sans-serif;font-weight:400;font-size:15px;color:#56565a}.anno .anno-inner .anno-btn-container{text-align:right}.anno .anno-inner .anno-btn-container .anno-btn{margin:0 20px 15px -10px;padding:7px 14px;height:auto;width:auto;background:#11a2dc;border:none;border-radius:0;font-family:sans-serif;font-weight:700;font-size:9pt;color:#fff;transition:all .15s cubic-bezier(0.68,0,0.265,1)}.anno .anno-inner .anno-btn-container .anno-btn:hover{background:#0f91c4}.anno .anno-inner .anno-btn-container .anno-btn:active{background:#0d7fad}.anno .anno-inner .anno-btn-container .anno-btn.anno-btn-low-importance{background:none;color:#bbbbbd}.anno .anno-inner .anno-btn-container .anno-btn.anno-btn-low-importance:hover{color:#78787b}.anno .anno-arrow{position:absolute;border:8px solid #fff}.anno.anno-target-bottom .anno-arrow,.anno.anno-target-center-bottom .anno-arrow{top:100%;left:20px;border-bottom:none;border-color:#fff transparent}.anno.anno-target-bottom.anno-hidden,.anno.anno-target-center-bottom.anno-hidden{margin-top:-20px}.anno.anno-target-center-left .anno-arrow,.anno.anno-target-left .anno-arrow{right:100%;top:15px;border-left:none;border-color:transparent #fff}.anno.anno-target-center-left.anno-hidden,.anno.anno-target-left.anno-hidden{margin-left:20px}.anno.anno-target-center-top .anno-arrow,.anno.anno-target-top .anno-arrow{bottom:100%;left:20px;border-top:none;border-color:#fff transparent}.anno.anno-target-center-top.anno-hidden,.anno.anno-target-top.anno-hidden{margin-top:20px}.anno.anno-target-center-right .anno-arrow,.anno.anno-target-right .anno-arrow{left:100%;top:15px;border-right:none;border-color:transparent #fff}.anno.anno-target-center-right.anno-hidden,.anno.anno-target-right.anno-hidden{margin-left:-20px}.anno.anno-target-center-left .anno-arrow,.anno.anno-target-center-right .anno-arrow{top:50%;margin-top:-8px}.anno.anno-target-center-bottom .anno-arrow,.anno.anno-target-center-top .anno-arrow{left:50%;margin-left:-8px}.anno.anno-hidden{opacity:0}.anno.anno-width-400{width:25pc}.anno.anno-width-250{width:250px}.anno.anno-width-200{width:200px}.anno.anno-width-175{width:175px}.anno.anno-width-150{width:150px}.anno-overlay{position:fixed;z-index:1000;height:100%;width:100%;top:0;left:0;background:rgba(0,0,0,.7);transition:all .3s cubic-bezier(0.68,0,0.265,1)}.anno-overlay.anno-hidden{pointer-events:none;opacity:0}.anno-emphasise-target{z-index:1001 !important!important}", ""]);
	
	// exports


/***/ }),
/* 932 */
/***/ (function(module, exports, __webpack_require__) {

	exports = module.exports = __webpack_require__(7)();
	// imports
	
	
	// module
	exports.push([module.id, "/*! =======================================================\n                      VERSION  9.10.0              \n========================================================= */\n/*! =========================================================\n * bootstrap-slider.js\n *\n * Maintainers:\n *\t\tKyle Kemp\n *\t\t\t- Twitter: @seiyria\n *\t\t\t- Github:  seiyria\n *\t\tRohit Kalkur\n *\t\t\t- Twitter: @Rovolutionary\n *\t\t\t- Github:  rovolution\n *\n * =========================================================\n  *\n * bootstrap-slider is released under the MIT License\n * Copyright (c) 2017 Kyle Kemp, Rohit Kalkur, and contributors\n * \n * Permission is hereby granted, free of charge, to any person\n * obtaining a copy of this software and associated documentation\n * files (the \"Software\"), to deal in the Software without\n * restriction, including without limitation the rights to use,\n * copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the\n * Software is furnished to do so, subject to the following\n * conditions:\n * \n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n * \n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\n * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\n * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\n * OTHER DEALINGS IN THE SOFTWARE.\n *\n * ========================================================= */.slider{display:inline-block;vertical-align:middle;position:relative}.slider.slider-horizontal{width:210px;height:20px}.slider.slider-horizontal .slider-track{height:10px;width:100%;margin-top:-5px;top:50%;left:0}.slider.slider-horizontal .slider-selection,.slider.slider-horizontal .slider-track-high,.slider.slider-horizontal .slider-track-low{height:100%;top:0;bottom:0}.slider.slider-horizontal .slider-handle,.slider.slider-horizontal .slider-tick{margin-left:-10px}.slider.slider-horizontal .slider-handle.triangle,.slider.slider-horizontal .slider-tick.triangle{position:relative;top:50%;transform:translateY(-50%);border-width:0 10px 10px;width:0;height:0;border-bottom-color:#2e6da4;margin-top:0}.slider.slider-horizontal .slider-tick-container{white-space:nowrap;position:absolute;top:0;left:0;width:100%}.slider.slider-horizontal .slider-tick-label-container{white-space:nowrap;margin-top:20px}.slider.slider-horizontal .slider-tick-label-container .slider-tick-label{padding-top:4px;display:inline-block;text-align:center}.slider.slider-horizontal.slider-rtl .slider-track{left:initial;right:0}.slider.slider-horizontal.slider-rtl .slider-handle,.slider.slider-horizontal.slider-rtl .slider-tick{margin-left:initial;margin-right:-10px}.slider.slider-horizontal.slider-rtl .slider-tick-container{left:initial;right:0}.slider.slider-vertical{height:210px;width:20px}.slider.slider-vertical .slider-track{width:10px;height:100%;left:25%;top:0}.slider.slider-vertical .slider-selection{width:100%;left:0;top:0;bottom:0}.slider.slider-vertical .slider-track-high,.slider.slider-vertical .slider-track-low{width:100%;left:0;right:0}.slider.slider-vertical .slider-handle,.slider.slider-vertical .slider-tick{margin-top:-10px}.slider.slider-vertical .slider-handle.triangle,.slider.slider-vertical .slider-tick.triangle{border-width:10px 0 10px 10px;width:1px;height:1px;border-left-color:#2e6da4;border-right-color:#2e6da4;margin-left:0;margin-right:0}.slider.slider-vertical .slider-tick-label-container{white-space:nowrap}.slider.slider-vertical .slider-tick-label-container .slider-tick-label{padding-left:4px}.slider.slider-vertical.slider-rtl .slider-track{left:initial;right:25%}.slider.slider-vertical.slider-rtl .slider-selection{left:initial;right:0}.slider.slider-vertical.slider-rtl .slider-handle.triangle,.slider.slider-vertical.slider-rtl .slider-tick.triangle{border-width:10px 10px 10px 0}.slider.slider-vertical.slider-rtl .slider-tick-label-container .slider-tick-label{padding-left:initial;padding-right:4px}.slider.slider-disabled .slider-handle{background-image:linear-gradient(to bottom,#dfdfdf 0%,#bebebe 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdfdfdf',endColorstr='#ffbebebe',GradientType=0)}.slider.slider-disabled .slider-track{background-image:linear-gradient(to bottom,#e5e5e5 0%,#e9e9e9 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe5e5e5',endColorstr='#ffe9e9e9',GradientType=0);cursor:not-allowed}.slider input{display:none}.slider .tooltip.top{margin-top:-36px}.slider .tooltip-inner{white-space:nowrap;max-width:none}.slider .hide{display:none}.slider-track{cursor:pointer;background-image:linear-gradient(to bottom,#f5f5f5 0%,#f9f9f9 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5',endColorstr='#fff9f9f9',GradientType=0);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.slider-selection,.slider-track{position:absolute;background-repeat:repeat-x;border-radius:4px}.slider-selection{background-image:linear-gradient(to bottom,#f9f9f9 0%,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff9f9f9',endColorstr='#fff5f5f5',GradientType=0);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-sizing:border-box}.slider-selection.tick-slider-selection{background-image:linear-gradient(to bottom,#8ac1ef 0%,#82b3de 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff8ac1ef',endColorstr='#ff82b3de',GradientType=0)}.slider-track-high,.slider-track-low{position:absolute;background:transparent;box-sizing:border-box;border-radius:4px}.slider-handle{position:absolute;top:0;width:20px;height:20px;background-color:#337ab7;background-image:linear-gradient(to bottom,#337ab7 0%,#2e6da4 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7',endColorstr='#ff2e6da4',GradientType=0);filter:none;box-shadow:inset 0 1px 0 hsla(0,0%,100%,.2),0 1px 2px rgba(0,0,0,.05);border:0 solid transparent}.slider-handle.round{border-radius:50%}.slider-handle.custom,.slider-handle.triangle{background:transparent none}.slider-handle.custom:before{line-height:20px;font-size:20px;content:'\\2605';color:#726204}.slider-tick{position:absolute;width:20px;height:20px;background-image:linear-gradient(to bottom,#f9f9f9 0%,#f5f5f5 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff9f9f9',endColorstr='#fff5f5f5',GradientType=0);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-sizing:border-box;filter:none;opacity:.8;border:0 solid transparent}.slider-tick.round{border-radius:50%}.slider-tick.custom,.slider-tick.triangle{background:transparent none}.slider-tick.custom:before{line-height:20px;font-size:20px;content:'\\2605';color:#726204}.slider-tick.in-selection{background-image:linear-gradient(to bottom,#8ac1ef 0%,#82b3de 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff8ac1ef',endColorstr='#ff82b3de',GradientType=0);opacity:1}", ""]);
	
	// exports


/***/ }),
/* 933 */
/***/ (function(module, exports, __webpack_require__) {

	exports = module.exports = __webpack_require__(7)();
	// imports
	
	
	// module
	exports.push([module.id, "/*!\n * Bootstrap v3.4.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;-moz-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,:after,:before{color:#000!important;text-shadow:none!important;background:0 0!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:\" (\" attr(href) \")\"}abbr[title]:after{content:\" (\" attr(title) \")\"}a[href^=\"#\"]:after,a[href^=\"javascript:\"]:after{content:\"\"}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}@font-face{font-family:Glyphicons Halflings;src:url(" + __webpack_require__(518) + ");src:url(" + __webpack_require__(518) + "?#iefix) format(\"embedded-opentype\"),url(" + __webpack_require__(1152) + ") format(\"woff2\"),url(" + __webpack_require__(1151) + ") format(\"woff\"),url(" + __webpack_require__(1150) + ") format(\"truetype\"),url(" + __webpack_require__(1149) + "#glyphicons_halflingsregular) format(\"svg\")}.glyphicon{position:relative;top:1px;display:inline-block;font-family:Glyphicons Halflings;font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:\"*\"}.glyphicon-plus:before{content:\"+\"}.glyphicon-eur:before,.glyphicon-euro:before{content:\"\\20AC\"}.glyphicon-minus:before{content:\"\\2212\"}.glyphicon-cloud:before{content:\"\\2601\"}.glyphicon-envelope:before{content:\"\\2709\"}.glyphicon-pencil:before{content:\"\\270F\"}.glyphicon-glass:before{content:\"\\E001\"}.glyphicon-music:before{content:\"\\E002\"}.glyphicon-search:before{content:\"\\E003\"}.glyphicon-heart:before{content:\"\\E005\"}.glyphicon-star:before{content:\"\\E006\"}.glyphicon-star-empty:before{content:\"\\E007\"}.glyphicon-user:before{content:\"\\E008\"}.glyphicon-film:before{content:\"\\E009\"}.glyphicon-th-large:before{content:\"\\E010\"}.glyphicon-th:before{content:\"\\E011\"}.glyphicon-th-list:before{content:\"\\E012\"}.glyphicon-ok:before{content:\"\\E013\"}.glyphicon-remove:before{content:\"\\E014\"}.glyphicon-zoom-in:before{content:\"\\E015\"}.glyphicon-zoom-out:before{content:\"\\E016\"}.glyphicon-off:before{content:\"\\E017\"}.glyphicon-signal:before{content:\"\\E018\"}.glyphicon-cog:before{content:\"\\E019\"}.glyphicon-trash:before{content:\"\\E020\"}.glyphicon-home:before{content:\"\\E021\"}.glyphicon-file:before{content:\"\\E022\"}.glyphicon-time:before{content:\"\\E023\"}.glyphicon-road:before{content:\"\\E024\"}.glyphicon-download-alt:before{content:\"\\E025\"}.glyphicon-download:before{content:\"\\E026\"}.glyphicon-upload:before{content:\"\\E027\"}.glyphicon-inbox:before{content:\"\\E028\"}.glyphicon-play-circle:before{content:\"\\E029\"}.glyphicon-repeat:before{content:\"\\E030\"}.glyphicon-refresh:before{content:\"\\E031\"}.glyphicon-list-alt:before{content:\"\\E032\"}.glyphicon-lock:before{content:\"\\E033\"}.glyphicon-flag:before{content:\"\\E034\"}.glyphicon-headphones:before{content:\"\\E035\"}.glyphicon-volume-off:before{content:\"\\E036\"}.glyphicon-volume-down:before{content:\"\\E037\"}.glyphicon-volume-up:before{content:\"\\E038\"}.glyphicon-qrcode:before{content:\"\\E039\"}.glyphicon-barcode:before{content:\"\\E040\"}.glyphicon-tag:before{content:\"\\E041\"}.glyphicon-tags:before{content:\"\\E042\"}.glyphicon-book:before{content:\"\\E043\"}.glyphicon-bookmark:before{content:\"\\E044\"}.glyphicon-print:before{content:\"\\E045\"}.glyphicon-camera:before{content:\"\\E046\"}.glyphicon-font:before{content:\"\\E047\"}.glyphicon-bold:before{content:\"\\E048\"}.glyphicon-italic:before{content:\"\\E049\"}.glyphicon-text-height:before{content:\"\\E050\"}.glyphicon-text-width:before{content:\"\\E051\"}.glyphicon-align-left:before{content:\"\\E052\"}.glyphicon-align-center:before{content:\"\\E053\"}.glyphicon-align-right:before{content:\"\\E054\"}.glyphicon-align-justify:before{content:\"\\E055\"}.glyphicon-list:before{content:\"\\E056\"}.glyphicon-indent-left:before{content:\"\\E057\"}.glyphicon-indent-right:before{content:\"\\E058\"}.glyphicon-facetime-video:before{content:\"\\E059\"}.glyphicon-picture:before{content:\"\\E060\"}.glyphicon-map-marker:before{content:\"\\E062\"}.glyphicon-adjust:before{content:\"\\E063\"}.glyphicon-tint:before{content:\"\\E064\"}.glyphicon-edit:before{content:\"\\E065\"}.glyphicon-share:before{content:\"\\E066\"}.glyphicon-check:before{content:\"\\E067\"}.glyphicon-move:before{content:\"\\E068\"}.glyphicon-step-backward:before{content:\"\\E069\"}.glyphicon-fast-backward:before{content:\"\\E070\"}.glyphicon-backward:before{content:\"\\E071\"}.glyphicon-play:before{content:\"\\E072\"}.glyphicon-pause:before{content:\"\\E073\"}.glyphicon-stop:before{content:\"\\E074\"}.glyphicon-forward:before{content:\"\\E075\"}.glyphicon-fast-forward:before{content:\"\\E076\"}.glyphicon-step-forward:before{content:\"\\E077\"}.glyphicon-eject:before{content:\"\\E078\"}.glyphicon-chevron-left:before{content:\"\\E079\"}.glyphicon-chevron-right:before{content:\"\\E080\"}.glyphicon-plus-sign:before{content:\"\\E081\"}.glyphicon-minus-sign:before{content:\"\\E082\"}.glyphicon-remove-sign:before{content:\"\\E083\"}.glyphicon-ok-sign:before{content:\"\\E084\"}.glyphicon-question-sign:before{content:\"\\E085\"}.glyphicon-info-sign:before{content:\"\\E086\"}.glyphicon-screenshot:before{content:\"\\E087\"}.glyphicon-remove-circle:before{content:\"\\E088\"}.glyphicon-ok-circle:before{content:\"\\E089\"}.glyphicon-ban-circle:before{content:\"\\E090\"}.glyphicon-arrow-left:before{content:\"\\E091\"}.glyphicon-arrow-right:before{content:\"\\E092\"}.glyphicon-arrow-up:before{content:\"\\E093\"}.glyphicon-arrow-down:before{content:\"\\E094\"}.glyphicon-share-alt:before{content:\"\\E095\"}.glyphicon-resize-full:before{content:\"\\E096\"}.glyphicon-resize-small:before{content:\"\\E097\"}.glyphicon-exclamation-sign:before{content:\"\\E101\"}.glyphicon-gift:before{content:\"\\E102\"}.glyphicon-leaf:before{content:\"\\E103\"}.glyphicon-fire:before{content:\"\\E104\"}.glyphicon-eye-open:before{content:\"\\E105\"}.glyphicon-eye-close:before{content:\"\\E106\"}.glyphicon-warning-sign:before{content:\"\\E107\"}.glyphicon-plane:before{content:\"\\E108\"}.glyphicon-calendar:before{content:\"\\E109\"}.glyphicon-random:before{content:\"\\E110\"}.glyphicon-comment:before{content:\"\\E111\"}.glyphicon-magnet:before{content:\"\\E112\"}.glyphicon-chevron-up:before{content:\"\\E113\"}.glyphicon-chevron-down:before{content:\"\\E114\"}.glyphicon-retweet:before{content:\"\\E115\"}.glyphicon-shopping-cart:before{content:\"\\E116\"}.glyphicon-folder-close:before{content:\"\\E117\"}.glyphicon-folder-open:before{content:\"\\E118\"}.glyphicon-resize-vertical:before{content:\"\\E119\"}.glyphicon-resize-horizontal:before{content:\"\\E120\"}.glyphicon-hdd:before{content:\"\\E121\"}.glyphicon-bullhorn:before{content:\"\\E122\"}.glyphicon-bell:before{content:\"\\E123\"}.glyphicon-certificate:before{content:\"\\E124\"}.glyphicon-thumbs-up:before{content:\"\\E125\"}.glyphicon-thumbs-down:before{content:\"\\E126\"}.glyphicon-hand-right:before{content:\"\\E127\"}.glyphicon-hand-left:before{content:\"\\E128\"}.glyphicon-hand-up:before{content:\"\\E129\"}.glyphicon-hand-down:before{content:\"\\E130\"}.glyphicon-circle-arrow-right:before{content:\"\\E131\"}.glyphicon-circle-arrow-left:before{content:\"\\E132\"}.glyphicon-circle-arrow-up:before{content:\"\\E133\"}.glyphicon-circle-arrow-down:before{content:\"\\E134\"}.glyphicon-globe:before{content:\"\\E135\"}.glyphicon-wrench:before{content:\"\\E136\"}.glyphicon-tasks:before{content:\"\\E137\"}.glyphicon-filter:before{content:\"\\E138\"}.glyphicon-briefcase:before{content:\"\\E139\"}.glyphicon-fullscreen:before{content:\"\\E140\"}.glyphicon-dashboard:before{content:\"\\E141\"}.glyphicon-paperclip:before{content:\"\\E142\"}.glyphicon-heart-empty:before{content:\"\\E143\"}.glyphicon-link:before{content:\"\\E144\"}.glyphicon-phone:before{content:\"\\E145\"}.glyphicon-pushpin:before{content:\"\\E146\"}.glyphicon-usd:before{content:\"\\E148\"}.glyphicon-gbp:before{content:\"\\E149\"}.glyphicon-sort:before{content:\"\\E150\"}.glyphicon-sort-by-alphabet:before{content:\"\\E151\"}.glyphicon-sort-by-alphabet-alt:before{content:\"\\E152\"}.glyphicon-sort-by-order:before{content:\"\\E153\"}.glyphicon-sort-by-order-alt:before{content:\"\\E154\"}.glyphicon-sort-by-attributes:before{content:\"\\E155\"}.glyphicon-sort-by-attributes-alt:before{content:\"\\E156\"}.glyphicon-unchecked:before{content:\"\\E157\"}.glyphicon-expand:before{content:\"\\E158\"}.glyphicon-collapse-down:before{content:\"\\E159\"}.glyphicon-collapse-up:before{content:\"\\E160\"}.glyphicon-log-in:before{content:\"\\E161\"}.glyphicon-flash:before{content:\"\\E162\"}.glyphicon-log-out:before{content:\"\\E163\"}.glyphicon-new-window:before{content:\"\\E164\"}.glyphicon-record:before{content:\"\\E165\"}.glyphicon-save:before{content:\"\\E166\"}.glyphicon-open:before{content:\"\\E167\"}.glyphicon-saved:before{content:\"\\E168\"}.glyphicon-import:before{content:\"\\E169\"}.glyphicon-export:before{content:\"\\E170\"}.glyphicon-send:before{content:\"\\E171\"}.glyphicon-floppy-disk:before{content:\"\\E172\"}.glyphicon-floppy-saved:before{content:\"\\E173\"}.glyphicon-floppy-remove:before{content:\"\\E174\"}.glyphicon-floppy-save:before{content:\"\\E175\"}.glyphicon-floppy-open:before{content:\"\\E176\"}.glyphicon-credit-card:before{content:\"\\E177\"}.glyphicon-transfer:before{content:\"\\E178\"}.glyphicon-cutlery:before{content:\"\\E179\"}.glyphicon-header:before{content:\"\\E180\"}.glyphicon-compressed:before{content:\"\\E181\"}.glyphicon-earphone:before{content:\"\\E182\"}.glyphicon-phone-alt:before{content:\"\\E183\"}.glyphicon-tower:before{content:\"\\E184\"}.glyphicon-stats:before{content:\"\\E185\"}.glyphicon-sd-video:before{content:\"\\E186\"}.glyphicon-hd-video:before{content:\"\\E187\"}.glyphicon-subtitles:before{content:\"\\E188\"}.glyphicon-sound-stereo:before{content:\"\\E189\"}.glyphicon-sound-dolby:before{content:\"\\E190\"}.glyphicon-sound-5-1:before{content:\"\\E191\"}.glyphicon-sound-6-1:before{content:\"\\E192\"}.glyphicon-sound-7-1:before{content:\"\\E193\"}.glyphicon-copyright-mark:before{content:\"\\E194\"}.glyphicon-registration-mark:before{content:\"\\E195\"}.glyphicon-cloud-download:before{content:\"\\E197\"}.glyphicon-cloud-upload:before{content:\"\\E198\"}.glyphicon-tree-conifer:before{content:\"\\E199\"}.glyphicon-tree-deciduous:before{content:\"\\E200\"}.glyphicon-cd:before{content:\"\\E201\"}.glyphicon-save-file:before{content:\"\\E202\"}.glyphicon-open-file:before{content:\"\\E203\"}.glyphicon-level-up:before{content:\"\\E204\"}.glyphicon-copy:before{content:\"\\E205\"}.glyphicon-paste:before{content:\"\\E206\"}.glyphicon-alert:before{content:\"\\E209\"}.glyphicon-equalizer:before{content:\"\\E210\"}.glyphicon-king:before{content:\"\\E211\"}.glyphicon-queen:before{content:\"\\E212\"}.glyphicon-pawn:before{content:\"\\E213\"}.glyphicon-bishop:before{content:\"\\E214\"}.glyphicon-knight:before{content:\"\\E215\"}.glyphicon-baby-formula:before{content:\"\\E216\"}.glyphicon-tent:before{content:\"\\26FA\"}.glyphicon-blackboard:before{content:\"\\E218\"}.glyphicon-bed:before{content:\"\\E219\"}.glyphicon-apple:before{content:\"\\F8FF\"}.glyphicon-erase:before{content:\"\\E221\"}.glyphicon-hourglass:before{content:\"\\231B\"}.glyphicon-lamp:before{content:\"\\E223\"}.glyphicon-duplicate:before{content:\"\\E224\"}.glyphicon-piggy-bank:before{content:\"\\E225\"}.glyphicon-scissors:before{content:\"\\E226\"}.glyphicon-bitcoin:before,.glyphicon-btc:before,.glyphicon-xbt:before{content:\"\\E227\"}.glyphicon-jpy:before,.glyphicon-yen:before{content:\"\\A5\"}.glyphicon-rub:before,.glyphicon-ruble:before{content:\"\\20BD\"}.glyphicon-scale:before{content:\"\\E230\"}.glyphicon-ice-lolly:before{content:\"\\E231\"}.glyphicon-ice-lolly-tasted:before{content:\"\\E232\"}.glyphicon-education:before{content:\"\\E233\"}.glyphicon-option-horizontal:before{content:\"\\E234\"}.glyphicon-option-vertical:before{content:\"\\E235\"}.glyphicon-menu-hamburger:before{content:\"\\E236\"}.glyphicon-modal-window:before{content:\"\\E237\"}.glyphicon-oil:before{content:\"\\E238\"}.glyphicon-grain:before{content:\"\\E239\"}.glyphicon-sunglasses:before{content:\"\\E240\"}.glyphicon-text-size:before{content:\"\\E241\"}.glyphicon-text-color:before{content:\"\\E242\"}.glyphicon-text-background:before{content:\"\\E243\"}.glyphicon-object-align-top:before{content:\"\\E244\"}.glyphicon-object-align-bottom:before{content:\"\\E245\"}.glyphicon-object-align-horizontal:before{content:\"\\E246\"}.glyphicon-object-align-left:before{content:\"\\E247\"}.glyphicon-object-align-vertical:before{content:\"\\E248\"}.glyphicon-object-align-right:before{content:\"\\E249\"}.glyphicon-triangle-right:before{content:\"\\E250\"}.glyphicon-triangle-left:before{content:\"\\E251\"}.glyphicon-triangle-bottom:before{content:\"\\E252\"}.glyphicon-triangle-top:before{content:\"\\E253\"}.glyphicon-console:before{content:\"\\E254\"}.glyphicon-superscript:before{content:\"\\E255\"}.glyphicon-subscript:before{content:\"\\E256\"}.glyphicon-menu-left:before{content:\"\\E257\"}.glyphicon-menu-right:before{content:\"\\E258\"}.glyphicon-menu-down:before{content:\"\\E259\"}.glyphicon-menu-up:before{content:\"\\E260\"}*,:after,:before{box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:Helvetica Neue,Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:focus,a:hover{color:#23527c;text-decoration:underline}a:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.carousel-inner>.item>a>img,.carousel-inner>.item>img,.img-responsive,.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;transition:all .2s ease-in-out;display:inline-block;max-width:100%;height:auto}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:9pt}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:1pc;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:focus,a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:focus,a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:focus,a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:focus,a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:focus,a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:focus,a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:focus,a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:focus,a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:focus,a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:focus,a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ol,ul{margin-top:0;margin-bottom:10px}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}.list-inline,.list-unstyled{padding-left:0;list-style:none}.list-inline{margin-left:-5px}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dd,dt{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:10pc;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[data-original-title],abbr[title]{cursor:help}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{margin-bottom:0}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote .small:before,blockquote footer:before,blockquote small:before{content:\"\\2014   \\A0\"}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:\"\"}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:\"\\A0   \\2014\"}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,Courier New,monospace}code{color:#c7254e;background-color:#f9f2f4;border-radius:4px}code,kbd{padding:2px 4px;font-size:90%}kbd{color:#fff;background-color:#333;border-radius:3px;box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.row-no-gutters{margin-right:0;margin-left:0}.row-no-gutters [class*=col-]{padding-right:0;padding-left:0}.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12,.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12,.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12,.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11,.col-xs-12{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11,.col-xs-12{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}caption{padding-top:8px;padding-bottom:8px;color:#777}caption,th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered,.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover,.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset{min-width:0;margin:0}fieldset,legend{padding:0;border:0}legend{display:block;width:100%;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{box-sizing:border-box;-webkit-appearance:none;-moz-appearance:none;appearance:none}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px\\9;line-height:normal}fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=checkbox]:focus,input[type=file]:focus,input[type=radio]:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{padding-top:7px}.form-control,output{display:block;font-size:14px;line-height:1.42857143;color:#555}.form-control{width:100%;height:34px;padding:6px 9pt;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;box-shadow:inset 0 1px 1px rgba(0,0,0,.075);transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control::-ms-expand{background-color:transparent;border:0}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date].form-control,input[type=datetime-local].form-control,input[type=month].form-control,input[type=time].form-control{line-height:34px}.input-group-sm input[type=date],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],.input-group-sm input[type=time],input[type=date].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm,input[type=time].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],.input-group-lg input[type=time],input[type=date].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg,input[type=time].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox.disabled label,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .radio label{cursor:not-allowed}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-top:4px\\9;margin-left:-20px}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.checkbox-inline.disabled,.radio-inline.disabled,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio-inline{cursor:not-allowed}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}.form-control-static{min-height:34px;padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm{height:30px;padding:5px 10px;font-size:9pt;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:9pt;line-height:1.5;border-radius:3px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:2pc;padding:6px 10px;font-size:9pt;line-height:1.5}.input-lg{height:46px;padding:10px 1pc;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-lg{height:46px;line-height:46px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:46px;padding:10px 1pc;font-size:18px;line-height:1.3333333;border-radius:6px}.form-group-lg select.form-control{height:46px;line-height:46px}.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:11px 1pc;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:11px;font-size:18px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:9pt}}.btn{display:inline-block;margin-bottom:0;font-weight:400;text-align:center;white-space:nowrap;vertical-align:middle;touch-action:manipulation;cursor:pointer;background-image:none;border:1px solid transparent;padding:6px 9pt;font-size:14px;line-height:1.42857143;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{background-image:none;outline:0;box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;filter:alpha(opacity=65);opacity:.65;box-shadow:none}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default.focus,.btn-default:focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c}.btn-default:hover{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;background-image:none;border-color:#adadad}.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.dropdown-toggle.btn-default.focus,.open>.dropdown-toggle.btn-default:focus,.open>.dropdown-toggle.btn-default:hover{color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default.disabled.focus,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled].focus,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#286090;border-color:#122b40}.btn-primary:hover{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;background-image:none;border-color:#204d74}.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.dropdown-toggle.btn-primary.focus,.open>.dropdown-toggle.btn-primary:focus,.open>.dropdown-toggle.btn-primary:hover{color:#fff;background-color:#204d74;border-color:#122b40}.btn-primary.disabled.focus,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled].focus,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#449d44;border-color:#255625}.btn-success:hover{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;background-image:none;border-color:#398439}.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.dropdown-toggle.btn-success.focus,.open>.dropdown-toggle.btn-success:focus,.open>.dropdown-toggle.btn-success:hover{color:#fff;background-color:#398439;border-color:#255625}.btn-success.disabled.focus,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled].focus,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85}.btn-info:hover{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;background-image:none;border-color:#269abc}.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.dropdown-toggle.btn-info.focus,.open>.dropdown-toggle.btn-info:focus,.open>.dropdown-toggle.btn-info:hover{color:#fff;background-color:#269abc;border-color:#1b6d85}.btn-info.disabled.focus,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled].focus,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning.focus,.btn-warning:focus{color:#fff;background-color:#ec971f;border-color:#985f0d}.btn-warning:hover{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;background-image:none;border-color:#d58512}.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.dropdown-toggle.btn-warning.focus,.open>.dropdown-toggle.btn-warning:focus,.open>.dropdown-toggle.btn-warning:hover{color:#fff;background-color:#d58512;border-color:#985f0d}.btn-warning.disabled.focus,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled].focus,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c9302c;border-color:#761c19}.btn-danger:hover{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;background-image:none;border-color:#ac2925}.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.dropdown-toggle.btn-danger.focus,.open>.dropdown-toggle.btn-danger:focus,.open>.dropdown-toggle.btn-danger:hover{color:#fff;background-color:#ac2925;border-color:#761c19}.btn-danger.disabled.focus,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled].focus,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#337ab7;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 1pc;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:9pt;line-height:1.5;border-radius:3px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:9pt;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;transition-property:height,visibility;transition-duration:.35s;transition-timing-function:ease}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid\\9;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown,.dropup{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10pc;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;box-shadow:0 6px 9pt rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;background-color:#337ab7;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:9pt;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:\"\";border-top:0;border-bottom:4px dashed;border-bottom:4px solid\\9}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:9pt;padding-left:9pt}.btn-group.open .dropdown-toggle{box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .form-control:focus{z-index:3}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 1pc;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:9pt;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 9pt;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:9pt;border-radius:3px}.input-group-addon.input-lg{padding:10px 1pc;font-size:18px;border-radius:6px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{font-size:0;white-space:nowrap}.input-group-btn,.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li,.nav>li>a{position:relative;display:block}.nav>li>a{padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;border-top:1px solid transparent;box-shadow:inset 0 1px 0 hsla(0,0%,100%,.1);-webkit-overflow-scrolling:touch}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}@media (min-width:768px){.navbar-fixed-bottom,.navbar-fixed-top{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-brand{float:left;height:50px;padding:15px;font-size:18px;line-height:20px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-right:15px;margin-top:8px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;margin:8px -15px;border-top:1px solid transparent;border-bottom:1px solid transparent;box-shadow:inset 0 1px 0 hsla(0,0%,100%,.1),0 1px 0 hsla(0,0%,100%,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-nav>li>a,.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>li>a,.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:\"/\\A0\"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 9pt;margin-left:-1px;line-height:1.42857143;color:#337ab7;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{z-index:2;color:#23527c;background-color:#eee;border-color:#ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:3;color:#fff;cursor:default;background-color:#337ab7;border-color:#337ab7}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 1pc;font-size:18px;line-height:1.3333333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:9pt;line-height:1.5}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:focus,.label-success[href]:hover{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:focus,.label-info[href]:hover{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:9pt;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;background-color:#eee}.jumbotron,.jumbotron .h1,.jumbotron h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{padding-right:15px;padding-left:15px;border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:3pc;padding-bottom:3pc}.container .jumbotron,.container-fluid .jumbotron{padding-right:60px;padding-left:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;transition:border .2s ease-in-out}.thumbnail a>img,.thumbnail>img{margin-right:auto;margin-left:auto}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@keyframes progress-bar-stripes{0%{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:9pt;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-image:linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 25%,transparent 50%,hsla(0,0%,100%,.15) 50%,hsla(0,0%,100%,.15) 75%,transparent 75%,transparent);background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 25%,transparent 50%,hsla(0,0%,100%,.15) 50%,hsla(0,0%,100%,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 25%,transparent 50%,hsla(0,0%,100%,.15) 50%,hsla(0,0%,100%,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 25%,transparent 50%,hsla(0,0%,100%,.15) 50%,hsla(0,0%,100%,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 25%,transparent 50%,hsla(0,0%,100%,.15) 50%,hsla(0,0%,100%,.15) 75%,transparent 75%,transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{overflow:hidden;zoom:1}.media-body{width:625pc}.media-object{display:block}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{color:#777;cursor:not-allowed;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#c7ddef}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{color:#555;text-decoration:none;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle,.panel-title{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:1pc}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-left-radius:0;border-top-right-radius:0}.list-group+.panel-footer,.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-right:15px;padding-left:15px}.panel>.table-responsive:first-child>.table:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{padding:0;cursor:pointer;background:0 0;border:0;-webkit-appearance:none;-moz-appearance:none;appearance:none}.modal,.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{transform:translate(0,-25%);transition:transform .3s ease-out}.modal.in .modal-dialog{transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;box-shadow:0 3px 9px rgba(0,0,0,.5);outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;font-style:normal;font-weight:400;line-height:1.42857143;line-break:auto;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;font-size:9pt;filter:alpha(opacity=0);opacity:0}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{right:5px}.tooltip.top-left .tooltip-arrow,.tooltip.top-right .tooltip-arrow{bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{left:5px}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;font-style:normal;font-weight:400;line-height:1.42857143;line-break:auto;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;font-size:14px;background-color:#fff;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;box-shadow:0 5px 10px rgba(0,0,0,.2)}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover>.arrow{border-width:11px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow:after{content:\"\";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:\" \";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:\" \";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:\" \";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:\" \";border-right-width:0;border-left-color:#fff}.popover-title{padding:8px 14px;margin:0;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.carousel,.carousel-inner{position:relative}.carousel-inner{width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;transition:.6s ease-in-out left}.carousel-inner>.item>a>img,.carousel-inner>.item>img{line-height:1}@media (-webkit-transform-3d),all and (transform-3d){.carousel-inner>.item{transition:transform .6s ease-in-out;backface-visibility:hidden;perspective:750pt}.carousel-inner>.item.active.right,.carousel-inner>.item.next{transform:translate3d(100%,0,0);left:0}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{transform:translate3d(-100%,0,0);left:0}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{transform:translate3d(0,0,0);left:0}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);background-color:transparent;filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000',endColorstr='#00000000',GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000',endColorstr='#80000000',GradientType=1);background-repeat:repeat-x}.carousel-control:focus,.carousel-control:hover{color:#fff;text-decoration:none;outline:0;filter:alpha(opacity=90);opacity:.9}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block;margin-top:-10px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;font-family:serif;line-height:1}.carousel-control .icon-prev:before{content:\"\\2039\"}.carousel-control .icon-next:before{content:\"\\203A\"}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000\\9;background-color:transparent;border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:9pt;height:9pt;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-10px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-10px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.modal-header:after,.modal-header:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{display:table;content:\" \"}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.modal-header:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-lg,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table!important}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table!important}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table!important}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table!important}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table!important}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}}", ""]);
	
	// exports


/***/ }),
/* 934 */
/***/ (function(module, exports, __webpack_require__) {

	exports = module.exports = __webpack_require__(7)();
	// imports
	
	
	// module
	exports.push([module.id, "/*!\n * Datetimepicker for Bootstrap 3\n * version : 4.17.47\n * https://github.com/Eonasdan/bootstrap-datetimepicker/\n */.bootstrap-datetimepicker-widget{list-style:none}.bootstrap-datetimepicker-widget.dropdown-menu{display:block;margin:2px 0;padding:4px;width:19em}@media (min-width:768px){.bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs{width:38em}}@media (min-width:992px){.bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs{width:38em}}@media (min-width:1200px){.bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs{width:38em}}.bootstrap-datetimepicker-widget.dropdown-menu:after,.bootstrap-datetimepicker-widget.dropdown-menu:before{content:'';display:inline-block;position:absolute}.bootstrap-datetimepicker-widget.dropdown-menu.bottom:before{border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-bottom-color:rgba(0,0,0,.2);top:-7px;left:7px}.bootstrap-datetimepicker-widget.dropdown-menu.bottom:after{border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #fff;top:-6px;left:8px}.bootstrap-datetimepicker-widget.dropdown-menu.top:before{border-left:7px solid transparent;border-right:7px solid transparent;border-top:7px solid #ccc;border-top-color:rgba(0,0,0,.2);bottom:-7px;left:6px}.bootstrap-datetimepicker-widget.dropdown-menu.top:after{border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid #fff;bottom:-6px;left:7px}.bootstrap-datetimepicker-widget.dropdown-menu.pull-right:before{left:auto;right:6px}.bootstrap-datetimepicker-widget.dropdown-menu.pull-right:after{left:auto;right:7px}.bootstrap-datetimepicker-widget .list-unstyled{margin:0}.bootstrap-datetimepicker-widget a[data-action]{padding:6px 0}.bootstrap-datetimepicker-widget a[data-action]:active{box-shadow:none}.bootstrap-datetimepicker-widget .timepicker-hour,.bootstrap-datetimepicker-widget .timepicker-minute,.bootstrap-datetimepicker-widget .timepicker-second{width:54px;font-weight:700;font-size:1.2em;margin:0}.bootstrap-datetimepicker-widget button[data-action]{padding:6px}.bootstrap-datetimepicker-widget .btn[data-action=incrementHours]:after{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0;content:\"Increment Hours\"}.bootstrap-datetimepicker-widget .btn[data-action=incrementMinutes]:after{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0;content:\"Increment Minutes\"}.bootstrap-datetimepicker-widget .btn[data-action=decrementHours]:after{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0;content:\"Decrement Hours\"}.bootstrap-datetimepicker-widget .btn[data-action=decrementMinutes]:after{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0;content:\"Decrement Minutes\"}.bootstrap-datetimepicker-widget .btn[data-action=showHours]:after{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0;content:\"Show Hours\"}.bootstrap-datetimepicker-widget .btn[data-action=showMinutes]:after{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0;content:\"Show Minutes\"}.bootstrap-datetimepicker-widget .btn[data-action=togglePeriod]:after{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0;content:\"Toggle AM/PM\"}.bootstrap-datetimepicker-widget .btn[data-action=clear]:after{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0;content:\"Clear the picker\"}.bootstrap-datetimepicker-widget .btn[data-action=today]:after{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0;content:\"Set the date to today\"}.bootstrap-datetimepicker-widget .picker-switch{text-align:center}.bootstrap-datetimepicker-widget .picker-switch:after{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0;content:\"Toggle Date and Time Screens\"}.bootstrap-datetimepicker-widget .picker-switch td{padding:0;margin:0;height:auto;width:auto;line-height:inherit}.bootstrap-datetimepicker-widget .picker-switch td span{line-height:2.5;height:2.5em;width:100%}.bootstrap-datetimepicker-widget table{width:100%;margin:0}.bootstrap-datetimepicker-widget table td,.bootstrap-datetimepicker-widget table th{text-align:center;border-radius:4px}.bootstrap-datetimepicker-widget table th{height:20px;line-height:20px;width:20px}.bootstrap-datetimepicker-widget table th.picker-switch{width:145px}.bootstrap-datetimepicker-widget table th.disabled,.bootstrap-datetimepicker-widget table th.disabled:hover{background:none;color:#777;cursor:not-allowed}.bootstrap-datetimepicker-widget table th.prev:after{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0;content:\"Previous Month\"}.bootstrap-datetimepicker-widget table th.next:after{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0;content:\"Next Month\"}.bootstrap-datetimepicker-widget table thead tr:first-child th{cursor:pointer}.bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:#eee}.bootstrap-datetimepicker-widget table td{height:54px;line-height:54px;width:54px}.bootstrap-datetimepicker-widget table td.cw{font-size:.8em;height:20px;line-height:20px;color:#777}.bootstrap-datetimepicker-widget table td.day{height:20px;line-height:20px;width:20px}.bootstrap-datetimepicker-widget table td.day:hover,.bootstrap-datetimepicker-widget table td.hour:hover,.bootstrap-datetimepicker-widget table td.minute:hover,.bootstrap-datetimepicker-widget table td.second:hover{background:#eee;cursor:pointer}.bootstrap-datetimepicker-widget table td.new,.bootstrap-datetimepicker-widget table td.old{color:#777}.bootstrap-datetimepicker-widget table td.today{position:relative}.bootstrap-datetimepicker-widget table td.today:before{content:'';display:inline-block;border:solid transparent;border-width:0 0 7px 7px;border-bottom-color:#337ab7;border-top-color:rgba(0,0,0,.2);position:absolute;bottom:4px;right:4px}.bootstrap-datetimepicker-widget table td.active,.bootstrap-datetimepicker-widget table td.active:hover{background-color:#337ab7;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25)}.bootstrap-datetimepicker-widget table td.active.today:before{border-bottom-color:#fff}.bootstrap-datetimepicker-widget table td.disabled,.bootstrap-datetimepicker-widget table td.disabled:hover{background:none;color:#777;cursor:not-allowed}.bootstrap-datetimepicker-widget table td span{display:inline-block;width:54px;height:54px;line-height:54px;margin:2px 1.5px;cursor:pointer;border-radius:4px}.bootstrap-datetimepicker-widget table td span:hover{background:#eee}.bootstrap-datetimepicker-widget table td span.active{background-color:#337ab7;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25)}.bootstrap-datetimepicker-widget table td span.old{color:#777}.bootstrap-datetimepicker-widget table td span.disabled,.bootstrap-datetimepicker-widget table td span.disabled:hover{background:none;color:#777;cursor:not-allowed}.bootstrap-datetimepicker-widget.usetwentyfour td.hour{height:27px;line-height:27px}.bootstrap-datetimepicker-widget.wider{width:21em}.bootstrap-datetimepicker-widget .datepicker-decades .decade{line-height:1.8em!important}.input-group.date .input-group-addon{cursor:pointer}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0}", ""]);
	
	// exports


/***/ }),
/* 935 */
/***/ (function(module, exports, __webpack_require__) {

	exports = module.exports = __webpack_require__(7)();
	// imports
	
	
	// module
	exports.push([module.id, ".ol-box{box-sizing:border-box;border-radius:2px;border:2px solid blue}.ol-mouse-position{top:8px;right:8px;position:absolute}.ol-scale-line{background:rgba(0,60,136,.3);border-radius:4px;bottom:8px;left:8px;padding:2px;position:absolute}.ol-scale-line-inner{border:1px solid #eee;border-top:none;color:#eee;font-size:10px;text-align:center;margin:1px;will-change:contents,width}.ol-overlay-container{will-change:left,right,top,bottom}.ol-unsupported{display:none}.ol-viewport .ol-unselectable{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-tap-highlight-color:rgba(0,0,0,0)}.ol-control{position:absolute;background-color:hsla(0,0%,100%,.4);border-radius:4px;padding:2px}.ol-control:hover{background-color:hsla(0,0%,100%,.6)}.ol-zoom{top:.5em;left:.5em}.ol-rotate{top:.5em;right:.5em;transition:opacity .25s linear,visibility 0s linear}.ol-rotate.ol-hidden{opacity:0;visibility:hidden;transition:opacity .25s linear,visibility 0s linear .25s}.ol-zoom-extent{top:4.643em;left:.5em}.ol-full-screen{right:.5em;top:.5em}@media print{.ol-control{display:none}}.ol-control button{display:block;margin:1px;padding:0;color:#fff;font-size:1.14em;font-weight:700;text-decoration:none;text-align:center;height:1.375em;width:1.375em;line-height:.4em;background-color:rgba(0,60,136,.5);border:none;border-radius:2px}.ol-control button::-moz-focus-inner{border:none;padding:0}.ol-zoom-extent button{line-height:1.4em}.ol-compass{display:block;font-weight:400;font-size:1.2em;will-change:transform}.ol-touch .ol-control button{font-size:1.5em}.ol-touch .ol-zoom-extent{top:5.5em}.ol-control button:focus,.ol-control button:hover{text-decoration:none;background-color:rgba(0,60,136,.7)}.ol-zoom .ol-zoom-in{border-radius:2px 2px 0 0}.ol-zoom .ol-zoom-out{border-radius:0 0 2px 2px}.ol-attribution{text-align:right;bottom:.5em;right:.5em;max-width:calc(100% - 1.3em)}.ol-attribution ul{margin:0;padding:0 .5em;font-size:.7rem;line-height:1.375em;color:#000;text-shadow:0 0 2px #fff}.ol-attribution li{display:inline;list-style:none;line-height:inherit}.ol-attribution li:not(:last-child):after{content:\" \"}.ol-attribution img{max-height:2em;max-width:inherit;vertical-align:middle}.ol-attribution button,.ol-attribution ul{display:inline-block}.ol-attribution.ol-collapsed ul{display:none}.ol-attribution.ol-logo-only ul{display:block}.ol-attribution:not(.ol-collapsed){background:hsla(0,0%,100%,.8)}.ol-attribution.ol-uncollapsible{bottom:0;right:0;border-radius:4px 0 0;height:1.1em;line-height:1em}.ol-attribution.ol-logo-only{background:transparent;bottom:.4em;height:1.1em;line-height:1em}.ol-attribution.ol-uncollapsible img{margin-top:-.2em;max-height:1.6em}.ol-attribution.ol-logo-only button,.ol-attribution.ol-uncollapsible button{display:none}.ol-zoomslider{top:4.5em;left:.5em;height:200px}.ol-zoomslider button{position:relative;height:10px}.ol-touch .ol-zoomslider{top:5.5em}.ol-overviewmap{left:.5em;bottom:.5em}.ol-overviewmap.ol-uncollapsible{bottom:0;left:0;border-radius:0 4px 0 0}.ol-overviewmap .ol-overviewmap-map,.ol-overviewmap button{display:inline-block}.ol-overviewmap .ol-overviewmap-map{border:1px solid #7b98bc;height:150px;margin:2px;width:150px}.ol-overviewmap:not(.ol-collapsed) button{bottom:1px;left:2px;position:absolute}.ol-overviewmap.ol-collapsed .ol-overviewmap-map,.ol-overviewmap.ol-uncollapsible button{display:none}.ol-overviewmap:not(.ol-collapsed){background:hsla(0,0%,100%,.8)}.ol-overviewmap-box{border:2px dotted rgba(0,60,136,.7)}.export-wms-list{padding:0;margin-bottom:10px;width:200px;left:-75pt}.export-wms-link{padding:3px 5px;white-space:normal}", ""]);
	
	// exports


/***/ }),
/* 936 */
/***/ (function(module, exports, __webpack_require__) {

	exports = module.exports = __webpack_require__(7)();
	// imports
	
	
	// module
	exports.push([module.id, ".progress-bar{position:absolute;top:0;left:0;height:4px;background:#fff;width:0;transition:width .25s;z-index:1049}", ""]);
	
	// exports


/***/ }),
/* 937 */
/***/ (function(module, exports, __webpack_require__) {

	exports = module.exports = __webpack_require__(7)();
	// imports
	
	
	// module
	exports.push([module.id, ".modal{padding-left:0!important}.modal-full-screen-scrolling{height:calc(100% - 20px)}.modal-full-screen-scrolling .modal-content{height:100%}.modal-full-screen-scrolling .modal-content .modal-body{height:calc(100% - 118px);overflow-y:scroll}", ""]);
	
	// exports


/***/ }),
/* 938 */
/***/ (function(module, exports, __webpack_require__) {

	exports = module.exports = __webpack_require__(7)();
	// imports
	
	
	// module
	exports.push([module.id, ".result-list{margin:-5px -5px 0}.record-item{width:7pc;position:relative;padding:5px!important;margin:5px 0 0 5px;border:1px solid transparent;border-color:#ddd;border-radius:4px;text-align:center}.record-item.highlighted,.record-item:hover{background-color:#e6e6e6;border-color:#adadad}.record-item.selected-for-download{border-color:red}.record-item a{display:block;height:75pt}.record-item img{max-width:75pt;max-height:75pt;min-height:50px;margin:0;padding:0}.record-item img.fade-in{animation:fadein 1s}@keyframes fadein{0%{opacity:0}to{opacity:1}}.record-item input[type=checkbox]{position:absolute;bottom:10px;right:10px}.record-item button.record-info{position:absolute;top:10px;right:10px;display:none}.record-item:hover button{display:block!important}", ""]);
	
	// exports


/***/ }),
/* 939 */
/***/ (function(module, exports, __webpack_require__) {

	exports = module.exports = __webpack_require__(7)();
	// imports
	
	
	// module
	exports.push([module.id, ".histogram-switch label{display:inline-block;position:relative;padding-left:0}.histogram-switch label input{display:none}.histogram-switch label span{width:38px;border-radius:14px;height:1pc;background-color:#ccc;display:inline-block;cursor:pointer}.histogram-switch label span:before{top:-6px;position:relative;font-family:FontAwesome;content:\"\\F041\";font-size:26px}.histogram-switch label>input:checked+span:before{left:26px}.histogram-switch label>input:checked+span{background-color:#87b9d2}#dynamic-histogram{margin-top:-43px;float:right;bottom:38px;position:relative}", ""]);
	
	// exports


/***/ }),
/* 940 */
/***/ (function(module, exports, __webpack_require__) {

	exports = module.exports = __webpack_require__(7)();
	// imports
	
	
	// module
	exports.push([module.id, "svg.timeslider{opacity:.8;border:1px solid #000;height:6em;box-shadow:3px 3px 3px rgba(0,0,0,.39);font:400 9pt Arial}.timeslider{cursor:ew-resize}", ""]);
	
	// exports


/***/ }),
/* 941 */
/***/ (function(module, exports, __webpack_require__) {

	exports = module.exports = __webpack_require__(7)();
	// imports
	
	
	// module
	exports.push([module.id, ".layer-control{height:100%;overflow-x:hidden;overflow-y:auto}", ""]);
	
	// exports


/***/ }),
/* 942 */
/***/ (function(module, exports, __webpack_require__) {

	exports = module.exports = __webpack_require__(7)();
	// imports
	
	
	// module
	exports.push([module.id, ".layer-list-item{margin:.2em 0 .3em;padding:0;list-style-type:none;list-style-position:inside}.layer-list-item .layer-options{cursor:pointer}input[type=checkbox].layer-visible,input[type=radio].layer-visible{display:none}input[type=checkbox].layer-visible+label span:before,input[type=checkbox].layer-visible+span:before,input[type=radio].layer-visible+label span:before,input[type=radio].layer-visible+span:before{font-family:FontAwesome;font-size:20px}input[type=checkbox].layer-visible+label span:before,input[type=checkbox].layer-visible+span:before{content:\"\\F070\";color:#b3b3b3;cursor:pointer}input[type=checkbox].layer-visible:checked+label span:before,input[type=checkbox].layer-visible:checked+span:before{content:\"\\F06E\";color:#555;cursor:pointer}.layer-list-item .radio label span:before{border-radius:100%;padding:3px}input[type=radio].layer-visible+label span:before,input[type=radio].layer-visible+span:before{content:\"\\F070\";color:#b3b3b3;border:1px solid #b3b3b3}input[type=radio].layer-visible:checked+label span:before,input[type=radio].layer-visible:checked+span:before{content:\"\\F06E\";color:#555;border:1px solid #555}.layer-list-item label{margin-bottom:0}.layer-list-item .checkbox label{padding-left:13px}.layer-list-item .radio label{padding-left:9px}.display-name{text-overflow:ellipsis}.layer-list-item .form-control{height:auto}", ""]);
	
	// exports


/***/ }),
/* 943 */
/***/ (function(module, exports, __webpack_require__) {

	exports = module.exports = __webpack_require__(7)();
	// imports
	
	
	// module
	exports.push([module.id, ".layer-list{padding:0}.sortable-placeholder{display:block;height:31px}", ""]);
	
	// exports


/***/ }),
/* 944 */
/***/ (function(module, exports, __webpack_require__) {

	exports = module.exports = __webpack_require__(7)();
	// imports
	
	
	// module
	exports.push([module.id, ".layer-legend-image{max-height:580px;max-width:290px;height:auto;width:auto;margin-top:5px}input[type=radio].visualization-selector{border:0;clip:rect(0 0 0 0);height:1px;margin:0;overflow:hidden;padding:0;position:absolute;width:1px}input[type=radio].visualization-selector+span{cursor:pointer}input[type=radio].visualization-selector+span:before{font-family:FontAwesome;font-size:20px;display:inline-block;content:\"\\F070\";color:#b3b3b3;cursor:pointer;margin-right:8px}input[type=radio].visualization-selector:checked+span:before{content:\"\\F06E\";color:#555}.option-row{padding-left:7px;padding-right:7px}", ""]);
	
	// exports


/***/ }),
/* 945 */
/***/ (function(module, exports, __webpack_require__) {

	exports = module.exports = __webpack_require__(7)();
	// imports
	
	
	// module
	exports.push([module.id, ".spacer{margin-top:20px}", ""]);
	
	// exports


/***/ }),
/* 946 */
/***/ (function(module, exports, __webpack_require__) {

	exports = module.exports = __webpack_require__(7)();
	// imports
	
	
	// module
	exports.push([module.id, ".download-view{height:100%}.download-view .selection-lists{height:calc(100% - 23px);overflow-y:auto;margin-left:-5px}.download-view .selection-lists.with-terms{height:calc(100% - 60px)}.download-view .selection-norecords{color:#fff;padding:5px}.download-control{position:absolute;width:calc(100% - 10px);margin-bottom:5px;bottom:0}.download-control .checkbox{width:100%}.selection-items,.selection-lists .panel{margin-bottom:0!important}.btn-download-full-res,.btn-processing{width:calc(100% - 10px);margin:5px 0 0 5px}", ""]);
	
	// exports


/***/ }),
/* 947 */
/***/ (function(module, exports, __webpack_require__) {

	exports = module.exports = __webpack_require__(7)();
	// imports
	
	
	// module
	exports.push([module.id, ".selection-list-item button.record-unselect{position:absolute;top:10px;left:10px;display:none}", ""]);
	
	// exports


/***/ }),
/* 948 */
/***/ (function(module, exports, __webpack_require__) {

	exports = module.exports = __webpack_require__(7)();
	// imports
	
	
	// module
	exports.push([module.id, ".selection-body .spacer{margin:0;padding:0;height:0;width:100%}", ""]);
	
	// exports


/***/ }),
/* 949 */
/***/ (function(module, exports, __webpack_require__) {

	exports = module.exports = __webpack_require__(7)();
	// imports
	
	
	// module
	exports.push([module.id, ".record-details-map{width:auto;margin-left:-15px;margin-top:-15px;margin-right:-15px;height:500px}.record-details-title{overflow-wrap:break-word;word-wrap:break-word;float:left;width:100%}", ""]);
	
	// exports


/***/ }),
/* 950 */
/***/ (function(module, exports, __webpack_require__) {

	exports = module.exports = __webpack_require__(7)();
	// imports
	
	
	// module
	exports.push([module.id, ".search-result-list{margin-bottom:0}.search-result-list .spacer{margin:0;padding:0;height:0;width:100%}.search-result-list .panel,.search-result-list .panel-body{margin-bottom:0!important}.btn-load-more{width:calc(100% - 10px);margin:5px 0 0 5px}@keyframes blink{0%{opacity:.2}20%{opacity:1}to{opacity:.2}}.search-progress span{animation-name:blink;animation-duration:1.4s;animation-iteration-count:infinite;animation-fill-mode:both}.search-progress span:nth-child(2){animation-delay:.2s}.search-progress span:nth-child(3){animation-delay:.4s}", ""]);
	
	// exports


/***/ }),
/* 951 */
/***/ (function(module, exports, __webpack_require__) {

	exports = module.exports = __webpack_require__(7)();
	// imports
	
	
	// module
	exports.push([module.id, ".search-result-view{height:100%}.result-contents{margin-top:5px;height:calc(100% - 60px);overflow-y:scroll;overflow-x:hidden}.download-control{width:100%;margin-bottom:5px}.panel-footer{padding:5px!important}.dropdown{position:relative;z-index:10}.dropdown-menu{padding-left:10px;padding-right:10px}.select-all{position:absolute;width:calc(100% - 10px);bottom:0;margin-bottom:5px}", ""]);
	
	// exports


/***/ }),
/* 952 */
/***/ (function(module, exports, __webpack_require__) {

	exports = module.exports = __webpack_require__(7)();
	// imports
	
	
	// module
	exports.push([module.id, "svg.timeslider{width:100%;height:100%;background:#fff;opacity:.8;border:1px solid #fff;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}svg.timeslider .mainaxis{fill:none}svg.timeslider .mainaxis .tick line{stroke:#646464;shape-rendering:crispEdges}svg.timeslider .mainaxis .tick text{fill:#000;font-weight:700;font-size:.9em}svg.timeslider .mainaxis .tick.minor{stroke:hsla(0,0%,39%,.25);shape-rendering:crispEdges}svg.timeslider .mainaxis .domain{stroke:#646464;shape-rendering:crispEdges}svg.timeslider .axis .tick text{font-size:.8em}svg.timeslider .brush .extent,svg.timeslider .brush .handle-circle{opacity:.9;stroke:#333}svg.timeslider .tick-date{text-anchor:start!important}svg.timeslider .highlight-record{pointer-events:none}svg.timeslider.loading{opacity:.4}.timeslider-tooltip{z-index:1070;position:fixed;text-align:center;width:auto;height:auto;padding:2px;font:9pt sans-serif;background:#fff;border:0;border-radius:8px;pointer-events:none;opacity:1}#pan-left{float:left;border-bottom-left-radius:4px}#pan-right{float:right;border-bottom-right-radius:4px}.arrow-right{border-left:9px solid #222;margin-left:6px}.arrow-left,.arrow-right{width:0;height:0;border-top:4px solid transparent;border-bottom:4px solid transparent;margin-top:4px}.arrow-left{border-right:9px solid #222;margin-left:4px}#zoom-in{float:left;margin-left:calc(50% + 10px);border-bottom-right-radius:4px;border-top-right-radius:4px;line-height:1pc}#zoom-out{float:right;margin-right:calc(50% + 10px);border-bottom-left-radius:4px;border-top-left-radius:4px;line-height:15px}#reload{float:left;margin-left:calc(50% - 10px);padding-top:2px;padding-left:3px}.control{border:1px solid #555;font-weight:700;cursor:pointer;position:relative;color:#222;margin-top:-23px;background-color:#999;text-align:center;height:18px;width:20px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.control:hover{background-color:#666}.reload-arrow{height:9pt;width:9pt;background:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAQAAAD8fJRsAAAAqUlEQVQYGX3BIS+EARwH4N+9e99zm2Qjm6eIgmI+gCzY7orCF5EkSfIJ5Cuq2QRRVgUjmXAzM/vjvDPJ8+SHxqpNa5r8ZceLUsqrsQUXmiT2lAdjG3bdKR9KFyvKlTZzFr0rpYsjZSk9l0opbXSG+aUzMjLMP5yamjo3SM+Z4yRKKZP0bCv7SZRSDgzyxZY3j9okyol7Zebas/JkOd+sJ1oTN2ZuHeoy9wmF1z2Os8DzcwAAAABJRU5ErkJggg==\")}.arrowloading{-webkit-animation-name:spin;-webkit-animation-duration:2s;-webkit-animation-iteration-count:infinite;-webkit-animation-timing-function:linear;-moz-animation-name:spin;-moz-animation-duration:2s;-moz-animation-iteration-count:infinite;-moz-animation-timing-function:linear;-ms-animation-name:spin;-ms-animation-duration:2s;-ms-animation-iteration-count:infinite;-ms-animation-timing-function:linear}@keyframes spin{0%{transform:rotate(0deg)}to{transform:rotate(360deg)}}", ""]);
	
	// exports


/***/ }),
/* 953 */
/***/ (function(module, exports, __webpack_require__) {

	exports = module.exports = __webpack_require__(7)();
	// imports
	
	
	// module
	exports.push([module.id, "@font-face{font-family:Poppins-Light;src:url(" + __webpack_require__(1159) + ")}@font-face{font-family:Poppins-Medium;src:url(" + __webpack_require__(1160) + ")}body{position:fixed;width:100%;min-height:100%;margin:0;padding:0;overflow:hidden;color:#004170;background:#ddd;font-family:Poppins-Medium;font-size:14px;line-height:1.42857;color:#333;background-color:#fff}#app,body{top:0;left:0;right:0;bottom:0}.root-container{position:absolute;width:100%;height:100%}.side-panel{width:360px}.side-panel .side-panel-left{left:25px}.side-panel .side-panel-right{right:25px}.side-panel .info .badge{font-size:10px;padding:2px 6px}.side-panel .tab-pane p{color:#fff}.download-view .selection-lists{margin-left:unset;height:calc(100% - 5pc)!important}button:focus,input:focus,select:focus,textarea:focus{outline:0!important;outline-width:0!important}.form-control:focus{border-color:inherit;box-shadow:none}*{outline:0;box-shadow:none!important}input,label,text{cursor:default}.fa-sort,svg.timeslider{cursor:grab}.btn-group-justified,.input-group{border-collapse:collapse}.input-group-addon,.panel,.side-panel-content,.side-panel.in,.side-panel.out,.toggle-side-panel{border:none}.toggle-side-panel{width:44px}.datetime .input-group-addon{padding:0 9pt;font-size:20px;cursor:pointer}.datetime .input-group-addon:hover{background:#004170;color:#fff;transition:background-color .25s,color .25s}.datetime.end,.datetime.start{text-align:center}.side-panel.in,.side-panel.out{background:rgba(0,133,116,0);-ms-filter:\"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)\";-moz-opacity:0}.side-panel-content{background:#004170;padding:9pt!important}.side-panel-content .panel{background:#fff}.side-panel-content .panel .form-group>label,.side-panel-content .panel label.control-label{color:#99b5c9}.side-panel-content .panel,.side-panel-content .side-panel-content{margin-bottom:9pt!important}.panel-body{padding:0 9pt 8px!important}.search-result-list .panel-result-list>.panel-body{padding:0!important}.panel-result-list .btn{margin-bottom:9pt}.search-result-list{padding-left:0;margin-left:0}.form-control{background:#99b5c9;border:0;color:#fff}.result-contents{height:calc(100% - 79px);margin-bottom:5px}.navbar,.panel{margin-bottom:9pt!important}.anno-btn,.btn,button{border-radius:4px;-webkit-border-radius:4px}.anno-inner,.modal-content,.panel,.side-panel-content{border-radius:8px!important;-webkit-border-radius:8px}input{height:24px}.anno-btn,.btn{height:35px;line-height:35px;border:none;padding:0 4px!important}.btn-xs{height:20px;line-height:10px;padding:1px 5px!important}.btn-sm{height:28px;line-height:28px}.input-sm{height:21px!important}.toggle-side-panel{height:30px!important}.side-panel-content{margin:0}.nav-tabs>li{margin-bottom:0}.nav-tabs>li>a{line-height:1.25;background:#eee}.nav-tabs>li>a:hover{background:#fff;transition:background .25s}.nav-tabs>li>a,.nav-tabs>li>a:hover{border:none}.nav-tabs>li a{background:#fff;color:#004170}.nav-tabs>li.active a{background:#004170!important;color:#fff!important;border:none!important}.panel-default>.panel-heading{color:#004170;background:rgba(0,133,116,0);-ms-filter:\"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)\";-moz-opacity:0;border:none;text-align:center}.panel-default>.panel-heading h3,.panel-default>.panel-heading h4{text-transform:uppercase;margin-bottom:0}.panel-default>.panel-heading h3 a:focus,.panel-default>.panel-heading h3 a:hover,.panel-default>.panel-heading h4 a:focus,.panel-default>.panel-heading h4 a:hover{color:#16639c;text-decoration:none}.panel-heading{padding-top:9pt!important;padding-bottom:9pt!important}.download-view .panel,.search-result-list .panel{background:rgba(0,133,116,0)}.download-view .panel .panel-heading h3,.download-view .panel .panel-heading h4,.search-result-list .panel .panel-heading h3,.search-result-list .panel .panel-heading h4{color:#fff}.download-view .panel .panel-heading h3 a:active,.download-view .panel .panel-heading h3 a:focus,.download-view .panel .panel-heading h3 a:hover,.download-view .panel .panel-heading h4 a:active,.download-view .panel .panel-heading h4 a:focus,.download-view .panel .panel-heading h4 a:hover,.search-result-list .panel .panel-heading h3 a:active,.search-result-list .panel .panel-heading h3 a:focus,.search-result-list .panel .panel-heading h3 a:hover,.search-result-list .panel .panel-heading h4 a:active,.search-result-list .panel .panel-heading h4 a:focus,.search-result-list .panel .panel-heading h4 a:hover{color:#e6e6e6}.search-result-view h4,.search-result-view label{color:#fff}.search-result-view .dropdown-menu{background-color:#fff}.search-result-view .dropdown-menu label{color:#004170}.search-result-list>.panel,.selection-lists>div>.panel{padding:0!important;margin-left:0!important;margin-right:0!important}.record-item{margin-left:0;margin-right:calc((100% - 3 * 102px)/4);width:102px}.record-item div{color:#004170}.record-item:nth-child(3n){margin-right:0}.download-control,.search-result-view .btn.select-all{position:absolute;width:calc(100% - 24px);bottom:9pt;margin-bottom:0}.btn-default,input{border:none;background:#99b5c9;color:#fff}.btn-default:active,.btn-default:focus,.btn-default:hover,input:active,input:focus,input:hover{background:#748a99;transition:background .25s;color:#fff}.btn-default:disabled:active,.btn-default:disabled:focus,.btn-default:disabled:hover,input:disabled:active,input:disabled:focus,input:disabled:hover{background:#99b5c9}.btn-default.toggle-side-panel{background:#fff;color:#004170}.btn-default.toggle-side-panel:active,.btn-default.toggle-side-panel:focus,.btn-default.toggle-side-panel:hover{background:#e6e6e6;transition:background .25s}.show-polygon input:disabled,.show-polygon input:hover{background:#fff}.form-group .btn-group .btn{font-size:14px}.form-group .input-group-btn .btn-file{margin:0 2px 2px 0;border:none;padding:6px 10px}.form-group input{border:none}.form-group .checkbox label,.form-group .radio label{text-align:left}.form-horizontal .form-group label{text-align:left;width:100%;margin-right:8px}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{padding-top:0;padding:0 20px 0 0;margin:0}.size-warning{margin:15px 0 0}#timeSlider{height:7.5em;bottom:36px}#timeSlider .control{background:#004170;color:#fff;border:none;font-weight:400;margin-top:-43px;display:flex;justify-content:center;align-items:center;height:18px}#timeSlider .control:hover{background:#fff;color:#004170;transition:background .25s,color .25s}#timeSlider svg.timeslider{border:none!important;opacity:1;height:7.4em;background-color:#fff}#timeSlider svg.timeslider .brush{fill:#fff}#timeSlider svg.timeslider .brush .extent,#timeSlider svg.timeslider .handle-circle{fill:#99b5c9;stroke:none;opacity:1}#timeSlider svg.timeslider .brush{fill:#004170;visibility:visible!important}#timeSlider svg.timeslider .brush .extent{cursor:pointer!important}#timeSlider svg.timeslider .mainaxis text{fill:#004170;font-family:Lato,Helvetica Neue,Helvetica,Arial,sans-serif;text-transform:uppercase}#timeSlider svg.timeslider.loading{opacity:1}#timeSlider svg.timeslider .missing-interval{display:none}#timeSlider .timeslider-tooltip{color:#fff;background-color:#020a16}.layer-control .layer-list .form-control,.layer-control .layer-list label{color:#004170}.layer-control .layer-list .form-control:hover,.layer-control .layer-list label:hover{color:#16639c}.layer-control .layer-list .form-control span,.layer-control .layer-list label span{margin-right:10px}.layer-control .layer-list .layer-list-item .checkbox,.layer-control .layer-list .layer-list-item .radio{margin:0}.layer-control .layer-list .layer-list-item .checkbox label,.layer-control .layer-list .layer-list-item .radio label{padding-left:6px}.layer-control .display-name{white-space:nowrap;width:195px;overflow:hidden;padding:2px 2px 2px 0!important}.layer-control .input-group-addon{background:rgba(0,133,116,0);-ms-filter:\"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)\";-moz-opacity:0;padding:0 6px}.layer-control .input-group-addon:first-of-type{padding-right:0}.layer-control .input-group-addon label span:before{font-weight:500}.layer-control .fa-adjust,.layer-control .fa-arrow-down,.layer-control .fa-paint-brush,.layer-control .fa-sort,.layer-control .fa-square,.layer-control .fa-wrench{color:#004170;margin-right:5px}.layer-control input[type=checkbox].layer-visible+label span:before,.layer-control input[type=checkbox].layer-visible+span:before,.layer-control input[type=radio].layer-visible+label span:before,.layer-control input[type=radio].layer-visible+span:before{border:none!important;color:#99b5c9}.layer-control input[type=checkbox].layer-visible+label span:before:hover,.layer-control input[type=checkbox].layer-visible+span:before:hover,.layer-control input[type=radio].layer-visible+label span:before:hover,.layer-control input[type=radio].layer-visible+span:before:hover{color:#748a99}.layer-control input[type=checkbox].layer-visible:checked+label span:before,.layer-control input[type=checkbox].layer-visible:checked+span:before,.layer-control input[type=radio].layer-visible:checked+label span:before,.layer-control input[type=radio].layer-visible:checked+span:before{color:#004170}.layer-control input[type=checkbox].layer-visible:checked+label span:before:hover,.layer-control input[type=checkbox].layer-visible:checked+span:before:hover,.layer-control input[type=radio].layer-visible:checked+label span:before:hover,.layer-control input[type=radio].layer-visible:checked+span:before:hover{color:#16639c}.layer-control .form-control{border:none;background:hsla(0,0%,100%,.2);color:#fff;height:auto;padding:2px 9pt}.layer-control .form-control:disabled{background:hsla(0,0%,100%,.2)!important}.layer-control .form-control a[href]{color:#fff;text-decoration:underline}.col-sm-2.control-label{color:#fff}.layer-adjust-opacity,.layer-download-full-resolution,.layer-show-options,.slider-horizontal{cursor:pointer}.layer-adjust-opacity-popover{background-color:#004170;border:none}.layer-adjust-opacity-popover .arrow:after{border-right-color:#004170!important}.record-item{border:none;color:#000;background-color:#fff;padding-left:4px!important;padding-right:4px!important}.record-item img{width:94px}.record-item img.error{width:5pc}.slider-handle{background-color:#99b5c9;background-image:none}.extra-parameters label{font-weight:500}.download-control .checkbox{color:#fff}.download-control .checkbox label{font-size:13px}.selection-items i:not([class]){color:#fff}.input-group-addon .fa{font-size:1.3em}#infoPanel,#infoPanel div,.ol-control{border:none!important;box-shadow:none!important;background-color:rgba(0,133,116,0);-ms-filter:\"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)\";-moz-opacity:0;filter:none!important}#infoPanel a,#infoPanel div a,.ol-control a{font-weight:900}#infoPanel .btn,#infoPanel button,#infoPanel div .btn,#infoPanel div button,.ol-control .btn,.ol-control button{border:none!important;vertical-align:bottom}#infoPanel .btn,#infoPanel .btn:focus,#infoPanel button,#infoPanel button:focus,#infoPanel div .btn,#infoPanel div .btn:focus,#infoPanel div button,#infoPanel div button:focus,.ol-control .btn,.ol-control .btn:focus,.ol-control button,.ol-control button:focus{background-color:#004170}#infoPanel .btn:hover,#infoPanel button:hover,#infoPanel div .btn:hover,#infoPanel div button:hover,.ol-control .btn:hover,.ol-control button:hover{background-color:#fff;color:#004170;transition:background-color .25s,color .25s}#infoPanel button span,#infoPanel div button span,#infoPanel div img,#infoPanel img,.ol-control button span,.ol-control img{position:relative;top:-1px}#infoPanel button,#infoPanel div button,.ol-control button{border-radius:4px}#infoPanel .btn:hover .icon-eox-eye-white{background:no-repeat center url(" + __webpack_require__(519) + ");width:1pc;height:1pc;display:block;background-size:contain;margin:2px}.ol-attribution{z-index:100;background:rgba(0,133,116,0);-ms-filter:\"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)\";-moz-opacity:0}.ol-attribution ul{font-size:13px!important;background:hsla(0,0%,100%,.8);padding:2px;border-radius:2px}.ol-attribution button{border-radius:0}.ol-attribution button:first-of-type{border-top-left-radius:2px;border-bottom-left-radius:2px}.ol-attribution button:last-of-type{border-top-right-radius:2px;border-bottom-right-radius:2px}.ol-overlay-container .popover.in{width:69px!important;height:2pc!important}.ol-mouse-position-eoxc{bottom:10px;left:20px;position:absolute;padding:2px;background-color:hsla(0,0%,100%,.8);font-size:13px;font-family:Lato,Helvetica Neue,Helvetica,Arial,sans-serif;height:22px;text-align:center;white-space:nowrap;opacity:1;transition:opacity .25s linear;border-radius:4px}.ol-mouse-position-eoxc:empty{visibility:hidden;opacity:0;transition:visibility 0s .25s,opacity .25s linear}.record-details-modal-view .modal-body{padding:0}.record-details-view{display:flex;height:100%}.record-details-map .ol-mouse-position-eoxc{left:10px}.record-details-header-text{color:#004170;font-size:1pc}.record-details-map{order:2;width:55%;height:100%;margin:0;margin-right:9pt}.record-details-description{order:1;width:45%;max-height:100%;overflow-y:auto;padding:0 8px 0 9pt;margin-right:8px;overflow-wrap:break-word;word-wrap:break-word}.record-details-description-inner{background-color:#fff;min-height:100%;border-radius:8px;padding:8px}.record-details-description table{table-layout:fixed;margin-bottom:8px}.record-details-description td:first-child{color:#004170;width:calc(45% - 10px);padding:5px 3px 5px 0!important}.record-details-description td:nth-child(2){color:#99b5c9;width:calc(55% - 10px);padding:5px 0 5px 3px!important}.bootstrap-datetimepicker-widget{min-height:284px;position:absolute}.bootstrap-datetimepicker-widget .separator,.bootstrap-datetimepicker-widget.dropdown-menu:after,.bootstrap-datetimepicker-widget.dropdown-menu:before{display:none}.bootstrap-datetimepicker-widget .datepicker .active{background:#004170!important}.bootstrap-datetimepicker-widget .datepicker .active:hover{background:#fff!important;transition:background .25s}.bootstrap-datetimepicker-widget .datepicker .today:before{border-bottom-color:#fff!important}.bootstrap-datetimepicker-widget a{color:#004170}.bootstrap-datetimepicker-widget a span:hover{background-color:#fff!important;transition:background-color .25s}.dropdown.open .caret,.panel-title .caret,[data-toggle=collapse] .caret{transform:rotate(0deg)}.dropdown .caret,.panel-title .caret,.panel-title .collapsed .caret,[data-toggle=collapse].collapsed .caret{transition:.2s ease-in-out}.dropdown .caret,.panel-title .collapsed .caret,[data-toggle=collapse].collapsed .caret{transform:rotate(-90deg)}.modal .modal-content{border-radius:8px!important;border:none;background-color:#004170}.modal .modal-content .modal-header{border-top-left-radius:8px;border-top-right-radius:8px;color:#fff;border-bottom:none}.modal .modal-content .modal-header .close{color:#004170;text-shadow:none;opacity:1;margin-top:-15px;padding:15px 5px 5px}.modal .modal-content .modal-header .close,.modal .modal-content .modal-header .close:hover{background-color:#fff;transition:background-color .25s}.modal .modal-content .modal-header .record-pager{margin-right:10px}.modal .modal-content td,.modal .modal-content th{padding-left:5px;padding-right:5px}.modal .modal-content td a,.modal .modal-content th a{color:#004170}.modal .modal-content .modal-footer{border-bottom-left-radius:8px;border-bottom-right-radius:8px;color:#fff;border-top:none}.anno{color:#004170!important}.anno .anno-btn,.anno .anno-inner{border:none!important}.anno .anno-btn{background-color:#d3d3d3!important;color:#004170!important}.anno .anno-btn:hover{background-color:#fff!important;color:#004170!important;transition:background-color .25s,color .25s}.anno .anno-btn-low-importance{background-color:#d3d3d3!important}.anno .anno-btn-low-importance:hover{background-color:#fff!important;transition:background-color .25s,color .25s}::-webkit-scrollbar{background-color:#004170}::-webkit-scrollbar-thumb{background-color:#fff}body{scrollbar-base-color:#fff;scrollbar-highlight-color:silver;scrollbar-track-color:#004170;scrollbar-arrow-color:#fff;scrollbar-shadow-color:#004170;scrollbar-dark-shadow-color:silver}.icon-eox-eye{background:no-repeat center url(" + __webpack_require__(519) + ");width:23px;height:13px;display:block;background-size:contain;display:inline-block}.modal-full-screen-scrolling .modal-content .modal-body{height:calc(100% - 90pt)}.no-scroll-y{overflow-y:hidden!important}.btn-load-more{margin:0;width:calc(100% - 6px)}.record-details-view td{overflow-wrap:break-word;word-wrap:break-word;border:none!important}.record-details-modal-view .is-selected{vertical-align:bottom;position:relative}.filters-view{overflow-y:auto}.progress-bar{background:#748a99}.layer-options{background:#004170;margin-left:5px;margin-top:28px;min-width:300px}.control-label{margin-bottom:10px}.dropdown-toggle{padding:6px 4px}.tab-content{padding-bottom:0}.dropdown-menu{max-width:230px}.tools{display:flex;justify-content:space-around}.tool{border-radius:4px!important;width:100%;margin:3px 3px 0!important}.tools .btn-sm{font-size:13px!important}.tools a:first-child,.tools button:first-child{margin-left:0!important}.tools a:last-child,.tools button:last-child{margin-right:0!important}.input-group{margin:0 3px}.input-group.download-control{margin:0}.checkbox input{background:rgba(0,133,116,0)}.record-details-title{color:#99b5c9;margin-bottom:25px}.whitebutton:focus,.whitebutton:hover{background-color:#e6e6e6;color:#16639c}.whitebutton,.whitebutton:disabled:active,.whitebutton:disabled:focus,.whitebutton:disabled:hover,.whitebutton:focus{background-color:#fff;color:#004170}.greyBg{background-color:#fff}.no-padding{padding:0!important}.panel-title .fa-external-link,.terms_and_conditions_link,.terms_and_conditions_link:active,.terms_and_conditions_link:focus,.terms_and_conditions_link:hover{color:#fff}#map-time-limit-exceeded{color:#004170;font-size:13px}.control-label,.download-confirm,.download-options,.full-resolution-body{color:#fff}.download-options .input-group-addon,.full-resolution-body .input-group-addon{background-color:#004170;color:#fff}.download-options .form-control,.full-resolution-body .form-control{color:#004170!important}.download-options .form-control::-moz-placeholder,.full-resolution-body .form-control::-moz-placeholder{color:#004170!important}.download-options .form-control:-ms-input-placeholder,.full-resolution-body .form-control:-ms-input-placeholder{color:#004170!important}.download-options .form-control::placeholder,.full-resolution-body .form-control::placeholder{color:#004170!important}.download-options .form-control.input-sm,.full-resolution-body .form-control.input-sm{height:35px!important;text-align:center}.download-options .form-control:active,.download-options .form-control:disabled,.download-options .form-control:focus,.download-options .form-control:hover,.full-resolution-body .form-control:active,.full-resolution-body .form-control:disabled,.full-resolution-body .form-control:focus,.full-resolution-body .form-control:hover{background:#99b5c9;color:#004170!important;-webkit-text-fill-color:#004170}.download-options .btn-draw-bbox,.full-resolution-body .btn-draw-bbox{color:#fff}.checkbox-inline input[type=checkbox],.checkbox-inline input[type=radio],.dropdown-menu input[type=checkbox],.dropdown-menu input[type=radio],.radio input[type=radio],input.subset-by-bounds{margin-top:-2px}.has-error .radio{color:red}.export-tools{z-index:2}.export-tools i{top:1px;position:relative}input[type=radio].visualization-selector+span:before{color:#99b5c9}input[type=radio].visualization-selector:checked+span:before{color:#fff}.export-wms-link{padding:3px 5px!important;white-space:normal!important}.export-wms-list{margin-bottom:10px!important}.upload-input{background-color:#99b5c9!important;height:28px!important}.upload-input::-moz-placeholder{color:#fff}.upload-input:-ms-input-placeholder{color:#fff}.upload-input::placeholder{color:#fff}.feature-list button{background-color:#99b5c9!important}.histogram-switch label span:before{color:#004170}", ""]);
	
	// exports


/***/ }),
/* 954 */
/***/ (function(module, exports, __webpack_require__) {

	exports = module.exports = __webpack_require__(7)();
	// imports
	
	
	// module
	exports.push([module.id, ".anno{width:25pc}.anno-inner{border:1px solid #000;border-radius:4px;box-shadow:3px 3px 3px rgba(0,0,0,.39)!important}.complete-page-tag{top:35%!important}.anno-btn-low-importance{border-style:solid!important;border-width:1px!important}.btn-disabled{pointer-events:none}", ""]);
	
	// exports


/***/ }),
/* 955 */
/***/ (function(module, exports, __webpack_require__) {

	exports = module.exports = __webpack_require__(7)();
	// imports
	
	
	// module
	exports.push([module.id, ".ol-attribution{bottom:10px;right:78px;padding:0}.export-tools button,.ol-attribution button{margin:0;border:1px solid #000;border-radius:4px;box-shadow:3px 3px 3px rgba(0,0,0,.39)}.ol-attribution span{top:1px!important}.ol-attribution ul{font-size:.69em}.ol-zoom{top:auto;left:auto;bottom:10px;right:20px;padding:0}.ol-zoom button{margin:0;display:inline;border:1px solid #000;border-radius:4px;box-shadow:3px 3px 3px rgba(0,0,0,.39)}.ol-zoom-in{border-radius:2px 0 0 2px!important}.ol-zoom-out{border-radius:0 2px 2px 0!important}.record-details-map .ol-viewport{border-radius:8px}.export-tools{position:absolute;bottom:10px;right:126px;padding:0}", ""]);
	
	// exports


/***/ }),
/* 956 */
/***/ (function(module, exports, __webpack_require__) {

	exports = module.exports = __webpack_require__(7)();
	// imports
	
	
	// module
	exports.push([module.id, ".download-prod-option input{margin-left:0!important;top:1px!important}.download-prod-option label{margin-right:5px}.download-prod-option{float:right!important;margin:0!important}", ""]);
	
	// exports


/***/ }),
/* 957 */
/***/ (function(module, exports, __webpack_require__) {

	exports = module.exports = __webpack_require__(7)();
	// imports
	
	
	// module
	exports.push([module.id, ".modal-select-files .modal-content .modal-body .spinner{position:absolute;top:50%;left:50%;transform:translate(-50%, -50%)}.record-checkbox,.record-file-checkbox{margin-top:-2px!important}", ""]);
	
	// exports


/***/ }),
/* 958 */
/***/ (function(module, exports, __webpack_require__) {

	exports = module.exports = __webpack_require__(7)();
	// imports
	
	
	// module
	exports.push([module.id, ".side-panel{position:absolute;width:380px;top:20px;height:-o-calc(100% - 148px);height:calc(100% - 148px);z-index:0;overflow:hidden;opacity:0;visibility:hidden}.side-panel,.side-panel.in{transition:visibility .5s,opacity .5s}.side-panel.in{visibility:visible;max-height:100%;opacity:1}.side-panel-content{position:relative;height:-o-calc(100% - 47px);height:calc(100% - 47px);margin:0 5px;padding:5px 5px 0!important;background-color:#fff;border:1px solid #ddd;border-radius:4px}.side-panel-content>div{height:100%}.side-panel-left{left:20px}.side-panel-right{right:20px}.toggle-side-panel{margin:5px;position:absolute}.toggle-side-panel-out{opacity:1;top:20px}.toggle-side-panel-out.out{pointer-events:none;visibility:hidden}.toggle-side-panel-left{left:0}.toggle-side-panel-right{right:0}.toggle-side-panel-out.toggle-side-panel-left{left:20px}.toggle-side-panel-out.toggle-side-panel-right{right:20px}.side-panel .navbar-right{margin-right:0}.nav-tabs{margin-top:5px;border-bottom:0!important}.nav-tabs>li.active{z-index:1}.nav-tabs a .info{min-width:20px;padding-left:5px;display:inline-block}.tab-content{padding-bottom:5px}.panel-body{margin:5px!important;padding:0!important}.selection-body{margin-left:5px!important}.navbar,.panel{margin-bottom:5px!important}.panel-heading{padding:5px!important}.side-panel .form-group{margin:0!important}.side-panel .form-group>label{margin:5px 0!important}.tab-pane{height:100%}.record-item{width:110px;margin-bottom:5px;margin-top:0;margin-left:-o-calc(100% - 3 * 110px)/4;margin-left:calc((100% - 3 * 110px)/4)}", ""]);
	
	// exports


/***/ }),
/* 959 */
/***/ (function(module, exports, __webpack_require__) {

	exports = module.exports = __webpack_require__(7)();
	// imports
	
	
	// module
	exports.push([module.id, "#timeSlider{position:absolute;bottom:44px;left:20px;width:-o-calc(100% - 40px)!important;width:calc(100% - 40px)!important;height:6em;font:400 9pt Arial;border-radius:4px}.timeslider{cursor:ew-resize}.control{height:19px;margin-top:-22px}", ""]);
	
	// exports


/***/ }),
/* 960 */
/***/ (function(module, exports, __webpack_require__) {

	exports = module.exports = __webpack_require__(7)();
	// imports
	
	
	// module
	exports.push([module.id, "#topPanel{position:absolute;top:20px;width:280px;left:-o-calc(50% - 140px)!important;left:calc(50% - 140px)!important}", ""]);
	
	// exports


/***/ }),
/* 961 */
/***/ (function(module, exports, __webpack_require__) {

	exports = module.exports = __webpack_require__(7)();
	// imports
	
	
	// module
	exports.push([module.id, "h4.no-product-selected{text-align:center;position:absolute;top:45%;width:calc(100% - 24px)}.checkbox.checbox-switch label{display:inline-block;position:relative;padding-left:0}.checkbox.checbox-switch label input{display:none}.checkbox.checbox-switch label span{width:35px;border-radius:15px;height:15px;background-color:#fff;display:inline-block;vertical-align:middle;margin-left:9px}.checkbox.checbox-switch label span:before{display:inline-block;width:24px;height:24px;border-radius:50%;background:#ebebeb;content:\" \";top:-5px;left:-8px;position:relative;border:1px solid #a9a9a9}.checkbox.checbox-switch label>input:checked+span:before{left:20px}.checkbox.checbox-switch label>input:checked+span{background-color:#87b9d2}.result-contents{padding:0;margin:0}.search-results-header{margin-bottom:6px}.tool>.dropdown-toggle{border-radius:4px!important}.download-disabled-warning p{margin:0}", ""]);
	
	// exports


/***/ }),
/* 962 */
/***/ (function(module, exports, __webpack_require__) {

	exports = module.exports = __webpack_require__(7)();
	// imports
	
	
	// module
	exports.push([module.id, ".layer-name{text-transform:uppercase}.title-container{text-align:left;padding:9pt 0}@keyframes blink{0%{opacity:.2}20%{opacity:1}to{opacity:.2}}.search-progress span{animation-name:blink;animation-duration:1.4s;animation-iteration-count:infinite;animation-fill-mode:both}.search-progress span:nth-child(2){animation-delay:.2s}.search-progress span:nth-child(3){animation-delay:.4s}.selected-count-caret{transform:rotate(90deg)}", ""]);
	
	// exports


/***/ }),
/* 963 */
/***/ (function(module, exports, __webpack_require__) {

	exports = module.exports = __webpack_require__(7)();
	// imports
	
	
	// module
	exports.push([module.id, ".search-result-list .spacer{margin:0;padding:0;height:0;width:100%}.search-result-list .panel,.search-result-list .panel-body{margin-bottom:0!important}", ""]);
	
	// exports


/***/ }),
/* 964 */
/***/ (function(module, exports, __webpack_require__) {

	exports = module.exports = __webpack_require__(7)();
	// imports
	
	
	// module
	exports.push([module.id, ".coordinate-input-container{width:100%;margin:0!important}.coordinate-input-container input{margin:3px!important;border-radius:4px!important;min-width:0}.show-bbox input,.show-point input{width:100%}", ""]);
	
	// exports


/***/ }),
/* 965 */
/***/ (function(module, exports, __webpack_require__) {

	exports = module.exports = __webpack_require__(7)();
	// imports
	
	
	// module
	exports.push([module.id, ".slider-horizontal{width:100%!important}.slider .tooltip{pointer-events:none}", ""]);
	
	// exports


/***/ }),
/* 966 */
/***/ (function(module, exports, __webpack_require__) {

	exports = module.exports = __webpack_require__(7)();
	// imports
	
	
	// module
	exports.push([module.id, ".panel .row{margin-right:0;padding-left:10px}.panel .col-sm-1,.panel .col-sm-2,.panel .col-sm-3,.panel .col-sm-4,.panel .col-sm-5,.panel .col-sm-6{padding-left:5px;padding-right:5px}.panel .input-sm{height:20px}.extra-parameter select{width:100%}", ""]);
	
	// exports


/***/ }),
/* 967 */
/***/ (function(module, exports, __webpack_require__) {

	exports = module.exports = __webpack_require__(7)();
	// imports
	
	
	// module
	exports.push([module.id, ".filters-view{height:100%;overflow-x:hidden;overflow-y:auto}.btn-file{position:relative;overflow:hidden}.btn-file input[type=file]{position:absolute;top:0;right:0;min-width:100%;min-height:100%;font-size:75pt;text-align:right;filter:alpha(opacity=0);opacity:0;outline:0;background:#fff;cursor:inherit;display:block}.btn-sm{padding:1px 5px!important}.input-sm{padding:0 5px!important}.input-group-addon{padding:2px!important;font-size:9pt!important}#selection-wrapper,.show-geometry{display:none}", ""]);
	
	// exports


/***/ }),
/* 968 */
/***/ (function(module, exports, __webpack_require__) {

	"use strict";
	
	var isValue         = __webpack_require__(517)
	  , isPlainFunction = __webpack_require__(1147)
	  , assign          = __webpack_require__(973)
	  , normalizeOpts   = __webpack_require__(979)
	  , contains        = __webpack_require__(982);
	
	var d = (module.exports = function (dscr, value/*, options*/) {
		var c, e, w, options, desc;
		if (arguments.length < 2 || typeof dscr !== "string") {
			options = value;
			value = dscr;
			dscr = null;
		} else {
			options = arguments[2];
		}
		if (isValue(dscr)) {
			c = contains.call(dscr, "c");
			e = contains.call(dscr, "e");
			w = contains.call(dscr, "w");
		} else {
			c = w = true;
			e = false;
		}
	
		desc = { value: value, configurable: c, enumerable: e, writable: w };
		return !options ? desc : assign(normalizeOpts(options), desc);
	});
	
	d.gs = function (dscr, get, set/*, options*/) {
		var c, e, options, desc;
		if (typeof dscr !== "string") {
			options = set;
			set = get;
			get = dscr;
			dscr = null;
		} else {
			options = arguments[3];
		}
		if (!isValue(get)) {
			get = undefined;
		} else if (!isPlainFunction(get)) {
			options = get;
			get = set = undefined;
		} else if (!isValue(set)) {
			set = undefined;
		} else if (!isPlainFunction(set)) {
			options = set;
			set = undefined;
		}
		if (isValue(dscr)) {
			c = contains.call(dscr, "c");
			e = contains.call(dscr, "e");
		} else {
			c = true;
			e = false;
		}
	
		desc = { get: get, set: set, configurable: c, enumerable: e };
		return !options ? desc : assign(normalizeOpts(options), desc);
	};


/***/ }),
/* 969 */
/***/ (function(module, exports, __webpack_require__) {

	var objectKeys = __webpack_require__(507);
	var isArguments = __webpack_require__(1056);
	var is = __webpack_require__(1083);
	var isRegex = __webpack_require__(1058);
	var flags = __webpack_require__(1098);
	var isDate = __webpack_require__(1057);
	
	var getTime = Date.prototype.getTime;
	
	function deepEqual(actual, expected, options) {
	  var opts = options || {};
	
	  // 7.1. All identical values are equivalent, as determined by ===.
	  if (opts.strict ? is(actual, expected) : actual === expected) {
	    return true;
	  }
	
	  // 7.3. Other pairs that do not both pass typeof value == 'object', equivalence is determined by ==.
	  if (!actual || !expected || (typeof actual !== 'object' && typeof expected !== 'object')) {
	    return opts.strict ? is(actual, expected) : actual == expected;
	  }
	
	  /*
	   * 7.4. For all other Object pairs, including Array objects, equivalence is
	   * determined by having the same number of owned properties (as verified
	   * with Object.prototype.hasOwnProperty.call), the same set of keys
	   * (although not necessarily the same order), equivalent values for every
	   * corresponding key, and an identical 'prototype' property. Note: this
	   * accounts for both named and indexed properties on Arrays.
	   */
	  // eslint-disable-next-line no-use-before-define
	  return objEquiv(actual, expected, opts);
	}
	
	function isUndefinedOrNull(value) {
	  return value === null || value === undefined;
	}
	
	function isBuffer(x) {
	  if (!x || typeof x !== 'object' || typeof x.length !== 'number') {
	    return false;
	  }
	  if (typeof x.copy !== 'function' || typeof x.slice !== 'function') {
	    return false;
	  }
	  if (x.length > 0 && typeof x[0] !== 'number') {
	    return false;
	  }
	  return true;
	}
	
	function objEquiv(a, b, opts) {
	  /* eslint max-statements: [2, 50] */
	  var i, key;
	  if (typeof a !== typeof b) { return false; }
	  if (isUndefinedOrNull(a) || isUndefinedOrNull(b)) { return false; }
	
	  // an identical 'prototype' property.
	  if (a.prototype !== b.prototype) { return false; }
	
	  if (isArguments(a) !== isArguments(b)) { return false; }
	
	  var aIsRegex = isRegex(a);
	  var bIsRegex = isRegex(b);
	  if (aIsRegex !== bIsRegex) { return false; }
	  if (aIsRegex || bIsRegex) {
	    return a.source === b.source && flags(a) === flags(b);
	  }
	
	  if (isDate(a) && isDate(b)) {
	    return getTime.call(a) === getTime.call(b);
	  }
	
	  var aIsBuffer = isBuffer(a);
	  var bIsBuffer = isBuffer(b);
	  if (aIsBuffer !== bIsBuffer) { return false; }
	  if (aIsBuffer || bIsBuffer) { // && would work too, because both are true or both false here
	    if (a.length !== b.length) { return false; }
	    for (i = 0; i < a.length; i++) {
	      if (a[i] !== b[i]) { return false; }
	    }
	    return true;
	  }
	
	  if (typeof a !== typeof b) { return false; }
	
	  try {
	    var ka = objectKeys(a);
	    var kb = objectKeys(b);
	  } catch (e) { // happens when one is a string literal and the other isn't
	    return false;
	  }
	  // having the same number of owned properties (keys incorporates hasOwnProperty)
	  if (ka.length !== kb.length) { return false; }
	
	  // the same set of keys (although not necessarily the same order),
	  ka.sort();
	  kb.sort();
	  // ~~~cheap key test
	  for (i = ka.length - 1; i >= 0; i--) {
	    if (ka[i] != kb[i]) { return false; }
	  }
	  // equivalent values for every corresponding key, and ~~~possibly expensive deep test
	  for (i = ka.length - 1; i >= 0; i--) {
	    key = ka[i];
	    if (!deepEqual(a[key], b[key], opts)) { return false; }
	  }
	
	  return true;
	}
	
	module.exports = deepEqual;


/***/ }),
/* 970 */
/***/ (function(module, exports, __webpack_require__) {

	var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! version : 4.17.47
	 =========================================================
	 bootstrap-datetimejs
	 https://github.com/Eonasdan/bootstrap-datetimepicker
	 Copyright (c) 2015 Jonathan Peterson
	 =========================================================
	 */
	/*
	 The MIT License (MIT)
	
	 Copyright (c) 2015 Jonathan Peterson
	
	 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.
	 */
	/*global define:false */
	/*global exports:false */
	/*global require:false */
	/*global jQuery:false */
	/*global moment:false */
	(function (factory) {
	    'use strict';
	    if (true) {
	        // AMD is used - Register as an anonymous module.
	        !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(12), __webpack_require__(2)], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
	    } else if (typeof exports === 'object') {
	        module.exports = factory(require('jquery'), require('moment'));
	    } else {
	        // Neither AMD nor CommonJS used. Use global variables.
	        if (typeof jQuery === 'undefined') {
	            throw 'bootstrap-datetimepicker requires jQuery to be loaded first';
	        }
	        if (typeof moment === 'undefined') {
	            throw 'bootstrap-datetimepicker requires Moment.js to be loaded first';
	        }
	        factory(jQuery, moment);
	    }
	}(function ($, moment) {
	    'use strict';
	    if (!moment) {
	        throw new Error('bootstrap-datetimepicker requires Moment.js to be loaded first');
	    }
	
	    var dateTimePicker = function (element, options) {
	        var picker = {},
	            date,
	            viewDate,
	            unset = true,
	            input,
	            component = false,
	            widget = false,
	            use24Hours,
	            minViewModeNumber = 0,
	            actualFormat,
	            parseFormats,
	            currentViewMode,
	            datePickerModes = [
	                {
	                    clsName: 'days',
	                    navFnc: 'M',
	                    navStep: 1
	                },
	                {
	                    clsName: 'months',
	                    navFnc: 'y',
	                    navStep: 1
	                },
	                {
	                    clsName: 'years',
	                    navFnc: 'y',
	                    navStep: 10
	                },
	                {
	                    clsName: 'decades',
	                    navFnc: 'y',
	                    navStep: 100
	                }
	            ],
	            viewModes = ['days', 'months', 'years', 'decades'],
	            verticalModes = ['top', 'bottom', 'auto'],
	            horizontalModes = ['left', 'right', 'auto'],
	            toolbarPlacements = ['default', 'top', 'bottom'],
	            keyMap = {
	                'up': 38,
	                38: 'up',
	                'down': 40,
	                40: 'down',
	                'left': 37,
	                37: 'left',
	                'right': 39,
	                39: 'right',
	                'tab': 9,
	                9: 'tab',
	                'escape': 27,
	                27: 'escape',
	                'enter': 13,
	                13: 'enter',
	                'pageUp': 33,
	                33: 'pageUp',
	                'pageDown': 34,
	                34: 'pageDown',
	                'shift': 16,
	                16: 'shift',
	                'control': 17,
	                17: 'control',
	                'space': 32,
	                32: 'space',
	                't': 84,
	                84: 't',
	                'delete': 46,
	                46: 'delete'
	            },
	            keyState = {},
	
	            /********************************************************************************
	             *
	             * Private functions
	             *
	             ********************************************************************************/
	
	            hasTimeZone = function () {
	                return moment.tz !== undefined && options.timeZone !== undefined && options.timeZone !== null && options.timeZone !== '';
	            },
	
	            getMoment = function (d) {
	                var returnMoment;
	
	                if (d === undefined || d === null) {
	                    returnMoment = moment(); //TODO should this use format? and locale?
	                } else if (moment.isDate(d) || moment.isMoment(d)) {
	                    // If the date that is passed in is already a Date() or moment() object,
	                    // pass it directly to moment.
	                    returnMoment = moment(d);
	                } else if (hasTimeZone()) { // There is a string to parse and a default time zone
	                    // parse with the tz function which takes a default time zone if it is not in the format string
	                    returnMoment = moment.tz(d, parseFormats, options.useStrict, options.timeZone);
	                } else {
	                    returnMoment = moment(d, parseFormats, options.useStrict);
	                }
	
	                if (hasTimeZone()) {
	                    returnMoment.tz(options.timeZone);
	                }
	
	                return returnMoment;
	            },
	
	            isEnabled = function (granularity) {
	                if (typeof granularity !== 'string' || granularity.length > 1) {
	                    throw new TypeError('isEnabled expects a single character string parameter');
	                }
	                switch (granularity) {
	                    case 'y':
	                        return actualFormat.indexOf('Y') !== -1;
	                    case 'M':
	                        return actualFormat.indexOf('M') !== -1;
	                    case 'd':
	                        return actualFormat.toLowerCase().indexOf('d') !== -1;
	                    case 'h':
	                    case 'H':
	                        return actualFormat.toLowerCase().indexOf('h') !== -1;
	                    case 'm':
	                        return actualFormat.indexOf('m') !== -1;
	                    case 's':
	                        return actualFormat.indexOf('s') !== -1;
	                    default:
	                        return false;
	                }
	            },
	
	            hasTime = function () {
	                return (isEnabled('h') || isEnabled('m') || isEnabled('s'));
	            },
	
	            hasDate = function () {
	                return (isEnabled('y') || isEnabled('M') || isEnabled('d'));
	            },
	
	            getDatePickerTemplate = function () {
	                var headTemplate = $('<thead>')
	                        .append($('<tr>')
	                            .append($('<th>').addClass('prev').attr('data-action', 'previous')
	                                .append($('<span>').addClass(options.icons.previous))
	                                )
	                            .append($('<th>').addClass('picker-switch').attr('data-action', 'pickerSwitch').attr('colspan', (options.calendarWeeks ? '6' : '5')))
	                            .append($('<th>').addClass('next').attr('data-action', 'next')
	                                .append($('<span>').addClass(options.icons.next))
	                                )
	                            ),
	                    contTemplate = $('<tbody>')
	                        .append($('<tr>')
	                            .append($('<td>').attr('colspan', (options.calendarWeeks ? '8' : '7')))
	                            );
	
	                return [
	                    $('<div>').addClass('datepicker-days')
	                        .append($('<table>').addClass('table-condensed')
	                            .append(headTemplate)
	                            .append($('<tbody>'))
	                            ),
	                    $('<div>').addClass('datepicker-months')
	                        .append($('<table>').addClass('table-condensed')
	                            .append(headTemplate.clone())
	                            .append(contTemplate.clone())
	                            ),
	                    $('<div>').addClass('datepicker-years')
	                        .append($('<table>').addClass('table-condensed')
	                            .append(headTemplate.clone())
	                            .append(contTemplate.clone())
	                            ),
	                    $('<div>').addClass('datepicker-decades')
	                        .append($('<table>').addClass('table-condensed')
	                            .append(headTemplate.clone())
	                            .append(contTemplate.clone())
	                            )
	                ];
	            },
	
	            getTimePickerMainTemplate = function () {
	                var topRow = $('<tr>'),
	                    middleRow = $('<tr>'),
	                    bottomRow = $('<tr>');
	
	                if (isEnabled('h')) {
	                    topRow.append($('<td>')
	                        .append($('<a>').attr({ href: '#', tabindex: '-1', 'title': options.tooltips.incrementHour }).addClass('btn').attr('data-action', 'incrementHours').append($('<span>').addClass(options.icons.up))));
	                    middleRow.append($('<td>')
	                        .append($('<span>').addClass('timepicker-hour').attr({ 'data-time-component': 'hours', 'title': options.tooltips.pickHour }).attr('data-action', 'showHours')));
	                    bottomRow.append($('<td>')
	                        .append($('<a>').attr({ href: '#', tabindex: '-1', 'title': options.tooltips.decrementHour }).addClass('btn').attr('data-action', 'decrementHours').append($('<span>').addClass(options.icons.down))));
	                }
	                if (isEnabled('m')) {
	                    if (isEnabled('h')) {
	                        topRow.append($('<td>').addClass('separator'));
	                        middleRow.append($('<td>').addClass('separator').html(':'));
	                        bottomRow.append($('<td>').addClass('separator'));
	                    }
	                    topRow.append($('<td>')
	                        .append($('<a>').attr({ href: '#', tabindex: '-1', 'title': options.tooltips.incrementMinute }).addClass('btn').attr('data-action', 'incrementMinutes')
	                            .append($('<span>').addClass(options.icons.up))));
	                    middleRow.append($('<td>')
	                        .append($('<span>').addClass('timepicker-minute').attr({ 'data-time-component': 'minutes', 'title': options.tooltips.pickMinute }).attr('data-action', 'showMinutes')));
	                    bottomRow.append($('<td>')
	                        .append($('<a>').attr({ href: '#', tabindex: '-1', 'title': options.tooltips.decrementMinute }).addClass('btn').attr('data-action', 'decrementMinutes')
	                            .append($('<span>').addClass(options.icons.down))));
	                }
	                if (isEnabled('s')) {
	                    if (isEnabled('m')) {
	                        topRow.append($('<td>').addClass('separator'));
	                        middleRow.append($('<td>').addClass('separator').html(':'));
	                        bottomRow.append($('<td>').addClass('separator'));
	                    }
	                    topRow.append($('<td>')
	                        .append($('<a>').attr({ href: '#', tabindex: '-1', 'title': options.tooltips.incrementSecond }).addClass('btn').attr('data-action', 'incrementSeconds')
	                            .append($('<span>').addClass(options.icons.up))));
	                    middleRow.append($('<td>')
	                        .append($('<span>').addClass('timepicker-second').attr({ 'data-time-component': 'seconds', 'title': options.tooltips.pickSecond }).attr('data-action', 'showSeconds')));
	                    bottomRow.append($('<td>')
	                        .append($('<a>').attr({ href: '#', tabindex: '-1', 'title': options.tooltips.decrementSecond }).addClass('btn').attr('data-action', 'decrementSeconds')
	                            .append($('<span>').addClass(options.icons.down))));
	                }
	
	                if (!use24Hours) {
	                    topRow.append($('<td>').addClass('separator'));
	                    middleRow.append($('<td>')
	                        .append($('<button>').addClass('btn btn-primary').attr({ 'data-action': 'togglePeriod', tabindex: '-1', 'title': options.tooltips.togglePeriod })));
	                    bottomRow.append($('<td>').addClass('separator'));
	                }
	
	                return $('<div>').addClass('timepicker-picker')
	                    .append($('<table>').addClass('table-condensed')
	                        .append([topRow, middleRow, bottomRow]));
	            },
	
	            getTimePickerTemplate = function () {
	                var hoursView = $('<div>').addClass('timepicker-hours')
	                        .append($('<table>').addClass('table-condensed')),
	                    minutesView = $('<div>').addClass('timepicker-minutes')
	                        .append($('<table>').addClass('table-condensed')),
	                    secondsView = $('<div>').addClass('timepicker-seconds')
	                        .append($('<table>').addClass('table-condensed')),
	                    ret = [getTimePickerMainTemplate()];
	
	                if (isEnabled('h')) {
	                    ret.push(hoursView);
	                }
	                if (isEnabled('m')) {
	                    ret.push(minutesView);
	                }
	                if (isEnabled('s')) {
	                    ret.push(secondsView);
	                }
	
	                return ret;
	            },
	
	            getToolbar = function () {
	                var row = [];
	                if (options.showTodayButton) {
	                    row.push($('<td>').append($('<a>').attr({ 'data-action': 'today', 'title': options.tooltips.today }).append($('<span>').addClass(options.icons.today))));
	                }
	                if (!options.sideBySide && hasDate() && hasTime()) {
	                    row.push($('<td>').append($('<a>').attr({ 'data-action': 'togglePicker', 'title': options.tooltips.selectTime }).append($('<span>').addClass(options.icons.time))));
	                }
	                if (options.showClear) {
	                    row.push($('<td>').append($('<a>').attr({ 'data-action': 'clear', 'title': options.tooltips.clear }).append($('<span>').addClass(options.icons.clear))));
	                }
	                if (options.showClose) {
	                    row.push($('<td>').append($('<a>').attr({ 'data-action': 'close', 'title': options.tooltips.close }).append($('<span>').addClass(options.icons.close))));
	                }
	                return $('<table>').addClass('table-condensed').append($('<tbody>').append($('<tr>').append(row)));
	            },
	
	            getTemplate = function () {
	                var template = $('<div>').addClass('bootstrap-datetimepicker-widget dropdown-menu'),
	                    dateView = $('<div>').addClass('datepicker').append(getDatePickerTemplate()),
	                    timeView = $('<div>').addClass('timepicker').append(getTimePickerTemplate()),
	                    content = $('<ul>').addClass('list-unstyled'),
	                    toolbar = $('<li>').addClass('picker-switch' + (options.collapse ? ' accordion-toggle' : '')).append(getToolbar());
	
	                if (options.inline) {
	                    template.removeClass('dropdown-menu');
	                }
	
	                if (use24Hours) {
	                    template.addClass('usetwentyfour');
	                }
	
	                if (isEnabled('s') && !use24Hours) {
	                    template.addClass('wider');
	                }
	
	                if (options.sideBySide && hasDate() && hasTime()) {
	                    template.addClass('timepicker-sbs');
	                    if (options.toolbarPlacement === 'top') {
	                        template.append(toolbar);
	                    }
	                    template.append(
	                        $('<div>').addClass('row')
	                            .append(dateView.addClass('col-md-6'))
	                            .append(timeView.addClass('col-md-6'))
	                    );
	                    if (options.toolbarPlacement === 'bottom') {
	                        template.append(toolbar);
	                    }
	                    return template;
	                }
	
	                if (options.toolbarPlacement === 'top') {
	                    content.append(toolbar);
	                }
	                if (hasDate()) {
	                    content.append($('<li>').addClass((options.collapse && hasTime() ? 'collapse in' : '')).append(dateView));
	                }
	                if (options.toolbarPlacement === 'default') {
	                    content.append(toolbar);
	                }
	                if (hasTime()) {
	                    content.append($('<li>').addClass((options.collapse && hasDate() ? 'collapse' : '')).append(timeView));
	                }
	                if (options.toolbarPlacement === 'bottom') {
	                    content.append(toolbar);
	                }
	                return template.append(content);
	            },
	
	            dataToOptions = function () {
	                var eData,
	                    dataOptions = {};
	
	                if (element.is('input') || options.inline) {
	                    eData = element.data();
	                } else {
	                    eData = element.find('input').data();
	                }
	
	                if (eData.dateOptions && eData.dateOptions instanceof Object) {
	                    dataOptions = $.extend(true, dataOptions, eData.dateOptions);
	                }
	
	                $.each(options, function (key) {
	                    var attributeName = 'date' + key.charAt(0).toUpperCase() + key.slice(1);
	                    if (eData[attributeName] !== undefined) {
	                        dataOptions[key] = eData[attributeName];
	                    }
	                });
	                return dataOptions;
	            },
	
	            place = function () {
	                var position = (component || element).position(),
	                    offset = (component || element).offset(),
	                    vertical = options.widgetPositioning.vertical,
	                    horizontal = options.widgetPositioning.horizontal,
	                    parent;
	
	                if (options.widgetParent) {
	                    parent = options.widgetParent.append(widget);
	                } else if (element.is('input')) {
	                    parent = element.after(widget).parent();
	                } else if (options.inline) {
	                    parent = element.append(widget);
	                    return;
	                } else {
	                    parent = element;
	                    element.children().first().after(widget);
	                }
	
	                // Top and bottom logic
	                if (vertical === 'auto') {
	                    if (offset.top + widget.height() * 1.5 >= $(window).height() + $(window).scrollTop() &&
	                        widget.height() + element.outerHeight() < offset.top) {
	                        vertical = 'top';
	                    } else {
	                        vertical = 'bottom';
	                    }
	                }
	
	                // Left and right logic
	                if (horizontal === 'auto') {
	                    if (parent.width() < offset.left + widget.outerWidth() / 2 &&
	                        offset.left + widget.outerWidth() > $(window).width()) {
	                        horizontal = 'right';
	                    } else {
	                        horizontal = 'left';
	                    }
	                }
	
	                if (vertical === 'top') {
	                    widget.addClass('top').removeClass('bottom');
	                } else {
	                    widget.addClass('bottom').removeClass('top');
	                }
	
	                if (horizontal === 'right') {
	                    widget.addClass('pull-right');
	                } else {
	                    widget.removeClass('pull-right');
	                }
	
	                // find the first parent element that has a non-static css positioning
	                if (parent.css('position') === 'static') {
	                    parent = parent.parents().filter(function () {
	                        return $(this).css('position') !== 'static';
	                    }).first();
	                }
	
	                if (parent.length === 0) {
	                    throw new Error('datetimepicker component should be placed within a non-static positioned container');
	                }
	
	                widget.css({
	                    top: vertical === 'top' ? 'auto' : position.top + element.outerHeight(),
	                    bottom: vertical === 'top' ? parent.outerHeight() - (parent === element ? 0 : position.top) : 'auto',
	                    left: horizontal === 'left' ? (parent === element ? 0 : position.left) : 'auto',
	                    right: horizontal === 'left' ? 'auto' : parent.outerWidth() - element.outerWidth() - (parent === element ? 0 : position.left)
	                });
	            },
	
	            notifyEvent = function (e) {
	                if (e.type === 'dp.change' && ((e.date && e.date.isSame(e.oldDate)) || (!e.date && !e.oldDate))) {
	                    return;
	                }
	                element.trigger(e);
	            },
	
	            viewUpdate = function (e) {
	                if (e === 'y') {
	                    e = 'YYYY';
	                }
	                notifyEvent({
	                    type: 'dp.update',
	                    change: e,
	                    viewDate: viewDate.clone()
	                });
	            },
	
	            showMode = function (dir) {
	                if (!widget) {
	                    return;
	                }
	                if (dir) {
	                    currentViewMode = Math.max(minViewModeNumber, Math.min(3, currentViewMode + dir));
	                }
	                widget.find('.datepicker > div').hide().filter('.datepicker-' + datePickerModes[currentViewMode].clsName).show();
	            },
	
	            fillDow = function () {
	                var row = $('<tr>'),
	                    currentDate = viewDate.clone().startOf('w').startOf('d');
	
	                if (options.calendarWeeks === true) {
	                    row.append($('<th>').addClass('cw').text('#'));
	                }
	
	                while (currentDate.isBefore(viewDate.clone().endOf('w'))) {
	                    row.append($('<th>').addClass('dow').text(currentDate.format('dd')));
	                    currentDate.add(1, 'd');
	                }
	                widget.find('.datepicker-days thead').append(row);
	            },
	
	            isInDisabledDates = function (testDate) {
	                return options.disabledDates[testDate.format('YYYY-MM-DD')] === true;
	            },
	
	            isInEnabledDates = function (testDate) {
	                return options.enabledDates[testDate.format('YYYY-MM-DD')] === true;
	            },
	
	            isInDisabledHours = function (testDate) {
	                return options.disabledHours[testDate.format('H')] === true;
	            },
	
	            isInEnabledHours = function (testDate) {
	                return options.enabledHours[testDate.format('H')] === true;
	            },
	
	            isValid = function (targetMoment, granularity) {
	                if (!targetMoment.isValid()) {
	                    return false;
	                }
	                if (options.disabledDates && granularity === 'd' && isInDisabledDates(targetMoment)) {
	                    return false;
	                }
	                if (options.enabledDates && granularity === 'd' && !isInEnabledDates(targetMoment)) {
	                    return false;
	                }
	                if (options.minDate && targetMoment.isBefore(options.minDate, granularity)) {
	                    return false;
	                }
	                if (options.maxDate && targetMoment.isAfter(options.maxDate, granularity)) {
	                    return false;
	                }
	                if (options.daysOfWeekDisabled && granularity === 'd' && options.daysOfWeekDisabled.indexOf(targetMoment.day()) !== -1) {
	                    return false;
	                }
	                if (options.disabledHours && (granularity === 'h' || granularity === 'm' || granularity === 's') && isInDisabledHours(targetMoment)) {
	                    return false;
	                }
	                if (options.enabledHours && (granularity === 'h' || granularity === 'm' || granularity === 's') && !isInEnabledHours(targetMoment)) {
	                    return false;
	                }
	                if (options.disabledTimeIntervals && (granularity === 'h' || granularity === 'm' || granularity === 's')) {
	                    var found = false;
	                    $.each(options.disabledTimeIntervals, function () {
	                        if (targetMoment.isBetween(this[0], this[1])) {
	                            found = true;
	                            return false;
	                        }
	                    });
	                    if (found) {
	                        return false;
	                    }
	                }
	                return true;
	            },
	
	            fillMonths = function () {
	                var spans = [],
	                    monthsShort = viewDate.clone().startOf('y').startOf('d');
	                while (monthsShort.isSame(viewDate, 'y')) {
	                    spans.push($('<span>').attr('data-action', 'selectMonth').addClass('month').text(monthsShort.format('MMM')));
	                    monthsShort.add(1, 'M');
	                }
	                widget.find('.datepicker-months td').empty().append(spans);
	            },
	
	            updateMonths = function () {
	                var monthsView = widget.find('.datepicker-months'),
	                    monthsViewHeader = monthsView.find('th'),
	                    months = monthsView.find('tbody').find('span');
	
	                monthsViewHeader.eq(0).find('span').attr('title', options.tooltips.prevYear);
	                monthsViewHeader.eq(1).attr('title', options.tooltips.selectYear);
	                monthsViewHeader.eq(2).find('span').attr('title', options.tooltips.nextYear);
	
	                monthsView.find('.disabled').removeClass('disabled');
	
	                if (!isValid(viewDate.clone().subtract(1, 'y'), 'y')) {
	                    monthsViewHeader.eq(0).addClass('disabled');
	                }
	
	                monthsViewHeader.eq(1).text(viewDate.year());
	
	                if (!isValid(viewDate.clone().add(1, 'y'), 'y')) {
	                    monthsViewHeader.eq(2).addClass('disabled');
	                }
	
	                months.removeClass('active');
	                if (date.isSame(viewDate, 'y') && !unset) {
	                    months.eq(date.month()).addClass('active');
	                }
	
	                months.each(function (index) {
	                    if (!isValid(viewDate.clone().month(index), 'M')) {
	                        $(this).addClass('disabled');
	                    }
	                });
	            },
	
	            updateYears = function () {
	                var yearsView = widget.find('.datepicker-years'),
	                    yearsViewHeader = yearsView.find('th'),
	                    startYear = viewDate.clone().subtract(5, 'y'),
	                    endYear = viewDate.clone().add(6, 'y'),
	                    html = '';
	
	                yearsViewHeader.eq(0).find('span').attr('title', options.tooltips.prevDecade);
	                yearsViewHeader.eq(1).attr('title', options.tooltips.selectDecade);
	                yearsViewHeader.eq(2).find('span').attr('title', options.tooltips.nextDecade);
	
	                yearsView.find('.disabled').removeClass('disabled');
	
	                if (options.minDate && options.minDate.isAfter(startYear, 'y')) {
	                    yearsViewHeader.eq(0).addClass('disabled');
	                }
	
	                yearsViewHeader.eq(1).text(startYear.year() + '-' + endYear.year());
	
	                if (options.maxDate && options.maxDate.isBefore(endYear, 'y')) {
	                    yearsViewHeader.eq(2).addClass('disabled');
	                }
	
	                while (!startYear.isAfter(endYear, 'y')) {
	                    html += '<span data-action="selectYear" class="year' + (startYear.isSame(date, 'y') && !unset ? ' active' : '') + (!isValid(startYear, 'y') ? ' disabled' : '') + '">' + startYear.year() + '</span>';
	                    startYear.add(1, 'y');
	                }
	
	                yearsView.find('td').html(html);
	            },
	
	            updateDecades = function () {
	                var decadesView = widget.find('.datepicker-decades'),
	                    decadesViewHeader = decadesView.find('th'),
	                    startDecade = moment({ y: viewDate.year() - (viewDate.year() % 100) - 1 }),
	                    endDecade = startDecade.clone().add(100, 'y'),
	                    startedAt = startDecade.clone(),
	                    minDateDecade = false,
	                    maxDateDecade = false,
	                    endDecadeYear,
	                    html = '';
	
	                decadesViewHeader.eq(0).find('span').attr('title', options.tooltips.prevCentury);
	                decadesViewHeader.eq(2).find('span').attr('title', options.tooltips.nextCentury);
	
	                decadesView.find('.disabled').removeClass('disabled');
	
	                if (startDecade.isSame(moment({ y: 1900 })) || (options.minDate && options.minDate.isAfter(startDecade, 'y'))) {
	                    decadesViewHeader.eq(0).addClass('disabled');
	                }
	
	                decadesViewHeader.eq(1).text(startDecade.year() + '-' + endDecade.year());
	
	                if (startDecade.isSame(moment({ y: 2000 })) || (options.maxDate && options.maxDate.isBefore(endDecade, 'y'))) {
	                    decadesViewHeader.eq(2).addClass('disabled');
	                }
	
	                while (!startDecade.isAfter(endDecade, 'y')) {
	                    endDecadeYear = startDecade.year() + 12;
	                    minDateDecade = options.minDate && options.minDate.isAfter(startDecade, 'y') && options.minDate.year() <= endDecadeYear;
	                    maxDateDecade = options.maxDate && options.maxDate.isAfter(startDecade, 'y') && options.maxDate.year() <= endDecadeYear;
	                    html += '<span data-action="selectDecade" class="decade' + (date.isAfter(startDecade) && date.year() <= endDecadeYear ? ' active' : '') +
	                        (!isValid(startDecade, 'y') && !minDateDecade && !maxDateDecade ? ' disabled' : '') + '" data-selection="' + (startDecade.year() + 6) + '">' + (startDecade.year() + 1) + ' - ' + (startDecade.year() + 12) + '</span>';
	                    startDecade.add(12, 'y');
	                }
	                html += '<span></span><span></span><span></span>'; //push the dangling block over, at least this way it's even
	
	                decadesView.find('td').html(html);
	                decadesViewHeader.eq(1).text((startedAt.year() + 1) + '-' + (startDecade.year()));
	            },
	
	            fillDate = function () {
	                var daysView = widget.find('.datepicker-days'),
	                    daysViewHeader = daysView.find('th'),
	                    currentDate,
	                    html = [],
	                    row,
	                    clsNames = [],
	                    i;
	
	                if (!hasDate()) {
	                    return;
	                }
	
	                daysViewHeader.eq(0).find('span').attr('title', options.tooltips.prevMonth);
	                daysViewHeader.eq(1).attr('title', options.tooltips.selectMonth);
	                daysViewHeader.eq(2).find('span').attr('title', options.tooltips.nextMonth);
	
	                daysView.find('.disabled').removeClass('disabled');
	                daysViewHeader.eq(1).text(viewDate.format(options.dayViewHeaderFormat));
	
	                if (!isValid(viewDate.clone().subtract(1, 'M'), 'M')) {
	                    daysViewHeader.eq(0).addClass('disabled');
	                }
	                if (!isValid(viewDate.clone().add(1, 'M'), 'M')) {
	                    daysViewHeader.eq(2).addClass('disabled');
	                }
	
	                currentDate = viewDate.clone().startOf('M').startOf('w').startOf('d');
	
	                for (i = 0; i < 42; i++) { //always display 42 days (should show 6 weeks)
	                    if (currentDate.weekday() === 0) {
	                        row = $('<tr>');
	                        if (options.calendarWeeks) {
	                            row.append('<td class="cw">' + currentDate.week() + '</td>');
	                        }
	                        html.push(row);
	                    }
	                    clsNames = ['day'];
	                    if (currentDate.isBefore(viewDate, 'M')) {
	                        clsNames.push('old');
	                    }
	                    if (currentDate.isAfter(viewDate, 'M')) {
	                        clsNames.push('new');
	                    }
	                    if (currentDate.isSame(date, 'd') && !unset) {
	                        clsNames.push('active');
	                    }
	                    if (!isValid(currentDate, 'd')) {
	                        clsNames.push('disabled');
	                    }
	                    if (currentDate.isSame(getMoment(), 'd')) {
	                        clsNames.push('today');
	                    }
	                    if (currentDate.day() === 0 || currentDate.day() === 6) {
	                        clsNames.push('weekend');
	                    }
	                    notifyEvent({
	                        type: 'dp.classify',
	                        date: currentDate,
	                        classNames: clsNames
	                    });
	                    row.append('<td data-action="selectDay" data-day="' + currentDate.format('L') + '" class="' + clsNames.join(' ') + '">' + currentDate.date() + '</td>');
	                    currentDate.add(1, 'd');
	                }
	
	                daysView.find('tbody').empty().append(html);
	
	                updateMonths();
	
	                updateYears();
	
	                updateDecades();
	            },
	
	            fillHours = function () {
	                var table = widget.find('.timepicker-hours table'),
	                    currentHour = viewDate.clone().startOf('d'),
	                    html = [],
	                    row = $('<tr>');
	
	                if (viewDate.hour() > 11 && !use24Hours) {
	                    currentHour.hour(12);
	                }
	                while (currentHour.isSame(viewDate, 'd') && (use24Hours || (viewDate.hour() < 12 && currentHour.hour() < 12) || viewDate.hour() > 11)) {
	                    if (currentHour.hour() % 4 === 0) {
	                        row = $('<tr>');
	                        html.push(row);
	                    }
	                    row.append('<td data-action="selectHour" class="hour' + (!isValid(currentHour, 'h') ? ' disabled' : '') + '">' + currentHour.format(use24Hours ? 'HH' : 'hh') + '</td>');
	                    currentHour.add(1, 'h');
	                }
	                table.empty().append(html);
	            },
	
	            fillMinutes = function () {
	                var table = widget.find('.timepicker-minutes table'),
	                    currentMinute = viewDate.clone().startOf('h'),
	                    html = [],
	                    row = $('<tr>'),
	                    step = options.stepping === 1 ? 5 : options.stepping;
	
	                while (viewDate.isSame(currentMinute, 'h')) {
	                    if (currentMinute.minute() % (step * 4) === 0) {
	                        row = $('<tr>');
	                        html.push(row);
	                    }
	                    row.append('<td data-action="selectMinute" class="minute' + (!isValid(currentMinute, 'm') ? ' disabled' : '') + '">' + currentMinute.format('mm') + '</td>');
	                    currentMinute.add(step, 'm');
	                }
	                table.empty().append(html);
	            },
	
	            fillSeconds = function () {
	                var table = widget.find('.timepicker-seconds table'),
	                    currentSecond = viewDate.clone().startOf('m'),
	                    html = [],
	                    row = $('<tr>');
	
	                while (viewDate.isSame(currentSecond, 'm')) {
	                    if (currentSecond.second() % 20 === 0) {
	                        row = $('<tr>');
	                        html.push(row);
	                    }
	                    row.append('<td data-action="selectSecond" class="second' + (!isValid(currentSecond, 's') ? ' disabled' : '') + '">' + currentSecond.format('ss') + '</td>');
	                    currentSecond.add(5, 's');
	                }
	
	                table.empty().append(html);
	            },
	
	            fillTime = function () {
	                var toggle, newDate, timeComponents = widget.find('.timepicker span[data-time-component]');
	
	                if (!use24Hours) {
	                    toggle = widget.find('.timepicker [data-action=togglePeriod]');
	                    newDate = date.clone().add((date.hours() >= 12) ? -12 : 12, 'h');
	
	                    toggle.text(date.format('A'));
	
	                    if (isValid(newDate, 'h')) {
	                        toggle.removeClass('disabled');
	                    } else {
	                        toggle.addClass('disabled');
	                    }
	                }
	                timeComponents.filter('[data-time-component=hours]').text(date.format(use24Hours ? 'HH' : 'hh'));
	                timeComponents.filter('[data-time-component=minutes]').text(date.format('mm'));
	                timeComponents.filter('[data-time-component=seconds]').text(date.format('ss'));
	
	                fillHours();
	                fillMinutes();
	                fillSeconds();
	            },
	
	            update = function () {
	                if (!widget) {
	                    return;
	                }
	                fillDate();
	                fillTime();
	            },
	
	            setValue = function (targetMoment) {
	                var oldDate = unset ? null : date;
	
	                // case of calling setValue(null or false)
	                if (!targetMoment) {
	                    unset = true;
	                    input.val('');
	                    element.data('date', '');
	                    notifyEvent({
	                        type: 'dp.change',
	                        date: false,
	                        oldDate: oldDate
	                    });
	                    update();
	                    return;
	                }
	
	                targetMoment = targetMoment.clone().locale(options.locale);
	
	                if (hasTimeZone()) {
	                    targetMoment.tz(options.timeZone);
	                }
	
	                if (options.stepping !== 1) {
	                    targetMoment.minutes((Math.round(targetMoment.minutes() / options.stepping) * options.stepping)).seconds(0);
	
	                    while (options.minDate && targetMoment.isBefore(options.minDate)) {
	                        targetMoment.add(options.stepping, 'minutes');
	                    }
	                }
	
	                if (isValid(targetMoment)) {
	                    date = targetMoment;
	                    viewDate = date.clone();
	                    input.val(date.format(actualFormat));
	                    element.data('date', date.format(actualFormat));
	                    unset = false;
	                    update();
	                    notifyEvent({
	                        type: 'dp.change',
	                        date: date.clone(),
	                        oldDate: oldDate
	                    });
	                } else {
	                    if (!options.keepInvalid) {
	                        input.val(unset ? '' : date.format(actualFormat));
	                    } else {
	                        notifyEvent({
	                            type: 'dp.change',
	                            date: targetMoment,
	                            oldDate: oldDate
	                        });
	                    }
	                    notifyEvent({
	                        type: 'dp.error',
	                        date: targetMoment,
	                        oldDate: oldDate
	                    });
	                }
	            },
	
	            /**
	             * Hides the widget. Possibly will emit dp.hide
	             */
	            hide = function () {
	                var transitioning = false;
	                if (!widget) {
	                    return picker;
	                }
	                // Ignore event if in the middle of a picker transition
	                widget.find('.collapse').each(function () {
	                    var collapseData = $(this).data('collapse');
	                    if (collapseData && collapseData.transitioning) {
	                        transitioning = true;
	                        return false;
	                    }
	                    return true;
	                });
	                if (transitioning) {
	                    return picker;
	                }
	                if (component && component.hasClass('btn')) {
	                    component.toggleClass('active');
	                }
	                widget.hide();
	
	                $(window).off('resize', place);
	                widget.off('click', '[data-action]');
	                widget.off('mousedown', false);
	
	                widget.remove();
	                widget = false;
	
	                notifyEvent({
	                    type: 'dp.hide',
	                    date: date.clone()
	                });
	
	                input.blur();
	
	                viewDate = date.clone();
	
	                return picker;
	            },
	
	            clear = function () {
	                setValue(null);
	            },
	
	            parseInputDate = function (inputDate) {
	                if (options.parseInputDate === undefined) {
	                    if (!moment.isMoment(inputDate) || inputDate instanceof Date) {
	                        inputDate = getMoment(inputDate);
	                    }
	                } else {
	                    inputDate = options.parseInputDate(inputDate);
	                }
	                //inputDate.locale(options.locale);
	                return inputDate;
	            },
	
	            /********************************************************************************
	             *
	             * Widget UI interaction functions
	             *
	             ********************************************************************************/
	            actions = {
	                next: function () {
	                    var navFnc = datePickerModes[currentViewMode].navFnc;
	                    viewDate.add(datePickerModes[currentViewMode].navStep, navFnc);
	                    fillDate();
	                    viewUpdate(navFnc);
	                },
	
	                previous: function () {
	                    var navFnc = datePickerModes[currentViewMode].navFnc;
	                    viewDate.subtract(datePickerModes[currentViewMode].navStep, navFnc);
	                    fillDate();
	                    viewUpdate(navFnc);
	                },
	
	                pickerSwitch: function () {
	                    showMode(1);
	                },
	
	                selectMonth: function (e) {
	                    var month = $(e.target).closest('tbody').find('span').index($(e.target));
	                    viewDate.month(month);
	                    if (currentViewMode === minViewModeNumber) {
	                        setValue(date.clone().year(viewDate.year()).month(viewDate.month()));
	                        if (!options.inline) {
	                            hide();
	                        }
	                    } else {
	                        showMode(-1);
	                        fillDate();
	                    }
	                    viewUpdate('M');
	                },
	
	                selectYear: function (e) {
	                    var year = parseInt($(e.target).text(), 10) || 0;
	                    viewDate.year(year);
	                    if (currentViewMode === minViewModeNumber) {
	                        setValue(date.clone().year(viewDate.year()));
	                        if (!options.inline) {
	                            hide();
	                        }
	                    } else {
	                        showMode(-1);
	                        fillDate();
	                    }
	                    viewUpdate('YYYY');
	                },
	
	                selectDecade: function (e) {
	                    var year = parseInt($(e.target).data('selection'), 10) || 0;
	                    viewDate.year(year);
	                    if (currentViewMode === minViewModeNumber) {
	                        setValue(date.clone().year(viewDate.year()));
	                        if (!options.inline) {
	                            hide();
	                        }
	                    } else {
	                        showMode(-1);
	                        fillDate();
	                    }
	                    viewUpdate('YYYY');
	                },
	
	                selectDay: function (e) {
	                    var day = viewDate.clone();
	                    if ($(e.target).is('.old')) {
	                        day.subtract(1, 'M');
	                    }
	                    if ($(e.target).is('.new')) {
	                        day.add(1, 'M');
	                    }
	                    setValue(day.date(parseInt($(e.target).text(), 10)));
	                    if (!hasTime() && !options.keepOpen && !options.inline) {
	                        hide();
	                    }
	                },
	
	                incrementHours: function () {
	                    var newDate = date.clone().add(1, 'h');
	                    if (isValid(newDate, 'h')) {
	                        setValue(newDate);
	                    }
	                },
	
	                incrementMinutes: function () {
	                    var newDate = date.clone().add(options.stepping, 'm');
	                    if (isValid(newDate, 'm')) {
	                        setValue(newDate);
	                    }
	                },
	
	                incrementSeconds: function () {
	                    var newDate = date.clone().add(1, 's');
	                    if (isValid(newDate, 's')) {
	                        setValue(newDate);
	                    }
	                },
	
	                decrementHours: function () {
	                    var newDate = date.clone().subtract(1, 'h');
	                    if (isValid(newDate, 'h')) {
	                        setValue(newDate);
	                    }
	                },
	
	                decrementMinutes: function () {
	                    var newDate = date.clone().subtract(options.stepping, 'm');
	                    if (isValid(newDate, 'm')) {
	                        setValue(newDate);
	                    }
	                },
	
	                decrementSeconds: function () {
	                    var newDate = date.clone().subtract(1, 's');
	                    if (isValid(newDate, 's')) {
	                        setValue(newDate);
	                    }
	                },
	
	                togglePeriod: function () {
	                    setValue(date.clone().add((date.hours() >= 12) ? -12 : 12, 'h'));
	                },
	
	                togglePicker: function (e) {
	                    var $this = $(e.target),
	                        $parent = $this.closest('ul'),
	                        expanded = $parent.find('.in'),
	                        closed = $parent.find('.collapse:not(.in)'),
	                        collapseData;
	
	                    if (expanded && expanded.length) {
	                        collapseData = expanded.data('collapse');
	                        if (collapseData && collapseData.transitioning) {
	                            return;
	                        }
	                        if (expanded.collapse) { // if collapse plugin is available through bootstrap.js then use it
	                            expanded.collapse('hide');
	                            closed.collapse('show');
	                        } else { // otherwise just toggle in class on the two views
	                            expanded.removeClass('in');
	                            closed.addClass('in');
	                        }
	                        if ($this.is('span')) {
	                            $this.toggleClass(options.icons.time + ' ' + options.icons.date);
	                        } else {
	                            $this.find('span').toggleClass(options.icons.time + ' ' + options.icons.date);
	                        }
	
	                        // NOTE: uncomment if toggled state will be restored in show()
	                        //if (component) {
	                        //    component.find('span').toggleClass(options.icons.time + ' ' + options.icons.date);
	                        //}
	                    }
	                },
	
	                showPicker: function () {
	                    widget.find('.timepicker > div:not(.timepicker-picker)').hide();
	                    widget.find('.timepicker .timepicker-picker').show();
	                },
	
	                showHours: function () {
	                    widget.find('.timepicker .timepicker-picker').hide();
	                    widget.find('.timepicker .timepicker-hours').show();
	                },
	
	                showMinutes: function () {
	                    widget.find('.timepicker .timepicker-picker').hide();
	                    widget.find('.timepicker .timepicker-minutes').show();
	                },
	
	                showSeconds: function () {
	                    widget.find('.timepicker .timepicker-picker').hide();
	                    widget.find('.timepicker .timepicker-seconds').show();
	                },
	
	                selectHour: function (e) {
	                    var hour = parseInt($(e.target).text(), 10);
	
	                    if (!use24Hours) {
	                        if (date.hours() >= 12) {
	                            if (hour !== 12) {
	                                hour += 12;
	                            }
	                        } else {
	                            if (hour === 12) {
	                                hour = 0;
	                            }
	                        }
	                    }
	                    setValue(date.clone().hours(hour));
	                    actions.showPicker.call(picker);
	                },
	
	                selectMinute: function (e) {
	                    setValue(date.clone().minutes(parseInt($(e.target).text(), 10)));
	                    actions.showPicker.call(picker);
	                },
	
	                selectSecond: function (e) {
	                    setValue(date.clone().seconds(parseInt($(e.target).text(), 10)));
	                    actions.showPicker.call(picker);
	                },
	
	                clear: clear,
	
	                today: function () {
	                    var todaysDate = getMoment();
	                    if (isValid(todaysDate, 'd')) {
	                        setValue(todaysDate);
	                    }
	                },
	
	                close: hide
	            },
	
	            doAction = function (e) {
	                if ($(e.currentTarget).is('.disabled')) {
	                    return false;
	                }
	                actions[$(e.currentTarget).data('action')].apply(picker, arguments);
	                return false;
	            },
	
	            /**
	             * Shows the widget. Possibly will emit dp.show and dp.change
	             */
	            show = function () {
	                var currentMoment,
	                    useCurrentGranularity = {
	                        'year': function (m) {
	                            return m.month(0).date(1).hours(0).seconds(0).minutes(0);
	                        },
	                        'month': function (m) {
	                            return m.date(1).hours(0).seconds(0).minutes(0);
	                        },
	                        'day': function (m) {
	                            return m.hours(0).seconds(0).minutes(0);
	                        },
	                        'hour': function (m) {
	                            return m.seconds(0).minutes(0);
	                        },
	                        'minute': function (m) {
	                            return m.seconds(0);
	                        }
	                    };
	
	                if (input.prop('disabled') || (!options.ignoreReadonly && input.prop('readonly')) || widget) {
	                    return picker;
	                }
	                if (input.val() !== undefined && input.val().trim().length !== 0) {
	                    setValue(parseInputDate(input.val().trim()));
	                } else if (unset && options.useCurrent && (options.inline || (input.is('input') && input.val().trim().length === 0))) {
	                    currentMoment = getMoment();
	                    if (typeof options.useCurrent === 'string') {
	                        currentMoment = useCurrentGranularity[options.useCurrent](currentMoment);
	                    }
	                    setValue(currentMoment);
	                }
	                widget = getTemplate();
	
	                fillDow();
	                fillMonths();
	
	                widget.find('.timepicker-hours').hide();
	                widget.find('.timepicker-minutes').hide();
	                widget.find('.timepicker-seconds').hide();
	
	                update();
	                showMode();
	
	                $(window).on('resize', place);
	                widget.on('click', '[data-action]', doAction); // this handles clicks on the widget
	                widget.on('mousedown', false);
	
	                if (component && component.hasClass('btn')) {
	                    component.toggleClass('active');
	                }
	                place();
	                widget.show();
	                if (options.focusOnShow && !input.is(':focus')) {
	                    input.focus();
	                }
	
	                notifyEvent({
	                    type: 'dp.show'
	                });
	                return picker;
	            },
	
	            /**
	             * Shows or hides the widget
	             */
	            toggle = function () {
	                return (widget ? hide() : show());
	            },
	
	            keydown = function (e) {
	                var handler = null,
	                    index,
	                    index2,
	                    pressedKeys = [],
	                    pressedModifiers = {},
	                    currentKey = e.which,
	                    keyBindKeys,
	                    allModifiersPressed,
	                    pressed = 'p';
	
	                keyState[currentKey] = pressed;
	
	                for (index in keyState) {
	                    if (keyState.hasOwnProperty(index) && keyState[index] === pressed) {
	                        pressedKeys.push(index);
	                        if (parseInt(index, 10) !== currentKey) {
	                            pressedModifiers[index] = true;
	                        }
	                    }
	                }
	
	                for (index in options.keyBinds) {
	                    if (options.keyBinds.hasOwnProperty(index) && typeof (options.keyBinds[index]) === 'function') {
	                        keyBindKeys = index.split(' ');
	                        if (keyBindKeys.length === pressedKeys.length && keyMap[currentKey] === keyBindKeys[keyBindKeys.length - 1]) {
	                            allModifiersPressed = true;
	                            for (index2 = keyBindKeys.length - 2; index2 >= 0; index2--) {
	                                if (!(keyMap[keyBindKeys[index2]] in pressedModifiers)) {
	                                    allModifiersPressed = false;
	                                    break;
	                                }
	                            }
	                            if (allModifiersPressed) {
	                                handler = options.keyBinds[index];
	                                break;
	                            }
	                        }
	                    }
	                }
	
	                if (handler) {
	                    handler.call(picker, widget);
	                    e.stopPropagation();
	                    e.preventDefault();
	                }
	            },
	
	            keyup = function (e) {
	                keyState[e.which] = 'r';
	                e.stopPropagation();
	                e.preventDefault();
	            },
	
	            change = function (e) {
	                var val = $(e.target).val().trim(),
	                    parsedDate = val ? parseInputDate(val) : null;
	                setValue(parsedDate);
	                e.stopImmediatePropagation();
	                return false;
	            },
	
	            attachDatePickerElementEvents = function () {
	                input.on({
	                    'change': change,
	                    'blur': options.debug ? '' : hide,
	                    'keydown': keydown,
	                    'keyup': keyup,
	                    'focus': options.allowInputToggle ? show : ''
	                });
	
	                if (element.is('input')) {
	                    input.on({
	                        'focus': show
	                    });
	                } else if (component) {
	                    component.on('click', toggle);
	                    component.on('mousedown', false);
	                }
	            },
	
	            detachDatePickerElementEvents = function () {
	                input.off({
	                    'change': change,
	                    'blur': blur,
	                    'keydown': keydown,
	                    'keyup': keyup,
	                    'focus': options.allowInputToggle ? hide : ''
	                });
	
	                if (element.is('input')) {
	                    input.off({
	                        'focus': show
	                    });
	                } else if (component) {
	                    component.off('click', toggle);
	                    component.off('mousedown', false);
	                }
	            },
	
	            indexGivenDates = function (givenDatesArray) {
	                // Store given enabledDates and disabledDates as keys.
	                // This way we can check their existence in O(1) time instead of looping through whole array.
	                // (for example: options.enabledDates['2014-02-27'] === true)
	                var givenDatesIndexed = {};
	                $.each(givenDatesArray, function () {
	                    var dDate = parseInputDate(this);
	                    if (dDate.isValid()) {
	                        givenDatesIndexed[dDate.format('YYYY-MM-DD')] = true;
	                    }
	                });
	                return (Object.keys(givenDatesIndexed).length) ? givenDatesIndexed : false;
	            },
	
	            indexGivenHours = function (givenHoursArray) {
	                // Store given enabledHours and disabledHours as keys.
	                // This way we can check their existence in O(1) time instead of looping through whole array.
	                // (for example: options.enabledHours['2014-02-27'] === true)
	                var givenHoursIndexed = {};
	                $.each(givenHoursArray, function () {
	                    givenHoursIndexed[this] = true;
	                });
	                return (Object.keys(givenHoursIndexed).length) ? givenHoursIndexed : false;
	            },
	
	            initFormatting = function () {
	                var format = options.format || 'L LT';
	
	                actualFormat = format.replace(/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g, function (formatInput) {
	                    var newinput = date.localeData().longDateFormat(formatInput) || formatInput;
	                    return newinput.replace(/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g, function (formatInput2) { //temp fix for #740
	                        return date.localeData().longDateFormat(formatInput2) || formatInput2;
	                    });
	                });
	
	
	                parseFormats = options.extraFormats ? options.extraFormats.slice() : [];
	                if (parseFormats.indexOf(format) < 0 && parseFormats.indexOf(actualFormat) < 0) {
	                    parseFormats.push(actualFormat);
	                }
	
	                use24Hours = (actualFormat.toLowerCase().indexOf('a') < 1 && actualFormat.replace(/\[.*?\]/g, '').indexOf('h') < 1);
	
	                if (isEnabled('y')) {
	                    minViewModeNumber = 2;
	                }
	                if (isEnabled('M')) {
	                    minViewModeNumber = 1;
	                }
	                if (isEnabled('d')) {
	                    minViewModeNumber = 0;
	                }
	
	                currentViewMode = Math.max(minViewModeNumber, currentViewMode);
	
	                if (!unset) {
	                    setValue(date);
	                }
	            };
	
	        /********************************************************************************
	         *
	         * Public API functions
	         * =====================
	         *
	         * Important: Do not expose direct references to private objects or the options
	         * object to the outer world. Always return a clone when returning values or make
	         * a clone when setting a private variable.
	         *
	         ********************************************************************************/
	        picker.destroy = function () {
	            ///<summary>Destroys the widget and removes all attached event listeners</summary>
	            hide();
	            detachDatePickerElementEvents();
	            element.removeData('DateTimePicker');
	            element.removeData('date');
	        };
	
	        picker.toggle = toggle;
	
	        picker.show = show;
	
	        picker.hide = hide;
	
	        picker.disable = function () {
	            ///<summary>Disables the input element, the component is attached to, by adding a disabled="true" attribute to it.
	            ///If the widget was visible before that call it is hidden. Possibly emits dp.hide</summary>
	            hide();
	            if (component && component.hasClass('btn')) {
	                component.addClass('disabled');
	            }
	            input.prop('disabled', true);
	            return picker;
	        };
	
	        picker.enable = function () {
	            ///<summary>Enables the input element, the component is attached to, by removing disabled attribute from it.</summary>
	            if (component && component.hasClass('btn')) {
	                component.removeClass('disabled');
	            }
	            input.prop('disabled', false);
	            return picker;
	        };
	
	        picker.ignoreReadonly = function (ignoreReadonly) {
	            if (arguments.length === 0) {
	                return options.ignoreReadonly;
	            }
	            if (typeof ignoreReadonly !== 'boolean') {
	                throw new TypeError('ignoreReadonly () expects a boolean parameter');
	            }
	            options.ignoreReadonly = ignoreReadonly;
	            return picker;
	        };
	
	        picker.options = function (newOptions) {
	            if (arguments.length === 0) {
	                return $.extend(true, {}, options);
	            }
	
	            if (!(newOptions instanceof Object)) {
	                throw new TypeError('options() options parameter should be an object');
	            }
	            $.extend(true, options, newOptions);
	            $.each(options, function (key, value) {
	                if (picker[key] !== undefined) {
	                    picker[key](value);
	                } else {
	                    throw new TypeError('option ' + key + ' is not recognized!');
	                }
	            });
	            return picker;
	        };
	
	        picker.date = function (newDate) {
	            ///<signature helpKeyword="$.fn.datetimepicker.date">
	            ///<summary>Returns the component's model current date, a moment object or null if not set.</summary>
	            ///<returns type="Moment">date.clone()</returns>
	            ///</signature>
	            ///<signature>
	            ///<summary>Sets the components model current moment to it. Passing a null value unsets the components model current moment. Parsing of the newDate parameter is made using moment library with the options.format and options.useStrict components configuration.</summary>
	            ///<param name="newDate" locid="$.fn.datetimepicker.date_p:newDate">Takes string, Date, moment, null parameter.</param>
	            ///</signature>
	            if (arguments.length === 0) {
	                if (unset) {
	                    return null;
	                }
	                return date.clone();
	            }
	
	            if (newDate !== null && typeof newDate !== 'string' && !moment.isMoment(newDate) && !(newDate instanceof Date)) {
	                throw new TypeError('date() parameter must be one of [null, string, moment or Date]');
	            }
	
	            setValue(newDate === null ? null : parseInputDate(newDate));
	            return picker;
	        };
	
	        picker.format = function (newFormat) {
	            ///<summary>test su</summary>
	            ///<param name="newFormat">info about para</param>
	            ///<returns type="string|boolean">returns foo</returns>
	            if (arguments.length === 0) {
	                return options.format;
	            }
	
	            if ((typeof newFormat !== 'string') && ((typeof newFormat !== 'boolean') || (newFormat !== false))) {
	                throw new TypeError('format() expects a string or boolean:false parameter ' + newFormat);
	            }
	
	            options.format = newFormat;
	            if (actualFormat) {
	                initFormatting(); // reinit formatting
	            }
	            return picker;
	        };
	
	        picker.timeZone = function (newZone) {
	            if (arguments.length === 0) {
	                return options.timeZone;
	            }
	
	            if (typeof newZone !== 'string') {
	                throw new TypeError('newZone() expects a string parameter');
	            }
	
	            options.timeZone = newZone;
	
	            return picker;
	        };
	
	        picker.dayViewHeaderFormat = function (newFormat) {
	            if (arguments.length === 0) {
	                return options.dayViewHeaderFormat;
	            }
	
	            if (typeof newFormat !== 'string') {
	                throw new TypeError('dayViewHeaderFormat() expects a string parameter');
	            }
	
	            options.dayViewHeaderFormat = newFormat;
	            return picker;
	        };
	
	        picker.extraFormats = function (formats) {
	            if (arguments.length === 0) {
	                return options.extraFormats;
	            }
	
	            if (formats !== false && !(formats instanceof Array)) {
	                throw new TypeError('extraFormats() expects an array or false parameter');
	            }
	
	            options.extraFormats = formats;
	            if (parseFormats) {
	                initFormatting(); // reinit formatting
	            }
	            return picker;
	        };
	
	        picker.disabledDates = function (dates) {
	            ///<signature helpKeyword="$.fn.datetimepicker.disabledDates">
	            ///<summary>Returns an array with the currently set disabled dates on the component.</summary>
	            ///<returns type="array">options.disabledDates</returns>
	            ///</signature>
	            ///<signature>
	            ///<summary>Setting this takes precedence over options.minDate, options.maxDate configuration. Also calling this function removes the configuration of
	            ///options.enabledDates if such exist.</summary>
	            ///<param name="dates" locid="$.fn.datetimepicker.disabledDates_p:dates">Takes an [ string or Date or moment ] of values and allows the user to select only from those days.</param>
	            ///</signature>
	            if (arguments.length === 0) {
	                return (options.disabledDates ? $.extend({}, options.disabledDates) : options.disabledDates);
	            }
	
	            if (!dates) {
	                options.disabledDates = false;
	                update();
	                return picker;
	            }
	            if (!(dates instanceof Array)) {
	                throw new TypeError('disabledDates() expects an array parameter');
	            }
	            options.disabledDates = indexGivenDates(dates);
	            options.enabledDates = false;
	            update();
	            return picker;
	        };
	
	        picker.enabledDates = function (dates) {
	            ///<signature helpKeyword="$.fn.datetimepicker.enabledDates">
	            ///<summary>Returns an array with the currently set enabled dates on the component.</summary>
	            ///<returns type="array">options.enabledDates</returns>
	            ///</signature>
	            ///<signature>
	            ///<summary>Setting this takes precedence over options.minDate, options.maxDate configuration. Also calling this function removes the configuration of options.disabledDates if such exist.</summary>
	            ///<param name="dates" locid="$.fn.datetimepicker.enabledDates_p:dates">Takes an [ string or Date or moment ] of values and allows the user to select only from those days.</param>
	            ///</signature>
	            if (arguments.length === 0) {
	                return (options.enabledDates ? $.extend({}, options.enabledDates) : options.enabledDates);
	            }
	
	            if (!dates) {
	                options.enabledDates = false;
	                update();
	                return picker;
	            }
	            if (!(dates instanceof Array)) {
	                throw new TypeError('enabledDates() expects an array parameter');
	            }
	            options.enabledDates = indexGivenDates(dates);
	            options.disabledDates = false;
	            update();
	            return picker;
	        };
	
	        picker.daysOfWeekDisabled = function (daysOfWeekDisabled) {
	            if (arguments.length === 0) {
	                return options.daysOfWeekDisabled.splice(0);
	            }
	
	            if ((typeof daysOfWeekDisabled === 'boolean') && !daysOfWeekDisabled) {
	                options.daysOfWeekDisabled = false;
	                update();
	                return picker;
	            }
	
	            if (!(daysOfWeekDisabled instanceof Array)) {
	                throw new TypeError('daysOfWeekDisabled() expects an array parameter');
	            }
	            options.daysOfWeekDisabled = daysOfWeekDisabled.reduce(function (previousValue, currentValue) {
	                currentValue = parseInt(currentValue, 10);
	                if (currentValue > 6 || currentValue < 0 || isNaN(currentValue)) {
	                    return previousValue;
	                }
	                if (previousValue.indexOf(currentValue) === -1) {
	                    previousValue.push(currentValue);
	                }
	                return previousValue;
	            }, []).sort();
	            if (options.useCurrent && !options.keepInvalid) {
	                var tries = 0;
	                while (!isValid(date, 'd')) {
	                    date.add(1, 'd');
	                    if (tries === 31) {
	                        throw 'Tried 31 times to find a valid date';
	                    }
	                    tries++;
	                }
	                setValue(date);
	            }
	            update();
	            return picker;
	        };
	
	        picker.maxDate = function (maxDate) {
	            if (arguments.length === 0) {
	                return options.maxDate ? options.maxDate.clone() : options.maxDate;
	            }
	
	            if ((typeof maxDate === 'boolean') && maxDate === false) {
	                options.maxDate = false;
	                update();
	                return picker;
	            }
	
	            if (typeof maxDate === 'string') {
	                if (maxDate === 'now' || maxDate === 'moment') {
	                    maxDate = getMoment();
	                }
	            }
	
	            var parsedDate = parseInputDate(maxDate);
	
	            if (!parsedDate.isValid()) {
	                throw new TypeError('maxDate() Could not parse date parameter: ' + maxDate);
	            }
	            if (options.minDate && parsedDate.isBefore(options.minDate)) {
	                throw new TypeError('maxDate() date parameter is before options.minDate: ' + parsedDate.format(actualFormat));
	            }
	            options.maxDate = parsedDate;
	            if (options.useCurrent && !options.keepInvalid && date.isAfter(maxDate)) {
	                setValue(options.maxDate);
	            }
	            if (viewDate.isAfter(parsedDate)) {
	                viewDate = parsedDate.clone().subtract(options.stepping, 'm');
	            }
	            update();
	            return picker;
	        };
	
	        picker.minDate = function (minDate) {
	            if (arguments.length === 0) {
	                return options.minDate ? options.minDate.clone() : options.minDate;
	            }
	
	            if ((typeof minDate === 'boolean') && minDate === false) {
	                options.minDate = false;
	                update();
	                return picker;
	            }
	
	            if (typeof minDate === 'string') {
	                if (minDate === 'now' || minDate === 'moment') {
	                    minDate = getMoment();
	                }
	            }
	
	            var parsedDate = parseInputDate(minDate);
	
	            if (!parsedDate.isValid()) {
	                throw new TypeError('minDate() Could not parse date parameter: ' + minDate);
	            }
	            if (options.maxDate && parsedDate.isAfter(options.maxDate)) {
	                throw new TypeError('minDate() date parameter is after options.maxDate: ' + parsedDate.format(actualFormat));
	            }
	            options.minDate = parsedDate;
	            if (options.useCurrent && !options.keepInvalid && date.isBefore(minDate)) {
	                setValue(options.minDate);
	            }
	            if (viewDate.isBefore(parsedDate)) {
	                viewDate = parsedDate.clone().add(options.stepping, 'm');
	            }
	            update();
	            return picker;
	        };
	
	        picker.defaultDate = function (defaultDate) {
	            ///<signature helpKeyword="$.fn.datetimepicker.defaultDate">
	            ///<summary>Returns a moment with the options.defaultDate option configuration or false if not set</summary>
	            ///<returns type="Moment">date.clone()</returns>
	            ///</signature>
	            ///<signature>
	            ///<summary>Will set the picker's inital date. If a boolean:false value is passed the options.defaultDate parameter is cleared.</summary>
	            ///<param name="defaultDate" locid="$.fn.datetimepicker.defaultDate_p:defaultDate">Takes a string, Date, moment, boolean:false</param>
	            ///</signature>
	            if (arguments.length === 0) {
	                return options.defaultDate ? options.defaultDate.clone() : options.defaultDate;
	            }
	            if (!defaultDate) {
	                options.defaultDate = false;
	                return picker;
	            }
	
	            if (typeof defaultDate === 'string') {
	                if (defaultDate === 'now' || defaultDate === 'moment') {
	                    defaultDate = getMoment();
	                } else {
	                    defaultDate = getMoment(defaultDate);
	                }
	            }
	
	            var parsedDate = parseInputDate(defaultDate);
	            if (!parsedDate.isValid()) {
	                throw new TypeError('defaultDate() Could not parse date parameter: ' + defaultDate);
	            }
	            if (!isValid(parsedDate)) {
	                throw new TypeError('defaultDate() date passed is invalid according to component setup validations');
	            }
	
	            options.defaultDate = parsedDate;
	
	            if ((options.defaultDate && options.inline) || input.val().trim() === '') {
	                setValue(options.defaultDate);
	            }
	            return picker;
	        };
	
	        picker.locale = function (locale) {
	            if (arguments.length === 0) {
	                return options.locale;
	            }
	
	            if (!moment.localeData(locale)) {
	                throw new TypeError('locale() locale ' + locale + ' is not loaded from moment locales!');
	            }
	
	            options.locale = locale;
	            date.locale(options.locale);
	            viewDate.locale(options.locale);
	
	            if (actualFormat) {
	                initFormatting(); // reinit formatting
	            }
	            if (widget) {
	                hide();
	                show();
	            }
	            return picker;
	        };
	
	        picker.stepping = function (stepping) {
	            if (arguments.length === 0) {
	                return options.stepping;
	            }
	
	            stepping = parseInt(stepping, 10);
	            if (isNaN(stepping) || stepping < 1) {
	                stepping = 1;
	            }
	            options.stepping = stepping;
	            return picker;
	        };
	
	        picker.useCurrent = function (useCurrent) {
	            var useCurrentOptions = ['year', 'month', 'day', 'hour', 'minute'];
	            if (arguments.length === 0) {
	                return options.useCurrent;
	            }
	
	            if ((typeof useCurrent !== 'boolean') && (typeof useCurrent !== 'string')) {
	                throw new TypeError('useCurrent() expects a boolean or string parameter');
	            }
	            if (typeof useCurrent === 'string' && useCurrentOptions.indexOf(useCurrent.toLowerCase()) === -1) {
	                throw new TypeError('useCurrent() expects a string parameter of ' + useCurrentOptions.join(', '));
	            }
	            options.useCurrent = useCurrent;
	            return picker;
	        };
	
	        picker.collapse = function (collapse) {
	            if (arguments.length === 0) {
	                return options.collapse;
	            }
	
	            if (typeof collapse !== 'boolean') {
	                throw new TypeError('collapse() expects a boolean parameter');
	            }
	            if (options.collapse === collapse) {
	                return picker;
	            }
	            options.collapse = collapse;
	            if (widget) {
	                hide();
	                show();
	            }
	            return picker;
	        };
	
	        picker.icons = function (icons) {
	            if (arguments.length === 0) {
	                return $.extend({}, options.icons);
	            }
	
	            if (!(icons instanceof Object)) {
	                throw new TypeError('icons() expects parameter to be an Object');
	            }
	            $.extend(options.icons, icons);
	            if (widget) {
	                hide();
	                show();
	            }
	            return picker;
	        };
	
	        picker.tooltips = function (tooltips) {
	            if (arguments.length === 0) {
	                return $.extend({}, options.tooltips);
	            }
	
	            if (!(tooltips instanceof Object)) {
	                throw new TypeError('tooltips() expects parameter to be an Object');
	            }
	            $.extend(options.tooltips, tooltips);
	            if (widget) {
	                hide();
	                show();
	            }
	            return picker;
	        };
	
	        picker.useStrict = function (useStrict) {
	            if (arguments.length === 0) {
	                return options.useStrict;
	            }
	
	            if (typeof useStrict !== 'boolean') {
	                throw new TypeError('useStrict() expects a boolean parameter');
	            }
	            options.useStrict = useStrict;
	            return picker;
	        };
	
	        picker.sideBySide = function (sideBySide) {
	            if (arguments.length === 0) {
	                return options.sideBySide;
	            }
	
	            if (typeof sideBySide !== 'boolean') {
	                throw new TypeError('sideBySide() expects a boolean parameter');
	            }
	            options.sideBySide = sideBySide;
	            if (widget) {
	                hide();
	                show();
	            }
	            return picker;
	        };
	
	        picker.viewMode = function (viewMode) {
	            if (arguments.length === 0) {
	                return options.viewMode;
	            }
	
	            if (typeof viewMode !== 'string') {
	                throw new TypeError('viewMode() expects a string parameter');
	            }
	
	            if (viewModes.indexOf(viewMode) === -1) {
	                throw new TypeError('viewMode() parameter must be one of (' + viewModes.join(', ') + ') value');
	            }
	
	            options.viewMode = viewMode;
	            currentViewMode = Math.max(viewModes.indexOf(viewMode), minViewModeNumber);
	
	            showMode();
	            return picker;
	        };
	
	        picker.toolbarPlacement = function (toolbarPlacement) {
	            if (arguments.length === 0) {
	                return options.toolbarPlacement;
	            }
	
	            if (typeof toolbarPlacement !== 'string') {
	                throw new TypeError('toolbarPlacement() expects a string parameter');
	            }
	            if (toolbarPlacements.indexOf(toolbarPlacement) === -1) {
	                throw new TypeError('toolbarPlacement() parameter must be one of (' + toolbarPlacements.join(', ') + ') value');
	            }
	            options.toolbarPlacement = toolbarPlacement;
	
	            if (widget) {
	                hide();
	                show();
	            }
	            return picker;
	        };
	
	        picker.widgetPositioning = function (widgetPositioning) {
	            if (arguments.length === 0) {
	                return $.extend({}, options.widgetPositioning);
	            }
	
	            if (({}).toString.call(widgetPositioning) !== '[object Object]') {
	                throw new TypeError('widgetPositioning() expects an object variable');
	            }
	            if (widgetPositioning.horizontal) {
	                if (typeof widgetPositioning.horizontal !== 'string') {
	                    throw new TypeError('widgetPositioning() horizontal variable must be a string');
	                }
	                widgetPositioning.horizontal = widgetPositioning.horizontal.toLowerCase();
	                if (horizontalModes.indexOf(widgetPositioning.horizontal) === -1) {
	                    throw new TypeError('widgetPositioning() expects horizontal parameter to be one of (' + horizontalModes.join(', ') + ')');
	                }
	                options.widgetPositioning.horizontal = widgetPositioning.horizontal;
	            }
	            if (widgetPositioning.vertical) {
	                if (typeof widgetPositioning.vertical !== 'string') {
	                    throw new TypeError('widgetPositioning() vertical variable must be a string');
	                }
	                widgetPositioning.vertical = widgetPositioning.vertical.toLowerCase();
	                if (verticalModes.indexOf(widgetPositioning.vertical) === -1) {
	                    throw new TypeError('widgetPositioning() expects vertical parameter to be one of (' + verticalModes.join(', ') + ')');
	                }
	                options.widgetPositioning.vertical = widgetPositioning.vertical;
	            }
	            update();
	            return picker;
	        };
	
	        picker.calendarWeeks = function (calendarWeeks) {
	            if (arguments.length === 0) {
	                return options.calendarWeeks;
	            }
	
	            if (typeof calendarWeeks !== 'boolean') {
	                throw new TypeError('calendarWeeks() expects parameter to be a boolean value');
	            }
	
	            options.calendarWeeks = calendarWeeks;
	            update();
	            return picker;
	        };
	
	        picker.showTodayButton = function (showTodayButton) {
	            if (arguments.length === 0) {
	                return options.showTodayButton;
	            }
	
	            if (typeof showTodayButton !== 'boolean') {
	                throw new TypeError('showTodayButton() expects a boolean parameter');
	            }
	
	            options.showTodayButton = showTodayButton;
	            if (widget) {
	                hide();
	                show();
	            }
	            return picker;
	        };
	
	        picker.showClear = function (showClear) {
	            if (arguments.length === 0) {
	                return options.showClear;
	            }
	
	            if (typeof showClear !== 'boolean') {
	                throw new TypeError('showClear() expects a boolean parameter');
	            }
	
	            options.showClear = showClear;
	            if (widget) {
	                hide();
	                show();
	            }
	            return picker;
	        };
	
	        picker.widgetParent = function (widgetParent) {
	            if (arguments.length === 0) {
	                return options.widgetParent;
	            }
	
	            if (typeof widgetParent === 'string') {
	                widgetParent = $(widgetParent);
	            }
	
	            if (widgetParent !== null && (typeof widgetParent !== 'string' && !(widgetParent instanceof $))) {
	                throw new TypeError('widgetParent() expects a string or a jQuery object parameter');
	            }
	
	            options.widgetParent = widgetParent;
	            if (widget) {
	                hide();
	                show();
	            }
	            return picker;
	        };
	
	        picker.keepOpen = function (keepOpen) {
	            if (arguments.length === 0) {
	                return options.keepOpen;
	            }
	
	            if (typeof keepOpen !== 'boolean') {
	                throw new TypeError('keepOpen() expects a boolean parameter');
	            }
	
	            options.keepOpen = keepOpen;
	            return picker;
	        };
	
	        picker.focusOnShow = function (focusOnShow) {
	            if (arguments.length === 0) {
	                return options.focusOnShow;
	            }
	
	            if (typeof focusOnShow !== 'boolean') {
	                throw new TypeError('focusOnShow() expects a boolean parameter');
	            }
	
	            options.focusOnShow = focusOnShow;
	            return picker;
	        };
	
	        picker.inline = function (inline) {
	            if (arguments.length === 0) {
	                return options.inline;
	            }
	
	            if (typeof inline !== 'boolean') {
	                throw new TypeError('inline() expects a boolean parameter');
	            }
	
	            options.inline = inline;
	            return picker;
	        };
	
	        picker.clear = function () {
	            clear();
	            return picker;
	        };
	
	        picker.keyBinds = function (keyBinds) {
	            if (arguments.length === 0) {
	                return options.keyBinds;
	            }
	
	            options.keyBinds = keyBinds;
	            return picker;
	        };
	
	        picker.getMoment = function (d) {
	            return getMoment(d);
	        };
	
	        picker.debug = function (debug) {
	            if (typeof debug !== 'boolean') {
	                throw new TypeError('debug() expects a boolean parameter');
	            }
	
	            options.debug = debug;
	            return picker;
	        };
	
	        picker.allowInputToggle = function (allowInputToggle) {
	            if (arguments.length === 0) {
	                return options.allowInputToggle;
	            }
	
	            if (typeof allowInputToggle !== 'boolean') {
	                throw new TypeError('allowInputToggle() expects a boolean parameter');
	            }
	
	            options.allowInputToggle = allowInputToggle;
	            return picker;
	        };
	
	        picker.showClose = function (showClose) {
	            if (arguments.length === 0) {
	                return options.showClose;
	            }
	
	            if (typeof showClose !== 'boolean') {
	                throw new TypeError('showClose() expects a boolean parameter');
	            }
	
	            options.showClose = showClose;
	            return picker;
	        };
	
	        picker.keepInvalid = function (keepInvalid) {
	            if (arguments.length === 0) {
	                return options.keepInvalid;
	            }
	
	            if (typeof keepInvalid !== 'boolean') {
	                throw new TypeError('keepInvalid() expects a boolean parameter');
	            }
	            options.keepInvalid = keepInvalid;
	            return picker;
	        };
	
	        picker.datepickerInput = function (datepickerInput) {
	            if (arguments.length === 0) {
	                return options.datepickerInput;
	            }
	
	            if (typeof datepickerInput !== 'string') {
	                throw new TypeError('datepickerInput() expects a string parameter');
	            }
	
	            options.datepickerInput = datepickerInput;
	            return picker;
	        };
	
	        picker.parseInputDate = function (parseInputDate) {
	            if (arguments.length === 0) {
	                return options.parseInputDate;
	            }
	
	            if (typeof parseInputDate !== 'function') {
	                throw new TypeError('parseInputDate() sholud be as function');
	            }
	
	            options.parseInputDate = parseInputDate;
	
	            return picker;
	        };
	
	        picker.disabledTimeIntervals = function (disabledTimeIntervals) {
	            ///<signature helpKeyword="$.fn.datetimepicker.disabledTimeIntervals">
	            ///<summary>Returns an array with the currently set disabled dates on the component.</summary>
	            ///<returns type="array">options.disabledTimeIntervals</returns>
	            ///</signature>
	            ///<signature>
	            ///<summary>Setting this takes precedence over options.minDate, options.maxDate configuration. Also calling this function removes the configuration of
	            ///options.enabledDates if such exist.</summary>
	            ///<param name="dates" locid="$.fn.datetimepicker.disabledTimeIntervals_p:dates">Takes an [ string or Date or moment ] of values and allows the user to select only from those days.</param>
	            ///</signature>
	            if (arguments.length === 0) {
	                return (options.disabledTimeIntervals ? $.extend({}, options.disabledTimeIntervals) : options.disabledTimeIntervals);
	            }
	
	            if (!disabledTimeIntervals) {
	                options.disabledTimeIntervals = false;
	                update();
	                return picker;
	            }
	            if (!(disabledTimeIntervals instanceof Array)) {
	                throw new TypeError('disabledTimeIntervals() expects an array parameter');
	            }
	            options.disabledTimeIntervals = disabledTimeIntervals;
	            update();
	            return picker;
	        };
	
	        picker.disabledHours = function (hours) {
	            ///<signature helpKeyword="$.fn.datetimepicker.disabledHours">
	            ///<summary>Returns an array with the currently set disabled hours on the component.</summary>
	            ///<returns type="array">options.disabledHours</returns>
	            ///</signature>
	            ///<signature>
	            ///<summary>Setting this takes precedence over options.minDate, options.maxDate configuration. Also calling this function removes the configuration of
	            ///options.enabledHours if such exist.</summary>
	            ///<param name="hours" locid="$.fn.datetimepicker.disabledHours_p:hours">Takes an [ int ] of values and disallows the user to select only from those hours.</param>
	            ///</signature>
	            if (arguments.length === 0) {
	                return (options.disabledHours ? $.extend({}, options.disabledHours) : options.disabledHours);
	            }
	
	            if (!hours) {
	                options.disabledHours = false;
	                update();
	                return picker;
	            }
	            if (!(hours instanceof Array)) {
	                throw new TypeError('disabledHours() expects an array parameter');
	            }
	            options.disabledHours = indexGivenHours(hours);
	            options.enabledHours = false;
	            if (options.useCurrent && !options.keepInvalid) {
	                var tries = 0;
	                while (!isValid(date, 'h')) {
	                    date.add(1, 'h');
	                    if (tries === 24) {
	                        throw 'Tried 24 times to find a valid date';
	                    }
	                    tries++;
	                }
	                setValue(date);
	            }
	            update();
	            return picker;
	        };
	
	        picker.enabledHours = function (hours) {
	            ///<signature helpKeyword="$.fn.datetimepicker.enabledHours">
	            ///<summary>Returns an array with the currently set enabled hours on the component.</summary>
	            ///<returns type="array">options.enabledHours</returns>
	            ///</signature>
	            ///<signature>
	            ///<summary>Setting this takes precedence over options.minDate, options.maxDate configuration. Also calling this function removes the configuration of options.disabledHours if such exist.</summary>
	            ///<param name="hours" locid="$.fn.datetimepicker.enabledHours_p:hours">Takes an [ int ] of values and allows the user to select only from those hours.</param>
	            ///</signature>
	            if (arguments.length === 0) {
	                return (options.enabledHours ? $.extend({}, options.enabledHours) : options.enabledHours);
	            }
	
	            if (!hours) {
	                options.enabledHours = false;
	                update();
	                return picker;
	            }
	            if (!(hours instanceof Array)) {
	                throw new TypeError('enabledHours() expects an array parameter');
	            }
	            options.enabledHours = indexGivenHours(hours);
	            options.disabledHours = false;
	            if (options.useCurrent && !options.keepInvalid) {
	                var tries = 0;
	                while (!isValid(date, 'h')) {
	                    date.add(1, 'h');
	                    if (tries === 24) {
	                        throw 'Tried 24 times to find a valid date';
	                    }
	                    tries++;
	                }
	                setValue(date);
	            }
	            update();
	            return picker;
	        };
	        /**
	         * Returns the component's model current viewDate, a moment object or null if not set. Passing a null value unsets the components model current moment. Parsing of the newDate parameter is made using moment library with the options.format and options.useStrict components configuration.
	         * @param {Takes string, viewDate, moment, null parameter.} newDate
	         * @returns {viewDate.clone()}
	         */
	        picker.viewDate = function (newDate) {
	            if (arguments.length === 0) {
	                return viewDate.clone();
	            }
	
	            if (!newDate) {
	                viewDate = date.clone();
	                return picker;
	            }
	
	            if (typeof newDate !== 'string' && !moment.isMoment(newDate) && !(newDate instanceof Date)) {
	                throw new TypeError('viewDate() parameter must be one of [string, moment or Date]');
	            }
	
	            viewDate = parseInputDate(newDate);
	            viewUpdate();
	            return picker;
	        };
	
	        // initializing element and component attributes
	        if (element.is('input')) {
	            input = element;
	        } else {
	            input = element.find(options.datepickerInput);
	            if (input.length === 0) {
	                input = element.find('input');
	            } else if (!input.is('input')) {
	                throw new Error('CSS class "' + options.datepickerInput + '" cannot be applied to non input element');
	            }
	        }
	
	        if (element.hasClass('input-group')) {
	            // in case there is more then one 'input-group-addon' Issue #48
	            if (element.find('.datepickerbutton').length === 0) {
	                component = element.find('.input-group-addon');
	            } else {
	                component = element.find('.datepickerbutton');
	            }
	        }
	
	        if (!options.inline && !input.is('input')) {
	            throw new Error('Could not initialize DateTimePicker without an input element');
	        }
	
	        // Set defaults for date here now instead of in var declaration
	        date = getMoment();
	        viewDate = date.clone();
	
	        $.extend(true, options, dataToOptions());
	
	        picker.options(options);
	
	        initFormatting();
	
	        attachDatePickerElementEvents();
	
	        if (input.prop('disabled')) {
	            picker.disable();
	        }
	        if (input.is('input') && input.val().trim().length !== 0) {
	            setValue(parseInputDate(input.val().trim()));
	        }
	        else if (options.defaultDate && input.attr('placeholder') === undefined) {
	            setValue(options.defaultDate);
	        }
	        if (options.inline) {
	            show();
	        }
	        return picker;
	    };
	
	    /********************************************************************************
	     *
	     * jQuery plugin constructor and defaults object
	     *
	     ********************************************************************************/
	
	    /**
	    * See (http://jquery.com/).
	    * @name jQuery
	    * @class
	    * See the jQuery Library  (http://jquery.com/) for full details.  This just
	    * documents the function and classes that are added to jQuery by this plug-in.
	    */
	    /**
	     * See (http://jquery.com/)
	     * @name fn
	     * @class
	     * See the jQuery Library  (http://jquery.com/) for full details.  This just
	     * documents the function and classes that are added to jQuery by this plug-in.
	     * @memberOf jQuery
	     */
	    /**
	     * Show comments
	     * @class datetimepicker
	     * @memberOf jQuery.fn
	     */
	    $.fn.datetimepicker = function (options) {
	        options = options || {};
	
	        var args = Array.prototype.slice.call(arguments, 1),
	            isInstance = true,
	            thisMethods = ['destroy', 'hide', 'show', 'toggle'],
	            returnValue;
	
	        if (typeof options === 'object') {
	            return this.each(function () {
	                var $this = $(this),
	                    _options;
	                if (!$this.data('DateTimePicker')) {
	                    // create a private copy of the defaults object
	                    _options = $.extend(true, {}, $.fn.datetimepicker.defaults, options);
	                    $this.data('DateTimePicker', dateTimePicker($this, _options));
	                }
	            });
	        } else if (typeof options === 'string') {
	            this.each(function () {
	                var $this = $(this),
	                    instance = $this.data('DateTimePicker');
	                if (!instance) {
	                    throw new Error('bootstrap-datetimepicker("' + options + '") method was called on an element that is not using DateTimePicker');
	                }
	
	                returnValue = instance[options].apply(instance, args);
	                isInstance = returnValue === instance;
	            });
	
	            if (isInstance || $.inArray(options, thisMethods) > -1) {
	                return this;
	            }
	
	            return returnValue;
	        }
	
	        throw new TypeError('Invalid arguments for DateTimePicker: ' + options);
	    };
	
	    $.fn.datetimepicker.defaults = {
	        timeZone: '',
	        format: false,
	        dayViewHeaderFormat: 'MMMM YYYY',
	        extraFormats: false,
	        stepping: 1,
	        minDate: false,
	        maxDate: false,
	        useCurrent: true,
	        collapse: true,
	        locale: moment.locale(),
	        defaultDate: false,
	        disabledDates: false,
	        enabledDates: false,
	        icons: {
	            time: 'glyphicon glyphicon-time',
	            date: 'glyphicon glyphicon-calendar',
	            up: 'glyphicon glyphicon-chevron-up',
	            down: 'glyphicon glyphicon-chevron-down',
	            previous: 'glyphicon glyphicon-chevron-left',
	            next: 'glyphicon glyphicon-chevron-right',
	            today: 'glyphicon glyphicon-screenshot',
	            clear: 'glyphicon glyphicon-trash',
	            close: 'glyphicon glyphicon-remove'
	        },
	        tooltips: {
	            today: 'Go to today',
	            clear: 'Clear selection',
	            close: 'Close the picker',
	            selectMonth: 'Select Month',
	            prevMonth: 'Previous Month',
	            nextMonth: 'Next Month',
	            selectYear: 'Select Year',
	            prevYear: 'Previous Year',
	            nextYear: 'Next Year',
	            selectDecade: 'Select Decade',
	            prevDecade: 'Previous Decade',
	            nextDecade: 'Next Decade',
	            prevCentury: 'Previous Century',
	            nextCentury: 'Next Century',
	            pickHour: 'Pick Hour',
	            incrementHour: 'Increment Hour',
	            decrementHour: 'Decrement Hour',
	            pickMinute: 'Pick Minute',
	            incrementMinute: 'Increment Minute',
	            decrementMinute: 'Decrement Minute',
	            pickSecond: 'Pick Second',
	            incrementSecond: 'Increment Second',
	            decrementSecond: 'Decrement Second',
	            togglePeriod: 'Toggle Period',
	            selectTime: 'Select Time'
	        },
	        useStrict: false,
	        sideBySide: false,
	        daysOfWeekDisabled: false,
	        calendarWeeks: false,
	        viewMode: 'days',
	        toolbarPlacement: 'default',
	        showTodayButton: false,
	        showClear: false,
	        showClose: false,
	        widgetPositioning: {
	            horizontal: 'auto',
	            vertical: 'auto'
	        },
	        widgetParent: null,
	        ignoreReadonly: false,
	        keepOpen: false,
	        focusOnShow: true,
	        inline: false,
	        keepInvalid: false,
	        datepickerInput: '.datepickerinput',
	        keyBinds: {
	            up: function (widget) {
	                if (!widget) {
	                    return;
	                }
	                var d = this.date() || this.getMoment();
	                if (widget.find('.datepicker').is(':visible')) {
	                    this.date(d.clone().subtract(7, 'd'));
	                } else {
	                    this.date(d.clone().add(this.stepping(), 'm'));
	                }
	            },
	            down: function (widget) {
	                if (!widget) {
	                    this.show();
	                    return;
	                }
	                var d = this.date() || this.getMoment();
	                if (widget.find('.datepicker').is(':visible')) {
	                    this.date(d.clone().add(7, 'd'));
	                } else {
	                    this.date(d.clone().subtract(this.stepping(), 'm'));
	                }
	            },
	            'control up': function (widget) {
	                if (!widget) {
	                    return;
	                }
	                var d = this.date() || this.getMoment();
	                if (widget.find('.datepicker').is(':visible')) {
	                    this.date(d.clone().subtract(1, 'y'));
	                } else {
	                    this.date(d.clone().add(1, 'h'));
	                }
	            },
	            'control down': function (widget) {
	                if (!widget) {
	                    return;
	                }
	                var d = this.date() || this.getMoment();
	                if (widget.find('.datepicker').is(':visible')) {
	                    this.date(d.clone().add(1, 'y'));
	                } else {
	                    this.date(d.clone().subtract(1, 'h'));
	                }
	            },
	            left: function (widget) {
	                if (!widget) {
	                    return;
	                }
	                var d = this.date() || this.getMoment();
	                if (widget.find('.datepicker').is(':visible')) {
	                    this.date(d.clone().subtract(1, 'd'));
	                }
	            },
	            right: function (widget) {
	                if (!widget) {
	                    return;
	                }
	                var d = this.date() || this.getMoment();
	                if (widget.find('.datepicker').is(':visible')) {
	                    this.date(d.clone().add(1, 'd'));
	                }
	            },
	            pageUp: function (widget) {
	                if (!widget) {
	                    return;
	                }
	                var d = this.date() || this.getMoment();
	                if (widget.find('.datepicker').is(':visible')) {
	                    this.date(d.clone().subtract(1, 'M'));
	                }
	            },
	            pageDown: function (widget) {
	                if (!widget) {
	                    return;
	                }
	                var d = this.date() || this.getMoment();
	                if (widget.find('.datepicker').is(':visible')) {
	                    this.date(d.clone().add(1, 'M'));
	                }
	            },
	            enter: function () {
	                this.hide();
	            },
	            escape: function () {
	                this.hide();
	            },
	            //tab: function (widget) { //this break the flow of the form. disabling for now
	            //    var toggle = widget.find('.picker-switch a[data-action="togglePicker"]');
	            //    if(toggle.length > 0) toggle.click();
	            //},
	            'control space': function (widget) {
	                if (!widget) {
	                    return;
	                }
	                if (widget.find('.timepicker').is(':visible')) {
	                    widget.find('.btn[data-action="togglePeriod"]').click();
	                }
	            },
	            t: function () {
	                this.date(this.getMoment());
	            },
	            'delete': function () {
	                this.clear();
	            }
	        },
	        debug: false,
	        allowInputToggle: false,
	        disabledTimeIntervals: false,
	        disabledHours: false,
	        enabledHours: false,
	        viewDate: false
	    };
	
	    return $.fn.datetimepicker;
	}));


/***/ }),
/* 971 */
/***/ (function(module, exports, __webpack_require__) {

	/* WEBPACK VAR INJECTION */(function(Promise) {'use strict';
	
	/* globals
		Atomics,
		SharedArrayBuffer,
	*/
	
	var undefined;
	
	var $TypeError = TypeError;
	
	var $gOPD = Object.getOwnPropertyDescriptor;
	if ($gOPD) {
		try {
			$gOPD({}, '');
		} catch (e) {
			$gOPD = null; // this is IE 8, which has a broken gOPD
		}
	}
	
	var throwTypeError = function () { throw new $TypeError(); };
	var ThrowTypeError = $gOPD
		? (function () {
			try {
				// eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties
				arguments.callee; // IE 8 does not throw here
				return throwTypeError;
			} catch (calleeThrows) {
				try {
					// IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '')
					return $gOPD(arguments, 'callee').get;
				} catch (gOPDthrows) {
					return throwTypeError;
				}
			}
		}())
		: throwTypeError;
	
	var hasSymbols = __webpack_require__(246)();
	
	var getProto = Object.getPrototypeOf || function (x) { return x.__proto__; }; // eslint-disable-line no-proto
	
	var generator; // = function * () {};
	var generatorFunction = generator ? getProto(generator) : undefined;
	var asyncFn; // async function() {};
	var asyncFunction = asyncFn ? asyncFn.constructor : undefined;
	var asyncGen; // async function * () {};
	var asyncGenFunction = asyncGen ? getProto(asyncGen) : undefined;
	var asyncGenIterator = asyncGen ? asyncGen() : undefined;
	
	var TypedArray = typeof Uint8Array === 'undefined' ? undefined : getProto(Uint8Array);
	
	var INTRINSICS = {
		'%Array%': Array,
		'%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer,
		'%ArrayBufferPrototype%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer.prototype,
		'%ArrayIteratorPrototype%': hasSymbols ? getProto([][Symbol.iterator]()) : undefined,
		'%ArrayPrototype%': Array.prototype,
		'%ArrayProto_entries%': Array.prototype.entries,
		'%ArrayProto_forEach%': Array.prototype.forEach,
		'%ArrayProto_keys%': Array.prototype.keys,
		'%ArrayProto_values%': Array.prototype.values,
		'%AsyncFromSyncIteratorPrototype%': undefined,
		'%AsyncFunction%': asyncFunction,
		'%AsyncFunctionPrototype%': asyncFunction ? asyncFunction.prototype : undefined,
		'%AsyncGenerator%': asyncGen ? getProto(asyncGenIterator) : undefined,
		'%AsyncGeneratorFunction%': asyncGenFunction,
		'%AsyncGeneratorPrototype%': asyncGenFunction ? asyncGenFunction.prototype : undefined,
		'%AsyncIteratorPrototype%': asyncGenIterator && hasSymbols && Symbol.asyncIterator ? asyncGenIterator[Symbol.asyncIterator]() : undefined,
		'%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics,
		'%Boolean%': Boolean,
		'%BooleanPrototype%': Boolean.prototype,
		'%DataView%': typeof DataView === 'undefined' ? undefined : DataView,
		'%DataViewPrototype%': typeof DataView === 'undefined' ? undefined : DataView.prototype,
		'%Date%': Date,
		'%DatePrototype%': Date.prototype,
		'%decodeURI%': decodeURI,
		'%decodeURIComponent%': decodeURIComponent,
		'%encodeURI%': encodeURI,
		'%encodeURIComponent%': encodeURIComponent,
		'%Error%': Error,
		'%ErrorPrototype%': Error.prototype,
		'%eval%': eval, // eslint-disable-line no-eval
		'%EvalError%': EvalError,
		'%EvalErrorPrototype%': EvalError.prototype,
		'%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array,
		'%Float32ArrayPrototype%': typeof Float32Array === 'undefined' ? undefined : Float32Array.prototype,
		'%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array,
		'%Float64ArrayPrototype%': typeof Float64Array === 'undefined' ? undefined : Float64Array.prototype,
		'%Function%': Function,
		'%FunctionPrototype%': Function.prototype,
		'%Generator%': generator ? getProto(generator()) : undefined,
		'%GeneratorFunction%': generatorFunction,
		'%GeneratorPrototype%': generatorFunction ? generatorFunction.prototype : undefined,
		'%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array,
		'%Int8ArrayPrototype%': typeof Int8Array === 'undefined' ? undefined : Int8Array.prototype,
		'%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array,
		'%Int16ArrayPrototype%': typeof Int16Array === 'undefined' ? undefined : Int8Array.prototype,
		'%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array,
		'%Int32ArrayPrototype%': typeof Int32Array === 'undefined' ? undefined : Int32Array.prototype,
		'%isFinite%': isFinite,
		'%isNaN%': isNaN,
		'%IteratorPrototype%': hasSymbols ? getProto(getProto([][Symbol.iterator]())) : undefined,
		'%JSON%': typeof JSON === 'object' ? JSON : undefined,
		'%JSONParse%': typeof JSON === 'object' ? JSON.parse : undefined,
		'%Map%': typeof Map === 'undefined' ? undefined : Map,
		'%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols ? undefined : getProto(new Map()[Symbol.iterator]()),
		'%MapPrototype%': typeof Map === 'undefined' ? undefined : Map.prototype,
		'%Math%': Math,
		'%Number%': Number,
		'%NumberPrototype%': Number.prototype,
		'%Object%': Object,
		'%ObjectPrototype%': Object.prototype,
		'%ObjProto_toString%': Object.prototype.toString,
		'%ObjProto_valueOf%': Object.prototype.valueOf,
		'%parseFloat%': parseFloat,
		'%parseInt%': parseInt,
		'%Promise%': typeof Promise === 'undefined' ? undefined : Promise,
		'%PromisePrototype%': typeof Promise === 'undefined' ? undefined : Promise.prototype,
		'%PromiseProto_then%': typeof Promise === 'undefined' ? undefined : Promise.prototype.then,
		'%Promise_all%': typeof Promise === 'undefined' ? undefined : Promise.all,
		'%Promise_reject%': typeof Promise === 'undefined' ? undefined : Promise.reject,
		'%Promise_resolve%': typeof Promise === 'undefined' ? undefined : Promise.resolve,
		'%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy,
		'%RangeError%': RangeError,
		'%RangeErrorPrototype%': RangeError.prototype,
		'%ReferenceError%': ReferenceError,
		'%ReferenceErrorPrototype%': ReferenceError.prototype,
		'%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect,
		'%RegExp%': RegExp,
		'%RegExpPrototype%': RegExp.prototype,
		'%Set%': typeof Set === 'undefined' ? undefined : Set,
		'%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols ? undefined : getProto(new Set()[Symbol.iterator]()),
		'%SetPrototype%': typeof Set === 'undefined' ? undefined : Set.prototype,
		'%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer,
		'%SharedArrayBufferPrototype%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer.prototype,
		'%String%': String,
		'%StringIteratorPrototype%': hasSymbols ? getProto(''[Symbol.iterator]()) : undefined,
		'%StringPrototype%': String.prototype,
		'%Symbol%': hasSymbols ? Symbol : undefined,
		'%SymbolPrototype%': hasSymbols ? Symbol.prototype : undefined,
		'%SyntaxError%': SyntaxError,
		'%SyntaxErrorPrototype%': SyntaxError.prototype,
		'%ThrowTypeError%': ThrowTypeError,
		'%TypedArray%': TypedArray,
		'%TypedArrayPrototype%': TypedArray ? TypedArray.prototype : undefined,
		'%TypeError%': $TypeError,
		'%TypeErrorPrototype%': $TypeError.prototype,
		'%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array,
		'%Uint8ArrayPrototype%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array.prototype,
		'%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray,
		'%Uint8ClampedArrayPrototype%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray.prototype,
		'%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array,
		'%Uint16ArrayPrototype%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array.prototype,
		'%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array,
		'%Uint32ArrayPrototype%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array.prototype,
		'%URIError%': URIError,
		'%URIErrorPrototype%': URIError.prototype,
		'%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap,
		'%WeakMapPrototype%': typeof WeakMap === 'undefined' ? undefined : WeakMap.prototype,
		'%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet,
		'%WeakSetPrototype%': typeof WeakSet === 'undefined' ? undefined : WeakSet.prototype
	};
	
	var bind = __webpack_require__(353);
	var $replace = bind.call(Function.call, String.prototype.replace);
	
	/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */
	var rePropName = /[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g;
	var reEscapeChar = /\\(\\)?/g; /** Used to match backslashes in property paths. */
	var stringToPath = function stringToPath(string) {
		var result = [];
		$replace(string, rePropName, function (match, number, quote, subString) {
			result[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : (number || match);
		});
		return result;
	};
	/* end adaptation */
	
	var getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) {
		if (!(name in INTRINSICS)) {
			throw new SyntaxError('intrinsic ' + name + ' does not exist!');
		}
	
		// istanbul ignore if // hopefully this is impossible to test :-)
		if (typeof INTRINSICS[name] === 'undefined' && !allowMissing) {
			throw new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');
		}
	
		return INTRINSICS[name];
	};
	
	module.exports = function GetIntrinsic(name, allowMissing) {
		if (typeof name !== 'string' || name.length === 0) {
			throw new TypeError('intrinsic name must be a non-empty string');
		}
		if (arguments.length > 1 && typeof allowMissing !== 'boolean') {
			throw new TypeError('"allowMissing" argument must be a boolean');
		}
	
		var parts = stringToPath(name);
	
		var value = getBaseIntrinsic('%' + (parts.length > 0 ? parts[0] : '') + '%', allowMissing);
		for (var i = 1; i < parts.length; i += 1) {
			if (value != null) {
				if ($gOPD && (i + 1) >= parts.length) {
					var desc = $gOPD(value, parts[i]);
					if (!allowMissing && !(parts[i] in value)) {
						throw new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.');
					}
					value = desc ? (desc.get || desc.value) : value[parts[i]];
				} else {
					value = value[parts[i]];
				}
			}
		}
		return value;
	};
	
	/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(27)))

/***/ }),
/* 972 */
/***/ (function(module, exports) {

	"use strict";
	
	// eslint-disable-next-line no-empty-function
	module.exports = function () {};


/***/ }),
/* 973 */
/***/ (function(module, exports, __webpack_require__) {

	"use strict";
	
	module.exports = __webpack_require__(974)() ? Object.assign : __webpack_require__(975);


/***/ }),
/* 974 */
/***/ (function(module, exports) {

	"use strict";
	
	module.exports = function () {
		var assign = Object.assign, obj;
		if (typeof assign !== "function") return false;
		obj = { foo: "raz" };
		assign(obj, { bar: "dwa" }, { trzy: "trzy" });
		return obj.foo + obj.bar + obj.trzy === "razdwatrzy";
	};


/***/ }),
/* 975 */
/***/ (function(module, exports, __webpack_require__) {

	"use strict";
	
	var keys  = __webpack_require__(976)
	  , value = __webpack_require__(981)
	  , max   = Math.max;
	
	module.exports = function (dest, src/*, …srcn*/) {
		var error, i, length = max(arguments.length, 2), assign;
		dest = Object(value(dest));
		assign = function (key) {
			try {
				dest[key] = src[key];
			} catch (e) {
				if (!error) error = e;
			}
		};
		for (i = 1; i < length; ++i) {
			src = arguments[i];
			keys(src).forEach(assign);
		}
		if (error !== undefined) throw error;
		return dest;
	};


/***/ }),
/* 976 */
/***/ (function(module, exports, __webpack_require__) {

	"use strict";
	
	module.exports = __webpack_require__(977)() ? Object.keys : __webpack_require__(978);


/***/ }),
/* 977 */
/***/ (function(module, exports) {

	"use strict";
	
	module.exports = function () {
		try {
			Object.keys("primitive");
			return true;
		} catch (e) {
			return false;
		}
	};


/***/ }),
/* 978 */
/***/ (function(module, exports, __webpack_require__) {

	"use strict";
	
	var isValue = __webpack_require__(221);
	
	var keys = Object.keys;
	
	module.exports = function (object) { return keys(isValue(object) ? Object(object) : object); };


/***/ }),
/* 979 */
/***/ (function(module, exports, __webpack_require__) {

	"use strict";
	
	var isValue = __webpack_require__(221);
	
	var forEach = Array.prototype.forEach, create = Object.create;
	
	var process = function (src, obj) {
		var key;
		for (key in src) obj[key] = src[key];
	};
	
	// eslint-disable-next-line no-unused-vars
	module.exports = function (opts1/*, …options*/) {
		var result = create(null);
		forEach.call(arguments, function (options) {
			if (!isValue(options)) return;
			process(Object(options), result);
		});
		return result;
	};


/***/ }),
/* 980 */
/***/ (function(module, exports) {

	"use strict";
	
	module.exports = function (fn) {
		if (typeof fn !== "function") throw new TypeError(fn + " is not a function");
		return fn;
	};


/***/ }),
/* 981 */
/***/ (function(module, exports, __webpack_require__) {

	"use strict";
	
	var isValue = __webpack_require__(221);
	
	module.exports = function (value) {
		if (!isValue(value)) throw new TypeError("Cannot use null or undefined");
		return value;
	};


/***/ }),
/* 982 */
/***/ (function(module, exports, __webpack_require__) {

	"use strict";
	
	module.exports = __webpack_require__(983)() ? String.prototype.contains : __webpack_require__(984);


/***/ }),
/* 983 */
/***/ (function(module, exports) {

	"use strict";
	
	var str = "razdwatrzy";
	
	module.exports = function () {
		if (typeof str.contains !== "function") return false;
		return str.contains("dwa") === true && str.contains("foo") === false;
	};


/***/ }),
/* 984 */
/***/ (function(module, exports) {

	"use strict";
	
	var indexOf = String.prototype.indexOf;
	
	module.exports = function (searchString/*, position*/) {
		return indexOf.call(this, searchString, arguments[1]) > -1;
	};


/***/ }),
/* 985 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	var d        = __webpack_require__(968)
	  , callable = __webpack_require__(980)
	
	  , apply = Function.prototype.apply, call = Function.prototype.call
	  , create = Object.create, defineProperty = Object.defineProperty
	  , defineProperties = Object.defineProperties
	  , hasOwnProperty = Object.prototype.hasOwnProperty
	  , descriptor = { configurable: true, enumerable: false, writable: true }
	
	  , on, once, off, emit, methods, descriptors, base;
	
	on = function (type, listener) {
		var data;
	
		callable(listener);
	
		if (!hasOwnProperty.call(this, '__ee__')) {
			data = descriptor.value = create(null);
			defineProperty(this, '__ee__', descriptor);
			descriptor.value = null;
		} else {
			data = this.__ee__;
		}
		if (!data[type]) data[type] = listener;
		else if (typeof data[type] === 'object') data[type].push(listener);
		else data[type] = [data[type], listener];
	
		return this;
	};
	
	once = function (type, listener) {
		var once, self;
	
		callable(listener);
		self = this;
		on.call(this, type, once = function () {
			off.call(self, type, once);
			apply.call(listener, this, arguments);
		});
	
		once.__eeOnceListener__ = listener;
		return this;
	};
	
	off = function (type, listener) {
		var data, listeners, candidate, i;
	
		callable(listener);
	
		if (!hasOwnProperty.call(this, '__ee__')) return this;
		data = this.__ee__;
		if (!data[type]) return this;
		listeners = data[type];
	
		if (typeof listeners === 'object') {
			for (i = 0; (candidate = listeners[i]); ++i) {
				if ((candidate === listener) ||
						(candidate.__eeOnceListener__ === listener)) {
					if (listeners.length === 2) data[type] = listeners[i ? 0 : 1];
					else listeners.splice(i, 1);
				}
			}
		} else {
			if ((listeners === listener) ||
					(listeners.__eeOnceListener__ === listener)) {
				delete data[type];
			}
		}
	
		return this;
	};
	
	emit = function (type) {
		var i, l, listener, listeners, args;
	
		if (!hasOwnProperty.call(this, '__ee__')) return;
		listeners = this.__ee__[type];
		if (!listeners) return;
	
		if (typeof listeners === 'object') {
			l = arguments.length;
			args = new Array(l - 1);
			for (i = 1; i < l; ++i) args[i - 1] = arguments[i];
	
			listeners = listeners.slice();
			for (i = 0; (listener = listeners[i]); ++i) {
				apply.call(listener, this, args);
			}
		} else {
			switch (arguments.length) {
			case 1:
				call.call(listeners, this);
				break;
			case 2:
				call.call(listeners, this, arguments[1]);
				break;
			case 3:
				call.call(listeners, this, arguments[1], arguments[2]);
				break;
			default:
				l = arguments.length;
				args = new Array(l - 1);
				for (i = 1; i < l; ++i) {
					args[i - 1] = arguments[i];
				}
				apply.call(listeners, this, args);
			}
		}
	};
	
	methods = {
		on: on,
		once: once,
		off: off,
		emit: emit
	};
	
	descriptors = {
		on: d(on),
		once: d(once),
		off: d(off),
		emit: d(emit)
	};
	
	base = defineProperties({}, descriptors);
	
	module.exports = exports = function (o) {
		return (o == null) ? create(base) : defineProperties(Object(o), descriptors);
	};
	exports.methods = methods;


/***/ }),
/* 986 */
/***/ (function(module, exports, __webpack_require__) {

	var __WEBPACK_AMD_DEFINE_RESULT__;/* FileSaver.js
	 * A saveAs() FileSaver implementation.
	 * 1.3.2
	 * 2016-06-16 18:25:19
	 *
	 * By Eli Grey, http://eligrey.com
	 * License: MIT
	 *   See https://github.com/eligrey/FileSaver.js/blob/master/LICENSE.md
	 */
	
	/*global self */
	/*jslint bitwise: true, indent: 4, laxbreak: true, laxcomma: true, smarttabs: true, plusplus: true */
	
	/*! @source http://purl.eligrey.com/github/FileSaver.js/blob/master/FileSaver.js */
	
	var saveAs = saveAs || (function(view) {
		"use strict";
		// IE <10 is explicitly unsupported
		if (typeof view === "undefined" || typeof navigator !== "undefined" && /MSIE [1-9]\./.test(navigator.userAgent)) {
			return;
		}
		var
			  doc = view.document
			  // only get URL when necessary in case Blob.js hasn't overridden it yet
			, get_URL = function() {
				return view.URL || view.webkitURL || view;
			}
			, save_link = doc.createElementNS("http://www.w3.org/1999/xhtml", "a")
			, can_use_save_link = "download" in save_link
			, click = function(node) {
				var event = new MouseEvent("click");
				node.dispatchEvent(event);
			}
			, is_safari = /constructor/i.test(view.HTMLElement) || view.safari
			, is_chrome_ios =/CriOS\/[\d]+/.test(navigator.userAgent)
			, throw_outside = function(ex) {
				(view.setImmediate || view.setTimeout)(function() {
					throw ex;
				}, 0);
			}
			, force_saveable_type = "application/octet-stream"
			// the Blob API is fundamentally broken as there is no "downloadfinished" event to subscribe to
			, arbitrary_revoke_timeout = 1000 * 40 // in ms
			, revoke = function(file) {
				var revoker = function() {
					if (typeof file === "string") { // file is an object URL
						get_URL().revokeObjectURL(file);
					} else { // file is a File
						file.remove();
					}
				};
				setTimeout(revoker, arbitrary_revoke_timeout);
			}
			, dispatch = function(filesaver, event_types, event) {
				event_types = [].concat(event_types);
				var i = event_types.length;
				while (i--) {
					var listener = filesaver["on" + event_types[i]];
					if (typeof listener === "function") {
						try {
							listener.call(filesaver, event || filesaver);
						} catch (ex) {
							throw_outside(ex);
						}
					}
				}
			}
			, auto_bom = function(blob) {
				// prepend BOM for UTF-8 XML and text/* types (including HTML)
				// note: your browser will automatically convert UTF-16 U+FEFF to EF BB BF
				if (/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(blob.type)) {
					return new Blob([String.fromCharCode(0xFEFF), blob], {type: blob.type});
				}
				return blob;
			}
			, FileSaver = function(blob, name, no_auto_bom) {
				if (!no_auto_bom) {
					blob = auto_bom(blob);
				}
				// First try a.download, then web filesystem, then object URLs
				var
					  filesaver = this
					, type = blob.type
					, force = type === force_saveable_type
					, object_url
					, dispatch_all = function() {
						dispatch(filesaver, "writestart progress write writeend".split(" "));
					}
					// on any filesys errors revert to saving with object URLs
					, fs_error = function() {
						if ((is_chrome_ios || (force && is_safari)) && view.FileReader) {
							// Safari doesn't allow downloading of blob urls
							var reader = new FileReader();
							reader.onloadend = function() {
								var url = is_chrome_ios ? reader.result : reader.result.replace(/^data:[^;]*;/, 'data:attachment/file;');
								var popup = view.open(url, '_blank');
								if(!popup) view.location.href = url;
								url=undefined; // release reference before dispatching
								filesaver.readyState = filesaver.DONE;
								dispatch_all();
							};
							reader.readAsDataURL(blob);
							filesaver.readyState = filesaver.INIT;
							return;
						}
						// don't create more object URLs than needed
						if (!object_url) {
							object_url = get_URL().createObjectURL(blob);
						}
						if (force) {
							view.location.href = object_url;
						} else {
							var opened = view.open(object_url, "_blank");
							if (!opened) {
								// Apple does not allow window.open, see https://developer.apple.com/library/safari/documentation/Tools/Conceptual/SafariExtensionGuide/WorkingwithWindowsandTabs/WorkingwithWindowsandTabs.html
								view.location.href = object_url;
							}
						}
						filesaver.readyState = filesaver.DONE;
						dispatch_all();
						revoke(object_url);
					}
				;
				filesaver.readyState = filesaver.INIT;
	
				if (can_use_save_link) {
					object_url = get_URL().createObjectURL(blob);
					setTimeout(function() {
						save_link.href = object_url;
						save_link.download = name;
						click(save_link);
						dispatch_all();
						revoke(object_url);
						filesaver.readyState = filesaver.DONE;
					});
					return;
				}
	
				fs_error();
			}
			, FS_proto = FileSaver.prototype
			, saveAs = function(blob, name, no_auto_bom) {
				return new FileSaver(blob, name || blob.name || "download", no_auto_bom);
			}
		;
		// IE 10+ (native saveAs)
		if (typeof navigator !== "undefined" && navigator.msSaveOrOpenBlob) {
			return function(blob, name, no_auto_bom) {
				name = name || blob.name || "download";
	
				if (!no_auto_bom) {
					blob = auto_bom(blob);
				}
				return navigator.msSaveOrOpenBlob(blob, name);
			};
		}
	
		FS_proto.abort = function(){};
		FS_proto.readyState = FS_proto.INIT = 0;
		FS_proto.WRITING = 1;
		FS_proto.DONE = 2;
	
		FS_proto.error =
		FS_proto.onwritestart =
		FS_proto.onprogress =
		FS_proto.onwrite =
		FS_proto.onabort =
		FS_proto.onerror =
		FS_proto.onwriteend =
			null;
	
		return saveAs;
	}(
		   typeof self !== "undefined" && self
		|| typeof window !== "undefined" && window
		|| this.content
	));
	// `self` is undefined in Firefox for Android content script context
	// while `this` is nsIContentFrameMessageManager
	// with an attribute `content` that corresponds to the window
	
	if (typeof module !== "undefined" && module.exports) {
	  module.exports.saveAs = saveAs;
	} else if (("function" !== "undefined" && __webpack_require__(1162) !== null) && (__webpack_require__(1163) !== null)) {
	  !(__WEBPACK_AMD_DEFINE_RESULT__ = function() {
	    return saveAs;
	  }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
	}


/***/ }),
/* 987 */
/***/ (function(module, exports, __webpack_require__) {

	__webpack_require__(1108);


/***/ }),
/* 988 */
/***/ (function(module, exports) {

	'use strict';
	
	/* eslint no-invalid-this: 1 */
	
	var ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';
	var slice = Array.prototype.slice;
	var toStr = Object.prototype.toString;
	var funcType = '[object Function]';
	
	module.exports = function bind(that) {
	    var target = this;
	    if (typeof target !== 'function' || toStr.call(target) !== funcType) {
	        throw new TypeError(ERROR_MESSAGE + target);
	    }
	    var args = slice.call(arguments, 1);
	
	    var bound;
	    var binder = function () {
	        if (this instanceof bound) {
	            var result = target.apply(
	                this,
	                args.concat(slice.call(arguments))
	            );
	            if (Object(result) === result) {
	                return result;
	            }
	            return this;
	        } else {
	            return target.apply(
	                that,
	                args.concat(slice.call(arguments))
	            );
	        }
	    };
	
	    var boundLength = Math.max(0, target.length - args.length);
	    var boundArgs = [];
	    for (var i = 0; i < boundLength; i++) {
	        boundArgs.push('$' + i);
	    }
	
	    bound = Function('binder', 'return function (' + boundArgs.join(',') + '){ return binder.apply(this,arguments); }')(binder);
	
	    if (target.prototype) {
	        var Empty = function Empty() {};
	        Empty.prototype = target.prototype;
	        bound.prototype = new Empty();
	        Empty.prototype = null;
	    }
	
	    return bound;
	};


/***/ }),
/* 989 */
/***/ (function(module, exports, __webpack_require__) {

	var Handlebars = __webpack_require__(5);
	function __default(obj) { return obj && (obj.__esModule ? obj["default"] : obj); }
	module.exports = (Handlebars["default"] || Handlebars).template({"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) {
	    var helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3="function", alias4=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return "<a class=\"export-wms-link\" title=\"Open as new tab\" data-layer=\""
	    + alias4(((helper = (helper = lookupProperty(helpers,"id") || (depth0 != null ? lookupProperty(depth0,"id") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"id","hash":{},"data":data,"loc":{"start":{"line":1,"column":63},"end":{"line":1,"column":69}}}) : helper)))
	    + "\" href=\"#\" target=\"_blank\"><i class=\"fa fa-external-link\"></i> "
	    + alias4(((helper = (helper = lookupProperty(helpers,"name") || (depth0 != null ? lookupProperty(depth0,"name") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"name","hash":{},"data":data,"loc":{"start":{"line":1,"column":132},"end":{"line":1,"column":140}}}) : helper)))
	    + "</a>\n";
	},"useData":true});

/***/ }),
/* 990 */
/***/ (function(module, exports, __webpack_require__) {

	var Handlebars = __webpack_require__(5);
	function __default(obj) { return obj && (obj.__esModule ? obj["default"] : obj); }
	module.exports = (Handlebars["default"] || Handlebars).template({"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) {
	    var helper, lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return "<button type=\"button\" title=\""
	    + container.escapeExpression(((helper = (helper = lookupProperty(helpers,"buttonTitle") || (depth0 != null ? lookupProperty(depth0,"buttonTitle") : depth0)) != null ? helper : container.hooks.helperMissing),(typeof helper === "function" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{"name":"buttonTitle","hash":{},"data":data,"loc":{"start":{"line":1,"column":29},"end":{"line":1,"column":44}}}) : helper)))
	    + "\" class=\"dropdown-toggle\" data-toggle=\"dropdown\">\n  <span><i style=\"font-size:0.8em;\" class=\"fa fa-map-o\"></i></span>\n</button>\n<ul class=\"dropdown-menu export-wms-list\"></ul>\n";
	},"useData":true});

/***/ }),
/* 991 */
/***/ (function(module, exports, __webpack_require__) {

	var Handlebars = __webpack_require__(5);
	function __default(obj) { return obj && (obj.__esModule ? obj["default"] : obj); }
	module.exports = (Handlebars["default"] || Handlebars).template({"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) {
	    return "<div class=\"progress-bar\"></div>\n<div class=\"export-tools dropup ol-control\"></div>\n";
	},"useData":true});

/***/ }),
/* 992 */
/***/ (function(module, exports, __webpack_require__) {

	var Handlebars = __webpack_require__(5);
	function __default(obj) { return obj && (obj.__esModule ? obj["default"] : obj); }
	module.exports = (Handlebars["default"] || Handlebars).template({"1":function(container,depth0,helpers,partials,data) {
	    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return "    <div class=\"modal-footer\">\n      <span class=\"buttons\">\n"
	    + ((stack1 = lookupProperty(helpers,"each").call(alias1,(depth0 != null ? lookupProperty(depth0,"buttons") : depth0),{"name":"each","hash":{},"fn":container.program(2, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":11,"column":6},"end":{"line":13,"column":15}}})) != null ? stack1 : "")
	    + "      </span>\n      <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\">"
	    + container.escapeExpression(__default(__webpack_require__(1)).call(alias1,"Close",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":15,"column":73},"end":{"line":15,"column":87}}}))
	    + "</button>\n    </div>\n";
	},"2":function(container,depth0,helpers,partials,data) {
	    return "        <button type=\"button\" class=\"btn btn-default\">"
	    + container.escapeExpression(container.lambda(depth0, depth0))
	    + "</button>\n";
	},"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) {
	    var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return "<div class=\"modal-dialog modal-lg\" role=\"document\">\n  <div class=\"modal-content\">\n    <div class=\"modal-header\">\n      <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\"><span aria-hidden=\"true\">&times;</span></button>\n      <h4 class=\"modal-title\">"
	    + container.escapeExpression(container.lambda((depth0 != null ? lookupProperty(depth0,"title") : depth0), depth0))
	    + "</h4>\n    </div>\n    <div class=\"modal-body\"></div>\n"
	    + ((stack1 = lookupProperty(helpers,"if").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,"hasButtons") : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":8,"column":4},"end":{"line":17,"column":11}}})) != null ? stack1 : "")
	    + "  </div>\n</div>\n";
	},"useData":true});

/***/ }),
/* 993 */
/***/ (function(module, exports, __webpack_require__) {

	var Handlebars = __webpack_require__(5);
	function __default(obj) { return obj && (obj.__esModule ? obj["default"] : obj); }
	module.exports = (Handlebars["default"] || Handlebars).template({"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) {
	    var alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return "<a href=\"#\">\n  <img src=\""
	    + alias2(alias1((depth0 != null ? lookupProperty(depth0,"thumbnailUrl") : depth0), depth0))
	    + "\" alt=\""
	    + alias2(__default(__webpack_require__(1)).call(depth0 != null ? depth0 : (container.nullContext || {}),"trying to download thumbnail",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":2,"column":35},"end":{"line":2,"column":72}}}))
	    + "\">\n</a>\n<div>"
	    + alias2(alias1((depth0 != null ? lookupProperty(depth0,"date") : depth0), depth0))
	    + "<br/>"
	    + alias2(alias1((depth0 != null ? lookupProperty(depth0,"time") : depth0), depth0))
	    + "</div>\n<button class=\"btn btn-default btn-xs record-info\">\n  <i class=\"fa fa-info-circle\" aria-hidden=\"true\"></i>\n</button>\n";
	},"useData":true});

/***/ }),
/* 994 */
/***/ (function(module, exports, __webpack_require__) {

	var Handlebars = __webpack_require__(5);
	function __default(obj) { return obj && (obj.__esModule ? obj["default"] : obj); }
	module.exports = (Handlebars["default"] || Handlebars).template({"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) {
	    return container.escapeExpression(__default(__webpack_require__(1)).call(depth0 != null ? depth0 : (container.nullContext || {}),"No thumbnail available",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":30}}}))
	    + "\n";
	},"useData":true});

/***/ }),
/* 995 */
/***/ (function(module, exports, __webpack_require__) {

	var Handlebars = __webpack_require__(5);
	function __default(obj) { return obj && (obj.__esModule ? obj["default"] : obj); }
	module.exports = (Handlebars["default"] || Handlebars).template({"1":function(container,depth0,helpers,partials,data) {
	    return "checked";
	},"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) {
	    var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return "<div class=\"histogram-switch\" id=\"dynamic-histogram\" title=\""
	    + container.escapeExpression(((helper = (helper = lookupProperty(helpers,"dynamic-histogram-title") || (depth0 != null ? lookupProperty(depth0,"dynamic-histogram-title") : depth0)) != null ? helper : container.hooks.helperMissing),(typeof helper === "function" ? helper.call(alias1,{"name":"dynamic-histogram-title","hash":{},"data":data,"loc":{"start":{"line":1,"column":60},"end":{"line":1,"column":87}}}) : helper)))
	    + "\" aria-hidden=\"true\">\n  <label class=\"panel-title\">\n    <input type=\"checkbox\" name=\"\" "
	    + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"enableDynamicHistogram") : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":3,"column":35},"end":{"line":3,"column":79}}})) != null ? stack1 : "")
	    + ">\n    <span></span>\n  </label>\n</div>\n<!-- \n<div id=\"dynamic-histogram\" class=\"control ${this.enableDynamicHistogram === true ? 'active' : ''}\" title=\"${i18next.t('dynamic-histogram-title')}\"><i class=\"fa fa-map-marker\" aria-hidden=\"true\"></i></div> -->";
	},"useData":true});

/***/ }),
/* 996 */
/***/ (function(module, exports, __webpack_require__) {

	var Handlebars = __webpack_require__(5);
	function __default(obj) { return obj && (obj.__esModule ? obj["default"] : obj); }
	module.exports = (Handlebars["default"] || Handlebars).template({"1":function(container,depth0,helpers,partials,data) {
	    return "  <div class=\"panel panel-default\">\n    <div class=\"panel-heading\">\n      <h3 class=\"panel-title\">"
	    + container.escapeExpression(__default(__webpack_require__(1)).call(depth0 != null ? depth0 : (container.nullContext || {}),"Overlays",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":4,"column":30},"end":{"line":4,"column":46}}}))
	    + "</h3>\n    </div>\n    <div class=\"panel-body\">\n      <div class=\"overlayLayers\"></div>\n    </div>\n  </div>\n";
	},"3":function(container,depth0,helpers,partials,data) {
	    return "  <div class=\"panel panel-default\">\n    <div class=\"panel-heading\">\n      <h3 class=\"panel-title\">"
	    + container.escapeExpression(__default(__webpack_require__(1)).call(depth0 != null ? depth0 : (container.nullContext || {}),"Layers",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":14,"column":30},"end":{"line":14,"column":44}}}))
	    + "</h3>\n    </div>\n    <div class=\"panel-body\">\n      <div class=\"layers\"></div>\n    </div>\n  </div>\n";
	},"5":function(container,depth0,helpers,partials,data) {
	    return "  <div class=\"panel panel-default\">\n    <div class=\"panel-heading\">\n      <h3 class=\"panel-title\">"
	    + container.escapeExpression(__default(__webpack_require__(1)).call(depth0 != null ? depth0 : (container.nullContext || {}),"Base Layers",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":24,"column":30},"end":{"line":24,"column":49}}}))
	    + "</h3>\n    </div>\n    <div class=\"panel-body\">\n      <div class=\"baseLayers\"></div>\n    </div>\n  </div>\n";
	},"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) {
	    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"overlayLayersCollection") : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":1,"column":0},"end":{"line":10,"column":7}}})) != null ? stack1 : "")
	    + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"layersCollection") : depth0),{"name":"if","hash":{},"fn":container.program(3, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":11,"column":0},"end":{"line":20,"column":7}}})) != null ? stack1 : "")
	    + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"baseLayersCollection") : depth0),{"name":"if","hash":{},"fn":container.program(5, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":21,"column":0},"end":{"line":30,"column":7}}})) != null ? stack1 : "");
	},"useData":true});

/***/ }),
/* 997 */
/***/ (function(module, exports, __webpack_require__) {

	var Handlebars = __webpack_require__(5);
	function __default(obj) { return obj && (obj.__esModule ? obj["default"] : obj); }
	module.exports = (Handlebars["default"] || Handlebars).template({"1":function(container,depth0,helpers,partials,data) {
	    var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3="function", alias4=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return "<div class=\"input-group\" id=\"layer-item-"
	    + alias4(((helper = (helper = lookupProperty(helpers,"id") || (depth0 != null ? lookupProperty(depth0,"id") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"id","hash":{},"data":data,"loc":{"start":{"line":2,"column":40},"end":{"line":2,"column":46}}}) : helper)))
	    + "\">\n  <span class=\"input-group-addon\">\n    <input type=\"checkbox\" id=\""
	    + alias4(((helper = (helper = lookupProperty(helpers,"id") || (depth0 != null ? lookupProperty(depth0,"id") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"id","hash":{},"data":data,"loc":{"start":{"line":4,"column":31},"end":{"line":4,"column":37}}}) : helper)))
	    + "-visible\" class=\"layer-visible\" "
	    + ((stack1 = lookupProperty(helpers,"if").call(alias1,((stack1 = (depth0 != null ? lookupProperty(depth0,"display") : depth0)) != null ? lookupProperty(stack1,"visible") : stack1),{"name":"if","hash":{},"fn":container.program(2, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":4,"column":69},"end":{"line":4,"column":116}}})) != null ? stack1 : "")
	    + "/><label for=\""
	    + alias4(((helper = (helper = lookupProperty(helpers,"id") || (depth0 != null ? lookupProperty(depth0,"id") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"id","hash":{},"data":data,"loc":{"start":{"line":4,"column":130},"end":{"line":4,"column":136}}}) : helper)))
	    + "-visible\"><span></span></label>\n  </span>\n  <span class=\"form-control display-name\">\n"
	    + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"link") : depth0),{"name":"if","hash":{},"fn":container.program(4, data, 0),"inverse":container.program(6, data, 0),"data":data,"loc":{"start":{"line":7,"column":4},"end":{"line":11,"column":11}}})) != null ? stack1 : "")
	    + "  </span>\n  <span class=\"input-group-addon\">\n    <i class=\"fa fa-sort\"></i>\n    <i class=\"fa fa-square\" style=\"color: "
	    + alias4(((helper = (helper = lookupProperty(helpers,"displayColor") || (depth0 != null ? lookupProperty(depth0,"displayColor") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"displayColor","hash":{},"data":data,"loc":{"start":{"line":15,"column":42},"end":{"line":15,"column":58}}}) : helper)))
	    + "\"></i>\n"
	    + ((stack1 = lookupProperty(helpers,"if").call(alias1,((stack1 = (depth0 != null ? lookupProperty(depth0,"display") : depth0)) != null ? lookupProperty(stack1,"extraDownloadIcon") : stack1),{"name":"if","hash":{},"fn":container.program(8, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":16,"column":4},"end":{"line":18,"column":11}}})) != null ? stack1 : "")
	    + ((stack1 = lookupProperty(helpers,"if").call(alias1,((stack1 = (depth0 != null ? lookupProperty(depth0,"display") : depth0)) != null ? lookupProperty(stack1,"options") : stack1),{"name":"if","hash":{},"fn":container.program(10, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":19,"column":4},"end":{"line":23,"column":11}}})) != null ? stack1 : "")
	    + ((stack1 = lookupProperty(helpers,"if").call(alias1,((stack1 = (depth0 != null ? lookupProperty(depth0,"display") : depth0)) != null ? lookupProperty(stack1,"options") : stack1),{"name":"if","hash":{},"fn":container.program(13, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":24,"column":4},"end":{"line":28,"column":11}}})) != null ? stack1 : "")
	    + ((stack1 = lookupProperty(helpers,"unless").call(alias1,((stack1 = (depth0 != null ? lookupProperty(depth0,"display") : depth0)) != null ? lookupProperty(stack1,"options") : stack1),{"name":"unless","hash":{},"fn":container.program(10, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":29,"column":4},"end":{"line":33,"column":15}}})) != null ? stack1 : "")
	    + ((stack1 = lookupProperty(helpers,"unless").call(alias1,((stack1 = (depth0 != null ? lookupProperty(depth0,"display") : depth0)) != null ? lookupProperty(stack1,"options") : stack1),{"name":"unless","hash":{},"fn":container.program(15, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":34,"column":4},"end":{"line":38,"column":15}}})) != null ? stack1 : "")
	    + "  </span>\n</div>\n";
	},"2":function(container,depth0,helpers,partials,data) {
	    return "checked=\"checked\"";
	},"4":function(container,depth0,helpers,partials,data) {
	    var helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3="function", alias4=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return "      <a href=\""
	    + alias4(((helper = (helper = lookupProperty(helpers,"link") || (depth0 != null ? lookupProperty(depth0,"link") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"link","hash":{},"data":data,"loc":{"start":{"line":8,"column":15},"end":{"line":8,"column":23}}}) : helper)))
	    + "\" target=\"_blank\">"
	    + alias4(((helper = (helper = lookupProperty(helpers,"displayName") || (depth0 != null ? lookupProperty(depth0,"displayName") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"displayName","hash":{},"data":data,"loc":{"start":{"line":8,"column":41},"end":{"line":8,"column":56}}}) : helper)))
	    + "</a>\n";
	},"6":function(container,depth0,helpers,partials,data) {
	    var helper, lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return "      "
	    + container.escapeExpression(((helper = (helper = lookupProperty(helpers,"displayName") || (depth0 != null ? lookupProperty(depth0,"displayName") : depth0)) != null ? helper : container.hooks.helperMissing),(typeof helper === "function" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{"name":"displayName","hash":{},"data":data,"loc":{"start":{"line":10,"column":6},"end":{"line":10,"column":21}}}) : helper)))
	    + "\n";
	},"8":function(container,depth0,helpers,partials,data) {
	    return "      <i class=\"fa fa-arrow-down layer-download-full-resolution\"></i>\n";
	},"10":function(container,depth0,helpers,partials,data) {
	    var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return ((stack1 = lookupProperty(helpers,"if").call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? lookupProperty(depth0,"display") : depth0)) != null ? lookupProperty(stack1,"legendUrl") : stack1),{"name":"if","hash":{},"fn":container.program(11, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":20,"column":6},"end":{"line":22,"column":13}}})) != null ? stack1 : "");
	},"11":function(container,depth0,helpers,partials,data) {
	    return "        <i class=\"fa fa-paint-brush layer-show-options\"></i>\n";
	},"13":function(container,depth0,helpers,partials,data) {
	    var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return ((stack1 = lookupProperty(helpers,"unless").call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? lookupProperty(depth0,"display") : depth0)) != null ? lookupProperty(stack1,"legendUrl") : stack1),{"name":"unless","hash":{},"fn":container.program(11, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":25,"column":6},"end":{"line":27,"column":17}}})) != null ? stack1 : "");
	},"15":function(container,depth0,helpers,partials,data) {
	    var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return ((stack1 = lookupProperty(helpers,"unless").call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? lookupProperty(depth0,"display") : depth0)) != null ? lookupProperty(stack1,"legendUrl") : stack1),{"name":"unless","hash":{},"fn":container.program(16, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":35,"column":6},"end":{"line":37,"column":17}}})) != null ? stack1 : "");
	},"16":function(container,depth0,helpers,partials,data) {
	    return "        <i class=\"fa fa-adjust layer-adjust-opacity\" data-toggle=\"popover\"></i>\n";
	},"18":function(container,depth0,helpers,partials,data) {
	    var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return ((stack1 = lookupProperty(helpers,"if").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,"singleChoice") : depth0),{"name":"if","hash":{},"fn":container.program(19, data, 0),"inverse":container.program(21, data, 0),"data":data,"loc":{"start":{"line":42,"column":2},"end":{"line":56,"column":9}}})) != null ? stack1 : "");
	},"19":function(container,depth0,helpers,partials,data) {
	    var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3="function", alias4=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return "  <div class=\"radio\">\n    <label for=\""
	    + alias4(((helper = (helper = lookupProperty(helpers,"id") || (depth0 != null ? lookupProperty(depth0,"id") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"id","hash":{},"data":data,"loc":{"start":{"line":44,"column":16},"end":{"line":44,"column":22}}}) : helper)))
	    + "-visible\">\n      <input type=\"radio\" id=\""
	    + alias4(((helper = (helper = lookupProperty(helpers,"id") || (depth0 != null ? lookupProperty(depth0,"id") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"id","hash":{},"data":data,"loc":{"start":{"line":45,"column":30},"end":{"line":45,"column":36}}}) : helper)))
	    + "-visible\" class=\"layer-visible\" name=\"singleChoice\" "
	    + ((stack1 = lookupProperty(helpers,"if").call(alias1,((stack1 = (depth0 != null ? lookupProperty(depth0,"display") : depth0)) != null ? lookupProperty(stack1,"visible") : stack1),{"name":"if","hash":{},"fn":container.program(2, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":45,"column":88},"end":{"line":45,"column":135}}})) != null ? stack1 : "")
	    + "/><span></span>\n      "
	    + alias4(((helper = (helper = lookupProperty(helpers,"displayName") || (depth0 != null ? lookupProperty(depth0,"displayName") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"displayName","hash":{},"data":data,"loc":{"start":{"line":46,"column":6},"end":{"line":46,"column":21}}}) : helper)))
	    + "\n    </label>\n  </div>\n";
	},"21":function(container,depth0,helpers,partials,data) {
	    var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3="function", alias4=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return "  <div class=\"checkbox\">\n    <label for=\""
	    + alias4(((helper = (helper = lookupProperty(helpers,"id") || (depth0 != null ? lookupProperty(depth0,"id") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"id","hash":{},"data":data,"loc":{"start":{"line":51,"column":16},"end":{"line":51,"column":22}}}) : helper)))
	    + "-visible\">\n      <input type=\"checkbox\" id=\""
	    + alias4(((helper = (helper = lookupProperty(helpers,"id") || (depth0 != null ? lookupProperty(depth0,"id") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"id","hash":{},"data":data,"loc":{"start":{"line":52,"column":33},"end":{"line":52,"column":39}}}) : helper)))
	    + "-visible\" class=\"layer-visible\" name=\"multipleChoice\" "
	    + ((stack1 = lookupProperty(helpers,"if").call(alias1,((stack1 = (depth0 != null ? lookupProperty(depth0,"display") : depth0)) != null ? lookupProperty(stack1,"visible") : stack1),{"name":"if","hash":{},"fn":container.program(2, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":52,"column":93},"end":{"line":52,"column":140}}})) != null ? stack1 : "")
	    + "/><span></span>\n      "
	    + alias4(((helper = (helper = lookupProperty(helpers,"displayName") || (depth0 != null ? lookupProperty(depth0,"displayName") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"displayName","hash":{},"data":data,"loc":{"start":{"line":53,"column":6},"end":{"line":53,"column":21}}}) : helper)))
	    + "\n    </label>\n  </div>\n";
	},"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) {
	    var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return ((stack1 = lookupProperty(helpers,"if").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,"fullDisplay") : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.program(18, data, 0),"data":data,"loc":{"start":{"line":1,"column":0},"end":{"line":57,"column":7}}})) != null ? stack1 : "");
	},"useData":true});

/***/ }),
/* 998 */
/***/ (function(module, exports, __webpack_require__) {

	var Handlebars = __webpack_require__(5);
	function __default(obj) { return obj && (obj.__esModule ? obj["default"] : obj); }
	module.exports = (Handlebars["default"] || Handlebars).template({"1":function(container,depth0,helpers,partials,data) {
	    var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return "    <div class=\"form-group\">\n"
	    + ((stack1 = lookupProperty(helpers,"if").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,"values") : depth0),{"name":"if","hash":{},"fn":container.program(2, data, 0),"inverse":container.program(16, data, 0),"data":data,"loc":{"start":{"line":10,"column":6},"end":{"line":49,"column":11}}})) != null ? stack1 : "")
	    + "    </div>\n";
	},"2":function(container,depth0,helpers,partials,data) {
	    var stack1, alias1=container.lambda, alias2=container.escapeExpression, alias3=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return "        <label for=\"visualization-selector_"
	    + alias2(alias1((depth0 != null ? lookupProperty(depth0,"counter") : depth0), depth0))
	    + "\" class=\"col-sm-2 control-label\">\n          <input type=\"radio\" id=\"visualization-selector_"
	    + alias2(alias1((depth0 != null ? lookupProperty(depth0,"counter") : depth0), depth0))
	    + "\" name=\"visualization-selector\" class=\"visualization-selector\" "
	    + ((stack1 = lookupProperty(helpers,"if").call(alias3,(depth0 != null ? lookupProperty(depth0,"isChosen") : depth0),{"name":"if","hash":{},"fn":container.program(3, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":12,"column":136},"end":{"line":12,"column":172}}})) != null ? stack1 : "")
	    + "><span>"
	    + alias2(__default(__webpack_require__(1)).call(alias3,(depth0 != null ? lookupProperty(depth0,"name") : depth0),{"name":"t","hash":{},"data":data,"loc":{"start":{"line":12,"column":179},"end":{"line":12,"column":194}}}))
	    + "</span>\n          </input>\n        </label>\n"
	    + ((stack1 = lookupProperty(helpers,"if").call(alias3,(depth0 != null ? lookupProperty(depth0,"selectThree") : depth0),{"name":"if","hash":{},"fn":container.program(5, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":15,"column":8},"end":{"line":37,"column":15}}})) != null ? stack1 : "")
	    + ((stack1 = lookupProperty(helpers,"unless").call(alias3,(depth0 != null ? lookupProperty(depth0,"selectThree") : depth0),{"name":"unless","hash":{},"fn":container.program(13, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":38,"column":6},"end":{"line":46,"column":17}}})) != null ? stack1 : "");
	},"3":function(container,depth0,helpers,partials,data) {
	    return " checked";
	},"5":function(container,depth0,helpers,partials,data) {
	    var stack1, alias1=container.lambda, alias2=container.escapeExpression, alias3=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return "          <div class=\"col-sm-4 option-row\">\n            <select class=\"form-control layer-option\" name=\""
	    + alias2(alias1((depth0 != null ? lookupProperty(depth0,"target") : depth0), depth0))
	    + "\">\n"
	    + ((stack1 = lookupProperty(helpers,"each").call(alias3,(depth0 != null ? lookupProperty(depth0,"values") : depth0),{"name":"each","hash":{},"fn":container.program(6, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":18,"column":14},"end":{"line":20,"column":23}}})) != null ? stack1 : "")
	    + "            </select>\n          </div>\n          <div class=\"col-sm-4 option-row\">\n            <select class=\"form-control layer-option\" name=\""
	    + alias2(alias1((depth0 != null ? lookupProperty(depth0,"target") : depth0), depth0))
	    + "\">\n"
	    + ((stack1 = lookupProperty(helpers,"each").call(alias3,(depth0 != null ? lookupProperty(depth0,"values") : depth0),{"name":"each","hash":{},"fn":container.program(9, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":25,"column":14},"end":{"line":27,"column":23}}})) != null ? stack1 : "")
	    + "            </select>\n          </div>\n          <div class=\"col-sm-4 option-row\">\n            <select class=\"form-control layer-option\" name=\""
	    + alias2(alias1((depth0 != null ? lookupProperty(depth0,"target") : depth0), depth0))
	    + "\">\n"
	    + ((stack1 = lookupProperty(helpers,"each").call(alias3,(depth0 != null ? lookupProperty(depth0,"values") : depth0),{"name":"each","hash":{},"fn":container.program(11, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":32,"column":14},"end":{"line":34,"column":23}}})) != null ? stack1 : "")
	    + "            </select>\n          </div>\n";
	},"6":function(container,depth0,helpers,partials,data) {
	    var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return "                <option value=\""
	    + alias2(alias1((depth0 != null ? lookupProperty(depth0,"value") : depth0), depth0))
	    + "\" "
	    + ((stack1 = lookupProperty(helpers,"if").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,"isCurrentB1") : depth0),{"name":"if","hash":{},"fn":container.program(7, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":19,"column":47},"end":{"line":19,"column":98}}})) != null ? stack1 : "")
	    + ">"
	    + alias2(alias1((depth0 != null ? lookupProperty(depth0,"label") : depth0), depth0))
	    + "</option>\n";
	},"7":function(container,depth0,helpers,partials,data) {
	    return " selected=\"selected\"";
	},"9":function(container,depth0,helpers,partials,data) {
	    var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return "                <option value=\""
	    + alias2(alias1((depth0 != null ? lookupProperty(depth0,"value") : depth0), depth0))
	    + "\" "
	    + ((stack1 = lookupProperty(helpers,"if").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,"isCurrentB2") : depth0),{"name":"if","hash":{},"fn":container.program(7, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":26,"column":47},"end":{"line":26,"column":98}}})) != null ? stack1 : "")
	    + ">"
	    + alias2(alias1((depth0 != null ? lookupProperty(depth0,"label") : depth0), depth0))
	    + "</option>\n";
	},"11":function(container,depth0,helpers,partials,data) {
	    var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return "                <option value=\""
	    + alias2(alias1((depth0 != null ? lookupProperty(depth0,"value") : depth0), depth0))
	    + "\" "
	    + ((stack1 = lookupProperty(helpers,"if").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,"isCurrentB3") : depth0),{"name":"if","hash":{},"fn":container.program(7, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":33,"column":47},"end":{"line":33,"column":98}}})) != null ? stack1 : "")
	    + ">"
	    + alias2(alias1((depth0 != null ? lookupProperty(depth0,"label") : depth0), depth0))
	    + "</option>\n";
	},"13":function(container,depth0,helpers,partials,data) {
	    var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return "        <div class=\"col-sm-10 option-row\">\n          <select class=\"form-control layer-option\" name=\""
	    + container.escapeExpression(container.lambda((depth0 != null ? lookupProperty(depth0,"target") : depth0), depth0))
	    + "\">\n"
	    + ((stack1 = lookupProperty(helpers,"each").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,"values") : depth0),{"name":"each","hash":{},"fn":container.program(14, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":41,"column":12},"end":{"line":43,"column":21}}})) != null ? stack1 : "")
	    + "          </select>\n        </div>\n";
	},"14":function(container,depth0,helpers,partials,data) {
	    var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return "              <option value=\""
	    + alias2(alias1((depth0 != null ? lookupProperty(depth0,"value") : depth0), depth0))
	    + "\" "
	    + ((stack1 = lookupProperty(helpers,"if").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,"isCurrentB1") : depth0),{"name":"if","hash":{},"fn":container.program(7, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":42,"column":45},"end":{"line":42,"column":96}}})) != null ? stack1 : "")
	    + ">"
	    + alias2(alias1((depth0 != null ? lookupProperty(depth0,"label") : depth0), depth0))
	    + "</option>\n";
	},"16":function(container,depth0,helpers,partials,data) {
	    var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return ((stack1 = lookupProperty(helpers,"if").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,"min") : depth0),{"name":"if","hash":{"includeZero":true},"fn":container.program(17, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":47,"column":4},"end":{"line":49,"column":4}}})) != null ? stack1 : "");
	},"17":function(container,depth0,helpers,partials,data) {
	    var alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return "      <input type=\"text\" data-target-low=\""
	    + alias2(alias1((depth0 != null ? lookupProperty(depth0,"targetLow") : depth0), depth0))
	    + "\" data-target-high=\""
	    + alias2(alias1((depth0 != null ? lookupProperty(depth0,"targetHigh") : depth0), depth0))
	    + "\" value=\"\" data-slider-min=\""
	    + alias2(alias1((depth0 != null ? lookupProperty(depth0,"min") : depth0), depth0))
	    + "\" data-slider-max=\""
	    + alias2(alias1((depth0 != null ? lookupProperty(depth0,"max") : depth0), depth0))
	    + "\" data-slider-step=\"1\" data-slider-value=\"["
	    + alias2(alias1((depth0 != null ? lookupProperty(depth0,"low") : depth0), depth0))
	    + ","
	    + alias2(alias1((depth0 != null ? lookupProperty(depth0,"high") : depth0), depth0))
	    + "]\"/>\n    ";
	},"19":function(container,depth0,helpers,partials,data) {
	    var alias1=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return "    <div class=\"form-group\">\n      <label class=\"col-sm-2 control-label\">"
	    + alias1(__default(__webpack_require__(1)).call(depth0 != null ? depth0 : (container.nullContext || {}),"Legend",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":54,"column":44},"end":{"line":54,"column":58}}}))
	    + "</label>\n      <div class=\"col-sm-12\">\n        <img class=\"layer-legend-image\" src=\""
	    + alias1(container.lambda((depth0 != null ? lookupProperty(depth0,"legendUrl") : depth0), depth0))
	    + "\" alt=\"Legend\" />\n      </div>\n    </div>\n";
	},"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) {
	    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return "<form class=\"form-horizontal\">\n  <div class=\"form-group\">\n    <label class=\"col-sm-2 control-label\">"
	    + container.escapeExpression(__default(__webpack_require__(1)).call(alias1,"Opacity",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":3,"column":42},"end":{"line":3,"column":57}}}))
	    + "</label>\n    <div class=\"col-sm-10\">\n      <input class=\"form-control opacity-slider\">\n    </div>\n  </div>\n"
	    + ((stack1 = lookupProperty(helpers,"each").call(alias1,(depth0 != null ? lookupProperty(depth0,"options") : depth0),{"name":"each","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":8,"column":2},"end":{"line":51,"column":11}}})) != null ? stack1 : "")
	    + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"legendUrl") : depth0),{"name":"if","hash":{},"fn":container.program(19, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":52,"column":2},"end":{"line":59,"column":9}}})) != null ? stack1 : "")
	    + "</form>\n";
	},"useData":true});

/***/ }),
/* 999 */
/***/ (function(module, exports, __webpack_require__) {

	var Handlebars = __webpack_require__(5);
	function __default(obj) { return obj && (obj.__esModule ? obj["default"] : obj); }
	module.exports = (Handlebars["default"] || Handlebars).template({"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) {
	    var helper, lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return "<div class=\"modal-dialog modal-sm\" role=\"document\">\n  <div class=\"modal-content\">\n    <div class=\"modal-header\">\n      <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\"><span aria-hidden=\"true\">&times;</span></button>\n      <h4 class=\"modal-title\" style=\"display:inline\">"
	    + container.escapeExpression(((helper = (helper = lookupProperty(helpers,"displayName") || (depth0 != null ? lookupProperty(depth0,"displayName") : depth0)) != null ? helper : container.hooks.helperMissing),(typeof helper === "function" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{"name":"displayName","hash":{},"data":data,"loc":{"start":{"line":5,"column":53},"end":{"line":5,"column":68}}}) : helper)))
	    + "</h4>\n    </div>\n    <div class=\"modal-body\"></div>\n  </div>\n</div>\n";
	},"useData":true});

/***/ }),
/* 1000 */
/***/ (function(module, exports, __webpack_require__) {

	var Handlebars = __webpack_require__(5);
	function __default(obj) { return obj && (obj.__esModule ? obj["default"] : obj); }
	module.exports = (Handlebars["default"] || Handlebars).template({"1":function(container,depth0,helpers,partials,data) {
	    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.escapeExpression, alias3=container.lambda, lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return "        <form class=\"form-horizontal\">\n          <div class=\"form-group\">\n            <div class=\"col-sm-2\">\n              <label class=\"control-label\">"
	    + alias2(__default(__webpack_require__(1)).call(alias1,"Bounding Box",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":12,"column":43},"end":{"line":12,"column":63}}}))
	    + "</label>\n            </div>\n            <div class=\"col-sm-10\">\n              <div class=\"checkbox\">\n                <label>\n                  <input type=\"checkbox\" class=\"subset-by-bounds\" "
	    + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"subsetByBounds") : depth0),{"name":"if","hash":{},"fn":container.program(2, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":17,"column":66},"end":{"line":17,"column":112}}})) != null ? stack1 : "")
	    + ">"
	    + alias2(__default(__webpack_require__(1)).call(alias1,"Use bounding box of current spatial filter to crop",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":17,"column":113},"end":{"line":17,"column":171}}}))
	    + "\n                </label>\n              </div>\n              <div class=\"input-group\">\n                <input class=\"form-control show-bbox input-sm\" placeholder=\"Min-X\" value=\""
	    + alias2(alias3(((stack1 = (depth0 != null ? lookupProperty(depth0,"bbox") : depth0)) != null ? lookupProperty(stack1,"0") : stack1), depth0))
	    + "\">\n                <span class=\"input-group-addon\"> </span>\n                <input class=\"form-control show-bbox input-sm\" placeholder=\"Min-Y\" value=\""
	    + alias2(alias3(((stack1 = (depth0 != null ? lookupProperty(depth0,"bbox") : depth0)) != null ? lookupProperty(stack1,"1") : stack1), depth0))
	    + "\">\n                <span class=\"input-group-addon\"> </span>\n                <input class=\"form-control show-bbox input-sm\" placeholder=\"Max-X\" value=\""
	    + alias2(alias3(((stack1 = (depth0 != null ? lookupProperty(depth0,"bbox") : depth0)) != null ? lookupProperty(stack1,"2") : stack1), depth0))
	    + "\">\n                <span class=\"input-group-addon\"> </span>\n                <input class=\"form-control show-bbox input-sm\" placeholder=\"Max-Y\" value=\""
	    + alias2(alias3(((stack1 = (depth0 != null ? lookupProperty(depth0,"bbox") : depth0)) != null ? lookupProperty(stack1,"3") : stack1), depth0))
	    + "\">\n                <span class=\"input-group-addon\"> </span>\n                <div class=\"input-group-btn\">\n                  <button type=\"button\" class=\"btn btn-default btn-draw-bbox\">"
	    + alias2(__default(__webpack_require__(1)).call(alias1,"Draw Bounding Box",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":30,"column":78},"end":{"line":30,"column":103}}}))
	    + "</button>\n                </div>\n              </div>\n            </div>\n          </div>\n"
	    + ((stack1 = lookupProperty(helpers,"if").call(alias1,((stack1 = (depth0 != null ? lookupProperty(depth0,"availableProjections") : depth0)) != null ? lookupProperty(stack1,"length") : stack1),{"name":"if","hash":{},"fn":container.program(4, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":35,"column":10},"end":{"line":49,"column":17}}})) != null ? stack1 : "")
	    + ((stack1 = lookupProperty(helpers,"if").call(alias1,((stack1 = (depth0 != null ? lookupProperty(depth0,"availableDownloadFormats") : depth0)) != null ? lookupProperty(stack1,"length") : stack1),{"name":"if","hash":{},"fn":container.program(7, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":50,"column":10},"end":{"line":64,"column":17}}})) != null ? stack1 : "")
	    + ((stack1 = lookupProperty(helpers,"if").call(alias1,((stack1 = (depth0 != null ? lookupProperty(depth0,"availableInterpolations") : depth0)) != null ? lookupProperty(stack1,"length") : stack1),{"name":"if","hash":{},"fn":container.program(10, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":65,"column":10},"end":{"line":79,"column":17}}})) != null ? stack1 : "")
	    + "          <div class=\"form-group\">\n            <div class=\"col-sm-2\">\n              <label class=\"control-label\">"
	    + alias2(__default(__webpack_require__(1)).call(alias1,"Scaling",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":82,"column":43},"end":{"line":82,"column":58}}}))
	    + "</label>\n            </div>\n            <div class=\"col-sm-10\">\n              <div class=\"radio\">\n                <label>\n                  <input type=\"radio\" name=\"scale-method\" value=\"full\" checked=\"checked\">"
	    + alias2(__default(__webpack_require__(1)).call(alias1,"Full size",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":87,"column":89},"end":{"line":87,"column":106}}}))
	    + "\n                </label>\n              </div>\n            </div>\n          </div>\n          <div class=\"form-group input-resolution\">\n            <div class=\"col-sm-offset-2 col-sm-4\">\n              <div class=\"radio\">\n                <label>\n                  <input type=\"radio\" name=\"scale-method\" value=\"resolution\"><span>"
	    + alias2(__default(__webpack_require__(1)).call(alias1,"Resolution",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":96,"column":83},"end":{"line":96,"column":101}}}))
	    + " <small>("
	    + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"projection_4326") : depth0),{"name":"if","hash":{},"fn":container.program(12, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":96,"column":110},"end":{"line":96,"column":166}}})) != null ? stack1 : "")
	    + "\n                    "
	    + ((stack1 = lookupProperty(helpers,"unless").call(alias1,(depth0 != null ? lookupProperty(depth0,"projection_4326") : depth0),{"name":"unless","hash":{},"fn":container.program(14, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":97,"column":20},"end":{"line":97,"column":78}}})) != null ? stack1 : "")
	    + ")\n                  </small></span>\n                </label>\n              </div>\n            </div>\n            <div class=\"col-sm-6\">\n              <div class=\"input-group\">\n                <input type=\"number\" class=\"form-control input-sm\" placeholder=\""
	    + alias2(__default(__webpack_require__(1)).call(alias1,"Resolution",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":104,"column":80},"end":{"line":104,"column":98}}}))
	    + " X\" name=\"resolution-x\" value=\""
	    + alias2(alias3((depth0 != null ? lookupProperty(depth0,"resolutionX") : depth0), depth0))
	    + "\" step=\"0.0001\" min=\"0.0001\" disabled=\"disabled\">\n                <span class=\"input-group-addon\">-</span>\n                <input type=\"number\" class=\"form-control input-sm\" placeholder=\""
	    + alias2(__default(__webpack_require__(1)).call(alias1,"Resolution",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":106,"column":80},"end":{"line":106,"column":98}}}))
	    + " Y\" name=\"resolution-y\" value=\""
	    + alias2(alias3((depth0 != null ? lookupProperty(depth0,"resolutionY") : depth0), depth0))
	    + "\" step=\"0.0001\" min=\"0.0001\" disabled=\"disabled\">\n              </div>\n            </div>\n          </div>\n          <!-- <div class=\"form-group input-size\">\n            <div class=\"col-sm-offset-2 col-sm-4\">\n              <div class=\"radio\">\n                <label>\n                  <input type=\"radio\" name=\"scale-method\" value=\"size\"><span>"
	    + alias2(__default(__webpack_require__(1)).call(alias1,"Size",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":114,"column":77},"end":{"line":114,"column":89}}}))
	    + " <small>("
	    + alias2(__default(__webpack_require__(1)).call(alias1,"In pixels",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":114,"column":98},"end":{"line":114,"column":115}}}))
	    + ")</small></span>\n                </label>\n              </div>\n            </div>\n            <div class=\"col-sm-6\">\n              <div class=\"input-group\">\n                <input type=\"number\" class=\"form-control input-sm\" placeholder=\""
	    + alias2(__default(__webpack_require__(1)).call(alias1,"Size",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":120,"column":80},"end":{"line":120,"column":92}}}))
	    + " X\" name=\"size-x\" value=\""
	    + alias2(alias3((depth0 != null ? lookupProperty(depth0,"sizeX") : depth0), depth0))
	    + "\" step=\"1\" min=\"1\" disabled=\"disabled\">\n                <span class=\"input-group-addon\">-</span>\n                <input type=\"number\" class=\"form-control input-sm\" placeholder=\""
	    + alias2(__default(__webpack_require__(1)).call(alias1,"Size",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":122,"column":80},"end":{"line":122,"column":92}}}))
	    + " Y\" name=\"size-y\" value=\""
	    + alias2(alias3((depth0 != null ? lookupProperty(depth0,"sizeY") : depth0), depth0))
	    + "\" step=\"1\" min=\"1\" disabled=\"disabled\">\n              </div>\n            </div>\n          </div> -->\n          <div class=\"form-group input-scale\">\n            <div class=\"col-sm-offset-2 col-sm-4\">\n              <div class=\"radio\">\n                <label>\n                  <input type=\"radio\" name=\"scale-method\" value=\"scale\"><span>"
	    + alias2(__default(__webpack_require__(1)).call(alias1,"Scale",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":130,"column":78},"end":{"line":130,"column":91}}}))
	    + " <small>("
	    + alias2(__default(__webpack_require__(1)).call(alias1,"Of total size",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":130,"column":100},"end":{"line":130,"column":121}}}))
	    + ")</small></span>\n                </label>\n              </div>\n            </div>\n            <div class=\"col-sm-6\">\n              <div class=\"input-group\">\n                <input type=\"number\" class=\"form-control input-sm\" placeholder=\""
	    + alias2(__default(__webpack_require__(1)).call(alias1,"Scale",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":136,"column":80},"end":{"line":136,"column":93}}}))
	    + "\" name=\"scalefactor\" value=\"100\" step=\"1\" min=\"0\" max=\"500\" disabled=\"disabled\">\n                <div class=\"input-group-addon\">%</div>\n              </div>\n            </div>\n          </div>\n        </form>\n";
	},"2":function(container,depth0,helpers,partials,data) {
	    return "checked=\"checked\"";
	},"4":function(container,depth0,helpers,partials,data) {
	    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return "          <div class=\"form-group\">\n            <div class=\"col-sm-2\">\n              <label class=\"control-label\">"
	    + container.escapeExpression(__default(__webpack_require__(1)).call(alias1,"Projection",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":38,"column":43},"end":{"line":38,"column":61}}}))
	    + "</label>\n            </div>\n            <div class=\"col-sm-10\">\n              <select class=\"form-control select-projection\">\n                <option>---</option>\n"
	    + ((stack1 = lookupProperty(helpers,"each").call(alias1,(depth0 != null ? lookupProperty(depth0,"availableProjections") : depth0),{"name":"each","hash":{},"fn":container.program(5, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":43,"column":16},"end":{"line":45,"column":25}}})) != null ? stack1 : "")
	    + "              </select>\n            </div>\n          </div>\n";
	},"5":function(container,depth0,helpers,partials,data) {
	    var alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return "                <option value=\""
	    + alias2(alias1((depth0 != null ? lookupProperty(depth0,"identifier") : depth0), depth0))
	    + "\">"
	    + alias2(alias1((depth0 != null ? lookupProperty(depth0,"name") : depth0), depth0))
	    + "</option>\n";
	},"7":function(container,depth0,helpers,partials,data) {
	    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return "          <div class=\"form-group\">\n            <div class=\"col-sm-2\">\n              <label class=\"control-label\">"
	    + container.escapeExpression(__default(__webpack_require__(1)).call(alias1,"Format",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":53,"column":43},"end":{"line":53,"column":57}}}))
	    + "</label>\n            </div>\n            <div class=\"col-sm-10\">\n              <select class=\"form-control select-format\">\n                <option>---</option>\n"
	    + ((stack1 = lookupProperty(helpers,"each").call(alias1,(depth0 != null ? lookupProperty(depth0,"availableDownloadFormats") : depth0),{"name":"each","hash":{},"fn":container.program(8, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":58,"column":16},"end":{"line":60,"column":25}}})) != null ? stack1 : "")
	    + "              </select>\n            </div>\n          </div>\n";
	},"8":function(container,depth0,helpers,partials,data) {
	    var alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return "                <option value=\""
	    + alias2(alias1((depth0 != null ? lookupProperty(depth0,"mimeType") : depth0), depth0))
	    + "\">"
	    + alias2(alias1((depth0 != null ? lookupProperty(depth0,"name") : depth0), depth0))
	    + "</option>\n";
	},"10":function(container,depth0,helpers,partials,data) {
	    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return "          <div class=\"form-group\">\n            <div class=\"col-sm-2\">\n              <label class=\"control-label\">"
	    + container.escapeExpression(__default(__webpack_require__(1)).call(alias1,"Interpolation",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":68,"column":43},"end":{"line":68,"column":64}}}))
	    + "</label>\n            </div>\n            <div class=\"col-sm-10\">\n              <select class=\"form-control select-interpolation\">\n                <option>---</option>\n"
	    + ((stack1 = lookupProperty(helpers,"each").call(alias1,(depth0 != null ? lookupProperty(depth0,"availableInterpolations") : depth0),{"name":"each","hash":{},"fn":container.program(5, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":73,"column":16},"end":{"line":75,"column":25}}})) != null ? stack1 : "")
	    + "              </select>\n            </div>\n          </div>\n";
	},"12":function(container,depth0,helpers,partials,data) {
	    return container.escapeExpression(__default(__webpack_require__(1)).call(depth0 != null ? depth0 : (container.nullContext || {}),"In decimal degrees",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":96,"column":133},"end":{"line":96,"column":159}}}));
	},"14":function(container,depth0,helpers,partials,data) {
	    return container.escapeExpression(__default(__webpack_require__(1)).call(depth0 != null ? depth0 : (container.nullContext || {}),"In map units",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":97,"column":47},"end":{"line":97,"column":67}}}));
	},"16":function(container,depth0,helpers,partials,data) {
	    return "      <p class=\"download-confirm\">\n        <i>"
	    + container.escapeExpression(__default(__webpack_require__(1)).call(depth0 != null ? depth0 : (container.nullContext || {}),"confirm_note",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":146,"column":11},"end":{"line":146,"column":31}}}))
	    + "</i>\n      </p>\n";
	},"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) {
	    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return "<div class=\"modal-dialog\" role=\"document\">\n  <div class=\"modal-content\">\n    <div class=\"modal-header\">\n      <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\"><span aria-hidden=\"true\">&times;</span></button>\n      <h4 class=\"modal-title\">"
	    + alias2(__default(__webpack_require__(1)).call(alias1,"start_download",((stack1 = (depth0 != null ? lookupProperty(depth0,"records") : depth0)) != null ? lookupProperty(stack1,"length") : stack1),{"name":"t","hash":{},"data":data,"loc":{"start":{"line":5,"column":30},"end":{"line":5,"column":67}}}))
	    + "</h4>\n    </div>\n    <div class=\"modal-body download-options\">\n"
	    + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"downloadOptions") : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":8,"column":6},"end":{"line":142,"column":13}}})) != null ? stack1 : "")
	    + "      <p class=\"spacer download-confirm\"><b>"
	    + alias2(__default(__webpack_require__(1)).call(alias1,"confirm_download",((stack1 = (depth0 != null ? lookupProperty(depth0,"records") : depth0)) != null ? lookupProperty(stack1,"length") : stack1),{"name":"t","hash":{},"data":data,"loc":{"start":{"line":143,"column":44},"end":{"line":143,"column":83}}}))
	    + "</b></p>\n"
	    + ((stack1 = lookupProperty(helpers,"if").call(alias1,((stack1 = (depth0 != null ? lookupProperty(depth0,"records") : depth0)) != null ? lookupProperty(stack1,"1") : stack1),{"name":"if","hash":{},"fn":container.program(16, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":144,"column":6},"end":{"line":148,"column":13}}})) != null ? stack1 : "")
	    + "    </div>\n    <div class=\"modal-footer\">\n      <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\">"
	    + alias2(__default(__webpack_require__(1)).call(alias1,"Close",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":151,"column":73},"end":{"line":151,"column":87}}}))
	    + "</button>\n      <button type=\"button\" class=\"btn btn-primary start-download\" data-dismiss=\"modal\">"
	    + alias2(__default(__webpack_require__(1)).call(alias1,"Download",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":152,"column":88},"end":{"line":152,"column":105}}}))
	    + "</button>\n    </div>\n  </div>\n</div>\n";
	},"useData":true});

/***/ }),
/* 1001 */
/***/ (function(module, exports, __webpack_require__) {

	var Handlebars = __webpack_require__(5);
	function __default(obj) { return obj && (obj.__esModule ? obj["default"] : obj); }
	module.exports = (Handlebars["default"] || Handlebars).template({"1":function(container,depth0,helpers,partials,data) {
	    return "with-terms";
	},"3":function(container,depth0,helpers,partials,data) {
	    return " with-terms";
	},"5":function(container,depth0,helpers,partials,data) {
	    var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return "  <div class=\"checkbox\">\n    <label>\n      <input type=\"checkbox\" class=\"terms-and-conditions\"> "
	    + ((stack1 = __default(__webpack_require__(1)).call(depth0 != null ? depth0 : (container.nullContext || {}),"terms_and_conditions",(depth0 != null ? lookupProperty(depth0,"termsAndConditionsUrl") : depth0),{"name":"t","hash":{},"data":data,"loc":{"start":{"line":6,"column":59},"end":{"line":6,"column":111}}})) != null ? stack1 : "")
	    + "\n    </label>\n  </div>\n";
	},"7":function(container,depth0,helpers,partials,data) {
	    return "  <div class=\"checkbox\">\n    <p>"
	    + container.escapeExpression(__default(__webpack_require__(1)).call(depth0 != null ? depth0 : (container.nullContext || {}),"Log in to enable the download",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":12,"column":7},"end":{"line":12,"column":44}}}))
	    + "</p>\n  </div>\n";
	},"9":function(container,depth0,helpers,partials,data) {
	    var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.escapeExpression;
	
	  return "        <!-- <div class=\"btn-group\" role=\"group\">\n          <button class=\"btn btn-default btn-sm select-files\" type=\"button\" disabled>"
	    + alias2(__default(__webpack_require__(1)).call(alias1,"Select files",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":26,"column":85},"end":{"line":26,"column":105}}}))
	    + "</button>\n        </div> -->\n        <li><a href=\"#\" class=\"select-files\" type=\"button\" disabled>"
	    + alias2(__default(__webpack_require__(1)).call(alias1,"Download selected files...",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":28,"column":68},"end":{"line":28,"column":102}}}))
	    + "</a></li>\n";
	},"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) {
	    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return "<div class=\"selection-lists "
	    + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"termsAndConditionsUrl") : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":1,"column":28},"end":{"line":1,"column":74}}})) != null ? stack1 : "")
	    + ((stack1 = lookupProperty(helpers,"unless").call(alias1,(depth0 != null ? lookupProperty(depth0,"downloadEnabled") : depth0),{"name":"unless","hash":{},"fn":container.program(3, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":1,"column":74},"end":{"line":1,"column":123}}})) != null ? stack1 : "")
	    + "\"></div>\n<div class=\"input-group download-control\">\n"
	    + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"termsAndConditionsUrl") : depth0),{"name":"if","hash":{},"fn":container.program(5, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":3,"column":2},"end":{"line":9,"column":9}}})) != null ? stack1 : "")
	    + ((stack1 = lookupProperty(helpers,"unless").call(alias1,(depth0 != null ? lookupProperty(depth0,"downloadEnabled") : depth0),{"name":"unless","hash":{},"fn":container.program(7, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":10,"column":2},"end":{"line":14,"column":13}}})) != null ? stack1 : "")
	    + "  <span class=\"btn-group btn-group-justified\">\n    <div class=\"btn-group\" role=\"group\">\n      <button class=\"btn btn-default btn-sm start-download\" type=\"button\" disabled>"
	    + alias2(__default(__webpack_require__(1)).call(alias1,"Download",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":17,"column":83},"end":{"line":17,"column":99}}}))
	    + "</button>\n    </div>\n    <div class=\"btn-group dropup\" role=\"group\">\n      <button class=\"btn btn-default btn-sm dropdown-toggle\" data-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\" type=\"button\" disabled>"
	    + alias2(__default(__webpack_require__(1)).call(alias1,"Download as",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":20,"column":150},"end":{"line":20,"column":169}}}))
	    + " <span class=\"caret\"></span></button>\n      <ul class=\"dropdown-menu dropdown-menu-right\">\n        <li><a href=\"#\" class=\"download-as-metalink\">"
	    + alias2(__default(__webpack_require__(1)).call(alias1,"Download as Metalink",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":22,"column":53},"end":{"line":22,"column":81}}}))
	    + "</a></li>\n        <li><a href=\"#\" class=\"download-as-url-list\">"
	    + alias2(__default(__webpack_require__(1)).call(alias1,"Download as URL-List",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":23,"column":53},"end":{"line":23,"column":81}}}))
	    + "</a></li>\n"
	    + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"selectFilesEnabled") : depth0),{"name":"if","hash":{},"fn":container.program(9, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":24,"column":8},"end":{"line":29,"column":15}}})) != null ? stack1 : "")
	    + "      </ul>\n    </div>\n    <div class=\"btn-group\" role=\"group\">\n      <button class=\"btn btn-sm btn-danger deselect-all\" type=\"button\" disabled>"
	    + alias2(__default(__webpack_require__(1)).call(alias1,"Deselect all",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":33,"column":80},"end":{"line":33,"column":100}}}))
	    + "</button>\n    </div>\n  </span>\n</div>\n";
	},"useData":true});

/***/ }),
/* 1002 */
/***/ (function(module, exports, __webpack_require__) {

	var Handlebars = __webpack_require__(5);
	function __default(obj) { return obj && (obj.__esModule ? obj["default"] : obj); }
	module.exports = (Handlebars["default"] || Handlebars).template({"1":function(container,depth0,helpers,partials,data) {
	    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return "        <div class=\"form-group\">\n          <div class=\"col-sm-2\">\n            <label class=\"control-label\">"
	    + container.escapeExpression(__default(__webpack_require__(1)).call(alias1,"Projection",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":32,"column":41},"end":{"line":32,"column":59}}}))
	    + "</label>\n          </div>\n          <div class=\"col-sm-10\">\n            <select class=\"form-control select-projection\">\n              <option>---</option>\n"
	    + ((stack1 = lookupProperty(helpers,"each").call(alias1,(depth0 != null ? lookupProperty(depth0,"availableProjections") : depth0),{"name":"each","hash":{},"fn":container.program(2, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":37,"column":14},"end":{"line":39,"column":23}}})) != null ? stack1 : "")
	    + "            </select>\n          </div>\n        </div>\n";
	},"2":function(container,depth0,helpers,partials,data) {
	    var alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return "              <option value=\""
	    + alias2(alias1((depth0 != null ? lookupProperty(depth0,"identifier") : depth0), depth0))
	    + "\">"
	    + alias2(alias1((depth0 != null ? lookupProperty(depth0,"name") : depth0), depth0))
	    + "</option>\n";
	},"4":function(container,depth0,helpers,partials,data) {
	    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return "        <div class=\"form-group\">\n          <div class=\"col-sm-2\">\n            <label class=\"control-label\">"
	    + container.escapeExpression(__default(__webpack_require__(1)).call(alias1,"Format",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":47,"column":41},"end":{"line":47,"column":55}}}))
	    + "</label>\n          </div>\n          <div class=\"col-sm-10\">\n            <select class=\"form-control select-format\">\n              <option>---</option>\n"
	    + ((stack1 = lookupProperty(helpers,"each").call(alias1,(depth0 != null ? lookupProperty(depth0,"availableDownloadFormats") : depth0),{"name":"each","hash":{},"fn":container.program(5, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":52,"column":14},"end":{"line":54,"column":23}}})) != null ? stack1 : "")
	    + "            </select>\n          </div>\n        </div>\n";
	},"5":function(container,depth0,helpers,partials,data) {
	    var alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return "              <option value=\""
	    + alias2(alias1((depth0 != null ? lookupProperty(depth0,"mimeType") : depth0), depth0))
	    + "\">"
	    + alias2(alias1((depth0 != null ? lookupProperty(depth0,"name") : depth0), depth0))
	    + "</option>\n";
	},"7":function(container,depth0,helpers,partials,data) {
	    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return "        <div class=\"form-group\">\n          <div class=\"col-sm-2\">\n            <label class=\"control-label\">"
	    + container.escapeExpression(__default(__webpack_require__(1)).call(alias1,"Interpolation",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":62,"column":41},"end":{"line":62,"column":62}}}))
	    + "</label>\n          </div>\n          <div class=\"col-sm-10\">\n            <select class=\"form-control\" name=\"interpolation\">\n              <option>---</option>\n"
	    + ((stack1 = lookupProperty(helpers,"each").call(alias1,(depth0 != null ? lookupProperty(depth0,"interpolations") : depth0),{"name":"each","hash":{},"fn":container.program(2, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":67,"column":14},"end":{"line":69,"column":23}}})) != null ? stack1 : "")
	    + "            </select>\n          </div>\n        </div>\n";
	},"9":function(container,depth0,helpers,partials,data) {
	    return container.escapeExpression(__default(__webpack_require__(1)).call(depth0 != null ? depth0 : (container.nullContext || {}),"In decimal degrees",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":92,"column":131},"end":{"line":92,"column":157}}}));
	},"11":function(container,depth0,helpers,partials,data) {
	    return container.escapeExpression(__default(__webpack_require__(1)).call(depth0 != null ? depth0 : (container.nullContext || {}),"In map units",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":93,"column":45},"end":{"line":93,"column":65}}}));
	},"13":function(container,depth0,helpers,partials,data) {
	    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return "        <div class=\"form-group input-fields\">\n          <div class=\"col-sm-2\">\n            <label class=\"control-label\">"
	    + container.escapeExpression(__default(__webpack_require__(1)).call(alias1,"Bands",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":142,"column":41},"end":{"line":142,"column":54}}}))
	    + "</label>\n          </div>\n          <div class=\"col-sm-10\">\n"
	    + ((stack1 = lookupProperty(helpers,"each").call(alias1,(depth0 != null ? lookupProperty(depth0,"fields") : depth0),{"name":"each","hash":{},"fn":container.program(14, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":145,"column":12},"end":{"line":151,"column":21}}})) != null ? stack1 : "")
	    + "          </div>\n        </div>\n";
	},"14":function(container,depth0,helpers,partials,data) {
	    var alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return "              <div autocomplete=\"off\" class=\"checkbox-inline\">\n                <label>\n                  <input type=\"checkbox\" name=\"field\" value=\""
	    + alias2(alias1((depth0 != null ? lookupProperty(depth0,"identifier") : depth0), depth0))
	    + "\"> "
	    + alias2(alias1((depth0 != null ? lookupProperty(depth0,"name") : depth0), depth0))
	    + "\n                </label>\n              </div>\n";
	},"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) {
	    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.escapeExpression, alias3=container.lambda, lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return "<div class=\"modal-dialog\" role=\"document\">\n  <div class=\"modal-content\">\n    <div class=\"modal-header\">\n      <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\"><span aria-hidden=\"true\">&times;</span></button>\n      <h4 class=\"modal-title\">"
	    + alias2(__default(__webpack_require__(1)).call(alias1,"Start full resolution download",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":5,"column":30},"end":{"line":5,"column":69}}}))
	    + "</h4>\n    </div>\n    <div class=\"modal-body full-resolution-body\">\n      <form class=\"form-horizontal\">\n        <div class=\"form-group\">\n          <div class=\"col-sm-2\">\n            <label class=\"control-label\">"
	    + alias2(__default(__webpack_require__(1)).call(alias1,"Bounding Box",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":11,"column":41},"end":{"line":11,"column":61}}}))
	    + "</label>\n          </div>\n          <div class=\"col-sm-10\">\n            <div class=\"form-control input-group\">\n              <input class=\"form-control show-bbox input-sm\" placeholder=\"Min-X\" value=\""
	    + alias2(alias3(((stack1 = (depth0 != null ? lookupProperty(depth0,"bbox") : depth0)) != null ? lookupProperty(stack1,"0") : stack1), depth0))
	    + "\">\n              <span class=\"input-group-addon\"> </span>\n              <input class=\"form-control show-bbox input-sm\" placeholder=\"Min-Y\" value=\""
	    + alias2(alias3(((stack1 = (depth0 != null ? lookupProperty(depth0,"bbox") : depth0)) != null ? lookupProperty(stack1,"1") : stack1), depth0))
	    + "\">\n              <span class=\"input-group-addon\"> </span>\n              <input class=\"form-control show-bbox input-sm\" placeholder=\"Max-X\" value=\""
	    + alias2(alias3(((stack1 = (depth0 != null ? lookupProperty(depth0,"bbox") : depth0)) != null ? lookupProperty(stack1,"2") : stack1), depth0))
	    + "\">\n              <span class=\"input-group-addon\"> </span>\n              <input class=\"form-control show-bbox input-sm\" placeholder=\"Max-Y\" value=\""
	    + alias2(alias3(((stack1 = (depth0 != null ? lookupProperty(depth0,"bbox") : depth0)) != null ? lookupProperty(stack1,"3") : stack1), depth0))
	    + "\">\n              <span class=\"input-group-addon\"> </span>\n              <div class=\"input-group-btn\">\n                <button type=\"button\" class=\"btn btn-default btn-draw-bbox\">"
	    + alias2(__default(__webpack_require__(1)).call(alias1,"Draw Bounding Box",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":24,"column":76},"end":{"line":24,"column":101}}}))
	    + "</button>\n              </div>\n            </div>\n          </div>\n        </div>\n"
	    + ((stack1 = lookupProperty(helpers,"if").call(alias1,((stack1 = (depth0 != null ? lookupProperty(depth0,"availableProjections") : depth0)) != null ? lookupProperty(stack1,"length") : stack1),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":29,"column":8},"end":{"line":43,"column":15}}})) != null ? stack1 : "")
	    + ((stack1 = lookupProperty(helpers,"if").call(alias1,((stack1 = (depth0 != null ? lookupProperty(depth0,"availableDownloadFormats") : depth0)) != null ? lookupProperty(stack1,"length") : stack1),{"name":"if","hash":{},"fn":container.program(4, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":44,"column":8},"end":{"line":58,"column":15}}})) != null ? stack1 : "")
	    + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"interpolations") : depth0),{"name":"if","hash":{},"fn":container.program(7, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":59,"column":8},"end":{"line":73,"column":15}}})) != null ? stack1 : "")
	    + "\n        <div class=\"form-group\">\n          <div class=\"col-sm-2\">\n            <label class=\"control-label\">"
	    + alias2(__default(__webpack_require__(1)).call(alias1,"Scaling",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":77,"column":41},"end":{"line":77,"column":56}}}))
	    + "</label>\n          </div>\n          <div class=\"col-sm-10\">\n            <div class=\"radio\">\n              <label>\n                <input type=\"radio\" name=\"scale-method\" value=\"full\" checked=\"checked\">"
	    + alias2(__default(__webpack_require__(1)).call(alias1,"Full size",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":82,"column":87},"end":{"line":82,"column":104}}}))
	    + "\n              </label>\n            </div>\n          </div>\n        </div>\n\n        <div class=\"form-group input-resolution\">\n          <div class=\"col-sm-offset-2 col-sm-4\">\n            <div class=\"radio\">\n              <label>\n                <input type=\"radio\" name=\"scale-method\" value=\"resolution\"><span>"
	    + alias2(__default(__webpack_require__(1)).call(alias1,"Resolution",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":92,"column":81},"end":{"line":92,"column":99}}}))
	    + " <small>("
	    + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"projection_4326") : depth0),{"name":"if","hash":{},"fn":container.program(9, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":92,"column":108},"end":{"line":92,"column":164}}})) != null ? stack1 : "")
	    + "\n                  "
	    + ((stack1 = lookupProperty(helpers,"unless").call(alias1,(depth0 != null ? lookupProperty(depth0,"projection_4326") : depth0),{"name":"unless","hash":{},"fn":container.program(11, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":93,"column":18},"end":{"line":93,"column":76}}})) != null ? stack1 : "")
	    + ")</small></span>\n              </label>\n            </div>\n          </div>\n          <div class=\"col-sm-6\">\n            <div class=\"input-group\">\n              <input type=\"number\" class=\"form-control input-sm\" placeholder=\""
	    + alias2(__default(__webpack_require__(1)).call(alias1,"Resolution",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":99,"column":78},"end":{"line":99,"column":96}}}))
	    + " X\" name=\"resolution-x\" value=\""
	    + alias2(alias3((depth0 != null ? lookupProperty(depth0,"resolutionX") : depth0), depth0))
	    + "\" step=\"0.0001\" min=\"0.0001\" disabled=\"disabled\">\n              <span class=\"input-group-addon\">-</span>\n              <input type=\"number\" class=\"form-control input-sm\" placeholder=\""
	    + alias2(__default(__webpack_require__(1)).call(alias1,"Resolution",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":101,"column":78},"end":{"line":101,"column":96}}}))
	    + " Y\" name=\"resolution-y\" value=\""
	    + alias2(alias3((depth0 != null ? lookupProperty(depth0,"resolutionY") : depth0), depth0))
	    + "\" step=\"0.0001\" min=\"0.0001\" disabled=\"disabled\">\n            </div>\n          </div>\n        </div>\n\n        <div class=\"form-group input-size\">\n          <div class=\"col-sm-offset-2 col-sm-4\">\n            <div class=\"radio\">\n              <label>\n                <input type=\"radio\" name=\"scale-method\" value=\"size\"><span>"
	    + alias2(__default(__webpack_require__(1)).call(alias1,"Size",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":110,"column":75},"end":{"line":110,"column":87}}}))
	    + " <small>("
	    + alias2(__default(__webpack_require__(1)).call(alias1,"In pixels",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":110,"column":96},"end":{"line":110,"column":113}}}))
	    + ")</small></span>\n              </label>\n            </div>\n          </div>\n          <div class=\"col-sm-6\">\n            <div class=\"input-group\">\n              <input type=\"number\" class=\"form-control input-sm\" placeholder=\""
	    + alias2(__default(__webpack_require__(1)).call(alias1,"Size",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":116,"column":78},"end":{"line":116,"column":90}}}))
	    + " X\" name=\"size-x\" value=\""
	    + alias2(alias3((depth0 != null ? lookupProperty(depth0,"sizeX") : depth0), depth0))
	    + "\" step=\"1\" min=\"1\" disabled=\"disabled\">\n              <span class=\"input-group-addon\">-</span>\n              <input type=\"number\" class=\"form-control input-sm\" placeholder=\""
	    + alias2(__default(__webpack_require__(1)).call(alias1,"Size",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":118,"column":78},"end":{"line":118,"column":90}}}))
	    + " Y\" name=\"size-y\" value=\""
	    + alias2(alias3((depth0 != null ? lookupProperty(depth0,"sizeY") : depth0), depth0))
	    + "\" step=\"1\" min=\"1\" disabled=\"disabled\">\n            </div>\n          </div>\n        </div>\n\n        <div class=\"form-group input-scale\">\n          <div class=\"col-sm-offset-2 col-sm-4\">\n            <div class=\"radio\">\n              <label>\n                <input type=\"radio\" name=\"scale-method\" value=\"scale\"><span>"
	    + alias2(__default(__webpack_require__(1)).call(alias1,"Scale",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":127,"column":76},"end":{"line":127,"column":89}}}))
	    + " <small>("
	    + alias2(__default(__webpack_require__(1)).call(alias1,"Of total size",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":127,"column":98},"end":{"line":127,"column":119}}}))
	    + ")</small></span>\n              </label>\n            </div>\n          </div>\n          <div class=\"col-sm-6\">\n            <div class=\"input-group\">\n              <input type=\"number\" class=\"form-control input-sm\" placeholder=\""
	    + alias2(__default(__webpack_require__(1)).call(alias1,"Scale",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":133,"column":78},"end":{"line":133,"column":91}}}))
	    + "\" name=\"scalefactor\" value=\"100\" step=\"1\" min=\"0\" max=\"500\" disabled=\"disabled\">\n              <div class=\"input-group-addon\">%</div>\n            </div>\n          </div>\n        </div>\n\n"
	    + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"fields") : depth0),{"name":"if","hash":{},"fn":container.program(13, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":139,"column":8},"end":{"line":154,"column":15}}})) != null ? stack1 : "")
	    + "      </form>\n      <div class=\"size-warning alert alert-danger\">\n        "
	    + alias2(__default(__webpack_require__(1)).call(alias1,"download_size_warning",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":157,"column":8},"end":{"line":157,"column":38}}}))
	    + "\n      </div>\n      <div class=\"bbox-warning alert alert-danger\">\n        "
	    + alias2(__default(__webpack_require__(1)).call(alias1,"max_bbox_warning",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":160,"column":8},"end":{"line":160,"column":33}}}))
	    + "\n      </div>\n      <div class=\"resolution-warning alert alert-danger\">\n        "
	    + alias2(__default(__webpack_require__(1)).call(alias1,"max_resolution_warning",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":163,"column":8},"end":{"line":163,"column":39}}}))
	    + "\n      </div>\n      <div class=\"bands-warning alert alert-danger\">\n        "
	    + alias2(__default(__webpack_require__(1)).call(alias1,"download_bands_warning",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":166,"column":8},"end":{"line":166,"column":39}}}))
	    + "\n      </div>\n    </div>\n    <div class=\"modal-footer\">\n      <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\">"
	    + alias2(__default(__webpack_require__(1)).call(alias1,"Close",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":170,"column":73},"end":{"line":170,"column":87}}}))
	    + "</button>\n      <button type=\"button\" class=\"btn btn-default start-download\" data-dismiss=\"modal\">"
	    + alias2(__default(__webpack_require__(1)).call(alias1,"Download",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":171,"column":88},"end":{"line":171,"column":105}}}))
	    + "</button>\n    </div>\n  </div>\n</div>\n";
	},"useData":true});

/***/ }),
/* 1003 */
/***/ (function(module, exports, __webpack_require__) {

	var Handlebars = __webpack_require__(5);
	function __default(obj) { return obj && (obj.__esModule ? obj["default"] : obj); }
	module.exports = (Handlebars["default"] || Handlebars).template({"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) {
	    var alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return "<a href=\"#\">\n  <img src=\""
	    + alias2(alias1((depth0 != null ? lookupProperty(depth0,"thumbnailUrl") : depth0), depth0))
	    + "\" alt=\""
	    + alias2(__default(__webpack_require__(1)).call(depth0 != null ? depth0 : (container.nullContext || {}),"trying to download thumbnail",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":2,"column":35},"end":{"line":2,"column":72}}}))
	    + "\">\n</a>\n<div>"
	    + alias2(alias1((depth0 != null ? lookupProperty(depth0,"date") : depth0), depth0))
	    + "<br/>"
	    + alias2(alias1((depth0 != null ? lookupProperty(depth0,"time") : depth0), depth0))
	    + "</div>\n<button class=\"btn btn-default btn-xs record-info\">\n  <i class=\"fa fa-info-circle\" aria-hidden=\"true\"></i>\n</button>\n<button class=\"btn btn-default btn-xs record-unselect\">\n  <i class=\"fa fa-minus-circle\" aria-hidden=\"true\"></i>\n</button>\n";
	},"useData":true});

/***/ }),
/* 1004 */
/***/ (function(module, exports, __webpack_require__) {

	var Handlebars = __webpack_require__(5);
	function __default(obj) { return obj && (obj.__esModule ? obj["default"] : obj); }
	module.exports = (Handlebars["default"] || Handlebars).template({"1":function(container,depth0,helpers,partials,data) {
	    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return "      <button class=\"btn btn-sm btn-block btn-default btn-download-full-res\" type=\"button\" "
	    + ((stack1 = lookupProperty(helpers,"unless").call(alias1,(depth0 != null ? lookupProperty(depth0,"automaticSearch") : depth0),{"name":"unless","hash":{},"fn":container.program(2, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":12,"column":91},"end":{"line":12,"column":137}}})) != null ? stack1 : "")
	    + ">"
	    + container.escapeExpression(__default(__webpack_require__(1)).call(alias1,"Download full resolution raster",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":12,"column":138},"end":{"line":12,"column":177}}}))
	    + "</button>\n";
	},"2":function(container,depth0,helpers,partials,data) {
	    return "disabled";
	},"4":function(container,depth0,helpers,partials,data) {
	    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return "      <button class=\"btn btn-sm btn-block btn-default btn-processing\" type=\"button\" "
	    + ((stack1 = lookupProperty(helpers,"unless").call(alias1,(depth0 != null ? lookupProperty(depth0,"automaticSearch") : depth0),{"name":"unless","hash":{},"fn":container.program(2, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":15,"column":84},"end":{"line":15,"column":130}}})) != null ? stack1 : "")
	    + ">"
	    + container.escapeExpression(__default(__webpack_require__(1)).call(alias1,"Start processing",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":15,"column":131},"end":{"line":15,"column":155}}}))
	    + "</button>\n";
	},"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) {
	    var stack1, alias1=container.lambda, alias2=container.escapeExpression, alias3=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return "<div class=\"panel panel-default\">\n  <div class=\"panel-heading\" role=\"tab\">\n    <h4 class=\"panel-title\">\n      <a role=\"button\" data-toggle=\"collapse\" href=\"#collapse-"
	    + alias2(alias1((depth0 != null ? lookupProperty(depth0,"layerId") : depth0), depth0))
	    + "\" aria-expanded=\"true\">\n        "
	    + alias2(alias1((depth0 != null ? lookupProperty(depth0,"layerName") : depth0), depth0))
	    + "\n        <span class=\"caret\"></span>\n      </a>\n    </h4>\n  </div>\n  <div id=\"collapse-"
	    + alias2(alias1((depth0 != null ? lookupProperty(depth0,"layerId") : depth0), depth0))
	    + "\" class=\"panel-collapse panel-result-list collapse in\" role=\"tabpanel\">\n"
	    + ((stack1 = lookupProperty(helpers,"if").call(alias3,(depth0 != null ? lookupProperty(depth0,"enableFullResolutionDownload") : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":11,"column":4},"end":{"line":13,"column":11}}})) != null ? stack1 : "")
	    + ((stack1 = lookupProperty(helpers,"if").call(alias3,(depth0 != null ? lookupProperty(depth0,"enableProcessing") : depth0),{"name":"if","hash":{},"fn":container.program(4, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":14,"column":4},"end":{"line":16,"column":11}}})) != null ? stack1 : "")
	    + "    <div class=\"selection-body\">\n      <div class=\"spacer spacer-top\"/>\n      <ul class=\"selection-items list-unstyled list-inline\"></ul>\n      <div class=\"spacer spacer-bottom\"/>\n    </div>\n  </div>\n</div>\n";
	},"useData":true});

/***/ }),
/* 1005 */
/***/ (function(module, exports, __webpack_require__) {

	var Handlebars = __webpack_require__(5);
	function __default(obj) { return obj && (obj.__esModule ? obj["default"] : obj); }
	module.exports = (Handlebars["default"] || Handlebars).template({"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) {
	    return "<i class=\"selection-norecords\">"
	    + container.escapeExpression(__default(__webpack_require__(1)).call(depth0 != null ? depth0 : (container.nullContext || {}),"download_norecords",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":1,"column":31},"end":{"line":1,"column":59}}}))
	    + "</i>\n";
	},"useData":true});

/***/ }),
/* 1006 */
/***/ (function(module, exports, __webpack_require__) {

	var Handlebars = __webpack_require__(5);
	function __default(obj) { return obj && (obj.__esModule ? obj["default"] : obj); }
	module.exports = (Handlebars["default"] || Handlebars).template({"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) {
	    var lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return container.escapeExpression(__default(__webpack_require__(1)).call(depth0 != null ? depth0 : (container.nullContext || {}),"search_n_layers_selected",(depth0 != null ? lookupProperty(depth0,"count") : depth0),{"name":"t","hash":{},"data":data,"loc":{"start":{"line":1,"column":0},"end":{"line":1,"column":40}}}))
	    + "\n";
	},"useData":true});

/***/ }),
/* 1007 */
/***/ (function(module, exports, __webpack_require__) {

	var Handlebars = __webpack_require__(5);
	function __default(obj) { return obj && (obj.__esModule ? obj["default"] : obj); }
	module.exports = (Handlebars["default"] || Handlebars).template({"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) {
	    return "<i>"
	    + container.escapeExpression(__default(__webpack_require__(1)).call(depth0 != null ? depth0 : (container.nullContext || {}),"No layer selected",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":1,"column":3},"end":{"line":1,"column":30}}}))
	    + "</i>\n";
	},"useData":true});

/***/ }),
/* 1008 */
/***/ (function(module, exports, __webpack_require__) {

	var Handlebars = __webpack_require__(5);
	function __default(obj) { return obj && (obj.__esModule ? obj["default"] : obj); }
	module.exports = (Handlebars["default"] || Handlebars).template({"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) {
	    return "<i>"
	    + container.escapeExpression(__default(__webpack_require__(1)).call(depth0 != null ? depth0 : (container.nullContext || {}),"No layers available",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":1,"column":3},"end":{"line":1,"column":32}}}))
	    + "</i>\n";
	},"useData":true});

/***/ }),
/* 1009 */
/***/ (function(module, exports, __webpack_require__) {

	var Handlebars = __webpack_require__(5);
	function __default(obj) { return obj && (obj.__esModule ? obj["default"] : obj); }
	module.exports = (Handlebars["default"] || Handlebars).template({"1":function(container,depth0,helpers,partials,data) {
	    var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3="function", lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return "<div class=\"record-details-description\">\n    <div class=\"record-details-description-inner\">\n"
	    + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"headerText") : depth0),{"name":"if","hash":{},"fn":container.program(2, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":5,"column":8},"end":{"line":9,"column":15}}})) != null ? stack1 : "")
	    + "        <b class=\"record-details-title\">"
	    + container.escapeExpression(((helper = (helper = lookupProperty(helpers,"title") || (depth0 != null ? lookupProperty(depth0,"title") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"title","hash":{},"data":data,"loc":{"start":{"line":10,"column":40},"end":{"line":10,"column":49}}}) : helper)))
	    + "</b>\n        "
	    + ((stack1 = ((helper = (helper = lookupProperty(helpers,"description") || (depth0 != null ? lookupProperty(depth0,"description") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{"name":"description","hash":{},"data":data,"loc":{"start":{"line":11,"column":8},"end":{"line":11,"column":25}}}) : helper))) != null ? stack1 : "")
	    + "\n    </div>\n</div>\n";
	},"2":function(container,depth0,helpers,partials,data) {
	    var helper, lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return "        <div class=\"record-details-header-text\">\n            "
	    + container.escapeExpression(((helper = (helper = lookupProperty(helpers,"headerText") || (depth0 != null ? lookupProperty(depth0,"headerText") : depth0)) != null ? helper : container.hooks.helperMissing),(typeof helper === "function" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{"name":"headerText","hash":{},"data":data,"loc":{"start":{"line":7,"column":12},"end":{"line":7,"column":26}}}) : helper)))
	    + "\n        </div>\n";
	},"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) {
	    var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return "<div class=\"record-details-map\"/>\n"
	    + ((stack1 = lookupProperty(helpers,"if").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,"description") : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":2,"column":0},"end":{"line":14,"column":7}}})) != null ? stack1 : "");
	},"useData":true});

/***/ }),
/* 1010 */
/***/ (function(module, exports, __webpack_require__) {

	var Handlebars = __webpack_require__(5);
	function __default(obj) { return obj && (obj.__esModule ? obj["default"] : obj); }
	module.exports = (Handlebars["default"] || Handlebars).template({"1":function(container,depth0,helpers,partials,data) {
	    return "aria-expanded=\"true\"";
	},"3":function(container,depth0,helpers,partials,data) {
	    return "class=\"collapsed\"";
	},"5":function(container,depth0,helpers,partials,data) {
	    var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return "          <!-- <i class=\"fa fa-circle-o-notch fa-spin\"></i> -->\n          <span class=\"search-progress\"><span>.</span><span>.</span><span>.</span></span>\n"
	    + ((stack1 = lookupProperty(helpers,"if").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,"totalResults") : depth0),{"name":"if","hash":{},"fn":container.program(6, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":9,"column":10},"end":{"line":11,"column":17}}})) != null ? stack1 : "");
	},"6":function(container,depth0,helpers,partials,data) {
	    var alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return "            ("
	    + alias2(alias1((depth0 != null ? lookupProperty(depth0,"hasLoaded") : depth0), depth0))
	    + "/"
	    + alias2(alias1((depth0 != null ? lookupProperty(depth0,"totalResults") : depth0), depth0))
	    + ")\n";
	},"8":function(container,depth0,helpers,partials,data) {
	    var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return ((stack1 = lookupProperty(helpers,"if").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,"hasError") : depth0),{"name":"if","hash":{},"fn":container.program(9, data, 0),"inverse":container.program(11, data, 0),"data":data,"loc":{"start":{"line":13,"column":10},"end":{"line":21,"column":17}}})) != null ? stack1 : "");
	},"9":function(container,depth0,helpers,partials,data) {
	    return "            <i class=\"fa fa-exclamation text-danger\"></i>\n";
	},"11":function(container,depth0,helpers,partials,data) {
	    var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return ((stack1 = lookupProperty(helpers,"if").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,"hasMore") : depth0),{"name":"if","hash":{},"fn":container.program(12, data, 0),"inverse":container.program(14, data, 0),"data":data,"loc":{"start":{"line":16,"column":12},"end":{"line":20,"column":19}}})) != null ? stack1 : "");
	},"12":function(container,depth0,helpers,partials,data) {
	    var alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return "              ("
	    + alias2(alias1((depth0 != null ? lookupProperty(depth0,"hasLoaded") : depth0), depth0))
	    + "/"
	    + alias2(alias1((depth0 != null ? lookupProperty(depth0,"totalResults") : depth0), depth0))
	    + ")\n";
	},"14":function(container,depth0,helpers,partials,data) {
	    var lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return "              ("
	    + container.escapeExpression(container.lambda((depth0 != null ? lookupProperty(depth0,"totalResults") : depth0), depth0))
	    + ")\n";
	},"16":function(container,depth0,helpers,partials,data) {
	    return "<span class=\"caret\"></span>";
	},"18":function(container,depth0,helpers,partials,data) {
	    var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return "<a target=\"_blank\" href=\""
	    + container.escapeExpression(container.lambda(((stack1 = (depth0 != null ? lookupProperty(depth0,"searchRequest") : depth0)) != null ? lookupProperty(stack1,"url") : stack1), depth0))
	    + "\"><i class=\"fa fa-external-link\"></i></a>";
	},"20":function(container,depth0,helpers,partials,data) {
	    return "in";
	},"22":function(container,depth0,helpers,partials,data) {
	    var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return ((stack1 = lookupProperty(helpers,"if").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,"isSearching") : depth0),{"name":"if","hash":{},"fn":container.program(23, data, 0),"inverse":container.program(25, data, 0),"data":data,"loc":{"start":{"line":30,"column":6},"end":{"line":38,"column":13}}})) != null ? stack1 : "")
	    + "      <div class=\"panel-body\">\n        <div class=\"spacer spacer-top\"/>\n        <ul id=\"result-list-"
	    + container.escapeExpression(container.lambda((depth0 != null ? lookupProperty(depth0,"layerId") : depth0), depth0))
	    + "\" class=\"result-list list-inline list-unstyled\"></ul>\n        <div class=\"spacer spacer-bottom\"/>\n      </div>\n";
	},"23":function(container,depth0,helpers,partials,data) {
	    var lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return "        <button class=\"btn btn-sm btn-default btn-block btn-load-more\" type=\"button\" disabled>"
	    + container.escapeExpression(__default(__webpack_require__(1)).call(depth0 != null ? depth0 : (container.nullContext || {}),"Searching",(depth0 != null ? lookupProperty(depth0,"countLoadMore") : depth0),{"name":"t","hash":{},"data":data,"loc":{"start":{"line":31,"column":94},"end":{"line":31,"column":126}}}))
	    + "<span class=\"search-progress\"><span>.</span><span>.</span><span>.</span></span></button>\n";
	},"25":function(container,depth0,helpers,partials,data) {
	    var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return ((stack1 = lookupProperty(helpers,"if").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,"hasMore") : depth0),{"name":"if","hash":{},"fn":container.program(26, data, 0),"inverse":container.program(28, data, 0),"data":data,"loc":{"start":{"line":32,"column":6},"end":{"line":38,"column":6}}})) != null ? stack1 : "");
	},"26":function(container,depth0,helpers,partials,data) {
	    var lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return "        <button class=\"btn btn-sm btn-default btn-block btn-load-more\" type=\"button\">"
	    + container.escapeExpression(__default(__webpack_require__(1)).call(depth0 != null ? depth0 : (container.nullContext || {}),"load_more",(depth0 != null ? lookupProperty(depth0,"countLoadMore") : depth0),{"name":"t","hash":{},"data":data,"loc":{"start":{"line":33,"column":85},"end":{"line":33,"column":116}}}))
	    + "</button>\n";
	},"28":function(container,depth0,helpers,partials,data) {
	    var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return ((stack1 = lookupProperty(helpers,"if").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,"totalResults") : depth0),{"name":"if","hash":{},"fn":container.program(29, data, 0),"inverse":container.program(31, data, 0),"data":data,"loc":{"start":{"line":34,"column":6},"end":{"line":38,"column":6}}})) != null ? stack1 : "");
	},"29":function(container,depth0,helpers,partials,data) {
	    return "        <button class=\"btn btn-sm btn-default btn-block btn-load-more\" type=\"button\" disabled>"
	    + container.escapeExpression(__default(__webpack_require__(1)).call(depth0 != null ? depth0 : (container.nullContext || {}),"No more records",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":35,"column":94},"end":{"line":35,"column":117}}}))
	    + "</button>\n";
	},"31":function(container,depth0,helpers,partials,data) {
	    return "        <button class=\"btn btn-sm btn-default btn-block btn-load-more\" type=\"button\" disabled>"
	    + container.escapeExpression(__default(__webpack_require__(1)).call(depth0 != null ? depth0 : (container.nullContext || {}),"Search returned no results",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":37,"column":94},"end":{"line":37,"column":128}}}))
	    + "</button>\n      ";
	},"33":function(container,depth0,helpers,partials,data) {
	    var lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return "      <div class=\"panel-body\" style=\"color: white\">"
	    + container.escapeExpression(__default(__webpack_require__(1)).call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,"errorMessage") : depth0),{"name":"t","hash":{},"data":data,"loc":{"start":{"line":45,"column":51},"end":{"line":45,"column":69}}}))
	    + "</div>\n";
	},"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) {
	    var stack1, alias1=container.lambda, alias2=container.escapeExpression, alias3=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return "<div class=\"panel panel-default\">\n  <div class=\"panel-heading\" role=\"tab\">\n    <h4 class=\"panel-title\">\n      <a role=\"button\" data-toggle=\"collapse\" href=\"#collapse-"
	    + alias2(alias1((depth0 != null ? lookupProperty(depth0,"layerId") : depth0), depth0))
	    + "\" "
	    + ((stack1 = lookupProperty(helpers,"unless").call(alias3,(depth0 != null ? lookupProperty(depth0,"isClosed") : depth0),{"name":"unless","hash":{},"fn":container.program(1, data, 0),"inverse":container.program(3, data, 0),"data":data,"loc":{"start":{"line":4,"column":75},"end":{"line":4,"column":151}}})) != null ? stack1 : "")
	    + ">\n        "
	    + alias2(alias1((depth0 != null ? lookupProperty(depth0,"layerName") : depth0), depth0))
	    + "\n"
	    + ((stack1 = lookupProperty(helpers,"if").call(alias3,(depth0 != null ? lookupProperty(depth0,"isSearching") : depth0),{"name":"if","hash":{},"fn":container.program(5, data, 0),"inverse":container.program(8, data, 0),"data":data,"loc":{"start":{"line":6,"column":8},"end":{"line":22,"column":15}}})) != null ? stack1 : "")
	    + "        "
	    + ((stack1 = lookupProperty(helpers,"unless").call(alias3,(depth0 != null ? lookupProperty(depth0,"isSearching") : depth0),{"name":"unless","hash":{},"fn":container.program(16, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":23,"column":8},"end":{"line":23,"column":69}}})) != null ? stack1 : "")
	    + "\n        "
	    + ((stack1 = lookupProperty(helpers,"unless").call(alias3,(depth0 != null ? lookupProperty(depth0,"hasError") : depth0),{"name":"unless","hash":{},"fn":container.program(18, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":24,"column":8},"end":{"line":24,"column":126}}})) != null ? stack1 : "")
	    + "\n      </a>\n    </h4>\n  </div>\n  <div id=\"collapse-"
	    + alias2(alias1((depth0 != null ? lookupProperty(depth0,"layerId") : depth0), depth0))
	    + "\" class=\"panel-collapse panel-result-list collapse "
	    + ((stack1 = lookupProperty(helpers,"unless").call(alias3,(depth0 != null ? lookupProperty(depth0,"isClosed") : depth0),{"name":"unless","hash":{},"fn":container.program(20, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":28,"column":82},"end":{"line":28,"column":115}}})) != null ? stack1 : "")
	    + "\" role=\"tabpanel\">\n"
	    + ((stack1 = lookupProperty(helpers,"unless").call(alias3,(depth0 != null ? lookupProperty(depth0,"hasError") : depth0),{"name":"unless","hash":{},"fn":container.program(22, data, 0),"inverse":container.program(33, data, 0),"data":data,"loc":{"start":{"line":29,"column":4},"end":{"line":46,"column":15}}})) != null ? stack1 : "")
	    + "  </div>\n</div>\n";
	},"useData":true});

/***/ }),
/* 1011 */
/***/ (function(module, exports, __webpack_require__) {

	var Handlebars = __webpack_require__(5);
	function __default(obj) { return obj && (obj.__esModule ? obj["default"] : obj); }
	module.exports = (Handlebars["default"] || Handlebars).template({"1":function(container,depth0,helpers,partials,data) {
	    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.lambda, alias3=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return "        <div class=\"checkbox\">\n          <label "
	    + ((stack1 = lookupProperty(helpers,"unless").call(alias1,((stack1 = (depth0 != null ? lookupProperty(depth0,"display") : depth0)) != null ? lookupProperty(stack1,"visible") : stack1),{"name":"unless","hash":{},"fn":container.program(2, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":12,"column":17},"end":{"line":12,"column":81}}})) != null ? stack1 : "")
	    + ">\n            <input type=\"checkbox\" "
	    + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"automaticSearch") : depth0),{"name":"if","hash":{},"fn":container.program(4, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":13,"column":35},"end":{"line":13,"column":77}}})) != null ? stack1 : "")
	    + " data-layer=\""
	    + alias3(alias2((depth0 != null ? lookupProperty(depth0,"id") : depth0), depth0))
	    + "\">\n            "
	    + alias3(alias2((depth0 != null ? lookupProperty(depth0,"displayName") : depth0), depth0))
	    + "\n            <span class=\"search-status\">\n"
	    + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"isSearching") : depth0),{"name":"if","hash":{},"fn":container.program(6, data, 0),"inverse":container.program(8, data, 0),"data":data,"loc":{"start":{"line":16,"column":14},"end":{"line":24,"column":21}}})) != null ? stack1 : "")
	    + "            </span>\n          </label>\n        </div>\n";
	},"2":function(container,depth0,helpers,partials,data) {
	    return "style=\"display:none;\"";
	},"4":function(container,depth0,helpers,partials,data) {
	    return "checked";
	},"6":function(container,depth0,helpers,partials,data) {
	    return "                <i class=\"fa fa-circle-o-notch fa-spin fa-fw\"></i>\n";
	},"8":function(container,depth0,helpers,partials,data) {
	    var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return ((stack1 = lookupProperty(helpers,"if").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,"hasError") : depth0),{"name":"if","hash":{},"fn":container.program(9, data, 0),"inverse":container.program(11, data, 0),"data":data,"loc":{"start":{"line":18,"column":14},"end":{"line":24,"column":14}}})) != null ? stack1 : "");
	},"9":function(container,depth0,helpers,partials,data) {
	    return "                <i class=\"fa fa-exclamation\"></i>\n";
	},"11":function(container,depth0,helpers,partials,data) {
	    var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return ((stack1 = lookupProperty(helpers,"if").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,"isCancelled") : depth0),{"name":"if","hash":{},"fn":container.program(12, data, 0),"inverse":container.program(14, data, 0),"data":data,"loc":{"start":{"line":20,"column":14},"end":{"line":24,"column":14}}})) != null ? stack1 : "");
	},"12":function(container,depth0,helpers,partials,data) {
	    return "";
	},"14":function(container,depth0,helpers,partials,data) {
	    var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return ((stack1 = lookupProperty(helpers,"if").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,"isCountInitiallyDisabled") : depth0),{"name":"if","hash":{},"fn":container.program(12, data, 0),"inverse":container.program(15, data, 0),"data":data,"loc":{"start":{"line":21,"column":14},"end":{"line":24,"column":14}}})) != null ? stack1 : "");
	},"15":function(container,depth0,helpers,partials,data) {
	    var alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return "                "
	    + alias2(alias1((depth0 != null ? lookupProperty(depth0,"hasLoaded") : depth0), depth0))
	    + "/"
	    + alias2(alias1((depth0 != null ? lookupProperty(depth0,"totalResults") : depth0), depth0))
	    + "\n              ";
	},"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) {
	    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return "<div class=\"dropdown\">\n  <button class=\"btn btn-default btn-block dropdown-toggle\" type=\"button\" data-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\">\n    <span class=\"selected-layer-names\"></span>\n    <span class=\"global-search-status\"></span>\n    <span class=\"caret\"></span>\n  </button>\n  <ul class=\"dropdown-menu\">\n    <li>\n      <form>\n"
	    + ((stack1 = lookupProperty(helpers,"each").call(alias1,(depth0 != null ? lookupProperty(depth0,"layers") : depth0),{"name":"each","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":10,"column":8},"end":{"line":28,"column":17}}})) != null ? stack1 : "")
	    + "      </form>\n    </li>\n  </ul>\n</div>\n\n<div class=\"result-contents\"></div>\n<button class=\"btn btn-sm btn-block btn-default select-all\" disbled=\"disabled\">"
	    + container.escapeExpression(__default(__webpack_require__(1)).call(alias1,"Select all",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":35,"column":79},"end":{"line":35,"column":97}}}))
	    + "</button>\n";
	},"useData":true});

/***/ }),
/* 1012 */
/***/ (function(module, exports, __webpack_require__) {

	var Handlebars = __webpack_require__(5);
	function __default(obj) { return obj && (obj.__esModule ? obj["default"] : obj); }
	module.exports = (Handlebars["default"] || Handlebars).template({"1":function(container,depth0,helpers,partials,data) {
	    return "      <span class=\"record-pager\">\n        <a class=\"btn btn-default btn-xs records-prev\">\n          <i class=\"fa fa-angle-double-left\" aria-hidden=\"true\"></i>\n        </a>\n        <span class=\"current-record\"></span> / <span class=\"record-count\"></span>\n        <a class=\"btn btn-default btn-xs records-next\">\n          <i class=\"fa fa-angle-double-right\" aria-hidden=\"true\"></i>\n        </a>\n      </span>\n";
	},"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) {
	    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return "<div class=\"modal-dialog modal-lg modal-full-screen-scrolling\" style=\"width: -moz-calc(100% - 20px); width: -webkit-calc(100% - 20px); width: -o-calc(100% - 20px); width: calc(100% - 20px); margin: 10px;\" role=\"document\">\n  <div class=\"modal-content\">\n    <div class=\"modal-header\">\n      <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\"><span aria-hidden=\"true\">&times;</span></button>\n"
	    + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"hasMore") : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":5,"column":6},"end":{"line":15,"column":13}}})) != null ? stack1 : "")
	    + "      <span class=\"dropdown layer-options-dropdown\">\n        <button class=\"btn btn-sm btn-default\" id=\"dLabel\" type=\"button\" data-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\">\n          <i class=\"fa fa-paint-brush\"></i>\n          Visualization\n          <span class=\"caret\"></span>\n        </button>\n        <div class=\"dropdown-menu layer-options\" aria-labelledby=\"dLabel\"></div>\n      </span>\n      <h4 class=\"modal-title\" style=\"display:inline\"></h4>\n    </div>\n    <div class=\"modal-body no-scroll-y\"></div>\n    <div class=\"modal-footer\">\n      <span class=\"buttons checkbox download-prod-option\" style=\"float:right;margin:0px\">\n        <input id=\"download-click-input\" type=\"checkbox\" class=\"is-selected\"> \n        <label for=\"download-click-input\">"
	    + alias2(__default(__webpack_require__(1)).call(alias1,"Selected for Download",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":30,"column":42},"end":{"line":30,"column":72}}}))
	    + "</label>\n        <button type=\"button\" class=\"btn btn-default whitebutton\" data-dismiss=\"modal\">"
	    + alias2(__default(__webpack_require__(1)).call(alias1,"Close",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":31,"column":87},"end":{"line":31,"column":101}}}))
	    + "</button>\n      </span>\n    </div>\n  </div>\n</div>\n";
	},"useData":true});

/***/ }),
/* 1013 */
/***/ (function(module, exports, __webpack_require__) {

	var Handlebars = __webpack_require__(5);
	function __default(obj) { return obj && (obj.__esModule ? obj["default"] : obj); }
	module.exports = (Handlebars["default"] || Handlebars).template({"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) {
	    return "<div class=\"root-container\" style=\"width: 100%; height:100%; margin: 0; padding: 0;\">\n  <div id=\"content\" style=\"width: 100%; height:100%; margin: 0; padding: 0;\"></div>\n  <div id=\"timeSlider\"></div>\n  <div id=\"leftPanel\" style=\"margin: 0; left: 0; top: 0;position: absolute; height: 100%\"></div>\n  <div id=\"rightPanel\" style=\"margin: 0; right: 0; top: 0; position: absolute; height: 100%\"></div>\n  <div id=\"bottomPanel\" style=\"position: absolute; left: 50%; bottom: 20px; display: none;\"></div>\n  <div id=\"topPanel\"></div>\n  <div id=\"infoPanel\"></div>\n</div>\n<div id=\"modals\" style=\"margin: 0; left: 0; top: 0;position: absolute;\"></div>\n<div id=\"top-modals\" style=\"margin: 0; left: 0; top: 0;position: absolute;\"></div>\n";
	},"useData":true});

/***/ }),
/* 1014 */
/***/ (function(module, exports, __webpack_require__) {

	var Handlebars = __webpack_require__(5);
	function __default(obj) { return obj && (obj.__esModule ? obj["default"] : obj); }
	module.exports = (Handlebars["default"] || Handlebars).template({"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) {
	    var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.escapeExpression;
	
	  return "<div class=\"modal-dialog modal-lg modal-full-screen-scrolling\" style=\"width: -moz-calc(100% - 20px); width: -webkit-calc(100% - 20px); width: -o-calc(100% - 20px); width: calc(100% - 20px); margin: 10px;\" role=\"document\">\n  <div class=\"modal-content\" style=\"margin-bottom: 10px;\">\n    <div class=\"modal-header\">\n      <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\"><span aria-hidden=\"true\">&times;</span></button>\n      <h4 class=\"modal-title\" style=\"display:inline\">Select files for download.</h4>\n    </div>\n    <div class=\"modal-body greyBg\">\n      <i class=\"fa fa-circle-o-notch fa-spin fa-fw spinner\"></i>\n    </div>\n    <div class=\"modal-footer\">\n      <span class=\"buttons\">\n        <div class=\"btn-group\" role=\"group\">\n          <button class=\"btn btn-default download-as-metalink\" type=\"button\" disabled>"
	    + alias2(__default(__webpack_require__(1)).call(alias1,"Download as Metalink",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":13,"column":86},"end":{"line":13,"column":114}}}))
	    + "</button>\n          <button class=\"btn btn-default download-as-url-list\" type=\"button\" disabled>"
	    + alias2(__default(__webpack_require__(1)).call(alias1,"Download as URL-List",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":14,"column":86},"end":{"line":14,"column":114}}}))
	    + "</button>\n          <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\">"
	    + alias2(__default(__webpack_require__(1)).call(alias1,"Close",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":15,"column":77},"end":{"line":15,"column":91}}}))
	    + "</button>\n        </div>\n        <!-- <div class=\"btn-group dropup\" role=\"group\">\n          <button class=\"btn btn-default dropdown-toggle\" data-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\" type=\"button\" disabled>"
	    + alias2(__default(__webpack_require__(1)).call(alias1,"Download as",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":18,"column":147},"end":{"line":18,"column":166}}}))
	    + " <span class=\"caret\"></span></button>\n          <ul class=\"dropdown-menu dropdown-menu-right\">\n            <li><a href=\"#\" class=\"download-as-metalink\">"
	    + alias2(__default(__webpack_require__(1)).call(alias1,"Download as Metalink",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":20,"column":57},"end":{"line":20,"column":85}}}))
	    + "</a></li>\n            <li><a href=\"#\" class=\"download-as-url-list\">"
	    + alias2(__default(__webpack_require__(1)).call(alias1,"Download as URL-List",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":21,"column":57},"end":{"line":21,"column":85}}}))
	    + "</a></li>\n          </ul>\n        </div> -->\n      </span>\n    </div>\n  </div>\n</div>\n";
	},"useData":true});

/***/ }),
/* 1015 */
/***/ (function(module, exports, __webpack_require__) {

	var Handlebars = __webpack_require__(5);
	function __default(obj) { return obj && (obj.__esModule ? obj["default"] : obj); }
	module.exports = (Handlebars["default"] || Handlebars).template({"1":function(container,depth0,helpers,partials,data) {
	    return "navbar-right";
	},"3":function(container,depth0,helpers,partials,data) {
	    return "";
	},"5":function(container,depth0,helpers,partials,data,blockParams,depths) {
	    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.lambda, alias3=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return "          <li class=\""
	    + ((stack1 = lookupProperty(helpers,"if").call(alias1,(data && lookupProperty(data,"first")),{"name":"if","hash":{},"fn":container.program(6, data, 0, blockParams, depths),"inverse":container.noop,"data":data,"loc":{"start":{"line":14,"column":21},"end":{"line":14,"column":48}}})) != null ? stack1 : "")
	    + "\">\n            <a href=\"#"
	    + alias3(alias2((depths[1] != null ? lookupProperty(depths[1],"position") : depths[1]), depth0))
	    + "-"
	    + alias3(alias2((data && lookupProperty(data,"index")), depth0))
	    + "\" aria-controls=\"messages\" role=\"tab\" data-toggle=\"tab\">"
	    + alias3(__default(__webpack_require__(1)).call(alias1,(depth0 != null ? lookupProperty(depth0,"name") : depth0),{"name":"t","hash":{},"data":data,"loc":{"start":{"line":15,"column":104},"end":{"line":15,"column":119}}}))
	    + " "
	    + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"hasInfo") : depth0),{"name":"if","hash":{},"fn":container.program(8, data, 0, blockParams, depths),"inverse":container.noop,"data":data,"loc":{"start":{"line":15,"column":120},"end":{"line":15,"column":173}}})) != null ? stack1 : "")
	    + "</a>\n          </li>\n";
	},"6":function(container,depth0,helpers,partials,data) {
	    return "active";
	},"8":function(container,depth0,helpers,partials,data) {
	    return "<span class=\"info\"></span>";
	},"10":function(container,depth0,helpers,partials,data,blockParams,depths) {
	    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.lambda, alias3=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return "        <div role=\"tabpanel\" class=\"tab-pane"
	    + ((stack1 = lookupProperty(helpers,"if").call(alias1,(data && lookupProperty(data,"first")),{"name":"if","hash":{},"fn":container.program(11, data, 0, blockParams, depths),"inverse":container.noop,"data":data,"loc":{"start":{"line":25,"column":44},"end":{"line":25,"column":72}}})) != null ? stack1 : "")
	    + "\" id=\""
	    + alias3(alias2((depths[1] != null ? lookupProperty(depths[1],"position") : depths[1]), depth0))
	    + "-"
	    + alias3(alias2((data && lookupProperty(data,"index")), depth0))
	    + "\">"
	    + alias3(__default(__webpack_require__(1)).call(alias1,(depth0 != null ? lookupProperty(depth0,"name") : depth0),{"name":"t","hash":{},"data":data,"loc":{"start":{"line":25,"column":106},"end":{"line":25,"column":121}}}))
	    + "</div>\n";
	},"11":function(container,depth0,helpers,partials,data) {
	    return " active";
	},"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data,blockParams,depths) {
	    var stack1, alias1=container.lambda, alias2=container.escapeExpression, alias3=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return "<button class=\"btn btn-default toggle-side-panel toggle-side-panel-"
	    + alias2(alias1((depth0 != null ? lookupProperty(depth0,"position") : depth0), depth0))
	    + " toggle-side-panel-out\">\n  <i class=\"fa "
	    + alias2(alias1((depth0 != null ? lookupProperty(depth0,"icon") : depth0), depth0))
	    + "\" aria-hidden=\"true\"></i>\n</button>\n\n<div class=\"side-panel side-panel-"
	    + alias2(alias1((depth0 != null ? lookupProperty(depth0,"position") : depth0), depth0))
	    + "\">\n  <button class=\"btn btn-default toggle-side-panel toggle-side-panel-"
	    + alias2(alias1((depth0 != null ? lookupProperty(depth0,"position") : depth0), depth0))
	    + "\">\n    <i class=\"fa fa-caret-down\" aria-hidden=\"true\"></i>\n  </button>\n\n  <nav class=\"nav\">\n    <div class=\"container-fluid\">\n      <ul class=\"nav nav-tabs "
	    + ((stack1 = lookupProperty(helpers,"if").call(alias3,(depth0 != null ? lookupProperty(depth0,"isLeft") : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0, blockParams, depths),"inverse":container.program(3, data, 0, blockParams, depths),"data":data,"loc":{"start":{"line":12,"column":30},"end":{"line":12,"column":71}}})) != null ? stack1 : "")
	    + "\">\n"
	    + ((stack1 = lookupProperty(helpers,"each").call(alias3,(depth0 != null ? lookupProperty(depth0,"views") : depth0),{"name":"each","hash":{},"fn":container.program(5, data, 0, blockParams, depths),"inverse":container.noop,"data":data,"loc":{"start":{"line":13,"column":8},"end":{"line":17,"column":17}}})) != null ? stack1 : "")
	    + "      </ul>\n    </div>\n  </nav>\n\n  <div class=\"side-panel-content out\">\n    <div class=\"tab-content\">\n"
	    + ((stack1 = lookupProperty(helpers,"each").call(alias3,(depth0 != null ? lookupProperty(depth0,"views") : depth0),{"name":"each","hash":{},"fn":container.program(10, data, 0, blockParams, depths),"inverse":container.noop,"data":data,"loc":{"start":{"line":24,"column":6},"end":{"line":26,"column":15}}})) != null ? stack1 : "")
	    + "    </div>\n  </div>\n</div>\n";
	},"useData":true,"useDepths":true});

/***/ }),
/* 1016 */
/***/ (function(module, exports, __webpack_require__) {

	var Handlebars = __webpack_require__(5);
	function __default(obj) { return obj && (obj.__esModule ? obj["default"] : obj); }
	module.exports = (Handlebars["default"] || Handlebars).template({"1":function(container,depth0,helpers,partials,data) {
	    return "checked";
	},"3":function(container,depth0,helpers,partials,data) {
	    var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return ((stack1 = lookupProperty(helpers,"unless").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,"downloadEnabled") : depth0),{"name":"unless","hash":{},"fn":container.program(4, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":12,"column":4},"end":{"line":14,"column":15}}})) != null ? stack1 : "");
	},"4":function(container,depth0,helpers,partials,data) {
	    return "      <p>"
	    + container.escapeExpression(__default(__webpack_require__(1)).call(depth0 != null ? depth0 : (container.nullContext || {}),"Log in to enable the download",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":13,"column":9},"end":{"line":13,"column":46}}}))
	    + "</p>\n";
	},"6":function(container,depth0,helpers,partials,data) {
	    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return "      <button class=\"btn btn-default btn-sm tool start-download\" type=\"button\" disabled>"
	    + alias2(__default(__webpack_require__(1)).call(alias1,"Download",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":19,"column":88},"end":{"line":19,"column":104}}}))
	    + "</button>\n    <div class=\"btn-group dropup tool\" role=\"group\">\n      <button class=\"btn btn-default btn-sm dropdown-toggle\" data-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\" type=\"button\" disabled>"
	    + alias2(__default(__webpack_require__(1)).call(alias1,"Download as",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":21,"column":150},"end":{"line":21,"column":169}}}))
	    + " <span class=\"caret\"></span></button>\n      <ul class=\"dropdown-menu dropdown-menu-right\">\n        <li><a href=\"#\" class=\"download-as-metalink\">"
	    + alias2(__default(__webpack_require__(1)).call(alias1,"Download as Metalink",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":23,"column":53},"end":{"line":23,"column":81}}}))
	    + "</a></li>\n        <li><a href=\"#\" class=\"download-as-url-list\">"
	    + alias2(__default(__webpack_require__(1)).call(alias1,"Download as URL-List",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":24,"column":53},"end":{"line":24,"column":81}}}))
	    + "</a></li>\n"
	    + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"selectFilesEnabled") : depth0),{"name":"if","hash":{},"fn":container.program(7, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":25,"column":8},"end":{"line":27,"column":15}}})) != null ? stack1 : "")
	    + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"enableFullResolutionDownload") : depth0),{"name":"if","hash":{},"fn":container.program(9, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":28,"column":8},"end":{"line":30,"column":15}}})) != null ? stack1 : "")
	    + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"enableProcessing") : depth0),{"name":"if","hash":{},"fn":container.program(11, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":31,"column":8},"end":{"line":33,"column":15}}})) != null ? stack1 : "")
	    + "      </ul>\n    </div>\n      <button class=\"btn btn-sm btn-danger tool deselect-all\" type=\"button\" disabled>"
	    + alias2(__default(__webpack_require__(1)).call(alias1,"Deselect all",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":36,"column":85},"end":{"line":36,"column":105}}}))
	    + "</button>\n";
	},"7":function(container,depth0,helpers,partials,data) {
	    return "          <li><a href=\"#\" class=\"select-files\">"
	    + container.escapeExpression(__default(__webpack_require__(1)).call(depth0 != null ? depth0 : (container.nullContext || {}),"Download selected files...",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":26,"column":47},"end":{"line":26,"column":81}}}))
	    + "</a></li>\n";
	},"9":function(container,depth0,helpers,partials,data) {
	    return "          <li><a href=\"#\" class=\"download-full-res\">"
	    + container.escapeExpression(__default(__webpack_require__(1)).call(depth0 != null ? depth0 : (container.nullContext || {}),"Download full resolution",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":29,"column":52},"end":{"line":29,"column":84}}}))
	    + "</a></li>\n";
	},"11":function(container,depth0,helpers,partials,data) {
	    return "          <li><a href=\"#\" class=\"start-processing\">"
	    + container.escapeExpression(__default(__webpack_require__(1)).call(depth0 != null ? depth0 : (container.nullContext || {}),"Start processing",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":32,"column":51},"end":{"line":32,"column":75}}}))
	    + "</a></li>\n";
	},"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) {
	    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return "<div class=\"checkbox checbox-switch search-results-toggle\">\n  <label class=\"panel-title\">\n    "
	    + alias2(__default(__webpack_require__(1)).call(alias1,"Search",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":3,"column":4},"end":{"line":3,"column":18}}}))
	    + "\n    <input type=\"checkbox\" name=\"\" "
	    + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"automaticSearch") : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":4,"column":35},"end":{"line":4,"column":72}}})) != null ? stack1 : "")
	    + " data-layer=\""
	    + alias2(container.lambda((depth0 != null ? lookupProperty(depth0,"id") : depth0), depth0))
	    + "\">\n    <span></span>\n  </label>\n</div>\n<div class=\"search-results-header\"></div>\n<div class=\"result-contents\"></div>\n<div class=\"download-disabled-warning\">\n"
	    + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"anySelectedToDisplay") : depth0),{"name":"if","hash":{},"fn":container.program(3, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":11,"column":2},"end":{"line":15,"column":9}}})) != null ? stack1 : "")
	    + "</div>\n<span class=\"btn-group tools search-results-footer\">\n"
	    + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"anySelectedToDisplay") : depth0),{"name":"if","hash":{},"fn":container.program(6, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":18,"column":2},"end":{"line":37,"column":9}}})) != null ? stack1 : "")
	    + "</span>\n";
	},"useData":true});

/***/ }),
/* 1017 */
/***/ (function(module, exports, __webpack_require__) {

	var Handlebars = __webpack_require__(5);
	function __default(obj) { return obj && (obj.__esModule ? obj["default"] : obj); }
	module.exports = (Handlebars["default"] || Handlebars).template({"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) {
	    return "<ul class=\"search-result-list list-unstyled list-inline\">\n  <div class=\"panel-result-list\">\n    <div class=\"panel-body\">\n      <div class=\"spacer spacer-top\"/>\n      <ul class=\"selection-items list-unstyled list-inline result-list\"></ul>\n      <div class=\"spacer spacer-bottom\"/>\n    </div>\n  </div>\n</ul>\n";
	},"useData":true});

/***/ }),
/* 1018 */
/***/ (function(module, exports, __webpack_require__) {

	var Handlebars = __webpack_require__(5);
	function __default(obj) { return obj && (obj.__esModule ? obj["default"] : obj); }
	module.exports = (Handlebars["default"] || Handlebars).template({"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) {
	    return "<h4 class=\"no-product-selected\">\n  "
	    + container.escapeExpression(__default(__webpack_require__(1)).call(depth0 != null ? depth0 : (container.nullContext || {}),"Enable search to display the products and download them",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":2,"column":2},"end":{"line":2,"column":65}}}))
	    + "\n</h4>\n";
	},"useData":true});

/***/ }),
/* 1019 */
/***/ (function(module, exports, __webpack_require__) {

	var Handlebars = __webpack_require__(5);
	function __default(obj) { return obj && (obj.__esModule ? obj["default"] : obj); }
	module.exports = (Handlebars["default"] || Handlebars).template({"1":function(container,depth0,helpers,partials,data) {
	    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return "  <div class=\"title-container\">\n    <h4 class=\"panel-title layer-name\">\n      "
	    + container.escapeExpression(container.lambda((depth0 != null ? lookupProperty(depth0,"layerName") : depth0), depth0))
	    + "\n"
	    + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"isSearching") : depth0),{"name":"if","hash":{},"fn":container.program(2, data, 0),"inverse":container.program(5, data, 0),"data":data,"loc":{"start":{"line":5,"column":6},"end":{"line":20,"column":13}}})) != null ? stack1 : "")
	    + "      "
	    + ((stack1 = lookupProperty(helpers,"unless").call(alias1,(depth0 != null ? lookupProperty(depth0,"hasError") : depth0),{"name":"unless","hash":{},"fn":container.program(13, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":21,"column":6},"end":{"line":21,"column":124}}})) != null ? stack1 : "")
	    + "\n    </h4>\n    <div class=\"input-group download-control-combined\">\n"
	    + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"termsAndConditionsUrl") : depth0),{"name":"if","hash":{},"fn":container.program(15, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":24,"column":6},"end":{"line":30,"column":13}}})) != null ? stack1 : "")
	    + "    </div>\n  </div>\n"
	    + ((stack1 = lookupProperty(helpers,"unless").call(alias1,(depth0 != null ? lookupProperty(depth0,"hasError") : depth0),{"name":"unless","hash":{},"fn":container.program(18, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":33,"column":2},"end":{"line":51,"column":13}}})) != null ? stack1 : "");
	},"2":function(container,depth0,helpers,partials,data) {
	    var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return "        <span class=\"search-progress\"><span>.</span><span>.</span><span>.</span></span>\n"
	    + ((stack1 = lookupProperty(helpers,"if").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,"totalResults") : depth0),{"name":"if","hash":{},"fn":container.program(3, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":7,"column":8},"end":{"line":9,"column":15}}})) != null ? stack1 : "");
	},"3":function(container,depth0,helpers,partials,data) {
	    var alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return "          ("
	    + alias2(alias1((depth0 != null ? lookupProperty(depth0,"hasLoaded") : depth0), depth0))
	    + "/"
	    + alias2(alias1((depth0 != null ? lookupProperty(depth0,"totalResults") : depth0), depth0))
	    + ")\n";
	},"5":function(container,depth0,helpers,partials,data) {
	    var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return ((stack1 = lookupProperty(helpers,"if").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,"hasError") : depth0),{"name":"if","hash":{},"fn":container.program(6, data, 0),"inverse":container.program(8, data, 0),"data":data,"loc":{"start":{"line":11,"column":8},"end":{"line":19,"column":15}}})) != null ? stack1 : "");
	},"6":function(container,depth0,helpers,partials,data) {
	    return "          <i class=\"fa fa-exclamation text-danger\"></i>\n";
	},"8":function(container,depth0,helpers,partials,data) {
	    var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return ((stack1 = lookupProperty(helpers,"if").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,"hasMore") : depth0),{"name":"if","hash":{},"fn":container.program(9, data, 0),"inverse":container.program(11, data, 0),"data":data,"loc":{"start":{"line":14,"column":10},"end":{"line":18,"column":17}}})) != null ? stack1 : "");
	},"9":function(container,depth0,helpers,partials,data) {
	    var alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return "            ("
	    + alias2(alias1((depth0 != null ? lookupProperty(depth0,"hasLoaded") : depth0), depth0))
	    + "/"
	    + alias2(alias1((depth0 != null ? lookupProperty(depth0,"totalResults") : depth0), depth0))
	    + ")\n";
	},"11":function(container,depth0,helpers,partials,data) {
	    var lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return "            ("
	    + container.escapeExpression(container.lambda((depth0 != null ? lookupProperty(depth0,"totalResults") : depth0), depth0))
	    + ")\n";
	},"13":function(container,depth0,helpers,partials,data) {
	    var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return "<a target=\"_blank\" href=\""
	    + container.escapeExpression(container.lambda(((stack1 = (depth0 != null ? lookupProperty(depth0,"searchRequest") : depth0)) != null ? lookupProperty(stack1,"url") : stack1), depth0))
	    + "\"><i class=\"fa fa-external-link\"></i></a>";
	},"15":function(container,depth0,helpers,partials,data) {
	    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return "        <div class=\"checkbox\" style=\"margin-bottom:0px;\">\n          <label>\n            <input type=\"checkbox\" class=\"terms-and-conditions\" "
	    + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"hasAcceptedTerms") : depth0),{"name":"if","hash":{},"fn":container.program(16, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":27,"column":64},"end":{"line":27,"column":102}}})) != null ? stack1 : "")
	    + "> "
	    + ((stack1 = __default(__webpack_require__(1)).call(alias1,"terms_and_conditions",(depth0 != null ? lookupProperty(depth0,"termsAndConditionsUrl") : depth0),{"name":"t","hash":{},"data":data,"loc":{"start":{"line":27,"column":104},"end":{"line":27,"column":156}}})) != null ? stack1 : "")
	    + "\n          </label>\n        </div>\n";
	},"16":function(container,depth0,helpers,partials,data) {
	    return "checked";
	},"18":function(container,depth0,helpers,partials,data) {
	    var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return "    <span class=\"btn-group select-bar-group tools\">\n"
	    + ((stack1 = lookupProperty(helpers,"if").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,"automaticSearch") : depth0),{"name":"if","hash":{},"fn":container.program(19, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":35,"column":6},"end":{"line":47,"column":13}}})) != null ? stack1 : "")
	    + "        <button class=\"btn btn-sm btn-default whitebutton tool btn-selected-count\" type=\"button\">\n          'Selected (0)'</button>\n    </span>\n";
	},"19":function(container,depth0,helpers,partials,data) {
	    var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return ((stack1 = lookupProperty(helpers,"unless").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,"displaySelected") : depth0),{"name":"unless","hash":{},"fn":container.program(20, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":36,"column":8},"end":{"line":46,"column":19}}})) != null ? stack1 : "");
	},"20":function(container,depth0,helpers,partials,data) {
	    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"isSearching") : depth0),{"name":"if","hash":{},"fn":container.program(21, data, 0),"inverse":container.program(23, data, 0),"data":data,"loc":{"start":{"line":37,"column":10},"end":{"line":44,"column":17}}})) != null ? stack1 : "")
	    + "        <button class=\"btn btn-block btn-default btn-sm whitebutton tool select-all-combined\" "
	    + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"downloadableListEmpty") : depth0),{"name":"if","hash":{},"fn":container.program(31, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":45,"column":94},"end":{"line":45,"column":138}}})) != null ? stack1 : "")
	    + ">Select all</button>\n";
	},"21":function(container,depth0,helpers,partials,data) {
	    var lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return "            <button class=\"btn btn-sm btn-default whitebutton tool btn-load-more\" type=\"button\" disabled>"
	    + container.escapeExpression(__default(__webpack_require__(1)).call(depth0 != null ? depth0 : (container.nullContext || {}),"Searching",(depth0 != null ? lookupProperty(depth0,"countLoadMore") : depth0),{"name":"t","hash":{},"data":data,"loc":{"start":{"line":38,"column":105},"end":{"line":38,"column":137}}}))
	    + "<span class=\"search-progress\"><span>.</span><span>.</span><span>.</span></span></button>\n";
	},"23":function(container,depth0,helpers,partials,data) {
	    var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return ((stack1 = lookupProperty(helpers,"if").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,"hasMore") : depth0),{"name":"if","hash":{},"fn":container.program(24, data, 0),"inverse":container.program(26, data, 0),"data":data,"loc":{"start":{"line":39,"column":10},"end":{"line":44,"column":10}}})) != null ? stack1 : "");
	},"24":function(container,depth0,helpers,partials,data) {
	    var lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return "            <button class=\"btn btn-sm btn-default whitebutton tool btn-load-more\" type=\"button\">"
	    + container.escapeExpression(__default(__webpack_require__(1)).call(depth0 != null ? depth0 : (container.nullContext || {}),"load_more",(depth0 != null ? lookupProperty(depth0,"countLoadMore") : depth0),{"name":"t","hash":{},"data":data,"loc":{"start":{"line":40,"column":96},"end":{"line":40,"column":127}}}))
	    + "</button>\n";
	},"26":function(container,depth0,helpers,partials,data) {
	    var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return ((stack1 = lookupProperty(helpers,"if").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,"totalResults") : depth0),{"name":"if","hash":{},"fn":container.program(27, data, 0),"inverse":container.program(29, data, 0),"data":data,"loc":{"start":{"line":41,"column":10},"end":{"line":44,"column":10}}})) != null ? stack1 : "");
	},"27":function(container,depth0,helpers,partials,data) {
	    return "";
	},"29":function(container,depth0,helpers,partials,data) {
	    return "            <button class=\"btn btn-sm btn-default whitebutton tool btn-load-more\" type=\"button\" disabled>"
	    + container.escapeExpression(__default(__webpack_require__(1)).call(depth0 != null ? depth0 : (container.nullContext || {}),"No results",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":43,"column":105},"end":{"line":43,"column":123}}}))
	    + "</button>\n          ";
	},"31":function(container,depth0,helpers,partials,data) {
	    return "disabled";
	},"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) {
	    var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return ((stack1 = lookupProperty(helpers,"if").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,"anySelectedToDisplay") : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":1,"column":0},"end":{"line":52,"column":7}}})) != null ? stack1 : "");
	},"useData":true});

/***/ }),
/* 1020 */
/***/ (function(module, exports, __webpack_require__) {

	var Handlebars = __webpack_require__(5);
	function __default(obj) { return obj && (obj.__esModule ? obj["default"] : obj); }
	module.exports = (Handlebars["default"] || Handlebars).template({"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) {
	    var alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return "<a href=\"#\">\n  <img src=\""
	    + alias2(alias1((depth0 != null ? lookupProperty(depth0,"thumbnailUrl") : depth0), depth0))
	    + "\" alt=\""
	    + alias2(__default(__webpack_require__(1)).call(depth0 != null ? depth0 : (container.nullContext || {}),"trying to download thumbnail",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":2,"column":35},"end":{"line":2,"column":72}}}))
	    + "\">\n</a>\n<div>"
	    + alias2(alias1((depth0 != null ? lookupProperty(depth0,"date") : depth0), depth0))
	    + "<br/>"
	    + alias2(alias1((depth0 != null ? lookupProperty(depth0,"time") : depth0), depth0))
	    + "</div>\n<button class=\"btn btn-default btn-xs record-info\">\n  <i class=\"fa fa-info-circle\" aria-hidden=\"true\"></i>\n</button>\n";
	},"useData":true});

/***/ }),
/* 1021 */
/***/ (function(module, exports, __webpack_require__) {

	var Handlebars = __webpack_require__(5);
	function __default(obj) { return obj && (obj.__esModule ? obj["default"] : obj); }
	module.exports = (Handlebars["default"] || Handlebars).template({"1":function(container,depth0,helpers,partials,data) {
	    return "  <div class=\"panel-result-list\">\n    <div class=\"panel-body\">\n        <div class=\"spacer spacer-top\"/>\n        <ul class=\"result-list list-inline list-unstyled\"></ul>\n        <div class=\"spacer spacer-bottom\"/>\n    </div>\n  </div>\n";
	},"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) {
	    var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return ((stack1 = lookupProperty(helpers,"unless").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,"hasError") : depth0),{"name":"unless","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":1,"column":0},"end":{"line":9,"column":11}}})) != null ? stack1 : "");
	},"useData":true});

/***/ }),
/* 1022 */
/***/ (function(module, exports, __webpack_require__) {

	var Handlebars = __webpack_require__(5);
	function __default(obj) { return obj && (obj.__esModule ? obj["default"] : obj); }
	module.exports = (Handlebars["default"] || Handlebars).template({"1":function(container,depth0,helpers,partials,data) {
	    return "in";
	},"3":function(container,depth0,helpers,partials,data) {
	    var alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.escapeExpression;
	
	  return "  <div class=\"form-group\">\n    <label for=\"\">"
	    + alias2(__default(__webpack_require__(1)).call(alias1,"Upload",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":17,"column":18},"end":{"line":17,"column":32}}}))
	    + "</label>\n    <div class=\"input-group\">\n      <div class=\"input-group-btn\">\n        <label class=\"btn btn-default btn-file btn-sm\"\n          data-toggle=\"tooltip\" data-container=\"body\" data-placement=\"right\"\n          title=\""
	    + alias2(__default(__webpack_require__(1)).call(alias1,"Select zipped SHP, unzipped SHP, GeoJSON, KML or KMZ file",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":22,"column":17},"end":{"line":22,"column":82}}}))
	    + "\">\n          "
	    + alias2(__default(__webpack_require__(1)).call(alias1,"Browse",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":23,"column":10},"end":{"line":23,"column":24}}}))
	    + " <input type=\"file\" multiple style=\"display: none;\">\n        </label>\n      </div>\n      <input type=\"text\" class=\"form-control input-sm upload-input\" placeholder=\""
	    + alias2(__default(__webpack_require__(1)).call(alias1,"No file selected",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":26,"column":81},"end":{"line":26,"column":105}}}))
	    + "\" disabled>\n    </div>\n    <div class=\"feature-list\"></div>\n  </div>\n";
	},"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) {
	    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return "<div class=\"panel-heading\">\n  <h3 class=\"panel-title\">\n    <a role=\"button\" data-toggle=\"collapse\" href=\"#collapse-spatial-filter\">"
	    + alias2(__default(__webpack_require__(1)).call(alias1,"Spatial Filter",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":3,"column":76},"end":{"line":3,"column":98}}}))
	    + " <span class=\"caret\"></span></a>\n  </h3>\n</div>\n<div id=\"collapse-spatial-filter\" class=\"panel-body collapse "
	    + ((stack1 = lookupProperty(helpers,"unless").call(alias1,(depth0 != null ? lookupProperty(depth0,"collapsed") : depth0),{"name":"unless","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":6,"column":61},"end":{"line":6,"column":95}}})) != null ? stack1 : "")
	    + "\">\n  <div class=\"form-group\">\n    <label for=\"\">"
	    + alias2(__default(__webpack_require__(1)).call(alias1,"Draw",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":8,"column":18},"end":{"line":8,"column":30}}}))
	    + "</label>\n    <div class=\"btn-group btn-group-justified tools\" role=\"group\" aria-label=\"...\">\n      <a href=\"#\" role=\"button\" class=\"btn btn-default tool tool-point\">"
	    + alias2(__default(__webpack_require__(1)).call(alias1,"Point",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":10,"column":72},"end":{"line":10,"column":85}}}))
	    + "</a>\n      <a href=\"#\" role=\"button\" class=\"btn btn-default tool tool-bbox\">"
	    + alias2(__default(__webpack_require__(1)).call(alias1,"Rectangle",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":11,"column":71},"end":{"line":11,"column":88}}}))
	    + "</a>\n      <a href=\"#\" role=\"button\" class=\"btn btn-default tool tool-polygon\">"
	    + alias2(__default(__webpack_require__(1)).call(alias1,"Polygon",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":12,"column":74},"end":{"line":12,"column":89}}}))
	    + "</a>\n    </div>\n  </div>\n"
	    + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"uploadEnabled") : depth0),{"name":"if","hash":{},"fn":container.program(3, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":15,"column":2},"end":{"line":30,"column":9}}})) != null ? stack1 : "")
	    + "\n  <div id=\"selection-wrapper\">\n    <div class=\"form-group show-geometry show-point\">\n      <label for=\"\">"
	    + alias2(__default(__webpack_require__(1)).call(alias1,"Current Selection",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":34,"column":20},"end":{"line":34,"column":45}}}))
	    + "</label>\n      <div class=\"input-group coordinate-input-container tools\">\n        <input type=\"number\" class=\"form-control input-sm\" placeholder=\""
	    + alias2(__default(__webpack_require__(1)).call(alias1,"Longitude",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":36,"column":72},"end":{"line":36,"column":89}}}))
	    + "\" min=\"-180\" max=\"180\">\n        <input type=\"number\" class=\"form-control input-sm\" placeholder=\""
	    + alias2(__default(__webpack_require__(1)).call(alias1,"Latitude",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":37,"column":72},"end":{"line":37,"column":88}}}))
	    + "\" min=\"-90\" max=\"90\">\n      </div>\n    </div>\n\n    <div class=\"form-group show-geometry show-bbox\">\n      <label for=\"\">"
	    + alias2(__default(__webpack_require__(1)).call(alias1,"Current Selection",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":42,"column":20},"end":{"line":42,"column":45}}}))
	    + "</label>\n      <div class=\"input-group coordinate-input-container tools\">\n        <input type=\"number\" class=\"form-control input-sm\" placeholder=\"Min-X\" min=\"-180\" max=\"180\">\n        <input type=\"number\" class=\"form-control input-sm\" placeholder=\"Min-Y\" min=\"-90\" max=\"90\">\n        <input type=\"number\" class=\"form-control input-sm\" placeholder=\"Max-X\" min=\"-180\" max=\"180\">\n        <input type=\"number\" class=\"form-control input-sm\" placeholder=\"Max-Y\" min=\"-90\" max=\"90\">\n      </div>\n    </div>\n\n    <div class=\"form-group show-geometry show-polygon\">\n      <label for=\"\">"
	    + alias2(__default(__webpack_require__(1)).call(alias1,"Current Selection",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":52,"column":20},"end":{"line":52,"column":45}}}))
	    + "</label>\n      <!-- <input type=\"text\" class=\"form-control input-sm\" disabled> -->\n    </div>\n\n    <div class=\"form-group\">\n      <div class=\"btn-group btn-group-justified tools\" role=\"group\" aria-label=\"...\">\n        <a href=\"#\" role=\"button\" class=\"btn btn-default btn-sm tool tool-show-feature\">"
	    + alias2(__default(__webpack_require__(1)).call(alias1,"Zoom to Selection",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":58,"column":88},"end":{"line":58,"column":113}}}))
	    + "</a>\n        <a href=\"#\" role=\"button\" class=\"btn btn-danger btn-sm tool tool-clear\">"
	    + alias2(__default(__webpack_require__(1)).call(alias1,"Clear Selection",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":59,"column":80},"end":{"line":59,"column":103}}}))
	    + "</a>\n      </div>\n    </div>\n  </div>\n</div>\n";
	},"useData":true});

/***/ }),
/* 1023 */
/***/ (function(module, exports, __webpack_require__) {

	var Handlebars = __webpack_require__(5);
	function __default(obj) { return obj && (obj.__esModule ? obj["default"] : obj); }
	module.exports = (Handlebars["default"] || Handlebars).template({"1":function(container,depth0,helpers,partials,data) {
	    var lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return "    data-toggle=\"tooltip\" data-placement=\"top\" title=\""
	    + container.escapeExpression(__default(__webpack_require__(1)).call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,"title") : depth0),{"name":"t","hash":{},"data":data,"loc":{"start":{"line":3,"column":54},"end":{"line":3,"column":65}}}))
	    + "\"\n";
	},"3":function(container,depth0,helpers,partials,data) {
	    var lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return "value=\""
	    + container.escapeExpression(container.lambda((depth0 != null ? lookupProperty(depth0,"default") : depth0), depth0))
	    + "\"";
	},"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) {
	    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return "<label class=\"col-sm-6 control-label\"\n"
	    + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"title") : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":2,"column":2},"end":{"line":4,"column":9}}})) != null ? stack1 : "")
	    + ">"
	    + alias2(__default(__webpack_require__(1)).call(alias1,(depth0 != null ? lookupProperty(depth0,"displayName") : depth0),{"name":"t","hash":{},"data":data,"loc":{"start":{"line":5,"column":1},"end":{"line":5,"column":18}}}))
	    + "</label>\n<div class=\"col-sm-6\">\n  <input type=\"text\" data-type=\""
	    + alias2(container.lambda((depth0 != null ? lookupProperty(depth0,"type") : depth0), depth0))
	    + "\" "
	    + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"default") : depth0),{"name":"if","hash":{},"fn":container.program(3, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":7,"column":44},"end":{"line":7,"column":85}}})) != null ? stack1 : "")
	    + " class=\"form-control input-sm\">\n</div>\n";
	},"useData":true});

/***/ }),
/* 1024 */
/***/ (function(module, exports, __webpack_require__) {

	var Handlebars = __webpack_require__(5);
	function __default(obj) { return obj && (obj.__esModule ? obj["default"] : obj); }
	module.exports = (Handlebars["default"] || Handlebars).template({"1":function(container,depth0,helpers,partials,data) {
	    var lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return "    data-toggle=\"tooltip\" data-placement=\"top\" title=\""
	    + container.escapeExpression(__default(__webpack_require__(1)).call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,"title") : depth0),{"name":"t","hash":{},"data":data,"loc":{"start":{"line":3,"column":54},"end":{"line":3,"column":65}}}))
	    + "\"\n";
	},"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) {
	    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.escapeExpression, alias3=container.lambda, lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return "<label class=\"col-sm-6 control-label\"\n"
	    + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"title") : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":2,"column":2},"end":{"line":4,"column":9}}})) != null ? stack1 : "")
	    + ">"
	    + alias2(__default(__webpack_require__(1)).call(alias1,(depth0 != null ? lookupProperty(depth0,"displayName") : depth0),{"name":"t","hash":{},"data":data,"loc":{"start":{"line":5,"column":1},"end":{"line":5,"column":18}}}))
	    + "</label>\n<div class=\"col-sm-6\">\n  <input value=\"\"\n    data-type=\""
	    + alias2(alias3((depth0 != null ? lookupProperty(depth0,"type") : depth0), depth0))
	    + "\"\n    data-provide=\"slider\"\n    data-slider-min=\""
	    + alias2(alias3((depth0 != null ? lookupProperty(depth0,"min") : depth0), depth0))
	    + "\"\n    data-slider-max=\""
	    + alias2(alias3((depth0 != null ? lookupProperty(depth0,"max") : depth0), depth0))
	    + "\"\n    data-slider-step=\""
	    + alias2(alias3((depth0 != null ? lookupProperty(depth0,"step") : depth0), depth0))
	    + "\"\n    data-slider-value=\"["
	    + alias2(alias3((depth0 != null ? lookupProperty(depth0,"low") : depth0), depth0))
	    + ","
	    + alias2(alias3((depth0 != null ? lookupProperty(depth0,"high") : depth0), depth0))
	    + "]\"\n    data-slider-tooltip=\"\"\n    />\n</div>\n";
	},"useData":true});

/***/ }),
/* 1025 */
/***/ (function(module, exports, __webpack_require__) {

	var Handlebars = __webpack_require__(5);
	function __default(obj) { return obj && (obj.__esModule ? obj["default"] : obj); }
	module.exports = (Handlebars["default"] || Handlebars).template({"1":function(container,depth0,helpers,partials,data) {
	    var lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return "    data-toggle=\"tooltip\" data-placement=\"top\" title=\""
	    + container.escapeExpression(__default(__webpack_require__(1)).call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,"title") : depth0),{"name":"t","hash":{},"data":data,"loc":{"start":{"line":3,"column":54},"end":{"line":3,"column":65}}}))
	    + "\"\n";
	},"3":function(container,depth0,helpers,partials,data) {
	    var stack1, alias1=container.escapeExpression, alias2=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return "    <option value=\""
	    + alias1(container.lambda((depth0 != null ? lookupProperty(depth0,"value") : depth0), depth0))
	    + "\" "
	    + ((stack1 = lookupProperty(helpers,"if").call(alias2,(depth0 != null ? lookupProperty(depth0,"isSelected") : depth0),{"name":"if","hash":{},"fn":container.program(4, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":10,"column":37},"end":{"line":10,"column":86}}})) != null ? stack1 : "")
	    + ">"
	    + alias1(__default(__webpack_require__(1)).call(alias2,(depth0 != null ? lookupProperty(depth0,"label") : depth0),{"name":"t","hash":{},"data":data,"loc":{"start":{"line":10,"column":87},"end":{"line":10,"column":105}}}))
	    + "</option>\n";
	},"4":function(container,depth0,helpers,partials,data) {
	    return "selected=\"selected\"";
	},"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) {
	    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return "<label class=\"col-sm-6 control-label\"\n"
	    + ((stack1 = lookupProperty(helpers,"if").call(alias1,(depth0 != null ? lookupProperty(depth0,"title") : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":2,"column":2},"end":{"line":4,"column":9}}})) != null ? stack1 : "")
	    + ">"
	    + alias2(__default(__webpack_require__(1)).call(alias1,(depth0 != null ? lookupProperty(depth0,"displayName") : depth0),{"name":"t","hash":{},"data":data,"loc":{"start":{"line":5,"column":1},"end":{"line":5,"column":18}}}))
	    + "</label>\n<div class=\"col-sm-6\">\n  <select data-type=\""
	    + alias2(container.lambda((depth0 != null ? lookupProperty(depth0,"type") : depth0), depth0))
	    + "\" class=\"form-control input-sm\">\n    <option value=\"\">---</option>\n"
	    + ((stack1 = lookupProperty(helpers,"each").call(alias1,(depth0 != null ? lookupProperty(depth0,"options") : depth0),{"name":"each","hash":{},"fn":container.program(3, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":9,"column":4},"end":{"line":11,"column":13}}})) != null ? stack1 : "")
	    + "  </select>\n</div>\n";
	},"useData":true});

/***/ }),
/* 1026 */
/***/ (function(module, exports, __webpack_require__) {

	var Handlebars = __webpack_require__(5);
	function __default(obj) { return obj && (obj.__esModule ? obj["default"] : obj); }
	module.exports = (Handlebars["default"] || Handlebars).template({"1":function(container,depth0,helpers,partials,data) {
	    var lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return "for "
	    + container.escapeExpression(container.lambda((depth0 != null ? lookupProperty(depth0,"name") : depth0), depth0))
	    + " ";
	},"3":function(container,depth0,helpers,partials,data) {
	    return "in";
	},"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) {
	    var stack1, alias1=container.lambda, alias2=container.escapeExpression, alias3=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return "<div class=\"panel-heading\">\n  <h3 class=\"panel-title\">\n    <a role=\"button\" data-toggle=\"collapse\" class=\"collapsed\" href=\"#collapse-additional-filters-"
	    + alias2(alias1((depth0 != null ? lookupProperty(depth0,"id") : depth0), depth0))
	    + "\">"
	    + alias2(__default(__webpack_require__(1)).call(alias3,"Additional Filters",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":3,"column":105},"end":{"line":3,"column":131}}}))
	    + " "
	    + ((stack1 = lookupProperty(helpers,"unless").call(alias3,(depth0 != null ? lookupProperty(depth0,"singleLayerModeUsed") : depth0),{"name":"unless","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":3,"column":132},"end":{"line":3,"column":190}}})) != null ? stack1 : "")
	    + "<span class=\"caret\"></span></a>\n  </h3>\n</div>\n<div id=\"collapse-additional-filters-"
	    + alias2(alias1((depth0 != null ? lookupProperty(depth0,"id") : depth0), depth0))
	    + "\" class=\"panel-body collapse "
	    + ((stack1 = lookupProperty(helpers,"unless").call(alias3,(depth0 != null ? lookupProperty(depth0,"collapsed") : depth0),{"name":"unless","hash":{},"fn":container.program(3, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":6,"column":72},"end":{"line":6,"column":106}}})) != null ? stack1 : "")
	    + "\"></div>\n";
	},"useData":true});

/***/ }),
/* 1027 */
/***/ (function(module, exports, __webpack_require__) {

	var Handlebars = __webpack_require__(5);
	function __default(obj) { return obj && (obj.__esModule ? obj["default"] : obj); }
	module.exports = (Handlebars["default"] || Handlebars).template({"1":function(container,depth0,helpers,partials,data) {
	    var lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return container.escapeExpression(container.lambda((depth0 != null ? lookupProperty(depth0,"name") : depth0), depth0));
	},"3":function(container,depth0,helpers,partials,data) {
	    return "<i>"
	    + container.escapeExpression(__default(__webpack_require__(1)).call(depth0 != null ? depth0 : (container.nullContext || {}),"Unnamed feature",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":1,"column":46},"end":{"line":1,"column":69}}}))
	    + "</i>";
	},"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) {
	    var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return "<a href='#'>"
	    + ((stack1 = lookupProperty(helpers,"if").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,"hasName") : depth0),{"name":"if","hash":{},"fn":container.program(1, data, 0),"inverse":container.program(3, data, 0),"data":data,"loc":{"start":{"line":1,"column":12},"end":{"line":1,"column":80}}})) != null ? stack1 : "")
	    + " <small class=\"text-right\">("
	    + container.escapeExpression(container.lambda(((stack1 = (depth0 != null ? lookupProperty(depth0,"geometry") : depth0)) != null ? lookupProperty(stack1,"type") : stack1), depth0))
	    + ")</small></a>\n";
	},"useData":true});

/***/ }),
/* 1028 */
/***/ (function(module, exports, __webpack_require__) {

	var Handlebars = __webpack_require__(5);
	function __default(obj) { return obj && (obj.__esModule ? obj["default"] : obj); }
	module.exports = (Handlebars["default"] || Handlebars).template({"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) {
	    return "<button type=\"button\" class=\"btn btn-default btn-sm btn-block dropdown-toggle\" data-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\" disabled>\n  "
	    + container.escapeExpression(__default(__webpack_require__(1)).call(depth0 != null ? depth0 : (container.nullContext || {}),"Select Feature",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":2,"column":2},"end":{"line":2,"column":26}}}))
	    + "\n  <span class=\"caret\"></span>\n</button>\n<ul class=\"dropdown-menu\" style=\"max-height: 300px; overflow-y: scroll\"></ul>\n";
	},"useData":true});

/***/ }),
/* 1029 */
/***/ (function(module, exports, __webpack_require__) {

	var Handlebars = __webpack_require__(5);
	function __default(obj) { return obj && (obj.__esModule ? obj["default"] : obj); }
	module.exports = (Handlebars["default"] || Handlebars).template({"1":function(container,depth0,helpers,partials,data) {
	    return "<div id=\"extra-parameters-"
	    + container.escapeExpression(container.lambda(depth0, depth0))
	    + "\"></div>";
	},"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) {
	    var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return "<div id=\"area-filter\"></div>\n<div id=\"time-filter\"></div>\n<div id=\"extra-parameters\"></div>\n"
	    + ((stack1 = lookupProperty(helpers,"each").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,"layerIdsWithParameters") : depth0),{"name":"each","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":4,"column":0},"end":{"line":4,"column":83}}})) != null ? stack1 : "")
	    + "\n";
	},"useData":true});

/***/ }),
/* 1030 */
/***/ (function(module, exports, __webpack_require__) {

	var Handlebars = __webpack_require__(5);
	function __default(obj) { return obj && (obj.__esModule ? obj["default"] : obj); }
	module.exports = (Handlebars["default"] || Handlebars).template({"1":function(container,depth0,helpers,partials,data) {
	    return "in";
	},"3":function(container,depth0,helpers,partials,data) {
	    return "        <a href=\"#\" role=\"button\" class=\"btn btn-danger btn-sm tool tool-clear-time\">"
	    + container.escapeExpression(__default(__webpack_require__(1)).call(depth0 != null ? depth0 : (container.nullContext || {}),"Clear Selection",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":29,"column":85},"end":{"line":29,"column":108}}}))
	    + "</a>\n";
	},"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) {
	    var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {
	        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	          return parent[propertyName];
	        }
	        return undefined
	    };
	
	  return "<div class=\"panel-heading\">\n  <h3 class=\"panel-title\">\n    <a role=\"button\" data-toggle=\"collapse\" href=\"#collapse-time-filter\">"
	    + alias2(__default(__webpack_require__(1)).call(alias1,"Time Filter",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":3,"column":73},"end":{"line":3,"column":92}}}))
	    + " <span class=\"caret\"></span></a>\n  </h3>\n</div>\n<div id=\"collapse-time-filter\" class=\"panel-body collapse "
	    + ((stack1 = lookupProperty(helpers,"unless").call(alias1,(depth0 != null ? lookupProperty(depth0,"collapsed") : depth0),{"name":"unless","hash":{},"fn":container.program(1, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":6,"column":58},"end":{"line":6,"column":92}}})) != null ? stack1 : "")
	    + "\">\n  <div class=\"form-group\">\n      <div class=\"row\">\n        <label class=\"col-sm-4 control-label\">Start date</label>\n        <div class=\"col-sm-8 no-padding\">\n          <input type=\"text\" class=\"form-control input-sm datetime start\">\n        </div>\n      </div>\n\n      <div class=\"row\">\n        <label class=\"col-sm-4 control-label\">End date</label>\n        <div class=\"col-sm-8 no-padding\">\n          <input type=\"text\" class=\"form-control input-sm datetime end\">\n        </div>\n      </div>\n      <div class=\"row\">\n        <div id=\"map-time-limit-exceeded\"></div>\n      </div>\n    </div>\n  <div class=\"form-group time-buttons\">\n    <div class=\"btn-group btn-group-justified tools\" role=\"group\" aria-label=\"...\">\n      <a href=\"#\" role=\"button\" class=\"btn btn-default btn-sm tool tool-show-time\">"
	    + alias2(__default(__webpack_require__(1)).call(alias1,"Zoom to Selection",{"name":"t","hash":{},"data":data,"loc":{"start":{"line":27,"column":83},"end":{"line":27,"column":108}}}))
	    + "</a>\n"
	    + ((stack1 = lookupProperty(helpers,"unless").call(alias1,(depth0 != null ? lookupProperty(depth0,"maxMapInterval") : depth0),{"name":"unless","hash":{},"fn":container.program(3, data, 0),"inverse":container.noop,"data":data,"loc":{"start":{"line":28,"column":6},"end":{"line":30,"column":17}}})) != null ? stack1 : "")
	    + "    </div>\n  </div>\n</div>\n";
	},"useData":true});

/***/ }),
/* 1031 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	exports.__esModule = true;
	// istanbul ignore next
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
	
	// istanbul ignore next
	
	function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
	
	var _handlebarsBase = __webpack_require__(354);
	
	var base = _interopRequireWildcard(_handlebarsBase);
	
	// Each of these augment the Handlebars object. No need to setup here.
	// (This is done to easily share code between commonjs and browse envs)
	
	var _handlebarsSafeString = __webpack_require__(1045);
	
	var _handlebarsSafeString2 = _interopRequireDefault(_handlebarsSafeString);
	
	var _handlebarsException = __webpack_require__(99);
	
	var _handlebarsException2 = _interopRequireDefault(_handlebarsException);
	
	var _handlebarsUtils = __webpack_require__(62);
	
	var Utils = _interopRequireWildcard(_handlebarsUtils);
	
	var _handlebarsRuntime = __webpack_require__(1044);
	
	var runtime = _interopRequireWildcard(_handlebarsRuntime);
	
	var _handlebarsNoConflict = __webpack_require__(1043);
	
	var _handlebarsNoConflict2 = _interopRequireDefault(_handlebarsNoConflict);
	
	// For compatibility and usage outside of module systems, make the Handlebars object a namespace
	function create() {
	  var hb = new base.HandlebarsEnvironment();
	
	  Utils.extend(hb, base);
	  hb.SafeString = _handlebarsSafeString2['default'];
	  hb.Exception = _handlebarsException2['default'];
	  hb.Utils = Utils;
	  hb.escapeExpression = Utils.escapeExpression;
	
	  hb.VM = runtime;
	  hb.template = function (spec) {
	    return runtime.template(spec, hb);
	  };
	
	  return hb;
	}
	
	var inst = create();
	inst.create = create;
	
	_handlebarsNoConflict2['default'](inst);
	
	inst['default'] = inst;
	
	exports['default'] = inst;
	module.exports = exports['default'];
	//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9oYW5kbGViYXJzLnJ1bnRpbWUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OEJBQXNCLG1CQUFtQjs7SUFBN0IsSUFBSTs7Ozs7b0NBSU8sMEJBQTBCOzs7O21DQUMzQix3QkFBd0I7Ozs7K0JBQ3ZCLG9CQUFvQjs7SUFBL0IsS0FBSzs7aUNBQ1Esc0JBQXNCOztJQUFuQyxPQUFPOztvQ0FFSSwwQkFBMEI7Ozs7O0FBR2pELFNBQVMsTUFBTSxHQUFHO0FBQ2hCLE1BQUksRUFBRSxHQUFHLElBQUksSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7O0FBRTFDLE9BQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3ZCLElBQUUsQ0FBQyxVQUFVLG9DQUFhLENBQUM7QUFDM0IsSUFBRSxDQUFDLFNBQVMsbUNBQVksQ0FBQztBQUN6QixJQUFFLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUNqQixJQUFFLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixDQUFDOztBQUU3QyxJQUFFLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQztBQUNoQixJQUFFLENBQUMsUUFBUSxHQUFHLFVBQVMsSUFBSSxFQUFFO0FBQzNCLFdBQU8sT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7R0FDbkMsQ0FBQzs7QUFFRixTQUFPLEVBQUUsQ0FBQztDQUNYOztBQUVELElBQUksSUFBSSxHQUFHLE1BQU0sRUFBRSxDQUFDO0FBQ3BCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDOztBQUVyQixrQ0FBVyxJQUFJLENBQUMsQ0FBQzs7QUFFakIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQzs7cUJBRVIsSUFBSSIsImZpbGUiOiJoYW5kbGViYXJzLnJ1bnRpbWUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBiYXNlIGZyb20gJy4vaGFuZGxlYmFycy9iYXNlJztcblxuLy8gRWFjaCBvZiB0aGVzZSBhdWdtZW50IHRoZSBIYW5kbGViYXJzIG9iamVjdC4gTm8gbmVlZCB0byBzZXR1cCBoZXJlLlxuLy8gKFRoaXMgaXMgZG9uZSB0byBlYXNpbHkgc2hhcmUgY29kZSBiZXR3ZWVuIGNvbW1vbmpzIGFuZCBicm93c2UgZW52cylcbmltcG9ydCBTYWZlU3RyaW5nIGZyb20gJy4vaGFuZGxlYmFycy9zYWZlLXN0cmluZyc7XG5pbXBvcnQgRXhjZXB0aW9uIGZyb20gJy4vaGFuZGxlYmFycy9leGNlcHRpb24nO1xuaW1wb3J0ICogYXMgVXRpbHMgZnJvbSAnLi9oYW5kbGViYXJzL3V0aWxzJztcbmltcG9ydCAqIGFzIHJ1bnRpbWUgZnJvbSAnLi9oYW5kbGViYXJzL3J1bnRpbWUnO1xuXG5pbXBvcnQgbm9Db25mbGljdCBmcm9tICcuL2hhbmRsZWJhcnMvbm8tY29uZmxpY3QnO1xuXG4vLyBGb3IgY29tcGF0aWJpbGl0eSBhbmQgdXNhZ2Ugb3V0c2lkZSBvZiBtb2R1bGUgc3lzdGVtcywgbWFrZSB0aGUgSGFuZGxlYmFycyBvYmplY3QgYSBuYW1lc3BhY2VcbmZ1bmN0aW9uIGNyZWF0ZSgpIHtcbiAgbGV0IGhiID0gbmV3IGJhc2UuSGFuZGxlYmFyc0Vudmlyb25tZW50KCk7XG5cbiAgVXRpbHMuZXh0ZW5kKGhiLCBiYXNlKTtcbiAgaGIuU2FmZVN0cmluZyA9IFNhZmVTdHJpbmc7XG4gIGhiLkV4Y2VwdGlvbiA9IEV4Y2VwdGlvbjtcbiAgaGIuVXRpbHMgPSBVdGlscztcbiAgaGIuZXNjYXBlRXhwcmVzc2lvbiA9IFV0aWxzLmVzY2FwZUV4cHJlc3Npb247XG5cbiAgaGIuVk0gPSBydW50aW1lO1xuICBoYi50ZW1wbGF0ZSA9IGZ1bmN0aW9uKHNwZWMpIHtcbiAgICByZXR1cm4gcnVudGltZS50ZW1wbGF0ZShzcGVjLCBoYik7XG4gIH07XG5cbiAgcmV0dXJuIGhiO1xufVxuXG5sZXQgaW5zdCA9IGNyZWF0ZSgpO1xuaW5zdC5jcmVhdGUgPSBjcmVhdGU7XG5cbm5vQ29uZmxpY3QoaW5zdCk7XG5cbmluc3RbJ2RlZmF1bHQnXSA9IGluc3Q7XG5cbmV4cG9ydCBkZWZhdWx0IGluc3Q7XG4iXX0=


/***/ }),
/* 1032 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	exports.__esModule = true;
	exports.registerDefaultDecorators = registerDefaultDecorators;
	// istanbul ignore next
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
	
	var _decoratorsInline = __webpack_require__(1033);
	
	var _decoratorsInline2 = _interopRequireDefault(_decoratorsInline);
	
	function registerDefaultDecorators(instance) {
	  _decoratorsInline2['default'](instance);
	}
	//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2RlY29yYXRvcnMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Z0NBQTJCLHFCQUFxQjs7OztBQUV6QyxTQUFTLHlCQUF5QixDQUFDLFFBQVEsRUFBRTtBQUNsRCxnQ0FBZSxRQUFRLENBQUMsQ0FBQztDQUMxQiIsImZpbGUiOiJkZWNvcmF0b3JzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHJlZ2lzdGVySW5saW5lIGZyb20gJy4vZGVjb3JhdG9ycy9pbmxpbmUnO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJEZWZhdWx0RGVjb3JhdG9ycyhpbnN0YW5jZSkge1xuICByZWdpc3RlcklubGluZShpbnN0YW5jZSk7XG59XG4iXX0=


/***/ }),
/* 1033 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	exports.__esModule = true;
	
	var _utils = __webpack_require__(62);
	
	exports['default'] = function (instance) {
	  instance.registerDecorator('inline', function (fn, props, container, options) {
	    var ret = fn;
	    if (!props.partials) {
	      props.partials = {};
	      ret = function (context, options) {
	        // Create a new partials stack frame prior to exec.
	        var original = container.partials;
	        container.partials = _utils.extend({}, original, props.partials);
	        var ret = fn(context, options);
	        container.partials = original;
	        return ret;
	      };
	    }
	
	    props.partials[options.args[0]] = options.fn;
	
	    return ret;
	  });
	};
	
	module.exports = exports['default'];
	//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2RlY29yYXRvcnMvaW5saW5lLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7cUJBQXVCLFVBQVU7O3FCQUVsQixVQUFTLFFBQVEsRUFBRTtBQUNoQyxVQUFRLENBQUMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLFVBQVMsRUFBRSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFO0FBQzNFLFFBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUNiLFFBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFO0FBQ25CLFdBQUssQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0FBQ3BCLFNBQUcsR0FBRyxVQUFTLE9BQU8sRUFBRSxPQUFPLEVBQUU7O0FBRS9CLFlBQUksUUFBUSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUM7QUFDbEMsaUJBQVMsQ0FBQyxRQUFRLEdBQUcsY0FBTyxFQUFFLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUMxRCxZQUFJLEdBQUcsR0FBRyxFQUFFLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQy9CLGlCQUFTLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztBQUM5QixlQUFPLEdBQUcsQ0FBQztPQUNaLENBQUM7S0FDSDs7QUFFRCxTQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDOztBQUU3QyxXQUFPLEdBQUcsQ0FBQztHQUNaLENBQUMsQ0FBQztDQUNKIiwiZmlsZSI6ImlubGluZS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGV4dGVuZCB9IGZyb20gJy4uL3V0aWxzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJEZWNvcmF0b3IoJ2lubGluZScsIGZ1bmN0aW9uKGZuLCBwcm9wcywgY29udGFpbmVyLCBvcHRpb25zKSB7XG4gICAgbGV0IHJldCA9IGZuO1xuICAgIGlmICghcHJvcHMucGFydGlhbHMpIHtcbiAgICAgIHByb3BzLnBhcnRpYWxzID0ge307XG4gICAgICByZXQgPSBmdW5jdGlvbihjb250ZXh0LCBvcHRpb25zKSB7XG4gICAgICAgIC8vIENyZWF0ZSBhIG5ldyBwYXJ0aWFscyBzdGFjayBmcmFtZSBwcmlvciB0byBleGVjLlxuICAgICAgICBsZXQgb3JpZ2luYWwgPSBjb250YWluZXIucGFydGlhbHM7XG4gICAgICAgIGNvbnRhaW5lci5wYXJ0aWFscyA9IGV4dGVuZCh7fSwgb3JpZ2luYWwsIHByb3BzLnBhcnRpYWxzKTtcbiAgICAgICAgbGV0IHJldCA9IGZuKGNvbnRleHQsIG9wdGlvbnMpO1xuICAgICAgICBjb250YWluZXIucGFydGlhbHMgPSBvcmlnaW5hbDtcbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcHJvcHMucGFydGlhbHNbb3B0aW9ucy5hcmdzWzBdXSA9IG9wdGlvbnMuZm47XG5cbiAgICByZXR1cm4gcmV0O1xuICB9KTtcbn1cbiJdfQ==


/***/ }),
/* 1034 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	exports.__esModule = true;
	
	var _utils = __webpack_require__(62);
	
	exports['default'] = function (instance) {
	  instance.registerHelper('blockHelperMissing', function (context, options) {
	    var inverse = options.inverse,
	        fn = options.fn;
	
	    if (context === true) {
	      return fn(this);
	    } else if (context === false || context == null) {
	      return inverse(this);
	    } else if (_utils.isArray(context)) {
	      if (context.length > 0) {
	        if (options.ids) {
	          options.ids = [options.name];
	        }
	
	        return instance.helpers.each(context, options);
	      } else {
	        return inverse(this);
	      }
	    } else {
	      if (options.data && options.ids) {
	        var data = _utils.createFrame(options.data);
	        data.contextPath = _utils.appendContextPath(options.data.contextPath, options.name);
	        options = { data: data };
	      }
	
	      return fn(context, options);
	    }
	  });
	};
	
	module.exports = exports['default'];
	//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvYmxvY2staGVscGVyLW1pc3NpbmcuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztxQkFBd0QsVUFBVTs7cUJBRW5ELFVBQVMsUUFBUSxFQUFFO0FBQ2hDLFVBQVEsQ0FBQyxjQUFjLENBQUMsb0JBQW9CLEVBQUUsVUFBUyxPQUFPLEVBQUUsT0FBTyxFQUFFO0FBQ3ZFLFFBQUksT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPO1FBQzNCLEVBQUUsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDOztBQUVsQixRQUFJLE9BQU8sS0FBSyxJQUFJLEVBQUU7QUFDcEIsYUFBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDakIsTUFBTSxJQUFJLE9BQU8sS0FBSyxLQUFLLElBQUksT0FBTyxJQUFJLElBQUksRUFBRTtBQUMvQyxhQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUN0QixNQUFNLElBQUksZUFBUSxPQUFPLENBQUMsRUFBRTtBQUMzQixVQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO0FBQ3RCLFlBQUksT0FBTyxDQUFDLEdBQUcsRUFBRTtBQUNmLGlCQUFPLENBQUMsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzlCOztBQUVELGVBQU8sUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO09BQ2hELE1BQU07QUFDTCxlQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztPQUN0QjtLQUNGLE1BQU07QUFDTCxVQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRTtBQUMvQixZQUFJLElBQUksR0FBRyxtQkFBWSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDckMsWUFBSSxDQUFDLFdBQVcsR0FBRyx5QkFDakIsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQ3hCLE9BQU8sQ0FBQyxJQUFJLENBQ2IsQ0FBQztBQUNGLGVBQU8sR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQztPQUMxQjs7QUFFRCxhQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7S0FDN0I7R0FDRixDQUFDLENBQUM7Q0FDSiIsImZpbGUiOiJibG9jay1oZWxwZXItbWlzc2luZy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFwcGVuZENvbnRleHRQYXRoLCBjcmVhdGVGcmFtZSwgaXNBcnJheSB9IGZyb20gJy4uL3V0aWxzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ2Jsb2NrSGVscGVyTWlzc2luZycsIGZ1bmN0aW9uKGNvbnRleHQsIG9wdGlvbnMpIHtcbiAgICBsZXQgaW52ZXJzZSA9IG9wdGlvbnMuaW52ZXJzZSxcbiAgICAgIGZuID0gb3B0aW9ucy5mbjtcblxuICAgIGlmIChjb250ZXh0ID09PSB0cnVlKSB7XG4gICAgICByZXR1cm4gZm4odGhpcyk7XG4gICAgfSBlbHNlIGlmIChjb250ZXh0ID09PSBmYWxzZSB8fCBjb250ZXh0ID09IG51bGwpIHtcbiAgICAgIHJldHVybiBpbnZlcnNlKHRoaXMpO1xuICAgIH0gZWxzZSBpZiAoaXNBcnJheShjb250ZXh0KSkge1xuICAgICAgaWYgKGNvbnRleHQubGVuZ3RoID4gMCkge1xuICAgICAgICBpZiAob3B0aW9ucy5pZHMpIHtcbiAgICAgICAgICBvcHRpb25zLmlkcyA9IFtvcHRpb25zLm5hbWVdO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGluc3RhbmNlLmhlbHBlcnMuZWFjaChjb250ZXh0LCBvcHRpb25zKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBpbnZlcnNlKHRoaXMpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAob3B0aW9ucy5kYXRhICYmIG9wdGlvbnMuaWRzKSB7XG4gICAgICAgIGxldCBkYXRhID0gY3JlYXRlRnJhbWUob3B0aW9ucy5kYXRhKTtcbiAgICAgICAgZGF0YS5jb250ZXh0UGF0aCA9IGFwcGVuZENvbnRleHRQYXRoKFxuICAgICAgICAgIG9wdGlvbnMuZGF0YS5jb250ZXh0UGF0aCxcbiAgICAgICAgICBvcHRpb25zLm5hbWVcbiAgICAgICAgKTtcbiAgICAgICAgb3B0aW9ucyA9IHsgZGF0YTogZGF0YSB9O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZm4oY29udGV4dCwgb3B0aW9ucyk7XG4gICAgfVxuICB9KTtcbn1cbiJdfQ==


/***/ }),
/* 1035 */
/***/ (function(module, exports, __webpack_require__) {

	/* WEBPACK VAR INJECTION */(function(global) {'use strict';
	
	exports.__esModule = true;
	// istanbul ignore next
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
	
	var _utils = __webpack_require__(62);
	
	var _exception = __webpack_require__(99);
	
	var _exception2 = _interopRequireDefault(_exception);
	
	exports['default'] = function (instance) {
	  instance.registerHelper('each', function (context, options) {
	    if (!options) {
	      throw new _exception2['default']('Must pass iterator to #each');
	    }
	
	    var fn = options.fn,
	        inverse = options.inverse,
	        i = 0,
	        ret = '',
	        data = undefined,
	        contextPath = undefined;
	
	    if (options.data && options.ids) {
	      contextPath = _utils.appendContextPath(options.data.contextPath, options.ids[0]) + '.';
	    }
	
	    if (_utils.isFunction(context)) {
	      context = context.call(this);
	    }
	
	    if (options.data) {
	      data = _utils.createFrame(options.data);
	    }
	
	    function execIteration(field, index, last) {
	      if (data) {
	        data.key = field;
	        data.index = index;
	        data.first = index === 0;
	        data.last = !!last;
	
	        if (contextPath) {
	          data.contextPath = contextPath + field;
	        }
	      }
	
	      ret = ret + fn(context[field], {
	        data: data,
	        blockParams: _utils.blockParams([context[field], field], [contextPath + field, null])
	      });
	    }
	
	    if (context && typeof context === 'object') {
	      if (_utils.isArray(context)) {
	        for (var j = context.length; i < j; i++) {
	          if (i in context) {
	            execIteration(i, i, i === context.length - 1);
	          }
	        }
	      } else if (global.Symbol && context[global.Symbol.iterator]) {
	        var newContext = [];
	        var iterator = context[global.Symbol.iterator]();
	        for (var it = iterator.next(); !it.done; it = iterator.next()) {
	          newContext.push(it.value);
	        }
	        context = newContext;
	        for (var j = context.length; i < j; i++) {
	          execIteration(i, i, i === context.length - 1);
	        }
	      } else {
	        (function () {
	          var priorKey = undefined;
	
	          Object.keys(context).forEach(function (key) {
	            // We're running the iterations one step out of sync so we can detect
	            // the last iteration without have to scan the object twice and create
	            // an itermediate keys array.
	            if (priorKey !== undefined) {
	              execIteration(priorKey, i - 1);
	            }
	            priorKey = key;
	            i++;
	          });
	          if (priorKey !== undefined) {
	            execIteration(priorKey, i - 1, true);
	          }
	        })();
	      }
	    }
	
	    if (i === 0) {
	      ret = inverse(this);
	    }
	
	    return ret;
	  });
	};
	
	module.exports = exports['default'];
	//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvZWFjaC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O3FCQU1PLFVBQVU7O3lCQUNLLGNBQWM7Ozs7cUJBRXJCLFVBQVMsUUFBUSxFQUFFO0FBQ2hDLFVBQVEsQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLFVBQVMsT0FBTyxFQUFFLE9BQU8sRUFBRTtBQUN6RCxRQUFJLENBQUMsT0FBTyxFQUFFO0FBQ1osWUFBTSwyQkFBYyw2QkFBNkIsQ0FBQyxDQUFDO0tBQ3BEOztBQUVELFFBQUksRUFBRSxHQUFHLE9BQU8sQ0FBQyxFQUFFO1FBQ2pCLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTztRQUN6QixDQUFDLEdBQUcsQ0FBQztRQUNMLEdBQUcsR0FBRyxFQUFFO1FBQ1IsSUFBSSxZQUFBO1FBQ0osV0FBVyxZQUFBLENBQUM7O0FBRWQsUUFBSSxPQUFPLENBQUMsSUFBSSxJQUFJLE9BQU8sQ0FBQyxHQUFHLEVBQUU7QUFDL0IsaUJBQVcsR0FDVCx5QkFBa0IsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztLQUNyRTs7QUFFRCxRQUFJLGtCQUFXLE9BQU8sQ0FBQyxFQUFFO0FBQ3ZCLGFBQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQzlCOztBQUVELFFBQUksT0FBTyxDQUFDLElBQUksRUFBRTtBQUNoQixVQUFJLEdBQUcsbUJBQVksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ2xDOztBQUVELGFBQVMsYUFBYSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFO0FBQ3pDLFVBQUksSUFBSSxFQUFFO0FBQ1IsWUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUM7QUFDakIsWUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDbkIsWUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLEtBQUssQ0FBQyxDQUFDO0FBQ3pCLFlBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQzs7QUFFbkIsWUFBSSxXQUFXLEVBQUU7QUFDZixjQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsR0FBRyxLQUFLLENBQUM7U0FDeEM7T0FDRjs7QUFFRCxTQUFHLEdBQ0QsR0FBRyxHQUNILEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDakIsWUFBSSxFQUFFLElBQUk7QUFDVixtQkFBVyxFQUFFLG1CQUNYLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUN2QixDQUFDLFdBQVcsR0FBRyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQzVCO09BQ0YsQ0FBQyxDQUFDO0tBQ047O0FBRUQsUUFBSSxPQUFPLElBQUksT0FBTyxPQUFPLEtBQUssUUFBUSxFQUFFO0FBQzFDLFVBQUksZUFBUSxPQUFPLENBQUMsRUFBRTtBQUNwQixhQUFLLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN2QyxjQUFJLENBQUMsSUFBSSxPQUFPLEVBQUU7QUFDaEIseUJBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBSyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1dBQy9DO1NBQ0Y7T0FDRixNQUFNLElBQUksTUFBTSxDQUFDLE1BQU0sSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRTtBQUMzRCxZQUFNLFVBQVUsR0FBRyxFQUFFLENBQUM7QUFDdEIsWUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztBQUNuRCxhQUFLLElBQUksRUFBRSxHQUFHLFFBQVEsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxHQUFHLFFBQVEsQ0FBQyxJQUFJLEVBQUUsRUFBRTtBQUM3RCxvQkFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDM0I7QUFDRCxlQUFPLEdBQUcsVUFBVSxDQUFDO0FBQ3JCLGFBQUssSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3ZDLHVCQUFhLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQUssT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztTQUMvQztPQUNGLE1BQU07O0FBQ0wsY0FBSSxRQUFRLFlBQUEsQ0FBQzs7QUFFYixnQkFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBQSxHQUFHLEVBQUk7Ozs7QUFJbEMsZ0JBQUksUUFBUSxLQUFLLFNBQVMsRUFBRTtBQUMxQiwyQkFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7YUFDaEM7QUFDRCxvQkFBUSxHQUFHLEdBQUcsQ0FBQztBQUNmLGFBQUMsRUFBRSxDQUFDO1dBQ0wsQ0FBQyxDQUFDO0FBQ0gsY0FBSSxRQUFRLEtBQUssU0FBUyxFQUFFO0FBQzFCLHlCQUFhLENBQUMsUUFBUSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7V0FDdEM7O09BQ0Y7S0FDRjs7QUFFRCxRQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDWCxTQUFHLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ3JCOztBQUVELFdBQU8sR0FBRyxDQUFDO0dBQ1osQ0FBQyxDQUFDO0NBQ0oiLCJmaWxlIjoiZWFjaC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGFwcGVuZENvbnRleHRQYXRoLFxuICBibG9ja1BhcmFtcyxcbiAgY3JlYXRlRnJhbWUsXG4gIGlzQXJyYXksXG4gIGlzRnVuY3Rpb25cbn0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IEV4Y2VwdGlvbiBmcm9tICcuLi9leGNlcHRpb24nO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihpbnN0YW5jZSkge1xuICBpbnN0YW5jZS5yZWdpc3RlckhlbHBlcignZWFjaCcsIGZ1bmN0aW9uKGNvbnRleHQsIG9wdGlvbnMpIHtcbiAgICBpZiAoIW9wdGlvbnMpIHtcbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ011c3QgcGFzcyBpdGVyYXRvciB0byAjZWFjaCcpO1xuICAgIH1cblxuICAgIGxldCBmbiA9IG9wdGlvbnMuZm4sXG4gICAgICBpbnZlcnNlID0gb3B0aW9ucy5pbnZlcnNlLFxuICAgICAgaSA9IDAsXG4gICAgICByZXQgPSAnJyxcbiAgICAgIGRhdGEsXG4gICAgICBjb250ZXh0UGF0aDtcblxuICAgIGlmIChvcHRpb25zLmRhdGEgJiYgb3B0aW9ucy5pZHMpIHtcbiAgICAgIGNvbnRleHRQYXRoID1cbiAgICAgICAgYXBwZW5kQ29udGV4dFBhdGgob3B0aW9ucy5kYXRhLmNvbnRleHRQYXRoLCBvcHRpb25zLmlkc1swXSkgKyAnLic7XG4gICAgfVxuXG4gICAgaWYgKGlzRnVuY3Rpb24oY29udGV4dCkpIHtcbiAgICAgIGNvbnRleHQgPSBjb250ZXh0LmNhbGwodGhpcyk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuZGF0YSkge1xuICAgICAgZGF0YSA9IGNyZWF0ZUZyYW1lKG9wdGlvbnMuZGF0YSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZXhlY0l0ZXJhdGlvbihmaWVsZCwgaW5kZXgsIGxhc3QpIHtcbiAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgIGRhdGEua2V5ID0gZmllbGQ7XG4gICAgICAgIGRhdGEuaW5kZXggPSBpbmRleDtcbiAgICAgICAgZGF0YS5maXJzdCA9IGluZGV4ID09PSAwO1xuICAgICAgICBkYXRhLmxhc3QgPSAhIWxhc3Q7XG5cbiAgICAgICAgaWYgKGNvbnRleHRQYXRoKSB7XG4gICAgICAgICAgZGF0YS5jb250ZXh0UGF0aCA9IGNvbnRleHRQYXRoICsgZmllbGQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0ID1cbiAgICAgICAgcmV0ICtcbiAgICAgICAgZm4oY29udGV4dFtmaWVsZF0sIHtcbiAgICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICAgIGJsb2NrUGFyYW1zOiBibG9ja1BhcmFtcyhcbiAgICAgICAgICAgIFtjb250ZXh0W2ZpZWxkXSwgZmllbGRdLFxuICAgICAgICAgICAgW2NvbnRleHRQYXRoICsgZmllbGQsIG51bGxdXG4gICAgICAgICAgKVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoY29udGV4dCAmJiB0eXBlb2YgY29udGV4dCA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGlmIChpc0FycmF5KGNvbnRleHQpKSB7XG4gICAgICAgIGZvciAobGV0IGogPSBjb250ZXh0Lmxlbmd0aDsgaSA8IGo7IGkrKykge1xuICAgICAgICAgIGlmIChpIGluIGNvbnRleHQpIHtcbiAgICAgICAgICAgIGV4ZWNJdGVyYXRpb24oaSwgaSwgaSA9PT0gY29udGV4dC5sZW5ndGggLSAxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZ2xvYmFsLlN5bWJvbCAmJiBjb250ZXh0W2dsb2JhbC5TeW1ib2wuaXRlcmF0b3JdKSB7XG4gICAgICAgIGNvbnN0IG5ld0NvbnRleHQgPSBbXTtcbiAgICAgICAgY29uc3QgaXRlcmF0b3IgPSBjb250ZXh0W2dsb2JhbC5TeW1ib2wuaXRlcmF0b3JdKCk7XG4gICAgICAgIGZvciAobGV0IGl0ID0gaXRlcmF0b3IubmV4dCgpOyAhaXQuZG9uZTsgaXQgPSBpdGVyYXRvci5uZXh0KCkpIHtcbiAgICAgICAgICBuZXdDb250ZXh0LnB1c2goaXQudmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRleHQgPSBuZXdDb250ZXh0O1xuICAgICAgICBmb3IgKGxldCBqID0gY29udGV4dC5sZW5ndGg7IGkgPCBqOyBpKyspIHtcbiAgICAgICAgICBleGVjSXRlcmF0aW9uKGksIGksIGkgPT09IGNvbnRleHQubGVuZ3RoIC0gMSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBwcmlvcktleTtcblxuICAgICAgICBPYmplY3Qua2V5cyhjb250ZXh0KS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgLy8gV2UncmUgcnVubmluZyB0aGUgaXRlcmF0aW9ucyBvbmUgc3RlcCBvdXQgb2Ygc3luYyBzbyB3ZSBjYW4gZGV0ZWN0XG4gICAgICAgICAgLy8gdGhlIGxhc3QgaXRlcmF0aW9uIHdpdGhvdXQgaGF2ZSB0byBzY2FuIHRoZSBvYmplY3QgdHdpY2UgYW5kIGNyZWF0ZVxuICAgICAgICAgIC8vIGFuIGl0ZXJtZWRpYXRlIGtleXMgYXJyYXkuXG4gICAgICAgICAgaWYgKHByaW9yS2V5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGV4ZWNJdGVyYXRpb24ocHJpb3JLZXksIGkgLSAxKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcHJpb3JLZXkgPSBrZXk7XG4gICAgICAgICAgaSsrO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHByaW9yS2V5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBleGVjSXRlcmF0aW9uKHByaW9yS2V5LCBpIC0gMSwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgcmV0ID0gaW52ZXJzZSh0aGlzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmV0O1xuICB9KTtcbn1cbiJdfQ==
	
	/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))

/***/ }),
/* 1036 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	exports.__esModule = true;
	// istanbul ignore next
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
	
	var _exception = __webpack_require__(99);
	
	var _exception2 = _interopRequireDefault(_exception);
	
	exports['default'] = function (instance) {
	  instance.registerHelper('helperMissing', function () /* [args, ]options */{
	    if (arguments.length === 1) {
	      // A missing field in a {{foo}} construct.
	      return undefined;
	    } else {
	      // Someone is actually trying to call something, blow up.
	      throw new _exception2['default']('Missing helper: "' + arguments[arguments.length - 1].name + '"');
	    }
	  });
	};
	
	module.exports = exports['default'];
	//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvaGVscGVyLW1pc3NpbmcuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozt5QkFBc0IsY0FBYzs7OztxQkFFckIsVUFBUyxRQUFRLEVBQUU7QUFDaEMsVUFBUSxDQUFDLGNBQWMsQ0FBQyxlQUFlLEVBQUUsaUNBQWdDO0FBQ3ZFLFFBQUksU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7O0FBRTFCLGFBQU8sU0FBUyxDQUFDO0tBQ2xCLE1BQU07O0FBRUwsWUFBTSwyQkFDSixtQkFBbUIsR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUNqRSxDQUFDO0tBQ0g7R0FDRixDQUFDLENBQUM7Q0FDSiIsImZpbGUiOiJoZWxwZXItbWlzc2luZy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBFeGNlcHRpb24gZnJvbSAnLi4vZXhjZXB0aW9uJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ2hlbHBlck1pc3NpbmcnLCBmdW5jdGlvbigvKiBbYXJncywgXW9wdGlvbnMgKi8pIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgLy8gQSBtaXNzaW5nIGZpZWxkIGluIGEge3tmb299fSBjb25zdHJ1Y3QuXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTb21lb25lIGlzIGFjdHVhbGx5IHRyeWluZyB0byBjYWxsIHNvbWV0aGluZywgYmxvdyB1cC5cbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oXG4gICAgICAgICdNaXNzaW5nIGhlbHBlcjogXCInICsgYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGggLSAxXS5uYW1lICsgJ1wiJ1xuICAgICAgKTtcbiAgICB9XG4gIH0pO1xufVxuIl19


/***/ }),
/* 1037 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	exports.__esModule = true;
	// istanbul ignore next
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
	
	var _utils = __webpack_require__(62);
	
	var _exception = __webpack_require__(99);
	
	var _exception2 = _interopRequireDefault(_exception);
	
	exports['default'] = function (instance) {
	  instance.registerHelper('if', function (conditional, options) {
	    if (arguments.length != 2) {
	      throw new _exception2['default']('#if requires exactly one argument');
	    }
	    if (_utils.isFunction(conditional)) {
	      conditional = conditional.call(this);
	    }
	
	    // Default behavior is to render the positive path if the value is truthy and not empty.
	    // The `includeZero` option may be set to treat the condtional as purely not empty based on the
	    // behavior of isEmpty. Effectively this determines if 0 is handled by the positive path or negative.
	    if (!options.hash.includeZero && !conditional || _utils.isEmpty(conditional)) {
	      return options.inverse(this);
	    } else {
	      return options.fn(this);
	    }
	  });
	
	  instance.registerHelper('unless', function (conditional, options) {
	    if (arguments.length != 2) {
	      throw new _exception2['default']('#unless requires exactly one argument');
	    }
	    return instance.helpers['if'].call(this, conditional, {
	      fn: options.inverse,
	      inverse: options.fn,
	      hash: options.hash
	    });
	  });
	};
	
	module.exports = exports['default'];
	//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvaWYuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7OztxQkFBb0MsVUFBVTs7eUJBQ3hCLGNBQWM7Ozs7cUJBRXJCLFVBQVMsUUFBUSxFQUFFO0FBQ2hDLFVBQVEsQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLFVBQVMsV0FBVyxFQUFFLE9BQU8sRUFBRTtBQUMzRCxRQUFJLFNBQVMsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO0FBQ3pCLFlBQU0sMkJBQWMsbUNBQW1DLENBQUMsQ0FBQztLQUMxRDtBQUNELFFBQUksa0JBQVcsV0FBVyxDQUFDLEVBQUU7QUFDM0IsaUJBQVcsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ3RDOzs7OztBQUtELFFBQUksQUFBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLENBQUMsV0FBVyxJQUFLLGVBQVEsV0FBVyxDQUFDLEVBQUU7QUFDdkUsYUFBTyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQzlCLE1BQU07QUFDTCxhQUFPLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDekI7R0FDRixDQUFDLENBQUM7O0FBRUgsVUFBUSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsVUFBUyxXQUFXLEVBQUUsT0FBTyxFQUFFO0FBQy9ELFFBQUksU0FBUyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7QUFDekIsWUFBTSwyQkFBYyx1Q0FBdUMsQ0FBQyxDQUFDO0tBQzlEO0FBQ0QsV0FBTyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFO0FBQ3BELFFBQUUsRUFBRSxPQUFPLENBQUMsT0FBTztBQUNuQixhQUFPLEVBQUUsT0FBTyxDQUFDLEVBQUU7QUFDbkIsVUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJO0tBQ25CLENBQUMsQ0FBQztHQUNKLENBQUMsQ0FBQztDQUNKIiwiZmlsZSI6ImlmLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNFbXB0eSwgaXNGdW5jdGlvbiB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCBFeGNlcHRpb24gZnJvbSAnLi4vZXhjZXB0aW9uJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ2lmJywgZnVuY3Rpb24oY29uZGl0aW9uYWwsIG9wdGlvbnMpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCAhPSAyKSB7XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCcjaWYgcmVxdWlyZXMgZXhhY3RseSBvbmUgYXJndW1lbnQnKTtcbiAgICB9XG4gICAgaWYgKGlzRnVuY3Rpb24oY29uZGl0aW9uYWwpKSB7XG4gICAgICBjb25kaXRpb25hbCA9IGNvbmRpdGlvbmFsLmNhbGwodGhpcyk7XG4gICAgfVxuXG4gICAgLy8gRGVmYXVsdCBiZWhhdmlvciBpcyB0byByZW5kZXIgdGhlIHBvc2l0aXZlIHBhdGggaWYgdGhlIHZhbHVlIGlzIHRydXRoeSBhbmQgbm90IGVtcHR5LlxuICAgIC8vIFRoZSBgaW5jbHVkZVplcm9gIG9wdGlvbiBtYXkgYmUgc2V0IHRvIHRyZWF0IHRoZSBjb25kdGlvbmFsIGFzIHB1cmVseSBub3QgZW1wdHkgYmFzZWQgb24gdGhlXG4gICAgLy8gYmVoYXZpb3Igb2YgaXNFbXB0eS4gRWZmZWN0aXZlbHkgdGhpcyBkZXRlcm1pbmVzIGlmIDAgaXMgaGFuZGxlZCBieSB0aGUgcG9zaXRpdmUgcGF0aCBvciBuZWdhdGl2ZS5cbiAgICBpZiAoKCFvcHRpb25zLmhhc2guaW5jbHVkZVplcm8gJiYgIWNvbmRpdGlvbmFsKSB8fCBpc0VtcHR5KGNvbmRpdGlvbmFsKSkge1xuICAgICAgcmV0dXJuIG9wdGlvbnMuaW52ZXJzZSh0aGlzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG9wdGlvbnMuZm4odGhpcyk7XG4gICAgfVxuICB9KTtcblxuICBpbnN0YW5jZS5yZWdpc3RlckhlbHBlcigndW5sZXNzJywgZnVuY3Rpb24oY29uZGl0aW9uYWwsIG9wdGlvbnMpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCAhPSAyKSB7XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCcjdW5sZXNzIHJlcXVpcmVzIGV4YWN0bHkgb25lIGFyZ3VtZW50Jyk7XG4gICAgfVxuICAgIHJldHVybiBpbnN0YW5jZS5oZWxwZXJzWydpZiddLmNhbGwodGhpcywgY29uZGl0aW9uYWwsIHtcbiAgICAgIGZuOiBvcHRpb25zLmludmVyc2UsXG4gICAgICBpbnZlcnNlOiBvcHRpb25zLmZuLFxuICAgICAgaGFzaDogb3B0aW9ucy5oYXNoXG4gICAgfSk7XG4gIH0pO1xufVxuIl19


/***/ }),
/* 1038 */
/***/ (function(module, exports) {

	'use strict';
	
	exports.__esModule = true;
	
	exports['default'] = function (instance) {
	  instance.registerHelper('log', function () /* message, options */{
	    var args = [undefined],
	        options = arguments[arguments.length - 1];
	    for (var i = 0; i < arguments.length - 1; i++) {
	      args.push(arguments[i]);
	    }
	
	    var level = 1;
	    if (options.hash.level != null) {
	      level = options.hash.level;
	    } else if (options.data && options.data.level != null) {
	      level = options.data.level;
	    }
	    args[0] = level;
	
	    instance.log.apply(instance, args);
	  });
	};
	
	module.exports = exports['default'];
	//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvbG9nLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7cUJBQWUsVUFBUyxRQUFRLEVBQUU7QUFDaEMsVUFBUSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsa0NBQWlDO0FBQzlELFFBQUksSUFBSSxHQUFHLENBQUMsU0FBUyxDQUFDO1FBQ3BCLE9BQU8sR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM1QyxTQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDN0MsVUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUN6Qjs7QUFFRCxRQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDZCxRQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksRUFBRTtBQUM5QixXQUFLLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7S0FDNUIsTUFBTSxJQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxFQUFFO0FBQ3JELFdBQUssR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztLQUM1QjtBQUNELFFBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7O0FBRWhCLFlBQVEsQ0FBQyxHQUFHLE1BQUEsQ0FBWixRQUFRLEVBQVEsSUFBSSxDQUFDLENBQUM7R0FDdkIsQ0FBQyxDQUFDO0NBQ0oiLCJmaWxlIjoibG9nLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ2xvZycsIGZ1bmN0aW9uKC8qIG1lc3NhZ2UsIG9wdGlvbnMgKi8pIHtcbiAgICBsZXQgYXJncyA9IFt1bmRlZmluZWRdLFxuICAgICAgb3B0aW9ucyA9IGFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoIC0gMV07XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICBhcmdzLnB1c2goYXJndW1lbnRzW2ldKTtcbiAgICB9XG5cbiAgICBsZXQgbGV2ZWwgPSAxO1xuICAgIGlmIChvcHRpb25zLmhhc2gubGV2ZWwgIT0gbnVsbCkge1xuICAgICAgbGV2ZWwgPSBvcHRpb25zLmhhc2gubGV2ZWw7XG4gICAgfSBlbHNlIGlmIChvcHRpb25zLmRhdGEgJiYgb3B0aW9ucy5kYXRhLmxldmVsICE9IG51bGwpIHtcbiAgICAgIGxldmVsID0gb3B0aW9ucy5kYXRhLmxldmVsO1xuICAgIH1cbiAgICBhcmdzWzBdID0gbGV2ZWw7XG5cbiAgICBpbnN0YW5jZS5sb2coLi4uYXJncyk7XG4gIH0pO1xufVxuIl19


/***/ }),
/* 1039 */
/***/ (function(module, exports) {

	'use strict';
	
	exports.__esModule = true;
	
	exports['default'] = function (instance) {
	  instance.registerHelper('lookup', function (obj, field, options) {
	    if (!obj) {
	      // Note for 5.0: Change to "obj == null" in 5.0
	      return obj;
	    }
	    return options.lookupProperty(obj, field);
	  });
	};
	
	module.exports = exports['default'];
	//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvbG9va3VwLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7cUJBQWUsVUFBUyxRQUFRLEVBQUU7QUFDaEMsVUFBUSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsVUFBUyxHQUFHLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRTtBQUM5RCxRQUFJLENBQUMsR0FBRyxFQUFFOztBQUVSLGFBQU8sR0FBRyxDQUFDO0tBQ1o7QUFDRCxXQUFPLE9BQU8sQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0dBQzNDLENBQUMsQ0FBQztDQUNKIiwiZmlsZSI6Imxvb2t1cC5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGluc3RhbmNlKSB7XG4gIGluc3RhbmNlLnJlZ2lzdGVySGVscGVyKCdsb29rdXAnLCBmdW5jdGlvbihvYmosIGZpZWxkLCBvcHRpb25zKSB7XG4gICAgaWYgKCFvYmopIHtcbiAgICAgIC8vIE5vdGUgZm9yIDUuMDogQ2hhbmdlIHRvIFwib2JqID09IG51bGxcIiBpbiA1LjBcbiAgICAgIHJldHVybiBvYmo7XG4gICAgfVxuICAgIHJldHVybiBvcHRpb25zLmxvb2t1cFByb3BlcnR5KG9iaiwgZmllbGQpO1xuICB9KTtcbn1cbiJdfQ==


/***/ }),
/* 1040 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	exports.__esModule = true;
	// istanbul ignore next
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
	
	var _utils = __webpack_require__(62);
	
	var _exception = __webpack_require__(99);
	
	var _exception2 = _interopRequireDefault(_exception);
	
	exports['default'] = function (instance) {
	  instance.registerHelper('with', function (context, options) {
	    if (arguments.length != 2) {
	      throw new _exception2['default']('#with requires exactly one argument');
	    }
	    if (_utils.isFunction(context)) {
	      context = context.call(this);
	    }
	
	    var fn = options.fn;
	
	    if (!_utils.isEmpty(context)) {
	      var data = options.data;
	      if (options.data && options.ids) {
	        data = _utils.createFrame(options.data);
	        data.contextPath = _utils.appendContextPath(options.data.contextPath, options.ids[0]);
	      }
	
	      return fn(context, {
	        data: data,
	        blockParams: _utils.blockParams([context], [data && data.contextPath])
	      });
	    } else {
	      return options.inverse(this);
	    }
	  });
	};
	
	module.exports = exports['default'];
	//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvd2l0aC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O3FCQU1PLFVBQVU7O3lCQUNLLGNBQWM7Ozs7cUJBRXJCLFVBQVMsUUFBUSxFQUFFO0FBQ2hDLFVBQVEsQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLFVBQVMsT0FBTyxFQUFFLE9BQU8sRUFBRTtBQUN6RCxRQUFJLFNBQVMsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO0FBQ3pCLFlBQU0sMkJBQWMscUNBQXFDLENBQUMsQ0FBQztLQUM1RDtBQUNELFFBQUksa0JBQVcsT0FBTyxDQUFDLEVBQUU7QUFDdkIsYUFBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDOUI7O0FBRUQsUUFBSSxFQUFFLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQzs7QUFFcEIsUUFBSSxDQUFDLGVBQVEsT0FBTyxDQUFDLEVBQUU7QUFDckIsVUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQztBQUN4QixVQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRTtBQUMvQixZQUFJLEdBQUcsbUJBQVksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2pDLFlBQUksQ0FBQyxXQUFXLEdBQUcseUJBQ2pCLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUN4QixPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUNmLENBQUM7T0FDSDs7QUFFRCxhQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUU7QUFDakIsWUFBSSxFQUFFLElBQUk7QUFDVixtQkFBVyxFQUFFLG1CQUFZLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO09BQ2hFLENBQUMsQ0FBQztLQUNKLE1BQU07QUFDTCxhQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDOUI7R0FDRixDQUFDLENBQUM7Q0FDSiIsImZpbGUiOiJ3aXRoLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgYXBwZW5kQ29udGV4dFBhdGgsXG4gIGJsb2NrUGFyYW1zLFxuICBjcmVhdGVGcmFtZSxcbiAgaXNFbXB0eSxcbiAgaXNGdW5jdGlvblxufSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgRXhjZXB0aW9uIGZyb20gJy4uL2V4Y2VwdGlvbic7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGluc3RhbmNlKSB7XG4gIGluc3RhbmNlLnJlZ2lzdGVySGVscGVyKCd3aXRoJywgZnVuY3Rpb24oY29udGV4dCwgb3B0aW9ucykge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoICE9IDIpIHtcbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJyN3aXRoIHJlcXVpcmVzIGV4YWN0bHkgb25lIGFyZ3VtZW50Jyk7XG4gICAgfVxuICAgIGlmIChpc0Z1bmN0aW9uKGNvbnRleHQpKSB7XG4gICAgICBjb250ZXh0ID0gY29udGV4dC5jYWxsKHRoaXMpO1xuICAgIH1cblxuICAgIGxldCBmbiA9IG9wdGlvbnMuZm47XG5cbiAgICBpZiAoIWlzRW1wdHkoY29udGV4dCkpIHtcbiAgICAgIGxldCBkYXRhID0gb3B0aW9ucy5kYXRhO1xuICAgICAgaWYgKG9wdGlvbnMuZGF0YSAmJiBvcHRpb25zLmlkcykge1xuICAgICAgICBkYXRhID0gY3JlYXRlRnJhbWUob3B0aW9ucy5kYXRhKTtcbiAgICAgICAgZGF0YS5jb250ZXh0UGF0aCA9IGFwcGVuZENvbnRleHRQYXRoKFxuICAgICAgICAgIG9wdGlvbnMuZGF0YS5jb250ZXh0UGF0aCxcbiAgICAgICAgICBvcHRpb25zLmlkc1swXVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZm4oY29udGV4dCwge1xuICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICBibG9ja1BhcmFtczogYmxvY2tQYXJhbXMoW2NvbnRleHRdLCBbZGF0YSAmJiBkYXRhLmNvbnRleHRQYXRoXSlcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gb3B0aW9ucy5pbnZlcnNlKHRoaXMpO1xuICAgIH1cbiAgfSk7XG59XG4iXX0=


/***/ }),
/* 1041 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	exports.__esModule = true;
	exports.createNewLookupObject = createNewLookupObject;
	
	var _utils = __webpack_require__(62);
	
	/**
	 * Create a new object with "null"-prototype to avoid truthy results on prototype properties.
	 * The resulting object can be used with "object[property]" to check if a property exists
	 * @param {...object} sources a varargs parameter of source objects that will be merged
	 * @returns {object}
	 */
	
	function createNewLookupObject() {
	  for (var _len = arguments.length, sources = Array(_len), _key = 0; _key < _len; _key++) {
	    sources[_key] = arguments[_key];
	  }
	
	  return _utils.extend.apply(undefined, [Object.create(null)].concat(sources));
	}
	//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2ludGVybmFsL2NyZWF0ZS1uZXctbG9va3VwLW9iamVjdC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztxQkFBdUIsVUFBVTs7Ozs7Ozs7O0FBUTFCLFNBQVMscUJBQXFCLEdBQWE7b0NBQVQsT0FBTztBQUFQLFdBQU87OztBQUM5QyxTQUFPLGdDQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQUssT0FBTyxFQUFDLENBQUM7Q0FDaEQiLCJmaWxlIjoiY3JlYXRlLW5ldy1sb29rdXAtb2JqZWN0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXh0ZW5kIH0gZnJvbSAnLi4vdXRpbHMnO1xuXG4vKipcbiAqIENyZWF0ZSBhIG5ldyBvYmplY3Qgd2l0aCBcIm51bGxcIi1wcm90b3R5cGUgdG8gYXZvaWQgdHJ1dGh5IHJlc3VsdHMgb24gcHJvdG90eXBlIHByb3BlcnRpZXMuXG4gKiBUaGUgcmVzdWx0aW5nIG9iamVjdCBjYW4gYmUgdXNlZCB3aXRoIFwib2JqZWN0W3Byb3BlcnR5XVwiIHRvIGNoZWNrIGlmIGEgcHJvcGVydHkgZXhpc3RzXG4gKiBAcGFyYW0gey4uLm9iamVjdH0gc291cmNlcyBhIHZhcmFyZ3MgcGFyYW1ldGVyIG9mIHNvdXJjZSBvYmplY3RzIHRoYXQgd2lsbCBiZSBtZXJnZWRcbiAqIEByZXR1cm5zIHtvYmplY3R9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVOZXdMb29rdXBPYmplY3QoLi4uc291cmNlcykge1xuICByZXR1cm4gZXh0ZW5kKE9iamVjdC5jcmVhdGUobnVsbCksIC4uLnNvdXJjZXMpO1xufVxuIl19


/***/ }),
/* 1042 */
/***/ (function(module, exports) {

	'use strict';
	
	exports.__esModule = true;
	exports.wrapHelper = wrapHelper;
	
	function wrapHelper(helper, transformOptionsFn) {
	  if (typeof helper !== 'function') {
	    // This should not happen, but apparently it does in https://github.com/wycats/handlebars.js/issues/1639
	    // We try to make the wrapper least-invasive by not wrapping it, if the helper is not a function.
	    return helper;
	  }
	  var wrapper = function wrapper() /* dynamic arguments */{
	    var options = arguments[arguments.length - 1];
	    arguments[arguments.length - 1] = transformOptionsFn(options);
	    return helper.apply(this, arguments);
	  };
	  return wrapper;
	}
	//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2ludGVybmFsL3dyYXBIZWxwZXIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBTyxTQUFTLFVBQVUsQ0FBQyxNQUFNLEVBQUUsa0JBQWtCLEVBQUU7QUFDckQsTUFBSSxPQUFPLE1BQU0sS0FBSyxVQUFVLEVBQUU7OztBQUdoQyxXQUFPLE1BQU0sQ0FBQztHQUNmO0FBQ0QsTUFBSSxPQUFPLEdBQUcsU0FBVixPQUFPLDBCQUFxQztBQUM5QyxRQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNoRCxhQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUM5RCxXQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0dBQ3RDLENBQUM7QUFDRixTQUFPLE9BQU8sQ0FBQztDQUNoQiIsImZpbGUiOiJ3cmFwSGVscGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIHdyYXBIZWxwZXIoaGVscGVyLCB0cmFuc2Zvcm1PcHRpb25zRm4pIHtcbiAgaWYgKHR5cGVvZiBoZWxwZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBUaGlzIHNob3VsZCBub3QgaGFwcGVuLCBidXQgYXBwYXJlbnRseSBpdCBkb2VzIGluIGh0dHBzOi8vZ2l0aHViLmNvbS93eWNhdHMvaGFuZGxlYmFycy5qcy9pc3N1ZXMvMTYzOVxuICAgIC8vIFdlIHRyeSB0byBtYWtlIHRoZSB3cmFwcGVyIGxlYXN0LWludmFzaXZlIGJ5IG5vdCB3cmFwcGluZyBpdCwgaWYgdGhlIGhlbHBlciBpcyBub3QgYSBmdW5jdGlvbi5cbiAgICByZXR1cm4gaGVscGVyO1xuICB9XG4gIGxldCB3cmFwcGVyID0gZnVuY3Rpb24oLyogZHluYW1pYyBhcmd1bWVudHMgKi8pIHtcbiAgICBjb25zdCBvcHRpb25zID0gYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGggLSAxXTtcbiAgICBhcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aCAtIDFdID0gdHJhbnNmb3JtT3B0aW9uc0ZuKG9wdGlvbnMpO1xuICAgIHJldHVybiBoZWxwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbiAgcmV0dXJuIHdyYXBwZXI7XG59XG4iXX0=


/***/ }),
/* 1043 */
/***/ (function(module, exports) {

	/* WEBPACK VAR INJECTION */(function(global) {'use strict';
	
	exports.__esModule = true;
	
	exports['default'] = function (Handlebars) {
	  /* istanbul ignore next */
	  var root = typeof global !== 'undefined' ? global : window,
	      $Handlebars = root.Handlebars;
	  /* istanbul ignore next */
	  Handlebars.noConflict = function () {
	    if (root.Handlebars === Handlebars) {
	      root.Handlebars = $Handlebars;
	    }
	    return Handlebars;
	  };
	};
	
	module.exports = exports['default'];
	//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL25vLWNvbmZsaWN0LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7cUJBQWUsVUFBUyxVQUFVLEVBQUU7O0FBRWxDLE1BQUksSUFBSSxHQUFHLE9BQU8sTUFBTSxLQUFLLFdBQVcsR0FBRyxNQUFNLEdBQUcsTUFBTTtNQUN4RCxXQUFXLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQzs7QUFFaEMsWUFBVSxDQUFDLFVBQVUsR0FBRyxZQUFXO0FBQ2pDLFFBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxVQUFVLEVBQUU7QUFDbEMsVUFBSSxDQUFDLFVBQVUsR0FBRyxXQUFXLENBQUM7S0FDL0I7QUFDRCxXQUFPLFVBQVUsQ0FBQztHQUNuQixDQUFDO0NBQ0giLCJmaWxlIjoibm8tY29uZmxpY3QuanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihIYW5kbGViYXJzKSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIGxldCByb290ID0gdHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWwgOiB3aW5kb3csXG4gICAgJEhhbmRsZWJhcnMgPSByb290LkhhbmRsZWJhcnM7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIEhhbmRsZWJhcnMubm9Db25mbGljdCA9IGZ1bmN0aW9uKCkge1xuICAgIGlmIChyb290LkhhbmRsZWJhcnMgPT09IEhhbmRsZWJhcnMpIHtcbiAgICAgIHJvb3QuSGFuZGxlYmFycyA9ICRIYW5kbGViYXJzO1xuICAgIH1cbiAgICByZXR1cm4gSGFuZGxlYmFycztcbiAgfTtcbn1cbiJdfQ==
	
	/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))

/***/ }),
/* 1044 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	exports.__esModule = true;
	exports.checkRevision = checkRevision;
	exports.template = template;
	exports.wrapProgram = wrapProgram;
	exports.resolvePartial = resolvePartial;
	exports.invokePartial = invokePartial;
	exports.noop = noop;
	// istanbul ignore next
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
	
	// istanbul ignore next
	
	function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
	
	var _utils = __webpack_require__(62);
	
	var Utils = _interopRequireWildcard(_utils);
	
	var _exception = __webpack_require__(99);
	
	var _exception2 = _interopRequireDefault(_exception);
	
	var _base = __webpack_require__(354);
	
	var _helpers = __webpack_require__(355);
	
	var _internalWrapHelper = __webpack_require__(1042);
	
	var _internalProtoAccess = __webpack_require__(356);
	
	function checkRevision(compilerInfo) {
	  var compilerRevision = compilerInfo && compilerInfo[0] || 1,
	      currentRevision = _base.COMPILER_REVISION;
	
	  if (compilerRevision >= _base.LAST_COMPATIBLE_COMPILER_REVISION && compilerRevision <= _base.COMPILER_REVISION) {
	    return;
	  }
	
	  if (compilerRevision < _base.LAST_COMPATIBLE_COMPILER_REVISION) {
	    var runtimeVersions = _base.REVISION_CHANGES[currentRevision],
	        compilerVersions = _base.REVISION_CHANGES[compilerRevision];
	    throw new _exception2['default']('Template was precompiled with an older version of Handlebars than the current runtime. ' + 'Please update your precompiler to a newer version (' + runtimeVersions + ') or downgrade your runtime to an older version (' + compilerVersions + ').');
	  } else {
	    // Use the embedded version info since the runtime doesn't know about this revision yet
	    throw new _exception2['default']('Template was precompiled with a newer version of Handlebars than the current runtime. ' + 'Please update your runtime to a newer version (' + compilerInfo[1] + ').');
	  }
	}
	
	function template(templateSpec, env) {
	  /* istanbul ignore next */
	  if (!env) {
	    throw new _exception2['default']('No environment passed to template');
	  }
	  if (!templateSpec || !templateSpec.main) {
	    throw new _exception2['default']('Unknown template object: ' + typeof templateSpec);
	  }
	
	  templateSpec.main.decorator = templateSpec.main_d;
	
	  // Note: Using env.VM references rather than local var references throughout this section to allow
	  // for external users to override these as pseudo-supported APIs.
	  env.VM.checkRevision(templateSpec.compiler);
	
	  // backwards compatibility for precompiled templates with compiler-version 7 (<4.3.0)
	  var templateWasPrecompiledWithCompilerV7 = templateSpec.compiler && templateSpec.compiler[0] === 7;
	
	  function invokePartialWrapper(partial, context, options) {
	    if (options.hash) {
	      context = Utils.extend({}, context, options.hash);
	      if (options.ids) {
	        options.ids[0] = true;
	      }
	    }
	    partial = env.VM.resolvePartial.call(this, partial, context, options);
	
	    var extendedOptions = Utils.extend({}, options, {
	      hooks: this.hooks,
	      protoAccessControl: this.protoAccessControl
	    });
	
	    var result = env.VM.invokePartial.call(this, partial, context, extendedOptions);
	
	    if (result == null && env.compile) {
	      options.partials[options.name] = env.compile(partial, templateSpec.compilerOptions, env);
	      result = options.partials[options.name](context, extendedOptions);
	    }
	    if (result != null) {
	      if (options.indent) {
	        var lines = result.split('\n');
	        for (var i = 0, l = lines.length; i < l; i++) {
	          if (!lines[i] && i + 1 === l) {
	            break;
	          }
	
	          lines[i] = options.indent + lines[i];
	        }
	        result = lines.join('\n');
	      }
	      return result;
	    } else {
	      throw new _exception2['default']('The partial ' + options.name + ' could not be compiled when running in runtime-only mode');
	    }
	  }
	
	  // Just add water
	  var container = {
	    strict: function strict(obj, name, loc) {
	      if (!obj || !(name in obj)) {
	        throw new _exception2['default']('"' + name + '" not defined in ' + obj, {
	          loc: loc
	        });
	      }
	      return obj[name];
	    },
	    lookupProperty: function lookupProperty(parent, propertyName) {
	      var result = parent[propertyName];
	      if (result == null) {
	        return result;
	      }
	      if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
	        return result;
	      }
	
	      if (_internalProtoAccess.resultIsAllowed(result, container.protoAccessControl, propertyName)) {
	        return result;
	      }
	      return undefined;
	    },
	    lookup: function lookup(depths, name) {
	      var len = depths.length;
	      for (var i = 0; i < len; i++) {
	        var result = depths[i] && container.lookupProperty(depths[i], name);
	        if (result != null) {
	          return depths[i][name];
	        }
	      }
	    },
	    lambda: function lambda(current, context) {
	      return typeof current === 'function' ? current.call(context) : current;
	    },
	
	    escapeExpression: Utils.escapeExpression,
	    invokePartial: invokePartialWrapper,
	
	    fn: function fn(i) {
	      var ret = templateSpec[i];
	      ret.decorator = templateSpec[i + '_d'];
	      return ret;
	    },
	
	    programs: [],
	    program: function program(i, data, declaredBlockParams, blockParams, depths) {
	      var programWrapper = this.programs[i],
	          fn = this.fn(i);
	      if (data || depths || blockParams || declaredBlockParams) {
	        programWrapper = wrapProgram(this, i, fn, data, declaredBlockParams, blockParams, depths);
	      } else if (!programWrapper) {
	        programWrapper = this.programs[i] = wrapProgram(this, i, fn);
	      }
	      return programWrapper;
	    },
	
	    data: function data(value, depth) {
	      while (value && depth--) {
	        value = value._parent;
	      }
	      return value;
	    },
	    mergeIfNeeded: function mergeIfNeeded(param, common) {
	      var obj = param || common;
	
	      if (param && common && param !== common) {
	        obj = Utils.extend({}, common, param);
	      }
	
	      return obj;
	    },
	    // An empty object to use as replacement for null-contexts
	    nullContext: Object.seal({}),
	
	    noop: env.VM.noop,
	    compilerInfo: templateSpec.compiler
	  };
	
	  function ret(context) {
	    var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
	
	    var data = options.data;
	
	    ret._setup(options);
	    if (!options.partial && templateSpec.useData) {
	      data = initData(context, data);
	    }
	    var depths = undefined,
	        blockParams = templateSpec.useBlockParams ? [] : undefined;
	    if (templateSpec.useDepths) {
	      if (options.depths) {
	        depths = context != options.depths[0] ? [context].concat(options.depths) : options.depths;
	      } else {
	        depths = [context];
	      }
	    }
	
	    function main(context /*, options*/) {
	      return '' + templateSpec.main(container, context, container.helpers, container.partials, data, blockParams, depths);
	    }
	
	    main = executeDecorators(templateSpec.main, main, container, options.depths || [], data, blockParams);
	    return main(context, options);
	  }
	
	  ret.isTop = true;
	
	  ret._setup = function (options) {
	    if (!options.partial) {
	      var mergedHelpers = Utils.extend({}, env.helpers, options.helpers);
	      wrapHelpersToPassLookupProperty(mergedHelpers, container);
	      container.helpers = mergedHelpers;
	
	      if (templateSpec.usePartial) {
	        // Use mergeIfNeeded here to prevent compiling global partials multiple times
	        container.partials = container.mergeIfNeeded(options.partials, env.partials);
	      }
	      if (templateSpec.usePartial || templateSpec.useDecorators) {
	        container.decorators = Utils.extend({}, env.decorators, options.decorators);
	      }
	
	      container.hooks = {};
	      container.protoAccessControl = _internalProtoAccess.createProtoAccessControl(options);
	
	      var keepHelperInHelpers = options.allowCallsToHelperMissing || templateWasPrecompiledWithCompilerV7;
	      _helpers.moveHelperToHooks(container, 'helperMissing', keepHelperInHelpers);
	      _helpers.moveHelperToHooks(container, 'blockHelperMissing', keepHelperInHelpers);
	    } else {
	      container.protoAccessControl = options.protoAccessControl; // internal option
	      container.helpers = options.helpers;
	      container.partials = options.partials;
	      container.decorators = options.decorators;
	      container.hooks = options.hooks;
	    }
	  };
	
	  ret._child = function (i, data, blockParams, depths) {
	    if (templateSpec.useBlockParams && !blockParams) {
	      throw new _exception2['default']('must pass block params');
	    }
	    if (templateSpec.useDepths && !depths) {
	      throw new _exception2['default']('must pass parent depths');
	    }
	
	    return wrapProgram(container, i, templateSpec[i], data, 0, blockParams, depths);
	  };
	  return ret;
	}
	
	function wrapProgram(container, i, fn, data, declaredBlockParams, blockParams, depths) {
	  function prog(context) {
	    var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
	
	    var currentDepths = depths;
	    if (depths && context != depths[0] && !(context === container.nullContext && depths[0] === null)) {
	      currentDepths = [context].concat(depths);
	    }
	
	    return fn(container, context, container.helpers, container.partials, options.data || data, blockParams && [options.blockParams].concat(blockParams), currentDepths);
	  }
	
	  prog = executeDecorators(fn, prog, container, depths, data, blockParams);
	
	  prog.program = i;
	  prog.depth = depths ? depths.length : 0;
	  prog.blockParams = declaredBlockParams || 0;
	  return prog;
	}
	
	/**
	 * This is currently part of the official API, therefore implementation details should not be changed.
	 */
	
	function resolvePartial(partial, context, options) {
	  if (!partial) {
	    if (options.name === '@partial-block') {
	      partial = options.data['partial-block'];
	    } else {
	      partial = options.partials[options.name];
	    }
	  } else if (!partial.call && !options.name) {
	    // This is a dynamic partial that returned a string
	    options.name = partial;
	    partial = options.partials[partial];
	  }
	  return partial;
	}
	
	function invokePartial(partial, context, options) {
	  // Use the current closure context to save the partial-block if this partial
	  var currentPartialBlock = options.data && options.data['partial-block'];
	  options.partial = true;
	  if (options.ids) {
	    options.data.contextPath = options.ids[0] || options.data.contextPath;
	  }
	
	  var partialBlock = undefined;
	  if (options.fn && options.fn !== noop) {
	    (function () {
	      options.data = _base.createFrame(options.data);
	      // Wrapper function to get access to currentPartialBlock from the closure
	      var fn = options.fn;
	      partialBlock = options.data['partial-block'] = function partialBlockWrapper(context) {
	        var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
	
	        // Restore the partial-block from the closure for the execution of the block
	        // i.e. the part inside the block of the partial call.
	        options.data = _base.createFrame(options.data);
	        options.data['partial-block'] = currentPartialBlock;
	        return fn(context, options);
	      };
	      if (fn.partials) {
	        options.partials = Utils.extend({}, options.partials, fn.partials);
	      }
	    })();
	  }
	
	  if (partial === undefined && partialBlock) {
	    partial = partialBlock;
	  }
	
	  if (partial === undefined) {
	    throw new _exception2['default']('The partial ' + options.name + ' could not be found');
	  } else if (partial instanceof Function) {
	    return partial(context, options);
	  }
	}
	
	function noop() {
	  return '';
	}
	
	function initData(context, data) {
	  if (!data || !('root' in data)) {
	    data = data ? _base.createFrame(data) : {};
	    data.root = context;
	  }
	  return data;
	}
	
	function executeDecorators(fn, prog, container, depths, data, blockParams) {
	  if (fn.decorator) {
	    var props = {};
	    prog = fn.decorator(prog, props, container, depths && depths[0], data, blockParams, depths);
	    Utils.extend(prog, props);
	  }
	  return prog;
	}
	
	function wrapHelpersToPassLookupProperty(mergedHelpers, container) {
	  Object.keys(mergedHelpers).forEach(function (helperName) {
	    var helper = mergedHelpers[helperName];
	    mergedHelpers[helperName] = passLookupPropertyOption(helper, container);
	  });
	}
	
	function passLookupPropertyOption(helper, container) {
	  var lookupProperty = container.lookupProperty;
	  return _internalWrapHelper.wrapHelper(helper, function (options) {
	    return Utils.extend({ lookupProperty: lookupProperty }, options);
	  });
	}
	//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL3J1bnRpbWUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7cUJBQXVCLFNBQVM7O0lBQXBCLEtBQUs7O3lCQUNLLGFBQWE7Ozs7b0JBTTVCLFFBQVE7O3VCQUNtQixXQUFXOztrQ0FDbEIsdUJBQXVCOzttQ0FJM0MseUJBQXlCOztBQUV6QixTQUFTLGFBQWEsQ0FBQyxZQUFZLEVBQUU7QUFDMUMsTUFBTSxnQkFBZ0IsR0FBRyxBQUFDLFlBQVksSUFBSSxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUssQ0FBQztNQUM3RCxlQUFlLDBCQUFvQixDQUFDOztBQUV0QyxNQUNFLGdCQUFnQiwyQ0FBcUMsSUFDckQsZ0JBQWdCLDJCQUFxQixFQUNyQztBQUNBLFdBQU87R0FDUjs7QUFFRCxNQUFJLGdCQUFnQiwwQ0FBb0MsRUFBRTtBQUN4RCxRQUFNLGVBQWUsR0FBRyx1QkFBaUIsZUFBZSxDQUFDO1FBQ3ZELGdCQUFnQixHQUFHLHVCQUFpQixnQkFBZ0IsQ0FBQyxDQUFDO0FBQ3hELFVBQU0sMkJBQ0oseUZBQXlGLEdBQ3ZGLHFEQUFxRCxHQUNyRCxlQUFlLEdBQ2YsbURBQW1ELEdBQ25ELGdCQUFnQixHQUNoQixJQUFJLENBQ1AsQ0FBQztHQUNILE1BQU07O0FBRUwsVUFBTSwyQkFDSix3RkFBd0YsR0FDdEYsaURBQWlELEdBQ2pELFlBQVksQ0FBQyxDQUFDLENBQUMsR0FDZixJQUFJLENBQ1AsQ0FBQztHQUNIO0NBQ0Y7O0FBRU0sU0FBUyxRQUFRLENBQUMsWUFBWSxFQUFFLEdBQUcsRUFBRTs7QUFFMUMsTUFBSSxDQUFDLEdBQUcsRUFBRTtBQUNSLFVBQU0sMkJBQWMsbUNBQW1DLENBQUMsQ0FBQztHQUMxRDtBQUNELE1BQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFO0FBQ3ZDLFVBQU0sMkJBQWMsMkJBQTJCLEdBQUcsT0FBTyxZQUFZLENBQUMsQ0FBQztH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LE1BQU0sQ0FBQyxFQUFFLGNBQWMsRUFBZCxjQUFjLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQztHQUNsRCxDQUFDLENBQUM7Q0FDSiIsImZpbGUiOiJydW50aW1lLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgVXRpbHMgZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgRXhjZXB0aW9uIGZyb20gJy4vZXhjZXB0aW9uJztcbmltcG9ydCB7XG4gIENPTVBJTEVSX1JFVklTSU9OLFxuICBjcmVhdGVGcmFtZSxcbiAgTEFTVF9DT01QQVRJQkxFX0NPTVBJTEVSX1JFVklTSU9OLFxuICBSRVZJU0lPTl9DSEFOR0VTXG59IGZyb20gJy4vYmFzZSc7XG5pbXBvcnQgeyBtb3ZlSGVscGVyVG9Ib29rcyB9IGZyb20gJy4vaGVscGVycyc7XG5pbXBvcnQgeyB3cmFwSGVscGVyIH0gZnJvbSAnLi9pbnRlcm5hbC93cmFwSGVscGVyJztcbmltcG9ydCB7XG4gIGNyZWF0ZVByb3RvQWNjZXNzQ29udHJvbCxcbiAgcmVzdWx0SXNBbGxvd2VkXG59IGZyb20gJy4vaW50ZXJuYWwvcHJvdG8tYWNjZXNzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrUmV2aXNpb24oY29tcGlsZXJJbmZvKSB7XG4gIGNvbnN0IGNvbXBpbGVyUmV2aXNpb24gPSAoY29tcGlsZXJJbmZvICYmIGNvbXBpbGVySW5mb1swXSkgfHwgMSxcbiAgICBjdXJyZW50UmV2aXNpb24gPSBDT01QSUxFUl9SRVZJU0lPTjtcblxuICBpZiAoXG4gICAgY29tcGlsZXJSZXZpc2lvbiA+PSBMQVNUX0NPTVBBVElCTEVfQ09NUElMRVJfUkVWSVNJT04gJiZcbiAgICBjb21waWxlclJldmlzaW9uIDw9IENPTVBJTEVSX1JFVklTSU9OXG4gICkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChjb21waWxlclJldmlzaW9uIDwgTEFTVF9DT01QQVRJQkxFX0NPTVBJTEVSX1JFVklTSU9OKSB7XG4gICAgY29uc3QgcnVudGltZVZlcnNpb25zID0gUkVWSVNJT05fQ0hBTkdFU1tjdXJyZW50UmV2aXNpb25dLFxuICAgICAgY29tcGlsZXJWZXJzaW9ucyA9IFJFVklTSU9OX0NIQU5HRVNbY29tcGlsZXJSZXZpc2lvbl07XG4gICAgdGhyb3cgbmV3IEV4Y2VwdGlvbihcbiAgICAgICdUZW1wbGF0ZSB3YXMgcHJlY29tcGlsZWQgd2l0aCBhbiBvbGRlciB2ZXJzaW9uIG9mIEhhbmRsZWJhcnMgdGhhbiB0aGUgY3VycmVudCBydW50aW1lLiAnICtcbiAgICAgICAgJ1BsZWFzZSB1cGRhdGUgeW91ciBwcmVjb21waWxlciB0byBhIG5ld2VyIHZlcnNpb24gKCcgK1xuICAgICAgICBydW50aW1lVmVyc2lvbnMgK1xuICAgICAgICAnKSBvciBkb3duZ3JhZGUgeW91ciBydW50aW1lIHRvIGFuIG9sZGVyIHZlcnNpb24gKCcgK1xuICAgICAgICBjb21waWxlclZlcnNpb25zICtcbiAgICAgICAgJykuJ1xuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgLy8gVXNlIHRoZSBlbWJlZGRlZCB2ZXJzaW9uIGluZm8gc2luY2UgdGhlIHJ1bnRpbWUgZG9lc24ndCBrbm93IGFib3V0IHRoaXMgcmV2aXNpb24geWV0XG4gICAgdGhyb3cgbmV3IEV4Y2VwdGlvbihcbiAgICAgICdUZW1wbGF0ZSB3YXMgcHJlY29tcGlsZWQgd2l0aCBhIG5ld2VyIHZlcnNpb24gb2YgSGFuZGxlYmFycyB0aGFuIHRoZSBjdXJyZW50IHJ1bnRpbWUuICcgK1xuICAgICAgICAnUGxlYXNlIHVwZGF0ZSB5b3VyIHJ1bnRpbWUgdG8gYSBuZXdlciB2ZXJzaW9uICgnICtcbiAgICAgICAgY29tcGlsZXJJbmZvWzFdICtcbiAgICAgICAgJykuJ1xuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlbXBsYXRlKHRlbXBsYXRlU3BlYywgZW52KSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIGlmICghZW52KSB7XG4gICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignTm8gZW52aXJvbm1lbnQgcGFzc2VkIHRvIHRlbXBsYXRlJyk7XG4gIH1cbiAgaWYgKCF0ZW1wbGF0ZVNwZWMgfHwgIXRlbXBsYXRlU3BlYy5tYWluKSB7XG4gICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignVW5rbm93biB0ZW1wbGF0ZSBvYmplY3Q6ICcgKyB0eXBlb2YgdGVtcGxhdGVTcGVjKTtcbiAgfVxuXG4gIHRlbXBsYXRlU3BlYy5tYWluLmRlY29yYXRvciA9IHRlbXBsYXRlU3BlYy5tYWluX2Q7XG5cbiAgLy8gTm90ZTogVXNpbmcgZW52LlZNIHJlZmVyZW5jZXMgcmF0aGVyIHRoYW4gbG9jYWwgdmFyIHJlZmVyZW5jZXMgdGhyb3VnaG91dCB0aGlzIHNlY3Rpb24gdG8gYWxsb3dcbiAgLy8gZm9yIGV4dGVybmFsIHVzZXJzIHRvIG92ZXJyaWRlIHRoZXNlIGFzIHBzZXVkby1zdXBwb3J0ZWQgQVBJcy5cbiAgZW52LlZNLmNoZWNrUmV2aXNpb24odGVtcGxhdGVTcGVjLmNvbXBpbGVyKTtcblxuICAvLyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBmb3IgcHJlY29tcGlsZWQgdGVtcGxhdGVzIHdpdGggY29tcGlsZXItdmVyc2lvbiA3ICg8NC4zLjApXG4gIGNvbnN0IHRlbXBsYXRlV2FzUHJlY29tcGlsZWRXaXRoQ29tcGlsZXJWNyA9XG4gICAgdGVtcGxhdGVTcGVjLmNvbXBpbGVyICYmIHRlbXBsYXRlU3BlYy5jb21waWxlclswXSA9PT0gNztcblxuICBmdW5jdGlvbiBpbnZva2VQYXJ0aWFsV3JhcHBlcihwYXJ0aWFsLCBjb250ZXh0LCBvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMuaGFzaCkge1xuICAgICAgY29udGV4dCA9IFV0aWxzLmV4dGVuZCh7fSwgY29udGV4dCwgb3B0aW9ucy5oYXNoKTtcbiAgICAgIGlmIChvcHRpb25zLmlkcykge1xuICAgICAgICBvcHRpb25zLmlkc1swXSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHBhcnRpYWwgPSBlbnYuVk0ucmVzb2x2ZVBhcnRpYWwuY2FsbCh0aGlzLCBwYXJ0aWFsLCBjb250ZXh0LCBvcHRpb25zKTtcblxuICAgIGxldCBleHRlbmRlZE9wdGlvbnMgPSBVdGlscy5leHRlbmQoe30sIG9wdGlvbnMsIHtcbiAgICAgIGhvb2tzOiB0aGlzLmhvb2tzLFxuICAgICAgcHJvdG9BY2Nlc3NDb250cm9sOiB0aGlzLnByb3RvQWNjZXNzQ29udHJvbFxuICAgIH0pO1xuXG4gICAgbGV0IHJlc3VsdCA9IGVudi5WTS5pbnZva2VQYXJ0aWFsLmNhbGwoXG4gICAgICB0aGlzLFxuICAgICAgcGFydGlhbCxcbiAgICAgIGNvbnRleHQsXG4gICAgICBleHRlbmRlZE9wdGlvbnNcbiAgICApO1xuXG4gICAgaWYgKHJlc3VsdCA9PSBudWxsICYmIGVudi5jb21waWxlKSB7XG4gICAgICBvcHRpb25zLnBhcnRpYWxzW29wdGlvbnMubmFtZV0gPSBlbnYuY29tcGlsZShcbiAgICAgICAgcGFydGlhbCxcbiAgICAgICAgdGVtcGxhdGVTcGVjLmNvbXBpbGVyT3B0aW9ucyxcbiAgICAgICAgZW52XG4gICAgICApO1xuICAgICAgcmVzdWx0ID0gb3B0aW9ucy5wYXJ0aWFsc1tvcHRpb25zLm5hbWVdKGNvbnRleHQsIGV4dGVuZGVkT3B0aW9ucyk7XG4gICAgfVxuICAgIGlmIChyZXN1bHQgIT0gbnVsbCkge1xuICAgICAgaWYgKG9wdGlvbnMuaW5kZW50KSB7XG4gICAgICAgIGxldCBsaW5lcyA9IHJlc3VsdC5zcGxpdCgnXFxuJyk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gbGluZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgaWYgKCFsaW5lc1tpXSAmJiBpICsgMSA9PT0gbCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbGluZXNbaV0gPSBvcHRpb25zLmluZGVudCArIGxpbmVzW2ldO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdCA9IGxpbmVzLmpvaW4oJ1xcbicpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbihcbiAgICAgICAgJ1RoZSBwYXJ0aWFsICcgK1xuICAgICAgICAgIG9wdGlvbnMubmFtZSArXG4gICAgICAgICAgJyBjb3VsZCBub3QgYmUgY29tcGlsZWQgd2hlbiBydW5uaW5nIGluIHJ1bnRpbWUtb25seSBtb2RlJ1xuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvLyBKdXN0IGFkZCB3YXRlclxuICBsZXQgY29udGFpbmVyID0ge1xuICAgIHN0cmljdDogZnVuY3Rpb24ob2JqLCBuYW1lLCBsb2MpIHtcbiAgICAgIGlmICghb2JqIHx8ICEobmFtZSBpbiBvYmopKSB7XG4gICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ1wiJyArIG5hbWUgKyAnXCIgbm90IGRlZmluZWQgaW4gJyArIG9iaiwge1xuICAgICAgICAgIGxvYzogbG9jXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG9ialtuYW1lXTtcbiAgICB9LFxuICAgIGxvb2t1cFByb3BlcnR5OiBmdW5jdGlvbihwYXJlbnQsIHByb3BlcnR5TmFtZSkge1xuICAgICAgbGV0IHJlc3VsdCA9IHBhcmVudFtwcm9wZXJ0eU5hbWVdO1xuICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHBhcmVudCwgcHJvcGVydHlOYW1lKSkge1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuXG4gICAgICBpZiAocmVzdWx0SXNBbGxvd2VkKHJlc3VsdCwgY29udGFpbmVyLnByb3RvQWNjZXNzQ29udHJvbCwgcHJvcGVydHlOYW1lKSkge1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9LFxuICAgIGxvb2t1cDogZnVuY3Rpb24oZGVwdGhzLCBuYW1lKSB7XG4gICAgICBjb25zdCBsZW4gPSBkZXB0aHMubGVuZ3RoO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBsZXQgcmVzdWx0ID0gZGVwdGhzW2ldICYmIGNvbnRhaW5lci5sb29rdXBQcm9wZXJ0eShkZXB0aHNbaV0sIG5hbWUpO1xuICAgICAgICBpZiAocmVzdWx0ICE9IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gZGVwdGhzW2ldW25hbWVdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBsYW1iZGE6IGZ1bmN0aW9uKGN1cnJlbnQsIGNvbnRleHQpIHtcbiAgICAgIHJldHVybiB0eXBlb2YgY3VycmVudCA9PT0gJ2Z1bmN0aW9uJyA/IGN1cnJlbnQuY2FsbChjb250ZXh0KSA6IGN1cnJlbnQ7XG4gICAgfSxcblxuICAgIGVzY2FwZUV4cHJlc3Npb246IFV0aWxzLmVzY2FwZUV4cHJlc3Npb24sXG4gICAgaW52b2tlUGFydGlhbDogaW52b2tlUGFydGlhbFdyYXBwZXIsXG5cbiAgICBmbjogZnVuY3Rpb24oaSkge1xuICAgICAgbGV0IHJldCA9IHRlbXBsYXRlU3BlY1tpXTtcbiAgICAgIHJldC5kZWNvcmF0b3IgPSB0ZW1wbGF0ZVNwZWNbaSArICdfZCddO1xuICAgICAgcmV0dXJuIHJldDtcbiAgICB9LFxuXG4gICAgcHJvZ3JhbXM6IFtdLFxuICAgIHByb2dyYW06IGZ1bmN0aW9uKGksIGRhdGEsIGRlY2xhcmVkQmxvY2tQYXJhbXMsIGJsb2NrUGFyYW1zLCBkZXB0aHMpIHtcbiAgICAgIGxldCBwcm9ncmFtV3JhcHBlciA9IHRoaXMucHJvZ3JhbXNbaV0sXG4gICAgICAgIGZuID0gdGhpcy5mbihpKTtcbiAgICAgIGlmIChkYXRhIHx8IGRlcHRocyB8fCBibG9ja1BhcmFtcyB8fCBkZWNsYXJlZEJsb2NrUGFyYW1zKSB7XG4gICAgICAgIHByb2dyYW1XcmFwcGVyID0gd3JhcFByb2dyYW0oXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICBpLFxuICAgICAgICAgIGZuLFxuICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgZGVjbGFyZWRCbG9ja1BhcmFtcyxcbiAgICAgICAgICBibG9ja1BhcmFtcyxcbiAgICAgICAgICBkZXB0aHNcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSBpZiAoIXByb2dyYW1XcmFwcGVyKSB7XG4gICAgICAgIHByb2dyYW1XcmFwcGVyID0gdGhpcy5wcm9ncmFtc1tpXSA9IHdyYXBQcm9ncmFtKHRoaXMsIGksIGZuKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwcm9ncmFtV3JhcHBlcjtcbiAgICB9LFxuXG4gICAgZGF0YTogZnVuY3Rpb24odmFsdWUsIGRlcHRoKSB7XG4gICAgICB3aGlsZSAodmFsdWUgJiYgZGVwdGgtLSkge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlLl9wYXJlbnQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfSxcbiAgICBtZXJnZUlmTmVlZGVkOiBmdW5jdGlvbihwYXJhbSwgY29tbW9uKSB7XG4gICAgICBsZXQgb2JqID0gcGFyYW0gfHwgY29tbW9uO1xuXG4gICAgICBpZiAocGFyYW0gJiYgY29tbW9uICYmIHBhcmFtICE9PSBjb21tb24pIHtcbiAgICAgICAgb2JqID0gVXRpbHMuZXh0ZW5kKHt9LCBjb21tb24sIHBhcmFtKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG9iajtcbiAgICB9LFxuICAgIC8vIEFuIGVtcHR5IG9iamVjdCB0byB1c2UgYXMgcmVwbGFjZW1lbnQgZm9yIG51bGwtY29udGV4dHNcbiAgICBudWxsQ29udGV4dDogT2JqZWN0LnNlYWwoe30pLFxuXG4gICAgbm9vcDogZW52LlZNLm5vb3AsXG4gICAgY29tcGlsZXJJbmZvOiB0ZW1wbGF0ZVNwZWMuY29tcGlsZXJcbiAgfTtcblxuICBmdW5jdGlvbiByZXQoY29udGV4dCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgbGV0IGRhdGEgPSBvcHRpb25zLmRhdGE7XG5cbiAgICByZXQuX3NldHVwKG9wdGlvbnMpO1xuICAgIGlmICghb3B0aW9ucy5wYXJ0aWFsICYmIHRlbXBsYXRlU3BlYy51c2VEYXRhKSB7XG4gICAgICBkYXRhID0gaW5pdERhdGEoY29udGV4dCwgZGF0YSk7XG4gICAgfVxuICAgIGxldCBkZXB0aHMsXG4gICAgICBibG9ja1BhcmFtcyA9IHRlbXBsYXRlU3BlYy51c2VCbG9ja1BhcmFtcyA/IFtdIDogdW5kZWZpbmVkO1xuICAgIGlmICh0ZW1wbGF0ZVNwZWMudXNlRGVwdGhzKSB7XG4gICAgICBpZiAob3B0aW9ucy5kZXB0aHMpIHtcbiAgICAgICAgZGVwdGhzID1cbiAgICAgICAgICBjb250ZXh0ICE9IG9wdGlvbnMuZGVwdGhzWzBdXG4gICAgICAgICAgICA/IFtjb250ZXh0XS5jb25jYXQob3B0aW9ucy5kZXB0aHMpXG4gICAgICAgICAgICA6IG9wdGlvbnMuZGVwdGhzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVwdGhzID0gW2NvbnRleHRdO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1haW4oY29udGV4dCAvKiwgb3B0aW9ucyovKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICAnJyArXG4gICAgICAgIHRlbXBsYXRlU3BlYy5tYWluKFxuICAgICAgICAgIGNvbnRhaW5lcixcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgIGNvbnRhaW5lci5oZWxwZXJzLFxuICAgICAgICAgIGNvbnRhaW5lci5wYXJ0aWFscyxcbiAgICAgICAgICBkYXRhLFxuICAgICAgICAgIGJsb2NrUGFyYW1zLFxuICAgICAgICAgIGRlcHRoc1xuICAgICAgICApXG4gICAgICApO1xuICAgIH1cblxuICAgIG1haW4gPSBleGVjdXRlRGVjb3JhdG9ycyhcbiAgICAgIHRlbXBsYXRlU3BlYy5tYWluLFxuICAgICAgbWFpbixcbiAgICAgIGNvbnRhaW5lcixcbiAgICAgIG9wdGlvbnMuZGVwdGhzIHx8IFtdLFxuICAgICAgZGF0YSxcbiAgICAgIGJsb2NrUGFyYW1zXG4gICAgKTtcbiAgICByZXR1cm4gbWFpbihjb250ZXh0LCBvcHRpb25zKTtcbiAgfVxuXG4gIHJldC5pc1RvcCA9IHRydWU7XG5cbiAgcmV0Ll9zZXR1cCA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICBpZiAoIW9wdGlvbnMucGFydGlhbCkge1xuICAgICAgbGV0IG1lcmdlZEhlbHBlcnMgPSBVdGlscy5leHRlbmQoe30sIGVudi5oZWxwZXJzLCBvcHRpb25zLmhlbHBlcnMpO1xuICAgICAgd3JhcEhlbHBlcnNUb1Bhc3NMb29rdXBQcm9wZXJ0eShtZXJnZWRIZWxwZXJzLCBjb250YWluZXIpO1xuICAgICAgY29udGFpbmVyLmhlbHBlcnMgPSBtZXJnZWRIZWxwZXJzO1xuXG4gICAgICBpZiAodGVtcGxhdGVTcGVjLnVzZVBhcnRpYWwpIHtcbiAgICAgICAgLy8gVXNlIG1lcmdlSWZOZWVkZWQgaGVyZSB0byBwcmV2ZW50IGNvbXBpbGluZyBnbG9iYWwgcGFydGlhbHMgbXVsdGlwbGUgdGltZXNcbiAgICAgICAgY29udGFpbmVyLnBhcnRpYWxzID0gY29udGFpbmVyLm1lcmdlSWZOZWVkZWQoXG4gICAgICAgICAgb3B0aW9ucy5wYXJ0aWFscyxcbiAgICAgICAgICBlbnYucGFydGlhbHNcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmICh0ZW1wbGF0ZVNwZWMudXNlUGFydGlhbCB8fCB0ZW1wbGF0ZVNwZWMudXNlRGVjb3JhdG9ycykge1xuICAgICAgICBjb250YWluZXIuZGVjb3JhdG9ycyA9IFV0aWxzLmV4dGVuZChcbiAgICAgICAgICB7fSxcbiAgICAgICAgICBlbnYuZGVjb3JhdG9ycyxcbiAgICAgICAgICBvcHRpb25zLmRlY29yYXRvcnNcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgY29udGFpbmVyLmhvb2tzID0ge307XG4gICAgICBjb250YWluZXIucHJvdG9BY2Nlc3NDb250cm9sID0gY3JlYXRlUHJvdG9BY2Nlc3NDb250cm9sKG9wdGlvbnMpO1xuXG4gICAgICBsZXQga2VlcEhlbHBlckluSGVscGVycyA9XG4gICAgICAgIG9wdGlvbnMuYWxsb3dDYWxsc1RvSGVscGVyTWlzc2luZyB8fFxuICAgICAgICB0ZW1wbGF0ZVdhc1ByZWNvbXBpbGVkV2l0aENvbXBpbGVyVjc7XG4gICAgICBtb3ZlSGVscGVyVG9Ib29rcyhjb250YWluZXIsICdoZWxwZXJNaXNzaW5nJywga2VlcEhlbHBlckluSGVscGVycyk7XG4gICAgICBtb3ZlSGVscGVyVG9Ib29rcyhjb250YWluZXIsICdibG9ja0hlbHBlck1pc3NpbmcnLCBrZWVwSGVscGVySW5IZWxwZXJzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29udGFpbmVyLnByb3RvQWNjZXNzQ29udHJvbCA9IG9wdGlvbnMucHJvdG9BY2Nlc3NDb250cm9sOyAvLyBpbnRlcm5hbCBvcHRpb25cbiAgICAgIGNvbnRhaW5lci5oZWxwZXJzID0gb3B0aW9ucy5oZWxwZXJzO1xuICAgICAgY29udGFpbmVyLnBhcnRpYWxzID0gb3B0aW9ucy5wYXJ0aWFscztcbiAgICAgIGNvbnRhaW5lci5kZWNvcmF0b3JzID0gb3B0aW9ucy5kZWNvcmF0b3JzO1xuICAgICAgY29udGFpbmVyLmhvb2tzID0gb3B0aW9ucy5ob29rcztcbiAgICB9XG4gIH07XG5cbiAgcmV0Ll9jaGlsZCA9IGZ1bmN0aW9uKGksIGRhdGEsIGJsb2NrUGFyYW1zLCBkZXB0aHMpIHtcbiAgICBpZiAodGVtcGxhdGVTcGVjLnVzZUJsb2NrUGFyYW1zICYmICFibG9ja1BhcmFtcykge1xuICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignbXVzdCBwYXNzIGJsb2NrIHBhcmFtcycpO1xuICAgIH1cbiAgICBpZiAodGVtcGxhdGVTcGVjLnVzZURlcHRocyAmJiAhZGVwdGhzKSB7XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdtdXN0IHBhc3MgcGFyZW50IGRlcHRocycpO1xuICAgIH1cblxuICAgIHJldHVybiB3cmFwUHJvZ3JhbShcbiAgICAgIGNvbnRhaW5lcixcbiAgICAgIGksXG4gICAgICB0ZW1wbGF0ZVNwZWNbaV0sXG4gICAgICBkYXRhLFxuICAgICAgMCxcbiAgICAgIGJsb2NrUGFyYW1zLFxuICAgICAgZGVwdGhzXG4gICAgKTtcbiAgfTtcbiAgcmV0dXJuIHJldDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyYXBQcm9ncmFtKFxuICBjb250YWluZXIsXG4gIGksXG4gIGZuLFxuICBkYXRhLFxuICBkZWNsYXJlZEJsb2NrUGFyYW1zLFxuICBibG9ja1BhcmFtcyxcbiAgZGVwdGhzXG4pIHtcbiAgZnVuY3Rpb24gcHJvZyhjb250ZXh0LCBvcHRpb25zID0ge30pIHtcbiAgICBsZXQgY3VycmVudERlcHRocyA9IGRlcHRocztcbiAgICBpZiAoXG4gICAgICBkZXB0aHMgJiZcbiAgICAgIGNvbnRleHQgIT0gZGVwdGhzWzBdICYmXG4gICAgICAhKGNvbnRleHQgPT09IGNvbnRhaW5lci5udWxsQ29udGV4dCAmJiBkZXB0aHNbMF0gPT09IG51bGwpXG4gICAgKSB7XG4gICAgICBjdXJyZW50RGVwdGhzID0gW2NvbnRleHRdLmNvbmNhdChkZXB0aHMpO1xuICAgIH1cblxuICAgIHJldHVybiBmbihcbiAgICAgIGNvbnRhaW5lcixcbiAgICAgIGNvbnRleHQsXG4gICAgICBjb250YWluZXIuaGVscGVycyxcbiAgICAgIGNvbnRhaW5lci5wYXJ0aWFscyxcbiAgICAgIG9wdGlvbnMuZGF0YSB8fCBkYXRhLFxuICAgICAgYmxvY2tQYXJhbXMgJiYgW29wdGlvbnMuYmxvY2tQYXJhbXNdLmNvbmNhdChibG9ja1BhcmFtcyksXG4gICAgICBjdXJyZW50RGVwdGhzXG4gICAgKTtcbiAgfVxuXG4gIHByb2cgPSBleGVjdXRlRGVjb3JhdG9ycyhmbiwgcHJvZywgY29udGFpbmVyLCBkZXB0aHMsIGRhdGEsIGJsb2NrUGFyYW1zKTtcblxuICBwcm9nLnByb2dyYW0gPSBpO1xuICBwcm9nLmRlcHRoID0gZGVwdGhzID8gZGVwdGhzLmxlbmd0aCA6IDA7XG4gIHByb2cuYmxvY2tQYXJhbXMgPSBkZWNsYXJlZEJsb2NrUGFyYW1zIHx8IDA7XG4gIHJldHVybiBwcm9nO1xufVxuXG4vKipcbiAqIFRoaXMgaXMgY3VycmVudGx5IHBhcnQgb2YgdGhlIG9mZmljaWFsIEFQSSwgdGhlcmVmb3JlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgc2hvdWxkIG5vdCBiZSBjaGFuZ2VkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVBhcnRpYWwocGFydGlhbCwgY29udGV4dCwgb3B0aW9ucykge1xuICBpZiAoIXBhcnRpYWwpIHtcbiAgICBpZiAob3B0aW9ucy5uYW1lID09PSAnQHBhcnRpYWwtYmxvY2snKSB7XG4gICAgICBwYXJ0aWFsID0gb3B0aW9ucy5kYXRhWydwYXJ0aWFsLWJsb2NrJ107XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcnRpYWwgPSBvcHRpb25zLnBhcnRpYWxzW29wdGlvbnMubmFtZV07XG4gICAgfVxuICB9IGVsc2UgaWYgKCFwYXJ0aWFsLmNhbGwgJiYgIW9wdGlvbnMubmFtZSkge1xuICAgIC8vIFRoaXMgaXMgYSBkeW5hbWljIHBhcnRpYWwgdGhhdCByZXR1cm5lZCBhIHN0cmluZ1xuICAgIG9wdGlvbnMubmFtZSA9IHBhcnRpYWw7XG4gICAgcGFydGlhbCA9IG9wdGlvbnMucGFydGlhbHNbcGFydGlhbF07XG4gIH1cbiAgcmV0dXJuIHBhcnRpYWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnZva2VQYXJ0aWFsKHBhcnRpYWwsIGNvbnRleHQsIG9wdGlvbnMpIHtcbiAgLy8gVXNlIHRoZSBjdXJyZW50IGNsb3N1cmUgY29udGV4dCB0byBzYXZlIHRoZSBwYXJ0aWFsLWJsb2NrIGlmIHRoaXMgcGFydGlhbFxuICBjb25zdCBjdXJyZW50UGFydGlhbEJsb2NrID0gb3B0aW9ucy5kYXRhICYmIG9wdGlvbnMuZGF0YVsncGFydGlhbC1ibG9jayddO1xuICBvcHRpb25zLnBhcnRpYWwgPSB0cnVlO1xuICBpZiAob3B0aW9ucy5pZHMpIHtcbiAgICBvcHRpb25zLmRhdGEuY29udGV4dFBhdGggPSBvcHRpb25zLmlkc1swXSB8fCBvcHRpb25zLmRhdGEuY29udGV4dFBhdGg7XG4gIH1cblxuICBsZXQgcGFydGlhbEJsb2NrO1xuICBpZiAob3B0aW9ucy5mbiAmJiBvcHRpb25zLmZuICE9PSBub29wKSB7XG4gICAgb3B0aW9ucy5kYXRhID0gY3JlYXRlRnJhbWUob3B0aW9ucy5kYXRhKTtcbiAgICAvLyBXcmFwcGVyIGZ1bmN0aW9uIHRvIGdldCBhY2Nlc3MgdG8gY3VycmVudFBhcnRpYWxCbG9jayBmcm9tIHRoZSBjbG9zdXJlXG4gICAgbGV0IGZuID0gb3B0aW9ucy5mbjtcbiAgICBwYXJ0aWFsQmxvY2sgPSBvcHRpb25zLmRhdGFbJ3BhcnRpYWwtYmxvY2snXSA9IGZ1bmN0aW9uIHBhcnRpYWxCbG9ja1dyYXBwZXIoXG4gICAgICBjb250ZXh0LFxuICAgICAgb3B0aW9ucyA9IHt9XG4gICAgKSB7XG4gICAgICAvLyBSZXN0b3JlIHRoZSBwYXJ0aWFsLWJsb2NrIGZyb20gdGhlIGNsb3N1cmUgZm9yIHRoZSBleGVjdXRpb24gb2YgdGhlIGJsb2NrXG4gICAgICAvLyBpLmUuIHRoZSBwYXJ0IGluc2lkZSB0aGUgYmxvY2sgb2YgdGhlIHBhcnRpYWwgY2FsbC5cbiAgICAgIG9wdGlvbnMuZGF0YSA9IGNyZWF0ZUZyYW1lKG9wdGlvbnMuZGF0YSk7XG4gICAgICBvcHRpb25zLmRhdGFbJ3BhcnRpYWwtYmxvY2snXSA9IGN1cnJlbnRQYXJ0aWFsQmxvY2s7XG4gICAgICByZXR1cm4gZm4oY29udGV4dCwgb3B0aW9ucyk7XG4gICAgfTtcbiAgICBpZiAoZm4ucGFydGlhbHMpIHtcbiAgICAgIG9wdGlvbnMucGFydGlhbHMgPSBVdGlscy5leHRlbmQoe30sIG9wdGlvbnMucGFydGlhbHMsIGZuLnBhcnRpYWxzKTtcbiAgICB9XG4gIH1cblxuICBpZiAocGFydGlhbCA9PT0gdW5kZWZpbmVkICYmIHBhcnRpYWxCbG9jaykge1xuICAgIHBhcnRpYWwgPSBwYXJ0aWFsQmxvY2s7XG4gIH1cblxuICBpZiAocGFydGlhbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignVGhlIHBhcnRpYWwgJyArIG9wdGlvbnMubmFtZSArICcgY291bGQgbm90IGJlIGZvdW5kJyk7XG4gIH0gZWxzZSBpZiAocGFydGlhbCBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XG4gICAgcmV0dXJuIHBhcnRpYWwoY29udGV4dCwgb3B0aW9ucyk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vb3AoKSB7XG4gIHJldHVybiAnJztcbn1cblxuZnVuY3Rpb24gaW5pdERhdGEoY29udGV4dCwgZGF0YSkge1xuICBpZiAoIWRhdGEgfHwgISgncm9vdCcgaW4gZGF0YSkpIHtcbiAgICBkYXRhID0gZGF0YSA/IGNyZWF0ZUZyYW1lKGRhdGEpIDoge307XG4gICAgZGF0YS5yb290ID0gY29udGV4dDtcbiAgfVxuICByZXR1cm4gZGF0YTtcbn1cblxuZnVuY3Rpb24gZXhlY3V0ZURlY29yYXRvcnMoZm4sIHByb2csIGNvbnRhaW5lciwgZGVwdGhzLCBkYXRhLCBibG9ja1BhcmFtcykge1xuICBpZiAoZm4uZGVjb3JhdG9yKSB7XG4gICAgbGV0IHByb3BzID0ge307XG4gICAgcHJvZyA9IGZuLmRlY29yYXRvcihcbiAgICAgIHByb2csXG4gICAgICBwcm9wcyxcbiAgICAgIGNvbnRhaW5lcixcbiAgICAgIGRlcHRocyAmJiBkZXB0aHNbMF0sXG4gICAgICBkYXRhLFxuICAgICAgYmxvY2tQYXJhbXMsXG4gICAgICBkZXB0aHNcbiAgICApO1xuICAgIFV0aWxzLmV4dGVuZChwcm9nLCBwcm9wcyk7XG4gIH1cbiAgcmV0dXJuIHByb2c7XG59XG5cbmZ1bmN0aW9uIHdyYXBIZWxwZXJzVG9QYXNzTG9va3VwUHJvcGVydHkobWVyZ2VkSGVscGVycywgY29udGFpbmVyKSB7XG4gIE9iamVjdC5rZXlzKG1lcmdlZEhlbHBlcnMpLmZvckVhY2goaGVscGVyTmFtZSA9PiB7XG4gICAgbGV0IGhlbHBlciA9IG1lcmdlZEhlbHBlcnNbaGVscGVyTmFtZV07XG4gICAgbWVyZ2VkSGVscGVyc1toZWxwZXJOYW1lXSA9IHBhc3NMb29rdXBQcm9wZXJ0eU9wdGlvbihoZWxwZXIsIGNvbnRhaW5lcik7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBwYXNzTG9va3VwUHJvcGVydHlPcHRpb24oaGVscGVyLCBjb250YWluZXIpIHtcbiAgY29uc3QgbG9va3VwUHJvcGVydHkgPSBjb250YWluZXIubG9va3VwUHJvcGVydHk7XG4gIHJldHVybiB3cmFwSGVscGVyKGhlbHBlciwgb3B0aW9ucyA9PiB7XG4gICAgcmV0dXJuIFV0aWxzLmV4dGVuZCh7IGxvb2t1cFByb3BlcnR5IH0sIG9wdGlvbnMpO1xuICB9KTtcbn1cbiJdfQ==


/***/ }),
/* 1045 */
/***/ (function(module, exports) {

	// Build out our basic SafeString type
	'use strict';
	
	exports.__esModule = true;
	function SafeString(string) {
	  this.string = string;
	}
	
	SafeString.prototype.toString = SafeString.prototype.toHTML = function () {
	  return '' + this.string;
	};
	
	exports['default'] = SafeString;
	module.exports = exports['default'];
	//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL3NhZmUtc3RyaW5nLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFDQSxTQUFTLFVBQVUsQ0FBQyxNQUFNLEVBQUU7QUFDMUIsTUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7Q0FDdEI7O0FBRUQsVUFBVSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsWUFBVztBQUN2RSxTQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0NBQ3pCLENBQUM7O3FCQUVhLFVBQVUiLCJmaWxlIjoic2FmZS1zdHJpbmcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBCdWlsZCBvdXQgb3VyIGJhc2ljIFNhZmVTdHJpbmcgdHlwZVxuZnVuY3Rpb24gU2FmZVN0cmluZyhzdHJpbmcpIHtcbiAgdGhpcy5zdHJpbmcgPSBzdHJpbmc7XG59XG5cblNhZmVTdHJpbmcucHJvdG90eXBlLnRvU3RyaW5nID0gU2FmZVN0cmluZy5wcm90b3R5cGUudG9IVE1MID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAnJyArIHRoaXMuc3RyaW5nO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgU2FmZVN0cmluZztcbiJdfQ==


/***/ }),
/* 1046 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	
	var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
	
	var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
	
	var _utils = __webpack_require__(136);
	
	var utils = _interopRequireWildcard(_utils);
	
	var _logger = __webpack_require__(79);
	
	var _logger2 = _interopRequireDefault(_logger);
	
	var _EventEmitter2 = __webpack_require__(135);
	
	var _EventEmitter3 = _interopRequireDefault(_EventEmitter2);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
	
	function _defaults(obj, defaults) { var keys = Object.getOwnPropertyNames(defaults); for (var i = 0; i < keys.length; i++) { var key = keys[i]; var value = Object.getOwnPropertyDescriptor(defaults, key); if (value && value.configurable && obj[key] === undefined) { Object.defineProperty(obj, key, value); } } return obj; }
	
	function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
	
	function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
	
	function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : _defaults(subClass, superClass); }
	
	function remove(arr, what) {
	  var found = arr.indexOf(what);
	
	  while (found !== -1) {
	    arr.splice(found, 1);
	    found = arr.indexOf(what);
	  }
	}
	
	var Connector = function (_EventEmitter) {
	  _inherits(Connector, _EventEmitter);
	
	  function Connector(backend, store, services) {
	    var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
	
	    _classCallCheck(this, Connector);
	
	    var _this = _possibleConstructorReturn(this, _EventEmitter.call(this));
	
	    _this.backend = backend;
	    _this.store = store;
	    _this.services = services;
	    _this.options = options;
	    _this.logger = _logger2.default.create('backendConnector');
	
	    _this.state = {};
	    _this.queue = [];
	
	    _this.backend && _this.backend.init && _this.backend.init(services, options.backend, options);
	    return _this;
	  }
	
	  Connector.prototype.queueLoad = function queueLoad(languages, namespaces, callback) {
	    var _this2 = this;
	
	    // find what needs to be loaded
	    var toLoad = [],
	        pending = [],
	        toLoadLanguages = [],
	        toLoadNamespaces = [];
	
	    languages.forEach(function (lng) {
	      var hasAllNamespaces = true;
	
	      namespaces.forEach(function (ns) {
	        var name = lng + '|' + ns;
	
	        if (_this2.store.hasResourceBundle(lng, ns)) {
	          _this2.state[name] = 2; // loaded
	        } else if (_this2.state[name] < 0) {
	          // nothing to do for err
	        } else if (_this2.state[name] === 1) {
	          if (pending.indexOf(name) < 0) pending.push(name);
	        } else {
	          _this2.state[name] = 1; // pending
	
	          hasAllNamespaces = false;
	
	          if (pending.indexOf(name) < 0) pending.push(name);
	          if (toLoad.indexOf(name) < 0) toLoad.push(name);
	          if (toLoadNamespaces.indexOf(ns) < 0) toLoadNamespaces.push(ns);
	        }
	      });
	
	      if (!hasAllNamespaces) toLoadLanguages.push(lng);
	    });
	
	    if (toLoad.length || pending.length) {
	      this.queue.push({
	        pending: pending,
	        loaded: {},
	        errors: [],
	        callback: callback
	      });
	    }
	
	    return {
	      toLoad: toLoad,
	      pending: pending,
	      toLoadLanguages: toLoadLanguages,
	      toLoadNamespaces: toLoadNamespaces
	    };
	  };
	
	  Connector.prototype.loaded = function loaded(name, err, data) {
	    var _this3 = this;
	
	    var _name$split = name.split('|'),
	        _name$split2 = _slicedToArray(_name$split, 2),
	        lng = _name$split2[0],
	        ns = _name$split2[1];
	
	    if (err) this.emit('failedLoading', lng, ns, err);
	
	    if (data) {
	      this.store.addResourceBundle(lng, ns, data);
	    }
	
	    // set loaded
	    this.state[name] = err ? -1 : 2;
	    // callback if ready
	    this.queue.forEach(function (q) {
	      utils.pushPath(q.loaded, [lng], ns);
	      remove(q.pending, name);
	
	      if (err) q.errors.push(err);
	
	      if (q.pending.length === 0 && !q.done) {
	        q.errors.length ? q.callback(q.errors) : q.callback();
	        _this3.emit('loaded', q.loaded);
	        q.done = true;
	      }
	    });
	
	    // remove done load requests
	    this.queue = this.queue.filter(function (q) {
	      return !q.done;
	    });
	  };
	
	  Connector.prototype.read = function read(lng, ns, fcName, tried, wait, callback) {
	    var _this4 = this;
	
	    if (!tried) tried = 0;
	    if (!wait) wait = 250;
	
	    if (!lng.length) return callback(null, {}); // noting to load
	
	    this.backend[fcName](lng, ns, function (err, data) {
	      if (err && data /* = retryFlag */ && tried < 5) {
	        setTimeout(function () {
	          _this4.read.call(_this4, lng, ns, fcName, ++tried, wait * 2, callback);
	        }, wait);
	        return;
	      }
	      callback(err, data);
	    });
	  };
	
	  Connector.prototype.load = function load(languages, namespaces, callback) {
	    var _this5 = this;
	
	    if (!this.backend) {
	      this.logger.warn('No backend was added via i18next.use. Will not load resources.');
	      return callback && callback();
	    }
	    var options = _extends({}, this.backend.options, this.options.backend);
	
	    if (typeof languages === 'string') languages = this.services.languageUtils.toResolveHierarchy(languages);
	    if (typeof namespaces === 'string') namespaces = [namespaces];
	
	    var toLoad = this.queueLoad(languages, namespaces, callback);
	    if (!toLoad.toLoad.length) {
	      if (!toLoad.pending.length) callback(); // nothing to load and no pendings...callback now
	      return; // pendings will trigger callback
	    }
	
	    // load with multi-load
	    if (options.allowMultiLoading && this.backend.readMulti) {
	      this.read(toLoad.toLoadLanguages, toLoad.toLoadNamespaces, 'readMulti', null, null, function (err, data) {
	        if (err) _this5.logger.warn('loading namespaces ' + toLoad.toLoadNamespaces.join(', ') + ' for languages ' + toLoad.toLoadLanguages.join(', ') + ' via multiloading failed', err);
	        if (!err && data) _this5.logger.log('loaded namespaces ' + toLoad.toLoadNamespaces.join(', ') + ' for languages ' + toLoad.toLoadLanguages.join(', ') + ' via multiloading', data);
	
	        toLoad.toLoad.forEach(function (name) {
	          var _name$split3 = name.split('|'),
	              _name$split4 = _slicedToArray(_name$split3, 2),
	              l = _name$split4[0],
	              n = _name$split4[1];
	
	          var bundle = utils.getPath(data, [l, n]);
	          if (bundle) {
	            _this5.loaded(name, err, bundle);
	          } else {
	            var _err = 'loading namespace ' + n + ' for language ' + l + ' via multiloading failed';
	            _this5.loaded(name, _err);
	            _this5.logger.error(_err);
	          }
	        });
	      });
	    }
	
	    // load one by one
	    else {
	        (function () {
	          var readOne = function readOne(name) {
	            var _this6 = this;
	
	            var _name$split5 = name.split('|'),
	                _name$split6 = _slicedToArray(_name$split5, 2),
	                lng = _name$split6[0],
	                ns = _name$split6[1];
	
	            this.read(lng, ns, 'read', null, null, function (err, data) {
	              if (err) _this6.logger.warn('loading namespace ' + ns + ' for language ' + lng + ' failed', err);
	              if (!err && data) _this6.logger.log('loaded namespace ' + ns + ' for language ' + lng, data);
	
	              _this6.loaded(name, err, data);
	            });
	          };
	
	          ;
	
	          toLoad.toLoad.forEach(function (name) {
	            readOne.call(_this5, name);
	          });
	        })();
	      }
	  };
	
	  Connector.prototype.reload = function reload(languages, namespaces) {
	    var _this7 = this;
	
	    if (!this.backend) {
	      this.logger.warn('No backend was added via i18next.use. Will not load resources.');
	    }
	    var options = _extends({}, this.backend.options, this.options.backend);
	
	    if (typeof languages === 'string') languages = this.services.languageUtils.toResolveHierarchy(languages);
	    if (typeof namespaces === 'string') namespaces = [namespaces];
	
	    // load with multi-load
	    if (options.allowMultiLoading && this.backend.readMulti) {
	      this.read(languages, namespaces, 'readMulti', null, null, function (err, data) {
	        if (err) _this7.logger.warn('reloading namespaces ' + namespaces.join(', ') + ' for languages ' + languages.join(', ') + ' via multiloading failed', err);
	        if (!err && data) _this7.logger.log('reloaded namespaces ' + namespaces.join(', ') + ' for languages ' + languages.join(', ') + ' via multiloading', data);
	
	        languages.forEach(function (l) {
	          namespaces.forEach(function (n) {
	            var bundle = utils.getPath(data, [l, n]);
	            if (bundle) {
	              _this7.loaded(l + '|' + n, err, bundle);
	            } else {
	              var _err2 = 'reloading namespace ' + n + ' for language ' + l + ' via multiloading failed';
	              _this7.loaded(l + '|' + n, _err2);
	              _this7.logger.error(_err2);
	            }
	          });
	        });
	      });
	    }
	
	    // load one by one
	    else {
	        (function () {
	          var readOne = function readOne(name) {
	            var _this8 = this;
	
	            var _name$split7 = name.split('|'),
	                _name$split8 = _slicedToArray(_name$split7, 2),
	                lng = _name$split8[0],
	                ns = _name$split8[1];
	
	            this.read(lng, ns, 'read', null, null, function (err, data) {
	              if (err) _this8.logger.warn('reloading namespace ' + ns + ' for language ' + lng + ' failed', err);
	              if (!err && data) _this8.logger.log('reloaded namespace ' + ns + ' for language ' + lng, data);
	
	              _this8.loaded(name, err, data);
	            });
	          };
	
	          ;
	
	          languages.forEach(function (l) {
	            namespaces.forEach(function (n) {
	              readOne.call(_this7, l + '|' + n);
	            });
	          });
	        })();
	      }
	  };
	
	  Connector.prototype.saveMissing = function saveMissing(languages, namespace, key, fallbackValue) {
	    if (this.backend && this.backend.create) this.backend.create(languages, namespace, key, fallbackValue);
	
	    // write to store to avoid resending
	    if (!languages || !languages[0]) return;
	    this.store.addResource(languages[0], namespace, key, fallbackValue);
	  };
	
	  return Connector;
	}(_EventEmitter3.default);
	
	exports.default = Connector;

/***/ }),
/* 1047 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	
	var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
	
	var _utils = __webpack_require__(136);
	
	var utils = _interopRequireWildcard(_utils);
	
	var _logger = __webpack_require__(79);
	
	var _logger2 = _interopRequireDefault(_logger);
	
	var _EventEmitter2 = __webpack_require__(135);
	
	var _EventEmitter3 = _interopRequireDefault(_EventEmitter2);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
	
	function _defaults(obj, defaults) { var keys = Object.getOwnPropertyNames(defaults); for (var i = 0; i < keys.length; i++) { var key = keys[i]; var value = Object.getOwnPropertyDescriptor(defaults, key); if (value && value.configurable && obj[key] === undefined) { Object.defineProperty(obj, key, value); } } return obj; }
	
	function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
	
	function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
	
	function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : _defaults(subClass, superClass); }
	
	var Connector = function (_EventEmitter) {
	  _inherits(Connector, _EventEmitter);
	
	  function Connector(cache, store, services) {
	    var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
	
	    _classCallCheck(this, Connector);
	
	    var _this = _possibleConstructorReturn(this, _EventEmitter.call(this));
	
	    _this.cache = cache;
	    _this.store = store;
	    _this.services = services;
	    _this.options = options;
	    _this.logger = _logger2.default.create('cacheConnector');
	
	    _this.cache && _this.cache.init && _this.cache.init(services, options.cache, options);
	    return _this;
	  }
	
	  Connector.prototype.load = function load(languages, namespaces, callback) {
	    var _this2 = this;
	
	    if (!this.cache) return callback && callback();
	    var options = _extends({}, this.cache.options, this.options.cache);
	
	    if (typeof languages === 'string') languages = this.services.languageUtils.toResolveHierarchy(languages);
	    if (typeof namespaces === 'string') namespaces = [namespaces];
	
	    if (options.enabled) {
	      this.cache.load(languages, function (err, data) {
	        if (err) _this2.logger.error('loading languages ' + languages.join(', ') + ' from cache failed', err);
	        if (data) {
	          for (var l in data) {
	            for (var n in data[l]) {
	              if (n === 'i18nStamp') continue;
	              var bundle = data[l][n];
	              if (bundle) _this2.store.addResourceBundle(l, n, bundle);
	            }
	          }
	        }
	        if (callback) callback();
	      });
	    } else {
	      if (callback) callback();
	    }
	  };
	
	  Connector.prototype.save = function save() {
	    if (this.cache && this.options.cache && this.options.cache.enabled) this.cache.save(this.store.data);
	  };
	
	  return Connector;
	}(_EventEmitter3.default);
	
	exports.default = Connector;

/***/ }),
/* 1048 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	
	var _logger = __webpack_require__(79);
	
	var _logger2 = _interopRequireDefault(_logger);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
	
	function capitalize(string) {
	  return string.charAt(0).toUpperCase() + string.slice(1);
	}
	
	var LanguageUtil = function () {
	  function LanguageUtil(options) {
	    _classCallCheck(this, LanguageUtil);
	
	    this.options = options;
	
	    this.whitelist = this.options.whitelist || false;
	    this.logger = _logger2.default.create('languageUtils');
	  }
	
	  LanguageUtil.prototype.getLanguagePartFromCode = function getLanguagePartFromCode(code) {
	    if (code.indexOf('-') < 0) return code;
	
	    var specialCases = ['NB-NO', 'NN-NO', 'nb-NO', 'nn-NO', 'nb-no', 'nn-no'];
	    var p = code.split('-');
	    return this.formatLanguageCode(specialCases.indexOf(code) > -1 ? p[1].toLowerCase() : p[0]);
	  };
	
	  LanguageUtil.prototype.getScriptPartFromCode = function getScriptPartFromCode(code) {
	    if (code.indexOf('-') < 0) return null;
	
	    var p = code.split('-');
	    if (p.length === 2) return null;
	    p.pop();
	    return this.formatLanguageCode(p.join('-'));
	  };
	
	  LanguageUtil.prototype.getLanguagePartFromCode = function getLanguagePartFromCode(code) {
	    if (code.indexOf('-') < 0) return code;
	
	    var specialCases = ['NB-NO', 'NN-NO', 'nb-NO', 'nn-NO', 'nb-no', 'nn-no'];
	    var p = code.split('-');
	    return this.formatLanguageCode(specialCases.indexOf(code) > -1 ? p[1].toLowerCase() : p[0]);
	  };
	
	  LanguageUtil.prototype.formatLanguageCode = function formatLanguageCode(code) {
	    // http://www.iana.org/assignments/language-tags/language-tags.xhtml
	    if (typeof code === 'string' && code.indexOf('-') > -1) {
	      var specialCases = ['hans', 'hant', 'latn', 'cyrl', 'cans', 'mong', 'arab'];
	      var p = code.split('-');
	
	      if (this.options.lowerCaseLng) {
	        p = p.map(function (part) {
	          return part.toLowerCase();
	        });
	      } else if (p.length === 2) {
	        p[0] = p[0].toLowerCase();
	        p[1] = p[1].toUpperCase();
	
	        if (specialCases.indexOf(p[1].toLowerCase()) > -1) p[1] = capitalize(p[1].toLowerCase());
	      } else if (p.length === 3) {
	        p[0] = p[0].toLowerCase();
	
	        // if lenght 2 guess it's a country
	        if (p[1].length === 2) p[1] = p[1].toUpperCase();
	        if (p[0] !== 'sgn' && p[2].length === 2) p[2] = p[2].toUpperCase();
	
	        if (specialCases.indexOf(p[1].toLowerCase()) > -1) p[1] = capitalize(p[1].toLowerCase());
	        if (specialCases.indexOf(p[2].toLowerCase()) > -1) p[2] = capitalize(p[2].toLowerCase());
	      }
	
	      return p.join('-');
	    } else {
	      return this.options.cleanCode || this.options.lowerCaseLng ? code.toLowerCase() : code;
	    }
	  };
	
	  LanguageUtil.prototype.isWhitelisted = function isWhitelisted(code, exactMatch) {
	    if (this.options.load === 'languageOnly' || this.options.nonExplicitWhitelist && !exactMatch) {
	      code = this.getLanguagePartFromCode(code);
	    }
	    return !this.whitelist || !this.whitelist.length || this.whitelist.indexOf(code) > -1 ? true : false;
	  };
	
	  LanguageUtil.prototype.getFallbackCodes = function getFallbackCodes(fallbacks, code) {
	    if (!fallbacks) return [];
	    if (typeof fallbacks === 'string') fallbacks = [fallbacks];
	    if (Object.prototype.toString.apply(fallbacks) === '[object Array]') return fallbacks;
	
	    // asume we have an object defining fallbacks
	    var found = fallbacks[code];
	    if (!found) found = fallbacks[this.getScriptPartFromCode(code)];
	    if (!found) found = fallbacks[this.formatLanguageCode(code)];
	    if (!found) found = fallbacks.default;
	
	    return found || [];
	  };
	
	  LanguageUtil.prototype.toResolveHierarchy = function toResolveHierarchy(code, fallbackCode) {
	    var _this = this;
	
	    var fallbackCodes = this.getFallbackCodes(fallbackCode || this.options.fallbackLng || [], code);
	
	    var codes = [];
	    var addCode = function addCode(code) {
	      var exactMatch = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
	
	      if (!code) return;
	      if (_this.isWhitelisted(code, exactMatch)) {
	        codes.push(code);
	      } else {
	        _this.logger.warn('rejecting non-whitelisted language code: ' + code);
	      }
	    };
	
	    if (typeof code === 'string' && code.indexOf('-') > -1) {
	      if (this.options.load !== 'languageOnly') addCode(this.formatLanguageCode(code), true);
	      if (this.options.load !== 'languageOnly' && this.options.load !== 'currentOnly') addCode(this.getScriptPartFromCode(code), true);
	      if (this.options.load !== 'currentOnly') addCode(this.getLanguagePartFromCode(code));
	    } else if (typeof code === 'string') {
	      addCode(this.formatLanguageCode(code));
	    }
	
	    fallbackCodes.forEach(function (fc) {
	      if (codes.indexOf(fc) < 0) addCode(_this.formatLanguageCode(fc));
	    });
	
	    return codes;
	  };
	
	  return LanguageUtil;
	}();
	
	;
	
	exports.default = LanguageUtil;

/***/ }),
/* 1049 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	
	var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
	
	var _EventEmitter2 = __webpack_require__(135);
	
	var _EventEmitter3 = _interopRequireDefault(_EventEmitter2);
	
	var _utils = __webpack_require__(136);
	
	var utils = _interopRequireWildcard(_utils);
	
	function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	function _defaults(obj, defaults) { var keys = Object.getOwnPropertyNames(defaults); for (var i = 0; i < keys.length; i++) { var key = keys[i]; var value = Object.getOwnPropertyDescriptor(defaults, key); if (value && value.configurable && obj[key] === undefined) { Object.defineProperty(obj, key, value); } } return obj; }
	
	function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
	
	function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
	
	function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : _defaults(subClass, superClass); }
	
	var ResourceStore = function (_EventEmitter) {
	  _inherits(ResourceStore, _EventEmitter);
	
	  function ResourceStore() {
	    var data = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
	    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : { ns: ['translation'], defaultNS: 'translation' };
	
	    _classCallCheck(this, ResourceStore);
	
	    var _this = _possibleConstructorReturn(this, _EventEmitter.call(this));
	
	    _this.data = data;
	    _this.options = options;
	    return _this;
	  }
	
	  ResourceStore.prototype.addNamespaces = function addNamespaces(ns) {
	    if (this.options.ns.indexOf(ns) < 0) {
	      this.options.ns.push(ns);
	    }
	  };
	
	  ResourceStore.prototype.removeNamespaces = function removeNamespaces(ns) {
	    var index = this.options.ns.indexOf(ns);
	    if (index > -1) {
	      this.options.ns.splice(index, 1);
	    }
	  };
	
	  ResourceStore.prototype.getResource = function getResource(lng, ns, key) {
	    var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
	
	    var keySeparator = options.keySeparator || this.options.keySeparator;
	    if (keySeparator === undefined) keySeparator = '.';
	
	    var path = [lng, ns];
	    if (key && typeof key !== 'string') path = path.concat(key);
	    if (key && typeof key === 'string') path = path.concat(keySeparator ? key.split(keySeparator) : key);
	
	    if (lng.indexOf('.') > -1) {
	      path = lng.split('.');
	    }
	
	    return utils.getPath(this.data, path);
	  };
	
	  ResourceStore.prototype.addResource = function addResource(lng, ns, key, value) {
	    var options = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : { silent: false };
	
	    var keySeparator = this.options.keySeparator;
	    if (keySeparator === undefined) keySeparator = '.';
	
	    var path = [lng, ns];
	    if (key) path = path.concat(keySeparator ? key.split(keySeparator) : key);
	
	    if (lng.indexOf('.') > -1) {
	      path = lng.split('.');
	      value = ns;
	      ns = path[1];
	    }
	
	    this.addNamespaces(ns);
	
	    utils.setPath(this.data, path, value);
	
	    if (!options.silent) this.emit('added', lng, ns, key, value);
	  };
	
	  ResourceStore.prototype.addResources = function addResources(lng, ns, resources) {
	    for (var m in resources) {
	      if (typeof resources[m] === 'string') this.addResource(lng, ns, m, resources[m], { silent: true });
	    }
	    this.emit('added', lng, ns, resources);
	  };
	
	  ResourceStore.prototype.addResourceBundle = function addResourceBundle(lng, ns, resources, deep, overwrite) {
	    var path = [lng, ns];
	    if (lng.indexOf('.') > -1) {
	      path = lng.split('.');
	      deep = resources;
	      resources = ns;
	      ns = path[1];
	    }
	
	    this.addNamespaces(ns);
	
	    var pack = utils.getPath(this.data, path) || {};
	
	    if (deep) {
	      utils.deepExtend(pack, resources, overwrite);
	    } else {
	      pack = _extends({}, pack, resources);
	    }
	
	    utils.setPath(this.data, path, pack);
	
	    this.emit('added', lng, ns, resources);
	  };
	
	  ResourceStore.prototype.removeResourceBundle = function removeResourceBundle(lng, ns) {
	    if (this.hasResourceBundle(lng, ns)) {
	      delete this.data[lng][ns];
	    }
	    this.removeNamespaces(ns);
	
	    this.emit('removed', lng, ns);
	  };
	
	  ResourceStore.prototype.hasResourceBundle = function hasResourceBundle(lng, ns) {
	    return this.getResource(lng, ns) !== undefined;
	  };
	
	  ResourceStore.prototype.getResourceBundle = function getResourceBundle(lng, ns) {
	    if (!ns) ns = this.options.defaultNS;
	
	    // TODO: COMPATIBILITY remove extend in v2.1.0
	    if (this.options.compatibilityAPI === 'v1') return _extends({}, this.getResource(lng, ns));
	
	    return this.getResource(lng, ns);
	  };
	
	  ResourceStore.prototype.toJSON = function toJSON() {
	    return this.data;
	  };
	
	  return ResourceStore;
	}(_EventEmitter3.default);
	
	exports.default = ResourceStore;

/***/ }),
/* 1050 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	
	var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
	
	var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
	
	var _logger = __webpack_require__(79);
	
	var _logger2 = _interopRequireDefault(_logger);
	
	var _EventEmitter2 = __webpack_require__(135);
	
	var _EventEmitter3 = _interopRequireDefault(_EventEmitter2);
	
	var _postProcessor = __webpack_require__(359);
	
	var _postProcessor2 = _interopRequireDefault(_postProcessor);
	
	var _v = __webpack_require__(358);
	
	var compat = _interopRequireWildcard(_v);
	
	var _utils = __webpack_require__(136);
	
	var utils = _interopRequireWildcard(_utils);
	
	function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	function _defaults(obj, defaults) { var keys = Object.getOwnPropertyNames(defaults); for (var i = 0; i < keys.length; i++) { var key = keys[i]; var value = Object.getOwnPropertyDescriptor(defaults, key); if (value && value.configurable && obj[key] === undefined) { Object.defineProperty(obj, key, value); } } return obj; }
	
	function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
	
	function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
	
	function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : _defaults(subClass, superClass); }
	
	var Translator = function (_EventEmitter) {
	  _inherits(Translator, _EventEmitter);
	
	  function Translator(services) {
	    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
	
	    _classCallCheck(this, Translator);
	
	    var _this = _possibleConstructorReturn(this, _EventEmitter.call(this));
	
	    utils.copy(['resourceStore', 'languageUtils', 'pluralResolver', 'interpolator', 'backendConnector'], services, _this);
	
	    _this.options = options;
	    _this.logger = _logger2.default.create('translator');
	    return _this;
	  }
	
	  Translator.prototype.changeLanguage = function changeLanguage(lng) {
	    if (lng) this.language = lng;
	  };
	
	  Translator.prototype.exists = function exists(key) {
	    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : { interpolation: {} };
	
	    if (this.options.compatibilityAPI === 'v1') {
	      options = compat.convertTOptions(options);
	    }
	
	    return this.resolve(key, options) !== undefined;
	  };
	
	  Translator.prototype.extractFromKey = function extractFromKey(key, options) {
	    var nsSeparator = options.nsSeparator || this.options.nsSeparator;
	    if (nsSeparator === undefined) nsSeparator = ':';
	
	    var namespaces = options.ns || this.options.defaultNS;
	    if (nsSeparator && key.indexOf(nsSeparator) > -1) {
	      var parts = key.split(nsSeparator);
	      namespaces = parts[0];
	      key = parts[1];
	    }
	    if (typeof namespaces === 'string') namespaces = [namespaces];
	
	    return {
	      key: key,
	      namespaces: namespaces
	    };
	  };
	
	  Translator.prototype.translate = function translate(keys) {
	    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
	
	    if ((typeof options === 'undefined' ? 'undefined' : _typeof(options)) !== 'object') {
	      options = this.options.overloadTranslationOptionHandler(arguments);
	    } else if (this.options.compatibilityAPI === 'v1') {
	      options = compat.convertTOptions(options);
	    }
	
	    // non valid keys handling
	    if (keys === undefined || keys === null || keys === '') return '';
	    if (typeof keys === 'number') keys = String(keys);
	    if (typeof keys === 'string') keys = [keys];
	
	    // return key on CIMode
	    var lng = options.lng || this.language;
	    if (lng && lng.toLowerCase() === 'cimode') return keys[keys.length - 1];
	
	    // separators
	    var keySeparator = options.keySeparator || this.options.keySeparator || '.';
	
	    // get namespace(s)
	
	    var _extractFromKey = this.extractFromKey(keys[keys.length - 1], options),
	        key = _extractFromKey.key,
	        namespaces = _extractFromKey.namespaces;
	
	    var namespace = namespaces[namespaces.length - 1];
	
	    // resolve from store
	    var res = this.resolve(keys, options);
	
	    var resType = Object.prototype.toString.apply(res);
	    var noObject = ['[object Number]', '[object Function]', '[object RegExp]'];
	    var joinArrays = options.joinArrays !== undefined ? options.joinArrays : this.options.joinArrays;
	
	    // object
	    if (res && typeof res !== 'string' && noObject.indexOf(resType) < 0 && !(joinArrays && resType === '[object Array]')) {
	      if (!options.returnObjects && !this.options.returnObjects) {
	        this.logger.warn('accessing an object - but returnObjects options is not enabled!');
	        return this.options.returnedObjectHandler ? this.options.returnedObjectHandler(key, res, options) : 'key \'' + key + ' (' + this.language + ')\' returned an object instead of string.';
	      }
	
	      var copy = resType === '[object Array]' ? [] : {}; // apply child translation on a copy
	
	      for (var m in res) {
	        copy[m] = this.translate('' + key + keySeparator + m, _extends({ joinArrays: false, ns: namespaces }, options));
	      }
	      res = copy;
	    }
	    // array special treatment
	    else if (joinArrays && resType === '[object Array]') {
	        res = res.join(joinArrays);
	        if (res) res = this.extendTranslation(res, key, options);
	      }
	      // string, empty or null
	      else {
	          var usedDefault = false,
	              usedKey = false;
	
	          // fallback value
	          if (!this.isValidLookup(res) && options.defaultValue !== undefined) {
	            usedDefault = true;
	            res = options.defaultValue;
	          }
	          if (!this.isValidLookup(res)) {
	            usedKey = true;
	            res = key;
	          }
	
	          // save missing
	          if (usedKey || usedDefault) {
	            this.logger.log('missingKey', lng, namespace, key, res);
	
	            var lngs = [];
	            var fallbackLngs = this.languageUtils.getFallbackCodes(this.options.fallbackLng, options.lng || this.language);
	            if (this.options.saveMissingTo === 'fallback' && fallbackLngs && fallbackLngs[0]) {
	              for (var i = 0; i < fallbackLngs.length; i++) {
	                lngs.push(fallbackLngs[i]);
	              }
	            } else if (this.options.saveMissingTo === 'all') {
	              lngs = this.languageUtils.toResolveHierarchy(options.lng || this.language);
	            } else {
	              //(this.options.saveMissingTo === 'current' || (this.options.saveMissingTo === 'fallback' && this.options.fallbackLng[0] === false) ) {
	              lngs.push(options.lng || this.language);
	            }
	
	            if (this.options.saveMissing) {
	              if (this.options.missingKeyHandler) {
	                this.options.missingKeyHandler(lngs, namespace, key, res);
	              } else if (this.backendConnector && this.backendConnector.saveMissing) {
	                this.backendConnector.saveMissing(lngs, namespace, key, res);
	              }
	            }
	
	            this.emit('missingKey', lngs, namespace, key, res);
	          }
	
	          // extend
	          res = this.extendTranslation(res, key, options);
	
	          // append namespace if still key
	          if (usedKey && res === key && this.options.appendNamespaceToMissingKey) res = namespace + ':' + key;
	
	          // parseMissingKeyHandler
	          if (usedKey && this.options.parseMissingKeyHandler) res = this.options.parseMissingKeyHandler(res);
	        }
	
	    // return
	    return res;
	  };
	
	  Translator.prototype.extendTranslation = function extendTranslation(res, key, options) {
	    var _this2 = this;
	
	    if (options.interpolation) this.interpolator.init(_extends({}, options, { interpolation: _extends({}, this.options.interpolation, options.interpolation) }));
	
	    // interpolate
	    var data = options.replace && typeof options.replace !== 'string' ? options.replace : options;
	    if (this.options.interpolation.defaultVariables) data = _extends({}, this.options.interpolation.defaultVariables, data);
	    res = this.interpolator.interpolate(res, data, this.language);
	
	    // nesting
	    res = this.interpolator.nest(res, function () {
	      for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
	        args[_key] = arguments[_key];
	      }
	
	      return _this2.translate.apply(_this2, args);
	    }, options);
	
	    if (options.interpolation) this.interpolator.reset();
	
	    // post process
	    var postProcess = options.postProcess || this.options.postProcess;
	    var postProcessorNames = typeof postProcess === 'string' ? [postProcess] : postProcess;
	
	    if (res !== undefined && postProcessorNames && postProcessorNames.length && options.applyPostProcessor !== false) {
	      res = _postProcessor2.default.handle(postProcessorNames, res, key, options, this);
	    }
	
	    return res;
	  };
	
	  Translator.prototype.resolve = function resolve(keys) {
	    var _this3 = this;
	
	    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
	
	    var found = void 0;
	
	    if (typeof keys === 'string') keys = [keys];
	
	    // forEach possible key
	    keys.forEach(function (k) {
	      if (_this3.isValidLookup(found)) return;
	
	      var _extractFromKey2 = _this3.extractFromKey(k, options),
	          key = _extractFromKey2.key,
	          namespaces = _extractFromKey2.namespaces;
	
	      if (_this3.options.fallbackNS) namespaces = namespaces.concat(_this3.options.fallbackNS);
	
	      var needsPluralHandling = options.count !== undefined && typeof options.count !== 'string';
	      var needsContextHandling = options.context !== undefined && typeof options.context === 'string' && options.context !== '';
	
	      var codes = options.lngs ? options.lngs : _this3.languageUtils.toResolveHierarchy(options.lng || _this3.language);
	
	      namespaces.forEach(function (ns) {
	        if (_this3.isValidLookup(found)) return;
	
	        codes.forEach(function (code) {
	          if (_this3.isValidLookup(found)) return;
	
	          var finalKey = key;
	          var finalKeys = [finalKey];
	
	          var pluralSuffix = void 0;
	          if (needsPluralHandling) pluralSuffix = _this3.pluralResolver.getSuffix(code, options.count);
	
	          // fallback for plural if context not found
	          if (needsPluralHandling && needsContextHandling) finalKeys.push(finalKey + pluralSuffix);
	
	          // get key for context if needed
	          if (needsContextHandling) finalKeys.push(finalKey += '' + _this3.options.contextSeparator + options.context);
	
	          // get key for plural if needed
	          if (needsPluralHandling) finalKeys.push(finalKey += pluralSuffix);
	
	          // iterate over finalKeys starting with most specific pluralkey (-> contextkey only) -> singularkey only
	          var possibleKey = void 0;
	          while (possibleKey = finalKeys.pop()) {
	            if (_this3.isValidLookup(found)) continue;
	            found = _this3.getResource(code, ns, possibleKey, options);
	          }
	        });
	      });
	    });
	
	    return found;
	  };
	
	  Translator.prototype.isValidLookup = function isValidLookup(res) {
	    return res !== undefined && !(!this.options.returnNull && res === null) && !(!this.options.returnEmptyString && res === '');
	  };
	
	  Translator.prototype.getResource = function getResource(code, ns, key) {
	    var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
	
	    return this.resourceStore.getResource(code, ns, key, options);
	  };
	
	  return Translator;
	}(_EventEmitter3.default);
	
	exports.default = Translator;

/***/ }),
/* 1051 */
/***/ (function(module, exports) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	exports.get = get;
	exports.transformOptions = transformOptions;
	function get() {
	  return {
	    debug: false,
	    initImmediate: true,
	
	    ns: ['translation'],
	    defaultNS: ['translation'],
	    fallbackLng: ['dev'],
	    fallbackNS: false, // string or array of namespaces
	
	    whitelist: false, // array with whitelisted languages
	    nonExplicitWhitelist: false,
	    load: 'all', // | currentOnly | languageOnly
	    preload: false, // array with preload languages
	
	    keySeparator: '.',
	    nsSeparator: ':',
	    pluralSeparator: '_',
	    contextSeparator: '_',
	
	    saveMissing: false, // enable to send missing values
	    saveMissingTo: 'fallback', // 'current' || 'all'
	    missingKeyHandler: false, // function(lng, ns, key, fallbackValue) -> override if prefer on handling
	
	    postProcess: false, // string or array of postProcessor names
	    returnNull: true, // allows null value as valid translation
	    returnEmptyString: true, // allows empty string value as valid translation
	    returnObjects: false,
	    joinArrays: false, // or string to join array
	    returnedObjectHandler: function returnedObjectHandler() {}, // function(key, value, options) triggered if key returns object but returnObjects is set to false
	    parseMissingKeyHandler: false, // function(key) parsed a key that was not found in t() before returning
	    appendNamespaceToMissingKey: false,
	    overloadTranslationOptionHandler: function overloadTranslationOptionHandler(args) {
	      return { defaultValue: args[1] };
	    },
	
	    interpolation: {
	      escapeValue: true,
	      format: function format(value, _format, lng) {
	        return value;
	      },
	      prefix: '{{',
	      suffix: '}}',
	      formatSeparator: ',',
	      // prefixEscaped: '{{',
	      // suffixEscaped: '}}',
	      // unescapeSuffix: '',
	      unescapePrefix: '-',
	
	      nestingPrefix: '$t(',
	      nestingSuffix: ')',
	      // nestingPrefixEscaped: '$t(',
	      // nestingSuffixEscaped: ')',
	      defaultVariables: undefined // object that can have values to interpolate on - extends passed in interpolation data
	    }
	  };
	}
	
	function transformOptions(options) {
	  // create namespace object if namespace is passed in as string
	  if (typeof options.ns === 'string') options.ns = [options.ns];
	  if (typeof options.fallbackLng === 'string') options.fallbackLng = [options.fallbackLng];
	  if (typeof options.fallbackNS === 'string') options.fallbackNS = [options.fallbackNS];
	
	  // extend whitelist with cimode
	  if (options.whitelist && options.whitelist.indexOf('cimode') < 0) options.whitelist.push('cimode');
	
	  return options;
	}

/***/ }),
/* 1052 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	
	var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
	
	var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
	
	var _logger = __webpack_require__(79);
	
	var _logger2 = _interopRequireDefault(_logger);
	
	var _EventEmitter2 = __webpack_require__(135);
	
	var _EventEmitter3 = _interopRequireDefault(_EventEmitter2);
	
	var _ResourceStore = __webpack_require__(1049);
	
	var _ResourceStore2 = _interopRequireDefault(_ResourceStore);
	
	var _Translator = __webpack_require__(1050);
	
	var _Translator2 = _interopRequireDefault(_Translator);
	
	var _LanguageUtils = __webpack_require__(1048);
	
	var _LanguageUtils2 = _interopRequireDefault(_LanguageUtils);
	
	var _PluralResolver = __webpack_require__(573);
	
	var _PluralResolver2 = _interopRequireDefault(_PluralResolver);
	
	var _Interpolator = __webpack_require__(572);
	
	var _Interpolator2 = _interopRequireDefault(_Interpolator);
	
	var _BackendConnector = __webpack_require__(1046);
	
	var _BackendConnector2 = _interopRequireDefault(_BackendConnector);
	
	var _CacheConnector = __webpack_require__(1047);
	
	var _CacheConnector2 = _interopRequireDefault(_CacheConnector);
	
	var _defaults2 = __webpack_require__(1051);
	
	var _postProcessor = __webpack_require__(359);
	
	var _postProcessor2 = _interopRequireDefault(_postProcessor);
	
	var _v = __webpack_require__(358);
	
	var compat = _interopRequireWildcard(_v);
	
	function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	function _defaults(obj, defaults) { var keys = Object.getOwnPropertyNames(defaults); for (var i = 0; i < keys.length; i++) { var key = keys[i]; var value = Object.getOwnPropertyDescriptor(defaults, key); if (value && value.configurable && obj[key] === undefined) { Object.defineProperty(obj, key, value); } } return obj; }
	
	function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
	
	function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
	
	function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : _defaults(subClass, superClass); }
	
	var I18n = function (_EventEmitter) {
	  _inherits(I18n, _EventEmitter);
	
	  function I18n() {
	    var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
	    var callback = arguments[1];
	
	    _classCallCheck(this, I18n);
	
	    var _this = _possibleConstructorReturn(this, _EventEmitter.call(this));
	
	    _this.options = (0, _defaults2.transformOptions)(options);
	    _this.services = {};
	    _this.logger = _logger2.default;
	    _this.modules = {};
	
	    if (callback && !_this.isInitialized) _this.init(options, callback);
	    return _this;
	  }
	
	  I18n.prototype.init = function init(options, callback) {
	    var _this2 = this;
	
	    if (typeof options === 'function') {
	      callback = options;
	      options = {};
	    }
	    if (!options) options = {};
	
	    if (options.compatibilityAPI === 'v1') {
	      this.options = _extends({}, (0, _defaults2.get)(), (0, _defaults2.transformOptions)(compat.convertAPIOptions(options)), {});
	    } else if (options.compatibilityJSON === 'v1') {
	      this.options = _extends({}, (0, _defaults2.get)(), (0, _defaults2.transformOptions)(compat.convertJSONOptions(options)), {});
	    } else {
	      this.options = _extends({}, (0, _defaults2.get)(), this.options, (0, _defaults2.transformOptions)(options));
	    }
	    if (!callback) callback = function callback() {};
	
	    function createClassOnDemand(ClassOrObject) {
	      if (!ClassOrObject) return;
	      if (typeof ClassOrObject === 'function') return new ClassOrObject();
	      return ClassOrObject;
	    }
	
	    // init services
	    if (!this.options.isClone) {
	      if (this.modules.logger) {
	        _logger2.default.init(createClassOnDemand(this.modules.logger), this.options);
	      } else {
	        _logger2.default.init(null, this.options);
	      }
	
	      var lu = new _LanguageUtils2.default(this.options);
	      this.store = new _ResourceStore2.default(this.options.resources, this.options);
	
	      var s = this.services;
	      s.logger = _logger2.default;
	      s.resourceStore = this.store;
	      s.resourceStore.on('added removed', function (lng, ns) {
	        s.cacheConnector.save();
	      });
	      s.languageUtils = lu;
	      s.pluralResolver = new _PluralResolver2.default(lu, { prepend: this.options.pluralSeparator, compatibilityJSON: this.options.compatibilityJSON });
	      s.interpolator = new _Interpolator2.default(this.options);
	
	      s.backendConnector = new _BackendConnector2.default(createClassOnDemand(this.modules.backend), s.resourceStore, s, this.options);
	      // pipe events from backendConnector
	      s.backendConnector.on('*', function (event) {
	        for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
	          args[_key - 1] = arguments[_key];
	        }
	
	        _this2.emit.apply(_this2, [event].concat(args));
	      });
	
	      s.backendConnector.on('loaded', function (loaded) {
	        s.cacheConnector.save();
	      });
	
	      s.cacheConnector = new _CacheConnector2.default(createClassOnDemand(this.modules.cache), s.resourceStore, s, this.options);
	      // pipe events from backendConnector
	      s.cacheConnector.on('*', function (event) {
	        for (var _len2 = arguments.length, args = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
	          args[_key2 - 1] = arguments[_key2];
	        }
	
	        _this2.emit.apply(_this2, [event].concat(args));
	      });
	
	      if (this.modules.languageDetector) {
	        s.languageDetector = createClassOnDemand(this.modules.languageDetector);
	        s.languageDetector.init(s, this.options.detection, this.options);
	      }
	
	      this.translator = new _Translator2.default(this.services, this.options);
	      // pipe events from translator
	      this.translator.on('*', function (event) {
	        for (var _len3 = arguments.length, args = Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {
	          args[_key3 - 1] = arguments[_key3];
	        }
	
	        _this2.emit.apply(_this2, [event].concat(args));
	      });
	    }
	
	    // append api
	    var storeApi = ['getResource', 'addResource', 'addResources', 'addResourceBundle', 'removeResourceBundle', 'hasResourceBundle', 'getResourceBundle'];
	    storeApi.forEach(function (fcName) {
	      _this2[fcName] = function () {
	        return this.store[fcName].apply(this.store, arguments);
	      };
	    });
	
	    // TODO: COMPATIBILITY remove this
	    if (this.options.compatibilityAPI === 'v1') compat.appendBackwardsAPI(this);
	
	    var load = function load() {
	      _this2.changeLanguage(_this2.options.lng, function (err, t) {
	        _this2.emit('initialized', _this2.options);
	        _this2.logger.log('initialized', _this2.options);
	
	        callback(err, t);
	      });
	    };
	
	    if (this.options.resources || !this.options.initImmediate) {
	      load();
	    } else {
	      setTimeout(load, 0);
	    }
	
	    return this;
	  };
	
	  I18n.prototype.loadResources = function loadResources(callback) {
	    var _this3 = this;
	
	    if (!callback) callback = function callback() {};
	
	    if (!this.options.resources) {
	      var _ret = function () {
	        if (_this3.language && _this3.language.toLowerCase() === 'cimode') return {
	            v: callback()
	          }; // avoid loading resources for cimode
	
	        var toLoad = [];
	
	        var append = function append(lng) {
	          var lngs = _this3.services.languageUtils.toResolveHierarchy(lng);
	          lngs.forEach(function (l) {
	            if (toLoad.indexOf(l) < 0) toLoad.push(l);
	          });
	        };
	
	        append(_this3.language);
	
	        if (_this3.options.preload) {
	          _this3.options.preload.forEach(function (l) {
	            append(l);
	          });
	        }
	
	        _this3.services.cacheConnector.load(toLoad, _this3.options.ns, function () {
	          _this3.services.backendConnector.load(toLoad, _this3.options.ns, callback);
	        });
	      }();
	
	      if ((typeof _ret === 'undefined' ? 'undefined' : _typeof(_ret)) === "object") return _ret.v;
	    } else {
	      callback(null);
	    }
	  };
	
	  I18n.prototype.reloadResources = function reloadResources(lngs, ns) {
	    if (!lngs) lngs = this.languages;
	    if (!ns) ns = this.options.ns;
	    this.services.backendConnector.reload(lngs, ns);
	  };
	
	  I18n.prototype.use = function use(module) {
	    if (module.type === 'backend') {
	      this.modules.backend = module;
	    }
	
	    if (module.type === 'cache') {
	      this.modules.cache = module;
	    }
	
	    if (module.type === 'logger' || module.log && module.warn && module.warn) {
	      this.modules.logger = module;
	    }
	
	    if (module.type === 'languageDetector') {
	      this.modules.languageDetector = module;
	    }
	
	    if (module.type === 'postProcessor') {
	      _postProcessor2.default.addPostProcessor(module);
	    }
	
	    return this;
	  };
	
	  I18n.prototype.changeLanguage = function changeLanguage(lng, callback) {
	    var _this4 = this;
	
	    var done = function done(err) {
	      if (lng) {
	        _this4.emit('languageChanged', lng);
	        _this4.logger.log('languageChanged', lng);
	      }
	
	      if (callback) callback(err, function () {
	        for (var _len4 = arguments.length, args = Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
	          args[_key4] = arguments[_key4];
	        }
	
	        return _this4.t.apply(_this4, args);
	      });
	    };
	
	    if (!lng && this.services.languageDetector) lng = this.services.languageDetector.detect();
	
	    if (lng) {
	      this.language = lng;
	      this.languages = this.services.languageUtils.toResolveHierarchy(lng);
	
	      this.translator.changeLanguage(lng);
	
	      if (this.services.languageDetector) this.services.languageDetector.cacheUserLanguage(lng);
	    }
	
	    this.loadResources(function (err) {
	      done(err);
	    });
	  };
	
	  I18n.prototype.getFixedT = function getFixedT(lng, ns) {
	    var _this5 = this;
	
	    var fixedT = function fixedT(key, options) {
	      options = options || {};
	      options.lng = options.lng || fixedT.lng;
	      options.ns = options.ns || fixedT.ns;
	      return _this5.t(key, options);
	    };
	    fixedT.lng = lng;
	    fixedT.ns = ns;
	    return fixedT;
	  };
	
	  I18n.prototype.t = function t() {
	    return this.translator && this.translator.translate.apply(this.translator, arguments);
	  };
	
	  I18n.prototype.exists = function exists() {
	    return this.translator && this.translator.exists.apply(this.translator, arguments);
	  };
	
	  I18n.prototype.setDefaultNamespace = function setDefaultNamespace(ns) {
	    this.options.defaultNS = ns;
	  };
	
	  I18n.prototype.loadNamespaces = function loadNamespaces(ns, callback) {
	    var _this6 = this;
	
	    if (!this.options.ns) return callback && callback();
	    if (typeof ns === 'string') ns = [ns];
	
	    ns.forEach(function (n) {
	      if (_this6.options.ns.indexOf(n) < 0) _this6.options.ns.push(n);
	    });
	
	    this.loadResources(callback);
	  };
	
	  I18n.prototype.loadLanguages = function loadLanguages(lngs, callback) {
	    if (typeof lngs === 'string') lngs = [lngs];
	    var preloaded = this.options.preload || [];
	
	    var newLngs = lngs.filter(function (lng) {
	      return preloaded.indexOf(lng) < 0;
	    });
	    // Exit early if all given languages are already preloaded
	    if (!newLngs.length) return callback();
	
	    this.options.preload = preloaded.concat(newLngs);
	    this.loadResources(callback);
	  };
	
	  I18n.prototype.dir = function dir(lng) {
	    if (!lng) lng = this.language;
	    if (!lng) return 'rtl';
	
	    var rtlLngs = ['ar', 'shu', 'sqr', 'ssh', 'xaa', 'yhd', 'yud', 'aao', 'abh', 'abv', 'acm', 'acq', 'acw', 'acx', 'acy', 'adf', 'ads', 'aeb', 'aec', 'afb', 'ajp', 'apc', 'apd', 'arb', 'arq', 'ars', 'ary', 'arz', 'auz', 'avl', 'ayh', 'ayl', 'ayn', 'ayp', 'bbz', 'pga', 'he', 'iw', 'ps', 'pbt', 'pbu', 'pst', 'prp', 'prd', 'ur', 'ydd', 'yds', 'yih', 'ji', 'yi', 'hbo', 'men', 'xmn', 'fa', 'jpr', 'peo', 'pes', 'prs', 'dv', 'sam'];
	
	    return rtlLngs.indexOf(this.services.languageUtils.getLanguagePartFromCode(lng)) >= 0 ? 'rtl' : 'ltr';
	  };
	
	  I18n.prototype.createInstance = function createInstance() {
	    var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
	    var callback = arguments[1];
	
	    return new I18n(options, callback);
	  };
	
	  I18n.prototype.cloneInstance = function cloneInstance() {
	    var _this7 = this;
	
	    var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
	    var callback = arguments[1];
	
	    var clone = new I18n(_extends({}, options, this.options, { isClone: true }), callback);
	    var membersToCopy = ['store', 'services', 'language'];
	    membersToCopy.forEach(function (m) {
	      clone[m] = _this7[m];
	    });
	    clone.translator = new _Translator2.default(clone.services, clone.options);
	    clone.translator.on('*', function (event) {
	      for (var _len5 = arguments.length, args = Array(_len5 > 1 ? _len5 - 1 : 0), _key5 = 1; _key5 < _len5; _key5++) {
	        args[_key5 - 1] = arguments[_key5];
	      }
	
	      clone.emit.apply(clone, [event].concat(args));
	    });
	
	    return clone;
	  };
	
	  return I18n;
	}(_EventEmitter3.default);
	
	exports.default = new I18n();

/***/ }),
/* 1053 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	Object.defineProperty(exports, "__esModule", {
	  value: true
	});
	
	var _i18next = __webpack_require__(1052);
	
	var _i18next2 = _interopRequireDefault(_i18next);
	
	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
	
	exports.default = _i18next2.default;

/***/ }),
/* 1054 */
/***/ (function(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
	}


/***/ }),
/* 1055 */
/***/ (function(module, exports) {

	/* WEBPACK VAR INJECTION */(function(global) {'use strict';
	var Mutation = global.MutationObserver || global.WebKitMutationObserver;
	
	var scheduleDrain;
	
	{
	  if (Mutation) {
	    var called = 0;
	    var observer = new Mutation(nextTick);
	    var element = global.document.createTextNode('');
	    observer.observe(element, {
	      characterData: true
	    });
	    scheduleDrain = function () {
	      element.data = (called = ++called % 2);
	    };
	  } else if (!global.setImmediate && typeof global.MessageChannel !== 'undefined') {
	    var channel = new global.MessageChannel();
	    channel.port1.onmessage = nextTick;
	    scheduleDrain = function () {
	      channel.port2.postMessage(0);
	    };
	  } else if ('document' in global && 'onreadystatechange' in global.document.createElement('script')) {
	    scheduleDrain = function () {
	
	      // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted
	      // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.
	      var scriptEl = global.document.createElement('script');
	      scriptEl.onreadystatechange = function () {
	        nextTick();
	
	        scriptEl.onreadystatechange = null;
	        scriptEl.parentNode.removeChild(scriptEl);
	        scriptEl = null;
	      };
	      global.document.documentElement.appendChild(scriptEl);
	    };
	  } else {
	    scheduleDrain = function () {
	      setTimeout(nextTick, 0);
	    };
	  }
	}
	
	var draining;
	var queue = [];
	//named nextTick for less confusing stack traces
	function nextTick() {
	  draining = true;
	  var i, oldQueue;
	  var len = queue.length;
	  while (len) {
	    oldQueue = queue;
	    queue = [];
	    i = -1;
	    while (++i < len) {
	      oldQueue[i]();
	    }
	    len = queue.length;
	  }
	  draining = false;
	}
	
	module.exports = immediate;
	function immediate(task) {
	  if (queue.push(task) === 1 && !draining) {
	    scheduleDrain();
	  }
	}
	
	/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))

/***/ }),
/* 1056 */
/***/ (function(module, exports) {

	'use strict';
	
	var hasToStringTag = typeof Symbol === 'function' && typeof Symbol.toStringTag === 'symbol';
	var toStr = Object.prototype.toString;
	
	var isStandardArguments = function isArguments(value) {
		if (hasToStringTag && value && typeof value === 'object' && Symbol.toStringTag in value) {
			return false;
		}
		return toStr.call(value) === '[object Arguments]';
	};
	
	var isLegacyArguments = function isArguments(value) {
		if (isStandardArguments(value)) {
			return true;
		}
		return value !== null &&
			typeof value === 'object' &&
			typeof value.length === 'number' &&
			value.length >= 0 &&
			toStr.call(value) !== '[object Array]' &&
			toStr.call(value.callee) === '[object Function]';
	};
	
	var supportsStandardArguments = (function () {
		return isStandardArguments(arguments);
	}());
	
	isStandardArguments.isLegacyArguments = isLegacyArguments; // for tests
	
	module.exports = supportsStandardArguments ? isStandardArguments : isLegacyArguments;


/***/ }),
/* 1057 */
/***/ (function(module, exports) {

	'use strict';
	
	var getDay = Date.prototype.getDay;
	var tryDateObject = function tryDateGetDayCall(value) {
		try {
			getDay.call(value);
			return true;
		} catch (e) {
			return false;
		}
	};
	
	var toStr = Object.prototype.toString;
	var dateClass = '[object Date]';
	var hasToStringTag = typeof Symbol === 'function' && typeof Symbol.toStringTag === 'symbol';
	
	module.exports = function isDateObject(value) {
		if (typeof value !== 'object' || value === null) {
			return false;
		}
		return hasToStringTag ? tryDateObject(value) : toStr.call(value) === dateClass;
	};


/***/ }),
/* 1058 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	var hasSymbols = __webpack_require__(246)();
	var hasToStringTag = hasSymbols && typeof Symbol.toStringTag === 'symbol';
	var regexExec;
	var isRegexMarker;
	var badStringifier;
	
	if (hasToStringTag) {
		regexExec = Function.call.bind(RegExp.prototype.exec);
		isRegexMarker = {};
	
		var throwRegexMarker = function () {
			throw isRegexMarker;
		};
		badStringifier = {
			toString: throwRegexMarker,
			valueOf: throwRegexMarker
		};
	
		if (typeof Symbol.toPrimitive === 'symbol') {
			badStringifier[Symbol.toPrimitive] = throwRegexMarker;
		}
	}
	
	var toStr = Object.prototype.toString;
	var regexClass = '[object RegExp]';
	
	module.exports = hasToStringTag
		// eslint-disable-next-line consistent-return
		? function isRegex(value) {
			if (!value || typeof value !== 'object') {
				return false;
			}
	
			try {
				regexExec(value, badStringifier);
			} catch (e) {
				return e === isRegexMarker;
			}
		}
		: function isRegex(value) {
			// In older browsers, typeof regex incorrectly returns 'function'
			if (!value || (typeof value !== 'object' && typeof value !== 'function')) {
				return false;
			}
	
			return toStr.call(value) === regexClass;
		};


/***/ }),
/* 1059 */
/***/ (function(module, exports) {

	var toString = {}.toString;
	
	module.exports = Array.isArray || function (arr) {
	  return toString.call(arr) == '[object Array]';
	};


/***/ }),
/* 1060 */
/***/ (function(module, exports, __webpack_require__) {

	/* WEBPACK VAR INJECTION */(function(jQuery) {/*!
	 * Lazy Load - jQuery plugin for lazy loading images
	 *
	 * Copyright (c) 2007-2015 Mika Tuupola
	 *
	 * Licensed under the MIT license:
	 *   http://www.opensource.org/licenses/mit-license.php
	 *
	 * Project home:
	 *   http://www.appelsiini.net/projects/lazyload
	 *
	 * Version:  1.9.7
	 *
	 */
	
	(function($, window, document, undefined) {
	    var $window = $(window);
	
	    $.fn.lazyload = function(options) {
	        var elements = this;
	        var $container;
	        var settings = {
	            threshold       : 0,
	            failure_limit   : 0,
	            event           : "scroll",
	            effect          : "show",
	            container       : window,
	            data_attribute  : "original",
	            skip_invisible  : false,
	            appear          : null,
	            load            : null,
	            placeholder     : "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC"
	        };
	
	        function update() {
	            var counter = 0;
	
	            elements.each(function() {
	                var $this = $(this);
	                if (settings.skip_invisible && !$this.is(":visible")) {
	                    return;
	                }
	                if ($.abovethetop(this, settings) ||
	                    $.leftofbegin(this, settings)) {
	                        /* Nothing. */
	                } else if (!$.belowthefold(this, settings) &&
	                    !$.rightoffold(this, settings)) {
	                        $this.trigger("appear");
	                        /* if we found an image we'll load, reset the counter */
	                        counter = 0;
	                } else {
	                    if (++counter > settings.failure_limit) {
	                        return false;
	                    }
	                }
	            });
	
	        }
	
	        if(options) {
	            /* Maintain BC for a couple of versions. */
	            if (undefined !== options.failurelimit) {
	                options.failure_limit = options.failurelimit;
	                delete options.failurelimit;
	            }
	            if (undefined !== options.effectspeed) {
	                options.effect_speed = options.effectspeed;
	                delete options.effectspeed;
	            }
	
	            $.extend(settings, options);
	        }
	
	        /* Cache container as jQuery as object. */
	        $container = (settings.container === undefined ||
	                      settings.container === window) ? $window : $(settings.container);
	
	        /* Fire one scroll event per scroll. Not one scroll event per image. */
	        if (0 === settings.event.indexOf("scroll")) {
	            $container.bind(settings.event, function() {
	                return update();
	            });
	        }
	
	        this.each(function() {
	            var self = this;
	            var $self = $(self);
	
	            self.loaded = false;
	
	            /* If no src attribute given use data:uri. */
	            if ($self.attr("src") === undefined || $self.attr("src") === false) {
	                if ($self.is("img")) {
	                    $self.attr("src", settings.placeholder);
	                }
	            }
	
	            /* When appear is triggered load original image. */
	            $self.one("appear", function() {
	                if (!this.loaded) {
	                    if (settings.appear) {
	                        var elements_left = elements.length;
	                        settings.appear.call(self, elements_left, settings);
	                    }
	                    $("<img />")
	                        .bind("load", function() {
	
	                            var original = $self.attr("data-" + settings.data_attribute);
	                            $self.hide();
	                            if ($self.is("img")) {
	                                $self.attr("src", original);
	                            } else {
	                                $self.css("background-image", "url('" + original + "')");
	                            }
	                            $self[settings.effect](settings.effect_speed);
	
	                            self.loaded = true;
	
	                            /* Remove image from array so it is not looped next time. */
	                            var temp = $.grep(elements, function(element) {
	                                return !element.loaded;
	                            });
	                            elements = $(temp);
	
	                            if (settings.load) {
	                                var elements_left = elements.length;
	                                settings.load.call(self, elements_left, settings);
	                            }
	                        })
	                        .attr("src", $self.attr("data-" + settings.data_attribute));
	                }
	            });
	
	            /* When wanted event is triggered load original image */
	            /* by triggering appear.                              */
	            if (0 !== settings.event.indexOf("scroll")) {
	                $self.bind(settings.event, function() {
	                    if (!self.loaded) {
	                        $self.trigger("appear");
	                    }
	                });
	            }
	        });
	
	        /* Check if something appears when window is resized. */
	        $window.bind("resize", function() {
	            update();
	        });
	
	        /* With IOS5 force loading images when navigating with back button. */
	        /* Non optimal workaround. */
	        if ((/(?:iphone|ipod|ipad).*os 5/gi).test(navigator.appVersion)) {
	            $window.bind("pageshow", function(event) {
	                if (event.originalEvent && event.originalEvent.persisted) {
	                    elements.each(function() {
	                        $(this).trigger("appear");
	                    });
	                }
	            });
	        }
	
	        /* Force initial check if images should appear. */
	        $(document).ready(function() {
	            update();
	        });
	
	        return this;
	    };
	
	    /* Convenience methods in jQuery namespace.           */
	    /* Use as  $.belowthefold(element, {threshold : 100, container : window}) */
	
	    $.belowthefold = function(element, settings) {
	        var fold;
	
	        if (settings.container === undefined || settings.container === window) {
	            fold = (window.innerHeight ? window.innerHeight : $window.height()) + $window.scrollTop();
	        } else {
	            fold = $(settings.container).offset().top + $(settings.container).height();
	        }
	
	        return fold <= $(element).offset().top - settings.threshold;
	    };
	
	    $.rightoffold = function(element, settings) {
	        var fold;
	
	        if (settings.container === undefined || settings.container === window) {
	            fold = $window.width() + $window.scrollLeft();
	        } else {
	            fold = $(settings.container).offset().left + $(settings.container).width();
	        }
	
	        return fold <= $(element).offset().left - settings.threshold;
	    };
	
	    $.abovethetop = function(element, settings) {
	        var fold;
	
	        if (settings.container === undefined || settings.container === window) {
	            fold = $window.scrollTop();
	        } else {
	            fold = $(settings.container).offset().top;
	        }
	
	        return fold >= $(element).offset().top + settings.threshold  + $(element).height();
	    };
	
	    $.leftofbegin = function(element, settings) {
	        var fold;
	
	        if (settings.container === undefined || settings.container === window) {
	            fold = $window.scrollLeft();
	        } else {
	            fold = $(settings.container).offset().left;
	        }
	
	        return fold >= $(element).offset().left + settings.threshold + $(element).width();
	    };
	
	    $.inviewport = function(element, settings) {
	         return !$.rightoffold(element, settings) && !$.leftofbegin(element, settings) &&
	                !$.belowthefold(element, settings) && !$.abovethetop(element, settings);
	     };
	
	    /* Custom selectors for your convenience.   */
	    /* Use as $("img:below-the-fold").something() or */
	    /* $("img").filter(":below-the-fold").something() which is faster */
	
	    $.extend($.expr[":"], {
	        "below-the-fold" : function(a) { return $.belowthefold(a, {threshold : 0}); },
	        "above-the-top"  : function(a) { return !$.belowthefold(a, {threshold : 0}); },
	        "right-of-screen": function(a) { return $.rightoffold(a, {threshold : 0}); },
	        "left-of-screen" : function(a) { return !$.rightoffold(a, {threshold : 0}); },
	        "in-viewport"    : function(a) { return $.inviewport(a, {threshold : 0}); },
	        /* Maintain BC for couple of versions. */
	        "above-the-fold" : function(a) { return !$.belowthefold(a, {threshold : 0}); },
	        "right-of-fold"  : function(a) { return $.rightoffold(a, {threshold : 0}); },
	        "left-of-fold"   : function(a) { return !$.rightoffold(a, {threshold : 0}); }
	    });
	
	})(jQuery, window, document);
	
	/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(12)))

/***/ }),
/* 1061 */
/***/ (function(module, exports, __webpack_require__) {

	var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!
	 * jQuery UI :data 1.12.1
	 * http://jqueryui.com
	 *
	 * Copyright jQuery Foundation and other contributors
	 * Released under the MIT license.
	 * http://jquery.org/license
	 */
	
	//>>label: :data Selector
	//>>group: Core
	//>>description: Selects elements which have data stored under the specified key.
	//>>docs: http://api.jqueryui.com/data-selector/
	
	( function( factory ) {
		if ( true ) {
	
			// AMD. Register as an anonymous module.
			!(__WEBPACK_AMD_DEFINE_ARRAY__ = [ __webpack_require__(12), __webpack_require__(114) ], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
		} else {
	
			// Browser globals
			factory( jQuery );
		}
	} ( function( $ ) {
	return $.extend( $.expr[ ":" ], {
		data: $.expr.createPseudo ?
			$.expr.createPseudo( function( dataName ) {
				return function( elem ) {
					return !!$.data( elem, dataName );
				};
			} ) :
	
			// Support: jQuery <1.8
			function( elem, i, match ) {
				return !!$.data( elem, match[ 3 ] );
			}
	} );
	} ) );


/***/ }),
/* 1062 */
/***/ (function(module, exports, __webpack_require__) {

	var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!
	 * jQuery UI Mouse 1.12.1
	 * http://jqueryui.com
	 *
	 * Copyright jQuery Foundation and other contributors
	 * Released under the MIT license.
	 * http://jquery.org/license
	 */
	
	//>>label: Mouse
	//>>group: Widgets
	//>>description: Abstracts mouse-based interactions to assist in creating certain widgets.
	//>>docs: http://api.jqueryui.com/mouse/
	
	( function( factory ) {
		if ( true ) {
	
			// AMD. Register as an anonymous module.
			!(__WEBPACK_AMD_DEFINE_ARRAY__ = [
				__webpack_require__(12),
				__webpack_require__(361),
				__webpack_require__(114),
				__webpack_require__(223)
			], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
		} else {
	
			// Browser globals
			factory( jQuery );
		}
	}( function( $ ) {
	
	var mouseHandled = false;
	$( document ).on( "mouseup", function() {
		mouseHandled = false;
	} );
	
	return $.widget( "ui.mouse", {
		version: "1.12.1",
		options: {
			cancel: "input, textarea, button, select, option",
			distance: 1,
			delay: 0
		},
		_mouseInit: function() {
			var that = this;
	
			this.element
				.on( "mousedown." + this.widgetName, function( event ) {
					return that._mouseDown( event );
				} )
				.on( "click." + this.widgetName, function( event ) {
					if ( true === $.data( event.target, that.widgetName + ".preventClickEvent" ) ) {
						$.removeData( event.target, that.widgetName + ".preventClickEvent" );
						event.stopImmediatePropagation();
						return false;
					}
				} );
	
			this.started = false;
		},
	
		// TODO: make sure destroying one instance of mouse doesn't mess with
		// other instances of mouse
		_mouseDestroy: function() {
			this.element.off( "." + this.widgetName );
			if ( this._mouseMoveDelegate ) {
				this.document
					.off( "mousemove." + this.widgetName, this._mouseMoveDelegate )
					.off( "mouseup." + this.widgetName, this._mouseUpDelegate );
			}
		},
	
		_mouseDown: function( event ) {
	
			// don't let more than one widget handle mouseStart
			if ( mouseHandled ) {
				return;
			}
	
			this._mouseMoved = false;
	
			// We may have missed mouseup (out of window)
			( this._mouseStarted && this._mouseUp( event ) );
	
			this._mouseDownEvent = event;
	
			var that = this,
				btnIsLeft = ( event.which === 1 ),
	
				// event.target.nodeName works around a bug in IE 8 with
				// disabled inputs (#7620)
				elIsCancel = ( typeof this.options.cancel === "string" && event.target.nodeName ?
					$( event.target ).closest( this.options.cancel ).length : false );
			if ( !btnIsLeft || elIsCancel || !this._mouseCapture( event ) ) {
				return true;
			}
	
			this.mouseDelayMet = !this.options.delay;
			if ( !this.mouseDelayMet ) {
				this._mouseDelayTimer = setTimeout( function() {
					that.mouseDelayMet = true;
				}, this.options.delay );
			}
	
			if ( this._mouseDistanceMet( event ) && this._mouseDelayMet( event ) ) {
				this._mouseStarted = ( this._mouseStart( event ) !== false );
				if ( !this._mouseStarted ) {
					event.preventDefault();
					return true;
				}
			}
	
			// Click event may never have fired (Gecko & Opera)
			if ( true === $.data( event.target, this.widgetName + ".preventClickEvent" ) ) {
				$.removeData( event.target, this.widgetName + ".preventClickEvent" );
			}
	
			// These delegates are required to keep context
			this._mouseMoveDelegate = function( event ) {
				return that._mouseMove( event );
			};
			this._mouseUpDelegate = function( event ) {
				return that._mouseUp( event );
			};
	
			this.document
				.on( "mousemove." + this.widgetName, this._mouseMoveDelegate )
				.on( "mouseup." + this.widgetName, this._mouseUpDelegate );
	
			event.preventDefault();
	
			mouseHandled = true;
			return true;
		},
	
		_mouseMove: function( event ) {
	
			// Only check for mouseups outside the document if you've moved inside the document
			// at least once. This prevents the firing of mouseup in the case of IE<9, which will
			// fire a mousemove event if content is placed under the cursor. See #7778
			// Support: IE <9
			if ( this._mouseMoved ) {
	
				// IE mouseup check - mouseup happened when mouse was out of window
				if ( $.ui.ie && ( !document.documentMode || document.documentMode < 9 ) &&
						!event.button ) {
					return this._mouseUp( event );
	
				// Iframe mouseup check - mouseup occurred in another document
				} else if ( !event.which ) {
	
					// Support: Safari <=8 - 9
					// Safari sets which to 0 if you press any of the following keys
					// during a drag (#14461)
					if ( event.originalEvent.altKey || event.originalEvent.ctrlKey ||
							event.originalEvent.metaKey || event.originalEvent.shiftKey ) {
						this.ignoreMissingWhich = true;
					} else if ( !this.ignoreMissingWhich ) {
						return this._mouseUp( event );
					}
				}
			}
	
			if ( event.which || event.button ) {
				this._mouseMoved = true;
			}
	
			if ( this._mouseStarted ) {
				this._mouseDrag( event );
				return event.preventDefault();
			}
	
			if ( this._mouseDistanceMet( event ) && this._mouseDelayMet( event ) ) {
				this._mouseStarted =
					( this._mouseStart( this._mouseDownEvent, event ) !== false );
				( this._mouseStarted ? this._mouseDrag( event ) : this._mouseUp( event ) );
			}
	
			return !this._mouseStarted;
		},
	
		_mouseUp: function( event ) {
			this.document
				.off( "mousemove." + this.widgetName, this._mouseMoveDelegate )
				.off( "mouseup." + this.widgetName, this._mouseUpDelegate );
	
			if ( this._mouseStarted ) {
				this._mouseStarted = false;
	
				if ( event.target === this._mouseDownEvent.target ) {
					$.data( event.target, this.widgetName + ".preventClickEvent", true );
				}
	
				this._mouseStop( event );
			}
	
			if ( this._mouseDelayTimer ) {
				clearTimeout( this._mouseDelayTimer );
				delete this._mouseDelayTimer;
			}
	
			this.ignoreMissingWhich = false;
			mouseHandled = false;
			event.preventDefault();
		},
	
		_mouseDistanceMet: function( event ) {
			return ( Math.max(
					Math.abs( this._mouseDownEvent.pageX - event.pageX ),
					Math.abs( this._mouseDownEvent.pageY - event.pageY )
				) >= this.options.distance
			);
		},
	
		_mouseDelayMet: function( /* event */ ) {
			return this.mouseDelayMet;
		},
	
		// These are placeholder methods, to be overriden by extending plugin
		_mouseStart: function( /* event */ ) {},
		_mouseDrag: function( /* event */ ) {},
		_mouseStop: function( /* event */ ) {},
		_mouseCapture: function( /* event */ ) { return true; }
	} );
	
	} ) );


/***/ }),
/* 1063 */
/***/ (function(module, exports, __webpack_require__) {

	var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!
	 * jQuery UI Sortable 1.12.1
	 * http://jqueryui.com
	 *
	 * Copyright jQuery Foundation and other contributors
	 * Released under the MIT license.
	 * http://jquery.org/license
	 */
	
	//>>label: Sortable
	//>>group: Interactions
	//>>description: Enables items in a list to be sorted using the mouse.
	//>>docs: http://api.jqueryui.com/sortable/
	//>>demos: http://jqueryui.com/sortable/
	//>>css.structure: ../../themes/base/sortable.css
	
	( function( factory ) {
		if ( true ) {
	
			// AMD. Register as an anonymous module.
			!(__WEBPACK_AMD_DEFINE_ARRAY__ = [
				__webpack_require__(12),
				__webpack_require__(1062),
				__webpack_require__(1061),
				__webpack_require__(361),
				__webpack_require__(574),
				__webpack_require__(114),
				__webpack_require__(223)
			], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
		} else {
	
			// Browser globals
			factory( jQuery );
		}
	}( function( $ ) {
	
	return $.widget( "ui.sortable", $.ui.mouse, {
		version: "1.12.1",
		widgetEventPrefix: "sort",
		ready: false,
		options: {
			appendTo: "parent",
			axis: false,
			connectWith: false,
			containment: false,
			cursor: "auto",
			cursorAt: false,
			dropOnEmpty: true,
			forcePlaceholderSize: false,
			forceHelperSize: false,
			grid: false,
			handle: false,
			helper: "original",
			items: "> *",
			opacity: false,
			placeholder: false,
			revert: false,
			scroll: true,
			scrollSensitivity: 20,
			scrollSpeed: 20,
			scope: "default",
			tolerance: "intersect",
			zIndex: 1000,
	
			// Callbacks
			activate: null,
			beforeStop: null,
			change: null,
			deactivate: null,
			out: null,
			over: null,
			receive: null,
			remove: null,
			sort: null,
			start: null,
			stop: null,
			update: null
		},
	
		_isOverAxis: function( x, reference, size ) {
			return ( x >= reference ) && ( x < ( reference + size ) );
		},
	
		_isFloating: function( item ) {
			return ( /left|right/ ).test( item.css( "float" ) ) ||
				( /inline|table-cell/ ).test( item.css( "display" ) );
		},
	
		_create: function() {
			this.containerCache = {};
			this._addClass( "ui-sortable" );
	
			//Get the items
			this.refresh();
	
			//Let's determine the parent's offset
			this.offset = this.element.offset();
	
			//Initialize mouse events for interaction
			this._mouseInit();
	
			this._setHandleClassName();
	
			//We're ready to go
			this.ready = true;
	
		},
	
		_setOption: function( key, value ) {
			this._super( key, value );
	
			if ( key === "handle" ) {
				this._setHandleClassName();
			}
		},
	
		_setHandleClassName: function() {
			var that = this;
			this._removeClass( this.element.find( ".ui-sortable-handle" ), "ui-sortable-handle" );
			$.each( this.items, function() {
				that._addClass(
					this.instance.options.handle ?
						this.item.find( this.instance.options.handle ) :
						this.item,
					"ui-sortable-handle"
				);
			} );
		},
	
		_destroy: function() {
			this._mouseDestroy();
	
			for ( var i = this.items.length - 1; i >= 0; i-- ) {
				this.items[ i ].item.removeData( this.widgetName + "-item" );
			}
	
			return this;
		},
	
		_mouseCapture: function( event, overrideHandle ) {
			var currentItem = null,
				validHandle = false,
				that = this;
	
			if ( this.reverting ) {
				return false;
			}
	
			if ( this.options.disabled || this.options.type === "static" ) {
				return false;
			}
	
			//We have to refresh the items data once first
			this._refreshItems( event );
	
			//Find out if the clicked node (or one of its parents) is a actual item in this.items
			$( event.target ).parents().each( function() {
				if ( $.data( this, that.widgetName + "-item" ) === that ) {
					currentItem = $( this );
					return false;
				}
			} );
			if ( $.data( event.target, that.widgetName + "-item" ) === that ) {
				currentItem = $( event.target );
			}
	
			if ( !currentItem ) {
				return false;
			}
			if ( this.options.handle && !overrideHandle ) {
				$( this.options.handle, currentItem ).find( "*" ).addBack().each( function() {
					if ( this === event.target ) {
						validHandle = true;
					}
				} );
				if ( !validHandle ) {
					return false;
				}
			}
	
			this.currentItem = currentItem;
			this._removeCurrentsFromItems();
			return true;
	
		},
	
		_mouseStart: function( event, overrideHandle, noActivation ) {
	
			var i, body,
				o = this.options;
	
			this.currentContainer = this;
	
			//We only need to call refreshPositions, because the refreshItems call has been moved to
			// mouseCapture
			this.refreshPositions();
	
			//Create and append the visible helper
			this.helper = this._createHelper( event );
	
			//Cache the helper size
			this._cacheHelperProportions();
	
			/*
			 * - Position generation -
			 * This block generates everything position related - it's the core of draggables.
			 */
	
			//Cache the margins of the original element
			this._cacheMargins();
	
			//Get the next scrolling parent
			this.scrollParent = this.helper.scrollParent();
	
			//The element's absolute position on the page minus margins
			this.offset = this.currentItem.offset();
			this.offset = {
				top: this.offset.top - this.margins.top,
				left: this.offset.left - this.margins.left
			};
	
			$.extend( this.offset, {
				click: { //Where the click happened, relative to the element
					left: event.pageX - this.offset.left,
					top: event.pageY - this.offset.top
				},
				parent: this._getParentOffset(),
	
				// This is a relative to absolute position minus the actual position calculation -
				// only used for relative positioned helper
				relative: this._getRelativeOffset()
			} );
	
			// Only after we got the offset, we can change the helper's position to absolute
			// TODO: Still need to figure out a way to make relative sorting possible
			this.helper.css( "position", "absolute" );
			this.cssPosition = this.helper.css( "position" );
	
			//Generate the original position
			this.originalPosition = this._generatePosition( event );
			this.originalPageX = event.pageX;
			this.originalPageY = event.pageY;
	
			//Adjust the mouse offset relative to the helper if "cursorAt" is supplied
			( o.cursorAt && this._adjustOffsetFromHelper( o.cursorAt ) );
	
			//Cache the former DOM position
			this.domPosition = {
				prev: this.currentItem.prev()[ 0 ],
				parent: this.currentItem.parent()[ 0 ]
			};
	
			// If the helper is not the original, hide the original so it's not playing any role during
			// the drag, won't cause anything bad this way
			if ( this.helper[ 0 ] !== this.currentItem[ 0 ] ) {
				this.currentItem.hide();
			}
	
			//Create the placeholder
			this._createPlaceholder();
	
			//Set a containment if given in the options
			if ( o.containment ) {
				this._setContainment();
			}
	
			if ( o.cursor && o.cursor !== "auto" ) { // cursor option
				body = this.document.find( "body" );
	
				// Support: IE
				this.storedCursor = body.css( "cursor" );
				body.css( "cursor", o.cursor );
	
				this.storedStylesheet =
					$( "<style>*{ cursor: " + o.cursor + " !important; }</style>" ).appendTo( body );
			}
	
			if ( o.opacity ) { // opacity option
				if ( this.helper.css( "opacity" ) ) {
					this._storedOpacity = this.helper.css( "opacity" );
				}
				this.helper.css( "opacity", o.opacity );
			}
	
			if ( o.zIndex ) { // zIndex option
				if ( this.helper.css( "zIndex" ) ) {
					this._storedZIndex = this.helper.css( "zIndex" );
				}
				this.helper.css( "zIndex", o.zIndex );
			}
	
			//Prepare scrolling
			if ( this.scrollParent[ 0 ] !== this.document[ 0 ] &&
					this.scrollParent[ 0 ].tagName !== "HTML" ) {
				this.overflowOffset = this.scrollParent.offset();
			}
	
			//Call callbacks
			this._trigger( "start", event, this._uiHash() );
	
			//Recache the helper size
			if ( !this._preserveHelperProportions ) {
				this._cacheHelperProportions();
			}
	
			//Post "activate" events to possible containers
			if ( !noActivation ) {
				for ( i = this.containers.length - 1; i >= 0; i-- ) {
					this.containers[ i ]._trigger( "activate", event, this._uiHash( this ) );
				}
			}
	
			//Prepare possible droppables
			if ( $.ui.ddmanager ) {
				$.ui.ddmanager.current = this;
			}
	
			if ( $.ui.ddmanager && !o.dropBehaviour ) {
				$.ui.ddmanager.prepareOffsets( this, event );
			}
	
			this.dragging = true;
	
			this._addClass( this.helper, "ui-sortable-helper" );
	
			// Execute the drag once - this causes the helper not to be visiblebefore getting its
			// correct position
			this._mouseDrag( event );
			return true;
	
		},
	
		_mouseDrag: function( event ) {
			var i, item, itemElement, intersection,
				o = this.options,
				scrolled = false;
	
			//Compute the helpers position
			this.position = this._generatePosition( event );
			this.positionAbs = this._convertPositionTo( "absolute" );
	
			if ( !this.lastPositionAbs ) {
				this.lastPositionAbs = this.positionAbs;
			}
	
			//Do scrolling
			if ( this.options.scroll ) {
				if ( this.scrollParent[ 0 ] !== this.document[ 0 ] &&
						this.scrollParent[ 0 ].tagName !== "HTML" ) {
	
					if ( ( this.overflowOffset.top + this.scrollParent[ 0 ].offsetHeight ) -
							event.pageY < o.scrollSensitivity ) {
						this.scrollParent[ 0 ].scrollTop =
							scrolled = this.scrollParent[ 0 ].scrollTop + o.scrollSpeed;
					} else if ( event.pageY - this.overflowOffset.top < o.scrollSensitivity ) {
						this.scrollParent[ 0 ].scrollTop =
							scrolled = this.scrollParent[ 0 ].scrollTop - o.scrollSpeed;
					}
	
					if ( ( this.overflowOffset.left + this.scrollParent[ 0 ].offsetWidth ) -
							event.pageX < o.scrollSensitivity ) {
						this.scrollParent[ 0 ].scrollLeft = scrolled =
							this.scrollParent[ 0 ].scrollLeft + o.scrollSpeed;
					} else if ( event.pageX - this.overflowOffset.left < o.scrollSensitivity ) {
						this.scrollParent[ 0 ].scrollLeft = scrolled =
							this.scrollParent[ 0 ].scrollLeft - o.scrollSpeed;
					}
	
				} else {
	
					if ( event.pageY - this.document.scrollTop() < o.scrollSensitivity ) {
						scrolled = this.document.scrollTop( this.document.scrollTop() - o.scrollSpeed );
					} else if ( this.window.height() - ( event.pageY - this.document.scrollTop() ) <
							o.scrollSensitivity ) {
						scrolled = this.document.scrollTop( this.document.scrollTop() + o.scrollSpeed );
					}
	
					if ( event.pageX - this.document.scrollLeft() < o.scrollSensitivity ) {
						scrolled = this.document.scrollLeft(
							this.document.scrollLeft() - o.scrollSpeed
						);
					} else if ( this.window.width() - ( event.pageX - this.document.scrollLeft() ) <
							o.scrollSensitivity ) {
						scrolled = this.document.scrollLeft(
							this.document.scrollLeft() + o.scrollSpeed
						);
					}
	
				}
	
				if ( scrolled !== false && $.ui.ddmanager && !o.dropBehaviour ) {
					$.ui.ddmanager.prepareOffsets( this, event );
				}
			}
	
			//Regenerate the absolute position used for position checks
			this.positionAbs = this._convertPositionTo( "absolute" );
	
			//Set the helper position
			if ( !this.options.axis || this.options.axis !== "y" ) {
				this.helper[ 0 ].style.left = this.position.left + "px";
			}
			if ( !this.options.axis || this.options.axis !== "x" ) {
				this.helper[ 0 ].style.top = this.position.top + "px";
			}
	
			//Rearrange
			for ( i = this.items.length - 1; i >= 0; i-- ) {
	
				//Cache variables and intersection, continue if no intersection
				item = this.items[ i ];
				itemElement = item.item[ 0 ];
				intersection = this._intersectsWithPointer( item );
				if ( !intersection ) {
					continue;
				}
	
				// Only put the placeholder inside the current Container, skip all
				// items from other containers. This works because when moving
				// an item from one container to another the
				// currentContainer is switched before the placeholder is moved.
				//
				// Without this, moving items in "sub-sortables" can cause
				// the placeholder to jitter between the outer and inner container.
				if ( item.instance !== this.currentContainer ) {
					continue;
				}
	
				// Cannot intersect with itself
				// no useless actions that have been done before
				// no action if the item moved is the parent of the item checked
				if ( itemElement !== this.currentItem[ 0 ] &&
					this.placeholder[ intersection === 1 ? "next" : "prev" ]()[ 0 ] !== itemElement &&
					!$.contains( this.placeholder[ 0 ], itemElement ) &&
					( this.options.type === "semi-dynamic" ?
						!$.contains( this.element[ 0 ], itemElement ) :
						true
					)
				) {
	
					this.direction = intersection === 1 ? "down" : "up";
	
					if ( this.options.tolerance === "pointer" || this._intersectsWithSides( item ) ) {
						this._rearrange( event, item );
					} else {
						break;
					}
	
					this._trigger( "change", event, this._uiHash() );
					break;
				}
			}
	
			//Post events to containers
			this._contactContainers( event );
	
			//Interconnect with droppables
			if ( $.ui.ddmanager ) {
				$.ui.ddmanager.drag( this, event );
			}
	
			//Call callbacks
			this._trigger( "sort", event, this._uiHash() );
	
			this.lastPositionAbs = this.positionAbs;
			return false;
	
		},
	
		_mouseStop: function( event, noPropagation ) {
	
			if ( !event ) {
				return;
			}
	
			//If we are using droppables, inform the manager about the drop
			if ( $.ui.ddmanager && !this.options.dropBehaviour ) {
				$.ui.ddmanager.drop( this, event );
			}
	
			if ( this.options.revert ) {
				var that = this,
					cur = this.placeholder.offset(),
					axis = this.options.axis,
					animation = {};
	
				if ( !axis || axis === "x" ) {
					animation.left = cur.left - this.offset.parent.left - this.margins.left +
						( this.offsetParent[ 0 ] === this.document[ 0 ].body ?
							0 :
							this.offsetParent[ 0 ].scrollLeft
						);
				}
				if ( !axis || axis === "y" ) {
					animation.top = cur.top - this.offset.parent.top - this.margins.top +
						( this.offsetParent[ 0 ] === this.document[ 0 ].body ?
							0 :
							this.offsetParent[ 0 ].scrollTop
						);
				}
				this.reverting = true;
				$( this.helper ).animate(
					animation,
					parseInt( this.options.revert, 10 ) || 500,
					function() {
						that._clear( event );
					}
				);
			} else {
				this._clear( event, noPropagation );
			}
	
			return false;
	
		},
	
		cancel: function() {
	
			if ( this.dragging ) {
	
				this._mouseUp( new $.Event( "mouseup", { target: null } ) );
	
				if ( this.options.helper === "original" ) {
					this.currentItem.css( this._storedCSS );
					this._removeClass( this.currentItem, "ui-sortable-helper" );
				} else {
					this.currentItem.show();
				}
	
				//Post deactivating events to containers
				for ( var i = this.containers.length - 1; i >= 0; i-- ) {
					this.containers[ i ]._trigger( "deactivate", null, this._uiHash( this ) );
					if ( this.containers[ i ].containerCache.over ) {
						this.containers[ i ]._trigger( "out", null, this._uiHash( this ) );
						this.containers[ i ].containerCache.over = 0;
					}
				}
	
			}
	
			if ( this.placeholder ) {
	
				//$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately,
				// it unbinds ALL events from the original node!
				if ( this.placeholder[ 0 ].parentNode ) {
					this.placeholder[ 0 ].parentNode.removeChild( this.placeholder[ 0 ] );
				}
				if ( this.options.helper !== "original" && this.helper &&
						this.helper[ 0 ].parentNode ) {
					this.helper.remove();
				}
	
				$.extend( this, {
					helper: null,
					dragging: false,
					reverting: false,
					_noFinalSort: null
				} );
	
				if ( this.domPosition.prev ) {
					$( this.domPosition.prev ).after( this.currentItem );
				} else {
					$( this.domPosition.parent ).prepend( this.currentItem );
				}
			}
	
			return this;
	
		},
	
		serialize: function( o ) {
	
			var items = this._getItemsAsjQuery( o && o.connected ),
				str = [];
			o = o || {};
	
			$( items ).each( function() {
				var res = ( $( o.item || this ).attr( o.attribute || "id" ) || "" )
					.match( o.expression || ( /(.+)[\-=_](.+)/ ) );
				if ( res ) {
					str.push(
						( o.key || res[ 1 ] + "[]" ) +
						"=" + ( o.key && o.expression ? res[ 1 ] : res[ 2 ] ) );
				}
			} );
	
			if ( !str.length && o.key ) {
				str.push( o.key + "=" );
			}
	
			return str.join( "&" );
	
		},
	
		toArray: function( o ) {
	
			var items = this._getItemsAsjQuery( o && o.connected ),
				ret = [];
	
			o = o || {};
	
			items.each( function() {
				ret.push( $( o.item || this ).attr( o.attribute || "id" ) || "" );
			} );
			return ret;
	
		},
	
		/* Be careful with the following core functions */
		_intersectsWith: function( item ) {
	
			var x1 = this.positionAbs.left,
				x2 = x1 + this.helperProportions.width,
				y1 = this.positionAbs.top,
				y2 = y1 + this.helperProportions.height,
				l = item.left,
				r = l + item.width,
				t = item.top,
				b = t + item.height,
				dyClick = this.offset.click.top,
				dxClick = this.offset.click.left,
				isOverElementHeight = ( this.options.axis === "x" ) || ( ( y1 + dyClick ) > t &&
					( y1 + dyClick ) < b ),
				isOverElementWidth = ( this.options.axis === "y" ) || ( ( x1 + dxClick ) > l &&
					( x1 + dxClick ) < r ),
				isOverElement = isOverElementHeight && isOverElementWidth;
	
			if ( this.options.tolerance === "pointer" ||
				this.options.forcePointerForContainers ||
				( this.options.tolerance !== "pointer" &&
					this.helperProportions[ this.floating ? "width" : "height" ] >
					item[ this.floating ? "width" : "height" ] )
			) {
				return isOverElement;
			} else {
	
				return ( l < x1 + ( this.helperProportions.width / 2 ) && // Right Half
					x2 - ( this.helperProportions.width / 2 ) < r && // Left Half
					t < y1 + ( this.helperProportions.height / 2 ) && // Bottom Half
					y2 - ( this.helperProportions.height / 2 ) < b ); // Top Half
	
			}
		},
	
		_intersectsWithPointer: function( item ) {
			var verticalDirection, horizontalDirection,
				isOverElementHeight = ( this.options.axis === "x" ) ||
					this._isOverAxis(
						this.positionAbs.top + this.offset.click.top, item.top, item.height ),
				isOverElementWidth = ( this.options.axis === "y" ) ||
					this._isOverAxis(
						this.positionAbs.left + this.offset.click.left, item.left, item.width ),
				isOverElement = isOverElementHeight && isOverElementWidth;
	
			if ( !isOverElement ) {
				return false;
			}
	
			verticalDirection = this._getDragVerticalDirection();
			horizontalDirection = this._getDragHorizontalDirection();
	
			return this.floating ?
				( ( horizontalDirection === "right" || verticalDirection === "down" ) ? 2 : 1 )
				: ( verticalDirection && ( verticalDirection === "down" ? 2 : 1 ) );
	
		},
	
		_intersectsWithSides: function( item ) {
	
			var isOverBottomHalf = this._isOverAxis( this.positionAbs.top +
					this.offset.click.top, item.top + ( item.height / 2 ), item.height ),
				isOverRightHalf = this._isOverAxis( this.positionAbs.left +
					this.offset.click.left, item.left + ( item.width / 2 ), item.width ),
				verticalDirection = this._getDragVerticalDirection(),
				horizontalDirection = this._getDragHorizontalDirection();
	
			if ( this.floating && horizontalDirection ) {
				return ( ( horizontalDirection === "right" && isOverRightHalf ) ||
					( horizontalDirection === "left" && !isOverRightHalf ) );
			} else {
				return verticalDirection && ( ( verticalDirection === "down" && isOverBottomHalf ) ||
					( verticalDirection === "up" && !isOverBottomHalf ) );
			}
	
		},
	
		_getDragVerticalDirection: function() {
			var delta = this.positionAbs.top - this.lastPositionAbs.top;
			return delta !== 0 && ( delta > 0 ? "down" : "up" );
		},
	
		_getDragHorizontalDirection: function() {
			var delta = this.positionAbs.left - this.lastPositionAbs.left;
			return delta !== 0 && ( delta > 0 ? "right" : "left" );
		},
	
		refresh: function( event ) {
			this._refreshItems( event );
			this._setHandleClassName();
			this.refreshPositions();
			return this;
		},
	
		_connectWith: function() {
			var options = this.options;
			return options.connectWith.constructor === String ?
				[ options.connectWith ] :
				options.connectWith;
		},
	
		_getItemsAsjQuery: function( connected ) {
	
			var i, j, cur, inst,
				items = [],
				queries = [],
				connectWith = this._connectWith();
	
			if ( connectWith && connected ) {
				for ( i = connectWith.length - 1; i >= 0; i-- ) {
					cur = $( connectWith[ i ], this.document[ 0 ] );
					for ( j = cur.length - 1; j >= 0; j-- ) {
						inst = $.data( cur[ j ], this.widgetFullName );
						if ( inst && inst !== this && !inst.options.disabled ) {
							queries.push( [ $.isFunction( inst.options.items ) ?
								inst.options.items.call( inst.element ) :
								$( inst.options.items, inst.element )
									.not( ".ui-sortable-helper" )
									.not( ".ui-sortable-placeholder" ), inst ] );
						}
					}
				}
			}
	
			queries.push( [ $.isFunction( this.options.items ) ?
				this.options.items
					.call( this.element, null, { options: this.options, item: this.currentItem } ) :
				$( this.options.items, this.element )
					.not( ".ui-sortable-helper" )
					.not( ".ui-sortable-placeholder" ), this ] );
	
			function addItems() {
				items.push( this );
			}
			for ( i = queries.length - 1; i >= 0; i-- ) {
				queries[ i ][ 0 ].each( addItems );
			}
	
			return $( items );
	
		},
	
		_removeCurrentsFromItems: function() {
	
			var list = this.currentItem.find( ":data(" + this.widgetName + "-item)" );
	
			this.items = $.grep( this.items, function( item ) {
				for ( var j = 0; j < list.length; j++ ) {
					if ( list[ j ] === item.item[ 0 ] ) {
						return false;
					}
				}
				return true;
			} );
	
		},
	
		_refreshItems: function( event ) {
	
			this.items = [];
			this.containers = [ this ];
	
			var i, j, cur, inst, targetData, _queries, item, queriesLength,
				items = this.items,
				queries = [ [ $.isFunction( this.options.items ) ?
					this.options.items.call( this.element[ 0 ], event, { item: this.currentItem } ) :
					$( this.options.items, this.element ), this ] ],
				connectWith = this._connectWith();
	
			//Shouldn't be run the first time through due to massive slow-down
			if ( connectWith && this.ready ) {
				for ( i = connectWith.length - 1; i >= 0; i-- ) {
					cur = $( connectWith[ i ], this.document[ 0 ] );
					for ( j = cur.length - 1; j >= 0; j-- ) {
						inst = $.data( cur[ j ], this.widgetFullName );
						if ( inst && inst !== this && !inst.options.disabled ) {
							queries.push( [ $.isFunction( inst.options.items ) ?
								inst.options.items
									.call( inst.element[ 0 ], event, { item: this.currentItem } ) :
								$( inst.options.items, inst.element ), inst ] );
							this.containers.push( inst );
						}
					}
				}
			}
	
			for ( i = queries.length - 1; i >= 0; i-- ) {
				targetData = queries[ i ][ 1 ];
				_queries = queries[ i ][ 0 ];
	
				for ( j = 0, queriesLength = _queries.length; j < queriesLength; j++ ) {
					item = $( _queries[ j ] );
	
					// Data for target checking (mouse manager)
					item.data( this.widgetName + "-item", targetData );
	
					items.push( {
						item: item,
						instance: targetData,
						width: 0, height: 0,
						left: 0, top: 0
					} );
				}
			}
	
		},
	
		refreshPositions: function( fast ) {
	
			// Determine whether items are being displayed horizontally
			this.floating = this.items.length ?
				this.options.axis === "x" || this._isFloating( this.items[ 0 ].item ) :
				false;
	
			//This has to be redone because due to the item being moved out/into the offsetParent,
			// the offsetParent's position will change
			if ( this.offsetParent && this.helper ) {
				this.offset.parent = this._getParentOffset();
			}
	
			var i, item, t, p;
	
			for ( i = this.items.length - 1; i >= 0; i-- ) {
				item = this.items[ i ];
	
				//We ignore calculating positions of all connected containers when we're not over them
				if ( item.instance !== this.currentContainer && this.currentContainer &&
						item.item[ 0 ] !== this.currentItem[ 0 ] ) {
					continue;
				}
	
				t = this.options.toleranceElement ?
					$( this.options.toleranceElement, item.item ) :
					item.item;
	
				if ( !fast ) {
					item.width = t.outerWidth();
					item.height = t.outerHeight();
				}
	
				p = t.offset();
				item.left = p.left;
				item.top = p.top;
			}
	
			if ( this.options.custom && this.options.custom.refreshContainers ) {
				this.options.custom.refreshContainers.call( this );
			} else {
				for ( i = this.containers.length - 1; i >= 0; i-- ) {
					p = this.containers[ i ].element.offset();
					this.containers[ i ].containerCache.left = p.left;
					this.containers[ i ].containerCache.top = p.top;
					this.containers[ i ].containerCache.width =
						this.containers[ i ].element.outerWidth();
					this.containers[ i ].containerCache.height =
						this.containers[ i ].element.outerHeight();
				}
			}
	
			return this;
		},
	
		_createPlaceholder: function( that ) {
			that = that || this;
			var className,
				o = that.options;
	
			if ( !o.placeholder || o.placeholder.constructor === String ) {
				className = o.placeholder;
				o.placeholder = {
					element: function() {
	
						var nodeName = that.currentItem[ 0 ].nodeName.toLowerCase(),
							element = $( "<" + nodeName + ">", that.document[ 0 ] );
	
							that._addClass( element, "ui-sortable-placeholder",
									className || that.currentItem[ 0 ].className )
								._removeClass( element, "ui-sortable-helper" );
	
						if ( nodeName === "tbody" ) {
							that._createTrPlaceholder(
								that.currentItem.find( "tr" ).eq( 0 ),
								$( "<tr>", that.document[ 0 ] ).appendTo( element )
							);
						} else if ( nodeName === "tr" ) {
							that._createTrPlaceholder( that.currentItem, element );
						} else if ( nodeName === "img" ) {
							element.attr( "src", that.currentItem.attr( "src" ) );
						}
	
						if ( !className ) {
							element.css( "visibility", "hidden" );
						}
	
						return element;
					},
					update: function( container, p ) {
	
						// 1. If a className is set as 'placeholder option, we don't force sizes -
						// the class is responsible for that
						// 2. The option 'forcePlaceholderSize can be enabled to force it even if a
						// class name is specified
						if ( className && !o.forcePlaceholderSize ) {
							return;
						}
	
						//If the element doesn't have a actual height by itself (without styles coming
						// from a stylesheet), it receives the inline height from the dragged item
						if ( !p.height() ) {
							p.height(
								that.currentItem.innerHeight() -
								parseInt( that.currentItem.css( "paddingTop" ) || 0, 10 ) -
								parseInt( that.currentItem.css( "paddingBottom" ) || 0, 10 ) );
						}
						if ( !p.width() ) {
							p.width(
								that.currentItem.innerWidth() -
								parseInt( that.currentItem.css( "paddingLeft" ) || 0, 10 ) -
								parseInt( that.currentItem.css( "paddingRight" ) || 0, 10 ) );
						}
					}
				};
			}
	
			//Create the placeholder
			that.placeholder = $( o.placeholder.element.call( that.element, that.currentItem ) );
	
			//Append it after the actual current item
			that.currentItem.after( that.placeholder );
	
			//Update the size of the placeholder (TODO: Logic to fuzzy, see line 316/317)
			o.placeholder.update( that, that.placeholder );
	
		},
	
		_createTrPlaceholder: function( sourceTr, targetTr ) {
			var that = this;
	
			sourceTr.children().each( function() {
				$( "<td>&#160;</td>", that.document[ 0 ] )
					.attr( "colspan", $( this ).attr( "colspan" ) || 1 )
					.appendTo( targetTr );
			} );
		},
	
		_contactContainers: function( event ) {
			var i, j, dist, itemWithLeastDistance, posProperty, sizeProperty, cur, nearBottom,
				floating, axis,
				innermostContainer = null,
				innermostIndex = null;
	
			// Get innermost container that intersects with item
			for ( i = this.containers.length - 1; i >= 0; i-- ) {
	
				// Never consider a container that's located within the item itself
				if ( $.contains( this.currentItem[ 0 ], this.containers[ i ].element[ 0 ] ) ) {
					continue;
				}
	
				if ( this._intersectsWith( this.containers[ i ].containerCache ) ) {
	
					// If we've already found a container and it's more "inner" than this, then continue
					if ( innermostContainer &&
							$.contains(
								this.containers[ i ].element[ 0 ],
								innermostContainer.element[ 0 ] ) ) {
						continue;
					}
	
					innermostContainer = this.containers[ i ];
					innermostIndex = i;
	
				} else {
	
					// container doesn't intersect. trigger "out" event if necessary
					if ( this.containers[ i ].containerCache.over ) {
						this.containers[ i ]._trigger( "out", event, this._uiHash( this ) );
						this.containers[ i ].containerCache.over = 0;
					}
				}
	
			}
	
			// If no intersecting containers found, return
			if ( !innermostContainer ) {
				return;
			}
	
			// Move the item into the container if it's not there already
			if ( this.containers.length === 1 ) {
				if ( !this.containers[ innermostIndex ].containerCache.over ) {
					this.containers[ innermostIndex ]._trigger( "over", event, this._uiHash( this ) );
					this.containers[ innermostIndex ].containerCache.over = 1;
				}
			} else {
	
				// When entering a new container, we will find the item with the least distance and
				// append our item near it
				dist = 10000;
				itemWithLeastDistance = null;
				floating = innermostContainer.floating || this._isFloating( this.currentItem );
				posProperty = floating ? "left" : "top";
				sizeProperty = floating ? "width" : "height";
				axis = floating ? "pageX" : "pageY";
	
				for ( j = this.items.length - 1; j >= 0; j-- ) {
					if ( !$.contains(
							this.containers[ innermostIndex ].element[ 0 ], this.items[ j ].item[ 0 ] )
					) {
						continue;
					}
					if ( this.items[ j ].item[ 0 ] === this.currentItem[ 0 ] ) {
						continue;
					}
	
					cur = this.items[ j ].item.offset()[ posProperty ];
					nearBottom = false;
					if ( event[ axis ] - cur > this.items[ j ][ sizeProperty ] / 2 ) {
						nearBottom = true;
					}
	
					if ( Math.abs( event[ axis ] - cur ) < dist ) {
						dist = Math.abs( event[ axis ] - cur );
						itemWithLeastDistance = this.items[ j ];
						this.direction = nearBottom ? "up" : "down";
					}
				}
	
				//Check if dropOnEmpty is enabled
				if ( !itemWithLeastDistance && !this.options.dropOnEmpty ) {
					return;
				}
	
				if ( this.currentContainer === this.containers[ innermostIndex ] ) {
					if ( !this.currentContainer.containerCache.over ) {
						this.containers[ innermostIndex ]._trigger( "over", event, this._uiHash() );
						this.currentContainer.containerCache.over = 1;
					}
					return;
				}
	
				itemWithLeastDistance ?
					this._rearrange( event, itemWithLeastDistance, null, true ) :
					this._rearrange( event, null, this.containers[ innermostIndex ].element, true );
				this._trigger( "change", event, this._uiHash() );
				this.containers[ innermostIndex ]._trigger( "change", event, this._uiHash( this ) );
				this.currentContainer = this.containers[ innermostIndex ];
	
				//Update the placeholder
				this.options.placeholder.update( this.currentContainer, this.placeholder );
	
				this.containers[ innermostIndex ]._trigger( "over", event, this._uiHash( this ) );
				this.containers[ innermostIndex ].containerCache.over = 1;
			}
	
		},
	
		_createHelper: function( event ) {
	
			var o = this.options,
				helper = $.isFunction( o.helper ) ?
					$( o.helper.apply( this.element[ 0 ], [ event, this.currentItem ] ) ) :
					( o.helper === "clone" ? this.currentItem.clone() : this.currentItem );
	
			//Add the helper to the DOM if that didn't happen already
			if ( !helper.parents( "body" ).length ) {
				$( o.appendTo !== "parent" ?
					o.appendTo :
					this.currentItem[ 0 ].parentNode )[ 0 ].appendChild( helper[ 0 ] );
			}
	
			if ( helper[ 0 ] === this.currentItem[ 0 ] ) {
				this._storedCSS = {
					width: this.currentItem[ 0 ].style.width,
					height: this.currentItem[ 0 ].style.height,
					position: this.currentItem.css( "position" ),
					top: this.currentItem.css( "top" ),
					left: this.currentItem.css( "left" )
				};
			}
	
			if ( !helper[ 0 ].style.width || o.forceHelperSize ) {
				helper.width( this.currentItem.width() );
			}
			if ( !helper[ 0 ].style.height || o.forceHelperSize ) {
				helper.height( this.currentItem.height() );
			}
	
			return helper;
	
		},
	
		_adjustOffsetFromHelper: function( obj ) {
			if ( typeof obj === "string" ) {
				obj = obj.split( " " );
			}
			if ( $.isArray( obj ) ) {
				obj = { left: +obj[ 0 ], top: +obj[ 1 ] || 0 };
			}
			if ( "left" in obj ) {
				this.offset.click.left = obj.left + this.margins.left;
			}
			if ( "right" in obj ) {
				this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;
			}
			if ( "top" in obj ) {
				this.offset.click.top = obj.top + this.margins.top;
			}
			if ( "bottom" in obj ) {
				this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;
			}
		},
	
		_getParentOffset: function() {
	
			//Get the offsetParent and cache its position
			this.offsetParent = this.helper.offsetParent();
			var po = this.offsetParent.offset();
	
			// This is a special case where we need to modify a offset calculated on start, since the
			// following happened:
			// 1. The position of the helper is absolute, so it's position is calculated based on the
			// next positioned parent
			// 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't
			// the document, which means that the scroll is included in the initial calculation of the
			// offset of the parent, and never recalculated upon drag
			if ( this.cssPosition === "absolute" && this.scrollParent[ 0 ] !== this.document[ 0 ] &&
					$.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) {
				po.left += this.scrollParent.scrollLeft();
				po.top += this.scrollParent.scrollTop();
			}
	
			// This needs to be actually done for all browsers, since pageX/pageY includes this
			// information with an ugly IE fix
			if ( this.offsetParent[ 0 ] === this.document[ 0 ].body ||
					( this.offsetParent[ 0 ].tagName &&
					this.offsetParent[ 0 ].tagName.toLowerCase() === "html" && $.ui.ie ) ) {
				po = { top: 0, left: 0 };
			}
	
			return {
				top: po.top + ( parseInt( this.offsetParent.css( "borderTopWidth" ), 10 ) || 0 ),
				left: po.left + ( parseInt( this.offsetParent.css( "borderLeftWidth" ), 10 ) || 0 )
			};
	
		},
	
		_getRelativeOffset: function() {
	
			if ( this.cssPosition === "relative" ) {
				var p = this.currentItem.position();
				return {
					top: p.top - ( parseInt( this.helper.css( "top" ), 10 ) || 0 ) +
						this.scrollParent.scrollTop(),
					left: p.left - ( parseInt( this.helper.css( "left" ), 10 ) || 0 ) +
						this.scrollParent.scrollLeft()
				};
			} else {
				return { top: 0, left: 0 };
			}
	
		},
	
		_cacheMargins: function() {
			this.margins = {
				left: ( parseInt( this.currentItem.css( "marginLeft" ), 10 ) || 0 ),
				top: ( parseInt( this.currentItem.css( "marginTop" ), 10 ) || 0 )
			};
		},
	
		_cacheHelperProportions: function() {
			this.helperProportions = {
				width: this.helper.outerWidth(),
				height: this.helper.outerHeight()
			};
		},
	
		_setContainment: function() {
	
			var ce, co, over,
				o = this.options;
			if ( o.containment === "parent" ) {
				o.containment = this.helper[ 0 ].parentNode;
			}
			if ( o.containment === "document" || o.containment === "window" ) {
				this.containment = [
					0 - this.offset.relative.left - this.offset.parent.left,
					0 - this.offset.relative.top - this.offset.parent.top,
					o.containment === "document" ?
						this.document.width() :
						this.window.width() - this.helperProportions.width - this.margins.left,
					( o.containment === "document" ?
						( this.document.height() || document.body.parentNode.scrollHeight ) :
						this.window.height() || this.document[ 0 ].body.parentNode.scrollHeight
					) - this.helperProportions.height - this.margins.top
				];
			}
	
			if ( !( /^(document|window|parent)$/ ).test( o.containment ) ) {
				ce = $( o.containment )[ 0 ];
				co = $( o.containment ).offset();
				over = ( $( ce ).css( "overflow" ) !== "hidden" );
	
				this.containment = [
					co.left + ( parseInt( $( ce ).css( "borderLeftWidth" ), 10 ) || 0 ) +
						( parseInt( $( ce ).css( "paddingLeft" ), 10 ) || 0 ) - this.margins.left,
					co.top + ( parseInt( $( ce ).css( "borderTopWidth" ), 10 ) || 0 ) +
						( parseInt( $( ce ).css( "paddingTop" ), 10 ) || 0 ) - this.margins.top,
					co.left + ( over ? Math.max( ce.scrollWidth, ce.offsetWidth ) : ce.offsetWidth ) -
						( parseInt( $( ce ).css( "borderLeftWidth" ), 10 ) || 0 ) -
						( parseInt( $( ce ).css( "paddingRight" ), 10 ) || 0 ) -
						this.helperProportions.width - this.margins.left,
					co.top + ( over ? Math.max( ce.scrollHeight, ce.offsetHeight ) : ce.offsetHeight ) -
						( parseInt( $( ce ).css( "borderTopWidth" ), 10 ) || 0 ) -
						( parseInt( $( ce ).css( "paddingBottom" ), 10 ) || 0 ) -
						this.helperProportions.height - this.margins.top
				];
			}
	
		},
	
		_convertPositionTo: function( d, pos ) {
	
			if ( !pos ) {
				pos = this.position;
			}
			var mod = d === "absolute" ? 1 : -1,
				scroll = this.cssPosition === "absolute" &&
					!( this.scrollParent[ 0 ] !== this.document[ 0 ] &&
					$.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) ?
						this.offsetParent :
						this.scrollParent,
				scrollIsRootNode = ( /(html|body)/i ).test( scroll[ 0 ].tagName );
	
			return {
				top: (
	
					// The absolute mouse position
					pos.top	+
	
					// Only for relative positioned nodes: Relative offset from element to offset parent
					this.offset.relative.top * mod +
	
					// The offsetParent's offset without borders (offset + border)
					this.offset.parent.top * mod -
					( ( this.cssPosition === "fixed" ?
						-this.scrollParent.scrollTop() :
						( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) * mod )
				),
				left: (
	
					// The absolute mouse position
					pos.left +
	
					// Only for relative positioned nodes: Relative offset from element to offset parent
					this.offset.relative.left * mod +
	
					// The offsetParent's offset without borders (offset + border)
					this.offset.parent.left * mod	-
					( ( this.cssPosition === "fixed" ?
						-this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 :
						scroll.scrollLeft() ) * mod )
				)
			};
	
		},
	
		_generatePosition: function( event ) {
	
			var top, left,
				o = this.options,
				pageX = event.pageX,
				pageY = event.pageY,
				scroll = this.cssPosition === "absolute" &&
					!( this.scrollParent[ 0 ] !== this.document[ 0 ] &&
					$.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) ?
						this.offsetParent :
						this.scrollParent,
					scrollIsRootNode = ( /(html|body)/i ).test( scroll[ 0 ].tagName );
	
			// This is another very weird special case that only happens for relative elements:
			// 1. If the css position is relative
			// 2. and the scroll parent is the document or similar to the offset parent
			// we have to refresh the relative offset during the scroll so there are no jumps
			if ( this.cssPosition === "relative" && !( this.scrollParent[ 0 ] !== this.document[ 0 ] &&
					this.scrollParent[ 0 ] !== this.offsetParent[ 0 ] ) ) {
				this.offset.relative = this._getRelativeOffset();
			}
	
			/*
			 * - Position constraining -
			 * Constrain the position to a mix of grid, containment.
			 */
	
			if ( this.originalPosition ) { //If we are not dragging yet, we won't check for options
	
				if ( this.containment ) {
					if ( event.pageX - this.offset.click.left < this.containment[ 0 ] ) {
						pageX = this.containment[ 0 ] + this.offset.click.left;
					}
					if ( event.pageY - this.offset.click.top < this.containment[ 1 ] ) {
						pageY = this.containment[ 1 ] + this.offset.click.top;
					}
					if ( event.pageX - this.offset.click.left > this.containment[ 2 ] ) {
						pageX = this.containment[ 2 ] + this.offset.click.left;
					}
					if ( event.pageY - this.offset.click.top > this.containment[ 3 ] ) {
						pageY = this.containment[ 3 ] + this.offset.click.top;
					}
				}
	
				if ( o.grid ) {
					top = this.originalPageY + Math.round( ( pageY - this.originalPageY ) /
						o.grid[ 1 ] ) * o.grid[ 1 ];
					pageY = this.containment ?
						( ( top - this.offset.click.top >= this.containment[ 1 ] &&
							top - this.offset.click.top <= this.containment[ 3 ] ) ?
								top :
								( ( top - this.offset.click.top >= this.containment[ 1 ] ) ?
									top - o.grid[ 1 ] : top + o.grid[ 1 ] ) ) :
									top;
	
					left = this.originalPageX + Math.round( ( pageX - this.originalPageX ) /
						o.grid[ 0 ] ) * o.grid[ 0 ];
					pageX = this.containment ?
						( ( left - this.offset.click.left >= this.containment[ 0 ] &&
							left - this.offset.click.left <= this.containment[ 2 ] ) ?
								left :
								( ( left - this.offset.click.left >= this.containment[ 0 ] ) ?
									left - o.grid[ 0 ] : left + o.grid[ 0 ] ) ) :
									left;
				}
	
			}
	
			return {
				top: (
	
					// The absolute mouse position
					pageY -
	
					// Click offset (relative to the element)
					this.offset.click.top -
	
					// Only for relative positioned nodes: Relative offset from element to offset parent
					this.offset.relative.top -
	
					// The offsetParent's offset without borders (offset + border)
					this.offset.parent.top +
					( ( this.cssPosition === "fixed" ?
						-this.scrollParent.scrollTop() :
						( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) )
				),
				left: (
	
					// The absolute mouse position
					pageX -
	
					// Click offset (relative to the element)
					this.offset.click.left -
	
					// Only for relative positioned nodes: Relative offset from element to offset parent
					this.offset.relative.left -
	
					// The offsetParent's offset without borders (offset + border)
					this.offset.parent.left +
					( ( this.cssPosition === "fixed" ?
						-this.scrollParent.scrollLeft() :
						scrollIsRootNode ? 0 : scroll.scrollLeft() ) )
				)
			};
	
		},
	
		_rearrange: function( event, i, a, hardRefresh ) {
	
			a ? a[ 0 ].appendChild( this.placeholder[ 0 ] ) :
				i.item[ 0 ].parentNode.insertBefore( this.placeholder[ 0 ],
					( this.direction === "down" ? i.item[ 0 ] : i.item[ 0 ].nextSibling ) );
	
			//Various things done here to improve the performance:
			// 1. we create a setTimeout, that calls refreshPositions
			// 2. on the instance, we have a counter variable, that get's higher after every append
			// 3. on the local scope, we copy the counter variable, and check in the timeout,
			// if it's still the same
			// 4. this lets only the last addition to the timeout stack through
			this.counter = this.counter ? ++this.counter : 1;
			var counter = this.counter;
	
			this._delay( function() {
				if ( counter === this.counter ) {
	
					//Precompute after each DOM insertion, NOT on mousemove
					this.refreshPositions( !hardRefresh );
				}
			} );
	
		},
	
		_clear: function( event, noPropagation ) {
	
			this.reverting = false;
	
			// We delay all events that have to be triggered to after the point where the placeholder
			// has been removed and everything else normalized again
			var i,
				delayedTriggers = [];
	
			// We first have to update the dom position of the actual currentItem
			// Note: don't do it if the current item is already removed (by a user), or it gets
			// reappended (see #4088)
			if ( !this._noFinalSort && this.currentItem.parent().length ) {
				this.placeholder.before( this.currentItem );
			}
			this._noFinalSort = null;
	
			if ( this.helper[ 0 ] === this.currentItem[ 0 ] ) {
				for ( i in this._storedCSS ) {
					if ( this._storedCSS[ i ] === "auto" || this._storedCSS[ i ] === "static" ) {
						this._storedCSS[ i ] = "";
					}
				}
				this.currentItem.css( this._storedCSS );
				this._removeClass( this.currentItem, "ui-sortable-helper" );
			} else {
				this.currentItem.show();
			}
	
			if ( this.fromOutside && !noPropagation ) {
				delayedTriggers.push( function( event ) {
					this._trigger( "receive", event, this._uiHash( this.fromOutside ) );
				} );
			}
			if ( ( this.fromOutside ||
					this.domPosition.prev !==
					this.currentItem.prev().not( ".ui-sortable-helper" )[ 0 ] ||
					this.domPosition.parent !== this.currentItem.parent()[ 0 ] ) && !noPropagation ) {
	
				// Trigger update callback if the DOM position has changed
				delayedTriggers.push( function( event ) {
					this._trigger( "update", event, this._uiHash() );
				} );
			}
	
			// Check if the items Container has Changed and trigger appropriate
			// events.
			if ( this !== this.currentContainer ) {
				if ( !noPropagation ) {
					delayedTriggers.push( function( event ) {
						this._trigger( "remove", event, this._uiHash() );
					} );
					delayedTriggers.push( ( function( c ) {
						return function( event ) {
							c._trigger( "receive", event, this._uiHash( this ) );
						};
					} ).call( this, this.currentContainer ) );
					delayedTriggers.push( ( function( c ) {
						return function( event ) {
							c._trigger( "update", event, this._uiHash( this ) );
						};
					} ).call( this, this.currentContainer ) );
				}
			}
	
			//Post events to containers
			function delayEvent( type, instance, container ) {
				return function( event ) {
					container._trigger( type, event, instance._uiHash( instance ) );
				};
			}
			for ( i = this.containers.length - 1; i >= 0; i-- ) {
				if ( !noPropagation ) {
					delayedTriggers.push( delayEvent( "deactivate", this, this.containers[ i ] ) );
				}
				if ( this.containers[ i ].containerCache.over ) {
					delayedTriggers.push( delayEvent( "out", this, this.containers[ i ] ) );
					this.containers[ i ].containerCache.over = 0;
				}
			}
	
			//Do what was originally in plugins
			if ( this.storedCursor ) {
				this.document.find( "body" ).css( "cursor", this.storedCursor );
				this.storedStylesheet.remove();
			}
			if ( this._storedOpacity ) {
				this.helper.css( "opacity", this._storedOpacity );
			}
			if ( this._storedZIndex ) {
				this.helper.css( "zIndex", this._storedZIndex === "auto" ? "" : this._storedZIndex );
			}
	
			this.dragging = false;
	
			if ( !noPropagation ) {
				this._trigger( "beforeStop", event, this._uiHash() );
			}
	
			//$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately,
			// it unbinds ALL events from the original node!
			this.placeholder[ 0 ].parentNode.removeChild( this.placeholder[ 0 ] );
	
			if ( !this.cancelHelperRemoval ) {
				if ( this.helper[ 0 ] !== this.currentItem[ 0 ] ) {
					this.helper.remove();
				}
				this.helper = null;
			}
	
			if ( !noPropagation ) {
				for ( i = 0; i < delayedTriggers.length; i++ ) {
	
					// Trigger all delayed events
					delayedTriggers[ i ].call( this, event );
				}
				this._trigger( "stop", event, this._uiHash() );
			}
	
			this.fromOutside = false;
			return !this.cancelHelperRemoval;
	
		},
	
		_trigger: function() {
			if ( $.Widget.prototype._trigger.apply( this, arguments ) === false ) {
				this.cancel();
			}
		},
	
		_uiHash: function( _inst ) {
			var inst = _inst || this;
			return {
				helper: inst.helper,
				placeholder: inst.placeholder || $( [] ),
				position: inst.position,
				originalPosition: inst.originalPosition,
				offset: inst.positionAbs,
				item: inst.currentItem,
				sender: _inst ? _inst.element : null
			};
		}
	
	} );
	
	} ) );


/***/ }),
/* 1064 */
/***/ (function(module, exports) {

	module.exports = {"_from":"github:eoxc/eoxc#969eb010bd3392201c398f5412d94685f79ed8df","_id":"eoxc@1.1.1","_inBundle":false,"_integrity":"","_location":"/eoxc","_phantomChildren":{},"_requested":{"type":"git","raw":"eoxc@github:eoxc/eoxc#969eb010bd3392201c398f5412d94685f79ed8df","name":"eoxc","escapedName":"eoxc","rawSpec":"github:eoxc/eoxc#969eb010bd3392201c398f5412d94685f79ed8df","saveSpec":"github:eoxc/eoxc#969eb010bd3392201c398f5412d94685f79ed8df","fetchSpec":null,"gitCommittish":"969eb010bd3392201c398f5412d94685f79ed8df"},"_requiredBy":["/"],"_resolved":"github:eoxc/eoxc#969eb010bd3392201c398f5412d94685f79ed8df","_spec":"eoxc@github:eoxc/eoxc#969eb010bd3392201c398f5412d94685f79ed8df","_where":"/home/lubomir/projects/prism","author":{"name":"Fabian Schindler","email":"fabian.schindler.strauss@gmail.com"},"bugs":{"url":"https://github.com/eoxc/eoxc/issues"},"bundleDependencies":false,"dependencies":{"@turf/bbox":"^5.1.5","@turf/difference":"^5.1.5","@turf/helpers":"^5.1.5","@turf/intersect":"^5.1.5","@turf/rewind":"^5.1.5","@turf/union":"^5.1.5","D3.TimeSlider":"^1.6.1","backbone":"^1.3.3","backbone-nested":"^2.0.4","backbone.marionette":"^2.4.5","bluebird":"3.5.5","bootstrap":"^3.3.6","bootstrap-slider":"^9.7.2","core-js":"^2.4.1","d3":"^3.5.17","debounce":"^1.0.0","deep-equal":"^1.0.1","file-saver":"^1.3.3","font-awesome":"^4.6.1","font-awesome-webpack":"0.0.4","i18next":"^3.4.1","jquery":"^2.2.3","jquery-lazyload":"^1.9.7","jquery-ui":"^1.12.0","marionette.sliding-view":"^0.1.0","ol":"6.1.1","opensearch-browser":"2.0.0-alpha.5","underscore":"^1.8.3","url-parse":"^1.4.7","worker-loader":"^0.7.1","xmldom":"^0.1.27"},"deprecated":false,"description":"EOxC client generator","devDependencies":{"babel-core":"^6.5.1","babel-loader":"^6.2.4","babel-plugin-transform-class-properties":"^6.8.0","babel-plugin-transform-object-rest-spread":"^6.26.0","babel-polyfill":"^6.3.14","babel-preset-es2015":"^6.5.0","babel-register":"^6.5.1","chai":"^3.4.1","coffee-loader":"^0.7.2","coffee-script":"^1.10.0","css-loader":"^0.23.1","eslint":"^3.10.0","eslint-config-airbnb":"^13.0.0","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^2.2.3","eslint-plugin-react":"^6.6.0","exports-loader":"^0.6.3","file-loader":"^0.8.5","glob":"^6.0.3","handlebars-loader":"^1.3.0","imports-loader":"^0.6.5","json-loader":"^0.5.3","less":"^2.7.1","less-loader":"^2.2.3","minami":"^1.1.1","mocha":"^2.3.4","sinon":"^1.17.2","sinon-chai":"^2.8.0","style-loader":"^0.13.1","url-loader":"^0.5.7","webpack":"^1.12.9","webpack-dev-server":"^1.14.1"},"homepage":"https://github.com/eoxc/eoxc","keywords":[],"license":"MIT","main":"dist/eoxc.js","name":"eoxc","repository":{"type":"git","url":"git+https://github.com/eoxc/eoxc.git"},"scripts":{"build":"webpack -p","build-browser-tests":"webpack -d --config webpack.tests.config.js","build-browser-tests:watch":"npm run build-browser-tests -- --watch","build-dev":"webpack -d","dev-server":"webpack-dev-server --watch","docs":"jsdoc README.md src -d ./docs -r -P package.json -t node_modules/minami","lint":"eslint src","test":"mocha --compilers js:babel-register test/setup/node.js test/unit/**/*.js","test:watch":"npm run test -- -w","watch":"webpack -d --watch"},"version":"1.1.1"}

/***/ }),
/* 1065 */
/***/ (function(module, exports) {

	module.exports = {"version":"2020a","zones":["Africa/Abidjan|LMT GMT|g.8 0|01|-2ldXH.Q|48e5","Africa/Accra|LMT GMT +0020|.Q 0 -k|012121212121212121212121212121212121212121212121|-26BbX.8 6tzX.8 MnE 1BAk MnE 1BAk MnE 1BAk MnE 1C0k MnE 1BAk MnE 1BAk MnE 1BAk MnE 1C0k MnE 1BAk MnE 1BAk MnE 1BAk MnE 1C0k MnE 1BAk MnE 1BAk MnE 1BAk MnE 1C0k MnE 1BAk MnE 1BAk MnE 1BAk MnE 1C0k MnE 1BAk MnE 1BAk MnE|41e5","Africa/Nairobi|LMT EAT +0230 +0245|-2r.g -30 -2u -2J|01231|-1F3Cr.g 3Dzr.g okMu MFXJ|47e5","Africa/Algiers|PMT WET WEST CET CEST|-9.l 0 -10 -10 -20|0121212121212121343431312123431213|-2nco9.l cNb9.l HA0 19A0 1iM0 11c0 1oo0 Wo0 1rc0 QM0 1EM0 UM0 DA0 Imo0 rd0 De0 9Xz0 1fb0 1ap0 16K0 2yo0 mEp0 hwL0 jxA0 11A0 dDd0 17b0 11B0 1cN0 2Dy0 1cN0 1fB0 1cL0|26e5","Africa/Lagos|LMT WAT|-d.A -10|01|-22y0d.A|17e6","Africa/Bissau|LMT -01 GMT|12.k 10 0|012|-2ldX0 2xoo0|39e4","Africa/Maputo|LMT CAT|-2a.k -20|01|-2GJea.k|26e5","Africa/Cairo|EET EEST|-20 -30|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-1bIO0 vb0 1ip0 11z0 1iN0 1nz0 12p0 1pz0 10N0 1pz0 16p0 1jz0 s3d0 Vz0 1oN0 11b0 1oO0 10N0 1pz0 10N0 1pb0 10N0 1pb0 10N0 1pb0 10N0 1pz0 10N0 1pb0 10N0 1pb0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1WL0 rd0 1Rz0 wp0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1qL0 Xd0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1ny0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 WL0 1qN0 Rb0 1wp0 On0 1zd0 Lz0 1EN0 Fb0 c10 8n0 8Nd0 gL0 e10 mn0|15e6","Africa/Casablanca|LMT +00 +01|u.k 0 -10|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-2gMnt.E 130Lt.E rb0 Dd0 dVb0 b6p0 TX0 EoB0 LL0 gnd0 rz0 43d0 AL0 1Nd0 XX0 1Cp0 pz0 dEp0 4mn0 SyN0 AL0 1Nd0 wn0 1FB0 Db0 1zd0 Lz0 1Nf0 wM0 co0 go0 1o00 s00 dA0 vc0 11A0 A00 e00 y00 11A0 uM0 e00 Dc0 11A0 s00 e00 IM0 WM0 mo0 gM0 LA0 WM0 jA0 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0|32e5","Africa/Ceuta|WET WEST CET CEST|0 -10 -10 -20|010101010101010101010232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-25KN0 11z0 drd0 18p0 3HX0 17d0 1fz0 1a10 1io0 1a00 1y7o0 LL0 gnd0 rz0 43d0 AL0 1Nd0 XX0 1Cp0 pz0 dEp0 4VB0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|85e3","Africa/El_Aaiun|LMT -01 +00 +01|Q.M 10 0 -10|012323232323232323232323232323232323232323232323232323232323232323232323232323232323|-1rDz7.c 1GVA7.c 6L0 AL0 1Nd0 XX0 1Cp0 pz0 1cBB0 AL0 1Nd0 wn0 1FB0 Db0 1zd0 Lz0 1Nf0 wM0 co0 go0 1o00 s00 dA0 vc0 11A0 A00 e00 y00 11A0 uM0 e00 Dc0 11A0 s00 e00 IM0 WM0 mo0 gM0 LA0 WM0 jA0 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0|20e4","Africa/Johannesburg|SAST SAST SAST|-1u -20 -30|012121|-2GJdu 1Ajdu 1cL0 1cN0 1cL0|84e5","Africa/Juba|LMT CAT CAST EAT|-26.s -20 -30 -30|01212121212121212121212121212121213|-1yW26.s 1zK06.s 16L0 1iN0 17b0 1jd0 17b0 1ip0 17z0 1i10 17X0 1hB0 18n0 1hd0 19b0 1gp0 19z0 1iN0 17b0 1ip0 17z0 1i10 18n0 1hd0 18L0 1gN0 19b0 1gp0 19z0 1iN0 17z0 1i10 17X0 yGd0|","Africa/Khartoum|LMT CAT CAST EAT|-2a.8 -20 -30 -30|012121212121212121212121212121212131|-1yW2a.8 1zK0a.8 16L0 1iN0 17b0 1jd0 17b0 1ip0 17z0 1i10 17X0 1hB0 18n0 1hd0 19b0 1gp0 19z0 1iN0 17b0 1ip0 17z0 1i10 18n0 1hd0 18L0 1gN0 19b0 1gp0 19z0 1iN0 17z0 1i10 17X0 yGd0 HjL0|51e5","Africa/Monrovia|MMT MMT GMT|H.8 I.u 0|012|-23Lzg.Q 28G01.m|11e5","Africa/Ndjamena|LMT WAT WAST|-10.c -10 -20|0121|-2le10.c 2J3c0.c Wn0|13e5","Africa/Sao_Tome|LMT GMT WAT|A.J 0 -10|0121|-2le00 4i6N0 2q00|","Africa/Tripoli|LMT CET CEST EET|-Q.I -10 -20 -20|012121213121212121212121213123123|-21JcQ.I 1hnBQ.I vx0 4iP0 xx0 4eN0 Bb0 7ip0 U0n0 A10 1db0 1cN0 1db0 1dd0 1db0 1eN0 1bb0 1e10 1cL0 1c10 1db0 1dd0 1db0 1cN0 1db0 1q10 fAn0 1ep0 1db0 AKq0 TA0 1o00|11e5","Africa/Tunis|PMT CET CEST|-9.l -10 -20|0121212121212121212121212121212121|-2nco9.l 18pa9.l 1qM0 DA0 3Tc0 11B0 1ze0 WM0 7z0 3d0 14L0 1cN0 1f90 1ar0 16J0 1gXB0 WM0 1rA0 11c0 nwo0 Ko0 1cM0 1cM0 1rA0 10M0 zuM0 10N0 1aN0 1qM0 WM0 1qM0 11A0 1o00|20e5","Africa/Windhoek|+0130 SAST SAST CAT WAT|-1u -20 -30 -20 -10|01213434343434343434343434343434343434343434343434343|-2GJdu 1Ajdu 1cL0 1SqL0 9Io0 16P0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0|32e4","America/Adak|NST NWT NPT BST BDT AHST HST HDT|b0 a0 a0 b0 a0 a0 a0 90|012034343434343434343434343434343456767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-17SX0 8wW0 iB0 Qlb0 52O0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cm0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|326","America/Anchorage|AST AWT APT AHST AHDT YST AKST AKDT|a0 90 90 a0 90 90 90 80|012034343434343434343434343434343456767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-17T00 8wX0 iA0 Qlb0 52O0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cm0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|30e4","America/Port_of_Spain|LMT AST|46.4 40|01|-2kNvR.U|43e3","America/Araguaina|LMT -03 -02|3c.M 30 20|0121212121212121212121212121212121212121212121212121|-2glwL.c HdKL.c 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 dMN0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 ny10 Lz0|14e4","America/Argentina/Buenos_Aires|CMT -04 -03 -02|4g.M 40 30 20|01212121212121212121212121212121212121212123232323232323232|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wp0 Rb0 1wp0 TX0 A4p0 uL0 1qN0 WL0|","America/Argentina/Catamarca|CMT -04 -03 -02|4g.M 40 30 20|01212121212121212121212121212121212121212123232323132321232|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 rlB0 7B0 8zb0 uL0|","America/Argentina/Cordoba|CMT -04 -03 -02|4g.M 40 30 20|01212121212121212121212121212121212121212123232323132323232|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 A4p0 uL0 1qN0 WL0|","America/Argentina/Jujuy|CMT -04 -03 -02|4g.M 40 30 20|012121212121212121212121212121212121212121232323121323232|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1ze0 TX0 1ld0 WK0 1wp0 TX0 A4p0 uL0|","America/Argentina/La_Rioja|CMT -04 -03 -02|4g.M 40 30 20|012121212121212121212121212121212121212121232323231232321232|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Qn0 qO0 16n0 Rb0 1wp0 TX0 rlB0 7B0 8zb0 uL0|","America/Argentina/Mendoza|CMT -04 -03 -02|4g.M 40 30 20|01212121212121212121212121212121212121212123232312121321232|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1u20 SL0 1vd0 Tb0 1wp0 TW0 ri10 Op0 7TX0 uL0|","America/Argentina/Rio_Gallegos|CMT -04 -03 -02|4g.M 40 30 20|01212121212121212121212121212121212121212123232323232321232|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wp0 Rb0 1wp0 TX0 rlB0 7B0 8zb0 uL0|","America/Argentina/Salta|CMT -04 -03 -02|4g.M 40 30 20|012121212121212121212121212121212121212121232323231323232|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 A4p0 uL0|","America/Argentina/San_Juan|CMT -04 -03 -02|4g.M 40 30 20|012121212121212121212121212121212121212121232323231232321232|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Qn0 qO0 16n0 Rb0 1wp0 TX0 rld0 m10 8lb0 uL0|","America/Argentina/San_Luis|CMT -04 -03 -02|4g.M 40 30 20|012121212121212121212121212121212121212121232323121212321212|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 XX0 1q20 SL0 AN0 vDb0 m10 8lb0 8L0 jd0 1qN0 WL0 1qN0|","America/Argentina/Tucuman|CMT -04 -03 -02|4g.M 40 30 20|0121212121212121212121212121212121212121212323232313232123232|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 rlB0 4N0 8BX0 uL0 1qN0 WL0|","America/Argentina/Ushuaia|CMT -04 -03 -02|4g.M 40 30 20|01212121212121212121212121212121212121212123232323232321232|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wp0 Rb0 1wp0 TX0 rkN0 8p0 8zb0 uL0|","America/Curacao|LMT -0430 AST|4z.L 4u 40|012|-2kV7o.d 28KLS.d|15e4","America/Asuncion|AMT -04 -03|3O.E 40 30|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-1x589.k 1DKM9.k 3CL0 3Dd0 10L0 1pB0 10n0 1pB0 10n0 1pB0 1cL0 1dd0 1db0 1dd0 1cL0 1dd0 1cL0 1dd0 1cL0 1dd0 1db0 1dd0 1cL0 1dd0 1cL0 1dd0 1cL0 1dd0 1db0 1dd0 1cL0 1lB0 14n0 1dd0 1cL0 1fd0 WL0 1rd0 1aL0 1dB0 Xz0 1qp0 Xb0 1qN0 10L0 1rB0 TX0 1tB0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 WN0 1qL0 11B0 1nX0 1ip0 WL0 1qN0 WL0 1qN0 WL0 1tB0 TX0 1tB0 TX0 1tB0 19X0 1a10 1fz0 1a10 1fz0 1cN0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0|28e5","America/Atikokan|CST CDT CWT CPT EST|60 50 50 50 50|0101234|-25TQ0 1in0 Rnb0 3je0 8x30 iw0|28e2","America/Bahia_Banderas|LMT MST CST PST MDT CDT|71 70 60 80 60 50|0121212131414141414141414141414141414152525252525252525252525252525252525252525252525252525252|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 otX0 gmN0 P2N0 13Vd0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nW0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0|84e3","America/Bahia|LMT -03 -02|2y.4 30 20|01212121212121212121212121212121212121212121212121212121212121|-2glxp.U HdLp.U 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 l5B0 Rb0|27e5","America/Barbados|LMT BMT AST ADT|3W.t 3W.t 40 30|01232323232|-1Q0I1.v jsM0 1ODC1.v IL0 1ip0 17b0 1ip0 17b0 1ld0 13b0|28e4","America/Belem|LMT -03 -02|3d.U 30 20|012121212121212121212121212121|-2glwK.4 HdKK.4 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0|20e5","America/Belize|LMT CST -0530 CDT|5Q.M 60 5u 50|01212121212121212121212121212121212121212121212121213131|-2kBu7.c fPA7.c Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1f0Mu qn0 lxB0 mn0|57e3","America/Blanc-Sablon|AST ADT AWT APT|40 30 30 30|010230|-25TS0 1in0 UGp0 8x50 iu0|11e2","America/Boa_Vista|LMT -04 -03|42.E 40 30|0121212121212121212121212121212121|-2glvV.k HdKV.k 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 smp0 WL0 1tB0 2L0|62e2","America/Bogota|BMT -05 -04|4U.g 50 40|0121|-2eb73.I 38yo3.I 2en0|90e5","America/Boise|PST PDT MST MWT MPT MDT|80 70 70 60 60 60|0101023425252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252|-261q0 1nX0 11B0 1nX0 8C10 JCL0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 Dd0 1Kn0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|21e4","America/Cambridge_Bay|-00 MST MWT MPT MDDT MDT CST CDT EST|0 70 60 60 50 60 60 50 50|0123141515151515151515151515151515151515151515678651515151515151515151515151515151515151515151515151515151515151515151515151|-21Jc0 RO90 8x20 ix0 LCL0 1fA0 zgO0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11A0 1nX0 2K0 WQ0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|15e2","America/Campo_Grande|LMT -04 -03|3C.s 40 30|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2glwl.w HdLl.w 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 1C10 Lz0 1Ip0 HX0 1zd0 On0 1HB0 IL0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1HB0 FX0|77e4","America/Cancun|LMT CST EST EDT CDT|5L.4 60 50 40 50|0123232341414141414141414141414141414141412|-1UQG0 2q2o0 yLB0 1lb0 14p0 1lb0 14p0 Lz0 xB0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 Dd0|63e4","America/Caracas|CMT -0430 -04|4r.E 4u 40|01212|-2kV7w.k 28KM2.k 1IwOu kqo0|29e5","America/Cayenne|LMT -04 -03|3t.k 40 30|012|-2mrwu.E 2gWou.E|58e3","America/Panama|CMT EST|5j.A 50|01|-2uduE.o|15e5","America/Chicago|CST CDT EST CWT CPT|60 50 50 50 50|01010101010101010101010101010101010102010101010103401010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261s0 1nX0 11B0 1nX0 1wp0 TX0 WN0 1qL0 1cN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 11B0 1Hz0 14p0 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 RB0 8x30 iw0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|92e5","America/Chihuahua|LMT MST CST CDT MDT|74.k 70 60 50 60|0121212323241414141414141414141414141414141414141414141414141414141414141414141414141414141|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 2zQN0 1lb0 14p0 1lb0 14q0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0|81e4","America/Costa_Rica|SJMT CST CDT|5A.d 60 50|0121212121|-1Xd6n.L 2lu0n.L Db0 1Kp0 Db0 pRB0 15b0 1kp0 mL0|12e5","America/Creston|MST PST|70 80|010|-29DR0 43B0|53e2","America/Cuiaba|LMT -04 -03|3I.k 40 30|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2glwf.E HdLf.E 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 4a10 HX0 1zd0 On0 1HB0 IL0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1HB0 FX0|54e4","America/Danmarkshavn|LMT -03 -02 GMT|1e.E 30 20 0|01212121212121212121212121212121213|-2a5WJ.k 2z5fJ.k 19U0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 DC0|8","America/Dawson_Creek|PST PDT PWT PPT MST|80 70 70 70 70|0102301010101010101010101010101010101010101010101010101014|-25TO0 1in0 UGp0 8x10 iy0 3NB0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 ML0|12e3","America/Dawson|YST YDT YWT YPT YDDT PST PDT MST|90 80 80 80 70 80 70 70|01010230405656565656565656565656565656565656565656565656565656565656565656565656565656565657|-25TN0 1in0 1o10 13V0 Ser0 8x00 iz0 LCL0 1fA0 jrA0 fNd0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0|13e2","America/Denver|MST MDT MWT MPT|70 60 60 60|01010101023010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261r0 1nX0 11B0 1nX0 11B0 1qL0 WN0 mn0 Ord0 8x20 ix0 LCN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|26e5","America/Detroit|LMT CST EST EWT EPT EDT|5w.b 60 50 40 40 40|0123425252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252|-2Cgir.N peqr.N 156L0 8x40 iv0 6fd0 11z0 JxX1 SMX 1cN0 1cL0 aW10 1cL0 s10 1Vz0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|37e5","America/Edmonton|LMT MST MDT MWT MPT|7x.Q 70 60 60 60|0121212121212134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2yd4q.8 shdq.8 1in0 17d0 hz0 2dB0 1fz0 1a10 11z0 1qN0 WL0 1qN0 11z0 IGN0 8x20 ix0 3NB0 11z0 XQp0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|10e5","America/Eirunepe|LMT -05 -04|4D.s 50 40|0121212121212121212121212121212121|-2glvk.w HdLk.w 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 dPB0 On0 yTd0 d5X0|31e3","America/El_Salvador|LMT CST CDT|5U.M 60 50|012121|-1XiG3.c 2Fvc3.c WL0 1qN0 WL0|11e5","America/Tijuana|LMT MST PST PDT PWT PPT|7M.4 70 80 70 70 70|012123245232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-1UQE0 4PX0 8mM0 8lc0 SN0 1cL0 pHB0 83r0 zI0 5O10 1Rz0 cOO0 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 BUp0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 U10 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|20e5","America/Fort_Nelson|PST PDT PWT PPT MST|80 70 70 70 70|01023010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010104|-25TO0 1in0 UGp0 8x10 iy0 3NB0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0|39e2","America/Fort_Wayne|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|010101023010101010101010101040454545454545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 QI10 Db0 RB0 8x30 iw0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 5Tz0 1o10 qLb0 1cL0 1cN0 1cL0 1qhd0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/Fortaleza|LMT -03 -02|2y 30 20|0121212121212121212121212121212121212121|-2glxq HdLq 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 nsp0 WL0 1tB0 5z0 2mN0 On0|34e5","America/Glace_Bay|LMT AST ADT AWT APT|3X.M 40 30 30 30|012134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2IsI0.c CwO0.c 1in0 UGp0 8x50 iu0 iq10 11z0 Jg10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|19e3","America/Godthab|LMT -03 -02|3q.U 30 20|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2a5Ux.4 2z5dx.4 19U0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|17e3","America/Goose_Bay|NST NDT NST NDT NWT NPT AST ADT ADDT|3u.Q 2u.Q 3u 2u 2u 2u 40 30 20|010232323232323245232323232323232323232323232323232323232326767676767676767676767676767676767676767676768676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-25TSt.8 1in0 DXb0 2HbX.8 WL0 1qN0 WL0 1qN0 WL0 1tB0 TX0 1tB0 WL0 1qN0 WL0 1qN0 7UHu itu 1tB0 WL0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1tB0 WL0 1ld0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 S10 g0u 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14n1 1lb0 14p0 1nW0 11C0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zcX Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|76e2","America/Grand_Turk|KMT EST EDT AST|57.a 50 40 40|01212121212121212121212121212121212121212121212121212121212121212121212121232121212121212121212121212121212121212121|-2l1uQ.O 2HHBQ.O 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 5Ip0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|37e2","America/Guatemala|LMT CST CDT|62.4 60 50|0121212121|-24KhV.U 2efXV.U An0 mtd0 Nz0 ifB0 17b0 zDB0 11z0|13e5","America/Guayaquil|QMT -05 -04|5e 50 40|0121|-1yVSK 2uILK rz0|27e5","America/Guyana|LMT -0345 -03 -04|3Q.E 3J 30 40|0123|-2dvU7.k 2r6LQ.k Bxbf|80e4","America/Halifax|LMT AST ADT AWT APT|4e.o 40 30 30 30|0121212121212121212121212121212121212121212121212134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2IsHJ.A xzzJ.A 1db0 3I30 1in0 3HX0 IL0 1E10 ML0 1yN0 Pb0 1Bd0 Mn0 1Bd0 Rz0 1w10 Xb0 1w10 LX0 1w10 Xb0 1w10 Lz0 1C10 Jz0 1E10 OL0 1yN0 Un0 1qp0 Xb0 1qp0 11X0 1w10 Lz0 1HB0 LX0 1C10 FX0 1w10 Xb0 1qp0 Xb0 1BB0 LX0 1td0 Xb0 1qp0 Xb0 Rf0 8x50 iu0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 3Qp0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 3Qp0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 6i10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|39e4","America/Havana|HMT CST CDT|5t.A 50 40|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1Meuu.o 72zu.o ML0 sld0 An0 1Nd0 Db0 1Nd0 An0 6Ep0 An0 1Nd0 An0 JDd0 Mn0 1Ap0 On0 1fd0 11X0 1qN0 WL0 1wp0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 14n0 1ld0 14L0 1kN0 15b0 1kp0 1cL0 1cN0 1fz0 1a10 1fz0 1fB0 11z0 14p0 1nX0 11B0 1nX0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 14n0 1ld0 14n0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 1a10 1in0 1a10 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 17c0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 11A0 6i00 Rc0 1wo0 U00 1tA0 Rc0 1wo0 U00 1wo0 U00 1zc0 U00 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0|21e5","America/Hermosillo|LMT MST CST PST MDT|7n.Q 70 60 80 60|0121212131414141|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 otX0 gmN0 P2N0 13Vd0 1lb0 14p0 1lb0 14p0 1lb0|64e4","America/Indiana/Knox|CST CDT CWT CPT EST|60 50 50 50 50|0101023010101010101010101010101010101040101010101010101010101010101010101010101010101010141010101010101010101010101010101010101010101010101010101010101010|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 3NB0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 11z0 1o10 11z0 1o10 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 3Cn0 8wp0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 z8o0 1o00 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/Indiana/Marengo|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|0101023010101010101010104545454545414545454545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 dyN0 11z0 6fd0 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 jrz0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1VA0 LA0 1BX0 1e6p0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/Indiana/Petersburg|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|01010230101010101010101010104010101010101010101010141014545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 njX0 WN0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 3Fb0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 19co0 1o00 Rd0 1zb0 Oo0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/Indiana/Tell_City|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|01010230101010101010101010401054541010101010101010101010101010101010101010101010101010101010101010|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 njX0 WN0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 8wn0 1cN0 1cL0 1cN0 1cK0 1cN0 1cL0 1qhd0 1o00 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/Indiana/Vevay|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|010102304545454545454545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 kPB0 Awn0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1lnd0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/Indiana/Vincennes|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|01010230101010101010101010101010454541014545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 1o10 11z0 g0p0 11z0 1o10 11z0 1qL0 WN0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 caL0 1cL0 1cN0 1cL0 1qhd0 1o00 Rd0 1zb0 Oo0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/Indiana/Winamac|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|01010230101010101010101010101010101010454541054545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 jrz0 1cL0 1cN0 1cL0 1qhd0 1o00 Rd0 1za0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/Inuvik|-00 PST PDDT MST MDT|0 80 60 70 60|0121343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-FnA0 tWU0 1fA0 wPe0 2pz0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|35e2","America/Iqaluit|-00 EWT EPT EST EDDT EDT CST CDT|0 40 40 50 30 40 60 50|01234353535353535353535353535353535353535353567353535353535353535353535353535353535353535353535353535353535353535353535353|-16K00 7nX0 iv0 LCL0 1fA0 zgO0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11C0 1nX0 11A0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|67e2","America/Jamaica|KMT EST EDT|57.a 50 40|0121212121212121212121|-2l1uQ.O 2uM1Q.O 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0|94e4","America/Juneau|PST PWT PPT PDT YDT YST AKST AKDT|80 70 70 70 80 90 90 80|01203030303030303030303030403030356767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-17T20 8x10 iy0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cM0 1cM0 1cL0 1cN0 1fz0 1a10 1fz0 co0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|33e3","America/Kentucky/Louisville|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|0101010102301010101010101010101010101454545454545414545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 3Fd0 Nb0 LPd0 11z0 RB0 8x30 iw0 1nX1 e0X 9vd0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 xz0 gso0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1VA0 LA0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/Kentucky/Monticello|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|0101023010101010101010101010101010101010101010101010101010101010101010101454545454545454545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 SWp0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11A0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/La_Paz|CMT BST -04|4w.A 3w.A 40|012|-1x37r.o 13b0|19e5","America/Lima|LMT -05 -04|58.A 50 40|0121212121212121|-2tyGP.o 1bDzP.o zX0 1aN0 1cL0 1cN0 1cL0 1PrB0 zX0 1O10 zX0 6Gp0 zX0 98p0 zX0|11e6","America/Los_Angeles|PST PDT PWT PPT|80 70 70 70|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261q0 1nX0 11B0 1nX0 SgN0 8x10 iy0 5Wp1 1VaX 3dA0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1a00 1fA0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|15e6","America/Maceio|LMT -03 -02|2m.Q 30 20|012121212121212121212121212121212121212121|-2glxB.8 HdLB.8 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 dMN0 Lz0 8Q10 WL0 1tB0 5z0 2mN0 On0|93e4","America/Managua|MMT CST EST CDT|5J.c 60 50 50|0121313121213131|-1quie.M 1yAMe.M 4mn0 9Up0 Dz0 1K10 Dz0 s3F0 1KH0 DB0 9In0 k8p0 19X0 1o30 11y0|22e5","America/Manaus|LMT -04 -03|40.4 40 30|01212121212121212121212121212121|-2glvX.U HdKX.U 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 dPB0 On0|19e5","America/Martinique|FFMT AST ADT|44.k 40 30|0121|-2mPTT.E 2LPbT.E 19X0|39e4","America/Matamoros|LMT CST CDT|6E 60 50|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1UQG0 2FjC0 1nX0 i6p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 U10 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|45e4","America/Mazatlan|LMT MST CST PST MDT|75.E 70 60 80 60|0121212131414141414141414141414141414141414141414141414141414141414141414141414141414141414141|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 otX0 gmN0 P2N0 13Vd0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0|44e4","America/Menominee|CST CDT CWT CPT EST|60 50 50 50 50|01010230101041010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 1o10 11z0 LCN0 1fz0 6410 9Jb0 1cM0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|85e2","America/Merida|LMT CST EST CDT|5W.s 60 50 50|0121313131313131313131313131313131313131313131313131313131313131313131313131313131313131|-1UQG0 2q2o0 2hz0 wu30 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0|11e5","America/Metlakatla|PST PWT PPT PDT AKST AKDT|80 70 70 70 90 80|01203030303030303030303030303030304545450454545454545454545454545454545454545454|-17T20 8x10 iy0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1hU10 Rd0 1zb0 Op0 1zb0 Op0 1zb0 uM0 jB0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|14e2","America/Mexico_City|LMT MST CST CDT CWT|6A.A 70 60 50 50|012121232324232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 gEn0 TX0 3xd0 Jb0 6zB0 SL0 e5d0 17b0 1Pff0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0|20e6","America/Miquelon|LMT AST -03 -02|3I.E 40 30 20|012323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-2mKkf.k 2LTAf.k gQ10 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|61e2","America/Moncton|EST AST ADT AWT APT|50 40 30 30 30|012121212121212121212134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2IsH0 CwN0 1in0 zAo0 An0 1Nd0 An0 1Nd0 An0 1Nd0 An0 1Nd0 An0 1Nd0 An0 1K10 Lz0 1zB0 NX0 1u10 Wn0 S20 8x50 iu0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 3Cp0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14n1 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 ReX 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|64e3","America/Monterrey|LMT CST CDT|6F.g 60 50|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1UQG0 2FjC0 1nX0 i6p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0|41e5","America/Montevideo|LMT MMT -04 -03 -0330 -0230 -02 -0130|3I.P 3I.P 40 30 3u 2u 20 1u|012343434343434343434343435353636353636375363636363636363636363636363636363636363636363|-2tRUf.9 sVc0 8jcf.9 1db0 1dcu 1cLu 1dcu 1cLu ircu 11zu 1o0u 11zu 1o0u 11zu 1o0u 11zu 1qMu WLu 1qMu WLu 1fAu 1cLu 1o0u 11zu NAu 3jXu zXu Dq0u 19Xu pcu jz0 cm10 19X0 6tB0 1fbu 3o0u jX0 4vB0 xz0 3Cp0 mmu 1a10 IMu Db0 4c10 uL0 1Nd0 An0 1SN0 uL0 mp0 28L0 iPB0 un0 1SN0 xz0 1zd0 Lz0 1zd0 Rb0 1zd0 On0 1wp0 Rb0 s8p0 1fB0 1ip0 11z0 1ld0 14n0 1o10 11z0 1o10 11z0 1o10 14n0 1ld0 14n0 1ld0 14n0 1o10 11z0 1o10 11z0 1o10 11z0|17e5","America/Toronto|EST EDT EWT EPT|50 40 40 40|01010101010101010101010101010101010101010101012301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-25TR0 1in0 11Wu 1nzu 1fD0 WJ0 1wr0 Nb0 1Ap0 On0 1zd0 On0 1wp0 TX0 1tB0 TX0 1tB0 TX0 1tB0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 4kM0 8x40 iv0 1o10 11z0 1nX0 11z0 1o10 11z0 1o10 1qL0 11D0 1nX0 11B0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|65e5","America/Nassau|LMT EST EDT|59.u 50 40|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2kNuO.u 26XdO.u 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|24e4","America/New_York|EST EDT EWT EPT|50 40 40 40|01010101010101010101010101010101010101010101010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261t0 1nX0 11B0 1nX0 11B0 1qL0 1a10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 RB0 8x40 iv0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|21e6","America/Nipigon|EST EDT EWT EPT|50 40 40 40|010123010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-25TR0 1in0 Rnb0 3je0 8x40 iv0 19yN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|16e2","America/Nome|NST NWT NPT BST BDT YST AKST AKDT|b0 a0 a0 b0 a0 90 90 80|012034343434343434343434343434343456767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-17SX0 8wW0 iB0 Qlb0 52O0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cl0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|38e2","America/Noronha|LMT -02 -01|29.E 20 10|0121212121212121212121212121212121212121|-2glxO.k HdKO.k 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 nsp0 WL0 1tB0 2L0 2pB0 On0|30e2","America/North_Dakota/Beulah|MST MDT MWT MPT CST CDT|70 60 60 60 60 50|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101014545454545454545454545454545454545454545454545454545454|-261r0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Oo0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/North_Dakota/Center|MST MDT MWT MPT CST CDT|70 60 60 60 60 50|010102301010101010101010101010101010101010101010101010101014545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-261r0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14o0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/North_Dakota/New_Salem|MST MDT MWT MPT CST CDT|70 60 60 60 60 50|010102301010101010101010101010101010101010101010101010101010101010101010101010101454545454545454545454545454545454545454545454545454545454545454545454|-261r0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14o0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/Ojinaga|LMT MST CST CDT MDT|6V.E 70 60 50 60|0121212323241414141414141414141414141414141414141414141414141414141414141414141414141414141|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 2zQN0 1lb0 14p0 1lb0 14q0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 U10 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e3","America/Pangnirtung|-00 AST AWT APT ADDT ADT EDT EST CST CDT|0 40 30 30 20 30 40 50 60 50|012314151515151515151515151515151515167676767689767676767676767676767676767676767676767676767676767676767676767676767676767|-1XiM0 PnG0 8x50 iu0 LCL0 1fA0 zgO0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1o00 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11C0 1nX0 11A0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|14e2","America/Paramaribo|LMT PMT PMT -0330 -03|3E.E 3E.Q 3E.A 3u 30|01234|-2nDUj.k Wqo0.c qanX.I 1yVXN.o|24e4","America/Phoenix|MST MDT MWT|70 60 60|01010202010|-261r0 1nX0 11B0 1nX0 SgN0 4Al1 Ap0 1db0 SWqX 1cL0|42e5","America/Port-au-Prince|PPMT EST EDT|4N 50 40|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-28RHb 2FnMb 19X0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14q0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 i6n0 1nX0 11B0 1nX0 d430 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 3iN0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e5","America/Rio_Branco|LMT -05 -04|4v.c 50 40|01212121212121212121212121212121|-2glvs.M HdLs.M 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 NBd0 d5X0|31e4","America/Porto_Velho|LMT -04 -03|4f.A 40 30|012121212121212121212121212121|-2glvI.o HdKI.o 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0|37e4","America/Puerto_Rico|AST AWT APT|40 30 30|0120|-17lU0 7XT0 iu0|24e5","America/Punta_Arenas|SMT -05 -04 -03|4G.K 50 40 30|0102021212121212121232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323|-2q2jh.e fJAh.e 5knG.K 1Vzh.e jRAG.K 1pbh.e 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 nHX0 op0 blz0 ko0 Qeo0 WL0 1zd0 On0 1ip0 11z0 1o10 11z0 1qN0 WL0 1ld0 14n0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0|","America/Rainy_River|CST CDT CWT CPT|60 50 50 50|010123010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-25TQ0 1in0 Rnb0 3je0 8x30 iw0 19yN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|842","America/Rankin_Inlet|-00 CST CDDT CDT EST|0 60 40 50 50|012131313131313131313131313131313131313131313431313131313131313131313131313131313131313131313131313131313131313131313131|-vDc0 keu0 1fA0 zgO0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|26e2","America/Recife|LMT -03 -02|2j.A 30 20|0121212121212121212121212121212121212121|-2glxE.o HdLE.o 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 nsp0 WL0 1tB0 2L0 2pB0 On0|33e5","America/Regina|LMT MST MDT MWT MPT CST|6W.A 70 60 60 60 60|012121212121212121212121341212121212121212121212121215|-2AD51.o uHe1.o 1in0 s2L0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 66N0 1cL0 1cN0 19X0 1fB0 1cL0 1fB0 1cL0 1cN0 1cL0 M30 8x20 ix0 1ip0 1cL0 1ip0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 3NB0 1cL0 1cN0|19e4","America/Resolute|-00 CST CDDT CDT EST|0 60 40 50 50|012131313131313131313131313131313131313131313431313131313431313131313131313131313131313131313131313131313131313131313131|-SnA0 GWS0 1fA0 zgO0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|229","America/Santarem|LMT -04 -03|3C.M 40 30|0121212121212121212121212121212|-2glwl.c HdLl.c 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 NBd0|21e4","America/Santiago|SMT -05 -04 -03|4G.K 50 40 30|010202121212121212321232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323|-2q2jh.e fJAh.e 5knG.K 1Vzh.e jRAG.K 1pbh.e 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 nHX0 op0 9Bz0 jb0 1oN0 ko0 Qeo0 WL0 1zd0 On0 1ip0 11z0 1o10 11z0 1qN0 WL0 1ld0 14n0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1zb0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0|62e5","America/Santo_Domingo|SDMT EST EDT -0430 AST|4E 50 40 4u 40|01213131313131414|-1ttjk 1lJMk Mn0 6sp0 Lbu 1Cou yLu 1RAu wLu 1QMu xzu 1Q0u xXu 1PAu 13jB0 e00|29e5","America/Sao_Paulo|LMT -03 -02|36.s 30 20|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2glwR.w HdKR.w 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 pTd0 PX0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 1C10 Lz0 1Ip0 HX0 1zd0 On0 1HB0 IL0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1HB0 FX0|20e6","America/Scoresbysund|LMT -02 -01 +00|1r.Q 20 10 0|0121323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-2a5Ww.8 2z5ew.8 1a00 1cK0 1cL0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|452","America/Sitka|PST PWT PPT PDT YST AKST AKDT|80 70 70 70 90 90 80|01203030303030303030303030303030345656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-17T20 8x10 iy0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 co0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|90e2","America/St_Johns|NST NDT NST NDT NWT NPT NDDT|3u.Q 2u.Q 3u 2u 2u 2u 1u|01010101010101010101010101010101010102323232323232324523232323232323232323232323232323232323232323232323232323232323232323232323232323232326232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-28oit.8 14L0 1nB0 1in0 1gm0 Dz0 1JB0 1cL0 1cN0 1cL0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 1cL0 1cN0 1cL0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 1cL0 1fB0 19X0 1fB0 19X0 10O0 eKX.8 19X0 1iq0 WL0 1qN0 WL0 1qN0 WL0 1tB0 TX0 1tB0 WL0 1qN0 WL0 1qN0 7UHu itu 1tB0 WL0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1tB0 WL0 1ld0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14n1 1lb0 14p0 1nW0 11C0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zcX Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|11e4","America/Swift_Current|LMT MST MDT MWT MPT CST|7b.k 70 60 60 60 60|012134121212121212121215|-2AD4M.E uHdM.E 1in0 UGp0 8x20 ix0 1o10 17b0 1ip0 11z0 1o10 11z0 1o10 11z0 isN0 1cL0 3Cp0 1cL0 1cN0 11z0 1qN0 WL0 pMp0|16e3","America/Tegucigalpa|LMT CST CDT|5M.Q 60 50|01212121|-1WGGb.8 2ETcb.8 WL0 1qN0 WL0 GRd0 AL0|11e5","America/Thule|LMT AST ADT|4z.8 40 30|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2a5To.Q 31NBo.Q 1cL0 1cN0 1cL0 1fB0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|656","America/Thunder_Bay|CST EST EWT EPT EDT|60 50 40 40 40|0123141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141|-2q5S0 1iaN0 8x40 iv0 XNB0 1cL0 1cN0 1fz0 1cN0 1cL0 3Cp0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|11e4","America/Vancouver|PST PDT PWT PPT|80 70 70 70|0102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-25TO0 1in0 UGp0 8x10 iy0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e5","America/Whitehorse|YST YDT YWT YPT YDDT PST PDT MST|90 80 80 80 70 80 70 70|01010230405656565656565656565656565656565656565656565656565656565656565656565656565656565657|-25TN0 1in0 1o10 13V0 Ser0 8x00 iz0 LCL0 1fA0 3NA0 vrd0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0|23e3","America/Winnipeg|CST CDT CWT CPT|60 50 50 50|010101023010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aIi0 WL0 3ND0 1in0 Jap0 Rb0 aCN0 8x30 iw0 1tB0 11z0 1ip0 11z0 1o10 11z0 1o10 11z0 1rd0 10L0 1op0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 1cL0 1cN0 11z0 6i10 WL0 6i10 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1a00 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1a00 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|66e4","America/Yakutat|YST YWT YPT YDT AKST AKDT|90 80 80 80 90 80|01203030303030303030303030303030304545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-17T10 8x00 iz0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cn0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|642","America/Yellowknife|-00 MST MWT MPT MDDT MDT|0 70 60 60 50 60|012314151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151|-1pdA0 hix0 8x20 ix0 LCL0 1fA0 zgO0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|19e3","Antarctica/Casey|-00 +08 +11|0 -80 -b0|01212121|-2q00 1DjS0 T90 40P0 KL0 blz0 3m10|10","Antarctica/Davis|-00 +07 +05|0 -70 -50|01012121|-vyo0 iXt0 alj0 1D7v0 VB0 3Wn0 KN0|70","Antarctica/DumontDUrville|-00 +10|0 -a0|0101|-U0o0 cfq0 bFm0|80","Antarctica/Macquarie|AEST AEDT -00 +11|-a0 -b0 0 -b0|0102010101010101010101010101010101010101010101010101010101010101010101010101010101010101013|-29E80 19X0 4SL0 1ayy0 Lvs0 1cM0 1o00 Rc0 1wo0 Rc0 1wo0 U00 1wo0 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1qM0 WM0 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1wo0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 11A0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 11A0 1o00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1cM0 1cM0 1cM0|1","Antarctica/Mawson|-00 +06 +05|0 -60 -50|012|-CEo0 2fyk0|60","Pacific/Auckland|NZMT NZST NZST NZDT|-bu -cu -c0 -d0|01020202020202020202020202023232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323|-1GCVu Lz0 1tB0 11zu 1o0u 11zu 1o0u 11zu 1o0u 14nu 1lcu 14nu 1lcu 1lbu 11Au 1nXu 11Au 1nXu 11Au 1nXu 11Au 1nXu 11Au 1qLu WMu 1qLu 11Au 1n1bu IM0 1C00 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1qM0 14o0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1io0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00|14e5","Antarctica/Palmer|-00 -03 -04 -02|0 30 40 20|0121212121213121212121212121212121212121212121212121212121212121212121212121212121|-cao0 nD0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 jsN0 14N0 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0|40","Antarctica/Rothera|-00 -03|0 30|01|gOo0|130","Antarctica/Syowa|-00 +03|0 -30|01|-vs00|20","Antarctica/Troll|-00 +00 +02|0 0 -20|01212121212121212121212121212121212121212121212121212121212121212121|1puo0 hd0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|40","Antarctica/Vostok|-00 +06|0 -60|01|-tjA0|25","Europe/Oslo|CET CEST|-10 -20|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2awM0 Qm0 W6o0 5pf0 WM0 1fA0 1cM0 1cM0 1cM0 1cM0 wJc0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1qM0 WM0 zpc0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|62e4","Asia/Riyadh|LMT +03|-36.Q -30|01|-TvD6.Q|57e5","Asia/Almaty|LMT +05 +06 +07|-57.M -50 -60 -70|012323232323232323232321232323232323232323232323232|-1Pc57.M eUo7.M 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0|15e5","Asia/Amman|LMT EET EEST|-2n.I -20 -30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1yW2n.I 1HiMn.I KL0 1oN0 11b0 1oN0 11b0 1pd0 1dz0 1cp0 11b0 1op0 11b0 fO10 1db0 1e10 1cL0 1cN0 1cL0 1cN0 1fz0 1pd0 10n0 1ld0 14n0 1hB0 15b0 1ip0 19X0 1cN0 1cL0 1cN0 17b0 1ld0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1So0 y00 1fc0 1dc0 1co0 1dc0 1cM0 1cM0 1cM0 1o00 11A0 1lc0 17c0 1cM0 1cM0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 4bX0 Dd0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|25e5","Asia/Anadyr|LMT +12 +13 +14 +11|-bN.U -c0 -d0 -e0 -b0|01232121212121212121214121212121212121212121212121212121212141|-1PcbN.U eUnN.U 23CL0 1db0 2q10 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|13e3","Asia/Aqtau|LMT +04 +05 +06|-3l.4 -40 -50 -60|012323232323232323232123232312121212121212121212|-1Pc3l.4 eUnl.4 24PX0 2pX0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0|15e4","Asia/Aqtobe|LMT +04 +05 +06|-3M.E -40 -50 -60|0123232323232323232321232323232323232323232323232|-1Pc3M.E eUnM.E 23CL0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0|27e4","Asia/Ashgabat|LMT +04 +05 +06|-3R.w -40 -50 -60|0123232323232323232323212|-1Pc3R.w eUnR.w 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0|41e4","Asia/Atyrau|LMT +03 +05 +06 +04|-3r.I -30 -50 -60 -40|01232323232323232323242323232323232324242424242|-1Pc3r.I eUor.I 24PW0 2pX0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 2sp0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0|","Asia/Baghdad|BMT +03 +04|-2V.A -30 -40|012121212121212121212121212121212121212121212121212121|-26BeV.A 2ACnV.A 11b0 1cp0 1dz0 1dd0 1db0 1cN0 1cp0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1de0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0|66e5","Asia/Qatar|LMT +04 +03|-3q.8 -40 -30|012|-21Jfq.8 27BXq.8|96e4","Asia/Baku|LMT +03 +04 +05|-3j.o -30 -40 -50|01232323232323232323232123232323232323232323232323232323232323232|-1Pc3j.o 1jUoj.o WCL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 1cM0 9Je0 1o00 11z0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|27e5","Asia/Bangkok|BMT +07|-6G.4 -70|01|-218SG.4|15e6","Asia/Barnaul|LMT +06 +07 +08|-5z -60 -70 -80|0123232323232323232323212323232321212121212121212121212121212121212|-21S5z pCnz 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 p90 LE0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0|","Asia/Beirut|EET EEST|-20 -30|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-21aq0 1on0 1410 1db0 19B0 1in0 1ip0 WL0 1lQp0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 11b0 q6N0 En0 1oN0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 11b0 1op0 11b0 dA10 17b0 1iN0 17b0 1iN0 17b0 1iN0 17b0 1vB0 SL0 1mp0 13z0 1iN0 17b0 1iN0 17b0 1jd0 12n0 1a10 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0|22e5","Asia/Bishkek|LMT +05 +06 +07|-4W.o -50 -60 -70|012323232323232323232321212121212121212121212121212|-1Pc4W.o eUnW.o 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2e00 1tX0 17b0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1cPu 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0|87e4","Asia/Brunei|LMT +0730 +08|-7D.E -7u -80|012|-1KITD.E gDc9.E|42e4","Asia/Kolkata|MMT IST +0630|-5l.a -5u -6u|012121|-2zOtl.a 1r2LP.a 1un0 HB0 7zX0|15e6","Asia/Chita|LMT +08 +09 +10|-7x.Q -80 -90 -a0|012323232323232323232321232323232323232323232323232323232323232312|-21Q7x.Q pAnx.Q 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3re0|33e4","Asia/Choibalsan|LMT +07 +08 +10 +09|-7C -70 -80 -a0 -90|0123434343434343434343434343434343434343434343424242|-2APHC 2UkoC cKn0 1da0 1dd0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 6hD0 11z0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 3Db0 h1f0 1cJ0 1cP0 1cJ0|38e3","Asia/Shanghai|CST CDT|-80 -90|01010101010101010101010101010|-23uw0 18n0 OjB0 Rz0 11d0 1wL0 A10 8HX0 1G10 Tz0 1ip0 1jX0 1cN0 11b0 1oN0 aL0 1tU30 Rb0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0|23e6","Asia/Colombo|MMT +0530 +06 +0630|-5j.w -5u -60 -6u|01231321|-2zOtj.w 1rFbN.w 1zzu 7Apu 23dz0 11zu n3cu|22e5","Asia/Dhaka|HMT +0630 +0530 +06 +07|-5R.k -6u -5u -60 -70|0121343|-18LFR.k 1unn.k HB0 m6n0 2kxbu 1i00|16e6","Asia/Damascus|LMT EET EEST|-2p.c -20 -30|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-21Jep.c Hep.c 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1xRB0 11X0 1oN0 10L0 1pB0 11b0 1oN0 10L0 1mp0 13X0 1oN0 11b0 1pd0 11b0 1oN0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 Nb0 1AN0 Nb0 bcp0 19X0 1gp0 19X0 3ld0 1xX0 Vd0 1Bz0 Sp0 1vX0 10p0 1dz0 1cN0 1cL0 1db0 1db0 1g10 1an0 1ap0 1db0 1fd0 1db0 1cN0 1db0 1dd0 1db0 1cp0 1dz0 1c10 1dX0 1cN0 1db0 1dd0 1db0 1cN0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1db0 1cN0 1db0 1cN0 19z0 1fB0 1qL0 11B0 1on0 Wp0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0|26e5","Asia/Dili|LMT +08 +09|-8m.k -80 -90|01212|-2le8m.k 1dnXm.k 1nfA0 Xld0|19e4","Asia/Dubai|LMT +04|-3F.c -40|01|-21JfF.c|39e5","Asia/Dushanbe|LMT +05 +06 +07|-4z.c -50 -60 -70|012323232323232323232321|-1Pc4z.c eUnz.c 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2hB0|76e4","Asia/Famagusta|LMT EET EEST +03|-2f.M -20 -30 -30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212312121212121212121212121212121212121212121|-1Vc2f.M 2a3cf.M 1cL0 1qp0 Xz0 19B0 19X0 1fB0 1db0 1cp0 1cL0 1fB0 19X0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1o30 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 15U0 2Ks0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|","Asia/Gaza|EET EEST IST IDT|-20 -30 -20 -30|0101010101010101010101010101010123232323232323232323232323232320101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-1c2q0 5Rb0 10r0 1px0 10N0 1pz0 16p0 1jB0 16p0 1jx0 pBd0 Vz0 1oN0 11b0 1oO0 10N0 1pz0 10N0 1pb0 10N0 1pb0 10N0 1pb0 10N0 1pz0 10N0 1pb0 10N0 1pb0 11d0 1oL0 dW0 hfB0 Db0 1fB0 Rb0 bXd0 gM0 8Q00 IM0 1wM0 11z0 1C10 IL0 1s10 10n0 1o10 WL0 1zd0 On0 1ld0 11z0 1o10 14n0 1o10 14n0 1nd0 12n0 1nd0 Xz0 1q10 12n0 M10 C00 17c0 1io0 17c0 1io0 17c0 1o00 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 17c0 1io0 18N0 1bz0 19z0 1gp0 1610 1iL0 11z0 1o10 14o0 1lA1 SKX 1xd1 MKX 1AN0 1a00 1fA0 1cL0 1cN0 1nX0 1210 1nz0 1220 1qL0 WN0 1qL0 WN0 1qL0 11c0 1oo0 11c0 1rc0 Wo0 1rc0 Wo0 1rc0 11c0 1oo0 11c0 1oo0 11c0 1oo0 11c0 1rc0 Wo0 1rc0 11c0 1oo0 11c0 1oo0 11c0 1oo0 11c0 1oo0 11c0 1rc0 Wo0 1rc0 11c0 1oo0 11c0 1oo0 11c0 1oo0 11c0 1rc0|18e5","Asia/Hebron|EET EEST IST IDT|-20 -30 -20 -30|010101010101010101010101010101012323232323232323232323232323232010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-1c2q0 5Rb0 10r0 1px0 10N0 1pz0 16p0 1jB0 16p0 1jx0 pBd0 Vz0 1oN0 11b0 1oO0 10N0 1pz0 10N0 1pb0 10N0 1pb0 10N0 1pb0 10N0 1pz0 10N0 1pb0 10N0 1pb0 11d0 1oL0 dW0 hfB0 Db0 1fB0 Rb0 bXd0 gM0 8Q00 IM0 1wM0 11z0 1C10 IL0 1s10 10n0 1o10 WL0 1zd0 On0 1ld0 11z0 1o10 14n0 1o10 14n0 1nd0 12n0 1nd0 Xz0 1q10 12n0 M10 C00 17c0 1io0 17c0 1io0 17c0 1o00 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 17c0 1io0 18N0 1bz0 19z0 1gp0 1610 1iL0 12L0 1mN0 14o0 1lc0 Tb0 1xd1 MKX bB0 cn0 1cN0 1a00 1fA0 1cL0 1cN0 1nX0 1210 1nz0 1220 1qL0 WN0 1qL0 WN0 1qL0 11c0 1oo0 11c0 1rc0 Wo0 1rc0 Wo0 1rc0 11c0 1oo0 11c0 1oo0 11c0 1oo0 11c0 1rc0 Wo0 1rc0 11c0 1oo0 11c0 1oo0 11c0 1oo0 11c0 1oo0 11c0 1rc0 Wo0 1rc0 11c0 1oo0 11c0 1oo0 11c0 1oo0 11c0 1rc0|25e4","Asia/Ho_Chi_Minh|LMT PLMT +07 +08 +09|-76.E -76.u -70 -80 -90|0123423232|-2yC76.E bK00.a 1h7b6.u 5lz0 18o0 3Oq0 k5b0 aW00 BAM0|90e5","Asia/Hong_Kong|LMT HKT HKST HKWT JST|-7A.G -80 -90 -8u -90|0123412121212121212121212121212121212121212121212121212121212121212121|-2CFH0 1taO0 Hc0 xUu 9tBu 11z0 1tDu Rc0 1wo0 11A0 1cM0 11A0 1o00 11A0 1o00 11A0 1o00 14o0 1o00 11A0 1nX0 U10 1tz0 U10 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 U10 1tz0 U10 1wn0 Rd0 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 17d0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 s10 1Vz0 1cN0 1cL0 1cN0 1cL0 6fd0 14n0|73e5","Asia/Hovd|LMT +06 +07 +08|-66.A -60 -70 -80|012323232323232323232323232323232323232323232323232|-2APG6.A 2Uko6.A cKn0 1db0 1dd0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 6hD0 11z0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 kEp0 1cJ0 1cP0 1cJ0|81e3","Asia/Irkutsk|IMT +07 +08 +09|-6V.5 -70 -80 -90|01232323232323232323232123232323232323232323232323232323232323232|-21zGV.5 pjXV.5 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|60e4","Europe/Istanbul|IMT EET EEST +03 +04|-1U.U -20 -30 -30 -40|0121212121212121212121212121212121212121212121234312121212121212121212121212121212121212121212121212121212121212123|-2ogNU.U dzzU.U 11b0 8tB0 1on0 1410 1db0 19B0 1in0 3Rd0 Un0 1oN0 11b0 zSN0 CL0 mp0 1Vz0 1gN0 8yn0 1yp0 ML0 1kp0 17b0 1ip0 17b0 1fB0 19X0 1ip0 19X0 1ip0 17b0 qdB0 38L0 1jd0 Tz0 l6O0 11A0 WN0 1qL0 TB0 1tX0 U10 1tz0 11B0 1in0 17d0 z90 cne0 pb0 2Cp0 1800 14o0 1dc0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1a00 1fA0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WO0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 Xc0 1qo0 WM0 1qM0 11A0 1o00 1200 1nA0 11A0 1tA0 U00 15w0|13e6","Asia/Jakarta|BMT +0720 +0730 +09 +08 WIB|-77.c -7k -7u -90 -80 -70|01232425|-1Q0Tk luM0 mPzO 8vWu 6kpu 4PXu xhcu|31e6","Asia/Jayapura|LMT +09 +0930 WIT|-9m.M -90 -9u -90|0123|-1uu9m.M sMMm.M L4nu|26e4","Asia/Jerusalem|JMT IST IDT IDDT|-2k.E -20 -30 -40|012121212121321212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-26Bek.E SyMk.E 5Rb0 10r0 1px0 10N0 1pz0 16p0 1jB0 16p0 1jx0 3LB0 Em0 or0 1cn0 1dB0 16n0 10O0 1ja0 1tC0 14o0 1cM0 1a00 11A0 1Na0 An0 1MP0 AJ0 1Kp0 LC0 1oo0 Wl0 EQN0 Db0 1fB0 Rb0 bXd0 gM0 8Q00 IM0 1wM0 11z0 1C10 IL0 1s10 10n0 1o10 WL0 1zd0 On0 1ld0 11z0 1o10 14n0 1o10 14n0 1nd0 12n0 1nd0 Xz0 1q10 12n0 1hB0 1dX0 1ep0 1aL0 1eN0 17X0 1nf0 11z0 1tB0 19W0 1e10 17b0 1ep0 1gL0 18N0 1fz0 1eN0 17b0 1gq0 1gn0 19d0 1dz0 1c10 17X0 1hB0 1gn0 19d0 1dz0 1c10 17X0 1kp0 1dz0 1c10 1aL0 1eN0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0|81e4","Asia/Kabul|+04 +0430|-40 -4u|01|-10Qs0|46e5","Asia/Kamchatka|LMT +11 +12 +13|-ay.A -b0 -c0 -d0|012323232323232323232321232323232323232323232323232323232323212|-1SLKy.A ivXy.A 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|18e4","Asia/Karachi|LMT +0530 +0630 +05 PKT PKST|-4s.c -5u -6u -50 -50 -60|012134545454|-2xoss.c 1qOKW.c 7zX0 eup0 LqMu 1fy00 1cL0 dK10 11b0 1610 1jX0|24e6","Asia/Urumqi|LMT +06|-5O.k -60|01|-1GgtO.k|32e5","Asia/Kathmandu|LMT +0530 +0545|-5F.g -5u -5J|012|-21JhF.g 2EGMb.g|12e5","Asia/Khandyga|LMT +08 +09 +10 +11|-92.d -80 -90 -a0 -b0|0123232323232323232323212323232323232323232323232343434343434343432|-21Q92.d pAp2.d 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 qK0 yN0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 17V0 7zD0|66e2","Asia/Krasnoyarsk|LMT +06 +07 +08|-6b.q -60 -70 -80|01232323232323232323232123232323232323232323232323232323232323232|-21Hib.q prAb.q 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|10e5","Asia/Kuala_Lumpur|SMT +07 +0720 +0730 +09 +08|-6T.p -70 -7k -7u -90 -80|0123435|-2Bg6T.p 17anT.p l5XE 17bO 8Fyu 1so1u|71e5","Asia/Kuching|LMT +0730 +08 +0820 +09|-7l.k -7u -80 -8k -90|0123232323232323242|-1KITl.k gDbP.k 6ynu AnE 1O0k AnE 1NAk AnE 1NAk AnE 1NAk AnE 1O0k AnE 1NAk AnE pAk 8Fz0|13e4","Asia/Macau|LMT CST +09 +10 CDT|-7y.a -80 -90 -a0 -90|012323214141414141414141414141414141414141414141414141414141414141414141|-2CFHy.a 1uqKy.a PX0 1kn0 15B0 11b0 4Qq0 1oM0 11c0 1ko0 1u00 11A0 1cM0 11c0 1o00 11A0 1o00 11A0 1oo0 1400 1o00 11A0 1o00 U00 1tA0 U00 1wo0 Rc0 1wru U10 1tz0 U10 1tz0 U10 1tz0 U10 1wn0 Rd0 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 17d0 1cK0 1cO0 1cK0 1cO0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 s10 1Vz0 1cN0 1cL0 1cN0 1cL0 6fd0 14n0|57e4","Asia/Magadan|LMT +10 +11 +12|-a3.c -a0 -b0 -c0|012323232323232323232321232323232323232323232323232323232323232312|-1Pca3.c eUo3.c 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3Cq0|95e3","Asia/Makassar|LMT MMT +08 +09 WITA|-7V.A -7V.A -80 -90 -80|01234|-21JjV.A vfc0 myLV.A 8ML0|15e5","Asia/Manila|PST PDT JST|-80 -90 -90|010201010|-1kJI0 AL0 cK10 65X0 mXB0 vX0 VK10 1db0|24e6","Asia/Nicosia|LMT EET EEST|-2d.s -20 -30|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1Vc2d.s 2a3cd.s 1cL0 1qp0 Xz0 19B0 19X0 1fB0 1db0 1cp0 1cL0 1fB0 19X0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1o30 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|32e4","Asia/Novokuznetsk|LMT +06 +07 +08|-5M.M -60 -70 -80|012323232323232323232321232323232323232323232323232323232323212|-1PctM.M eULM.M 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|55e4","Asia/Novosibirsk|LMT +06 +07 +08|-5v.E -60 -70 -80|0123232323232323232323212323212121212121212121212121212121212121212|-21Qnv.E pAFv.E 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 ml0 Os0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 4eN0|15e5","Asia/Omsk|LMT +05 +06 +07|-4R.u -50 -60 -70|01232323232323232323232123232323232323232323232323232323232323232|-224sR.u pMLR.u 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|12e5","Asia/Oral|LMT +03 +05 +06 +04|-3p.o -30 -50 -60 -40|01232323232323232424242424242424242424242424242|-1Pc3p.o eUop.o 23CK0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 1cM0 1cM0 IM0 1EM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0|27e4","Asia/Pontianak|LMT PMT +0730 +09 +08 WITA WIB|-7h.k -7h.k -7u -90 -80 -80 -70|012324256|-2ua7h.k XE00 munL.k 8Rau 6kpu 4PXu xhcu Wqnu|23e4","Asia/Pyongyang|LMT KST JST KST|-8n -8u -90 -90|012313|-2um8n 97XR 1lTzu 2Onc0 6BA0|29e5","Asia/Qostanay|LMT +04 +05 +06|-4e.s -40 -50 -60|012323232323232323232123232323232323232323232323|-1Pc4e.s eUoe.s 23CL0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0|","Asia/Qyzylorda|LMT +04 +05 +06|-4l.Q -40 -50 -60|01232323232323232323232323232323232323232323232|-1Pc4l.Q eUol.Q 23CL0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 3ao0 1EM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 zQl0|73e4","Asia/Rangoon|RMT +0630 +09|-6o.L -6u -90|0121|-21Jio.L SmnS.L 7j9u|48e5","Asia/Sakhalin|LMT +09 +11 +12 +10|-9u.M -90 -b0 -c0 -a0|01232323232323232323232423232323232424242424242424242424242424242|-2AGVu.M 1BoMu.M 1qFa0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 2pB0 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0|58e4","Asia/Samarkand|LMT +04 +05 +06|-4r.R -40 -50 -60|01232323232323232323232|-1Pc4r.R eUor.R 23CL0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0|36e4","Asia/Seoul|LMT KST JST KST KDT KDT|-8r.Q -8u -90 -90 -a0 -9u|012343434343151515151515134343|-2um8r.Q 97XV.Q 1m1zu 6CM0 Fz0 1kN0 14n0 1kN0 14L0 1zd0 On0 69B0 2I0u OL0 1FB0 Rb0 1qN0 TX0 1tB0 TX0 1tB0 TX0 1tB0 TX0 2ap0 12FBu 11A0 1o00 11A0|23e6","Asia/Srednekolymsk|LMT +10 +11 +12|-ae.Q -a0 -b0 -c0|01232323232323232323232123232323232323232323232323232323232323232|-1Pcae.Q eUoe.Q 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|35e2","Asia/Taipei|CST JST CDT|-80 -90 -90|01020202020202020202020202020202020202020|-1iw80 joM0 1yo0 Tz0 1ip0 1jX0 1cN0 11b0 1oN0 11b0 1oN0 11b0 1oN0 11b0 10N0 1BX0 10p0 1pz0 10p0 1pz0 10p0 1db0 1dd0 1db0 1cN0 1db0 1cN0 1db0 1cN0 1db0 1BB0 ML0 1Bd0 ML0 uq10 1db0 1cN0 1db0 97B0 AL0|74e5","Asia/Tashkent|LMT +05 +06 +07|-4B.b -50 -60 -70|012323232323232323232321|-1Pc4B.b eUnB.b 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0|23e5","Asia/Tbilisi|TBMT +03 +04 +05|-2X.b -30 -40 -50|0123232323232323232323212121232323232323232323212|-1Pc2X.b 1jUnX.b WCL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 1cK0 1cL0 1cN0 1cL0 1cN0 2pz0 1cL0 1fB0 3Nz0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 An0 Os0 WM0|11e5","Asia/Tehran|LMT TMT +0330 +04 +05 +0430|-3p.I -3p.I -3u -40 -50 -4u|01234325252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252|-2btDp.I 1d3c0 1huLT.I TXu 1pz0 sN0 vAu 1cL0 1dB0 1en0 pNB0 UL0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 64p0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0|14e6","Asia/Thimphu|LMT +0530 +06|-5W.A -5u -60|012|-Su5W.A 1BGMs.A|79e3","Asia/Tokyo|JST JDT|-90 -a0|010101010|-QJJ0 Rc0 1lc0 14o0 1zc0 Oo0 1zc0 Oo0|38e6","Asia/Tomsk|LMT +06 +07 +08|-5D.P -60 -70 -80|0123232323232323232323212323232323232323232323212121212121212121212|-21NhD.P pxzD.P 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 co0 1bB0 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3Qp0|10e5","Asia/Ulaanbaatar|LMT +07 +08 +09|-77.w -70 -80 -90|012323232323232323232323232323232323232323232323232|-2APH7.w 2Uko7.w cKn0 1db0 1dd0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 6hD0 11z0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 kEp0 1cJ0 1cP0 1cJ0|12e5","Asia/Ust-Nera|LMT +08 +09 +12 +11 +10|-9w.S -80 -90 -c0 -b0 -a0|012343434343434343434345434343434343434343434343434343434343434345|-21Q9w.S pApw.S 23CL0 1d90 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 17V0 7zD0|65e2","Asia/Vladivostok|LMT +09 +10 +11|-8L.v -90 -a0 -b0|01232323232323232323232123232323232323232323232323232323232323232|-1SJIL.v itXL.v 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|60e4","Asia/Yakutsk|LMT +08 +09 +10|-8C.W -80 -90 -a0|01232323232323232323232123232323232323232323232323232323232323232|-21Q8C.W pAoC.W 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|28e4","Asia/Yekaterinburg|LMT PMT +04 +05 +06|-42.x -3J.5 -40 -50 -60|012343434343434343434343234343434343434343434343434343434343434343|-2ag42.x 7mQh.s qBvJ.5 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|14e5","Asia/Yerevan|LMT +03 +04 +05|-2W -30 -40 -50|0123232323232323232323212121212323232323232323232323232323232|-1Pc2W 1jUnW WCL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 4RX0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|13e5","Atlantic/Azores|HMT -02 -01 +00 WET|1S.w 20 10 0 0|01212121212121212121212121212121212121212121232123212321232121212121212121212121212121212121212121232323232323232323232323232323234323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-2ldW0 aPX0 Sp0 LX0 1vc0 Tc0 1uM0 SM0 1vc0 Tc0 1vc0 SM0 1vc0 6600 1co0 3E00 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 3I00 17c0 1cM0 1cM0 3Fc0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 1tA0 1cM0 1dc0 1400 gL0 IM0 s10 U00 dX0 Rc0 pd0 Rc0 gL0 Oo0 pd0 Rc0 gL0 Oo0 pd0 14o0 1cM0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 3Co0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 qIl0 1cM0 1fA0 1cM0 1cM0 1cN0 1cL0 1cN0 1cM0 1cM0 1cM0 1cM0 1cN0 1cL0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cL0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|25e4","Atlantic/Bermuda|LMT AST ADT|4j.i 40 30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1BnRE.G 1LTbE.G 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|65e3","Atlantic/Canary|LMT -01 WET WEST|11.A 10 0 -10|01232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-1UtaW.o XPAW.o 1lAK0 1a10 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|54e4","Atlantic/Cape_Verde|LMT -02 -01|1y.4 20 10|01212|-2ldW0 1eEo0 7zX0 1djf0|50e4","Atlantic/Faroe|LMT WET WEST|r.4 0 -10|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2uSnw.U 2Wgow.U 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|49e3","Atlantic/Madeira|FMT -01 +00 +01 WET WEST|17.A 10 0 -10 0 -10|01212121212121212121212121212121212121212121232123212321232121212121212121212121212121212121212121454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-2ldX0 aPX0 Sp0 LX0 1vc0 Tc0 1uM0 SM0 1vc0 Tc0 1vc0 SM0 1vc0 6600 1co0 3E00 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 3I00 17c0 1cM0 1cM0 3Fc0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 1tA0 1cM0 1dc0 1400 gL0 IM0 s10 U00 dX0 Rc0 pd0 Rc0 gL0 Oo0 pd0 Rc0 gL0 Oo0 pd0 14o0 1cM0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 3Co0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 qIl0 1cM0 1fA0 1cM0 1cM0 1cN0 1cL0 1cN0 1cM0 1cM0 1cM0 1cM0 1cN0 1cL0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|27e4","Atlantic/Reykjavik|LMT -01 +00 GMT|1s 10 0 0|012121212121212121212121212121212121212121212121212121212121212121213|-2uWmw mfaw 1Bd0 ML0 1LB0 Cn0 1LB0 3fX0 C10 HrX0 1cO0 LB0 1EL0 LA0 1C00 Oo0 1wo0 Rc0 1wo0 Rc0 1wo0 Rc0 1zc0 Oo0 1zc0 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1lc0 14o0 1o00 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1o00 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1o00 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1o00 14o0|12e4","Atlantic/South_Georgia|-02|20|0||30","Atlantic/Stanley|SMT -04 -03 -02|3P.o 40 30 20|012121212121212323212121212121212121212121212121212121212121212121212|-2kJw8.A 12bA8.A 19X0 1fB0 19X0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 Cn0 1Cc10 WL0 1qL0 U10 1tz0 2mN0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1tz0 U10 1tz0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1tz0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qN0 U10 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 U10 1tz0 U10 1tz0 U10 1wn0 U10 1tz0 U10 1tz0 U10|21e2","Australia/Sydney|AEST AEDT|-a0 -b0|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101|-293lX xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 14o0 1o00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1tA0 WM0 1tA0 U00 1tA0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 11A0 1o00 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0|40e5","Australia/Adelaide|ACST ACDT|-9u -au|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101|-293lt xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 Oo0 1zc0 WM0 1qM0 Rc0 1zc0 U00 1tA0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0|11e5","Australia/Brisbane|AEST AEDT|-a0 -b0|01010101010101010|-293lX xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 H1A0 Oo0 1zc0 Oo0 1zc0 Oo0|20e5","Australia/Broken_Hill|ACST ACDT|-9u -au|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101|-293lt xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 14o0 1o00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1tA0 WM0 1tA0 U00 1tA0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0|18e3","Australia/Currie|AEST AEDT|-a0 -b0|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101|-29E80 19X0 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1qM0 WM0 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1wo0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 11A0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 11A0 1o00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0|746","Australia/Darwin|ACST ACDT|-9u -au|010101010|-293lt xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0|12e4","Australia/Eucla|+0845 +0945|-8J -9J|0101010101010101010|-293kI xcX 10jd0 yL0 1cN0 1cL0 1gSp0 Oo0 l5A0 Oo0 iJA0 G00 zU00 IM0 1qM0 11A0 1o00 11A0|368","Australia/Hobart|AEST AEDT|-a0 -b0|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101|-29E80 19X0 10jd0 yL0 1cN0 1cL0 1fB0 19X0 VfB0 1cM0 1o00 Rc0 1wo0 Rc0 1wo0 U00 1wo0 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1qM0 WM0 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1wo0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 11A0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 11A0 1o00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0|21e4","Australia/Lord_Howe|AEST +1030 +1130 +11|-a0 -au -bu -b0|0121212121313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313|raC0 1zdu Rb0 1zd0 On0 1zd0 On0 1zd0 On0 1zd0 TXu 1qMu WLu 1tAu WLu 1tAu TXu 1tAu Onu 1zcu Onu 1zcu Onu 1zcu Rbu 1zcu Onu 1zcu Onu 1zcu 11zu 1o0u 11zu 1o0u 11zu 1o0u 11zu 1qMu WLu 11Au 1nXu 1qMu 11zu 1o0u 11zu 1o0u 11zu 1qMu WLu 1qMu 11zu 1o0u WLu 1qMu 14nu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu|347","Australia/Lindeman|AEST AEDT|-a0 -b0|010101010101010101010|-293lX xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 H1A0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0|10","Australia/Melbourne|AEST AEDT|-a0 -b0|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101|-293lX xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1qM0 11A0 1tA0 U00 1tA0 U00 1tA0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 11A0 1o00 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0|39e5","Australia/Perth|AWST AWDT|-80 -90|0101010101010101010|-293jX xcX 10jd0 yL0 1cN0 1cL0 1gSp0 Oo0 l5A0 Oo0 iJA0 G00 zU00 IM0 1qM0 11A0 1o00 11A0|18e5","CET|CET CEST|-10 -20|01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 16M0 1gMM0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|","Pacific/Easter|EMT -07 -06 -05|7h.s 70 60 50|012121212121212121212121212123232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323|-1uSgG.w 1s4IG.w WL0 1zd0 On0 1ip0 11z0 1o10 11z0 1qN0 WL0 1ld0 14n0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 2pA0 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1zb0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0|30e2","CST6CDT|CST CDT CWT CPT|60 50 50 50|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","EET|EET EEST|-20 -30|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|hDB0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|","Europe/Dublin|DMT IST GMT BST IST|p.l -y.D 0 -10 -10|01232323232324242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242|-2ax9y.D Rc0 1fzy.D 14M0 1fc0 1g00 1co0 1dc0 1co0 1oo0 1400 1dc0 19A0 1io0 1io0 WM0 1o00 14o0 1o00 17c0 1io0 17c0 1fA0 1a00 1lc0 17c0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1cM0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1io0 1qM0 Dc0 g600 14o0 1wo0 17c0 1io0 11A0 1o00 17c0 1fA0 1a00 1fA0 1cM0 1fA0 1a00 17c0 1fA0 1a00 1io0 17c0 1lc0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1a00 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1tA0 IM0 90o0 U00 1tA0 U00 1tA0 U00 1tA0 U00 1tA0 WM0 1qM0 WM0 1qM0 WM0 1tA0 U00 1tA0 U00 1tA0 11z0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 14o0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|12e5","EST|EST|50|0||","EST5EDT|EST EDT EWT EPT|50 40 40 40|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261t0 1nX0 11B0 1nX0 SgN0 8x40 iv0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","Etc/GMT-0|GMT|0|0||","Etc/GMT-1|+01|-10|0||","Pacific/Port_Moresby|+10|-a0|0||25e4","Etc/GMT-11|+11|-b0|0||","Pacific/Tarawa|+12|-c0|0||29e3","Etc/GMT-13|+13|-d0|0||","Etc/GMT-14|+14|-e0|0||","Etc/GMT-2|+02|-20|0||","Etc/GMT-3|+03|-30|0||","Etc/GMT-4|+04|-40|0||","Etc/GMT-5|+05|-50|0||","Etc/GMT-6|+06|-60|0||","Indian/Christmas|+07|-70|0||21e2","Etc/GMT-8|+08|-80|0||","Pacific/Palau|+09|-90|0||21e3","Etc/GMT+1|-01|10|0||","Etc/GMT+10|-10|a0|0||","Etc/GMT+11|-11|b0|0||","Etc/GMT+12|-12|c0|0||","Etc/GMT+3|-03|30|0||","Etc/GMT+4|-04|40|0||","Etc/GMT+5|-05|50|0||","Etc/GMT+6|-06|60|0||","Etc/GMT+7|-07|70|0||","Etc/GMT+8|-08|80|0||","Etc/GMT+9|-09|90|0||","Etc/UTC|UTC|0|0||","Europe/Amsterdam|AMT NST +0120 +0020 CEST CET|-j.w -1j.w -1k -k -20 -10|010101010101010101010101010101010101010101012323234545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545|-2aFcj.w 11b0 1iP0 11A0 1io0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1co0 1io0 1yo0 Pc0 1a00 1fA0 1Bc0 Mo0 1tc0 Uo0 1tA0 U00 1uo0 W00 1s00 VA0 1so0 Vc0 1sM0 UM0 1wo0 Rc0 1u00 Wo0 1rA0 W00 1s00 VA0 1sM0 UM0 1w00 fV0 BCX.w 1tA0 U00 1u00 Wo0 1sm0 601k WM0 1fA0 1cM0 1cM0 1cM0 16M0 1gMM0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|16e5","Europe/Andorra|WET CET CEST|0 -10 -20|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-UBA0 1xIN0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|79e3","Europe/Astrakhan|LMT +03 +04 +05|-3c.c -30 -40 -50|012323232323232323212121212121212121212121212121212121212121212|-1Pcrc.c eUMc.c 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 1cM0 3Co0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0|10e5","Europe/Athens|AMT EET EEST CEST CET|-1y.Q -20 -30 -20 -10|012123434121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2a61x.Q CNbx.Q mn0 kU10 9b0 3Es0 Xa0 1fb0 1dd0 k3X0 Nz0 SCp0 1vc0 SO0 1cM0 1a00 1ao0 1fc0 1a10 1fG0 1cg0 1dX0 1bX0 1cQ0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|35e5","Europe/London|GMT BST BDST|0 -10 -20|0101010101010101010101010101010101010101010101010121212121210101210101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2axa0 Rc0 1fA0 14M0 1fc0 1g00 1co0 1dc0 1co0 1oo0 1400 1dc0 19A0 1io0 1io0 WM0 1o00 14o0 1o00 17c0 1io0 17c0 1fA0 1a00 1lc0 17c0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1cM0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1io0 1qM0 Dc0 2Rz0 Dc0 1zc0 Oo0 1zc0 Rc0 1wo0 17c0 1iM0 FA0 xB0 1fA0 1a00 14o0 bb0 LA0 xB0 Rc0 1wo0 11A0 1o00 17c0 1fA0 1a00 1fA0 1cM0 1fA0 1a00 17c0 1fA0 1a00 1io0 17c0 1lc0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1a00 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1tA0 IM0 90o0 U00 1tA0 U00 1tA0 U00 1tA0 U00 1tA0 WM0 1qM0 WM0 1qM0 WM0 1tA0 U00 1tA0 U00 1tA0 11z0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 14o0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|10e6","Europe/Belgrade|CET CEST|-10 -20|01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-19RC0 3IP0 WM0 1fA0 1cM0 1cM0 1rc0 Qo0 1vmo0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|12e5","Europe/Berlin|CET CEST CEMT|-10 -20 -30|01010101010101210101210101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 kL0 Nc0 m10 WM0 1ao0 1cp0 dX0 jz0 Dd0 1io0 17c0 1fA0 1a00 1ehA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|41e5","Europe/Prague|CET CEST GMT|-10 -20 0|01010101010101010201010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 1cM0 1qM0 11c0 mp0 xA0 mn0 17c0 1io0 17c0 1fc0 1ao0 1bNc0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|13e5","Europe/Brussels|WET CET CEST WEST|0 -10 -20 -10|0121212103030303030303030303030303030303030303030303212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2ehc0 3zX0 11c0 1iO0 11A0 1o00 11A0 my0 Ic0 1qM0 Rc0 1EM0 UM0 1u00 10o0 1io0 1io0 17c0 1a00 1fA0 1cM0 1cM0 1io0 17c0 1fA0 1a00 1io0 1a30 1io0 17c0 1fA0 1a00 1io0 17c0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 y00 5Wn0 WM0 1fA0 1cM0 16M0 1iM0 16M0 1C00 Uo0 1eeo0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|21e5","Europe/Bucharest|BMT EET EEST|-1I.o -20 -30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1xApI.o 20LI.o RA0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1Axc0 On0 1fA0 1a10 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cK0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cL0 1cN0 1cL0 1fB0 1nX0 11E0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|19e5","Europe/Budapest|CET CEST|-10 -20|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1ip0 17b0 1op0 1tb0 Q2m0 3Ne0 WM0 1fA0 1cM0 1cM0 1oJ0 1dc0 1030 1fA0 1cM0 1cM0 1cM0 1cM0 1fA0 1a00 1iM0 1fA0 8Ha0 Rb0 1wN0 Rb0 1BB0 Lz0 1C20 LB0 SNX0 1a10 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|17e5","Europe/Zurich|CET CEST|-10 -20|01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-19Lc0 11A0 1o00 11A0 1xG10 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|38e4","Europe/Chisinau|CMT BMT EET EEST CEST CET MSK MSD|-1T -1I.o -20 -30 -20 -10 -30 -40|012323232323232323234545467676767676767676767323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-26jdT wGMa.A 20LI.o RA0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 27A0 2en0 39g0 WM0 1fA0 1cM0 V90 1t7z0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 gL0 WO0 1cM0 1cM0 1cK0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1nX0 11D0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|67e4","Europe/Copenhagen|CET CEST|-10 -20|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2azC0 Tz0 VuO0 60q0 WM0 1fA0 1cM0 1cM0 1cM0 S00 1HA0 Nc0 1C00 Dc0 1Nc0 Ao0 1h5A0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|12e5","Europe/Gibraltar|GMT BST BDST CET CEST|0 -10 -20 -10 -20|010101010101010101010101010101010101010101010101012121212121010121010101010101010101034343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-2axa0 Rc0 1fA0 14M0 1fc0 1g00 1co0 1dc0 1co0 1oo0 1400 1dc0 19A0 1io0 1io0 WM0 1o00 14o0 1o00 17c0 1io0 17c0 1fA0 1a00 1lc0 17c0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1cM0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1io0 1qM0 Dc0 2Rz0 Dc0 1zc0 Oo0 1zc0 Rc0 1wo0 17c0 1iM0 FA0 xB0 1fA0 1a00 14o0 bb0 LA0 xB0 Rc0 1wo0 11A0 1o00 17c0 1fA0 1a00 1fA0 1cM0 1fA0 1a00 17c0 1fA0 1a00 1io0 17c0 1lc0 17c0 1fA0 10Jz0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|30e3","Europe/Helsinki|HMT EET EEST|-1D.N -20 -30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1WuND.N OULD.N 1dA0 1xGq0 1cM0 1cM0 1cM0 1cN0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|12e5","Europe/Kaliningrad|CET CEST EET EEST MSK MSD +03|-10 -20 -20 -30 -30 -40 -30|01010101010101232454545454545454543232323232323232323232323232323232323232323262|-2aFe0 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 390 7A0 1en0 12N0 1pbb0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|44e4","Europe/Kiev|KMT EET MSK CEST CET MSD EEST|-22.4 -20 -30 -20 -10 -40 -30|0123434252525252525252525256161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161|-1Pc22.4 eUo2.4 rnz0 2Hg0 WM0 1fA0 da0 1v4m0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 Db0 3220 1cK0 1cL0 1cN0 1cL0 1cN0 1cL0 1cQ0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|34e5","Europe/Kirov|LMT +03 +04 +05|-3i.M -30 -40 -50|01232323232323232321212121212121212121212121212121212121212121|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 1cM0 3Co0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|48e4","Europe/Lisbon|LMT WET WEST WEMT CET CEST|A.J 0 -10 -20 -10 -20|012121212121212121212121212121212121212121212321232123212321212121212121212121212121212121212121214121212121212121212121212121212124545454212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2le00 aPX0 Sp0 LX0 1vc0 Tc0 1uM0 SM0 1vc0 Tc0 1vc0 SM0 1vc0 6600 1co0 3E00 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 3I00 17c0 1cM0 1cM0 3Fc0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 1tA0 1cM0 1dc0 1400 gL0 IM0 s10 U00 dX0 Rc0 pd0 Rc0 gL0 Oo0 pd0 Rc0 gL0 Oo0 pd0 14o0 1cM0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 3Co0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 pvy0 1cM0 1cM0 1fA0 1cM0 1cM0 1cN0 1cL0 1cN0 1cM0 1cM0 1cM0 1cM0 1cN0 1cL0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|27e5","Europe/Luxembourg|LMT CET CEST WET WEST WEST WET|-o.A -10 -20 0 -10 -20 -10|0121212134343434343434343434343434343434343434343434565651212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2DG0o.A t6mo.A TB0 1nX0 Up0 1o20 11A0 rW0 CM0 1qP0 R90 1EO0 UK0 1u20 10m0 1ip0 1in0 17e0 19W0 1fB0 1db0 1cp0 1in0 17d0 1fz0 1a10 1in0 1a10 1in0 17f0 1fA0 1a00 1io0 17c0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 vA0 60L0 WM0 1fA0 1cM0 17c0 1io0 16M0 1C00 Uo0 1eeo0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|54e4","Europe/Madrid|WET WEST WEMT CET CEST|0 -10 -20 -10 -20|010101010101010101210343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-25Td0 19B0 1cL0 1dd0 b1z0 18p0 3HX0 17d0 1fz0 1a10 1io0 1a00 1in0 17d0 iIn0 Hd0 1cL0 bb0 1200 2s20 14n0 5aL0 Mp0 1vz0 17d0 1in0 17d0 1in0 17d0 1in0 17d0 6hX0 11B0 XHX0 1a10 1fz0 1a10 19X0 1cN0 1fz0 1a10 1fC0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|62e5","Europe/Malta|CET CEST|-10 -20|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2arB0 Lz0 1cN0 1db0 1410 1on0 Wp0 1qL0 17d0 1cL0 M3B0 5M20 WM0 1fA0 1co0 17c0 1iM0 16m0 1de0 1lc0 14m0 1lc0 WO0 1qM0 GTW0 On0 1C10 LA0 1C00 LA0 1EM0 LA0 1C00 LA0 1zc0 Oo0 1C00 Oo0 1co0 1cM0 1lA0 Xc0 1qq0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1iN0 19z0 1fB0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|42e4","Europe/Minsk|MMT EET MSK CEST CET MSD EEST +03|-1O -20 -30 -20 -10 -40 -30 -30|01234343252525252525252525261616161616161616161616161616161616161617|-1Pc1O eUnO qNX0 3gQ0 WM0 1fA0 1cM0 Al0 1tsn0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 3Fc0 1cN0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0|19e5","Europe/Monaco|PMT WET WEST WEMT CET CEST|-9.l 0 -10 -20 -10 -20|01212121212121212121212121212121212121212121212121232323232345454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-2nco9.l cNb9.l HA0 19A0 1iM0 11c0 1oo0 Wo0 1rc0 QM0 1EM0 UM0 1u00 10o0 1io0 1wo0 Rc0 1a00 1fA0 1cM0 1cM0 1io0 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 1fA0 1a00 1io0 17c0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Df0 2RV0 11z0 11B0 1ze0 WM0 1fA0 1cM0 1fa0 1aq0 16M0 1ekn0 1cL0 1fC0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|38e3","Europe/Moscow|MMT MMT MST MDST MSD MSK +05 EET EEST MSK|-2u.h -2v.j -3v.j -4v.j -40 -30 -50 -20 -30 -40|012132345464575454545454545454545458754545454545454545454545454545454545454595|-2ag2u.h 2pyW.W 1bA0 11X0 GN0 1Hb0 c4v.j ik0 3DA0 dz0 15A0 c10 2q10 iM10 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cN0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|16e6","Europe/Paris|PMT WET WEST CEST CET WEMT|-9.l 0 -10 -20 -10 -20|0121212121212121212121212121212121212121212121212123434352543434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-2nco8.l cNb8.l HA0 19A0 1iM0 11c0 1oo0 Wo0 1rc0 QM0 1EM0 UM0 1u00 10o0 1io0 1wo0 Rc0 1a00 1fA0 1cM0 1cM0 1io0 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 1fA0 1a00 1io0 17c0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Df0 Ik0 5M30 WM0 1fA0 1cM0 Vx0 hB0 1aq0 16M0 1ekn0 1cL0 1fC0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|11e6","Europe/Riga|RMT LST EET MSK CEST CET MSD EEST|-1A.y -2A.y -20 -30 -20 -10 -40 -30|010102345454536363636363636363727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272|-25TzA.y 11A0 1iM0 ko0 gWm0 yDXA.y 2bX0 3fE0 WM0 1fA0 1cM0 1cM0 4m0 1sLy0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cN0 1o00 11A0 1o00 11A0 1qM0 3oo0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|64e4","Europe/Rome|CET CEST|-10 -20|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2arB0 Lz0 1cN0 1db0 1410 1on0 Wp0 1qL0 17d0 1cL0 M3B0 5M20 WM0 1fA0 1cM0 16M0 1iM0 16m0 1de0 1lc0 14m0 1lc0 WO0 1qM0 GTW0 On0 1C10 LA0 1C00 LA0 1EM0 LA0 1C00 LA0 1zc0 Oo0 1C00 Oo0 1C00 LA0 1zc0 Oo0 1C00 LA0 1C00 LA0 1zc0 Oo0 1C00 Oo0 1zc0 Oo0 1fC0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|39e5","Europe/Samara|LMT +03 +04 +05|-3k.k -30 -40 -50|0123232323232323232121232323232323232323232323232323232323212|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 2y10 14m0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|12e5","Europe/Saratov|LMT +03 +04 +05|-34.i -30 -40 -50|012323232323232321212121212121212121212121212121212121212121212|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1cM0 1cM0 1fA0 1cM0 3Co0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 5810|","Europe/Simferopol|SMT EET MSK CEST CET MSD EEST MSK|-2g -20 -30 -20 -10 -40 -30 -40|012343432525252525252525252161616525252616161616161616161616161616161616172|-1Pc2g eUog rEn0 2qs0 WM0 1fA0 1cM0 3V0 1u0L0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1Q00 4eL0 1cL0 1cN0 1cL0 1cN0 dX0 WL0 1cN0 1cL0 1fB0 1o30 11B0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11z0 1nW0|33e4","Europe/Sofia|EET CET CEST EEST|-20 -10 -20 -30|01212103030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030|-168L0 WM0 1fA0 1cM0 1cM0 1cN0 1mKH0 1dd0 1fb0 1ap0 1fb0 1a20 1fy0 1a30 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cK0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1nX0 11E0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|12e5","Europe/Stockholm|CET CEST|-10 -20|01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2azC0 TB0 2yDe0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|15e5","Europe/Tallinn|TMT CET CEST EET MSK MSD EEST|-1D -10 -20 -20 -30 -40 -30|012103421212454545454545454546363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363|-26oND teD 11A0 1Ta0 4rXl KSLD 2FX0 2Jg0 WM0 1fA0 1cM0 18J0 1sTX0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o10 11A0 1qM0 5QM0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|41e4","Europe/Tirane|LMT CET CEST|-1j.k -10 -20|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2glBj.k 14pcj.k 5LC0 WM0 4M0 1fCK0 10n0 1op0 11z0 1pd0 11z0 1qN0 WL0 1qp0 Xb0 1qp0 Xb0 1qp0 11z0 1lB0 11z0 1qN0 11z0 1iN0 16n0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|42e4","Europe/Ulyanovsk|LMT +03 +04 +05 +02|-3d.A -30 -40 -50 -20|01232323232323232321214121212121212121212121212121212121212121212|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0|13e5","Europe/Uzhgorod|CET CEST MSK MSD EET EEST|-10 -20 -30 -40 -20 -30|010101023232323232323232320454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-1cqL0 6i00 WM0 1fA0 1cM0 1ml0 1Cp0 1r3W0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1Q00 1Nf0 2pw0 1cL0 1cN0 1cL0 1cN0 1cL0 1cQ0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|11e4","Europe/Vienna|CET CEST|-10 -20|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1o00 11A0 3KM0 14o0 LA00 6i00 WM0 1fA0 1cM0 1cM0 1cM0 400 2qM0 1ao0 1co0 1cM0 1io0 17c0 1gHa0 19X0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|18e5","Europe/Vilnius|WMT KMT CET EET MSK CEST MSD EEST|-1o -1z.A -10 -20 -30 -20 -40 -30|012324525254646464646464646473737373737373737352537373737373737373737373737373737373737373737373737373737373737373737373|-293do 6ILM.o 1Ooz.A zz0 Mfd0 29W0 3is0 WM0 1fA0 1cM0 LV0 1tgL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11B0 1o00 11A0 1qM0 8io0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|54e4","Europe/Volgograd|LMT +03 +04 +05|-2V.E -30 -40 -50|012323232323232321212121212121212121212121212121212121212121212|-21IqV.E psLV.E 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1cM0 1cM0 1fA0 1cM0 3Co0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 9Jd0|10e5","Europe/Warsaw|WMT CET CEST EET EEST|-1o -10 -20 -20 -30|012121234312121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2ctdo 1LXo 11d0 1iO0 11A0 1o00 11A0 1on0 11A0 6zy0 HWP0 5IM0 WM0 1fA0 1cM0 1dz0 1mL0 1en0 15B0 1aq0 1nA0 11A0 1io0 17c0 1fA0 1a00 iDX0 LA0 1cM0 1cM0 1C00 Oo0 1cM0 1cM0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1C00 LA0 uso0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|17e5","Europe/Zaporozhye|+0220 EET MSK CEST CET MSD EEST|-2k -20 -30 -20 -10 -40 -30|01234342525252525252525252526161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161|-1Pc2k eUok rdb0 2RE0 WM0 1fA0 8m0 1v9a0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cK0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cQ0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|77e4","HST|HST|a0|0||","Indian/Chagos|LMT +05 +06|-4N.E -50 -60|012|-2xosN.E 3AGLN.E|30e2","Indian/Cocos|+0630|-6u|0||596","Indian/Kerguelen|-00 +05|0 -50|01|-MG00|130","Indian/Mahe|LMT +04|-3F.M -40|01|-2yO3F.M|79e3","Indian/Maldives|MMT +05|-4S -50|01|-olgS|35e4","Indian/Mauritius|LMT +04 +05|-3O -40 -50|012121|-2xorO 34unO 14L0 12kr0 11z0|15e4","Indian/Reunion|LMT +04|-3F.Q -40|01|-2mDDF.Q|84e4","Pacific/Kwajalein|+11 +10 +09 -12 +12|-b0 -a0 -90 c0 -c0|012034|-1kln0 akp0 6Up0 12ry0 Wan0|14e3","MET|MET MEST|-10 -20|01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 16M0 1gMM0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|","MST|MST|70|0||","MST7MDT|MST MDT MWT MPT|70 60 60 60|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261r0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","Pacific/Chatham|+1215 +1245 +1345|-cf -cJ -dJ|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-WqAf 1adef IM0 1C00 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1qM0 14o0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1io0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00|600","Pacific/Apia|LMT -1130 -11 -10 +14 +13|bq.U bu b0 a0 -e0 -d0|01232345454545454545454545454545454545454545454545454545454|-2nDMx.4 1yW03.4 2rRbu 1ff0 1a00 CI0 AQ0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00|37e3","Pacific/Bougainville|+10 +09 +11|-a0 -90 -b0|0102|-16Wy0 7CN0 2MQp0|18e4","Pacific/Chuuk|+10 +09|-a0 -90|01010|-2ewy0 axB0 RVX0 axd0|49e3","Pacific/Efate|LMT +11 +12|-bd.g -b0 -c0|0121212121212121212121|-2l9nd.g 2Szcd.g 1cL0 1oN0 10L0 1fB0 19X0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 Lz0 1Nd0 An0|66e3","Pacific/Enderbury|-12 -11 +13|c0 b0 -d0|012|nIc0 B7X0|1","Pacific/Fakaofo|-11 +13|b0 -d0|01|1Gfn0|483","Pacific/Fiji|LMT +12 +13|-bT.I -c0 -d0|0121212121212121212121212121212121212121212121212121212121212121|-2bUzT.I 3m8NT.I LA0 1EM0 IM0 nJc0 LA0 1o00 Rc0 1wo0 Ao0 1Nc0 Ao0 1Q00 xz0 1SN0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 20o0 pc0 20o0 s00 20o0 pc0 20o0 pc0 20o0 pc0 20o0 pc0 20o0 s00 1VA0 s00 20o0 pc0 20o0 pc0 20o0 pc0 20o0 pc0 20o0 s00 20o0 pc0 20o0 pc0 20o0 pc0 20o0 pc0 20o0 s00 1VA0 s00|88e4","Pacific/Galapagos|LMT -05 -06|5W.o 50 60|01212|-1yVS1.A 2dTz1.A gNd0 rz0|25e3","Pacific/Gambier|LMT -09|8X.M 90|01|-2jof0.c|125","Pacific/Guadalcanal|LMT +11|-aD.M -b0|01|-2joyD.M|11e4","Pacific/Guam|GST +09 GDT ChST|-a0 -90 -b0 -a0|01020202020202020203|-18jK0 6pB0 AhB0 3QL0 g2p0 3p91 WOX rX0 1zd0 Rb0 1wp0 Rb0 5xd0 rX0 5sN0 zb1 1C0X On0 ULb0|17e4","Pacific/Honolulu|HST HDT HWT HPT HST|au 9u 9u 9u a0|0102304|-1thLu 8x0 lef0 8wWu iAu 46p0|37e4","Pacific/Kiritimati|-1040 -10 +14|aE a0 -e0|012|nIaE B7Xk|51e2","Pacific/Kosrae|+11 +09 +10 +12|-b0 -90 -a0 -c0|01021030|-2ewz0 axC0 HBy0 akp0 axd0 WOK0 1bdz0|66e2","Pacific/Majuro|+11 +09 +10 +12|-b0 -90 -a0 -c0|0102103|-2ewz0 axC0 HBy0 akp0 6RB0 12um0|28e3","Pacific/Marquesas|LMT -0930|9i 9u|01|-2joeG|86e2","Pacific/Pago_Pago|LMT SST|bm.M b0|01|-2nDMB.c|37e2","Pacific/Nauru|LMT +1130 +09 +12|-b7.E -bu -90 -c0|01213|-1Xdn7.E QCnB.E 7mqu 1lnbu|10e3","Pacific/Niue|-1120 -1130 -11|bk bu b0|012|-KfME 17y0a|12e2","Pacific/Norfolk|+1112 +1130 +1230 +11 +12|-bc -bu -cu -b0 -c0|012134343434343434343434343434343434343434|-Kgbc W01G Oo0 1COo0 9Jcu 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0|25e4","Pacific/Noumea|LMT +11 +12|-b5.M -b0 -c0|01212121|-2l9n5.M 2EqM5.M xX0 1PB0 yn0 HeP0 Ao0|98e3","Pacific/Pitcairn|-0830 -08|8u 80|01|18Vku|56","Pacific/Pohnpei|+11 +09 +10|-b0 -90 -a0|010210|-2ewz0 axC0 HBy0 akp0 axd0|34e3","Pacific/Rarotonga|-1030 -0930 -10|au 9u a0|012121212121212121212121212|lyWu IL0 1zcu Onu 1zcu Onu 1zcu Rbu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Rbu 1zcu Onu 1zcu Onu 1zcu Onu|13e3","Pacific/Tahiti|LMT -10|9W.g a0|01|-2joe1.I|18e4","Pacific/Tongatapu|+1220 +13 +14|-ck -d0 -e0|0121212121|-1aB0k 2n5dk 15A0 1wo0 xz0 1Q10 xz0 zWN0 s00|75e3","PST8PDT|PST PDT PWT PPT|80 70 70 70|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261q0 1nX0 11B0 1nX0 SgN0 8x10 iy0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","WET|WET WEST|0 -10|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|hDB0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00|"],"links":["Africa/Abidjan|Africa/Bamako","Africa/Abidjan|Africa/Banjul","Africa/Abidjan|Africa/Conakry","Africa/Abidjan|Africa/Dakar","Africa/Abidjan|Africa/Freetown","Africa/Abidjan|Africa/Lome","Africa/Abidjan|Africa/Nouakchott","Africa/Abidjan|Africa/Ouagadougou","Africa/Abidjan|Africa/Timbuktu","Africa/Abidjan|Atlantic/St_Helena","Africa/Cairo|Egypt","Africa/Johannesburg|Africa/Maseru","Africa/Johannesburg|Africa/Mbabane","Africa/Lagos|Africa/Bangui","Africa/Lagos|Africa/Brazzaville","Africa/Lagos|Africa/Douala","Africa/Lagos|Africa/Kinshasa","Africa/Lagos|Africa/Libreville","Africa/Lagos|Africa/Luanda","Africa/Lagos|Africa/Malabo","Africa/Lagos|Africa/Niamey","Africa/Lagos|Africa/Porto-Novo","Africa/Maputo|Africa/Blantyre","Africa/Maputo|Africa/Bujumbura","Africa/Maputo|Africa/Gaborone","Africa/Maputo|Africa/Harare","Africa/Maputo|Africa/Kigali","Africa/Maputo|Africa/Lubumbashi","Africa/Maputo|Africa/Lusaka","Africa/Nairobi|Africa/Addis_Ababa","Africa/Nairobi|Africa/Asmara","Africa/Nairobi|Africa/Asmera","Africa/Nairobi|Africa/Dar_es_Salaam","Africa/Nairobi|Africa/Djibouti","Africa/Nairobi|Africa/Kampala","Africa/Nairobi|Africa/Mogadishu","Africa/Nairobi|Indian/Antananarivo","Africa/Nairobi|Indian/Comoro","Africa/Nairobi|Indian/Mayotte","Africa/Tripoli|Libya","America/Adak|America/Atka","America/Adak|US/Aleutian","America/Anchorage|US/Alaska","America/Argentina/Buenos_Aires|America/Buenos_Aires","America/Argentina/Catamarca|America/Argentina/ComodRivadavia","America/Argentina/Catamarca|America/Catamarca","America/Argentina/Cordoba|America/Cordoba","America/Argentina/Cordoba|America/Rosario","America/Argentina/Jujuy|America/Jujuy","America/Argentina/Mendoza|America/Mendoza","America/Atikokan|America/Coral_Harbour","America/Chicago|US/Central","America/Curacao|America/Aruba","America/Curacao|America/Kralendijk","America/Curacao|America/Lower_Princes","America/Denver|America/Shiprock","America/Denver|Navajo","America/Denver|US/Mountain","America/Detroit|US/Michigan","America/Edmonton|Canada/Mountain","America/Fort_Wayne|America/Indiana/Indianapolis","America/Fort_Wayne|America/Indianapolis","America/Fort_Wayne|US/East-Indiana","America/Godthab|America/Nuuk","America/Halifax|Canada/Atlantic","America/Havana|Cuba","America/Indiana/Knox|America/Knox_IN","America/Indiana/Knox|US/Indiana-Starke","America/Jamaica|Jamaica","America/Kentucky/Louisville|America/Louisville","America/Los_Angeles|US/Pacific","America/Los_Angeles|US/Pacific-New","America/Manaus|Brazil/West","America/Mazatlan|Mexico/BajaSur","America/Mexico_City|Mexico/General","America/New_York|US/Eastern","America/Noronha|Brazil/DeNoronha","America/Panama|America/Cayman","America/Phoenix|US/Arizona","America/Port_of_Spain|America/Anguilla","America/Port_of_Spain|America/Antigua","America/Port_of_Spain|America/Dominica","America/Port_of_Spain|America/Grenada","America/Port_of_Spain|America/Guadeloupe","America/Port_of_Spain|America/Marigot","America/Port_of_Spain|America/Montserrat","America/Port_of_Spain|America/St_Barthelemy","America/Port_of_Spain|America/St_Kitts","America/Port_of_Spain|America/St_Lucia","America/Port_of_Spain|America/St_Thomas","America/Port_of_Spain|America/St_Vincent","America/Port_of_Spain|America/Tortola","America/Port_of_Spain|America/Virgin","America/Regina|Canada/Saskatchewan","America/Rio_Branco|America/Porto_Acre","America/Rio_Branco|Brazil/Acre","America/Santiago|Chile/Continental","America/Sao_Paulo|Brazil/East","America/St_Johns|Canada/Newfoundland","America/Tijuana|America/Ensenada","America/Tijuana|America/Santa_Isabel","America/Tijuana|Mexico/BajaNorte","America/Toronto|America/Montreal","America/Toronto|Canada/Eastern","America/Vancouver|Canada/Pacific","America/Whitehorse|Canada/Yukon","America/Winnipeg|Canada/Central","Asia/Ashgabat|Asia/Ashkhabad","Asia/Bangkok|Asia/Phnom_Penh","Asia/Bangkok|Asia/Vientiane","Asia/Dhaka|Asia/Dacca","Asia/Dubai|Asia/Muscat","Asia/Ho_Chi_Minh|Asia/Saigon","Asia/Hong_Kong|Hongkong","Asia/Jerusalem|Asia/Tel_Aviv","Asia/Jerusalem|Israel","Asia/Kathmandu|Asia/Katmandu","Asia/Kolkata|Asia/Calcutta","Asia/Kuala_Lumpur|Asia/Singapore","Asia/Kuala_Lumpur|Singapore","Asia/Macau|Asia/Macao","Asia/Makassar|Asia/Ujung_Pandang","Asia/Nicosia|Europe/Nicosia","Asia/Qatar|Asia/Bahrain","Asia/Rangoon|Asia/Yangon","Asia/Riyadh|Asia/Aden","Asia/Riyadh|Asia/Kuwait","Asia/Seoul|ROK","Asia/Shanghai|Asia/Chongqing","Asia/Shanghai|Asia/Chungking","Asia/Shanghai|Asia/Harbin","Asia/Shanghai|PRC","Asia/Taipei|ROC","Asia/Tehran|Iran","Asia/Thimphu|Asia/Thimbu","Asia/Tokyo|Japan","Asia/Ulaanbaatar|Asia/Ulan_Bator","Asia/Urumqi|Asia/Kashgar","Atlantic/Faroe|Atlantic/Faeroe","Atlantic/Reykjavik|Iceland","Atlantic/South_Georgia|Etc/GMT+2","Australia/Adelaide|Australia/South","Australia/Brisbane|Australia/Queensland","Australia/Broken_Hill|Australia/Yancowinna","Australia/Darwin|Australia/North","Australia/Hobart|Australia/Tasmania","Australia/Lord_Howe|Australia/LHI","Australia/Melbourne|Australia/Victoria","Australia/Perth|Australia/West","Australia/Sydney|Australia/ACT","Australia/Sydney|Australia/Canberra","Australia/Sydney|Australia/NSW","Etc/GMT-0|Etc/GMT","Etc/GMT-0|Etc/GMT+0","Etc/GMT-0|Etc/GMT0","Etc/GMT-0|Etc/Greenwich","Etc/GMT-0|GMT","Etc/GMT-0|GMT+0","Etc/GMT-0|GMT-0","Etc/GMT-0|GMT0","Etc/GMT-0|Greenwich","Etc/UTC|Etc/UCT","Etc/UTC|Etc/Universal","Etc/UTC|Etc/Zulu","Etc/UTC|UCT","Etc/UTC|UTC","Etc/UTC|Universal","Etc/UTC|Zulu","Europe/Belgrade|Europe/Ljubljana","Europe/Belgrade|Europe/Podgorica","Europe/Belgrade|Europe/Sarajevo","Europe/Belgrade|Europe/Skopje","Europe/Belgrade|Europe/Zagreb","Europe/Chisinau|Europe/Tiraspol","Europe/Dublin|Eire","Europe/Helsinki|Europe/Mariehamn","Europe/Istanbul|Asia/Istanbul","Europe/Istanbul|Turkey","Europe/Lisbon|Portugal","Europe/London|Europe/Belfast","Europe/London|Europe/Guernsey","Europe/London|Europe/Isle_of_Man","Europe/London|Europe/Jersey","Europe/London|GB","Europe/London|GB-Eire","Europe/Moscow|W-SU","Europe/Oslo|Arctic/Longyearbyen","Europe/Oslo|Atlantic/Jan_Mayen","Europe/Prague|Europe/Bratislava","Europe/Rome|Europe/San_Marino","Europe/Rome|Europe/Vatican","Europe/Warsaw|Poland","Europe/Zurich|Europe/Busingen","Europe/Zurich|Europe/Vaduz","Indian/Christmas|Etc/GMT-7","Pacific/Auckland|Antarctica/McMurdo","Pacific/Auckland|Antarctica/South_Pole","Pacific/Auckland|NZ","Pacific/Chatham|NZ-CHAT","Pacific/Chuuk|Pacific/Truk","Pacific/Chuuk|Pacific/Yap","Pacific/Easter|Chile/EasterIsland","Pacific/Guam|Pacific/Saipan","Pacific/Honolulu|Pacific/Johnston","Pacific/Honolulu|US/Hawaii","Pacific/Kwajalein|Kwajalein","Pacific/Pago_Pago|Pacific/Midway","Pacific/Pago_Pago|Pacific/Samoa","Pacific/Pago_Pago|US/Samoa","Pacific/Palau|Etc/GMT-9","Pacific/Pohnpei|Pacific/Ponape","Pacific/Port_Moresby|Etc/GMT-10","Pacific/Tarawa|Etc/GMT-12","Pacific/Tarawa|Pacific/Funafuti","Pacific/Tarawa|Pacific/Wake","Pacific/Tarawa|Pacific/Wallis"],"countries":["AD|Europe/Andorra","AE|Asia/Dubai","AF|Asia/Kabul","AG|America/Port_of_Spain America/Antigua","AI|America/Port_of_Spain America/Anguilla","AL|Europe/Tirane","AM|Asia/Yerevan","AO|Africa/Lagos Africa/Luanda","AQ|Antarctica/Casey Antarctica/Davis Antarctica/DumontDUrville Antarctica/Mawson Antarctica/Palmer Antarctica/Rothera Antarctica/Syowa Antarctica/Troll Antarctica/Vostok Pacific/Auckland Antarctica/McMurdo","AR|America/Argentina/Buenos_Aires America/Argentina/Cordoba America/Argentina/Salta America/Argentina/Jujuy America/Argentina/Tucuman America/Argentina/Catamarca America/Argentina/La_Rioja America/Argentina/San_Juan America/Argentina/Mendoza America/Argentina/San_Luis America/Argentina/Rio_Gallegos America/Argentina/Ushuaia","AS|Pacific/Pago_Pago","AT|Europe/Vienna","AU|Australia/Lord_Howe Antarctica/Macquarie Australia/Hobart Australia/Currie Australia/Melbourne Australia/Sydney Australia/Broken_Hill Australia/Brisbane Australia/Lindeman Australia/Adelaide Australia/Darwin Australia/Perth Australia/Eucla","AW|America/Curacao America/Aruba","AX|Europe/Helsinki Europe/Mariehamn","AZ|Asia/Baku","BA|Europe/Belgrade Europe/Sarajevo","BB|America/Barbados","BD|Asia/Dhaka","BE|Europe/Brussels","BF|Africa/Abidjan Africa/Ouagadougou","BG|Europe/Sofia","BH|Asia/Qatar Asia/Bahrain","BI|Africa/Maputo Africa/Bujumbura","BJ|Africa/Lagos Africa/Porto-Novo","BL|America/Port_of_Spain America/St_Barthelemy","BM|Atlantic/Bermuda","BN|Asia/Brunei","BO|America/La_Paz","BQ|America/Curacao America/Kralendijk","BR|America/Noronha America/Belem America/Fortaleza America/Recife America/Araguaina America/Maceio America/Bahia America/Sao_Paulo America/Campo_Grande America/Cuiaba America/Santarem America/Porto_Velho America/Boa_Vista America/Manaus America/Eirunepe America/Rio_Branco","BS|America/Nassau","BT|Asia/Thimphu","BW|Africa/Maputo Africa/Gaborone","BY|Europe/Minsk","BZ|America/Belize","CA|America/St_Johns America/Halifax America/Glace_Bay America/Moncton America/Goose_Bay America/Blanc-Sablon America/Toronto America/Nipigon America/Thunder_Bay America/Iqaluit America/Pangnirtung America/Atikokan America/Winnipeg America/Rainy_River America/Resolute America/Rankin_Inlet America/Regina America/Swift_Current America/Edmonton America/Cambridge_Bay America/Yellowknife America/Inuvik America/Creston America/Dawson_Creek America/Fort_Nelson America/Vancouver America/Whitehorse America/Dawson","CC|Indian/Cocos","CD|Africa/Maputo Africa/Lagos Africa/Kinshasa Africa/Lubumbashi","CF|Africa/Lagos Africa/Bangui","CG|Africa/Lagos Africa/Brazzaville","CH|Europe/Zurich","CI|Africa/Abidjan","CK|Pacific/Rarotonga","CL|America/Santiago America/Punta_Arenas Pacific/Easter","CM|Africa/Lagos Africa/Douala","CN|Asia/Shanghai Asia/Urumqi","CO|America/Bogota","CR|America/Costa_Rica","CU|America/Havana","CV|Atlantic/Cape_Verde","CW|America/Curacao","CX|Indian/Christmas","CY|Asia/Nicosia Asia/Famagusta","CZ|Europe/Prague","DE|Europe/Zurich Europe/Berlin Europe/Busingen","DJ|Africa/Nairobi Africa/Djibouti","DK|Europe/Copenhagen","DM|America/Port_of_Spain America/Dominica","DO|America/Santo_Domingo","DZ|Africa/Algiers","EC|America/Guayaquil Pacific/Galapagos","EE|Europe/Tallinn","EG|Africa/Cairo","EH|Africa/El_Aaiun","ER|Africa/Nairobi Africa/Asmara","ES|Europe/Madrid Africa/Ceuta Atlantic/Canary","ET|Africa/Nairobi Africa/Addis_Ababa","FI|Europe/Helsinki","FJ|Pacific/Fiji","FK|Atlantic/Stanley","FM|Pacific/Chuuk Pacific/Pohnpei Pacific/Kosrae","FO|Atlantic/Faroe","FR|Europe/Paris","GA|Africa/Lagos Africa/Libreville","GB|Europe/London","GD|America/Port_of_Spain America/Grenada","GE|Asia/Tbilisi","GF|America/Cayenne","GG|Europe/London Europe/Guernsey","GH|Africa/Accra","GI|Europe/Gibraltar","GL|America/Nuuk America/Danmarkshavn America/Scoresbysund America/Thule","GM|Africa/Abidjan Africa/Banjul","GN|Africa/Abidjan Africa/Conakry","GP|America/Port_of_Spain America/Guadeloupe","GQ|Africa/Lagos Africa/Malabo","GR|Europe/Athens","GS|Atlantic/South_Georgia","GT|America/Guatemala","GU|Pacific/Guam","GW|Africa/Bissau","GY|America/Guyana","HK|Asia/Hong_Kong","HN|America/Tegucigalpa","HR|Europe/Belgrade Europe/Zagreb","HT|America/Port-au-Prince","HU|Europe/Budapest","ID|Asia/Jakarta Asia/Pontianak Asia/Makassar Asia/Jayapura","IE|Europe/Dublin","IL|Asia/Jerusalem","IM|Europe/London Europe/Isle_of_Man","IN|Asia/Kolkata","IO|Indian/Chagos","IQ|Asia/Baghdad","IR|Asia/Tehran","IS|Atlantic/Reykjavik","IT|Europe/Rome","JE|Europe/London Europe/Jersey","JM|America/Jamaica","JO|Asia/Amman","JP|Asia/Tokyo","KE|Africa/Nairobi","KG|Asia/Bishkek","KH|Asia/Bangkok Asia/Phnom_Penh","KI|Pacific/Tarawa Pacific/Enderbury Pacific/Kiritimati","KM|Africa/Nairobi Indian/Comoro","KN|America/Port_of_Spain America/St_Kitts","KP|Asia/Pyongyang","KR|Asia/Seoul","KW|Asia/Riyadh Asia/Kuwait","KY|America/Panama America/Cayman","KZ|Asia/Almaty Asia/Qyzylorda Asia/Qostanay Asia/Aqtobe Asia/Aqtau Asia/Atyrau Asia/Oral","LA|Asia/Bangkok Asia/Vientiane","LB|Asia/Beirut","LC|America/Port_of_Spain America/St_Lucia","LI|Europe/Zurich Europe/Vaduz","LK|Asia/Colombo","LR|Africa/Monrovia","LS|Africa/Johannesburg Africa/Maseru","LT|Europe/Vilnius","LU|Europe/Luxembourg","LV|Europe/Riga","LY|Africa/Tripoli","MA|Africa/Casablanca","MC|Europe/Monaco","MD|Europe/Chisinau","ME|Europe/Belgrade Europe/Podgorica","MF|America/Port_of_Spain America/Marigot","MG|Africa/Nairobi Indian/Antananarivo","MH|Pacific/Majuro Pacific/Kwajalein","MK|Europe/Belgrade Europe/Skopje","ML|Africa/Abidjan Africa/Bamako","MM|Asia/Yangon","MN|Asia/Ulaanbaatar Asia/Hovd Asia/Choibalsan","MO|Asia/Macau","MP|Pacific/Guam Pacific/Saipan","MQ|America/Martinique","MR|Africa/Abidjan Africa/Nouakchott","MS|America/Port_of_Spain America/Montserrat","MT|Europe/Malta","MU|Indian/Mauritius","MV|Indian/Maldives","MW|Africa/Maputo Africa/Blantyre","MX|America/Mexico_City America/Cancun America/Merida America/Monterrey America/Matamoros America/Mazatlan America/Chihuahua America/Ojinaga America/Hermosillo America/Tijuana America/Bahia_Banderas","MY|Asia/Kuala_Lumpur Asia/Kuching","MZ|Africa/Maputo","NA|Africa/Windhoek","NC|Pacific/Noumea","NE|Africa/Lagos Africa/Niamey","NF|Pacific/Norfolk","NG|Africa/Lagos","NI|America/Managua","NL|Europe/Amsterdam","NO|Europe/Oslo","NP|Asia/Kathmandu","NR|Pacific/Nauru","NU|Pacific/Niue","NZ|Pacific/Auckland Pacific/Chatham","OM|Asia/Dubai Asia/Muscat","PA|America/Panama","PE|America/Lima","PF|Pacific/Tahiti Pacific/Marquesas Pacific/Gambier","PG|Pacific/Port_Moresby Pacific/Bougainville","PH|Asia/Manila","PK|Asia/Karachi","PL|Europe/Warsaw","PM|America/Miquelon","PN|Pacific/Pitcairn","PR|America/Puerto_Rico","PS|Asia/Gaza Asia/Hebron","PT|Europe/Lisbon Atlantic/Madeira Atlantic/Azores","PW|Pacific/Palau","PY|America/Asuncion","QA|Asia/Qatar","RE|Indian/Reunion","RO|Europe/Bucharest","RS|Europe/Belgrade","RU|Europe/Kaliningrad Europe/Moscow Europe/Simferopol Europe/Kirov Europe/Astrakhan Europe/Volgograd Europe/Saratov Europe/Ulyanovsk Europe/Samara Asia/Yekaterinburg Asia/Omsk Asia/Novosibirsk Asia/Barnaul Asia/Tomsk Asia/Novokuznetsk Asia/Krasnoyarsk Asia/Irkutsk Asia/Chita Asia/Yakutsk Asia/Khandyga Asia/Vladivostok Asia/Ust-Nera Asia/Magadan Asia/Sakhalin Asia/Srednekolymsk Asia/Kamchatka Asia/Anadyr","RW|Africa/Maputo Africa/Kigali","SA|Asia/Riyadh","SB|Pacific/Guadalcanal","SC|Indian/Mahe","SD|Africa/Khartoum","SE|Europe/Stockholm","SG|Asia/Singapore","SH|Africa/Abidjan Atlantic/St_Helena","SI|Europe/Belgrade Europe/Ljubljana","SJ|Europe/Oslo Arctic/Longyearbyen","SK|Europe/Prague Europe/Bratislava","SL|Africa/Abidjan Africa/Freetown","SM|Europe/Rome Europe/San_Marino","SN|Africa/Abidjan Africa/Dakar","SO|Africa/Nairobi Africa/Mogadishu","SR|America/Paramaribo","SS|Africa/Juba","ST|Africa/Sao_Tome","SV|America/El_Salvador","SX|America/Curacao America/Lower_Princes","SY|Asia/Damascus","SZ|Africa/Johannesburg Africa/Mbabane","TC|America/Grand_Turk","TD|Africa/Ndjamena","TF|Indian/Reunion Indian/Kerguelen","TG|Africa/Abidjan Africa/Lome","TH|Asia/Bangkok","TJ|Asia/Dushanbe","TK|Pacific/Fakaofo","TL|Asia/Dili","TM|Asia/Ashgabat","TN|Africa/Tunis","TO|Pacific/Tongatapu","TR|Europe/Istanbul","TT|America/Port_of_Spain","TV|Pacific/Funafuti","TW|Asia/Taipei","TZ|Africa/Nairobi Africa/Dar_es_Salaam","UA|Europe/Simferopol Europe/Kiev Europe/Uzhgorod Europe/Zaporozhye","UG|Africa/Nairobi Africa/Kampala","UM|Pacific/Pago_Pago Pacific/Wake Pacific/Honolulu Pacific/Midway","US|America/New_York America/Detroit America/Kentucky/Louisville America/Kentucky/Monticello America/Indiana/Indianapolis America/Indiana/Vincennes America/Indiana/Winamac America/Indiana/Marengo America/Indiana/Petersburg America/Indiana/Vevay America/Chicago America/Indiana/Tell_City America/Indiana/Knox America/Menominee America/North_Dakota/Center America/North_Dakota/New_Salem America/North_Dakota/Beulah America/Denver America/Boise America/Phoenix America/Los_Angeles America/Anchorage America/Juneau America/Sitka America/Metlakatla America/Yakutat America/Nome America/Adak Pacific/Honolulu","UY|America/Montevideo","UZ|Asia/Samarkand Asia/Tashkent","VA|Europe/Rome Europe/Vatican","VC|America/Port_of_Spain America/St_Vincent","VE|America/Caracas","VG|America/Port_of_Spain America/Tortola","VI|America/Port_of_Spain America/St_Thomas","VN|Asia/Bangkok Asia/Ho_Chi_Minh","VU|Pacific/Efate","WF|Pacific/Wallis","WS|Pacific/Apia","YE|Asia/Riyadh Asia/Aden","YT|Africa/Nairobi Indian/Mayotte","ZA|Africa/Johannesburg","ZM|Africa/Maputo Africa/Lusaka","ZW|Africa/Maputo Africa/Harare"]}

/***/ }),
/* 1066 */
/***/ (function(module, exports) {

	module.exports = {"name":"prism","version":"1.1.0-rc.26","description":"prism","scripts":{"build":"webpack -p && cp src/index.html dist/","build-dev":"webpack -d","watch":"webpack -d --watch","build-browser-tests":"webpack -d --config webpack.tests.config.js","build-browser-tests:watch":"npm run build-browser-tests -- --watch","dev-server":"webpack-dev-server -d --content-base src/","docs":"node_modules/.bin/jsdoc README.md src -d ./docs -r -P package.json -t node_modules/minami","lint":"./node_modules/.bin/eslint src"},"repository":{"type":"git","url":"https://github.com/eoxc/prism.git"},"keywords":[],"author":"Lubomir Bucek <lubomir.bucek@eox.at>","license":"MIT","bugs":{"url":"https://github.com/eoxc/prism/issues"},"homepage":"https://github.com/eoxc/prism","devDependencies":{"babel-core":"^6.5.1","babel-loader":"^6.2.4","babel-plugin-transform-class-properties":"^6.8.0","babel-plugin-transform-object-rest-spread":"^6.19.0","babel-polyfill":"^6.3.14","babel-preset-es2015":"^6.5.0","babel-register":"^6.5.1","chai":"^3.4.1","coffee-loader":"^0.7.2","coffee-script":"^1.10.0","css-loader":"^0.23.1","eslint":"^3.14.1","eslint-config-airbnb":"^13.0.0","eslint-plugin-import":"^2.2.0","eslint-plugin-jsx-a11y":"^2.2.3","eslint-plugin-react":"^6.6.0","exports-loader":"^0.6.3","file-loader":"^0.8.5","glob":"^6.0.3","handlebars":"^4.3.3","handlebars-loader":"^1.4.0","imports-loader":"^0.6.5","json-loader":"^0.5.3","less":"^2.7.1","less-loader":"^2.2.3","minami":"^1.1.1","node-sass":"^4.13.1","sass-loader":"^6.0.0","sinon":"^1.17.2","sinon-chai":"^2.8.0","style-loader":"^0.13.1","url-loader":"^0.5.7","webpack":"^1.15.0","webpack-dev-server":"^1.14.1"},"dependencies":{"@tmcw/togeojson":"github:tmcw/togeojson","anno.js":"^1.0.3","autoprefixer":"^6.7.5","backbone.marionette":"^2.4.7","bootstrap":"^3.4.1","bootstrap-slider":"^9.9.1","eonasdan-bootstrap-datetimepicker":"^4.17.42","eoxc":"eoxc/eoxc#969eb010bd3392201c398f5412d94685f79ed8df","i18next":"^3.4.1","jquery":"^2.2.3","jquery-ui":"^1.10.5","jszip":"^2.6.1","moment-timezone":"^0.5.10","parse-color":"^1.0.0","postcss-loader":"^1.3.2","script-path":"^1.0.1","shpjs":"github:calvinmetcalf/shapefile-js#v3.3.2","tether-shepherd":"^1.8.1","url-search-params-polyfill":"^8.1.0","worker-loader":"^0.7.1"}}

/***/ }),
/* 1067 */
/***/ (function(module, exports) {

	module.exports = {"layer_failed":"Failed to access layer '{{value}}'","search_error":"An error occurred during the search","search_norecords":"No products matched the search","search_n_layers_selected":"One layer selected to show","search_n_layers_selected_plural":"{{count}} layers selected to show","load_more":"Load {{count}} more","download_norecords":"No products selected for download","terms_and_conditions":"I have read and agree to the <a class='terms_and_conditions_link' href='{{value}}' target='_blank'>terms &amp; conditions</a>","start_download":"Start download of one product","start_download_plural":"Start download of {{count}} products","confirm_download":"'Download' starts the download of one product","confirm_download_plural":"'Download' starts the download of {{count}} products","confirm_note":"Note, the browser might open multiple confirmation dialogs or issue a warning. Besides, typically browsers have a limit of 6 concurrent connections. If popups are blocked by your browser, please enable them for this site.","download_size_warning":"The estimated size of the download without compression is {{estimated_size}}MB. This might exceed the capabilities of the service.","max_bbox_warning":"Maximum size of bounding box: {{max_bbox_size}} was exceeded by: {{max_bbox_exceed}} on axis: {{max_bbox_axis}}.","max_resolution_warning":"Maximum resolution: {{max_resolution}} was exceeded. Attempt to download might fail with an error.","download_bands_warning":"The selected format supports at most {{maxBands}} bands, but {{requestedBands}} are requested.","timefilter_warning":"Search results may differ from products shown on map because of using a separate time filter","advancedfilter_warning":"Search results may differ from products shown on map because of using additional filters","toomanyresults_warning":"Search results may differ from products shown on map because search results are too big","dynamic-histogram-title":"If enabled, time distributions are shown for current spatial filter.\nIf disabled, they are shown globally.","tutorial1":"<p><b>Welcome to the Catalog Client</b></p><p>Let's briefly walk through the main functionalities. Hit <i>Next</i> to start.</p><p>Feel free to <i>Skip</i> any time and to resume later using the <i class='fa fa-book'/> button at the bottom right.</p><p>You can also find detailed information about the Client and referenced services here: <a href='user-guide' target='_blank'>User guide document HTML</a> or <a href='View-Server_-_User-Guide_v1.1.0.pdf' target='_blank'>PDF</a></p>.","tutorial2":"<p><b>The Map</b></p><p>Noticed the map in the back? It displays available satellite data.</p><p>Navigate to your area of interest by panning and zooming, either using <i>left click + drag</i> and <i>mouse wheel scroll</i> or <i>one finger drag</i> and <i>two finger pinch</i>.</p><p>Satisfied with the displayed data? Not yet? Let's change the time of interest <i>Next</i>.</p>","tutorial3":"<p><b>The Timeslider</b></p><p>The timeslider displays the distribution of data over time. The gray area shows the currently selected time interval.</p><p>Navigate to your time of interest again by panning (only in the bottom area) and zooming. Change the time interval selection by using <i>left click + drag</i> in the top area.</p><p>Did you notice how the data displayed on the map and the search results changed?</p>","tutorial4":"<p><b>Search Results</b></p><p>The satellite data within the current area and time of interest is listed here.</p><p>Inspect details by hovering over an item and hitting <button class='btn btn-default btn-xs btn-disabled'><i class='fa fa-info-circle'/></button> or select items for download.</p><p>Your result list is too long? Let's apply more filters <i>Next</i>.</p>","tutorial5":"<p><b>Filters</b></p><p>These filters allow to narrow down the search results. Note that the time and spatial filters are already applied via the map and timeslider.</p><p>Apply <i>Additional Filters</i> by selecting or typing the values of interest.</p><p>Did the search result list get smaller?</p>","tutorial6":"<p><b>Map layers</b></p><p>Available map and data layers are listed here.</p><p>Select and deselect <i>Layers</i> for viewing and searching. <i>Overlays</i> and <i>Base Layers</i> are only for the viewing on the map.</p><p>Satisfied with your search results?</p><p>Iterate all steps until you find the right satellite data to enjoy.</p>"}

/***/ }),
/* 1068 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	var utils = __webpack_require__(55);
	
	var table = [
	    0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA,
	    0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3,
	    0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988,
	    0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91,
	    0x1DB71064, 0x6AB020F2, 0xF3B97148, 0x84BE41DE,
	    0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7,
	    0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC,
	    0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5,
	    0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172,
	    0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B,
	    0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940,
	    0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59,
	    0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116,
	    0x21B4F4B5, 0x56B3C423, 0xCFBA9599, 0xB8BDA50F,
	    0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924,
	    0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D,
	    0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A,
	    0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,
	    0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818,
	    0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01,
	    0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E,
	    0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457,
	    0x65B0D9C6, 0x12B7E950, 0x8BBEB8EA, 0xFCB9887C,
	    0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65,
	    0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2,
	    0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB,
	    0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,
	    0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9,
	    0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086,
	    0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F,
	    0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4,
	    0x59B33D17, 0x2EB40D81, 0xB7BD5C3B, 0xC0BA6CAD,
	    0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A,
	    0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683,
	    0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8,
	    0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,
	    0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE,
	    0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7,
	    0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC,
	    0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5,
	    0xD6D6A3E8, 0xA1D1937E, 0x38D8C2C4, 0x4FDFF252,
	    0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B,
	    0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60,
	    0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79,
	    0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,
	    0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F,
	    0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04,
	    0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D,
	    0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A,
	    0x9C0906A9, 0xEB0E363F, 0x72076785, 0x05005713,
	    0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38,
	    0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21,
	    0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E,
	    0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,
	    0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C,
	    0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45,
	    0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2,
	    0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB,
	    0xAED16A4A, 0xD9D65ADC, 0x40DF0B66, 0x37D83BF0,
	    0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9,
	    0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6,
	    0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF,
	    0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,
	    0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D
	];
	
	/**
	 *
	 *  Javascript crc32
	 *  http://www.webtoolkit.info/
	 *
	 */
	module.exports = function crc32(input, crc) {
	    if (typeof input === "undefined" || !input.length) {
	        return 0;
	    }
	
	    var isArray = utils.getTypeOf(input) !== "string";
	
	    if (typeof(crc) == "undefined") {
	        crc = 0;
	    }
	    var x = 0;
	    var y = 0;
	    var b = 0;
	
	    crc = crc ^ (-1);
	    for (var i = 0, iTop = input.length; i < iTop; i++) {
	        b = isArray ? input[i] : input.charCodeAt(i);
	        y = (crc ^ b) & 0xFF;
	        x = table[y];
	        crc = (crc >>> 8) ^ x;
	    }
	
	    return crc ^ (-1);
	};
	// vim: set shiftwidth=4 softtabstop=4:


/***/ }),
/* 1069 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	var utils = __webpack_require__(55);
	
	/**
	 * @deprecated
	 * This function will be removed in a future version without replacement.
	 */
	exports.string2binary = function(str) {
	    return utils.string2binary(str);
	};
	
	/**
	 * @deprecated
	 * This function will be removed in a future version without replacement.
	 */
	exports.string2Uint8Array = function(str) {
	    return utils.transformTo("uint8array", str);
	};
	
	/**
	 * @deprecated
	 * This function will be removed in a future version without replacement.
	 */
	exports.uint8Array2String = function(array) {
	    return utils.transformTo("string", array);
	};
	
	/**
	 * @deprecated
	 * This function will be removed in a future version without replacement.
	 */
	exports.string2Blob = function(str) {
	    var buffer = utils.transformTo("arraybuffer", str);
	    return utils.arrayBuffer2Blob(buffer);
	};
	
	/**
	 * @deprecated
	 * This function will be removed in a future version without replacement.
	 */
	exports.arrayBuffer2Blob = function(buffer) {
	    return utils.arrayBuffer2Blob(buffer);
	};
	
	/**
	 * @deprecated
	 * This function will be removed in a future version without replacement.
	 */
	exports.transformTo = function(outputType, input) {
	    return utils.transformTo(outputType, input);
	};
	
	/**
	 * @deprecated
	 * This function will be removed in a future version without replacement.
	 */
	exports.getTypeOf = function(input) {
	    return utils.getTypeOf(input);
	};
	
	/**
	 * @deprecated
	 * This function will be removed in a future version without replacement.
	 */
	exports.checkSupport = function(type) {
	    return utils.checkSupport(type);
	};
	
	/**
	 * @deprecated
	 * This value will be removed in a future version without replacement.
	 */
	exports.MAX_VALUE_16BITS = utils.MAX_VALUE_16BITS;
	
	/**
	 * @deprecated
	 * This value will be removed in a future version without replacement.
	 */
	exports.MAX_VALUE_32BITS = utils.MAX_VALUE_32BITS;
	
	
	/**
	 * @deprecated
	 * This function will be removed in a future version without replacement.
	 */
	exports.pretty = function(str) {
	    return utils.pretty(str);
	};
	
	/**
	 * @deprecated
	 * This function will be removed in a future version without replacement.
	 */
	exports.findCompression = function(compressionMethod) {
	    return utils.findCompression(compressionMethod);
	};
	
	/**
	 * @deprecated
	 * This function will be removed in a future version without replacement.
	 */
	exports.isRegExp = function (object) {
	    return utils.isRegExp(object);
	};
	


/***/ }),
/* 1070 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	var USE_TYPEDARRAY = (typeof Uint8Array !== 'undefined') && (typeof Uint16Array !== 'undefined') && (typeof Uint32Array !== 'undefined');
	
	var pako = __webpack_require__(1086);
	exports.uncompressInputType = USE_TYPEDARRAY ? "uint8array" : "array";
	exports.compressInputType = USE_TYPEDARRAY ? "uint8array" : "array";
	
	exports.magic = "\x08\x00";
	exports.compress = function(input, compressionOptions) {
	    return pako.deflateRaw(input, {
	        level : compressionOptions.level || -1 // default compression
	    });
	};
	exports.uncompress =  function(input) {
	    return pako.inflateRaw(input);
	};


/***/ }),
/* 1071 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	var base64 = __webpack_require__(224);
	var utf8 = __webpack_require__(370);
	var utils = __webpack_require__(55);
	var ZipEntries = __webpack_require__(1075);
	module.exports = function(data, options) {
	    var files, zipEntries, i, input;
	    options = utils.extend(options || {}, {
	        base64: false,
	        checkCRC32: false,
	        optimizedBinaryString : false,
	        createFolders: false,
	        decodeFileName: utf8.utf8decode
	    });
	    if (options.base64) {
	        data = base64.decode(data);
	    }
	
	    zipEntries = new ZipEntries(data, options);
	    files = zipEntries.files;
	    for (i = 0; i < files.length; i++) {
	        input = files[i];
	        this.file(input.fileNameStr, input.decompressed, {
	            binary: true,
	            optimizedBinaryString: true,
	            date: input.date,
	            dir: input.dir,
	            comment : input.fileCommentStr.length ? input.fileCommentStr : null,
	            unixPermissions : input.unixPermissions,
	            dosPermissions : input.dosPermissions,
	            createFolders: options.createFolders
	        });
	    }
	    if (zipEntries.zipComment.length) {
	        this.comment = zipEntries.zipComment;
	    }
	
	    return this;
	};


/***/ }),
/* 1072 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	var Uint8ArrayReader = __webpack_require__(369);
	
	function NodeBufferReader(data) {
	    this.data = data;
	    this.length = this.data.length;
	    this.index = 0;
	    this.zero = 0;
	}
	NodeBufferReader.prototype = new Uint8ArrayReader();
	
	/**
	 * @see DataReader.readData
	 */
	NodeBufferReader.prototype.readData = function(size) {
	    this.checkOffset(size);
	    var result = this.data.slice(this.zero + this.index, this.zero + this.index + size);
	    this.index += size;
	    return result;
	};
	module.exports = NodeBufferReader;


/***/ }),
/* 1073 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	var utils = __webpack_require__(55);
	
	/**
	 * An object to write any content to a string.
	 * @constructor
	 */
	var StringWriter = function() {
	    this.data = [];
	};
	StringWriter.prototype = {
	    /**
	     * Append any content to the current string.
	     * @param {Object} input the content to add.
	     */
	    append: function(input) {
	        input = utils.transformTo("string", input);
	        this.data.push(input);
	    },
	    /**
	     * Finalize the construction an return the result.
	     * @return {string} the generated string.
	     */
	    finalize: function() {
	        return this.data.join("");
	    }
	};
	
	module.exports = StringWriter;


/***/ }),
/* 1074 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	var utils = __webpack_require__(55);
	
	/**
	 * An object to write any content to an Uint8Array.
	 * @constructor
	 * @param {number} length The length of the array.
	 */
	var Uint8ArrayWriter = function(length) {
	    this.data = new Uint8Array(length);
	    this.index = 0;
	};
	Uint8ArrayWriter.prototype = {
	    /**
	     * Append any content to the current array.
	     * @param {Object} input the content to add.
	     */
	    append: function(input) {
	        if (input.length !== 0) {
	            // with an empty Uint8Array, Opera fails with a "Offset larger than array size"
	            input = utils.transformTo("uint8array", input);
	            this.data.set(input, this.index);
	            this.index += input.length;
	        }
	    },
	    /**
	     * Finalize the construction an return the result.
	     * @return {Uint8Array} the generated array.
	     */
	    finalize: function() {
	        return this.data;
	    }
	};
	
	module.exports = Uint8ArrayWriter;


/***/ }),
/* 1075 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	var StringReader = __webpack_require__(368);
	var NodeBufferReader = __webpack_require__(1072);
	var Uint8ArrayReader = __webpack_require__(369);
	var ArrayReader = __webpack_require__(362);
	var utils = __webpack_require__(55);
	var sig = __webpack_require__(367);
	var ZipEntry = __webpack_require__(1076);
	var support = __webpack_require__(115);
	var jszipProto = __webpack_require__(227);
	//  class ZipEntries {{{
	/**
	 * All the entries in the zip file.
	 * @constructor
	 * @param {String|ArrayBuffer|Uint8Array} data the binary stream to load.
	 * @param {Object} loadOptions Options for loading the stream.
	 */
	function ZipEntries(data, loadOptions) {
	    this.files = [];
	    this.loadOptions = loadOptions;
	    if (data) {
	        this.load(data);
	    }
	}
	ZipEntries.prototype = {
	    /**
	     * Check that the reader is on the speficied signature.
	     * @param {string} expectedSignature the expected signature.
	     * @throws {Error} if it is an other signature.
	     */
	    checkSignature: function(expectedSignature) {
	        var signature = this.reader.readString(4);
	        if (signature !== expectedSignature) {
	            throw new Error("Corrupted zip or bug : unexpected signature " + "(" + utils.pretty(signature) + ", expected " + utils.pretty(expectedSignature) + ")");
	        }
	    },
	    /**
	     * Check if the given signature is at the given index.
	     * @param {number} askedIndex the index to check.
	     * @param {string} expectedSignature the signature to expect.
	     * @return {boolean} true if the signature is here, false otherwise.
	     */
	    isSignature: function(askedIndex, expectedSignature) {
	        var currentIndex = this.reader.index;
	        this.reader.setIndex(askedIndex);
	        var signature = this.reader.readString(4);
	        var result = signature === expectedSignature;
	        this.reader.setIndex(currentIndex);
	        return result;
	    },
	    /**
	     * Read the end of the central directory.
	     */
	    readBlockEndOfCentral: function() {
	        this.diskNumber = this.reader.readInt(2);
	        this.diskWithCentralDirStart = this.reader.readInt(2);
	        this.centralDirRecordsOnThisDisk = this.reader.readInt(2);
	        this.centralDirRecords = this.reader.readInt(2);
	        this.centralDirSize = this.reader.readInt(4);
	        this.centralDirOffset = this.reader.readInt(4);
	
	        this.zipCommentLength = this.reader.readInt(2);
	        // warning : the encoding depends of the system locale
	        // On a linux machine with LANG=en_US.utf8, this field is utf8 encoded.
	        // On a windows machine, this field is encoded with the localized windows code page.
	        var zipComment = this.reader.readData(this.zipCommentLength);
	        var decodeParamType = support.uint8array ? "uint8array" : "array";
	        // To get consistent behavior with the generation part, we will assume that
	        // this is utf8 encoded unless specified otherwise.
	        var decodeContent = utils.transformTo(decodeParamType, zipComment);
	        this.zipComment = this.loadOptions.decodeFileName(decodeContent);
	    },
	    /**
	     * Read the end of the Zip 64 central directory.
	     * Not merged with the method readEndOfCentral :
	     * The end of central can coexist with its Zip64 brother,
	     * I don't want to read the wrong number of bytes !
	     */
	    readBlockZip64EndOfCentral: function() {
	        this.zip64EndOfCentralSize = this.reader.readInt(8);
	        this.versionMadeBy = this.reader.readString(2);
	        this.versionNeeded = this.reader.readInt(2);
	        this.diskNumber = this.reader.readInt(4);
	        this.diskWithCentralDirStart = this.reader.readInt(4);
	        this.centralDirRecordsOnThisDisk = this.reader.readInt(8);
	        this.centralDirRecords = this.reader.readInt(8);
	        this.centralDirSize = this.reader.readInt(8);
	        this.centralDirOffset = this.reader.readInt(8);
	
	        this.zip64ExtensibleData = {};
	        var extraDataSize = this.zip64EndOfCentralSize - 44,
	            index = 0,
	            extraFieldId,
	            extraFieldLength,
	            extraFieldValue;
	        while (index < extraDataSize) {
	            extraFieldId = this.reader.readInt(2);
	            extraFieldLength = this.reader.readInt(4);
	            extraFieldValue = this.reader.readString(extraFieldLength);
	            this.zip64ExtensibleData[extraFieldId] = {
	                id: extraFieldId,
	                length: extraFieldLength,
	                value: extraFieldValue
	            };
	        }
	    },
	    /**
	     * Read the end of the Zip 64 central directory locator.
	     */
	    readBlockZip64EndOfCentralLocator: function() {
	        this.diskWithZip64CentralDirStart = this.reader.readInt(4);
	        this.relativeOffsetEndOfZip64CentralDir = this.reader.readInt(8);
	        this.disksCount = this.reader.readInt(4);
	        if (this.disksCount > 1) {
	            throw new Error("Multi-volumes zip are not supported");
	        }
	    },
	    /**
	     * Read the local files, based on the offset read in the central part.
	     */
	    readLocalFiles: function() {
	        var i, file;
	        for (i = 0; i < this.files.length; i++) {
	            file = this.files[i];
	            this.reader.setIndex(file.localHeaderOffset);
	            this.checkSignature(sig.LOCAL_FILE_HEADER);
	            file.readLocalPart(this.reader);
	            file.handleUTF8();
	            file.processAttributes();
	        }
	    },
	    /**
	     * Read the central directory.
	     */
	    readCentralDir: function() {
	        var file;
	
	        this.reader.setIndex(this.centralDirOffset);
	        while (this.reader.readString(4) === sig.CENTRAL_FILE_HEADER) {
	            file = new ZipEntry({
	                zip64: this.zip64
	            }, this.loadOptions);
	            file.readCentralPart(this.reader);
	            this.files.push(file);
	        }
	
	        if (this.centralDirRecords !== this.files.length) {
	            if (this.centralDirRecords !== 0 && this.files.length === 0) {
	                // We expected some records but couldn't find ANY.
	                // This is really suspicious, as if something went wrong.
	                throw new Error("Corrupted zip or bug: expected " + this.centralDirRecords + " records in central dir, got " + this.files.length);
	            } else {
	                // We found some records but not all.
	                // Something is wrong but we got something for the user: no error here.
	                // console.warn("expected", this.centralDirRecords, "records in central dir, got", this.files.length);
	            }
	        }
	    },
	    /**
	     * Read the end of central directory.
	     */
	    readEndOfCentral: function() {
	        var offset = this.reader.lastIndexOfSignature(sig.CENTRAL_DIRECTORY_END);
	        if (offset < 0) {
	            // Check if the content is a truncated zip or complete garbage.
	            // A "LOCAL_FILE_HEADER" is not required at the beginning (auto
	            // extractible zip for example) but it can give a good hint.
	            // If an ajax request was used without responseType, we will also
	            // get unreadable data.
	            var isGarbage = !this.isSignature(0, sig.LOCAL_FILE_HEADER);
	
	            if (isGarbage) {
	                throw new Error("Can't find end of central directory : is this a zip file ? " +
	                                "If it is, see http://stuk.github.io/jszip/documentation/howto/read_zip.html");
	            } else {
	                throw new Error("Corrupted zip : can't find end of central directory");
	            }
	        }
	        this.reader.setIndex(offset);
	        var endOfCentralDirOffset = offset;
	        this.checkSignature(sig.CENTRAL_DIRECTORY_END);
	        this.readBlockEndOfCentral();
	
	
	        /* extract from the zip spec :
	            4)  If one of the fields in the end of central directory
	                record is too small to hold required data, the field
	                should be set to -1 (0xFFFF or 0xFFFFFFFF) and the
	                ZIP64 format record should be created.
	            5)  The end of central directory record and the
	                Zip64 end of central directory locator record must
	                reside on the same disk when splitting or spanning
	                an archive.
	         */
	        if (this.diskNumber === utils.MAX_VALUE_16BITS || this.diskWithCentralDirStart === utils.MAX_VALUE_16BITS || this.centralDirRecordsOnThisDisk === utils.MAX_VALUE_16BITS || this.centralDirRecords === utils.MAX_VALUE_16BITS || this.centralDirSize === utils.MAX_VALUE_32BITS || this.centralDirOffset === utils.MAX_VALUE_32BITS) {
	            this.zip64 = true;
	
	            /*
	            Warning : the zip64 extension is supported, but ONLY if the 64bits integer read from
	            the zip file can fit into a 32bits integer. This cannot be solved : Javascript represents
	            all numbers as 64-bit double precision IEEE 754 floating point numbers.
	            So, we have 53bits for integers and bitwise operations treat everything as 32bits.
	            see https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Bitwise_Operators
	            and http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf section 8.5
	            */
	
	            // should look for a zip64 EOCD locator
	            offset = this.reader.lastIndexOfSignature(sig.ZIP64_CENTRAL_DIRECTORY_LOCATOR);
	            if (offset < 0) {
	                throw new Error("Corrupted zip : can't find the ZIP64 end of central directory locator");
	            }
	            this.reader.setIndex(offset);
	            this.checkSignature(sig.ZIP64_CENTRAL_DIRECTORY_LOCATOR);
	            this.readBlockZip64EndOfCentralLocator();
	
	            // now the zip64 EOCD record
	            if (!this.isSignature(this.relativeOffsetEndOfZip64CentralDir, sig.ZIP64_CENTRAL_DIRECTORY_END)) {
	                // console.warn("ZIP64 end of central directory not where expected.");
	                this.relativeOffsetEndOfZip64CentralDir = this.reader.lastIndexOfSignature(sig.ZIP64_CENTRAL_DIRECTORY_END);
	                if (this.relativeOffsetEndOfZip64CentralDir < 0) {
	                    throw new Error("Corrupted zip : can't find the ZIP64 end of central directory");
	                }
	            }
	            this.reader.setIndex(this.relativeOffsetEndOfZip64CentralDir);
	            this.checkSignature(sig.ZIP64_CENTRAL_DIRECTORY_END);
	            this.readBlockZip64EndOfCentral();
	        }
	
	        var expectedEndOfCentralDirOffset = this.centralDirOffset + this.centralDirSize;
	        if (this.zip64) {
	            expectedEndOfCentralDirOffset += 20; // end of central dir 64 locator
	            expectedEndOfCentralDirOffset += 12 /* should not include the leading 12 bytes */ + this.zip64EndOfCentralSize;
	        }
	
	        var extraBytes = endOfCentralDirOffset - expectedEndOfCentralDirOffset;
	
	        if (extraBytes > 0) {
	            // console.warn(extraBytes, "extra bytes at beginning or within zipfile");
	            if (this.isSignature(endOfCentralDirOffset, sig.CENTRAL_FILE_HEADER)) {
	                // The offsets seem wrong, but we have something at the specified offset.
	                // So… we keep it.
	            } else {
	                // the offset is wrong, update the "zero" of the reader
	                // this happens if data has been prepended (crx files for example)
	                this.reader.zero = extraBytes;
	            }
	        } else if (extraBytes < 0) {
	            throw new Error("Corrupted zip: missing " + Math.abs(extraBytes) + " bytes.");
	        }
	    },
	    prepareReader: function(data) {
	        var type = utils.getTypeOf(data);
	        utils.checkSupport(type);
	        if (type === "string" && !support.uint8array) {
	            this.reader = new StringReader(data, this.loadOptions.optimizedBinaryString);
	        }
	        else if (type === "nodebuffer") {
	            this.reader = new NodeBufferReader(data);
	        }
	        else if (support.uint8array) {
	            this.reader = new Uint8ArrayReader(utils.transformTo("uint8array", data));
	        } else if (support.array) {
	            this.reader = new ArrayReader(utils.transformTo("array", data));
	        } else {
	            throw new Error("Unexpected error: unsupported type '" + type + "'");
	        }
	    },
	    /**
	     * Read a zip file and create ZipEntries.
	     * @param {String|ArrayBuffer|Uint8Array|Buffer} data the binary string representing a zip file.
	     */
	    load: function(data) {
	        this.prepareReader(data);
	        this.readEndOfCentral();
	        this.readCentralDir();
	        this.readLocalFiles();
	    }
	};
	// }}} end of ZipEntries
	module.exports = ZipEntries;


/***/ }),
/* 1076 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	var StringReader = __webpack_require__(368);
	var utils = __webpack_require__(55);
	var CompressedObject = __webpack_require__(363);
	var jszipProto = __webpack_require__(227);
	var support = __webpack_require__(115);
	
	var MADE_BY_DOS = 0x00;
	var MADE_BY_UNIX = 0x03;
	
	// class ZipEntry {{{
	/**
	 * An entry in the zip file.
	 * @constructor
	 * @param {Object} options Options of the current file.
	 * @param {Object} loadOptions Options for loading the stream.
	 */
	function ZipEntry(options, loadOptions) {
	    this.options = options;
	    this.loadOptions = loadOptions;
	}
	ZipEntry.prototype = {
	    /**
	     * say if the file is encrypted.
	     * @return {boolean} true if the file is encrypted, false otherwise.
	     */
	    isEncrypted: function() {
	        // bit 1 is set
	        return (this.bitFlag & 0x0001) === 0x0001;
	    },
	    /**
	     * say if the file has utf-8 filename/comment.
	     * @return {boolean} true if the filename/comment is in utf-8, false otherwise.
	     */
	    useUTF8: function() {
	        // bit 11 is set
	        return (this.bitFlag & 0x0800) === 0x0800;
	    },
	    /**
	     * Prepare the function used to generate the compressed content from this ZipFile.
	     * @param {DataReader} reader the reader to use.
	     * @param {number} from the offset from where we should read the data.
	     * @param {number} length the length of the data to read.
	     * @return {Function} the callback to get the compressed content (the type depends of the DataReader class).
	     */
	    prepareCompressedContent: function(reader, from, length) {
	        return function() {
	            var previousIndex = reader.index;
	            reader.setIndex(from);
	            var compressedFileData = reader.readData(length);
	            reader.setIndex(previousIndex);
	
	            return compressedFileData;
	        };
	    },
	    /**
	     * Prepare the function used to generate the uncompressed content from this ZipFile.
	     * @param {DataReader} reader the reader to use.
	     * @param {number} from the offset from where we should read the data.
	     * @param {number} length the length of the data to read.
	     * @param {JSZip.compression} compression the compression used on this file.
	     * @param {number} uncompressedSize the uncompressed size to expect.
	     * @return {Function} the callback to get the uncompressed content (the type depends of the DataReader class).
	     */
	    prepareContent: function(reader, from, length, compression, uncompressedSize) {
	        return function() {
	
	            var compressedFileData = utils.transformTo(compression.uncompressInputType, this.getCompressedContent());
	            var uncompressedFileData = compression.uncompress(compressedFileData);
	
	            if (uncompressedFileData.length !== uncompressedSize) {
	                throw new Error("Bug : uncompressed data size mismatch");
	            }
	
	            return uncompressedFileData;
	        };
	    },
	    /**
	     * Read the local part of a zip file and add the info in this object.
	     * @param {DataReader} reader the reader to use.
	     */
	    readLocalPart: function(reader) {
	        var compression, localExtraFieldsLength;
	
	        // we already know everything from the central dir !
	        // If the central dir data are false, we are doomed.
	        // On the bright side, the local part is scary  : zip64, data descriptors, both, etc.
	        // The less data we get here, the more reliable this should be.
	        // Let's skip the whole header and dash to the data !
	        reader.skip(22);
	        // in some zip created on windows, the filename stored in the central dir contains \ instead of /.
	        // Strangely, the filename here is OK.
	        // I would love to treat these zip files as corrupted (see http://www.info-zip.org/FAQ.html#backslashes
	        // or APPNOTE#4.4.17.1, "All slashes MUST be forward slashes '/'") but there are a lot of bad zip generators...
	        // Search "unzip mismatching "local" filename continuing with "central" filename version" on
	        // the internet.
	        //
	        // I think I see the logic here : the central directory is used to display
	        // content and the local directory is used to extract the files. Mixing / and \
	        // may be used to display \ to windows users and use / when extracting the files.
	        // Unfortunately, this lead also to some issues : http://seclists.org/fulldisclosure/2009/Sep/394
	        this.fileNameLength = reader.readInt(2);
	        localExtraFieldsLength = reader.readInt(2); // can't be sure this will be the same as the central dir
	        this.fileName = reader.readData(this.fileNameLength);
	        reader.skip(localExtraFieldsLength);
	
	        if (this.compressedSize == -1 || this.uncompressedSize == -1) {
	            throw new Error("Bug or corrupted zip : didn't get enough informations from the central directory " + "(compressedSize == -1 || uncompressedSize == -1)");
	        }
	
	        compression = utils.findCompression(this.compressionMethod);
	        if (compression === null) { // no compression found
	            throw new Error("Corrupted zip : compression " + utils.pretty(this.compressionMethod) + " unknown (inner file : " +  utils.transformTo("string", this.fileName) + ")");
	        }
	        this.decompressed = new CompressedObject();
	        this.decompressed.compressedSize = this.compressedSize;
	        this.decompressed.uncompressedSize = this.uncompressedSize;
	        this.decompressed.crc32 = this.crc32;
	        this.decompressed.compressionMethod = this.compressionMethod;
	        this.decompressed.getCompressedContent = this.prepareCompressedContent(reader, reader.index, this.compressedSize, compression);
	        this.decompressed.getContent = this.prepareContent(reader, reader.index, this.compressedSize, compression, this.uncompressedSize);
	
	        // we need to compute the crc32...
	        if (this.loadOptions.checkCRC32) {
	            this.decompressed = utils.transformTo("string", this.decompressed.getContent());
	            if (jszipProto.crc32(this.decompressed) !== this.crc32) {
	                throw new Error("Corrupted zip : CRC32 mismatch");
	            }
	        }
	    },
	
	    /**
	     * Read the central part of a zip file and add the info in this object.
	     * @param {DataReader} reader the reader to use.
	     */
	    readCentralPart: function(reader) {
	        this.versionMadeBy = reader.readInt(2);
	        this.versionNeeded = reader.readInt(2);
	        this.bitFlag = reader.readInt(2);
	        this.compressionMethod = reader.readString(2);
	        this.date = reader.readDate();
	        this.crc32 = reader.readInt(4);
	        this.compressedSize = reader.readInt(4);
	        this.uncompressedSize = reader.readInt(4);
	        this.fileNameLength = reader.readInt(2);
	        this.extraFieldsLength = reader.readInt(2);
	        this.fileCommentLength = reader.readInt(2);
	        this.diskNumberStart = reader.readInt(2);
	        this.internalFileAttributes = reader.readInt(2);
	        this.externalFileAttributes = reader.readInt(4);
	        this.localHeaderOffset = reader.readInt(4);
	
	        if (this.isEncrypted()) {
	            throw new Error("Encrypted zip are not supported");
	        }
	
	        this.fileName = reader.readData(this.fileNameLength);
	        this.readExtraFields(reader);
	        this.parseZIP64ExtraField(reader);
	        this.fileComment = reader.readData(this.fileCommentLength);
	    },
	
	    /**
	     * Parse the external file attributes and get the unix/dos permissions.
	     */
	    processAttributes: function () {
	        this.unixPermissions = null;
	        this.dosPermissions = null;
	        var madeBy = this.versionMadeBy >> 8;
	
	        // Check if we have the DOS directory flag set.
	        // We look for it in the DOS and UNIX permissions
	        // but some unknown platform could set it as a compatibility flag.
	        this.dir = this.externalFileAttributes & 0x0010 ? true : false;
	
	        if(madeBy === MADE_BY_DOS) {
	            // first 6 bits (0 to 5)
	            this.dosPermissions = this.externalFileAttributes & 0x3F;
	        }
	
	        if(madeBy === MADE_BY_UNIX) {
	            this.unixPermissions = (this.externalFileAttributes >> 16) & 0xFFFF;
	            // the octal permissions are in (this.unixPermissions & 0x01FF).toString(8);
	        }
	
	        // fail safe : if the name ends with a / it probably means a folder
	        if (!this.dir && this.fileNameStr.slice(-1) === '/') {
	            this.dir = true;
	        }
	    },
	
	    /**
	     * Parse the ZIP64 extra field and merge the info in the current ZipEntry.
	     * @param {DataReader} reader the reader to use.
	     */
	    parseZIP64ExtraField: function(reader) {
	
	        if (!this.extraFields[0x0001]) {
	            return;
	        }
	
	        // should be something, preparing the extra reader
	        var extraReader = new StringReader(this.extraFields[0x0001].value);
	
	        // I really hope that these 64bits integer can fit in 32 bits integer, because js
	        // won't let us have more.
	        if (this.uncompressedSize === utils.MAX_VALUE_32BITS) {
	            this.uncompressedSize = extraReader.readInt(8);
	        }
	        if (this.compressedSize === utils.MAX_VALUE_32BITS) {
	            this.compressedSize = extraReader.readInt(8);
	        }
	        if (this.localHeaderOffset === utils.MAX_VALUE_32BITS) {
	            this.localHeaderOffset = extraReader.readInt(8);
	        }
	        if (this.diskNumberStart === utils.MAX_VALUE_32BITS) {
	            this.diskNumberStart = extraReader.readInt(4);
	        }
	    },
	    /**
	     * Read the central part of a zip file and add the info in this object.
	     * @param {DataReader} reader the reader to use.
	     */
	    readExtraFields: function(reader) {
	        var start = reader.index,
	            extraFieldId,
	            extraFieldLength,
	            extraFieldValue;
	
	        this.extraFields = this.extraFields || {};
	
	        while (reader.index < start + this.extraFieldsLength) {
	            extraFieldId = reader.readInt(2);
	            extraFieldLength = reader.readInt(2);
	            extraFieldValue = reader.readString(extraFieldLength);
	
	            this.extraFields[extraFieldId] = {
	                id: extraFieldId,
	                length: extraFieldLength,
	                value: extraFieldValue
	            };
	        }
	    },
	    /**
	     * Apply an UTF8 transformation if needed.
	     */
	    handleUTF8: function() {
	        var decodeParamType = support.uint8array ? "uint8array" : "array";
	        if (this.useUTF8()) {
	            this.fileNameStr = jszipProto.utf8decode(this.fileName);
	            this.fileCommentStr = jszipProto.utf8decode(this.fileComment);
	        } else {
	            var upath = this.findExtraFieldUnicodePath();
	            if (upath !== null) {
	                this.fileNameStr = upath;
	            } else {
	                var fileNameByteArray =  utils.transformTo(decodeParamType, this.fileName);
	                this.fileNameStr = this.loadOptions.decodeFileName(fileNameByteArray);
	            }
	
	            var ucomment = this.findExtraFieldUnicodeComment();
	            if (ucomment !== null) {
	                this.fileCommentStr = ucomment;
	            } else {
	                var commentByteArray =  utils.transformTo(decodeParamType, this.fileComment);
	                this.fileCommentStr = this.loadOptions.decodeFileName(commentByteArray);
	            }
	        }
	    },
	
	    /**
	     * Find the unicode path declared in the extra field, if any.
	     * @return {String} the unicode path, null otherwise.
	     */
	    findExtraFieldUnicodePath: function() {
	        var upathField = this.extraFields[0x7075];
	        if (upathField) {
	            var extraReader = new StringReader(upathField.value);
	
	            // wrong version
	            if (extraReader.readInt(1) !== 1) {
	                return null;
	            }
	
	            // the crc of the filename changed, this field is out of date.
	            if (jszipProto.crc32(this.fileName) !== extraReader.readInt(4)) {
	                return null;
	            }
	
	            return jszipProto.utf8decode(extraReader.readString(upathField.length - 5));
	        }
	        return null;
	    },
	
	    /**
	     * Find the unicode comment declared in the extra field, if any.
	     * @return {String} the unicode comment, null otherwise.
	     */
	    findExtraFieldUnicodeComment: function() {
	        var ucommentField = this.extraFields[0x6375];
	        if (ucommentField) {
	            var extraReader = new StringReader(ucommentField.value);
	
	            // wrong version
	            if (extraReader.readInt(1) !== 1) {
	                return null;
	            }
	
	            // the crc of the comment changed, this field is out of date.
	            if (jszipProto.crc32(this.fileComment) !== extraReader.readInt(4)) {
	                return null;
	            }
	
	            return jszipProto.utf8decode(extraReader.readString(ucommentField.length - 5));
	        }
	        return null;
	    }
	};
	module.exports = ZipEntry;


/***/ }),
/* 1077 */
/***/ (function(module, exports, __webpack_require__) {

	/**
	 * @module eowcs/kvp
	 */
	
	'use strict';
	
	var utils = __webpack_require__(228);
	
	/**
	 * Returns a 'DescribeEOCoverageSet' request URL with parameters encoded as KVP.
	 *
	 * @param url the base URL of the service
	 * @param eoid the ID of the coverage set
	 * @param options an object containing any the following optional parameters
	 * @param options.bbox an array of four values in the following order:
	 *                     [minx, miny, maxx, maxy]
	 * @param options.subsetX the subset of the X axis as an array in the following form:
	 *                        [minx, maxx]
	 * @param options.subsetY the subset of the Y axis as an array in the following form:
	 *                        [minx, maxx]
	 * @param options.subsetCRS the CRS definition in which the spatial subsets are
	 *                          expressed in
	 * @param options.subsetTime the subset on the time axis in the following form:
	 *                           [beginTime, endTime]
	 * @param options.containment a string describing the containment method for all
	 *                            subsets. One of "overlaps" and "contains".
	 * @param options.count an integer, limiting the maximum number of returned coverage
	 *                       descriptions within the coverage set.
	 * @param options.sections an array of strings for sections to be included, each one of
	 *                          "CoverageDescriptions" and "DatasetSeriesDescriptions".
	 *
	 * @param extraParams an object containing any extra (vendor specific)
	 *                    parameters which will be appended to the query string
	 *
	 * @returns the constructed request URL
	 */
	
	function describeEOCoverageSetURL(url, eoid, options, extraParams) {
	    if (!url || !eoid) {
	        throw new Error("Parameters 'url' and 'eoid' are mandatory.");
	    }
	    options = options || {};
	    extraParams = extraParams || {};
	
	    var params = ['service=wcs', 'version=2.0.0', 'request=describeeocoverageset', 'eoid=' + eoid];
	
	    if (options.bbox && !options.subsetX && !options.subsetY) {
	        options.subsetX = [options.bbox[0], options.bbox[2]];
	        options.subsetY = [options.bbox[1], options.bbox[3]];
	    }
	    if (options.subsetX) {
	        params.push('subset=x(' + options.subsetX[0] + ',' + options.subsetX[1] + ')');
	    }
	    if (options.subsetY) {
	        params.push('subset=y(' + options.subsetY[0] + ',' + options.subsetY[1] + ')');
	    }
	
	    if (options.subsetTime) {
	        params.push('subset=phenomenonTime("' + options.subsetTime[0] + '","' + options.subsetTime[1] + '")');
	    }
	    if (options.containment) {
	        params.push('containment=' + options.containment);
	    }
	    if (options.count) {
	        params.push('count=' + options.count);
	    }
	    if (options.sections) {
	        params.push('sections=' + options.sections.join(","));
	    }
	    var extra = utils.objectToKVP(extraParams);
	    return url + (url.charAt(url.length-1) !== "?" ? "?" : "")
	            + params.join("&") + ((extra.length > 0) ? "&" + extra : "");
	}
	
	module.exports = {
	    describeEOCoverageSetURL: describeEOCoverageSetURL
	};


/***/ }),
/* 1078 */
/***/ (function(module, exports, __webpack_require__) {

	/**
	 * @module eowcs/parse
	 */
	
	'use strict';
	
	var utils = __webpack_require__(228);
	var coreParse = __webpack_require__(371);
	
	
	var ns = {
	    wcs: "http://www.opengis.net/wcs/2.0",
	    gml: "http://www.opengis.net/gml/3.2",
	    gmlcov: "http://www.opengis.net/gmlcov/1.0",
	    eop: "http://www.opengis.net/eop/2.0",
	    wcseo: "http://www.opengis.net/wcs/wcseo/1.0",
	    wcseoold: "http://www.opengis.net/wcseo/1.0",  // support old definitions aswell
	    om: "http://www.opengis.net/om/2.0"
	}
	
	var xPath = utils.createXPath(ns);
	
	var xPathArray = utils.createXPathArray(ns);
	
	
	function parseEOCoverageSetDescription(node) {
	    var covDescriptions = xPath(node, "wcs:CoverageDescriptions");
	    var cdescs = (covDescriptions != null) ? coreParse.callParseFunctions(
	        "CoverageDescriptions", covDescriptions
	    ) : [];
	
	    var dssDescriptions = xPath(node, "wcseo:DatasetSeriesDescriptions");
	    var dssdescs = (dssDescriptions != null) ? coreParse.callParseFunctions(
	        "DatasetSeriesDescriptions", dssDescriptions
	    ) : [];
	
	    return {
	        "numberMatched": node.getAttribute("numberMatched"),
	        "numberReturned": node.getAttribute("numberReturned"),
	        "coverageDescriptions": cdescs.coverageDescriptions,
	        "datasetSeriesDescriptions": dssdescs.datasetSeriesDescriptions
	    };
	}
	
	function parseDatasetSeriesDescriptions(node) {
	    var descs = utils.map(xPathArray(node, "wcseo:DatasetSeriesDescription|wcseoold:DatasetSeriesDescription"), function(datasetSeriesDescription) {
	        return coreParse.callParseFunctions("DatasetSeriesDescription", datasetSeriesDescription);
	    });
	
	    return {datasetSeriesDescriptions: descs};
	}
	
	function parseDatasetSeriesDescription(node) {
	    return {
	        "datasetSeriesId": xPath(node, "wcseo:DatasetSeriesId/text()|wcseoold:DatasetSeriesId/text()"),
	        "timePeriod": [
	            new Date(xPath(node, "gml:TimePeriod/gml:beginPosition/text()")),
	            new Date(xPath(node, "gml:TimePeriod/gml:endPosition/text()"))
	        ]
	    };
	}
	
	function parseExtendedCapabilities(node) {
	    return {
	        "contents": {
	            "datasetSeries": utils.map(xPathArray(node, "wcs:Contents/wcs:Extension/wcseo:DatasetSeriesSummary|wcs:Contents/wcs:Extension/wcseoold:DatasetSeriesSummary"), function(sum) {
	              return coreParse.callParseFunctions("DatasetSeriesDescription", sum);
	            })
	        }
	    };
	}
	
	function parseExtendedCoverageDescription(node) {
	    var eoMetadata = xPath(node, "gmlcov:metadata/gmlcov:Extension/wcseo:EOMetadata|gmlcov:metadata/wcseo:EOMetadata|gmlcov:metadata/gmlcov:Extension/wcseoold:EOMetadata|gmlcov:metadata/wcseoold:EOMetadata");
	    if (eoMetadata) {
	        var phenomenonTime = xPath(eoMetadata, "eop:EarthObservation/om:phenomenonTime");
	        return {
	            "footprint": utils.stringToFloatArray(xPath(eoMetadata, "eop:EarthObservation/om:featureOfInterest/eop:Footprint/eop:multiExtentOf/gml:MultiSurface/gml:surfaceMember/gml:Polygon/gml:exterior/gml:LinearRing/gml:posList/text()")),
	            "timePeriod": [
	                new Date(xPath(phenomenonTime, "gml:TimePeriod/gml:beginPosition/text()")),
	                new Date(xPath(phenomenonTime, "gml:TimePeriod/gml:endPosition/text()"))
	            ]
	        };
	    }
	    else return {};
	}
	
	var parseFunctions = {
	    "EOCoverageSetDescription": parseEOCoverageSetDescription,
	    "DatasetSeriesDescriptions": parseDatasetSeriesDescriptions,
	    "DatasetSeriesDescription": parseDatasetSeriesDescription,
	    "Capabilities": parseExtendedCapabilities,
	    "CoverageDescription": parseExtendedCoverageDescription
	};
	
	module.exports = {
	    parseFunctions: parseFunctions
	}


/***/ }),
/* 1079 */
/***/ (function(module, exports) {

	;(function () { // closure for web browsers
	
	if (typeof module === 'object' && module.exports) {
	  module.exports = LRUCache
	} else {
	  // just set the global for non-node platforms.
	  this.LRUCache = LRUCache
	}
	
	function hOP (obj, key) {
	  return Object.prototype.hasOwnProperty.call(obj, key)
	}
	
	function naiveLength () { return 1 }
	
	var didTypeWarning = false
	function typeCheckKey(key) {
	  if (!didTypeWarning && typeof key !== 'string' && typeof key !== 'number') {
	    didTypeWarning = true
	    console.error(new TypeError("LRU: key must be a string or number. Almost certainly a bug! " + typeof key).stack)
	  }
	}
	
	function LRUCache (options) {
	  if (!(this instanceof LRUCache))
	    return new LRUCache(options)
	
	  if (typeof options === 'number')
	    options = { max: options }
	
	  if (!options)
	    options = {}
	
	  this._max = options.max
	  // Kind of weird to have a default max of Infinity, but oh well.
	  if (!this._max || !(typeof this._max === "number") || this._max <= 0 )
	    this._max = Infinity
	
	  this._lengthCalculator = options.length || naiveLength
	  if (typeof this._lengthCalculator !== "function")
	    this._lengthCalculator = naiveLength
	
	  this._allowStale = options.stale || false
	  this._maxAge = options.maxAge || null
	  this._dispose = options.dispose
	  this.reset()
	}
	
	// resize the cache when the max changes.
	Object.defineProperty(LRUCache.prototype, "max",
	  { set : function (mL) {
	      if (!mL || !(typeof mL === "number") || mL <= 0 ) mL = Infinity
	      this._max = mL
	      if (this._length > this._max) trim(this)
	    }
	  , get : function () { return this._max }
	  , enumerable : true
	  })
	
	// resize the cache when the lengthCalculator changes.
	Object.defineProperty(LRUCache.prototype, "lengthCalculator",
	  { set : function (lC) {
	      if (typeof lC !== "function") {
	        this._lengthCalculator = naiveLength
	        this._length = this._itemCount
	        for (var key in this._cache) {
	          this._cache[key].length = 1
	        }
	      } else {
	        this._lengthCalculator = lC
	        this._length = 0
	        for (var key in this._cache) {
	          this._cache[key].length = this._lengthCalculator(this._cache[key].value)
	          this._length += this._cache[key].length
	        }
	      }
	
	      if (this._length > this._max) trim(this)
	    }
	  , get : function () { return this._lengthCalculator }
	  , enumerable : true
	  })
	
	Object.defineProperty(LRUCache.prototype, "length",
	  { get : function () { return this._length }
	  , enumerable : true
	  })
	
	
	Object.defineProperty(LRUCache.prototype, "itemCount",
	  { get : function () { return this._itemCount }
	  , enumerable : true
	  })
	
	LRUCache.prototype.forEach = function (fn, thisp) {
	  thisp = thisp || this
	  var i = 0
	  var itemCount = this._itemCount
	
	  for (var k = this._mru - 1; k >= 0 && i < itemCount; k--) if (this._lruList[k]) {
	    i++
	    var hit = this._lruList[k]
	    if (isStale(this, hit)) {
	      del(this, hit)
	      if (!this._allowStale) hit = undefined
	    }
	    if (hit) {
	      fn.call(thisp, hit.value, hit.key, this)
	    }
	  }
	}
	
	LRUCache.prototype.keys = function () {
	  var keys = new Array(this._itemCount)
	  var i = 0
	  for (var k = this._mru - 1; k >= 0 && i < this._itemCount; k--) if (this._lruList[k]) {
	    var hit = this._lruList[k]
	    keys[i++] = hit.key
	  }
	  return keys
	}
	
	LRUCache.prototype.values = function () {
	  var values = new Array(this._itemCount)
	  var i = 0
	  for (var k = this._mru - 1; k >= 0 && i < this._itemCount; k--) if (this._lruList[k]) {
	    var hit = this._lruList[k]
	    values[i++] = hit.value
	  }
	  return values
	}
	
	LRUCache.prototype.reset = function () {
	  if (this._dispose && this._cache) {
	    for (var k in this._cache) {
	      this._dispose(k, this._cache[k].value)
	    }
	  }
	
	  this._cache = Object.create(null) // hash of items by key
	  this._lruList = Object.create(null) // list of items in order of use recency
	  this._mru = 0 // most recently used
	  this._lru = 0 // least recently used
	  this._length = 0 // number of items in the list
	  this._itemCount = 0
	}
	
	LRUCache.prototype.dump = function () {
	  var arr = []
	  var i = 0
	
	  for (var k = this._mru - 1; k >= 0 && i < this._itemCount; k--) if (this._lruList[k]) {
	    var hit = this._lruList[k]
	    if (!isStale(this, hit)) {
	      //Do not store staled hits
	      ++i
	      arr.push({
	        k: hit.key,
	        v: hit.value,
	        e: hit.now + (hit.maxAge || 0)
	      });
	    }
	  }
	  //arr has the most read first
	  return arr
	}
	
	LRUCache.prototype.dumpLru = function () {
	  return this._lruList
	}
	
	LRUCache.prototype.set = function (key, value, maxAge) {
	  maxAge = maxAge || this._maxAge
	  typeCheckKey(key)
	
	  var now = maxAge ? Date.now() : 0
	  var len = this._lengthCalculator(value)
	
	  if (hOP(this._cache, key)) {
	    if (len > this._max) {
	      del(this, this._cache[key])
	      return false
	    }
	    // dispose of the old one before overwriting
	    if (this._dispose)
	      this._dispose(key, this._cache[key].value)
	
	    this._cache[key].now = now
	    this._cache[key].maxAge = maxAge
	    this._cache[key].value = value
	    this._length += (len - this._cache[key].length)
	    this._cache[key].length = len
	    this.get(key)
	
	    if (this._length > this._max)
	      trim(this)
	
	    return true
	  }
	
	  var hit = new Entry(key, value, this._mru++, len, now, maxAge)
	
	  // oversized objects fall out of cache automatically.
	  if (hit.length > this._max) {
	    if (this._dispose) this._dispose(key, value)
	    return false
	  }
	
	  this._length += hit.length
	  this._lruList[hit.lu] = this._cache[key] = hit
	  this._itemCount ++
	
	  if (this._length > this._max)
	    trim(this)
	
	  return true
	}
	
	LRUCache.prototype.has = function (key) {
	  typeCheckKey(key)
	  if (!hOP(this._cache, key)) return false
	  var hit = this._cache[key]
	  if (isStale(this, hit)) {
	    return false
	  }
	  return true
	}
	
	LRUCache.prototype.get = function (key) {
	  typeCheckKey(key)
	  return get(this, key, true)
	}
	
	LRUCache.prototype.peek = function (key) {
	  typeCheckKey(key)
	  return get(this, key, false)
	}
	
	LRUCache.prototype.pop = function () {
	  var hit = this._lruList[this._lru]
	  del(this, hit)
	  return hit || null
	}
	
	LRUCache.prototype.del = function (key) {
	  typeCheckKey(key)
	  del(this, this._cache[key])
	}
	
	LRUCache.prototype.load = function (arr) {
	  //reset the cache
	  this.reset();
	
	  var now = Date.now()
	  //A previous serialized cache has the most recent items first
	  for (var l = arr.length - 1; l >= 0; l-- ) {
	    var hit = arr[l]
	    typeCheckKey(hit.k)
	    var expiresAt = hit.e || 0
	    if (expiresAt === 0) {
	      //the item was created without expiration in a non aged cache
	      this.set(hit.k, hit.v)
	    } else {
	      var maxAge = expiresAt - now
	      //dont add already expired items
	      if (maxAge > 0) this.set(hit.k, hit.v, maxAge)
	    }
	  }
	}
	
	function get (self, key, doUse) {
	  typeCheckKey(key)
	  var hit = self._cache[key]
	  if (hit) {
	    if (isStale(self, hit)) {
	      del(self, hit)
	      if (!self._allowStale) hit = undefined
	    } else {
	      if (doUse) use(self, hit)
	    }
	    if (hit) hit = hit.value
	  }
	  return hit
	}
	
	function isStale(self, hit) {
	  if (!hit || (!hit.maxAge && !self._maxAge)) return false
	  var stale = false;
	  var diff = Date.now() - hit.now
	  if (hit.maxAge) {
	    stale = diff > hit.maxAge
	  } else {
	    stale = self._maxAge && (diff > self._maxAge)
	  }
	  return stale;
	}
	
	function use (self, hit) {
	  shiftLU(self, hit)
	  hit.lu = self._mru ++
	  self._lruList[hit.lu] = hit
	}
	
	function trim (self) {
	  while (self._lru < self._mru && self._length > self._max)
	    del(self, self._lruList[self._lru])
	}
	
	function shiftLU (self, hit) {
	  delete self._lruList[ hit.lu ]
	  while (self._lru < self._mru && !self._lruList[self._lru]) self._lru ++
	}
	
	function del (self, hit) {
	  if (hit) {
	    if (self._dispose) self._dispose(hit.key, hit.value)
	    self._length -= hit.length
	    self._itemCount --
	    delete self._cache[ hit.key ]
	    shiftLU(self, hit)
	  }
	}
	
	// classy, since V8 prefers predictable objects.
	function Entry (key, value, lu, length, now, maxAge) {
	  this.key = key
	  this.value = value
	  this.lu = lu
	  this.length = length
	  this.now = now
	  if (maxAge) this.maxAge = maxAge
	}
	
	})()


/***/ }),
/* 1080 */
/***/ (function(module, exports, __webpack_require__) {

	var moment = module.exports = __webpack_require__(1081);
	moment.tz.load(__webpack_require__(1065));


/***/ }),
/* 1081 */
/***/ (function(module, exports, __webpack_require__) {

	var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;//! moment-timezone.js
	//! version : 0.5.31
	//! Copyright (c) JS Foundation and other contributors
	//! license : MIT
	//! github.com/moment/moment-timezone
	
	(function (root, factory) {
		"use strict";
	
		/*global define*/
		if (typeof module === 'object' && module.exports) {
			module.exports = factory(__webpack_require__(2)); // Node
		} else if (true) {
			!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(2)], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));                 // AMD
		} else {
			factory(root.moment);                        // Browser
		}
	}(this, function (moment) {
		"use strict";
	
		// Resolves es6 module loading issue
		if (moment.version === undefined && moment.default) {
			moment = moment.default;
		}
	
		// Do not load moment-timezone a second time.
		// if (moment.tz !== undefined) {
		// 	logError('Moment Timezone ' + moment.tz.version + ' was already loaded ' + (moment.tz.dataVersion ? 'with data from ' : 'without any data') + moment.tz.dataVersion);
		// 	return moment;
		// }
	
		var VERSION = "0.5.31",
			zones = {},
			links = {},
			countries = {},
			names = {},
			guesses = {},
			cachedGuess;
	
		if (!moment || typeof moment.version !== 'string') {
			logError('Moment Timezone requires Moment.js. See https://momentjs.com/timezone/docs/#/use-it/browser/');
		}
	
		var momentVersion = moment.version.split('.'),
			major = +momentVersion[0],
			minor = +momentVersion[1];
	
		// Moment.js version check
		if (major < 2 || (major === 2 && minor < 6)) {
			logError('Moment Timezone requires Moment.js >= 2.6.0. You are using Moment.js ' + moment.version + '. See momentjs.com');
		}
	
		/************************************
			Unpacking
		************************************/
	
		function charCodeToInt(charCode) {
			if (charCode > 96) {
				return charCode - 87;
			} else if (charCode > 64) {
				return charCode - 29;
			}
			return charCode - 48;
		}
	
		function unpackBase60(string) {
			var i = 0,
				parts = string.split('.'),
				whole = parts[0],
				fractional = parts[1] || '',
				multiplier = 1,
				num,
				out = 0,
				sign = 1;
	
			// handle negative numbers
			if (string.charCodeAt(0) === 45) {
				i = 1;
				sign = -1;
			}
	
			// handle digits before the decimal
			for (i; i < whole.length; i++) {
				num = charCodeToInt(whole.charCodeAt(i));
				out = 60 * out + num;
			}
	
			// handle digits after the decimal
			for (i = 0; i < fractional.length; i++) {
				multiplier = multiplier / 60;
				num = charCodeToInt(fractional.charCodeAt(i));
				out += num * multiplier;
			}
	
			return out * sign;
		}
	
		function arrayToInt (array) {
			for (var i = 0; i < array.length; i++) {
				array[i] = unpackBase60(array[i]);
			}
		}
	
		function intToUntil (array, length) {
			for (var i = 0; i < length; i++) {
				array[i] = Math.round((array[i - 1] || 0) + (array[i] * 60000)); // minutes to milliseconds
			}
	
			array[length - 1] = Infinity;
		}
	
		function mapIndices (source, indices) {
			var out = [], i;
	
			for (i = 0; i < indices.length; i++) {
				out[i] = source[indices[i]];
			}
	
			return out;
		}
	
		function unpack (string) {
			var data = string.split('|'),
				offsets = data[2].split(' '),
				indices = data[3].split(''),
				untils  = data[4].split(' ');
	
			arrayToInt(offsets);
			arrayToInt(indices);
			arrayToInt(untils);
	
			intToUntil(untils, indices.length);
	
			return {
				name       : data[0],
				abbrs      : mapIndices(data[1].split(' '), indices),
				offsets    : mapIndices(offsets, indices),
				untils     : untils,
				population : data[5] | 0
			};
		}
	
		/************************************
			Zone object
		************************************/
	
		function Zone (packedString) {
			if (packedString) {
				this._set(unpack(packedString));
			}
		}
	
		Zone.prototype = {
			_set : function (unpacked) {
				this.name       = unpacked.name;
				this.abbrs      = unpacked.abbrs;
				this.untils     = unpacked.untils;
				this.offsets    = unpacked.offsets;
				this.population = unpacked.population;
			},
	
			_index : function (timestamp) {
				var target = +timestamp,
					untils = this.untils,
					i;
	
				for (i = 0; i < untils.length; i++) {
					if (target < untils[i]) {
						return i;
					}
				}
			},
	
			countries : function () {
				var zone_name = this.name;
				return Object.keys(countries).filter(function (country_code) {
					return countries[country_code].zones.indexOf(zone_name) !== -1;
				});
			},
	
			parse : function (timestamp) {
				var target  = +timestamp,
					offsets = this.offsets,
					untils  = this.untils,
					max     = untils.length - 1,
					offset, offsetNext, offsetPrev, i;
	
				for (i = 0; i < max; i++) {
					offset     = offsets[i];
					offsetNext = offsets[i + 1];
					offsetPrev = offsets[i ? i - 1 : i];
	
					if (offset < offsetNext && tz.moveAmbiguousForward) {
						offset = offsetNext;
					} else if (offset > offsetPrev && tz.moveInvalidForward) {
						offset = offsetPrev;
					}
	
					if (target < untils[i] - (offset * 60000)) {
						return offsets[i];
					}
				}
	
				return offsets[max];
			},
	
			abbr : function (mom) {
				return this.abbrs[this._index(mom)];
			},
	
			offset : function (mom) {
				logError("zone.offset has been deprecated in favor of zone.utcOffset");
				return this.offsets[this._index(mom)];
			},
	
			utcOffset : function (mom) {
				return this.offsets[this._index(mom)];
			}
		};
	
		/************************************
			Country object
		************************************/
	
		function Country (country_name, zone_names) {
			this.name = country_name;
			this.zones = zone_names;
		}
	
		/************************************
			Current Timezone
		************************************/
	
		function OffsetAt(at) {
			var timeString = at.toTimeString();
			var abbr = timeString.match(/\([a-z ]+\)/i);
			if (abbr && abbr[0]) {
				// 17:56:31 GMT-0600 (CST)
				// 17:56:31 GMT-0600 (Central Standard Time)
				abbr = abbr[0].match(/[A-Z]/g);
				abbr = abbr ? abbr.join('') : undefined;
			} else {
				// 17:56:31 CST
				// 17:56:31 GMT+0800 (台北標準時間)
				abbr = timeString.match(/[A-Z]{3,5}/g);
				abbr = abbr ? abbr[0] : undefined;
			}
	
			if (abbr === 'GMT') {
				abbr = undefined;
			}
	
			this.at = +at;
			this.abbr = abbr;
			this.offset = at.getTimezoneOffset();
		}
	
		function ZoneScore(zone) {
			this.zone = zone;
			this.offsetScore = 0;
			this.abbrScore = 0;
		}
	
		ZoneScore.prototype.scoreOffsetAt = function (offsetAt) {
			this.offsetScore += Math.abs(this.zone.utcOffset(offsetAt.at) - offsetAt.offset);
			if (this.zone.abbr(offsetAt.at).replace(/[^A-Z]/g, '') !== offsetAt.abbr) {
				this.abbrScore++;
			}
		};
	
		function findChange(low, high) {
			var mid, diff;
	
			while ((diff = ((high.at - low.at) / 12e4 | 0) * 6e4)) {
				mid = new OffsetAt(new Date(low.at + diff));
				if (mid.offset === low.offset) {
					low = mid;
				} else {
					high = mid;
				}
			}
	
			return low;
		}
	
		function userOffsets() {
			var startYear = new Date().getFullYear() - 2,
				last = new OffsetAt(new Date(startYear, 0, 1)),
				offsets = [last],
				change, next, i;
	
			for (i = 1; i < 48; i++) {
				next = new OffsetAt(new Date(startYear, i, 1));
				if (next.offset !== last.offset) {
					change = findChange(last, next);
					offsets.push(change);
					offsets.push(new OffsetAt(new Date(change.at + 6e4)));
				}
				last = next;
			}
	
			for (i = 0; i < 4; i++) {
				offsets.push(new OffsetAt(new Date(startYear + i, 0, 1)));
				offsets.push(new OffsetAt(new Date(startYear + i, 6, 1)));
			}
	
			return offsets;
		}
	
		function sortZoneScores (a, b) {
			if (a.offsetScore !== b.offsetScore) {
				return a.offsetScore - b.offsetScore;
			}
			if (a.abbrScore !== b.abbrScore) {
				return a.abbrScore - b.abbrScore;
			}
			if (a.zone.population !== b.zone.population) {
				return b.zone.population - a.zone.population;
			}
			return b.zone.name.localeCompare(a.zone.name);
		}
	
		function addToGuesses (name, offsets) {
			var i, offset;
			arrayToInt(offsets);
			for (i = 0; i < offsets.length; i++) {
				offset = offsets[i];
				guesses[offset] = guesses[offset] || {};
				guesses[offset][name] = true;
			}
		}
	
		function guessesForUserOffsets (offsets) {
			var offsetsLength = offsets.length,
				filteredGuesses = {},
				out = [],
				i, j, guessesOffset;
	
			for (i = 0; i < offsetsLength; i++) {
				guessesOffset = guesses[offsets[i].offset] || {};
				for (j in guessesOffset) {
					if (guessesOffset.hasOwnProperty(j)) {
						filteredGuesses[j] = true;
					}
				}
			}
	
			for (i in filteredGuesses) {
				if (filteredGuesses.hasOwnProperty(i)) {
					out.push(names[i]);
				}
			}
	
			return out;
		}
	
		function rebuildGuess () {
	
			// use Intl API when available and returning valid time zone
			try {
				var intlName = Intl.DateTimeFormat().resolvedOptions().timeZone;
				if (intlName && intlName.length > 3) {
					var name = names[normalizeName(intlName)];
					if (name) {
						return name;
					}
					logError("Moment Timezone found " + intlName + " from the Intl api, but did not have that data loaded.");
				}
			} catch (e) {
				// Intl unavailable, fall back to manual guessing.
			}
	
			var offsets = userOffsets(),
				offsetsLength = offsets.length,
				guesses = guessesForUserOffsets(offsets),
				zoneScores = [],
				zoneScore, i, j;
	
			for (i = 0; i < guesses.length; i++) {
				zoneScore = new ZoneScore(getZone(guesses[i]), offsetsLength);
				for (j = 0; j < offsetsLength; j++) {
					zoneScore.scoreOffsetAt(offsets[j]);
				}
				zoneScores.push(zoneScore);
			}
	
			zoneScores.sort(sortZoneScores);
	
			return zoneScores.length > 0 ? zoneScores[0].zone.name : undefined;
		}
	
		function guess (ignoreCache) {
			if (!cachedGuess || ignoreCache) {
				cachedGuess = rebuildGuess();
			}
			return cachedGuess;
		}
	
		/************************************
			Global Methods
		************************************/
	
		function normalizeName (name) {
			return (name || '').toLowerCase().replace(/\//g, '_');
		}
	
		function addZone (packed) {
			var i, name, split, normalized;
	
			if (typeof packed === "string") {
				packed = [packed];
			}
	
			for (i = 0; i < packed.length; i++) {
				split = packed[i].split('|');
				name = split[0];
				normalized = normalizeName(name);
				zones[normalized] = packed[i];
				names[normalized] = name;
				addToGuesses(normalized, split[2].split(' '));
			}
		}
	
		function getZone (name, caller) {
	
			name = normalizeName(name);
	
			var zone = zones[name];
			var link;
	
			if (zone instanceof Zone) {
				return zone;
			}
	
			if (typeof zone === 'string') {
				zone = new Zone(zone);
				zones[name] = zone;
				return zone;
			}
	
			// Pass getZone to prevent recursion more than 1 level deep
			if (links[name] && caller !== getZone && (link = getZone(links[name], getZone))) {
				zone = zones[name] = new Zone();
				zone._set(link);
				zone.name = names[name];
				return zone;
			}
	
			return null;
		}
	
		function getNames () {
			var i, out = [];
	
			for (i in names) {
				if (names.hasOwnProperty(i) && (zones[i] || zones[links[i]]) && names[i]) {
					out.push(names[i]);
				}
			}
	
			return out.sort();
		}
	
		function getCountryNames () {
			return Object.keys(countries);
		}
	
		function addLink (aliases) {
			var i, alias, normal0, normal1;
	
			if (typeof aliases === "string") {
				aliases = [aliases];
			}
	
			for (i = 0; i < aliases.length; i++) {
				alias = aliases[i].split('|');
	
				normal0 = normalizeName(alias[0]);
				normal1 = normalizeName(alias[1]);
	
				links[normal0] = normal1;
				names[normal0] = alias[0];
	
				links[normal1] = normal0;
				names[normal1] = alias[1];
			}
		}
	
		function addCountries (data) {
			var i, country_code, country_zones, split;
			if (!data || !data.length) return;
			for (i = 0; i < data.length; i++) {
				split = data[i].split('|');
				country_code = split[0].toUpperCase();
				country_zones = split[1].split(' ');
				countries[country_code] = new Country(
					country_code,
					country_zones
				);
			}
		}
	
		function getCountry (name) {
			name = name.toUpperCase();
			return countries[name] || null;
		}
	
		function zonesForCountry(country, with_offset) {
			country = getCountry(country);
	
			if (!country) return null;
	
			var zones = country.zones.sort();
	
			if (with_offset) {
				return zones.map(function (zone_name) {
					var zone = getZone(zone_name);
					return {
						name: zone_name,
						offset: zone.utcOffset(new Date())
					};
				});
			}
	
			return zones;
		}
	
		function loadData (data) {
			addZone(data.zones);
			addLink(data.links);
			addCountries(data.countries);
			tz.dataVersion = data.version;
		}
	
		function zoneExists (name) {
			if (!zoneExists.didShowError) {
				zoneExists.didShowError = true;
					logError("moment.tz.zoneExists('" + name + "') has been deprecated in favor of !moment.tz.zone('" + name + "')");
			}
			return !!getZone(name);
		}
	
		function needsOffset (m) {
			var isUnixTimestamp = (m._f === 'X' || m._f === 'x');
			return !!(m._a && (m._tzm === undefined) && !isUnixTimestamp);
		}
	
		function logError (message) {
			if (typeof console !== 'undefined' && typeof console.error === 'function') {
				console.error(message);
			}
		}
	
		/************************************
			moment.tz namespace
		************************************/
	
		function tz (input) {
			var args = Array.prototype.slice.call(arguments, 0, -1),
				name = arguments[arguments.length - 1],
				zone = getZone(name),
				out  = moment.utc.apply(null, args);
	
			if (zone && !moment.isMoment(input) && needsOffset(out)) {
				out.add(zone.parse(out), 'minutes');
			}
	
			out.tz(name);
	
			return out;
		}
	
		tz.version      = VERSION;
		tz.dataVersion  = '';
		tz._zones       = zones;
		tz._links       = links;
		tz._names       = names;
		tz._countries	= countries;
		tz.add          = addZone;
		tz.link         = addLink;
		tz.load         = loadData;
		tz.zone         = getZone;
		tz.zoneExists   = zoneExists; // deprecated in 0.1.0
		tz.guess        = guess;
		tz.names        = getNames;
		tz.Zone         = Zone;
		tz.unpack       = unpack;
		tz.unpackBase60 = unpackBase60;
		tz.needsOffset  = needsOffset;
		tz.moveInvalidForward   = true;
		tz.moveAmbiguousForward = false;
		tz.countries    = getCountryNames;
		tz.zonesForCountry = zonesForCountry;
	
		/************************************
			Interface with Moment.js
		************************************/
	
		var fn = moment.fn;
	
		moment.tz = tz;
	
		moment.defaultZone = null;
	
		moment.updateOffset = function (mom, keepTime) {
			var zone = moment.defaultZone,
				offset;
	
			if (mom._z === undefined) {
				if (zone && needsOffset(mom) && !mom._isUTC) {
					mom._d = moment.utc(mom._a)._d;
					mom.utc().add(zone.parse(mom), 'minutes');
				}
				mom._z = zone;
			}
			if (mom._z) {
				offset = mom._z.utcOffset(mom);
				if (Math.abs(offset) < 16) {
					offset = offset / 60;
				}
				if (mom.utcOffset !== undefined) {
					var z = mom._z;
					mom.utcOffset(-offset, keepTime);
					mom._z = z;
				} else {
					mom.zone(offset, keepTime);
				}
			}
		};
	
		fn.tz = function (name, keepTime) {
			if (name) {
				if (typeof name !== 'string') {
					throw new Error('Time zone name must be a string, got ' + name + ' [' + typeof name + ']');
				}
				this._z = getZone(name);
				if (this._z) {
					moment.updateOffset(this, keepTime);
				} else {
					logError("Moment Timezone has no data for " + name + ". See http://momentjs.com/timezone/docs/#/data-loading/.");
				}
				return this;
			}
			if (this._z) { return this._z.name; }
		};
	
		function abbrWrap (old) {
			return function () {
				if (this._z) { return this._z.abbr(this); }
				return old.call(this);
			};
		}
	
		function resetZoneWrap (old) {
			return function () {
				this._z = null;
				return old.apply(this, arguments);
			};
		}
	
		function resetZoneWrap2 (old) {
			return function () {
				if (arguments.length > 0) this._z = null;
				return old.apply(this, arguments);
			};
		}
	
		fn.zoneName  = abbrWrap(fn.zoneName);
		fn.zoneAbbr  = abbrWrap(fn.zoneAbbr);
		fn.utc       = resetZoneWrap(fn.utc);
		fn.local     = resetZoneWrap(fn.local);
		fn.utcOffset = resetZoneWrap2(fn.utcOffset);
	
		moment.tz.setDefault = function(name) {
			if (major < 2 || (major === 2 && minor < 9)) {
				logError('Moment Timezone setDefault() requires Moment.js >= 2.9.0. You are using Moment.js ' + moment.version + '.');
			}
			moment.defaultZone = name ? getZone(name) : null;
			return moment;
		};
	
		// Cloning a moment should include the _z property.
		var momentProperties = moment.momentProperties;
		if (Object.prototype.toString.call(momentProperties) === '[object Array]') {
			// moment 2.8.1+
			momentProperties.push('_z');
			momentProperties.push('_a');
		} else if (momentProperties) {
			// moment 2.7.0
			momentProperties._z = null;
		}
	
		// INJECT DATA
	
		return moment;
	}));


/***/ }),
/* 1082 */
/***/ (function(module, exports, __webpack_require__) {

	var map = {
		"./af": 373,
		"./af.js": 373,
		"./ar": 380,
		"./ar-dz": 374,
		"./ar-dz.js": 374,
		"./ar-kw": 375,
		"./ar-kw.js": 375,
		"./ar-ly": 376,
		"./ar-ly.js": 376,
		"./ar-ma": 377,
		"./ar-ma.js": 377,
		"./ar-sa": 378,
		"./ar-sa.js": 378,
		"./ar-tn": 379,
		"./ar-tn.js": 379,
		"./ar.js": 380,
		"./az": 381,
		"./az.js": 381,
		"./be": 382,
		"./be.js": 382,
		"./bg": 383,
		"./bg.js": 383,
		"./bm": 384,
		"./bm.js": 384,
		"./bn": 385,
		"./bn.js": 385,
		"./bo": 386,
		"./bo.js": 386,
		"./br": 387,
		"./br.js": 387,
		"./bs": 388,
		"./bs.js": 388,
		"./ca": 389,
		"./ca.js": 389,
		"./cs": 390,
		"./cs.js": 390,
		"./cv": 391,
		"./cv.js": 391,
		"./cy": 392,
		"./cy.js": 392,
		"./da": 393,
		"./da.js": 393,
		"./de": 396,
		"./de-at": 394,
		"./de-at.js": 394,
		"./de-ch": 395,
		"./de-ch.js": 395,
		"./de.js": 396,
		"./dv": 397,
		"./dv.js": 397,
		"./el": 398,
		"./el.js": 398,
		"./en-au": 399,
		"./en-au.js": 399,
		"./en-ca": 400,
		"./en-ca.js": 400,
		"./en-gb": 401,
		"./en-gb.js": 401,
		"./en-ie": 402,
		"./en-ie.js": 402,
		"./en-il": 403,
		"./en-il.js": 403,
		"./en-in": 404,
		"./en-in.js": 404,
		"./en-nz": 405,
		"./en-nz.js": 405,
		"./en-sg": 406,
		"./en-sg.js": 406,
		"./eo": 407,
		"./eo.js": 407,
		"./es": 410,
		"./es-do": 408,
		"./es-do.js": 408,
		"./es-us": 409,
		"./es-us.js": 409,
		"./es.js": 410,
		"./et": 411,
		"./et.js": 411,
		"./eu": 412,
		"./eu.js": 412,
		"./fa": 413,
		"./fa.js": 413,
		"./fi": 414,
		"./fi.js": 414,
		"./fil": 415,
		"./fil.js": 415,
		"./fo": 416,
		"./fo.js": 416,
		"./fr": 419,
		"./fr-ca": 417,
		"./fr-ca.js": 417,
		"./fr-ch": 418,
		"./fr-ch.js": 418,
		"./fr.js": 419,
		"./fy": 420,
		"./fy.js": 420,
		"./ga": 421,
		"./ga.js": 421,
		"./gd": 422,
		"./gd.js": 422,
		"./gl": 423,
		"./gl.js": 423,
		"./gom-deva": 424,
		"./gom-deva.js": 424,
		"./gom-latn": 425,
		"./gom-latn.js": 425,
		"./gu": 426,
		"./gu.js": 426,
		"./he": 427,
		"./he.js": 427,
		"./hi": 428,
		"./hi.js": 428,
		"./hr": 429,
		"./hr.js": 429,
		"./hu": 430,
		"./hu.js": 430,
		"./hy-am": 431,
		"./hy-am.js": 431,
		"./id": 432,
		"./id.js": 432,
		"./is": 433,
		"./is.js": 433,
		"./it": 435,
		"./it-ch": 434,
		"./it-ch.js": 434,
		"./it.js": 435,
		"./ja": 436,
		"./ja.js": 436,
		"./jv": 437,
		"./jv.js": 437,
		"./ka": 438,
		"./ka.js": 438,
		"./kk": 439,
		"./kk.js": 439,
		"./km": 440,
		"./km.js": 440,
		"./kn": 441,
		"./kn.js": 441,
		"./ko": 442,
		"./ko.js": 442,
		"./ku": 443,
		"./ku.js": 443,
		"./ky": 444,
		"./ky.js": 444,
		"./lb": 445,
		"./lb.js": 445,
		"./lo": 446,
		"./lo.js": 446,
		"./lt": 447,
		"./lt.js": 447,
		"./lv": 448,
		"./lv.js": 448,
		"./me": 449,
		"./me.js": 449,
		"./mi": 450,
		"./mi.js": 450,
		"./mk": 451,
		"./mk.js": 451,
		"./ml": 452,
		"./ml.js": 452,
		"./mn": 453,
		"./mn.js": 453,
		"./mr": 454,
		"./mr.js": 454,
		"./ms": 456,
		"./ms-my": 455,
		"./ms-my.js": 455,
		"./ms.js": 456,
		"./mt": 457,
		"./mt.js": 457,
		"./my": 458,
		"./my.js": 458,
		"./nb": 459,
		"./nb.js": 459,
		"./ne": 460,
		"./ne.js": 460,
		"./nl": 462,
		"./nl-be": 461,
		"./nl-be.js": 461,
		"./nl.js": 462,
		"./nn": 463,
		"./nn.js": 463,
		"./oc-lnc": 464,
		"./oc-lnc.js": 464,
		"./pa-in": 465,
		"./pa-in.js": 465,
		"./pl": 466,
		"./pl.js": 466,
		"./pt": 468,
		"./pt-br": 467,
		"./pt-br.js": 467,
		"./pt.js": 468,
		"./ro": 469,
		"./ro.js": 469,
		"./ru": 470,
		"./ru.js": 470,
		"./sd": 471,
		"./sd.js": 471,
		"./se": 472,
		"./se.js": 472,
		"./si": 473,
		"./si.js": 473,
		"./sk": 474,
		"./sk.js": 474,
		"./sl": 475,
		"./sl.js": 475,
		"./sq": 476,
		"./sq.js": 476,
		"./sr": 478,
		"./sr-cyrl": 477,
		"./sr-cyrl.js": 477,
		"./sr.js": 478,
		"./ss": 479,
		"./ss.js": 479,
		"./sv": 480,
		"./sv.js": 480,
		"./sw": 481,
		"./sw.js": 481,
		"./ta": 482,
		"./ta.js": 482,
		"./te": 483,
		"./te.js": 483,
		"./tet": 484,
		"./tet.js": 484,
		"./tg": 485,
		"./tg.js": 485,
		"./th": 486,
		"./th.js": 486,
		"./tk": 487,
		"./tk.js": 487,
		"./tl-ph": 488,
		"./tl-ph.js": 488,
		"./tlh": 489,
		"./tlh.js": 489,
		"./tr": 490,
		"./tr.js": 490,
		"./tzl": 491,
		"./tzl.js": 491,
		"./tzm": 493,
		"./tzm-latn": 492,
		"./tzm-latn.js": 492,
		"./tzm.js": 493,
		"./ug-cn": 494,
		"./ug-cn.js": 494,
		"./uk": 495,
		"./uk.js": 495,
		"./ur": 496,
		"./ur.js": 496,
		"./uz": 498,
		"./uz-latn": 497,
		"./uz-latn.js": 497,
		"./uz.js": 498,
		"./vi": 499,
		"./vi.js": 499,
		"./x-pseudo": 500,
		"./x-pseudo.js": 500,
		"./yo": 501,
		"./yo.js": 501,
		"./zh-cn": 502,
		"./zh-cn.js": 502,
		"./zh-hk": 503,
		"./zh-hk.js": 503,
		"./zh-mo": 504,
		"./zh-mo.js": 504,
		"./zh-tw": 505,
		"./zh-tw.js": 505
	};
	function webpackContext(req) {
		return __webpack_require__(webpackContextResolve(req));
	};
	function webpackContextResolve(req) {
		return map[req] || (function() { throw new Error("Cannot find module '" + req + "'.") }());
	};
	webpackContext.keys = function webpackContextKeys() {
		return Object.keys(map);
	};
	webpackContext.resolve = webpackContextResolve;
	module.exports = webpackContext;
	webpackContext.id = 1082;


/***/ }),
/* 1083 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	var define = __webpack_require__(134);
	var callBind = __webpack_require__(352);
	
	var implementation = __webpack_require__(506);
	var getPolyfill = __webpack_require__(247);
	var shim = __webpack_require__(1084);
	
	var polyfill = callBind(getPolyfill(), Object);
	
	define(polyfill, {
		getPolyfill: getPolyfill,
		implementation: implementation,
		shim: shim
	});
	
	module.exports = polyfill;


/***/ }),
/* 1084 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	var getPolyfill = __webpack_require__(247);
	var define = __webpack_require__(134);
	
	module.exports = function shimObjectIs() {
		var polyfill = getPolyfill();
		define(Object, { is: polyfill }, {
			is: function testObjectIs() {
				return Object.is !== polyfill;
			}
		});
		return polyfill;
	};


/***/ }),
/* 1085 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	var keysShim;
	if (!Object.keys) {
		// modified from https://github.com/es-shims/es5-shim
		var has = Object.prototype.hasOwnProperty;
		var toStr = Object.prototype.toString;
		var isArgs = __webpack_require__(508); // eslint-disable-line global-require
		var isEnumerable = Object.prototype.propertyIsEnumerable;
		var hasDontEnumBug = !isEnumerable.call({ toString: null }, 'toString');
		var hasProtoEnumBug = isEnumerable.call(function () {}, 'prototype');
		var dontEnums = [
			'toString',
			'toLocaleString',
			'valueOf',
			'hasOwnProperty',
			'isPrototypeOf',
			'propertyIsEnumerable',
			'constructor'
		];
		var equalsConstructorPrototype = function (o) {
			var ctor = o.constructor;
			return ctor && ctor.prototype === o;
		};
		var excludedKeys = {
			$applicationCache: true,
			$console: true,
			$external: true,
			$frame: true,
			$frameElement: true,
			$frames: true,
			$innerHeight: true,
			$innerWidth: true,
			$onmozfullscreenchange: true,
			$onmozfullscreenerror: true,
			$outerHeight: true,
			$outerWidth: true,
			$pageXOffset: true,
			$pageYOffset: true,
			$parent: true,
			$scrollLeft: true,
			$scrollTop: true,
			$scrollX: true,
			$scrollY: true,
			$self: true,
			$webkitIndexedDB: true,
			$webkitStorageInfo: true,
			$window: true
		};
		var hasAutomationEqualityBug = (function () {
			/* global window */
			if (typeof window === 'undefined') { return false; }
			for (var k in window) {
				try {
					if (!excludedKeys['$' + k] && has.call(window, k) && window[k] !== null && typeof window[k] === 'object') {
						try {
							equalsConstructorPrototype(window[k]);
						} catch (e) {
							return true;
						}
					}
				} catch (e) {
					return true;
				}
			}
			return false;
		}());
		var equalsConstructorPrototypeIfNotBuggy = function (o) {
			/* global window */
			if (typeof window === 'undefined' || !hasAutomationEqualityBug) {
				return equalsConstructorPrototype(o);
			}
			try {
				return equalsConstructorPrototype(o);
			} catch (e) {
				return false;
			}
		};
	
		keysShim = function keys(object) {
			var isObject = object !== null && typeof object === 'object';
			var isFunction = toStr.call(object) === '[object Function]';
			var isArguments = isArgs(object);
			var isString = isObject && toStr.call(object) === '[object String]';
			var theKeys = [];
	
			if (!isObject && !isFunction && !isArguments) {
				throw new TypeError('Object.keys called on a non-object');
			}
	
			var skipProto = hasProtoEnumBug && isFunction;
			if (isString && object.length > 0 && !has.call(object, 0)) {
				for (var i = 0; i < object.length; ++i) {
					theKeys.push(String(i));
				}
			}
	
			if (isArguments && object.length > 0) {
				for (var j = 0; j < object.length; ++j) {
					theKeys.push(String(j));
				}
			} else {
				for (var name in object) {
					if (!(skipProto && name === 'prototype') && has.call(object, name)) {
						theKeys.push(String(name));
					}
				}
			}
	
			if (hasDontEnumBug) {
				var skipConstructor = equalsConstructorPrototypeIfNotBuggy(object);
	
				for (var k = 0; k < dontEnums.length; ++k) {
					if (!(skipConstructor && dontEnums[k] === 'constructor') && has.call(object, dontEnums[k])) {
						theKeys.push(dontEnums[k]);
					}
				}
			}
			return theKeys;
		};
	}
	module.exports = keysShim;


/***/ }),
/* 1086 */
/***/ (function(module, exports, __webpack_require__) {

	// Top level file is just a mixin of submodules & constants
	'use strict';
	
	var assign    = __webpack_require__(80).assign;
	
	var deflate   = __webpack_require__(1087);
	var inflate   = __webpack_require__(1088);
	var constants = __webpack_require__(511);
	
	var pako = {};
	
	assign(pako, deflate, inflate, constants);
	
	module.exports = pako;


/***/ }),
/* 1087 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	
	var zlib_deflate = __webpack_require__(1089);
	var utils        = __webpack_require__(80);
	var strings      = __webpack_require__(509);
	var msg          = __webpack_require__(229);
	var ZStream      = __webpack_require__(513);
	
	var toString = Object.prototype.toString;
	
	/* Public constants ==========================================================*/
	/* ===========================================================================*/
	
	var Z_NO_FLUSH      = 0;
	var Z_FINISH        = 4;
	
	var Z_OK            = 0;
	var Z_STREAM_END    = 1;
	var Z_SYNC_FLUSH    = 2;
	
	var Z_DEFAULT_COMPRESSION = -1;
	
	var Z_DEFAULT_STRATEGY    = 0;
	
	var Z_DEFLATED  = 8;
	
	/* ===========================================================================*/
	
	
	/**
	 * class Deflate
	 *
	 * Generic JS-style wrapper for zlib calls. If you don't need
	 * streaming behaviour - use more simple functions: [[deflate]],
	 * [[deflateRaw]] and [[gzip]].
	 **/
	
	/* internal
	 * Deflate.chunks -> Array
	 *
	 * Chunks of output data, if [[Deflate#onData]] not overridden.
	 **/
	
	/**
	 * Deflate.result -> Uint8Array|Array
	 *
	 * Compressed result, generated by default [[Deflate#onData]]
	 * and [[Deflate#onEnd]] handlers. Filled after you push last chunk
	 * (call [[Deflate#push]] with `Z_FINISH` / `true` param)  or if you
	 * push a chunk with explicit flush (call [[Deflate#push]] with
	 * `Z_SYNC_FLUSH` param).
	 **/
	
	/**
	 * Deflate.err -> Number
	 *
	 * Error code after deflate finished. 0 (Z_OK) on success.
	 * You will not need it in real life, because deflate errors
	 * are possible only on wrong options or bad `onData` / `onEnd`
	 * custom handlers.
	 **/
	
	/**
	 * Deflate.msg -> String
	 *
	 * Error message, if [[Deflate.err]] != 0
	 **/
	
	
	/**
	 * new Deflate(options)
	 * - options (Object): zlib deflate options.
	 *
	 * Creates new deflator instance with specified params. Throws exception
	 * on bad params. Supported options:
	 *
	 * - `level`
	 * - `windowBits`
	 * - `memLevel`
	 * - `strategy`
	 * - `dictionary`
	 *
	 * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)
	 * for more information on these.
	 *
	 * Additional options, for internal needs:
	 *
	 * - `chunkSize` - size of generated data chunks (16K by default)
	 * - `raw` (Boolean) - do raw deflate
	 * - `gzip` (Boolean) - create gzip wrapper
	 * - `to` (String) - if equal to 'string', then result will be "binary string"
	 *    (each char code [0..255])
	 * - `header` (Object) - custom header for gzip
	 *   - `text` (Boolean) - true if compressed data believed to be text
	 *   - `time` (Number) - modification time, unix timestamp
	 *   - `os` (Number) - operation system code
	 *   - `extra` (Array) - array of bytes with extra data (max 65536)
	 *   - `name` (String) - file name (binary string)
	 *   - `comment` (String) - comment (binary string)
	 *   - `hcrc` (Boolean) - true if header crc should be added
	 *
	 * ##### Example:
	 *
	 * ```javascript
	 * var pako = require('pako')
	 *   , chunk1 = Uint8Array([1,2,3,4,5,6,7,8,9])
	 *   , chunk2 = Uint8Array([10,11,12,13,14,15,16,17,18,19]);
	 *
	 * var deflate = new pako.Deflate({ level: 3});
	 *
	 * deflate.push(chunk1, false);
	 * deflate.push(chunk2, true);  // true -> last chunk
	 *
	 * if (deflate.err) { throw new Error(deflate.err); }
	 *
	 * console.log(deflate.result);
	 * ```
	 **/
	function Deflate(options) {
	  if (!(this instanceof Deflate)) return new Deflate(options);
	
	  this.options = utils.assign({
	    level: Z_DEFAULT_COMPRESSION,
	    method: Z_DEFLATED,
	    chunkSize: 16384,
	    windowBits: 15,
	    memLevel: 8,
	    strategy: Z_DEFAULT_STRATEGY,
	    to: ''
	  }, options || {});
	
	  var opt = this.options;
	
	  if (opt.raw && (opt.windowBits > 0)) {
	    opt.windowBits = -opt.windowBits;
	  }
	
	  else if (opt.gzip && (opt.windowBits > 0) && (opt.windowBits < 16)) {
	    opt.windowBits += 16;
	  }
	
	  this.err    = 0;      // error code, if happens (0 = Z_OK)
	  this.msg    = '';     // error message
	  this.ended  = false;  // used to avoid multiple onEnd() calls
	  this.chunks = [];     // chunks of compressed data
	
	  this.strm = new ZStream();
	  this.strm.avail_out = 0;
	
	  var status = zlib_deflate.deflateInit2(
	    this.strm,
	    opt.level,
	    opt.method,
	    opt.windowBits,
	    opt.memLevel,
	    opt.strategy
	  );
	
	  if (status !== Z_OK) {
	    throw new Error(msg[status]);
	  }
	
	  if (opt.header) {
	    zlib_deflate.deflateSetHeader(this.strm, opt.header);
	  }
	
	  if (opt.dictionary) {
	    var dict;
	    // Convert data if needed
	    if (typeof opt.dictionary === 'string') {
	      // If we need to compress text, change encoding to utf8.
	      dict = strings.string2buf(opt.dictionary);
	    } else if (toString.call(opt.dictionary) === '[object ArrayBuffer]') {
	      dict = new Uint8Array(opt.dictionary);
	    } else {
	      dict = opt.dictionary;
	    }
	
	    status = zlib_deflate.deflateSetDictionary(this.strm, dict);
	
	    if (status !== Z_OK) {
	      throw new Error(msg[status]);
	    }
	
	    this._dict_set = true;
	  }
	}
	
	/**
	 * Deflate#push(data[, mode]) -> Boolean
	 * - data (Uint8Array|Array|ArrayBuffer|String): input data. Strings will be
	 *   converted to utf8 byte sequence.
	 * - mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes.
	 *   See constants. Skipped or `false` means Z_NO_FLUSH, `true` means Z_FINISH.
	 *
	 * Sends input data to deflate pipe, generating [[Deflate#onData]] calls with
	 * new compressed chunks. Returns `true` on success. The last data block must have
	 * mode Z_FINISH (or `true`). That will flush internal pending buffers and call
	 * [[Deflate#onEnd]]. For interim explicit flushes (without ending the stream) you
	 * can use mode Z_SYNC_FLUSH, keeping the compression context.
	 *
	 * On fail call [[Deflate#onEnd]] with error code and return false.
	 *
	 * We strongly recommend to use `Uint8Array` on input for best speed (output
	 * array format is detected automatically). Also, don't skip last param and always
	 * use the same type in your code (boolean or number). That will improve JS speed.
	 *
	 * For regular `Array`-s make sure all elements are [0..255].
	 *
	 * ##### Example
	 *
	 * ```javascript
	 * push(chunk, false); // push one of data chunks
	 * ...
	 * push(chunk, true);  // push last chunk
	 * ```
	 **/
	Deflate.prototype.push = function (data, mode) {
	  var strm = this.strm;
	  var chunkSize = this.options.chunkSize;
	  var status, _mode;
	
	  if (this.ended) { return false; }
	
	  _mode = (mode === ~~mode) ? mode : ((mode === true) ? Z_FINISH : Z_NO_FLUSH);
	
	  // Convert data if needed
	  if (typeof data === 'string') {
	    // If we need to compress text, change encoding to utf8.
	    strm.input = strings.string2buf(data);
	  } else if (toString.call(data) === '[object ArrayBuffer]') {
	    strm.input = new Uint8Array(data);
	  } else {
	    strm.input = data;
	  }
	
	  strm.next_in = 0;
	  strm.avail_in = strm.input.length;
	
	  do {
	    if (strm.avail_out === 0) {
	      strm.output = new utils.Buf8(chunkSize);
	      strm.next_out = 0;
	      strm.avail_out = chunkSize;
	    }
	    status = zlib_deflate.deflate(strm, _mode);    /* no bad return value */
	
	    if (status !== Z_STREAM_END && status !== Z_OK) {
	      this.onEnd(status);
	      this.ended = true;
	      return false;
	    }
	    if (strm.avail_out === 0 || (strm.avail_in === 0 && (_mode === Z_FINISH || _mode === Z_SYNC_FLUSH))) {
	      if (this.options.to === 'string') {
	        this.onData(strings.buf2binstring(utils.shrinkBuf(strm.output, strm.next_out)));
	      } else {
	        this.onData(utils.shrinkBuf(strm.output, strm.next_out));
	      }
	    }
	  } while ((strm.avail_in > 0 || strm.avail_out === 0) && status !== Z_STREAM_END);
	
	  // Finalize on the last chunk.
	  if (_mode === Z_FINISH) {
	    status = zlib_deflate.deflateEnd(this.strm);
	    this.onEnd(status);
	    this.ended = true;
	    return status === Z_OK;
	  }
	
	  // callback interim results if Z_SYNC_FLUSH.
	  if (_mode === Z_SYNC_FLUSH) {
	    this.onEnd(Z_OK);
	    strm.avail_out = 0;
	    return true;
	  }
	
	  return true;
	};
	
	
	/**
	 * Deflate#onData(chunk) -> Void
	 * - chunk (Uint8Array|Array|String): output data. Type of array depends
	 *   on js engine support. When string output requested, each chunk
	 *   will be string.
	 *
	 * By default, stores data blocks in `chunks[]` property and glue
	 * those in `onEnd`. Override this handler, if you need another behaviour.
	 **/
	Deflate.prototype.onData = function (chunk) {
	  this.chunks.push(chunk);
	};
	
	
	/**
	 * Deflate#onEnd(status) -> Void
	 * - status (Number): deflate status. 0 (Z_OK) on success,
	 *   other if not.
	 *
	 * Called once after you tell deflate that the input stream is
	 * complete (Z_FINISH) or should be flushed (Z_SYNC_FLUSH)
	 * or if an error happened. By default - join collected chunks,
	 * free memory and fill `results` / `err` properties.
	 **/
	Deflate.prototype.onEnd = function (status) {
	  // On success - join
	  if (status === Z_OK) {
	    if (this.options.to === 'string') {
	      this.result = this.chunks.join('');
	    } else {
	      this.result = utils.flattenChunks(this.chunks);
	    }
	  }
	  this.chunks = [];
	  this.err = status;
	  this.msg = this.strm.msg;
	};
	
	
	/**
	 * deflate(data[, options]) -> Uint8Array|Array|String
	 * - data (Uint8Array|Array|String): input data to compress.
	 * - options (Object): zlib deflate options.
	 *
	 * Compress `data` with deflate algorithm and `options`.
	 *
	 * Supported options are:
	 *
	 * - level
	 * - windowBits
	 * - memLevel
	 * - strategy
	 * - dictionary
	 *
	 * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)
	 * for more information on these.
	 *
	 * Sugar (options):
	 *
	 * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify
	 *   negative windowBits implicitly.
	 * - `to` (String) - if equal to 'string', then result will be "binary string"
	 *    (each char code [0..255])
	 *
	 * ##### Example:
	 *
	 * ```javascript
	 * var pako = require('pako')
	 *   , data = Uint8Array([1,2,3,4,5,6,7,8,9]);
	 *
	 * console.log(pako.deflate(data));
	 * ```
	 **/
	function deflate(input, options) {
	  var deflator = new Deflate(options);
	
	  deflator.push(input, true);
	
	  // That will never happens, if you don't cheat with options :)
	  if (deflator.err) { throw deflator.msg || msg[deflator.err]; }
	
	  return deflator.result;
	}
	
	
	/**
	 * deflateRaw(data[, options]) -> Uint8Array|Array|String
	 * - data (Uint8Array|Array|String): input data to compress.
	 * - options (Object): zlib deflate options.
	 *
	 * The same as [[deflate]], but creates raw data, without wrapper
	 * (header and adler32 crc).
	 **/
	function deflateRaw(input, options) {
	  options = options || {};
	  options.raw = true;
	  return deflate(input, options);
	}
	
	
	/**
	 * gzip(data[, options]) -> Uint8Array|Array|String
	 * - data (Uint8Array|Array|String): input data to compress.
	 * - options (Object): zlib deflate options.
	 *
	 * The same as [[deflate]], but create gzip wrapper instead of
	 * deflate one.
	 **/
	function gzip(input, options) {
	  options = options || {};
	  options.gzip = true;
	  return deflate(input, options);
	}
	
	
	exports.Deflate = Deflate;
	exports.deflate = deflate;
	exports.deflateRaw = deflateRaw;
	exports.gzip = gzip;


/***/ }),
/* 1088 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	
	var zlib_inflate = __webpack_require__(1092);
	var utils        = __webpack_require__(80);
	var strings      = __webpack_require__(509);
	var c            = __webpack_require__(511);
	var msg          = __webpack_require__(229);
	var ZStream      = __webpack_require__(513);
	var GZheader     = __webpack_require__(1090);
	
	var toString = Object.prototype.toString;
	
	/**
	 * class Inflate
	 *
	 * Generic JS-style wrapper for zlib calls. If you don't need
	 * streaming behaviour - use more simple functions: [[inflate]]
	 * and [[inflateRaw]].
	 **/
	
	/* internal
	 * inflate.chunks -> Array
	 *
	 * Chunks of output data, if [[Inflate#onData]] not overridden.
	 **/
	
	/**
	 * Inflate.result -> Uint8Array|Array|String
	 *
	 * Uncompressed result, generated by default [[Inflate#onData]]
	 * and [[Inflate#onEnd]] handlers. Filled after you push last chunk
	 * (call [[Inflate#push]] with `Z_FINISH` / `true` param) or if you
	 * push a chunk with explicit flush (call [[Inflate#push]] with
	 * `Z_SYNC_FLUSH` param).
	 **/
	
	/**
	 * Inflate.err -> Number
	 *
	 * Error code after inflate finished. 0 (Z_OK) on success.
	 * Should be checked if broken data possible.
	 **/
	
	/**
	 * Inflate.msg -> String
	 *
	 * Error message, if [[Inflate.err]] != 0
	 **/
	
	
	/**
	 * new Inflate(options)
	 * - options (Object): zlib inflate options.
	 *
	 * Creates new inflator instance with specified params. Throws exception
	 * on bad params. Supported options:
	 *
	 * - `windowBits`
	 * - `dictionary`
	 *
	 * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)
	 * for more information on these.
	 *
	 * Additional options, for internal needs:
	 *
	 * - `chunkSize` - size of generated data chunks (16K by default)
	 * - `raw` (Boolean) - do raw inflate
	 * - `to` (String) - if equal to 'string', then result will be converted
	 *   from utf8 to utf16 (javascript) string. When string output requested,
	 *   chunk length can differ from `chunkSize`, depending on content.
	 *
	 * By default, when no options set, autodetect deflate/gzip data format via
	 * wrapper header.
	 *
	 * ##### Example:
	 *
	 * ```javascript
	 * var pako = require('pako')
	 *   , chunk1 = Uint8Array([1,2,3,4,5,6,7,8,9])
	 *   , chunk2 = Uint8Array([10,11,12,13,14,15,16,17,18,19]);
	 *
	 * var inflate = new pako.Inflate({ level: 3});
	 *
	 * inflate.push(chunk1, false);
	 * inflate.push(chunk2, true);  // true -> last chunk
	 *
	 * if (inflate.err) { throw new Error(inflate.err); }
	 *
	 * console.log(inflate.result);
	 * ```
	 **/
	function Inflate(options) {
	  if (!(this instanceof Inflate)) return new Inflate(options);
	
	  this.options = utils.assign({
	    chunkSize: 16384,
	    windowBits: 0,
	    to: ''
	  }, options || {});
	
	  var opt = this.options;
	
	  // Force window size for `raw` data, if not set directly,
	  // because we have no header for autodetect.
	  if (opt.raw && (opt.windowBits >= 0) && (opt.windowBits < 16)) {
	    opt.windowBits = -opt.windowBits;
	    if (opt.windowBits === 0) { opt.windowBits = -15; }
	  }
	
	  // If `windowBits` not defined (and mode not raw) - set autodetect flag for gzip/deflate
	  if ((opt.windowBits >= 0) && (opt.windowBits < 16) &&
	      !(options && options.windowBits)) {
	    opt.windowBits += 32;
	  }
	
	  // Gzip header has no info about windows size, we can do autodetect only
	  // for deflate. So, if window size not set, force it to max when gzip possible
	  if ((opt.windowBits > 15) && (opt.windowBits < 48)) {
	    // bit 3 (16) -> gzipped data
	    // bit 4 (32) -> autodetect gzip/deflate
	    if ((opt.windowBits & 15) === 0) {
	      opt.windowBits |= 15;
	    }
	  }
	
	  this.err    = 0;      // error code, if happens (0 = Z_OK)
	  this.msg    = '';     // error message
	  this.ended  = false;  // used to avoid multiple onEnd() calls
	  this.chunks = [];     // chunks of compressed data
	
	  this.strm   = new ZStream();
	  this.strm.avail_out = 0;
	
	  var status  = zlib_inflate.inflateInit2(
	    this.strm,
	    opt.windowBits
	  );
	
	  if (status !== c.Z_OK) {
	    throw new Error(msg[status]);
	  }
	
	  this.header = new GZheader();
	
	  zlib_inflate.inflateGetHeader(this.strm, this.header);
	
	  // Setup dictionary
	  if (opt.dictionary) {
	    // Convert data if needed
	    if (typeof opt.dictionary === 'string') {
	      opt.dictionary = strings.string2buf(opt.dictionary);
	    } else if (toString.call(opt.dictionary) === '[object ArrayBuffer]') {
	      opt.dictionary = new Uint8Array(opt.dictionary);
	    }
	    if (opt.raw) { //In raw mode we need to set the dictionary early
	      status = zlib_inflate.inflateSetDictionary(this.strm, opt.dictionary);
	      if (status !== c.Z_OK) {
	        throw new Error(msg[status]);
	      }
	    }
	  }
	}
	
	/**
	 * Inflate#push(data[, mode]) -> Boolean
	 * - data (Uint8Array|Array|ArrayBuffer|String): input data
	 * - mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes.
	 *   See constants. Skipped or `false` means Z_NO_FLUSH, `true` means Z_FINISH.
	 *
	 * Sends input data to inflate pipe, generating [[Inflate#onData]] calls with
	 * new output chunks. Returns `true` on success. The last data block must have
	 * mode Z_FINISH (or `true`). That will flush internal pending buffers and call
	 * [[Inflate#onEnd]]. For interim explicit flushes (without ending the stream) you
	 * can use mode Z_SYNC_FLUSH, keeping the decompression context.
	 *
	 * On fail call [[Inflate#onEnd]] with error code and return false.
	 *
	 * We strongly recommend to use `Uint8Array` on input for best speed (output
	 * format is detected automatically). Also, don't skip last param and always
	 * use the same type in your code (boolean or number). That will improve JS speed.
	 *
	 * For regular `Array`-s make sure all elements are [0..255].
	 *
	 * ##### Example
	 *
	 * ```javascript
	 * push(chunk, false); // push one of data chunks
	 * ...
	 * push(chunk, true);  // push last chunk
	 * ```
	 **/
	Inflate.prototype.push = function (data, mode) {
	  var strm = this.strm;
	  var chunkSize = this.options.chunkSize;
	  var dictionary = this.options.dictionary;
	  var status, _mode;
	  var next_out_utf8, tail, utf8str;
	
	  // Flag to properly process Z_BUF_ERROR on testing inflate call
	  // when we check that all output data was flushed.
	  var allowBufError = false;
	
	  if (this.ended) { return false; }
	  _mode = (mode === ~~mode) ? mode : ((mode === true) ? c.Z_FINISH : c.Z_NO_FLUSH);
	
	  // Convert data if needed
	  if (typeof data === 'string') {
	    // Only binary strings can be decompressed on practice
	    strm.input = strings.binstring2buf(data);
	  } else if (toString.call(data) === '[object ArrayBuffer]') {
	    strm.input = new Uint8Array(data);
	  } else {
	    strm.input = data;
	  }
	
	  strm.next_in = 0;
	  strm.avail_in = strm.input.length;
	
	  do {
	    if (strm.avail_out === 0) {
	      strm.output = new utils.Buf8(chunkSize);
	      strm.next_out = 0;
	      strm.avail_out = chunkSize;
	    }
	
	    status = zlib_inflate.inflate(strm, c.Z_NO_FLUSH);    /* no bad return value */
	
	    if (status === c.Z_NEED_DICT && dictionary) {
	      status = zlib_inflate.inflateSetDictionary(this.strm, dictionary);
	    }
	
	    if (status === c.Z_BUF_ERROR && allowBufError === true) {
	      status = c.Z_OK;
	      allowBufError = false;
	    }
	
	    if (status !== c.Z_STREAM_END && status !== c.Z_OK) {
	      this.onEnd(status);
	      this.ended = true;
	      return false;
	    }
	
	    if (strm.next_out) {
	      if (strm.avail_out === 0 || status === c.Z_STREAM_END || (strm.avail_in === 0 && (_mode === c.Z_FINISH || _mode === c.Z_SYNC_FLUSH))) {
	
	        if (this.options.to === 'string') {
	
	          next_out_utf8 = strings.utf8border(strm.output, strm.next_out);
	
	          tail = strm.next_out - next_out_utf8;
	          utf8str = strings.buf2string(strm.output, next_out_utf8);
	
	          // move tail
	          strm.next_out = tail;
	          strm.avail_out = chunkSize - tail;
	          if (tail) { utils.arraySet(strm.output, strm.output, next_out_utf8, tail, 0); }
	
	          this.onData(utf8str);
	
	        } else {
	          this.onData(utils.shrinkBuf(strm.output, strm.next_out));
	        }
	      }
	    }
	
	    // When no more input data, we should check that internal inflate buffers
	    // are flushed. The only way to do it when avail_out = 0 - run one more
	    // inflate pass. But if output data not exists, inflate return Z_BUF_ERROR.
	    // Here we set flag to process this error properly.
	    //
	    // NOTE. Deflate does not return error in this case and does not needs such
	    // logic.
	    if (strm.avail_in === 0 && strm.avail_out === 0) {
	      allowBufError = true;
	    }
	
	  } while ((strm.avail_in > 0 || strm.avail_out === 0) && status !== c.Z_STREAM_END);
	
	  if (status === c.Z_STREAM_END) {
	    _mode = c.Z_FINISH;
	  }
	
	  // Finalize on the last chunk.
	  if (_mode === c.Z_FINISH) {
	    status = zlib_inflate.inflateEnd(this.strm);
	    this.onEnd(status);
	    this.ended = true;
	    return status === c.Z_OK;
	  }
	
	  // callback interim results if Z_SYNC_FLUSH.
	  if (_mode === c.Z_SYNC_FLUSH) {
	    this.onEnd(c.Z_OK);
	    strm.avail_out = 0;
	    return true;
	  }
	
	  return true;
	};
	
	
	/**
	 * Inflate#onData(chunk) -> Void
	 * - chunk (Uint8Array|Array|String): output data. Type of array depends
	 *   on js engine support. When string output requested, each chunk
	 *   will be string.
	 *
	 * By default, stores data blocks in `chunks[]` property and glue
	 * those in `onEnd`. Override this handler, if you need another behaviour.
	 **/
	Inflate.prototype.onData = function (chunk) {
	  this.chunks.push(chunk);
	};
	
	
	/**
	 * Inflate#onEnd(status) -> Void
	 * - status (Number): inflate status. 0 (Z_OK) on success,
	 *   other if not.
	 *
	 * Called either after you tell inflate that the input stream is
	 * complete (Z_FINISH) or should be flushed (Z_SYNC_FLUSH)
	 * or if an error happened. By default - join collected chunks,
	 * free memory and fill `results` / `err` properties.
	 **/
	Inflate.prototype.onEnd = function (status) {
	  // On success - join
	  if (status === c.Z_OK) {
	    if (this.options.to === 'string') {
	      // Glue & convert here, until we teach pako to send
	      // utf8 aligned strings to onData
	      this.result = this.chunks.join('');
	    } else {
	      this.result = utils.flattenChunks(this.chunks);
	    }
	  }
	  this.chunks = [];
	  this.err = status;
	  this.msg = this.strm.msg;
	};
	
	
	/**
	 * inflate(data[, options]) -> Uint8Array|Array|String
	 * - data (Uint8Array|Array|String): input data to decompress.
	 * - options (Object): zlib inflate options.
	 *
	 * Decompress `data` with inflate/ungzip and `options`. Autodetect
	 * format via wrapper header by default. That's why we don't provide
	 * separate `ungzip` method.
	 *
	 * Supported options are:
	 *
	 * - windowBits
	 *
	 * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)
	 * for more information.
	 *
	 * Sugar (options):
	 *
	 * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify
	 *   negative windowBits implicitly.
	 * - `to` (String) - if equal to 'string', then result will be converted
	 *   from utf8 to utf16 (javascript) string. When string output requested,
	 *   chunk length can differ from `chunkSize`, depending on content.
	 *
	 *
	 * ##### Example:
	 *
	 * ```javascript
	 * var pako = require('pako')
	 *   , input = pako.deflate([1,2,3,4,5,6,7,8,9])
	 *   , output;
	 *
	 * try {
	 *   output = pako.inflate(input);
	 * } catch (err)
	 *   console.log(err);
	 * }
	 * ```
	 **/
	function inflate(input, options) {
	  var inflator = new Inflate(options);
	
	  inflator.push(input, true);
	
	  // That will never happens, if you don't cheat with options :)
	  if (inflator.err) { throw inflator.msg || msg[inflator.err]; }
	
	  return inflator.result;
	}
	
	
	/**
	 * inflateRaw(data[, options]) -> Uint8Array|Array|String
	 * - data (Uint8Array|Array|String): input data to decompress.
	 * - options (Object): zlib inflate options.
	 *
	 * The same as [[inflate]], but creates raw data, without wrapper
	 * (header and adler32 crc).
	 **/
	function inflateRaw(input, options) {
	  options = options || {};
	  options.raw = true;
	  return inflate(input, options);
	}
	
	
	/**
	 * ungzip(data[, options]) -> Uint8Array|Array|String
	 * - data (Uint8Array|Array|String): input data to decompress.
	 * - options (Object): zlib inflate options.
	 *
	 * Just shortcut to [[inflate]], because it autodetects format
	 * by header.content. Done for convenience.
	 **/
	
	
	exports.Inflate = Inflate;
	exports.inflate = inflate;
	exports.inflateRaw = inflateRaw;
	exports.ungzip  = inflate;


/***/ }),
/* 1089 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	// (C) 1995-2013 Jean-loup Gailly and Mark Adler
	// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
	//
	// This software is provided 'as-is', without any express or implied
	// warranty. In no event will the authors be held liable for any damages
	// arising from the use of this software.
	//
	// Permission is granted to anyone to use this software for any purpose,
	// including commercial applications, and to alter it and redistribute it
	// freely, subject to the following restrictions:
	//
	// 1. The origin of this software must not be misrepresented; you must not
	//   claim that you wrote the original software. If you use this software
	//   in a product, an acknowledgment in the product documentation would be
	//   appreciated but is not required.
	// 2. Altered source versions must be plainly marked as such, and must not be
	//   misrepresented as being the original software.
	// 3. This notice may not be removed or altered from any source distribution.
	
	var utils   = __webpack_require__(80);
	var trees   = __webpack_require__(1094);
	var adler32 = __webpack_require__(510);
	var crc32   = __webpack_require__(512);
	var msg     = __webpack_require__(229);
	
	/* Public constants ==========================================================*/
	/* ===========================================================================*/
	
	
	/* Allowed flush values; see deflate() and inflate() below for details */
	var Z_NO_FLUSH      = 0;
	var Z_PARTIAL_FLUSH = 1;
	//var Z_SYNC_FLUSH    = 2;
	var Z_FULL_FLUSH    = 3;
	var Z_FINISH        = 4;
	var Z_BLOCK         = 5;
	//var Z_TREES         = 6;
	
	
	/* Return codes for the compression/decompression functions. Negative values
	 * are errors, positive values are used for special but normal events.
	 */
	var Z_OK            = 0;
	var Z_STREAM_END    = 1;
	//var Z_NEED_DICT     = 2;
	//var Z_ERRNO         = -1;
	var Z_STREAM_ERROR  = -2;
	var Z_DATA_ERROR    = -3;
	//var Z_MEM_ERROR     = -4;
	var Z_BUF_ERROR     = -5;
	//var Z_VERSION_ERROR = -6;
	
	
	/* compression levels */
	//var Z_NO_COMPRESSION      = 0;
	//var Z_BEST_SPEED          = 1;
	//var Z_BEST_COMPRESSION    = 9;
	var Z_DEFAULT_COMPRESSION = -1;
	
	
	var Z_FILTERED            = 1;
	var Z_HUFFMAN_ONLY        = 2;
	var Z_RLE                 = 3;
	var Z_FIXED               = 4;
	var Z_DEFAULT_STRATEGY    = 0;
	
	/* Possible values of the data_type field (though see inflate()) */
	//var Z_BINARY              = 0;
	//var Z_TEXT                = 1;
	//var Z_ASCII               = 1; // = Z_TEXT
	var Z_UNKNOWN             = 2;
	
	
	/* The deflate compression method */
	var Z_DEFLATED  = 8;
	
	/*============================================================================*/
	
	
	var MAX_MEM_LEVEL = 9;
	/* Maximum value for memLevel in deflateInit2 */
	var MAX_WBITS = 15;
	/* 32K LZ77 window */
	var DEF_MEM_LEVEL = 8;
	
	
	var LENGTH_CODES  = 29;
	/* number of length codes, not counting the special END_BLOCK code */
	var LITERALS      = 256;
	/* number of literal bytes 0..255 */
	var L_CODES       = LITERALS + 1 + LENGTH_CODES;
	/* number of Literal or Length codes, including the END_BLOCK code */
	var D_CODES       = 30;
	/* number of distance codes */
	var BL_CODES      = 19;
	/* number of codes used to transfer the bit lengths */
	var HEAP_SIZE     = 2 * L_CODES + 1;
	/* maximum heap size */
	var MAX_BITS  = 15;
	/* All codes must not exceed MAX_BITS bits */
	
	var MIN_MATCH = 3;
	var MAX_MATCH = 258;
	var MIN_LOOKAHEAD = (MAX_MATCH + MIN_MATCH + 1);
	
	var PRESET_DICT = 0x20;
	
	var INIT_STATE = 42;
	var EXTRA_STATE = 69;
	var NAME_STATE = 73;
	var COMMENT_STATE = 91;
	var HCRC_STATE = 103;
	var BUSY_STATE = 113;
	var FINISH_STATE = 666;
	
	var BS_NEED_MORE      = 1; /* block not completed, need more input or more output */
	var BS_BLOCK_DONE     = 2; /* block flush performed */
	var BS_FINISH_STARTED = 3; /* finish started, need only more output at next deflate */
	var BS_FINISH_DONE    = 4; /* finish done, accept no more input or output */
	
	var OS_CODE = 0x03; // Unix :) . Don't detect, use this default.
	
	function err(strm, errorCode) {
	  strm.msg = msg[errorCode];
	  return errorCode;
	}
	
	function rank(f) {
	  return ((f) << 1) - ((f) > 4 ? 9 : 0);
	}
	
	function zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } }
	
	
	/* =========================================================================
	 * Flush as much pending output as possible. All deflate() output goes
	 * through this function so some applications may wish to modify it
	 * to avoid allocating a large strm->output buffer and copying into it.
	 * (See also read_buf()).
	 */
	function flush_pending(strm) {
	  var s = strm.state;
	
	  //_tr_flush_bits(s);
	  var len = s.pending;
	  if (len > strm.avail_out) {
	    len = strm.avail_out;
	  }
	  if (len === 0) { return; }
	
	  utils.arraySet(strm.output, s.pending_buf, s.pending_out, len, strm.next_out);
	  strm.next_out += len;
	  s.pending_out += len;
	  strm.total_out += len;
	  strm.avail_out -= len;
	  s.pending -= len;
	  if (s.pending === 0) {
	    s.pending_out = 0;
	  }
	}
	
	
	function flush_block_only(s, last) {
	  trees._tr_flush_block(s, (s.block_start >= 0 ? s.block_start : -1), s.strstart - s.block_start, last);
	  s.block_start = s.strstart;
	  flush_pending(s.strm);
	}
	
	
	function put_byte(s, b) {
	  s.pending_buf[s.pending++] = b;
	}
	
	
	/* =========================================================================
	 * Put a short in the pending buffer. The 16-bit value is put in MSB order.
	 * IN assertion: the stream state is correct and there is enough room in
	 * pending_buf.
	 */
	function putShortMSB(s, b) {
	//  put_byte(s, (Byte)(b >> 8));
	//  put_byte(s, (Byte)(b & 0xff));
	  s.pending_buf[s.pending++] = (b >>> 8) & 0xff;
	  s.pending_buf[s.pending++] = b & 0xff;
	}
	
	
	/* ===========================================================================
	 * Read a new buffer from the current input stream, update the adler32
	 * and total number of bytes read.  All deflate() input goes through
	 * this function so some applications may wish to modify it to avoid
	 * allocating a large strm->input buffer and copying from it.
	 * (See also flush_pending()).
	 */
	function read_buf(strm, buf, start, size) {
	  var len = strm.avail_in;
	
	  if (len > size) { len = size; }
	  if (len === 0) { return 0; }
	
	  strm.avail_in -= len;
	
	  // zmemcpy(buf, strm->next_in, len);
	  utils.arraySet(buf, strm.input, strm.next_in, len, start);
	  if (strm.state.wrap === 1) {
	    strm.adler = adler32(strm.adler, buf, len, start);
	  }
	
	  else if (strm.state.wrap === 2) {
	    strm.adler = crc32(strm.adler, buf, len, start);
	  }
	
	  strm.next_in += len;
	  strm.total_in += len;
	
	  return len;
	}
	
	
	/* ===========================================================================
	 * Set match_start to the longest match starting at the given string and
	 * return its length. Matches shorter or equal to prev_length are discarded,
	 * in which case the result is equal to prev_length and match_start is
	 * garbage.
	 * IN assertions: cur_match is the head of the hash chain for the current
	 *   string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1
	 * OUT assertion: the match length is not greater than s->lookahead.
	 */
	function longest_match(s, cur_match) {
	  var chain_length = s.max_chain_length;      /* max hash chain length */
	  var scan = s.strstart; /* current string */
	  var match;                       /* matched string */
	  var len;                           /* length of current match */
	  var best_len = s.prev_length;              /* best match length so far */
	  var nice_match = s.nice_match;             /* stop if match long enough */
	  var limit = (s.strstart > (s.w_size - MIN_LOOKAHEAD)) ?
	      s.strstart - (s.w_size - MIN_LOOKAHEAD) : 0/*NIL*/;
	
	  var _win = s.window; // shortcut
	
	  var wmask = s.w_mask;
	  var prev  = s.prev;
	
	  /* Stop when cur_match becomes <= limit. To simplify the code,
	   * we prevent matches with the string of window index 0.
	   */
	
	  var strend = s.strstart + MAX_MATCH;
	  var scan_end1  = _win[scan + best_len - 1];
	  var scan_end   = _win[scan + best_len];
	
	  /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.
	   * It is easy to get rid of this optimization if necessary.
	   */
	  // Assert(s->hash_bits >= 8 && MAX_MATCH == 258, "Code too clever");
	
	  /* Do not waste too much time if we already have a good match: */
	  if (s.prev_length >= s.good_match) {
	    chain_length >>= 2;
	  }
	  /* Do not look for matches beyond the end of the input. This is necessary
	   * to make deflate deterministic.
	   */
	  if (nice_match > s.lookahead) { nice_match = s.lookahead; }
	
	  // Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead");
	
	  do {
	    // Assert(cur_match < s->strstart, "no future");
	    match = cur_match;
	
	    /* Skip to next match if the match length cannot increase
	     * or if the match length is less than 2.  Note that the checks below
	     * for insufficient lookahead only occur occasionally for performance
	     * reasons.  Therefore uninitialized memory will be accessed, and
	     * conditional jumps will be made that depend on those values.
	     * However the length of the match is limited to the lookahead, so
	     * the output of deflate is not affected by the uninitialized values.
	     */
	
	    if (_win[match + best_len]     !== scan_end  ||
	        _win[match + best_len - 1] !== scan_end1 ||
	        _win[match]                !== _win[scan] ||
	        _win[++match]              !== _win[scan + 1]) {
	      continue;
	    }
	
	    /* The check at best_len-1 can be removed because it will be made
	     * again later. (This heuristic is not always a win.)
	     * It is not necessary to compare scan[2] and match[2] since they
	     * are always equal when the other bytes match, given that
	     * the hash keys are equal and that HASH_BITS >= 8.
	     */
	    scan += 2;
	    match++;
	    // Assert(*scan == *match, "match[2]?");
	
	    /* We check for insufficient lookahead only every 8th comparison;
	     * the 256th check will be made at strstart+258.
	     */
	    do {
	      /*jshint noempty:false*/
	    } while (_win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&
	             _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&
	             _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&
	             _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&
	             scan < strend);
	
	    // Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan");
	
	    len = MAX_MATCH - (strend - scan);
	    scan = strend - MAX_MATCH;
	
	    if (len > best_len) {
	      s.match_start = cur_match;
	      best_len = len;
	      if (len >= nice_match) {
	        break;
	      }
	      scan_end1  = _win[scan + best_len - 1];
	      scan_end   = _win[scan + best_len];
	    }
	  } while ((cur_match = prev[cur_match & wmask]) > limit && --chain_length !== 0);
	
	  if (best_len <= s.lookahead) {
	    return best_len;
	  }
	  return s.lookahead;
	}
	
	
	/* ===========================================================================
	 * Fill the window when the lookahead becomes insufficient.
	 * Updates strstart and lookahead.
	 *
	 * IN assertion: lookahead < MIN_LOOKAHEAD
	 * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD
	 *    At least one byte has been read, or avail_in == 0; reads are
	 *    performed for at least two bytes (required for the zip translate_eol
	 *    option -- not supported here).
	 */
	function fill_window(s) {
	  var _w_size = s.w_size;
	  var p, n, m, more, str;
	
	  //Assert(s->lookahead < MIN_LOOKAHEAD, "already enough lookahead");
	
	  do {
	    more = s.window_size - s.lookahead - s.strstart;
	
	    // JS ints have 32 bit, block below not needed
	    /* Deal with !@#$% 64K limit: */
	    //if (sizeof(int) <= 2) {
	    //    if (more == 0 && s->strstart == 0 && s->lookahead == 0) {
	    //        more = wsize;
	    //
	    //  } else if (more == (unsigned)(-1)) {
	    //        /* Very unlikely, but possible on 16 bit machine if
	    //         * strstart == 0 && lookahead == 1 (input done a byte at time)
	    //         */
	    //        more--;
	    //    }
	    //}
	
	
	    /* If the window is almost full and there is insufficient lookahead,
	     * move the upper half to the lower one to make room in the upper half.
	     */
	    if (s.strstart >= _w_size + (_w_size - MIN_LOOKAHEAD)) {
	
	      utils.arraySet(s.window, s.window, _w_size, _w_size, 0);
	      s.match_start -= _w_size;
	      s.strstart -= _w_size;
	      /* we now have strstart >= MAX_DIST */
	      s.block_start -= _w_size;
	
	      /* Slide the hash table (could be avoided with 32 bit values
	       at the expense of memory usage). We slide even when level == 0
	       to keep the hash table consistent if we switch back to level > 0
	       later. (Using level 0 permanently is not an optimal usage of
	       zlib, so we don't care about this pathological case.)
	       */
	
	      n = s.hash_size;
	      p = n;
	      do {
	        m = s.head[--p];
	        s.head[p] = (m >= _w_size ? m - _w_size : 0);
	      } while (--n);
	
	      n = _w_size;
	      p = n;
	      do {
	        m = s.prev[--p];
	        s.prev[p] = (m >= _w_size ? m - _w_size : 0);
	        /* If n is not on any hash chain, prev[n] is garbage but
	         * its value will never be used.
	         */
	      } while (--n);
	
	      more += _w_size;
	    }
	    if (s.strm.avail_in === 0) {
	      break;
	    }
	
	    /* If there was no sliding:
	     *    strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 &&
	     *    more == window_size - lookahead - strstart
	     * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1)
	     * => more >= window_size - 2*WSIZE + 2
	     * In the BIG_MEM or MMAP case (not yet supported),
	     *   window_size == input_size + MIN_LOOKAHEAD  &&
	     *   strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD.
	     * Otherwise, window_size == 2*WSIZE so more >= 2.
	     * If there was sliding, more >= WSIZE. So in all cases, more >= 2.
	     */
	    //Assert(more >= 2, "more < 2");
	    n = read_buf(s.strm, s.window, s.strstart + s.lookahead, more);
	    s.lookahead += n;
	
	    /* Initialize the hash value now that we have some input: */
	    if (s.lookahead + s.insert >= MIN_MATCH) {
	      str = s.strstart - s.insert;
	      s.ins_h = s.window[str];
	
	      /* UPDATE_HASH(s, s->ins_h, s->window[str + 1]); */
	      s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + 1]) & s.hash_mask;
	//#if MIN_MATCH != 3
	//        Call update_hash() MIN_MATCH-3 more times
	//#endif
	      while (s.insert) {
	        /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */
	        s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask;
	
	        s.prev[str & s.w_mask] = s.head[s.ins_h];
	        s.head[s.ins_h] = str;
	        str++;
	        s.insert--;
	        if (s.lookahead + s.insert < MIN_MATCH) {
	          break;
	        }
	      }
	    }
	    /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage,
	     * but this is not important since only literal bytes will be emitted.
	     */
	
	  } while (s.lookahead < MIN_LOOKAHEAD && s.strm.avail_in !== 0);
	
	  /* If the WIN_INIT bytes after the end of the current data have never been
	   * written, then zero those bytes in order to avoid memory check reports of
	   * the use of uninitialized (or uninitialised as Julian writes) bytes by
	   * the longest match routines.  Update the high water mark for the next
	   * time through here.  WIN_INIT is set to MAX_MATCH since the longest match
	   * routines allow scanning to strstart + MAX_MATCH, ignoring lookahead.
	   */
	//  if (s.high_water < s.window_size) {
	//    var curr = s.strstart + s.lookahead;
	//    var init = 0;
	//
	//    if (s.high_water < curr) {
	//      /* Previous high water mark below current data -- zero WIN_INIT
	//       * bytes or up to end of window, whichever is less.
	//       */
	//      init = s.window_size - curr;
	//      if (init > WIN_INIT)
	//        init = WIN_INIT;
	//      zmemzero(s->window + curr, (unsigned)init);
	//      s->high_water = curr + init;
	//    }
	//    else if (s->high_water < (ulg)curr + WIN_INIT) {
	//      /* High water mark at or above current data, but below current data
	//       * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up
	//       * to end of window, whichever is less.
	//       */
	//      init = (ulg)curr + WIN_INIT - s->high_water;
	//      if (init > s->window_size - s->high_water)
	//        init = s->window_size - s->high_water;
	//      zmemzero(s->window + s->high_water, (unsigned)init);
	//      s->high_water += init;
	//    }
	//  }
	//
	//  Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD,
	//    "not enough room for search");
	}
	
	/* ===========================================================================
	 * Copy without compression as much as possible from the input stream, return
	 * the current block state.
	 * This function does not insert new strings in the dictionary since
	 * uncompressible data is probably not useful. This function is used
	 * only for the level=0 compression option.
	 * NOTE: this function should be optimized to avoid extra copying from
	 * window to pending_buf.
	 */
	function deflate_stored(s, flush) {
	  /* Stored blocks are limited to 0xffff bytes, pending_buf is limited
	   * to pending_buf_size, and each stored block has a 5 byte header:
	   */
	  var max_block_size = 0xffff;
	
	  if (max_block_size > s.pending_buf_size - 5) {
	    max_block_size = s.pending_buf_size - 5;
	  }
	
	  /* Copy as much as possible from input to output: */
	  for (;;) {
	    /* Fill the window as much as possible: */
	    if (s.lookahead <= 1) {
	
	      //Assert(s->strstart < s->w_size+MAX_DIST(s) ||
	      //  s->block_start >= (long)s->w_size, "slide too late");
	//      if (!(s.strstart < s.w_size + (s.w_size - MIN_LOOKAHEAD) ||
	//        s.block_start >= s.w_size)) {
	//        throw  new Error("slide too late");
	//      }
	
	      fill_window(s);
	      if (s.lookahead === 0 && flush === Z_NO_FLUSH) {
	        return BS_NEED_MORE;
	      }
	
	      if (s.lookahead === 0) {
	        break;
	      }
	      /* flush the current block */
	    }
	    //Assert(s->block_start >= 0L, "block gone");
	//    if (s.block_start < 0) throw new Error("block gone");
	
	    s.strstart += s.lookahead;
	    s.lookahead = 0;
	
	    /* Emit a stored block if pending_buf will be full: */
	    var max_start = s.block_start + max_block_size;
	
	    if (s.strstart === 0 || s.strstart >= max_start) {
	      /* strstart == 0 is possible when wraparound on 16-bit machine */
	      s.lookahead = s.strstart - max_start;
	      s.strstart = max_start;
	      /*** FLUSH_BLOCK(s, 0); ***/
	      flush_block_only(s, false);
	      if (s.strm.avail_out === 0) {
	        return BS_NEED_MORE;
	      }
	      /***/
	
	
	    }
	    /* Flush if we may have to slide, otherwise block_start may become
	     * negative and the data will be gone:
	     */
	    if (s.strstart - s.block_start >= (s.w_size - MIN_LOOKAHEAD)) {
	      /*** FLUSH_BLOCK(s, 0); ***/
	      flush_block_only(s, false);
	      if (s.strm.avail_out === 0) {
	        return BS_NEED_MORE;
	      }
	      /***/
	    }
	  }
	
	  s.insert = 0;
	
	  if (flush === Z_FINISH) {
	    /*** FLUSH_BLOCK(s, 1); ***/
	    flush_block_only(s, true);
	    if (s.strm.avail_out === 0) {
	      return BS_FINISH_STARTED;
	    }
	    /***/
	    return BS_FINISH_DONE;
	  }
	
	  if (s.strstart > s.block_start) {
	    /*** FLUSH_BLOCK(s, 0); ***/
	    flush_block_only(s, false);
	    if (s.strm.avail_out === 0) {
	      return BS_NEED_MORE;
	    }
	    /***/
	  }
	
	  return BS_NEED_MORE;
	}
	
	/* ===========================================================================
	 * Compress as much as possible from the input stream, return the current
	 * block state.
	 * This function does not perform lazy evaluation of matches and inserts
	 * new strings in the dictionary only for unmatched strings or for short
	 * matches. It is used only for the fast compression options.
	 */
	function deflate_fast(s, flush) {
	  var hash_head;        /* head of the hash chain */
	  var bflush;           /* set if current block must be flushed */
	
	  for (;;) {
	    /* Make sure that we always have enough lookahead, except
	     * at the end of the input file. We need MAX_MATCH bytes
	     * for the next match, plus MIN_MATCH bytes to insert the
	     * string following the next match.
	     */
	    if (s.lookahead < MIN_LOOKAHEAD) {
	      fill_window(s);
	      if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) {
	        return BS_NEED_MORE;
	      }
	      if (s.lookahead === 0) {
	        break; /* flush the current block */
	      }
	    }
	
	    /* Insert the string window[strstart .. strstart+2] in the
	     * dictionary, and set hash_head to the head of the hash chain:
	     */
	    hash_head = 0/*NIL*/;
	    if (s.lookahead >= MIN_MATCH) {
	      /*** INSERT_STRING(s, s.strstart, hash_head); ***/
	      s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;
	      hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];
	      s.head[s.ins_h] = s.strstart;
	      /***/
	    }
	
	    /* Find the longest match, discarding those <= prev_length.
	     * At this point we have always match_length < MIN_MATCH
	     */
	    if (hash_head !== 0/*NIL*/ && ((s.strstart - hash_head) <= (s.w_size - MIN_LOOKAHEAD))) {
	      /* To simplify the code, we prevent matches with the string
	       * of window index 0 (in particular we have to avoid a match
	       * of the string with itself at the start of the input file).
	       */
	      s.match_length = longest_match(s, hash_head);
	      /* longest_match() sets match_start */
	    }
	    if (s.match_length >= MIN_MATCH) {
	      // check_match(s, s.strstart, s.match_start, s.match_length); // for debug only
	
	      /*** _tr_tally_dist(s, s.strstart - s.match_start,
	                     s.match_length - MIN_MATCH, bflush); ***/
	      bflush = trees._tr_tally(s, s.strstart - s.match_start, s.match_length - MIN_MATCH);
	
	      s.lookahead -= s.match_length;
	
	      /* Insert new strings in the hash table only if the match length
	       * is not too large. This saves time but degrades compression.
	       */
	      if (s.match_length <= s.max_lazy_match/*max_insert_length*/ && s.lookahead >= MIN_MATCH) {
	        s.match_length--; /* string at strstart already in table */
	        do {
	          s.strstart++;
	          /*** INSERT_STRING(s, s.strstart, hash_head); ***/
	          s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;
	          hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];
	          s.head[s.ins_h] = s.strstart;
	          /***/
	          /* strstart never exceeds WSIZE-MAX_MATCH, so there are
	           * always MIN_MATCH bytes ahead.
	           */
	        } while (--s.match_length !== 0);
	        s.strstart++;
	      } else
	      {
	        s.strstart += s.match_length;
	        s.match_length = 0;
	        s.ins_h = s.window[s.strstart];
	        /* UPDATE_HASH(s, s.ins_h, s.window[s.strstart+1]); */
	        s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + 1]) & s.hash_mask;
	
	//#if MIN_MATCH != 3
	//                Call UPDATE_HASH() MIN_MATCH-3 more times
	//#endif
	        /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not
	         * matter since it will be recomputed at next deflate call.
	         */
	      }
	    } else {
	      /* No match, output a literal byte */
	      //Tracevv((stderr,"%c", s.window[s.strstart]));
	      /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/
	      bflush = trees._tr_tally(s, 0, s.window[s.strstart]);
	
	      s.lookahead--;
	      s.strstart++;
	    }
	    if (bflush) {
	      /*** FLUSH_BLOCK(s, 0); ***/
	      flush_block_only(s, false);
	      if (s.strm.avail_out === 0) {
	        return BS_NEED_MORE;
	      }
	      /***/
	    }
	  }
	  s.insert = ((s.strstart < (MIN_MATCH - 1)) ? s.strstart : MIN_MATCH - 1);
	  if (flush === Z_FINISH) {
	    /*** FLUSH_BLOCK(s, 1); ***/
	    flush_block_only(s, true);
	    if (s.strm.avail_out === 0) {
	      return BS_FINISH_STARTED;
	    }
	    /***/
	    return BS_FINISH_DONE;
	  }
	  if (s.last_lit) {
	    /*** FLUSH_BLOCK(s, 0); ***/
	    flush_block_only(s, false);
	    if (s.strm.avail_out === 0) {
	      return BS_NEED_MORE;
	    }
	    /***/
	  }
	  return BS_BLOCK_DONE;
	}
	
	/* ===========================================================================
	 * Same as above, but achieves better compression. We use a lazy
	 * evaluation for matches: a match is finally adopted only if there is
	 * no better match at the next window position.
	 */
	function deflate_slow(s, flush) {
	  var hash_head;          /* head of hash chain */
	  var bflush;              /* set if current block must be flushed */
	
	  var max_insert;
	
	  /* Process the input block. */
	  for (;;) {
	    /* Make sure that we always have enough lookahead, except
	     * at the end of the input file. We need MAX_MATCH bytes
	     * for the next match, plus MIN_MATCH bytes to insert the
	     * string following the next match.
	     */
	    if (s.lookahead < MIN_LOOKAHEAD) {
	      fill_window(s);
	      if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) {
	        return BS_NEED_MORE;
	      }
	      if (s.lookahead === 0) { break; } /* flush the current block */
	    }
	
	    /* Insert the string window[strstart .. strstart+2] in the
	     * dictionary, and set hash_head to the head of the hash chain:
	     */
	    hash_head = 0/*NIL*/;
	    if (s.lookahead >= MIN_MATCH) {
	      /*** INSERT_STRING(s, s.strstart, hash_head); ***/
	      s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;
	      hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];
	      s.head[s.ins_h] = s.strstart;
	      /***/
	    }
	
	    /* Find the longest match, discarding those <= prev_length.
	     */
	    s.prev_length = s.match_length;
	    s.prev_match = s.match_start;
	    s.match_length = MIN_MATCH - 1;
	
	    if (hash_head !== 0/*NIL*/ && s.prev_length < s.max_lazy_match &&
	        s.strstart - hash_head <= (s.w_size - MIN_LOOKAHEAD)/*MAX_DIST(s)*/) {
	      /* To simplify the code, we prevent matches with the string
	       * of window index 0 (in particular we have to avoid a match
	       * of the string with itself at the start of the input file).
	       */
	      s.match_length = longest_match(s, hash_head);
	      /* longest_match() sets match_start */
	
	      if (s.match_length <= 5 &&
	         (s.strategy === Z_FILTERED || (s.match_length === MIN_MATCH && s.strstart - s.match_start > 4096/*TOO_FAR*/))) {
	
	        /* If prev_match is also MIN_MATCH, match_start is garbage
	         * but we will ignore the current match anyway.
	         */
	        s.match_length = MIN_MATCH - 1;
	      }
	    }
	    /* If there was a match at the previous step and the current
	     * match is not better, output the previous match:
	     */
	    if (s.prev_length >= MIN_MATCH && s.match_length <= s.prev_length) {
	      max_insert = s.strstart + s.lookahead - MIN_MATCH;
	      /* Do not insert strings in hash table beyond this. */
	
	      //check_match(s, s.strstart-1, s.prev_match, s.prev_length);
	
	      /***_tr_tally_dist(s, s.strstart - 1 - s.prev_match,
	                     s.prev_length - MIN_MATCH, bflush);***/
	      bflush = trees._tr_tally(s, s.strstart - 1 - s.prev_match, s.prev_length - MIN_MATCH);
	      /* Insert in hash table all strings up to the end of the match.
	       * strstart-1 and strstart are already inserted. If there is not
	       * enough lookahead, the last two strings are not inserted in
	       * the hash table.
	       */
	      s.lookahead -= s.prev_length - 1;
	      s.prev_length -= 2;
	      do {
	        if (++s.strstart <= max_insert) {
	          /*** INSERT_STRING(s, s.strstart, hash_head); ***/
	          s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;
	          hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];
	          s.head[s.ins_h] = s.strstart;
	          /***/
	        }
	      } while (--s.prev_length !== 0);
	      s.match_available = 0;
	      s.match_length = MIN_MATCH - 1;
	      s.strstart++;
	
	      if (bflush) {
	        /*** FLUSH_BLOCK(s, 0); ***/
	        flush_block_only(s, false);
	        if (s.strm.avail_out === 0) {
	          return BS_NEED_MORE;
	        }
	        /***/
	      }
	
	    } else if (s.match_available) {
	      /* If there was no match at the previous position, output a
	       * single literal. If there was a match but the current match
	       * is longer, truncate the previous match to a single literal.
	       */
	      //Tracevv((stderr,"%c", s->window[s->strstart-1]));
	      /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/
	      bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]);
	
	      if (bflush) {
	        /*** FLUSH_BLOCK_ONLY(s, 0) ***/
	        flush_block_only(s, false);
	        /***/
	      }
	      s.strstart++;
	      s.lookahead--;
	      if (s.strm.avail_out === 0) {
	        return BS_NEED_MORE;
	      }
	    } else {
	      /* There is no previous match to compare with, wait for
	       * the next step to decide.
	       */
	      s.match_available = 1;
	      s.strstart++;
	      s.lookahead--;
	    }
	  }
	  //Assert (flush != Z_NO_FLUSH, "no flush?");
	  if (s.match_available) {
	    //Tracevv((stderr,"%c", s->window[s->strstart-1]));
	    /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/
	    bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]);
	
	    s.match_available = 0;
	  }
	  s.insert = s.strstart < MIN_MATCH - 1 ? s.strstart : MIN_MATCH - 1;
	  if (flush === Z_FINISH) {
	    /*** FLUSH_BLOCK(s, 1); ***/
	    flush_block_only(s, true);
	    if (s.strm.avail_out === 0) {
	      return BS_FINISH_STARTED;
	    }
	    /***/
	    return BS_FINISH_DONE;
	  }
	  if (s.last_lit) {
	    /*** FLUSH_BLOCK(s, 0); ***/
	    flush_block_only(s, false);
	    if (s.strm.avail_out === 0) {
	      return BS_NEED_MORE;
	    }
	    /***/
	  }
	
	  return BS_BLOCK_DONE;
	}
	
	
	/* ===========================================================================
	 * For Z_RLE, simply look for runs of bytes, generate matches only of distance
	 * one.  Do not maintain a hash table.  (It will be regenerated if this run of
	 * deflate switches away from Z_RLE.)
	 */
	function deflate_rle(s, flush) {
	  var bflush;            /* set if current block must be flushed */
	  var prev;              /* byte at distance one to match */
	  var scan, strend;      /* scan goes up to strend for length of run */
	
	  var _win = s.window;
	
	  for (;;) {
	    /* Make sure that we always have enough lookahead, except
	     * at the end of the input file. We need MAX_MATCH bytes
	     * for the longest run, plus one for the unrolled loop.
	     */
	    if (s.lookahead <= MAX_MATCH) {
	      fill_window(s);
	      if (s.lookahead <= MAX_MATCH && flush === Z_NO_FLUSH) {
	        return BS_NEED_MORE;
	      }
	      if (s.lookahead === 0) { break; } /* flush the current block */
	    }
	
	    /* See how many times the previous byte repeats */
	    s.match_length = 0;
	    if (s.lookahead >= MIN_MATCH && s.strstart > 0) {
	      scan = s.strstart - 1;
	      prev = _win[scan];
	      if (prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan]) {
	        strend = s.strstart + MAX_MATCH;
	        do {
	          /*jshint noempty:false*/
	        } while (prev === _win[++scan] && prev === _win[++scan] &&
	                 prev === _win[++scan] && prev === _win[++scan] &&
	                 prev === _win[++scan] && prev === _win[++scan] &&
	                 prev === _win[++scan] && prev === _win[++scan] &&
	                 scan < strend);
	        s.match_length = MAX_MATCH - (strend - scan);
	        if (s.match_length > s.lookahead) {
	          s.match_length = s.lookahead;
	        }
	      }
	      //Assert(scan <= s->window+(uInt)(s->window_size-1), "wild scan");
	    }
	
	    /* Emit match if have run of MIN_MATCH or longer, else emit literal */
	    if (s.match_length >= MIN_MATCH) {
	      //check_match(s, s.strstart, s.strstart - 1, s.match_length);
	
	      /*** _tr_tally_dist(s, 1, s.match_length - MIN_MATCH, bflush); ***/
	      bflush = trees._tr_tally(s, 1, s.match_length - MIN_MATCH);
	
	      s.lookahead -= s.match_length;
	      s.strstart += s.match_length;
	      s.match_length = 0;
	    } else {
	      /* No match, output a literal byte */
	      //Tracevv((stderr,"%c", s->window[s->strstart]));
	      /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/
	      bflush = trees._tr_tally(s, 0, s.window[s.strstart]);
	
	      s.lookahead--;
	      s.strstart++;
	    }
	    if (bflush) {
	      /*** FLUSH_BLOCK(s, 0); ***/
	      flush_block_only(s, false);
	      if (s.strm.avail_out === 0) {
	        return BS_NEED_MORE;
	      }
	      /***/
	    }
	  }
	  s.insert = 0;
	  if (flush === Z_FINISH) {
	    /*** FLUSH_BLOCK(s, 1); ***/
	    flush_block_only(s, true);
	    if (s.strm.avail_out === 0) {
	      return BS_FINISH_STARTED;
	    }
	    /***/
	    return BS_FINISH_DONE;
	  }
	  if (s.last_lit) {
	    /*** FLUSH_BLOCK(s, 0); ***/
	    flush_block_only(s, false);
	    if (s.strm.avail_out === 0) {
	      return BS_NEED_MORE;
	    }
	    /***/
	  }
	  return BS_BLOCK_DONE;
	}
	
	/* ===========================================================================
	 * For Z_HUFFMAN_ONLY, do not look for matches.  Do not maintain a hash table.
	 * (It will be regenerated if this run of deflate switches away from Huffman.)
	 */
	function deflate_huff(s, flush) {
	  var bflush;             /* set if current block must be flushed */
	
	  for (;;) {
	    /* Make sure that we have a literal to write. */
	    if (s.lookahead === 0) {
	      fill_window(s);
	      if (s.lookahead === 0) {
	        if (flush === Z_NO_FLUSH) {
	          return BS_NEED_MORE;
	        }
	        break;      /* flush the current block */
	      }
	    }
	
	    /* Output a literal byte */
	    s.match_length = 0;
	    //Tracevv((stderr,"%c", s->window[s->strstart]));
	    /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/
	    bflush = trees._tr_tally(s, 0, s.window[s.strstart]);
	    s.lookahead--;
	    s.strstart++;
	    if (bflush) {
	      /*** FLUSH_BLOCK(s, 0); ***/
	      flush_block_only(s, false);
	      if (s.strm.avail_out === 0) {
	        return BS_NEED_MORE;
	      }
	      /***/
	    }
	  }
	  s.insert = 0;
	  if (flush === Z_FINISH) {
	    /*** FLUSH_BLOCK(s, 1); ***/
	    flush_block_only(s, true);
	    if (s.strm.avail_out === 0) {
	      return BS_FINISH_STARTED;
	    }
	    /***/
	    return BS_FINISH_DONE;
	  }
	  if (s.last_lit) {
	    /*** FLUSH_BLOCK(s, 0); ***/
	    flush_block_only(s, false);
	    if (s.strm.avail_out === 0) {
	      return BS_NEED_MORE;
	    }
	    /***/
	  }
	  return BS_BLOCK_DONE;
	}
	
	/* Values for max_lazy_match, good_match and max_chain_length, depending on
	 * the desired pack level (0..9). The values given below have been tuned to
	 * exclude worst case performance for pathological files. Better values may be
	 * found for specific files.
	 */
	function Config(good_length, max_lazy, nice_length, max_chain, func) {
	  this.good_length = good_length;
	  this.max_lazy = max_lazy;
	  this.nice_length = nice_length;
	  this.max_chain = max_chain;
	  this.func = func;
	}
	
	var configuration_table;
	
	configuration_table = [
	  /*      good lazy nice chain */
	  new Config(0, 0, 0, 0, deflate_stored),          /* 0 store only */
	  new Config(4, 4, 8, 4, deflate_fast),            /* 1 max speed, no lazy matches */
	  new Config(4, 5, 16, 8, deflate_fast),           /* 2 */
	  new Config(4, 6, 32, 32, deflate_fast),          /* 3 */
	
	  new Config(4, 4, 16, 16, deflate_slow),          /* 4 lazy matches */
	  new Config(8, 16, 32, 32, deflate_slow),         /* 5 */
	  new Config(8, 16, 128, 128, deflate_slow),       /* 6 */
	  new Config(8, 32, 128, 256, deflate_slow),       /* 7 */
	  new Config(32, 128, 258, 1024, deflate_slow),    /* 8 */
	  new Config(32, 258, 258, 4096, deflate_slow)     /* 9 max compression */
	];
	
	
	/* ===========================================================================
	 * Initialize the "longest match" routines for a new zlib stream
	 */
	function lm_init(s) {
	  s.window_size = 2 * s.w_size;
	
	  /*** CLEAR_HASH(s); ***/
	  zero(s.head); // Fill with NIL (= 0);
	
	  /* Set the default configuration parameters:
	   */
	  s.max_lazy_match = configuration_table[s.level].max_lazy;
	  s.good_match = configuration_table[s.level].good_length;
	  s.nice_match = configuration_table[s.level].nice_length;
	  s.max_chain_length = configuration_table[s.level].max_chain;
	
	  s.strstart = 0;
	  s.block_start = 0;
	  s.lookahead = 0;
	  s.insert = 0;
	  s.match_length = s.prev_length = MIN_MATCH - 1;
	  s.match_available = 0;
	  s.ins_h = 0;
	}
	
	
	function DeflateState() {
	  this.strm = null;            /* pointer back to this zlib stream */
	  this.status = 0;            /* as the name implies */
	  this.pending_buf = null;      /* output still pending */
	  this.pending_buf_size = 0;  /* size of pending_buf */
	  this.pending_out = 0;       /* next pending byte to output to the stream */
	  this.pending = 0;           /* nb of bytes in the pending buffer */
	  this.wrap = 0;              /* bit 0 true for zlib, bit 1 true for gzip */
	  this.gzhead = null;         /* gzip header information to write */
	  this.gzindex = 0;           /* where in extra, name, or comment */
	  this.method = Z_DEFLATED; /* can only be DEFLATED */
	  this.last_flush = -1;   /* value of flush param for previous deflate call */
	
	  this.w_size = 0;  /* LZ77 window size (32K by default) */
	  this.w_bits = 0;  /* log2(w_size)  (8..16) */
	  this.w_mask = 0;  /* w_size - 1 */
	
	  this.window = null;
	  /* Sliding window. Input bytes are read into the second half of the window,
	   * and move to the first half later to keep a dictionary of at least wSize
	   * bytes. With this organization, matches are limited to a distance of
	   * wSize-MAX_MATCH bytes, but this ensures that IO is always
	   * performed with a length multiple of the block size.
	   */
	
	  this.window_size = 0;
	  /* Actual size of window: 2*wSize, except when the user input buffer
	   * is directly used as sliding window.
	   */
	
	  this.prev = null;
	  /* Link to older string with same hash index. To limit the size of this
	   * array to 64K, this link is maintained only for the last 32K strings.
	   * An index in this array is thus a window index modulo 32K.
	   */
	
	  this.head = null;   /* Heads of the hash chains or NIL. */
	
	  this.ins_h = 0;       /* hash index of string to be inserted */
	  this.hash_size = 0;   /* number of elements in hash table */
	  this.hash_bits = 0;   /* log2(hash_size) */
	  this.hash_mask = 0;   /* hash_size-1 */
	
	  this.hash_shift = 0;
	  /* Number of bits by which ins_h must be shifted at each input
	   * step. It must be such that after MIN_MATCH steps, the oldest
	   * byte no longer takes part in the hash key, that is:
	   *   hash_shift * MIN_MATCH >= hash_bits
	   */
	
	  this.block_start = 0;
	  /* Window position at the beginning of the current output block. Gets
	   * negative when the window is moved backwards.
	   */
	
	  this.match_length = 0;      /* length of best match */
	  this.prev_match = 0;        /* previous match */
	  this.match_available = 0;   /* set if previous match exists */
	  this.strstart = 0;          /* start of string to insert */
	  this.match_start = 0;       /* start of matching string */
	  this.lookahead = 0;         /* number of valid bytes ahead in window */
	
	  this.prev_length = 0;
	  /* Length of the best match at previous step. Matches not greater than this
	   * are discarded. This is used in the lazy match evaluation.
	   */
	
	  this.max_chain_length = 0;
	  /* To speed up deflation, hash chains are never searched beyond this
	   * length.  A higher limit improves compression ratio but degrades the
	   * speed.
	   */
	
	  this.max_lazy_match = 0;
	  /* Attempt to find a better match only when the current match is strictly
	   * smaller than this value. This mechanism is used only for compression
	   * levels >= 4.
	   */
	  // That's alias to max_lazy_match, don't use directly
	  //this.max_insert_length = 0;
	  /* Insert new strings in the hash table only if the match length is not
	   * greater than this length. This saves time but degrades compression.
	   * max_insert_length is used only for compression levels <= 3.
	   */
	
	  this.level = 0;     /* compression level (1..9) */
	  this.strategy = 0;  /* favor or force Huffman coding*/
	
	  this.good_match = 0;
	  /* Use a faster search when the previous match is longer than this */
	
	  this.nice_match = 0; /* Stop searching when current match exceeds this */
	
	              /* used by trees.c: */
	
	  /* Didn't use ct_data typedef below to suppress compiler warning */
	
	  // struct ct_data_s dyn_ltree[HEAP_SIZE];   /* literal and length tree */
	  // struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */
	  // struct ct_data_s bl_tree[2*BL_CODES+1];  /* Huffman tree for bit lengths */
	
	  // Use flat array of DOUBLE size, with interleaved fata,
	  // because JS does not support effective
	  this.dyn_ltree  = new utils.Buf16(HEAP_SIZE * 2);
	  this.dyn_dtree  = new utils.Buf16((2 * D_CODES + 1) * 2);
	  this.bl_tree    = new utils.Buf16((2 * BL_CODES + 1) * 2);
	  zero(this.dyn_ltree);
	  zero(this.dyn_dtree);
	  zero(this.bl_tree);
	
	  this.l_desc   = null;         /* desc. for literal tree */
	  this.d_desc   = null;         /* desc. for distance tree */
	  this.bl_desc  = null;         /* desc. for bit length tree */
	
	  //ush bl_count[MAX_BITS+1];
	  this.bl_count = new utils.Buf16(MAX_BITS + 1);
	  /* number of codes at each bit length for an optimal tree */
	
	  //int heap[2*L_CODES+1];      /* heap used to build the Huffman trees */
	  this.heap = new utils.Buf16(2 * L_CODES + 1);  /* heap used to build the Huffman trees */
	  zero(this.heap);
	
	  this.heap_len = 0;               /* number of elements in the heap */
	  this.heap_max = 0;               /* element of largest frequency */
	  /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used.
	   * The same heap array is used to build all trees.
	   */
	
	  this.depth = new utils.Buf16(2 * L_CODES + 1); //uch depth[2*L_CODES+1];
	  zero(this.depth);
	  /* Depth of each subtree used as tie breaker for trees of equal frequency
	   */
	
	  this.l_buf = 0;          /* buffer index for literals or lengths */
	
	  this.lit_bufsize = 0;
	  /* Size of match buffer for literals/lengths.  There are 4 reasons for
	   * limiting lit_bufsize to 64K:
	   *   - frequencies can be kept in 16 bit counters
	   *   - if compression is not successful for the first block, all input
	   *     data is still in the window so we can still emit a stored block even
	   *     when input comes from standard input.  (This can also be done for
	   *     all blocks if lit_bufsize is not greater than 32K.)
	   *   - if compression is not successful for a file smaller than 64K, we can
	   *     even emit a stored file instead of a stored block (saving 5 bytes).
	   *     This is applicable only for zip (not gzip or zlib).
	   *   - creating new Huffman trees less frequently may not provide fast
	   *     adaptation to changes in the input data statistics. (Take for
	   *     example a binary file with poorly compressible code followed by
	   *     a highly compressible string table.) Smaller buffer sizes give
	   *     fast adaptation but have of course the overhead of transmitting
	   *     trees more frequently.
	   *   - I can't count above 4
	   */
	
	  this.last_lit = 0;      /* running index in l_buf */
	
	  this.d_buf = 0;
	  /* Buffer index for distances. To simplify the code, d_buf and l_buf have
	   * the same number of elements. To use different lengths, an extra flag
	   * array would be necessary.
	   */
	
	  this.opt_len = 0;       /* bit length of current block with optimal trees */
	  this.static_len = 0;    /* bit length of current block with static trees */
	  this.matches = 0;       /* number of string matches in current block */
	  this.insert = 0;        /* bytes at end of window left to insert */
	
	
	  this.bi_buf = 0;
	  /* Output buffer. bits are inserted starting at the bottom (least
	   * significant bits).
	   */
	  this.bi_valid = 0;
	  /* Number of valid bits in bi_buf.  All bits above the last valid bit
	   * are always zero.
	   */
	
	  // Used for window memory init. We safely ignore it for JS. That makes
	  // sense only for pointers and memory check tools.
	  //this.high_water = 0;
	  /* High water mark offset in window for initialized bytes -- bytes above
	   * this are set to zero in order to avoid memory check warnings when
	   * longest match routines access bytes past the input.  This is then
	   * updated to the new high water mark.
	   */
	}
	
	
	function deflateResetKeep(strm) {
	  var s;
	
	  if (!strm || !strm.state) {
	    return err(strm, Z_STREAM_ERROR);
	  }
	
	  strm.total_in = strm.total_out = 0;
	  strm.data_type = Z_UNKNOWN;
	
	  s = strm.state;
	  s.pending = 0;
	  s.pending_out = 0;
	
	  if (s.wrap < 0) {
	    s.wrap = -s.wrap;
	    /* was made negative by deflate(..., Z_FINISH); */
	  }
	  s.status = (s.wrap ? INIT_STATE : BUSY_STATE);
	  strm.adler = (s.wrap === 2) ?
	    0  // crc32(0, Z_NULL, 0)
	  :
	    1; // adler32(0, Z_NULL, 0)
	  s.last_flush = Z_NO_FLUSH;
	  trees._tr_init(s);
	  return Z_OK;
	}
	
	
	function deflateReset(strm) {
	  var ret = deflateResetKeep(strm);
	  if (ret === Z_OK) {
	    lm_init(strm.state);
	  }
	  return ret;
	}
	
	
	function deflateSetHeader(strm, head) {
	  if (!strm || !strm.state) { return Z_STREAM_ERROR; }
	  if (strm.state.wrap !== 2) { return Z_STREAM_ERROR; }
	  strm.state.gzhead = head;
	  return Z_OK;
	}
	
	
	function deflateInit2(strm, level, method, windowBits, memLevel, strategy) {
	  if (!strm) { // === Z_NULL
	    return Z_STREAM_ERROR;
	  }
	  var wrap = 1;
	
	  if (level === Z_DEFAULT_COMPRESSION) {
	    level = 6;
	  }
	
	  if (windowBits < 0) { /* suppress zlib wrapper */
	    wrap = 0;
	    windowBits = -windowBits;
	  }
	
	  else if (windowBits > 15) {
	    wrap = 2;           /* write gzip wrapper instead */
	    windowBits -= 16;
	  }
	
	
	  if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method !== Z_DEFLATED ||
	    windowBits < 8 || windowBits > 15 || level < 0 || level > 9 ||
	    strategy < 0 || strategy > Z_FIXED) {
	    return err(strm, Z_STREAM_ERROR);
	  }
	
	
	  if (windowBits === 8) {
	    windowBits = 9;
	  }
	  /* until 256-byte window bug fixed */
	
	  var s = new DeflateState();
	
	  strm.state = s;
	  s.strm = strm;
	
	  s.wrap = wrap;
	  s.gzhead = null;
	  s.w_bits = windowBits;
	  s.w_size = 1 << s.w_bits;
	  s.w_mask = s.w_size - 1;
	
	  s.hash_bits = memLevel + 7;
	  s.hash_size = 1 << s.hash_bits;
	  s.hash_mask = s.hash_size - 1;
	  s.hash_shift = ~~((s.hash_bits + MIN_MATCH - 1) / MIN_MATCH);
	
	  s.window = new utils.Buf8(s.w_size * 2);
	  s.head = new utils.Buf16(s.hash_size);
	  s.prev = new utils.Buf16(s.w_size);
	
	  // Don't need mem init magic for JS.
	  //s.high_water = 0;  /* nothing written to s->window yet */
	
	  s.lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */
	
	  s.pending_buf_size = s.lit_bufsize * 4;
	
	  //overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2);
	  //s->pending_buf = (uchf *) overlay;
	  s.pending_buf = new utils.Buf8(s.pending_buf_size);
	
	  // It is offset from `s.pending_buf` (size is `s.lit_bufsize * 2`)
	  //s->d_buf = overlay + s->lit_bufsize/sizeof(ush);
	  s.d_buf = 1 * s.lit_bufsize;
	
	  //s->l_buf = s->pending_buf + (1+sizeof(ush))*s->lit_bufsize;
	  s.l_buf = (1 + 2) * s.lit_bufsize;
	
	  s.level = level;
	  s.strategy = strategy;
	  s.method = method;
	
	  return deflateReset(strm);
	}
	
	function deflateInit(strm, level) {
	  return deflateInit2(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY);
	}
	
	
	function deflate(strm, flush) {
	  var old_flush, s;
	  var beg, val; // for gzip header write only
	
	  if (!strm || !strm.state ||
	    flush > Z_BLOCK || flush < 0) {
	    return strm ? err(strm, Z_STREAM_ERROR) : Z_STREAM_ERROR;
	  }
	
	  s = strm.state;
	
	  if (!strm.output ||
	      (!strm.input && strm.avail_in !== 0) ||
	      (s.status === FINISH_STATE && flush !== Z_FINISH)) {
	    return err(strm, (strm.avail_out === 0) ? Z_BUF_ERROR : Z_STREAM_ERROR);
	  }
	
	  s.strm = strm; /* just in case */
	  old_flush = s.last_flush;
	  s.last_flush = flush;
	
	  /* Write the header */
	  if (s.status === INIT_STATE) {
	
	    if (s.wrap === 2) { // GZIP header
	      strm.adler = 0;  //crc32(0L, Z_NULL, 0);
	      put_byte(s, 31);
	      put_byte(s, 139);
	      put_byte(s, 8);
	      if (!s.gzhead) { // s->gzhead == Z_NULL
	        put_byte(s, 0);
	        put_byte(s, 0);
	        put_byte(s, 0);
	        put_byte(s, 0);
	        put_byte(s, 0);
	        put_byte(s, s.level === 9 ? 2 :
	                    (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?
	                     4 : 0));
	        put_byte(s, OS_CODE);
	        s.status = BUSY_STATE;
	      }
	      else {
	        put_byte(s, (s.gzhead.text ? 1 : 0) +
	                    (s.gzhead.hcrc ? 2 : 0) +
	                    (!s.gzhead.extra ? 0 : 4) +
	                    (!s.gzhead.name ? 0 : 8) +
	                    (!s.gzhead.comment ? 0 : 16)
	        );
	        put_byte(s, s.gzhead.time & 0xff);
	        put_byte(s, (s.gzhead.time >> 8) & 0xff);
	        put_byte(s, (s.gzhead.time >> 16) & 0xff);
	        put_byte(s, (s.gzhead.time >> 24) & 0xff);
	        put_byte(s, s.level === 9 ? 2 :
	                    (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?
	                     4 : 0));
	        put_byte(s, s.gzhead.os & 0xff);
	        if (s.gzhead.extra && s.gzhead.extra.length) {
	          put_byte(s, s.gzhead.extra.length & 0xff);
	          put_byte(s, (s.gzhead.extra.length >> 8) & 0xff);
	        }
	        if (s.gzhead.hcrc) {
	          strm.adler = crc32(strm.adler, s.pending_buf, s.pending, 0);
	        }
	        s.gzindex = 0;
	        s.status = EXTRA_STATE;
	      }
	    }
	    else // DEFLATE header
	    {
	      var header = (Z_DEFLATED + ((s.w_bits - 8) << 4)) << 8;
	      var level_flags = -1;
	
	      if (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2) {
	        level_flags = 0;
	      } else if (s.level < 6) {
	        level_flags = 1;
	      } else if (s.level === 6) {
	        level_flags = 2;
	      } else {
	        level_flags = 3;
	      }
	      header |= (level_flags << 6);
	      if (s.strstart !== 0) { header |= PRESET_DICT; }
	      header += 31 - (header % 31);
	
	      s.status = BUSY_STATE;
	      putShortMSB(s, header);
	
	      /* Save the adler32 of the preset dictionary: */
	      if (s.strstart !== 0) {
	        putShortMSB(s, strm.adler >>> 16);
	        putShortMSB(s, strm.adler & 0xffff);
	      }
	      strm.adler = 1; // adler32(0L, Z_NULL, 0);
	    }
	  }
	
	//#ifdef GZIP
	  if (s.status === EXTRA_STATE) {
	    if (s.gzhead.extra/* != Z_NULL*/) {
	      beg = s.pending;  /* start of bytes to update crc */
	
	      while (s.gzindex < (s.gzhead.extra.length & 0xffff)) {
	        if (s.pending === s.pending_buf_size) {
	          if (s.gzhead.hcrc && s.pending > beg) {
	            strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);
	          }
	          flush_pending(strm);
	          beg = s.pending;
	          if (s.pending === s.pending_buf_size) {
	            break;
	          }
	        }
	        put_byte(s, s.gzhead.extra[s.gzindex] & 0xff);
	        s.gzindex++;
	      }
	      if (s.gzhead.hcrc && s.pending > beg) {
	        strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);
	      }
	      if (s.gzindex === s.gzhead.extra.length) {
	        s.gzindex = 0;
	        s.status = NAME_STATE;
	      }
	    }
	    else {
	      s.status = NAME_STATE;
	    }
	  }
	  if (s.status === NAME_STATE) {
	    if (s.gzhead.name/* != Z_NULL*/) {
	      beg = s.pending;  /* start of bytes to update crc */
	      //int val;
	
	      do {
	        if (s.pending === s.pending_buf_size) {
	          if (s.gzhead.hcrc && s.pending > beg) {
	            strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);
	          }
	          flush_pending(strm);
	          beg = s.pending;
	          if (s.pending === s.pending_buf_size) {
	            val = 1;
	            break;
	          }
	        }
	        // JS specific: little magic to add zero terminator to end of string
	        if (s.gzindex < s.gzhead.name.length) {
	          val = s.gzhead.name.charCodeAt(s.gzindex++) & 0xff;
	        } else {
	          val = 0;
	        }
	        put_byte(s, val);
	      } while (val !== 0);
	
	      if (s.gzhead.hcrc && s.pending > beg) {
	        strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);
	      }
	      if (val === 0) {
	        s.gzindex = 0;
	        s.status = COMMENT_STATE;
	      }
	    }
	    else {
	      s.status = COMMENT_STATE;
	    }
	  }
	  if (s.status === COMMENT_STATE) {
	    if (s.gzhead.comment/* != Z_NULL*/) {
	      beg = s.pending;  /* start of bytes to update crc */
	      //int val;
	
	      do {
	        if (s.pending === s.pending_buf_size) {
	          if (s.gzhead.hcrc && s.pending > beg) {
	            strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);
	          }
	          flush_pending(strm);
	          beg = s.pending;
	          if (s.pending === s.pending_buf_size) {
	            val = 1;
	            break;
	          }
	        }
	        // JS specific: little magic to add zero terminator to end of string
	        if (s.gzindex < s.gzhead.comment.length) {
	          val = s.gzhead.comment.charCodeAt(s.gzindex++) & 0xff;
	        } else {
	          val = 0;
	        }
	        put_byte(s, val);
	      } while (val !== 0);
	
	      if (s.gzhead.hcrc && s.pending > beg) {
	        strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);
	      }
	      if (val === 0) {
	        s.status = HCRC_STATE;
	      }
	    }
	    else {
	      s.status = HCRC_STATE;
	    }
	  }
	  if (s.status === HCRC_STATE) {
	    if (s.gzhead.hcrc) {
	      if (s.pending + 2 > s.pending_buf_size) {
	        flush_pending(strm);
	      }
	      if (s.pending + 2 <= s.pending_buf_size) {
	        put_byte(s, strm.adler & 0xff);
	        put_byte(s, (strm.adler >> 8) & 0xff);
	        strm.adler = 0; //crc32(0L, Z_NULL, 0);
	        s.status = BUSY_STATE;
	      }
	    }
	    else {
	      s.status = BUSY_STATE;
	    }
	  }
	//#endif
	
	  /* Flush as much pending output as possible */
	  if (s.pending !== 0) {
	    flush_pending(strm);
	    if (strm.avail_out === 0) {
	      /* Since avail_out is 0, deflate will be called again with
	       * more output space, but possibly with both pending and
	       * avail_in equal to zero. There won't be anything to do,
	       * but this is not an error situation so make sure we
	       * return OK instead of BUF_ERROR at next call of deflate:
	       */
	      s.last_flush = -1;
	      return Z_OK;
	    }
	
	    /* Make sure there is something to do and avoid duplicate consecutive
	     * flushes. For repeated and useless calls with Z_FINISH, we keep
	     * returning Z_STREAM_END instead of Z_BUF_ERROR.
	     */
	  } else if (strm.avail_in === 0 && rank(flush) <= rank(old_flush) &&
	    flush !== Z_FINISH) {
	    return err(strm, Z_BUF_ERROR);
	  }
	
	  /* User must not provide more input after the first FINISH: */
	  if (s.status === FINISH_STATE && strm.avail_in !== 0) {
	    return err(strm, Z_BUF_ERROR);
	  }
	
	  /* Start a new block or continue the current one.
	   */
	  if (strm.avail_in !== 0 || s.lookahead !== 0 ||
	    (flush !== Z_NO_FLUSH && s.status !== FINISH_STATE)) {
	    var bstate = (s.strategy === Z_HUFFMAN_ONLY) ? deflate_huff(s, flush) :
	      (s.strategy === Z_RLE ? deflate_rle(s, flush) :
	        configuration_table[s.level].func(s, flush));
	
	    if (bstate === BS_FINISH_STARTED || bstate === BS_FINISH_DONE) {
	      s.status = FINISH_STATE;
	    }
	    if (bstate === BS_NEED_MORE || bstate === BS_FINISH_STARTED) {
	      if (strm.avail_out === 0) {
	        s.last_flush = -1;
	        /* avoid BUF_ERROR next call, see above */
	      }
	      return Z_OK;
	      /* If flush != Z_NO_FLUSH && avail_out == 0, the next call
	       * of deflate should use the same flush parameter to make sure
	       * that the flush is complete. So we don't have to output an
	       * empty block here, this will be done at next call. This also
	       * ensures that for a very small output buffer, we emit at most
	       * one empty block.
	       */
	    }
	    if (bstate === BS_BLOCK_DONE) {
	      if (flush === Z_PARTIAL_FLUSH) {
	        trees._tr_align(s);
	      }
	      else if (flush !== Z_BLOCK) { /* FULL_FLUSH or SYNC_FLUSH */
	
	        trees._tr_stored_block(s, 0, 0, false);
	        /* For a full flush, this empty block will be recognized
	         * as a special marker by inflate_sync().
	         */
	        if (flush === Z_FULL_FLUSH) {
	          /*** CLEAR_HASH(s); ***/             /* forget history */
	          zero(s.head); // Fill with NIL (= 0);
	
	          if (s.lookahead === 0) {
	            s.strstart = 0;
	            s.block_start = 0;
	            s.insert = 0;
	          }
	        }
	      }
	      flush_pending(strm);
	      if (strm.avail_out === 0) {
	        s.last_flush = -1; /* avoid BUF_ERROR at next call, see above */
	        return Z_OK;
	      }
	    }
	  }
	  //Assert(strm->avail_out > 0, "bug2");
	  //if (strm.avail_out <= 0) { throw new Error("bug2");}
	
	  if (flush !== Z_FINISH) { return Z_OK; }
	  if (s.wrap <= 0) { return Z_STREAM_END; }
	
	  /* Write the trailer */
	  if (s.wrap === 2) {
	    put_byte(s, strm.adler & 0xff);
	    put_byte(s, (strm.adler >> 8) & 0xff);
	    put_byte(s, (strm.adler >> 16) & 0xff);
	    put_byte(s, (strm.adler >> 24) & 0xff);
	    put_byte(s, strm.total_in & 0xff);
	    put_byte(s, (strm.total_in >> 8) & 0xff);
	    put_byte(s, (strm.total_in >> 16) & 0xff);
	    put_byte(s, (strm.total_in >> 24) & 0xff);
	  }
	  else
	  {
	    putShortMSB(s, strm.adler >>> 16);
	    putShortMSB(s, strm.adler & 0xffff);
	  }
	
	  flush_pending(strm);
	  /* If avail_out is zero, the application will call deflate again
	   * to flush the rest.
	   */
	  if (s.wrap > 0) { s.wrap = -s.wrap; }
	  /* write the trailer only once! */
	  return s.pending !== 0 ? Z_OK : Z_STREAM_END;
	}
	
	function deflateEnd(strm) {
	  var status;
	
	  if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) {
	    return Z_STREAM_ERROR;
	  }
	
	  status = strm.state.status;
	  if (status !== INIT_STATE &&
	    status !== EXTRA_STATE &&
	    status !== NAME_STATE &&
	    status !== COMMENT_STATE &&
	    status !== HCRC_STATE &&
	    status !== BUSY_STATE &&
	    status !== FINISH_STATE
	  ) {
	    return err(strm, Z_STREAM_ERROR);
	  }
	
	  strm.state = null;
	
	  return status === BUSY_STATE ? err(strm, Z_DATA_ERROR) : Z_OK;
	}
	
	
	/* =========================================================================
	 * Initializes the compression dictionary from the given byte
	 * sequence without producing any compressed output.
	 */
	function deflateSetDictionary(strm, dictionary) {
	  var dictLength = dictionary.length;
	
	  var s;
	  var str, n;
	  var wrap;
	  var avail;
	  var next;
	  var input;
	  var tmpDict;
	
	  if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) {
	    return Z_STREAM_ERROR;
	  }
	
	  s = strm.state;
	  wrap = s.wrap;
	
	  if (wrap === 2 || (wrap === 1 && s.status !== INIT_STATE) || s.lookahead) {
	    return Z_STREAM_ERROR;
	  }
	
	  /* when using zlib wrappers, compute Adler-32 for provided dictionary */
	  if (wrap === 1) {
	    /* adler32(strm->adler, dictionary, dictLength); */
	    strm.adler = adler32(strm.adler, dictionary, dictLength, 0);
	  }
	
	  s.wrap = 0;   /* avoid computing Adler-32 in read_buf */
	
	  /* if dictionary would fill window, just replace the history */
	  if (dictLength >= s.w_size) {
	    if (wrap === 0) {            /* already empty otherwise */
	      /*** CLEAR_HASH(s); ***/
	      zero(s.head); // Fill with NIL (= 0);
	      s.strstart = 0;
	      s.block_start = 0;
	      s.insert = 0;
	    }
	    /* use the tail */
	    // dictionary = dictionary.slice(dictLength - s.w_size);
	    tmpDict = new utils.Buf8(s.w_size);
	    utils.arraySet(tmpDict, dictionary, dictLength - s.w_size, s.w_size, 0);
	    dictionary = tmpDict;
	    dictLength = s.w_size;
	  }
	  /* insert dictionary into window and hash */
	  avail = strm.avail_in;
	  next = strm.next_in;
	  input = strm.input;
	  strm.avail_in = dictLength;
	  strm.next_in = 0;
	  strm.input = dictionary;
	  fill_window(s);
	  while (s.lookahead >= MIN_MATCH) {
	    str = s.strstart;
	    n = s.lookahead - (MIN_MATCH - 1);
	    do {
	      /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */
	      s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask;
	
	      s.prev[str & s.w_mask] = s.head[s.ins_h];
	
	      s.head[s.ins_h] = str;
	      str++;
	    } while (--n);
	    s.strstart = str;
	    s.lookahead = MIN_MATCH - 1;
	    fill_window(s);
	  }
	  s.strstart += s.lookahead;
	  s.block_start = s.strstart;
	  s.insert = s.lookahead;
	  s.lookahead = 0;
	  s.match_length = s.prev_length = MIN_MATCH - 1;
	  s.match_available = 0;
	  strm.next_in = next;
	  strm.input = input;
	  strm.avail_in = avail;
	  s.wrap = wrap;
	  return Z_OK;
	}
	
	
	exports.deflateInit = deflateInit;
	exports.deflateInit2 = deflateInit2;
	exports.deflateReset = deflateReset;
	exports.deflateResetKeep = deflateResetKeep;
	exports.deflateSetHeader = deflateSetHeader;
	exports.deflate = deflate;
	exports.deflateEnd = deflateEnd;
	exports.deflateSetDictionary = deflateSetDictionary;
	exports.deflateInfo = 'pako deflate (from Nodeca project)';
	
	/* Not implemented
	exports.deflateBound = deflateBound;
	exports.deflateCopy = deflateCopy;
	exports.deflateParams = deflateParams;
	exports.deflatePending = deflatePending;
	exports.deflatePrime = deflatePrime;
	exports.deflateTune = deflateTune;
	*/


/***/ }),
/* 1090 */
/***/ (function(module, exports) {

	'use strict';
	
	// (C) 1995-2013 Jean-loup Gailly and Mark Adler
	// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
	//
	// This software is provided 'as-is', without any express or implied
	// warranty. In no event will the authors be held liable for any damages
	// arising from the use of this software.
	//
	// Permission is granted to anyone to use this software for any purpose,
	// including commercial applications, and to alter it and redistribute it
	// freely, subject to the following restrictions:
	//
	// 1. The origin of this software must not be misrepresented; you must not
	//   claim that you wrote the original software. If you use this software
	//   in a product, an acknowledgment in the product documentation would be
	//   appreciated but is not required.
	// 2. Altered source versions must be plainly marked as such, and must not be
	//   misrepresented as being the original software.
	// 3. This notice may not be removed or altered from any source distribution.
	
	function GZheader() {
	  /* true if compressed data believed to be text */
	  this.text       = 0;
	  /* modification time */
	  this.time       = 0;
	  /* extra flags (not used when writing a gzip file) */
	  this.xflags     = 0;
	  /* operating system */
	  this.os         = 0;
	  /* pointer to extra field or Z_NULL if none */
	  this.extra      = null;
	  /* extra field length (valid if extra != Z_NULL) */
	  this.extra_len  = 0; // Actually, we don't need it in JS,
	                       // but leave for few code modifications
	
	  //
	  // Setup limits is not necessary because in js we should not preallocate memory
	  // for inflate use constant limit in 65536 bytes
	  //
	
	  /* space at extra (only when reading header) */
	  // this.extra_max  = 0;
	  /* pointer to zero-terminated file name or Z_NULL */
	  this.name       = '';
	  /* space at name (only when reading header) */
	  // this.name_max   = 0;
	  /* pointer to zero-terminated comment or Z_NULL */
	  this.comment    = '';
	  /* space at comment (only when reading header) */
	  // this.comm_max   = 0;
	  /* true if there was or will be a header crc */
	  this.hcrc       = 0;
	  /* true when done reading gzip header (not used when writing a gzip file) */
	  this.done       = false;
	}
	
	module.exports = GZheader;


/***/ }),
/* 1091 */
/***/ (function(module, exports) {

	'use strict';
	
	// (C) 1995-2013 Jean-loup Gailly and Mark Adler
	// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
	//
	// This software is provided 'as-is', without any express or implied
	// warranty. In no event will the authors be held liable for any damages
	// arising from the use of this software.
	//
	// Permission is granted to anyone to use this software for any purpose,
	// including commercial applications, and to alter it and redistribute it
	// freely, subject to the following restrictions:
	//
	// 1. The origin of this software must not be misrepresented; you must not
	//   claim that you wrote the original software. If you use this software
	//   in a product, an acknowledgment in the product documentation would be
	//   appreciated but is not required.
	// 2. Altered source versions must be plainly marked as such, and must not be
	//   misrepresented as being the original software.
	// 3. This notice may not be removed or altered from any source distribution.
	
	// See state defs from inflate.js
	var BAD = 30;       /* got a data error -- remain here until reset */
	var TYPE = 12;      /* i: waiting for type bits, including last-flag bit */
	
	/*
	   Decode literal, length, and distance codes and write out the resulting
	   literal and match bytes until either not enough input or output is
	   available, an end-of-block is encountered, or a data error is encountered.
	   When large enough input and output buffers are supplied to inflate(), for
	   example, a 16K input buffer and a 64K output buffer, more than 95% of the
	   inflate execution time is spent in this routine.
	
	   Entry assumptions:
	
	        state.mode === LEN
	        strm.avail_in >= 6
	        strm.avail_out >= 258
	        start >= strm.avail_out
	        state.bits < 8
	
	   On return, state.mode is one of:
	
	        LEN -- ran out of enough output space or enough available input
	        TYPE -- reached end of block code, inflate() to interpret next block
	        BAD -- error in block data
	
	   Notes:
	
	    - The maximum input bits used by a length/distance pair is 15 bits for the
	      length code, 5 bits for the length extra, 15 bits for the distance code,
	      and 13 bits for the distance extra.  This totals 48 bits, or six bytes.
	      Therefore if strm.avail_in >= 6, then there is enough input to avoid
	      checking for available input while decoding.
	
	    - The maximum bytes that a single length/distance pair can output is 258
	      bytes, which is the maximum length that can be coded.  inflate_fast()
	      requires strm.avail_out >= 258 for each loop to avoid checking for
	      output space.
	 */
	module.exports = function inflate_fast(strm, start) {
	  var state;
	  var _in;                    /* local strm.input */
	  var last;                   /* have enough input while in < last */
	  var _out;                   /* local strm.output */
	  var beg;                    /* inflate()'s initial strm.output */
	  var end;                    /* while out < end, enough space available */
	//#ifdef INFLATE_STRICT
	  var dmax;                   /* maximum distance from zlib header */
	//#endif
	  var wsize;                  /* window size or zero if not using window */
	  var whave;                  /* valid bytes in the window */
	  var wnext;                  /* window write index */
	  // Use `s_window` instead `window`, avoid conflict with instrumentation tools
	  var s_window;               /* allocated sliding window, if wsize != 0 */
	  var hold;                   /* local strm.hold */
	  var bits;                   /* local strm.bits */
	  var lcode;                  /* local strm.lencode */
	  var dcode;                  /* local strm.distcode */
	  var lmask;                  /* mask for first level of length codes */
	  var dmask;                  /* mask for first level of distance codes */
	  var here;                   /* retrieved table entry */
	  var op;                     /* code bits, operation, extra bits, or */
	                              /*  window position, window bytes to copy */
	  var len;                    /* match length, unused bytes */
	  var dist;                   /* match distance */
	  var from;                   /* where to copy match from */
	  var from_source;
	
	
	  var input, output; // JS specific, because we have no pointers
	
	  /* copy state to local variables */
	  state = strm.state;
	  //here = state.here;
	  _in = strm.next_in;
	  input = strm.input;
	  last = _in + (strm.avail_in - 5);
	  _out = strm.next_out;
	  output = strm.output;
	  beg = _out - (start - strm.avail_out);
	  end = _out + (strm.avail_out - 257);
	//#ifdef INFLATE_STRICT
	  dmax = state.dmax;
	//#endif
	  wsize = state.wsize;
	  whave = state.whave;
	  wnext = state.wnext;
	  s_window = state.window;
	  hold = state.hold;
	  bits = state.bits;
	  lcode = state.lencode;
	  dcode = state.distcode;
	  lmask = (1 << state.lenbits) - 1;
	  dmask = (1 << state.distbits) - 1;
	
	
	  /* decode literals and length/distances until end-of-block or not enough
	     input data or output space */
	
	  top:
	  do {
	    if (bits < 15) {
	      hold += input[_in++] << bits;
	      bits += 8;
	      hold += input[_in++] << bits;
	      bits += 8;
	    }
	
	    here = lcode[hold & lmask];
	
	    dolen:
	    for (;;) { // Goto emulation
	      op = here >>> 24/*here.bits*/;
	      hold >>>= op;
	      bits -= op;
	      op = (here >>> 16) & 0xff/*here.op*/;
	      if (op === 0) {                          /* literal */
	        //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?
	        //        "inflate:         literal '%c'\n" :
	        //        "inflate:         literal 0x%02x\n", here.val));
	        output[_out++] = here & 0xffff/*here.val*/;
	      }
	      else if (op & 16) {                     /* length base */
	        len = here & 0xffff/*here.val*/;
	        op &= 15;                           /* number of extra bits */
	        if (op) {
	          if (bits < op) {
	            hold += input[_in++] << bits;
	            bits += 8;
	          }
	          len += hold & ((1 << op) - 1);
	          hold >>>= op;
	          bits -= op;
	        }
	        //Tracevv((stderr, "inflate:         length %u\n", len));
	        if (bits < 15) {
	          hold += input[_in++] << bits;
	          bits += 8;
	          hold += input[_in++] << bits;
	          bits += 8;
	        }
	        here = dcode[hold & dmask];
	
	        dodist:
	        for (;;) { // goto emulation
	          op = here >>> 24/*here.bits*/;
	          hold >>>= op;
	          bits -= op;
	          op = (here >>> 16) & 0xff/*here.op*/;
	
	          if (op & 16) {                      /* distance base */
	            dist = here & 0xffff/*here.val*/;
	            op &= 15;                       /* number of extra bits */
	            if (bits < op) {
	              hold += input[_in++] << bits;
	              bits += 8;
	              if (bits < op) {
	                hold += input[_in++] << bits;
	                bits += 8;
	              }
	            }
	            dist += hold & ((1 << op) - 1);
	//#ifdef INFLATE_STRICT
	            if (dist > dmax) {
	              strm.msg = 'invalid distance too far back';
	              state.mode = BAD;
	              break top;
	            }
	//#endif
	            hold >>>= op;
	            bits -= op;
	            //Tracevv((stderr, "inflate:         distance %u\n", dist));
	            op = _out - beg;                /* max distance in output */
	            if (dist > op) {                /* see if copy from window */
	              op = dist - op;               /* distance back in window */
	              if (op > whave) {
	                if (state.sane) {
	                  strm.msg = 'invalid distance too far back';
	                  state.mode = BAD;
	                  break top;
	                }
	
	// (!) This block is disabled in zlib defaults,
	// don't enable it for binary compatibility
	//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR
	//                if (len <= op - whave) {
	//                  do {
	//                    output[_out++] = 0;
	//                  } while (--len);
	//                  continue top;
	//                }
	//                len -= op - whave;
	//                do {
	//                  output[_out++] = 0;
	//                } while (--op > whave);
	//                if (op === 0) {
	//                  from = _out - dist;
	//                  do {
	//                    output[_out++] = output[from++];
	//                  } while (--len);
	//                  continue top;
	//                }
	//#endif
	              }
	              from = 0; // window index
	              from_source = s_window;
	              if (wnext === 0) {           /* very common case */
	                from += wsize - op;
	                if (op < len) {         /* some from window */
	                  len -= op;
	                  do {
	                    output[_out++] = s_window[from++];
	                  } while (--op);
	                  from = _out - dist;  /* rest from output */
	                  from_source = output;
	                }
	              }
	              else if (wnext < op) {      /* wrap around window */
	                from += wsize + wnext - op;
	                op -= wnext;
	                if (op < len) {         /* some from end of window */
	                  len -= op;
	                  do {
	                    output[_out++] = s_window[from++];
	                  } while (--op);
	                  from = 0;
	                  if (wnext < len) {  /* some from start of window */
	                    op = wnext;
	                    len -= op;
	                    do {
	                      output[_out++] = s_window[from++];
	                    } while (--op);
	                    from = _out - dist;      /* rest from output */
	                    from_source = output;
	                  }
	                }
	              }
	              else {                      /* contiguous in window */
	                from += wnext - op;
	                if (op < len) {         /* some from window */
	                  len -= op;
	                  do {
	                    output[_out++] = s_window[from++];
	                  } while (--op);
	                  from = _out - dist;  /* rest from output */
	                  from_source = output;
	                }
	              }
	              while (len > 2) {
	                output[_out++] = from_source[from++];
	                output[_out++] = from_source[from++];
	                output[_out++] = from_source[from++];
	                len -= 3;
	              }
	              if (len) {
	                output[_out++] = from_source[from++];
	                if (len > 1) {
	                  output[_out++] = from_source[from++];
	                }
	              }
	            }
	            else {
	              from = _out - dist;          /* copy direct from output */
	              do {                        /* minimum length is three */
	                output[_out++] = output[from++];
	                output[_out++] = output[from++];
	                output[_out++] = output[from++];
	                len -= 3;
	              } while (len > 2);
	              if (len) {
	                output[_out++] = output[from++];
	                if (len > 1) {
	                  output[_out++] = output[from++];
	                }
	              }
	            }
	          }
	          else if ((op & 64) === 0) {          /* 2nd level distance code */
	            here = dcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];
	            continue dodist;
	          }
	          else {
	            strm.msg = 'invalid distance code';
	            state.mode = BAD;
	            break top;
	          }
	
	          break; // need to emulate goto via "continue"
	        }
	      }
	      else if ((op & 64) === 0) {              /* 2nd level length code */
	        here = lcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];
	        continue dolen;
	      }
	      else if (op & 32) {                     /* end-of-block */
	        //Tracevv((stderr, "inflate:         end of block\n"));
	        state.mode = TYPE;
	        break top;
	      }
	      else {
	        strm.msg = 'invalid literal/length code';
	        state.mode = BAD;
	        break top;
	      }
	
	      break; // need to emulate goto via "continue"
	    }
	  } while (_in < last && _out < end);
	
	  /* return unused bytes (on entry, bits < 8, so in won't go too far back) */
	  len = bits >> 3;
	  _in -= len;
	  bits -= len << 3;
	  hold &= (1 << bits) - 1;
	
	  /* update state and return */
	  strm.next_in = _in;
	  strm.next_out = _out;
	  strm.avail_in = (_in < last ? 5 + (last - _in) : 5 - (_in - last));
	  strm.avail_out = (_out < end ? 257 + (end - _out) : 257 - (_out - end));
	  state.hold = hold;
	  state.bits = bits;
	  return;
	};


/***/ }),
/* 1092 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	// (C) 1995-2013 Jean-loup Gailly and Mark Adler
	// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
	//
	// This software is provided 'as-is', without any express or implied
	// warranty. In no event will the authors be held liable for any damages
	// arising from the use of this software.
	//
	// Permission is granted to anyone to use this software for any purpose,
	// including commercial applications, and to alter it and redistribute it
	// freely, subject to the following restrictions:
	//
	// 1. The origin of this software must not be misrepresented; you must not
	//   claim that you wrote the original software. If you use this software
	//   in a product, an acknowledgment in the product documentation would be
	//   appreciated but is not required.
	// 2. Altered source versions must be plainly marked as such, and must not be
	//   misrepresented as being the original software.
	// 3. This notice may not be removed or altered from any source distribution.
	
	var utils         = __webpack_require__(80);
	var adler32       = __webpack_require__(510);
	var crc32         = __webpack_require__(512);
	var inflate_fast  = __webpack_require__(1091);
	var inflate_table = __webpack_require__(1093);
	
	var CODES = 0;
	var LENS = 1;
	var DISTS = 2;
	
	/* Public constants ==========================================================*/
	/* ===========================================================================*/
	
	
	/* Allowed flush values; see deflate() and inflate() below for details */
	//var Z_NO_FLUSH      = 0;
	//var Z_PARTIAL_FLUSH = 1;
	//var Z_SYNC_FLUSH    = 2;
	//var Z_FULL_FLUSH    = 3;
	var Z_FINISH        = 4;
	var Z_BLOCK         = 5;
	var Z_TREES         = 6;
	
	
	/* Return codes for the compression/decompression functions. Negative values
	 * are errors, positive values are used for special but normal events.
	 */
	var Z_OK            = 0;
	var Z_STREAM_END    = 1;
	var Z_NEED_DICT     = 2;
	//var Z_ERRNO         = -1;
	var Z_STREAM_ERROR  = -2;
	var Z_DATA_ERROR    = -3;
	var Z_MEM_ERROR     = -4;
	var Z_BUF_ERROR     = -5;
	//var Z_VERSION_ERROR = -6;
	
	/* The deflate compression method */
	var Z_DEFLATED  = 8;
	
	
	/* STATES ====================================================================*/
	/* ===========================================================================*/
	
	
	var    HEAD = 1;       /* i: waiting for magic header */
	var    FLAGS = 2;      /* i: waiting for method and flags (gzip) */
	var    TIME = 3;       /* i: waiting for modification time (gzip) */
	var    OS = 4;         /* i: waiting for extra flags and operating system (gzip) */
	var    EXLEN = 5;      /* i: waiting for extra length (gzip) */
	var    EXTRA = 6;      /* i: waiting for extra bytes (gzip) */
	var    NAME = 7;       /* i: waiting for end of file name (gzip) */
	var    COMMENT = 8;    /* i: waiting for end of comment (gzip) */
	var    HCRC = 9;       /* i: waiting for header crc (gzip) */
	var    DICTID = 10;    /* i: waiting for dictionary check value */
	var    DICT = 11;      /* waiting for inflateSetDictionary() call */
	var        TYPE = 12;      /* i: waiting for type bits, including last-flag bit */
	var        TYPEDO = 13;    /* i: same, but skip check to exit inflate on new block */
	var        STORED = 14;    /* i: waiting for stored size (length and complement) */
	var        COPY_ = 15;     /* i/o: same as COPY below, but only first time in */
	var        COPY = 16;      /* i/o: waiting for input or output to copy stored block */
	var        TABLE = 17;     /* i: waiting for dynamic block table lengths */
	var        LENLENS = 18;   /* i: waiting for code length code lengths */
	var        CODELENS = 19;  /* i: waiting for length/lit and distance code lengths */
	var            LEN_ = 20;      /* i: same as LEN below, but only first time in */
	var            LEN = 21;       /* i: waiting for length/lit/eob code */
	var            LENEXT = 22;    /* i: waiting for length extra bits */
	var            DIST = 23;      /* i: waiting for distance code */
	var            DISTEXT = 24;   /* i: waiting for distance extra bits */
	var            MATCH = 25;     /* o: waiting for output space to copy string */
	var            LIT = 26;       /* o: waiting for output space to write literal */
	var    CHECK = 27;     /* i: waiting for 32-bit check value */
	var    LENGTH = 28;    /* i: waiting for 32-bit length (gzip) */
	var    DONE = 29;      /* finished check, done -- remain here until reset */
	var    BAD = 30;       /* got a data error -- remain here until reset */
	var    MEM = 31;       /* got an inflate() memory error -- remain here until reset */
	var    SYNC = 32;      /* looking for synchronization bytes to restart inflate() */
	
	/* ===========================================================================*/
	
	
	
	var ENOUGH_LENS = 852;
	var ENOUGH_DISTS = 592;
	//var ENOUGH =  (ENOUGH_LENS+ENOUGH_DISTS);
	
	var MAX_WBITS = 15;
	/* 32K LZ77 window */
	var DEF_WBITS = MAX_WBITS;
	
	
	function zswap32(q) {
	  return  (((q >>> 24) & 0xff) +
	          ((q >>> 8) & 0xff00) +
	          ((q & 0xff00) << 8) +
	          ((q & 0xff) << 24));
	}
	
	
	function InflateState() {
	  this.mode = 0;             /* current inflate mode */
	  this.last = false;          /* true if processing last block */
	  this.wrap = 0;              /* bit 0 true for zlib, bit 1 true for gzip */
	  this.havedict = false;      /* true if dictionary provided */
	  this.flags = 0;             /* gzip header method and flags (0 if zlib) */
	  this.dmax = 0;              /* zlib header max distance (INFLATE_STRICT) */
	  this.check = 0;             /* protected copy of check value */
	  this.total = 0;             /* protected copy of output count */
	  // TODO: may be {}
	  this.head = null;           /* where to save gzip header information */
	
	  /* sliding window */
	  this.wbits = 0;             /* log base 2 of requested window size */
	  this.wsize = 0;             /* window size or zero if not using window */
	  this.whave = 0;             /* valid bytes in the window */
	  this.wnext = 0;             /* window write index */
	  this.window = null;         /* allocated sliding window, if needed */
	
	  /* bit accumulator */
	  this.hold = 0;              /* input bit accumulator */
	  this.bits = 0;              /* number of bits in "in" */
	
	  /* for string and stored block copying */
	  this.length = 0;            /* literal or length of data to copy */
	  this.offset = 0;            /* distance back to copy string from */
	
	  /* for table and code decoding */
	  this.extra = 0;             /* extra bits needed */
	
	  /* fixed and dynamic code tables */
	  this.lencode = null;          /* starting table for length/literal codes */
	  this.distcode = null;         /* starting table for distance codes */
	  this.lenbits = 0;           /* index bits for lencode */
	  this.distbits = 0;          /* index bits for distcode */
	
	  /* dynamic table building */
	  this.ncode = 0;             /* number of code length code lengths */
	  this.nlen = 0;              /* number of length code lengths */
	  this.ndist = 0;             /* number of distance code lengths */
	  this.have = 0;              /* number of code lengths in lens[] */
	  this.next = null;              /* next available space in codes[] */
	
	  this.lens = new utils.Buf16(320); /* temporary storage for code lengths */
	  this.work = new utils.Buf16(288); /* work area for code table building */
	
	  /*
	   because we don't have pointers in js, we use lencode and distcode directly
	   as buffers so we don't need codes
	  */
	  //this.codes = new utils.Buf32(ENOUGH);       /* space for code tables */
	  this.lendyn = null;              /* dynamic table for length/literal codes (JS specific) */
	  this.distdyn = null;             /* dynamic table for distance codes (JS specific) */
	  this.sane = 0;                   /* if false, allow invalid distance too far */
	  this.back = 0;                   /* bits back of last unprocessed length/lit */
	  this.was = 0;                    /* initial length of match */
	}
	
	function inflateResetKeep(strm) {
	  var state;
	
	  if (!strm || !strm.state) { return Z_STREAM_ERROR; }
	  state = strm.state;
	  strm.total_in = strm.total_out = state.total = 0;
	  strm.msg = ''; /*Z_NULL*/
	  if (state.wrap) {       /* to support ill-conceived Java test suite */
	    strm.adler = state.wrap & 1;
	  }
	  state.mode = HEAD;
	  state.last = 0;
	  state.havedict = 0;
	  state.dmax = 32768;
	  state.head = null/*Z_NULL*/;
	  state.hold = 0;
	  state.bits = 0;
	  //state.lencode = state.distcode = state.next = state.codes;
	  state.lencode = state.lendyn = new utils.Buf32(ENOUGH_LENS);
	  state.distcode = state.distdyn = new utils.Buf32(ENOUGH_DISTS);
	
	  state.sane = 1;
	  state.back = -1;
	  //Tracev((stderr, "inflate: reset\n"));
	  return Z_OK;
	}
	
	function inflateReset(strm) {
	  var state;
	
	  if (!strm || !strm.state) { return Z_STREAM_ERROR; }
	  state = strm.state;
	  state.wsize = 0;
	  state.whave = 0;
	  state.wnext = 0;
	  return inflateResetKeep(strm);
	
	}
	
	function inflateReset2(strm, windowBits) {
	  var wrap;
	  var state;
	
	  /* get the state */
	  if (!strm || !strm.state) { return Z_STREAM_ERROR; }
	  state = strm.state;
	
	  /* extract wrap request from windowBits parameter */
	  if (windowBits < 0) {
	    wrap = 0;
	    windowBits = -windowBits;
	  }
	  else {
	    wrap = (windowBits >> 4) + 1;
	    if (windowBits < 48) {
	      windowBits &= 15;
	    }
	  }
	
	  /* set number of window bits, free window if different */
	  if (windowBits && (windowBits < 8 || windowBits > 15)) {
	    return Z_STREAM_ERROR;
	  }
	  if (state.window !== null && state.wbits !== windowBits) {
	    state.window = null;
	  }
	
	  /* update state and reset the rest of it */
	  state.wrap = wrap;
	  state.wbits = windowBits;
	  return inflateReset(strm);
	}
	
	function inflateInit2(strm, windowBits) {
	  var ret;
	  var state;
	
	  if (!strm) { return Z_STREAM_ERROR; }
	  //strm.msg = Z_NULL;                 /* in case we return an error */
	
	  state = new InflateState();
	
	  //if (state === Z_NULL) return Z_MEM_ERROR;
	  //Tracev((stderr, "inflate: allocated\n"));
	  strm.state = state;
	  state.window = null/*Z_NULL*/;
	  ret = inflateReset2(strm, windowBits);
	  if (ret !== Z_OK) {
	    strm.state = null/*Z_NULL*/;
	  }
	  return ret;
	}
	
	function inflateInit(strm) {
	  return inflateInit2(strm, DEF_WBITS);
	}
	
	
	/*
	 Return state with length and distance decoding tables and index sizes set to
	 fixed code decoding.  Normally this returns fixed tables from inffixed.h.
	 If BUILDFIXED is defined, then instead this routine builds the tables the
	 first time it's called, and returns those tables the first time and
	 thereafter.  This reduces the size of the code by about 2K bytes, in
	 exchange for a little execution time.  However, BUILDFIXED should not be
	 used for threaded applications, since the rewriting of the tables and virgin
	 may not be thread-safe.
	 */
	var virgin = true;
	
	var lenfix, distfix; // We have no pointers in JS, so keep tables separate
	
	function fixedtables(state) {
	  /* build fixed huffman tables if first call (may not be thread safe) */
	  if (virgin) {
	    var sym;
	
	    lenfix = new utils.Buf32(512);
	    distfix = new utils.Buf32(32);
	
	    /* literal/length table */
	    sym = 0;
	    while (sym < 144) { state.lens[sym++] = 8; }
	    while (sym < 256) { state.lens[sym++] = 9; }
	    while (sym < 280) { state.lens[sym++] = 7; }
	    while (sym < 288) { state.lens[sym++] = 8; }
	
	    inflate_table(LENS,  state.lens, 0, 288, lenfix,   0, state.work, { bits: 9 });
	
	    /* distance table */
	    sym = 0;
	    while (sym < 32) { state.lens[sym++] = 5; }
	
	    inflate_table(DISTS, state.lens, 0, 32,   distfix, 0, state.work, { bits: 5 });
	
	    /* do this just once */
	    virgin = false;
	  }
	
	  state.lencode = lenfix;
	  state.lenbits = 9;
	  state.distcode = distfix;
	  state.distbits = 5;
	}
	
	
	/*
	 Update the window with the last wsize (normally 32K) bytes written before
	 returning.  If window does not exist yet, create it.  This is only called
	 when a window is already in use, or when output has been written during this
	 inflate call, but the end of the deflate stream has not been reached yet.
	 It is also called to create a window for dictionary data when a dictionary
	 is loaded.
	
	 Providing output buffers larger than 32K to inflate() should provide a speed
	 advantage, since only the last 32K of output is copied to the sliding window
	 upon return from inflate(), and since all distances after the first 32K of
	 output will fall in the output data, making match copies simpler and faster.
	 The advantage may be dependent on the size of the processor's data caches.
	 */
	function updatewindow(strm, src, end, copy) {
	  var dist;
	  var state = strm.state;
	
	  /* if it hasn't been done already, allocate space for the window */
	  if (state.window === null) {
	    state.wsize = 1 << state.wbits;
	    state.wnext = 0;
	    state.whave = 0;
	
	    state.window = new utils.Buf8(state.wsize);
	  }
	
	  /* copy state->wsize or less output bytes into the circular window */
	  if (copy >= state.wsize) {
	    utils.arraySet(state.window, src, end - state.wsize, state.wsize, 0);
	    state.wnext = 0;
	    state.whave = state.wsize;
	  }
	  else {
	    dist = state.wsize - state.wnext;
	    if (dist > copy) {
	      dist = copy;
	    }
	    //zmemcpy(state->window + state->wnext, end - copy, dist);
	    utils.arraySet(state.window, src, end - copy, dist, state.wnext);
	    copy -= dist;
	    if (copy) {
	      //zmemcpy(state->window, end - copy, copy);
	      utils.arraySet(state.window, src, end - copy, copy, 0);
	      state.wnext = copy;
	      state.whave = state.wsize;
	    }
	    else {
	      state.wnext += dist;
	      if (state.wnext === state.wsize) { state.wnext = 0; }
	      if (state.whave < state.wsize) { state.whave += dist; }
	    }
	  }
	  return 0;
	}
	
	function inflate(strm, flush) {
	  var state;
	  var input, output;          // input/output buffers
	  var next;                   /* next input INDEX */
	  var put;                    /* next output INDEX */
	  var have, left;             /* available input and output */
	  var hold;                   /* bit buffer */
	  var bits;                   /* bits in bit buffer */
	  var _in, _out;              /* save starting available input and output */
	  var copy;                   /* number of stored or match bytes to copy */
	  var from;                   /* where to copy match bytes from */
	  var from_source;
	  var here = 0;               /* current decoding table entry */
	  var here_bits, here_op, here_val; // paked "here" denormalized (JS specific)
	  //var last;                   /* parent table entry */
	  var last_bits, last_op, last_val; // paked "last" denormalized (JS specific)
	  var len;                    /* length to copy for repeats, bits to drop */
	  var ret;                    /* return code */
	  var hbuf = new utils.Buf8(4);    /* buffer for gzip header crc calculation */
	  var opts;
	
	  var n; // temporary var for NEED_BITS
	
	  var order = /* permutation of code lengths */
	    [ 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 ];
	
	
	  if (!strm || !strm.state || !strm.output ||
	      (!strm.input && strm.avail_in !== 0)) {
	    return Z_STREAM_ERROR;
	  }
	
	  state = strm.state;
	  if (state.mode === TYPE) { state.mode = TYPEDO; }    /* skip check */
	
	
	  //--- LOAD() ---
	  put = strm.next_out;
	  output = strm.output;
	  left = strm.avail_out;
	  next = strm.next_in;
	  input = strm.input;
	  have = strm.avail_in;
	  hold = state.hold;
	  bits = state.bits;
	  //---
	
	  _in = have;
	  _out = left;
	  ret = Z_OK;
	
	  inf_leave: // goto emulation
	  for (;;) {
	    switch (state.mode) {
	      case HEAD:
	        if (state.wrap === 0) {
	          state.mode = TYPEDO;
	          break;
	        }
	        //=== NEEDBITS(16);
	        while (bits < 16) {
	          if (have === 0) { break inf_leave; }
	          have--;
	          hold += input[next++] << bits;
	          bits += 8;
	        }
	        //===//
	        if ((state.wrap & 2) && hold === 0x8b1f) {  /* gzip header */
	          state.check = 0/*crc32(0L, Z_NULL, 0)*/;
	          //=== CRC2(state.check, hold);
	          hbuf[0] = hold & 0xff;
	          hbuf[1] = (hold >>> 8) & 0xff;
	          state.check = crc32(state.check, hbuf, 2, 0);
	          //===//
	
	          //=== INITBITS();
	          hold = 0;
	          bits = 0;
	          //===//
	          state.mode = FLAGS;
	          break;
	        }
	        state.flags = 0;           /* expect zlib header */
	        if (state.head) {
	          state.head.done = false;
	        }
	        if (!(state.wrap & 1) ||   /* check if zlib header allowed */
	          (((hold & 0xff)/*BITS(8)*/ << 8) + (hold >> 8)) % 31) {
	          strm.msg = 'incorrect header check';
	          state.mode = BAD;
	          break;
	        }
	        if ((hold & 0x0f)/*BITS(4)*/ !== Z_DEFLATED) {
	          strm.msg = 'unknown compression method';
	          state.mode = BAD;
	          break;
	        }
	        //--- DROPBITS(4) ---//
	        hold >>>= 4;
	        bits -= 4;
	        //---//
	        len = (hold & 0x0f)/*BITS(4)*/ + 8;
	        if (state.wbits === 0) {
	          state.wbits = len;
	        }
	        else if (len > state.wbits) {
	          strm.msg = 'invalid window size';
	          state.mode = BAD;
	          break;
	        }
	        state.dmax = 1 << len;
	        //Tracev((stderr, "inflate:   zlib header ok\n"));
	        strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;
	        state.mode = hold & 0x200 ? DICTID : TYPE;
	        //=== INITBITS();
	        hold = 0;
	        bits = 0;
	        //===//
	        break;
	      case FLAGS:
	        //=== NEEDBITS(16); */
	        while (bits < 16) {
	          if (have === 0) { break inf_leave; }
	          have--;
	          hold += input[next++] << bits;
	          bits += 8;
	        }
	        //===//
	        state.flags = hold;
	        if ((state.flags & 0xff) !== Z_DEFLATED) {
	          strm.msg = 'unknown compression method';
	          state.mode = BAD;
	          break;
	        }
	        if (state.flags & 0xe000) {
	          strm.msg = 'unknown header flags set';
	          state.mode = BAD;
	          break;
	        }
	        if (state.head) {
	          state.head.text = ((hold >> 8) & 1);
	        }
	        if (state.flags & 0x0200) {
	          //=== CRC2(state.check, hold);
	          hbuf[0] = hold & 0xff;
	          hbuf[1] = (hold >>> 8) & 0xff;
	          state.check = crc32(state.check, hbuf, 2, 0);
	          //===//
	        }
	        //=== INITBITS();
	        hold = 0;
	        bits = 0;
	        //===//
	        state.mode = TIME;
	        /* falls through */
	      case TIME:
	        //=== NEEDBITS(32); */
	        while (bits < 32) {
	          if (have === 0) { break inf_leave; }
	          have--;
	          hold += input[next++] << bits;
	          bits += 8;
	        }
	        //===//
	        if (state.head) {
	          state.head.time = hold;
	        }
	        if (state.flags & 0x0200) {
	          //=== CRC4(state.check, hold)
	          hbuf[0] = hold & 0xff;
	          hbuf[1] = (hold >>> 8) & 0xff;
	          hbuf[2] = (hold >>> 16) & 0xff;
	          hbuf[3] = (hold >>> 24) & 0xff;
	          state.check = crc32(state.check, hbuf, 4, 0);
	          //===
	        }
	        //=== INITBITS();
	        hold = 0;
	        bits = 0;
	        //===//
	        state.mode = OS;
	        /* falls through */
	      case OS:
	        //=== NEEDBITS(16); */
	        while (bits < 16) {
	          if (have === 0) { break inf_leave; }
	          have--;
	          hold += input[next++] << bits;
	          bits += 8;
	        }
	        //===//
	        if (state.head) {
	          state.head.xflags = (hold & 0xff);
	          state.head.os = (hold >> 8);
	        }
	        if (state.flags & 0x0200) {
	          //=== CRC2(state.check, hold);
	          hbuf[0] = hold & 0xff;
	          hbuf[1] = (hold >>> 8) & 0xff;
	          state.check = crc32(state.check, hbuf, 2, 0);
	          //===//
	        }
	        //=== INITBITS();
	        hold = 0;
	        bits = 0;
	        //===//
	        state.mode = EXLEN;
	        /* falls through */
	      case EXLEN:
	        if (state.flags & 0x0400) {
	          //=== NEEDBITS(16); */
	          while (bits < 16) {
	            if (have === 0) { break inf_leave; }
	            have--;
	            hold += input[next++] << bits;
	            bits += 8;
	          }
	          //===//
	          state.length = hold;
	          if (state.head) {
	            state.head.extra_len = hold;
	          }
	          if (state.flags & 0x0200) {
	            //=== CRC2(state.check, hold);
	            hbuf[0] = hold & 0xff;
	            hbuf[1] = (hold >>> 8) & 0xff;
	            state.check = crc32(state.check, hbuf, 2, 0);
	            //===//
	          }
	          //=== INITBITS();
	          hold = 0;
	          bits = 0;
	          //===//
	        }
	        else if (state.head) {
	          state.head.extra = null/*Z_NULL*/;
	        }
	        state.mode = EXTRA;
	        /* falls through */
	      case EXTRA:
	        if (state.flags & 0x0400) {
	          copy = state.length;
	          if (copy > have) { copy = have; }
	          if (copy) {
	            if (state.head) {
	              len = state.head.extra_len - state.length;
	              if (!state.head.extra) {
	                // Use untyped array for more convenient processing later
	                state.head.extra = new Array(state.head.extra_len);
	              }
	              utils.arraySet(
	                state.head.extra,
	                input,
	                next,
	                // extra field is limited to 65536 bytes
	                // - no need for additional size check
	                copy,
	                /*len + copy > state.head.extra_max - len ? state.head.extra_max : copy,*/
	                len
	              );
	              //zmemcpy(state.head.extra + len, next,
	              //        len + copy > state.head.extra_max ?
	              //        state.head.extra_max - len : copy);
	            }
	            if (state.flags & 0x0200) {
	              state.check = crc32(state.check, input, copy, next);
	            }
	            have -= copy;
	            next += copy;
	            state.length -= copy;
	          }
	          if (state.length) { break inf_leave; }
	        }
	        state.length = 0;
	        state.mode = NAME;
	        /* falls through */
	      case NAME:
	        if (state.flags & 0x0800) {
	          if (have === 0) { break inf_leave; }
	          copy = 0;
	          do {
	            // TODO: 2 or 1 bytes?
	            len = input[next + copy++];
	            /* use constant limit because in js we should not preallocate memory */
	            if (state.head && len &&
	                (state.length < 65536 /*state.head.name_max*/)) {
	              state.head.name += String.fromCharCode(len);
	            }
	          } while (len && copy < have);
	
	          if (state.flags & 0x0200) {
	            state.check = crc32(state.check, input, copy, next);
	          }
	          have -= copy;
	          next += copy;
	          if (len) { break inf_leave; }
	        }
	        else if (state.head) {
	          state.head.name = null;
	        }
	        state.length = 0;
	        state.mode = COMMENT;
	        /* falls through */
	      case COMMENT:
	        if (state.flags & 0x1000) {
	          if (have === 0) { break inf_leave; }
	          copy = 0;
	          do {
	            len = input[next + copy++];
	            /* use constant limit because in js we should not preallocate memory */
	            if (state.head && len &&
	                (state.length < 65536 /*state.head.comm_max*/)) {
	              state.head.comment += String.fromCharCode(len);
	            }
	          } while (len && copy < have);
	          if (state.flags & 0x0200) {
	            state.check = crc32(state.check, input, copy, next);
	          }
	          have -= copy;
	          next += copy;
	          if (len) { break inf_leave; }
	        }
	        else if (state.head) {
	          state.head.comment = null;
	        }
	        state.mode = HCRC;
	        /* falls through */
	      case HCRC:
	        if (state.flags & 0x0200) {
	          //=== NEEDBITS(16); */
	          while (bits < 16) {
	            if (have === 0) { break inf_leave; }
	            have--;
	            hold += input[next++] << bits;
	            bits += 8;
	          }
	          //===//
	          if (hold !== (state.check & 0xffff)) {
	            strm.msg = 'header crc mismatch';
	            state.mode = BAD;
	            break;
	          }
	          //=== INITBITS();
	          hold = 0;
	          bits = 0;
	          //===//
	        }
	        if (state.head) {
	          state.head.hcrc = ((state.flags >> 9) & 1);
	          state.head.done = true;
	        }
	        strm.adler = state.check = 0;
	        state.mode = TYPE;
	        break;
	      case DICTID:
	        //=== NEEDBITS(32); */
	        while (bits < 32) {
	          if (have === 0) { break inf_leave; }
	          have--;
	          hold += input[next++] << bits;
	          bits += 8;
	        }
	        //===//
	        strm.adler = state.check = zswap32(hold);
	        //=== INITBITS();
	        hold = 0;
	        bits = 0;
	        //===//
	        state.mode = DICT;
	        /* falls through */
	      case DICT:
	        if (state.havedict === 0) {
	          //--- RESTORE() ---
	          strm.next_out = put;
	          strm.avail_out = left;
	          strm.next_in = next;
	          strm.avail_in = have;
	          state.hold = hold;
	          state.bits = bits;
	          //---
	          return Z_NEED_DICT;
	        }
	        strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;
	        state.mode = TYPE;
	        /* falls through */
	      case TYPE:
	        if (flush === Z_BLOCK || flush === Z_TREES) { break inf_leave; }
	        /* falls through */
	      case TYPEDO:
	        if (state.last) {
	          //--- BYTEBITS() ---//
	          hold >>>= bits & 7;
	          bits -= bits & 7;
	          //---//
	          state.mode = CHECK;
	          break;
	        }
	        //=== NEEDBITS(3); */
	        while (bits < 3) {
	          if (have === 0) { break inf_leave; }
	          have--;
	          hold += input[next++] << bits;
	          bits += 8;
	        }
	        //===//
	        state.last = (hold & 0x01)/*BITS(1)*/;
	        //--- DROPBITS(1) ---//
	        hold >>>= 1;
	        bits -= 1;
	        //---//
	
	        switch ((hold & 0x03)/*BITS(2)*/) {
	          case 0:                             /* stored block */
	            //Tracev((stderr, "inflate:     stored block%s\n",
	            //        state.last ? " (last)" : ""));
	            state.mode = STORED;
	            break;
	          case 1:                             /* fixed block */
	            fixedtables(state);
	            //Tracev((stderr, "inflate:     fixed codes block%s\n",
	            //        state.last ? " (last)" : ""));
	            state.mode = LEN_;             /* decode codes */
	            if (flush === Z_TREES) {
	              //--- DROPBITS(2) ---//
	              hold >>>= 2;
	              bits -= 2;
	              //---//
	              break inf_leave;
	            }
	            break;
	          case 2:                             /* dynamic block */
	            //Tracev((stderr, "inflate:     dynamic codes block%s\n",
	            //        state.last ? " (last)" : ""));
	            state.mode = TABLE;
	            break;
	          case 3:
	            strm.msg = 'invalid block type';
	            state.mode = BAD;
	        }
	        //--- DROPBITS(2) ---//
	        hold >>>= 2;
	        bits -= 2;
	        //---//
	        break;
	      case STORED:
	        //--- BYTEBITS() ---// /* go to byte boundary */
	        hold >>>= bits & 7;
	        bits -= bits & 7;
	        //---//
	        //=== NEEDBITS(32); */
	        while (bits < 32) {
	          if (have === 0) { break inf_leave; }
	          have--;
	          hold += input[next++] << bits;
	          bits += 8;
	        }
	        //===//
	        if ((hold & 0xffff) !== ((hold >>> 16) ^ 0xffff)) {
	          strm.msg = 'invalid stored block lengths';
	          state.mode = BAD;
	          break;
	        }
	        state.length = hold & 0xffff;
	        //Tracev((stderr, "inflate:       stored length %u\n",
	        //        state.length));
	        //=== INITBITS();
	        hold = 0;
	        bits = 0;
	        //===//
	        state.mode = COPY_;
	        if (flush === Z_TREES) { break inf_leave; }
	        /* falls through */
	      case COPY_:
	        state.mode = COPY;
	        /* falls through */
	      case COPY:
	        copy = state.length;
	        if (copy) {
	          if (copy > have) { copy = have; }
	          if (copy > left) { copy = left; }
	          if (copy === 0) { break inf_leave; }
	          //--- zmemcpy(put, next, copy); ---
	          utils.arraySet(output, input, next, copy, put);
	          //---//
	          have -= copy;
	          next += copy;
	          left -= copy;
	          put += copy;
	          state.length -= copy;
	          break;
	        }
	        //Tracev((stderr, "inflate:       stored end\n"));
	        state.mode = TYPE;
	        break;
	      case TABLE:
	        //=== NEEDBITS(14); */
	        while (bits < 14) {
	          if (have === 0) { break inf_leave; }
	          have--;
	          hold += input[next++] << bits;
	          bits += 8;
	        }
	        //===//
	        state.nlen = (hold & 0x1f)/*BITS(5)*/ + 257;
	        //--- DROPBITS(5) ---//
	        hold >>>= 5;
	        bits -= 5;
	        //---//
	        state.ndist = (hold & 0x1f)/*BITS(5)*/ + 1;
	        //--- DROPBITS(5) ---//
	        hold >>>= 5;
	        bits -= 5;
	        //---//
	        state.ncode = (hold & 0x0f)/*BITS(4)*/ + 4;
	        //--- DROPBITS(4) ---//
	        hold >>>= 4;
	        bits -= 4;
	        //---//
	//#ifndef PKZIP_BUG_WORKAROUND
	        if (state.nlen > 286 || state.ndist > 30) {
	          strm.msg = 'too many length or distance symbols';
	          state.mode = BAD;
	          break;
	        }
	//#endif
	        //Tracev((stderr, "inflate:       table sizes ok\n"));
	        state.have = 0;
	        state.mode = LENLENS;
	        /* falls through */
	      case LENLENS:
	        while (state.have < state.ncode) {
	          //=== NEEDBITS(3);
	          while (bits < 3) {
	            if (have === 0) { break inf_leave; }
	            have--;
	            hold += input[next++] << bits;
	            bits += 8;
	          }
	          //===//
	          state.lens[order[state.have++]] = (hold & 0x07);//BITS(3);
	          //--- DROPBITS(3) ---//
	          hold >>>= 3;
	          bits -= 3;
	          //---//
	        }
	        while (state.have < 19) {
	          state.lens[order[state.have++]] = 0;
	        }
	        // We have separate tables & no pointers. 2 commented lines below not needed.
	        //state.next = state.codes;
	        //state.lencode = state.next;
	        // Switch to use dynamic table
	        state.lencode = state.lendyn;
	        state.lenbits = 7;
	
	        opts = { bits: state.lenbits };
	        ret = inflate_table(CODES, state.lens, 0, 19, state.lencode, 0, state.work, opts);
	        state.lenbits = opts.bits;
	
	        if (ret) {
	          strm.msg = 'invalid code lengths set';
	          state.mode = BAD;
	          break;
	        }
	        //Tracev((stderr, "inflate:       code lengths ok\n"));
	        state.have = 0;
	        state.mode = CODELENS;
	        /* falls through */
	      case CODELENS:
	        while (state.have < state.nlen + state.ndist) {
	          for (;;) {
	            here = state.lencode[hold & ((1 << state.lenbits) - 1)];/*BITS(state.lenbits)*/
	            here_bits = here >>> 24;
	            here_op = (here >>> 16) & 0xff;
	            here_val = here & 0xffff;
	
	            if ((here_bits) <= bits) { break; }
	            //--- PULLBYTE() ---//
	            if (have === 0) { break inf_leave; }
	            have--;
	            hold += input[next++] << bits;
	            bits += 8;
	            //---//
	          }
	          if (here_val < 16) {
	            //--- DROPBITS(here.bits) ---//
	            hold >>>= here_bits;
	            bits -= here_bits;
	            //---//
	            state.lens[state.have++] = here_val;
	          }
	          else {
	            if (here_val === 16) {
	              //=== NEEDBITS(here.bits + 2);
	              n = here_bits + 2;
	              while (bits < n) {
	                if (have === 0) { break inf_leave; }
	                have--;
	                hold += input[next++] << bits;
	                bits += 8;
	              }
	              //===//
	              //--- DROPBITS(here.bits) ---//
	              hold >>>= here_bits;
	              bits -= here_bits;
	              //---//
	              if (state.have === 0) {
	                strm.msg = 'invalid bit length repeat';
	                state.mode = BAD;
	                break;
	              }
	              len = state.lens[state.have - 1];
	              copy = 3 + (hold & 0x03);//BITS(2);
	              //--- DROPBITS(2) ---//
	              hold >>>= 2;
	              bits -= 2;
	              //---//
	            }
	            else if (here_val === 17) {
	              //=== NEEDBITS(here.bits + 3);
	              n = here_bits + 3;
	              while (bits < n) {
	                if (have === 0) { break inf_leave; }
	                have--;
	                hold += input[next++] << bits;
	                bits += 8;
	              }
	              //===//
	              //--- DROPBITS(here.bits) ---//
	              hold >>>= here_bits;
	              bits -= here_bits;
	              //---//
	              len = 0;
	              copy = 3 + (hold & 0x07);//BITS(3);
	              //--- DROPBITS(3) ---//
	              hold >>>= 3;
	              bits -= 3;
	              //---//
	            }
	            else {
	              //=== NEEDBITS(here.bits + 7);
	              n = here_bits + 7;
	              while (bits < n) {
	                if (have === 0) { break inf_leave; }
	                have--;
	                hold += input[next++] << bits;
	                bits += 8;
	              }
	              //===//
	              //--- DROPBITS(here.bits) ---//
	              hold >>>= here_bits;
	              bits -= here_bits;
	              //---//
	              len = 0;
	              copy = 11 + (hold & 0x7f);//BITS(7);
	              //--- DROPBITS(7) ---//
	              hold >>>= 7;
	              bits -= 7;
	              //---//
	            }
	            if (state.have + copy > state.nlen + state.ndist) {
	              strm.msg = 'invalid bit length repeat';
	              state.mode = BAD;
	              break;
	            }
	            while (copy--) {
	              state.lens[state.have++] = len;
	            }
	          }
	        }
	
	        /* handle error breaks in while */
	        if (state.mode === BAD) { break; }
	
	        /* check for end-of-block code (better have one) */
	        if (state.lens[256] === 0) {
	          strm.msg = 'invalid code -- missing end-of-block';
	          state.mode = BAD;
	          break;
	        }
	
	        /* build code tables -- note: do not change the lenbits or distbits
	           values here (9 and 6) without reading the comments in inftrees.h
	           concerning the ENOUGH constants, which depend on those values */
	        state.lenbits = 9;
	
	        opts = { bits: state.lenbits };
	        ret = inflate_table(LENS, state.lens, 0, state.nlen, state.lencode, 0, state.work, opts);
	        // We have separate tables & no pointers. 2 commented lines below not needed.
	        // state.next_index = opts.table_index;
	        state.lenbits = opts.bits;
	        // state.lencode = state.next;
	
	        if (ret) {
	          strm.msg = 'invalid literal/lengths set';
	          state.mode = BAD;
	          break;
	        }
	
	        state.distbits = 6;
	        //state.distcode.copy(state.codes);
	        // Switch to use dynamic table
	        state.distcode = state.distdyn;
	        opts = { bits: state.distbits };
	        ret = inflate_table(DISTS, state.lens, state.nlen, state.ndist, state.distcode, 0, state.work, opts);
	        // We have separate tables & no pointers. 2 commented lines below not needed.
	        // state.next_index = opts.table_index;
	        state.distbits = opts.bits;
	        // state.distcode = state.next;
	
	        if (ret) {
	          strm.msg = 'invalid distances set';
	          state.mode = BAD;
	          break;
	        }
	        //Tracev((stderr, 'inflate:       codes ok\n'));
	        state.mode = LEN_;
	        if (flush === Z_TREES) { break inf_leave; }
	        /* falls through */
	      case LEN_:
	        state.mode = LEN;
	        /* falls through */
	      case LEN:
	        if (have >= 6 && left >= 258) {
	          //--- RESTORE() ---
	          strm.next_out = put;
	          strm.avail_out = left;
	          strm.next_in = next;
	          strm.avail_in = have;
	          state.hold = hold;
	          state.bits = bits;
	          //---
	          inflate_fast(strm, _out);
	          //--- LOAD() ---
	          put = strm.next_out;
	          output = strm.output;
	          left = strm.avail_out;
	          next = strm.next_in;
	          input = strm.input;
	          have = strm.avail_in;
	          hold = state.hold;
	          bits = state.bits;
	          //---
	
	          if (state.mode === TYPE) {
	            state.back = -1;
	          }
	          break;
	        }
	        state.back = 0;
	        for (;;) {
	          here = state.lencode[hold & ((1 << state.lenbits) - 1)];  /*BITS(state.lenbits)*/
	          here_bits = here >>> 24;
	          here_op = (here >>> 16) & 0xff;
	          here_val = here & 0xffff;
	
	          if (here_bits <= bits) { break; }
	          //--- PULLBYTE() ---//
	          if (have === 0) { break inf_leave; }
	          have--;
	          hold += input[next++] << bits;
	          bits += 8;
	          //---//
	        }
	        if (here_op && (here_op & 0xf0) === 0) {
	          last_bits = here_bits;
	          last_op = here_op;
	          last_val = here_val;
	          for (;;) {
	            here = state.lencode[last_val +
	                    ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)];
	            here_bits = here >>> 24;
	            here_op = (here >>> 16) & 0xff;
	            here_val = here & 0xffff;
	
	            if ((last_bits + here_bits) <= bits) { break; }
	            //--- PULLBYTE() ---//
	            if (have === 0) { break inf_leave; }
	            have--;
	            hold += input[next++] << bits;
	            bits += 8;
	            //---//
	          }
	          //--- DROPBITS(last.bits) ---//
	          hold >>>= last_bits;
	          bits -= last_bits;
	          //---//
	          state.back += last_bits;
	        }
	        //--- DROPBITS(here.bits) ---//
	        hold >>>= here_bits;
	        bits -= here_bits;
	        //---//
	        state.back += here_bits;
	        state.length = here_val;
	        if (here_op === 0) {
	          //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?
	          //        "inflate:         literal '%c'\n" :
	          //        "inflate:         literal 0x%02x\n", here.val));
	          state.mode = LIT;
	          break;
	        }
	        if (here_op & 32) {
	          //Tracevv((stderr, "inflate:         end of block\n"));
	          state.back = -1;
	          state.mode = TYPE;
	          break;
	        }
	        if (here_op & 64) {
	          strm.msg = 'invalid literal/length code';
	          state.mode = BAD;
	          break;
	        }
	        state.extra = here_op & 15;
	        state.mode = LENEXT;
	        /* falls through */
	      case LENEXT:
	        if (state.extra) {
	          //=== NEEDBITS(state.extra);
	          n = state.extra;
	          while (bits < n) {
	            if (have === 0) { break inf_leave; }
	            have--;
	            hold += input[next++] << bits;
	            bits += 8;
	          }
	          //===//
	          state.length += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/;
	          //--- DROPBITS(state.extra) ---//
	          hold >>>= state.extra;
	          bits -= state.extra;
	          //---//
	          state.back += state.extra;
	        }
	        //Tracevv((stderr, "inflate:         length %u\n", state.length));
	        state.was = state.length;
	        state.mode = DIST;
	        /* falls through */
	      case DIST:
	        for (;;) {
	          here = state.distcode[hold & ((1 << state.distbits) - 1)];/*BITS(state.distbits)*/
	          here_bits = here >>> 24;
	          here_op = (here >>> 16) & 0xff;
	          here_val = here & 0xffff;
	
	          if ((here_bits) <= bits) { break; }
	          //--- PULLBYTE() ---//
	          if (have === 0) { break inf_leave; }
	          have--;
	          hold += input[next++] << bits;
	          bits += 8;
	          //---//
	        }
	        if ((here_op & 0xf0) === 0) {
	          last_bits = here_bits;
	          last_op = here_op;
	          last_val = here_val;
	          for (;;) {
	            here = state.distcode[last_val +
	                    ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)];
	            here_bits = here >>> 24;
	            here_op = (here >>> 16) & 0xff;
	            here_val = here & 0xffff;
	
	            if ((last_bits + here_bits) <= bits) { break; }
	            //--- PULLBYTE() ---//
	            if (have === 0) { break inf_leave; }
	            have--;
	            hold += input[next++] << bits;
	            bits += 8;
	            //---//
	          }
	          //--- DROPBITS(last.bits) ---//
	          hold >>>= last_bits;
	          bits -= last_bits;
	          //---//
	          state.back += last_bits;
	        }
	        //--- DROPBITS(here.bits) ---//
	        hold >>>= here_bits;
	        bits -= here_bits;
	        //---//
	        state.back += here_bits;
	        if (here_op & 64) {
	          strm.msg = 'invalid distance code';
	          state.mode = BAD;
	          break;
	        }
	        state.offset = here_val;
	        state.extra = (here_op) & 15;
	        state.mode = DISTEXT;
	        /* falls through */
	      case DISTEXT:
	        if (state.extra) {
	          //=== NEEDBITS(state.extra);
	          n = state.extra;
	          while (bits < n) {
	            if (have === 0) { break inf_leave; }
	            have--;
	            hold += input[next++] << bits;
	            bits += 8;
	          }
	          //===//
	          state.offset += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/;
	          //--- DROPBITS(state.extra) ---//
	          hold >>>= state.extra;
	          bits -= state.extra;
	          //---//
	          state.back += state.extra;
	        }
	//#ifdef INFLATE_STRICT
	        if (state.offset > state.dmax) {
	          strm.msg = 'invalid distance too far back';
	          state.mode = BAD;
	          break;
	        }
	//#endif
	        //Tracevv((stderr, "inflate:         distance %u\n", state.offset));
	        state.mode = MATCH;
	        /* falls through */
	      case MATCH:
	        if (left === 0) { break inf_leave; }
	        copy = _out - left;
	        if (state.offset > copy) {         /* copy from window */
	          copy = state.offset - copy;
	          if (copy > state.whave) {
	            if (state.sane) {
	              strm.msg = 'invalid distance too far back';
	              state.mode = BAD;
	              break;
	            }
	// (!) This block is disabled in zlib defaults,
	// don't enable it for binary compatibility
	//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR
	//          Trace((stderr, "inflate.c too far\n"));
	//          copy -= state.whave;
	//          if (copy > state.length) { copy = state.length; }
	//          if (copy > left) { copy = left; }
	//          left -= copy;
	//          state.length -= copy;
	//          do {
	//            output[put++] = 0;
	//          } while (--copy);
	//          if (state.length === 0) { state.mode = LEN; }
	//          break;
	//#endif
	          }
	          if (copy > state.wnext) {
	            copy -= state.wnext;
	            from = state.wsize - copy;
	          }
	          else {
	            from = state.wnext - copy;
	          }
	          if (copy > state.length) { copy = state.length; }
	          from_source = state.window;
	        }
	        else {                              /* copy from output */
	          from_source = output;
	          from = put - state.offset;
	          copy = state.length;
	        }
	        if (copy > left) { copy = left; }
	        left -= copy;
	        state.length -= copy;
	        do {
	          output[put++] = from_source[from++];
	        } while (--copy);
	        if (state.length === 0) { state.mode = LEN; }
	        break;
	      case LIT:
	        if (left === 0) { break inf_leave; }
	        output[put++] = state.length;
	        left--;
	        state.mode = LEN;
	        break;
	      case CHECK:
	        if (state.wrap) {
	          //=== NEEDBITS(32);
	          while (bits < 32) {
	            if (have === 0) { break inf_leave; }
	            have--;
	            // Use '|' instead of '+' to make sure that result is signed
	            hold |= input[next++] << bits;
	            bits += 8;
	          }
	          //===//
	          _out -= left;
	          strm.total_out += _out;
	          state.total += _out;
	          if (_out) {
	            strm.adler = state.check =
	                /*UPDATE(state.check, put - _out, _out);*/
	                (state.flags ? crc32(state.check, output, _out, put - _out) : adler32(state.check, output, _out, put - _out));
	
	          }
	          _out = left;
	          // NB: crc32 stored as signed 32-bit int, zswap32 returns signed too
	          if ((state.flags ? hold : zswap32(hold)) !== state.check) {
	            strm.msg = 'incorrect data check';
	            state.mode = BAD;
	            break;
	          }
	          //=== INITBITS();
	          hold = 0;
	          bits = 0;
	          //===//
	          //Tracev((stderr, "inflate:   check matches trailer\n"));
	        }
	        state.mode = LENGTH;
	        /* falls through */
	      case LENGTH:
	        if (state.wrap && state.flags) {
	          //=== NEEDBITS(32);
	          while (bits < 32) {
	            if (have === 0) { break inf_leave; }
	            have--;
	            hold += input[next++] << bits;
	            bits += 8;
	          }
	          //===//
	          if (hold !== (state.total & 0xffffffff)) {
	            strm.msg = 'incorrect length check';
	            state.mode = BAD;
	            break;
	          }
	          //=== INITBITS();
	          hold = 0;
	          bits = 0;
	          //===//
	          //Tracev((stderr, "inflate:   length matches trailer\n"));
	        }
	        state.mode = DONE;
	        /* falls through */
	      case DONE:
	        ret = Z_STREAM_END;
	        break inf_leave;
	      case BAD:
	        ret = Z_DATA_ERROR;
	        break inf_leave;
	      case MEM:
	        return Z_MEM_ERROR;
	      case SYNC:
	        /* falls through */
	      default:
	        return Z_STREAM_ERROR;
	    }
	  }
	
	  // inf_leave <- here is real place for "goto inf_leave", emulated via "break inf_leave"
	
	  /*
	     Return from inflate(), updating the total counts and the check value.
	     If there was no progress during the inflate() call, return a buffer
	     error.  Call updatewindow() to create and/or update the window state.
	     Note: a memory error from inflate() is non-recoverable.
	   */
	
	  //--- RESTORE() ---
	  strm.next_out = put;
	  strm.avail_out = left;
	  strm.next_in = next;
	  strm.avail_in = have;
	  state.hold = hold;
	  state.bits = bits;
	  //---
	
	  if (state.wsize || (_out !== strm.avail_out && state.mode < BAD &&
	                      (state.mode < CHECK || flush !== Z_FINISH))) {
	    if (updatewindow(strm, strm.output, strm.next_out, _out - strm.avail_out)) {
	      state.mode = MEM;
	      return Z_MEM_ERROR;
	    }
	  }
	  _in -= strm.avail_in;
	  _out -= strm.avail_out;
	  strm.total_in += _in;
	  strm.total_out += _out;
	  state.total += _out;
	  if (state.wrap && _out) {
	    strm.adler = state.check = /*UPDATE(state.check, strm.next_out - _out, _out);*/
	      (state.flags ? crc32(state.check, output, _out, strm.next_out - _out) : adler32(state.check, output, _out, strm.next_out - _out));
	  }
	  strm.data_type = state.bits + (state.last ? 64 : 0) +
	                    (state.mode === TYPE ? 128 : 0) +
	                    (state.mode === LEN_ || state.mode === COPY_ ? 256 : 0);
	  if (((_in === 0 && _out === 0) || flush === Z_FINISH) && ret === Z_OK) {
	    ret = Z_BUF_ERROR;
	  }
	  return ret;
	}
	
	function inflateEnd(strm) {
	
	  if (!strm || !strm.state /*|| strm->zfree == (free_func)0*/) {
	    return Z_STREAM_ERROR;
	  }
	
	  var state = strm.state;
	  if (state.window) {
	    state.window = null;
	  }
	  strm.state = null;
	  return Z_OK;
	}
	
	function inflateGetHeader(strm, head) {
	  var state;
	
	  /* check state */
	  if (!strm || !strm.state) { return Z_STREAM_ERROR; }
	  state = strm.state;
	  if ((state.wrap & 2) === 0) { return Z_STREAM_ERROR; }
	
	  /* save header structure */
	  state.head = head;
	  head.done = false;
	  return Z_OK;
	}
	
	function inflateSetDictionary(strm, dictionary) {
	  var dictLength = dictionary.length;
	
	  var state;
	  var dictid;
	  var ret;
	
	  /* check state */
	  if (!strm /* == Z_NULL */ || !strm.state /* == Z_NULL */) { return Z_STREAM_ERROR; }
	  state = strm.state;
	
	  if (state.wrap !== 0 && state.mode !== DICT) {
	    return Z_STREAM_ERROR;
	  }
	
	  /* check for correct dictionary identifier */
	  if (state.mode === DICT) {
	    dictid = 1; /* adler32(0, null, 0)*/
	    /* dictid = adler32(dictid, dictionary, dictLength); */
	    dictid = adler32(dictid, dictionary, dictLength, 0);
	    if (dictid !== state.check) {
	      return Z_DATA_ERROR;
	    }
	  }
	  /* copy dictionary to window using updatewindow(), which will amend the
	   existing dictionary if appropriate */
	  ret = updatewindow(strm, dictionary, dictLength, dictLength);
	  if (ret) {
	    state.mode = MEM;
	    return Z_MEM_ERROR;
	  }
	  state.havedict = 1;
	  // Tracev((stderr, "inflate:   dictionary set\n"));
	  return Z_OK;
	}
	
	exports.inflateReset = inflateReset;
	exports.inflateReset2 = inflateReset2;
	exports.inflateResetKeep = inflateResetKeep;
	exports.inflateInit = inflateInit;
	exports.inflateInit2 = inflateInit2;
	exports.inflate = inflate;
	exports.inflateEnd = inflateEnd;
	exports.inflateGetHeader = inflateGetHeader;
	exports.inflateSetDictionary = inflateSetDictionary;
	exports.inflateInfo = 'pako inflate (from Nodeca project)';
	
	/* Not implemented
	exports.inflateCopy = inflateCopy;
	exports.inflateGetDictionary = inflateGetDictionary;
	exports.inflateMark = inflateMark;
	exports.inflatePrime = inflatePrime;
	exports.inflateSync = inflateSync;
	exports.inflateSyncPoint = inflateSyncPoint;
	exports.inflateUndermine = inflateUndermine;
	*/


/***/ }),
/* 1093 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	// (C) 1995-2013 Jean-loup Gailly and Mark Adler
	// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
	//
	// This software is provided 'as-is', without any express or implied
	// warranty. In no event will the authors be held liable for any damages
	// arising from the use of this software.
	//
	// Permission is granted to anyone to use this software for any purpose,
	// including commercial applications, and to alter it and redistribute it
	// freely, subject to the following restrictions:
	//
	// 1. The origin of this software must not be misrepresented; you must not
	//   claim that you wrote the original software. If you use this software
	//   in a product, an acknowledgment in the product documentation would be
	//   appreciated but is not required.
	// 2. Altered source versions must be plainly marked as such, and must not be
	//   misrepresented as being the original software.
	// 3. This notice may not be removed or altered from any source distribution.
	
	var utils = __webpack_require__(80);
	
	var MAXBITS = 15;
	var ENOUGH_LENS = 852;
	var ENOUGH_DISTS = 592;
	//var ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS);
	
	var CODES = 0;
	var LENS = 1;
	var DISTS = 2;
	
	var lbase = [ /* Length codes 257..285 base */
	  3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,
	  35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0
	];
	
	var lext = [ /* Length codes 257..285 extra */
	  16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18,
	  19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78
	];
	
	var dbase = [ /* Distance codes 0..29 base */
	  1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,
	  257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,
	  8193, 12289, 16385, 24577, 0, 0
	];
	
	var dext = [ /* Distance codes 0..29 extra */
	  16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22,
	  23, 23, 24, 24, 25, 25, 26, 26, 27, 27,
	  28, 28, 29, 29, 64, 64
	];
	
	module.exports = function inflate_table(type, lens, lens_index, codes, table, table_index, work, opts)
	{
	  var bits = opts.bits;
	      //here = opts.here; /* table entry for duplication */
	
	  var len = 0;               /* a code's length in bits */
	  var sym = 0;               /* index of code symbols */
	  var min = 0, max = 0;          /* minimum and maximum code lengths */
	  var root = 0;              /* number of index bits for root table */
	  var curr = 0;              /* number of index bits for current table */
	  var drop = 0;              /* code bits to drop for sub-table */
	  var left = 0;                   /* number of prefix codes available */
	  var used = 0;              /* code entries in table used */
	  var huff = 0;              /* Huffman code */
	  var incr;              /* for incrementing code, index */
	  var fill;              /* index for replicating entries */
	  var low;               /* low bits for current root entry */
	  var mask;              /* mask for low root bits */
	  var next;             /* next available space in table */
	  var base = null;     /* base value table to use */
	  var base_index = 0;
	//  var shoextra;    /* extra bits table to use */
	  var end;                    /* use base and extra for symbol > end */
	  var count = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1];    /* number of codes of each length */
	  var offs = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1];     /* offsets in table for each length */
	  var extra = null;
	  var extra_index = 0;
	
	  var here_bits, here_op, here_val;
	
	  /*
	   Process a set of code lengths to create a canonical Huffman code.  The
	   code lengths are lens[0..codes-1].  Each length corresponds to the
	   symbols 0..codes-1.  The Huffman code is generated by first sorting the
	   symbols by length from short to long, and retaining the symbol order
	   for codes with equal lengths.  Then the code starts with all zero bits
	   for the first code of the shortest length, and the codes are integer
	   increments for the same length, and zeros are appended as the length
	   increases.  For the deflate format, these bits are stored backwards
	   from their more natural integer increment ordering, and so when the
	   decoding tables are built in the large loop below, the integer codes
	   are incremented backwards.
	
	   This routine assumes, but does not check, that all of the entries in
	   lens[] are in the range 0..MAXBITS.  The caller must assure this.
	   1..MAXBITS is interpreted as that code length.  zero means that that
	   symbol does not occur in this code.
	
	   The codes are sorted by computing a count of codes for each length,
	   creating from that a table of starting indices for each length in the
	   sorted table, and then entering the symbols in order in the sorted
	   table.  The sorted table is work[], with that space being provided by
	   the caller.
	
	   The length counts are used for other purposes as well, i.e. finding
	   the minimum and maximum length codes, determining if there are any
	   codes at all, checking for a valid set of lengths, and looking ahead
	   at length counts to determine sub-table sizes when building the
	   decoding tables.
	   */
	
	  /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */
	  for (len = 0; len <= MAXBITS; len++) {
	    count[len] = 0;
	  }
	  for (sym = 0; sym < codes; sym++) {
	    count[lens[lens_index + sym]]++;
	  }
	
	  /* bound code lengths, force root to be within code lengths */
	  root = bits;
	  for (max = MAXBITS; max >= 1; max--) {
	    if (count[max] !== 0) { break; }
	  }
	  if (root > max) {
	    root = max;
	  }
	  if (max === 0) {                     /* no symbols to code at all */
	    //table.op[opts.table_index] = 64;  //here.op = (var char)64;    /* invalid code marker */
	    //table.bits[opts.table_index] = 1;   //here.bits = (var char)1;
	    //table.val[opts.table_index++] = 0;   //here.val = (var short)0;
	    table[table_index++] = (1 << 24) | (64 << 16) | 0;
	
	
	    //table.op[opts.table_index] = 64;
	    //table.bits[opts.table_index] = 1;
	    //table.val[opts.table_index++] = 0;
	    table[table_index++] = (1 << 24) | (64 << 16) | 0;
	
	    opts.bits = 1;
	    return 0;     /* no symbols, but wait for decoding to report error */
	  }
	  for (min = 1; min < max; min++) {
	    if (count[min] !== 0) { break; }
	  }
	  if (root < min) {
	    root = min;
	  }
	
	  /* check for an over-subscribed or incomplete set of lengths */
	  left = 1;
	  for (len = 1; len <= MAXBITS; len++) {
	    left <<= 1;
	    left -= count[len];
	    if (left < 0) {
	      return -1;
	    }        /* over-subscribed */
	  }
	  if (left > 0 && (type === CODES || max !== 1)) {
	    return -1;                      /* incomplete set */
	  }
	
	  /* generate offsets into symbol table for each length for sorting */
	  offs[1] = 0;
	  for (len = 1; len < MAXBITS; len++) {
	    offs[len + 1] = offs[len] + count[len];
	  }
	
	  /* sort symbols by length, by symbol order within each length */
	  for (sym = 0; sym < codes; sym++) {
	    if (lens[lens_index + sym] !== 0) {
	      work[offs[lens[lens_index + sym]]++] = sym;
	    }
	  }
	
	  /*
	   Create and fill in decoding tables.  In this loop, the table being
	   filled is at next and has curr index bits.  The code being used is huff
	   with length len.  That code is converted to an index by dropping drop
	   bits off of the bottom.  For codes where len is less than drop + curr,
	   those top drop + curr - len bits are incremented through all values to
	   fill the table with replicated entries.
	
	   root is the number of index bits for the root table.  When len exceeds
	   root, sub-tables are created pointed to by the root entry with an index
	   of the low root bits of huff.  This is saved in low to check for when a
	   new sub-table should be started.  drop is zero when the root table is
	   being filled, and drop is root when sub-tables are being filled.
	
	   When a new sub-table is needed, it is necessary to look ahead in the
	   code lengths to determine what size sub-table is needed.  The length
	   counts are used for this, and so count[] is decremented as codes are
	   entered in the tables.
	
	   used keeps track of how many table entries have been allocated from the
	   provided *table space.  It is checked for LENS and DIST tables against
	   the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in
	   the initial root table size constants.  See the comments in inftrees.h
	   for more information.
	
	   sym increments through all symbols, and the loop terminates when
	   all codes of length max, i.e. all codes, have been processed.  This
	   routine permits incomplete codes, so another loop after this one fills
	   in the rest of the decoding tables with invalid code markers.
	   */
	
	  /* set up for code type */
	  // poor man optimization - use if-else instead of switch,
	  // to avoid deopts in old v8
	  if (type === CODES) {
	    base = extra = work;    /* dummy value--not used */
	    end = 19;
	
	  } else if (type === LENS) {
	    base = lbase;
	    base_index -= 257;
	    extra = lext;
	    extra_index -= 257;
	    end = 256;
	
	  } else {                    /* DISTS */
	    base = dbase;
	    extra = dext;
	    end = -1;
	  }
	
	  /* initialize opts for loop */
	  huff = 0;                   /* starting code */
	  sym = 0;                    /* starting code symbol */
	  len = min;                  /* starting code length */
	  next = table_index;              /* current table to fill in */
	  curr = root;                /* current table index bits */
	  drop = 0;                   /* current bits to drop from code for index */
	  low = -1;                   /* trigger new sub-table when len > root */
	  used = 1 << root;          /* use root table entries */
	  mask = used - 1;            /* mask for comparing low */
	
	  /* check available table space */
	  if ((type === LENS && used > ENOUGH_LENS) ||
	    (type === DISTS && used > ENOUGH_DISTS)) {
	    return 1;
	  }
	
	  /* process all codes and make table entries */
	  for (;;) {
	    /* create table entry */
	    here_bits = len - drop;
	    if (work[sym] < end) {
	      here_op = 0;
	      here_val = work[sym];
	    }
	    else if (work[sym] > end) {
	      here_op = extra[extra_index + work[sym]];
	      here_val = base[base_index + work[sym]];
	    }
	    else {
	      here_op = 32 + 64;         /* end of block */
	      here_val = 0;
	    }
	
	    /* replicate for those indices with low len bits equal to huff */
	    incr = 1 << (len - drop);
	    fill = 1 << curr;
	    min = fill;                 /* save offset to next table */
	    do {
	      fill -= incr;
	      table[next + (huff >> drop) + fill] = (here_bits << 24) | (here_op << 16) | here_val |0;
	    } while (fill !== 0);
	
	    /* backwards increment the len-bit code huff */
	    incr = 1 << (len - 1);
	    while (huff & incr) {
	      incr >>= 1;
	    }
	    if (incr !== 0) {
	      huff &= incr - 1;
	      huff += incr;
	    } else {
	      huff = 0;
	    }
	
	    /* go to next symbol, update count, len */
	    sym++;
	    if (--count[len] === 0) {
	      if (len === max) { break; }
	      len = lens[lens_index + work[sym]];
	    }
	
	    /* create new sub-table if needed */
	    if (len > root && (huff & mask) !== low) {
	      /* if first time, transition to sub-tables */
	      if (drop === 0) {
	        drop = root;
	      }
	
	      /* increment past last table */
	      next += min;            /* here min is 1 << curr */
	
	      /* determine length of next table */
	      curr = len - drop;
	      left = 1 << curr;
	      while (curr + drop < max) {
	        left -= count[curr + drop];
	        if (left <= 0) { break; }
	        curr++;
	        left <<= 1;
	      }
	
	      /* check for enough space */
	      used += 1 << curr;
	      if ((type === LENS && used > ENOUGH_LENS) ||
	        (type === DISTS && used > ENOUGH_DISTS)) {
	        return 1;
	      }
	
	      /* point entry in root table to sub-table */
	      low = huff & mask;
	      /*table.op[low] = curr;
	      table.bits[low] = root;
	      table.val[low] = next - opts.table_index;*/
	      table[low] = (root << 24) | (curr << 16) | (next - table_index) |0;
	    }
	  }
	
	  /* fill in remaining table entry if code is incomplete (guaranteed to have
	   at most one remaining entry, since if the code is incomplete, the
	   maximum code length that was allowed to get this far is one bit) */
	  if (huff !== 0) {
	    //table.op[next + huff] = 64;            /* invalid code marker */
	    //table.bits[next + huff] = len - drop;
	    //table.val[next + huff] = 0;
	    table[next + huff] = ((len - drop) << 24) | (64 << 16) |0;
	  }
	
	  /* set return parameters */
	  //opts.table_index += used;
	  opts.bits = root;
	  return 0;
	};


/***/ }),
/* 1094 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	// (C) 1995-2013 Jean-loup Gailly and Mark Adler
	// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
	//
	// This software is provided 'as-is', without any express or implied
	// warranty. In no event will the authors be held liable for any damages
	// arising from the use of this software.
	//
	// Permission is granted to anyone to use this software for any purpose,
	// including commercial applications, and to alter it and redistribute it
	// freely, subject to the following restrictions:
	//
	// 1. The origin of this software must not be misrepresented; you must not
	//   claim that you wrote the original software. If you use this software
	//   in a product, an acknowledgment in the product documentation would be
	//   appreciated but is not required.
	// 2. Altered source versions must be plainly marked as such, and must not be
	//   misrepresented as being the original software.
	// 3. This notice may not be removed or altered from any source distribution.
	
	/* eslint-disable space-unary-ops */
	
	var utils = __webpack_require__(80);
	
	/* Public constants ==========================================================*/
	/* ===========================================================================*/
	
	
	//var Z_FILTERED          = 1;
	//var Z_HUFFMAN_ONLY      = 2;
	//var Z_RLE               = 3;
	var Z_FIXED               = 4;
	//var Z_DEFAULT_STRATEGY  = 0;
	
	/* Possible values of the data_type field (though see inflate()) */
	var Z_BINARY              = 0;
	var Z_TEXT                = 1;
	//var Z_ASCII             = 1; // = Z_TEXT
	var Z_UNKNOWN             = 2;
	
	/*============================================================================*/
	
	
	function zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } }
	
	// From zutil.h
	
	var STORED_BLOCK = 0;
	var STATIC_TREES = 1;
	var DYN_TREES    = 2;
	/* The three kinds of block type */
	
	var MIN_MATCH    = 3;
	var MAX_MATCH    = 258;
	/* The minimum and maximum match lengths */
	
	// From deflate.h
	/* ===========================================================================
	 * Internal compression state.
	 */
	
	var LENGTH_CODES  = 29;
	/* number of length codes, not counting the special END_BLOCK code */
	
	var LITERALS      = 256;
	/* number of literal bytes 0..255 */
	
	var L_CODES       = LITERALS + 1 + LENGTH_CODES;
	/* number of Literal or Length codes, including the END_BLOCK code */
	
	var D_CODES       = 30;
	/* number of distance codes */
	
	var BL_CODES      = 19;
	/* number of codes used to transfer the bit lengths */
	
	var HEAP_SIZE     = 2 * L_CODES + 1;
	/* maximum heap size */
	
	var MAX_BITS      = 15;
	/* All codes must not exceed MAX_BITS bits */
	
	var Buf_size      = 16;
	/* size of bit buffer in bi_buf */
	
	
	/* ===========================================================================
	 * Constants
	 */
	
	var MAX_BL_BITS = 7;
	/* Bit length codes must not exceed MAX_BL_BITS bits */
	
	var END_BLOCK   = 256;
	/* end of block literal code */
	
	var REP_3_6     = 16;
	/* repeat previous bit length 3-6 times (2 bits of repeat count) */
	
	var REPZ_3_10   = 17;
	/* repeat a zero length 3-10 times  (3 bits of repeat count) */
	
	var REPZ_11_138 = 18;
	/* repeat a zero length 11-138 times  (7 bits of repeat count) */
	
	/* eslint-disable comma-spacing,array-bracket-spacing */
	var extra_lbits =   /* extra bits for each length code */
	  [0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0];
	
	var extra_dbits =   /* extra bits for each distance code */
	  [0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13];
	
	var extra_blbits =  /* extra bits for each bit length code */
	  [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7];
	
	var bl_order =
	  [16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];
	/* eslint-enable comma-spacing,array-bracket-spacing */
	
	/* The lengths of the bit length codes are sent in order of decreasing
	 * probability, to avoid transmitting the lengths for unused bit length codes.
	 */
	
	/* ===========================================================================
	 * Local data. These are initialized only once.
	 */
	
	// We pre-fill arrays with 0 to avoid uninitialized gaps
	
	var DIST_CODE_LEN = 512; /* see definition of array dist_code below */
	
	// !!!! Use flat array instead of structure, Freq = i*2, Len = i*2+1
	var static_ltree  = new Array((L_CODES + 2) * 2);
	zero(static_ltree);
	/* The static literal tree. Since the bit lengths are imposed, there is no
	 * need for the L_CODES extra codes used during heap construction. However
	 * The codes 286 and 287 are needed to build a canonical tree (see _tr_init
	 * below).
	 */
	
	var static_dtree  = new Array(D_CODES * 2);
	zero(static_dtree);
	/* The static distance tree. (Actually a trivial tree since all codes use
	 * 5 bits.)
	 */
	
	var _dist_code    = new Array(DIST_CODE_LEN);
	zero(_dist_code);
	/* Distance codes. The first 256 values correspond to the distances
	 * 3 .. 258, the last 256 values correspond to the top 8 bits of
	 * the 15 bit distances.
	 */
	
	var _length_code  = new Array(MAX_MATCH - MIN_MATCH + 1);
	zero(_length_code);
	/* length code for each normalized match length (0 == MIN_MATCH) */
	
	var base_length   = new Array(LENGTH_CODES);
	zero(base_length);
	/* First normalized length for each code (0 = MIN_MATCH) */
	
	var base_dist     = new Array(D_CODES);
	zero(base_dist);
	/* First normalized distance for each code (0 = distance of 1) */
	
	
	function StaticTreeDesc(static_tree, extra_bits, extra_base, elems, max_length) {
	
	  this.static_tree  = static_tree;  /* static tree or NULL */
	  this.extra_bits   = extra_bits;   /* extra bits for each code or NULL */
	  this.extra_base   = extra_base;   /* base index for extra_bits */
	  this.elems        = elems;        /* max number of elements in the tree */
	  this.max_length   = max_length;   /* max bit length for the codes */
	
	  // show if `static_tree` has data or dummy - needed for monomorphic objects
	  this.has_stree    = static_tree && static_tree.length;
	}
	
	
	var static_l_desc;
	var static_d_desc;
	var static_bl_desc;
	
	
	function TreeDesc(dyn_tree, stat_desc) {
	  this.dyn_tree = dyn_tree;     /* the dynamic tree */
	  this.max_code = 0;            /* largest code with non zero frequency */
	  this.stat_desc = stat_desc;   /* the corresponding static tree */
	}
	
	
	
	function d_code(dist) {
	  return dist < 256 ? _dist_code[dist] : _dist_code[256 + (dist >>> 7)];
	}
	
	
	/* ===========================================================================
	 * Output a short LSB first on the stream.
	 * IN assertion: there is enough room in pendingBuf.
	 */
	function put_short(s, w) {
	//    put_byte(s, (uch)((w) & 0xff));
	//    put_byte(s, (uch)((ush)(w) >> 8));
	  s.pending_buf[s.pending++] = (w) & 0xff;
	  s.pending_buf[s.pending++] = (w >>> 8) & 0xff;
	}
	
	
	/* ===========================================================================
	 * Send a value on a given number of bits.
	 * IN assertion: length <= 16 and value fits in length bits.
	 */
	function send_bits(s, value, length) {
	  if (s.bi_valid > (Buf_size - length)) {
	    s.bi_buf |= (value << s.bi_valid) & 0xffff;
	    put_short(s, s.bi_buf);
	    s.bi_buf = value >> (Buf_size - s.bi_valid);
	    s.bi_valid += length - Buf_size;
	  } else {
	    s.bi_buf |= (value << s.bi_valid) & 0xffff;
	    s.bi_valid += length;
	  }
	}
	
	
	function send_code(s, c, tree) {
	  send_bits(s, tree[c * 2]/*.Code*/, tree[c * 2 + 1]/*.Len*/);
	}
	
	
	/* ===========================================================================
	 * Reverse the first len bits of a code, using straightforward code (a faster
	 * method would use a table)
	 * IN assertion: 1 <= len <= 15
	 */
	function bi_reverse(code, len) {
	  var res = 0;
	  do {
	    res |= code & 1;
	    code >>>= 1;
	    res <<= 1;
	  } while (--len > 0);
	  return res >>> 1;
	}
	
	
	/* ===========================================================================
	 * Flush the bit buffer, keeping at most 7 bits in it.
	 */
	function bi_flush(s) {
	  if (s.bi_valid === 16) {
	    put_short(s, s.bi_buf);
	    s.bi_buf = 0;
	    s.bi_valid = 0;
	
	  } else if (s.bi_valid >= 8) {
	    s.pending_buf[s.pending++] = s.bi_buf & 0xff;
	    s.bi_buf >>= 8;
	    s.bi_valid -= 8;
	  }
	}
	
	
	/* ===========================================================================
	 * Compute the optimal bit lengths for a tree and update the total bit length
	 * for the current block.
	 * IN assertion: the fields freq and dad are set, heap[heap_max] and
	 *    above are the tree nodes sorted by increasing frequency.
	 * OUT assertions: the field len is set to the optimal bit length, the
	 *     array bl_count contains the frequencies for each bit length.
	 *     The length opt_len is updated; static_len is also updated if stree is
	 *     not null.
	 */
	function gen_bitlen(s, desc)
	//    deflate_state *s;
	//    tree_desc *desc;    /* the tree descriptor */
	{
	  var tree            = desc.dyn_tree;
	  var max_code        = desc.max_code;
	  var stree           = desc.stat_desc.static_tree;
	  var has_stree       = desc.stat_desc.has_stree;
	  var extra           = desc.stat_desc.extra_bits;
	  var base            = desc.stat_desc.extra_base;
	  var max_length      = desc.stat_desc.max_length;
	  var h;              /* heap index */
	  var n, m;           /* iterate over the tree elements */
	  var bits;           /* bit length */
	  var xbits;          /* extra bits */
	  var f;              /* frequency */
	  var overflow = 0;   /* number of elements with bit length too large */
	
	  for (bits = 0; bits <= MAX_BITS; bits++) {
	    s.bl_count[bits] = 0;
	  }
	
	  /* In a first pass, compute the optimal bit lengths (which may
	   * overflow in the case of the bit length tree).
	   */
	  tree[s.heap[s.heap_max] * 2 + 1]/*.Len*/ = 0; /* root of the heap */
	
	  for (h = s.heap_max + 1; h < HEAP_SIZE; h++) {
	    n = s.heap[h];
	    bits = tree[tree[n * 2 + 1]/*.Dad*/ * 2 + 1]/*.Len*/ + 1;
	    if (bits > max_length) {
	      bits = max_length;
	      overflow++;
	    }
	    tree[n * 2 + 1]/*.Len*/ = bits;
	    /* We overwrite tree[n].Dad which is no longer needed */
	
	    if (n > max_code) { continue; } /* not a leaf node */
	
	    s.bl_count[bits]++;
	    xbits = 0;
	    if (n >= base) {
	      xbits = extra[n - base];
	    }
	    f = tree[n * 2]/*.Freq*/;
	    s.opt_len += f * (bits + xbits);
	    if (has_stree) {
	      s.static_len += f * (stree[n * 2 + 1]/*.Len*/ + xbits);
	    }
	  }
	  if (overflow === 0) { return; }
	
	  // Trace((stderr,"\nbit length overflow\n"));
	  /* This happens for example on obj2 and pic of the Calgary corpus */
	
	  /* Find the first bit length which could increase: */
	  do {
	    bits = max_length - 1;
	    while (s.bl_count[bits] === 0) { bits--; }
	    s.bl_count[bits]--;      /* move one leaf down the tree */
	    s.bl_count[bits + 1] += 2; /* move one overflow item as its brother */
	    s.bl_count[max_length]--;
	    /* The brother of the overflow item also moves one step up,
	     * but this does not affect bl_count[max_length]
	     */
	    overflow -= 2;
	  } while (overflow > 0);
	
	  /* Now recompute all bit lengths, scanning in increasing frequency.
	   * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all
	   * lengths instead of fixing only the wrong ones. This idea is taken
	   * from 'ar' written by Haruhiko Okumura.)
	   */
	  for (bits = max_length; bits !== 0; bits--) {
	    n = s.bl_count[bits];
	    while (n !== 0) {
	      m = s.heap[--h];
	      if (m > max_code) { continue; }
	      if (tree[m * 2 + 1]/*.Len*/ !== bits) {
	        // Trace((stderr,"code %d bits %d->%d\n", m, tree[m].Len, bits));
	        s.opt_len += (bits - tree[m * 2 + 1]/*.Len*/) * tree[m * 2]/*.Freq*/;
	        tree[m * 2 + 1]/*.Len*/ = bits;
	      }
	      n--;
	    }
	  }
	}
	
	
	/* ===========================================================================
	 * Generate the codes for a given tree and bit counts (which need not be
	 * optimal).
	 * IN assertion: the array bl_count contains the bit length statistics for
	 * the given tree and the field len is set for all tree elements.
	 * OUT assertion: the field code is set for all tree elements of non
	 *     zero code length.
	 */
	function gen_codes(tree, max_code, bl_count)
	//    ct_data *tree;             /* the tree to decorate */
	//    int max_code;              /* largest code with non zero frequency */
	//    ushf *bl_count;            /* number of codes at each bit length */
	{
	  var next_code = new Array(MAX_BITS + 1); /* next code value for each bit length */
	  var code = 0;              /* running code value */
	  var bits;                  /* bit index */
	  var n;                     /* code index */
	
	  /* The distribution counts are first used to generate the code values
	   * without bit reversal.
	   */
	  for (bits = 1; bits <= MAX_BITS; bits++) {
	    next_code[bits] = code = (code + bl_count[bits - 1]) << 1;
	  }
	  /* Check that the bit counts in bl_count are consistent. The last code
	   * must be all ones.
	   */
	  //Assert (code + bl_count[MAX_BITS]-1 == (1<<MAX_BITS)-1,
	  //        "inconsistent bit counts");
	  //Tracev((stderr,"\ngen_codes: max_code %d ", max_code));
	
	  for (n = 0;  n <= max_code; n++) {
	    var len = tree[n * 2 + 1]/*.Len*/;
	    if (len === 0) { continue; }
	    /* Now reverse the bits */
	    tree[n * 2]/*.Code*/ = bi_reverse(next_code[len]++, len);
	
	    //Tracecv(tree != static_ltree, (stderr,"\nn %3d %c l %2d c %4x (%x) ",
	    //     n, (isgraph(n) ? n : ' '), len, tree[n].Code, next_code[len]-1));
	  }
	}
	
	
	/* ===========================================================================
	 * Initialize the various 'constant' tables.
	 */
	function tr_static_init() {
	  var n;        /* iterates over tree elements */
	  var bits;     /* bit counter */
	  var length;   /* length value */
	  var code;     /* code value */
	  var dist;     /* distance index */
	  var bl_count = new Array(MAX_BITS + 1);
	  /* number of codes at each bit length for an optimal tree */
	
	  // do check in _tr_init()
	  //if (static_init_done) return;
	
	  /* For some embedded targets, global variables are not initialized: */
	/*#ifdef NO_INIT_GLOBAL_POINTERS
	  static_l_desc.static_tree = static_ltree;
	  static_l_desc.extra_bits = extra_lbits;
	  static_d_desc.static_tree = static_dtree;
	  static_d_desc.extra_bits = extra_dbits;
	  static_bl_desc.extra_bits = extra_blbits;
	#endif*/
	
	  /* Initialize the mapping length (0..255) -> length code (0..28) */
	  length = 0;
	  for (code = 0; code < LENGTH_CODES - 1; code++) {
	    base_length[code] = length;
	    for (n = 0; n < (1 << extra_lbits[code]); n++) {
	      _length_code[length++] = code;
	    }
	  }
	  //Assert (length == 256, "tr_static_init: length != 256");
	  /* Note that the length 255 (match length 258) can be represented
	   * in two different ways: code 284 + 5 bits or code 285, so we
	   * overwrite length_code[255] to use the best encoding:
	   */
	  _length_code[length - 1] = code;
	
	  /* Initialize the mapping dist (0..32K) -> dist code (0..29) */
	  dist = 0;
	  for (code = 0; code < 16; code++) {
	    base_dist[code] = dist;
	    for (n = 0; n < (1 << extra_dbits[code]); n++) {
	      _dist_code[dist++] = code;
	    }
	  }
	  //Assert (dist == 256, "tr_static_init: dist != 256");
	  dist >>= 7; /* from now on, all distances are divided by 128 */
	  for (; code < D_CODES; code++) {
	    base_dist[code] = dist << 7;
	    for (n = 0; n < (1 << (extra_dbits[code] - 7)); n++) {
	      _dist_code[256 + dist++] = code;
	    }
	  }
	  //Assert (dist == 256, "tr_static_init: 256+dist != 512");
	
	  /* Construct the codes of the static literal tree */
	  for (bits = 0; bits <= MAX_BITS; bits++) {
	    bl_count[bits] = 0;
	  }
	
	  n = 0;
	  while (n <= 143) {
	    static_ltree[n * 2 + 1]/*.Len*/ = 8;
	    n++;
	    bl_count[8]++;
	  }
	  while (n <= 255) {
	    static_ltree[n * 2 + 1]/*.Len*/ = 9;
	    n++;
	    bl_count[9]++;
	  }
	  while (n <= 279) {
	    static_ltree[n * 2 + 1]/*.Len*/ = 7;
	    n++;
	    bl_count[7]++;
	  }
	  while (n <= 287) {
	    static_ltree[n * 2 + 1]/*.Len*/ = 8;
	    n++;
	    bl_count[8]++;
	  }
	  /* Codes 286 and 287 do not exist, but we must include them in the
	   * tree construction to get a canonical Huffman tree (longest code
	   * all ones)
	   */
	  gen_codes(static_ltree, L_CODES + 1, bl_count);
	
	  /* The static distance tree is trivial: */
	  for (n = 0; n < D_CODES; n++) {
	    static_dtree[n * 2 + 1]/*.Len*/ = 5;
	    static_dtree[n * 2]/*.Code*/ = bi_reverse(n, 5);
	  }
	
	  // Now data ready and we can init static trees
	  static_l_desc = new StaticTreeDesc(static_ltree, extra_lbits, LITERALS + 1, L_CODES, MAX_BITS);
	  static_d_desc = new StaticTreeDesc(static_dtree, extra_dbits, 0,          D_CODES, MAX_BITS);
	  static_bl_desc = new StaticTreeDesc(new Array(0), extra_blbits, 0,         BL_CODES, MAX_BL_BITS);
	
	  //static_init_done = true;
	}
	
	
	/* ===========================================================================
	 * Initialize a new block.
	 */
	function init_block(s) {
	  var n; /* iterates over tree elements */
	
	  /* Initialize the trees. */
	  for (n = 0; n < L_CODES;  n++) { s.dyn_ltree[n * 2]/*.Freq*/ = 0; }
	  for (n = 0; n < D_CODES;  n++) { s.dyn_dtree[n * 2]/*.Freq*/ = 0; }
	  for (n = 0; n < BL_CODES; n++) { s.bl_tree[n * 2]/*.Freq*/ = 0; }
	
	  s.dyn_ltree[END_BLOCK * 2]/*.Freq*/ = 1;
	  s.opt_len = s.static_len = 0;
	  s.last_lit = s.matches = 0;
	}
	
	
	/* ===========================================================================
	 * Flush the bit buffer and align the output on a byte boundary
	 */
	function bi_windup(s)
	{
	  if (s.bi_valid > 8) {
	    put_short(s, s.bi_buf);
	  } else if (s.bi_valid > 0) {
	    //put_byte(s, (Byte)s->bi_buf);
	    s.pending_buf[s.pending++] = s.bi_buf;
	  }
	  s.bi_buf = 0;
	  s.bi_valid = 0;
	}
	
	/* ===========================================================================
	 * Copy a stored block, storing first the length and its
	 * one's complement if requested.
	 */
	function copy_block(s, buf, len, header)
	//DeflateState *s;
	//charf    *buf;    /* the input data */
	//unsigned len;     /* its length */
	//int      header;  /* true if block header must be written */
	{
	  bi_windup(s);        /* align on byte boundary */
	
	  if (header) {
	    put_short(s, len);
	    put_short(s, ~len);
	  }
	//  while (len--) {
	//    put_byte(s, *buf++);
	//  }
	  utils.arraySet(s.pending_buf, s.window, buf, len, s.pending);
	  s.pending += len;
	}
	
	/* ===========================================================================
	 * Compares to subtrees, using the tree depth as tie breaker when
	 * the subtrees have equal frequency. This minimizes the worst case length.
	 */
	function smaller(tree, n, m, depth) {
	  var _n2 = n * 2;
	  var _m2 = m * 2;
	  return (tree[_n2]/*.Freq*/ < tree[_m2]/*.Freq*/ ||
	         (tree[_n2]/*.Freq*/ === tree[_m2]/*.Freq*/ && depth[n] <= depth[m]));
	}
	
	/* ===========================================================================
	 * Restore the heap property by moving down the tree starting at node k,
	 * exchanging a node with the smallest of its two sons if necessary, stopping
	 * when the heap property is re-established (each father smaller than its
	 * two sons).
	 */
	function pqdownheap(s, tree, k)
	//    deflate_state *s;
	//    ct_data *tree;  /* the tree to restore */
	//    int k;               /* node to move down */
	{
	  var v = s.heap[k];
	  var j = k << 1;  /* left son of k */
	  while (j <= s.heap_len) {
	    /* Set j to the smallest of the two sons: */
	    if (j < s.heap_len &&
	      smaller(tree, s.heap[j + 1], s.heap[j], s.depth)) {
	      j++;
	    }
	    /* Exit if v is smaller than both sons */
	    if (smaller(tree, v, s.heap[j], s.depth)) { break; }
	
	    /* Exchange v with the smallest son */
	    s.heap[k] = s.heap[j];
	    k = j;
	
	    /* And continue down the tree, setting j to the left son of k */
	    j <<= 1;
	  }
	  s.heap[k] = v;
	}
	
	
	// inlined manually
	// var SMALLEST = 1;
	
	/* ===========================================================================
	 * Send the block data compressed using the given Huffman trees
	 */
	function compress_block(s, ltree, dtree)
	//    deflate_state *s;
	//    const ct_data *ltree; /* literal tree */
	//    const ct_data *dtree; /* distance tree */
	{
	  var dist;           /* distance of matched string */
	  var lc;             /* match length or unmatched char (if dist == 0) */
	  var lx = 0;         /* running index in l_buf */
	  var code;           /* the code to send */
	  var extra;          /* number of extra bits to send */
	
	  if (s.last_lit !== 0) {
	    do {
	      dist = (s.pending_buf[s.d_buf + lx * 2] << 8) | (s.pending_buf[s.d_buf + lx * 2 + 1]);
	      lc = s.pending_buf[s.l_buf + lx];
	      lx++;
	
	      if (dist === 0) {
	        send_code(s, lc, ltree); /* send a literal byte */
	        //Tracecv(isgraph(lc), (stderr," '%c' ", lc));
	      } else {
	        /* Here, lc is the match length - MIN_MATCH */
	        code = _length_code[lc];
	        send_code(s, code + LITERALS + 1, ltree); /* send the length code */
	        extra = extra_lbits[code];
	        if (extra !== 0) {
	          lc -= base_length[code];
	          send_bits(s, lc, extra);       /* send the extra length bits */
	        }
	        dist--; /* dist is now the match distance - 1 */
	        code = d_code(dist);
	        //Assert (code < D_CODES, "bad d_code");
	
	        send_code(s, code, dtree);       /* send the distance code */
	        extra = extra_dbits[code];
	        if (extra !== 0) {
	          dist -= base_dist[code];
	          send_bits(s, dist, extra);   /* send the extra distance bits */
	        }
	      } /* literal or match pair ? */
	
	      /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */
	      //Assert((uInt)(s->pending) < s->lit_bufsize + 2*lx,
	      //       "pendingBuf overflow");
	
	    } while (lx < s.last_lit);
	  }
	
	  send_code(s, END_BLOCK, ltree);
	}
	
	
	/* ===========================================================================
	 * Construct one Huffman tree and assigns the code bit strings and lengths.
	 * Update the total bit length for the current block.
	 * IN assertion: the field freq is set for all tree elements.
	 * OUT assertions: the fields len and code are set to the optimal bit length
	 *     and corresponding code. The length opt_len is updated; static_len is
	 *     also updated if stree is not null. The field max_code is set.
	 */
	function build_tree(s, desc)
	//    deflate_state *s;
	//    tree_desc *desc; /* the tree descriptor */
	{
	  var tree     = desc.dyn_tree;
	  var stree    = desc.stat_desc.static_tree;
	  var has_stree = desc.stat_desc.has_stree;
	  var elems    = desc.stat_desc.elems;
	  var n, m;          /* iterate over heap elements */
	  var max_code = -1; /* largest code with non zero frequency */
	  var node;          /* new node being created */
	
	  /* Construct the initial heap, with least frequent element in
	   * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1].
	   * heap[0] is not used.
	   */
	  s.heap_len = 0;
	  s.heap_max = HEAP_SIZE;
	
	  for (n = 0; n < elems; n++) {
	    if (tree[n * 2]/*.Freq*/ !== 0) {
	      s.heap[++s.heap_len] = max_code = n;
	      s.depth[n] = 0;
	
	    } else {
	      tree[n * 2 + 1]/*.Len*/ = 0;
	    }
	  }
	
	  /* The pkzip format requires that at least one distance code exists,
	   * and that at least one bit should be sent even if there is only one
	   * possible code. So to avoid special checks later on we force at least
	   * two codes of non zero frequency.
	   */
	  while (s.heap_len < 2) {
	    node = s.heap[++s.heap_len] = (max_code < 2 ? ++max_code : 0);
	    tree[node * 2]/*.Freq*/ = 1;
	    s.depth[node] = 0;
	    s.opt_len--;
	
	    if (has_stree) {
	      s.static_len -= stree[node * 2 + 1]/*.Len*/;
	    }
	    /* node is 0 or 1 so it does not have extra bits */
	  }
	  desc.max_code = max_code;
	
	  /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree,
	   * establish sub-heaps of increasing lengths:
	   */
	  for (n = (s.heap_len >> 1/*int /2*/); n >= 1; n--) { pqdownheap(s, tree, n); }
	
	  /* Construct the Huffman tree by repeatedly combining the least two
	   * frequent nodes.
	   */
	  node = elems;              /* next internal node of the tree */
	  do {
	    //pqremove(s, tree, n);  /* n = node of least frequency */
	    /*** pqremove ***/
	    n = s.heap[1/*SMALLEST*/];
	    s.heap[1/*SMALLEST*/] = s.heap[s.heap_len--];
	    pqdownheap(s, tree, 1/*SMALLEST*/);
	    /***/
	
	    m = s.heap[1/*SMALLEST*/]; /* m = node of next least frequency */
	
	    s.heap[--s.heap_max] = n; /* keep the nodes sorted by frequency */
	    s.heap[--s.heap_max] = m;
	
	    /* Create a new node father of n and m */
	    tree[node * 2]/*.Freq*/ = tree[n * 2]/*.Freq*/ + tree[m * 2]/*.Freq*/;
	    s.depth[node] = (s.depth[n] >= s.depth[m] ? s.depth[n] : s.depth[m]) + 1;
	    tree[n * 2 + 1]/*.Dad*/ = tree[m * 2 + 1]/*.Dad*/ = node;
	
	    /* and insert the new node in the heap */
	    s.heap[1/*SMALLEST*/] = node++;
	    pqdownheap(s, tree, 1/*SMALLEST*/);
	
	  } while (s.heap_len >= 2);
	
	  s.heap[--s.heap_max] = s.heap[1/*SMALLEST*/];
	
	  /* At this point, the fields freq and dad are set. We can now
	   * generate the bit lengths.
	   */
	  gen_bitlen(s, desc);
	
	  /* The field len is now set, we can generate the bit codes */
	  gen_codes(tree, max_code, s.bl_count);
	}
	
	
	/* ===========================================================================
	 * Scan a literal or distance tree to determine the frequencies of the codes
	 * in the bit length tree.
	 */
	function scan_tree(s, tree, max_code)
	//    deflate_state *s;
	//    ct_data *tree;   /* the tree to be scanned */
	//    int max_code;    /* and its largest code of non zero frequency */
	{
	  var n;                     /* iterates over all tree elements */
	  var prevlen = -1;          /* last emitted length */
	  var curlen;                /* length of current code */
	
	  var nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */
	
	  var count = 0;             /* repeat count of the current code */
	  var max_count = 7;         /* max repeat count */
	  var min_count = 4;         /* min repeat count */
	
	  if (nextlen === 0) {
	    max_count = 138;
	    min_count = 3;
	  }
	  tree[(max_code + 1) * 2 + 1]/*.Len*/ = 0xffff; /* guard */
	
	  for (n = 0; n <= max_code; n++) {
	    curlen = nextlen;
	    nextlen = tree[(n + 1) * 2 + 1]/*.Len*/;
	
	    if (++count < max_count && curlen === nextlen) {
	      continue;
	
	    } else if (count < min_count) {
	      s.bl_tree[curlen * 2]/*.Freq*/ += count;
	
	    } else if (curlen !== 0) {
	
	      if (curlen !== prevlen) { s.bl_tree[curlen * 2]/*.Freq*/++; }
	      s.bl_tree[REP_3_6 * 2]/*.Freq*/++;
	
	    } else if (count <= 10) {
	      s.bl_tree[REPZ_3_10 * 2]/*.Freq*/++;
	
	    } else {
	      s.bl_tree[REPZ_11_138 * 2]/*.Freq*/++;
	    }
	
	    count = 0;
	    prevlen = curlen;
	
	    if (nextlen === 0) {
	      max_count = 138;
	      min_count = 3;
	
	    } else if (curlen === nextlen) {
	      max_count = 6;
	      min_count = 3;
	
	    } else {
	      max_count = 7;
	      min_count = 4;
	    }
	  }
	}
	
	
	/* ===========================================================================
	 * Send a literal or distance tree in compressed form, using the codes in
	 * bl_tree.
	 */
	function send_tree(s, tree, max_code)
	//    deflate_state *s;
	//    ct_data *tree; /* the tree to be scanned */
	//    int max_code;       /* and its largest code of non zero frequency */
	{
	  var n;                     /* iterates over all tree elements */
	  var prevlen = -1;          /* last emitted length */
	  var curlen;                /* length of current code */
	
	  var nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */
	
	  var count = 0;             /* repeat count of the current code */
	  var max_count = 7;         /* max repeat count */
	  var min_count = 4;         /* min repeat count */
	
	  /* tree[max_code+1].Len = -1; */  /* guard already set */
	  if (nextlen === 0) {
	    max_count = 138;
	    min_count = 3;
	  }
	
	  for (n = 0; n <= max_code; n++) {
	    curlen = nextlen;
	    nextlen = tree[(n + 1) * 2 + 1]/*.Len*/;
	
	    if (++count < max_count && curlen === nextlen) {
	      continue;
	
	    } else if (count < min_count) {
	      do { send_code(s, curlen, s.bl_tree); } while (--count !== 0);
	
	    } else if (curlen !== 0) {
	      if (curlen !== prevlen) {
	        send_code(s, curlen, s.bl_tree);
	        count--;
	      }
	      //Assert(count >= 3 && count <= 6, " 3_6?");
	      send_code(s, REP_3_6, s.bl_tree);
	      send_bits(s, count - 3, 2);
	
	    } else if (count <= 10) {
	      send_code(s, REPZ_3_10, s.bl_tree);
	      send_bits(s, count - 3, 3);
	
	    } else {
	      send_code(s, REPZ_11_138, s.bl_tree);
	      send_bits(s, count - 11, 7);
	    }
	
	    count = 0;
	    prevlen = curlen;
	    if (nextlen === 0) {
	      max_count = 138;
	      min_count = 3;
	
	    } else if (curlen === nextlen) {
	      max_count = 6;
	      min_count = 3;
	
	    } else {
	      max_count = 7;
	      min_count = 4;
	    }
	  }
	}
	
	
	/* ===========================================================================
	 * Construct the Huffman tree for the bit lengths and return the index in
	 * bl_order of the last bit length code to send.
	 */
	function build_bl_tree(s) {
	  var max_blindex;  /* index of last bit length code of non zero freq */
	
	  /* Determine the bit length frequencies for literal and distance trees */
	  scan_tree(s, s.dyn_ltree, s.l_desc.max_code);
	  scan_tree(s, s.dyn_dtree, s.d_desc.max_code);
	
	  /* Build the bit length tree: */
	  build_tree(s, s.bl_desc);
	  /* opt_len now includes the length of the tree representations, except
	   * the lengths of the bit lengths codes and the 5+5+4 bits for the counts.
	   */
	
	  /* Determine the number of bit length codes to send. The pkzip format
	   * requires that at least 4 bit length codes be sent. (appnote.txt says
	   * 3 but the actual value used is 4.)
	   */
	  for (max_blindex = BL_CODES - 1; max_blindex >= 3; max_blindex--) {
	    if (s.bl_tree[bl_order[max_blindex] * 2 + 1]/*.Len*/ !== 0) {
	      break;
	    }
	  }
	  /* Update opt_len to include the bit length tree and counts */
	  s.opt_len += 3 * (max_blindex + 1) + 5 + 5 + 4;
	  //Tracev((stderr, "\ndyn trees: dyn %ld, stat %ld",
	  //        s->opt_len, s->static_len));
	
	  return max_blindex;
	}
	
	
	/* ===========================================================================
	 * Send the header for a block using dynamic Huffman trees: the counts, the
	 * lengths of the bit length codes, the literal tree and the distance tree.
	 * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4.
	 */
	function send_all_trees(s, lcodes, dcodes, blcodes)
	//    deflate_state *s;
	//    int lcodes, dcodes, blcodes; /* number of codes for each tree */
	{
	  var rank;                    /* index in bl_order */
	
	  //Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, "not enough codes");
	  //Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES,
	  //        "too many codes");
	  //Tracev((stderr, "\nbl counts: "));
	  send_bits(s, lcodes - 257, 5); /* not +255 as stated in appnote.txt */
	  send_bits(s, dcodes - 1,   5);
	  send_bits(s, blcodes - 4,  4); /* not -3 as stated in appnote.txt */
	  for (rank = 0; rank < blcodes; rank++) {
	    //Tracev((stderr, "\nbl code %2d ", bl_order[rank]));
	    send_bits(s, s.bl_tree[bl_order[rank] * 2 + 1]/*.Len*/, 3);
	  }
	  //Tracev((stderr, "\nbl tree: sent %ld", s->bits_sent));
	
	  send_tree(s, s.dyn_ltree, lcodes - 1); /* literal tree */
	  //Tracev((stderr, "\nlit tree: sent %ld", s->bits_sent));
	
	  send_tree(s, s.dyn_dtree, dcodes - 1); /* distance tree */
	  //Tracev((stderr, "\ndist tree: sent %ld", s->bits_sent));
	}
	
	
	/* ===========================================================================
	 * Check if the data type is TEXT or BINARY, using the following algorithm:
	 * - TEXT if the two conditions below are satisfied:
	 *    a) There are no non-portable control characters belonging to the
	 *       "black list" (0..6, 14..25, 28..31).
	 *    b) There is at least one printable character belonging to the
	 *       "white list" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255).
	 * - BINARY otherwise.
	 * - The following partially-portable control characters form a
	 *   "gray list" that is ignored in this detection algorithm:
	 *   (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}).
	 * IN assertion: the fields Freq of dyn_ltree are set.
	 */
	function detect_data_type(s) {
	  /* black_mask is the bit mask of black-listed bytes
	   * set bits 0..6, 14..25, and 28..31
	   * 0xf3ffc07f = binary 11110011111111111100000001111111
	   */
	  var black_mask = 0xf3ffc07f;
	  var n;
	
	  /* Check for non-textual ("black-listed") bytes. */
	  for (n = 0; n <= 31; n++, black_mask >>>= 1) {
	    if ((black_mask & 1) && (s.dyn_ltree[n * 2]/*.Freq*/ !== 0)) {
	      return Z_BINARY;
	    }
	  }
	
	  /* Check for textual ("white-listed") bytes. */
	  if (s.dyn_ltree[9 * 2]/*.Freq*/ !== 0 || s.dyn_ltree[10 * 2]/*.Freq*/ !== 0 ||
	      s.dyn_ltree[13 * 2]/*.Freq*/ !== 0) {
	    return Z_TEXT;
	  }
	  for (n = 32; n < LITERALS; n++) {
	    if (s.dyn_ltree[n * 2]/*.Freq*/ !== 0) {
	      return Z_TEXT;
	    }
	  }
	
	  /* There are no "black-listed" or "white-listed" bytes:
	   * this stream either is empty or has tolerated ("gray-listed") bytes only.
	   */
	  return Z_BINARY;
	}
	
	
	var static_init_done = false;
	
	/* ===========================================================================
	 * Initialize the tree data structures for a new zlib stream.
	 */
	function _tr_init(s)
	{
	
	  if (!static_init_done) {
	    tr_static_init();
	    static_init_done = true;
	  }
	
	  s.l_desc  = new TreeDesc(s.dyn_ltree, static_l_desc);
	  s.d_desc  = new TreeDesc(s.dyn_dtree, static_d_desc);
	  s.bl_desc = new TreeDesc(s.bl_tree, static_bl_desc);
	
	  s.bi_buf = 0;
	  s.bi_valid = 0;
	
	  /* Initialize the first block of the first file: */
	  init_block(s);
	}
	
	
	/* ===========================================================================
	 * Send a stored block
	 */
	function _tr_stored_block(s, buf, stored_len, last)
	//DeflateState *s;
	//charf *buf;       /* input block */
	//ulg stored_len;   /* length of input block */
	//int last;         /* one if this is the last block for a file */
	{
	  send_bits(s, (STORED_BLOCK << 1) + (last ? 1 : 0), 3);    /* send block type */
	  copy_block(s, buf, stored_len, true); /* with header */
	}
	
	
	/* ===========================================================================
	 * Send one empty static block to give enough lookahead for inflate.
	 * This takes 10 bits, of which 7 may remain in the bit buffer.
	 */
	function _tr_align(s) {
	  send_bits(s, STATIC_TREES << 1, 3);
	  send_code(s, END_BLOCK, static_ltree);
	  bi_flush(s);
	}
	
	
	/* ===========================================================================
	 * Determine the best encoding for the current block: dynamic trees, static
	 * trees or store, and output the encoded block to the zip file.
	 */
	function _tr_flush_block(s, buf, stored_len, last)
	//DeflateState *s;
	//charf *buf;       /* input block, or NULL if too old */
	//ulg stored_len;   /* length of input block */
	//int last;         /* one if this is the last block for a file */
	{
	  var opt_lenb, static_lenb;  /* opt_len and static_len in bytes */
	  var max_blindex = 0;        /* index of last bit length code of non zero freq */
	
	  /* Build the Huffman trees unless a stored block is forced */
	  if (s.level > 0) {
	
	    /* Check if the file is binary or text */
	    if (s.strm.data_type === Z_UNKNOWN) {
	      s.strm.data_type = detect_data_type(s);
	    }
	
	    /* Construct the literal and distance trees */
	    build_tree(s, s.l_desc);
	    // Tracev((stderr, "\nlit data: dyn %ld, stat %ld", s->opt_len,
	    //        s->static_len));
	
	    build_tree(s, s.d_desc);
	    // Tracev((stderr, "\ndist data: dyn %ld, stat %ld", s->opt_len,
	    //        s->static_len));
	    /* At this point, opt_len and static_len are the total bit lengths of
	     * the compressed block data, excluding the tree representations.
	     */
	
	    /* Build the bit length tree for the above two trees, and get the index
	     * in bl_order of the last bit length code to send.
	     */
	    max_blindex = build_bl_tree(s);
	
	    /* Determine the best encoding. Compute the block lengths in bytes. */
	    opt_lenb = (s.opt_len + 3 + 7) >>> 3;
	    static_lenb = (s.static_len + 3 + 7) >>> 3;
	
	    // Tracev((stderr, "\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u ",
	    //        opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len,
	    //        s->last_lit));
	
	    if (static_lenb <= opt_lenb) { opt_lenb = static_lenb; }
	
	  } else {
	    // Assert(buf != (char*)0, "lost buf");
	    opt_lenb = static_lenb = stored_len + 5; /* force a stored block */
	  }
	
	  if ((stored_len + 4 <= opt_lenb) && (buf !== -1)) {
	    /* 4: two words for the lengths */
	
	    /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE.
	     * Otherwise we can't have processed more than WSIZE input bytes since
	     * the last block flush, because compression would have been
	     * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to
	     * transform a block into a stored block.
	     */
	    _tr_stored_block(s, buf, stored_len, last);
	
	  } else if (s.strategy === Z_FIXED || static_lenb === opt_lenb) {
	
	    send_bits(s, (STATIC_TREES << 1) + (last ? 1 : 0), 3);
	    compress_block(s, static_ltree, static_dtree);
	
	  } else {
	    send_bits(s, (DYN_TREES << 1) + (last ? 1 : 0), 3);
	    send_all_trees(s, s.l_desc.max_code + 1, s.d_desc.max_code + 1, max_blindex + 1);
	    compress_block(s, s.dyn_ltree, s.dyn_dtree);
	  }
	  // Assert (s->compressed_len == s->bits_sent, "bad compressed size");
	  /* The above check is made mod 2^32, for files larger than 512 MB
	   * and uLong implemented on 32 bits.
	   */
	  init_block(s);
	
	  if (last) {
	    bi_windup(s);
	  }
	  // Tracev((stderr,"\ncomprlen %lu(%lu) ", s->compressed_len>>3,
	  //       s->compressed_len-7*last));
	}
	
	/* ===========================================================================
	 * Save the match info and tally the frequency counts. Return true if
	 * the current block must be flushed.
	 */
	function _tr_tally(s, dist, lc)
	//    deflate_state *s;
	//    unsigned dist;  /* distance of matched string */
	//    unsigned lc;    /* match length-MIN_MATCH or unmatched char (if dist==0) */
	{
	  //var out_length, in_length, dcode;
	
	  s.pending_buf[s.d_buf + s.last_lit * 2]     = (dist >>> 8) & 0xff;
	  s.pending_buf[s.d_buf + s.last_lit * 2 + 1] = dist & 0xff;
	
	  s.pending_buf[s.l_buf + s.last_lit] = lc & 0xff;
	  s.last_lit++;
	
	  if (dist === 0) {
	    /* lc is the unmatched char */
	    s.dyn_ltree[lc * 2]/*.Freq*/++;
	  } else {
	    s.matches++;
	    /* Here, lc is the match length - MIN_MATCH */
	    dist--;             /* dist = match distance - 1 */
	    //Assert((ush)dist < (ush)MAX_DIST(s) &&
	    //       (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) &&
	    //       (ush)d_code(dist) < (ush)D_CODES,  "_tr_tally: bad match");
	
	    s.dyn_ltree[(_length_code[lc] + LITERALS + 1) * 2]/*.Freq*/++;
	    s.dyn_dtree[d_code(dist) * 2]/*.Freq*/++;
	  }
	
	// (!) This block is disabled in zlib defaults,
	// don't enable it for binary compatibility
	
	//#ifdef TRUNCATE_BLOCK
	//  /* Try to guess if it is profitable to stop the current block here */
	//  if ((s.last_lit & 0x1fff) === 0 && s.level > 2) {
	//    /* Compute an upper bound for the compressed length */
	//    out_length = s.last_lit*8;
	//    in_length = s.strstart - s.block_start;
	//
	//    for (dcode = 0; dcode < D_CODES; dcode++) {
	//      out_length += s.dyn_dtree[dcode*2]/*.Freq*/ * (5 + extra_dbits[dcode]);
	//    }
	//    out_length >>>= 3;
	//    //Tracev((stderr,"\nlast_lit %u, in %ld, out ~%ld(%ld%%) ",
	//    //       s->last_lit, in_length, out_length,
	//    //       100L - out_length*100L/in_length));
	//    if (s.matches < (s.last_lit>>1)/*int /2*/ && out_length < (in_length>>1)/*int /2*/) {
	//      return true;
	//    }
	//  }
	//#endif
	
	  return (s.last_lit === s.lit_bufsize - 1);
	  /* We avoid equality with lit_bufsize because of wraparound at 64K
	   * on 16 bit machines and because stored blocks are restricted to
	   * 64K-1 bytes.
	   */
	}
	
	exports._tr_init  = _tr_init;
	exports._tr_stored_block = _tr_stored_block;
	exports._tr_flush_block  = _tr_flush_block;
	exports._tr_tally = _tr_tally;
	exports._tr_align = _tr_align;


/***/ }),
/* 1095 */
/***/ (function(module, exports) {

	function dbfHeader(buffer) {
	  var data = new DataView(buffer);
	  var out = {};
	  out.lastUpdated = new Date(data.getUint8(1, true) + 1900, data.getUint8(2, true), data.getUint8(3, true));
	  out.records = data.getUint32(4, true);
	  out.headerLen = data.getUint16(8, true);
	  out.recLen = data.getUint16(10, true);
	  return out;
	}
	
	function dbfRowHeader(buffer, headerLen) {
	  var data = new DataView(buffer);
	  var out = [];
	  var offset = 32;
	  while (offset < headerLen) {
	    out.push({
	      name: String.fromCharCode.apply(this, (new Uint8Array(buffer, offset, 11))).replace(/\0|\s+$/g, ''),
	      dataType: String.fromCharCode(data.getUint8(offset + 11)),
	      len: data.getUint8(offset + 16),
	      decimal: data.getUint8(offset + 17)
	    });
	    if (data.getUint8(offset + 32) === 13) {
	      break;
	    } else {
	      offset += 32;
	    }
	  }
	  return out;
	}
	
	function rowFuncs(buffer, offset, len, type) {
	  var data = (new Uint8Array(buffer, offset, len));
	  var textData = String.fromCharCode.apply(this, data).replace(/\0|\s+$/g, '');
	  switch (type) {
	  case 'N':
	  case 'F':
	  case 'O':
	    return parseFloat(textData, 10);
	  case 'D':
	    return new Date(textData.slice(0, 4), parseInt(textData.slice(4, 6), 10) - 1, textData.slice(6, 8));
	  case 'L':
	    return textData.toLowerCase() === 'y' || textData.toLowerCase() === 't';
	  default:
	    return textData;
	  }
	}
	
	function parseRow(buffer, offset, rowHeaders) {
	  var out = {};
	  var i = 0;
	  var len = rowHeaders.length;
	  var field;
	  var header;
	  while (i < len) {
	    header = rowHeaders[i];
	    field = rowFuncs(buffer, offset, header.len, header.dataType);
	    offset += header.len;
	    if (typeof field !== 'undefined') {
	      out[header.name] = field;
	    }
	    i++;
	  }
	  return out;
	}
	module.exports = function(buffer) {
	  var header = dbfHeader(buffer);
	  var rowHeaders = dbfRowHeader(buffer, header.headerLen - 1);
	
	  var offset = ((rowHeaders.length + 1) << 5) + 2;
	  var recLen = header.recLen;
	  var records = header.records;
	  var out = [];
	  while (records) {
	    out.push(parseRow(buffer, offset, rowHeaders));
	    offset += recLen;
	    records--;
	  }
	  return out;
	};


/***/ }),
/* 1096 */
/***/ (function(module, exports, __webpack_require__) {

	(function (global, factory) {
	     true ? module.exports = factory() :
	    typeof define === 'function' && define.amd ? define(factory) :
	    (global.proj4 = factory());
	}(this, (function () { 'use strict';
	
	    var globals = function(defs) {
	      defs('EPSG:4326', "+title=WGS 84 (long/lat) +proj=longlat +ellps=WGS84 +datum=WGS84 +units=degrees");
	      defs('EPSG:4269', "+title=NAD83 (long/lat) +proj=longlat +a=6378137.0 +b=6356752.31414036 +ellps=GRS80 +datum=NAD83 +units=degrees");
	      defs('EPSG:3857', "+title=WGS 84 / Pseudo-Mercator +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs");
	
	      defs.WGS84 = defs['EPSG:4326'];
	      defs['EPSG:3785'] = defs['EPSG:3857']; // maintain backward compat, official code is 3857
	      defs.GOOGLE = defs['EPSG:3857'];
	      defs['EPSG:900913'] = defs['EPSG:3857'];
	      defs['EPSG:102113'] = defs['EPSG:3857'];
	    };
	
	    var PJD_3PARAM = 1;
	    var PJD_7PARAM = 2;
	    var PJD_WGS84 = 4; // WGS84 or equivalent
	    var PJD_NODATUM = 5; // WGS84 or equivalent
	    var SEC_TO_RAD = 4.84813681109535993589914102357e-6;
	    var HALF_PI = Math.PI/2;
	    // ellipoid pj_set_ell.c
	    var SIXTH = 0.1666666666666666667;
	    /* 1/6 */
	    var RA4 = 0.04722222222222222222;
	    /* 17/360 */
	    var RA6 = 0.02215608465608465608;
	    var EPSLN = 1.0e-10;
	    // you'd think you could use Number.EPSILON above but that makes
	    // Mollweide get into an infinate loop.
	
	    var D2R = 0.01745329251994329577;
	    var R2D = 57.29577951308232088;
	    var FORTPI = Math.PI/4;
	    var TWO_PI = Math.PI * 2;
	    // SPI is slightly greater than Math.PI, so values that exceed the -180..180
	    // degree range by a tiny amount don't get wrapped. This prevents points that
	    // have drifted from their original location along the 180th meridian (due to
	    // floating point error) from changing their sign.
	    var SPI = 3.14159265359;
	
	    var exports$1 = {};
	    exports$1.greenwich = 0.0; //"0dE",
	    exports$1.lisbon = -9.131906111111; //"9d07'54.862\"W",
	    exports$1.paris = 2.337229166667; //"2d20'14.025\"E",
	    exports$1.bogota = -74.080916666667; //"74d04'51.3\"W",
	    exports$1.madrid = -3.687938888889; //"3d41'16.58\"W",
	    exports$1.rome = 12.452333333333; //"12d27'8.4\"E",
	    exports$1.bern = 7.439583333333; //"7d26'22.5\"E",
	    exports$1.jakarta = 106.807719444444; //"106d48'27.79\"E",
	    exports$1.ferro = -17.666666666667; //"17d40'W",
	    exports$1.brussels = 4.367975; //"4d22'4.71\"E",
	    exports$1.stockholm = 18.058277777778; //"18d3'29.8\"E",
	    exports$1.athens = 23.7163375; //"23d42'58.815\"E",
	    exports$1.oslo = 10.722916666667; //"10d43'22.5\"E"
	
	    var units = {
	      ft: {to_meter: 0.3048},
	      'us-ft': {to_meter: 1200 / 3937}
	    };
	
	    var ignoredChar = /[\s_\-\/\(\)]/g;
	    function match(obj, key) {
	      if (obj[key]) {
	        return obj[key];
	      }
	      var keys = Object.keys(obj);
	      var lkey = key.toLowerCase().replace(ignoredChar, '');
	      var i = -1;
	      var testkey, processedKey;
	      while (++i < keys.length) {
	        testkey = keys[i];
	        processedKey = testkey.toLowerCase().replace(ignoredChar, '');
	        if (processedKey === lkey) {
	          return obj[testkey];
	        }
	      }
	    }
	
	    var parseProj = function(defData) {
	      var self = {};
	      var paramObj = defData.split('+').map(function(v) {
	        return v.trim();
	      }).filter(function(a) {
	        return a;
	      }).reduce(function(p, a) {
	        var split = a.split('=');
	        split.push(true);
	        p[split[0].toLowerCase()] = split[1];
	        return p;
	      }, {});
	      var paramName, paramVal, paramOutname;
	      var params = {
	        proj: 'projName',
	        datum: 'datumCode',
	        rf: function(v) {
	          self.rf = parseFloat(v);
	        },
	        lat_0: function(v) {
	          self.lat0 = v * D2R;
	        },
	        lat_1: function(v) {
	          self.lat1 = v * D2R;
	        },
	        lat_2: function(v) {
	          self.lat2 = v * D2R;
	        },
	        lat_ts: function(v) {
	          self.lat_ts = v * D2R;
	        },
	        lon_0: function(v) {
	          self.long0 = v * D2R;
	        },
	        lon_1: function(v) {
	          self.long1 = v * D2R;
	        },
	        lon_2: function(v) {
	          self.long2 = v * D2R;
	        },
	        alpha: function(v) {
	          self.alpha = parseFloat(v) * D2R;
	        },
	        lonc: function(v) {
	          self.longc = v * D2R;
	        },
	        x_0: function(v) {
	          self.x0 = parseFloat(v);
	        },
	        y_0: function(v) {
	          self.y0 = parseFloat(v);
	        },
	        k_0: function(v) {
	          self.k0 = parseFloat(v);
	        },
	        k: function(v) {
	          self.k0 = parseFloat(v);
	        },
	        a: function(v) {
	          self.a = parseFloat(v);
	        },
	        b: function(v) {
	          self.b = parseFloat(v);
	        },
	        r_a: function() {
	          self.R_A = true;
	        },
	        zone: function(v) {
	          self.zone = parseInt(v, 10);
	        },
	        south: function() {
	          self.utmSouth = true;
	        },
	        towgs84: function(v) {
	          self.datum_params = v.split(",").map(function(a) {
	            return parseFloat(a);
	          });
	        },
	        to_meter: function(v) {
	          self.to_meter = parseFloat(v);
	        },
	        units: function(v) {
	          self.units = v;
	          var unit = match(units, v);
	          if (unit) {
	            self.to_meter = unit.to_meter;
	          }
	        },
	        from_greenwich: function(v) {
	          self.from_greenwich = v * D2R;
	        },
	        pm: function(v) {
	          var pm = match(exports$1, v);
	          self.from_greenwich = (pm ? pm : parseFloat(v)) * D2R;
	        },
	        nadgrids: function(v) {
	          if (v === '@null') {
	            self.datumCode = 'none';
	          }
	          else {
	            self.nadgrids = v;
	          }
	        },
	        axis: function(v) {
	          var legalAxis = "ewnsud";
	          if (v.length === 3 && legalAxis.indexOf(v.substr(0, 1)) !== -1 && legalAxis.indexOf(v.substr(1, 1)) !== -1 && legalAxis.indexOf(v.substr(2, 1)) !== -1) {
	            self.axis = v;
	          }
	        }
	      };
	      for (paramName in paramObj) {
	        paramVal = paramObj[paramName];
	        if (paramName in params) {
	          paramOutname = params[paramName];
	          if (typeof paramOutname === 'function') {
	            paramOutname(paramVal);
	          }
	          else {
	            self[paramOutname] = paramVal;
	          }
	        }
	        else {
	          self[paramName] = paramVal;
	        }
	      }
	      if(typeof self.datumCode === 'string' && self.datumCode !== "WGS84"){
	        self.datumCode = self.datumCode.toLowerCase();
	      }
	      return self;
	    };
	
	    var NEUTRAL = 1;
	    var KEYWORD = 2;
	    var NUMBER = 3;
	    var QUOTED = 4;
	    var AFTERQUOTE = 5;
	    var ENDED = -1;
	    var whitespace = /\s/;
	    var latin = /[A-Za-z]/;
	    var keyword = /[A-Za-z84]/;
	    var endThings = /[,\]]/;
	    var digets = /[\d\.E\-\+]/;
	    // const ignoredChar = /[\s_\-\/\(\)]/g;
	    function Parser(text) {
	      if (typeof text !== 'string') {
	        throw new Error('not a string');
	      }
	      this.text = text.trim();
	      this.level = 0;
	      this.place = 0;
	      this.root = null;
	      this.stack = [];
	      this.currentObject = null;
	      this.state = NEUTRAL;
	    }
	    Parser.prototype.readCharicter = function() {
	      var char = this.text[this.place++];
	      if (this.state !== QUOTED) {
	        while (whitespace.test(char)) {
	          if (this.place >= this.text.length) {
	            return;
	          }
	          char = this.text[this.place++];
	        }
	      }
	      switch (this.state) {
	        case NEUTRAL:
	          return this.neutral(char);
	        case KEYWORD:
	          return this.keyword(char)
	        case QUOTED:
	          return this.quoted(char);
	        case AFTERQUOTE:
	          return this.afterquote(char);
	        case NUMBER:
	          return this.number(char);
	        case ENDED:
	          return;
	      }
	    };
	    Parser.prototype.afterquote = function(char) {
	      if (char === '"') {
	        this.word += '"';
	        this.state = QUOTED;
	        return;
	      }
	      if (endThings.test(char)) {
	        this.word = this.word.trim();
	        this.afterItem(char);
	        return;
	      }
	      throw new Error('havn\'t handled "' +char + '" in afterquote yet, index ' + this.place);
	    };
	    Parser.prototype.afterItem = function(char) {
	      if (char === ',') {
	        if (this.word !== null) {
	          this.currentObject.push(this.word);
	        }
	        this.word = null;
	        this.state = NEUTRAL;
	        return;
	      }
	      if (char === ']') {
	        this.level--;
	        if (this.word !== null) {
	          this.currentObject.push(this.word);
	          this.word = null;
	        }
	        this.state = NEUTRAL;
	        this.currentObject = this.stack.pop();
	        if (!this.currentObject) {
	          this.state = ENDED;
	        }
	
	        return;
	      }
	    };
	    Parser.prototype.number = function(char) {
	      if (digets.test(char)) {
	        this.word += char;
	        return;
	      }
	      if (endThings.test(char)) {
	        this.word = parseFloat(this.word);
	        this.afterItem(char);
	        return;
	      }
	      throw new Error('havn\'t handled "' +char + '" in number yet, index ' + this.place);
	    };
	    Parser.prototype.quoted = function(char) {
	      if (char === '"') {
	        this.state = AFTERQUOTE;
	        return;
	      }
	      this.word += char;
	      return;
	    };
	    Parser.prototype.keyword = function(char) {
	      if (keyword.test(char)) {
	        this.word += char;
	        return;
	      }
	      if (char === '[') {
	        var newObjects = [];
	        newObjects.push(this.word);
	        this.level++;
	        if (this.root === null) {
	          this.root = newObjects;
	        } else {
	          this.currentObject.push(newObjects);
	        }
	        this.stack.push(this.currentObject);
	        this.currentObject = newObjects;
	        this.state = NEUTRAL;
	        return;
	      }
	      if (endThings.test(char)) {
	        this.afterItem(char);
	        return;
	      }
	      throw new Error('havn\'t handled "' +char + '" in keyword yet, index ' + this.place);
	    };
	    Parser.prototype.neutral = function(char) {
	      if (latin.test(char)) {
	        this.word = char;
	        this.state = KEYWORD;
	        return;
	      }
	      if (char === '"') {
	        this.word = '';
	        this.state = QUOTED;
	        return;
	      }
	      if (digets.test(char)) {
	        this.word = char;
	        this.state = NUMBER;
	        return;
	      }
	      if (endThings.test(char)) {
	        this.afterItem(char);
	        return;
	      }
	      throw new Error('havn\'t handled "' +char + '" in neutral yet, index ' + this.place);
	    };
	    Parser.prototype.output = function() {
	      while (this.place < this.text.length) {
	        this.readCharicter();
	      }
	      if (this.state === ENDED) {
	        return this.root;
	      }
	      throw new Error('unable to parse string "' +this.text + '". State is ' + this.state);
	    };
	
	    function parseString(txt) {
	      var parser = new Parser(txt);
	      return parser.output();
	    }
	
	    function mapit(obj, key, value) {
	      if (Array.isArray(key)) {
	        value.unshift(key);
	        key = null;
	      }
	      var thing = key ? {} : obj;
	
	      var out = value.reduce(function(newObj, item) {
	        sExpr(item, newObj);
	        return newObj
	      }, thing);
	      if (key) {
	        obj[key] = out;
	      }
	    }
	
	    function sExpr(v, obj) {
	      if (!Array.isArray(v)) {
	        obj[v] = true;
	        return;
	      }
	      var key = v.shift();
	      if (key === 'PARAMETER') {
	        key = v.shift();
	      }
	      if (v.length === 1) {
	        if (Array.isArray(v[0])) {
	          obj[key] = {};
	          sExpr(v[0], obj[key]);
	          return;
	        }
	        obj[key] = v[0];
	        return;
	      }
	      if (!v.length) {
	        obj[key] = true;
	        return;
	      }
	      if (key === 'TOWGS84') {
	        obj[key] = v;
	        return;
	      }
	      if (key === 'AXIS') {
	        if (!(key in obj)) {
	          obj[key] = [];
	        }
	        obj[key].push(v);
	        return;
	      }
	      if (!Array.isArray(key)) {
	        obj[key] = {};
	      }
	
	      var i;
	      switch (key) {
	        case 'UNIT':
	        case 'PRIMEM':
	        case 'VERT_DATUM':
	          obj[key] = {
	            name: v[0].toLowerCase(),
	            convert: v[1]
	          };
	          if (v.length === 3) {
	            sExpr(v[2], obj[key]);
	          }
	          return;
	        case 'SPHEROID':
	        case 'ELLIPSOID':
	          obj[key] = {
	            name: v[0],
	            a: v[1],
	            rf: v[2]
	          };
	          if (v.length === 4) {
	            sExpr(v[3], obj[key]);
	          }
	          return;
	        case 'PROJECTEDCRS':
	        case 'PROJCRS':
	        case 'GEOGCS':
	        case 'GEOCCS':
	        case 'PROJCS':
	        case 'LOCAL_CS':
	        case 'GEODCRS':
	        case 'GEODETICCRS':
	        case 'GEODETICDATUM':
	        case 'EDATUM':
	        case 'ENGINEERINGDATUM':
	        case 'VERT_CS':
	        case 'VERTCRS':
	        case 'VERTICALCRS':
	        case 'COMPD_CS':
	        case 'COMPOUNDCRS':
	        case 'ENGINEERINGCRS':
	        case 'ENGCRS':
	        case 'FITTED_CS':
	        case 'LOCAL_DATUM':
	        case 'DATUM':
	          v[0] = ['name', v[0]];
	          mapit(obj, key, v);
	          return;
	        default:
	          i = -1;
	          while (++i < v.length) {
	            if (!Array.isArray(v[i])) {
	              return sExpr(v, obj[key]);
	            }
	          }
	          return mapit(obj, key, v);
	      }
	    }
	
	    var D2R$1 = 0.01745329251994329577;
	    function rename(obj, params) {
	      var outName = params[0];
	      var inName = params[1];
	      if (!(outName in obj) && (inName in obj)) {
	        obj[outName] = obj[inName];
	        if (params.length === 3) {
	          obj[outName] = params[2](obj[outName]);
	        }
	      }
	    }
	
	    function d2r(input) {
	      return input * D2R$1;
	    }
	
	    function cleanWKT(wkt) {
	      if (wkt.type === 'GEOGCS') {
	        wkt.projName = 'longlat';
	      } else if (wkt.type === 'LOCAL_CS') {
	        wkt.projName = 'identity';
	        wkt.local = true;
	      } else {
	        if (typeof wkt.PROJECTION === 'object') {
	          wkt.projName = Object.keys(wkt.PROJECTION)[0];
	        } else {
	          wkt.projName = wkt.PROJECTION;
	        }
	      }
	      if (wkt.AXIS) {
	        var axisOrder = '';
	        for (var i = 0, ii = wkt.AXIS.length; i < ii; ++i) {
	          var axis = wkt.AXIS[i];
	          var descriptor = axis[0].toLowerCase();
	          if (descriptor.indexOf('north') !== -1) {
	            axisOrder += 'n';
	          } else if (descriptor.indexOf('south') !== -1) {
	            axisOrder += 's';
	          } else if (descriptor.indexOf('east') !== -1) {
	            axisOrder += 'e';
	          } else if (descriptor.indexOf('west') !== -1) {
	            axisOrder += 'w';
	          }
	        }
	        if (axisOrder.length === 2) {
	          axisOrder += 'u';
	        }
	        if (axisOrder.length === 3) {
	          wkt.axis = axisOrder;
	        }
	      }
	      if (wkt.UNIT) {
	        wkt.units = wkt.UNIT.name.toLowerCase();
	        if (wkt.units === 'metre') {
	          wkt.units = 'meter';
	        }
	        if (wkt.UNIT.convert) {
	          if (wkt.type === 'GEOGCS') {
	            if (wkt.DATUM && wkt.DATUM.SPHEROID) {
	              wkt.to_meter = wkt.UNIT.convert*wkt.DATUM.SPHEROID.a;
	            }
	          } else {
	            wkt.to_meter = wkt.UNIT.convert;
	          }
	        }
	      }
	      var geogcs = wkt.GEOGCS;
	      if (wkt.type === 'GEOGCS') {
	        geogcs = wkt;
	      }
	      if (geogcs) {
	        //if(wkt.GEOGCS.PRIMEM&&wkt.GEOGCS.PRIMEM.convert){
	        //  wkt.from_greenwich=wkt.GEOGCS.PRIMEM.convert*D2R;
	        //}
	        if (geogcs.DATUM) {
	          wkt.datumCode = geogcs.DATUM.name.toLowerCase();
	        } else {
	          wkt.datumCode = geogcs.name.toLowerCase();
	        }
	        if (wkt.datumCode.slice(0, 2) === 'd_') {
	          wkt.datumCode = wkt.datumCode.slice(2);
	        }
	        if (wkt.datumCode === 'new_zealand_geodetic_datum_1949' || wkt.datumCode === 'new_zealand_1949') {
	          wkt.datumCode = 'nzgd49';
	        }
	        if (wkt.datumCode === 'wgs_1984' || wkt.datumCode === 'world_geodetic_system_1984') {
	          if (wkt.PROJECTION === 'Mercator_Auxiliary_Sphere') {
	            wkt.sphere = true;
	          }
	          wkt.datumCode = 'wgs84';
	        }
	        if (wkt.datumCode.slice(-6) === '_ferro') {
	          wkt.datumCode = wkt.datumCode.slice(0, - 6);
	        }
	        if (wkt.datumCode.slice(-8) === '_jakarta') {
	          wkt.datumCode = wkt.datumCode.slice(0, - 8);
	        }
	        if (~wkt.datumCode.indexOf('belge')) {
	          wkt.datumCode = 'rnb72';
	        }
	        if (geogcs.DATUM && geogcs.DATUM.SPHEROID) {
	          wkt.ellps = geogcs.DATUM.SPHEROID.name.replace('_19', '').replace(/[Cc]larke\_18/, 'clrk');
	          if (wkt.ellps.toLowerCase().slice(0, 13) === 'international') {
	            wkt.ellps = 'intl';
	          }
	
	          wkt.a = geogcs.DATUM.SPHEROID.a;
	          wkt.rf = parseFloat(geogcs.DATUM.SPHEROID.rf, 10);
	        }
	
	        if (geogcs.DATUM && geogcs.DATUM.TOWGS84) {
	          wkt.datum_params = geogcs.DATUM.TOWGS84;
	        }
	        if (~wkt.datumCode.indexOf('osgb_1936')) {
	          wkt.datumCode = 'osgb36';
	        }
	        if (~wkt.datumCode.indexOf('osni_1952')) {
	          wkt.datumCode = 'osni52';
	        }
	        if (~wkt.datumCode.indexOf('tm65')
	          || ~wkt.datumCode.indexOf('geodetic_datum_of_1965')) {
	          wkt.datumCode = 'ire65';
	        }
	        if (wkt.datumCode === 'ch1903+') {
	          wkt.datumCode = 'ch1903';
	        }
	        if (~wkt.datumCode.indexOf('israel')) {
	          wkt.datumCode = 'isr93';
	        }
	      }
	      if (wkt.b && !isFinite(wkt.b)) {
	        wkt.b = wkt.a;
	      }
	
	      function toMeter(input) {
	        var ratio = wkt.to_meter || 1;
	        return input * ratio;
	      }
	      var renamer = function(a) {
	        return rename(wkt, a);
	      };
	      var list = [
	        ['standard_parallel_1', 'Standard_Parallel_1'],
	        ['standard_parallel_2', 'Standard_Parallel_2'],
	        ['false_easting', 'False_Easting'],
	        ['false_northing', 'False_Northing'],
	        ['central_meridian', 'Central_Meridian'],
	        ['latitude_of_origin', 'Latitude_Of_Origin'],
	        ['latitude_of_origin', 'Central_Parallel'],
	        ['scale_factor', 'Scale_Factor'],
	        ['k0', 'scale_factor'],
	        ['latitude_of_center', 'Latitude_Of_Center'],
	        ['latitude_of_center', 'Latitude_of_center'],
	        ['lat0', 'latitude_of_center', d2r],
	        ['longitude_of_center', 'Longitude_Of_Center'],
	        ['longitude_of_center', 'Longitude_of_center'],
	        ['longc', 'longitude_of_center', d2r],
	        ['x0', 'false_easting', toMeter],
	        ['y0', 'false_northing', toMeter],
	        ['long0', 'central_meridian', d2r],
	        ['lat0', 'latitude_of_origin', d2r],
	        ['lat0', 'standard_parallel_1', d2r],
	        ['lat1', 'standard_parallel_1', d2r],
	        ['lat2', 'standard_parallel_2', d2r],
	        ['azimuth', 'Azimuth'],
	        ['alpha', 'azimuth', d2r],
	        ['srsCode', 'name']
	      ];
	      list.forEach(renamer);
	      if (!wkt.long0 && wkt.longc && (wkt.projName === 'Albers_Conic_Equal_Area' || wkt.projName === 'Lambert_Azimuthal_Equal_Area')) {
	        wkt.long0 = wkt.longc;
	      }
	      if (!wkt.lat_ts && wkt.lat1 && (wkt.projName === 'Stereographic_South_Pole' || wkt.projName === 'Polar Stereographic (variant B)')) {
	        wkt.lat0 = d2r(wkt.lat1 > 0 ? 90 : -90);
	        wkt.lat_ts = wkt.lat1;
	      }
	    }
	    var wkt = function(wkt) {
	      var lisp = parseString(wkt);
	      var type = lisp.shift();
	      var name = lisp.shift();
	      lisp.unshift(['name', name]);
	      lisp.unshift(['type', type]);
	      var obj = {};
	      sExpr(lisp, obj);
	      cleanWKT(obj);
	      return obj;
	    };
	
	    function defs(name) {
	      /*global console*/
	      var that = this;
	      if (arguments.length === 2) {
	        var def = arguments[1];
	        if (typeof def === 'string') {
	          if (def.charAt(0) === '+') {
	            defs[name] = parseProj(arguments[1]);
	          }
	          else {
	            defs[name] = wkt(arguments[1]);
	          }
	        } else {
	          defs[name] = def;
	        }
	      }
	      else if (arguments.length === 1) {
	        if (Array.isArray(name)) {
	          return name.map(function(v) {
	            if (Array.isArray(v)) {
	              defs.apply(that, v);
	            }
	            else {
	              defs(v);
	            }
	          });
	        }
	        else if (typeof name === 'string') {
	          if (name in defs) {
	            return defs[name];
	          }
	        }
	        else if ('EPSG' in name) {
	          defs['EPSG:' + name.EPSG] = name;
	        }
	        else if ('ESRI' in name) {
	          defs['ESRI:' + name.ESRI] = name;
	        }
	        else if ('IAU2000' in name) {
	          defs['IAU2000:' + name.IAU2000] = name;
	        }
	        else {
	          console.log(name);
	        }
	        return;
	      }
	
	
	    }
	    globals(defs);
	
	    function testObj(code){
	      return typeof code === 'string';
	    }
	    function testDef(code){
	      return code in defs;
	    }
	     var codeWords = ['PROJECTEDCRS', 'PROJCRS', 'GEOGCS','GEOCCS','PROJCS','LOCAL_CS', 'GEODCRS', 'GEODETICCRS', 'GEODETICDATUM', 'ENGCRS', 'ENGINEERINGCRS'];
	    function testWKT(code){
	      return codeWords.some(function (word) {
	        return code.indexOf(word) > -1;
	      });
	    }
	    var codes = ['3857', '900913', '3785', '102113'];
	    function checkMercator(item) {
	      var auth = match(item, 'authority');
	      if (!auth) {
	        return;
	      }
	      var code = match(auth, 'epsg');
	      return code && codes.indexOf(code) > -1;
	    }
	    function checkProjStr(item) {
	      var ext = match(item, 'extension');
	      if (!ext) {
	        return;
	      }
	      return match(ext, 'proj4');
	    }
	    function testProj(code){
	      return code[0] === '+';
	    }
	    function parse(code){
	      if (testObj(code)) {
	        //check to see if this is a WKT string
	        if (testDef(code)) {
	          return defs[code];
	        }
	        if (testWKT(code)) {
	          var out = wkt(code);
	          // test of spetial case, due to this being a very common and often malformed
	          if (checkMercator(out)) {
	            return defs['EPSG:3857'];
	          }
	          var maybeProjStr = checkProjStr(out);
	          if (maybeProjStr) {
	            return parseProj(maybeProjStr);
	          }
	          return out;
	        }
	        if (testProj(code)) {
	          return parseProj(code);
	        }
	      }else{
	        return code;
	      }
	    }
	
	    var extend = function(destination, source) {
	      destination = destination || {};
	      var value, property;
	      if (!source) {
	        return destination;
	      }
	      for (property in source) {
	        value = source[property];
	        if (value !== undefined) {
	          destination[property] = value;
	        }
	      }
	      return destination;
	    };
	
	    var msfnz = function(eccent, sinphi, cosphi) {
	      var con = eccent * sinphi;
	      return cosphi / (Math.sqrt(1 - con * con));
	    };
	
	    var sign = function(x) {
	      return x<0 ? -1 : 1;
	    };
	
	    var adjust_lon = function(x) {
	      return (Math.abs(x) <= SPI) ? x : (x - (sign(x) * TWO_PI));
	    };
	
	    var tsfnz = function(eccent, phi, sinphi) {
	      var con = eccent * sinphi;
	      var com = 0.5 * eccent;
	      con = Math.pow(((1 - con) / (1 + con)), com);
	      return (Math.tan(0.5 * (HALF_PI - phi)) / con);
	    };
	
	    var phi2z = function(eccent, ts) {
	      var eccnth = 0.5 * eccent;
	      var con, dphi;
	      var phi = HALF_PI - 2 * Math.atan(ts);
	      for (var i = 0; i <= 15; i++) {
	        con = eccent * Math.sin(phi);
	        dphi = HALF_PI - 2 * Math.atan(ts * (Math.pow(((1 - con) / (1 + con)), eccnth))) - phi;
	        phi += dphi;
	        if (Math.abs(dphi) <= 0.0000000001) {
	          return phi;
	        }
	      }
	      //console.log("phi2z has NoConvergence");
	      return -9999;
	    };
	
	    function init() {
	      var con = this.b / this.a;
	      this.es = 1 - con * con;
	      if(!('x0' in this)){
	        this.x0 = 0;
	      }
	      if(!('y0' in this)){
	        this.y0 = 0;
	      }
	      this.e = Math.sqrt(this.es);
	      if (this.lat_ts) {
	        if (this.sphere) {
	          this.k0 = Math.cos(this.lat_ts);
	        }
	        else {
	          this.k0 = msfnz(this.e, Math.sin(this.lat_ts), Math.cos(this.lat_ts));
	        }
	      }
	      else {
	        if (!this.k0) {
	          if (this.k) {
	            this.k0 = this.k;
	          }
	          else {
	            this.k0 = 1;
	          }
	        }
	      }
	    }
	
	    /* Mercator forward equations--mapping lat,long to x,y
	      --------------------------------------------------*/
	
	    function forward(p) {
	      var lon = p.x;
	      var lat = p.y;
	      // convert to radians
	      if (lat * R2D > 90 && lat * R2D < -90 && lon * R2D > 180 && lon * R2D < -180) {
	        return null;
	      }
	
	      var x, y;
	      if (Math.abs(Math.abs(lat) - HALF_PI) <= EPSLN) {
	        return null;
	      }
	      else {
	        if (this.sphere) {
	          x = this.x0 + this.a * this.k0 * adjust_lon(lon - this.long0);
	          y = this.y0 + this.a * this.k0 * Math.log(Math.tan(FORTPI + 0.5 * lat));
	        }
	        else {
	          var sinphi = Math.sin(lat);
	          var ts = tsfnz(this.e, lat, sinphi);
	          x = this.x0 + this.a * this.k0 * adjust_lon(lon - this.long0);
	          y = this.y0 - this.a * this.k0 * Math.log(ts);
	        }
	        p.x = x;
	        p.y = y;
	        return p;
	      }
	    }
	
	    /* Mercator inverse equations--mapping x,y to lat/long
	      --------------------------------------------------*/
	    function inverse(p) {
	
	      var x = p.x - this.x0;
	      var y = p.y - this.y0;
	      var lon, lat;
	
	      if (this.sphere) {
	        lat = HALF_PI - 2 * Math.atan(Math.exp(-y / (this.a * this.k0)));
	      }
	      else {
	        var ts = Math.exp(-y / (this.a * this.k0));
	        lat = phi2z(this.e, ts);
	        if (lat === -9999) {
	          return null;
	        }
	      }
	      lon = adjust_lon(this.long0 + x / (this.a * this.k0));
	
	      p.x = lon;
	      p.y = lat;
	      return p;
	    }
	
	    var names$1 = ["Mercator", "Popular Visualisation Pseudo Mercator", "Mercator_1SP", "Mercator_Auxiliary_Sphere", "merc"];
	    var merc = {
	      init: init,
	      forward: forward,
	      inverse: inverse,
	      names: names$1
	    };
	
	    function init$1() {
	      //no-op for longlat
	    }
	
	    function identity(pt) {
	      return pt;
	    }
	    var names$2 = ["longlat", "identity"];
	    var longlat = {
	      init: init$1,
	      forward: identity,
	      inverse: identity,
	      names: names$2
	    };
	
	    var projs = [merc, longlat];
	    var names = {};
	    var projStore = [];
	
	    function add(proj, i) {
	      var len = projStore.length;
	      if (!proj.names) {
	        console.log(i);
	        return true;
	      }
	      projStore[len] = proj;
	      proj.names.forEach(function(n) {
	        names[n.toLowerCase()] = len;
	      });
	      return this;
	    }
	
	    function get(name) {
	      if (!name) {
	        return false;
	      }
	      var n = name.toLowerCase();
	      if (typeof names[n] !== 'undefined' && projStore[names[n]]) {
	        return projStore[names[n]];
	      }
	    }
	
	    function start() {
	      projs.forEach(add);
	    }
	    var projections = {
	      start: start,
	      add: add,
	      get: get
	    };
	
	    var exports$2 = {};
	    exports$2.MERIT = {
	      a: 6378137.0,
	      rf: 298.257,
	      ellipseName: "MERIT 1983"
	    };
	
	    exports$2.SGS85 = {
	      a: 6378136.0,
	      rf: 298.257,
	      ellipseName: "Soviet Geodetic System 85"
	    };
	
	    exports$2.GRS80 = {
	      a: 6378137.0,
	      rf: 298.257222101,
	      ellipseName: "GRS 1980(IUGG, 1980)"
	    };
	
	    exports$2.IAU76 = {
	      a: 6378140.0,
	      rf: 298.257,
	      ellipseName: "IAU 1976"
	    };
	
	    exports$2.airy = {
	      a: 6377563.396,
	      b: 6356256.910,
	      ellipseName: "Airy 1830"
	    };
	
	    exports$2.APL4 = {
	      a: 6378137,
	      rf: 298.25,
	      ellipseName: "Appl. Physics. 1965"
	    };
	
	    exports$2.NWL9D = {
	      a: 6378145.0,
	      rf: 298.25,
	      ellipseName: "Naval Weapons Lab., 1965"
	    };
	
	    exports$2.mod_airy = {
	      a: 6377340.189,
	      b: 6356034.446,
	      ellipseName: "Modified Airy"
	    };
	
	    exports$2.andrae = {
	      a: 6377104.43,
	      rf: 300.0,
	      ellipseName: "Andrae 1876 (Den., Iclnd.)"
	    };
	
	    exports$2.aust_SA = {
	      a: 6378160.0,
	      rf: 298.25,
	      ellipseName: "Australian Natl & S. Amer. 1969"
	    };
	
	    exports$2.GRS67 = {
	      a: 6378160.0,
	      rf: 298.2471674270,
	      ellipseName: "GRS 67(IUGG 1967)"
	    };
	
	    exports$2.bessel = {
	      a: 6377397.155,
	      rf: 299.1528128,
	      ellipseName: "Bessel 1841"
	    };
	
	    exports$2.bess_nam = {
	      a: 6377483.865,
	      rf: 299.1528128,
	      ellipseName: "Bessel 1841 (Namibia)"
	    };
	
	    exports$2.clrk66 = {
	      a: 6378206.4,
	      b: 6356583.8,
	      ellipseName: "Clarke 1866"
	    };
	
	    exports$2.clrk80 = {
	      a: 6378249.145,
	      rf: 293.4663,
	      ellipseName: "Clarke 1880 mod."
	    };
	
	    exports$2.clrk58 = {
	      a: 6378293.645208759,
	      rf: 294.2606763692654,
	      ellipseName: "Clarke 1858"
	    };
	
	    exports$2.CPM = {
	      a: 6375738.7,
	      rf: 334.29,
	      ellipseName: "Comm. des Poids et Mesures 1799"
	    };
	
	    exports$2.delmbr = {
	      a: 6376428.0,
	      rf: 311.5,
	      ellipseName: "Delambre 1810 (Belgium)"
	    };
	
	    exports$2.engelis = {
	      a: 6378136.05,
	      rf: 298.2566,
	      ellipseName: "Engelis 1985"
	    };
	
	    exports$2.evrst30 = {
	      a: 6377276.345,
	      rf: 300.8017,
	      ellipseName: "Everest 1830"
	    };
	
	    exports$2.evrst48 = {
	      a: 6377304.063,
	      rf: 300.8017,
	      ellipseName: "Everest 1948"
	    };
	
	    exports$2.evrst56 = {
	      a: 6377301.243,
	      rf: 300.8017,
	      ellipseName: "Everest 1956"
	    };
	
	    exports$2.evrst69 = {
	      a: 6377295.664,
	      rf: 300.8017,
	      ellipseName: "Everest 1969"
	    };
	
	    exports$2.evrstSS = {
	      a: 6377298.556,
	      rf: 300.8017,
	      ellipseName: "Everest (Sabah & Sarawak)"
	    };
	
	    exports$2.fschr60 = {
	      a: 6378166.0,
	      rf: 298.3,
	      ellipseName: "Fischer (Mercury Datum) 1960"
	    };
	
	    exports$2.fschr60m = {
	      a: 6378155.0,
	      rf: 298.3,
	      ellipseName: "Fischer 1960"
	    };
	
	    exports$2.fschr68 = {
	      a: 6378150.0,
	      rf: 298.3,
	      ellipseName: "Fischer 1968"
	    };
	
	    exports$2.helmert = {
	      a: 6378200.0,
	      rf: 298.3,
	      ellipseName: "Helmert 1906"
	    };
	
	    exports$2.hough = {
	      a: 6378270.0,
	      rf: 297.0,
	      ellipseName: "Hough"
	    };
	
	    exports$2.intl = {
	      a: 6378388.0,
	      rf: 297.0,
	      ellipseName: "International 1909 (Hayford)"
	    };
	
	    exports$2.kaula = {
	      a: 6378163.0,
	      rf: 298.24,
	      ellipseName: "Kaula 1961"
	    };
	
	    exports$2.lerch = {
	      a: 6378139.0,
	      rf: 298.257,
	      ellipseName: "Lerch 1979"
	    };
	
	    exports$2.mprts = {
	      a: 6397300.0,
	      rf: 191.0,
	      ellipseName: "Maupertius 1738"
	    };
	
	    exports$2.new_intl = {
	      a: 6378157.5,
	      b: 6356772.2,
	      ellipseName: "New International 1967"
	    };
	
	    exports$2.plessis = {
	      a: 6376523.0,
	      rf: 6355863.0,
	      ellipseName: "Plessis 1817 (France)"
	    };
	
	    exports$2.krass = {
	      a: 6378245.0,
	      rf: 298.3,
	      ellipseName: "Krassovsky, 1942"
	    };
	
	    exports$2.SEasia = {
	      a: 6378155.0,
	      b: 6356773.3205,
	      ellipseName: "Southeast Asia"
	    };
	
	    exports$2.walbeck = {
	      a: 6376896.0,
	      b: 6355834.8467,
	      ellipseName: "Walbeck"
	    };
	
	    exports$2.WGS60 = {
	      a: 6378165.0,
	      rf: 298.3,
	      ellipseName: "WGS 60"
	    };
	
	    exports$2.WGS66 = {
	      a: 6378145.0,
	      rf: 298.25,
	      ellipseName: "WGS 66"
	    };
	
	    exports$2.WGS7 = {
	      a: 6378135.0,
	      rf: 298.26,
	      ellipseName: "WGS 72"
	    };
	
	    var WGS84 = exports$2.WGS84 = {
	      a: 6378137.0,
	      rf: 298.257223563,
	      ellipseName: "WGS 84"
	    };
	
	    exports$2.sphere = {
	      a: 6370997.0,
	      b: 6370997.0,
	      ellipseName: "Normal Sphere (r=6370997)"
	    };
	
	    function eccentricity(a, b, rf, R_A) {
	      var a2 = a * a; // used in geocentric
	      var b2 = b * b; // used in geocentric
	      var es = (a2 - b2) / a2; // e ^ 2
	      var e = 0;
	      if (R_A) {
	        a *= 1 - es * (SIXTH + es * (RA4 + es * RA6));
	        a2 = a * a;
	        es = 0;
	      } else {
	        e = Math.sqrt(es); // eccentricity
	      }
	      var ep2 = (a2 - b2) / b2; // used in geocentric
	      return {
	        es: es,
	        e: e,
	        ep2: ep2
	      };
	    }
	    function sphere(a, b, rf, ellps, sphere) {
	      if (!a) { // do we have an ellipsoid?
	        var ellipse = match(exports$2, ellps);
	        if (!ellipse) {
	          ellipse = WGS84;
	        }
	        a = ellipse.a;
	        b = ellipse.b;
	        rf = ellipse.rf;
	      }
	
	      if (rf && !b) {
	        b = (1.0 - 1.0 / rf) * a;
	      }
	      if (rf === 0 || Math.abs(a - b) < EPSLN) {
	        sphere = true;
	        b = a;
	      }
	      return {
	        a: a,
	        b: b,
	        rf: rf,
	        sphere: sphere
	      };
	    }
	
	    var exports$3 = {};
	    exports$3.wgs84 = {
	      towgs84: "0,0,0",
	      ellipse: "WGS84",
	      datumName: "WGS84"
	    };
	
	    exports$3.ch1903 = {
	      towgs84: "674.374,15.056,405.346",
	      ellipse: "bessel",
	      datumName: "swiss"
	    };
	
	    exports$3.ggrs87 = {
	      towgs84: "-199.87,74.79,246.62",
	      ellipse: "GRS80",
	      datumName: "Greek_Geodetic_Reference_System_1987"
	    };
	
	    exports$3.nad83 = {
	      towgs84: "0,0,0",
	      ellipse: "GRS80",
	      datumName: "North_American_Datum_1983"
	    };
	
	    exports$3.nad27 = {
	      nadgrids: "@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat",
	      ellipse: "clrk66",
	      datumName: "North_American_Datum_1927"
	    };
	
	    exports$3.potsdam = {
	      towgs84: "606.0,23.0,413.0",
	      ellipse: "bessel",
	      datumName: "Potsdam Rauenberg 1950 DHDN"
	    };
	
	    exports$3.carthage = {
	      towgs84: "-263.0,6.0,431.0",
	      ellipse: "clark80",
	      datumName: "Carthage 1934 Tunisia"
	    };
	
	    exports$3.hermannskogel = {
	      towgs84: "653.0,-212.0,449.0",
	      ellipse: "bessel",
	      datumName: "Hermannskogel"
	    };
	
	    exports$3.osni52 = {
	      towgs84: "482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15",
	      ellipse: "airy",
	      datumName: "Irish National"
	    };
	
	    exports$3.ire65 = {
	      towgs84: "482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15",
	      ellipse: "mod_airy",
	      datumName: "Ireland 1965"
	    };
	
	    exports$3.rassadiran = {
	      towgs84: "-133.63,-157.5,-158.62",
	      ellipse: "intl",
	      datumName: "Rassadiran"
	    };
	
	    exports$3.nzgd49 = {
	      towgs84: "59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993",
	      ellipse: "intl",
	      datumName: "New Zealand Geodetic Datum 1949"
	    };
	
	    exports$3.osgb36 = {
	      towgs84: "446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894",
	      ellipse: "airy",
	      datumName: "Airy 1830"
	    };
	
	    exports$3.s_jtsk = {
	      towgs84: "589,76,480",
	      ellipse: 'bessel',
	      datumName: 'S-JTSK (Ferro)'
	    };
	
	    exports$3.beduaram = {
	      towgs84: '-106,-87,188',
	      ellipse: 'clrk80',
	      datumName: 'Beduaram'
	    };
	
	    exports$3.gunung_segara = {
	      towgs84: '-403,684,41',
	      ellipse: 'bessel',
	      datumName: 'Gunung Segara Jakarta'
	    };
	
	    exports$3.rnb72 = {
	      towgs84: "106.869,-52.2978,103.724,-0.33657,0.456955,-1.84218,1",
	      ellipse: "intl",
	      datumName: "Reseau National Belge 1972"
	    };
	
	    function datum(datumCode, datum_params, a, b, es, ep2) {
	      var out = {};
	
	      if (datumCode === undefined || datumCode === 'none') {
	        out.datum_type = PJD_NODATUM;
	      } else {
	        out.datum_type = PJD_WGS84;
	      }
	
	      if (datum_params) {
	        out.datum_params = datum_params.map(parseFloat);
	        if (out.datum_params[0] !== 0 || out.datum_params[1] !== 0 || out.datum_params[2] !== 0) {
	          out.datum_type = PJD_3PARAM;
	        }
	        if (out.datum_params.length > 3) {
	          if (out.datum_params[3] !== 0 || out.datum_params[4] !== 0 || out.datum_params[5] !== 0 || out.datum_params[6] !== 0) {
	            out.datum_type = PJD_7PARAM;
	            out.datum_params[3] *= SEC_TO_RAD;
	            out.datum_params[4] *= SEC_TO_RAD;
	            out.datum_params[5] *= SEC_TO_RAD;
	            out.datum_params[6] = (out.datum_params[6] / 1000000.0) + 1.0;
	          }
	        }
	      }
	
	      out.a = a; //datum object also uses these values
	      out.b = b;
	      out.es = es;
	      out.ep2 = ep2;
	      return out;
	    }
	
	    function Projection(srsCode,callback) {
	      if (!(this instanceof Projection)) {
	        return new Projection(srsCode);
	      }
	      callback = callback || function(error){
	        if(error){
	          throw error;
	        }
	      };
	      var json = parse(srsCode);
	      if(typeof json !== 'object'){
	        callback(srsCode);
	        return;
	      }
	      var ourProj = Projection.projections.get(json.projName);
	      if(!ourProj){
	        callback(srsCode);
	        return;
	      }
	      if (json.datumCode && json.datumCode !== 'none') {
	        var datumDef = match(exports$3, json.datumCode);
	        if (datumDef) {
	          json.datum_params = datumDef.towgs84 ? datumDef.towgs84.split(',') : null;
	          json.ellps = datumDef.ellipse;
	          json.datumName = datumDef.datumName ? datumDef.datumName : json.datumCode;
	        }
	      }
	      json.k0 = json.k0 || 1.0;
	      json.axis = json.axis || 'enu';
	      json.ellps = json.ellps || 'wgs84';
	      var sphere_ = sphere(json.a, json.b, json.rf, json.ellps, json.sphere);
	      var ecc = eccentricity(sphere_.a, sphere_.b, sphere_.rf, json.R_A);
	      var datumObj = json.datum || datum(json.datumCode, json.datum_params, sphere_.a, sphere_.b, ecc.es, ecc.ep2);
	
	      extend(this, json); // transfer everything over from the projection because we don't know what we'll need
	      extend(this, ourProj); // transfer all the methods from the projection
	
	      // copy the 4 things over we calulated in deriveConstants.sphere
	      this.a = sphere_.a;
	      this.b = sphere_.b;
	      this.rf = sphere_.rf;
	      this.sphere = sphere_.sphere;
	
	      // copy the 3 things we calculated in deriveConstants.eccentricity
	      this.es = ecc.es;
	      this.e = ecc.e;
	      this.ep2 = ecc.ep2;
	
	      // add in the datum object
	      this.datum = datumObj;
	
	      // init the projection
	      this.init();
	
	      // legecy callback from back in the day when it went to spatialreference.org
	      callback(null, this);
	
	    }
	    Projection.projections = projections;
	    Projection.projections.start();
	
	    'use strict';
	    function compareDatums(source, dest) {
	      if (source.datum_type !== dest.datum_type) {
	        return false; // false, datums are not equal
	      } else if (source.a !== dest.a || Math.abs(source.es - dest.es) > 0.000000000050) {
	        // the tolerance for es is to ensure that GRS80 and WGS84
	        // are considered identical
	        return false;
	      } else if (source.datum_type === PJD_3PARAM) {
	        return (source.datum_params[0] === dest.datum_params[0] && source.datum_params[1] === dest.datum_params[1] && source.datum_params[2] === dest.datum_params[2]);
	      } else if (source.datum_type === PJD_7PARAM) {
	        return (source.datum_params[0] === dest.datum_params[0] && source.datum_params[1] === dest.datum_params[1] && source.datum_params[2] === dest.datum_params[2] && source.datum_params[3] === dest.datum_params[3] && source.datum_params[4] === dest.datum_params[4] && source.datum_params[5] === dest.datum_params[5] && source.datum_params[6] === dest.datum_params[6]);
	      } else {
	        return true; // datums are equal
	      }
	    } // cs_compare_datums()
	
	    /*
	     * The function Convert_Geodetic_To_Geocentric converts geodetic coordinates
	     * (latitude, longitude, and height) to geocentric coordinates (X, Y, Z),
	     * according to the current ellipsoid parameters.
	     *
	     *    Latitude  : Geodetic latitude in radians                     (input)
	     *    Longitude : Geodetic longitude in radians                    (input)
	     *    Height    : Geodetic height, in meters                       (input)
	     *    X         : Calculated Geocentric X coordinate, in meters    (output)
	     *    Y         : Calculated Geocentric Y coordinate, in meters    (output)
	     *    Z         : Calculated Geocentric Z coordinate, in meters    (output)
	     *
	     */
	    function geodeticToGeocentric(p, es, a) {
	      var Longitude = p.x;
	      var Latitude = p.y;
	      var Height = p.z ? p.z : 0; //Z value not always supplied
	
	      var Rn; /*  Earth radius at location  */
	      var Sin_Lat; /*  Math.sin(Latitude)  */
	      var Sin2_Lat; /*  Square of Math.sin(Latitude)  */
	      var Cos_Lat; /*  Math.cos(Latitude)  */
	
	      /*
	       ** Don't blow up if Latitude is just a little out of the value
	       ** range as it may just be a rounding issue.  Also removed longitude
	       ** test, it should be wrapped by Math.cos() and Math.sin().  NFW for PROJ.4, Sep/2001.
	       */
	      if (Latitude < -HALF_PI && Latitude > -1.001 * HALF_PI) {
	        Latitude = -HALF_PI;
	      } else if (Latitude > HALF_PI && Latitude < 1.001 * HALF_PI) {
	        Latitude = HALF_PI;
	      } else if (Latitude < -HALF_PI) {
	        /* Latitude out of range */
	        //..reportError('geocent:lat out of range:' + Latitude);
	        return { x: -Infinity, y: -Infinity, z: p.z };
	      } else if (Latitude > HALF_PI) {
	        /* Latitude out of range */
	        return { x: Infinity, y: Infinity, z: p.z };
	      }
	
	      if (Longitude > Math.PI) {
	        Longitude -= (2 * Math.PI);
	      }
	      Sin_Lat = Math.sin(Latitude);
	      Cos_Lat = Math.cos(Latitude);
	      Sin2_Lat = Sin_Lat * Sin_Lat;
	      Rn = a / (Math.sqrt(1.0e0 - es * Sin2_Lat));
	      return {
	        x: (Rn + Height) * Cos_Lat * Math.cos(Longitude),
	        y: (Rn + Height) * Cos_Lat * Math.sin(Longitude),
	        z: ((Rn * (1 - es)) + Height) * Sin_Lat
	      };
	    } // cs_geodetic_to_geocentric()
	
	    function geocentricToGeodetic(p, es, a, b) {
	      /* local defintions and variables */
	      /* end-criterium of loop, accuracy of sin(Latitude) */
	      var genau = 1e-12;
	      var genau2 = (genau * genau);
	      var maxiter = 30;
	
	      var P; /* distance between semi-minor axis and location */
	      var RR; /* distance between center and location */
	      var CT; /* sin of geocentric latitude */
	      var ST; /* cos of geocentric latitude */
	      var RX;
	      var RK;
	      var RN; /* Earth radius at location */
	      var CPHI0; /* cos of start or old geodetic latitude in iterations */
	      var SPHI0; /* sin of start or old geodetic latitude in iterations */
	      var CPHI; /* cos of searched geodetic latitude */
	      var SPHI; /* sin of searched geodetic latitude */
	      var SDPHI; /* end-criterium: addition-theorem of sin(Latitude(iter)-Latitude(iter-1)) */
	      var iter; /* # of continous iteration, max. 30 is always enough (s.a.) */
	
	      var X = p.x;
	      var Y = p.y;
	      var Z = p.z ? p.z : 0.0; //Z value not always supplied
	      var Longitude;
	      var Latitude;
	      var Height;
	
	      P = Math.sqrt(X * X + Y * Y);
	      RR = Math.sqrt(X * X + Y * Y + Z * Z);
	
	      /*      special cases for latitude and longitude */
	      if (P / a < genau) {
	
	        /*  special case, if P=0. (X=0., Y=0.) */
	        Longitude = 0.0;
	
	        /*  if (X,Y,Z)=(0.,0.,0.) then Height becomes semi-minor axis
	         *  of ellipsoid (=center of mass), Latitude becomes PI/2 */
	        if (RR / a < genau) {
	          Latitude = HALF_PI;
	          Height = -b;
	          return {
	            x: p.x,
	            y: p.y,
	            z: p.z
	          };
	        }
	      } else {
	        /*  ellipsoidal (geodetic) longitude
	         *  interval: -PI < Longitude <= +PI */
	        Longitude = Math.atan2(Y, X);
	      }
	
	      /* --------------------------------------------------------------
	       * Following iterative algorithm was developped by
	       * "Institut for Erdmessung", University of Hannover, July 1988.
	       * Internet: www.ife.uni-hannover.de
	       * Iterative computation of CPHI,SPHI and Height.
	       * Iteration of CPHI and SPHI to 10**-12 radian resp.
	       * 2*10**-7 arcsec.
	       * --------------------------------------------------------------
	       */
	      CT = Z / RR;
	      ST = P / RR;
	      RX = 1.0 / Math.sqrt(1.0 - es * (2.0 - es) * ST * ST);
	      CPHI0 = ST * (1.0 - es) * RX;
	      SPHI0 = CT * RX;
	      iter = 0;
	
	      /* loop to find sin(Latitude) resp. Latitude
	       * until |sin(Latitude(iter)-Latitude(iter-1))| < genau */
	      do {
	        iter++;
	        RN = a / Math.sqrt(1.0 - es * SPHI0 * SPHI0);
	
	        /*  ellipsoidal (geodetic) height */
	        Height = P * CPHI0 + Z * SPHI0 - RN * (1.0 - es * SPHI0 * SPHI0);
	
	        RK = es * RN / (RN + Height);
	        RX = 1.0 / Math.sqrt(1.0 - RK * (2.0 - RK) * ST * ST);
	        CPHI = ST * (1.0 - RK) * RX;
	        SPHI = CT * RX;
	        SDPHI = SPHI * CPHI0 - CPHI * SPHI0;
	        CPHI0 = CPHI;
	        SPHI0 = SPHI;
	      }
	      while (SDPHI * SDPHI > genau2 && iter < maxiter);
	
	      /*      ellipsoidal (geodetic) latitude */
	      Latitude = Math.atan(SPHI / Math.abs(CPHI));
	      return {
	        x: Longitude,
	        y: Latitude,
	        z: Height
	      };
	    } // cs_geocentric_to_geodetic()
	
	    /****************************************************************/
	    // pj_geocentic_to_wgs84( p )
	    //  p = point to transform in geocentric coordinates (x,y,z)
	
	
	    /** point object, nothing fancy, just allows values to be
	        passed back and forth by reference rather than by value.
	        Other point classes may be used as long as they have
	        x and y properties, which will get modified in the transform method.
	    */
	    function geocentricToWgs84(p, datum_type, datum_params) {
	
	      if (datum_type === PJD_3PARAM) {
	        // if( x[io] === HUGE_VAL )
	        //    continue;
	        return {
	          x: p.x + datum_params[0],
	          y: p.y + datum_params[1],
	          z: p.z + datum_params[2],
	        };
	      } else if (datum_type === PJD_7PARAM) {
	        var Dx_BF = datum_params[0];
	        var Dy_BF = datum_params[1];
	        var Dz_BF = datum_params[2];
	        var Rx_BF = datum_params[3];
	        var Ry_BF = datum_params[4];
	        var Rz_BF = datum_params[5];
	        var M_BF = datum_params[6];
	        // if( x[io] === HUGE_VAL )
	        //    continue;
	        return {
	          x: M_BF * (p.x - Rz_BF * p.y + Ry_BF * p.z) + Dx_BF,
	          y: M_BF * (Rz_BF * p.x + p.y - Rx_BF * p.z) + Dy_BF,
	          z: M_BF * (-Ry_BF * p.x + Rx_BF * p.y + p.z) + Dz_BF
	        };
	      }
	    } // cs_geocentric_to_wgs84
	
	    /****************************************************************/
	    // pj_geocentic_from_wgs84()
	    //  coordinate system definition,
	    //  point to transform in geocentric coordinates (x,y,z)
	    function geocentricFromWgs84(p, datum_type, datum_params) {
	
	      if (datum_type === PJD_3PARAM) {
	        //if( x[io] === HUGE_VAL )
	        //    continue;
	        return {
	          x: p.x - datum_params[0],
	          y: p.y - datum_params[1],
	          z: p.z - datum_params[2],
	        };
	
	      } else if (datum_type === PJD_7PARAM) {
	        var Dx_BF = datum_params[0];
	        var Dy_BF = datum_params[1];
	        var Dz_BF = datum_params[2];
	        var Rx_BF = datum_params[3];
	        var Ry_BF = datum_params[4];
	        var Rz_BF = datum_params[5];
	        var M_BF = datum_params[6];
	        var x_tmp = (p.x - Dx_BF) / M_BF;
	        var y_tmp = (p.y - Dy_BF) / M_BF;
	        var z_tmp = (p.z - Dz_BF) / M_BF;
	        //if( x[io] === HUGE_VAL )
	        //    continue;
	
	        return {
	          x: x_tmp + Rz_BF * y_tmp - Ry_BF * z_tmp,
	          y: -Rz_BF * x_tmp + y_tmp + Rx_BF * z_tmp,
	          z: Ry_BF * x_tmp - Rx_BF * y_tmp + z_tmp
	        };
	      } //cs_geocentric_from_wgs84()
	    }
	
	    function checkParams(type) {
	      return (type === PJD_3PARAM || type === PJD_7PARAM);
	    }
	
	    var datum_transform = function(source, dest, point) {
	      // Short cut if the datums are identical.
	      if (compareDatums(source, dest)) {
	        return point; // in this case, zero is sucess,
	        // whereas cs_compare_datums returns 1 to indicate TRUE
	        // confusing, should fix this
	      }
	
	      // Explicitly skip datum transform by setting 'datum=none' as parameter for either source or dest
	      if (source.datum_type === PJD_NODATUM || dest.datum_type === PJD_NODATUM) {
	        return point;
	      }
	
	      // If this datum requires grid shifts, then apply it to geodetic coordinates.
	
	      // Do we need to go through geocentric coordinates?
	      if (source.es === dest.es && source.a === dest.a && !checkParams(source.datum_type) &&  !checkParams(dest.datum_type)) {
	        return point;
	      }
	
	      // Convert to geocentric coordinates.
	      point = geodeticToGeocentric(point, source.es, source.a);
	      // Convert between datums
	      if (checkParams(source.datum_type)) {
	        point = geocentricToWgs84(point, source.datum_type, source.datum_params);
	      }
	      if (checkParams(dest.datum_type)) {
	        point = geocentricFromWgs84(point, dest.datum_type, dest.datum_params);
	      }
	      return geocentricToGeodetic(point, dest.es, dest.a, dest.b);
	
	    };
	
	    var adjust_axis = function(crs, denorm, point) {
	      var xin = point.x,
	        yin = point.y,
	        zin = point.z || 0.0;
	      var v, t, i;
	      var out = {};
	      for (i = 0; i < 3; i++) {
	        if (denorm && i === 2 && point.z === undefined) {
	          continue;
	        }
	        if (i === 0) {
	          v = xin;
	          if ("ew".indexOf(crs.axis[i]) !== -1) {
	            t = 'x';
	          } else {
	            t = 'y';
	          }
	
	        }
	        else if (i === 1) {
	          v = yin;
	          if ("ns".indexOf(crs.axis[i]) !== -1) {
	            t = 'y';
	          } else {
	            t = 'x';
	          }
	        }
	        else {
	          v = zin;
	          t = 'z';
	        }
	        switch (crs.axis[i]) {
	        case 'e':
	        case 'w':
	        case 'n':
	        case 's':
	          out[t] = v;
	          break;
	        case 'u':
	          if (point[t] !== undefined) {
	            out.z = v;
	          }
	          break;
	        case 'd':
	          if (point[t] !== undefined) {
	            out.z = -v;
	          }
	          break;
	        default:
	          //console.log("ERROR: unknow axis ("+crs.axis[i]+") - check definition of "+crs.projName);
	          return null;
	        }
	      }
	      return out;
	    };
	
	    var toPoint = function (array){
	      var out = {
	        x: array[0],
	        y: array[1]
	      };
	      if (array.length>2) {
	        out.z = array[2];
	      }
	      if (array.length>3) {
	        out.m = array[3];
	      }
	      return out;
	    };
	
	    var checkSanity = function (point) {
	      checkCoord(point.x);
	      checkCoord(point.y);
	    };
	    function checkCoord(num) {
	      if (typeof Number.isFinite === 'function') {
	        if (Number.isFinite(num)) {
	          return;
	        }
	        throw new TypeError('coordinates must be finite numbers');
	      }
	      if (typeof num !== 'number' || num !== num || !isFinite(num)) {
	        throw new TypeError('coordinates must be finite numbers');
	      }
	    }
	
	    function checkNotWGS(source, dest) {
	      return ((source.datum.datum_type === PJD_3PARAM || source.datum.datum_type === PJD_7PARAM) && dest.datumCode !== 'WGS84') || ((dest.datum.datum_type === PJD_3PARAM || dest.datum.datum_type === PJD_7PARAM) && source.datumCode !== 'WGS84');
	    }
	
	    function transform(source, dest, point) {
	      var wgs84;
	      if (Array.isArray(point)) {
	        point = toPoint(point);
	      }
	      checkSanity(point);
	      // Workaround for datum shifts towgs84, if either source or destination projection is not wgs84
	      if (source.datum && dest.datum && checkNotWGS(source, dest)) {
	        wgs84 = new Projection('WGS84');
	        point = transform(source, wgs84, point);
	        source = wgs84;
	      }
	      // DGR, 2010/11/12
	      if (source.axis !== 'enu') {
	        point = adjust_axis(source, false, point);
	      }
	      // Transform source points to long/lat, if they aren't already.
	      if (source.projName === 'longlat') {
	        point = {
	          x: point.x * D2R,
	          y: point.y * D2R,
	          z: point.z || 0
	        };
	      } else {
	        if (source.to_meter) {
	          point = {
	            x: point.x * source.to_meter,
	            y: point.y * source.to_meter,
	            z: point.z || 0
	          };
	        }
	        point = source.inverse(point); // Convert Cartesian to longlat
	        if (!point) {
	          return;
	        }
	      }
	      // Adjust for the prime meridian if necessary
	      if (source.from_greenwich) {
	        point.x += source.from_greenwich;
	      }
	
	      // Convert datums if needed, and if possible.
	      point = datum_transform(source.datum, dest.datum, point);
	
	      // Adjust for the prime meridian if necessary
	      if (dest.from_greenwich) {
	        point = {
	          x: point.x - dest.from_greenwich,
	          y: point.y,
	          z: point.z || 0
	        };
	      }
	
	      if (dest.projName === 'longlat') {
	        // convert radians to decimal degrees
	        point = {
	          x: point.x * R2D,
	          y: point.y * R2D,
	          z: point.z || 0
	        };
	      } else { // else project
	        point = dest.forward(point);
	        if (dest.to_meter) {
	          point = {
	            x: point.x / dest.to_meter,
	            y: point.y / dest.to_meter,
	            z: point.z || 0
	          };
	        }
	      }
	
	      // DGR, 2010/11/12
	      if (dest.axis !== 'enu') {
	        return adjust_axis(dest, true, point);
	      }
	
	      return point;
	    }
	
	    var wgs84 = Projection('WGS84');
	
	    function transformer(from, to, coords) {
	      var transformedArray, out, keys;
	      if (Array.isArray(coords)) {
	        transformedArray = transform(from, to, coords) || {x: NaN, y: NaN};
	        if (coords.length > 2) {
	          if ((typeof from.name !== 'undefined' && from.name === 'geocent') || (typeof to.name !== 'undefined' && to.name === 'geocent')) {
	            if (typeof transformedArray.z === 'number') {
	              return [transformedArray.x, transformedArray.y, transformedArray.z].concat(coords.splice(3));
	            } else {
	              return [transformedArray.x, transformedArray.y, coords[2]].concat(coords.splice(3));
	            }
	          } else {
	            return [transformedArray.x, transformedArray.y].concat(coords.splice(2));
	          }
	        } else {
	          return [transformedArray.x, transformedArray.y];
	        }
	      } else {
	        out = transform(from, to, coords);
	        keys = Object.keys(coords);
	        if (keys.length === 2) {
	          return out;
	        }
	        keys.forEach(function (key) {
	          if ((typeof from.name !== 'undefined' && from.name === 'geocent') || (typeof to.name !== 'undefined' && to.name === 'geocent')) {
	            if (key === 'x' || key === 'y' || key === 'z') {
	              return;
	            }
	          } else {
	            if (key === 'x' || key === 'y') {
	              return;
	            }
	          }
	          out[key] = coords[key];
	        });
	        return out;
	      }
	    }
	
	    function checkProj(item) {
	      if (item instanceof Projection) {
	        return item;
	      }
	      if (item.oProj) {
	        return item.oProj;
	      }
	      return Projection(item);
	    }
	
	    function proj4$1(fromProj, toProj, coord) {
	      fromProj = checkProj(fromProj);
	      var single = false;
	      var obj;
	      if (typeof toProj === 'undefined') {
	        toProj = fromProj;
	        fromProj = wgs84;
	        single = true;
	      } else if (typeof toProj.x !== 'undefined' || Array.isArray(toProj)) {
	        coord = toProj;
	        toProj = fromProj;
	        fromProj = wgs84;
	        single = true;
	      }
	      toProj = checkProj(toProj);
	      if (coord) {
	        return transformer(fromProj, toProj, coord);
	      } else {
	        obj = {
	          forward: function (coords) {
	            return transformer(fromProj, toProj, coords);
	          },
	          inverse: function (coords) {
	            return transformer(toProj, fromProj, coords);
	          }
	        };
	        if (single) {
	          obj.oProj = toProj;
	        }
	        return obj;
	      }
	    }
	
	    /**
	     * UTM zones are grouped, and assigned to one of a group of 6
	     * sets.
	     *
	     * {int} @private
	     */
	    var NUM_100K_SETS = 6;
	
	    /**
	     * The column letters (for easting) of the lower left value, per
	     * set.
	     *
	     * {string} @private
	     */
	    var SET_ORIGIN_COLUMN_LETTERS = 'AJSAJS';
	
	    /**
	     * The row letters (for northing) of the lower left value, per
	     * set.
	     *
	     * {string} @private
	     */
	    var SET_ORIGIN_ROW_LETTERS = 'AFAFAF';
	
	    var A = 65; // A
	    var I = 73; // I
	    var O = 79; // O
	    var V = 86; // V
	    var Z = 90; // Z
	    var mgrs = {
	      forward: forward$1,
	      inverse: inverse$1,
	      toPoint: toPoint$1
	    };
	    /**
	     * Conversion of lat/lon to MGRS.
	     *
	     * @param {object} ll Object literal with lat and lon properties on a
	     *     WGS84 ellipsoid.
	     * @param {int} accuracy Accuracy in digits (5 for 1 m, 4 for 10 m, 3 for
	     *      100 m, 2 for 1000 m or 1 for 10000 m). Optional, default is 5.
	     * @return {string} the MGRS string for the given location and accuracy.
	     */
	    function forward$1(ll, accuracy) {
	      accuracy = accuracy || 5; // default accuracy 1m
	      return encode(LLtoUTM({
	        lat: ll[1],
	        lon: ll[0]
	      }), accuracy);
	    }
	
	    /**
	     * Conversion of MGRS to lat/lon.
	     *
	     * @param {string} mgrs MGRS string.
	     * @return {array} An array with left (longitude), bottom (latitude), right
	     *     (longitude) and top (latitude) values in WGS84, representing the
	     *     bounding box for the provided MGRS reference.
	     */
	    function inverse$1(mgrs) {
	      var bbox = UTMtoLL(decode(mgrs.toUpperCase()));
	      if (bbox.lat && bbox.lon) {
	        return [bbox.lon, bbox.lat, bbox.lon, bbox.lat];
	      }
	      return [bbox.left, bbox.bottom, bbox.right, bbox.top];
	    }
	
	    function toPoint$1(mgrs) {
	      var bbox = UTMtoLL(decode(mgrs.toUpperCase()));
	      if (bbox.lat && bbox.lon) {
	        return [bbox.lon, bbox.lat];
	      }
	      return [(bbox.left + bbox.right) / 2, (bbox.top + bbox.bottom) / 2];
	    }
	    /**
	     * Conversion from degrees to radians.
	     *
	     * @private
	     * @param {number} deg the angle in degrees.
	     * @return {number} the angle in radians.
	     */
	    function degToRad(deg) {
	      return (deg * (Math.PI / 180.0));
	    }
	
	    /**
	     * Conversion from radians to degrees.
	     *
	     * @private
	     * @param {number} rad the angle in radians.
	     * @return {number} the angle in degrees.
	     */
	    function radToDeg(rad) {
	      return (180.0 * (rad / Math.PI));
	    }
	
	    /**
	     * Converts a set of Longitude and Latitude co-ordinates to UTM
	     * using the WGS84 ellipsoid.
	     *
	     * @private
	     * @param {object} ll Object literal with lat and lon properties
	     *     representing the WGS84 coordinate to be converted.
	     * @return {object} Object literal containing the UTM value with easting,
	     *     northing, zoneNumber and zoneLetter properties, and an optional
	     *     accuracy property in digits. Returns null if the conversion failed.
	     */
	    function LLtoUTM(ll) {
	      var Lat = ll.lat;
	      var Long = ll.lon;
	      var a = 6378137.0; //ellip.radius;
	      var eccSquared = 0.00669438; //ellip.eccsq;
	      var k0 = 0.9996;
	      var LongOrigin;
	      var eccPrimeSquared;
	      var N, T, C, A, M;
	      var LatRad = degToRad(Lat);
	      var LongRad = degToRad(Long);
	      var LongOriginRad;
	      var ZoneNumber;
	      // (int)
	      ZoneNumber = Math.floor((Long + 180) / 6) + 1;
	
	      //Make sure the longitude 180.00 is in Zone 60
	      if (Long === 180) {
	        ZoneNumber = 60;
	      }
	
	      // Special zone for Norway
	      if (Lat >= 56.0 && Lat < 64.0 && Long >= 3.0 && Long < 12.0) {
	        ZoneNumber = 32;
	      }
	
	      // Special zones for Svalbard
	      if (Lat >= 72.0 && Lat < 84.0) {
	        if (Long >= 0.0 && Long < 9.0) {
	          ZoneNumber = 31;
	        }
	        else if (Long >= 9.0 && Long < 21.0) {
	          ZoneNumber = 33;
	        }
	        else if (Long >= 21.0 && Long < 33.0) {
	          ZoneNumber = 35;
	        }
	        else if (Long >= 33.0 && Long < 42.0) {
	          ZoneNumber = 37;
	        }
	      }
	
	      LongOrigin = (ZoneNumber - 1) * 6 - 180 + 3; //+3 puts origin
	      // in middle of
	      // zone
	      LongOriginRad = degToRad(LongOrigin);
	
	      eccPrimeSquared = (eccSquared) / (1 - eccSquared);
	
	      N = a / Math.sqrt(1 - eccSquared * Math.sin(LatRad) * Math.sin(LatRad));
	      T = Math.tan(LatRad) * Math.tan(LatRad);
	      C = eccPrimeSquared * Math.cos(LatRad) * Math.cos(LatRad);
	      A = Math.cos(LatRad) * (LongRad - LongOriginRad);
	
	      M = a * ((1 - eccSquared / 4 - 3 * eccSquared * eccSquared / 64 - 5 * eccSquared * eccSquared * eccSquared / 256) * LatRad - (3 * eccSquared / 8 + 3 * eccSquared * eccSquared / 32 + 45 * eccSquared * eccSquared * eccSquared / 1024) * Math.sin(2 * LatRad) + (15 * eccSquared * eccSquared / 256 + 45 * eccSquared * eccSquared * eccSquared / 1024) * Math.sin(4 * LatRad) - (35 * eccSquared * eccSquared * eccSquared / 3072) * Math.sin(6 * LatRad));
	
	      var UTMEasting = (k0 * N * (A + (1 - T + C) * A * A * A / 6.0 + (5 - 18 * T + T * T + 72 * C - 58 * eccPrimeSquared) * A * A * A * A * A / 120.0) + 500000.0);
	
	      var UTMNorthing = (k0 * (M + N * Math.tan(LatRad) * (A * A / 2 + (5 - T + 9 * C + 4 * C * C) * A * A * A * A / 24.0 + (61 - 58 * T + T * T + 600 * C - 330 * eccPrimeSquared) * A * A * A * A * A * A / 720.0)));
	      if (Lat < 0.0) {
	        UTMNorthing += 10000000.0; //10000000 meter offset for
	        // southern hemisphere
	      }
	
	      return {
	        northing: Math.round(UTMNorthing),
	        easting: Math.round(UTMEasting),
	        zoneNumber: ZoneNumber,
	        zoneLetter: getLetterDesignator(Lat)
	      };
	    }
	
	    /**
	     * Converts UTM coords to lat/long, using the WGS84 ellipsoid. This is a convenience
	     * class where the Zone can be specified as a single string eg."60N" which
	     * is then broken down into the ZoneNumber and ZoneLetter.
	     *
	     * @private
	     * @param {object} utm An object literal with northing, easting, zoneNumber
	     *     and zoneLetter properties. If an optional accuracy property is
	     *     provided (in meters), a bounding box will be returned instead of
	     *     latitude and longitude.
	     * @return {object} An object literal containing either lat and lon values
	     *     (if no accuracy was provided), or top, right, bottom and left values
	     *     for the bounding box calculated according to the provided accuracy.
	     *     Returns null if the conversion failed.
	     */
	    function UTMtoLL(utm) {
	
	      var UTMNorthing = utm.northing;
	      var UTMEasting = utm.easting;
	      var zoneLetter = utm.zoneLetter;
	      var zoneNumber = utm.zoneNumber;
	      // check the ZoneNummber is valid
	      if (zoneNumber < 0 || zoneNumber > 60) {
	        return null;
	      }
	
	      var k0 = 0.9996;
	      var a = 6378137.0; //ellip.radius;
	      var eccSquared = 0.00669438; //ellip.eccsq;
	      var eccPrimeSquared;
	      var e1 = (1 - Math.sqrt(1 - eccSquared)) / (1 + Math.sqrt(1 - eccSquared));
	      var N1, T1, C1, R1, D, M;
	      var LongOrigin;
	      var mu, phi1Rad;
	
	      // remove 500,000 meter offset for longitude
	      var x = UTMEasting - 500000.0;
	      var y = UTMNorthing;
	
	      // We must know somehow if we are in the Northern or Southern
	      // hemisphere, this is the only time we use the letter So even
	      // if the Zone letter isn't exactly correct it should indicate
	      // the hemisphere correctly
	      if (zoneLetter < 'N') {
	        y -= 10000000.0; // remove 10,000,000 meter offset used
	        // for southern hemisphere
	      }
	
	      // There are 60 zones with zone 1 being at West -180 to -174
	      LongOrigin = (zoneNumber - 1) * 6 - 180 + 3; // +3 puts origin
	      // in middle of
	      // zone
	
	      eccPrimeSquared = (eccSquared) / (1 - eccSquared);
	
	      M = y / k0;
	      mu = M / (a * (1 - eccSquared / 4 - 3 * eccSquared * eccSquared / 64 - 5 * eccSquared * eccSquared * eccSquared / 256));
	
	      phi1Rad = mu + (3 * e1 / 2 - 27 * e1 * e1 * e1 / 32) * Math.sin(2 * mu) + (21 * e1 * e1 / 16 - 55 * e1 * e1 * e1 * e1 / 32) * Math.sin(4 * mu) + (151 * e1 * e1 * e1 / 96) * Math.sin(6 * mu);
	      // double phi1 = ProjMath.radToDeg(phi1Rad);
	
	      N1 = a / Math.sqrt(1 - eccSquared * Math.sin(phi1Rad) * Math.sin(phi1Rad));
	      T1 = Math.tan(phi1Rad) * Math.tan(phi1Rad);
	      C1 = eccPrimeSquared * Math.cos(phi1Rad) * Math.cos(phi1Rad);
	      R1 = a * (1 - eccSquared) / Math.pow(1 - eccSquared * Math.sin(phi1Rad) * Math.sin(phi1Rad), 1.5);
	      D = x / (N1 * k0);
	
	      var lat = phi1Rad - (N1 * Math.tan(phi1Rad) / R1) * (D * D / 2 - (5 + 3 * T1 + 10 * C1 - 4 * C1 * C1 - 9 * eccPrimeSquared) * D * D * D * D / 24 + (61 + 90 * T1 + 298 * C1 + 45 * T1 * T1 - 252 * eccPrimeSquared - 3 * C1 * C1) * D * D * D * D * D * D / 720);
	      lat = radToDeg(lat);
	
	      var lon = (D - (1 + 2 * T1 + C1) * D * D * D / 6 + (5 - 2 * C1 + 28 * T1 - 3 * C1 * C1 + 8 * eccPrimeSquared + 24 * T1 * T1) * D * D * D * D * D / 120) / Math.cos(phi1Rad);
	      lon = LongOrigin + radToDeg(lon);
	
	      var result;
	      if (utm.accuracy) {
	        var topRight = UTMtoLL({
	          northing: utm.northing + utm.accuracy,
	          easting: utm.easting + utm.accuracy,
	          zoneLetter: utm.zoneLetter,
	          zoneNumber: utm.zoneNumber
	        });
	        result = {
	          top: topRight.lat,
	          right: topRight.lon,
	          bottom: lat,
	          left: lon
	        };
	      }
	      else {
	        result = {
	          lat: lat,
	          lon: lon
	        };
	      }
	      return result;
	    }
	
	    /**
	     * Calculates the MGRS letter designator for the given latitude.
	     *
	     * @private
	     * @param {number} lat The latitude in WGS84 to get the letter designator
	     *     for.
	     * @return {char} The letter designator.
	     */
	    function getLetterDesignator(lat) {
	      //This is here as an error flag to show that the Latitude is
	      //outside MGRS limits
	      var LetterDesignator = 'Z';
	
	      if ((84 >= lat) && (lat >= 72)) {
	        LetterDesignator = 'X';
	      }
	      else if ((72 > lat) && (lat >= 64)) {
	        LetterDesignator = 'W';
	      }
	      else if ((64 > lat) && (lat >= 56)) {
	        LetterDesignator = 'V';
	      }
	      else if ((56 > lat) && (lat >= 48)) {
	        LetterDesignator = 'U';
	      }
	      else if ((48 > lat) && (lat >= 40)) {
	        LetterDesignator = 'T';
	      }
	      else if ((40 > lat) && (lat >= 32)) {
	        LetterDesignator = 'S';
	      }
	      else if ((32 > lat) && (lat >= 24)) {
	        LetterDesignator = 'R';
	      }
	      else if ((24 > lat) && (lat >= 16)) {
	        LetterDesignator = 'Q';
	      }
	      else if ((16 > lat) && (lat >= 8)) {
	        LetterDesignator = 'P';
	      }
	      else if ((8 > lat) && (lat >= 0)) {
	        LetterDesignator = 'N';
	      }
	      else if ((0 > lat) && (lat >= -8)) {
	        LetterDesignator = 'M';
	      }
	      else if ((-8 > lat) && (lat >= -16)) {
	        LetterDesignator = 'L';
	      }
	      else if ((-16 > lat) && (lat >= -24)) {
	        LetterDesignator = 'K';
	      }
	      else if ((-24 > lat) && (lat >= -32)) {
	        LetterDesignator = 'J';
	      }
	      else if ((-32 > lat) && (lat >= -40)) {
	        LetterDesignator = 'H';
	      }
	      else if ((-40 > lat) && (lat >= -48)) {
	        LetterDesignator = 'G';
	      }
	      else if ((-48 > lat) && (lat >= -56)) {
	        LetterDesignator = 'F';
	      }
	      else if ((-56 > lat) && (lat >= -64)) {
	        LetterDesignator = 'E';
	      }
	      else if ((-64 > lat) && (lat >= -72)) {
	        LetterDesignator = 'D';
	      }
	      else if ((-72 > lat) && (lat >= -80)) {
	        LetterDesignator = 'C';
	      }
	      return LetterDesignator;
	    }
	
	    /**
	     * Encodes a UTM location as MGRS string.
	     *
	     * @private
	     * @param {object} utm An object literal with easting, northing,
	     *     zoneLetter, zoneNumber
	     * @param {number} accuracy Accuracy in digits (1-5).
	     * @return {string} MGRS string for the given UTM location.
	     */
	    function encode(utm, accuracy) {
	      // prepend with leading zeroes
	      var seasting = "00000" + utm.easting,
	        snorthing = "00000" + utm.northing;
	
	      return utm.zoneNumber + utm.zoneLetter + get100kID(utm.easting, utm.northing, utm.zoneNumber) + seasting.substr(seasting.length - 5, accuracy) + snorthing.substr(snorthing.length - 5, accuracy);
	    }
	
	    /**
	     * Get the two letter 100k designator for a given UTM easting,
	     * northing and zone number value.
	     *
	     * @private
	     * @param {number} easting
	     * @param {number} northing
	     * @param {number} zoneNumber
	     * @return the two letter 100k designator for the given UTM location.
	     */
	    function get100kID(easting, northing, zoneNumber) {
	      var setParm = get100kSetForZone(zoneNumber);
	      var setColumn = Math.floor(easting / 100000);
	      var setRow = Math.floor(northing / 100000) % 20;
	      return getLetter100kID(setColumn, setRow, setParm);
	    }
	
	    /**
	     * Given a UTM zone number, figure out the MGRS 100K set it is in.
	     *
	     * @private
	     * @param {number} i An UTM zone number.
	     * @return {number} the 100k set the UTM zone is in.
	     */
	    function get100kSetForZone(i) {
	      var setParm = i % NUM_100K_SETS;
	      if (setParm === 0) {
	        setParm = NUM_100K_SETS;
	      }
	
	      return setParm;
	    }
	
	    /**
	     * Get the two-letter MGRS 100k designator given information
	     * translated from the UTM northing, easting and zone number.
	     *
	     * @private
	     * @param {number} column the column index as it relates to the MGRS
	     *        100k set spreadsheet, created from the UTM easting.
	     *        Values are 1-8.
	     * @param {number} row the row index as it relates to the MGRS 100k set
	     *        spreadsheet, created from the UTM northing value. Values
	     *        are from 0-19.
	     * @param {number} parm the set block, as it relates to the MGRS 100k set
	     *        spreadsheet, created from the UTM zone. Values are from
	     *        1-60.
	     * @return two letter MGRS 100k code.
	     */
	    function getLetter100kID(column, row, parm) {
	      // colOrigin and rowOrigin are the letters at the origin of the set
	      var index = parm - 1;
	      var colOrigin = SET_ORIGIN_COLUMN_LETTERS.charCodeAt(index);
	      var rowOrigin = SET_ORIGIN_ROW_LETTERS.charCodeAt(index);
	
	      // colInt and rowInt are the letters to build to return
	      var colInt = colOrigin + column - 1;
	      var rowInt = rowOrigin + row;
	      var rollover = false;
	
	      if (colInt > Z) {
	        colInt = colInt - Z + A - 1;
	        rollover = true;
	      }
	
	      if (colInt === I || (colOrigin < I && colInt > I) || ((colInt > I || colOrigin < I) && rollover)) {
	        colInt++;
	      }
	
	      if (colInt === O || (colOrigin < O && colInt > O) || ((colInt > O || colOrigin < O) && rollover)) {
	        colInt++;
	
	        if (colInt === I) {
	          colInt++;
	        }
	      }
	
	      if (colInt > Z) {
	        colInt = colInt - Z + A - 1;
	      }
	
	      if (rowInt > V) {
	        rowInt = rowInt - V + A - 1;
	        rollover = true;
	      }
	      else {
	        rollover = false;
	      }
	
	      if (((rowInt === I) || ((rowOrigin < I) && (rowInt > I))) || (((rowInt > I) || (rowOrigin < I)) && rollover)) {
	        rowInt++;
	      }
	
	      if (((rowInt === O) || ((rowOrigin < O) && (rowInt > O))) || (((rowInt > O) || (rowOrigin < O)) && rollover)) {
	        rowInt++;
	
	        if (rowInt === I) {
	          rowInt++;
	        }
	      }
	
	      if (rowInt > V) {
	        rowInt = rowInt - V + A - 1;
	      }
	
	      var twoLetter = String.fromCharCode(colInt) + String.fromCharCode(rowInt);
	      return twoLetter;
	    }
	
	    /**
	     * Decode the UTM parameters from a MGRS string.
	     *
	     * @private
	     * @param {string} mgrsString an UPPERCASE coordinate string is expected.
	     * @return {object} An object literal with easting, northing, zoneLetter,
	     *     zoneNumber and accuracy (in meters) properties.
	     */
	    function decode(mgrsString) {
	
	      if (mgrsString && mgrsString.length === 0) {
	        throw ("MGRSPoint coverting from nothing");
	      }
	
	      var length = mgrsString.length;
	
	      var hunK = null;
	      var sb = "";
	      var testChar;
	      var i = 0;
	
	      // get Zone number
	      while (!(/[A-Z]/).test(testChar = mgrsString.charAt(i))) {
	        if (i >= 2) {
	          throw ("MGRSPoint bad conversion from: " + mgrsString);
	        }
	        sb += testChar;
	        i++;
	      }
	
	      var zoneNumber = parseInt(sb, 10);
	
	      if (i === 0 || i + 3 > length) {
	        // A good MGRS string has to be 4-5 digits long,
	        // ##AAA/#AAA at least.
	        throw ("MGRSPoint bad conversion from: " + mgrsString);
	      }
	
	      var zoneLetter = mgrsString.charAt(i++);
	
	      // Should we check the zone letter here? Why not.
	      if (zoneLetter <= 'A' || zoneLetter === 'B' || zoneLetter === 'Y' || zoneLetter >= 'Z' || zoneLetter === 'I' || zoneLetter === 'O') {
	        throw ("MGRSPoint zone letter " + zoneLetter + " not handled: " + mgrsString);
	      }
	
	      hunK = mgrsString.substring(i, i += 2);
	
	      var set = get100kSetForZone(zoneNumber);
	
	      var east100k = getEastingFromChar(hunK.charAt(0), set);
	      var north100k = getNorthingFromChar(hunK.charAt(1), set);
	
	      // We have a bug where the northing may be 2000000 too low.
	      // How
	      // do we know when to roll over?
	
	      while (north100k < getMinNorthing(zoneLetter)) {
	        north100k += 2000000;
	      }
	
	      // calculate the char index for easting/northing separator
	      var remainder = length - i;
	
	      if (remainder % 2 !== 0) {
	        throw ("MGRSPoint has to have an even number \nof digits after the zone letter and two 100km letters - front \nhalf for easting meters, second half for \nnorthing meters" + mgrsString);
	      }
	
	      var sep = remainder / 2;
	
	      var sepEasting = 0.0;
	      var sepNorthing = 0.0;
	      var accuracyBonus, sepEastingString, sepNorthingString, easting, northing;
	      if (sep > 0) {
	        accuracyBonus = 100000.0 / Math.pow(10, sep);
	        sepEastingString = mgrsString.substring(i, i + sep);
	        sepEasting = parseFloat(sepEastingString) * accuracyBonus;
	        sepNorthingString = mgrsString.substring(i + sep);
	        sepNorthing = parseFloat(sepNorthingString) * accuracyBonus;
	      }
	
	      easting = sepEasting + east100k;
	      northing = sepNorthing + north100k;
	
	      return {
	        easting: easting,
	        northing: northing,
	        zoneLetter: zoneLetter,
	        zoneNumber: zoneNumber,
	        accuracy: accuracyBonus
	      };
	    }
	
	    /**
	     * Given the first letter from a two-letter MGRS 100k zone, and given the
	     * MGRS table set for the zone number, figure out the easting value that
	     * should be added to the other, secondary easting value.
	     *
	     * @private
	     * @param {char} e The first letter from a two-letter MGRS 100´k zone.
	     * @param {number} set The MGRS table set for the zone number.
	     * @return {number} The easting value for the given letter and set.
	     */
	    function getEastingFromChar(e, set) {
	      // colOrigin is the letter at the origin of the set for the
	      // column
	      var curCol = SET_ORIGIN_COLUMN_LETTERS.charCodeAt(set - 1);
	      var eastingValue = 100000.0;
	      var rewindMarker = false;
	
	      while (curCol !== e.charCodeAt(0)) {
	        curCol++;
	        if (curCol === I) {
	          curCol++;
	        }
	        if (curCol === O) {
	          curCol++;
	        }
	        if (curCol > Z) {
	          if (rewindMarker) {
	            throw ("Bad character: " + e);
	          }
	          curCol = A;
	          rewindMarker = true;
	        }
	        eastingValue += 100000.0;
	      }
	
	      return eastingValue;
	    }
	
	    /**
	     * Given the second letter from a two-letter MGRS 100k zone, and given the
	     * MGRS table set for the zone number, figure out the northing value that
	     * should be added to the other, secondary northing value. You have to
	     * remember that Northings are determined from the equator, and the vertical
	     * cycle of letters mean a 2000000 additional northing meters. This happens
	     * approx. every 18 degrees of latitude. This method does *NOT* count any
	     * additional northings. You have to figure out how many 2000000 meters need
	     * to be added for the zone letter of the MGRS coordinate.
	     *
	     * @private
	     * @param {char} n Second letter of the MGRS 100k zone
	     * @param {number} set The MGRS table set number, which is dependent on the
	     *     UTM zone number.
	     * @return {number} The northing value for the given letter and set.
	     */
	    function getNorthingFromChar(n, set) {
	
	      if (n > 'V') {
	        throw ("MGRSPoint given invalid Northing " + n);
	      }
	
	      // rowOrigin is the letter at the origin of the set for the
	      // column
	      var curRow = SET_ORIGIN_ROW_LETTERS.charCodeAt(set - 1);
	      var northingValue = 0.0;
	      var rewindMarker = false;
	
	      while (curRow !== n.charCodeAt(0)) {
	        curRow++;
	        if (curRow === I) {
	          curRow++;
	        }
	        if (curRow === O) {
	          curRow++;
	        }
	        // fixing a bug making whole application hang in this loop
	        // when 'n' is a wrong character
	        if (curRow > V) {
	          if (rewindMarker) { // making sure that this loop ends
	            throw ("Bad character: " + n);
	          }
	          curRow = A;
	          rewindMarker = true;
	        }
	        northingValue += 100000.0;
	      }
	
	      return northingValue;
	    }
	
	    /**
	     * The function getMinNorthing returns the minimum northing value of a MGRS
	     * zone.
	     *
	     * Ported from Geotrans' c Lattitude_Band_Value structure table.
	     *
	     * @private
	     * @param {char} zoneLetter The MGRS zone to get the min northing for.
	     * @return {number}
	     */
	    function getMinNorthing(zoneLetter) {
	      var northing;
	      switch (zoneLetter) {
	      case 'C':
	        northing = 1100000.0;
	        break;
	      case 'D':
	        northing = 2000000.0;
	        break;
	      case 'E':
	        northing = 2800000.0;
	        break;
	      case 'F':
	        northing = 3700000.0;
	        break;
	      case 'G':
	        northing = 4600000.0;
	        break;
	      case 'H':
	        northing = 5500000.0;
	        break;
	      case 'J':
	        northing = 6400000.0;
	        break;
	      case 'K':
	        northing = 7300000.0;
	        break;
	      case 'L':
	        northing = 8200000.0;
	        break;
	      case 'M':
	        northing = 9100000.0;
	        break;
	      case 'N':
	        northing = 0.0;
	        break;
	      case 'P':
	        northing = 800000.0;
	        break;
	      case 'Q':
	        northing = 1700000.0;
	        break;
	      case 'R':
	        northing = 2600000.0;
	        break;
	      case 'S':
	        northing = 3500000.0;
	        break;
	      case 'T':
	        northing = 4400000.0;
	        break;
	      case 'U':
	        northing = 5300000.0;
	        break;
	      case 'V':
	        northing = 6200000.0;
	        break;
	      case 'W':
	        northing = 7000000.0;
	        break;
	      case 'X':
	        northing = 7900000.0;
	        break;
	      default:
	        northing = -1.0;
	      }
	      if (northing >= 0.0) {
	        return northing;
	      }
	      else {
	        throw ("Invalid zone letter: " + zoneLetter);
	      }
	
	    }
	
	    function Point(x, y, z) {
	      if (!(this instanceof Point)) {
	        return new Point(x, y, z);
	      }
	      if (Array.isArray(x)) {
	        this.x = x[0];
	        this.y = x[1];
	        this.z = x[2] || 0.0;
	      } else if(typeof x === 'object') {
	        this.x = x.x;
	        this.y = x.y;
	        this.z = x.z || 0.0;
	      } else if (typeof x === 'string' && typeof y === 'undefined') {
	        var coords = x.split(',');
	        this.x = parseFloat(coords[0], 10);
	        this.y = parseFloat(coords[1], 10);
	        this.z = parseFloat(coords[2], 10) || 0.0;
	      } else {
	        this.x = x;
	        this.y = y;
	        this.z = z || 0.0;
	      }
	      console.warn('proj4.Point will be removed in version 3, use proj4.toPoint');
	    }
	
	    Point.fromMGRS = function(mgrsStr) {
	      return new Point(toPoint$1(mgrsStr));
	    };
	    Point.prototype.toMGRS = function(accuracy) {
	      return forward$1([this.x, this.y], accuracy);
	    };
	
	    var C00 = 1;
	    var C02 = 0.25;
	    var C04 = 0.046875;
	    var C06 = 0.01953125;
	    var C08 = 0.01068115234375;
	    var C22 = 0.75;
	    var C44 = 0.46875;
	    var C46 = 0.01302083333333333333;
	    var C48 = 0.00712076822916666666;
	    var C66 = 0.36458333333333333333;
	    var C68 = 0.00569661458333333333;
	    var C88 = 0.3076171875;
	
	    var pj_enfn = function(es) {
	      var en = [];
	      en[0] = C00 - es * (C02 + es * (C04 + es * (C06 + es * C08)));
	      en[1] = es * (C22 - es * (C04 + es * (C06 + es * C08)));
	      var t = es * es;
	      en[2] = t * (C44 - es * (C46 + es * C48));
	      t *= es;
	      en[3] = t * (C66 - es * C68);
	      en[4] = t * es * C88;
	      return en;
	    };
	
	    var pj_mlfn = function(phi, sphi, cphi, en) {
	      cphi *= sphi;
	      sphi *= sphi;
	      return (en[0] * phi - cphi * (en[1] + sphi * (en[2] + sphi * (en[3] + sphi * en[4]))));
	    };
	
	    var MAX_ITER = 20;
	
	    var pj_inv_mlfn = function(arg, es, en) {
	      var k = 1 / (1 - es);
	      var phi = arg;
	      for (var i = MAX_ITER; i; --i) { /* rarely goes over 2 iterations */
	        var s = Math.sin(phi);
	        var t = 1 - es * s * s;
	        //t = this.pj_mlfn(phi, s, Math.cos(phi), en) - arg;
	        //phi -= t * (t * Math.sqrt(t)) * k;
	        t = (pj_mlfn(phi, s, Math.cos(phi), en) - arg) * (t * Math.sqrt(t)) * k;
	        phi -= t;
	        if (Math.abs(t) < EPSLN) {
	          return phi;
	        }
	      }
	      //..reportError("cass:pj_inv_mlfn: Convergence error");
	      return phi;
	    };
	
	    // Heavily based on this tmerc projection implementation
	    // https://github.com/mbloch/mapshaper-proj/blob/master/src/projections/tmerc.js
	
	    function init$2() {
	      this.x0 = this.x0 !== undefined ? this.x0 : 0;
	      this.y0 = this.y0 !== undefined ? this.y0 : 0;
	      this.long0 = this.long0 !== undefined ? this.long0 : 0;
	      this.lat0 = this.lat0 !== undefined ? this.lat0 : 0;
	
	      if (this.es) {
	        this.en = pj_enfn(this.es);
	        this.ml0 = pj_mlfn(this.lat0, Math.sin(this.lat0), Math.cos(this.lat0), this.en);
	      }
	    }
	
	    /**
	        Transverse Mercator Forward  - long/lat to x/y
	        long/lat in radians
	      */
	    function forward$2(p) {
	      var lon = p.x;
	      var lat = p.y;
	
	      var delta_lon = adjust_lon(lon - this.long0);
	      var con;
	      var x, y;
	      var sin_phi = Math.sin(lat);
	      var cos_phi = Math.cos(lat);
	
	      if (!this.es) {
	        var b = cos_phi * Math.sin(delta_lon);
	
	        if ((Math.abs(Math.abs(b) - 1)) < EPSLN) {
	          return (93);
	        }
	        else {
	          x = 0.5 * this.a * this.k0 * Math.log((1 + b) / (1 - b)) + this.x0;
	          y = cos_phi * Math.cos(delta_lon) / Math.sqrt(1 - Math.pow(b, 2));
	          b = Math.abs(y);
	
	          if (b >= 1) {
	            if ((b - 1) > EPSLN) {
	              return (93);
	            }
	            else {
	              y = 0;
	            }
	          }
	          else {
	            y = Math.acos(y);
	          }
	
	          if (lat < 0) {
	            y = -y;
	          }
	
	          y = this.a * this.k0 * (y - this.lat0) + this.y0;
	        }
	      }
	      else {
	        var al = cos_phi * delta_lon;
	        var als = Math.pow(al, 2);
	        var c = this.ep2 * Math.pow(cos_phi, 2);
	        var cs = Math.pow(c, 2);
	        var tq = Math.abs(cos_phi) > EPSLN ? Math.tan(lat) : 0;
	        var t = Math.pow(tq, 2);
	        var ts = Math.pow(t, 2);
	        con = 1 - this.es * Math.pow(sin_phi, 2);
	        al = al / Math.sqrt(con);
	        var ml = pj_mlfn(lat, sin_phi, cos_phi, this.en);
	
	        x = this.a * (this.k0 * al * (1 +
	          als / 6 * (1 - t + c +
	          als / 20 * (5 - 18 * t + ts + 14 * c - 58 * t * c +
	          als / 42 * (61 + 179 * ts - ts * t - 479 * t))))) +
	          this.x0;
	
	        y = this.a * (this.k0 * (ml - this.ml0 +
	          sin_phi * delta_lon * al / 2 * (1 +
	          als / 12 * (5 - t + 9 * c + 4 * cs +
	          als / 30 * (61 + ts - 58 * t + 270 * c - 330 * t * c +
	          als / 56 * (1385 + 543 * ts - ts * t - 3111 * t)))))) +
	          this.y0;
	      }
	
	      p.x = x;
	      p.y = y;
	
	      return p;
	    }
	
	    /**
	        Transverse Mercator Inverse  -  x/y to long/lat
	      */
	    function inverse$2(p) {
	      var con, phi;
	      var lat, lon;
	      var x = (p.x - this.x0) * (1 / this.a);
	      var y = (p.y - this.y0) * (1 / this.a);
	
	      if (!this.es) {
	        var f = Math.exp(x / this.k0);
	        var g = 0.5 * (f - 1 / f);
	        var temp = this.lat0 + y / this.k0;
	        var h = Math.cos(temp);
	        con = Math.sqrt((1 - Math.pow(h, 2)) / (1 + Math.pow(g, 2)));
	        lat = Math.asin(con);
	
	        if (y < 0) {
	          lat = -lat;
	        }
	
	        if ((g === 0) && (h === 0)) {
	          lon = 0;
	        }
	        else {
	          lon = adjust_lon(Math.atan2(g, h) + this.long0);
	        }
	      }
	      else { // ellipsoidal form
	        con = this.ml0 + y / this.k0;
	        phi = pj_inv_mlfn(con, this.es, this.en);
	
	        if (Math.abs(phi) < HALF_PI) {
	          var sin_phi = Math.sin(phi);
	          var cos_phi = Math.cos(phi);
	          var tan_phi = Math.abs(cos_phi) > EPSLN ? Math.tan(phi) : 0;
	          var c = this.ep2 * Math.pow(cos_phi, 2);
	          var cs = Math.pow(c, 2);
	          var t = Math.pow(tan_phi, 2);
	          var ts = Math.pow(t, 2);
	          con = 1 - this.es * Math.pow(sin_phi, 2);
	          var d = x * Math.sqrt(con) / this.k0;
	          var ds = Math.pow(d, 2);
	          con = con * tan_phi;
	
	          lat = phi - (con * ds / (1 - this.es)) * 0.5 * (1 -
	            ds / 12 * (5 + 3 * t - 9 * c * t + c - 4 * cs -
	            ds / 30 * (61 + 90 * t - 252 * c * t + 45 * ts + 46 * c -
	            ds / 56 * (1385 + 3633 * t + 4095 * ts + 1574 * ts * t))));
	
	          lon = adjust_lon(this.long0 + (d * (1 -
	            ds / 6 * (1 + 2 * t + c -
	            ds / 20 * (5 + 28 * t + 24 * ts + 8 * c * t + 6 * c -
	            ds / 42 * (61 + 662 * t + 1320 * ts + 720 * ts * t)))) / cos_phi));
	        }
	        else {
	          lat = HALF_PI * sign(y);
	          lon = 0;
	        }
	      }
	
	      p.x = lon;
	      p.y = lat;
	
	      return p;
	    }
	
	    var names$3 = ["Transverse_Mercator", "Transverse Mercator", "tmerc"];
	    var tmerc = {
	      init: init$2,
	      forward: forward$2,
	      inverse: inverse$2,
	      names: names$3
	    };
	
	    var sinh = function(x) {
	      var r = Math.exp(x);
	      r = (r - 1 / r) / 2;
	      return r;
	    };
	
	    var hypot = function(x, y) {
	      x = Math.abs(x);
	      y = Math.abs(y);
	      var a = Math.max(x, y);
	      var b = Math.min(x, y) / (a ? a : 1);
	
	      return a * Math.sqrt(1 + Math.pow(b, 2));
	    };
	
	    var log1py = function(x) {
	      var y = 1 + x;
	      var z = y - 1;
	
	      return z === 0 ? x : x * Math.log(y) / z;
	    };
	
	    var asinhy = function(x) {
	      var y = Math.abs(x);
	      y = log1py(y * (1 + y / (hypot(1, y) + 1)));
	
	      return x < 0 ? -y : y;
	    };
	
	    var gatg = function(pp, B) {
	      var cos_2B = 2 * Math.cos(2 * B);
	      var i = pp.length - 1;
	      var h1 = pp[i];
	      var h2 = 0;
	      var h;
	
	      while (--i >= 0) {
	        h = -h2 + cos_2B * h1 + pp[i];
	        h2 = h1;
	        h1 = h;
	      }
	
	      return (B + h * Math.sin(2 * B));
	    };
	
	    var clens = function(pp, arg_r) {
	      var r = 2 * Math.cos(arg_r);
	      var i = pp.length - 1;
	      var hr1 = pp[i];
	      var hr2 = 0;
	      var hr;
	
	      while (--i >= 0) {
	        hr = -hr2 + r * hr1 + pp[i];
	        hr2 = hr1;
	        hr1 = hr;
	      }
	
	      return Math.sin(arg_r) * hr;
	    };
	
	    var cosh = function(x) {
	      var r = Math.exp(x);
	      r = (r + 1 / r) / 2;
	      return r;
	    };
	
	    var clens_cmplx = function(pp, arg_r, arg_i) {
	      var sin_arg_r = Math.sin(arg_r);
	      var cos_arg_r = Math.cos(arg_r);
	      var sinh_arg_i = sinh(arg_i);
	      var cosh_arg_i = cosh(arg_i);
	      var r = 2 * cos_arg_r * cosh_arg_i;
	      var i = -2 * sin_arg_r * sinh_arg_i;
	      var j = pp.length - 1;
	      var hr = pp[j];
	      var hi1 = 0;
	      var hr1 = 0;
	      var hi = 0;
	      var hr2;
	      var hi2;
	
	      while (--j >= 0) {
	        hr2 = hr1;
	        hi2 = hi1;
	        hr1 = hr;
	        hi1 = hi;
	        hr = -hr2 + r * hr1 - i * hi1 + pp[j];
	        hi = -hi2 + i * hr1 + r * hi1;
	      }
	
	      r = sin_arg_r * cosh_arg_i;
	      i = cos_arg_r * sinh_arg_i;
	
	      return [r * hr - i * hi, r * hi + i * hr];
	    };
	
	    // Heavily based on this etmerc projection implementation
	    // https://github.com/mbloch/mapshaper-proj/blob/master/src/projections/etmerc.js
	
	    function init$3() {
	      if (this.es === undefined || this.es <= 0) {
	        throw new Error('incorrect elliptical usage');
	      }
	
	      this.x0 = this.x0 !== undefined ? this.x0 : 0;
	      this.y0 = this.y0 !== undefined ? this.y0 : 0;
	      this.long0 = this.long0 !== undefined ? this.long0 : 0;
	      this.lat0 = this.lat0 !== undefined ? this.lat0 : 0;
	
	      this.cgb = [];
	      this.cbg = [];
	      this.utg = [];
	      this.gtu = [];
	
	      var f = this.es / (1 + Math.sqrt(1 - this.es));
	      var n = f / (2 - f);
	      var np = n;
	
	      this.cgb[0] = n * (2 + n * (-2 / 3 + n * (-2 + n * (116 / 45 + n * (26 / 45 + n * (-2854 / 675 ))))));
	      this.cbg[0] = n * (-2 + n * ( 2 / 3 + n * ( 4 / 3 + n * (-82 / 45 + n * (32 / 45 + n * (4642 / 4725))))));
	
	      np = np * n;
	      this.cgb[1] = np * (7 / 3 + n * (-8 / 5 + n * (-227 / 45 + n * (2704 / 315 + n * (2323 / 945)))));
	      this.cbg[1] = np * (5 / 3 + n * (-16 / 15 + n * ( -13 / 9 + n * (904 / 315 + n * (-1522 / 945)))));
	
	      np = np * n;
	      this.cgb[2] = np * (56 / 15 + n * (-136 / 35 + n * (-1262 / 105 + n * (73814 / 2835))));
	      this.cbg[2] = np * (-26 / 15 + n * (34 / 21 + n * (8 / 5 + n * (-12686 / 2835))));
	
	      np = np * n;
	      this.cgb[3] = np * (4279 / 630 + n * (-332 / 35 + n * (-399572 / 14175)));
	      this.cbg[3] = np * (1237 / 630 + n * (-12 / 5 + n * ( -24832 / 14175)));
	
	      np = np * n;
	      this.cgb[4] = np * (4174 / 315 + n * (-144838 / 6237));
	      this.cbg[4] = np * (-734 / 315 + n * (109598 / 31185));
	
	      np = np * n;
	      this.cgb[5] = np * (601676 / 22275);
	      this.cbg[5] = np * (444337 / 155925);
	
	      np = Math.pow(n, 2);
	      this.Qn = this.k0 / (1 + n) * (1 + np * (1 / 4 + np * (1 / 64 + np / 256)));
	
	      this.utg[0] = n * (-0.5 + n * ( 2 / 3 + n * (-37 / 96 + n * ( 1 / 360 + n * (81 / 512 + n * (-96199 / 604800))))));
	      this.gtu[0] = n * (0.5 + n * (-2 / 3 + n * (5 / 16 + n * (41 / 180 + n * (-127 / 288 + n * (7891 / 37800))))));
	
	      this.utg[1] = np * (-1 / 48 + n * (-1 / 15 + n * (437 / 1440 + n * (-46 / 105 + n * (1118711 / 3870720)))));
	      this.gtu[1] = np * (13 / 48 + n * (-3 / 5 + n * (557 / 1440 + n * (281 / 630 + n * (-1983433 / 1935360)))));
	
	      np = np * n;
	      this.utg[2] = np * (-17 / 480 + n * (37 / 840 + n * (209 / 4480 + n * (-5569 / 90720 ))));
	      this.gtu[2] = np * (61 / 240 + n * (-103 / 140 + n * (15061 / 26880 + n * (167603 / 181440))));
	
	      np = np * n;
	      this.utg[3] = np * (-4397 / 161280 + n * (11 / 504 + n * (830251 / 7257600)));
	      this.gtu[3] = np * (49561 / 161280 + n * (-179 / 168 + n * (6601661 / 7257600)));
	
	      np = np * n;
	      this.utg[4] = np * (-4583 / 161280 + n * (108847 / 3991680));
	      this.gtu[4] = np * (34729 / 80640 + n * (-3418889 / 1995840));
	
	      np = np * n;
	      this.utg[5] = np * (-20648693 / 638668800);
	      this.gtu[5] = np * (212378941 / 319334400);
	
	      var Z = gatg(this.cbg, this.lat0);
	      this.Zb = -this.Qn * (Z + clens(this.gtu, 2 * Z));
	    }
	
	    function forward$3(p) {
	      var Ce = adjust_lon(p.x - this.long0);
	      var Cn = p.y;
	
	      Cn = gatg(this.cbg, Cn);
	      var sin_Cn = Math.sin(Cn);
	      var cos_Cn = Math.cos(Cn);
	      var sin_Ce = Math.sin(Ce);
	      var cos_Ce = Math.cos(Ce);
	
	      Cn = Math.atan2(sin_Cn, cos_Ce * cos_Cn);
	      Ce = Math.atan2(sin_Ce * cos_Cn, hypot(sin_Cn, cos_Cn * cos_Ce));
	      Ce = asinhy(Math.tan(Ce));
	
	      var tmp = clens_cmplx(this.gtu, 2 * Cn, 2 * Ce);
	
	      Cn = Cn + tmp[0];
	      Ce = Ce + tmp[1];
	
	      var x;
	      var y;
	
	      if (Math.abs(Ce) <= 2.623395162778) {
	        x = this.a * (this.Qn * Ce) + this.x0;
	        y = this.a * (this.Qn * Cn + this.Zb) + this.y0;
	      }
	      else {
	        x = Infinity;
	        y = Infinity;
	      }
	
	      p.x = x;
	      p.y = y;
	
	      return p;
	    }
	
	    function inverse$3(p) {
	      var Ce = (p.x - this.x0) * (1 / this.a);
	      var Cn = (p.y - this.y0) * (1 / this.a);
	
	      Cn = (Cn - this.Zb) / this.Qn;
	      Ce = Ce / this.Qn;
	
	      var lon;
	      var lat;
	
	      if (Math.abs(Ce) <= 2.623395162778) {
	        var tmp = clens_cmplx(this.utg, 2 * Cn, 2 * Ce);
	
	        Cn = Cn + tmp[0];
	        Ce = Ce + tmp[1];
	        Ce = Math.atan(sinh(Ce));
	
	        var sin_Cn = Math.sin(Cn);
	        var cos_Cn = Math.cos(Cn);
	        var sin_Ce = Math.sin(Ce);
	        var cos_Ce = Math.cos(Ce);
	
	        Cn = Math.atan2(sin_Cn * cos_Ce, hypot(sin_Ce, cos_Ce * cos_Cn));
	        Ce = Math.atan2(sin_Ce, cos_Ce * cos_Cn);
	
	        lon = adjust_lon(Ce + this.long0);
	        lat = gatg(this.cgb, Cn);
	      }
	      else {
	        lon = Infinity;
	        lat = Infinity;
	      }
	
	      p.x = lon;
	      p.y = lat;
	
	      return p;
	    }
	
	    var names$4 = ["Extended_Transverse_Mercator", "Extended Transverse Mercator", "etmerc"];
	    var etmerc = {
	      init: init$3,
	      forward: forward$3,
	      inverse: inverse$3,
	      names: names$4
	    };
	
	    var adjust_zone = function(zone, lon) {
	      if (zone === undefined) {
	        zone = Math.floor((adjust_lon(lon) + Math.PI) * 30 / Math.PI) + 1;
	
	        if (zone < 0) {
	          return 0;
	        } else if (zone > 60) {
	          return 60;
	        }
	      }
	      return zone;
	    };
	
	    var dependsOn = 'etmerc';
	    function init$4() {
	      var zone = adjust_zone(this.zone, this.long0);
	      if (zone === undefined) {
	        throw new Error('unknown utm zone');
	      }
	      this.lat0 = 0;
	      this.long0 =  ((6 * Math.abs(zone)) - 183) * D2R;
	      this.x0 = 500000;
	      this.y0 = this.utmSouth ? 10000000 : 0;
	      this.k0 = 0.9996;
	
	      etmerc.init.apply(this);
	      this.forward = etmerc.forward;
	      this.inverse = etmerc.inverse;
	    }
	
	    var names$5 = ["Universal Transverse Mercator System", "utm"];
	    var utm = {
	      init: init$4,
	      names: names$5,
	      dependsOn: dependsOn
	    };
	
	    var srat = function(esinp, exp) {
	      return (Math.pow((1 - esinp) / (1 + esinp), exp));
	    };
	
	    var MAX_ITER$1 = 20;
	    function init$6() {
	      var sphi = Math.sin(this.lat0);
	      var cphi = Math.cos(this.lat0);
	      cphi *= cphi;
	      this.rc = Math.sqrt(1 - this.es) / (1 - this.es * sphi * sphi);
	      this.C = Math.sqrt(1 + this.es * cphi * cphi / (1 - this.es));
	      this.phic0 = Math.asin(sphi / this.C);
	      this.ratexp = 0.5 * this.C * this.e;
	      this.K = Math.tan(0.5 * this.phic0 + FORTPI) / (Math.pow(Math.tan(0.5 * this.lat0 + FORTPI), this.C) * srat(this.e * sphi, this.ratexp));
	    }
	
	    function forward$5(p) {
	      var lon = p.x;
	      var lat = p.y;
	
	      p.y = 2 * Math.atan(this.K * Math.pow(Math.tan(0.5 * lat + FORTPI), this.C) * srat(this.e * Math.sin(lat), this.ratexp)) - HALF_PI;
	      p.x = this.C * lon;
	      return p;
	    }
	
	    function inverse$5(p) {
	      var DEL_TOL = 1e-14;
	      var lon = p.x / this.C;
	      var lat = p.y;
	      var num = Math.pow(Math.tan(0.5 * lat + FORTPI) / this.K, 1 / this.C);
	      for (var i = MAX_ITER$1; i > 0; --i) {
	        lat = 2 * Math.atan(num * srat(this.e * Math.sin(p.y), - 0.5 * this.e)) - HALF_PI;
	        if (Math.abs(lat - p.y) < DEL_TOL) {
	          break;
	        }
	        p.y = lat;
	      }
	      /* convergence failed */
	      if (!i) {
	        return null;
	      }
	      p.x = lon;
	      p.y = lat;
	      return p;
	    }
	
	    var names$7 = ["gauss"];
	    var gauss = {
	      init: init$6,
	      forward: forward$5,
	      inverse: inverse$5,
	      names: names$7
	    };
	
	    function init$5() {
	      gauss.init.apply(this);
	      if (!this.rc) {
	        return;
	      }
	      this.sinc0 = Math.sin(this.phic0);
	      this.cosc0 = Math.cos(this.phic0);
	      this.R2 = 2 * this.rc;
	      if (!this.title) {
	        this.title = "Oblique Stereographic Alternative";
	      }
	    }
	
	    function forward$4(p) {
	      var sinc, cosc, cosl, k;
	      p.x = adjust_lon(p.x - this.long0);
	      gauss.forward.apply(this, [p]);
	      sinc = Math.sin(p.y);
	      cosc = Math.cos(p.y);
	      cosl = Math.cos(p.x);
	      k = this.k0 * this.R2 / (1 + this.sinc0 * sinc + this.cosc0 * cosc * cosl);
	      p.x = k * cosc * Math.sin(p.x);
	      p.y = k * (this.cosc0 * sinc - this.sinc0 * cosc * cosl);
	      p.x = this.a * p.x + this.x0;
	      p.y = this.a * p.y + this.y0;
	      return p;
	    }
	
	    function inverse$4(p) {
	      var sinc, cosc, lon, lat, rho;
	      p.x = (p.x - this.x0) / this.a;
	      p.y = (p.y - this.y0) / this.a;
	
	      p.x /= this.k0;
	      p.y /= this.k0;
	      if ((rho = Math.sqrt(p.x * p.x + p.y * p.y))) {
	        var c = 2 * Math.atan2(rho, this.R2);
	        sinc = Math.sin(c);
	        cosc = Math.cos(c);
	        lat = Math.asin(cosc * this.sinc0 + p.y * sinc * this.cosc0 / rho);
	        lon = Math.atan2(p.x * sinc, rho * this.cosc0 * cosc - p.y * this.sinc0 * sinc);
	      }
	      else {
	        lat = this.phic0;
	        lon = 0;
	      }
	
	      p.x = lon;
	      p.y = lat;
	      gauss.inverse.apply(this, [p]);
	      p.x = adjust_lon(p.x + this.long0);
	      return p;
	    }
	
	    var names$6 = ["Stereographic_North_Pole", "Oblique_Stereographic", "Polar_Stereographic", "sterea","Oblique Stereographic Alternative","Double_Stereographic"];
	    var sterea = {
	      init: init$5,
	      forward: forward$4,
	      inverse: inverse$4,
	      names: names$6
	    };
	
	    function ssfn_(phit, sinphi, eccen) {
	      sinphi *= eccen;
	      return (Math.tan(0.5 * (HALF_PI + phit)) * Math.pow((1 - sinphi) / (1 + sinphi), 0.5 * eccen));
	    }
	
	    function init$7() {
	      this.coslat0 = Math.cos(this.lat0);
	      this.sinlat0 = Math.sin(this.lat0);
	      if (this.sphere) {
	        if (this.k0 === 1 && !isNaN(this.lat_ts) && Math.abs(this.coslat0) <= EPSLN) {
	          this.k0 = 0.5 * (1 + sign(this.lat0) * Math.sin(this.lat_ts));
	        }
	      }
	      else {
	        if (Math.abs(this.coslat0) <= EPSLN) {
	          if (this.lat0 > 0) {
	            //North pole
	            //trace('stere:north pole');
	            this.con = 1;
	          }
	          else {
	            //South pole
	            //trace('stere:south pole');
	            this.con = -1;
	          }
	        }
	        this.cons = Math.sqrt(Math.pow(1 + this.e, 1 + this.e) * Math.pow(1 - this.e, 1 - this.e));
	        if (this.k0 === 1 && !isNaN(this.lat_ts) && Math.abs(this.coslat0) <= EPSLN) {
	          this.k0 = 0.5 * this.cons * msfnz(this.e, Math.sin(this.lat_ts), Math.cos(this.lat_ts)) / tsfnz(this.e, this.con * this.lat_ts, this.con * Math.sin(this.lat_ts));
	        }
	        this.ms1 = msfnz(this.e, this.sinlat0, this.coslat0);
	        this.X0 = 2 * Math.atan(this.ssfn_(this.lat0, this.sinlat0, this.e)) - HALF_PI;
	        this.cosX0 = Math.cos(this.X0);
	        this.sinX0 = Math.sin(this.X0);
	      }
	    }
	
	    // Stereographic forward equations--mapping lat,long to x,y
	    function forward$6(p) {
	      var lon = p.x;
	      var lat = p.y;
	      var sinlat = Math.sin(lat);
	      var coslat = Math.cos(lat);
	      var A, X, sinX, cosX, ts, rh;
	      var dlon = adjust_lon(lon - this.long0);
	
	      if (Math.abs(Math.abs(lon - this.long0) - Math.PI) <= EPSLN && Math.abs(lat + this.lat0) <= EPSLN) {
	        //case of the origine point
	        //trace('stere:this is the origin point');
	        p.x = NaN;
	        p.y = NaN;
	        return p;
	      }
	      if (this.sphere) {
	        //trace('stere:sphere case');
	        A = 2 * this.k0 / (1 + this.sinlat0 * sinlat + this.coslat0 * coslat * Math.cos(dlon));
	        p.x = this.a * A * coslat * Math.sin(dlon) + this.x0;
	        p.y = this.a * A * (this.coslat0 * sinlat - this.sinlat0 * coslat * Math.cos(dlon)) + this.y0;
	        return p;
	      }
	      else {
	        X = 2 * Math.atan(this.ssfn_(lat, sinlat, this.e)) - HALF_PI;
	        cosX = Math.cos(X);
	        sinX = Math.sin(X);
	        if (Math.abs(this.coslat0) <= EPSLN) {
	          ts = tsfnz(this.e, lat * this.con, this.con * sinlat);
	          rh = 2 * this.a * this.k0 * ts / this.cons;
	          p.x = this.x0 + rh * Math.sin(lon - this.long0);
	          p.y = this.y0 - this.con * rh * Math.cos(lon - this.long0);
	          //trace(p.toString());
	          return p;
	        }
	        else if (Math.abs(this.sinlat0) < EPSLN) {
	          //Eq
	          //trace('stere:equateur');
	          A = 2 * this.a * this.k0 / (1 + cosX * Math.cos(dlon));
	          p.y = A * sinX;
	        }
	        else {
	          //other case
	          //trace('stere:normal case');
	          A = 2 * this.a * this.k0 * this.ms1 / (this.cosX0 * (1 + this.sinX0 * sinX + this.cosX0 * cosX * Math.cos(dlon)));
	          p.y = A * (this.cosX0 * sinX - this.sinX0 * cosX * Math.cos(dlon)) + this.y0;
	        }
	        p.x = A * cosX * Math.sin(dlon) + this.x0;
	      }
	      //trace(p.toString());
	      return p;
	    }
	
	    //* Stereographic inverse equations--mapping x,y to lat/long
	    function inverse$6(p) {
	      p.x -= this.x0;
	      p.y -= this.y0;
	      var lon, lat, ts, ce, Chi;
	      var rh = Math.sqrt(p.x * p.x + p.y * p.y);
	      if (this.sphere) {
	        var c = 2 * Math.atan(rh / (2 * this.a * this.k0));
	        lon = this.long0;
	        lat = this.lat0;
	        if (rh <= EPSLN) {
	          p.x = lon;
	          p.y = lat;
	          return p;
	        }
	        lat = Math.asin(Math.cos(c) * this.sinlat0 + p.y * Math.sin(c) * this.coslat0 / rh);
	        if (Math.abs(this.coslat0) < EPSLN) {
	          if (this.lat0 > 0) {
	            lon = adjust_lon(this.long0 + Math.atan2(p.x, - 1 * p.y));
	          }
	          else {
	            lon = adjust_lon(this.long0 + Math.atan2(p.x, p.y));
	          }
	        }
	        else {
	          lon = adjust_lon(this.long0 + Math.atan2(p.x * Math.sin(c), rh * this.coslat0 * Math.cos(c) - p.y * this.sinlat0 * Math.sin(c)));
	        }
	        p.x = lon;
	        p.y = lat;
	        return p;
	      }
	      else {
	        if (Math.abs(this.coslat0) <= EPSLN) {
	          if (rh <= EPSLN) {
	            lat = this.lat0;
	            lon = this.long0;
	            p.x = lon;
	            p.y = lat;
	            //trace(p.toString());
	            return p;
	          }
	          p.x *= this.con;
	          p.y *= this.con;
	          ts = rh * this.cons / (2 * this.a * this.k0);
	          lat = this.con * phi2z(this.e, ts);
	          lon = this.con * adjust_lon(this.con * this.long0 + Math.atan2(p.x, - 1 * p.y));
	        }
	        else {
	          ce = 2 * Math.atan(rh * this.cosX0 / (2 * this.a * this.k0 * this.ms1));
	          lon = this.long0;
	          if (rh <= EPSLN) {
	            Chi = this.X0;
	          }
	          else {
	            Chi = Math.asin(Math.cos(ce) * this.sinX0 + p.y * Math.sin(ce) * this.cosX0 / rh);
	            lon = adjust_lon(this.long0 + Math.atan2(p.x * Math.sin(ce), rh * this.cosX0 * Math.cos(ce) - p.y * this.sinX0 * Math.sin(ce)));
	          }
	          lat = -1 * phi2z(this.e, Math.tan(0.5 * (HALF_PI + Chi)));
	        }
	      }
	      p.x = lon;
	      p.y = lat;
	
	      //trace(p.toString());
	      return p;
	
	    }
	
	    var names$8 = ["stere", "Stereographic_South_Pole", "Polar Stereographic (variant B)"];
	    var stere = {
	      init: init$7,
	      forward: forward$6,
	      inverse: inverse$6,
	      names: names$8,
	      ssfn_: ssfn_
	    };
	
	    /*
	      references:
	        Formules et constantes pour le Calcul pour la
	        projection cylindrique conforme à axe oblique et pour la transformation entre
	        des systèmes de référence.
	        http://www.swisstopo.admin.ch/internet/swisstopo/fr/home/topics/survey/sys/refsys/switzerland.parsysrelated1.31216.downloadList.77004.DownloadFile.tmp/swissprojectionfr.pdf
	      */
	
	    function init$8() {
	      var phy0 = this.lat0;
	      this.lambda0 = this.long0;
	      var sinPhy0 = Math.sin(phy0);
	      var semiMajorAxis = this.a;
	      var invF = this.rf;
	      var flattening = 1 / invF;
	      var e2 = 2 * flattening - Math.pow(flattening, 2);
	      var e = this.e = Math.sqrt(e2);
	      this.R = this.k0 * semiMajorAxis * Math.sqrt(1 - e2) / (1 - e2 * Math.pow(sinPhy0, 2));
	      this.alpha = Math.sqrt(1 + e2 / (1 - e2) * Math.pow(Math.cos(phy0), 4));
	      this.b0 = Math.asin(sinPhy0 / this.alpha);
	      var k1 = Math.log(Math.tan(Math.PI / 4 + this.b0 / 2));
	      var k2 = Math.log(Math.tan(Math.PI / 4 + phy0 / 2));
	      var k3 = Math.log((1 + e * sinPhy0) / (1 - e * sinPhy0));
	      this.K = k1 - this.alpha * k2 + this.alpha * e / 2 * k3;
	    }
	
	    function forward$7(p) {
	      var Sa1 = Math.log(Math.tan(Math.PI / 4 - p.y / 2));
	      var Sa2 = this.e / 2 * Math.log((1 + this.e * Math.sin(p.y)) / (1 - this.e * Math.sin(p.y)));
	      var S = -this.alpha * (Sa1 + Sa2) + this.K;
	
	      // spheric latitude
	      var b = 2 * (Math.atan(Math.exp(S)) - Math.PI / 4);
	
	      // spheric longitude
	      var I = this.alpha * (p.x - this.lambda0);
	
	      // psoeudo equatorial rotation
	      var rotI = Math.atan(Math.sin(I) / (Math.sin(this.b0) * Math.tan(b) + Math.cos(this.b0) * Math.cos(I)));
	
	      var rotB = Math.asin(Math.cos(this.b0) * Math.sin(b) - Math.sin(this.b0) * Math.cos(b) * Math.cos(I));
	
	      p.y = this.R / 2 * Math.log((1 + Math.sin(rotB)) / (1 - Math.sin(rotB))) + this.y0;
	      p.x = this.R * rotI + this.x0;
	      return p;
	    }
	
	    function inverse$7(p) {
	      var Y = p.x - this.x0;
	      var X = p.y - this.y0;
	
	      var rotI = Y / this.R;
	      var rotB = 2 * (Math.atan(Math.exp(X / this.R)) - Math.PI / 4);
	
	      var b = Math.asin(Math.cos(this.b0) * Math.sin(rotB) + Math.sin(this.b0) * Math.cos(rotB) * Math.cos(rotI));
	      var I = Math.atan(Math.sin(rotI) / (Math.cos(this.b0) * Math.cos(rotI) - Math.sin(this.b0) * Math.tan(rotB)));
	
	      var lambda = this.lambda0 + I / this.alpha;
	
	      var S = 0;
	      var phy = b;
	      var prevPhy = -1000;
	      var iteration = 0;
	      while (Math.abs(phy - prevPhy) > 0.0000001) {
	        if (++iteration > 20) {
	          //...reportError("omercFwdInfinity");
	          return;
	        }
	        //S = Math.log(Math.tan(Math.PI / 4 + phy / 2));
	        S = 1 / this.alpha * (Math.log(Math.tan(Math.PI / 4 + b / 2)) - this.K) + this.e * Math.log(Math.tan(Math.PI / 4 + Math.asin(this.e * Math.sin(phy)) / 2));
	        prevPhy = phy;
	        phy = 2 * Math.atan(Math.exp(S)) - Math.PI / 2;
	      }
	
	      p.x = lambda;
	      p.y = phy;
	      return p;
	    }
	
	    var names$9 = ["somerc"];
	    var somerc = {
	      init: init$8,
	      forward: forward$7,
	      inverse: inverse$7,
	      names: names$9
	    };
	
	    /* Initialize the Oblique Mercator  projection
	        ------------------------------------------*/
	    function init$9() {
	      this.no_off = this.no_off || false;
	      this.no_rot = this.no_rot || false;
	
	      if (isNaN(this.k0)) {
	        this.k0 = 1;
	      }
	      var sinlat = Math.sin(this.lat0);
	      var coslat = Math.cos(this.lat0);
	      var con = this.e * sinlat;
	
	      this.bl = Math.sqrt(1 + this.es / (1 - this.es) * Math.pow(coslat, 4));
	      this.al = this.a * this.bl * this.k0 * Math.sqrt(1 - this.es) / (1 - con * con);
	      var t0 = tsfnz(this.e, this.lat0, sinlat);
	      var dl = this.bl / coslat * Math.sqrt((1 - this.es) / (1 - con * con));
	      if (dl * dl < 1) {
	        dl = 1;
	      }
	      var fl;
	      var gl;
	      if (!isNaN(this.longc)) {
	        //Central point and azimuth method
	
	        if (this.lat0 >= 0) {
	          fl = dl + Math.sqrt(dl * dl - 1);
	        }
	        else {
	          fl = dl - Math.sqrt(dl * dl - 1);
	        }
	        this.el = fl * Math.pow(t0, this.bl);
	        gl = 0.5 * (fl - 1 / fl);
	        this.gamma0 = Math.asin(Math.sin(this.alpha) / dl);
	        this.long0 = this.longc - Math.asin(gl * Math.tan(this.gamma0)) / this.bl;
	
	      }
	      else {
	        //2 points method
	        var t1 = tsfnz(this.e, this.lat1, Math.sin(this.lat1));
	        var t2 = tsfnz(this.e, this.lat2, Math.sin(this.lat2));
	        if (this.lat0 >= 0) {
	          this.el = (dl + Math.sqrt(dl * dl - 1)) * Math.pow(t0, this.bl);
	        }
	        else {
	          this.el = (dl - Math.sqrt(dl * dl - 1)) * Math.pow(t0, this.bl);
	        }
	        var hl = Math.pow(t1, this.bl);
	        var ll = Math.pow(t2, this.bl);
	        fl = this.el / hl;
	        gl = 0.5 * (fl - 1 / fl);
	        var jl = (this.el * this.el - ll * hl) / (this.el * this.el + ll * hl);
	        var pl = (ll - hl) / (ll + hl);
	        var dlon12 = adjust_lon(this.long1 - this.long2);
	        this.long0 = 0.5 * (this.long1 + this.long2) - Math.atan(jl * Math.tan(0.5 * this.bl * (dlon12)) / pl) / this.bl;
	        this.long0 = adjust_lon(this.long0);
	        var dlon10 = adjust_lon(this.long1 - this.long0);
	        this.gamma0 = Math.atan(Math.sin(this.bl * (dlon10)) / gl);
	        this.alpha = Math.asin(dl * Math.sin(this.gamma0));
	      }
	
	      if (this.no_off) {
	        this.uc = 0;
	      }
	      else {
	        if (this.lat0 >= 0) {
	          this.uc = this.al / this.bl * Math.atan2(Math.sqrt(dl * dl - 1), Math.cos(this.alpha));
	        }
	        else {
	          this.uc = -1 * this.al / this.bl * Math.atan2(Math.sqrt(dl * dl - 1), Math.cos(this.alpha));
	        }
	      }
	
	    }
	
	    /* Oblique Mercator forward equations--mapping lat,long to x,y
	        ----------------------------------------------------------*/
	    function forward$8(p) {
	      var lon = p.x;
	      var lat = p.y;
	      var dlon = adjust_lon(lon - this.long0);
	      var us, vs;
	      var con;
	      if (Math.abs(Math.abs(lat) - HALF_PI) <= EPSLN) {
	        if (lat > 0) {
	          con = -1;
	        }
	        else {
	          con = 1;
	        }
	        vs = this.al / this.bl * Math.log(Math.tan(FORTPI + con * this.gamma0 * 0.5));
	        us = -1 * con * HALF_PI * this.al / this.bl;
	      }
	      else {
	        var t = tsfnz(this.e, lat, Math.sin(lat));
	        var ql = this.el / Math.pow(t, this.bl);
	        var sl = 0.5 * (ql - 1 / ql);
	        var tl = 0.5 * (ql + 1 / ql);
	        var vl = Math.sin(this.bl * (dlon));
	        var ul = (sl * Math.sin(this.gamma0) - vl * Math.cos(this.gamma0)) / tl;
	        if (Math.abs(Math.abs(ul) - 1) <= EPSLN) {
	          vs = Number.POSITIVE_INFINITY;
	        }
	        else {
	          vs = 0.5 * this.al * Math.log((1 - ul) / (1 + ul)) / this.bl;
	        }
	        if (Math.abs(Math.cos(this.bl * (dlon))) <= EPSLN) {
	          us = this.al * this.bl * (dlon);
	        }
	        else {
	          us = this.al * Math.atan2(sl * Math.cos(this.gamma0) + vl * Math.sin(this.gamma0), Math.cos(this.bl * dlon)) / this.bl;
	        }
	      }
	
	      if (this.no_rot) {
	        p.x = this.x0 + us;
	        p.y = this.y0 + vs;
	      }
	      else {
	
	        us -= this.uc;
	        p.x = this.x0 + vs * Math.cos(this.alpha) + us * Math.sin(this.alpha);
	        p.y = this.y0 + us * Math.cos(this.alpha) - vs * Math.sin(this.alpha);
	      }
	      return p;
	    }
	
	    function inverse$8(p) {
	      var us, vs;
	      if (this.no_rot) {
	        vs = p.y - this.y0;
	        us = p.x - this.x0;
	      }
	      else {
	        vs = (p.x - this.x0) * Math.cos(this.alpha) - (p.y - this.y0) * Math.sin(this.alpha);
	        us = (p.y - this.y0) * Math.cos(this.alpha) + (p.x - this.x0) * Math.sin(this.alpha);
	        us += this.uc;
	      }
	      var qp = Math.exp(-1 * this.bl * vs / this.al);
	      var sp = 0.5 * (qp - 1 / qp);
	      var tp = 0.5 * (qp + 1 / qp);
	      var vp = Math.sin(this.bl * us / this.al);
	      var up = (vp * Math.cos(this.gamma0) + sp * Math.sin(this.gamma0)) / tp;
	      var ts = Math.pow(this.el / Math.sqrt((1 + up) / (1 - up)), 1 / this.bl);
	      if (Math.abs(up - 1) < EPSLN) {
	        p.x = this.long0;
	        p.y = HALF_PI;
	      }
	      else if (Math.abs(up + 1) < EPSLN) {
	        p.x = this.long0;
	        p.y = -1 * HALF_PI;
	      }
	      else {
	        p.y = phi2z(this.e, ts);
	        p.x = adjust_lon(this.long0 - Math.atan2(sp * Math.cos(this.gamma0) - vp * Math.sin(this.gamma0), Math.cos(this.bl * us / this.al)) / this.bl);
	      }
	      return p;
	    }
	
	    var names$10 = ["Hotine_Oblique_Mercator", "Hotine Oblique Mercator", "Hotine_Oblique_Mercator_Azimuth_Natural_Origin", "Hotine_Oblique_Mercator_Azimuth_Center", "omerc"];
	    var omerc = {
	      init: init$9,
	      forward: forward$8,
	      inverse: inverse$8,
	      names: names$10
	    };
	
	    function init$10() {
	
	      // array of:  r_maj,r_min,lat1,lat2,c_lon,c_lat,false_east,false_north
	      //double c_lat;                   /* center latitude                      */
	      //double c_lon;                   /* center longitude                     */
	      //double lat1;                    /* first standard parallel              */
	      //double lat2;                    /* second standard parallel             */
	      //double r_maj;                   /* major axis                           */
	      //double r_min;                   /* minor axis                           */
	      //double false_east;              /* x offset in meters                   */
	      //double false_north;             /* y offset in meters                   */
	
	      if (!this.lat2) {
	        this.lat2 = this.lat1;
	      } //if lat2 is not defined
	      if (!this.k0) {
	        this.k0 = 1;
	      }
	      this.x0 = this.x0 || 0;
	      this.y0 = this.y0 || 0;
	      // Standard Parallels cannot be equal and on opposite sides of the equator
	      if (Math.abs(this.lat1 + this.lat2) < EPSLN) {
	        return;
	      }
	
	      var temp = this.b / this.a;
	      this.e = Math.sqrt(1 - temp * temp);
	
	      var sin1 = Math.sin(this.lat1);
	      var cos1 = Math.cos(this.lat1);
	      var ms1 = msfnz(this.e, sin1, cos1);
	      var ts1 = tsfnz(this.e, this.lat1, sin1);
	
	      var sin2 = Math.sin(this.lat2);
	      var cos2 = Math.cos(this.lat2);
	      var ms2 = msfnz(this.e, sin2, cos2);
	      var ts2 = tsfnz(this.e, this.lat2, sin2);
	
	      var ts0 = tsfnz(this.e, this.lat0, Math.sin(this.lat0));
	
	      if (Math.abs(this.lat1 - this.lat2) > EPSLN) {
	        this.ns = Math.log(ms1 / ms2) / Math.log(ts1 / ts2);
	      }
	      else {
	        this.ns = sin1;
	      }
	      if (isNaN(this.ns)) {
	        this.ns = sin1;
	      }
	      this.f0 = ms1 / (this.ns * Math.pow(ts1, this.ns));
	      this.rh = this.a * this.f0 * Math.pow(ts0, this.ns);
	      if (!this.title) {
	        this.title = "Lambert Conformal Conic";
	      }
	    }
	
	    // Lambert Conformal conic forward equations--mapping lat,long to x,y
	    // -----------------------------------------------------------------
	    function forward$9(p) {
	
	      var lon = p.x;
	      var lat = p.y;
	
	      // singular cases :
	      if (Math.abs(2 * Math.abs(lat) - Math.PI) <= EPSLN) {
	        lat = sign(lat) * (HALF_PI - 2 * EPSLN);
	      }
	
	      var con = Math.abs(Math.abs(lat) - HALF_PI);
	      var ts, rh1;
	      if (con > EPSLN) {
	        ts = tsfnz(this.e, lat, Math.sin(lat));
	        rh1 = this.a * this.f0 * Math.pow(ts, this.ns);
	      }
	      else {
	        con = lat * this.ns;
	        if (con <= 0) {
	          return null;
	        }
	        rh1 = 0;
	      }
	      var theta = this.ns * adjust_lon(lon - this.long0);
	      p.x = this.k0 * (rh1 * Math.sin(theta)) + this.x0;
	      p.y = this.k0 * (this.rh - rh1 * Math.cos(theta)) + this.y0;
	
	      return p;
	    }
	
	    // Lambert Conformal Conic inverse equations--mapping x,y to lat/long
	    // -----------------------------------------------------------------
	    function inverse$9(p) {
	
	      var rh1, con, ts;
	      var lat, lon;
	      var x = (p.x - this.x0) / this.k0;
	      var y = (this.rh - (p.y - this.y0) / this.k0);
	      if (this.ns > 0) {
	        rh1 = Math.sqrt(x * x + y * y);
	        con = 1;
	      }
	      else {
	        rh1 = -Math.sqrt(x * x + y * y);
	        con = -1;
	      }
	      var theta = 0;
	      if (rh1 !== 0) {
	        theta = Math.atan2((con * x), (con * y));
	      }
	      if ((rh1 !== 0) || (this.ns > 0)) {
	        con = 1 / this.ns;
	        ts = Math.pow((rh1 / (this.a * this.f0)), con);
	        lat = phi2z(this.e, ts);
	        if (lat === -9999) {
	          return null;
	        }
	      }
	      else {
	        lat = -HALF_PI;
	      }
	      lon = adjust_lon(theta / this.ns + this.long0);
	
	      p.x = lon;
	      p.y = lat;
	      return p;
	    }
	
	    var names$11 = ["Lambert Tangential Conformal Conic Projection", "Lambert_Conformal_Conic", "Lambert_Conformal_Conic_2SP", "lcc"];
	    var lcc = {
	      init: init$10,
	      forward: forward$9,
	      inverse: inverse$9,
	      names: names$11
	    };
	
	    function init$11() {
	      this.a = 6377397.155;
	      this.es = 0.006674372230614;
	      this.e = Math.sqrt(this.es);
	      if (!this.lat0) {
	        this.lat0 = 0.863937979737193;
	      }
	      if (!this.long0) {
	        this.long0 = 0.7417649320975901 - 0.308341501185665;
	      }
	      /* if scale not set default to 0.9999 */
	      if (!this.k0) {
	        this.k0 = 0.9999;
	      }
	      this.s45 = 0.785398163397448; /* 45 */
	      this.s90 = 2 * this.s45;
	      this.fi0 = this.lat0;
	      this.e2 = this.es;
	      this.e = Math.sqrt(this.e2);
	      this.alfa = Math.sqrt(1 + (this.e2 * Math.pow(Math.cos(this.fi0), 4)) / (1 - this.e2));
	      this.uq = 1.04216856380474;
	      this.u0 = Math.asin(Math.sin(this.fi0) / this.alfa);
	      this.g = Math.pow((1 + this.e * Math.sin(this.fi0)) / (1 - this.e * Math.sin(this.fi0)), this.alfa * this.e / 2);
	      this.k = Math.tan(this.u0 / 2 + this.s45) / Math.pow(Math.tan(this.fi0 / 2 + this.s45), this.alfa) * this.g;
	      this.k1 = this.k0;
	      this.n0 = this.a * Math.sqrt(1 - this.e2) / (1 - this.e2 * Math.pow(Math.sin(this.fi0), 2));
	      this.s0 = 1.37008346281555;
	      this.n = Math.sin(this.s0);
	      this.ro0 = this.k1 * this.n0 / Math.tan(this.s0);
	      this.ad = this.s90 - this.uq;
	    }
	
	    /* ellipsoid */
	    /* calculate xy from lat/lon */
	    /* Constants, identical to inverse transform function */
	    function forward$10(p) {
	      var gfi, u, deltav, s, d, eps, ro;
	      var lon = p.x;
	      var lat = p.y;
	      var delta_lon = adjust_lon(lon - this.long0);
	      /* Transformation */
	      gfi = Math.pow(((1 + this.e * Math.sin(lat)) / (1 - this.e * Math.sin(lat))), (this.alfa * this.e / 2));
	      u = 2 * (Math.atan(this.k * Math.pow(Math.tan(lat / 2 + this.s45), this.alfa) / gfi) - this.s45);
	      deltav = -delta_lon * this.alfa;
	      s = Math.asin(Math.cos(this.ad) * Math.sin(u) + Math.sin(this.ad) * Math.cos(u) * Math.cos(deltav));
	      d = Math.asin(Math.cos(u) * Math.sin(deltav) / Math.cos(s));
	      eps = this.n * d;
	      ro = this.ro0 * Math.pow(Math.tan(this.s0 / 2 + this.s45), this.n) / Math.pow(Math.tan(s / 2 + this.s45), this.n);
	      p.y = ro * Math.cos(eps) / 1;
	      p.x = ro * Math.sin(eps) / 1;
	
	      if (!this.czech) {
	        p.y *= -1;
	        p.x *= -1;
	      }
	      return (p);
	    }
	
	    /* calculate lat/lon from xy */
	    function inverse$10(p) {
	      var u, deltav, s, d, eps, ro, fi1;
	      var ok;
	
	      /* Transformation */
	      /* revert y, x*/
	      var tmp = p.x;
	      p.x = p.y;
	      p.y = tmp;
	      if (!this.czech) {
	        p.y *= -1;
	        p.x *= -1;
	      }
	      ro = Math.sqrt(p.x * p.x + p.y * p.y);
	      eps = Math.atan2(p.y, p.x);
	      d = eps / Math.sin(this.s0);
	      s = 2 * (Math.atan(Math.pow(this.ro0 / ro, 1 / this.n) * Math.tan(this.s0 / 2 + this.s45)) - this.s45);
	      u = Math.asin(Math.cos(this.ad) * Math.sin(s) - Math.sin(this.ad) * Math.cos(s) * Math.cos(d));
	      deltav = Math.asin(Math.cos(s) * Math.sin(d) / Math.cos(u));
	      p.x = this.long0 - deltav / this.alfa;
	      fi1 = u;
	      ok = 0;
	      var iter = 0;
	      do {
	        p.y = 2 * (Math.atan(Math.pow(this.k, - 1 / this.alfa) * Math.pow(Math.tan(u / 2 + this.s45), 1 / this.alfa) * Math.pow((1 + this.e * Math.sin(fi1)) / (1 - this.e * Math.sin(fi1)), this.e / 2)) - this.s45);
	        if (Math.abs(fi1 - p.y) < 0.0000000001) {
	          ok = 1;
	        }
	        fi1 = p.y;
	        iter += 1;
	      } while (ok === 0 && iter < 15);
	      if (iter >= 15) {
	        return null;
	      }
	
	      return (p);
	    }
	
	    var names$12 = ["Krovak", "krovak"];
	    var krovak = {
	      init: init$11,
	      forward: forward$10,
	      inverse: inverse$10,
	      names: names$12
	    };
	
	    var mlfn = function(e0, e1, e2, e3, phi) {
	      return (e0 * phi - e1 * Math.sin(2 * phi) + e2 * Math.sin(4 * phi) - e3 * Math.sin(6 * phi));
	    };
	
	    var e0fn = function(x) {
	      return (1 - 0.25 * x * (1 + x / 16 * (3 + 1.25 * x)));
	    };
	
	    var e1fn = function(x) {
	      return (0.375 * x * (1 + 0.25 * x * (1 + 0.46875 * x)));
	    };
	
	    var e2fn = function(x) {
	      return (0.05859375 * x * x * (1 + 0.75 * x));
	    };
	
	    var e3fn = function(x) {
	      return (x * x * x * (35 / 3072));
	    };
	
	    var gN = function(a, e, sinphi) {
	      var temp = e * sinphi;
	      return a / Math.sqrt(1 - temp * temp);
	    };
	
	    var adjust_lat = function(x) {
	      return (Math.abs(x) < HALF_PI) ? x : (x - (sign(x) * Math.PI));
	    };
	
	    var imlfn = function(ml, e0, e1, e2, e3) {
	      var phi;
	      var dphi;
	
	      phi = ml / e0;
	      for (var i = 0; i < 15; i++) {
	        dphi = (ml - (e0 * phi - e1 * Math.sin(2 * phi) + e2 * Math.sin(4 * phi) - e3 * Math.sin(6 * phi))) / (e0 - 2 * e1 * Math.cos(2 * phi) + 4 * e2 * Math.cos(4 * phi) - 6 * e3 * Math.cos(6 * phi));
	        phi += dphi;
	        if (Math.abs(dphi) <= 0.0000000001) {
	          return phi;
	        }
	      }
	
	      //..reportError("IMLFN-CONV:Latitude failed to converge after 15 iterations");
	      return NaN;
	    };
	
	    function init$12() {
	      if (!this.sphere) {
	        this.e0 = e0fn(this.es);
	        this.e1 = e1fn(this.es);
	        this.e2 = e2fn(this.es);
	        this.e3 = e3fn(this.es);
	        this.ml0 = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, this.lat0);
	      }
	    }
	
	    /* Cassini forward equations--mapping lat,long to x,y
	      -----------------------------------------------------------------------*/
	    function forward$11(p) {
	
	      /* Forward equations
	          -----------------*/
	      var x, y;
	      var lam = p.x;
	      var phi = p.y;
	      lam = adjust_lon(lam - this.long0);
	
	      if (this.sphere) {
	        x = this.a * Math.asin(Math.cos(phi) * Math.sin(lam));
	        y = this.a * (Math.atan2(Math.tan(phi), Math.cos(lam)) - this.lat0);
	      }
	      else {
	        //ellipsoid
	        var sinphi = Math.sin(phi);
	        var cosphi = Math.cos(phi);
	        var nl = gN(this.a, this.e, sinphi);
	        var tl = Math.tan(phi) * Math.tan(phi);
	        var al = lam * Math.cos(phi);
	        var asq = al * al;
	        var cl = this.es * cosphi * cosphi / (1 - this.es);
	        var ml = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, phi);
	
	        x = nl * al * (1 - asq * tl * (1 / 6 - (8 - tl + 8 * cl) * asq / 120));
	        y = ml - this.ml0 + nl * sinphi / cosphi * asq * (0.5 + (5 - tl + 6 * cl) * asq / 24);
	
	
	      }
	
	      p.x = x + this.x0;
	      p.y = y + this.y0;
	      return p;
	    }
	
	    /* Inverse equations
	      -----------------*/
	    function inverse$11(p) {
	      p.x -= this.x0;
	      p.y -= this.y0;
	      var x = p.x / this.a;
	      var y = p.y / this.a;
	      var phi, lam;
	
	      if (this.sphere) {
	        var dd = y + this.lat0;
	        phi = Math.asin(Math.sin(dd) * Math.cos(x));
	        lam = Math.atan2(Math.tan(x), Math.cos(dd));
	      }
	      else {
	        /* ellipsoid */
	        var ml1 = this.ml0 / this.a + y;
	        var phi1 = imlfn(ml1, this.e0, this.e1, this.e2, this.e3);
	        if (Math.abs(Math.abs(phi1) - HALF_PI) <= EPSLN) {
	          p.x = this.long0;
	          p.y = HALF_PI;
	          if (y < 0) {
	            p.y *= -1;
	          }
	          return p;
	        }
	        var nl1 = gN(this.a, this.e, Math.sin(phi1));
	
	        var rl1 = nl1 * nl1 * nl1 / this.a / this.a * (1 - this.es);
	        var tl1 = Math.pow(Math.tan(phi1), 2);
	        var dl = x * this.a / nl1;
	        var dsq = dl * dl;
	        phi = phi1 - nl1 * Math.tan(phi1) / rl1 * dl * dl * (0.5 - (1 + 3 * tl1) * dl * dl / 24);
	        lam = dl * (1 - dsq * (tl1 / 3 + (1 + 3 * tl1) * tl1 * dsq / 15)) / Math.cos(phi1);
	
	      }
	
	      p.x = adjust_lon(lam + this.long0);
	      p.y = adjust_lat(phi);
	      return p;
	
	    }
	
	    var names$13 = ["Cassini", "Cassini_Soldner", "cass"];
	    var cass = {
	      init: init$12,
	      forward: forward$11,
	      inverse: inverse$11,
	      names: names$13
	    };
	
	    var qsfnz = function(eccent, sinphi) {
	      var con;
	      if (eccent > 1.0e-7) {
	        con = eccent * sinphi;
	        return ((1 - eccent * eccent) * (sinphi / (1 - con * con) - (0.5 / eccent) * Math.log((1 - con) / (1 + con))));
	      }
	      else {
	        return (2 * sinphi);
	      }
	    };
	
	    /*
	      reference
	        "New Equal-Area Map Projections for Noncircular Regions", John P. Snyder,
	        The American Cartographer, Vol 15, No. 4, October 1988, pp. 341-355.
	      */
	
	    var S_POLE = 1;
	
	    var N_POLE = 2;
	    var EQUIT = 3;
	    var OBLIQ = 4;
	
	    /* Initialize the Lambert Azimuthal Equal Area projection
	      ------------------------------------------------------*/
	    function init$13() {
	      var t = Math.abs(this.lat0);
	      if (Math.abs(t - HALF_PI) < EPSLN) {
	        this.mode = this.lat0 < 0 ? this.S_POLE : this.N_POLE;
	      }
	      else if (Math.abs(t) < EPSLN) {
	        this.mode = this.EQUIT;
	      }
	      else {
	        this.mode = this.OBLIQ;
	      }
	      if (this.es > 0) {
	        var sinphi;
	
	        this.qp = qsfnz(this.e, 1);
	        this.mmf = 0.5 / (1 - this.es);
	        this.apa = authset(this.es);
	        switch (this.mode) {
	        case this.N_POLE:
	          this.dd = 1;
	          break;
	        case this.S_POLE:
	          this.dd = 1;
	          break;
	        case this.EQUIT:
	          this.rq = Math.sqrt(0.5 * this.qp);
	          this.dd = 1 / this.rq;
	          this.xmf = 1;
	          this.ymf = 0.5 * this.qp;
	          break;
	        case this.OBLIQ:
	          this.rq = Math.sqrt(0.5 * this.qp);
	          sinphi = Math.sin(this.lat0);
	          this.sinb1 = qsfnz(this.e, sinphi) / this.qp;
	          this.cosb1 = Math.sqrt(1 - this.sinb1 * this.sinb1);
	          this.dd = Math.cos(this.lat0) / (Math.sqrt(1 - this.es * sinphi * sinphi) * this.rq * this.cosb1);
	          this.ymf = (this.xmf = this.rq) / this.dd;
	          this.xmf *= this.dd;
	          break;
	        }
	      }
	      else {
	        if (this.mode === this.OBLIQ) {
	          this.sinph0 = Math.sin(this.lat0);
	          this.cosph0 = Math.cos(this.lat0);
	        }
	      }
	    }
	
	    /* Lambert Azimuthal Equal Area forward equations--mapping lat,long to x,y
	      -----------------------------------------------------------------------*/
	    function forward$12(p) {
	
	      /* Forward equations
	          -----------------*/
	      var x, y, coslam, sinlam, sinphi, q, sinb, cosb, b, cosphi;
	      var lam = p.x;
	      var phi = p.y;
	
	      lam = adjust_lon(lam - this.long0);
	      if (this.sphere) {
	        sinphi = Math.sin(phi);
	        cosphi = Math.cos(phi);
	        coslam = Math.cos(lam);
	        if (this.mode === this.OBLIQ || this.mode === this.EQUIT) {
	          y = (this.mode === this.EQUIT) ? 1 + cosphi * coslam : 1 + this.sinph0 * sinphi + this.cosph0 * cosphi * coslam;
	          if (y <= EPSLN) {
	            return null;
	          }
	          y = Math.sqrt(2 / y);
	          x = y * cosphi * Math.sin(lam);
	          y *= (this.mode === this.EQUIT) ? sinphi : this.cosph0 * sinphi - this.sinph0 * cosphi * coslam;
	        }
	        else if (this.mode === this.N_POLE || this.mode === this.S_POLE) {
	          if (this.mode === this.N_POLE) {
	            coslam = -coslam;
	          }
	          if (Math.abs(phi + this.lat0) < EPSLN) {
	            return null;
	          }
	          y = FORTPI - phi * 0.5;
	          y = 2 * ((this.mode === this.S_POLE) ? Math.cos(y) : Math.sin(y));
	          x = y * Math.sin(lam);
	          y *= coslam;
	        }
	      }
	      else {
	        sinb = 0;
	        cosb = 0;
	        b = 0;
	        coslam = Math.cos(lam);
	        sinlam = Math.sin(lam);
	        sinphi = Math.sin(phi);
	        q = qsfnz(this.e, sinphi);
	        if (this.mode === this.OBLIQ || this.mode === this.EQUIT) {
	          sinb = q / this.qp;
	          cosb = Math.sqrt(1 - sinb * sinb);
	        }
	        switch (this.mode) {
	        case this.OBLIQ:
	          b = 1 + this.sinb1 * sinb + this.cosb1 * cosb * coslam;
	          break;
	        case this.EQUIT:
	          b = 1 + cosb * coslam;
	          break;
	        case this.N_POLE:
	          b = HALF_PI + phi;
	          q = this.qp - q;
	          break;
	        case this.S_POLE:
	          b = phi - HALF_PI;
	          q = this.qp + q;
	          break;
	        }
	        if (Math.abs(b) < EPSLN) {
	          return null;
	        }
	        switch (this.mode) {
	        case this.OBLIQ:
	        case this.EQUIT:
	          b = Math.sqrt(2 / b);
	          if (this.mode === this.OBLIQ) {
	            y = this.ymf * b * (this.cosb1 * sinb - this.sinb1 * cosb * coslam);
	          }
	          else {
	            y = (b = Math.sqrt(2 / (1 + cosb * coslam))) * sinb * this.ymf;
	          }
	          x = this.xmf * b * cosb * sinlam;
	          break;
	        case this.N_POLE:
	        case this.S_POLE:
	          if (q >= 0) {
	            x = (b = Math.sqrt(q)) * sinlam;
	            y = coslam * ((this.mode === this.S_POLE) ? b : -b);
	          }
	          else {
	            x = y = 0;
	          }
	          break;
	        }
	      }
	
	      p.x = this.a * x + this.x0;
	      p.y = this.a * y + this.y0;
	      return p;
	    }
	
	    /* Inverse equations
	      -----------------*/
	    function inverse$12(p) {
	      p.x -= this.x0;
	      p.y -= this.y0;
	      var x = p.x / this.a;
	      var y = p.y / this.a;
	      var lam, phi, cCe, sCe, q, rho, ab;
	      if (this.sphere) {
	        var cosz = 0,
	          rh, sinz = 0;
	
	        rh = Math.sqrt(x * x + y * y);
	        phi = rh * 0.5;
	        if (phi > 1) {
	          return null;
	        }
	        phi = 2 * Math.asin(phi);
	        if (this.mode === this.OBLIQ || this.mode === this.EQUIT) {
	          sinz = Math.sin(phi);
	          cosz = Math.cos(phi);
	        }
	        switch (this.mode) {
	        case this.EQUIT:
	          phi = (Math.abs(rh) <= EPSLN) ? 0 : Math.asin(y * sinz / rh);
	          x *= sinz;
	          y = cosz * rh;
	          break;
	        case this.OBLIQ:
	          phi = (Math.abs(rh) <= EPSLN) ? this.lat0 : Math.asin(cosz * this.sinph0 + y * sinz * this.cosph0 / rh);
	          x *= sinz * this.cosph0;
	          y = (cosz - Math.sin(phi) * this.sinph0) * rh;
	          break;
	        case this.N_POLE:
	          y = -y;
	          phi = HALF_PI - phi;
	          break;
	        case this.S_POLE:
	          phi -= HALF_PI;
	          break;
	        }
	        lam = (y === 0 && (this.mode === this.EQUIT || this.mode === this.OBLIQ)) ? 0 : Math.atan2(x, y);
	      }
	      else {
	        ab = 0;
	        if (this.mode === this.OBLIQ || this.mode === this.EQUIT) {
	          x /= this.dd;
	          y *= this.dd;
	          rho = Math.sqrt(x * x + y * y);
	          if (rho < EPSLN) {
	            p.x = this.long0;
	            p.y = this.lat0;
	            return p;
	          }
	          sCe = 2 * Math.asin(0.5 * rho / this.rq);
	          cCe = Math.cos(sCe);
	          x *= (sCe = Math.sin(sCe));
	          if (this.mode === this.OBLIQ) {
	            ab = cCe * this.sinb1 + y * sCe * this.cosb1 / rho;
	            q = this.qp * ab;
	            y = rho * this.cosb1 * cCe - y * this.sinb1 * sCe;
	          }
	          else {
	            ab = y * sCe / rho;
	            q = this.qp * ab;
	            y = rho * cCe;
	          }
	        }
	        else if (this.mode === this.N_POLE || this.mode === this.S_POLE) {
	          if (this.mode === this.N_POLE) {
	            y = -y;
	          }
	          q = (x * x + y * y);
	          if (!q) {
	            p.x = this.long0;
	            p.y = this.lat0;
	            return p;
	          }
	          ab = 1 - q / this.qp;
	          if (this.mode === this.S_POLE) {
	            ab = -ab;
	          }
	        }
	        lam = Math.atan2(x, y);
	        phi = authlat(Math.asin(ab), this.apa);
	      }
	
	      p.x = adjust_lon(this.long0 + lam);
	      p.y = phi;
	      return p;
	    }
	
	    /* determine latitude from authalic latitude */
	    var P00 = 0.33333333333333333333;
	
	    var P01 = 0.17222222222222222222;
	    var P02 = 0.10257936507936507936;
	    var P10 = 0.06388888888888888888;
	    var P11 = 0.06640211640211640211;
	    var P20 = 0.01641501294219154443;
	
	    function authset(es) {
	      var t;
	      var APA = [];
	      APA[0] = es * P00;
	      t = es * es;
	      APA[0] += t * P01;
	      APA[1] = t * P10;
	      t *= es;
	      APA[0] += t * P02;
	      APA[1] += t * P11;
	      APA[2] = t * P20;
	      return APA;
	    }
	
	    function authlat(beta, APA) {
	      var t = beta + beta;
	      return (beta + APA[0] * Math.sin(t) + APA[1] * Math.sin(t + t) + APA[2] * Math.sin(t + t + t));
	    }
	
	    var names$14 = ["Lambert Azimuthal Equal Area", "Lambert_Azimuthal_Equal_Area", "laea"];
	    var laea = {
	      init: init$13,
	      forward: forward$12,
	      inverse: inverse$12,
	      names: names$14,
	      S_POLE: S_POLE,
	      N_POLE: N_POLE,
	      EQUIT: EQUIT,
	      OBLIQ: OBLIQ
	    };
	
	    var asinz = function(x) {
	      if (Math.abs(x) > 1) {
	        x = (x > 1) ? 1 : -1;
	      }
	      return Math.asin(x);
	    };
	
	    function init$14() {
	
	      if (Math.abs(this.lat1 + this.lat2) < EPSLN) {
	        return;
	      }
	      this.temp = this.b / this.a;
	      this.es = 1 - Math.pow(this.temp, 2);
	      this.e3 = Math.sqrt(this.es);
	
	      this.sin_po = Math.sin(this.lat1);
	      this.cos_po = Math.cos(this.lat1);
	      this.t1 = this.sin_po;
	      this.con = this.sin_po;
	      this.ms1 = msfnz(this.e3, this.sin_po, this.cos_po);
	      this.qs1 = qsfnz(this.e3, this.sin_po, this.cos_po);
	
	      this.sin_po = Math.sin(this.lat2);
	      this.cos_po = Math.cos(this.lat2);
	      this.t2 = this.sin_po;
	      this.ms2 = msfnz(this.e3, this.sin_po, this.cos_po);
	      this.qs2 = qsfnz(this.e3, this.sin_po, this.cos_po);
	
	      this.sin_po = Math.sin(this.lat0);
	      this.cos_po = Math.cos(this.lat0);
	      this.t3 = this.sin_po;
	      this.qs0 = qsfnz(this.e3, this.sin_po, this.cos_po);
	
	      if (Math.abs(this.lat1 - this.lat2) > EPSLN) {
	        this.ns0 = (this.ms1 * this.ms1 - this.ms2 * this.ms2) / (this.qs2 - this.qs1);
	      }
	      else {
	        this.ns0 = this.con;
	      }
	      this.c = this.ms1 * this.ms1 + this.ns0 * this.qs1;
	      this.rh = this.a * Math.sqrt(this.c - this.ns0 * this.qs0) / this.ns0;
	    }
	
	    /* Albers Conical Equal Area forward equations--mapping lat,long to x,y
	      -------------------------------------------------------------------*/
	    function forward$13(p) {
	
	      var lon = p.x;
	      var lat = p.y;
	
	      this.sin_phi = Math.sin(lat);
	      this.cos_phi = Math.cos(lat);
	
	      var qs = qsfnz(this.e3, this.sin_phi, this.cos_phi);
	      var rh1 = this.a * Math.sqrt(this.c - this.ns0 * qs) / this.ns0;
	      var theta = this.ns0 * adjust_lon(lon - this.long0);
	      var x = rh1 * Math.sin(theta) + this.x0;
	      var y = this.rh - rh1 * Math.cos(theta) + this.y0;
	
	      p.x = x;
	      p.y = y;
	      return p;
	    }
	
	    function inverse$13(p) {
	      var rh1, qs, con, theta, lon, lat;
	
	      p.x -= this.x0;
	      p.y = this.rh - p.y + this.y0;
	      if (this.ns0 >= 0) {
	        rh1 = Math.sqrt(p.x * p.x + p.y * p.y);
	        con = 1;
	      }
	      else {
	        rh1 = -Math.sqrt(p.x * p.x + p.y * p.y);
	        con = -1;
	      }
	      theta = 0;
	      if (rh1 !== 0) {
	        theta = Math.atan2(con * p.x, con * p.y);
	      }
	      con = rh1 * this.ns0 / this.a;
	      if (this.sphere) {
	        lat = Math.asin((this.c - con * con) / (2 * this.ns0));
	      }
	      else {
	        qs = (this.c - con * con) / this.ns0;
	        lat = this.phi1z(this.e3, qs);
	      }
	
	      lon = adjust_lon(theta / this.ns0 + this.long0);
	      p.x = lon;
	      p.y = lat;
	      return p;
	    }
	
	    /* Function to compute phi1, the latitude for the inverse of the
	       Albers Conical Equal-Area projection.
	    -------------------------------------------*/
	    function phi1z(eccent, qs) {
	      var sinphi, cosphi, con, com, dphi;
	      var phi = asinz(0.5 * qs);
	      if (eccent < EPSLN) {
	        return phi;
	      }
	
	      var eccnts = eccent * eccent;
	      for (var i = 1; i <= 25; i++) {
	        sinphi = Math.sin(phi);
	        cosphi = Math.cos(phi);
	        con = eccent * sinphi;
	        com = 1 - con * con;
	        dphi = 0.5 * com * com / cosphi * (qs / (1 - eccnts) - sinphi / com + 0.5 / eccent * Math.log((1 - con) / (1 + con)));
	        phi = phi + dphi;
	        if (Math.abs(dphi) <= 1e-7) {
	          return phi;
	        }
	      }
	      return null;
	    }
	
	    var names$15 = ["Albers_Conic_Equal_Area", "Albers", "aea"];
	    var aea = {
	      init: init$14,
	      forward: forward$13,
	      inverse: inverse$13,
	      names: names$15,
	      phi1z: phi1z
	    };
	
	    /*
	      reference:
	        Wolfram Mathworld "Gnomonic Projection"
	        http://mathworld.wolfram.com/GnomonicProjection.html
	        Accessed: 12th November 2009
	      */
	    function init$15() {
	
	      /* Place parameters in static storage for common use
	          -------------------------------------------------*/
	      this.sin_p14 = Math.sin(this.lat0);
	      this.cos_p14 = Math.cos(this.lat0);
	      // Approximation for projecting points to the horizon (infinity)
	      this.infinity_dist = 1000 * this.a;
	      this.rc = 1;
	    }
	
	    /* Gnomonic forward equations--mapping lat,long to x,y
	        ---------------------------------------------------*/
	    function forward$14(p) {
	      var sinphi, cosphi; /* sin and cos value        */
	      var dlon; /* delta longitude value      */
	      var coslon; /* cos of longitude        */
	      var ksp; /* scale factor          */
	      var g;
	      var x, y;
	      var lon = p.x;
	      var lat = p.y;
	      /* Forward equations
	          -----------------*/
	      dlon = adjust_lon(lon - this.long0);
	
	      sinphi = Math.sin(lat);
	      cosphi = Math.cos(lat);
	
	      coslon = Math.cos(dlon);
	      g = this.sin_p14 * sinphi + this.cos_p14 * cosphi * coslon;
	      ksp = 1;
	      if ((g > 0) || (Math.abs(g) <= EPSLN)) {
	        x = this.x0 + this.a * ksp * cosphi * Math.sin(dlon) / g;
	        y = this.y0 + this.a * ksp * (this.cos_p14 * sinphi - this.sin_p14 * cosphi * coslon) / g;
	      }
	      else {
	
	        // Point is in the opposing hemisphere and is unprojectable
	        // We still need to return a reasonable point, so we project
	        // to infinity, on a bearing
	        // equivalent to the northern hemisphere equivalent
	        // This is a reasonable approximation for short shapes and lines that
	        // straddle the horizon.
	
	        x = this.x0 + this.infinity_dist * cosphi * Math.sin(dlon);
	        y = this.y0 + this.infinity_dist * (this.cos_p14 * sinphi - this.sin_p14 * cosphi * coslon);
	
	      }
	      p.x = x;
	      p.y = y;
	      return p;
	    }
	
	    function inverse$14(p) {
	      var rh; /* Rho */
	      var sinc, cosc;
	      var c;
	      var lon, lat;
	
	      /* Inverse equations
	          -----------------*/
	      p.x = (p.x - this.x0) / this.a;
	      p.y = (p.y - this.y0) / this.a;
	
	      p.x /= this.k0;
	      p.y /= this.k0;
	
	      if ((rh = Math.sqrt(p.x * p.x + p.y * p.y))) {
	        c = Math.atan2(rh, this.rc);
	        sinc = Math.sin(c);
	        cosc = Math.cos(c);
	
	        lat = asinz(cosc * this.sin_p14 + (p.y * sinc * this.cos_p14) / rh);
	        lon = Math.atan2(p.x * sinc, rh * this.cos_p14 * cosc - p.y * this.sin_p14 * sinc);
	        lon = adjust_lon(this.long0 + lon);
	      }
	      else {
	        lat = this.phic0;
	        lon = 0;
	      }
	
	      p.x = lon;
	      p.y = lat;
	      return p;
	    }
	
	    var names$16 = ["gnom"];
	    var gnom = {
	      init: init$15,
	      forward: forward$14,
	      inverse: inverse$14,
	      names: names$16
	    };
	
	    var iqsfnz = function(eccent, q) {
	      var temp = 1 - (1 - eccent * eccent) / (2 * eccent) * Math.log((1 - eccent) / (1 + eccent));
	      if (Math.abs(Math.abs(q) - temp) < 1.0E-6) {
	        if (q < 0) {
	          return (-1 * HALF_PI);
	        }
	        else {
	          return HALF_PI;
	        }
	      }
	      //var phi = 0.5* q/(1-eccent*eccent);
	      var phi = Math.asin(0.5 * q);
	      var dphi;
	      var sin_phi;
	      var cos_phi;
	      var con;
	      for (var i = 0; i < 30; i++) {
	        sin_phi = Math.sin(phi);
	        cos_phi = Math.cos(phi);
	        con = eccent * sin_phi;
	        dphi = Math.pow(1 - con * con, 2) / (2 * cos_phi) * (q / (1 - eccent * eccent) - sin_phi / (1 - con * con) + 0.5 / eccent * Math.log((1 - con) / (1 + con)));
	        phi += dphi;
	        if (Math.abs(dphi) <= 0.0000000001) {
	          return phi;
	        }
	      }
	
	      //console.log("IQSFN-CONV:Latitude failed to converge after 30 iterations");
	      return NaN;
	    };
	
	    /*
	      reference:
	        "Cartographic Projection Procedures for the UNIX Environment-
	        A User's Manual" by Gerald I. Evenden,
	        USGS Open File Report 90-284and Release 4 Interim Reports (2003)
	    */
	    function init$16() {
	      //no-op
	      if (!this.sphere) {
	        this.k0 = msfnz(this.e, Math.sin(this.lat_ts), Math.cos(this.lat_ts));
	      }
	    }
	
	    /* Cylindrical Equal Area forward equations--mapping lat,long to x,y
	        ------------------------------------------------------------*/
	    function forward$15(p) {
	      var lon = p.x;
	      var lat = p.y;
	      var x, y;
	      /* Forward equations
	          -----------------*/
	      var dlon = adjust_lon(lon - this.long0);
	      if (this.sphere) {
	        x = this.x0 + this.a * dlon * Math.cos(this.lat_ts);
	        y = this.y0 + this.a * Math.sin(lat) / Math.cos(this.lat_ts);
	      }
	      else {
	        var qs = qsfnz(this.e, Math.sin(lat));
	        x = this.x0 + this.a * this.k0 * dlon;
	        y = this.y0 + this.a * qs * 0.5 / this.k0;
	      }
	
	      p.x = x;
	      p.y = y;
	      return p;
	    }
	
	    /* Cylindrical Equal Area inverse equations--mapping x,y to lat/long
	        ------------------------------------------------------------*/
	    function inverse$15(p) {
	      p.x -= this.x0;
	      p.y -= this.y0;
	      var lon, lat;
	
	      if (this.sphere) {
	        lon = adjust_lon(this.long0 + (p.x / this.a) / Math.cos(this.lat_ts));
	        lat = Math.asin((p.y / this.a) * Math.cos(this.lat_ts));
	      }
	      else {
	        lat = iqsfnz(this.e, 2 * p.y * this.k0 / this.a);
	        lon = adjust_lon(this.long0 + p.x / (this.a * this.k0));
	      }
	
	      p.x = lon;
	      p.y = lat;
	      return p;
	    }
	
	    var names$17 = ["cea"];
	    var cea = {
	      init: init$16,
	      forward: forward$15,
	      inverse: inverse$15,
	      names: names$17
	    };
	
	    function init$17() {
	
	      this.x0 = this.x0 || 0;
	      this.y0 = this.y0 || 0;
	      this.lat0 = this.lat0 || 0;
	      this.long0 = this.long0 || 0;
	      this.lat_ts = this.lat_ts || 0;
	      this.title = this.title || "Equidistant Cylindrical (Plate Carre)";
	
	      this.rc = Math.cos(this.lat_ts);
	    }
	
	    // forward equations--mapping lat,long to x,y
	    // -----------------------------------------------------------------
	    function forward$16(p) {
	
	      var lon = p.x;
	      var lat = p.y;
	
	      var dlon = adjust_lon(lon - this.long0);
	      var dlat = adjust_lat(lat - this.lat0);
	      p.x = this.x0 + (this.a * dlon * this.rc);
	      p.y = this.y0 + (this.a * dlat);
	      return p;
	    }
	
	    // inverse equations--mapping x,y to lat/long
	    // -----------------------------------------------------------------
	    function inverse$16(p) {
	
	      var x = p.x;
	      var y = p.y;
	
	      p.x = adjust_lon(this.long0 + ((x - this.x0) / (this.a * this.rc)));
	      p.y = adjust_lat(this.lat0 + ((y - this.y0) / (this.a)));
	      return p;
	    }
	
	    var names$18 = ["Equirectangular", "Equidistant_Cylindrical", "eqc"];
	    var eqc = {
	      init: init$17,
	      forward: forward$16,
	      inverse: inverse$16,
	      names: names$18
	    };
	
	    var MAX_ITER$2 = 20;
	
	    function init$18() {
	      /* Place parameters in static storage for common use
	          -------------------------------------------------*/
	      this.temp = this.b / this.a;
	      this.es = 1 - Math.pow(this.temp, 2); // devait etre dans tmerc.js mais n y est pas donc je commente sinon retour de valeurs nulles
	      this.e = Math.sqrt(this.es);
	      this.e0 = e0fn(this.es);
	      this.e1 = e1fn(this.es);
	      this.e2 = e2fn(this.es);
	      this.e3 = e3fn(this.es);
	      this.ml0 = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, this.lat0); //si que des zeros le calcul ne se fait pas
	    }
	
	    /* Polyconic forward equations--mapping lat,long to x,y
	        ---------------------------------------------------*/
	    function forward$17(p) {
	      var lon = p.x;
	      var lat = p.y;
	      var x, y, el;
	      var dlon = adjust_lon(lon - this.long0);
	      el = dlon * Math.sin(lat);
	      if (this.sphere) {
	        if (Math.abs(lat) <= EPSLN) {
	          x = this.a * dlon;
	          y = -1 * this.a * this.lat0;
	        }
	        else {
	          x = this.a * Math.sin(el) / Math.tan(lat);
	          y = this.a * (adjust_lat(lat - this.lat0) + (1 - Math.cos(el)) / Math.tan(lat));
	        }
	      }
	      else {
	        if (Math.abs(lat) <= EPSLN) {
	          x = this.a * dlon;
	          y = -1 * this.ml0;
	        }
	        else {
	          var nl = gN(this.a, this.e, Math.sin(lat)) / Math.tan(lat);
	          x = nl * Math.sin(el);
	          y = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, lat) - this.ml0 + nl * (1 - Math.cos(el));
	        }
	
	      }
	      p.x = x + this.x0;
	      p.y = y + this.y0;
	      return p;
	    }
	
	    /* Inverse equations
	      -----------------*/
	    function inverse$17(p) {
	      var lon, lat, x, y, i;
	      var al, bl;
	      var phi, dphi;
	      x = p.x - this.x0;
	      y = p.y - this.y0;
	
	      if (this.sphere) {
	        if (Math.abs(y + this.a * this.lat0) <= EPSLN) {
	          lon = adjust_lon(x / this.a + this.long0);
	          lat = 0;
	        }
	        else {
	          al = this.lat0 + y / this.a;
	          bl = x * x / this.a / this.a + al * al;
	          phi = al;
	          var tanphi;
	          for (i = MAX_ITER$2; i; --i) {
	            tanphi = Math.tan(phi);
	            dphi = -1 * (al * (phi * tanphi + 1) - phi - 0.5 * (phi * phi + bl) * tanphi) / ((phi - al) / tanphi - 1);
	            phi += dphi;
	            if (Math.abs(dphi) <= EPSLN) {
	              lat = phi;
	              break;
	            }
	          }
	          lon = adjust_lon(this.long0 + (Math.asin(x * Math.tan(phi) / this.a)) / Math.sin(lat));
	        }
	      }
	      else {
	        if (Math.abs(y + this.ml0) <= EPSLN) {
	          lat = 0;
	          lon = adjust_lon(this.long0 + x / this.a);
	        }
	        else {
	
	          al = (this.ml0 + y) / this.a;
	          bl = x * x / this.a / this.a + al * al;
	          phi = al;
	          var cl, mln, mlnp, ma;
	          var con;
	          for (i = MAX_ITER$2; i; --i) {
	            con = this.e * Math.sin(phi);
	            cl = Math.sqrt(1 - con * con) * Math.tan(phi);
	            mln = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, phi);
	            mlnp = this.e0 - 2 * this.e1 * Math.cos(2 * phi) + 4 * this.e2 * Math.cos(4 * phi) - 6 * this.e3 * Math.cos(6 * phi);
	            ma = mln / this.a;
	            dphi = (al * (cl * ma + 1) - ma - 0.5 * cl * (ma * ma + bl)) / (this.es * Math.sin(2 * phi) * (ma * ma + bl - 2 * al * ma) / (4 * cl) + (al - ma) * (cl * mlnp - 2 / Math.sin(2 * phi)) - mlnp);
	            phi -= dphi;
	            if (Math.abs(dphi) <= EPSLN) {
	              lat = phi;
	              break;
	            }
	          }
	
	          //lat=phi4z(this.e,this.e0,this.e1,this.e2,this.e3,al,bl,0,0);
	          cl = Math.sqrt(1 - this.es * Math.pow(Math.sin(lat), 2)) * Math.tan(lat);
	          lon = adjust_lon(this.long0 + Math.asin(x * cl / this.a) / Math.sin(lat));
	        }
	      }
	
	      p.x = lon;
	      p.y = lat;
	      return p;
	    }
	
	    var names$19 = ["Polyconic", "poly"];
	    var poly = {
	      init: init$18,
	      forward: forward$17,
	      inverse: inverse$17,
	      names: names$19
	    };
	
	    /*
	      reference
	        Department of Land and Survey Technical Circular 1973/32
	          http://www.linz.govt.nz/docs/miscellaneous/nz-map-definition.pdf
	        OSG Technical Report 4.1
	          http://www.linz.govt.nz/docs/miscellaneous/nzmg.pdf
	      */
	
	    /**
	     * iterations: Number of iterations to refine inverse transform.
	     *     0 -> km accuracy
	     *     1 -> m accuracy -- suitable for most mapping applications
	     *     2 -> mm accuracy
	     */
	
	
	    function init$19() {
	      this.A = [];
	      this.A[1] = 0.6399175073;
	      this.A[2] = -0.1358797613;
	      this.A[3] = 0.063294409;
	      this.A[4] = -0.02526853;
	      this.A[5] = 0.0117879;
	      this.A[6] = -0.0055161;
	      this.A[7] = 0.0026906;
	      this.A[8] = -0.001333;
	      this.A[9] = 0.00067;
	      this.A[10] = -0.00034;
	
	      this.B_re = [];
	      this.B_im = [];
	      this.B_re[1] = 0.7557853228;
	      this.B_im[1] = 0;
	      this.B_re[2] = 0.249204646;
	      this.B_im[2] = 0.003371507;
	      this.B_re[3] = -0.001541739;
	      this.B_im[3] = 0.041058560;
	      this.B_re[4] = -0.10162907;
	      this.B_im[4] = 0.01727609;
	      this.B_re[5] = -0.26623489;
	      this.B_im[5] = -0.36249218;
	      this.B_re[6] = -0.6870983;
	      this.B_im[6] = -1.1651967;
	
	      this.C_re = [];
	      this.C_im = [];
	      this.C_re[1] = 1.3231270439;
	      this.C_im[1] = 0;
	      this.C_re[2] = -0.577245789;
	      this.C_im[2] = -0.007809598;
	      this.C_re[3] = 0.508307513;
	      this.C_im[3] = -0.112208952;
	      this.C_re[4] = -0.15094762;
	      this.C_im[4] = 0.18200602;
	      this.C_re[5] = 1.01418179;
	      this.C_im[5] = 1.64497696;
	      this.C_re[6] = 1.9660549;
	      this.C_im[6] = 2.5127645;
	
	      this.D = [];
	      this.D[1] = 1.5627014243;
	      this.D[2] = 0.5185406398;
	      this.D[3] = -0.03333098;
	      this.D[4] = -0.1052906;
	      this.D[5] = -0.0368594;
	      this.D[6] = 0.007317;
	      this.D[7] = 0.01220;
	      this.D[8] = 0.00394;
	      this.D[9] = -0.0013;
	    }
	
	    /**
	        New Zealand Map Grid Forward  - long/lat to x/y
	        long/lat in radians
	      */
	    function forward$18(p) {
	      var n;
	      var lon = p.x;
	      var lat = p.y;
	
	      var delta_lat = lat - this.lat0;
	      var delta_lon = lon - this.long0;
	
	      // 1. Calculate d_phi and d_psi    ...                          // and d_lambda
	      // For this algorithm, delta_latitude is in seconds of arc x 10-5, so we need to scale to those units. Longitude is radians.
	      var d_phi = delta_lat / SEC_TO_RAD * 1E-5;
	      var d_lambda = delta_lon;
	      var d_phi_n = 1; // d_phi^0
	
	      var d_psi = 0;
	      for (n = 1; n <= 10; n++) {
	        d_phi_n = d_phi_n * d_phi;
	        d_psi = d_psi + this.A[n] * d_phi_n;
	      }
	
	      // 2. Calculate theta
	      var th_re = d_psi;
	      var th_im = d_lambda;
	
	      // 3. Calculate z
	      var th_n_re = 1;
	      var th_n_im = 0; // theta^0
	      var th_n_re1;
	      var th_n_im1;
	
	      var z_re = 0;
	      var z_im = 0;
	      for (n = 1; n <= 6; n++) {
	        th_n_re1 = th_n_re * th_re - th_n_im * th_im;
	        th_n_im1 = th_n_im * th_re + th_n_re * th_im;
	        th_n_re = th_n_re1;
	        th_n_im = th_n_im1;
	        z_re = z_re + this.B_re[n] * th_n_re - this.B_im[n] * th_n_im;
	        z_im = z_im + this.B_im[n] * th_n_re + this.B_re[n] * th_n_im;
	      }
	
	      // 4. Calculate easting and northing
	      p.x = (z_im * this.a) + this.x0;
	      p.y = (z_re * this.a) + this.y0;
	
	      return p;
	    }
	
	    /**
	        New Zealand Map Grid Inverse  -  x/y to long/lat
	      */
	    function inverse$18(p) {
	      var n;
	      var x = p.x;
	      var y = p.y;
	
	      var delta_x = x - this.x0;
	      var delta_y = y - this.y0;
	
	      // 1. Calculate z
	      var z_re = delta_y / this.a;
	      var z_im = delta_x / this.a;
	
	      // 2a. Calculate theta - first approximation gives km accuracy
	      var z_n_re = 1;
	      var z_n_im = 0; // z^0
	      var z_n_re1;
	      var z_n_im1;
	
	      var th_re = 0;
	      var th_im = 0;
	      for (n = 1; n <= 6; n++) {
	        z_n_re1 = z_n_re * z_re - z_n_im * z_im;
	        z_n_im1 = z_n_im * z_re + z_n_re * z_im;
	        z_n_re = z_n_re1;
	        z_n_im = z_n_im1;
	        th_re = th_re + this.C_re[n] * z_n_re - this.C_im[n] * z_n_im;
	        th_im = th_im + this.C_im[n] * z_n_re + this.C_re[n] * z_n_im;
	      }
	
	      // 2b. Iterate to refine the accuracy of the calculation
	      //        0 iterations gives km accuracy
	      //        1 iteration gives m accuracy -- good enough for most mapping applications
	      //        2 iterations bives mm accuracy
	      for (var i = 0; i < this.iterations; i++) {
	        var th_n_re = th_re;
	        var th_n_im = th_im;
	        var th_n_re1;
	        var th_n_im1;
	
	        var num_re = z_re;
	        var num_im = z_im;
	        for (n = 2; n <= 6; n++) {
	          th_n_re1 = th_n_re * th_re - th_n_im * th_im;
	          th_n_im1 = th_n_im * th_re + th_n_re * th_im;
	          th_n_re = th_n_re1;
	          th_n_im = th_n_im1;
	          num_re = num_re + (n - 1) * (this.B_re[n] * th_n_re - this.B_im[n] * th_n_im);
	          num_im = num_im + (n - 1) * (this.B_im[n] * th_n_re + this.B_re[n] * th_n_im);
	        }
	
	        th_n_re = 1;
	        th_n_im = 0;
	        var den_re = this.B_re[1];
	        var den_im = this.B_im[1];
	        for (n = 2; n <= 6; n++) {
	          th_n_re1 = th_n_re * th_re - th_n_im * th_im;
	          th_n_im1 = th_n_im * th_re + th_n_re * th_im;
	          th_n_re = th_n_re1;
	          th_n_im = th_n_im1;
	          den_re = den_re + n * (this.B_re[n] * th_n_re - this.B_im[n] * th_n_im);
	          den_im = den_im + n * (this.B_im[n] * th_n_re + this.B_re[n] * th_n_im);
	        }
	
	        // Complex division
	        var den2 = den_re * den_re + den_im * den_im;
	        th_re = (num_re * den_re + num_im * den_im) / den2;
	        th_im = (num_im * den_re - num_re * den_im) / den2;
	      }
	
	      // 3. Calculate d_phi              ...                                    // and d_lambda
	      var d_psi = th_re;
	      var d_lambda = th_im;
	      var d_psi_n = 1; // d_psi^0
	
	      var d_phi = 0;
	      for (n = 1; n <= 9; n++) {
	        d_psi_n = d_psi_n * d_psi;
	        d_phi = d_phi + this.D[n] * d_psi_n;
	      }
	
	      // 4. Calculate latitude and longitude
	      // d_phi is calcuated in second of arc * 10^-5, so we need to scale back to radians. d_lambda is in radians.
	      var lat = this.lat0 + (d_phi * SEC_TO_RAD * 1E5);
	      var lon = this.long0 + d_lambda;
	
	      p.x = lon;
	      p.y = lat;
	
	      return p;
	    }
	
	    var names$20 = ["New_Zealand_Map_Grid", "nzmg"];
	    var nzmg = {
	      init: init$19,
	      forward: forward$18,
	      inverse: inverse$18,
	      names: names$20
	    };
	
	    /*
	      reference
	        "New Equal-Area Map Projections for Noncircular Regions", John P. Snyder,
	        The American Cartographer, Vol 15, No. 4, October 1988, pp. 341-355.
	      */
	
	
	    /* Initialize the Miller Cylindrical projection
	      -------------------------------------------*/
	    function init$20() {
	      //no-op
	    }
	
	    /* Miller Cylindrical forward equations--mapping lat,long to x,y
	        ------------------------------------------------------------*/
	    function forward$19(p) {
	      var lon = p.x;
	      var lat = p.y;
	      /* Forward equations
	          -----------------*/
	      var dlon = adjust_lon(lon - this.long0);
	      var x = this.x0 + this.a * dlon;
	      var y = this.y0 + this.a * Math.log(Math.tan((Math.PI / 4) + (lat / 2.5))) * 1.25;
	
	      p.x = x;
	      p.y = y;
	      return p;
	    }
	
	    /* Miller Cylindrical inverse equations--mapping x,y to lat/long
	        ------------------------------------------------------------*/
	    function inverse$19(p) {
	      p.x -= this.x0;
	      p.y -= this.y0;
	
	      var lon = adjust_lon(this.long0 + p.x / this.a);
	      var lat = 2.5 * (Math.atan(Math.exp(0.8 * p.y / this.a)) - Math.PI / 4);
	
	      p.x = lon;
	      p.y = lat;
	      return p;
	    }
	
	    var names$21 = ["Miller_Cylindrical", "mill"];
	    var mill = {
	      init: init$20,
	      forward: forward$19,
	      inverse: inverse$19,
	      names: names$21
	    };
	
	    var MAX_ITER$3 = 20;
	    function init$21() {
	      /* Place parameters in static storage for common use
	        -------------------------------------------------*/
	
	
	      if (!this.sphere) {
	        this.en = pj_enfn(this.es);
	      }
	      else {
	        this.n = 1;
	        this.m = 0;
	        this.es = 0;
	        this.C_y = Math.sqrt((this.m + 1) / this.n);
	        this.C_x = this.C_y / (this.m + 1);
	      }
	
	    }
	
	    /* Sinusoidal forward equations--mapping lat,long to x,y
	      -----------------------------------------------------*/
	    function forward$20(p) {
	      var x, y;
	      var lon = p.x;
	      var lat = p.y;
	      /* Forward equations
	        -----------------*/
	      lon = adjust_lon(lon - this.long0);
	
	      if (this.sphere) {
	        if (!this.m) {
	          lat = this.n !== 1 ? Math.asin(this.n * Math.sin(lat)) : lat;
	        }
	        else {
	          var k = this.n * Math.sin(lat);
	          for (var i = MAX_ITER$3; i; --i) {
	            var V = (this.m * lat + Math.sin(lat) - k) / (this.m + Math.cos(lat));
	            lat -= V;
	            if (Math.abs(V) < EPSLN) {
	              break;
	            }
	          }
	        }
	        x = this.a * this.C_x * lon * (this.m + Math.cos(lat));
	        y = this.a * this.C_y * lat;
	
	      }
	      else {
	
	        var s = Math.sin(lat);
	        var c = Math.cos(lat);
	        y = this.a * pj_mlfn(lat, s, c, this.en);
	        x = this.a * lon * c / Math.sqrt(1 - this.es * s * s);
	      }
	
	      p.x = x;
	      p.y = y;
	      return p;
	    }
	
	    function inverse$20(p) {
	      var lat, temp, lon, s;
	
	      p.x -= this.x0;
	      lon = p.x / this.a;
	      p.y -= this.y0;
	      lat = p.y / this.a;
	
	      if (this.sphere) {
	        lat /= this.C_y;
	        lon = lon / (this.C_x * (this.m + Math.cos(lat)));
	        if (this.m) {
	          lat = asinz((this.m * lat + Math.sin(lat)) / this.n);
	        }
	        else if (this.n !== 1) {
	          lat = asinz(Math.sin(lat) / this.n);
	        }
	        lon = adjust_lon(lon + this.long0);
	        lat = adjust_lat(lat);
	      }
	      else {
	        lat = pj_inv_mlfn(p.y / this.a, this.es, this.en);
	        s = Math.abs(lat);
	        if (s < HALF_PI) {
	          s = Math.sin(lat);
	          temp = this.long0 + p.x * Math.sqrt(1 - this.es * s * s) / (this.a * Math.cos(lat));
	          //temp = this.long0 + p.x / (this.a * Math.cos(lat));
	          lon = adjust_lon(temp);
	        }
	        else if ((s - EPSLN) < HALF_PI) {
	          lon = this.long0;
	        }
	      }
	      p.x = lon;
	      p.y = lat;
	      return p;
	    }
	
	    var names$22 = ["Sinusoidal", "sinu"];
	    var sinu = {
	      init: init$21,
	      forward: forward$20,
	      inverse: inverse$20,
	      names: names$22
	    };
	
	    function init$22() {}
	    /* Mollweide forward equations--mapping lat,long to x,y
	        ----------------------------------------------------*/
	    function forward$21(p) {
	
	      /* Forward equations
	          -----------------*/
	      var lon = p.x;
	      var lat = p.y;
	
	      var delta_lon = adjust_lon(lon - this.long0);
	      var theta = lat;
	      var con = Math.PI * Math.sin(lat);
	
	      /* Iterate using the Newton-Raphson method to find theta
	          -----------------------------------------------------*/
	      while (true) {
	        var delta_theta = -(theta + Math.sin(theta) - con) / (1 + Math.cos(theta));
	        theta += delta_theta;
	        if (Math.abs(delta_theta) < EPSLN) {
	          break;
	        }
	      }
	      theta /= 2;
	
	      /* If the latitude is 90 deg, force the x coordinate to be "0 + false easting"
	           this is done here because of precision problems with "cos(theta)"
	           --------------------------------------------------------------------------*/
	      if (Math.PI / 2 - Math.abs(lat) < EPSLN) {
	        delta_lon = 0;
	      }
	      var x = 0.900316316158 * this.a * delta_lon * Math.cos(theta) + this.x0;
	      var y = 1.4142135623731 * this.a * Math.sin(theta) + this.y0;
	
	      p.x = x;
	      p.y = y;
	      return p;
	    }
	
	    function inverse$21(p) {
	      var theta;
	      var arg;
	
	      /* Inverse equations
	          -----------------*/
	      p.x -= this.x0;
	      p.y -= this.y0;
	      arg = p.y / (1.4142135623731 * this.a);
	
	      /* Because of division by zero problems, 'arg' can not be 1.  Therefore
	           a number very close to one is used instead.
	           -------------------------------------------------------------------*/
	      if (Math.abs(arg) > 0.999999999999) {
	        arg = 0.999999999999;
	      }
	      theta = Math.asin(arg);
	      var lon = adjust_lon(this.long0 + (p.x / (0.900316316158 * this.a * Math.cos(theta))));
	      if (lon < (-Math.PI)) {
	        lon = -Math.PI;
	      }
	      if (lon > Math.PI) {
	        lon = Math.PI;
	      }
	      arg = (2 * theta + Math.sin(2 * theta)) / Math.PI;
	      if (Math.abs(arg) > 1) {
	        arg = 1;
	      }
	      var lat = Math.asin(arg);
	
	      p.x = lon;
	      p.y = lat;
	      return p;
	    }
	
	    var names$23 = ["Mollweide", "moll"];
	    var moll = {
	      init: init$22,
	      forward: forward$21,
	      inverse: inverse$21,
	      names: names$23
	    };
	
	    function init$23() {
	
	      /* Place parameters in static storage for common use
	          -------------------------------------------------*/
	      // Standard Parallels cannot be equal and on opposite sides of the equator
	      if (Math.abs(this.lat1 + this.lat2) < EPSLN) {
	        return;
	      }
	      this.lat2 = this.lat2 || this.lat1;
	      this.temp = this.b / this.a;
	      this.es = 1 - Math.pow(this.temp, 2);
	      this.e = Math.sqrt(this.es);
	      this.e0 = e0fn(this.es);
	      this.e1 = e1fn(this.es);
	      this.e2 = e2fn(this.es);
	      this.e3 = e3fn(this.es);
	
	      this.sinphi = Math.sin(this.lat1);
	      this.cosphi = Math.cos(this.lat1);
	
	      this.ms1 = msfnz(this.e, this.sinphi, this.cosphi);
	      this.ml1 = mlfn(this.e0, this.e1, this.e2, this.e3, this.lat1);
	
	      if (Math.abs(this.lat1 - this.lat2) < EPSLN) {
	        this.ns = this.sinphi;
	      }
	      else {
	        this.sinphi = Math.sin(this.lat2);
	        this.cosphi = Math.cos(this.lat2);
	        this.ms2 = msfnz(this.e, this.sinphi, this.cosphi);
	        this.ml2 = mlfn(this.e0, this.e1, this.e2, this.e3, this.lat2);
	        this.ns = (this.ms1 - this.ms2) / (this.ml2 - this.ml1);
	      }
	      this.g = this.ml1 + this.ms1 / this.ns;
	      this.ml0 = mlfn(this.e0, this.e1, this.e2, this.e3, this.lat0);
	      this.rh = this.a * (this.g - this.ml0);
	    }
	
	    /* Equidistant Conic forward equations--mapping lat,long to x,y
	      -----------------------------------------------------------*/
	    function forward$22(p) {
	      var lon = p.x;
	      var lat = p.y;
	      var rh1;
	
	      /* Forward equations
	          -----------------*/
	      if (this.sphere) {
	        rh1 = this.a * (this.g - lat);
	      }
	      else {
	        var ml = mlfn(this.e0, this.e1, this.e2, this.e3, lat);
	        rh1 = this.a * (this.g - ml);
	      }
	      var theta = this.ns * adjust_lon(lon - this.long0);
	      var x = this.x0 + rh1 * Math.sin(theta);
	      var y = this.y0 + this.rh - rh1 * Math.cos(theta);
	      p.x = x;
	      p.y = y;
	      return p;
	    }
	
	    /* Inverse equations
	      -----------------*/
	    function inverse$22(p) {
	      p.x -= this.x0;
	      p.y = this.rh - p.y + this.y0;
	      var con, rh1, lat, lon;
	      if (this.ns >= 0) {
	        rh1 = Math.sqrt(p.x * p.x + p.y * p.y);
	        con = 1;
	      }
	      else {
	        rh1 = -Math.sqrt(p.x * p.x + p.y * p.y);
	        con = -1;
	      }
	      var theta = 0;
	      if (rh1 !== 0) {
	        theta = Math.atan2(con * p.x, con * p.y);
	      }
	
	      if (this.sphere) {
	        lon = adjust_lon(this.long0 + theta / this.ns);
	        lat = adjust_lat(this.g - rh1 / this.a);
	        p.x = lon;
	        p.y = lat;
	        return p;
	      }
	      else {
	        var ml = this.g - rh1 / this.a;
	        lat = imlfn(ml, this.e0, this.e1, this.e2, this.e3);
	        lon = adjust_lon(this.long0 + theta / this.ns);
	        p.x = lon;
	        p.y = lat;
	        return p;
	      }
	
	    }
	
	    var names$24 = ["Equidistant_Conic", "eqdc"];
	    var eqdc = {
	      init: init$23,
	      forward: forward$22,
	      inverse: inverse$22,
	      names: names$24
	    };
	
	    /* Initialize the Van Der Grinten projection
	      ----------------------------------------*/
	    function init$24() {
	      //this.R = 6370997; //Radius of earth
	      this.R = this.a;
	    }
	
	    function forward$23(p) {
	
	      var lon = p.x;
	      var lat = p.y;
	
	      /* Forward equations
	        -----------------*/
	      var dlon = adjust_lon(lon - this.long0);
	      var x, y;
	
	      if (Math.abs(lat) <= EPSLN) {
	        x = this.x0 + this.R * dlon;
	        y = this.y0;
	      }
	      var theta = asinz(2 * Math.abs(lat / Math.PI));
	      if ((Math.abs(dlon) <= EPSLN) || (Math.abs(Math.abs(lat) - HALF_PI) <= EPSLN)) {
	        x = this.x0;
	        if (lat >= 0) {
	          y = this.y0 + Math.PI * this.R * Math.tan(0.5 * theta);
	        }
	        else {
	          y = this.y0 + Math.PI * this.R * -Math.tan(0.5 * theta);
	        }
	        //  return(OK);
	      }
	      var al = 0.5 * Math.abs((Math.PI / dlon) - (dlon / Math.PI));
	      var asq = al * al;
	      var sinth = Math.sin(theta);
	      var costh = Math.cos(theta);
	
	      var g = costh / (sinth + costh - 1);
	      var gsq = g * g;
	      var m = g * (2 / sinth - 1);
	      var msq = m * m;
	      var con = Math.PI * this.R * (al * (g - msq) + Math.sqrt(asq * (g - msq) * (g - msq) - (msq + asq) * (gsq - msq))) / (msq + asq);
	      if (dlon < 0) {
	        con = -con;
	      }
	      x = this.x0 + con;
	      //con = Math.abs(con / (Math.PI * this.R));
	      var q = asq + g;
	      con = Math.PI * this.R * (m * q - al * Math.sqrt((msq + asq) * (asq + 1) - q * q)) / (msq + asq);
	      if (lat >= 0) {
	        //y = this.y0 + Math.PI * this.R * Math.sqrt(1 - con * con - 2 * al * con);
	        y = this.y0 + con;
	      }
	      else {
	        //y = this.y0 - Math.PI * this.R * Math.sqrt(1 - con * con - 2 * al * con);
	        y = this.y0 - con;
	      }
	      p.x = x;
	      p.y = y;
	      return p;
	    }
	
	    /* Van Der Grinten inverse equations--mapping x,y to lat/long
	      ---------------------------------------------------------*/
	    function inverse$23(p) {
	      var lon, lat;
	      var xx, yy, xys, c1, c2, c3;
	      var a1;
	      var m1;
	      var con;
	      var th1;
	      var d;
	
	      /* inverse equations
	        -----------------*/
	      p.x -= this.x0;
	      p.y -= this.y0;
	      con = Math.PI * this.R;
	      xx = p.x / con;
	      yy = p.y / con;
	      xys = xx * xx + yy * yy;
	      c1 = -Math.abs(yy) * (1 + xys);
	      c2 = c1 - 2 * yy * yy + xx * xx;
	      c3 = -2 * c1 + 1 + 2 * yy * yy + xys * xys;
	      d = yy * yy / c3 + (2 * c2 * c2 * c2 / c3 / c3 / c3 - 9 * c1 * c2 / c3 / c3) / 27;
	      a1 = (c1 - c2 * c2 / 3 / c3) / c3;
	      m1 = 2 * Math.sqrt(-a1 / 3);
	      con = ((3 * d) / a1) / m1;
	      if (Math.abs(con) > 1) {
	        if (con >= 0) {
	          con = 1;
	        }
	        else {
	          con = -1;
	        }
	      }
	      th1 = Math.acos(con) / 3;
	      if (p.y >= 0) {
	        lat = (-m1 * Math.cos(th1 + Math.PI / 3) - c2 / 3 / c3) * Math.PI;
	      }
	      else {
	        lat = -(-m1 * Math.cos(th1 + Math.PI / 3) - c2 / 3 / c3) * Math.PI;
	      }
	
	      if (Math.abs(xx) < EPSLN) {
	        lon = this.long0;
	      }
	      else {
	        lon = adjust_lon(this.long0 + Math.PI * (xys - 1 + Math.sqrt(1 + 2 * (xx * xx - yy * yy) + xys * xys)) / 2 / xx);
	      }
	
	      p.x = lon;
	      p.y = lat;
	      return p;
	    }
	
	    var names$25 = ["Van_der_Grinten_I", "VanDerGrinten", "vandg"];
	    var vandg = {
	      init: init$24,
	      forward: forward$23,
	      inverse: inverse$23,
	      names: names$25
	    };
	
	    function init$25() {
	      this.sin_p12 = Math.sin(this.lat0);
	      this.cos_p12 = Math.cos(this.lat0);
	    }
	
	    function forward$24(p) {
	      var lon = p.x;
	      var lat = p.y;
	      var sinphi = Math.sin(p.y);
	      var cosphi = Math.cos(p.y);
	      var dlon = adjust_lon(lon - this.long0);
	      var e0, e1, e2, e3, Mlp, Ml, tanphi, Nl1, Nl, psi, Az, G, H, GH, Hs, c, kp, cos_c, s, s2, s3, s4, s5;
	      if (this.sphere) {
	        if (Math.abs(this.sin_p12 - 1) <= EPSLN) {
	          //North Pole case
	          p.x = this.x0 + this.a * (HALF_PI - lat) * Math.sin(dlon);
	          p.y = this.y0 - this.a * (HALF_PI - lat) * Math.cos(dlon);
	          return p;
	        }
	        else if (Math.abs(this.sin_p12 + 1) <= EPSLN) {
	          //South Pole case
	          p.x = this.x0 + this.a * (HALF_PI + lat) * Math.sin(dlon);
	          p.y = this.y0 + this.a * (HALF_PI + lat) * Math.cos(dlon);
	          return p;
	        }
	        else {
	          //default case
	          cos_c = this.sin_p12 * sinphi + this.cos_p12 * cosphi * Math.cos(dlon);
	          c = Math.acos(cos_c);
	          kp = c ? c / Math.sin(c) : 1;
	          p.x = this.x0 + this.a * kp * cosphi * Math.sin(dlon);
	          p.y = this.y0 + this.a * kp * (this.cos_p12 * sinphi - this.sin_p12 * cosphi * Math.cos(dlon));
	          return p;
	        }
	      }
	      else {
	        e0 = e0fn(this.es);
	        e1 = e1fn(this.es);
	        e2 = e2fn(this.es);
	        e3 = e3fn(this.es);
	        if (Math.abs(this.sin_p12 - 1) <= EPSLN) {
	          //North Pole case
	          Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI);
	          Ml = this.a * mlfn(e0, e1, e2, e3, lat);
	          p.x = this.x0 + (Mlp - Ml) * Math.sin(dlon);
	          p.y = this.y0 - (Mlp - Ml) * Math.cos(dlon);
	          return p;
	        }
	        else if (Math.abs(this.sin_p12 + 1) <= EPSLN) {
	          //South Pole case
	          Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI);
	          Ml = this.a * mlfn(e0, e1, e2, e3, lat);
	          p.x = this.x0 + (Mlp + Ml) * Math.sin(dlon);
	          p.y = this.y0 + (Mlp + Ml) * Math.cos(dlon);
	          return p;
	        }
	        else {
	          //Default case
	          tanphi = sinphi / cosphi;
	          Nl1 = gN(this.a, this.e, this.sin_p12);
	          Nl = gN(this.a, this.e, sinphi);
	          psi = Math.atan((1 - this.es) * tanphi + this.es * Nl1 * this.sin_p12 / (Nl * cosphi));
	          Az = Math.atan2(Math.sin(dlon), this.cos_p12 * Math.tan(psi) - this.sin_p12 * Math.cos(dlon));
	          if (Az === 0) {
	            s = Math.asin(this.cos_p12 * Math.sin(psi) - this.sin_p12 * Math.cos(psi));
	          }
	          else if (Math.abs(Math.abs(Az) - Math.PI) <= EPSLN) {
	            s = -Math.asin(this.cos_p12 * Math.sin(psi) - this.sin_p12 * Math.cos(psi));
	          }
	          else {
	            s = Math.asin(Math.sin(dlon) * Math.cos(psi) / Math.sin(Az));
	          }
	          G = this.e * this.sin_p12 / Math.sqrt(1 - this.es);
	          H = this.e * this.cos_p12 * Math.cos(Az) / Math.sqrt(1 - this.es);
	          GH = G * H;
	          Hs = H * H;
	          s2 = s * s;
	          s3 = s2 * s;
	          s4 = s3 * s;
	          s5 = s4 * s;
	          c = Nl1 * s * (1 - s2 * Hs * (1 - Hs) / 6 + s3 / 8 * GH * (1 - 2 * Hs) + s4 / 120 * (Hs * (4 - 7 * Hs) - 3 * G * G * (1 - 7 * Hs)) - s5 / 48 * GH);
	          p.x = this.x0 + c * Math.sin(Az);
	          p.y = this.y0 + c * Math.cos(Az);
	          return p;
	        }
	      }
	
	
	    }
	
	    function inverse$24(p) {
	      p.x -= this.x0;
	      p.y -= this.y0;
	      var rh, z, sinz, cosz, lon, lat, con, e0, e1, e2, e3, Mlp, M, N1, psi, Az, cosAz, tmp, A, B, D, Ee, F, sinpsi;
	      if (this.sphere) {
	        rh = Math.sqrt(p.x * p.x + p.y * p.y);
	        if (rh > (2 * HALF_PI * this.a)) {
	          return;
	        }
	        z = rh / this.a;
	
	        sinz = Math.sin(z);
	        cosz = Math.cos(z);
	
	        lon = this.long0;
	        if (Math.abs(rh) <= EPSLN) {
	          lat = this.lat0;
	        }
	        else {
	          lat = asinz(cosz * this.sin_p12 + (p.y * sinz * this.cos_p12) / rh);
	          con = Math.abs(this.lat0) - HALF_PI;
	          if (Math.abs(con) <= EPSLN) {
	            if (this.lat0 >= 0) {
	              lon = adjust_lon(this.long0 + Math.atan2(p.x, - p.y));
	            }
	            else {
	              lon = adjust_lon(this.long0 - Math.atan2(-p.x, p.y));
	            }
	          }
	          else {
	            /*con = cosz - this.sin_p12 * Math.sin(lat);
	            if ((Math.abs(con) < EPSLN) && (Math.abs(p.x) < EPSLN)) {
	              //no-op, just keep the lon value as is
	            } else {
	              var temp = Math.atan2((p.x * sinz * this.cos_p12), (con * rh));
	              lon = adjust_lon(this.long0 + Math.atan2((p.x * sinz * this.cos_p12), (con * rh)));
	            }*/
	            lon = adjust_lon(this.long0 + Math.atan2(p.x * sinz, rh * this.cos_p12 * cosz - p.y * this.sin_p12 * sinz));
	          }
	        }
	
	        p.x = lon;
	        p.y = lat;
	        return p;
	      }
	      else {
	        e0 = e0fn(this.es);
	        e1 = e1fn(this.es);
	        e2 = e2fn(this.es);
	        e3 = e3fn(this.es);
	        if (Math.abs(this.sin_p12 - 1) <= EPSLN) {
	          //North pole case
	          Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI);
	          rh = Math.sqrt(p.x * p.x + p.y * p.y);
	          M = Mlp - rh;
	          lat = imlfn(M / this.a, e0, e1, e2, e3);
	          lon = adjust_lon(this.long0 + Math.atan2(p.x, - 1 * p.y));
	          p.x = lon;
	          p.y = lat;
	          return p;
	        }
	        else if (Math.abs(this.sin_p12 + 1) <= EPSLN) {
	          //South pole case
	          Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI);
	          rh = Math.sqrt(p.x * p.x + p.y * p.y);
	          M = rh - Mlp;
	
	          lat = imlfn(M / this.a, e0, e1, e2, e3);
	          lon = adjust_lon(this.long0 + Math.atan2(p.x, p.y));
	          p.x = lon;
	          p.y = lat;
	          return p;
	        }
	        else {
	          //default case
	          rh = Math.sqrt(p.x * p.x + p.y * p.y);
	          Az = Math.atan2(p.x, p.y);
	          N1 = gN(this.a, this.e, this.sin_p12);
	          cosAz = Math.cos(Az);
	          tmp = this.e * this.cos_p12 * cosAz;
	          A = -tmp * tmp / (1 - this.es);
	          B = 3 * this.es * (1 - A) * this.sin_p12 * this.cos_p12 * cosAz / (1 - this.es);
	          D = rh / N1;
	          Ee = D - A * (1 + A) * Math.pow(D, 3) / 6 - B * (1 + 3 * A) * Math.pow(D, 4) / 24;
	          F = 1 - A * Ee * Ee / 2 - D * Ee * Ee * Ee / 6;
	          psi = Math.asin(this.sin_p12 * Math.cos(Ee) + this.cos_p12 * Math.sin(Ee) * cosAz);
	          lon = adjust_lon(this.long0 + Math.asin(Math.sin(Az) * Math.sin(Ee) / Math.cos(psi)));
	          sinpsi = Math.sin(psi);
	          lat = Math.atan2((sinpsi - this.es * F * this.sin_p12) * Math.tan(psi), sinpsi * (1 - this.es));
	          p.x = lon;
	          p.y = lat;
	          return p;
	        }
	      }
	
	    }
	
	    var names$26 = ["Azimuthal_Equidistant", "aeqd"];
	    var aeqd = {
	      init: init$25,
	      forward: forward$24,
	      inverse: inverse$24,
	      names: names$26
	    };
	
	    function init$26() {
	      //double temp;      /* temporary variable    */
	
	      /* Place parameters in static storage for common use
	          -------------------------------------------------*/
	      this.sin_p14 = Math.sin(this.lat0);
	      this.cos_p14 = Math.cos(this.lat0);
	    }
	
	    /* Orthographic forward equations--mapping lat,long to x,y
	        ---------------------------------------------------*/
	    function forward$25(p) {
	      var sinphi, cosphi; /* sin and cos value        */
	      var dlon; /* delta longitude value      */
	      var coslon; /* cos of longitude        */
	      var ksp; /* scale factor          */
	      var g, x, y;
	      var lon = p.x;
	      var lat = p.y;
	      /* Forward equations
	          -----------------*/
	      dlon = adjust_lon(lon - this.long0);
	
	      sinphi = Math.sin(lat);
	      cosphi = Math.cos(lat);
	
	      coslon = Math.cos(dlon);
	      g = this.sin_p14 * sinphi + this.cos_p14 * cosphi * coslon;
	      ksp = 1;
	      if ((g > 0) || (Math.abs(g) <= EPSLN)) {
	        x = this.a * ksp * cosphi * Math.sin(dlon);
	        y = this.y0 + this.a * ksp * (this.cos_p14 * sinphi - this.sin_p14 * cosphi * coslon);
	      }
	      p.x = x;
	      p.y = y;
	      return p;
	    }
	
	    function inverse$25(p) {
	      var rh; /* height above ellipsoid      */
	      var z; /* angle          */
	      var sinz, cosz; /* sin of z and cos of z      */
	      var con;
	      var lon, lat;
	      /* Inverse equations
	          -----------------*/
	      p.x -= this.x0;
	      p.y -= this.y0;
	      rh = Math.sqrt(p.x * p.x + p.y * p.y);
	      z = asinz(rh / this.a);
	
	      sinz = Math.sin(z);
	      cosz = Math.cos(z);
	
	      lon = this.long0;
	      if (Math.abs(rh) <= EPSLN) {
	        lat = this.lat0;
	        p.x = lon;
	        p.y = lat;
	        return p;
	      }
	      lat = asinz(cosz * this.sin_p14 + (p.y * sinz * this.cos_p14) / rh);
	      con = Math.abs(this.lat0) - HALF_PI;
	      if (Math.abs(con) <= EPSLN) {
	        if (this.lat0 >= 0) {
	          lon = adjust_lon(this.long0 + Math.atan2(p.x, - p.y));
	        }
	        else {
	          lon = adjust_lon(this.long0 - Math.atan2(-p.x, p.y));
	        }
	        p.x = lon;
	        p.y = lat;
	        return p;
	      }
	      lon = adjust_lon(this.long0 + Math.atan2((p.x * sinz), rh * this.cos_p14 * cosz - p.y * this.sin_p14 * sinz));
	      p.x = lon;
	      p.y = lat;
	      return p;
	    }
	
	    var names$27 = ["ortho"];
	    var ortho = {
	      init: init$26,
	      forward: forward$25,
	      inverse: inverse$25,
	      names: names$27
	    };
	
	    // QSC projection rewritten from the original PROJ4
	    // https://github.com/OSGeo/proj.4/blob/master/src/PJ_qsc.c
	
	    /* constants */
	    var FACE_ENUM = {
	        FRONT: 1,
	        RIGHT: 2,
	        BACK: 3,
	        LEFT: 4,
	        TOP: 5,
	        BOTTOM: 6
	    };
	
	    var AREA_ENUM = {
	        AREA_0: 1,
	        AREA_1: 2,
	        AREA_2: 3,
	        AREA_3: 4
	    };
	
	    function init$27() {
	
	      this.x0 = this.x0 || 0;
	      this.y0 = this.y0 || 0;
	      this.lat0 = this.lat0 || 0;
	      this.long0 = this.long0 || 0;
	      this.lat_ts = this.lat_ts || 0;
	      this.title = this.title || "Quadrilateralized Spherical Cube";
	
	      /* Determine the cube face from the center of projection. */
	      if (this.lat0 >= HALF_PI - FORTPI / 2.0) {
	        this.face = FACE_ENUM.TOP;
	      } else if (this.lat0 <= -(HALF_PI - FORTPI / 2.0)) {
	        this.face = FACE_ENUM.BOTTOM;
	      } else if (Math.abs(this.long0) <= FORTPI) {
	        this.face = FACE_ENUM.FRONT;
	      } else if (Math.abs(this.long0) <= HALF_PI + FORTPI) {
	        this.face = this.long0 > 0.0 ? FACE_ENUM.RIGHT : FACE_ENUM.LEFT;
	      } else {
	        this.face = FACE_ENUM.BACK;
	      }
	
	      /* Fill in useful values for the ellipsoid <-> sphere shift
	       * described in [LK12]. */
	      if (this.es !== 0) {
	        this.one_minus_f = 1 - (this.a - this.b) / this.a;
	        this.one_minus_f_squared = this.one_minus_f * this.one_minus_f;
	      }
	    }
	
	    // QSC forward equations--mapping lat,long to x,y
	    // -----------------------------------------------------------------
	    function forward$26(p) {
	      var xy = {x: 0, y: 0};
	      var lat, lon;
	      var theta, phi;
	      var t, mu;
	      /* nu; */
	      var area = {value: 0};
	
	      // move lon according to projection's lon
	      p.x -= this.long0;
	
	      /* Convert the geodetic latitude to a geocentric latitude.
	       * This corresponds to the shift from the ellipsoid to the sphere
	       * described in [LK12]. */
	      if (this.es !== 0) {//if (P->es != 0) {
	        lat = Math.atan(this.one_minus_f_squared * Math.tan(p.y));
	      } else {
	        lat = p.y;
	      }
	
	      /* Convert the input lat, lon into theta, phi as used by QSC.
	       * This depends on the cube face and the area on it.
	       * For the top and bottom face, we can compute theta and phi
	       * directly from phi, lam. For the other faces, we must use
	       * unit sphere cartesian coordinates as an intermediate step. */
	      lon = p.x; //lon = lp.lam;
	      if (this.face === FACE_ENUM.TOP) {
	        phi = HALF_PI - lat;
	        if (lon >= FORTPI && lon <= HALF_PI + FORTPI) {
	          area.value = AREA_ENUM.AREA_0;
	          theta = lon - HALF_PI;
	        } else if (lon > HALF_PI + FORTPI || lon <= -(HALF_PI + FORTPI)) {
	          area.value = AREA_ENUM.AREA_1;
	          theta = (lon > 0.0 ? lon - SPI : lon + SPI);
	        } else if (lon > -(HALF_PI + FORTPI) && lon <= -FORTPI) {
	          area.value = AREA_ENUM.AREA_2;
	          theta = lon + HALF_PI;
	        } else {
	          area.value = AREA_ENUM.AREA_3;
	          theta = lon;
	        }
	      } else if (this.face === FACE_ENUM.BOTTOM) {
	        phi = HALF_PI + lat;
	        if (lon >= FORTPI && lon <= HALF_PI + FORTPI) {
	          area.value = AREA_ENUM.AREA_0;
	          theta = -lon + HALF_PI;
	        } else if (lon < FORTPI && lon >= -FORTPI) {
	          area.value = AREA_ENUM.AREA_1;
	          theta = -lon;
	        } else if (lon < -FORTPI && lon >= -(HALF_PI + FORTPI)) {
	          area.value = AREA_ENUM.AREA_2;
	          theta = -lon - HALF_PI;
	        } else {
	          area.value = AREA_ENUM.AREA_3;
	          theta = (lon > 0.0 ? -lon + SPI : -lon - SPI);
	        }
	      } else {
	        var q, r, s;
	        var sinlat, coslat;
	        var sinlon, coslon;
	
	        if (this.face === FACE_ENUM.RIGHT) {
	          lon = qsc_shift_lon_origin(lon, +HALF_PI);
	        } else if (this.face === FACE_ENUM.BACK) {
	          lon = qsc_shift_lon_origin(lon, +SPI);
	        } else if (this.face === FACE_ENUM.LEFT) {
	          lon = qsc_shift_lon_origin(lon, -HALF_PI);
	        }
	        sinlat = Math.sin(lat);
	        coslat = Math.cos(lat);
	        sinlon = Math.sin(lon);
	        coslon = Math.cos(lon);
	        q = coslat * coslon;
	        r = coslat * sinlon;
	        s = sinlat;
	
	        if (this.face === FACE_ENUM.FRONT) {
	          phi = Math.acos(q);
	          theta = qsc_fwd_equat_face_theta(phi, s, r, area);
	        } else if (this.face === FACE_ENUM.RIGHT) {
	          phi = Math.acos(r);
	          theta = qsc_fwd_equat_face_theta(phi, s, -q, area);
	        } else if (this.face === FACE_ENUM.BACK) {
	          phi = Math.acos(-q);
	          theta = qsc_fwd_equat_face_theta(phi, s, -r, area);
	        } else if (this.face === FACE_ENUM.LEFT) {
	          phi = Math.acos(-r);
	          theta = qsc_fwd_equat_face_theta(phi, s, q, area);
	        } else {
	          /* Impossible */
	          phi = theta = 0;
	          area.value = AREA_ENUM.AREA_0;
	        }
	      }
	
	      /* Compute mu and nu for the area of definition.
	       * For mu, see Eq. (3-21) in [OL76], but note the typos:
	       * compare with Eq. (3-14). For nu, see Eq. (3-38). */
	      mu = Math.atan((12 / SPI) * (theta + Math.acos(Math.sin(theta) * Math.cos(FORTPI)) - HALF_PI));
	      t = Math.sqrt((1 - Math.cos(phi)) / (Math.cos(mu) * Math.cos(mu)) / (1 - Math.cos(Math.atan(1 / Math.cos(theta)))));
	
	      /* Apply the result to the real area. */
	      if (area.value === AREA_ENUM.AREA_1) {
	        mu += HALF_PI;
	      } else if (area.value === AREA_ENUM.AREA_2) {
	        mu += SPI;
	      } else if (area.value === AREA_ENUM.AREA_3) {
	        mu += 1.5 * SPI;
	      }
	
	      /* Now compute x, y from mu and nu */
	      xy.x = t * Math.cos(mu);
	      xy.y = t * Math.sin(mu);
	      xy.x = xy.x * this.a + this.x0;
	      xy.y = xy.y * this.a + this.y0;
	
	      p.x = xy.x;
	      p.y = xy.y;
	      return p;
	    }
	
	    // QSC inverse equations--mapping x,y to lat/long
	    // -----------------------------------------------------------------
	    function inverse$26(p) {
	      var lp = {lam: 0, phi: 0};
	      var mu, nu, cosmu, tannu;
	      var tantheta, theta, cosphi, phi;
	      var t;
	      var area = {value: 0};
	
	      /* de-offset */
	      p.x = (p.x - this.x0) / this.a;
	      p.y = (p.y - this.y0) / this.a;
	
	      /* Convert the input x, y to the mu and nu angles as used by QSC.
	       * This depends on the area of the cube face. */
	      nu = Math.atan(Math.sqrt(p.x * p.x + p.y * p.y));
	      mu = Math.atan2(p.y, p.x);
	      if (p.x >= 0.0 && p.x >= Math.abs(p.y)) {
	        area.value = AREA_ENUM.AREA_0;
	      } else if (p.y >= 0.0 && p.y >= Math.abs(p.x)) {
	        area.value = AREA_ENUM.AREA_1;
	        mu -= HALF_PI;
	      } else if (p.x < 0.0 && -p.x >= Math.abs(p.y)) {
	        area.value = AREA_ENUM.AREA_2;
	        mu = (mu < 0.0 ? mu + SPI : mu - SPI);
	      } else {
	        area.value = AREA_ENUM.AREA_3;
	        mu += HALF_PI;
	      }
	
	      /* Compute phi and theta for the area of definition.
	       * The inverse projection is not described in the original paper, but some
	       * good hints can be found here (as of 2011-12-14):
	       * http://fits.gsfc.nasa.gov/fitsbits/saf.93/saf.9302
	       * (search for "Message-Id: <9302181759.AA25477 at fits.cv.nrao.edu>") */
	      t = (SPI / 12) * Math.tan(mu);
	      tantheta = Math.sin(t) / (Math.cos(t) - (1 / Math.sqrt(2)));
	      theta = Math.atan(tantheta);
	      cosmu = Math.cos(mu);
	      tannu = Math.tan(nu);
	      cosphi = 1 - cosmu * cosmu * tannu * tannu * (1 - Math.cos(Math.atan(1 / Math.cos(theta))));
	      if (cosphi < -1) {
	        cosphi = -1;
	      } else if (cosphi > +1) {
	        cosphi = +1;
	      }
	
	      /* Apply the result to the real area on the cube face.
	       * For the top and bottom face, we can compute phi and lam directly.
	       * For the other faces, we must use unit sphere cartesian coordinates
	       * as an intermediate step. */
	      if (this.face === FACE_ENUM.TOP) {
	        phi = Math.acos(cosphi);
	        lp.phi = HALF_PI - phi;
	        if (area.value === AREA_ENUM.AREA_0) {
	          lp.lam = theta + HALF_PI;
	        } else if (area.value === AREA_ENUM.AREA_1) {
	          lp.lam = (theta < 0.0 ? theta + SPI : theta - SPI);
	        } else if (area.value === AREA_ENUM.AREA_2) {
	          lp.lam = theta - HALF_PI;
	        } else /* area.value == AREA_ENUM.AREA_3 */ {
	          lp.lam = theta;
	        }
	      } else if (this.face === FACE_ENUM.BOTTOM) {
	        phi = Math.acos(cosphi);
	        lp.phi = phi - HALF_PI;
	        if (area.value === AREA_ENUM.AREA_0) {
	          lp.lam = -theta + HALF_PI;
	        } else if (area.value === AREA_ENUM.AREA_1) {
	          lp.lam = -theta;
	        } else if (area.value === AREA_ENUM.AREA_2) {
	          lp.lam = -theta - HALF_PI;
	        } else /* area.value == AREA_ENUM.AREA_3 */ {
	          lp.lam = (theta < 0.0 ? -theta - SPI : -theta + SPI);
	        }
	      } else {
	        /* Compute phi and lam via cartesian unit sphere coordinates. */
	        var q, r, s;
	        q = cosphi;
	        t = q * q;
	        if (t >= 1) {
	          s = 0;
	        } else {
	          s = Math.sqrt(1 - t) * Math.sin(theta);
	        }
	        t += s * s;
	        if (t >= 1) {
	          r = 0;
	        } else {
	          r = Math.sqrt(1 - t);
	        }
	        /* Rotate q,r,s into the correct area. */
	        if (area.value === AREA_ENUM.AREA_1) {
	          t = r;
	          r = -s;
	          s = t;
	        } else if (area.value === AREA_ENUM.AREA_2) {
	          r = -r;
	          s = -s;
	        } else if (area.value === AREA_ENUM.AREA_3) {
	          t = r;
	          r = s;
	          s = -t;
	        }
	        /* Rotate q,r,s into the correct cube face. */
	        if (this.face === FACE_ENUM.RIGHT) {
	          t = q;
	          q = -r;
	          r = t;
	        } else if (this.face === FACE_ENUM.BACK) {
	          q = -q;
	          r = -r;
	        } else if (this.face === FACE_ENUM.LEFT) {
	          t = q;
	          q = r;
	          r = -t;
	        }
	        /* Now compute phi and lam from the unit sphere coordinates. */
	        lp.phi = Math.acos(-s) - HALF_PI;
	        lp.lam = Math.atan2(r, q);
	        if (this.face === FACE_ENUM.RIGHT) {
	          lp.lam = qsc_shift_lon_origin(lp.lam, -HALF_PI);
	        } else if (this.face === FACE_ENUM.BACK) {
	          lp.lam = qsc_shift_lon_origin(lp.lam, -SPI);
	        } else if (this.face === FACE_ENUM.LEFT) {
	          lp.lam = qsc_shift_lon_origin(lp.lam, +HALF_PI);
	        }
	      }
	
	      /* Apply the shift from the sphere to the ellipsoid as described
	       * in [LK12]. */
	      if (this.es !== 0) {
	        var invert_sign;
	        var tanphi, xa;
	        invert_sign = (lp.phi < 0 ? 1 : 0);
	        tanphi = Math.tan(lp.phi);
	        xa = this.b / Math.sqrt(tanphi * tanphi + this.one_minus_f_squared);
	        lp.phi = Math.atan(Math.sqrt(this.a * this.a - xa * xa) / (this.one_minus_f * xa));
	        if (invert_sign) {
	          lp.phi = -lp.phi;
	        }
	      }
	
	      lp.lam += this.long0;
	      p.x = lp.lam;
	      p.y = lp.phi;
	      return p;
	    }
	
	    /* Helper function for forward projection: compute the theta angle
	     * and determine the area number. */
	    function qsc_fwd_equat_face_theta(phi, y, x, area) {
	      var theta;
	      if (phi < EPSLN) {
	        area.value = AREA_ENUM.AREA_0;
	        theta = 0.0;
	      } else {
	        theta = Math.atan2(y, x);
	        if (Math.abs(theta) <= FORTPI) {
	          area.value = AREA_ENUM.AREA_0;
	        } else if (theta > FORTPI && theta <= HALF_PI + FORTPI) {
	          area.value = AREA_ENUM.AREA_1;
	          theta -= HALF_PI;
	        } else if (theta > HALF_PI + FORTPI || theta <= -(HALF_PI + FORTPI)) {
	          area.value = AREA_ENUM.AREA_2;
	          theta = (theta >= 0.0 ? theta - SPI : theta + SPI);
	        } else {
	          area.value = AREA_ENUM.AREA_3;
	          theta += HALF_PI;
	        }
	      }
	      return theta;
	    }
	
	    /* Helper function: shift the longitude. */
	    function qsc_shift_lon_origin(lon, offset) {
	      var slon = lon + offset;
	      if (slon < -SPI) {
	        slon += TWO_PI;
	      } else if (slon > +SPI) {
	        slon -= TWO_PI;
	      }
	      return slon;
	    }
	
	    var names$28 = ["Quadrilateralized Spherical Cube", "Quadrilateralized_Spherical_Cube", "qsc"];
	    var qsc = {
	      init: init$27,
	      forward: forward$26,
	      inverse: inverse$26,
	      names: names$28
	    };
	
	    // Robinson projection
	    // Based on https://github.com/OSGeo/proj.4/blob/master/src/PJ_robin.c
	    // Polynomial coeficients from http://article.gmane.org/gmane.comp.gis.proj-4.devel/6039
	
	    var COEFS_X = [
	        [1.0000, 2.2199e-17, -7.15515e-05, 3.1103e-06],
	        [0.9986, -0.000482243, -2.4897e-05, -1.3309e-06],
	        [0.9954, -0.00083103, -4.48605e-05, -9.86701e-07],
	        [0.9900, -0.00135364, -5.9661e-05, 3.6777e-06],
	        [0.9822, -0.00167442, -4.49547e-06, -5.72411e-06],
	        [0.9730, -0.00214868, -9.03571e-05, 1.8736e-08],
	        [0.9600, -0.00305085, -9.00761e-05, 1.64917e-06],
	        [0.9427, -0.00382792, -6.53386e-05, -2.6154e-06],
	        [0.9216, -0.00467746, -0.00010457, 4.81243e-06],
	        [0.8962, -0.00536223, -3.23831e-05, -5.43432e-06],
	        [0.8679, -0.00609363, -0.000113898, 3.32484e-06],
	        [0.8350, -0.00698325, -6.40253e-05, 9.34959e-07],
	        [0.7986, -0.00755338, -5.00009e-05, 9.35324e-07],
	        [0.7597, -0.00798324, -3.5971e-05, -2.27626e-06],
	        [0.7186, -0.00851367, -7.01149e-05, -8.6303e-06],
	        [0.6732, -0.00986209, -0.000199569, 1.91974e-05],
	        [0.6213, -0.010418, 8.83923e-05, 6.24051e-06],
	        [0.5722, -0.00906601, 0.000182, 6.24051e-06],
	        [0.5322, -0.00677797, 0.000275608, 6.24051e-06]
	    ];
	
	    var COEFS_Y = [
	        [-5.20417e-18, 0.0124, 1.21431e-18, -8.45284e-11],
	        [0.0620, 0.0124, -1.26793e-09, 4.22642e-10],
	        [0.1240, 0.0124, 5.07171e-09, -1.60604e-09],
	        [0.1860, 0.0123999, -1.90189e-08, 6.00152e-09],
	        [0.2480, 0.0124002, 7.10039e-08, -2.24e-08],
	        [0.3100, 0.0123992, -2.64997e-07, 8.35986e-08],
	        [0.3720, 0.0124029, 9.88983e-07, -3.11994e-07],
	        [0.4340, 0.0123893, -3.69093e-06, -4.35621e-07],
	        [0.4958, 0.0123198, -1.02252e-05, -3.45523e-07],
	        [0.5571, 0.0121916, -1.54081e-05, -5.82288e-07],
	        [0.6176, 0.0119938, -2.41424e-05, -5.25327e-07],
	        [0.6769, 0.011713, -3.20223e-05, -5.16405e-07],
	        [0.7346, 0.0113541, -3.97684e-05, -6.09052e-07],
	        [0.7903, 0.0109107, -4.89042e-05, -1.04739e-06],
	        [0.8435, 0.0103431, -6.4615e-05, -1.40374e-09],
	        [0.8936, 0.00969686, -6.4636e-05, -8.547e-06],
	        [0.9394, 0.00840947, -0.000192841, -4.2106e-06],
	        [0.9761, 0.00616527, -0.000256, -4.2106e-06],
	        [1.0000, 0.00328947, -0.000319159, -4.2106e-06]
	    ];
	
	    var FXC = 0.8487;
	    var FYC = 1.3523;
	    var C1 = R2D/5; // rad to 5-degree interval
	    var RC1 = 1/C1;
	    var NODES = 18;
	
	    var poly3_val = function(coefs, x) {
	        return coefs[0] + x * (coefs[1] + x * (coefs[2] + x * coefs[3]));
	    };
	
	    var poly3_der = function(coefs, x) {
	        return coefs[1] + x * (2 * coefs[2] + x * 3 * coefs[3]);
	    };
	
	    function newton_rapshon(f_df, start, max_err, iters) {
	        var x = start;
	        for (; iters; --iters) {
	            var upd = f_df(x);
	            x -= upd;
	            if (Math.abs(upd) < max_err) {
	                break;
	            }
	        }
	        return x;
	    }
	
	    function init$28() {
	        this.x0 = this.x0 || 0;
	        this.y0 = this.y0 || 0;
	        this.long0 = this.long0 || 0;
	        this.es = 0;
	        this.title = this.title || "Robinson";
	    }
	
	    function forward$27(ll) {
	        var lon = adjust_lon(ll.x - this.long0);
	
	        var dphi = Math.abs(ll.y);
	        var i = Math.floor(dphi * C1);
	        if (i < 0) {
	            i = 0;
	        } else if (i >= NODES) {
	            i = NODES - 1;
	        }
	        dphi = R2D * (dphi - RC1 * i);
	        var xy = {
	            x: poly3_val(COEFS_X[i], dphi) * lon,
	            y: poly3_val(COEFS_Y[i], dphi)
	        };
	        if (ll.y < 0) {
	            xy.y = -xy.y;
	        }
	
	        xy.x = xy.x * this.a * FXC + this.x0;
	        xy.y = xy.y * this.a * FYC + this.y0;
	        return xy;
	    }
	
	    function inverse$27(xy) {
	        var ll = {
	            x: (xy.x - this.x0) / (this.a * FXC),
	            y: Math.abs(xy.y - this.y0) / (this.a * FYC)
	        };
	
	        if (ll.y >= 1) { // pathologic case
	            ll.x /= COEFS_X[NODES][0];
	            ll.y = xy.y < 0 ? -HALF_PI : HALF_PI;
	        } else {
	            // find table interval
	            var i = Math.floor(ll.y * NODES);
	            if (i < 0) {
	                i = 0;
	            } else if (i >= NODES) {
	                i = NODES - 1;
	            }
	            for (;;) {
	                if (COEFS_Y[i][0] > ll.y) {
	                    --i;
	                } else if (COEFS_Y[i+1][0] <= ll.y) {
	                    ++i;
	                } else {
	                    break;
	                }
	            }
	            // linear interpolation in 5 degree interval
	            var coefs = COEFS_Y[i];
	            var t = 5 * (ll.y - coefs[0]) / (COEFS_Y[i+1][0] - coefs[0]);
	            // find t so that poly3_val(coefs, t) = ll.y
	            t = newton_rapshon(function(x) {
	                return (poly3_val(coefs, x) - ll.y) / poly3_der(coefs, x);
	            }, t, EPSLN, 100);
	
	            ll.x /= poly3_val(COEFS_X[i], t);
	            ll.y = (5 * i + t) * D2R;
	            if (xy.y < 0) {
	                ll.y = -ll.y;
	            }
	        }
	
	        ll.x = adjust_lon(ll.x + this.long0);
	        return ll;
	    }
	
	    var names$29 = ["Robinson", "robin"];
	    var robin = {
	      init: init$28,
	      forward: forward$27,
	      inverse: inverse$27,
	      names: names$29
	    };
	
	    function init$29() {
	        this.name = 'geocent';
	
	    }
	
	    function forward$28(p) {
	        var point = geodeticToGeocentric(p, this.es, this.a);
	        return point;
	    }
	
	    function inverse$28(p) {
	        var point = geocentricToGeodetic(p, this.es, this.a, this.b);
	        return point;
	    }
	
	    var names$30 = ["Geocentric", 'geocentric', "geocent", "Geocent"];
	    var geocent = {
	        init: init$29,
	        forward: forward$28,
	        inverse: inverse$28,
	        names: names$30
	    };
	
	    var includedProjections = function(proj4){
	      proj4.Proj.projections.add(tmerc);
	      proj4.Proj.projections.add(etmerc);
	      proj4.Proj.projections.add(utm);
	      proj4.Proj.projections.add(sterea);
	      proj4.Proj.projections.add(stere);
	      proj4.Proj.projections.add(somerc);
	      proj4.Proj.projections.add(omerc);
	      proj4.Proj.projections.add(lcc);
	      proj4.Proj.projections.add(krovak);
	      proj4.Proj.projections.add(cass);
	      proj4.Proj.projections.add(laea);
	      proj4.Proj.projections.add(aea);
	      proj4.Proj.projections.add(gnom);
	      proj4.Proj.projections.add(cea);
	      proj4.Proj.projections.add(eqc);
	      proj4.Proj.projections.add(poly);
	      proj4.Proj.projections.add(nzmg);
	      proj4.Proj.projections.add(mill);
	      proj4.Proj.projections.add(sinu);
	      proj4.Proj.projections.add(moll);
	      proj4.Proj.projections.add(eqdc);
	      proj4.Proj.projections.add(vandg);
	      proj4.Proj.projections.add(aeqd);
	      proj4.Proj.projections.add(ortho);
	      proj4.Proj.projections.add(qsc);
	      proj4.Proj.projections.add(robin);
	      proj4.Proj.projections.add(geocent);
	    };
	
	    proj4$1.defaultDatum = 'WGS84'; //default datum
	    proj4$1.Proj = Projection;
	    proj4$1.WGS84 = new proj4$1.Proj('WGS84');
	    proj4$1.Point = Point;
	    proj4$1.toPoint = toPoint;
	    proj4$1.defs = defs;
	    proj4$1.transform = transform;
	    proj4$1.mgrs = mgrs;
	    proj4$1.version = '2.6.2';
	    includedProjections(proj4$1);
	
	    return proj4$1;
	
	})));


/***/ }),
/* 1097 */
/***/ (function(module, exports) {

	'use strict';
	
	var has = Object.prototype.hasOwnProperty
	  , undef;
	
	/**
	 * Decode a URI encoded string.
	 *
	 * @param {String} input The URI encoded string.
	 * @returns {String|Null} The decoded string.
	 * @api private
	 */
	function decode(input) {
	  try {
	    return decodeURIComponent(input.replace(/\+/g, ' '));
	  } catch (e) {
	    return null;
	  }
	}
	
	/**
	 * Attempts to encode a given input.
	 *
	 * @param {String} input The string that needs to be encoded.
	 * @returns {String|Null} The encoded string.
	 * @api private
	 */
	function encode(input) {
	  try {
	    return encodeURIComponent(input);
	  } catch (e) {
	    return null;
	  }
	}
	
	/**
	 * Simple query string parser.
	 *
	 * @param {String} query The query string that needs to be parsed.
	 * @returns {Object}
	 * @api public
	 */
	function querystring(query) {
	  var parser = /([^=?&]+)=?([^&]*)/g
	    , result = {}
	    , part;
	
	  while (part = parser.exec(query)) {
	    var key = decode(part[1])
	      , value = decode(part[2]);
	
	    //
	    // Prevent overriding of existing properties. This ensures that build-in
	    // methods like `toString` or __proto__ are not overriden by malicious
	    // querystrings.
	    //
	    // In the case if failed decoding, we want to omit the key/value pairs
	    // from the result.
	    //
	    if (key === null || value === null || key in result) continue;
	    result[key] = value;
	  }
	
	  return result;
	}
	
	/**
	 * Transform a query string to an object.
	 *
	 * @param {Object} obj Object that should be transformed.
	 * @param {String} prefix Optional prefix.
	 * @returns {String}
	 * @api public
	 */
	function querystringify(obj, prefix) {
	  prefix = prefix || '';
	
	  var pairs = []
	    , value
	    , key;
	
	  //
	  // Optionally prefix with a '?' if needed
	  //
	  if ('string' !== typeof prefix) prefix = '?';
	
	  for (key in obj) {
	    if (has.call(obj, key)) {
	      value = obj[key];
	
	      //
	      // Edge cases where we actually want to encode the value to an empty
	      // string instead of the stringified value.
	      //
	      if (!value && (value === null || value === undef || isNaN(value))) {
	        value = '';
	      }
	
	      key = encodeURIComponent(key);
	      value = encodeURIComponent(value);
	
	      //
	      // If we failed to encode the strings, we should bail out as we don't
	      // want to add invalid strings to the query.
	      //
	      if (key === null || value === null) continue;
	      pairs.push(key +'='+ value);
	    }
	  }
	
	  return pairs.length ? prefix + pairs.join('&') : '';
	}
	
	//
	// Expose the module.
	//
	exports.stringify = querystringify;
	exports.parse = querystring;


/***/ }),
/* 1098 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	var define = __webpack_require__(134);
	var callBind = __webpack_require__(352);
	
	var implementation = __webpack_require__(515);
	var getPolyfill = __webpack_require__(311);
	var shim = __webpack_require__(1099);
	
	var flagsBound = callBind(implementation);
	
	define(flagsBound, {
		getPolyfill: getPolyfill,
		implementation: implementation,
		shim: shim
	});
	
	module.exports = flagsBound;


/***/ }),
/* 1099 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	var supportsDescriptors = __webpack_require__(134).supportsDescriptors;
	var getPolyfill = __webpack_require__(311);
	var gOPD = Object.getOwnPropertyDescriptor;
	var defineProperty = Object.defineProperty;
	var TypeErr = TypeError;
	var getProto = Object.getPrototypeOf;
	var regex = /a/;
	
	module.exports = function shimFlags() {
		if (!supportsDescriptors || !getProto) {
			throw new TypeErr('RegExp.prototype.flags requires a true ES5 environment that supports property descriptors');
		}
		var polyfill = getPolyfill();
		var proto = getProto(regex);
		var descriptor = gOPD(proto, 'flags');
		if (!descriptor || descriptor.get !== polyfill) {
			defineProperty(proto, 'flags', {
				configurable: true,
				enumerable: false,
				get: polyfill
			});
		}
		return polyfill;
	};


/***/ }),
/* 1100 */
/***/ (function(module, exports) {

	'use strict';
	
	/**
	 * Check if we're required to add a port number.
	 *
	 * @see https://url.spec.whatwg.org/#default-port
	 * @param {Number|String} port Port number we need to check
	 * @param {String} protocol Protocol we need to check against.
	 * @returns {Boolean} Is it a default port for the given protocol
	 * @api private
	 */
	module.exports = function required(port, protocol) {
	  protocol = protocol.split(':')[0];
	  port = +port;
	
	  if (!port) return false;
	
	  switch (protocol) {
	    case 'http':
	    case 'ws':
	    return port !== 80;
	
	    case 'https':
	    case 'wss':
	    return port !== 443;
	
	    case 'ftp':
	    return port !== 21;
	
	    case 'gopher':
	    return port !== 70;
	
	    case 'file':
	    return false;
	  }
	
	  return port !== 0;
	};


/***/ }),
/* 1101 */
/***/ (function(module, exports) {

	'use strict';
	
	var doc = typeof document === 'undefined' ? null : document;
	module.exports = function(bundleName) {
	  var bundlePattern = new RegExp(bundleName + '(\.min|)\.js(\.gz|)$');
	  var scripts = doc.getElementsByTagName('script');
	  var src;
	  for (var i = 0; i < scripts.length; i++) {
	    src = scripts[i].src;
	    if (bundlePattern.test(src)) {
	      return src.substring(0, src.lastIndexOf('/') + 1);
	    }
	  }
	};
	// Used to mock the document object for testing
	module.exports.setDocument = function(document) {
	  doc = document;
	};


/***/ }),
/* 1102 */
/***/ (function(module, exports, __webpack_require__) {

	/* WEBPACK VAR INJECTION */(function(global, process) {(function (global, undefined) {
	    "use strict";
	
	    if (global.setImmediate) {
	        return;
	    }
	
	    var nextHandle = 1; // Spec says greater than zero
	    var tasksByHandle = {};
	    var currentlyRunningATask = false;
	    var doc = global.document;
	    var registerImmediate;
	
	    function setImmediate(callback) {
	      // Callback can either be a function or a string
	      if (typeof callback !== "function") {
	        callback = new Function("" + callback);
	      }
	      // Copy function arguments
	      var args = new Array(arguments.length - 1);
	      for (var i = 0; i < args.length; i++) {
	          args[i] = arguments[i + 1];
	      }
	      // Store and register the task
	      var task = { callback: callback, args: args };
	      tasksByHandle[nextHandle] = task;
	      registerImmediate(nextHandle);
	      return nextHandle++;
	    }
	
	    function clearImmediate(handle) {
	        delete tasksByHandle[handle];
	    }
	
	    function run(task) {
	        var callback = task.callback;
	        var args = task.args;
	        switch (args.length) {
	        case 0:
	            callback();
	            break;
	        case 1:
	            callback(args[0]);
	            break;
	        case 2:
	            callback(args[0], args[1]);
	            break;
	        case 3:
	            callback(args[0], args[1], args[2]);
	            break;
	        default:
	            callback.apply(undefined, args);
	            break;
	        }
	    }
	
	    function runIfPresent(handle) {
	        // From the spec: "Wait until any invocations of this algorithm started before this one have completed."
	        // So if we're currently running a task, we'll need to delay this invocation.
	        if (currentlyRunningATask) {
	            // Delay by doing a setTimeout. setImmediate was tried instead, but in Firefox 7 it generated a
	            // "too much recursion" error.
	            setTimeout(runIfPresent, 0, handle);
	        } else {
	            var task = tasksByHandle[handle];
	            if (task) {
	                currentlyRunningATask = true;
	                try {
	                    run(task);
	                } finally {
	                    clearImmediate(handle);
	                    currentlyRunningATask = false;
	                }
	            }
	        }
	    }
	
	    function installNextTickImplementation() {
	        registerImmediate = function(handle) {
	            process.nextTick(function () { runIfPresent(handle); });
	        };
	    }
	
	    function canUsePostMessage() {
	        // The test against `importScripts` prevents this implementation from being installed inside a web worker,
	        // where `global.postMessage` means something completely different and can't be used for this purpose.
	        if (global.postMessage && !global.importScripts) {
	            var postMessageIsAsynchronous = true;
	            var oldOnMessage = global.onmessage;
	            global.onmessage = function() {
	                postMessageIsAsynchronous = false;
	            };
	            global.postMessage("", "*");
	            global.onmessage = oldOnMessage;
	            return postMessageIsAsynchronous;
	        }
	    }
	
	    function installPostMessageImplementation() {
	        // Installs an event handler on `global` for the `message` event: see
	        // * https://developer.mozilla.org/en/DOM/window.postMessage
	        // * http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages
	
	        var messagePrefix = "setImmediate$" + Math.random() + "$";
	        var onGlobalMessage = function(event) {
	            if (event.source === global &&
	                typeof event.data === "string" &&
	                event.data.indexOf(messagePrefix) === 0) {
	                runIfPresent(+event.data.slice(messagePrefix.length));
	            }
	        };
	
	        if (global.addEventListener) {
	            global.addEventListener("message", onGlobalMessage, false);
	        } else {
	            global.attachEvent("onmessage", onGlobalMessage);
	        }
	
	        registerImmediate = function(handle) {
	            global.postMessage(messagePrefix + handle, "*");
	        };
	    }
	
	    function installMessageChannelImplementation() {
	        var channel = new MessageChannel();
	        channel.port1.onmessage = function(event) {
	            var handle = event.data;
	            runIfPresent(handle);
	        };
	
	        registerImmediate = function(handle) {
	            channel.port2.postMessage(handle);
	        };
	    }
	
	    function installReadyStateChangeImplementation() {
	        var html = doc.documentElement;
	        registerImmediate = function(handle) {
	            // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted
	            // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.
	            var script = doc.createElement("script");
	            script.onreadystatechange = function () {
	                runIfPresent(handle);
	                script.onreadystatechange = null;
	                html.removeChild(script);
	                script = null;
	            };
	            html.appendChild(script);
	        };
	    }
	
	    function installSetTimeoutImplementation() {
	        registerImmediate = function(handle) {
	            setTimeout(runIfPresent, 0, handle);
	        };
	    }
	
	    // If supported, we should attach to the prototype of global, since that is where setTimeout et al. live.
	    var attachTo = Object.getPrototypeOf && Object.getPrototypeOf(global);
	    attachTo = attachTo && attachTo.setTimeout ? attachTo : global;
	
	    // Don't get fooled by e.g. browserify environments.
	    if ({}.toString.call(global.process) === "[object process]") {
	        // For Node.js before 0.9
	        installNextTickImplementation();
	
	    } else if (canUsePostMessage()) {
	        // For non-IE10 modern browsers
	        installPostMessageImplementation();
	
	    } else if (global.MessageChannel) {
	        // For web workers, where supported
	        installMessageChannelImplementation();
	
	    } else if (doc && "onreadystatechange" in doc.createElement("script")) {
	        // For IE 6–8
	        installReadyStateChangeImplementation();
	
	    } else {
	        // For older browsers
	        installSetTimeoutImplementation();
	    }
	
	    attachTo.setImmediate = setImmediate;
	    attachTo.clearImmediate = clearImmediate;
	}(typeof self === "undefined" ? typeof global === "undefined" ? this : global : self));
	
	/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }()), __webpack_require__(116)))

/***/ }),
/* 1103 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	var Promise = __webpack_require__(372);
	module.exports = binaryAjax;
	function binaryAjax(url){
		return new Promise(function(resolve,reject){
			var type = url.slice(-3);
			var ajax = new XMLHttpRequest();
			ajax.open('GET',url,true);
			if(type !== 'prj'){
				ajax.responseType='arraybuffer';
			}
			ajax.addEventListener('load', function (){
				if(ajax.status>399){
					if(type==='prj'){
						return resolve(false);
					}else{
						return reject(new Error(ajax.status));
					}
				}
				resolve(ajax.response);
			}, false);
			ajax.send();
		});
	}

/***/ }),
/* 1104 */
/***/ (function(module, exports, __webpack_require__) {

	/* WEBPACK VAR INJECTION */(function(Buffer) {'use strict';
	var proj4 = __webpack_require__(1096);
	var unzip = __webpack_require__(1107);
	var binaryAjax = __webpack_require__(1103);
	var parseShp = __webpack_require__(1105);
	var toArrayBuffer = __webpack_require__(1106);
	var parseDbf = __webpack_require__(1095);
	var Promise = __webpack_require__(372);
	var Cache = __webpack_require__(1079);
	var cache = new Cache({
		max: 20
	});
	function shp(base, whiteList) {
		if (typeof base === 'string' && cache.has(base)) {
			return Promise.resolve(cache.get(base));
		}
		return shp.getShapefile(base, whiteList).then(function (resp) {
			if (typeof base === 'string') {
				cache.set(base, resp);
			}
			return resp;
		});
	}
	shp.combine = function(arr) {
		var out = {};
		out.type = 'FeatureCollection';
		out.features = [];
		var i = 0;
		var len = arr[0].length;
		while (i < len) {
			out.features.push({
				'type': 'Feature',
				'geometry': arr[0][i],
				'properties': arr[1][i]
			});
			i++;
		}
		return out;
	};
	shp.parseZip = function(buffer, whiteList) {
		var key;
		var zip = unzip(buffer);
		var names = [];
		whiteList = whiteList || [];
		for (key in zip) {
			if (key.indexOf('__MACOSX') !== -1) {
				continue;
			}
			if (key.slice(-3).toLowerCase() === 'shp') {
				names.push(key.slice(0, - 4));
				zip[key.slice(0, -3) + key.slice(-3).toLowerCase()] = zip[key];
			}
			else if (key.slice(-3).toLowerCase() === 'dbf') {
				zip[key.slice(0, -3) + key.slice(-3).toLowerCase()] = parseDbf(zip[key]);
			}
			else if (key.slice(-3).toLowerCase() === 'prj') {
				zip[key.slice(0, -3) + key.slice(-3).toLowerCase()] = proj4(zip[key]);
			}
			else if (key.slice(-4).toLowerCase() === 'json' || whiteList.indexOf(key.split('.').pop()) > -1) {
				names.push(key.slice(0, -3) + key.slice(-3).toLowerCase());
			}
		}
		if (!names.length) {
			throw new Error('no layers founds');
		}
		var geojson = names.map(function(name) {
			var parsed;
			var lastDotIdx = name.lastIndexOf('.');
			if (lastDotIdx > -1 && name.slice(lastDotIdx).indexOf('json') > -1) {
				parsed = JSON.parse(zip[name]);
				parsed.fileName = name.slice(0, lastDotIdx);
			}
			else if (whiteList.indexOf(name.slice(lastDotIdx + 1)) > -1) {
				parsed = zip[name];
				parsed.fileName = name;
			}
			else {
				parsed = shp.combine([parseShp(zip[name + '.shp'], zip[name + '.prj']), zip[name + '.dbf']]);
				parsed.fileName = name;
			}
			return parsed;
		});
		if (geojson.length === 1) {
			return geojson[0];
		}
		else {
			return geojson;
		}
	};
	
	function getZip(base, whiteList) {
		return binaryAjax(base).then(function(a) {
			return shp.parseZip(a, whiteList);
		});
	}
	shp.getShapefile = function(base, whiteList) {
		if (typeof base === 'string') {
			if (base.slice(-4) === '.zip') {
				return getZip(base, whiteList);
			}
			else {
				return Promise.all([
					Promise.all([
						binaryAjax(base + '.shp'),
						binaryAjax(base + '.prj')
					]).then(function(args) {
						return parseShp(args[0], args[1] ? proj4(args[1]) : false);
					}),
					binaryAjax(base + '.dbf').then(parseDbf)
				]).then(shp.combine);
			}
		}
		else {
			return new Promise(function(resolve) {
				resolve(shp.parseZip(base));
			});
		}
	};
	shp.parseShp = function (shp, prj) {
		if (Buffer.isBuffer(shp)) {
			shp = toArrayBuffer(shp);
		}
		if (Buffer.isBuffer(prj)) {
			prj = prj.toString();
		}
		if (typeof prj === 'string') {
			prj = proj4(prj);
			return parseShp(shp, prj);
		} else {
			return parseShp(shp);
		}
	};
	shp.parseDbf = function (dbf) {
		if (Buffer.isBuffer(dbf)) {
			dbf = toArrayBuffer(dbf);
		}
		return parseDbf(dbf);
	};
	module.exports = shp;
	
	/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(193).Buffer))

/***/ }),
/* 1105 */
/***/ (function(module, exports) {

	'use strict';
	function isClockWise(array){
		var sum = 0;
		var i = 1;
		var len = array.length;
		var prev,cur;
		while(i<len){
			prev = cur||array[0];
			cur = array[i];
			sum += ((cur[0]-prev[0])*(cur[1]+prev[1]));
			i++;
		}
		return sum > 0;
	}
	function polyReduce(a,b){
		if(isClockWise(b)||!a.length){
			a.push([b]);
		}else{
			a[a.length-1].push(b);
		}
		return a;
	}
	ParseShp.prototype.parsePoint = function (data){
		return {
			'type': 'Point',
			'coordinates': this.parseCoord(data,0)
		};
	};
	ParseShp.prototype.parseZPoint = function (data){
		var pointXY = this.parsePoint(data);
		pointXY.coordinates.push(this.parseCoord(data,16));
		return pointXY;
	};
	ParseShp.prototype.parsePointArray = function (data,offset,num){
		var out = [];
		var done = 0;
		while(done<num){
			out.push(this.parseCoord(data,offset));
			offset += 16;
			done++;
		}
		return out;
	};
	ParseShp.prototype.parseZPointArray = function (data,zOffset,num,coordinates){
		var i = 0;
		while(i<num){
			coordinates[i].push(data.getFloat64(zOffset,true));
			i++;
			zOffset += 8;
		}
		return coordinates;
	};
	ParseShp.prototype.parseArrayGroup = function (data,offset,partOffset,num,tot){
		var out = [];
		var done = 0;
		var curNum,nextNum=0,pointNumber;
		while(done<num){
			done++;
			partOffset += 4;
			curNum = nextNum;
			if(done===num){
				nextNum = tot;
			}else{
				nextNum = data.getInt32(partOffset,true);
			}
			pointNumber = nextNum - curNum;
			if(!pointNumber){
				continue;
			}
			out.push(this.parsePointArray(data,offset,pointNumber));
			offset += (pointNumber<<4);
		}
		return out;
	};
	ParseShp.prototype.parseZArrayGroup = function(data,zOffset,num,coordinates){
		var i = 0;
		while(i<num){
			coordinates[i] = this.parseZPointArray(data,zOffset,coordinates[i].length,coordinates[i]);
			zOffset += (coordinates[i].length<<3);
			i++;
		}
		return coordinates;
	};
	ParseShp.prototype.parseMultiPoint = function (data){
		var out = {};
		var mins = this.parseCoord(data,0);
		var maxs = this.parseCoord(data,16);
		out.bbox = [
			mins[0],
			mins[1],
			maxs[0],
			maxs[1]
		];
		var num = data.getInt32(32,true);
		var offset = 36;
		if(num===1){
			out.type = 'Point';
			out.coordinates = this.parseCoord(data,offset);
		}else{
			out.type = 'MultiPoint';
			out.coordinates = this.parsePointArray(data,offset,num);
		}
		return out;
	};
	ParseShp.prototype.parseZMultiPoint = function(data){
		var geoJson = this.parseMultiPoint(data);
		var num;
		if(geoJson.type === 'Point'){
			geoJson.coordinates.push(data.getFloat64(72,true));
			return geoJson;
		}else{
			num = geoJson.coordinates.length;
		}
		var zOffset = 56 + (num<<4);
		geoJson.coordinates =  this.parseZPointArray(data,zOffset,num,geoJson.coordinates);
		return geoJson;
	};
	ParseShp.prototype.parsePolyline = function (data){
		var out = {};
		var mins = this.parseCoord(data,0);
		var maxs = this.parseCoord(data,16);
		out.bbox = [
			mins[0],
			mins[1],
			maxs[0],
			maxs[1]
		];
		var numParts = data.getInt32(32,true);
		var num = data.getInt32(36,true);
		var offset,partOffset;
		if(numParts === 1){
			out.type = 'LineString';
			offset = 44;
			out.coordinates = this.parsePointArray(data,offset,num);
		}else{
			out.type = 'MultiLineString';
			offset = 40 + (numParts<<2);
			partOffset = 40;
			out.coordinates = this.parseArrayGroup(data,offset,partOffset,numParts,num);
		}
		return out;
	};
	ParseShp.prototype.parseZPolyline = function(data){
		var geoJson = this.parsePolyline(data);
		var num = geoJson.coordinates.length;
		var zOffset = 60 + (num<<4);
		if(geoJson.type === 'LineString'){
			geoJson.coordinates =  this.parseZPointArray(data,zOffset,num,geoJson.coordinates);
			return geoJson;
		}else{
			geoJson.coordinates =  this.parseZArrayGroup(data,zOffset,num,geoJson.coordinates);
			return geoJson;
		}
	};
	ParseShp.prototype.polyFuncs = function (out){
		if(out.type === 'LineString'){
			out.type = 'Polygon';
			out.coordinates = [out.coordinates];
			return out;
		}else{
			out.coordinates = out.coordinates.reduce(polyReduce,[]);
			if(out.coordinates.length === 1){
				out.type = 'Polygon';
				out.coordinates = out.coordinates[0];
				return out;
			}else{
				out.type = 'MultiPolygon';
				return out;
			}
		}
	};
	ParseShp.prototype.parsePolygon = function (data){
		return this.polyFuncs(this.parsePolyline(data));
	};
	ParseShp.prototype.parseZPolygon = function(data){
		return this.polyFuncs(this.parseZPolyline(data));
	};
	var shpFuncObj = {
		1:'parsePoint',
		3:'parsePolyline',
		5:'parsePolygon',
		8:'parseMultiPoint',
		11:'parseZPoint',
		13:'parseZPolyline',
		15:'parseZPolygon',
		18:'parseZMultiPoint'
	};
	
	
	
	function makeParseCoord(trans){
		if(trans){
			return function(data,offset){
				return trans.inverse([data.getFloat64(offset,true),data.getFloat64(offset+8,true)]);
			};
		}else{
			return function(data,offset){
				return [data.getFloat64(offset,true),data.getFloat64(offset+8,true)];
			};
		}
	}
	function ParseShp(buffer,trans){
		if(!(this instanceof ParseShp)){
			return new ParseShp(buffer,trans);
		}
		this.buffer = buffer;
		this.shpFuncs(trans);
		this.rows = this.getRows();
	}
	ParseShp.prototype.shpFuncs = function (tran){
		var num = this.getShpCode();
		if(num>20){
			num -= 20;
		}
		if(!(num in shpFuncObj)){
			throw new Error('I don\'t know that shp type');
		}
		this.parseFunc = this[shpFuncObj[num]];
		this.parseCoord = makeParseCoord(tran);
	};
	ParseShp.prototype.getShpCode = function(){
		return this.parseHeader().shpCode;
	};
	ParseShp.prototype.parseHeader = function (){
		var view = new DataView(this.buffer,0,100) ;
		return {
			length : view.getInt32(6<<2,false),
			version : view.getInt32(7<<2,true),
			shpCode : view.getInt32(8<<2,true),
			bbox : [
				view.getFloat64(9<<2,true),
				view.getFloat64(11<<2,true),
				view.getFloat64(13<<2,true),
				view.getFloat64(13<<2,true)
			]
		};
	};
	ParseShp.prototype.getRows = function(){
		var offset=100;
		var len = this.buffer.byteLength;
		var out = [];
		var current;
		while(offset<len){
			current = this.getRow(offset);
			offset += 8;
			offset += current.len;
			if(current.type){
				out.push(this.parseFunc(current.data));
			}
		}
		return out;
	};
	ParseShp.prototype.getRow = function(offset){
		var view = new DataView(this.buffer,offset,12);
		var len = view.getInt32(4,false) << 1;
		var data = new DataView(this.buffer,offset+12,len - 4);
		
		return {
			id:view.getInt32(0,false),
			len:len,
			data:data,
			type:view.getInt32(8,true)
		};
	};
	module.exports = function(buffer, trans){
		return new ParseShp(buffer, trans).rows;
	};

/***/ }),
/* 1106 */
/***/ (function(module, exports) {

	'use strict';
	module.exports = toArrayBuffer;
	function toArrayBuffer(buffer) {
	    var arrayBuffer = new ArrayBuffer(buffer.length);
	    var view = new Uint8Array(arrayBuffer);
	    var i = -1;
	    var len = buffer.length;
	    while (++i < len) {
	        view[i] = buffer[i];
	    }
	    return arrayBuffer;
	}

/***/ }),
/* 1107 */
/***/ (function(module, exports, __webpack_require__) {

	'use strict';
	
	var JSZip = __webpack_require__(366);
	module.exports = function(buffer) {
		var zip = new JSZip(buffer);
		var files = zip.file(/.+/);
		var out = {};
		files.forEach(function(a) {
			if (a.name.slice(-3).toLowerCase() === 'shp' || a.name.slice(-3).toLowerCase() === 'dbf') {
				out[a.name] = a.asText();
				out[a.name] = a.asArrayBuffer();
			}
			else {
				out[a.name] = a.asText();
			}
		});
		return out;
	};


/***/ }),
/* 1108 */
/***/ (function(module, exports, __webpack_require__) {

	// style-loader: Adds some css to the DOM by adding a <style> tag
	
	// load the styles
	var content = __webpack_require__(930);
	if(typeof content === 'string') content = [[module.id, content, '']];
	// add the styles to the DOM
	var update = __webpack_require__(8)(content, {});
	if(content.locals) module.exports = content.locals;
	// Hot Module Replacement
	if(false) {
		// When the styles change, update the <style> tags
		if(!content.locals) {
			module.hot.accept("!!../css-loader/index.js!../less-loader/index.js!./font-awesome-styles.loader.js!./font-awesome.config.js", function() {
				var newContent = require("!!../css-loader/index.js!../less-loader/index.js!./font-awesome-styles.loader.js!./font-awesome.config.js");
				if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
				update(newContent);
			});
		}
		// When the module is disposed, remove the <style> tags
		module.hot.dispose(function() { update(); });
	}

/***/ }),
/* 1109 */
/***/ (function(module, exports, __webpack_require__) {

	// style-loader: Adds some css to the DOM by adding a <style> tag
	
	// load the styles
	var content = __webpack_require__(931);
	if(typeof content === 'string') content = [[module.id, content, '']];
	// add the styles to the DOM
	var update = __webpack_require__(8)(content, {});
	if(content.locals) module.exports = content.locals;
	// Hot Module Replacement
	if(false) {
		// When the styles change, update the <style> tags
		if(!content.locals) {
			module.hot.accept("!!../../css-loader/index.js!../../postcss-loader/index.js!./anno.css", function() {
				var newContent = require("!!../../css-loader/index.js!../../postcss-loader/index.js!./anno.css");
				if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
				update(newContent);
			});
		}
		// When the module is disposed, remove the <style> tags
		module.hot.dispose(function() { update(); });
	}

/***/ }),
/* 1110 */
/***/ (function(module, exports, __webpack_require__) {

	// style-loader: Adds some css to the DOM by adding a <style> tag
	
	// load the styles
	var content = __webpack_require__(933);
	if(typeof content === 'string') content = [[module.id, content, '']];
	// add the styles to the DOM
	var update = __webpack_require__(8)(content, {});
	if(content.locals) module.exports = content.locals;
	// Hot Module Replacement
	if(false) {
		// When the styles change, update the <style> tags
		if(!content.locals) {
			module.hot.accept("!!../../../css-loader/index.js!../../../postcss-loader/index.js!./bootstrap.min.css", function() {
				var newContent = require("!!../../../css-loader/index.js!../../../postcss-loader/index.js!./bootstrap.min.css");
				if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
				update(newContent);
			});
		}
		// When the module is disposed, remove the <style> tags
		module.hot.dispose(function() { update(); });
	}

/***/ }),
/* 1111 */
/***/ (function(module, exports, __webpack_require__) {

	// style-loader: Adds some css to the DOM by adding a <style> tag
	
	// load the styles
	var content = __webpack_require__(934);
	if(typeof content === 'string') content = [[module.id, content, '']];
	// add the styles to the DOM
	var update = __webpack_require__(8)(content, {});
	if(content.locals) module.exports = content.locals;
	// Hot Module Replacement
	if(false) {
		// When the styles change, update the <style> tags
		if(!content.locals) {
			module.hot.accept("!!../../../css-loader/index.js!../../../postcss-loader/index.js!./bootstrap-datetimepicker.css", function() {
				var newContent = require("!!../../../css-loader/index.js!../../../postcss-loader/index.js!./bootstrap-datetimepicker.css");
				if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
				update(newContent);
			});
		}
		// When the module is disposed, remove the <style> tags
		module.hot.dispose(function() { update(); });
	}

/***/ }),
/* 1112 */
/***/ (function(module, exports, __webpack_require__) {

	// style-loader: Adds some css to the DOM by adding a <style> tag
	
	// load the styles
	var content = __webpack_require__(935);
	if(typeof content === 'string') content = [[module.id, content, '']];
	// add the styles to the DOM
	var update = __webpack_require__(8)(content, {});
	if(content.locals) module.exports = content.locals;
	// Hot Module Replacement
	if(false) {
		// When the styles change, update the <style> tags
		if(!content.locals) {
			module.hot.accept("!!../../../../css-loader/index.js!../../../../postcss-loader/index.js!./ol.css", function() {
				var newContent = require("!!../../../../css-loader/index.js!../../../../postcss-loader/index.js!./ol.css");
				if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
				update(newContent);
			});
		}
		// When the module is disposed, remove the <style> tags
		module.hot.dispose(function() { update(); });
	}

/***/ }),
/* 1113 */
/***/ (function(module, exports, __webpack_require__) {

	// style-loader: Adds some css to the DOM by adding a <style> tag
	
	// load the styles
	var content = __webpack_require__(936);
	if(typeof content === 'string') content = [[module.id, content, '']];
	// add the styles to the DOM
	var update = __webpack_require__(8)(content, {});
	if(content.locals) module.exports = content.locals;
	// Hot Module Replacement
	if(false) {
		// When the styles change, update the <style> tags
		if(!content.locals) {
			module.hot.accept("!!../../../../css-loader/index.js!../../../../postcss-loader/index.js!./progressbar.css", function() {
				var newContent = require("!!../../../../css-loader/index.js!../../../../postcss-loader/index.js!./progressbar.css");
				if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
				update(newContent);
			});
		}
		// When the module is disposed, remove the <style> tags
		module.hot.dispose(function() { update(); });
	}

/***/ }),
/* 1114 */
/***/ (function(module, exports, __webpack_require__) {

	// style-loader: Adds some css to the DOM by adding a <style> tag
	
	// load the styles
	var content = __webpack_require__(937);
	if(typeof content === 'string') content = [[module.id, content, '']];
	// add the styles to the DOM
	var update = __webpack_require__(8)(content, {});
	if(content.locals) module.exports = content.locals;
	// Hot Module Replacement
	if(false) {
		// When the styles change, update the <style> tags
		if(!content.locals) {
			module.hot.accept("!!../../../../css-loader/index.js!../../../../postcss-loader/index.js!./ModalView.css", function() {
				var newContent = require("!!../../../../css-loader/index.js!../../../../postcss-loader/index.js!./ModalView.css");
				if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
				update(newContent);
			});
		}
		// When the module is disposed, remove the <style> tags
		module.hot.dispose(function() { update(); });
	}

/***/ }),
/* 1115 */
/***/ (function(module, exports, __webpack_require__) {

	// style-loader: Adds some css to the DOM by adding a <style> tag
	
	// load the styles
	var content = __webpack_require__(938);
	if(typeof content === 'string') content = [[module.id, content, '']];
	// add the styles to the DOM
	var update = __webpack_require__(8)(content, {});
	if(content.locals) module.exports = content.locals;
	// Hot Module Replacement
	if(false) {
		// When the styles change, update the <style> tags
		if(!content.locals) {
			module.hot.accept("!!../../../../css-loader/index.js!../../../../postcss-loader/index.js!./RecordItemView.css", function() {
				var newContent = require("!!../../../../css-loader/index.js!../../../../postcss-loader/index.js!./RecordItemView.css");
				if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
				update(newContent);
			});
		}
		// When the module is disposed, remove the <style> tags
		module.hot.dispose(function() { update(); });
	}

/***/ }),
/* 1116 */
/***/ (function(module, exports, __webpack_require__) {

	// style-loader: Adds some css to the DOM by adding a <style> tag
	
	// load the styles
	var content = __webpack_require__(939);
	if(typeof content === 'string') content = [[module.id, content, '']];
	// add the styles to the DOM
	var update = __webpack_require__(8)(content, {});
	if(content.locals) module.exports = content.locals;
	// Hot Module Replacement
	if(false) {
		// When the styles change, update the <style> tags
		if(!content.locals) {
			module.hot.accept("!!../../../../css-loader/index.js!../../../../postcss-loader/index.js!./TimeSliderHistogramButton.css", function() {
				var newContent = require("!!../../../../css-loader/index.js!../../../../postcss-loader/index.js!./TimeSliderHistogramButton.css");
				if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
				update(newContent);
			});
		}
		// When the module is disposed, remove the <style> tags
		module.hot.dispose(function() { update(); });
	}

/***/ }),
/* 1117 */
/***/ (function(module, exports, __webpack_require__) {

	// style-loader: Adds some css to the DOM by adding a <style> tag
	
	// load the styles
	var content = __webpack_require__(940);
	if(typeof content === 'string') content = [[module.id, content, '']];
	// add the styles to the DOM
	var update = __webpack_require__(8)(content, {});
	if(content.locals) module.exports = content.locals;
	// Hot Module Replacement
	if(false) {
		// When the styles change, update the <style> tags
		if(!content.locals) {
			module.hot.accept("!!../../../../css-loader/index.js!../../../../postcss-loader/index.js!./TimeSliderView.css", function() {
				var newContent = require("!!../../../../css-loader/index.js!../../../../postcss-loader/index.js!./TimeSliderView.css");
				if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
				update(newContent);
			});
		}
		// When the module is disposed, remove the <style> tags
		module.hot.dispose(function() { update(); });
	}

/***/ }),
/* 1118 */
/***/ (function(module, exports, __webpack_require__) {

	// style-loader: Adds some css to the DOM by adding a <style> tag
	
	// load the styles
	var content = __webpack_require__(941);
	if(typeof content === 'string') content = [[module.id, content, '']];
	// add the styles to the DOM
	var update = __webpack_require__(8)(content, {});
	if(content.locals) module.exports = content.locals;
	// Hot Module Replacement
	if(false) {
		// When the styles change, update the <style> tags
		if(!content.locals) {
			module.hot.accept("!!../../../../../css-loader/index.js!../../../../../postcss-loader/index.js!./LayerControlLayoutView.css", function() {
				var newContent = require("!!../../../../../css-loader/index.js!../../../../../postcss-loader/index.js!./LayerControlLayoutView.css");
				if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
				update(newContent);
			});
		}
		// When the module is disposed, remove the <style> tags
		module.hot.dispose(function() { update(); });
	}

/***/ }),
/* 1119 */
/***/ (function(module, exports, __webpack_require__) {

	// style-loader: Adds some css to the DOM by adding a <style> tag
	
	// load the styles
	var content = __webpack_require__(942);
	if(typeof content === 'string') content = [[module.id, content, '']];
	// add the styles to the DOM
	var update = __webpack_require__(8)(content, {});
	if(content.locals) module.exports = content.locals;
	// Hot Module Replacement
	if(false) {
		// When the styles change, update the <style> tags
		if(!content.locals) {
			module.hot.accept("!!../../../../../css-loader/index.js!../../../../../postcss-loader/index.js!./LayerListItemView.css", function() {
				var newContent = require("!!../../../../../css-loader/index.js!../../../../../postcss-loader/index.js!./LayerListItemView.css");
				if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
				update(newContent);
			});
		}
		// When the module is disposed, remove the <style> tags
		module.hot.dispose(function() { update(); });
	}

/***/ }),
/* 1120 */
/***/ (function(module, exports, __webpack_require__) {

	// style-loader: Adds some css to the DOM by adding a <style> tag
	
	// load the styles
	var content = __webpack_require__(943);
	if(typeof content === 'string') content = [[module.id, content, '']];
	// add the styles to the DOM
	var update = __webpack_require__(8)(content, {});
	if(content.locals) module.exports = content.locals;
	// Hot Module Replacement
	if(false) {
		// When the styles change, update the <style> tags
		if(!content.locals) {
			module.hot.accept("!!../../../../../css-loader/index.js!../../../../../postcss-loader/index.js!./LayerListView.css", function() {
				var newContent = require("!!../../../../../css-loader/index.js!../../../../../postcss-loader/index.js!./LayerListView.css");
				if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
				update(newContent);
			});
		}
		// When the module is disposed, remove the <style> tags
		module.hot.dispose(function() { update(); });
	}

/***/ }),
/* 1121 */
/***/ (function(module, exports, __webpack_require__) {

	// style-loader: Adds some css to the DOM by adding a <style> tag
	
	// load the styles
	var content = __webpack_require__(944);
	if(typeof content === 'string') content = [[module.id, content, '']];
	// add the styles to the DOM
	var update = __webpack_require__(8)(content, {});
	if(content.locals) module.exports = content.locals;
	// Hot Module Replacement
	if(false) {
		// When the styles change, update the <style> tags
		if(!content.locals) {
			module.hot.accept("!!../../../../../css-loader/index.js!../../../../../postcss-loader/index.js!./LayerOptionsCoreView.css", function() {
				var newContent = require("!!../../../../../css-loader/index.js!../../../../../postcss-loader/index.js!./LayerOptionsCoreView.css");
				if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
				update(newContent);
			});
		}
		// When the module is disposed, remove the <style> tags
		module.hot.dispose(function() { update(); });
	}

/***/ }),
/* 1122 */
/***/ (function(module, exports, __webpack_require__) {

	// style-loader: Adds some css to the DOM by adding a <style> tag
	
	// load the styles
	var content = __webpack_require__(946);
	if(typeof content === 'string') content = [[module.id, content, '']];
	// add the styles to the DOM
	var update = __webpack_require__(8)(content, {});
	if(content.locals) module.exports = content.locals;
	// Hot Module Replacement
	if(false) {
		// When the styles change, update the <style> tags
		if(!content.locals) {
			module.hot.accept("!!../../../../css-loader/index.js!../../../../postcss-loader/index.js!./DownloadSelectionView.css", function() {
				var newContent = require("!!../../../../css-loader/index.js!../../../../postcss-loader/index.js!./DownloadSelectionView.css");
				if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
				update(newContent);
			});
		}
		// When the module is disposed, remove the <style> tags
		module.hot.dispose(function() { update(); });
	}

/***/ }),
/* 1123 */
/***/ (function(module, exports, __webpack_require__) {

	// style-loader: Adds some css to the DOM by adding a <style> tag
	
	// load the styles
	var content = __webpack_require__(947);
	if(typeof content === 'string') content = [[module.id, content, '']];
	// add the styles to the DOM
	var update = __webpack_require__(8)(content, {});
	if(content.locals) module.exports = content.locals;
	// Hot Module Replacement
	if(false) {
		// When the styles change, update the <style> tags
		if(!content.locals) {
			module.hot.accept("!!../../../../css-loader/index.js!../../../../postcss-loader/index.js!./SelectionListItemView.css", function() {
				var newContent = require("!!../../../../css-loader/index.js!../../../../postcss-loader/index.js!./SelectionListItemView.css");
				if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
				update(newContent);
			});
		}
		// When the module is disposed, remove the <style> tags
		module.hot.dispose(function() { update(); });
	}

/***/ }),
/* 1124 */
/***/ (function(module, exports, __webpack_require__) {

	// style-loader: Adds some css to the DOM by adding a <style> tag
	
	// load the styles
	var content = __webpack_require__(948);
	if(typeof content === 'string') content = [[module.id, content, '']];
	// add the styles to the DOM
	var update = __webpack_require__(8)(content, {});
	if(content.locals) module.exports = content.locals;
	// Hot Module Replacement
	if(false) {
		// When the styles change, update the <style> tags
		if(!content.locals) {
			module.hot.accept("!!../../../../css-loader/index.js!../../../../postcss-loader/index.js!./SelectionListView.css", function() {
				var newContent = require("!!../../../../css-loader/index.js!../../../../postcss-loader/index.js!./SelectionListView.css");
				if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
				update(newContent);
			});
		}
		// When the module is disposed, remove the <style> tags
		module.hot.dispose(function() { update(); });
	}

/***/ }),
/* 1125 */
/***/ (function(module, exports, __webpack_require__) {

	// style-loader: Adds some css to the DOM by adding a <style> tag
	
	// load the styles
	var content = __webpack_require__(949);
	if(typeof content === 'string') content = [[module.id, content, '']];
	// add the styles to the DOM
	var update = __webpack_require__(8)(content, {});
	if(content.locals) module.exports = content.locals;
	// Hot Module Replacement
	if(false) {
		// When the styles change, update the <style> tags
		if(!content.locals) {
			module.hot.accept("!!../../../../css-loader/index.js!../../../../postcss-loader/index.js!./RecordDetailsView.css", function() {
				var newContent = require("!!../../../../css-loader/index.js!../../../../postcss-loader/index.js!./RecordDetailsView.css");
				if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
				update(newContent);
			});
		}
		// When the module is disposed, remove the <style> tags
		module.hot.dispose(function() { update(); });
	}

/***/ }),
/* 1126 */
/***/ (function(module, exports, __webpack_require__) {

	// style-loader: Adds some css to the DOM by adding a <style> tag
	
	// load the styles
	var content = __webpack_require__(950);
	if(typeof content === 'string') content = [[module.id, content, '']];
	// add the styles to the DOM
	var update = __webpack_require__(8)(content, {});
	if(content.locals) module.exports = content.locals;
	// Hot Module Replacement
	if(false) {
		// When the styles change, update the <style> tags
		if(!content.locals) {
			module.hot.accept("!!../../../../css-loader/index.js!../../../../postcss-loader/index.js!./SearchResultListView.css", function() {
				var newContent = require("!!../../../../css-loader/index.js!../../../../postcss-loader/index.js!./SearchResultListView.css");
				if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
				update(newContent);
			});
		}
		// When the module is disposed, remove the <style> tags
		module.hot.dispose(function() { update(); });
	}

/***/ }),
/* 1127 */
/***/ (function(module, exports, __webpack_require__) {

	// style-loader: Adds some css to the DOM by adding a <style> tag
	
	// load the styles
	var content = __webpack_require__(951);
	if(typeof content === 'string') content = [[module.id, content, '']];
	// add the styles to the DOM
	var update = __webpack_require__(8)(content, {});
	if(content.locals) module.exports = content.locals;
	// Hot Module Replacement
	if(false) {
		// When the styles change, update the <style> tags
		if(!content.locals) {
			module.hot.accept("!!../../../../css-loader/index.js!../../../../postcss-loader/index.js!./SearchResultView.css", function() {
				var newContent = require("!!../../../../css-loader/index.js!../../../../postcss-loader/index.js!./SearchResultView.css");
				if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
				update(newContent);
			});
		}
		// When the module is disposed, remove the <style> tags
		module.hot.dispose(function() { update(); });
	}

/***/ }),
/* 1128 */
/***/ (function(module, exports, __webpack_require__) {

	// style-loader: Adds some css to the DOM by adding a <style> tag
	
	// load the styles
	var content = __webpack_require__(952);
	if(typeof content === 'string') content = [[module.id, content, '']];
	// add the styles to the DOM
	var update = __webpack_require__(8)(content, {});
	if(content.locals) module.exports = content.locals;
	// Hot Module Replacement
	if(false) {
		// When the styles change, update the <style> tags
		if(!content.locals) {
			module.hot.accept("!!../../css-loader/index.js!../../postcss-loader/index.js!../../less-loader/index.js!./d3.timeslider.less", function() {
				var newContent = require("!!../../css-loader/index.js!../../postcss-loader/index.js!../../less-loader/index.js!./d3.timeslider.less");
				if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
				update(newContent);
			});
		}
		// When the module is disposed, remove the <style> tags
		module.hot.dispose(function() { update(); });
	}

/***/ }),
/* 1129 */
/***/ (function(module, exports, __webpack_require__) {

	// style-loader: Adds some css to the DOM by adding a <style> tag
	
	// load the styles
	var content = __webpack_require__(953);
	if(typeof content === 'string') content = [[module.id, content, '']];
	// add the styles to the DOM
	var update = __webpack_require__(8)(content, {});
	if(content.locals) module.exports = content.locals;
	// Hot Module Replacement
	if(false) {
		// When the styles change, update the <style> tags
		if(!content.locals) {
			module.hot.accept("!!../node_modules/css-loader/index.js!../node_modules/postcss-loader/index.js!../node_modules/sass-loader/lib/loader.js!./_client.scss", function() {
				var newContent = require("!!../node_modules/css-loader/index.js!../node_modules/postcss-loader/index.js!../node_modules/sass-loader/lib/loader.js!./_client.scss");
				if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
				update(newContent);
			});
		}
		// When the module is disposed, remove the <style> tags
		module.hot.dispose(function() { update(); });
	}

/***/ }),
/* 1130 */
/***/ (function(module, exports, __webpack_require__) {

	// style-loader: Adds some css to the DOM by adding a <style> tag
	
	// load the styles
	var content = __webpack_require__(954);
	if(typeof content === 'string') content = [[module.id, content, '']];
	// add the styles to the DOM
	var update = __webpack_require__(8)(content, {});
	if(content.locals) module.exports = content.locals;
	// Hot Module Replacement
	if(false) {
		// When the styles change, update the <style> tags
		if(!content.locals) {
			module.hot.accept("!!../node_modules/css-loader/index.js!../node_modules/postcss-loader/index.js!./tutorial.css", function() {
				var newContent = require("!!../node_modules/css-loader/index.js!../node_modules/postcss-loader/index.js!./tutorial.css");
				if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
				update(newContent);
			});
		}
		// When the module is disposed, remove the <style> tags
		module.hot.dispose(function() { update(); });
	}

/***/ }),
/* 1131 */
/***/ (function(module, exports, __webpack_require__) {

	// style-loader: Adds some css to the DOM by adding a <style> tag
	
	// load the styles
	var content = __webpack_require__(955);
	if(typeof content === 'string') content = [[module.id, content, '']];
	// add the styles to the DOM
	var update = __webpack_require__(8)(content, {});
	if(content.locals) module.exports = content.locals;
	// Hot Module Replacement
	if(false) {
		// When the styles change, update the <style> tags
		if(!content.locals) {
			module.hot.accept("!!../../node_modules/css-loader/index.js!../../node_modules/postcss-loader/index.js!./MapView.css", function() {
				var newContent = require("!!../../node_modules/css-loader/index.js!../../node_modules/postcss-loader/index.js!./MapView.css");
				if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
				update(newContent);
			});
		}
		// When the module is disposed, remove the <style> tags
		module.hot.dispose(function() { update(); });
	}

/***/ }),
/* 1132 */
/***/ (function(module, exports, __webpack_require__) {

	// style-loader: Adds some css to the DOM by adding a <style> tag
	
	// load the styles
	var content = __webpack_require__(956);
	if(typeof content === 'string') content = [[module.id, content, '']];
	// add the styles to the DOM
	var update = __webpack_require__(8)(content, {});
	if(content.locals) module.exports = content.locals;
	// Hot Module Replacement
	if(false) {
		// When the styles change, update the <style> tags
		if(!content.locals) {
			module.hot.accept("!!../../node_modules/css-loader/index.js!../../node_modules/postcss-loader/index.js!./RecordsDetailsModalView.css", function() {
				var newContent = require("!!../../node_modules/css-loader/index.js!../../node_modules/postcss-loader/index.js!./RecordsDetailsModalView.css");
				if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
				update(newContent);
			});
		}
		// When the module is disposed, remove the <style> tags
		module.hot.dispose(function() { update(); });
	}

/***/ }),
/* 1133 */
/***/ (function(module, exports, __webpack_require__) {

	// style-loader: Adds some css to the DOM by adding a <style> tag
	
	// load the styles
	var content = __webpack_require__(957);
	if(typeof content === 'string') content = [[module.id, content, '']];
	// add the styles to the DOM
	var update = __webpack_require__(8)(content, {});
	if(content.locals) module.exports = content.locals;
	// Hot Module Replacement
	if(false) {
		// When the styles change, update the <style> tags
		if(!content.locals) {
			module.hot.accept("!!../../node_modules/css-loader/index.js!../../node_modules/postcss-loader/index.js!./SelectFilesModalView.css", function() {
				var newContent = require("!!../../node_modules/css-loader/index.js!../../node_modules/postcss-loader/index.js!./SelectFilesModalView.css");
				if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
				update(newContent);
			});
		}
		// When the module is disposed, remove the <style> tags
		module.hot.dispose(function() { update(); });
	}

/***/ }),
/* 1134 */
/***/ (function(module, exports, __webpack_require__) {

	// style-loader: Adds some css to the DOM by adding a <style> tag
	
	// load the styles
	var content = __webpack_require__(958);
	if(typeof content === 'string') content = [[module.id, content, '']];
	// add the styles to the DOM
	var update = __webpack_require__(8)(content, {});
	if(content.locals) module.exports = content.locals;
	// Hot Module Replacement
	if(false) {
		// When the styles change, update the <style> tags
		if(!content.locals) {
			module.hot.accept("!!../../node_modules/css-loader/index.js!../../node_modules/postcss-loader/index.js!./SidePanelView.css", function() {
				var newContent = require("!!../../node_modules/css-loader/index.js!../../node_modules/postcss-loader/index.js!./SidePanelView.css");
				if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
				update(newContent);
			});
		}
		// When the module is disposed, remove the <style> tags
		module.hot.dispose(function() { update(); });
	}

/***/ }),
/* 1135 */
/***/ (function(module, exports, __webpack_require__) {

	// style-loader: Adds some css to the DOM by adding a <style> tag
	
	// load the styles
	var content = __webpack_require__(959);
	if(typeof content === 'string') content = [[module.id, content, '']];
	// add the styles to the DOM
	var update = __webpack_require__(8)(content, {});
	if(content.locals) module.exports = content.locals;
	// Hot Module Replacement
	if(false) {
		// When the styles change, update the <style> tags
		if(!content.locals) {
			module.hot.accept("!!../../node_modules/css-loader/index.js!../../node_modules/postcss-loader/index.js!./TimeSliderView.css", function() {
				var newContent = require("!!../../node_modules/css-loader/index.js!../../node_modules/postcss-loader/index.js!./TimeSliderView.css");
				if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
				update(newContent);
			});
		}
		// When the module is disposed, remove the <style> tags
		module.hot.dispose(function() { update(); });
	}

/***/ }),
/* 1136 */
/***/ (function(module, exports, __webpack_require__) {

	// style-loader: Adds some css to the DOM by adding a <style> tag
	
	// load the styles
	var content = __webpack_require__(960);
	if(typeof content === 'string') content = [[module.id, content, '']];
	// add the styles to the DOM
	var update = __webpack_require__(8)(content, {});
	if(content.locals) module.exports = content.locals;
	// Hot Module Replacement
	if(false) {
		// When the styles change, update the <style> tags
		if(!content.locals) {
			module.hot.accept("!!../../node_modules/css-loader/index.js!../../node_modules/postcss-loader/index.js!./WarningsView.css", function() {
				var newContent = require("!!../../node_modules/css-loader/index.js!../../node_modules/postcss-loader/index.js!./WarningsView.css");
				if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
				update(newContent);
			});
		}
		// When the module is disposed, remove the <style> tags
		module.hot.dispose(function() { update(); });
	}

/***/ }),
/* 1137 */
/***/ (function(module, exports, __webpack_require__) {

	// style-loader: Adds some css to the DOM by adding a <style> tag
	
	// load the styles
	var content = __webpack_require__(961);
	if(typeof content === 'string') content = [[module.id, content, '']];
	// add the styles to the DOM
	var update = __webpack_require__(8)(content, {});
	if(content.locals) module.exports = content.locals;
	// Hot Module Replacement
	if(false) {
		// When the styles change, update the <style> tags
		if(!content.locals) {
			module.hot.accept("!!../../../node_modules/css-loader/index.js!../../../node_modules/postcss-loader/index.js!./CombinedResultView.css", function() {
				var newContent = require("!!../../../node_modules/css-loader/index.js!../../../node_modules/postcss-loader/index.js!./CombinedResultView.css");
				if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
				update(newContent);
			});
		}
		// When the module is disposed, remove the <style> tags
		module.hot.dispose(function() { update(); });
	}

/***/ }),
/* 1138 */
/***/ (function(module, exports, __webpack_require__) {

	// style-loader: Adds some css to the DOM by adding a <style> tag
	
	// load the styles
	var content = __webpack_require__(962);
	if(typeof content === 'string') content = [[module.id, content, '']];
	// add the styles to the DOM
	var update = __webpack_require__(8)(content, {});
	if(content.locals) module.exports = content.locals;
	// Hot Module Replacement
	if(false) {
		// When the styles change, update the <style> tags
		if(!content.locals) {
			module.hot.accept("!!../../../node_modules/css-loader/index.js!../../../node_modules/postcss-loader/index.js!./SearchResultHeaderView.css", function() {
				var newContent = require("!!../../../node_modules/css-loader/index.js!../../../node_modules/postcss-loader/index.js!./SearchResultHeaderView.css");
				if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
				update(newContent);
			});
		}
		// When the module is disposed, remove the <style> tags
		module.hot.dispose(function() { update(); });
	}

/***/ }),
/* 1139 */
/***/ (function(module, exports, __webpack_require__) {

	// style-loader: Adds some css to the DOM by adding a <style> tag
	
	// load the styles
	var content = __webpack_require__(963);
	if(typeof content === 'string') content = [[module.id, content, '']];
	// add the styles to the DOM
	var update = __webpack_require__(8)(content, {});
	if(content.locals) module.exports = content.locals;
	// Hot Module Replacement
	if(false) {
		// When the styles change, update the <style> tags
		if(!content.locals) {
			module.hot.accept("!!../../../node_modules/css-loader/index.js!../../../node_modules/postcss-loader/index.js!./SearchResultListView.css", function() {
				var newContent = require("!!../../../node_modules/css-loader/index.js!../../../node_modules/postcss-loader/index.js!./SearchResultListView.css");
				if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
				update(newContent);
			});
		}
		// When the module is disposed, remove the <style> tags
		module.hot.dispose(function() { update(); });
	}

/***/ }),
/* 1140 */
/***/ (function(module, exports, __webpack_require__) {

	// style-loader: Adds some css to the DOM by adding a <style> tag
	
	// load the styles
	var content = __webpack_require__(964);
	if(typeof content === 'string') content = [[module.id, content, '']];
	// add the styles to the DOM
	var update = __webpack_require__(8)(content, {});
	if(content.locals) module.exports = content.locals;
	// Hot Module Replacement
	if(false) {
		// When the styles change, update the <style> tags
		if(!content.locals) {
			module.hot.accept("!!../../../node_modules/css-loader/index.js!../../../node_modules/postcss-loader/index.js!./AreaFilterView.css", function() {
				var newContent = require("!!../../../node_modules/css-loader/index.js!../../../node_modules/postcss-loader/index.js!./AreaFilterView.css");
				if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
				update(newContent);
			});
		}
		// When the module is disposed, remove the <style> tags
		module.hot.dispose(function() { update(); });
	}

/***/ }),
/* 1141 */
/***/ (function(module, exports, __webpack_require__) {

	// style-loader: Adds some css to the DOM by adding a <style> tag
	
	// load the styles
	var content = __webpack_require__(965);
	if(typeof content === 'string') content = [[module.id, content, '']];
	// add the styles to the DOM
	var update = __webpack_require__(8)(content, {});
	if(content.locals) module.exports = content.locals;
	// Hot Module Replacement
	if(false) {
		// When the styles change, update the <style> tags
		if(!content.locals) {
			module.hot.accept("!!../../../node_modules/css-loader/index.js!../../../node_modules/postcss-loader/index.js!./ExtraParameterRangeView.css", function() {
				var newContent = require("!!../../../node_modules/css-loader/index.js!../../../node_modules/postcss-loader/index.js!./ExtraParameterRangeView.css");
				if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
				update(newContent);
			});
		}
		// When the module is disposed, remove the <style> tags
		module.hot.dispose(function() { update(); });
	}

/***/ }),
/* 1142 */
/***/ (function(module, exports, __webpack_require__) {

	// style-loader: Adds some css to the DOM by adding a <style> tag
	
	// load the styles
	var content = __webpack_require__(966);
	if(typeof content === 'string') content = [[module.id, content, '']];
	// add the styles to the DOM
	var update = __webpack_require__(8)(content, {});
	if(content.locals) module.exports = content.locals;
	// Hot Module Replacement
	if(false) {
		// When the styles change, update the <style> tags
		if(!content.locals) {
			module.hot.accept("!!../../../node_modules/css-loader/index.js!../../../node_modules/postcss-loader/index.js!./ExtraParametersListView.css", function() {
				var newContent = require("!!../../../node_modules/css-loader/index.js!../../../node_modules/postcss-loader/index.js!./ExtraParametersListView.css");
				if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
				update(newContent);
			});
		}
		// When the module is disposed, remove the <style> tags
		module.hot.dispose(function() { update(); });
	}

/***/ }),
/* 1143 */
/***/ (function(module, exports, __webpack_require__) {

	// style-loader: Adds some css to the DOM by adding a <style> tag
	
	// load the styles
	var content = __webpack_require__(967);
	if(typeof content === 'string') content = [[module.id, content, '']];
	// add the styles to the DOM
	var update = __webpack_require__(8)(content, {});
	if(content.locals) module.exports = content.locals;
	// Hot Module Replacement
	if(false) {
		// When the styles change, update the <style> tags
		if(!content.locals) {
			module.hot.accept("!!../../../node_modules/css-loader/index.js!../../../node_modules/postcss-loader/index.js!./RootFiltersView.css", function() {
				var newContent = require("!!../../../node_modules/css-loader/index.js!../../../node_modules/postcss-loader/index.js!./RootFiltersView.css");
				if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
				update(newContent);
			});
		}
		// When the module is disposed, remove the <style> tags
		module.hot.dispose(function() { update(); });
	}

/***/ }),
/* 1144 */
/***/ (function(module, exports, __webpack_require__) {

	/* WEBPACK VAR INJECTION */(function(global) {var scope = (typeof global !== "undefined" && global) ||
	            (typeof self !== "undefined" && self) ||
	            window;
	var apply = Function.prototype.apply;
	
	// DOM APIs, for completeness
	
	exports.setTimeout = function() {
	  return new Timeout(apply.call(setTimeout, scope, arguments), clearTimeout);
	};
	exports.setInterval = function() {
	  return new Timeout(apply.call(setInterval, scope, arguments), clearInterval);
	};
	exports.clearTimeout =
	exports.clearInterval = function(timeout) {
	  if (timeout) {
	    timeout.close();
	  }
	};
	
	function Timeout(id, clearFn) {
	  this._id = id;
	  this._clearFn = clearFn;
	}
	Timeout.prototype.unref = Timeout.prototype.ref = function() {};
	Timeout.prototype.close = function() {
	  this._clearFn.call(scope, this._id);
	};
	
	// Does not start the time, just sets up the members needed.
	exports.enroll = function(item, msecs) {
	  clearTimeout(item._idleTimeoutId);
	  item._idleTimeout = msecs;
	};
	
	exports.unenroll = function(item) {
	  clearTimeout(item._idleTimeoutId);
	  item._idleTimeout = -1;
	};
	
	exports._unrefActive = exports.active = function(item) {
	  clearTimeout(item._idleTimeoutId);
	
	  var msecs = item._idleTimeout;
	  if (msecs >= 0) {
	    item._idleTimeoutId = setTimeout(function onTimeout() {
	      if (item._onTimeout)
	        item._onTimeout();
	    }, msecs);
	  }
	};
	
	// setimmediate attaches itself to the global object
	__webpack_require__(1102);
	// On some exotic environments, it's not clear which object `setimmediate` was
	// able to install onto.  Search each possibility in the same order as the
	// `setimmediate` library.
	exports.setImmediate = (typeof self !== "undefined" && self.setImmediate) ||
	                       (typeof global !== "undefined" && global.setImmediate) ||
	                       (this && this.setImmediate);
	exports.clearImmediate = (typeof self !== "undefined" && self.clearImmediate) ||
	                         (typeof global !== "undefined" && global.clearImmediate) ||
	                         (this && this.clearImmediate);
	
	/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))

/***/ }),
/* 1145 */
/***/ (function(module, exports, __webpack_require__) {

	"use strict";
	
	var isPrototype = __webpack_require__(1148);
	
	module.exports = function (value) {
		if (typeof value !== "function") return false;
	
		if (!hasOwnProperty.call(value, "length")) return false;
	
		try {
			if (typeof value.length !== "number") return false;
			if (typeof value.call !== "function") return false;
			if (typeof value.apply !== "function") return false;
		} catch (error) {
			return false;
		}
	
		return !isPrototype(value);
	};


/***/ }),
/* 1146 */
/***/ (function(module, exports, __webpack_require__) {

	"use strict";
	
	var isValue = __webpack_require__(517);
	
	// prettier-ignore
	var possibleTypes = { "object": true, "function": true, "undefined": true /* document.all */ };
	
	module.exports = function (value) {
		if (!isValue(value)) return false;
		return hasOwnProperty.call(possibleTypes, typeof value);
	};


/***/ }),
/* 1147 */
/***/ (function(module, exports, __webpack_require__) {

	"use strict";
	
	var isFunction = __webpack_require__(1145);
	
	var classRe = /^\s*class[\s{/}]/, functionToString = Function.prototype.toString;
	
	module.exports = function (value) {
		if (!isFunction(value)) return false;
		if (classRe.test(functionToString.call(value))) return false;
		return true;
	};


/***/ }),
/* 1148 */
/***/ (function(module, exports, __webpack_require__) {

	"use strict";
	
	var isObject = __webpack_require__(1146);
	
	module.exports = function (value) {
		if (!isObject(value)) return false;
		try {
			if (!value.constructor) return false;
			return value.constructor.prototype === value;
		} catch (error) {
			return false;
		}
	};


/***/ }),
/* 1149 */
/***/ (function(module, exports) {

	module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/Pgo8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiID4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8bWV0YWRhdGE+PC9tZXRhZGF0YT4KPGRlZnM+Cjxmb250IGlkPSJnbHlwaGljb25zX2hhbGZsaW5nc3JlZ3VsYXIiIGhvcml6LWFkdi14PSIxMjAwIiA+Cjxmb250LWZhY2UgdW5pdHMtcGVyLWVtPSIxMjAwIiBhc2NlbnQ9Ijk2MCIgZGVzY2VudD0iLTI0MCIgLz4KPG1pc3NpbmctZ2x5cGggaG9yaXotYWR2LXg9IjUwMCIgLz4KPGdseXBoIGhvcml6LWFkdi14PSIwIiAvPgo8Z2x5cGggaG9yaXotYWR2LXg9IjQwMCIgLz4KPGdseXBoIHVuaWNvZGU9IiAiIC8+CjxnbHlwaCB1bmljb2RlPSIqIiBkPSJNNjAwIDExMDBxMTUgMCAzNCAtMS41dDMwIC0zLjVsMTEgLTFxMTAgLTIgMTcuNSAtMTAuNXQ3LjUgLTE4LjV2LTIyNGwxNTggMTU4cTcgNyAxOCA4dDE5IC02bDEwNiAtMTA2cTcgLTggNiAtMTl0LTggLTE4bC0xNTggLTE1OGgyMjRxMTAgMCAxOC41IC03LjV0MTAuNSAtMTcuNXE2IC00MSA2IC03NXEwIC0xNSAtMS41IC0zNHQtMy41IC0zMGwtMSAtMTFxLTIgLTEwIC0xMC41IC0xNy41dC0xOC41IC03LjVoLTIyNGwxNTggLTE1OCBxNyAtNyA4IC0xOHQtNiAtMTlsLTEwNiAtMTA2cS04IC03IC0xOSAtNnQtMTggOGwtMTU4IDE1OHYtMjI0cTAgLTEwIC03LjUgLTE4LjV0LTE3LjUgLTEwLjVxLTQxIC02IC03NSAtNnEtMTUgMCAtMzQgMS41dC0zMCAzLjVsLTExIDFxLTEwIDIgLTE3LjUgMTAuNXQtNy41IDE4LjV2MjI0bC0xNTggLTE1OHEtNyAtNyAtMTggLTh0LTE5IDZsLTEwNiAxMDZxLTcgOCAtNiAxOXQ4IDE4bDE1OCAxNThoLTIyNHEtMTAgMCAtMTguNSA3LjUgdC0xMC41IDE3LjVxLTYgNDEgLTYgNzVxMCAxNSAxLjUgMzR0My41IDMwbDEgMTFxMiAxMCAxMC41IDE3LjV0MTguNSA3LjVoMjI0bC0xNTggMTU4cS03IDcgLTggMTh0NiAxOWwxMDYgMTA2cTggNyAxOSA2dDE4IC04bDE1OCAtMTU4djIyNHEwIDEwIDcuNSAxOC41dDE3LjUgMTAuNXE0MSA2IDc1IDZ6IiAvPgo8Z2x5cGggdW5pY29kZT0iKyIgZD0iTTQ1MCAxMTAwaDIwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMzUwaDM1MHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0zNTB2LTM1MHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMjAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYzNTBoLTM1MHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MjAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNSBoMzUwdjM1MHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4YTA7IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4YTU7IiBkPSJNODI1IDExMDBoMjUwcTEwIDAgMTIuNSAtNXQtNS41IC0xM2wtMzY0IC0zNjRxLTYgLTYgLTExIC0xOGgyNjhxMTAgMCAxMyAtNnQtMyAtMTRsLTEyMCAtMTYwcS02IC04IC0xOCAtMTR0LTIyIC02aC0xMjV2LTEwMGgyNzVxMTAgMCAxMyAtNnQtMyAtMTRsLTEyMCAtMTYwcS02IC04IC0xOCAtMTR0LTIyIC02aC0xMjV2LTE3NHEwIC0xMSAtNy41IC0xOC41dC0xOC41IC03LjVoLTE0OHEtMTEgMCAtMTguNSA3LjV0LTcuNSAxOC41djE3NCBoLTI3NXEtMTAgMCAtMTMgNnQzIDE0bDEyMCAxNjBxNiA4IDE4IDE0dDIyIDZoMTI1djEwMGgtMjc1cS0xMCAwIC0xMyA2dDMgMTRsMTIwIDE2MHE2IDggMTggMTR0MjIgNmgxMThxLTUgMTIgLTExIDE4bC0zNjQgMzY0cS04IDggLTUuNSAxM3QxMi41IDVoMjUwcTI1IDAgNDMgLTE4bDE2NCAtMTY0cTggLTggMTggLTh0MTggOGwxNjQgMTY0cTE4IDE4IDQzIDE4eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeDIwMDA7IiBob3Jpei1hZHYteD0iNjUwIiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4MjAwMTsiIGhvcml6LWFkdi14PSIxMzAwIiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4MjAwMjsiIGhvcml6LWFkdi14PSI2NTAiIC8+CjxnbHlwaCB1bmljb2RlPSImI3gyMDAzOyIgaG9yaXotYWR2LXg9IjEzMDAiIC8+CjxnbHlwaCB1bmljb2RlPSImI3gyMDA0OyIgaG9yaXotYWR2LXg9IjQzMyIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeDIwMDU7IiBob3Jpei1hZHYteD0iMzI1IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4MjAwNjsiIGhvcml6LWFkdi14PSIyMTYiIC8+CjxnbHlwaCB1bmljb2RlPSImI3gyMDA3OyIgaG9yaXotYWR2LXg9IjIxNiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeDIwMDg7IiBob3Jpei1hZHYteD0iMTYyIiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4MjAwOTsiIGhvcml6LWFkdi14PSIyNjAiIC8+CjxnbHlwaCB1bmljb2RlPSImI3gyMDBhOyIgaG9yaXotYWR2LXg9IjcyIiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4MjAyZjsiIGhvcml6LWFkdi14PSIyNjAiIC8+CjxnbHlwaCB1bmljb2RlPSImI3gyMDVmOyIgaG9yaXotYWR2LXg9IjMyNSIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeDIwYWM7IiBkPSJNNzQ0IDExOThxMjQyIDAgMzU0IC0xODlxNjAgLTEwNCA2NiAtMjA5aC0xODFxMCA0NSAtMTcuNSA4Mi41dC00My41IDYxLjV0LTU4IDQwLjV0LTYwLjUgMjR0LTUxLjUgNy41cS0xOSAwIC00MC41IC01LjV0LTQ5LjUgLTIwLjV0LTUzIC0zOHQtNDkgLTYyLjV0LTM5IC04OS41aDM3OWwtMTAwIC0xMDBoLTMwMHEtNiAtNTAgLTYgLTEwMGg0MDZsLTEwMCAtMTAwaC0zMDBxOSAtNzQgMzMgLTEzMnQ1Mi41IC05MXQ2MS41IC01NC41dDU5IC0yOSB0NDcgLTcuNXEyMiAwIDUwLjUgNy41dDYwLjUgMjQuNXQ1OCA0MXQ0My41IDYxdDE3LjUgODBoMTc0cS0zMCAtMTcxIC0xMjggLTI3OHEtMTA3IC0xMTcgLTI3NCAtMTE3cS0yMDYgMCAtMzI0IDE1OHEtMzYgNDggLTY5IDEzM3QtNDUgMjA0aC0yMTdsMTAwIDEwMGgxMTJxMSA0NyA2IDEwMGgtMjE4bDEwMCAxMDBoMTM0cTIwIDg3IDUxIDE1My41dDYyIDEwMy41cTExNyAxNDEgMjk3IDE0MXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3gyMGJkOyIgZD0iTTQyOCAxMjAwaDM1MHE2NyAwIDEyMCAtMTN0ODYgLTMxdDU3IC00OS41dDM1IC01Ni41dDE3IC02NC41dDYuNSAtNjAuNXQwLjUgLTU3di0xNi41di0xNi41cTAgLTM2IC0wLjUgLTU3dC02LjUgLTYxdC0xNyAtNjV0LTM1IC01N3QtNTcgLTUwLjV0LTg2IC0zMS41dC0xMjAgLTEzaC0xNzhsLTIgLTEwMGgyODhxMTAgMCAxMyAtNnQtMyAtMTRsLTEyMCAtMTYwcS02IC04IC0xOCAtMTR0LTIyIC02aC0xMzh2LTE3NXEwIC0xMSAtNS41IC0xOCB0LTE1LjUgLTdoLTE0OXEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djE3NWgtMjY3cS0xMCAwIC0xMyA2dDMgMTRsMTIwIDE2MHE2IDggMTggMTR0MjIgNmgxMTd2MTAwaC0yNjdxLTEwIDAgLTEzIDZ0MyAxNGwxMjAgMTYwcTYgOCAxOCAxNHQyMiA2aDExN3Y0NzVxMCAxMCA3LjUgMTcuNXQxNy41IDcuNXpNNjAwIDEwMDB2LTMwMGgyMDNxNjQgMCA4Ni41IDMzdDIyLjUgMTE5cTAgODQgLTIyLjUgMTE2dC04Ni41IDMyaC0yMDN6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4MjIxMjsiIGQ9Ik0yNTAgNzAwaDgwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC04MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djIwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4MjMxYjsiIGQ9Ik0xMDAwIDEyMDB2LTE1MHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNTB2LTEwMHEwIC05MSAtNDkuNSAtMTY1LjV0LTEzMC41IC0xMDkuNXE4MSAtMzUgMTMwLjUgLTEwOS41dDQ5LjUgLTE2NS41di0xNTBoNTBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTE1MGgtODAwdjE1MHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoNTB2MTUwcTAgOTEgNDkuNSAxNjUuNXQxMzAuNSAxMDkuNXEtODEgMzUgLTEzMC41IDEwOS41IHQtNDkuNSAxNjUuNXYxMDBoLTUwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxNTBoODAwek00MDAgMTAwMHYtMTAwcTAgLTYwIDMyLjUgLTEwOS41dDg3LjUgLTczLjVxMjggLTEyIDQ0IC0zN3QxNiAtNTV0LTE2IC01NXQtNDQgLTM3cS01NSAtMjQgLTg3LjUgLTczLjV0LTMyLjUgLTEwOS41di0xNTBoNDAwdjE1MHEwIDYwIC0zMi41IDEwOS41dC04Ny41IDczLjVxLTI4IDEyIC00NCAzN3QtMTYgNTV0MTYgNTV0NDQgMzcgcTU1IDI0IDg3LjUgNzMuNXQzMi41IDEwOS41djEwMGgtNDAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeDI1ZmM7IiBob3Jpei1hZHYteD0iNTAwIiBkPSJNMCAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeDI2MDE7IiBkPSJNNTAzIDEwODlxMTEwIDAgMjAwLjUgLTU5LjV0MTM0LjUgLTE1Ni41cTQ0IDE0IDkwIDE0cTEyMCAwIDIwNSAtODYuNXQ4NSAtMjA2LjVxMCAtMTIxIC04NSAtMjA3LjV0LTIwNSAtODYuNWgtNzUwcS03OSAwIC0xMzUuNSA1N3QtNTYuNSAxMzdxMCA2OSA0Mi41IDEyMi41dDEwOC41IDY3LjVxLTIgMTIgLTIgMzdxMCAxNTMgMTA4IDI2MC41dDI2MCAxMDcuNXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3gyNmZhOyIgZD0iTTc3NCAxMTkzLjVxMTYgLTkuNSAyMC41IC0yN3QtNS41IC0zMy41bC0xMzYgLTE4N2w0NjcgLTc0NmgzMHEyMCAwIDM1IC0xOC41dDE1IC0zOS41di00MmgtMTIwMHY0MnEwIDIxIDE1IDM5LjV0MzUgMTguNWgzMGw0NjggNzQ2bC0xMzUgMTgzcS0xMCAxNiAtNS41IDM0dDIwLjUgMjh0MzQgNS41dDI4IC0yMC41bDExMSAtMTQ4bDExMiAxNTBxOSAxNiAyNyAyMC41dDM0IC01ek02MDAgMjAwaDM3N2wtMTgyIDExMmwtMTk1IDUzNHYtNjQ2eiAiIC8+CjxnbHlwaCB1bmljb2RlPSImI3gyNzA5OyIgZD0iTTI1IDExMDBoMTE1MHExMCAwIDEyLjUgLTV0LTUuNSAtMTNsLTU2NCAtNTY3cS04IC04IC0xOCAtOHQtMTggOGwtNTY0IDU2N3EtOCA4IC01LjUgMTN0MTIuNSA1ek0xOCA4ODJsMjY0IC0yNjRxOCAtOCA4IC0xOHQtOCAtMThsLTI2NCAtMjY0cS04IC04IC0xMyAtNS41dC01IDEyLjV2NTUwcTAgMTAgNSAxMi41dDEzIC01LjV6TTkxOCA2MThsMjY0IDI2NHE4IDggMTMgNS41dDUgLTEyLjV2LTU1MHEwIC0xMCAtNSAtMTIuNXQtMTMgNS41IGwtMjY0IDI2NHEtOCA4IC04IDE4dDggMTh6TTgxOCA0ODJsMzY0IC0zNjRxOCAtOCA1LjUgLTEzdC0xMi41IC01aC0xMTUwcS0xMCAwIC0xMi41IDV0NS41IDEzbDM2NCAzNjRxOCA4IDE4IDh0MTggLThsMTY0IC0xNjRxOCAtOCAxOCAtOHQxOCA4bDE2NCAxNjRxOCA4IDE4IDh0MTggLTh6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4MjcwZjsiIGQ9Ik0xMDExIDEyMTBxMTkgMCAzMyAtMTNsMTUzIC0xNTNxMTMgLTE0IDEzIC0zM3QtMTMgLTMzbC05OSAtOTJsLTIxNCAyMTRsOTUgOTZxMTMgMTQgMzIgMTR6TTEwMTMgODAwbC02MTUgLTYxNGwtMjE0IDIxNGw2MTQgNjE0ek0zMTcgOTZsLTMzMyAtMTEybDExMCAzMzV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTAwMTsiIGQ9Ik03MDAgNjUwdi01NTBoMjUwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di01MGgtODAwdjUwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWgyNTB2NTUwbC01MDAgNTUwaDEyMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTAwMjsiIGQ9Ik0zNjggMTAxN2w2NDUgMTYzcTM5IDE1IDYzIDB0MjQgLTQ5di04MzFxMCAtNTUgLTQxLjUgLTk1LjV0LTExMS41IC02My41cS03OSAtMjUgLTE0NyAtNC41dC04NiA3NXQyNS41IDExMS41dDEyMi41IDgycTcyIDI0IDEzOCA4djUyMWwtNjAwIC0xNTV2LTYwNnEwIC00MiAtNDQgLTkwdC0xMDkgLTY5cS03OSAtMjYgLTE0NyAtNS41dC04NiA3NS41dDI1LjUgMTExLjV0MTIyLjUgODIuNXE3MiAyNCAxMzggN3Y2MzlxMCAzOCAxNC41IDU5IHQ1My41IDM0eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwMDM7IiBkPSJNNTAwIDExOTFxMTAwIDAgMTkxIC0zOXQxNTYuNSAtMTA0LjV0MTA0LjUgLTE1Ni41dDM5IC0xOTFsLTEgLTJsMSAtNXEwIC0xNDEgLTc4IC0yNjJsMjc1IC0yNzRxMjMgLTI2IDIyLjUgLTQ0LjV0LTIyLjUgLTQyLjVsLTU5IC01OHEtMjYgLTIwIC00Ni41IC0yMHQtMzkuNSAyMGwtMjc1IDI3NHEtMTE5IC03NyAtMjYxIC03N2wtNSAxbC0yIC0xcS0xMDAgMCAtMTkxIDM5dC0xNTYuNSAxMDQuNXQtMTA0LjUgMTU2LjV0LTM5IDE5MSB0MzkgMTkxdDEwNC41IDE1Ni41dDE1Ni41IDEwNC41dDE5MSAzOXpNNTAwIDEwMjJxLTg4IDAgLTE2MiAtNDN0LTExNyAtMTE3dC00MyAtMTYydDQzIC0xNjJ0MTE3IC0xMTd0MTYyIC00M3QxNjIgNDN0MTE3IDExN3Q0MyAxNjJ0LTQzIDE2MnQtMTE3IDExN3QtMTYyIDQzeiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwMDU7IiBkPSJNNjQ5IDk0OXE0OCA2OCAxMDkuNSAxMDR0MTIxLjUgMzguNXQxMTguNSAtMjB0MTAyLjUgLTY0dDcxIC0xMDAuNXQyNyAtMTIzcTAgLTU3IC0zMy41IC0xMTcuNXQtOTQgLTEyNC41dC0xMjYuNSAtMTI3LjV0LTE1MCAtMTUyLjV0LTE0NiAtMTc0cS02MiA4NSAtMTQ1LjUgMTc0dC0xNTAgMTUyLjV0LTEyNi41IDEyNy41dC05My41IDEyNC41dC0zMy41IDExNy41cTAgNjQgMjggMTIzdDczIDEwMC41dDEwNCA2NHQxMTkgMjAgdDEyMC41IC0zOC41dDEwNC41IC0xMDR6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTAwNjsiIGQ9Ik00MDcgODAwbDEzMSAzNTNxNyAxOSAxNy41IDE5dDE3LjUgLTE5bDEyOSAtMzUzaDQyMXEyMSAwIDI0IC04LjV0LTE0IC0yMC41bC0zNDIgLTI0OWwxMzAgLTQwMXE3IC0yMCAtMC41IC0yNS41dC0yNC41IDYuNWwtMzQzIDI0NmwtMzQyIC0yNDdxLTE3IC0xMiAtMjQuNSAtNi41dC0wLjUgMjUuNWwxMzAgNDAwbC0zNDcgMjUxcS0xNyAxMiAtMTQgMjAuNXQyMyA4LjVoNDI5eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwMDc7IiBkPSJNNDA3IDgwMGwxMzEgMzUzcTcgMTkgMTcuNSAxOXQxNy41IC0xOWwxMjkgLTM1M2g0MjFxMjEgMCAyNCAtOC41dC0xNCAtMjAuNWwtMzQyIC0yNDlsMTMwIC00MDFxNyAtMjAgLTAuNSAtMjUuNXQtMjQuNSA2LjVsLTM0MyAyNDZsLTM0MiAtMjQ3cS0xNyAtMTIgLTI0LjUgLTYuNXQtMC41IDI1LjVsMTMwIDQwMGwtMzQ3IDI1MXEtMTcgMTIgLTE0IDIwLjV0MjMgOC41aDQyOXpNNDc3IDcwMGgtMjQwbDE5NyAtMTQybC03NCAtMjI2IGwxOTMgMTM5bDE5NSAtMTQwbC03NCAyMjlsMTkyIDE0MGgtMjM0bC03OCAyMTF6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTAwODsiIGQ9Ik02MDAgMTIwMHExMjQgMCAyMTIgLTg4dDg4IC0yMTJ2LTI1MHEwIC00NiAtMzEgLTk4dC02OSAtNTJ2LTc1cTAgLTEwIDYgLTIxLjV0MTUgLTE3LjVsMzU4IC0yMzBxOSAtNSAxNSAtMTYuNXQ2IC0yMS41di05M3EwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTExNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXY5M3EwIDEwIDYgMjEuNXQxNSAxNi41bDM1OCAyMzBxOSA2IDE1IDE3LjV0NiAyMS41djc1cS0zOCAwIC02OSA1MiB0LTMxIDk4djI1MHEwIDEyNCA4OCAyMTJ0MjEyIDg4eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwMDk7IiBkPSJNMjUgMTEwMGgxMTUwcTEwIDAgMTcuNSAtNy41dDcuNSAtMTcuNXYtMTA1MHEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTExNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXYxMDUwcTAgMTAgNy41IDE3LjV0MTcuNSA3LjV6TTEwMCAxMDAwdi0xMDBoMTAwdjEwMGgtMTAwek04NzUgMTAwMGgtNTUwcS0xMCAwIC0xNy41IC03LjV0LTcuNSAtMTcuNXYtMzUwcTAgLTEwIDcuNSAtMTcuNXQxNy41IC03LjVoNTUwIHExMCAwIDE3LjUgNy41dDcuNSAxNy41djM1MHEwIDEwIC03LjUgMTcuNXQtMTcuNSA3LjV6TTEwMDAgMTAwMHYtMTAwaDEwMHYxMDBoLTEwMHpNMTAwIDgwMHYtMTAwaDEwMHYxMDBoLTEwMHpNMTAwMCA4MDB2LTEwMGgxMDB2MTAwaC0xMDB6TTEwMCA2MDB2LTEwMGgxMDB2MTAwaC0xMDB6TTEwMDAgNjAwdi0xMDBoMTAwdjEwMGgtMTAwek04NzUgNTAwaC01NTBxLTEwIDAgLTE3LjUgLTcuNXQtNy41IC0xNy41di0zNTBxMCAtMTAgNy41IC0xNy41IHQxNy41IC03LjVoNTUwcTEwIDAgMTcuNSA3LjV0Ny41IDE3LjV2MzUwcTAgMTAgLTcuNSAxNy41dC0xNy41IDcuNXpNMTAwIDQwMHYtMTAwaDEwMHYxMDBoLTEwMHpNMTAwMCA0MDB2LTEwMGgxMDB2MTAwaC0xMDB6TTEwMCAyMDB2LTEwMGgxMDB2MTAwaC0xMDB6TTEwMDAgMjAwdi0xMDBoMTAwdjEwMGgtMTAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwMTA7IiBkPSJNNTAgMTEwMGg0MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTQwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNDAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXY0MDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek02NTAgMTEwMGg0MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTQwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNDAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXY0MDAgcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNNTAgNTAwaDQwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNDAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC00MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djQwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTY1MCA1MDBoNDAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di00MDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTQwMCBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djQwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTAxMTsiIGQ9Ik01MCAxMTAwaDIwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0yMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djIwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTQ1MCAxMTAwaDIwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0yMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djIwMCBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek04NTAgMTEwMGgyMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTIwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMjAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYyMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek01MCA3MDBoMjAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0yMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTIwMCBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djIwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTQ1MCA3MDBoMjAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0yMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTIwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MjAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNODUwIDcwMGgyMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTIwMCBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTIwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MjAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNNTAgMzAwaDIwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0yMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djIwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTQ1MCAzMDBoMjAwIHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0yMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djIwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTg1MCAzMDBoMjAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0yMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTIwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MjAwcTAgMjEgMTQuNSAzNS41IHQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTAxMjsiIGQ9Ik01MCAxMTAwaDIwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0yMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djIwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTQ1MCAxMTAwaDcwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC03MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djIwMCBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek01MCA3MDBoMjAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0yMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTIwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MjAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNNDUwIDcwMGg3MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTIwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNzAwIHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MjAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNNTAgMzAwaDIwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0yMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djIwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTQ1MCAzMDBoNzAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0yMDAgcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC03MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djIwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTAxMzsiIGQ9Ik00NjUgNDc3bDU3MSA1NzFxOCA4IDE4IDh0MTcgLThsMTc3IC0xNzdxOCAtNyA4IC0xN3QtOCAtMThsLTc4MyAtNzg0cS03IC04IC0xNy41IC04dC0xNy41IDhsLTM4NCAzODRxLTggOCAtOCAxOHQ4IDE3bDE3NyAxNzdxNyA4IDE3IDh0MTggLThsMTcxIC0xNzFxNyAtNyAxOCAtN3QxOCA3eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwMTQ7IiBkPSJNOTA0IDEwODNsMTc4IC0xNzlxOCAtOCA4IC0xOC41dC04IC0xNy41bC0yNjcgLTI2OGwyNjcgLTI2OHE4IC03IDggLTE3LjV0LTggLTE4LjVsLTE3OCAtMTc4cS04IC04IC0xOC41IC04dC0xNy41IDhsLTI2OCAyNjdsLTI2OCAtMjY3cS03IC04IC0xNy41IC04dC0xOC41IDhsLTE3OCAxNzhxLTggOCAtOCAxOC41dDggMTcuNWwyNjcgMjY4bC0yNjcgMjY4cS04IDcgLTggMTcuNXQ4IDE4LjVsMTc4IDE3OHE4IDggMTguNSA4dDE3LjUgLTggbDI2OCAtMjY3bDI2OCAyNjhxNyA3IDE3LjUgN3QxOC41IC03eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwMTU7IiBkPSJNNTA3IDExNzdxOTggMCAxODcuNSAtMzguNXQxNTQuNSAtMTAzLjV0MTAzLjUgLTE1NC41dDM4LjUgLTE4Ny41cTAgLTE0MSAtNzggLTI2MmwzMDAgLTI5OXE4IC04IDggLTE4LjV0LTggLTE4LjVsLTEwOSAtMTA4cS03IC04IC0xNy41IC04dC0xOC41IDhsLTMwMCAyOTlxLTExOSAtNzcgLTI2MSAtNzdxLTk4IDAgLTE4OCAzOC41dC0xNTQuNSAxMDN0LTEwMyAxNTQuNXQtMzguNSAxODh0MzguNSAxODcuNXQxMDMgMTU0LjUgdDE1NC41IDEwMy41dDE4OCAzOC41ek01MDYuNSAxMDIzcS04OS41IDAgLTE2NS41IC00NHQtMTIwIC0xMjAuNXQtNDQgLTE2NnQ0NCAtMTY1LjV0MTIwIC0xMjB0MTY1LjUgLTQ0dDE2NiA0NHQxMjAuNSAxMjB0NDQgMTY1LjV0LTQ0IDE2NnQtMTIwLjUgMTIwLjV0LTE2NiA0NHpNNDI1IDkwMGgxNTBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di03NWg3NXExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTE1MHEwIC0xMCAtNy41IC0xNy41IHQtMTcuNSAtNy41aC03NXYtNzVxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC0xNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXY3NWgtNzVxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXYxNTBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNWg3NXY3NXEwIDEwIDcuNSAxNy41dDE3LjUgNy41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwMTY7IiBkPSJNNTA3IDExNzdxOTggMCAxODcuNSAtMzguNXQxNTQuNSAtMTAzLjV0MTAzLjUgLTE1NC41dDM4LjUgLTE4Ny41cTAgLTE0MSAtNzggLTI2MmwzMDAgLTI5OXE4IC04IDggLTE4LjV0LTggLTE4LjVsLTEwOSAtMTA4cS03IC04IC0xNy41IC04dC0xOC41IDhsLTMwMCAyOTlxLTExOSAtNzcgLTI2MSAtNzdxLTk4IDAgLTE4OCAzOC41dC0xNTQuNSAxMDN0LTEwMyAxNTQuNXQtMzguNSAxODh0MzguNSAxODcuNXQxMDMgMTU0LjUgdDE1NC41IDEwMy41dDE4OCAzOC41ek01MDYuNSAxMDIzcS04OS41IDAgLTE2NS41IC00NHQtMTIwIC0xMjAuNXQtNDQgLTE2NnQ0NCAtMTY1LjV0MTIwIC0xMjB0MTY1LjUgLTQ0dDE2NiA0NHQxMjAuNSAxMjB0NDQgMTY1LjV0LTQ0IDE2NnQtMTIwLjUgMTIwLjV0LTE2NiA0NHpNMzI1IDgwMGgzNTBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di0xNTBxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC0zNTBxLTEwIDAgLTE3LjUgNy41IHQtNy41IDE3LjV2MTUwcTAgMTAgNy41IDE3LjV0MTcuNSA3LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTAxNzsiIGQ9Ik01NTAgMTIwMGgxMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTQwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMTAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXY0MDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek04MDAgOTc1djE2NnExNjcgLTYyIDI3MiAtMjA5LjV0MTA1IC0zMzEuNXEwIC0xMTcgLTQ1LjUgLTIyNHQtMTIzIC0xODQuNXQtMTg0LjUgLTEyM3QtMjI0IC00NS41dC0yMjQgNDUuNSB0LTE4NC41IDEyM3QtMTIzIDE4NC41dC00NS41IDIyNHEwIDE4NCAxMDUgMzMxLjV0MjcyIDIwOS41di0xNjZxLTEwMyAtNTUgLTE2NSAtMTU1dC02MiAtMjIwcTAgLTExNiA1NyAtMjE0LjV0MTU1LjUgLTE1NS41dDIxNC41IC01N3QyMTQuNSA1N3QxNTUuNSAxNTUuNXQ1NyAyMTQuNXEwIDEyMCAtNjIgMjIwdC0xNjUgMTU1eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwMTg7IiBkPSJNMTAyNSAxMjAwaDE1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTExNTBxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC0xNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXYxMTUwcTAgMTAgNy41IDE3LjV0MTcuNSA3LjV6TTcyNSA4MDBoMTUwcTEwIDAgMTcuNSAtNy41dDcuNSAtMTcuNXYtNzUwcTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtMTUwcS0xMCAwIC0xNy41IDcuNXQtNy41IDE3LjV2NzUwIHEwIDEwIDcuNSAxNy41dDE3LjUgNy41ek00MjUgNTAwaDE1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTQ1MHEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTE1MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djQ1MHEwIDEwIDcuNSAxNy41dDE3LjUgNy41ek0xMjUgMzAwaDE1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTI1MHEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTE1MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41IHYyNTBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDE5OyIgZD0iTTYwMCAxMTc0cTMzIDAgNzQgLTVsMzggLTE1Mmw1IC0xcTQ5IC0xNCA5NCAtMzlsNSAtMmwxMzQgODBxNjEgLTQ4IDEwNCAtMTA1bC04MCAtMTM0bDMgLTVxMjUgLTQ0IDM5IC05M2wxIC02bDE1MiAtMzhxNSAtNDMgNSAtNzNxMCAtMzQgLTUgLTc0bC0xNTIgLTM4bC0xIC02cS0xNSAtNDkgLTM5IC05M2wtMyAtNWw4MCAtMTM0cS00OCAtNjEgLTEwNCAtMTA1bC0xMzQgODFsLTUgLTNxLTQ0IC0yNSAtOTQgLTM5bC01IC0ybC0zOCAtMTUxIHEtNDMgLTUgLTc0IC01cS0zMyAwIC03NCA1bC0zOCAxNTFsLTUgMnEtNDkgMTQgLTk0IDM5bC01IDNsLTEzNCAtODFxLTYwIDQ4IC0xMDQgMTA1bDgwIDEzNGwtMyA1cS0yNSA0NSAtMzggOTNsLTIgNmwtMTUxIDM4cS02IDQyIC02IDc0cTAgMzMgNiA3M2wxNTEgMzhsMiA2cTEzIDQ4IDM4IDkzbDMgNWwtODAgMTM0cTQ3IDYxIDEwNSAxMDVsMTMzIC04MGw1IDJxNDUgMjUgOTQgMzlsNSAxbDM4IDE1MnE0MyA1IDc0IDV6TTYwMCA4MTUgcS04OSAwIC0xNTIgLTYzdC02MyAtMTUxLjV0NjMgLTE1MS41dDE1MiAtNjN0MTUyIDYzdDYzIDE1MS41dC02MyAxNTEuNXQtMTUyIDYzeiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwMjA7IiBkPSJNNTAwIDEzMDBoMzAwcTQxIDAgNzAuNSAtMjkuNXQyOS41IC03MC41di0xMDBoMjc1cTEwIDAgMTcuNSAtNy41dDcuNSAtMTcuNXYtNzVoLTExMDB2NzVxMCAxMCA3LjUgMTcuNXQxNy41IDcuNWgyNzV2MTAwcTAgNDEgMjkuNSA3MC41dDcwLjUgMjkuNXpNNTAwIDEyMDB2LTEwMGgzMDB2MTAwaC0zMDB6TTExMDAgOTAwdi04MDBxMCAtNDEgLTI5LjUgLTcwLjV0LTcwLjUgLTI5LjVoLTcwMHEtNDEgMCAtNzAuNSAyOS41dC0yOS41IDcwLjUgdjgwMGg5MDB6TTMwMCA4MDB2LTcwMGgxMDB2NzAwaC0xMDB6TTUwMCA4MDB2LTcwMGgxMDB2NzAwaC0xMDB6TTcwMCA4MDB2LTcwMGgxMDB2NzAwaC0xMDB6TTkwMCA4MDB2LTcwMGgxMDB2NzAwaC0xMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTAyMTsiIGQ9Ik0xOCA2MThsNjIwIDYwOHE4IDcgMTguNSA3dDE3LjUgLTdsNjA4IC02MDhxOCAtOCA1LjUgLTEzdC0xMi41IC01aC0xNzV2LTU3NXEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTI1MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djM3NWgtMzAwdi0zNzVxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC0yNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXY1NzVoLTE3NXEtMTAgMCAtMTIuNSA1dDUuNSAxM3oiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDIyOyIgZD0iTTYwMCAxMjAwdi00MDBxMCAtNDEgMjkuNSAtNzAuNXQ3MC41IC0yOS41aDMwMHYtNjUwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC04MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djExMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDQ1MHpNMTAwMCA4MDBoLTI1MHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MjUweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwMjM7IiBkPSJNNjAwIDExNzdxMTE3IDAgMjI0IC00NS41dDE4NC41IC0xMjN0MTIzIC0xODQuNXQ0NS41IC0yMjR0LTQ1LjUgLTIyNHQtMTIzIC0xODQuNXQtMTg0LjUgLTEyM3QtMjI0IC00NS41dC0yMjQgNDUuNXQtMTg0LjUgMTIzdC0xMjMgMTg0LjV0LTQ1LjUgMjI0dDQ1LjUgMjI0dDEyMyAxODQuNXQxODQuNSAxMjN0MjI0IDQ1LjV6TTYwMCAxMDI3cS0xMTYgMCAtMjE0LjUgLTU3dC0xNTUuNSAtMTU1LjV0LTU3IC0yMTQuNXQ1NyAtMjE0LjUgdDE1NS41IC0xNTUuNXQyMTQuNSAtNTd0MjE0LjUgNTd0MTU1LjUgMTU1LjV0NTcgMjE0LjV0LTU3IDIxNC41dC0xNTUuNSAxNTUuNXQtMjE0LjUgNTd6TTUyNSA5MDBoNTBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di0yNzVoMTc1cTEwIDAgMTcuNSAtNy41dDcuNSAtMTcuNXYtNTBxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC0yNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXYzNTBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDI0OyIgZD0iTTEzMDAgMGgtNTM4bC00MSA0MDBoLTI0MmwtNDEgLTQwMGgtNTM4bDQzMSAxMjAwaDIwOWwtMjEgLTMwMGgxNjJsLTIwIDMwMGgyMDh6TTUxNSA4MDBsLTI3IC0zMDBoMjI0bC0yNyAzMDBoLTE3MHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDI1OyIgZD0iTTU1MCAxMjAwaDIwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNDUwaDE5MXEyMCAwIDI1LjUgLTExLjV0LTcuNSAtMjcuNWwtMzI3IC00MDBxLTEzIC0xNiAtMzIgLTE2dC0zMiAxNmwtMzI3IDQwMHEtMTMgMTYgLTcuNSAyNy41dDI1LjUgMTEuNWgxOTF2NDUwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNMTEyNSA0MDBoNTBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di0zNTBxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41IGgtMTA1MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djM1MHEwIDEwIDcuNSAxNy41dDE3LjUgNy41aDUwcTEwIDAgMTcuNSAtNy41dDcuNSAtMTcuNXYtMTc1aDkwMHYxNzVxMCAxMCA3LjUgMTcuNXQxNy41IDcuNXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDI2OyIgZD0iTTYwMCAxMTc3cTExNyAwIDIyNCAtNDUuNXQxODQuNSAtMTIzdDEyMyAtMTg0LjV0NDUuNSAtMjI0dC00NS41IC0yMjR0LTEyMyAtMTg0LjV0LTE4NC41IC0xMjN0LTIyNCAtNDUuNXQtMjI0IDQ1LjV0LTE4NC41IDEyM3QtMTIzIDE4NC41dC00NS41IDIyNHQ0NS41IDIyNHQxMjMgMTg0LjV0MTg0LjUgMTIzdDIyNCA0NS41ek02MDAgMTAyN3EtMTE2IDAgLTIxNC41IC01N3QtMTU1LjUgLTE1NS41dC01NyAtMjE0LjV0NTcgLTIxNC41IHQxNTUuNSAtMTU1LjV0MjE0LjUgLTU3dDIxNC41IDU3dDE1NS41IDE1NS41dDU3IDIxNC41dC01NyAyMTQuNXQtMTU1LjUgMTU1LjV0LTIxNC41IDU3ek01MjUgOTAwaDE1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTI3NWgxMzdxMjEgMCAyNiAtMTEuNXQtOCAtMjcuNWwtMjIzIC0yNzVxLTEzIC0xNiAtMzIgLTE2dC0zMiAxNmwtMjIzIDI3NXEtMTMgMTYgLTggMjcuNXQyNiAxMS41aDEzN3YyNzVxMCAxMCA3LjUgMTcuNXQxNy41IDcuNXogIiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTAyNzsiIGQ9Ik02MDAgMTE3N3ExMTcgMCAyMjQgLTQ1LjV0MTg0LjUgLTEyM3QxMjMgLTE4NC41dDQ1LjUgLTIyNHQtNDUuNSAtMjI0dC0xMjMgLTE4NC41dC0xODQuNSAtMTIzdC0yMjQgLTQ1LjV0LTIyNCA0NS41dC0xODQuNSAxMjN0LTEyMyAxODQuNXQtNDUuNSAyMjR0NDUuNSAyMjR0MTIzIDE4NC41dDE4NC41IDEyM3QyMjQgNDUuNXpNNjAwIDEwMjdxLTExNiAwIC0yMTQuNSAtNTd0LTE1NS41IC0xNTUuNXQtNTcgLTIxNC41dDU3IC0yMTQuNSB0MTU1LjUgLTE1NS41dDIxNC41IC01N3QyMTQuNSA1N3QxNTUuNSAxNTUuNXQ1NyAyMTQuNXQtNTcgMjE0LjV0LTE1NS41IDE1NS41dC0yMTQuNSA1N3pNNjMyIDkxNGwyMjMgLTI3NXExMyAtMTYgOCAtMjcuNXQtMjYgLTExLjVoLTEzN3YtMjc1cTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtMTUwcS0xMCAwIC0xNy41IDcuNXQtNy41IDE3LjV2Mjc1aC0xMzdxLTIxIDAgLTI2IDExLjV0OCAyNy41bDIyMyAyNzVxMTMgMTYgMzIgMTYgdDMyIC0xNnoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDI4OyIgZD0iTTIyNSAxMjAwaDc1MHExMCAwIDE5LjUgLTd0MTIuNSAtMTdsMTg2IC02NTJxNyAtMjQgNyAtNDl2LTQyNXEwIC0xMiAtNCAtMjd0LTkgLTE3cS0xMiAtNiAtMzcgLTZoLTExMDBxLTEyIDAgLTI3IDR0LTE3IDhxLTYgMTMgLTYgMzhsMSA0MjVxMCAyNSA3IDQ5bDE4NSA2NTJxMyAxMCAxMi41IDE3dDE5LjUgN3pNODc4IDEwMDBoLTU1NnEtMTAgMCAtMTkgLTd0LTExIC0xOGwtODcgLTQ1MHEtMiAtMTEgNCAtMTh0MTYgLTdoMTUwIHExMCAwIDE5LjUgLTd0MTEuNSAtMTdsMzggLTE1MnEyIC0xMCAxMS41IC0xN3QxOS41IC03aDI1MHExMCAwIDE5LjUgN3QxMS41IDE3bDM4IDE1MnEyIDEwIDExLjUgMTd0MTkuNSA3aDE1MHExMCAwIDE2IDd0NCAxOGwtODcgNDUwcS0yIDExIC0xMSAxOHQtMTkgN3oiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDI5OyIgZD0iTTYwMCAxMTc3cTExNyAwIDIyNCAtNDUuNXQxODQuNSAtMTIzdDEyMyAtMTg0LjV0NDUuNSAtMjI0dC00NS41IC0yMjR0LTEyMyAtMTg0LjV0LTE4NC41IC0xMjN0LTIyNCAtNDUuNXQtMjI0IDQ1LjV0LTE4NC41IDEyM3QtMTIzIDE4NC41dC00NS41IDIyNHQ0NS41IDIyNHQxMjMgMTg0LjV0MTg0LjUgMTIzdDIyNCA0NS41ek02MDAgMTAyN3EtMTE2IDAgLTIxNC41IC01N3QtMTU1LjUgLTE1NS41dC01NyAtMjE0LjV0NTcgLTIxNC41IHQxNTUuNSAtMTU1LjV0MjE0LjUgLTU3dDIxNC41IDU3dDE1NS41IDE1NS41dDU3IDIxNC41dC01NyAyMTQuNXQtMTU1LjUgMTU1LjV0LTIxNC41IDU3ek01NDAgODIwbDI1MyAtMTkwcTE3IC0xMiAxNyAtMzB0LTE3IC0zMGwtMjUzIC0xOTBxLTE2IC0xMiAtMjggLTYuNXQtMTIgMjYuNXY0MDBxMCAyMSAxMiAyNi41dDI4IC02LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTAzMDsiIGQ9Ik05NDcgMTA2MGwxMzUgMTM1cTcgNyAxMi41IDV0NS41IC0xM3YtMzYycTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtMzYycS0xMSAwIC0xMyA1LjV0NSAxMi41bDEzMyAxMzNxLTEwOSA3NiAtMjM4IDc2cS0xMTYgMCAtMjE0LjUgLTU3dC0xNTUuNSAtMTU1LjV0LTU3IC0yMTQuNXQ1NyAtMjE0LjV0MTU1LjUgLTE1NS41dDIxNC41IC01N3QyMTQuNSA1N3QxNTUuNSAxNTUuNXQ1NyAyMTQuNWgxNTBxMCAtMTE3IC00NS41IC0yMjQgdC0xMjMgLTE4NC41dC0xODQuNSAtMTIzdC0yMjQgLTQ1LjV0LTIyNCA0NS41dC0xODQuNSAxMjN0LTEyMyAxODQuNXQtNDUuNSAyMjR0NDUuNSAyMjR0MTIzIDE4NC41dDE4NC41IDEyM3QyMjQgNDUuNXExOTIgMCAzNDcgLTExN3oiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDMxOyIgZD0iTTk0NyAxMDYwbDEzNSAxMzVxNyA3IDEyLjUgNXQ1LjUgLTEzdi0zNjFxMCAtMTEgLTcuNSAtMTguNXQtMTguNSAtNy41aC0zNjFxLTExIDAgLTEzIDUuNXQ1IDEyLjVsMTM0IDEzNHEtMTEwIDc1IC0yMzkgNzVxLTExNiAwIC0yMTQuNSAtNTd0LTE1NS41IC0xNTUuNXQtNTcgLTIxNC41aC0xNTBxMCAxMTcgNDUuNSAyMjR0MTIzIDE4NC41dDE4NC41IDEyM3QyMjQgNDUuNXExOTIgMCAzNDcgLTExN3pNMTAyNyA2MDBoMTUwIHEwIC0xMTcgLTQ1LjUgLTIyNHQtMTIzIC0xODQuNXQtMTg0LjUgLTEyM3QtMjI0IC00NS41cS0xOTIgMCAtMzQ4IDExOGwtMTM0IC0xMzRxLTcgLTggLTEyLjUgLTUuNXQtNS41IDEyLjV2MzYwcTAgMTEgNy41IDE4LjV0MTguNSA3LjVoMzYwcTEwIDAgMTIuNSAtNS41dC01LjUgLTEyLjVsLTEzMyAtMTMzcTExMCAtNzYgMjQwIC03NnExMTYgMCAyMTQuNSA1N3QxNTUuNSAxNTUuNXQ1NyAyMTQuNXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDMyOyIgZD0iTTEyNSAxMjAwaDEwNTBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di0xMTUwcTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtMTA1MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djExNTBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNXpNMTA3NSAxMDAwaC04NTBxLTEwIDAgLTE3LjUgLTcuNXQtNy41IC0xNy41di04NTBxMCAtMTAgNy41IC0xNy41dDE3LjUgLTcuNWg4NTBxMTAgMCAxNy41IDcuNXQ3LjUgMTcuNXY4NTAgcTAgMTAgLTcuNSAxNy41dC0xNy41IDcuNXpNMzI1IDkwMGg1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTUwcTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXY1MHEwIDEwIDcuNSAxNy41dDE3LjUgNy41ek01MjUgOTAwaDQ1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTUwcTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtNDUwcS0xMCAwIC0xNy41IDcuNXQtNy41IDE3LjV2NTAgcTAgMTAgNy41IDE3LjV0MTcuNSA3LjV6TTMyNSA3MDBoNTBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di01MHEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTUwcS0xMCAwIC0xNy41IDcuNXQtNy41IDE3LjV2NTBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNXpNNTI1IDcwMGg0NTBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di01MHEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTQ1MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djUwIHEwIDEwIDcuNSAxNy41dDE3LjUgNy41ek0zMjUgNTAwaDUwcTEwIDAgMTcuNSAtNy41dDcuNSAtMTcuNXYtNTBxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC01MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djUwcTAgMTAgNy41IDE3LjV0MTcuNSA3LjV6TTUyNSA1MDBoNDUwcTEwIDAgMTcuNSAtNy41dDcuNSAtMTcuNXYtNTBxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC00NTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXY1MCBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNXpNMzI1IDMwMGg1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTUwcTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXY1MHEwIDEwIDcuNSAxNy41dDE3LjUgNy41ek01MjUgMzAwaDQ1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTUwcTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtNDUwcS0xMCAwIC0xNy41IDcuNXQtNy41IDE3LjV2NTAgcTAgMTAgNy41IDE3LjV0MTcuNSA3LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTAzMzsiIGQ9Ik05MDAgODAwdjIwMHEwIDgzIC01OC41IDE0MS41dC0xNDEuNSA1OC41aC0zMDBxLTgyIDAgLTE0MSAtNTl0LTU5IC0xNDF2LTIwMGgtMTAwcS00MSAwIC03MC41IC0yOS41dC0yOS41IC03MC41di02MDBxMCAtNDEgMjkuNSAtNzAuNXQ3MC41IC0yOS41aDkwMHE0MSAwIDcwLjUgMjkuNXQyOS41IDcwLjV2NjAwcTAgNDEgLTI5LjUgNzAuNXQtNzAuNSAyOS41aC0xMDB6TTQwMCA4MDB2MTUwcTAgMjEgMTUgMzUuNXQzNSAxNC41aDIwMCBxMjAgMCAzNSAtMTQuNXQxNSAtMzUuNXYtMTUwaC0zMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTAzNDsiIGQ9Ik0xMjUgMTEwMGg1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTEwNzVoLTEwMHYxMDc1cTAgMTAgNy41IDE3LjV0MTcuNSA3LjV6TTEwNzUgMTA1MnE0IDAgOSAtMnExNiAtNiAxNiAtMjN2LTQyMXEwIC02IC0zIC0xMnEtMzMgLTU5IC02Ni41IC05OXQtNjUuNSAtNTh0LTU2LjUgLTI0LjV0LTUyLjUgLTYuNXEtMjYgMCAtNTcuNSA2LjV0LTUyLjUgMTMuNXQtNjAgMjFxLTQxIDE1IC02MyAyMi41dC01Ny41IDE1dC02NS41IDcuNSBxLTg1IDAgLTE2MCAtNTdxLTcgLTUgLTE1IC01cS02IDAgLTExIDNxLTE0IDcgLTE0IDIydjQzOHEyMiA1NSA4MiA5OC41dDExOSA0Ni41cTIzIDIgNDMgMC41dDQzIC03dDMyLjUgLTguNXQzOCAtMTN0MzIuNSAtMTFxNDEgLTE0IDYzLjUgLTIxdDU3IC0xNHQ2My41IC03cTEwMyAwIDE4MyA4N3E3IDggMTggOHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDM1OyIgZD0iTTYwMCAxMTc1cTExNiAwIDIyNyAtNDkuNXQxOTIuNSAtMTMxdDEzMSAtMTkyLjV0NDkuNSAtMjI3di0zMDBxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC01MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djMwMHEwIDEyNyAtNzAuNSAyMzEuNXQtMTg0LjUgMTYxLjV0LTI0NSA1N3QtMjQ1IC01N3QtMTg0LjUgLTE2MS41dC03MC41IC0yMzEuNXYtMzAwcTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtNTAgcS0xMCAwIC0xNy41IDcuNXQtNy41IDE3LjV2MzAwcTAgMTE2IDQ5LjUgMjI3dDEzMSAxOTIuNXQxOTIuNSAxMzF0MjI3IDQ5LjV6TTIyMCA1MDBoMTYwcTggMCAxNCAtNnQ2IC0xNHYtNDYwcTAgLTggLTYgLTE0dC0xNCAtNmgtMTYwcS04IDAgLTE0IDZ0LTYgMTR2NDYwcTAgOCA2IDE0dDE0IDZ6TTgyMCA1MDBoMTYwcTggMCAxNCAtNnQ2IC0xNHYtNDYwcTAgLTggLTYgLTE0dC0xNCAtNmgtMTYwcS04IDAgLTE0IDZ0LTYgMTR2NDYwIHEwIDggNiAxNHQxNCA2eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwMzY7IiBkPSJNMzIxIDgxNGwyNTggMTcycTkgNiAxNSAyLjV0NiAtMTMuNXYtNzUwcTAgLTEwIC02IC0xMy41dC0xNSAyLjVsLTI1OCAxNzJxLTIxIDE0IC00NiAxNGgtMjUwcS0xMCAwIC0xNy41IDcuNXQtNy41IDE3LjV2MzUwcTAgMTAgNy41IDE3LjV0MTcuNSA3LjVoMjUwcTI1IDAgNDYgMTR6TTkwMCA2NjhsMTIwIDEyMHE3IDcgMTcgN3QxNyAtN2wzNCAtMzRxNyAtNyA3IC0xN3QtNyAtMTdsLTEyMCAtMTIwbDEyMCAtMTIwcTcgLTcgNyAtMTcgdC03IC0xN2wtMzQgLTM0cS03IC03IC0xNyAtN3QtMTcgN2wtMTIwIDExOWwtMTIwIC0xMTlxLTcgLTcgLTE3IC03dC0xNyA3bC0zNCAzNHEtNyA3IC03IDE3dDcgMTdsMTE5IDEyMGwtMTE5IDEyMHEtNyA3IC03IDE3dDcgMTdsMzQgMzRxNyA4IDE3IDh0MTcgLTh6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTAzNzsiIGQ9Ik0zMjEgODE0bDI1OCAxNzJxOSA2IDE1IDIuNXQ2IC0xMy41di03NTBxMCAtMTAgLTYgLTEzLjV0LTE1IDIuNWwtMjU4IDE3MnEtMjEgMTQgLTQ2IDE0aC0yNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXYzNTBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNWgyNTBxMjUgMCA0NiAxNHpNNzY2IDkwMGg0cTEwIC0xIDE2IC0xMHE5NiAtMTI5IDk2IC0yOTBxMCAtMTU0IC05MCAtMjgxcS02IC05IC0xNyAtMTBsLTMgLTFxLTkgMCAtMTYgNiBsLTI5IDIzcS03IDcgLTguNSAxNi41dDQuNSAxNy41cTcyIDEwMyA3MiAyMjlxMCAxMzIgLTc4IDIzOHEtNiA4IC00LjUgMTh0OS41IDE3bDI5IDIycTcgNSAxNSA1eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwMzg7IiBkPSJNOTY3IDEwMDRoM3ExMSAtMSAxNyAtMTBxMTM1IC0xNzkgMTM1IC0zOTZxMCAtMTA1IC0zNCAtMjA2LjV0LTk4IC0xODUuNXEtNyAtOSAtMTcgLTEwaC0zcS05IDAgLTE2IDZsLTQyIDM0cS04IDYgLTkgMTZ0NSAxOHExMTEgMTUwIDExMSAzMjhxMCA5MCAtMjkuNSAxNzZ0LTg0LjUgMTU3cS02IDkgLTUgMTl0MTAgMTZsNDIgMzNxNyA1IDE1IDV6TTMyMSA4MTRsMjU4IDE3MnE5IDYgMTUgMi41dDYgLTEzLjV2LTc1MHEwIC0xMCAtNiAtMTMuNSB0LTE1IDIuNWwtMjU4IDE3MnEtMjEgMTQgLTQ2IDE0aC0yNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXYzNTBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNWgyNTBxMjUgMCA0NiAxNHpNNzY2IDkwMGg0cTEwIC0xIDE2IC0xMHE5NiAtMTI5IDk2IC0yOTBxMCAtMTU0IC05MCAtMjgxcS02IC05IC0xNyAtMTBsLTMgLTFxLTkgMCAtMTYgNmwtMjkgMjNxLTcgNyAtOC41IDE2LjV0NC41IDE3LjVxNzIgMTAzIDcyIDIyOXEwIDEzMiAtNzggMjM4IHEtNiA4IC00LjUgMTguNXQ5LjUgMTYuNWwyOSAyMnE3IDUgMTUgNXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDM5OyIgZD0iTTUwMCA5MDBoMTAwdi0xMDBoLTEwMHYtMTAwaC00MDB2LTEwMGgtMTAwdjYwMGg1MDB2LTMwMHpNMTIwMCA3MDBoLTIwMHYtMTAwaDIwMHYtMjAwaC0zMDB2MzAwaC0yMDB2MzAwaC0xMDB2MjAwaDYwMHYtNTAwek0xMDAgMTEwMHYtMzAwaDMwMHYzMDBoLTMwMHpNODAwIDExMDB2LTMwMGgzMDB2MzAwaC0zMDB6TTMwMCA5MDBoLTEwMHYxMDBoMTAwdi0xMDB6TTEwMDAgOTAwaC0xMDB2MTAwaDEwMHYtMTAwek0zMDAgNTAwaDIwMHYtNTAwIGgtNTAwdjUwMGgyMDB2MTAwaDEwMHYtMTAwek04MDAgMzAwaDIwMHYtMTAwaC0xMDB2LTEwMGgtMjAwdjEwMGgtMTAwdjEwMGgxMDB2MjAwaC0yMDB2MTAwaDMwMHYtMzAwek0xMDAgNDAwdi0zMDBoMzAwdjMwMGgtMzAwek0zMDAgMjAwaC0xMDB2MTAwaDEwMHYtMTAwek0xMjAwIDIwMGgtMTAwdjEwMGgxMDB2LTEwMHpNNzAwIDBoLTEwMHYxMDBoMTAwdi0xMDB6TTEyMDAgMGgtMzAwdjEwMGgzMDB2LTEwMHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDQwOyIgZD0iTTEwMCAyMDBoLTEwMHYxMDAwaDEwMHYtMTAwMHpNMzAwIDIwMGgtMTAwdjEwMDBoMTAwdi0xMDAwek03MDAgMjAwaC0yMDB2MTAwMGgyMDB2LTEwMDB6TTkwMCAyMDBoLTEwMHYxMDAwaDEwMHYtMTAwMHpNMTIwMCAyMDBoLTIwMHYxMDAwaDIwMHYtMTAwMHpNNDAwIDBoLTMwMHYxMDBoMzAwdi0xMDB6TTYwMCAwaC0xMDB2OTFoMTAwdi05MXpNODAwIDBoLTEwMHY5MWgxMDB2LTkxek0xMTAwIDBoLTIwMHY5MWgyMDB2LTkxeiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwNDE7IiBkPSJNNTAwIDEyMDBsNjgyIC02ODJxOCAtOCA4IC0xOHQtOCAtMThsLTQ2NCAtNDY0cS04IC04IC0xOCAtOHQtMTggOGwtNjgyIDY4MmwxIDQ3NXEwIDEwIDcuNSAxNy41dDE3LjUgNy41aDQ3NHpNMzE5LjUgMTAyNC41cS0yOS41IDI5LjUgLTcxIDI5LjV0LTcxIC0yOS41dC0yOS41IC03MS41dDI5LjUgLTcxLjV0NzEgLTI5LjV0NzEgMjkuNXQyOS41IDcxLjV0LTI5LjUgNzEuNXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDQyOyIgZD0iTTUwMCAxMjAwbDY4MiAtNjgycTggLTggOCAtMTh0LTggLTE4bC00NjQgLTQ2NHEtOCAtOCAtMTggLTh0LTE4IDhsLTY4MiA2ODJsMSA0NzVxMCAxMCA3LjUgMTcuNXQxNy41IDcuNWg0NzR6TTgwMCAxMjAwbDY4MiAtNjgycTggLTggOCAtMTh0LTggLTE4bC00NjQgLTQ2NHEtOCAtOCAtMTggLTh0LTE4IDhsLTU2IDU2bDQyNCA0MjZsLTcwMCA3MDBoMTUwek0zMTkuNSAxMDI0LjVxLTI5LjUgMjkuNSAtNzEgMjkuNXQtNzEgLTI5LjUgdC0yOS41IC03MS41dDI5LjUgLTcxLjV0NzEgLTI5LjV0NzEgMjkuNXQyOS41IDcxLjV0LTI5LjUgNzEuNXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDQzOyIgZD0iTTMwMCAxMjAwaDgyNXE3NSAwIDc1IC03NXYtOTAwcTAgLTI1IC0xOCAtNDNsLTY0IC02NHEtOCAtOCAtMTMgLTUuNXQtNSAxMi41djk1MHEwIDEwIC03LjUgMTcuNXQtMTcuNSA3LjVoLTcwMHEtMjUgMCAtNDMgLTE4bC02NCAtNjRxLTggLTggLTUuNSAtMTN0MTIuNSAtNWg3MDBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di05NTBxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC04NTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXY5NzUgcTAgMjUgMTggNDNsMTM5IDEzOXExOCAxOCA0MyAxOHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDQ0OyIgZD0iTTI1MCAxMjAwaDgwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTE1MGwtNDUwIDQ0NGwtNDUwIC00NDV2MTE1MXEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA0NTsiIGQ9Ik04MjIgMTIwMGgtNDQ0cS0xMSAwIC0xOSAtNy41dC05IC0xNy41bC03OCAtMzAxcS03IC0yNCA3IC00NWw1NyAtMTA4cTYgLTkgMTcuNSAtMTV0MjEuNSAtNmg0NTBxMTAgMCAyMS41IDZ0MTcuNSAxNWw2MiAxMDhxMTQgMjEgNyA0NWwtODMgMzAxcS0xIDEwIC05IDE3LjV0LTE5IDcuNXpNMTE3NSA4MDBoLTE1MHEtMTAgMCAtMjEgLTYuNXQtMTUgLTE1LjVsLTc4IC0xNTZxLTQgLTkgLTE1IC0xNS41dC0yMSAtNi41aC01NTAgcS0xMCAwIC0yMSA2LjV0LTE1IDE1LjVsLTc4IDE1NnEtNCA5IC0xNSAxNS41dC0yMSA2LjVoLTE1MHEtMTAgMCAtMTcuNSAtNy41dC03LjUgLTE3LjV2LTY1MHEwIC0xMCA3LjUgLTE3LjV0MTcuNSAtNy41aDE1MHExMCAwIDE3LjUgNy41dDcuNSAxNy41djE1MHEwIDEwIDcuNSAxNy41dDE3LjUgNy41aDc1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTE1MHEwIC0xMCA3LjUgLTE3LjV0MTcuNSAtNy41aDE1MHExMCAwIDE3LjUgNy41IHQ3LjUgMTcuNXY2NTBxMCAxMCAtNy41IDE3LjV0LTE3LjUgNy41ek04NTAgMjAwaC01MDBxLTEwIDAgLTE5LjUgLTd0LTExLjUgLTE3bC0zOCAtMTUycS0yIC0xMCAzLjUgLTE3dDE1LjUgLTdoNjAwcTEwIDAgMTUuNSA3dDMuNSAxN2wtMzggMTUycS0yIDEwIC0xMS41IDE3dC0xOS41IDd6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA0NjsiIGQ9Ik01MDAgMTEwMGgyMDBxNTYgMCAxMDIuNSAtMjAuNXQ3Mi41IC01MHQ0NCAtNTl0MjUgLTUwLjVsNiAtMjBoMTUwcTQxIDAgNzAuNSAtMjkuNXQyOS41IC03MC41di02MDBxMCAtNDEgLTI5LjUgLTcwLjV0LTcwLjUgLTI5LjVoLTEwMDBxLTQxIDAgLTcwLjUgMjkuNXQtMjkuNSA3MC41djYwMHEwIDQxIDI5LjUgNzAuNXQ3MC41IDI5LjVoMTUwcTIgOCA2LjUgMjEuNXQyNCA0OHQ0NSA2MXQ3MiA0OHQxMDIuNSAyMS41ek05MDAgODAwdi0xMDAgaDEwMHYxMDBoLTEwMHpNNjAwIDczMHEtOTUgMCAtMTYyLjUgLTY3LjV0LTY3LjUgLTE2Mi41dDY3LjUgLTE2Mi41dDE2Mi41IC02Ny41dDE2Mi41IDY3LjV0NjcuNSAxNjIuNXQtNjcuNSAxNjIuNXQtMTYyLjUgNjcuNXpNNjAwIDYwM3E0MyAwIDczIC0zMHQzMCAtNzN0LTMwIC03M3QtNzMgLTMwdC03MyAzMHQtMzAgNzN0MzAgNzN0NzMgMzB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA0NzsiIGQ9Ik02ODEgMTE5OWwzODUgLTk5OHEyMCAtNTAgNjAgLTkycTE4IC0xOSAzNi41IC0yOS41dDI3LjUgLTExLjVsMTAgLTJ2LTY2aC00MTd2NjZxNTMgMCA3NSA0My41dDUgODguNWwtODIgMjIyaC0zOTFxLTU4IC0xNDUgLTkyIC0yMzRxLTExIC0zNCAtNi41IC01N3QyNS41IC0zN3Q0NiAtMjB0NTUgLTZ2LTY2aC0zNjV2NjZxNTYgMjQgODQgNTJxMTIgMTIgMjUgMzAuNXQyMCAzMS41bDcgMTNsMzk5IDEwMDZoOTN6TTQxNiA1MjFoMzQwIGwtMTYyIDQ1N3oiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDQ4OyIgZD0iTTc1MyA2NDFxNSAtMSAxNC41IC00LjV0MzYgLTE1LjV0NTAuNSAtMjYuNXQ1My41IC00MHQ1MC41IC01NC41dDM1LjUgLTcwdDE0LjUgLTg3cTAgLTY3IC0yNy41IC0xMjUuNXQtNzEuNSAtOTcuNXQtOTguNSAtNjYuNXQtMTA4LjUgLTQwLjV0LTEwMiAtMTNoLTUwMHY4OXE0MSA3IDcwLjUgMzIuNXQyOS41IDY1LjV2ODI3cTAgMjQgLTAuNSAzNHQtMy41IDI0dC04LjUgMTkuNXQtMTcgMTMuNXQtMjggMTIuNXQtNDIuNSAxMS41djcxIGw0NzEgLTFxNTcgMCAxMTUuNSAtMjAuNXQxMDggLTU3dDgwLjUgLTk0dDMxIC0xMjQuNXEwIC01MSAtMTUuNSAtOTYuNXQtMzggLTc0LjV0LTQ1IC01MC41dC0zOC41IC0zMC41ek00MDAgNzAwaDEzOXE3OCAwIDEzMC41IDQ4LjV0NTIuNSAxMjIuNXEwIDQxIC04LjUgNzAuNXQtMjkuNSA1NS41dC02Mi41IDM5LjV0LTEwMy41IDEzLjVoLTExOHYtMzUwek00MDAgMjAwaDIxNnE4MCAwIDEyMSA1MC41dDQxIDEzMC41cTAgOTAgLTYyLjUgMTU0LjUgdC0xNTYuNSA2NC41aC0xNTl2LTQwMHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDQ5OyIgZD0iTTg3NyAxMjAwbDIgLTU3cS04MyAtMTkgLTExNiAtNDUuNXQtNDAgLTY2LjVsLTEzMiAtODM5cS05IC00OSAxMyAtNjl0OTYgLTI2di05N2gtNTAwdjk3cTE4NiAxNiAyMDAgOThsMTczIDgzMnEzIDE3IDMgMzB0LTEuNSAyMi41dC05IDE3LjV0LTEzLjUgMTIuNXQtMjEuNSAxMHQtMjYgOC41dC0zMy41IDEwcS0xMyAzIC0xOSA1djU3aDQyNXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDUwOyIgZD0iTTEzMDAgOTAwaC01MHEwIDIxIC00IDM3dC05LjUgMjYuNXQtMTggMTcuNXQtMjIgMTF0LTI4LjUgNS41dC0zMSAydC0zNyAwLjVoLTIwMHYtODUwcTAgLTIyIDI1IC0zNC41dDUwIC0xMy41bDI1IC0ydi0xMDBoLTQwMHYxMDBxNCAwIDExIDAuNXQyNCAzdDMwIDd0MjQgMTV0MTEgMjQuNXY4NTBoLTIwMHEtMjUgMCAtMzcgLTAuNXQtMzEgLTJ0LTI4LjUgLTUuNXQtMjIgLTExdC0xOCAtMTcuNXQtOS41IC0yNi41dC00IC0zN2gtNTB2MzAwIGgxMDAwdi0zMDB6TTE3NSAxMDAwaC03NXYtODAwaDc1bC0xMjUgLTE2N2wtMTI1IDE2N2g3NXY4MDBoLTc1bDEyNSAxNjd6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA1MTsiIGQ9Ik0xMTAwIDkwMGgtNTBxMCAyMSAtNCAzN3QtOS41IDI2LjV0LTE4IDE3LjV0LTIyIDExdC0yOC41IDUuNXQtMzEgMnQtMzcgMC41aC0yMDB2LTY1MHEwIC0yMiAyNSAtMzQuNXQ1MCAtMTMuNWwyNSAtMnYtMTAwaC00MDB2MTAwcTQgMCAxMSAwLjV0MjQgM3QzMCA3dDI0IDE1dDExIDI0LjV2NjUwaC0yMDBxLTI1IDAgLTM3IC0wLjV0LTMxIC0ydC0yOC41IC01LjV0LTIyIC0xMXQtMTggLTE3LjV0LTkuNSAtMjYuNXQtNCAtMzdoLTUwdjMwMCBoMTAwMHYtMzAwek0xMTY3IDUwbC0xNjcgLTEyNXY3NWgtODAwdi03NWwtMTY3IDEyNWwxNjcgMTI1di03NWg4MDB2NzV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA1MjsiIGQ9Ik01MCAxMTAwaDYwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC02MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTUwIDgwMGgxMDAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTEwMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMCBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek01MCA1MDBoODAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTgwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNNTAgMjAwaDExMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMTEwMCBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA1MzsiIGQ9Ik0yNTAgMTEwMGg3MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNzAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek01MCA4MDBoMTEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMTAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxMDAgcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNMjUwIDUwMGg3MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNzAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek01MCAyMDBoMTEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMTAwIHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDU0OyIgZD0iTTUwMCA5NTB2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWg2MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNjAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXpNMTAwIDY1MHYxMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDEwMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMTAwMCBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41ek0zMDAgMzUwdjEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoODAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTgwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV6TTAgNTB2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWgxMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDAgcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMTAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDU1OyIgZD0iTTUwIDExMDBoMTEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMTAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek01MCA4MDBoMTEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMTAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxMDAgcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNNTAgNTAwaDExMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMTEwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNNTAgMjAwaDExMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMTEwMCBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA1NjsiIGQ9Ik01MCAxMTAwaDEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTM1MCAxMTAwaDgwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC04MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMCBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek01MCA4MDBoMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTEwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNMzUwIDgwMGg4MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtODAwIHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNNTAgNTAwaDEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTM1MCA1MDBoODAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDAgcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC04MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTUwIDIwMGgxMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMTAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek0zNTAgMjAwaDgwMCBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtODAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwNTc7IiBkPSJNNDAwIDBoLTEwMHYxMTAwaDEwMHYtMTEwMHpNNTUwIDExMDBoMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTEwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNNTUwIDgwMGg1MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNTAwIHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNMjY3IDU1MGwtMTY3IC0xMjV2NzVoLTIwMHYxMDBoMjAwdjc1ek01NTAgNTAwaDMwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0zMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTU1MCAyMDBoNjAwIHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC02MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA1ODsiIGQ9Ik01MCAxMTAwaDEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTkwMCAwaC0xMDB2MTEwMGgxMDB2LTExMDB6TTUwIDgwMGg1MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNTAwIHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNMTEwMCA2MDBoMjAwdi0xMDBoLTIwMHYtNzVsLTE2NyAxMjVsMTY3IDEyNXYtNzV6TTUwIDUwMGgzMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMzAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek01MCAyMDBoNjAwIHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC02MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA1OTsiIGQ9Ik03NSAxMDAwaDc1MHEzMSAwIDUzIC0yMnQyMiAtNTN2LTY1MHEwIC0zMSAtMjIgLTUzdC01MyAtMjJoLTc1MHEtMzEgMCAtNTMgMjJ0LTIyIDUzdjY1MHEwIDMxIDIyIDUzdDUzIDIyek0xMjAwIDMwMGwtMzAwIDMwMGwzMDAgMzAwdi02MDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA2MDsiIGQ9Ik00NCAxMTAwaDExMTJxMTggMCAzMSAtMTN0MTMgLTMxdi0xMDEycTAgLTE4IC0xMyAtMzF0LTMxIC0xM2gtMTExMnEtMTggMCAtMzEgMTN0LTEzIDMxdjEwMTJxMCAxOCAxMyAzMXQzMSAxM3pNMTAwIDEwMDB2LTczN2wyNDcgMTgybDI5OCAtMTMxbC03NCAxNTZsMjkzIDMxOGwyMzYgLTI4OHY1MDBoLTEwMDB6TTM0MiA4ODRxNTYgMCA5NSAtMzl0MzkgLTk0LjV0LTM5IC05NXQtOTUgLTM5LjV0LTk1IDM5LjV0LTM5IDk1dDM5IDk0LjUgdDk1IDM5eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwNjI7IiBkPSJNNjQ4IDExNjlxMTE3IDAgMjE2IC02MHQxNTYuNSAtMTYxdDU3LjUgLTIxOHEwIC0xMTUgLTcwIC0yNThxLTY5IC0xMDkgLTE1OCAtMjI1LjV0LTE0MyAtMTc5LjVsLTU0IC02MnEtOSA4IC0yNS41IDI0LjV0LTYzLjUgNjcuNXQtOTEgMTAzdC05OC41IDEyOHQtOTUuNSAxNDhxLTYwIDEzMiAtNjAgMjQ5cTAgODggMzQgMTY5LjV0OTEuNSAxNDJ0MTM3IDk2LjV0MTY2LjUgMzZ6TTY1Mi41IDk3NHEtOTEuNSAwIC0xNTYuNSAtNjUgdC02NSAtMTU3dDY1IC0xNTYuNXQxNTYuNSAtNjQuNXQxNTYuNSA2NC41dDY1IDE1Ni41dC02NSAxNTd0LTE1Ni41IDY1eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwNjM7IiBkPSJNNjAwIDExNzdxMTE3IDAgMjI0IC00NS41dDE4NC41IC0xMjN0MTIzIC0xODQuNXQ0NS41IC0yMjR0LTQ1LjUgLTIyNHQtMTIzIC0xODQuNXQtMTg0LjUgLTEyM3QtMjI0IC00NS41dC0yMjQgNDUuNXQtMTg0LjUgMTIzdC0xMjMgMTg0LjV0LTQ1LjUgMjI0dDQ1LjUgMjI0dDEyMyAxODQuNXQxODQuNSAxMjN0MjI0IDQ1LjV6TTYwMCAxNzN2ODU0cS0xMTYgMCAtMjE0LjUgLTU3dC0xNTUuNSAtMTU1LjV0LTU3IC0yMTQuNXQ1NyAtMjE0LjUgdDE1NS41IC0xNTUuNXQyMTQuNSAtNTd6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA2NDsiIGQ9Ik01NTQgMTI5NXEyMSAtNzIgNTcuNSAtMTQzLjV0NzYgLTEzMHQ4MyAtMTE4dDgyLjUgLTExN3Q3MCAtMTE2dDQ5LjUgLTEyNnQxOC41IC0xMzYuNXEwIC03MSAtMjUuNSAtMTM1dC02OC41IC0xMTF0LTk5IC04MnQtMTE4LjUgLTU0dC0xMjUuNSAtMjNxLTg0IDUgLTE2MS41IDM0dC0xMzkuNSA3OC41dC05OSAxMjV0LTM3IDE2NC41cTAgNjkgMTggMTM2LjV0NDkuNSAxMjYuNXQ2OS41IDExNi41dDgxLjUgMTE3LjV0ODMuNSAxMTkgdDc2LjUgMTMxdDU4LjUgMTQzek0zNDQgNzEwcS0yMyAtMzMgLTQzLjUgLTcwLjV0LTQwLjUgLTEwMi41dC0xNyAtMTIzcTEgLTM3IDE0LjUgLTY5LjV0MzAgLTUydDQxIC0zN3QzOC41IC0yNC41dDMzIC0xNXEyMSAtNyAzMiAtMXQxMyAyMmw2IDM0cTIgMTAgLTIuNSAyMnQtMTMuNSAxOXEtNSA0IC0xNCAxMnQtMjkuNSA0MC41dC0zMi41IDczLjVxLTI2IDg5IDYgMjcxcTIgMTEgLTYgMTFxLTggMSAtMTUgLTEweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwNjU7IiBkPSJNMTAwMCAxMDEzbDEwOCAxMTVxMiAxIDUgMnQxMyAydDIwLjUgLTF0MjUgLTkuNXQyOC41IC0yMS41cTIyIC0yMiAyNyAtNDN0MCAtMzJsLTYgLTEwbC0xMDggLTExNXpNMzUwIDExMDBoNDAwcTUwIDAgMTA1IC0xM2wtMTg3IC0xODdoLTM2OHEtNDEgMCAtNzAuNSAtMjkuNXQtMjkuNSAtNzAuNXYtNTAwcTAgLTQxIDI5LjUgLTcwLjV0NzAuNSAtMjkuNWg1MDBxNDEgMCA3MC41IDI5LjV0MjkuNSA3MC41djE4MmwyMDAgMjAwdi0zMzIgcTAgLTE2NSAtOTMuNSAtMjU3LjV0LTI1Ni41IC05Mi41aC00MDBxLTE2NSAwIC0yNTcuNSA5Mi41dC05Mi41IDI1Ny41djQwMHEwIDE2NSA5Mi41IDI1Ny41dDI1Ny41IDkyLjV6TTEwMDkgODAzbC0zNjIgLTM2MmwtMTYxIC01MGw1NSAxNzBsMzU1IDM1NXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDY2OyIgZD0iTTM1MCAxMTAwaDM2MXEtMTY0IC0xNDYgLTIxNiAtMjAwaC0xOTVxLTQxIDAgLTcwLjUgLTI5LjV0LTI5LjUgLTcwLjV2LTUwMHEwIC00MSAyOS41IC03MC41dDcwLjUgLTI5LjVoNTAwcTQxIDAgNzAuNSAyOS41dDI5LjUgNzAuNWwyMDAgMTUzdi0xMDNxMCAtMTY1IC05Mi41IC0yNTcuNXQtMjU3LjUgLTkyLjVoLTQwMHEtMTY1IDAgLTI1Ny41IDkyLjV0LTkyLjUgMjU3LjV2NDAwcTAgMTY1IDkyLjUgMjU3LjV0MjU3LjUgOTIuNXogTTgyNCAxMDczbDMzOSAtMzAxcTggLTcgOCAtMTcuNXQtOCAtMTcuNWwtMzQwIC0zMDZxLTcgLTYgLTEyLjUgLTR0LTYuNSAxMXYyMDNxLTI2IDEgLTU0LjUgMHQtNzguNSAtNy41dC05MiAtMTcuNXQtODYgLTM1dC03MCAtNTdxMTAgNTkgMzMgMTA4dDUxLjUgODEuNXQ2NSA1OC41dDY4LjUgNDAuNXQ2NyAyNC41dDU2IDEzLjV0NDAgNC41djIxMHExIDEwIDYuNSAxMi41dDEzLjUgLTQuNXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDY3OyIgZD0iTTM1MCAxMTAwaDM1MHE2MCAwIDEyNyAtMjNsLTE3OCAtMTc3aC0zNDlxLTQxIDAgLTcwLjUgLTI5LjV0LTI5LjUgLTcwLjV2LTUwMHEwIC00MSAyOS41IC03MC41dDcwLjUgLTI5LjVoNTAwcTQxIDAgNzAuNSAyOS41dDI5LjUgNzAuNXY2OWwyMDAgMjAwdi0yMTlxMCAtMTY1IC05Mi41IC0yNTcuNXQtMjU3LjUgLTkyLjVoLTQwMHEtMTY1IDAgLTI1Ny41IDkyLjV0LTkyLjUgMjU3LjV2NDAwcTAgMTY1IDkyLjUgMjU3LjV0MjU3LjUgOTIuNXogTTY0MyA2MzlsMzk1IDM5NXE3IDcgMTcuNSA3dDE3LjUgLTdsMTAxIC0xMDFxNyAtNyA3IC0xNy41dC03IC0xNy41bC01MzEgLTUzMnEtNyAtNyAtMTcuNSAtN3QtMTcuNSA3bC0yNDggMjQ4cS03IDcgLTcgMTcuNXQ3IDE3LjVsMTAxIDEwMXE3IDcgMTcuNSA3dDE3LjUgLTdsMTExIC0xMTFxOCAtNyAxOCAtN3QxOCA3eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwNjg7IiBkPSJNMzE4IDkxOGwyNjQgMjY0cTggOCAxOCA4dDE4IC04bDI2MCAtMjY0cTcgLTggNC41IC0xM3QtMTIuNSAtNWgtMTcwdi0yMDBoMjAwdjE3M3EwIDEwIDUgMTJ0MTMgLTVsMjY0IC0yNjBxOCAtNyA4IC0xNy41dC04IC0xNy41bC0yNjQgLTI2NXEtOCAtNyAtMTMgLTV0LTUgMTJ2MTczaC0yMDB2LTIwMGgxNzBxMTAgMCAxMi41IC01dC00LjUgLTEzbC0yNjAgLTI2NHEtOCAtOCAtMTggLTh0LTE4IDhsLTI2NCAyNjRxLTggOCAtNS41IDEzIHQxMi41IDVoMTc1djIwMGgtMjAwdi0xNzNxMCAtMTAgLTUgLTEydC0xMyA1bC0yNjQgMjY1cS04IDcgLTggMTcuNXQ4IDE3LjVsMjY0IDI2MHE4IDcgMTMgNXQ1IC0xMnYtMTczaDIwMHYyMDBoLTE3NXEtMTAgMCAtMTIuNSA1dDUuNSAxM3oiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDY5OyIgZD0iTTI1MCAxMTAwaDEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNDM4bDQ2NCA0NTNxMTUgMTQgMjUuNSAxMHQxMC41IC0yNXYtMTAwMHEwIC0yMSAtMTAuNSAtMjV0LTI1LjUgMTBsLTQ2NCA0NTN2LTQzOHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMTAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxMDAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDcwOyIgZD0iTTUwIDExMDBoMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di00MzhsNDY0IDQ1M3ExNSAxNCAyNS41IDEwdDEwLjUgLTI1di00MzhsNDY0IDQ1M3ExNSAxNCAyNS41IDEwdDEwLjUgLTI1di0xMDAwcTAgLTIxIC0xMC41IC0yNXQtMjUuNSAxMGwtNDY0IDQ1M3YtNDM4cTAgLTIxIC0xMC41IC0yNXQtMjUuNSAxMGwtNDY0IDQ1M3YtNDM4cTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMDBxLTIxIDAgLTM1LjUgMTQuNSB0LTE0LjUgMzUuNXYxMDAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDcxOyIgZD0iTTEyMDAgMTA1MHYtMTAwMHEwIC0yMSAtMTAuNSAtMjV0LTI1LjUgMTBsLTQ2NCA0NTN2LTQzOHEwIC0yMSAtMTAuNSAtMjV0LTI1LjUgMTBsLTQ5MiA0ODBxLTE1IDE0IC0xNSAzNXQxNSAzNWw0OTIgNDgwcTE1IDE0IDI1LjUgMTB0MTAuNSAtMjV2LTQzOGw0NjQgNDUzcTE1IDE0IDI1LjUgMTB0MTAuNSAtMjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA3MjsiIGQ9Ik0yNDMgMTA3NGw4MTQgLTQ5OHExOCAtMTEgMTggLTI2dC0xOCAtMjZsLTgxNCAtNDk4cS0xOCAtMTEgLTMwLjUgLTR0LTEyLjUgMjh2MTAwMHEwIDIxIDEyLjUgMjh0MzAuNSAtNHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDczOyIgZD0iTTI1MCAxMDAwaDIwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtODAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0yMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djgwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTY1MCAxMDAwaDIwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtODAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0yMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djgwMCBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwNzQ7IiBkPSJNMTEwMCA5NTB2LTgwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtODAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXY4MDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDgwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDc1OyIgZD0iTTUwMCA2MTJ2NDM4cTAgMjEgMTAuNSAyNXQyNS41IC0xMGw0OTIgLTQ4MHExNSAtMTQgMTUgLTM1dC0xNSAtMzVsLTQ5MiAtNDgwcS0xNSAtMTQgLTI1LjUgLTEwdC0xMC41IDI1djQzOGwtNDY0IC00NTNxLTE1IC0xNCAtMjUuNSAtMTB0LTEwLjUgMjV2MTAwMHEwIDIxIDEwLjUgMjV0MjUuNSAtMTB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA3NjsiIGQ9Ik0xMDQ4IDExMDJsMTAwIDFxMjAgMCAzNSAtMTQuNXQxNSAtMzUuNWw1IC0xMDAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41bC0xMDAgLTFxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41bC0yIDQzN2wtNDYzIC00NTRxLTE0IC0xNSAtMjQuNSAtMTAuNXQtMTAuNSAyNS41bC0yIDQzN2wtNDYyIC00NTVxLTE1IC0xNCAtMjUuNSAtOS41dC0xMC41IDI0LjVsLTUgMTAwMHEwIDIxIDEwLjUgMjUuNXQyNS41IC0xMC41bDQ2NiAtNDUwIGwtMiA0MzhxMCAyMCAxMC41IDI0LjV0MjUuNSAtOS41bDQ2NiAtNDUxbC0yIDQzOHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA3NzsiIGQ9Ik04NTAgMTEwMGgxMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTEwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2NDM4bC00NjQgLTQ1M3EtMTUgLTE0IC0yNS41IC0xMHQtMTAuNSAyNXYxMDAwcTAgMjEgMTAuNSAyNXQyNS41IC0xMGw0NjQgLTQ1M3Y0MzhxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwNzg7IiBkPSJNNjg2IDEwODFsNTAxIC01NDBxMTUgLTE1IDEwLjUgLTI2dC0yNi41IC0xMWgtMTA0MnEtMjIgMCAtMjYuNSAxMXQxMC41IDI2bDUwMSA1NDBxMTUgMTUgMzYgMTV0MzYgLTE1ek0xNTAgNDAwaDEwMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMTAwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDc5OyIgZD0iTTg4NSA5MDBsLTM1MiAtMzUzbDM1MiAtMzUzbC0xOTcgLTE5OGwtNTUyIDU1Mmw1NTIgNTUweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwODA7IiBkPSJNMTA2NCA1NDdsLTU1MSAtNTUxbC0xOTggMTk4bDM1MyAzNTNsLTM1MyAzNTNsMTk4IDE5OHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDgxOyIgZD0iTTYwMCAxMTc3cTExNyAwIDIyNCAtNDUuNXQxODQuNSAtMTIzdDEyMyAtMTg0LjV0NDUuNSAtMjI0dC00NS41IC0yMjR0LTEyMyAtMTg0LjV0LTE4NC41IC0xMjN0LTIyNCAtNDUuNXQtMjI0IDQ1LjV0LTE4NC41IDEyM3QtMTIzIDE4NC41dC00NS41IDIyNHQ0NS41IDIyNHQxMjMgMTg0LjV0MTg0LjUgMTIzdDIyNCA0NS41ek02NTAgOTAwaC0xMDBxLTIxIDAgLTM1LjUgLTE0LjV0LTE0LjUgLTM1LjV2LTE1MGgtMTUwIHEtMjEgMCAtMzUuNSAtMTQuNXQtMTQuNSAtMzUuNXYtMTAwcTAgLTIxIDE0LjUgLTM1LjV0MzUuNSAtMTQuNWgxNTB2LTE1MHEwIC0yMSAxNC41IC0zNS41dDM1LjUgLTE0LjVoMTAwcTIxIDAgMzUuNSAxNC41dDE0LjUgMzUuNXYxNTBoMTUwcTIxIDAgMzUuNSAxNC41dDE0LjUgMzUuNXYxMDBxMCAyMSAtMTQuNSAzNS41dC0zNS41IDE0LjVoLTE1MHYxNTBxMCAyMSAtMTQuNSAzNS41dC0zNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA4MjsiIGQ9Ik02MDAgMTE3N3ExMTcgMCAyMjQgLTQ1LjV0MTg0LjUgLTEyM3QxMjMgLTE4NC41dDQ1LjUgLTIyNHQtNDUuNSAtMjI0dC0xMjMgLTE4NC41dC0xODQuNSAtMTIzdC0yMjQgLTQ1LjV0LTIyNCA0NS41dC0xODQuNSAxMjN0LTEyMyAxODQuNXQtNDUuNSAyMjR0NDUuNSAyMjR0MTIzIDE4NC41dDE4NC41IDEyM3QyMjQgNDUuNXpNODUwIDcwMGgtNTAwcS0yMSAwIC0zNS41IC0xNC41dC0xNC41IC0zNS41di0xMDBxMCAtMjEgMTQuNSAtMzUuNSB0MzUuNSAtMTQuNWg1MDBxMjEgMCAzNS41IDE0LjV0MTQuNSAzNS41djEwMHEwIDIxIC0xNC41IDM1LjV0LTM1LjUgMTQuNXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDgzOyIgZD0iTTYwMCAxMTc3cTExNyAwIDIyNCAtNDUuNXQxODQuNSAtMTIzdDEyMyAtMTg0LjV0NDUuNSAtMjI0dC00NS41IC0yMjR0LTEyMyAtMTg0LjV0LTE4NC41IC0xMjN0LTIyNCAtNDUuNXQtMjI0IDQ1LjV0LTE4NC41IDEyM3QtMTIzIDE4NC41dC00NS41IDIyNHQ0NS41IDIyNHQxMjMgMTg0LjV0MTg0LjUgMTIzdDIyNCA0NS41ek03NDEuNSA5MTNxLTEyLjUgMCAtMjEuNSAtOWwtMTIwIC0xMjBsLTEyMCAxMjBxLTkgOSAtMjEuNSA5IHQtMjEuNSAtOWwtMTQxIC0xNDFxLTkgLTkgLTkgLTIxLjV0OSAtMjEuNWwxMjAgLTEyMGwtMTIwIC0xMjBxLTkgLTkgLTkgLTIxLjV0OSAtMjEuNWwxNDEgLTE0MXE5IC05IDIxLjUgLTl0MjEuNSA5bDEyMCAxMjBsMTIwIC0xMjBxOSAtOSAyMS41IC05dDIxLjUgOWwxNDEgMTQxcTkgOSA5IDIxLjV0LTkgMjEuNWwtMTIwIDEyMGwxMjAgMTIwcTkgOSA5IDIxLjV0LTkgMjEuNWwtMTQxIDE0MXEtOSA5IC0yMS41IDl6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA4NDsiIGQ9Ik02MDAgMTE3N3ExMTcgMCAyMjQgLTQ1LjV0MTg0LjUgLTEyM3QxMjMgLTE4NC41dDQ1LjUgLTIyNHQtNDUuNSAtMjI0dC0xMjMgLTE4NC41dC0xODQuNSAtMTIzdC0yMjQgLTQ1LjV0LTIyNCA0NS41dC0xODQuNSAxMjN0LTEyMyAxODQuNXQtNDUuNSAyMjR0NDUuNSAyMjR0MTIzIDE4NC41dDE4NC41IDEyM3QyMjQgNDUuNXpNNTQ2IDYyM2wtODQgODVxLTcgNyAtMTcuNSA3dC0xOC41IC03bC0xMzkgLTEzOXEtNyAtOCAtNyAtMTh0NyAtMTggbDI0MiAtMjQxcTcgLTggMTcuNSAtOHQxNy41IDhsMzc1IDM3NXE3IDcgNyAxNy41dC03IDE4LjVsLTEzOSAxMzlxLTcgNyAtMTcuNSA3dC0xNy41IC03eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwODU7IiBkPSJNNjAwIDExNzdxMTE3IDAgMjI0IC00NS41dDE4NC41IC0xMjN0MTIzIC0xODQuNXQ0NS41IC0yMjR0LTQ1LjUgLTIyNHQtMTIzIC0xODQuNXQtMTg0LjUgLTEyM3QtMjI0IC00NS41dC0yMjQgNDUuNXQtMTg0LjUgMTIzdC0xMjMgMTg0LjV0LTQ1LjUgMjI0dDQ1LjUgMjI0dDEyMyAxODQuNXQxODQuNSAxMjN0MjI0IDQ1LjV6TTU4OCA5NDFxLTI5IDAgLTU5IC01LjV0LTYzIC0yMC41dC01OCAtMzguNXQtNDEuNSAtNjN0LTE2LjUgLTg5LjUgcTAgLTI1IDIwIC0yNWgxMzFxMzAgLTUgMzUgMTFxNiAyMCAyMC41IDI4dDQ1LjUgOHEyMCAwIDMxLjUgLTEwLjV0MTEuNSAtMjguNXEwIC0yMyAtNyAtMzR0LTI2IC0xOHEtMSAwIC0xMy41IC00dC0xOS41IC03LjV0LTIwIC0xMC41dC0yMiAtMTd0LTE4LjUgLTI0dC0xNS41IC0zNXQtOCAtNDZxLTEgLTggNS41IC0xNi41dDIwLjUgLTguNWgxNzNxNyAwIDIyIDh0MzUgMjh0MzcuNSA0OHQyOS41IDc0dDEyIDEwMHEwIDQ3IC0xNyA4MyB0LTQyLjUgNTd0LTU5LjUgMzQuNXQtNjQgMTh0LTU5IDQuNXpNNjc1IDQwMGgtMTUwcS0xMCAwIC0xNy41IC03LjV0LTcuNSAtMTcuNXYtMTUwcTAgLTEwIDcuNSAtMTcuNXQxNy41IC03LjVoMTUwcTEwIDAgMTcuNSA3LjV0Ny41IDE3LjV2MTUwcTAgMTAgLTcuNSAxNy41dC0xNy41IDcuNXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDg2OyIgZD0iTTYwMCAxMTc3cTExNyAwIDIyNCAtNDUuNXQxODQuNSAtMTIzdDEyMyAtMTg0LjV0NDUuNSAtMjI0dC00NS41IC0yMjR0LTEyMyAtMTg0LjV0LTE4NC41IC0xMjN0LTIyNCAtNDUuNXQtMjI0IDQ1LjV0LTE4NC41IDEyM3QtMTIzIDE4NC41dC00NS41IDIyNHQ0NS41IDIyNHQxMjMgMTg0LjV0MTg0LjUgMTIzdDIyNCA0NS41ek02NzUgMTAwMGgtMTUwcS0xMCAwIC0xNy41IC03LjV0LTcuNSAtMTcuNXYtMTUwcTAgLTEwIDcuNSAtMTcuNSB0MTcuNSAtNy41aDE1MHExMCAwIDE3LjUgNy41dDcuNSAxNy41djE1MHEwIDEwIC03LjUgMTcuNXQtMTcuNSA3LjV6TTY3NSA3MDBoLTI1MHEtMTAgMCAtMTcuNSAtNy41dC03LjUgLTE3LjV2LTUwcTAgLTEwIDcuNSAtMTcuNXQxNy41IC03LjVoNzV2LTIwMGgtNzVxLTEwIDAgLTE3LjUgLTcuNXQtNy41IC0xNy41di01MHEwIC0xMCA3LjUgLTE3LjV0MTcuNSAtNy41aDM1MHExMCAwIDE3LjUgNy41dDcuNSAxNy41djUwcTAgMTAgLTcuNSAxNy41IHQtMTcuNSA3LjVoLTc1djI3NXEwIDEwIC03LjUgMTcuNXQtMTcuNSA3LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA4NzsiIGQ9Ik01MjUgMTIwMGgxNTBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di0xOTRxMTAzIC0yNyAxNzguNSAtMTAyLjV0MTAyLjUgLTE3OC41aDE5NHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTE1MHEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTE5NHEtMjcgLTEwMyAtMTAyLjUgLTE3OC41dC0xNzguNSAtMTAyLjV2LTE5NHEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTE1MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djE5NCBxLTEwMyAyNyAtMTc4LjUgMTAyLjV0LTEwMi41IDE3OC41aC0xOTRxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXYxNTBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNWgxOTRxMjcgMTAzIDEwMi41IDE3OC41dDE3OC41IDEwMi41djE5NHEwIDEwIDcuNSAxNy41dDE3LjUgNy41ek03MDAgODkzdi0xNjhxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC0xNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXYxNjhxLTY4IC0yMyAtMTE5IC03NCB0LTc0IC0xMTloMTY4cTEwIDAgMTcuNSAtNy41dDcuNSAtMTcuNXYtMTUwcTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtMTY4cTIzIC02OCA3NCAtMTE5dDExOSAtNzR2MTY4cTAgMTAgNy41IDE3LjV0MTcuNSA3LjVoMTUwcTEwIDAgMTcuNSAtNy41dDcuNSAtMTcuNXYtMTY4cTY4IDIzIDExOSA3NHQ3NCAxMTloLTE2OHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djE1MHEwIDEwIDcuNSAxNy41dDE3LjUgNy41aDE2OCBxLTIzIDY4IC03NCAxMTl0LTExOSA3NHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDg4OyIgZD0iTTYwMCAxMTc3cTExNyAwIDIyNCAtNDUuNXQxODQuNSAtMTIzdDEyMyAtMTg0LjV0NDUuNSAtMjI0dC00NS41IC0yMjR0LTEyMyAtMTg0LjV0LTE4NC41IC0xMjN0LTIyNCAtNDUuNXQtMjI0IDQ1LjV0LTE4NC41IDEyM3QtMTIzIDE4NC41dC00NS41IDIyNHQ0NS41IDIyNHQxMjMgMTg0LjV0MTg0LjUgMTIzdDIyNCA0NS41ek02MDAgMTAyN3EtMTE2IDAgLTIxNC41IC01N3QtMTU1LjUgLTE1NS41dC01NyAtMjE0LjV0NTcgLTIxNC41IHQxNTUuNSAtMTU1LjV0MjE0LjUgLTU3dDIxNC41IDU3dDE1NS41IDE1NS41dDU3IDIxNC41dC01NyAyMTQuNXQtMTU1LjUgMTU1LjV0LTIxNC41IDU3ek03NTkgODIzbDY0IC02NHE3IC03IDcgLTE3LjV0LTcgLTE3LjVsLTEyNCAtMTI0bDEyNCAtMTI0cTcgLTcgNyAtMTcuNXQtNyAtMTcuNWwtNjQgLTY0cS03IC03IC0xNy41IC03dC0xNy41IDdsLTEyNCAxMjRsLTEyNCAtMTI0cS03IC03IC0xNy41IC03dC0xNy41IDdsLTY0IDY0IHEtNyA3IC03IDE3LjV0NyAxNy41bDEyNCAxMjRsLTEyNCAxMjRxLTcgNyAtNyAxNy41dDcgMTcuNWw2NCA2NHE3IDcgMTcuNSA3dDE3LjUgLTdsMTI0IC0xMjRsMTI0IDEyNHE3IDcgMTcuNSA3dDE3LjUgLTd6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA4OTsiIGQ9Ik02MDAgMTE3N3ExMTcgMCAyMjQgLTQ1LjV0MTg0LjUgLTEyM3QxMjMgLTE4NC41dDQ1LjUgLTIyNHQtNDUuNSAtMjI0dC0xMjMgLTE4NC41dC0xODQuNSAtMTIzdC0yMjQgLTQ1LjV0LTIyNCA0NS41dC0xODQuNSAxMjN0LTEyMyAxODQuNXQtNDUuNSAyMjR0NDUuNSAyMjR0MTIzIDE4NC41dDE4NC41IDEyM3QyMjQgNDUuNXpNNjAwIDEwMjdxLTExNiAwIC0yMTQuNSAtNTd0LTE1NS41IC0xNTUuNXQtNTcgLTIxNC41dDU3IC0yMTQuNSB0MTU1LjUgLTE1NS41dDIxNC41IC01N3QyMTQuNSA1N3QxNTUuNSAxNTUuNXQ1NyAyMTQuNXQtNTcgMjE0LjV0LTE1NS41IDE1NS41dC0yMTQuNSA1N3pNNzgyIDc4OGwxMDYgLTEwNnE3IC03IDcgLTE3LjV0LTcgLTE3LjVsLTMyMCAtMzIxcS04IC03IC0xOCAtN3QtMTggN2wtMjAyIDIwM3EtOCA3IC04IDE3LjV0OCAxNy41bDEwNiAxMDZxNyA4IDE3LjUgOHQxNy41IC04bDc5IC03OWwxOTcgMTk3cTcgNyAxNy41IDd0MTcuNSAtN3oiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDkwOyIgZD0iTTYwMCAxMTc3cTExNyAwIDIyNCAtNDUuNXQxODQuNSAtMTIzdDEyMyAtMTg0LjV0NDUuNSAtMjI0dC00NS41IC0yMjR0LTEyMyAtMTg0LjV0LTE4NC41IC0xMjN0LTIyNCAtNDUuNXQtMjI0IDQ1LjV0LTE4NC41IDEyM3QtMTIzIDE4NC41dC00NS41IDIyNHQ0NS41IDIyNHQxMjMgMTg0LjV0MTg0LjUgMTIzdDIyNCA0NS41ek02MDAgMTAyN3EtMTE2IDAgLTIxNC41IC01N3QtMTU1LjUgLTE1NS41dC01NyAtMjE0LjVxMCAtMTIwIDY1IC0yMjUgbDU4NyA1ODdxLTEwNSA2NSAtMjI1IDY1ek05NjUgODE5bC01ODQgLTU4NHExMDQgLTYyIDIxOSAtNjJxMTE2IDAgMjE0LjUgNTd0MTU1LjUgMTU1LjV0NTcgMjE0LjVxMCAxMTUgLTYyIDIxOXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDkxOyIgZD0iTTM5IDU4Mmw1MjIgNDI3cTE2IDEzIDI3LjUgOHQxMS41IC0yNnYtMjkxaDU1MHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC01NTB2LTI5MXEwIC0yMSAtMTEuNSAtMjZ0LTI3LjUgOGwtNTIyIDQyN3EtMTYgMTMgLTE2IDMydDE2IDMyeiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUwOTI7IiBkPSJNNjM5IDEwMDlsNTIyIC00MjdxMTYgLTEzIDE2IC0zMnQtMTYgLTMybC01MjIgLTQyN3EtMTYgLTEzIC0yNy41IC04dC0xMS41IDI2djI5MWgtNTUwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYyMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDU1MHYyOTFxMCAyMSAxMS41IDI2dDI3LjUgLTh6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA5MzsiIGQ9Ik02ODIgMTE2MWw0MjcgLTUyMnExMyAtMTYgOCAtMjcuNXQtMjYgLTExLjVoLTI5MXYtNTUwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0yMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djU1MGgtMjkxcS0yMSAwIC0yNiAxMS41dDggMjcuNWw0MjcgNTIycTEzIDE2IDMyIDE2dDMyIC0xNnoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDk0OyIgZD0iTTU1MCAxMjAwaDIwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNTUwaDI5MXEyMSAwIDI2IC0xMS41dC04IC0yNy41bC00MjcgLTUyMnEtMTMgLTE2IC0zMiAtMTZ0LTMyIDE2bC00MjcgNTIycS0xMyAxNiAtOCAyNy41dDI2IDExLjVoMjkxdjU1MHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTA5NTsiIGQ9Ik02MzkgMTEwOWw1MjIgLTQyN3ExNiAtMTMgMTYgLTMydC0xNiAtMzJsLTUyMiAtNDI3cS0xNiAtMTMgLTI3LjUgLTh0LTExLjUgMjZ2MjkxcS05NCAtMiAtMTgyIC0yMHQtMTcwLjUgLTUydC0xNDcgLTkyLjV0LTEwMC41IC0xMzUuNXE1IDEwNSAyNyAxOTMuNXQ2Ny41IDE2N3QxMTMgMTM1dDE2NyA5MS41dDIyNS41IDQydjI2MnEwIDIxIDExLjUgMjZ0MjcuNSAtOHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDk2OyIgZD0iTTg1MCAxMjAwaDMwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMzAwcTAgLTIxIC0xMC41IC0yNXQtMjQuNSAxMGwtOTQgOTRsLTI0OSAtMjQ5cS04IC03IC0xOCAtN3QtMTggN2wtMTA2IDEwNnEtNyA4IC03IDE4dDcgMThsMjQ5IDI0OWwtOTQgOTRxLTE0IDE0IC0xMCAyNC41dDI1IDEwLjV6TTM1MCAwaC0zMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djMwMHEwIDIxIDEwLjUgMjV0MjQuNSAtMTBsOTQgLTk0bDI0OSAyNDkgcTggNyAxOCA3dDE4IC03bDEwNiAtMTA2cTcgLTggNyAtMTh0LTcgLTE4bC0yNDkgLTI0OWw5NCAtOTRxMTQgLTE0IDEwIC0yNC41dC0yNSAtMTAuNXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMDk3OyIgZD0iTTEwMTQgMTEyMGwxMDYgLTEwNnE3IC04IDcgLTE4dC03IC0xOGwtMjQ5IC0yNDlsOTQgLTk0cTE0IC0xNCAxMCAtMjQuNXQtMjUgLTEwLjVoLTMwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MzAwcTAgMjEgMTAuNSAyNXQyNC41IC0xMGw5NCAtOTRsMjQ5IDI0OXE4IDcgMTggN3QxOCAtN3pNMjUwIDYwMGgzMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTMwMHEwIC0yMSAtMTAuNSAtMjV0LTI0LjUgMTBsLTk0IDk0IGwtMjQ5IC0yNDlxLTggLTcgLTE4IC03dC0xOCA3bC0xMDYgMTA2cS03IDggLTcgMTh0NyAxOGwyNDkgMjQ5bC05NCA5NHEtMTQgMTQgLTEwIDI0LjV0MjUgMTAuNXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMTAxOyIgZD0iTTYwMCAxMTc3cTExNyAwIDIyNCAtNDUuNXQxODQuNSAtMTIzdDEyMyAtMTg0LjV0NDUuNSAtMjI0dC00NS41IC0yMjR0LTEyMyAtMTg0LjV0LTE4NC41IC0xMjN0LTIyNCAtNDUuNXQtMjI0IDQ1LjV0LTE4NC41IDEyM3QtMTIzIDE4NC41dC00NS41IDIyNHQ0NS41IDIyNHQxMjMgMTg0LjV0MTg0LjUgMTIzdDIyNCA0NS41ek03MDQgOTAwaC0yMDhxLTIwIDAgLTMyIC0xNC41dC04IC0zNC41bDU4IC0zMDJxNCAtMjAgMjEuNSAtMzQuNSB0MzcuNSAtMTQuNWg1NHEyMCAwIDM3LjUgMTQuNXQyMS41IDM0LjVsNTggMzAycTQgMjAgLTggMzQuNXQtMzIgMTQuNXpNNjc1IDQwMGgtMTUwcS0xMCAwIC0xNy41IC03LjV0LTcuNSAtMTcuNXYtMTUwcTAgLTEwIDcuNSAtMTcuNXQxNy41IC03LjVoMTUwcTEwIDAgMTcuNSA3LjV0Ny41IDE3LjV2MTUwcTAgMTAgLTcuNSAxNy41dC0xNy41IDcuNXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMTAyOyIgZD0iTTI2MCAxMjAwcTkgMCAxOSAtMnQxNSAtNGw1IC0ycTIyIC0xMCA0NCAtMjNsMTk2IC0xMThxMjEgLTEzIDM2IC0yNHEyOSAtMjEgMzcgLTEycTExIDEzIDQ5IDM1bDE5NiAxMThxMjIgMTMgNDUgMjNxMTcgNyAzOCA3cTIzIDAgNDcgLTE2LjV0MzcgLTMzLjVsMTMgLTE2cTE0IC0yMSAxOCAtNDVsMjUgLTEyM2w4IC00NHExIC05IDguNSAtMTQuNXQxNy41IC01LjVoNjFxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di01MCBxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC01MHEtMTAgMCAtMTcuNSAtNy41dC03LjUgLTE3LjV2LTE3NWgtNDAwdjMwMGgtMjAwdi0zMDBoLTQwMHYxNzVxMCAxMCAtNy41IDE3LjV0LTE3LjUgNy41aC01MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djUwcTAgMTAgNy41IDE3LjV0MTcuNSA3LjVoNjFxMTEgMCAxOCAzdDcgOHEwIDQgOSA1MmwyNSAxMjhxNSAyNSAxOSA0NXEyIDMgNSA3dDEzLjUgMTV0MjEuNSAxOS41dDI2LjUgMTUuNSB0MjkuNSA3ek05MTUgMTA3OWwtMTY2IC0xNjJxLTcgLTcgLTUgLTEydDEyIC01aDIxOXExMCAwIDE1IDd0MiAxN2wtNTEgMTQ5cS0zIDEwIC0xMSAxMnQtMTUgLTZ6TTQ2MyA5MTdsLTE3NyAxNTdxLTggNyAtMTYgNXQtMTEgLTEybC01MSAtMTQzcS0zIC0xMCAyIC0xN3QxNSAtN2gyMzFxMTEgMCAxMi41IDV0LTUuNSAxMnpNNTAwIDBoLTM3NXEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djM3NWg0MDB2LTQwMHpNMTEwMCA0MDB2LTM3NSBxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC0zNzV2NDAwaDQwMHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMTAzOyIgZD0iTTExNjUgMTE5MHE4IDMgMjEgLTYuNXQxMyAtMTcuNXEtMiAtMTc4IC0yNC41IC0zMjMuNXQtNTUuNSAtMjQ1LjV0LTg3IC0xNzQuNXQtMTAyLjUgLTExOC41dC0xMTggLTY4LjV0LTExOC41IC0zM3QtMTIwIC00LjV0LTEwNSA5LjV0LTkwIDE2LjVxLTYxIDEyIC03OCAxMXEtNCAxIC0xMi41IDB0LTM0IC0xNC41dC01Mi41IC00MC41bC0xNTMgLTE1M3EtMjYgLTI0IC0zNyAtMTQuNXQtMTEgNDMuNXEwIDY0IDQyIDEwMnE4IDggNTAuNSA0NSB0NjYuNSA1OHExOSAxNyAzNSA0N3QxMyA2MXEtOSA1NSAtMTAgMTAyLjV0NyAxMTF0MzcgMTMwdDc4IDEyOS41cTM5IDUxIDgwIDg4dDg5LjUgNjMuNXQ5NC41IDQ1dDExMy41IDM2dDEyOSAzMXQxNTcuNSAzN3QxODIgNDcuNXpNMTExNiAxMDk4cS04IDkgLTIyLjUgLTN0LTQ1LjUgLTUwcS0zOCAtNDcgLTExOSAtMTAzLjV0LTE0MiAtODkuNWwtNjIgLTMzcS01NiAtMzAgLTEwMiAtNTd0LTEwNCAtNjh0LTEwMi41IC04MC41dC04NS41IC05MSB0LTY0IC0xMDQuNXEtMjQgLTU2IC0zMSAtODZ0MiAtMzJ0MzEuNSAxNy41dDU1LjUgNTkuNXEyNSAzMCA5NCA3NS41dDEyNS41IDc3LjV0MTQ3LjUgODFxNzAgMzcgMTE4LjUgNjl0MTAyIDc5LjV0OTkgMTExdDg2LjUgMTQ4LjVxMjIgNTAgMjQgNjB0LTYgMTl6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTEwNDsiIGQ9Ik02NTMgMTIzMXEtMzkgLTY3IC01NC41IC0xMzF0LTEwLjUgLTExNC41dDI0LjUgLTk2LjV0NDcuNSAtODB0NjMuNSAtNjIuNXQ2OC41IC00Ni41dDY1IC0zMHEtNCA3IC0xNy41IDM1dC0xOC41IDM5LjV0LTE3IDM5LjV0LTE3IDQzdC0xMyA0MnQtOS41IDQ0LjV0LTIgNDJ0NCA0M3QxMy41IDM5dDIzIDM4LjVxOTYgLTQyIDE2NSAtMTA3LjV0MTA1IC0xMzh0NTIgLTE1NnQxMyAtMTU5dC0xOSAtMTQ5LjVxLTEzIC01NSAtNDQgLTEwNi41IHQtNjggLTg3dC03OC41IC02NC41dC03Mi41IC00NXQtNTMgLTIycS03MiAtMjIgLTEyNyAtMTFxLTMxIDYgLTEzIDE5cTYgMyAxNyA3cTEzIDUgMzIuNSAyMXQ0MSA0NHQzOC41IDYzLjV0MjEuNSA4MS41dC02LjUgOTQuNXQtNTAgMTA3dC0xMDQgMTE1LjVxMTAgLTEwNCAtMC41IC0xODl0LTM3IC0xNDAuNXQtNjUgLTkzdC04NCAtNTJ0LTkzLjUgLTExdC05NSAyNC41cS04MCAzNiAtMTMxLjUgMTE0dC01My41IDE3MXEtMiAyMyAwIDQ5LjUgdDQuNSA1Mi41dDEzLjUgNTZ0MjcuNSA2MHQ0NiA2NC41dDY5LjUgNjguNXEtOCAtNTMgLTUgLTEwMi41dDE3LjUgLTkwdDM0IC02OC41dDQ0LjUgLTM5dDQ5IC0ycTMxIDEzIDM4LjUgMzZ0LTQuNSA1NXQtMjkgNjQuNXQtMzYgNzV0LTI2IDc1LjVxLTE1IDg1IDIgMTYxLjV0NTMuNSAxMjguNXQ4NS41IDkyLjV0OTMuNSA2MXQ4MS41IDI1LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTEwNTsiIGQ9Ik02MDAgMTA5NHE4MiAwIDE2MC41IC0yMi41dDE0MCAtNTl0MTE2LjUgLTgyLjV0OTQuNSAtOTV0NjggLTk1dDQyLjUgLTgyLjV0MTQgLTU3LjV0LTE0IC01Ny41dC00MyAtODIuNXQtNjguNSAtOTV0LTk0LjUgLTk1dC0xMTYuNSAtODIuNXQtMTQwIC01OXQtMTU5LjUgLTIyLjV0LTE1OS41IDIyLjV0LTE0MCA1OXQtMTE2LjUgODIuNXQtOTQuNSA5NXQtNjguNSA5NXQtNDMgODIuNXQtMTQgNTcuNXQxNCA1Ny41dDQyLjUgODIuNXQ2OCA5NSB0OTQuNSA5NXQxMTYuNSA4Mi41dDE0MCA1OXQxNjAuNSAyMi41ek04ODggODI5cS0xNSAxNSAtMTggMTJ0NSAtMjJxMjUgLTU3IDI1IC0xMTlxMCAtMTI0IC04OCAtMjEydC0yMTIgLTg4dC0yMTIgODh0LTg4IDIxMnEwIDU5IDIzIDExNHE4IDE5IDQuNSAyMnQtMTcuNSAtMTJxLTcwIC02OSAtMTYwIC0xODRxLTEzIC0xNiAtMTUgLTQwLjV0OSAtNDIuNXEyMiAtMzYgNDcgLTcxdDcwIC04MnQ5Mi41IC04MXQxMTMgLTU4LjV0MTMzLjUgLTI0LjUgdDEzMy41IDI0dDExMyA1OC41dDkyLjUgODEuNXQ3MCA4MS41dDQ3IDcwLjVxMTEgMTggOSA0Mi41dC0xNCA0MS41cS05MCAxMTcgLTE2MyAxODl6TTQ0OCA3MjdsLTM1IC0zNnEtMTUgLTE1IC0xOS41IC0zOC41dDQuNSAtNDEuNXEzNyAtNjggOTMgLTExNnExNiAtMTMgMzguNSAtMTF0MzYuNSAxN2wzNSAzNHExNCAxNSAxMi41IDMzLjV0LTE2LjUgMzMuNXEtNDQgNDQgLTg5IDExN3EtMTEgMTggLTI4IDIwdC0zMiAtMTJ6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTEwNjsiIGQ9Ik01OTIgMGgtMTQ4bDMxIDEyMHEtOTEgMjAgLTE3NS41IDY4LjV0LTE0My41IDEwNi41dC0xMDMuNSAxMTl0LTY2LjUgMTEwdC0yMiA3NnEwIDIxIDE0IDU3LjV0NDIuNSA4Mi41dDY4IDk1dDk0LjUgOTV0MTE2LjUgODIuNXQxNDAgNTl0MTYwLjUgMjIuNXE2MSAwIDEyNiAtMTVsMzIgMTIxaDE0OHpNOTQ0IDc3MGw0NyAxODFxMTA4IC04NSAxNzYuNSAtMTkydDY4LjUgLTE1OXEwIC0yNiAtMTkuNSAtNzF0LTU5LjUgLTEwMnQtOTMgLTExMiB0LTEyOSAtMTA0LjV0LTE1OCAtNzUuNWw0NiAxNzNxNzcgNDkgMTM2IDExN3Q5NyAxMzFxMTEgMTggOSA0Mi41dC0xNCA0MS41cS01NCA3MCAtMTA3IDEzMHpNMzEwIDgyNHEtNzAgLTY5IC0xNjAgLTE4NHEtMTMgLTE2IC0xNSAtNDAuNXQ5IC00Mi41cTE4IC0zMCAzOSAtNjB0NTcgLTcwLjV0NzQgLTczdDkwIC02MXQxMDUgLTQxLjVsNDEgMTU0cS0xMDcgMTggLTE3OC41IDEwMS41dC03MS41IDE5My41cTAgNTkgMjMgMTE0cTggMTkgNC41IDIyIHQtMTcuNSAtMTJ6TTQ0OCA3MjdsLTM1IC0zNnEtMTUgLTE1IC0xOS41IC0zOC41dDQuNSAtNDEuNXEzNyAtNjggOTMgLTExNnExNiAtMTMgMzguNSAtMTF0MzYuNSAxN2wxMiAxMWwyMiA4NmwtMyA0cS00NCA0NCAtODkgMTE3cS0xMSAxOCAtMjggMjB0LTMyIC0xMnoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMTA3OyIgZD0iTS05MCAxMDBsNjQyIDEwNjZxMjAgMzEgNDggMjguNXQ0OCAtMzUuNWw2NDIgLTEwNTZxMjEgLTMyIDcuNSAtNjcuNXQtNTAuNSAtMzUuNWgtMTI5NHEtMzcgMCAtNTAuNSAzNHQ3LjUgNjZ6TTE1NSAyMDBoMzQ1djc1cTAgMTAgNy41IDE3LjV0MTcuNSA3LjVoMTUwcTEwIDAgMTcuNSAtNy41dDcuNSAtMTcuNXYtNzVoMzQ1bC00NDUgNzIzek00OTYgNzAwaDIwOHEyMCAwIDMyIC0xNC41dDggLTM0LjVsLTU4IC0yNTIgcS00IC0yMCAtMjEuNSAtMzQuNXQtMzcuNSAtMTQuNWgtNTRxLTIwIDAgLTM3LjUgMTQuNXQtMjEuNSAzNC41bC01OCAyNTJxLTQgMjAgOCAzNC41dDMyIDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTEwODsiIGQ9Ik02NTAgMTIwMHE2MiAwIDEwNiAtNDR0NDQgLTEwNnYtMzM5bDM2MyAtMzI1cTE1IC0xNCAyNiAtMzguNXQxMSAtNDQuNXYtNDFxMCAtMjAgLTEyIC0yNi41dC0yOSA1LjVsLTM1OSAyNDl2LTI2M3ExMDAgLTkzIDEwMCAtMTEzdi02NHEwIC0yMSAtMTMgLTI5dC0zMiAxbC0yMDUgMTI4bC0yMDUgLTEyOHEtMTkgLTkgLTMyIC0xdC0xMyAyOXY2NHEwIDIwIDEwMCAxMTN2MjYzbC0zNTkgLTI0OXEtMTcgLTEyIC0yOSAtNS41dC0xMiAyNi41djQxIHEwIDIwIDExIDQ0LjV0MjYgMzguNWwzNjMgMzI1djMzOXEwIDYyIDQ0IDEwNnQxMDYgNDR6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTEwOTsiIGQ9Ik04NTAgMTIwMGgxMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTUwaDUwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xNTBoLTExMDB2MTUwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWg1MHY1MHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di01MGg1MDB2NTBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek0xMTAwIDgwMHYtNzUwcTAgLTIxIC0xNC41IC0zNS41IHQtMzUuNSAtMTQuNWgtMTAwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2NzUwaDExMDB6TTEwMCA2MDB2LTEwMGgxMDB2MTAwaC0xMDB6TTMwMCA2MDB2LTEwMGgxMDB2MTAwaC0xMDB6TTUwMCA2MDB2LTEwMGgxMDB2MTAwaC0xMDB6TTcwMCA2MDB2LTEwMGgxMDB2MTAwaC0xMDB6TTkwMCA2MDB2LTEwMGgxMDB2MTAwaC0xMDB6TTEwMCA0MDB2LTEwMGgxMDB2MTAwaC0xMDB6TTMwMCA0MDB2LTEwMGgxMDB2MTAwaC0xMDB6TTUwMCA0MDAgdi0xMDBoMTAwdjEwMGgtMTAwek03MDAgNDAwdi0xMDBoMTAwdjEwMGgtMTAwek05MDAgNDAwdi0xMDBoMTAwdjEwMGgtMTAwek0xMDAgMjAwdi0xMDBoMTAwdjEwMGgtMTAwek0zMDAgMjAwdi0xMDBoMTAwdjEwMGgtMTAwek01MDAgMjAwdi0xMDBoMTAwdjEwMGgtMTAwek03MDAgMjAwdi0xMDBoMTAwdjEwMGgtMTAwek05MDAgMjAwdi0xMDBoMTAwdjEwMGgtMTAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxMTA7IiBkPSJNMTEzNSAxMTY1bDI0OSAtMjMwcTE1IC0xNCAxNSAtMzV0LTE1IC0zNWwtMjQ5IC0yMzBxLTE0IC0xNCAtMjQuNSAtMTB0LTEwLjUgMjV2MTUwaC0xNTlsLTYwMCAtNjAwaC0yOTFxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoMjA5bDYwMCA2MDBoMjQxdjE1MHEwIDIxIDEwLjUgMjV0MjQuNSAtMTB6TTUyMiA4MTlsLTE0MSAtMTQxbC0xMjIgMTIyaC0yMDlxLTIxIDAgLTM1LjUgMTQuNSB0LTE0LjUgMzUuNXYxMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDI5MXpNMTEzNSA1NjVsMjQ5IC0yMzBxMTUgLTE0IDE1IC0zNXQtMTUgLTM1bC0yNDkgLTIzMHEtMTQgLTE0IC0yNC41IC0xMHQtMTAuNSAyNXYxNTBoLTI0MWwtMTgxIDE4MWwxNDEgMTQxbDEyMiAtMTIyaDE1OXYxNTBxMCAyMSAxMC41IDI1dDI0LjUgLTEweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxMTE7IiBkPSJNMTAwIDExMDBoMTAwMHE0MSAwIDcwLjUgLTI5LjV0MjkuNSAtNzAuNXYtNjAwcTAgLTQxIC0yOS41IC03MC41dC03MC41IC0yOS41aC01OTZsLTMwNCAtMzAwdjMwMGgtMTAwcS00MSAwIC03MC41IDI5LjV0LTI5LjUgNzAuNXY2MDBxMCA0MSAyOS41IDcwLjV0NzAuNSAyOS41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxMTI7IiBkPSJNMTUwIDEyMDBoMjAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0yNTBoLTMwMHYyNTBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek04NTAgMTIwMGgyMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTI1MGgtMzAwdjI1MHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTExMDAgODAwdi0zMDBxMCAtNDEgLTMgLTc3LjV0LTE1IC04OS41dC0zMiAtOTZ0LTU4IC04OXQtODkgLTc3dC0xMjkgLTUxdC0xNzQgLTIwdC0xNzQgMjAgdC0xMjkgNTF0LTg5IDc3dC01OCA4OXQtMzIgOTZ0LTE1IDg5LjV0LTMgNzcuNXYzMDBoMzAwdi0yNTB2LTI3di00Mi41dDEuNSAtNDF0NSAtMzh0MTAgLTM1dDE2LjUgLTMwdDI1LjUgLTI0LjV0MzUgLTE5dDQ2LjUgLTEydDYwIC00dDYwIDQuNXQ0Ni41IDEyLjV0MzUgMTkuNXQyNSAyNS41dDE3IDMwLjV0MTAgMzV0NSAzOHQyIDQwLjV0LTAuNSA0MnYyNXYyNTBoMzAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxMTM7IiBkPSJNMTEwMCA0MTFsLTE5OCAtMTk5bC0zNTMgMzUzbC0zNTMgLTM1M2wtMTk3IDE5OWw1NTEgNTUxeiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxMTQ7IiBkPSJNMTEwMSA3ODlsLTU1MCAtNTUxbC01NTEgNTUxbDE5OCAxOTlsMzUzIC0zNTNsMzUzIDM1M3oiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMTE1OyIgZD0iTTQwNCAxMDAwaDc0NnEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNTUxaDE1MHEyMSAwIDI1IC0xMC41dC0xMCAtMjQuNWwtMjMwIC0yNDlxLTE0IC0xNSAtMzUgLTE1dC0zNSAxNWwtMjMwIDI0OXEtMTQgMTQgLTEwIDI0LjV0MjUgMTAuNWgxNTB2NDAxaC0zODF6TTEzNSA5ODRsMjMwIC0yNDlxMTQgLTE0IDEwIC0yNC41dC0yNSAtMTAuNWgtMTUwdi00MDBoMzg1bDIxNSAtMjAwaC03NTBxLTIxIDAgLTM1LjUgMTQuNSB0LTE0LjUgMzUuNXY1NTBoLTE1MHEtMjEgMCAtMjUgMTAuNXQxMCAyNC41bDIzMCAyNDlxMTQgMTUgMzUgMTV0MzUgLTE1eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxMTY7IiBkPSJNNTYgMTIwMGg5NHExNyAwIDMxIC0xMXQxOCAtMjdsMzggLTE2Mmg4OTZxMjQgMCAzOSAtMTguNXQxMCAtNDIuNWwtMTAwIC00NzVxLTUgLTIxIC0yNyAtNDIuNXQtNTUgLTIxLjVoLTYzM2w0OCAtMjAwaDUzNXEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXQtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNTB2LTUwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41dC0zNS41IDE0LjV0LTE0LjUgMzUuNXY1MGgtMzAwdi01MCBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjV0LTM1LjUgMTQuNXQtMTQuNSAzNS41djUwaC0zMXEtMTggMCAtMzIuNSAxMHQtMjAuNSAxOWwtNSAxMGwtMjAxIDk2MWgtNTRxLTIwIDAgLTM1IDE0LjV0LTE1IDM1LjV0MTUgMzUuNXQzNSAxNC41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxMTc7IiBkPSJNMTIwMCAxMDAwdi0xMDBoLTEyMDB2MTAwaDIwMHEwIDQxIDI5LjUgNzAuNXQ3MC41IDI5LjVoMzAwcTQxIDAgNzAuNSAtMjkuNXQyOS41IC03MC41aDUwMHpNMCA4MDBoMTIwMHYtODAwaC0xMjAwdjgwMHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMTE4OyIgZD0iTTIwMCA4MDBsLTIwMCAtNDAwdjYwMGgyMDBxMCA0MSAyOS41IDcwLjV0NzAuNSAyOS41aDMwMHE0MiAwIDcxIC0yOS41dDI5IC03MC41aDUwMHYtMjAwaC0xMDAwek0xNTAwIDcwMGwtMzAwIC03MDBoLTEyMDBsMzAwIDcwMGgxMjAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxMTk7IiBkPSJNNjM1IDExODRsMjMwIC0yNDlxMTQgLTE0IDEwIC0yNC41dC0yNSAtMTAuNWgtMTUwdi02MDFoMTUwcTIxIDAgMjUgLTEwLjV0LTEwIC0yNC41bC0yMzAgLTI0OXEtMTQgLTE1IC0zNSAtMTV0LTM1IDE1bC0yMzAgMjQ5cS0xNCAxNCAtMTAgMjQuNXQyNSAxMC41aDE1MHY2MDFoLTE1MHEtMjEgMCAtMjUgMTAuNXQxMCAyNC41bDIzMCAyNDlxMTQgMTUgMzUgMTV0MzUgLTE1eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxMjA7IiBkPSJNOTM2IDg2NGwyNDkgLTIyOXExNCAtMTUgMTQgLTM1LjV0LTE0IC0zNS41bC0yNDkgLTIyOXEtMTUgLTE1IC0yNS41IC0xMC41dC0xMC41IDI0LjV2MTUxaC02MDB2LTE1MXEwIC0yMCAtMTAuNSAtMjQuNXQtMjUuNSAxMC41bC0yNDkgMjI5cS0xNCAxNSAtMTQgMzUuNXQxNCAzNS41bDI0OSAyMjlxMTUgMTUgMjUuNSAxMC41dDEwLjUgLTI1LjV2LTE0OWg2MDB2MTQ5cTAgMjEgMTAuNSAyNS41dDI1LjUgLTEwLjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTEyMTsiIGQ9Ik0xMTY5IDQwMGwtMTcyIDczMnEtNSAyMyAtMjMgNDUuNXQtMzggMjIuNWgtNjcycS0yMCAwIC0zOCAtMjB0LTIzIC00MWwtMTcyIC03MzloMTEzOHpNMTEwMCAzMDBoLTEwMDBxLTQxIDAgLTcwLjUgLTI5LjV0LTI5LjUgLTcwLjV2LTEwMHEwIC00MSAyOS41IC03MC41dDcwLjUgLTI5LjVoMTAwMHE0MSAwIDcwLjUgMjkuNXQyOS41IDcwLjV2MTAwcTAgNDEgLTI5LjUgNzAuNXQtNzAuNSAyOS41ek04MDAgMTAwdjEwMGgxMDB2LTEwMGgtMTAwIHpNMTAwMCAxMDB2MTAwaDEwMHYtMTAwaC0xMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTEyMjsiIGQ9Ik0xMTUwIDExMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTg1MHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNXQtMzUuNSAxNC41dC0xNC41IDM1LjV2ODUwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNMTAwMCAyMDBsLTY3NSAyMDBoLTM4bDQ3IC0yNzZxMyAtMTYgLTUuNSAtMjB0LTI5LjUgLTRoLTdoLTg0cS0yMCAwIC0zNC41IDE0dC0xOC41IDM1cS01NSAzMzcgLTU1IDM1MXYyNTB2NnEwIDE2IDEgMjMuNXQ2LjUgMTQgdDE3LjUgNi41aDIwMGw2NzUgMjUwdi04NTB6TTAgNzUwdi0yNTBxLTQgMCAtMTEgMC41dC0yNCA2dC0zMCAxNXQtMjQgMzB0LTExIDQ4LjV2NTBxMCAyNiAxMC41IDQ2dDI1IDMwdDI5IDE2dDI1LjUgN3oiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMTIzOyIgZD0iTTU1MyAxMjAwaDk0cTIwIDAgMjkgLTEwLjV0MyAtMjkuNWwtMTggLTM3cTgzIC0xOSAxNDQgLTgyLjV0NzYgLTE0MC41bDYzIC0zMjdsMTE4IC0xNzNoMTdxMTkgMCAzMyAtMTQuNXQxNCAtMzV0LTEzIC00MC41dC0zMSAtMjdxLTggLTQgLTIzIC05LjV0LTY1IC0xOS41dC0xMDMgLTI1dC0xMzIuNSAtMjB0LTE1OC41IC05cS01NyAwIC0xMTUgNXQtMTA0IDEydC04OC41IDE1LjV0LTczLjUgMTcuNXQtNTQuNSAxNnQtMzUuNSAxMmwtMTEgNCBxLTE4IDggLTMxIDI4dC0xMyA0MC41dDE0IDM1dDMzIDE0LjVoMTdsMTE4IDE3M2w2MyAzMjdxMTUgNzcgNzYgMTQwdDE0NCA4M2wtMTggMzJxLTYgMTkgMy41IDMydDI4LjUgMTN6TTQ5OCAxMTBxNTAgLTYgMTAyIC02cTUzIDAgMTAyIDZxLTEyIC00OSAtMzkuNSAtNzkuNXQtNjIuNSAtMzAuNXQtNjMgMzAuNXQtMzkgNzkuNXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMTI0OyIgZD0iTTgwMCA5NDZsMjI0IDc4bC03OCAtMjI0bDIzNCAtNDVsLTE4MCAtMTU1bDE4MCAtMTU1bC0yMzQgLTQ1bDc4IC0yMjRsLTIyNCA3OGwtNDUgLTIzNGwtMTU1IDE4MGwtMTU1IC0xODBsLTQ1IDIzNGwtMjI0IC03OGw3OCAyMjRsLTIzNCA0NWwxODAgMTU1bC0xODAgMTU1bDIzNCA0NWwtNzggMjI0bDIyNCAtNzhsNDUgMjM0bDE1NSAtMTgwbDE1NSAxODB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTEyNTsiIGQ9Ik02NTAgMTIwMGg1MHE0MCAwIDcwIC00MC41dDMwIC04NC41di0xNTBsLTI4IC0xMjVoMzI4cTQwIDAgNzAgLTQwLjV0MzAgLTg0LjV2LTEwMHEwIC00NSAtMjkgLTc0bC0yMzggLTM0NHEtMTYgLTI0IC0zOCAtNDAuNXQtNDUgLTE2LjVoLTI1MHEtNyAwIC00MiAyNXQtNjYgNTBsLTMxIDI1aC02MXEtNDUgMCAtNzIuNSAxOHQtMjcuNSA1N3Y0MDBxMCAzNiAyMCA2M2wxNDUgMTk2bDk2IDE5OHExMyAyOCAzNy41IDQ4dDUxLjUgMjB6IE02NTAgMTEwMGwtMTAwIC0yMTJsLTE1MCAtMjEzdi0zNzVoMTAwbDEzNiAtMTAwaDIxNGwyNTAgMzc1djEyNWgtNDUwbDUwIDIyNXYxNzVoLTUwek01MCA4MDBoMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di01MDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTEwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2NTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMTI2OyIgZD0iTTYwMCAxMTAwaDI1MHEyMyAwIDQ1IC0xNi41dDM4IC00MC41bDIzOCAtMzQ0cTI5IC0yOSAyOSAtNzR2LTEwMHEwIC00NCAtMzAgLTg0LjV0LTcwIC00MC41aC0zMjhxMjggLTExOCAyOCAtMTI1di0xNTBxMCAtNDQgLTMwIC04NC41dC03MCAtNDAuNWgtNTBxLTI3IDAgLTUxLjUgMjB0LTM3LjUgNDhsLTk2IDE5OGwtMTQ1IDE5NnEtMjAgMjcgLTIwIDYzdjQwMHEwIDM5IDI3LjUgNTd0NzIuNSAxOGg2MXExMjQgMTAwIDEzOSAxMDB6IE01MCAxMDAwaDEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djUwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTYzNiAxMDAwbC0xMzYgLTEwMGgtMTAwdi0zNzVsMTUwIC0yMTNsMTAwIC0yMTJoNTB2MTc1bC01MCAyMjVoNDUwdjEyNWwtMjUwIDM3NWgtMjE0eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxMjc7IiBkPSJNMzU2IDg3M2wzNjMgMjMwcTMxIDE2IDUzIC02bDExMCAtMTEycTEzIC0xMyAxMy41IC0zMnQtMTEuNSAtMzRsLTg0IC0xMjFoMzAycTg0IDAgMTM4IC0zOHQ1NCAtMTEwdC01NSAtMTExdC0xMzkgLTM5aC0xMDZsLTEzMSAtMzM5cS02IC0yMSAtMTkuNSAtNDF0LTI4LjUgLTIwaC0zNDJxLTcgMCAtOTAgODF0LTgzIDk0djUyNXEwIDE3IDE0IDM1LjV0MjggMjguNXpNNDAwIDc5MnYtNTAzbDEwMCAtODloMjkzbDEzMSAzMzkgcTYgMjEgMTkuNSA0MXQyOC41IDIwaDIwM3EyMSAwIDMwLjUgMjV0MC41IDUwdC0zMSAyNWgtNDU2aC03aC02aC01LjV0LTYgMC41dC01IDEuNXQtNSAydC00IDIuNXQtNCA0dC0yLjUgNC41cS0xMiAyNSA1IDQ3bDE0NiAxODNsLTg2IDgzek01MCA4MDBoMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di01MDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTEwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2NTAwIHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTEyODsiIGQ9Ik00NzUgMTEwM2wzNjYgLTIzMHEyIC0xIDYgLTMuNXQxNCAtMTAuNXQxOCAtMTYuNXQxNC41IC0yMHQ2LjUgLTIyLjV2LTUyNXEwIC0xMyAtODYgLTk0dC05MyAtODFoLTM0MnEtMTUgMCAtMjguNSAyMHQtMTkuNSA0MWwtMTMxIDMzOWgtMTA2cS04NSAwIC0xMzkuNSAzOXQtNTQuNSAxMTF0NTQgMTEwdDEzOCAzOGgzMDJsLTg1IDEyMXEtMTEgMTUgLTEwLjUgMzR0MTMuNSAzMmwxMTAgMTEycTIyIDIyIDUzIDZ6TTM3MCA5NDVsMTQ2IC0xODMgcTE3IC0yMiA1IC00N3EtMiAtMiAtMy41IC00LjV0LTQgLTR0LTQgLTIuNXQtNSAtMnQtNSAtMS41dC02IC0wLjVoLTZoLTYuNWgtNmgtNDc1di0xMDBoMjIxcTE1IDAgMjkgLTIwdDIwIC00MWwxMzAgLTMzOWgyOTRsMTA2IDg5djUwM2wtMzQyIDIzNnpNMTA1MCA4MDBoMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di01MDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTEwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjUgdjUwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTEyOTsiIGQ9Ik01NTAgMTI5NHE3MiAwIDExMSAtNTV0MzkgLTEzOXYtMTA2bDMzOSAtMTMxcTIxIC02IDQxIC0xOS41dDIwIC0yOC41di0zNDJxMCAtNyAtODEgLTkwdC05NCAtODNoLTUyNXEtMTcgMCAtMzUuNSAxNHQtMjguNSAyOGwtOSAxNGwtMjMwIDM2M3EtMTYgMzEgNiA1M2wxMTIgMTEwcTEzIDEzIDMyIDEzLjV0MzQgLTExLjVsMTIxIC04NHYzMDJxMCA4NCAzOCAxMzh0MTEwIDU0ek02MDAgOTcydjIwM3EwIDIxIC0yNSAzMC41dC01MCAwLjUgdC0yNSAtMzF2LTQ1NnYtN3YtNnYtNS41dC0wLjUgLTZ0LTEuNSAtNXQtMiAtNXQtMi41IC00dC00IC00dC00LjUgLTIuNXEtMjUgLTEyIC00NyA1bC0xODMgMTQ2bC04MyAtODZsMjM2IC0zMzloNTAzbDg5IDEwMHYyOTNsLTMzOSAxMzFxLTIxIDYgLTQxIDE5LjV0LTIwIDI4LjV6TTQ1MCAyMDBoNTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTUwMCBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTEzMDsiIGQ9Ik0zNTAgMTEwMGg1MDBxMjEgMCAzNS41IDE0LjV0MTQuNSAzNS41djEwMHEwIDIxIC0xNC41IDM1LjV0LTM1LjUgMTQuNWgtNTAwcS0yMSAwIC0zNS41IC0xNC41dC0xNC41IC0zNS41di0xMDBxMCAtMjEgMTQuNSAtMzUuNXQzNS41IC0xNC41ek02MDAgMzA2di0xMDZxMCAtODQgLTM5IC0xMzl0LTExMSAtNTV0LTExMCA1NHQtMzggMTM4djMwMmwtMTIxIC04NHEtMTUgLTEyIC0zNCAtMTEuNXQtMzIgMTMuNWwtMTEyIDExMCBxLTIyIDIyIC02IDUzbDIzMCAzNjNxMSAyIDMuNSA2dDEwLjUgMTMuNXQxNi41IDE3dDIwIDEzLjV0MjIuNSA2aDUyNXExMyAwIDk0IC04M3Q4MSAtOTB2LTM0MnEwIC0xNSAtMjAgLTI4LjV0LTQxIC0xOS41ek0zMDggOTAwbC0yMzYgLTMzOWw4MyAtODZsMTgzIDE0NnEyMiAxNyA0NyA1cTIgLTEgNC41IC0yLjV0NCAtNHQyLjUgLTR0MiAtNXQxLjUgLTV0MC41IC02di01LjV2LTZ2LTd2LTQ1NnEwIC0yMiAyNSAtMzF0NTAgMC41dDI1IDMwLjUgdjIwM3EwIDE1IDIwIDI4LjV0NDEgMTkuNWwzMzkgMTMxdjI5M2wtODkgMTAwaC01MDN6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTEzMTsiIGQ9Ik02MDAgMTE3OHExMTggMCAyMjUgLTQ1LjV0MTg0LjUgLTEyM3QxMjMgLTE4NC41dDQ1LjUgLTIyNXQtNDUuNSAtMjI1dC0xMjMgLTE4NC41dC0xODQuNSAtMTIzdC0yMjUgLTQ1LjV0LTIyNSA0NS41dC0xODQuNSAxMjN0LTEyMyAxODQuNXQtNDUuNSAyMjV0NDUuNSAyMjV0MTIzIDE4NC41dDE4NC41IDEyM3QyMjUgNDUuNXpNOTE0IDYzMmwtMjc1IDIyM3EtMTYgMTMgLTI3LjUgOHQtMTEuNSAtMjZ2LTEzN2gtMjc1IHEtMTAgMCAtMTcuNSAtNy41dC03LjUgLTE3LjV2LTE1MHEwIC0xMCA3LjUgLTE3LjV0MTcuNSAtNy41aDI3NXYtMTM3cTAgLTIxIDExLjUgLTI2dDI3LjUgOGwyNzUgMjIzcTE2IDEzIDE2IDMydC0xNiAzMnoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMTMyOyIgZD0iTTYwMCAxMTc4cTExOCAwIDIyNSAtNDUuNXQxODQuNSAtMTIzdDEyMyAtMTg0LjV0NDUuNSAtMjI1dC00NS41IC0yMjV0LTEyMyAtMTg0LjV0LTE4NC41IC0xMjN0LTIyNSAtNDUuNXQtMjI1IDQ1LjV0LTE4NC41IDEyM3QtMTIzIDE4NC41dC00NS41IDIyNXQ0NS41IDIyNXQxMjMgMTg0LjV0MTg0LjUgMTIzdDIyNSA0NS41ek01NjEgODU1bC0yNzUgLTIyM3EtMTYgLTEzIC0xNiAtMzJ0MTYgLTMybDI3NSAtMjIzcTE2IC0xMyAyNy41IC04IHQxMS41IDI2djEzN2gyNzVxMTAgMCAxNy41IDcuNXQ3LjUgMTcuNXYxNTBxMCAxMCAtNy41IDE3LjV0LTE3LjUgNy41aC0yNzV2MTM3cTAgMjEgLTExLjUgMjZ0LTI3LjUgLTh6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTEzMzsiIGQ9Ik02MDAgMTE3OHExMTggMCAyMjUgLTQ1LjV0MTg0LjUgLTEyM3QxMjMgLTE4NC41dDQ1LjUgLTIyNXQtNDUuNSAtMjI1dC0xMjMgLTE4NC41dC0xODQuNSAtMTIzdC0yMjUgLTQ1LjV0LTIyNSA0NS41dC0xODQuNSAxMjN0LTEyMyAxODQuNXQtNDUuNSAyMjV0NDUuNSAyMjV0MTIzIDE4NC41dDE4NC41IDEyM3QyMjUgNDUuNXpNODU1IDYzOWwtMjIzIDI3NXEtMTMgMTYgLTMyIDE2dC0zMiAtMTZsLTIyMyAtMjc1cS0xMyAtMTYgLTggLTI3LjUgdDI2IC0xMS41aDEzN3YtMjc1cTAgLTEwIDcuNSAtMTcuNXQxNy41IC03LjVoMTUwcTEwIDAgMTcuNSA3LjV0Ny41IDE3LjV2Mjc1aDEzN3EyMSAwIDI2IDExLjV0LTggMjcuNXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMTM0OyIgZD0iTTYwMCAxMTc4cTExOCAwIDIyNSAtNDUuNXQxODQuNSAtMTIzdDEyMyAtMTg0LjV0NDUuNSAtMjI1dC00NS41IC0yMjV0LTEyMyAtMTg0LjV0LTE4NC41IC0xMjN0LTIyNSAtNDUuNXQtMjI1IDQ1LjV0LTE4NC41IDEyM3QtMTIzIDE4NC41dC00NS41IDIyNXQ0NS41IDIyNXQxMjMgMTg0LjV0MTg0LjUgMTIzdDIyNSA0NS41ek02NzUgOTAwaC0xNTBxLTEwIDAgLTE3LjUgLTcuNXQtNy41IC0xNy41di0yNzVoLTEzN3EtMjEgMCAtMjYgLTExLjUgdDggLTI3LjVsMjIzIC0yNzVxMTMgLTE2IDMyIC0xNnQzMiAxNmwyMjMgMjc1cTEzIDE2IDggMjcuNXQtMjYgMTEuNWgtMTM3djI3NXEwIDEwIC03LjUgMTcuNXQtMTcuNSA3LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTEzNTsiIGQ9Ik02MDAgMTE3NnExMTYgMCAyMjIuNSAtNDZ0MTg0IC0xMjMuNXQxMjMuNSAtMTg0dDQ2IC0yMjIuNXQtNDYgLTIyMi41dC0xMjMuNSAtMTg0dC0xODQgLTEyMy41dC0yMjIuNSAtNDZ0LTIyMi41IDQ2dC0xODQgMTIzLjV0LTEyMy41IDE4NHQtNDYgMjIyLjV0NDYgMjIyLjV0MTIzLjUgMTg0dDE4NCAxMjMuNXQyMjIuNSA0NnpNNjI3IDExMDFxLTE1IC0xMiAtMzYuNSAtMjAuNXQtMzUuNSAtMTJ0LTQzIC04dC0zOSAtNi41IHEtMTUgLTMgLTQ1LjUgMHQtNDUuNSAtMnEtMjAgLTcgLTUxLjUgLTI2LjV0LTM0LjUgLTM0LjVxLTMgLTExIDYuNSAtMjIuNXQ4LjUgLTE4LjVxLTMgLTM0IC0yNy41IC05MXQtMjkuNSAtNzlxLTkgLTM0IDUgLTkzdDggLTg3cTAgLTkgMTcgLTQ0LjV0MTYgLTU5LjVxMTIgMCAyMyAtNXQyMy41IC0xNXQxOS41IC0xNHExNiAtOCAzMyAtMTV0NDAuNSAtMTV0MzQuNSAtMTJxMjEgLTkgNTIuNSAtMzJ0NjAgLTM4dDU3LjUgLTExIHE3IC0xNSAtMyAtMzR0LTIyLjUgLTQwdC05LjUgLTM4cTEzIC0yMSAyMyAtMzQuNXQyNy41IC0yNy41dDM2LjUgLTE4cTAgLTcgLTMuNSAtMTZ0LTMuNSAtMTR0NSAtMTdxMTA0IC0yIDIyMSAxMTJxMzAgMjkgNDYuNSA0N3QzNC41IDQ5dDIxIDYzcS0xMyA4IC0zNyA4LjV0LTM2IDcuNXEtMTUgNyAtNDkuNSAxNXQtNTEuNSAxOXEtMTggMCAtNDEgLTAuNXQtNDMgLTEuNXQtNDIgLTYuNXQtMzggLTE2LjVxLTUxIC0zNSAtNjYgLTEyIHEtNCAxIC0zLjUgMjUuNXQwLjUgMjUuNXEtNiAxMyAtMjYuNSAxNy41dC0yNC41IDYuNXExIDE1IC0wLjUgMzAuNXQtNyAyOHQtMTguNSAxMS41dC0zMSAtMjFxLTIzIC0yNSAtNDIgNHEtMTkgMjggLTggNThxNiAxNiAyMiAyMnE2IC0xIDI2IC0xLjV0MzMuNSAtNHQxOS41IC0xMy41cTcgLTEyIDE4IC0yNHQyMS41IC0yMC41dDIwIC0xNXQxNS41IC0xMC41bDUgLTNxMiAxMiA3LjUgMzAuNXQ4IDM0LjV0LTAuNSAzMnEtMyAxOCAzLjUgMjkgdDE4IDIyLjV0MTUuNSAyNC41cTYgMTQgMTAuNSAzNXQ4IDMxdDE1LjUgMjIuNXQzNCAyMi41cS02IDE4IDEwIDM2cTggMCAyNCAtMS41dDI0LjUgLTEuNXQyMCA0LjV0MjAuNSAxNS41cS0xMCAyMyAtMzEgNDIuNXQtMzcuNSAyOS41dC00OSAyN3QtNDMuNSAyM3EwIDEgMiA4dDMgMTEuNXQxLjUgMTAuNXQtMSA5LjV0LTQuNSA0LjVxMzEgLTEzIDU4LjUgLTE0LjV0MzguNSAyLjVsMTIgNXE1IDI4IC05LjUgNDZ0LTM2LjUgMjR0LTUwIDE1IHQtNDEgMjBxLTE4IC00IC0zNyAwek02MTMgOTk0cTAgLTE3IDggLTQydDE3IC00NXQ5IC0yM3EtOCAxIC0zOS41IDUuNXQtNTIuNSAxMHQtMzcgMTYuNXEzIDExIDE2IDI5LjV0MTYgMjUuNXExMCAtMTAgMTkgLTEwdDE0IDZ0MTMuNSAxNC41dDE2LjUgMTIuNXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMTM2OyIgZD0iTTc1NiAxMTU3cTE2NCA5MiAzMDYgLTlsLTI1OSAtMTM4bDE0NSAtMjMybDI1MSAxMjZxNiAtODkgLTM0IC0xNTYuNXQtMTE3IC0xMTAuNXEtNjAgLTM0IC0xMjcgLTM5LjV0LTEyNiAxNi41bC01OTYgLTU5NnEtMTUgLTE2IC0zNi41IC0xNnQtMzYuNSAxNmwtMTExIDExMHEtMTUgMTUgLTE1IDM2LjV0MTUgMzcuNWw2MDAgNTk5cS0zNCAxMDEgNS41IDIwMS41dDEzNS41IDE1NC41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxMzc7IiBob3Jpei1hZHYteD0iMTIyMCIgZD0iTTEwMCAxMTk2aDEwMDBxNDEgMCA3MC41IC0yOS41dDI5LjUgLTcwLjV2LTEwMHEwIC00MSAtMjkuNSAtNzAuNXQtNzAuNSAtMjkuNWgtMTAwMHEtNDEgMCAtNzAuNSAyOS41dC0yOS41IDcwLjV2MTAwcTAgNDEgMjkuNSA3MC41dDcwLjUgMjkuNXpNMTEwMCAxMDk2aC0yMDB2LTEwMGgyMDB2MTAwek0xMDAgNzk2aDEwMDBxNDEgMCA3MC41IC0yOS41dDI5LjUgLTcwLjV2LTEwMHEwIC00MSAtMjkuNSAtNzAuNXQtNzAuNSAtMjkuNWgtMTAwMCBxLTQxIDAgLTcwLjUgMjkuNXQtMjkuNSA3MC41djEwMHEwIDQxIDI5LjUgNzAuNXQ3MC41IDI5LjV6TTExMDAgNjk2aC01MDB2LTEwMGg1MDB2MTAwek0xMDAgMzk2aDEwMDBxNDEgMCA3MC41IC0yOS41dDI5LjUgLTcwLjV2LTEwMHEwIC00MSAtMjkuNSAtNzAuNXQtNzAuNSAtMjkuNWgtMTAwMHEtNDEgMCAtNzAuNSAyOS41dC0yOS41IDcwLjV2MTAwcTAgNDEgMjkuNSA3MC41dDcwLjUgMjkuNXpNMTEwMCAyOTZoLTMwMHYtMTAwaDMwMHYxMDB6ICIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxMzg7IiBkPSJNMTUwIDEyMDBoOTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41dC0xNC41IC0zNS41dC0zNS41IC0xNC41aC05MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41dDE0LjUgMzUuNXQzNS41IDE0LjV6TTcwMCA1MDB2LTMwMGwtMjAwIC0yMDB2NTAwbC0zNTAgNTAwaDkwMHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMTM5OyIgZD0iTTUwMCAxMjAwaDIwMHE0MSAwIDcwLjUgLTI5LjV0MjkuNSAtNzAuNXYtMTAwaDMwMHE0MSAwIDcwLjUgLTI5LjV0MjkuNSAtNzAuNXYtNDAwaC01MDB2MTAwaC0yMDB2LTEwMGgtNTAwdjQwMHEwIDQxIDI5LjUgNzAuNXQ3MC41IDI5LjVoMzAwdjEwMHEwIDQxIDI5LjUgNzAuNXQ3MC41IDI5LjV6TTUwMCAxMTAwdi0xMDBoMjAwdjEwMGgtMjAwek0xMjAwIDQwMHYtMjAwcTAgLTQxIC0yOS41IC03MC41dC03MC41IC0yOS41aC0xMDAwIHEtNDEgMCAtNzAuNSAyOS41dC0yOS41IDcwLjV2MjAwaDEyMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE0MDsiIGQ9Ik01MCAxMjAwaDMwMHEyMSAwIDI1IC0xMC41dC0xMCAtMjQuNWwtOTQgLTk0bDE5OSAtMTk5cTcgLTggNyAtMTh0LTcgLTE4bC0xMDYgLTEwNnEtOCAtNyAtMTggLTd0LTE4IDdsLTE5OSAxOTlsLTk0IC05NHEtMTQgLTE0IC0yNC41IC0xMHQtMTAuNSAyNXYzMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek04NTAgMTIwMGgzMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTMwMHEwIC0yMSAtMTAuNSAtMjV0LTI0LjUgMTBsLTk0IDk0IGwtMTk5IC0xOTlxLTggLTcgLTE4IC03dC0xOCA3bC0xMDYgMTA2cS03IDggLTcgMTh0NyAxOGwxOTkgMTk5bC05NCA5NHEtMTQgMTQgLTEwIDI0LjV0MjUgMTAuNXpNMzY0IDQ3MGwxMDYgLTEwNnE3IC04IDcgLTE4dC03IC0xOGwtMTk5IC0xOTlsOTQgLTk0cTE0IC0xNCAxMCAtMjQuNXQtMjUgLTEwLjVoLTMwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MzAwcTAgMjEgMTAuNSAyNXQyNC41IC0xMGw5NCAtOTRsMTk5IDE5OSBxOCA3IDE4IDd0MTggLTd6TTEwNzEgMjcxbDk0IDk0cTE0IDE0IDI0LjUgMTB0MTAuNSAtMjV2LTMwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMzAwcS0yMSAwIC0yNSAxMC41dDEwIDI0LjVsOTQgOTRsLTE5OSAxOTlxLTcgOCAtNyAxOHQ3IDE4bDEwNiAxMDZxOCA3IDE4IDd0MTggLTd6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE0MTsiIGQ9Ik01OTYgMTE5MnExMjEgMCAyMzEuNSAtNDcuNXQxOTAgLTEyN3QxMjcgLTE5MHQ0Ny41IC0yMzEuNXQtNDcuNSAtMjMxLjV0LTEyNyAtMTkwLjV0LTE5MCAtMTI3dC0yMzEuNSAtNDd0LTIzMS41IDQ3dC0xOTAuNSAxMjd0LTEyNyAxOTAuNXQtNDcgMjMxLjV0NDcgMjMxLjV0MTI3IDE5MHQxOTAuNSAxMjd0MjMxLjUgNDcuNXpNNTk2IDEwMTBxLTExMiAwIC0yMDcuNSAtNTUuNXQtMTUxIC0xNTF0LTU1LjUgLTIwNy41dDU1LjUgLTIwNy41IHQxNTEgLTE1MXQyMDcuNSAtNTUuNXQyMDcuNSA1NS41dDE1MSAxNTF0NTUuNSAyMDcuNXQtNTUuNSAyMDcuNXQtMTUxIDE1MXQtMjA3LjUgNTUuNXpNNDU0LjUgOTA1cTIyLjUgMCAzOC41IC0xNnQxNiAtMzguNXQtMTYgLTM5dC0zOC41IC0xNi41dC0zOC41IDE2LjV0LTE2IDM5dDE2IDM4LjV0MzguNSAxNnpNNzU0LjUgOTA1cTIyLjUgMCAzOC41IC0xNnQxNiAtMzguNXQtMTYgLTM5dC0zOCAtMTYuNXEtMTQgMCAtMjkgMTBsLTU1IC0xNDUgcTE3IC0yMyAxNyAtNTFxMCAtMzYgLTI1LjUgLTYxLjV0LTYxLjUgLTI1LjV0LTYxLjUgMjUuNXQtMjUuNSA2MS41cTAgMzIgMjAuNSA1Ni41dDUxLjUgMjkuNWwxMjIgMTI2bDEgMXEtOSAxNCAtOSAyOHEwIDIzIDE2IDM5dDM4LjUgMTZ6TTM0NS41IDcwOXEyMi41IDAgMzguNSAtMTZ0MTYgLTM4LjV0LTE2IC0zOC41dC0zOC41IC0xNnQtMzguNSAxNnQtMTYgMzguNXQxNiAzOC41dDM4LjUgMTZ6TTg1NC41IDcwOXEyMi41IDAgMzguNSAtMTYgdDE2IC0zOC41dC0xNiAtMzguNXQtMzguNSAtMTZ0LTM4LjUgMTZ0LTE2IDM4LjV0MTYgMzguNXQzOC41IDE2eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNDI7IiBkPSJNNTQ2IDE3M2w0NjkgNDcwcTkxIDkxIDk5IDE5MnE3IDk4IC01MiAxNzUuNXQtMTU0IDk0LjVxLTIyIDQgLTQ3IDRxLTM0IDAgLTY2LjUgLTEwdC01Ni41IC0yM3QtNTUuNSAtMzh0LTQ4IC00MS41dC00OC41IC00Ny41cS0zNzYgLTM3NSAtMzkxIC0zOTBxLTMwIC0yNyAtNDUgLTQxLjV0LTM3LjUgLTQxdC0zMiAtNDYuNXQtMTYgLTQ3LjV0LTEuNSAtNTYuNXE5IC02MiA1My41IC05NXQ5OS41IC0zM3E3NCAwIDEyNSA1MWw1NDggNTQ4IHEzNiAzNiAyMCA3NXEtNyAxNiAtMjEuNSAyNnQtMzIuNSAxMHEtMjYgMCAtNTAgLTIzcS0xMyAtMTIgLTM5IC0zOGwtMzQxIC0zMzhxLTE1IC0xNSAtMzUuNSAtMTUuNXQtMzQuNSAxMy41dC0xNCAzNC41dDE0IDM0LjVxMzI3IDMzMyAzNjEgMzY3cTM1IDM1IDY3LjUgNTEuNXQ3OC41IDE2LjVxMTQgMCAyOSAtMXE0NCAtOCA3NC41IC0zNS41dDQzLjUgLTY4LjVxMTQgLTQ3IDIgLTk2LjV0LTQ3IC04NC41cS0xMiAtMTEgLTMyIC0zMiB0LTc5LjUgLTgxdC0xMTQuNSAtMTE1dC0xMjQuNSAtMTIzLjV0LTEyMyAtMTE5LjV0LTk2LjUgLTg5dC01NyAtNDVxLTU2IC0yNyAtMTIwIC0yN3EtNzAgMCAtMTI5IDMydC05MyA4OXEtNDggNzggLTM1IDE3M3Q4MSAxNjNsNTExIDUxMXE3MSA3MiAxMTEgOTZxOTEgNTUgMTk4IDU1cTgwIDAgMTUyIC0zM3E3OCAtMzYgMTI5LjUgLTEwM3Q2Ni41IC0xNTRxMTcgLTkzIC0xMSAtMTgzLjV0LTk0IC0xNTYuNWwtNDgyIC00NzYgcS0xNSAtMTUgLTM2IC0xNnQtMzcgMTR0LTE3LjUgMzR0MTQuNSAzNXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMTQzOyIgZD0iTTY0OSA5NDlxNDggNjggMTA5LjUgMTA0dDEyMS41IDM4LjV0MTE4LjUgLTIwdDEwMi41IC02NHQ3MSAtMTAwLjV0MjcgLTEyM3EwIC01NyAtMzMuNSAtMTE3LjV0LTk0IC0xMjQuNXQtMTI2LjUgLTEyNy41dC0xNTAgLTE1Mi41dC0xNDYgLTE3NHEtNjIgODUgLTE0NS41IDE3NHQtMTUwIDE1Mi41dC0xMjYuNSAxMjcuNXQtOTMuNSAxMjQuNXQtMzMuNSAxMTcuNXEwIDY0IDI4IDEyM3Q3MyAxMDAuNXQxMDQgNjR0MTE5IDIwIHQxMjAuNSAtMzguNXQxMDQuNSAtMTA0ek04OTYgOTcycS0zMyAwIC02NC41IC0xOXQtNTYuNSAtNDZ0LTQ3LjUgLTUzLjV0LTQzLjUgLTQ1LjV0LTM3LjUgLTE5dC0zNiAxOXQtNDAgNDUuNXQtNDMgNTMuNXQtNTQgNDZ0LTY1LjUgMTlxLTY3IDAgLTEyMi41IC01NS41dC01NS41IC0xMzIuNXEwIC0yMyAxMy41IC01MXQ0NiAtNjV0NTcuNSAtNjN0NzYgLTc1bDIyIC0yMnExNSAtMTQgNDQgLTQ0dDUwLjUgLTUxdDQ2IC00NHQ0MSAtMzV0MjMgLTEyIHQyMy41IDEydDQyLjUgMzZ0NDYgNDR0NTIuNSA1MnQ0NCA0M3E0IDQgMTIgMTNxNDMgNDEgNjMuNSA2MnQ1MiA1NXQ0NiA1NXQyNiA0NnQxMS41IDQ0cTAgNzkgLTUzIDEzMy41dC0xMjAgNTQuNXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMTQ0OyIgZD0iTTc3Ni41IDEyMTRxOTMuNSAwIDE1OS41IC02NmwxNDEgLTE0MXE2NiAtNjYgNjYgLTE2MHEwIC00MiAtMjggLTk1LjV0LTYyIC04Ny41bC0yOSAtMjlxLTMxIDUzIC03NyA5OWwtMTggMThsOTUgOTVsLTI0NyAyNDhsLTM4OSAtMzg5bDIxMiAtMjEybC0xMDUgLTEwNmwtMTkgMThsLTE0MSAxNDFxLTY2IDY2IC02NiAxNTl0NjYgMTU5bDI4MyAyODNxNjUgNjYgMTU4LjUgNjZ6TTYwMCA3MDZsMTA1IDEwNXExMCAtOCAxOSAtMTdsMTQxIC0xNDEgcTY2IC02NiA2NiAtMTU5dC02NiAtMTU5bC0yODMgLTI4M3EtNjYgLTY2IC0xNTkgLTY2dC0xNTkgNjZsLTE0MSAxNDFxLTY2IDY2IC02NiAxNTkuNXQ2NiAxNTkuNWw1NSA1NXEyOSAtNTUgNzUgLTEwMmwxOCAtMTdsLTk1IC05NWwyNDcgLTI0OGwzODkgMzg5eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNDU7IiBkPSJNNjAzIDEyMDBxODUgMCAxNjIgLTE1dDEyNyAtMzh0NzkgLTQ4dDI5IC00NnYtOTUzcTAgLTQxIC0yOS41IC03MC41dC03MC41IC0yOS41aC02MDBxLTQxIDAgLTcwLjUgMjkuNXQtMjkuNSA3MC41djk1M3EwIDIxIDMwIDQ2LjV0ODEgNDh0MTI5IDM3LjV0MTYzIDE1ek0zMDAgMTAwMHYtNzAwaDYwMHY3MDBoLTYwMHpNNjAwIDI1NHEtNDMgMCAtNzMuNSAtMzAuNXQtMzAuNSAtNzMuNXQzMC41IC03My41dDczLjUgLTMwLjV0NzMuNSAzMC41IHQzMC41IDczLjV0LTMwLjUgNzMuNXQtNzMuNSAzMC41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNDY7IiBkPSJNOTAyIDExODVsMjgzIC0yODJxMTUgLTE1IDE1IC0zNnQtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNXQtMzUgMTVsLTM2IDM1bC0yNzkgLTI2N3YtMzAwbC0yMTIgMjEwbC0zMDggLTMwN2wtMjgwIC0yMDNsMjAzIDI4MGwzMDcgMzA4bC0yMTAgMjEyaDMwMGwyNjcgMjc5bC0zNSAzNnEtMTUgMTQgLTE1IDM1dDE0LjUgMzUuNXQzNS41IDE0LjV0MzUgLTE1eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNDg7IiBkPSJNNzAwIDEyNDh2LTc4cTM4IC01IDcyLjUgLTE0LjV0NzUuNSAtMzEuNXQ3MSAtNTMuNXQ1MiAtODR0MjQgLTExOC41aC0xNTlxLTQgMzYgLTEwLjUgNTl0LTIxIDQ1dC00MCAzNS41dC02NC41IDIwLjV2LTMwN2w2NCAtMTNxMzQgLTcgNjQgLTE2LjV0NzAgLTMydDY3LjUgLTUyLjV0NDcuNSAtODB0MjAgLTExMnEwIC0xMzkgLTg5IC0yMjR0LTI0NCAtOTd2LTc3aC0xMDB2NzlxLTE1MCAxNiAtMjM3IDEwM3EtNDAgNDAgLTUyLjUgOTMuNSB0LTE1LjUgMTM5LjVoMTM5cTUgLTc3IDQ4LjUgLTEyNnQxMTcuNSAtNjV2MzM1bC0yNyA4cS00NiAxNCAtNzkgMjYuNXQtNzIgMzZ0LTYzIDUydC00MCA3Mi41dC0xNiA5OHEwIDcwIDI1IDEyNnQ2Ny41IDkydDk0LjUgNTd0MTEwIDI3djc3aDEwMHpNNjAwIDc1NHYyNzRxLTI5IC00IC01MCAtMTF0LTQyIC0yMS41dC0zMS41IC00MS41dC0xMC41IC02NXEwIC0yOSA3IC01MC41dDE2LjUgLTM0dDI4LjUgLTIyLjV0MzEuNSAtMTR0MzcuNSAtMTAgcTkgLTMgMTMgLTR6TTcwMCA1NDd2LTMxMHEyMiAyIDQyLjUgNi41dDQ1IDE1LjV0NDEuNSAyN3QyOSA0MnQxMiA1OS41dC0xMi41IDU5LjV0LTM4IDQ0LjV0LTUzIDMxdC02Ni41IDI0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE0OTsiIGQ9Ik01NjEgMTE5N3E4NCAwIDE2MC41IC00MHQxMjMuNSAtMTA5LjV0NDcgLTE0Ny41aC0xNTNxMCA0MCAtMTkuNSA3MS41dC00OS41IDQ4LjV0LTU5LjUgMjZ0LTU1LjUgOXEtMzcgMCAtNzkgLTE0LjV0LTYyIC0zNS41cS00MSAtNDQgLTQxIC0xMDFxMCAtMjYgMTMuNSAtNjN0MjYuNSAtNjF0MzcgLTY2cTYgLTkgOSAtMTRoMjQxdi0xMDBoLTE5N3E4IC01MCAtMi41IC0xMTV0LTMxLjUgLTk1cS00NSAtNjIgLTk5IC0xMTIgcTM0IDEwIDgzIDE3LjV0NzEgNy41cTMyIDEgMTAyIC0xNnQxMDQgLTE3cTgzIDAgMTM2IDMwbDUwIC0xNDdxLTMxIC0xOSAtNTggLTMwLjV0LTU1IC0xNS41dC00MiAtNC41dC00NiAtMC41cS0yMyAwIC03NiAxN3QtMTExIDMyLjV0LTk2IDExLjVxLTM5IC0zIC04MiAtMTZ0LTY3IC0yNWwtMjMgLTExbC01NSAxNDVxNCAzIDE2IDExdDE1LjUgMTAuNXQxMyA5dDE1LjUgMTJ0MTQuNSAxNHQxNy41IDE4LjVxNDggNTUgNTQgMTI2LjUgdC0zMCAxNDIuNWgtMjIxdjEwMGgxNjZxLTIzIDQ3IC00NCAxMDRxLTcgMjAgLTEyIDQxLjV0LTYgNTUuNXQ2IDY2LjV0MjkuNSA3MC41dDU4LjUgNzFxOTcgODggMjYzIDg4eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNTA7IiBkPSJNNDAwIDMwMGgxNTBxMjEgMCAyNSAtMTF0LTEwIC0yNWwtMjMwIC0yNTBxLTE0IC0xNSAtMzUgLTE1dC0zNSAxNWwtMjMwIDI1MHEtMTQgMTQgLTEwIDI1dDI1IDExaDE1MHY5MDBoMjAwdi05MDB6TTkzNSAxMTg0bDIzMCAtMjQ5cTE0IC0xNCAxMCAtMjQuNXQtMjUgLTEwLjVoLTE1MHYtOTAwaC0yMDB2OTAwaC0xNTBxLTIxIDAgLTI1IDEwLjV0MTAgMjQuNWwyMzAgMjQ5cTE0IDE1IDM1IDE1dDM1IC0xNXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMTUxOyIgZD0iTTEwMDAgNzAwaC0xMDB2MTAwaC0xMDB2LTEwMGgtMTAwdjUwMGgzMDB2LTUwMHpNNDAwIDMwMGgxNTBxMjEgMCAyNSAtMTF0LTEwIC0yNWwtMjMwIC0yNTBxLTE0IC0xNSAtMzUgLTE1dC0zNSAxNWwtMjMwIDI1MHEtMTQgMTQgLTEwIDI1dDI1IDExaDE1MHY5MDBoMjAwdi05MDB6TTgwMSAxMTAwdi0yMDBoMTAwdjIwMGgtMTAwek0xMDAwIDM1MGwtMjAwIC0yNTBoMjAwdi0xMDBoLTMwMHYxNTBsMjAwIDI1MGgtMjAwdjEwMGgzMDB2LTE1MHogIiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE1MjsiIGQ9Ik00MDAgMzAwaDE1MHEyMSAwIDI1IC0xMXQtMTAgLTI1bC0yMzAgLTI1MHEtMTQgLTE1IC0zNSAtMTV0LTM1IDE1bC0yMzAgMjUwcS0xNCAxNCAtMTAgMjV0MjUgMTFoMTUwdjkwMGgyMDB2LTkwMHpNMTAwMCAxMDUwbC0yMDAgLTI1MGgyMDB2LTEwMGgtMzAwdjE1MGwyMDAgMjUwaC0yMDB2MTAwaDMwMHYtMTUwek0xMDAwIDBoLTEwMHYxMDBoLTEwMHYtMTAwaC0xMDB2NTAwaDMwMHYtNTAwek04MDEgNDAwdi0yMDBoMTAwdjIwMGgtMTAweiAiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMTUzOyIgZD0iTTQwMCAzMDBoMTUwcTIxIDAgMjUgLTExdC0xMCAtMjVsLTIzMCAtMjUwcS0xNCAtMTUgLTM1IC0xNXQtMzUgMTVsLTIzMCAyNTBxLTE0IDE0IC0xMCAyNXQyNSAxMWgxNTB2OTAwaDIwMHYtOTAwek0xMDAwIDcwMGgtMTAwdjQwMGgtMTAwdjEwMGgyMDB2LTUwMHpNMTEwMCAwaC0xMDB2MTAwaC0yMDB2NDAwaDMwMHYtNTAwek05MDEgNDAwdi0yMDBoMTAwdjIwMGgtMTAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNTQ7IiBkPSJNNDAwIDMwMGgxNTBxMjEgMCAyNSAtMTF0LTEwIC0yNWwtMjMwIC0yNTBxLTE0IC0xNSAtMzUgLTE1dC0zNSAxNWwtMjMwIDI1MHEtMTQgMTQgLTEwIDI1dDI1IDExaDE1MHY5MDBoMjAwdi05MDB6TTExMDAgNzAwaC0xMDB2MTAwaC0yMDB2NDAwaDMwMHYtNTAwek05MDEgMTEwMHYtMjAwaDEwMHYyMDBoLTEwMHpNMTAwMCAwaC0xMDB2NDAwaC0xMDB2MTAwaDIwMHYtNTAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNTU7IiBkPSJNNDAwIDMwMGgxNTBxMjEgMCAyNSAtMTF0LTEwIC0yNWwtMjMwIC0yNTBxLTE0IC0xNSAtMzUgLTE1dC0zNSAxNWwtMjMwIDI1MHEtMTQgMTQgLTEwIDI1dDI1IDExaDE1MHY5MDBoMjAwdi05MDB6TTkwMCAxMDAwaC0yMDB2MjAwaDIwMHYtMjAwek0xMDAwIDcwMGgtMzAwdjIwMGgzMDB2LTIwMHpNMTEwMCA0MDBoLTQwMHYyMDBoNDAwdi0yMDB6TTEyMDAgMTAwaC01MDB2MjAwaDUwMHYtMjAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNTY7IiBkPSJNNDAwIDMwMGgxNTBxMjEgMCAyNSAtMTF0LTEwIC0yNWwtMjMwIC0yNTBxLTE0IC0xNSAtMzUgLTE1dC0zNSAxNWwtMjMwIDI1MHEtMTQgMTQgLTEwIDI1dDI1IDExaDE1MHY5MDBoMjAwdi05MDB6TTEyMDAgMTAwMGgtNTAwdjIwMGg1MDB2LTIwMHpNMTEwMCA3MDBoLTQwMHYyMDBoNDAwdi0yMDB6TTEwMDAgNDAwaC0zMDB2MjAwaDMwMHYtMjAwek05MDAgMTAwaC0yMDB2MjAwaDIwMHYtMjAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNTc7IiBkPSJNMzUwIDExMDBoNDAwcTE2MiAwIDI1NiAtOTMuNXQ5NCAtMjU2LjV2LTQwMHEwIC0xNjUgLTkzLjUgLTI1Ny41dC0yNTYuNSAtOTIuNWgtNDAwcS0xNjUgMCAtMjU3LjUgOTIuNXQtOTIuNSAyNTcuNXY0MDBxMCAxNjUgOTIuNSAyNTcuNXQyNTcuNSA5Mi41ek04MDAgOTAwaC01MDBxLTQxIDAgLTcwLjUgLTI5LjV0LTI5LjUgLTcwLjV2LTUwMHEwIC00MSAyOS41IC03MC41dDcwLjUgLTI5LjVoNTAwcTQxIDAgNzAuNSAyOS41dDI5LjUgNzAuNSB2NTAwcTAgNDEgLTI5LjUgNzAuNXQtNzAuNSAyOS41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNTg7IiBkPSJNMzUwIDExMDBoNDAwcTE2NSAwIDI1Ny41IC05Mi41dDkyLjUgLTI1Ny41di00MDBxMCAtMTY1IC05Mi41IC0yNTcuNXQtMjU3LjUgLTkyLjVoLTQwMHEtMTYzIDAgLTI1Ni41IDkyLjV0LTkzLjUgMjU3LjV2NDAwcTAgMTYzIDk0IDI1Ni41dDI1NiA5My41ek04MDAgOTAwaC01MDBxLTQxIDAgLTcwLjUgLTI5LjV0LTI5LjUgLTcwLjV2LTUwMHEwIC00MSAyOS41IC03MC41dDcwLjUgLTI5LjVoNTAwcTQxIDAgNzAuNSAyOS41dDI5LjUgNzAuNSB2NTAwcTAgNDEgLTI5LjUgNzAuNXQtNzAuNSAyOS41ek00NDAgNzcwbDI1MyAtMTkwcTE3IC0xMiAxNyAtMzB0LTE3IC0zMGwtMjUzIC0xOTBxLTE2IC0xMiAtMjggLTYuNXQtMTIgMjYuNXY0MDBxMCAyMSAxMiAyNi41dDI4IC02LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE1OTsiIGQ9Ik0zNTAgMTEwMGg0MDBxMTYzIDAgMjU2LjUgLTk0dDkzLjUgLTI1NnYtNDAwcTAgLTE2NSAtOTIuNSAtMjU3LjV0LTI1Ny41IC05Mi41aC00MDBxLTE2NSAwIC0yNTcuNSA5Mi41dC05Mi41IDI1Ny41djQwMHEwIDE2MyA5Mi41IDI1Ni41dDI1Ny41IDkzLjV6TTgwMCA5MDBoLTUwMHEtNDEgMCAtNzAuNSAtMjkuNXQtMjkuNSAtNzAuNXYtNTAwcTAgLTQxIDI5LjUgLTcwLjV0NzAuNSAtMjkuNWg1MDBxNDEgMCA3MC41IDI5LjV0MjkuNSA3MC41IHY1MDBxMCA0MSAtMjkuNSA3MC41dC03MC41IDI5LjV6TTM1MCA3MDBoNDAwcTIxIDAgMjYuNSAtMTJ0LTYuNSAtMjhsLTE5MCAtMjUzcS0xMiAtMTcgLTMwIC0xN3QtMzAgMTdsLTE5MCAyNTNxLTEyIDE2IC02LjUgMjh0MjYuNSAxMnoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMTYwOyIgZD0iTTM1MCAxMTAwaDQwMHExNjUgMCAyNTcuNSAtOTIuNXQ5Mi41IC0yNTcuNXYtNDAwcTAgLTE2MyAtOTIuNSAtMjU2LjV0LTI1Ny41IC05My41aC00MDBxLTE2MyAwIC0yNTYuNSA5NHQtOTMuNSAyNTZ2NDAwcTAgMTY1IDkyLjUgMjU3LjV0MjU3LjUgOTIuNXpNODAwIDkwMGgtNTAwcS00MSAwIC03MC41IC0yOS41dC0yOS41IC03MC41di01MDBxMCAtNDEgMjkuNSAtNzAuNXQ3MC41IC0yOS41aDUwMHE0MSAwIDcwLjUgMjkuNXQyOS41IDcwLjUgdjUwMHEwIDQxIC0yOS41IDcwLjV0LTcwLjUgMjkuNXpNNTgwIDY5M2wxOTAgLTI1M3ExMiAtMTYgNi41IC0yOHQtMjYuNSAtMTJoLTQwMHEtMjEgMCAtMjYuNSAxMnQ2LjUgMjhsMTkwIDI1M3ExMiAxNyAzMCAxN3QzMCAtMTd6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE2MTsiIGQ9Ik01NTAgMTEwMGg0MDBxMTY1IDAgMjU3LjUgLTkyLjV0OTIuNSAtMjU3LjV2LTQwMHEwIC0xNjUgLTkyLjUgLTI1Ny41dC0yNTcuNSAtOTIuNWgtNDAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDQ1MHE0MSAwIDcwLjUgMjkuNXQyOS41IDcwLjV2NTAwcTAgNDEgLTI5LjUgNzAuNXQtNzAuNSAyOS41aC00NTBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMCBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek0zMzggODY3bDMyNCAtMjg0cTE2IC0xNCAxNiAtMzN0LTE2IC0zM2wtMzI0IC0yODRxLTE2IC0xNCAtMjcgLTl0LTExIDI2djE1MGgtMjUwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYyMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDI1MHYxNTBxMCAyMSAxMSAyNnQyNyAtOXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMTYyOyIgZD0iTTc5MyAxMTgybDkgLTlxOCAtMTAgNSAtMjdxLTMgLTExIC03OSAtMjI1LjV0LTc4IC0yMjEuNWwzMDAgMXEyNCAwIDMyLjUgLTE3LjV0LTUuNSAtMzUuNXEtMSAwIC0xMzMuNSAtMTU1dC0yNjcgLTMxMi41dC0xMzguNSAtMTYyLjVxLTEyIC0xNSAtMjYgLTE1aC05bC05IDhxLTkgMTEgLTQgMzJxMiA5IDQyIDEyMy41dDc5IDIyNC41bDM5IDExMGgtMzAycS0yMyAwIC0zMSAxOXEtMTAgMjEgNiA0MXE3NSA4NiAyMDkuNSAyMzcuNSB0MjI4IDI1N3Q5OC41IDExMS41cTkgMTYgMjUgMTZoOXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMTYzOyIgZD0iTTM1MCAxMTAwaDQwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC00NTBxLTQxIDAgLTcwLjUgLTI5LjV0LTI5LjUgLTcwLjV2LTUwMHEwIC00MSAyOS41IC03MC41dDcwLjUgLTI5LjVoNDUwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTQwMHEtMTY1IDAgLTI1Ny41IDkyLjV0LTkyLjUgMjU3LjV2NDAwIHEwIDE2NSA5Mi41IDI1Ny41dDI1Ny41IDkyLjV6TTkzOCA4NjdsMzI0IC0yODRxMTYgLTE0IDE2IC0zM3QtMTYgLTMzbC0zMjQgLTI4NHEtMTYgLTE0IC0yNyAtOXQtMTEgMjZ2MTUwaC0yNTBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djIwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoMjUwdjE1MHEwIDIxIDExIDI2dDI3IC05eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNjQ7IiBkPSJNNzUwIDEyMDBoNDAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di00MDBxMCAtMjEgLTEwLjUgLTI1dC0yNC41IDEwbC0xMDkgMTA5bC0zMTIgLTMxMnEtMTUgLTE1IC0zNS41IC0xNXQtMzUuNSAxNWwtMTQxIDE0MXEtMTUgMTUgLTE1IDM1LjV0MTUgMzUuNWwzMTIgMzEybC0xMDkgMTA5cS0xNCAxNCAtMTAgMjQuNXQyNSAxMC41ek00NTYgOTAwaC0xNTZxLTQxIDAgLTcwLjUgLTI5LjV0LTI5LjUgLTcwLjV2LTUwMCBxMCAtNDEgMjkuNSAtNzAuNXQ3MC41IC0yOS41aDUwMHE0MSAwIDcwLjUgMjkuNXQyOS41IDcwLjV2MTQ4bDIwMCAyMDB2LTI5OHEwIC0xNjUgLTkzLjUgLTI1Ny41dC0yNTYuNSAtOTIuNWgtNDAwcS0xNjUgMCAtMjU3LjUgOTIuNXQtOTIuNSAyNTcuNXY0MDBxMCAxNjUgOTIuNSAyNTcuNXQyNTcuNSA5Mi41aDMwMHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMTY1OyIgZD0iTTYwMCAxMTg2cTExOSAwIDIyNy41IC00Ni41dDE4NyAtMTI1dDEyNSAtMTg3dDQ2LjUgLTIyNy41dC00Ni41IC0yMjcuNXQtMTI1IC0xODd0LTE4NyAtMTI1dC0yMjcuNSAtNDYuNXQtMjI3LjUgNDYuNXQtMTg3IDEyNXQtMTI1IDE4N3QtNDYuNSAyMjcuNXQ0Ni41IDIyNy41dDEyNSAxODd0MTg3IDEyNXQyMjcuNSA0Ni41ek02MDAgMTAyMnEtMTE1IDAgLTIxMiAtNTYuNXQtMTUzLjUgLTE1My41dC01Ni41IC0yMTJ0NTYuNSAtMjEyIHQxNTMuNSAtMTUzLjV0MjEyIC01Ni41dDIxMiA1Ni41dDE1My41IDE1My41dDU2LjUgMjEydC01Ni41IDIxMnQtMTUzLjUgMTUzLjV0LTIxMiA1Ni41ek02MDAgNzk0cTgwIDAgMTM3IC01N3Q1NyAtMTM3dC01NyAtMTM3dC0xMzcgLTU3dC0xMzcgNTd0LTU3IDEzN3Q1NyAxMzd0MTM3IDU3eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNjY7IiBkPSJNNDUwIDEyMDBoMjAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0zNTBoMjQ1cTIwIDAgMjUgLTExdC05IC0yNmwtMzgzIC00MjZxLTE0IC0xNSAtMzMuNSAtMTV0LTMyLjUgMTVsLTM3OSA0MjZxLTEzIDE1IC04LjUgMjZ0MjUuNSAxMWgyNTB2MzUwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNNTAgMzAwaDEwMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTI1MGgtMTEwMHYyNTBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41eiBNOTAwIDIwMHYtNTBoMTAwdjUwaC0xMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE2NzsiIGQ9Ik01ODMgMTE4MmwzNzggLTQzNXExNCAtMTUgOSAtMzF0LTI2IC0xNmgtMjQ0di0yNTBxMCAtMjAgLTE3IC0zNXQtMzkgLTE1aC0yMDBxLTIwIDAgLTMyIDE0LjV0LTEyIDM1LjV2MjUwaC0yNTBxLTIwIDAgLTI1LjUgMTYuNXQ4LjUgMzEuNWwzODMgNDMxcTE0IDE2IDMzLjUgMTd0MzMuNSAtMTR6TTUwIDMwMGgxMDAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0yNTBoLTExMDB2MjUwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXogTTkwMCAyMDB2LTUwaDEwMHY1MGgtMTAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNjg7IiBkPSJNMzk2IDcyM2wzNjkgMzY5cTcgNyAxNy41IDd0MTcuNSAtN2wxMzkgLTEzOXE3IC04IDcgLTE4LjV0LTcgLTE3LjVsLTUyNSAtNTI1cS03IC04IC0xNy41IC04dC0xNy41IDhsLTI5MiAyOTFxLTcgOCAtNyAxOHQ3IDE4bDEzOSAxMzlxOCA3IDE4LjUgN3QxNy41IC03ek01MCAzMDBoMTAwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjUwaC0xMTAwdjI1MHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTkwMCAyMDB2LTUwaDEwMHY1MCBoLTEwMHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMTY5OyIgZD0iTTEzNSAxMDIzbDE0MiAxNDJxMTQgMTQgMzUgMTR0MzUgLTE0bDc3IC03N2wtMjEyIC0yMTJsLTc3IDc2cS0xNCAxNSAtMTQgMzZ0MTQgMzV6TTY1NSA4NTVsMjEwIDIxMHExNCAxNCAyNC41IDEwdDEwLjUgLTI1bC0yIC01OTlxLTEgLTIwIC0xNS41IC0zNXQtMzUuNSAtMTVsLTU5NyAtMXEtMjEgMCAtMjUgMTAuNXQxMCAyNC41bDIwOCAyMDhsLTE1NCAxNTVsMjEyIDIxMnpNNTAgMzAwaDEwMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjUgdi0yNTBoLTExMDB2MjUwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNOTAwIDIwMHYtNTBoMTAwdjUwaC0xMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE3MDsiIGQ9Ik0zNTAgMTIwMGw1OTkgLTJxMjAgLTEgMzUgLTE1LjV0MTUgLTM1LjVsMSAtNTk3cTAgLTIxIC0xMC41IC0yNXQtMjQuNSAxMGwtMjA4IDIwOGwtMTU1IC0xNTRsLTIxMiAyMTJsMTU1IDE1NGwtMjEwIDIxMHEtMTQgMTQgLTEwIDI0LjV0MjUgMTAuNXpNNTI0IDUxMmwtNzYgLTc3cS0xNSAtMTQgLTM2IC0xNHQtMzUgMTRsLTE0MiAxNDJxLTE0IDE0IC0xNCAzNXQxNCAzNWw3NyA3N3pNNTAgMzAwaDEwMDBxMjEgMCAzNS41IC0xNC41IHQxNC41IC0zNS41di0yNTBoLTExMDB2MjUwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNOTAwIDIwMHYtNTBoMTAwdjUwaC0xMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE3MTsiIGQ9Ik0xMjAwIDEwM2wtNDgzIDI3NmwtMzE0IC0zOTl2NDIzaC0zOTlsMTE5NiA3OTZ2LTEwOTZ6TTQ4MyA0MjR2LTIzMGw2ODMgOTUzeiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNzI7IiBkPSJNMTEwMCAxMDAwdi04NTBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTE1MHY0MDBoLTcwMHYtNDAwaC0xNTBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMDBxMCAyMCAxNC41IDM1dDM1LjUgMTVoMjUwdi0zMDBoNTAwdjMwMGgxMDB6TTcwMCAxMDAwaC0xMDB2MjAwaDEwMHYtMjAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNzM7IiBkPSJNMTEwMCAxMDAwbC0yIC0xNDlsLTI5OSAtMjk5bC05NSA5NXEtOSA5IC0yMS41IDl0LTIxLjUgLTlsLTE0OSAtMTQ3aC0zMTJ2LTQwMGgtMTUwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxMDAwcTAgMjAgMTQuNSAzNXQzNS41IDE1aDI1MHYtMzAwaDUwMHYzMDBoMTAwek03MDAgMTAwMGgtMTAwdjIwMGgxMDB2LTIwMHpNMTEzMiA2MzhsMTA2IC0xMDZxNyAtNyA3IC0xNy41dC03IC0xNy41bC00MjAgLTQyMXEtOCAtNyAtMTggLTcgdC0xOCA3bC0yMDIgMjAzcS04IDcgLTggMTcuNXQ4IDE3LjVsMTA2IDEwNnE3IDggMTcuNSA4dDE3LjUgLThsNzkgLTc5bDI5NyAyOTdxNyA3IDE3LjUgN3QxNy41IC03eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNzQ7IiBkPSJNMTEwMCAxMDAwdi0yNjlsLTEwMyAtMTAzbC0xMzQgMTM0cS0xNSAxNSAtMzMuNSAxNi41dC0zNC41IC0xMi41bC0yNjYgLTI2NmgtMzI5di00MDBoLTE1MHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MTAwMHEwIDIwIDE0LjUgMzV0MzUuNSAxNWgyNTB2LTMwMGg1MDB2MzAwaDEwMHpNNzAwIDEwMDBoLTEwMHYyMDBoMTAwdi0yMDB6TTEyMDIgNTcybDcwIC03MHExNSAtMTUgMTUgLTM1LjV0LTE1IC0zNS41bC0xMzEgLTEzMSBsMTMxIC0xMzFxMTUgLTE1IDE1IC0zNS41dC0xNSAtMzUuNWwtNzAgLTcwcS0xNSAtMTUgLTM1LjUgLTE1dC0zNS41IDE1bC0xMzEgMTMxbC0xMzEgLTEzMXEtMTUgLTE1IC0zNS41IC0xNXQtMzUuNSAxNWwtNzAgNzBxLTE1IDE1IC0xNSAzNS41dDE1IDM1LjVsMTMxIDEzMWwtMTMxIDEzMXEtMTUgMTUgLTE1IDM1LjV0MTUgMzUuNWw3MCA3MHExNSAxNSAzNS41IDE1dDM1LjUgLTE1bDEzMSAtMTMxbDEzMSAxMzFxMTUgMTUgMzUuNSAxNSB0MzUuNSAtMTV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE3NTsiIGQ9Ik0xMTAwIDEwMDB2LTMwMGgtMzUwcS0yMSAwIC0zNS41IC0xNC41dC0xNC41IC0zNS41di0xNTBoLTUwMHYtNDAwaC0xNTBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMDBxMCAyMCAxNC41IDM1dDM1LjUgMTVoMjUwdi0zMDBoNTAwdjMwMGgxMDB6TTcwMCAxMDAwaC0xMDB2MjAwaDEwMHYtMjAwek04NTAgNjAwaDEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMjUwaDE1MHEyMSAwIDI1IC0xMC41dC0xMCAtMjQuNSBsLTIzMCAtMjMwcS0xNCAtMTQgLTM1IC0xNHQtMzUgMTRsLTIzMCAyMzBxLTE0IDE0IC0xMCAyNC41dDI1IDEwLjVoMTUwdjI1MHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE3NjsiIGQ9Ik0xMTAwIDEwMDB2LTQwMGwtMTY1IDE2NXEtMTQgMTUgLTM1IDE1dC0zNSAtMTVsLTI2MyAtMjY1aC00MDJ2LTQwMGgtMTUwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxMDAwcTAgMjAgMTQuNSAzNXQzNS41IDE1aDI1MHYtMzAwaDUwMHYzMDBoMTAwek03MDAgMTAwMGgtMTAwdjIwMGgxMDB2LTIwMHpNOTM1IDU2NWwyMzAgLTIyOXExNCAtMTUgMTAgLTI1LjV0LTI1IC0xMC41aC0xNTB2LTI1MHEwIC0yMCAtMTQuNSAtMzUgdC0zNS41IC0xNWgtMTAwcS0yMSAwIC0zNS41IDE1dC0xNC41IDM1djI1MGgtMTUwcS0yMSAwIC0yNSAxMC41dDEwIDI1LjVsMjMwIDIyOXExNCAxNSAzNSAxNXQzNSAtMTV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE3NzsiIGQ9Ik01MCAxMTAwaDExMDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTE1MGgtMTIwMHYxNTBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek0xMjAwIDgwMHYtNTUwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMTAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXY1NTBoMTIwMHpNMTAwIDUwMHYtMjAwaDQwMHYyMDBoLTQwMHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMTc4OyIgZD0iTTkzNSAxMTY1bDI0OCAtMjMwcTE0IC0xNCAxNCAtMzV0LTE0IC0zNWwtMjQ4IC0yMzBxLTE0IC0xNCAtMjQuNSAtMTB0LTEwLjUgMjV2MTUwaC00MDB2MjAwaDQwMHYxNTBxMCAyMSAxMC41IDI1dDI0LjUgLTEwek0yMDAgODAwaC01MHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWg1MHYtMjAwek00MDAgODAwaC0xMDB2MjAwaDEwMHYtMjAwek0xOCA0MzVsMjQ3IDIzMCBxMTQgMTQgMjQuNSAxMHQxMC41IC0yNXYtMTUwaDQwMHYtMjAwaC00MDB2LTE1MHEwIC0yMSAtMTAuNSAtMjV0LTI0LjUgMTBsLTI0NyAyMzBxLTE1IDE0IC0xNSAzNXQxNSAzNXpNOTAwIDMwMGgtMTAwdjIwMGgxMDB2LTIwMHpNMTAwMCA1MDBoNTFxMjAgMCAzNC41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzQuNSAtMTQuNWgtNTF2MjAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxNzk7IiBkPSJNODYyIDEwNzNsMjc2IDExNnEyNSAxOCA0My41IDh0MTguNSAtNDF2LTExMDZxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTIwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2Mzk3cS00IDEgLTExIDV0LTI0IDE3LjV0LTMwIDI5dC0yNCA0MnQtMTEgNTYuNXYzNTlxMCAzMSAxOC41IDY1dDQzLjUgNTJ6TTU1MCAxMjAwcTIyIDAgMzQuNSAtMTIuNXQxNC41IC0yNC41bDEgLTEzdi00NTBxMCAtMjggLTEwLjUgLTU5LjUgdC0yNSAtNTZ0LTI5IC00NXQtMjUuNSAtMzEuNWwtMTAgLTExdi00NDdxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTIwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2NDQ3cS00IDQgLTExIDExLjV0LTI0IDMwLjV0LTMwIDQ2dC0yNCA1NXQtMTEgNjB2NDUwcTAgMiAwLjUgNS41dDQgMTJ0OC41IDE1dDE0LjUgMTJ0MjIuNSA1LjVxMjAgMCAzMi41IC0xMi41dDE0LjUgLTI0LjVsMyAtMTN2LTM1MGgxMDB2MzUwdjUuNXQyLjUgMTIgdDcgMTV0MTUgMTJ0MjUuNSA1LjVxMjMgMCAzNS41IC0xMi41dDEzLjUgLTI0LjVsMSAtMTN2LTM1MGgxMDB2MzUwcTAgMiAwLjUgNS41dDMgMTJ0NyAxNXQxNSAxMnQyNC41IDUuNXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMTgwOyIgZD0iTTEyMDAgMTEwMHYtNTZxLTQgMCAtMTEgLTAuNXQtMjQgLTN0LTMwIC03LjV0LTI0IC0xNXQtMTEgLTI0di04ODhxMCAtMjIgMjUgLTM0LjV0NTAgLTEzLjVsMjUgLTJ2LTU2aC00MDB2NTZxNzUgMCA4Ny41IDYuNXQxMi41IDQzLjV2Mzk0aC01MDB2LTM5NHEwIC0zNyAxMi41IC00My41dDg3LjUgLTYuNXYtNTZoLTQwMHY1NnE0IDAgMTEgMC41dDI0IDN0MzAgNy41dDI0IDE1dDExIDI0djg4OHEwIDIyIC0yNSAzNC41dC01MCAxMy41IGwtMjUgMnY1Nmg0MDB2LTU2cS03NSAwIC04Ny41IC02LjV0LTEyLjUgLTQzLjV2LTM5NGg1MDB2Mzk0cTAgMzcgLTEyLjUgNDMuNXQtODcuNSA2LjV2NTZoNDAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxODE7IiBkPSJNNjc1IDEwMDBoMzc1cTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xNTBoLTEwNWwtMjk1IC05OHY5OGwtMjAwIDIwMGgtNDAwbDEwMCAxMDBoMzc1ek0xMDAgOTAwaDMwMHE0MSAwIDcwLjUgLTI5LjV0MjkuNSAtNzAuNXYtNTAwcTAgLTQxIC0yOS41IC03MC41dC03MC41IC0yOS41aC0zMDBxLTQxIDAgLTcwLjUgMjkuNXQtMjkuNSA3MC41djUwMHEwIDQxIDI5LjUgNzAuNXQ3MC41IDI5LjV6TTEwMCA4MDB2LTIwMGgzMDB2MjAwIGgtMzAwek0xMTAwIDUzNWwtNDAwIC0xMzN2MTYzbDQwMCAxMzN2LTE2M3pNMTAwIDUwMHYtMjAwaDMwMHYyMDBoLTMwMHpNMTEwMCAzOTh2LTI0OHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMzc1bC0xMDAgLTEwMGgtMzc1bC0xMDAgMTAwaDQwMGwyMDAgMjAwaDEwNXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMTgyOyIgZD0iTTE3IDEwMDdsMTYyIDE2MnExNyAxNyA0MCAxNHQzNyAtMjJsMTM5IC0xOTRxMTQgLTIwIDExIC00NC41dC0yMCAtNDEuNWwtMTE5IC0xMThxMTAyIC0xNDIgMjI4IC0yNjh0MjY3IC0yMjdsMTE5IDExOHExNyAxNyA0Mi41IDE5dDQ0LjUgLTEybDE5MiAtMTM2cTE5IC0xNCAyMi41IC0zNy41dC0xMy41IC00MC41bC0xNjMgLTE2MnEtMyAtMSAtOS41IC0xdC0yOS41IDJ0LTQ3LjUgNnQtNjIuNSAxNC41dC03Ny41IDI2LjV0LTkwIDQyLjUgdC0xMDEuNSA2MHQtMTExIDgzdC0xMTkgMTA4LjVxLTc0IDc0IC0xMzMuNSAxNTAuNXQtOTQuNSAxMzguNXQtNjAgMTE5LjV0LTM0LjUgMTAwdC0xNSA3NC41dC00LjUgNDh6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE4MzsiIGQ9Ik02MDAgMTEwMHE5MiAwIDE3NSAtMTAuNXQxNDEuNSAtMjd0MTA4LjUgLTM2LjV0ODEuNSAtNDB0NTMuNSAtMzd0MzEgLTI3bDkgLTEwdi0yMDBxMCAtMjEgLTE0LjUgLTMzdC0zNC41IC05bC0yMDIgMzRxLTIwIDMgLTM0LjUgMjB0LTE0LjUgMzh2MTQ2cS0xNDEgMjQgLTMwMCAyNHQtMzAwIC0yNHYtMTQ2cTAgLTIxIC0xNC41IC0zOHQtMzQuNSAtMjBsLTIwMiAtMzRxLTIwIC0zIC0zNC41IDl0LTE0LjUgMzN2MjAwcTMgNCA5LjUgMTAuNSB0MzEgMjZ0NTQgMzcuNXQ4MC41IDM5LjV0MTA5IDM3LjV0MTQxIDI2LjV0MTc1IDEwLjV6TTYwMCA3OTVxNTYgMCA5NyAtOS41dDYwIC0yMy41dDMwIC0yOHQxMiAtMjRsMSAtMTB2LTUwbDM2NSAtMzAzcTE0IC0xNSAyNC41IC00MHQxMC41IC00NXYtMjEycTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMTAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYyMTJxMCAyMCAxMC41IDQ1dDI0LjUgNDBsMzY1IDMwM3Y1MCBxMCA0IDEgMTAuNXQxMiAyM3QzMCAyOXQ2MCAyMi41dDk3IDEweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxODQ7IiBkPSJNMTEwMCA3MDBsLTIwMCAtMjAwaC02MDBsLTIwMCAyMDB2NTAwaDIwMHYtMjAwaDIwMHYyMDBoMjAwdi0yMDBoMjAwdjIwMGgyMDB2LTUwMHpNMjUwIDQwMGg3MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV0LTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTEybDEzNyAtMTAwaC05NTBsMTM3IDEwMGgtMTJxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41dDE0LjUgMzUuNXQzNS41IDE0LjV6TTUwIDEwMGgxMTAwcTIxIDAgMzUuNSAtMTQuNSB0MTQuNSAtMzUuNXYtNTBoLTEyMDB2NTBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxODU7IiBkPSJNNzAwIDExMDBoLTEwMHEtNDEgMCAtNzAuNSAtMjkuNXQtMjkuNSAtNzAuNXYtMTAwMGgzMDB2MTAwMHEwIDQxIC0yOS41IDcwLjV0LTcwLjUgMjkuNXpNMTEwMCA4MDBoLTEwMHEtNDEgMCAtNzAuNSAtMjkuNXQtMjkuNSAtNzAuNXYtNzAwaDMwMHY3MDBxMCA0MSAtMjkuNSA3MC41dC03MC41IDI5LjV6TTQwMCAwaC0zMDB2NDAwcTAgNDEgMjkuNSA3MC41dDcwLjUgMjkuNWgxMDBxNDEgMCA3MC41IC0yOS41dDI5LjUgLTcwLjV2LTQwMHogIiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE4NjsiIGQ9Ik0yMDAgMTEwMGg3MDBxMTI0IDAgMjEyIC04OHQ4OCAtMjEydi01MDBxMCAtMTI0IC04OCAtMjEydC0yMTIgLTg4aC03MDBxLTEyNCAwIC0yMTIgODh0LTg4IDIxMnY1MDBxMCAxMjQgODggMjEydDIxMiA4OHpNMTAwIDkwMHYtNzAwaDkwMHY3MDBoLTkwMHpNNTAwIDcwMGgtMjAwdi0xMDBoMjAwdi0zMDBoLTMwMHYxMDBoMjAwdjEwMGgtMjAwdjMwMGgzMDB2LTEwMHpNOTAwIDcwMHYtMzAwbC0xMDAgLTEwMGgtMjAwdjUwMGgyMDB6IE03MDAgNzAwdi0zMDBoMTAwdjMwMGgtMTAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxODc7IiBkPSJNMjAwIDExMDBoNzAwcTEyNCAwIDIxMiAtODh0ODggLTIxMnYtNTAwcTAgLTEyNCAtODggLTIxMnQtMjEyIC04OGgtNzAwcS0xMjQgMCAtMjEyIDg4dC04OCAyMTJ2NTAwcTAgMTI0IDg4IDIxMnQyMTIgODh6TTEwMCA5MDB2LTcwMGg5MDB2NzAwaC05MDB6TTUwMCAzMDBoLTEwMHYyMDBoLTEwMHYtMjAwaC0xMDB2NTAwaDEwMHYtMjAwaDEwMHYyMDBoMTAwdi01MDB6TTkwMCA3MDB2LTMwMGwtMTAwIC0xMDBoLTIwMHY1MDBoMjAweiBNNzAwIDcwMHYtMzAwaDEwMHYzMDBoLTEwMHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMTg4OyIgZD0iTTIwMCAxMTAwaDcwMHExMjQgMCAyMTIgLTg4dDg4IC0yMTJ2LTUwMHEwIC0xMjQgLTg4IC0yMTJ0LTIxMiAtODhoLTcwMHEtMTI0IDAgLTIxMiA4OHQtODggMjEydjUwMHEwIDEyNCA4OCAyMTJ0MjEyIDg4ek0xMDAgOTAwdi03MDBoOTAwdjcwMGgtOTAwek01MDAgNzAwaC0yMDB2LTMwMGgyMDB2LTEwMGgtMzAwdjUwMGgzMDB2LTEwMHpNOTAwIDcwMGgtMjAwdi0zMDBoMjAwdi0xMDBoLTMwMHY1MDBoMzAwdi0xMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE4OTsiIGQ9Ik0yMDAgMTEwMGg3MDBxMTI0IDAgMjEyIC04OHQ4OCAtMjEydi01MDBxMCAtMTI0IC04OCAtMjEydC0yMTIgLTg4aC03MDBxLTEyNCAwIC0yMTIgODh0LTg4IDIxMnY1MDBxMCAxMjQgODggMjEydDIxMiA4OHpNMTAwIDkwMHYtNzAwaDkwMHY3MDBoLTkwMHpNNTAwIDQwMGwtMzAwIDE1MGwzMDAgMTUwdi0zMDB6TTkwMCA1NTBsLTMwMCAtMTUwdjMwMHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMTkwOyIgZD0iTTIwMCAxMTAwaDcwMHExMjQgMCAyMTIgLTg4dDg4IC0yMTJ2LTUwMHEwIC0xMjQgLTg4IC0yMTJ0LTIxMiAtODhoLTcwMHEtMTI0IDAgLTIxMiA4OHQtODggMjEydjUwMHEwIDEyNCA4OCAyMTJ0MjEyIDg4ek0xMDAgOTAwdi03MDBoOTAwdjcwMGgtOTAwek05MDAgMzAwaC03MDB2NTAwaDcwMHYtNTAwek04MDAgNzAwaC0xMzBxLTM4IDAgLTY2LjUgLTQzdC0yOC41IC0xMDh0MjcgLTEwN3Q2OCAtNDJoMTMwdjMwMHpNMzAwIDcwMHYtMzAwIGgxMzBxNDEgMCA2OCA0MnQyNyAxMDd0LTI4LjUgMTA4dC02Ni41IDQzaC0xMzB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE5MTsiIGQ9Ik0yMDAgMTEwMGg3MDBxMTI0IDAgMjEyIC04OHQ4OCAtMjEydi01MDBxMCAtMTI0IC04OCAtMjEydC0yMTIgLTg4aC03MDBxLTEyNCAwIC0yMTIgODh0LTg4IDIxMnY1MDBxMCAxMjQgODggMjEydDIxMiA4OHpNMTAwIDkwMHYtNzAwaDkwMHY3MDBoLTkwMHpNNTAwIDcwMGgtMjAwdi0xMDBoMjAwdi0zMDBoLTMwMHYxMDBoMjAwdjEwMGgtMjAwdjMwMGgzMDB2LTEwMHpNOTAwIDMwMGgtMTAwdjQwMGgtMTAwdjEwMGgyMDB2LTUwMHogTTcwMCAzMDBoLTEwMHYxMDBoMTAwdi0xMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE5MjsiIGQ9Ik0yMDAgMTEwMGg3MDBxMTI0IDAgMjEyIC04OHQ4OCAtMjEydi01MDBxMCAtMTI0IC04OCAtMjEydC0yMTIgLTg4aC03MDBxLTEyNCAwIC0yMTIgODh0LTg4IDIxMnY1MDBxMCAxMjQgODggMjEydDIxMiA4OHpNMTAwIDkwMHYtNzAwaDkwMHY3MDBoLTkwMHpNMzAwIDcwMGgyMDB2LTQwMGgtMzAwdjUwMGgxMDB2LTEwMHpNOTAwIDMwMGgtMTAwdjQwMGgtMTAwdjEwMGgyMDB2LTUwMHpNMzAwIDYwMHYtMjAwaDEwMHYyMDBoLTEwMHogTTcwMCAzMDBoLTEwMHYxMDBoMTAwdi0xMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE5MzsiIGQ9Ik0yMDAgMTEwMGg3MDBxMTI0IDAgMjEyIC04OHQ4OCAtMjEydi01MDBxMCAtMTI0IC04OCAtMjEydC0yMTIgLTg4aC03MDBxLTEyNCAwIC0yMTIgODh0LTg4IDIxMnY1MDBxMCAxMjQgODggMjEydDIxMiA4OHpNMTAwIDkwMHYtNzAwaDkwMHY3MDBoLTkwMHpNNTAwIDUwMGwtMTk5IC0yMDBoLTEwMHY1MGwxOTkgMjAwdjE1MGgtMjAwdjEwMGgzMDB2LTMwMHpNOTAwIDMwMGgtMTAwdjQwMGgtMTAwdjEwMGgyMDB2LTUwMHpNNzAxIDMwMGgtMTAwIHYxMDBoMTAwdi0xMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTE5NDsiIGQ9Ik02MDAgMTE5MXExMjAgMCAyMjkuNSAtNDd0MTg4LjUgLTEyNnQxMjYgLTE4OC41dDQ3IC0yMjkuNXQtNDcgLTIyOS41dC0xMjYgLTE4OC41dC0xODguNSAtMTI2dC0yMjkuNSAtNDd0LTIyOS41IDQ3dC0xODguNSAxMjZ0LTEyNiAxODguNXQtNDcgMjI5LjV0NDcgMjI5LjV0MTI2IDE4OC41dDE4OC41IDEyNnQyMjkuNSA0N3pNNjAwIDEwMjFxLTExNCAwIC0yMTEgLTU2LjV0LTE1My41IC0xNTMuNXQtNTYuNSAtMjExdDU2LjUgLTIxMSB0MTUzLjUgLTE1My41dDIxMSAtNTYuNXQyMTEgNTYuNXQxNTMuNSAxNTMuNXQ1Ni41IDIxMXQtNTYuNSAyMTF0LTE1My41IDE1My41dC0yMTEgNTYuNXpNODAwIDcwMGgtMzAwdi0yMDBoMzAwdi0xMDBoLTMwMGwtMTAwIDEwMHYyMDBsMTAwIDEwMGgzMDB2LTEwMHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMTk1OyIgZD0iTTYwMCAxMTkxcTEyMCAwIDIyOS41IC00N3QxODguNSAtMTI2dDEyNiAtMTg4LjV0NDcgLTIyOS41dC00NyAtMjI5LjV0LTEyNiAtMTg4LjV0LTE4OC41IC0xMjZ0LTIyOS41IC00N3QtMjI5LjUgNDd0LTE4OC41IDEyNnQtMTI2IDE4OC41dC00NyAyMjkuNXQ0NyAyMjkuNXQxMjYgMTg4LjV0MTg4LjUgMTI2dDIyOS41IDQ3ek02MDAgMTAyMXEtMTE0IDAgLTIxMSAtNTYuNXQtMTUzLjUgLTE1My41dC01Ni41IC0yMTF0NTYuNSAtMjExIHQxNTMuNSAtMTUzLjV0MjExIC01Ni41dDIxMSA1Ni41dDE1My41IDE1My41dDU2LjUgMjExdC01Ni41IDIxMXQtMTUzLjUgMTUzLjV0LTIxMSA1Ni41ek04MDAgNzAwdi0xMDBsLTUwIC01MGwxMDAgLTEwMHYtNTBoLTEwMGwtMTAwIDEwMGgtMTUwdi0xMDBoLTEwMHY0MDBoMzAwek01MDAgNzAwdi0xMDBoMjAwdjEwMGgtMjAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxOTc7IiBkPSJNNTAzIDEwODlxMTEwIDAgMjAwLjUgLTU5LjV0MTM0LjUgLTE1Ni41cTQ0IDE0IDkwIDE0cTEyMCAwIDIwNSAtODYuNXQ4NSAtMjA3dC04NSAtMjA3dC0yMDUgLTg2LjVoLTEyOHYyNTBxMCAyMSAtMTQuNSAzNS41dC0zNS41IDE0LjVoLTMwMHEtMjEgMCAtMzUuNSAtMTQuNXQtMTQuNSAtMzUuNXYtMjUwaC0yMjJxLTgwIDAgLTEzNiA1Ny41dC01NiAxMzYuNXEwIDY5IDQzIDEyMi41dDEwOCA2Ny41cS0yIDE5IC0yIDM3cTAgMTAwIDQ5IDE4NSB0MTM0IDEzNHQxODUgNDl6TTUyNSA1MDBoMTUwcTEwIDAgMTcuNSAtNy41dDcuNSAtMTcuNXYtMjc1aDEzN3EyMSAwIDI2IC0xMS41dC04IC0yNy41bC0yMjMgLTI0NHEtMTMgLTE2IC0zMiAtMTZ0LTMyIDE2bC0yMjMgMjQ0cS0xMyAxNiAtOCAyNy41dDI2IDExLjVoMTM3djI3NXEwIDEwIDcuNSAxNy41dDE3LjUgNy41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUxOTg7IiBkPSJNNTAyIDEwODlxMTEwIDAgMjAxIC01OS41dDEzNSAtMTU2LjVxNDMgMTUgODkgMTVxMTIxIDAgMjA2IC04Ni41dDg2IC0yMDYuNXEwIC05OSAtNjAgLTE4MXQtMTUwIC0xMTBsLTM3OCAzNjBxLTEzIDE2IC0zMS41IDE2dC0zMS41IC0xNmwtMzgxIC0zNjVoLTlxLTc5IDAgLTEzNS41IDU3LjV0LTU2LjUgMTM2LjVxMCA2OSA0MyAxMjIuNXQxMDggNjcuNXEtMiAxOSAtMiAzOHEwIDEwMCA0OSAxODQuNXQxMzMuNSAxMzR0MTg0LjUgNDkuNXogTTYzMiA0NjdsMjIzIC0yMjhxMTMgLTE2IDggLTI3LjV0LTI2IC0xMS41aC0xMzd2LTI3NXEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTE1MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djI3NWgtMTM3cS0yMSAwIC0yNiAxMS41dDggMjcuNXExOTkgMjA0IDIyMyAyMjhxMTkgMTkgMzEuNSAxOXQzMi41IC0xOXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMTk5OyIgZD0iTTcwMCAxMDB2MTAwaDQwMGwtMjcwIDMwMGgxNzBsLTI3MCAzMDBoMTcwbC0zMDAgMzMzbC0zMDAgLTMzM2gxNzBsLTI3MCAtMzAwaDE3MGwtMjcwIC0zMDBoNDAwdi0xMDBoLTUwcS0yMSAwIC0zNS41IC0xNC41dC0xNC41IC0zNS41di01MGg0MDB2NTBxMCAyMSAtMTQuNSAzNS41dC0zNS41IDE0LjVoLTUweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUyMDA7IiBkPSJNNjAwIDExNzlxOTQgMCAxNjcuNSAtNTYuNXQ5OS41IC0xNDUuNXE4OSAtNiAxNTAuNSAtNzEuNXQ2MS41IC0xNTUuNXEwIC02MSAtMjkuNSAtMTEyLjV0LTc5LjUgLTgyLjVxOSAtMjkgOSAtNTVxMCAtNzQgLTUyLjUgLTEyNi41dC0xMjYuNSAtNTIuNXEtNTUgMCAtMTAwIDMwdi0yNTFxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTUwaC0zMDB2NTBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41djI1MXEtNDUgLTMwIC0xMDAgLTMwIHEtNzQgMCAtMTI2LjUgNTIuNXQtNTIuNSAxMjYuNXEwIDE4IDQgMzhxLTQ3IDIxIC03NS41IDY1dC0yOC41IDk3cTAgNzQgNTIuNSAxMjYuNXQxMjYuNSA1Mi41cTUgMCAyMyAtMnEwIDIgLTEgMTB0LTEgMTNxMCAxMTYgODEuNSAxOTcuNXQxOTcuNSA4MS41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUyMDE7IiBkPSJNMTAxMCAxMDEwcTExMSAtMTExIDE1MC41IC0yNjAuNXQwIC0yOTl0LTE1MC41IC0yNjAuNXEtODMgLTgzIC0xOTEuNSAtMTI2LjV0LTIxOC41IC00My41dC0yMTguNSA0My41dC0xOTEuNSAxMjYuNXEtMTExIDExMSAtMTUwLjUgMjYwLjV0MCAyOTl0MTUwLjUgMjYwLjVxODMgODMgMTkxLjUgMTI2LjV0MjE4LjUgNDMuNXQyMTguNSAtNDMuNXQxOTEuNSAtMTI2LjV6TTQ3NiAxMDY1cS00IDAgLTggLTFxLTEyMSAtMzQgLTIwOS41IC0xMjIuNSB0LTEyMi41IC0yMDkuNXEtNCAtMTIgMi41IC0yM3QxOC41IC0xNGwzNiAtOXEzIC0xIDcgLTFxMjMgMCAyOSAyMnEyNyA5NiA5OCAxNjZxNzAgNzEgMTY2IDk4cTExIDMgMTcuNSAxMy41dDMuNSAyMi41bC05IDM1cS0zIDEzIC0xNCAxOXEtNyA0IC0xNSA0ek01MTIgOTIwcS00IDAgLTkgLTJxLTgwIC0yNCAtMTM4LjUgLTgyLjV0LTgyLjUgLTEzOC41cS00IC0xMyAyIC0yNHQxOSAtMTRsMzQgLTlxNCAtMSA4IC0xcTIyIDAgMjggMjEgcTE4IDU4IDU4LjUgOTguNXQ5Ny41IDU4LjVxMTIgMyAxOCAxMy41dDMgMjEuNWwtOSAzNXEtMyAxMiAtMTQgMTlxLTcgNCAtMTUgNHpNNzE5LjUgNzE5LjVxLTQ5LjUgNDkuNSAtMTE5LjUgNDkuNXQtMTE5LjUgLTQ5LjV0LTQ5LjUgLTExOS41dDQ5LjUgLTExOS41dDExOS41IC00OS41dDExOS41IDQ5LjV0NDkuNSAxMTkuNXQtNDkuNSAxMTkuNXpNODU1IDU1MXEtMjIgMCAtMjggLTIxcS0xOCAtNTggLTU4LjUgLTk4LjV0LTk4LjUgLTU3LjUgcS0xMSAtNCAtMTcgLTE0LjV0LTMgLTIxLjVsOSAtMzVxMyAtMTIgMTQgLTE5cTcgLTQgMTUgLTRxNCAwIDkgMnE4MCAyNCAxMzguNSA4Mi41dDgyLjUgMTM4LjVxNCAxMyAtMi41IDI0dC0xOC41IDE0bC0zNCA5cS00IDEgLTggMXpNMTAwMCA1MTVxLTIzIDAgLTI5IC0yMnEtMjcgLTk2IC05OCAtMTY2cS03MCAtNzEgLTE2NiAtOThxLTExIC0zIC0xNy41IC0xMy41dC0zLjUgLTIyLjVsOSAtMzVxMyAtMTMgMTQgLTE5cTcgLTQgMTUgLTQgcTQgMCA4IDFxMTIxIDM0IDIwOS41IDEyMi41dDEyMi41IDIwOS41cTQgMTIgLTIuNSAyM3QtMTguNSAxNGwtMzYgOXEtMyAxIC03IDF6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTIwMjsiIGQ9Ik03MDAgODAwaDMwMHYtMzgwaC0xODB2MjAwaC0zNDB2LTIwMGgtMzgwdjc1NXEwIDEwIDcuNSAxNy41dDE3LjUgNy41aDU3NXYtNDAwek0xMDAwIDkwMGgtMjAwdjIwMHpNNzAwIDMwMGgxNjJsLTIxMiAtMjEybC0yMTIgMjEyaDE2MnYyMDBoMTAwdi0yMDB6TTUyMCAwaC0zOTVxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXYzOTV6TTEwMDAgMjIwdi0xOTVxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC0xOTV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTIwMzsiIGQ9Ik03MDAgODAwaDMwMHYtNTIwbC0zNTAgMzUwbC01NTAgLTU1MHYxMDk1cTAgMTAgNy41IDE3LjV0MTcuNSA3LjVoNTc1di00MDB6TTEwMDAgOTAwaC0yMDB2MjAwek04NjIgMjAwaC0xNjJ2LTIwMGgtMTAwdjIwMGgtMTYybDIxMiAyMTJ6TTQ4MCAwaC0zNTVxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXY1NWgzODB2LTgwek0xMDAwIDgwdi01NXEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTE1NXY4MGgxODB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTIwNDsiIGQ9Ik0xMTYyIDgwMGgtMTYydi0yMDBoMTAwbDEwMCAtMTAwaC0zMDB2MzAwaC0xNjJsMjEyIDIxMnpNMjAwIDgwMGgyMDBxMjcgMCA0MCAtMnQyOS41IC0xMC41dDIzLjUgLTMwdDcgLTU3LjVoMzAwdi0xMDBoLTYwMGwtMjAwIC0zNTB2NDUwaDEwMHEwIDM2IDcgNTcuNXQyMy41IDMwdDI5LjUgMTAuNXQ0MCAyek04MDAgNDAwaDI0MGwtMjQwIC00MDBoLTgwMGwzMDAgNTAwaDUwMHYtMTAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUyMDU7IiBkPSJNNjUwIDExMDBoMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di01MGg1MHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0zMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djEwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoNTB2NTBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek0xMDAwIDg1MHYxNTBxNDEgMCA3MC41IC0yOS41dDI5LjUgLTcwLjV2LTgwMCBxMCAtNDEgLTI5LjUgLTcwLjV0LTcwLjUgLTI5LjVoLTYwMHEtMSAwIC0yMCA0bDI0NiAyNDZsLTMyNiAzMjZ2MzI0cTAgNDEgMjkuNSA3MC41dDcwLjUgMjkuNXYtMTUwcTAgLTYyIDQ0IC0xMDZ0MTA2IC00NGgzMDBxNjIgMCAxMDYgNDR0NDQgMTA2ek00MTIgMjUwbC0yMTIgLTIxMnYxNjJoLTIwMHYxMDBoMjAwdjE2MnoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMjA2OyIgZD0iTTQ1MCAxMTAwaDEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNTBoNTBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMzAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDUwdjUwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNODAwIDg1MHYxNTBxNDEgMCA3MC41IC0yOS41dDI5LjUgLTcwLjV2LTUwMCBoLTIwMHYtMzAwaDIwMHEwIC0zNiAtNyAtNTcuNXQtMjMuNSAtMzB0LTI5LjUgLTEwLjV0LTQwIC0yaC02MDBxLTQxIDAgLTcwLjUgMjkuNXQtMjkuNSA3MC41djgwMHEwIDQxIDI5LjUgNzAuNXQ3MC41IDI5LjV2LTE1MHEwIC02MiA0NCAtMTA2dDEwNiAtNDRoMzAwcTYyIDAgMTA2IDQ0dDQ0IDEwNnpNMTIxMiAyNTBsLTIxMiAtMjEydjE2MmgtMjAwdjEwMGgyMDB2MTYyeiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUyMDk7IiBkPSJNNjU4IDExOTdsNjM3IC0xMTA0cTIzIC0zOCA3IC02NS41dC02MCAtMjcuNWgtMTI3NnEtNDQgMCAtNjAgMjcuNXQ3IDY1LjVsNjM3IDExMDRxMjIgMzkgNTQgMzl0NTQgLTM5ek03MDQgODAwaC0yMDhxLTIwIDAgLTMyIC0xNC41dC04IC0zNC41bDU4IC0zMDJxNCAtMjAgMjEuNSAtMzQuNXQzNy41IC0xNC41aDU0cTIwIDAgMzcuNSAxNC41dDIxLjUgMzQuNWw1OCAzMDJxNCAyMCAtOCAzNC41dC0zMiAxNC41ek01MDAgMzAwdi0xMDBoMjAwIHYxMDBoLTIwMHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMjEwOyIgZD0iTTQyNSAxMTAwaDI1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTE1MHEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTI1MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djE1MHEwIDEwIDcuNSAxNy41dDE3LjUgNy41ek00MjUgODAwaDI1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTE1MHEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTI1MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djE1MHEwIDEwIDcuNSAxNy41IHQxNy41IDcuNXpNODI1IDgwMGgyNTBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di0xNTBxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC0yNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXYxNTBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNXpNMjUgNTAwaDI1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTE1MHEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTI1MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djE1MCBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNXpNNDI1IDUwMGgyNTBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di0xNTBxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC0yNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXYxNTBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNXpNODI1IDUwMGgyNTBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di0xNTBxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC0yNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNSB2MTUwcTAgMTAgNy41IDE3LjV0MTcuNSA3LjV6TTI1IDIwMGgyNTBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di0xNTBxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC0yNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXYxNTBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNXpNNDI1IDIwMGgyNTBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di0xNTBxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC0yNTBxLTEwIDAgLTE3LjUgNy41IHQtNy41IDE3LjV2MTUwcTAgMTAgNy41IDE3LjV0MTcuNSA3LjV6TTgyNSAyMDBoMjUwcTEwIDAgMTcuNSAtNy41dDcuNSAtMTcuNXYtMTUwcTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtMjUwcS0xMCAwIC0xNy41IDcuNXQtNy41IDE3LjV2MTUwcTAgMTAgNy41IDE3LjV0MTcuNSA3LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTIxMTsiIGQ9Ik03MDAgMTIwMGgxMDB2LTIwMGgtMTAwdi0xMDBoMzUwcTYyIDAgODYuNSAtMzkuNXQtMy41IC05NC41bC02NiAtMTMycS00MSAtODMgLTgxIC0xMzRoLTc3MnEtNDAgNTEgLTgxIDEzNGwtNjYgMTMycS0yOCA1NSAtMy41IDk0LjV0ODYuNSAzOS41aDM1MHYxMDBoLTEwMHYyMDBoMTAwdjEwMGgyMDB2LTEwMHpNMjUwIDQwMGg3MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV0LTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTEybDEzNyAtMTAwIGgtOTUwbDEzOCAxMDBoLTEzcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXQxNC41IDM1LjV0MzUuNSAxNC41ek01MCAxMDBoMTEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNTBoLTEyMDB2NTBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUyMTI7IiBkPSJNNjAwIDEzMDBxNDAgMCA2OC41IC0yOS41dDI4LjUgLTcwLjVoLTE5NHEwIDQxIDI4LjUgNzAuNXQ2OC41IDI5LjV6TTQ0MyAxMTAwaDMxNHExOCAtMzcgMTggLTc1cTAgLTggLTMgLTI1aDMyOHE0MSAwIDQ0LjUgLTE2LjV0LTMwLjUgLTM4LjVsLTE3NSAtMTQ1aC02NzhsLTE3OCAxNDVxLTM0IDIyIC0yOSAzOC41dDQ2IDE2LjVoMzI4cS0zIDE3IC0zIDI1cTAgMzggMTggNzV6TTI1MCA3MDBoNzAwcTIxIDAgMzUuNSAtMTQuNSB0MTQuNSAtMzUuNXQtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMTUwdi0yMDBsMjc1IC0yMDBoLTk1MGwyNzUgMjAwdjIwMGgtMTUwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXQxNC41IDM1LjV0MzUuNSAxNC41ek01MCAxMDBoMTEwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNTBoLTEyMDB2NTBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUyMTM7IiBkPSJNNjAwIDExODFxNzUgMCAxMjggLTUzdDUzIC0xMjh0LTUzIC0xMjh0LTEyOCAtNTN0LTEyOCA1M3QtNTMgMTI4dDUzIDEyOHQxMjggNTN6TTYwMiA3OThoNDZxMzQgMCA1NS41IC0yOC41dDIxLjUgLTg2LjVxMCAtNzYgMzkgLTE4M2gtMzI0cTM5IDEwNyAzOSAxODNxMCA1OCAyMS41IDg2LjV0NTYuNSAyOC41aDQ1ek0yNTAgNDAwaDcwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXQtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMTMgbDEzOCAtMTAwaC05NTBsMTM3IDEwMGgtMTJxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41dDE0LjUgMzUuNXQzNS41IDE0LjV6TTUwIDEwMGgxMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di01MGgtMTIwMHY1MHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTIxNDsiIGQ9Ik02MDAgMTMwMHE0NyAwIDkyLjUgLTUzLjV0NzEgLTEyM3QyNS41IC0xMjMuNXEwIC03OCAtNTUuNSAtMTMzLjV0LTEzMy41IC01NS41dC0xMzMuNSA1NS41dC01NS41IDEzMy41cTAgNjIgMzQgMTQzbDE0NCAtMTQzbDExMSAxMTFsLTE2MyAxNjNxMzQgMjYgNjMgMjZ6TTYwMiA3OThoNDZxMzQgMCA1NS41IC0yOC41dDIxLjUgLTg2LjVxMCAtNzYgMzkgLTE4M2gtMzI0cTM5IDEwNyAzOSAxODNxMCA1OCAyMS41IDg2LjV0NTYuNSAyOC41aDQ1IHpNMjUwIDQwMGg3MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV0LTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTEzbDEzOCAtMTAwaC05NTBsMTM3IDEwMGgtMTJxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41dDE0LjUgMzUuNXQzNS41IDE0LjV6TTUwIDEwMGgxMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di01MGgtMTIwMHY1MHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTIxNTsiIGQ9Ik02MDAgMTIwMGwzMDAgLTE2MXYtMTM5aC0zMDBxMCAtNTcgMTguNSAtMTA4dDUwIC05MS41dDYzIC03MnQ3MCAtNjcuNXQ1Ny41IC02MWgtNTMwcS02MCA4MyAtOTAuNSAxNzcuNXQtMzAuNSAxNzguNXQzMyAxNjQuNXQ4Ny41IDEzOS41dDEyNiA5Ni41dDE0NS41IDQxLjV2LTk4ek0yNTAgNDAwaDcwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXQtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMTNsMTM4IC0xMDBoLTk1MGwxMzcgMTAwIGgtMTJxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41dDE0LjUgMzUuNXQzNS41IDE0LjV6TTUwIDEwMGgxMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di01MGgtMTIwMHY1MHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTIxNjsiIGQ9Ik02MDAgMTMwMHE0MSAwIDcwLjUgLTI5LjV0MjkuNSAtNzAuNXYtNzhxNDYgLTI2IDczIC03MnQyNyAtMTAwdi01MGgtNDAwdjUwcTAgNTQgMjcgMTAwdDczIDcydjc4cTAgNDEgMjkuNSA3MC41dDcwLjUgMjkuNXpNNDAwIDgwMGg0MDBxNTQgMCAxMDAgLTI3dDcyIC03M2gtMTcydi0xMDBoMjAwdi0xMDBoLTIwMHYtMTAwaDIwMHYtMTAwaC0yMDB2LTEwMGgyMDBxMCAtODMgLTU4LjUgLTE0MS41dC0xNDEuNSAtNTguNWgtNDAwIHEtODMgMCAtMTQxLjUgNTguNXQtNTguNSAxNDEuNXY0MDBxMCA4MyA1OC41IDE0MS41dDE0MS41IDU4LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTIxODsiIGQ9Ik0xNTAgMTEwMGg5MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTUwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtOTAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXY1MDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek0xMjUgNDAwaDk1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTUwcTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtMjgzbDIyNCAtMjI0cTEzIC0xMyAxMyAtMzEuNXQtMTMgLTMyIHQtMzEuNSAtMTMuNXQtMzEuNSAxM2wtODggODhoLTUyNGwtODcgLTg4cS0xMyAtMTMgLTMyIC0xM3QtMzIgMTMuNXQtMTMgMzJ0MTMgMzEuNWwyMjQgMjI0aC0yODlxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXY1MHEwIDEwIDcuNSAxNy41dDE3LjUgNy41ek01NDEgMzAwbC0xMDAgLTEwMGgzMjRsLTEwMCAxMDBoLTEyNHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMjE5OyIgZD0iTTIwMCAxMTAwaDgwMHE4MyAwIDE0MS41IC01OC41dDU4LjUgLTE0MS41di0yMDBoLTEwMHEwIDQxIC0yOS41IDcwLjV0LTcwLjUgMjkuNWgtMjUwcS00MSAwIC03MC41IC0yOS41dC0yOS41IC03MC41aC0xMDBxMCA0MSAtMjkuNSA3MC41dC03MC41IDI5LjVoLTI1MHEtNDEgMCAtNzAuNSAtMjkuNXQtMjkuNSAtNzAuNWgtMTAwdjIwMHEwIDgzIDU4LjUgMTQxLjV0MTQxLjUgNTguNXpNMTAwIDYwMGgxMDAwcTQxIDAgNzAuNSAtMjkuNSB0MjkuNSAtNzAuNXYtMzAwaC0xMjAwdjMwMHEwIDQxIDI5LjUgNzAuNXQ3MC41IDI5LjV6TTMwMCAxMDB2LTUwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djUwaDIwMHpNMTEwMCAxMDB2LTUwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djUwaDIwMHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMjIxOyIgZD0iTTQ4MCAxMTY1bDY4MiAtNjgzcTMxIC0zMSAzMSAtNzUuNXQtMzEgLTc1LjVsLTEzMSAtMTMxaC00ODFsLTUxNyA1MThxLTMyIDMxIC0zMiA3NS41dDMyIDc1LjVsMjk1IDI5NnEzMSAzMSA3NS41IDMxdDc2LjUgLTMxek0xMDggNzk0bDM0MiAtMzQybDMwMyAzMDRsLTM0MSAzNDF6TTI1MCAxMDBoODAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di01MGgtOTAwdjUwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMjIzOyIgZD0iTTEwNTcgNjQ3bC0xODkgNTA2cS04IDE5IC0yNy41IDMzdC00MC41IDE0aC00MDBxLTIxIDAgLTQwLjUgLTE0dC0yNy41IC0zM2wtMTg5IC01MDZxLTggLTE5IDEuNSAtMzN0MzAuNSAtMTRoNjI1di0xNTBxMCAtMjEgMTQuNSAtMzUuNXQzNS41IC0xNC41dDM1LjUgMTQuNXQxNC41IDM1LjV2MTUwaDEyNXEyMSAwIDMwLjUgMTR0MS41IDMzek04OTcgMGgtNTk1djUwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWg1MHY1MCBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDQ4djMwMGgyMDB2LTMwMGg0N3EyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNTBoNTBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTUweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUyMjQ7IiBkPSJNOTAwIDgwMGgzMDB2LTU3NXEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTM3NXY1OTFsLTMwMCAzMDB2ODRxMCAxMCA3LjUgMTcuNXQxNy41IDcuNWgzNzV2LTQwMHpNMTIwMCA5MDBoLTIwMHYyMDB6TTQwMCA2MDBoMzAwdi01NzVxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC02NTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXY5NTBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNWgzNzV2LTQwMHpNNzAwIDcwMGgtMjAwdjIwMHogIiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTIyNTsiIGQ9Ik00ODQgMTA5NWgxOTVxNzUgMCAxNDYgLTMyLjV0MTI0IC04NnQ4OS41IC0xMjIuNXQ0OC41IC0xNDJxMTggLTE0IDM1IC0yMHEzMSAtMTAgNjQuNSA2LjV0NDMuNSA0OC41cTEwIDM0IC0xNSA3MXEtMTkgMjcgLTkgNDNxNSA4IDEyLjUgMTF0MTkgLTF0MjMuNSAtMTZxNDEgLTQ0IDM5IC0xMDVxLTMgLTYzIC00NiAtMTA2LjV0LTEwNCAtNDMuNWgtNjJxLTcgLTU1IC0zNSAtMTE3dC01NiAtMTAwbC0zOSAtMjM0cS0zIC0yMCAtMjAgLTM0LjUgdC0zOCAtMTQuNWgtMTAwcS0yMSAwIC0zMyAxNC41dC05IDM0LjVsMTIgNzBxLTQ5IC0xNCAtOTEgLTE0aC0xOTVxLTI0IDAgLTY1IDhsLTExIC02NHEtMyAtMjAgLTIwIC0zNC41dC0zOCAtMTQuNWgtMTAwcS0yMSAwIC0zMyAxNC41dC05IDM0LjVsMjYgMTU3cS04NCA3NCAtMTI4IDE3NWwtMTU5IDUzcS0xOSA3IC0zMyAyNnQtMTQgNDB2NTBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDEyNHExMSA4NyA1NiAxNjZsLTExMSA5NSBxLTE2IDE0IC0xMi41IDIzLjV0MjQuNSA5LjVoMjAzcTExNiAxMDEgMjUwIDEwMXpNNjc1IDEwMDBoLTI1MHEtMTAgMCAtMTcuNSAtNy41dC03LjUgLTE3LjV2LTUwcTAgLTEwIDcuNSAtMTcuNXQxNy41IC03LjVoMjUwcTEwIDAgMTcuNSA3LjV0Ny41IDE3LjV2NTBxMCAxMCAtNy41IDE3LjV0LTE3LjUgNy41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUyMjY7IiBkPSJNNjQxIDkwMGw0MjMgMjQ3cTE5IDggNDIgMi41dDM3IC0yMS41bDMyIC0zOHExNCAtMTUgMTIuNSAtMzZ0LTE3LjUgLTM0bC0xMzkgLTEyMGgtMzkwek01MCAxMTAwaDEwNnE2NyAwIDEwMyAtMTd0NjYgLTcxbDEwMiAtMjEyaDgyM3EyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNTBxMCAtMjEgLTE0IC00MHQtMzMgLTI2bC03MzcgLTEzMnEtMjMgLTQgLTQwIDZ0LTI2IDI1cS00MiA2NyAtMTAwIDY3aC0zMDBxLTYyIDAgLTEwNiA0NCB0LTQ0IDEwNnYyMDBxMCA2MiA0NCAxMDZ0MTA2IDQ0ek0xNzMgOTI4aC04MHEtMTkgMCAtMjggLTE0dC05IC0zNXYtNTZxMCAtNTEgNDIgLTUxaDEzNHExNiAwIDIxLjUgOHQ1LjUgMjRxMCAxMSAtMTYgNDV0LTI3IDUxcS0xOCAyOCAtNDMgMjh6TTU1MCA3MjdxLTMyIDAgLTU0LjUgLTIyLjV0LTIyLjUgLTU0LjV0MjIuNSAtNTQuNXQ1NC41IC0yMi41dDU0LjUgMjIuNXQyMi41IDU0LjV0LTIyLjUgNTQuNXQtNTQuNSAyMi41ek0xMzAgMzg5IGwxNTIgMTMwcTE4IDE5IDM0IDI0dDMxIC0zLjV0MjQuNSAtMTcuNXQyNS41IC0yOHEyOCAtMzUgNTAuNSAtNTF0NDguNSAtMTNsNjMgNWw0OCAtMTc5cTEzIC02MSAtMy41IC05Ny41dC02Ny41IC03OS41bC04MCAtNjlxLTQ3IC00MCAtMTA5IC0zNS41dC0xMDMgNTEuNWwtMTMwIDE1MXEtNDAgNDcgLTM1LjUgMTA5LjV0NTEuNSAxMDIuNXpNMzgwIDM3N2wtMTAyIC04OHEtMzEgLTI3IDIgLTY1bDM3IC00M3ExMyAtMTUgMjcuNSAtMTkuNSB0MzEuNSA2LjVsNjEgNTNxMTkgMTYgMTQgNDlxLTIgMjAgLTEyIDU2dC0xNyA0NXEtMTEgMTIgLTE5IDE0dC0yMyAtOHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMjI3OyIgZD0iTTYyNSAxMjAwaDE1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTEwOXE3OSAtMzMgMTMxIC04Ny41dDUzIC0xMjguNXExIC00NiAtMTUgLTg0LjV0LTM5IC02MXQtNDYgLTM4dC0zOSAtMjEuNWwtMTcgLTZxNiAwIDE1IC0xLjV0MzUgLTl0NTAgLTE3LjV0NTMgLTMwdDUwIC00NXQzNS41IC02NHQxNC41IC04NHEwIC01OSAtMTEuNSAtMTA1LjV0LTI4LjUgLTc2LjV0LTQ0IC01MXQtNDkuNSAtMzEuNXQtNTQuNSAtMTZ0LTQ5LjUgLTYuNSB0LTQzLjUgLTF2LTc1cTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtMTUwcS0xMCAwIC0xNy41IDcuNXQtNy41IDE3LjV2NzVoLTEwMHYtNzVxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41aC0xNTBxLTEwIDAgLTE3LjUgNy41dC03LjUgMTcuNXY3NWgtMTc1cS0xMCAwIC0xNy41IDcuNXQtNy41IDE3LjV2MTUwcTAgMTAgNy41IDE3LjV0MTcuNSA3LjVoNzV2NjAwaC03NXEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djE1MCBxMCAxMCA3LjUgMTcuNXQxNy41IDcuNWgxNzV2NzVxMCAxMCA3LjUgMTcuNXQxNy41IDcuNWgxNTBxMTAgMCAxNy41IC03LjV0Ny41IC0xNy41di03NWgxMDB2NzVxMCAxMCA3LjUgMTcuNXQxNy41IDcuNXpNNDAwIDkwMHYtMjAwaDI2M3EyOCAwIDQ4LjUgMTAuNXQzMCAyNXQxNSAyOXQ1LjUgMjUuNWwxIDEwcTAgNCAtMC41IDExdC02IDI0dC0xNSAzMHQtMzAgMjR0LTQ4LjUgMTFoLTI2M3pNNDAwIDUwMHYtMjAwaDM2M3EyOCAwIDQ4LjUgMTAuNSB0MzAgMjV0MTUgMjl0NS41IDI1LjVsMSAxMHEwIDQgLTAuNSAxMXQtNiAyNHQtMTUgMzB0LTMwIDI0dC00OC41IDExaC0zNjN6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTIzMDsiIGQ9Ik0yMTIgMTE5OGg3ODBxODYgMCAxNDcgLTYxdDYxIC0xNDd2LTQxNnEwIC01MSAtMTggLTE0Mi41dC0zNiAtMTU3LjVsLTE4IC02NnEtMjkgLTg3IC05My41IC0xNDYuNXQtMTQ2LjUgLTU5LjVoLTU3MnEtODIgMCAtMTQ3IDU5dC05MyAxNDdxLTggMjggLTIwIDczdC0zMiAxNDMuNXQtMjAgMTQ5LjV2NDE2cTAgODYgNjEgMTQ3dDE0NyA2MXpNNjAwIDEwNDVxLTcwIDAgLTEzMi41IC0xMS41dC0xMDUuNSAtMzAuNXQtNzguNSAtNDEuNSB0LTU3IC00NXQtMzYgLTQxdC0yMC41IC0zMC41bC02IC0xMmwxNTYgLTI0M2g1NjBsMTU2IDI0M3EtMiA1IC02IDEyLjV0LTIwIDI5LjV0LTM2LjUgNDJ0LTU3IDQ0LjV0LTc5IDQydC0xMDUgMjkuNXQtMTMyLjUgMTJ6TTc2MiA3MDNoLTE1N2wxOTUgMjYxeiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUyMzE7IiBkPSJNNDc1IDEzMDBoMTUwcTEwMyAwIDE4OSAtODZ0ODYgLTE4OXYtNTAwcTAgLTQxIC00MiAtODN0LTgzIC00MmgtNDUwcS00MSAwIC04MyA0MnQtNDIgODN2NTAwcTAgMTAzIDg2IDE4OXQxODkgODZ6TTcwMCAzMDB2LTIyNXEwIC0yMSAtMjcgLTQ4dC00OCAtMjdoLTE1MHEtMjEgMCAtNDggMjd0LTI3IDQ4djIyNWgzMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTIzMjsiIGQ9Ik00NzUgMTMwMGg5NnEwIC0xNTAgODkuNSAtMjM5LjV0MjM5LjUgLTg5LjV2LTQ0NnEwIC00MSAtNDIgLTgzdC04MyAtNDJoLTQ1MHEtNDEgMCAtODMgNDJ0LTQyIDgzdjUwMHEwIDEwMyA4NiAxODl0MTg5IDg2ek03MDAgMzAwdi0yMjVxMCAtMjEgLTI3IC00OHQtNDggLTI3aC0xNTBxLTIxIDAgLTQ4IDI3dC0yNyA0OHYyMjVoMzAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUyMzM7IiBkPSJNMTI5NCA3NjdsLTYzOCAtMjgzbC0zNzggMTcwbC03OCAtNjB2LTIyNGwxMDAgLTE1MHYtMTk5bC0xNTAgMTQ4bC0xNTAgLTE0OXYyMDBsMTAwIDE1MHYyNTBxMCA0IC0wLjUgMTAuNXQwIDkuNXQxIDh0MyA4dDYuNSA2bDQ3IDQwbC0xNDcgNjVsNjQyIDI4M3pNMTAwMCAzODBsLTM1MCAtMTY2bC0zNTAgMTY2djE0N2wzNTAgLTE2NWwzNTAgMTY1di0xNDd6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTIzNDsiIGQ9Ik0yNTAgODAwcTYyIDAgMTA2IC00NHQ0NCAtMTA2dC00NCAtMTA2dC0xMDYgLTQ0dC0xMDYgNDR0LTQ0IDEwNnQ0NCAxMDZ0MTA2IDQ0ek02NTAgODAwcTYyIDAgMTA2IC00NHQ0NCAtMTA2dC00NCAtMTA2dC0xMDYgLTQ0dC0xMDYgNDR0LTQ0IDEwNnQ0NCAxMDZ0MTA2IDQ0ek0xMDUwIDgwMHE2MiAwIDEwNiAtNDR0NDQgLTEwNnQtNDQgLTEwNnQtMTA2IC00NHQtMTA2IDQ0dC00NCAxMDZ0NDQgMTA2dDEwNiA0NHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMjM1OyIgZD0iTTU1MCAxMTAwcTYyIDAgMTA2IC00NHQ0NCAtMTA2dC00NCAtMTA2dC0xMDYgLTQ0dC0xMDYgNDR0LTQ0IDEwNnQ0NCAxMDZ0MTA2IDQ0ek01NTAgNzAwcTYyIDAgMTA2IC00NHQ0NCAtMTA2dC00NCAtMTA2dC0xMDYgLTQ0dC0xMDYgNDR0LTQ0IDEwNnQ0NCAxMDZ0MTA2IDQ0ek01NTAgMzAwcTYyIDAgMTA2IC00NHQ0NCAtMTA2dC00NCAtMTA2dC0xMDYgLTQ0dC0xMDYgNDR0LTQ0IDEwNnQ0NCAxMDZ0MTA2IDQ0eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUyMzY7IiBkPSJNMTI1IDExMDBoOTUwcTEwIDAgMTcuNSAtNy41dDcuNSAtMTcuNXYtMTUwcTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtOTUwcS0xMCAwIC0xNy41IDcuNXQtNy41IDE3LjV2MTUwcTAgMTAgNy41IDE3LjV0MTcuNSA3LjV6TTEyNSA3MDBoOTUwcTEwIDAgMTcuNSAtNy41dDcuNSAtMTcuNXYtMTUwcTAgLTEwIC03LjUgLTE3LjV0LTE3LjUgLTcuNWgtOTUwcS0xMCAwIC0xNy41IDcuNXQtNy41IDE3LjV2MTUwcTAgMTAgNy41IDE3LjUgdDE3LjUgNy41ek0xMjUgMzAwaDk1MHExMCAwIDE3LjUgLTcuNXQ3LjUgLTE3LjV2LTE1MHEwIC0xMCAtNy41IC0xNy41dC0xNy41IC03LjVoLTk1MHEtMTAgMCAtMTcuNSA3LjV0LTcuNSAxNy41djE1MHEwIDEwIDcuNSAxNy41dDE3LjUgNy41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUyMzc7IiBkPSJNMzUwIDEyMDBoNTAwcTE2MiAwIDI1NiAtOTMuNXQ5NCAtMjU2LjV2LTUwMHEwIC0xNjUgLTkzLjUgLTI1Ny41dC0yNTYuNSAtOTIuNWgtNTAwcS0xNjUgMCAtMjU3LjUgOTIuNXQtOTIuNSAyNTcuNXY1MDBxMCAxNjUgOTIuNSAyNTcuNXQyNTcuNSA5Mi41ek05MDAgMTAwMGgtNjAwcS00MSAwIC03MC41IC0yOS41dC0yOS41IC03MC41di02MDBxMCAtNDEgMjkuNSAtNzAuNXQ3MC41IC0yOS41aDYwMHE0MSAwIDcwLjUgMjkuNSB0MjkuNSA3MC41djYwMHEwIDQxIC0yOS41IDcwLjV0LTcwLjUgMjkuNXpNMzUwIDkwMGg1MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTMwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNTAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYzMDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek00MDAgODAwdi0yMDBoNDAwdjIwMGgtNDAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUyMzg7IiBkPSJNMTUwIDExMDBoMTAwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXQtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNTB2LTIwMGg1MHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXQtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNTB2LTIwMGg1MHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXQtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNTB2LTIwMGg1MHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXQtMTQuNSAtMzUuNSB0LTM1LjUgLTE0LjVoLTEwMDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41dDE0LjUgMzUuNXQzNS41IDE0LjVoNTB2MjAwaC01MHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV0MTQuNSAzNS41dDM1LjUgMTQuNWg1MHYyMDBoLTUwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXQxNC41IDM1LjV0MzUuNSAxNC41aDUwdjIwMGgtNTBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41dDE0LjUgMzUuNXQzNS41IDE0LjV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTIzOTsiIGQ9Ik02NTAgMTE4N3E4NyAtNjcgMTE4LjUgLTE1NnQwIC0xNzh0LTExOC41IC0xNTVxLTg3IDY2IC0xMTguNSAxNTV0MCAxNzh0MTE4LjUgMTU2ek0zMDAgODAwcTEyNCAwIDIxMiAtODh0ODggLTIxMnEtMTI0IDAgLTIxMiA4OHQtODggMjEyek0xMDAwIDgwMHEwIC0xMjQgLTg4IC0yMTJ0LTIxMiAtODhxMCAxMjQgODggMjEydDIxMiA4OHpNMzAwIDUwMHExMjQgMCAyMTIgLTg4dDg4IC0yMTJxLTEyNCAwIC0yMTIgODh0LTg4IDIxMnogTTEwMDAgNTAwcTAgLTEyNCAtODggLTIxMnQtMjEyIC04OHEwIDEyNCA4OCAyMTJ0MjEyIDg4ek03MDAgMTk5di0xNDRxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjV0LTM1LjUgMTQuNXQtMTQuNSAzNS41djE0MnE0MCAtNCA0MyAtNHExNyAwIDU3IDZ6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTI0MDsiIGQ9Ik03NDUgODc4bDY5IDE5cTI1IDYgNDUgLTEybDI5OCAtMjk1cTExIC0xMSAxNSAtMjYuNXQtMiAtMzAuNXEtNSAtMTQgLTE4IC0yMy41dC0yOCAtOS41aC04cTEgMCAxIC0xM3EwIC0yOSAtMiAtNTZ0LTguNSAtNjJ0LTIwIC02M3QtMzMgLTUzdC01MSAtMzl0LTcyLjUgLTE0aC0xNDZxLTE4NCAwIC0xODQgMjg4cTAgMjQgMTAgNDdxLTIwIDQgLTYyIDR0LTYzIC00cTExIC0yNCAxMSAtNDdxMCAtMjg4IC0xODQgLTI4OGgtMTQyIHEtNDggMCAtODQuNSAyMXQtNTYgNTF0LTMyIDcxLjV0LTE2IDc1dC0zLjUgNjguNXEwIDEzIDIgMTNoLTdxLTE1IDAgLTI3LjUgOS41dC0xOC41IDIzLjVxLTYgMTUgLTIgMzAuNXQxNSAyNS41bDI5OCAyOTZxMjAgMTggNDYgMTFsNzYgLTE5cTIwIC01IDMwLjUgLTIyLjV0NS41IC0zNy41dC0yMi41IC0zMXQtMzcuNSAtNWwtNTEgMTJsLTE4MiAtMTkzaDg5MWwtMTgyIDE5M2wtNDQgLTEycS0yMCAtNSAtMzcuNSA2dC0yMi41IDMxdDYgMzcuNSB0MzEgMjIuNXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMjQxOyIgZD0iTTEyMDAgOTAwaC01MHEwIDIxIC00IDM3dC05LjUgMjYuNXQtMTggMTcuNXQtMjIgMTF0LTI4LjUgNS41dC0zMSAydC0zNyAwLjVoLTIwMHYtODUwcTAgLTIyIDI1IC0zNC41dDUwIC0xMy41bDI1IC0ydi0xMDBoLTQwMHYxMDBxNCAwIDExIDAuNXQyNCAzdDMwIDd0MjQgMTV0MTEgMjQuNXY4NTBoLTIwMHEtMjUgMCAtMzcgLTAuNXQtMzEgLTJ0LTI4LjUgLTUuNXQtMjIgLTExdC0xOCAtMTcuNXQtOS41IC0yNi41dC00IC0zN2gtNTB2MzAwIGgxMDAwdi0zMDB6TTUwMCA0NTBoLTI1cTAgMTUgLTQgMjQuNXQtOSAxNC41dC0xNyA3LjV0LTIwIDN0LTI1IDAuNWgtMTAwdi00MjVxMCAtMTEgMTIuNSAtMTcuNXQyNS41IC03LjVoMTJ2LTUwaC0yMDB2NTBxNTAgMCA1MCAyNXY0MjVoLTEwMHEtMTcgMCAtMjUgLTAuNXQtMjAgLTN0LTE3IC03LjV0LTkgLTE0LjV0LTQgLTI0LjVoLTI1djE1MGg1MDB2LTE1MHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMjQyOyIgZD0iTTEwMDAgMzAwdjUwcS0yNSAwIC01NSAzMnEtMTQgMTQgLTI1IDMxdC0xNiAyN2wtNCAxMWwtMjg5IDc0N2gtNjlsLTMwMCAtNzU0cS0xOCAtMzUgLTM5IC01NnEtOSAtOSAtMjQuNSAtMTguNXQtMjYuNSAtMTQuNWwtMTEgLTV2LTUwaDI3M3Y1MHEtNDkgMCAtNzguNSAyMS41dC0xMS41IDY3LjVsNjkgMTc2aDI5M2w2MSAtMTY2cTEzIC0zNCAtMy41IC02Ni41dC01NS41IC0zMi41di01MGgzMTJ6TTQxMiA2OTFsMTM0IDM0MmwxMjEgLTM0MiBoLTI1NXpNMTEwMCAxNTB2LTEwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtMTAwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2MTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNWgxMDAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUyNDM7IiBkPSJNNTAgMTIwMGgxMTAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xMTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xMTAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXYxMTAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNNjExIDExMThoLTcwcS0xMyAwIC0xOCAtMTJsLTI5OSAtNzUzcS0xNyAtMzIgLTM1IC01MXEtMTggLTE4IC01NiAtMzRxLTEyIC01IC0xMiAtMTh2LTUwcTAgLTggNS41IC0xNHQxNC41IC02IGgyNzNxOCAwIDE0IDZ0NiAxNHY1MHEwIDggLTYgMTR0LTE0IDZxLTU1IDAgLTcxIDIzcS0xMCAxNCAwIDM5bDYzIDE2M2gyNjZsNTcgLTE1M3ExMSAtMzEgLTYgLTU1cS0xMiAtMTcgLTM2IC0xN3EtOCAwIC0xNCAtNnQtNiAtMTR2LTUwcTAgLTggNiAtMTR0MTQgLTZoMzEzcTggMCAxNCA2dDYgMTR2NTBxMCA3IC01LjUgMTN0LTEzLjUgN3EtMTcgMCAtNDIgMjVxLTI1IDI3IC00MCA2M2gtMWwtMjg4IDc0OHEtNSAxMiAtMTkgMTJ6TTYzOSA2MTEgaC0xOTdsMTAzIDI2NHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMjQ0OyIgZD0iTTEyMDAgMTEwMGgtMTIwMHYxMDBoMTIwMHYtMTAwek01MCAxMDAwaDQwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtOTAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC00MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djkwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTY1MCAxMDAwaDQwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNDAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC00MDAgcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXY0MDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek03MDAgOTAwdi0zMDBoMzAwdjMwMGgtMzAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUyNDU7IiBkPSJNNTAgMTIwMGg0MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTkwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNDAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXY5MDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek02NTAgNzAwaDQwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNDAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC00MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djQwMCBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek03MDAgNjAwdi0zMDBoMzAwdjMwMGgtMzAwek0xMjAwIDBoLTEyMDB2MTAwaDEyMDB2LTEwMHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMjQ2OyIgZD0iTTUwIDEwMDBoNDAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0zNTBoMTAwdjE1MHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoNDAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di0xNTBoMTAwdi0xMDBoLTEwMHYtMTUwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC00MDBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djE1MGgtMTAwdi0zNTBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTQwMCBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djgwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTcwMCA3MDB2LTMwMGgzMDB2MzAwaC0zMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTI0NzsiIGQ9Ik0xMDAgMGgtMTAwdjEyMDBoMTAwdi0xMjAwek0yNTAgMTEwMGg0MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTQwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtNDAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXY0MDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41ek0zMDAgMTAwMHYtMzAwaDMwMHYzMDBoLTMwMHpNMjUwIDUwMGg5MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTQwMCBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTkwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2NDAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMjQ4OyIgZD0iTTYwMCAxMTAwaDE1MHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNDAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xNTB2LTEwMGg0NTBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTQwMHEwIC0yMSAtMTQuNSAtMzUuNXQtMzUuNSAtMTQuNWgtOTAwcS0yMSAwIC0zNS41IDE0LjV0LTE0LjUgMzUuNXY0MDBxMCAyMSAxNC41IDM1LjV0MzUuNSAxNC41aDM1MHYxMDBoLTE1MHEtMjEgMCAtMzUuNSAxNC41IHQtMTQuNSAzNS41djQwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjVoMTUwdjEwMGgxMDB2LTEwMHpNNDAwIDEwMDB2LTMwMGgzMDB2MzAwaC0zMDB6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTI0OTsiIGQ9Ik0xMjAwIDBoLTEwMHYxMjAwaDEwMHYtMTIwMHpNNTUwIDExMDBoNDAwcTIxIDAgMzUuNSAtMTQuNXQxNC41IC0zNS41di00MDBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTQwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2NDAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXpNNjAwIDEwMDB2LTMwMGgzMDB2MzAwaC0zMDB6TTUwIDUwMGg5MDBxMjEgMCAzNS41IC0xNC41dDE0LjUgLTM1LjV2LTQwMCBxMCAtMjEgLTE0LjUgLTM1LjV0LTM1LjUgLTE0LjVoLTkwMHEtMjEgMCAtMzUuNSAxNC41dC0xNC41IDM1LjV2NDAwcTAgMjEgMTQuNSAzNS41dDM1LjUgMTQuNXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMjUwOyIgZD0iTTg2NSA1NjVsLTQ5NCAtNDk0cS0yMyAtMjMgLTQxIC0yM3EtMTQgMCAtMjIgMTMuNXQtOCAzOC41djEwMDBxMCAyNSA4IDM4LjV0MjIgMTMuNXExOCAwIDQxIC0yM2w0OTQgLTQ5NHExNCAtMTQgMTQgLTM1dC0xNCAtMzV6IiAvPgo8Z2x5cGggdW5pY29kZT0iJiN4ZTI1MTsiIGQ9Ik0zMzUgNjM1bDQ5NCA0OTRxMjkgMjkgNTAgMjAuNXQyMSAtNDkuNXYtMTAwMHEwIC00MSAtMjEgLTQ5LjV0LTUwIDIwLjVsLTQ5NCA0OTRxLTE0IDE0IC0xNCAzNXQxNCAzNXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMjUyOyIgZD0iTTEwMCA5MDBoMTAwMHE0MSAwIDQ5LjUgLTIxdC0yMC41IC01MGwtNDk0IC00OTRxLTE0IC0xNCAtMzUgLTE0dC0zNSAxNGwtNDk0IDQ5NHEtMjkgMjkgLTIwLjUgNTB0NDkuNSAyMXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMjUzOyIgZD0iTTYzNSA4NjVsNDk0IC00OTRxMjkgLTI5IDIwLjUgLTUwdC00OS41IC0yMWgtMTAwMHEtNDEgMCAtNDkuNSAyMXQyMC41IDUwbDQ5NCA0OTRxMTQgMTQgMzUgMTR0MzUgLTE0eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUyNTQ7IiBkPSJNNzAwIDc0MXYtMTgybC02OTIgLTMyM3YyMjFsNDEzIDE5M2wtNDEzIDE5M3YyMjF6TTEyMDAgMGgtODAwdjIwMGg4MDB2LTIwMHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMjU1OyIgZD0iTTEyMDAgOTAwaC0yMDB2LTEwMGgyMDB2LTEwMGgtMzAwdjMwMGgyMDB2MTAwaC0yMDB2MTAwaDMwMHYtMzAwek0wIDcwMGg1MHEwIDIxIDQgMzd0OS41IDI2LjV0MTggMTcuNXQyMiAxMXQyOC41IDUuNXQzMSAydDM3IDAuNWgxMDB2LTU1MHEwIC0yMiAtMjUgLTM0LjV0LTUwIC0xMy41bC0yNSAtMnYtMTAwaDQwMHYxMDBxLTQgMCAtMTEgMC41dC0yNCAzdC0zMCA3dC0yNCAxNXQtMTEgMjQuNXY1NTBoMTAwcTI1IDAgMzcgLTAuNXQzMSAtMiB0MjguNSAtNS41dDIyIC0xMXQxOCAtMTcuNXQ5LjUgLTI2LjV0NCAtMzdoNTB2MzAwaC04MDB2LTMwMHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMjU2OyIgZD0iTTgwMCA3MDBoLTUwcTAgMjEgLTQgMzd0LTkuNSAyNi41dC0xOCAxNy41dC0yMiAxMXQtMjguNSA1LjV0LTMxIDJ0LTM3IDAuNWgtMTAwdi01NTBxMCAtMjIgMjUgLTM0LjV0NTAgLTE0LjVsMjUgLTF2LTEwMGgtNDAwdjEwMHE0IDAgMTEgMC41dDI0IDN0MzAgN3QyNCAxNXQxMSAyNC41djU1MGgtMTAwcS0yNSAwIC0zNyAtMC41dC0zMSAtMnQtMjguNSAtNS41dC0yMiAtMTF0LTE4IC0xNy41dC05LjUgLTI2LjV0LTQgLTM3aC01MHYzMDAgaDgwMHYtMzAwek0xMTAwIDIwMGgtMjAwdi0xMDBoMjAwdi0xMDBoLTMwMHYzMDBoMjAwdjEwMGgtMjAwdjEwMGgzMDB2LTMwMHoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMjU3OyIgZD0iTTcwMSAxMDk4aDE2MHExNiAwIDIxIC0xMXQtNyAtMjNsLTQ2NCAtNDY0bDQ2NCAtNDY0cTEyIC0xMiA3IC0yM3QtMjEgLTExaC0xNjBxLTEzIDAgLTIzIDlsLTQ3MSA0NzFxLTcgOCAtNyAxOHQ3IDE4bDQ3MSA0NzFxMTAgOSAyMyA5eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGUyNTg7IiBkPSJNMzM5IDEwOThoMTYwcTEzIDAgMjMgLTlsNDcxIC00NzFxNyAtOCA3IC0xOHQtNyAtMThsLTQ3MSAtNDcxcS0xMCAtOSAtMjMgLTloLTE2MHEtMTYgMCAtMjEgMTF0NyAyM2w0NjQgNDY0bC00NjQgNDY0cS0xMiAxMiAtNyAyM3QyMSAxMXoiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMjU5OyIgZD0iTTEwODcgODgycTExIC01IDExIC0yMXYtMTYwcTAgLTEzIC05IC0yM2wtNDcxIC00NzFxLTggLTcgLTE4IC03dC0xOCA3bC00NzEgNDcxcS05IDEwIC05IDIzdjE2MHEwIDE2IDExIDIxdDIzIC03bDQ2NCAtNDY0bDQ2NCA0NjRxMTIgMTIgMjMgN3oiIC8+CjxnbHlwaCB1bmljb2RlPSImI3hlMjYwOyIgZD0iTTYxOCA5OTNsNDcxIC00NzFxOSAtMTAgOSAtMjN2LTE2MHEwIC0xNiAtMTEgLTIxdC0yMyA3bC00NjQgNDY0bC00NjQgLTQ2NHEtMTIgLTEyIC0yMyAtN3QtMTEgMjF2MTYwcTAgMTMgOSAyM2w0NzEgNDcxcTggNyAxOCA3dDE4IC03eiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeGY4ZmY7IiBkPSJNMTAwMCAxMjAwcTAgLTEyNCAtODggLTIxMnQtMjEyIC04OHEwIDEyNCA4OCAyMTJ0MjEyIDg4ek00NTAgMTAwMGgxMDBxMjEgMCA0MCAtMTR0MjYgLTMzbDc5IC0xOTRxNSAxIDE2IDNxMzQgNiA1NCA5LjV0NjAgN3Q2NS41IDF0NjEgLTEwdDU2LjUgLTIzdDQyLjUgLTQydDI5IC02NHQ1IC05MnQtMTkuNSAtMTIxLjVxLTEgLTcgLTMgLTE5LjV0LTExIC01MHQtMjAuNSAtNzN0LTMyLjUgLTgxLjV0LTQ2LjUgLTgzdC02NCAtNzAgdC04Mi41IC01MHEtMTMgLTUgLTQyIC01dC02NS41IDIuNXQtNDcuNSAyLjVxLTE0IDAgLTQ5LjUgLTMuNXQtNjMgLTMuNXQtNDMuNSA3cS01NyAyNSAtMTA0LjUgNzguNXQtNzUgMTExLjV0LTQ2LjUgMTEydC0yNiA5MGwtNyAzNXEtMTUgNjMgLTE4IDExNXQ0LjUgODguNXQyNiA2NHQzOS41IDQzLjV0NTIgMjUuNXQ1OC41IDEzdDYyLjUgMnQ1OS41IC00LjV0NTUuNSAtOGwtMTQ3IDE5MnEtMTIgMTggLTUuNSAzMHQyNy41IDEyeiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeDFmNTExOyIgZD0iTTI1MCAxMjAwaDYwMHEyMSAwIDM1LjUgLTE0LjV0MTQuNSAtMzUuNXYtNDAwcTAgLTIxIC0xNC41IC0zNS41dC0zNS41IC0xNC41aC0xNTB2LTUwMGwtMjU1IC0xNzhxLTE5IC05IC0zMiAtMXQtMTMgMjl2NjUwaC0xNTBxLTIxIDAgLTM1LjUgMTQuNXQtMTQuNSAzNS41djQwMHEwIDIxIDE0LjUgMzUuNXQzNS41IDE0LjV6TTQwMCAxMTAwdi0xMDBoMzAwdjEwMGgtMzAweiIgLz4KPGdseXBoIHVuaWNvZGU9IiYjeDFmNmFhOyIgZD0iTTI1MCAxMjAwaDc1MHEzOSAwIDY5LjUgLTQwLjV0MzAuNSAtODQuNXYtOTMzbC03MDAgLTExN3Y5NTBsNjAwIDEyNWgtNzAwdi0xMDAwaC0xMDB2MTAyNXEwIDIzIDE1LjUgNDl0MzQuNSAyNnpNNTAwIDUyNXYtMTAwbDEwMCAyMHYxMDB6IiAvPgo8L2ZvbnQ+CjwvZGVmcz48L3N2Zz4g"

/***/ }),
/* 1150 */
/***/ (function(module, exports) {

	module.exports = "data:application/x-font-ttf;base64,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JbwmFCZ+JuYnUCe8J/goNChwKKwpoCnMKiYqSiqEKworeiwILGgsuizsLRwtiC30LiguZi6iLtgvDi9GL34vsi/4MD4whDDSMRIxYDGuMegyJDJeMpoy3jMiMz4zaDO2NBg0YDSoNNI1LDWeNeg2PjZ8Ntw3GjdON5I31DgQOEI4hjjIOQo5SjmIOcw6HDpsOpo63jugO9w8GDxQPKI8+D0yPew+Oj6MPtQ/KD9uP6o/+kBIQIBAxkECQX5CGEKoQu5DGENCQ3ZDoEPKRBBEYESuRPZFWkW2RgZGdEa0RvZHNkd2R7ZH9kgWSDJITkhqSIZIzEkSSThJXkmESapKAkouSlIAAQAAARcApwARAAAAAAACAAAAAQABAAAAQAAuAAAAAAAAABAAxgABAAAAAAATABIAAAADAAEECQAAAGoAEgADAAEECQABACgAfAADAAEECQACAA4ApAADAAEECQADAEwAsgADAAEECQAEADgA/gADAAEECQAFAHgBNgADAAEECQAGADYBrgADAAEECQAIABYB5AADAAEECQAJABYB+gADAAEECQALACQCEAADAAEECQAMACQCNAADAAEECQATACQCWAADAAEECQDIABYCfAADAAEECQDJADACkgADAAEECdkDABoCwnd3dy5nbHlwaGljb25zLmNvbQBDAG8AcAB5AHIAaQBnAGgAdAAgAKkAIAAyADAAMQA0ACAAYgB5ACAASgBhAG4AIABLAG8AdgBhAHIAaQBrAC4AIABBAGwAbAAgAHIAaQBnAGgAdABzACAAcgBlAHMAZQByAHYAZQBkAC4ARwBMAFkAUABIAEkAQwBPAE4AUwAgAEgAYQBsAGYAbABpAG4AZwBzAFIAZQBnAHUAbABhAHIAMQAuADAAMAA5ADsAVQBLAFcATgA7AEcATABZAFAASABJAEMATwBOAFMASABhAGwAZgBsAGkAbgBnAHMALQBSAGUAZwB1AGwAYQByAEcATABZAFAASABJAEMATwBOAFMAIABIAGEAbABmAGwAaQBuAGcAcwAgAFIAZQBnAHUAbABhAHIAVgBlAHIAcwBpAG8AbgAgADEALgAwADAAOQA7AFAAUwAgADAAMAAxAC4AMAAwADkAOwBoAG8AdABjAG8AbgB2ACAAMQAuADAALgA3ADAAOwBtAGEAawBlAG8AdABmAC4AbABpAGIAMgAuADUALgA1ADgAMwAyADkARwBMAFkAUABIAEkAQwBPAE4AUwBIAGEAbABmAGwAaQBuAGcAcwAtAFIAZQBnAHUAbABhAHIASgBhAG4AIABLAG8AdgBhAHIAaQBrAEoAYQBuACAASwBvAHYAYQByAGkAawB3AHcAdwAuAGcAbAB5AHAAaABpAGMAbwBuAHMALgBjAG8AbQB3AHcAdwAuAGcAbAB5AHAAaABpAGMAbwBuAHMALgBjAG8AbQB3AHcAdwAuAGcAbAB5AHAAaABpAGMAbwBuAHMALgBjAG8AbQBXAGUAYgBmAG8AbgB0ACAAMQAuADAAVwBlAGQAIABPAGMAdAAgADIAOQAgADAANgA6ADMANgA6ADAANwAgADIAMAAxADQARgBvAG4AdAAgAFMAcQB1AGkAcgByAGUAbAAAAAIAAAAAAAD/tQAyAAAAAAAAAAAAAAAAAAAAAAAAAAABFwAAAQIBAwADAA0ADgEEAJYBBQEGAQcBCAEJAQoBCwEMAQ0BDgEPARABEQESARMA7wEUARUBFgEXARgBGQEaARsBHAEdAR4BHwEgASEBIgEjASQBJQEmAScBKAEpASoBKwEsAS0BLgEvATABMQEyATMBNAE1ATYBNwE4ATkBOgE7ATwBPQE+AT8BQAFBAUIBQwFEAUUBRgFHAUgBSQFKAUsBTAFNAU4BTwFQAVEBUgFTAVQBVQFWAVcBWAFZAVoBWwFcAV0BXgFfAWABYQFiAWMBZAFlAWYBZwFoAWkBagFrAWwBbQFuAW8BcAFxAXIBcwF0AXUBdgF3AXgBeQF6AXsBfAF9AX4BfwGAAYEBggGDAYQBhQGGAYcBiAGJAYoBiwGMAY0BjgGPAZABkQGSAZMBlAGVAZYBlwGYAZkBmgGbAZwBnQGeAZ8BoAGhAaIBowGkAaUBpgGnAagBqQGqAasBrAGtAa4BrwGwAbEBsgGzAbQBtQG2AbcBuAG5AboBuwG8Ab0BvgG/AcABwQHCAcMBxAHFAcYBxwHIAckBygHLAcwBzQHOAc8B0AHRAdIB0wHUAdUB1gHXAdgB2QHaAdsB3AHdAd4B3wHgAeEB4gHjAeQB5QHmAecB6AHpAeoB6wHsAe0B7gHvAfAB8QHyAfMB9AH1AfYB9wH4AfkB+gH7AfwB/QH+Af8CAAIBAgICAwIEAgUCBgIHAggCCQIKAgsCDAINAg4CDwIQAhECEgZnbHlwaDEGZ2x5cGgyB3VuaTAwQTAHdW5pMjAwMAd1bmkyMDAxB3VuaTIwMDIHdW5pMjAwMwd1bmkyMDA0B3VuaTIwMDUHdW5pMjAwNgd1bmkyMDA3B3VuaTIwMDgHdW5pMjAwOQd1bmkyMDBBB3VuaTIwMkYHdW5pMjA1RgRFdXJvB3VuaTIwQkQHdW5pMjMxQgd1bmkyNUZDB3VuaTI2MDEHdW5pMjZGQQd1bmkyNzA5B3VuaTI3MEYHdW5pRTAwMQd1bmlFMDAyB3VuaUUwMDMHdW5pRTAwNQd1bmlFMDA2B3VuaUUwMDcHdW5pRTAwOAd1bmlFMDA5B3VuaUUwMTAHdW5pRTAxMQd1bmlFMDEyB3VuaUUwMTMHdW5pRTAxNAd1bmlFMDE1B3VuaUUwMTYHdW5pRTAxNwd1bmlFMDE4B3VuaUUwMTkHdW5pRTAyMAd1bmlFMDIxB3VuaUUwMjIHdW5pRTAyMwd1bmlFMDI0B3VuaUUwMjUHdW5pRTAyNgd1bmlFMDI3B3VuaUUwMjgHdW5pRTAyOQd1bmlFMDMwB3VuaUUwMzEHdW5pRTAzMgd1bmlFMDMzB3VuaUUwMzQHdW5pRTAzNQd1bmlFMDM2B3VuaUUwMzcHdW5pRTAzOAd1bmlFMDM5B3VuaUUwNDAHdW5pRTA0MQd1bmlFMDQyB3VuaUUwNDMHdW5pRTA0NAd1bmlFMDQ1B3VuaUUwNDYHdW5pRTA0Nwd1bmlFMDQ4B3VuaUUwNDkHdW5pRTA1MAd1bmlFMDUxB3VuaUUwNTIHdW5pRTA1Mwd1bmlFMDU0B3VuaUUwNTUHdW5pRTA1Ngd1bmlFMDU3B3VuaUUwNTgHdW5pRTA1OQd1bmlFMDYwB3VuaUUwNjIHdW5pRTA2Mwd1bmlFMDY0B3VuaUUwNjUHdW5pRTA2Ngd1bmlFMDY3B3VuaUUwNjgHdW5pRTA2OQd1bmlFMDcwB3VuaUUwNzEHdW5pRTA3Mgd1bmlFMDczB3VuaUUwNzQHdW5pRTA3NQd1bmlFMDc2B3VuaUUwNzcHdW5pRTA3OAd1bmlFMDc5B3VuaUUwODAHdW5pRTA4MQd1bmlFMDgyB3VuaUUwODMHdW5pRTA4NAd1bmlFMDg1B3VuaUUwODYHdW5pRTA4Nwd1bmlFMDg4B3VuaUUwODkHdW5pRTA5MAd1bmlFMDkxB3VuaUUwOTIHdW5pRTA5Mwd1bmlFMDk0B3VuaUUwOTUHdW5pRTA5Ngd1bmlFMDk3B3VuaUUxMDEHdW5pRTEwMgd1bmlFMTAzB3VuaUUxMDQHdW5pRTEwNQd1bmlFMTA2B3VuaUUxMDcHdW5pRTEwOAd1bmlFMTA5B3VuaUUxMTAHdW5pRTExMQd1bmlFMTEyB3VuaUUxMTMHdW5pRTExNAd1bmlFMTE1B3VuaUUxMTYHdW5pRTExNwd1bmlFMTE4B3VuaUUxMTkHdW5pRTEyMAd1bmlFMTIxB3VuaUUxMjIHdW5pRTEyMwd1bmlFMTI0B3VuaUUxMjUHdW5pRTEyNgd1bmlFMTI3B3VuaUUxMjgHdW5pRTEyOQd1bmlFMTMwB3VuaUUxMzEHdW5pRTEzMgd1bmlFMTMzB3VuaUUxMzQHdW5pRTEzNQd1bmlFMTM2B3VuaUUxMzcHdW5pRTEzOAd1bmlFMTM5B3VuaUUxNDAHdW5pRTE0MQd1bmlFMTQyB3VuaUUxNDMHdW5pRTE0NAd1bmlFMTQ1B3VuaUUxNDYHdW5pRTE0OAd1bmlFMTQ5B3VuaUUxNTAHdW5pRTE1MQd1bmlFMTUyB3VuaUUxNTMHdW5pRTE1NAd1bmlFMTU1B3VuaUUxNTYHdW5pRTE1Nwd1bmlFMTU4B3VuaUUxNTkHdW5pRTE2MAd1bmlFMTYxB3VuaUUxNjIHdW5pRTE2Mwd1bmlFMTY0B3VuaUUxNjUHdW5pRTE2Ngd1bmlFMTY3B3VuaUUxNjgHdW5pRTE2OQd1bmlFMTcwB3VuaUUxNzEHdW5pRTE3Mgd1bmlFMTczB3VuaUUxNzQHdW5pRTE3NQd1bmlFMTc2B3VuaUUxNzcHdW5pRTE3OAd1bmlFMTc5B3VuaUUxODAHdW5pRTE4MQd1bmlFMTgyB3VuaUUxODMHdW5pRTE4NAd1bmlFMTg1B3VuaUUxODYHdW5pRTE4Nwd1bmlFMTg4B3VuaUUxODkHdW5pRTE5MAd1bmlFMTkxB3VuaUUxOTIHdW5pRTE5Mwd1bmlFMTk0B3VuaUUxOTUHdW5pRTE5Nwd1bmlFMTk4B3VuaUUxOTkHdW5pRTIwMAd1bmlFMjAxB3VuaUUyMDIHdW5pRTIwMwd1bmlFMjA0B3VuaUUyMDUHdW5pRTIwNgd1bmlFMjA5B3VuaUUyMTAHdW5pRTIxMQd1bmlFMjEyB3VuaUUyMTMHdW5pRTIxNAd1bmlFMjE1B3VuaUUyMTYHdW5pRTIxOAd1bmlFMjE5B3VuaUUyMjEHdW5pRTIyMwd1bmlFMjI0B3VuaUUyMjUHdW5pRTIyNgd1bmlFMjI3B3VuaUUyMzAHdW5pRTIzMQd1bmlFMjMyB3VuaUUyMzMHdW5pRTIzNAd1bmlFMjM1B3VuaUUyMzYHdW5pRTIzNwd1bmlFMjM4B3VuaUUyMzkHdW5pRTI0MAd1bmlFMjQxB3VuaUUyNDIHdW5pRTI0Mwd1bmlFMjQ0B3VuaUUyNDUHdW5pRTI0Ngd1bmlFMjQ3B3VuaUUyNDgHdW5pRTI0OQd1bmlFMjUwB3VuaUUyNTEHdW5pRTI1Mgd1bmlFMjUzB3VuaUUyNTQHdW5pRTI1NQd1bmlFMjU2B3VuaUUyNTcHdW5pRTI1OAd1bmlFMjU5B3VuaUUyNjAHdW5pRjhGRgZ1MUY1MTEGdTFGNkFBAAAAAAFUUMMXAAA="

/***/ }),
/* 1151 */
/***/ (function(module, exports) {

	module.exports = "data:application/font-woff;base64,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"

/***/ }),
/* 1152 */
/***/ (function(module, exports) {

	module.exports = "data:application/font-woff2;base64,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"

/***/ }),
/* 1153 */
/***/ (function(module, exports) {

	module.exports = "data:application/vnd.ms-fontobject;base64,bocCAKyGAgABAAIAAAAAAAAAAAAAAAAAAAABAJABAAAAAExQAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAWXjPkAAAAAAAAAAAAAAAAAAAAAAAABYARgBvAG4AdABBAHcAZQBzAG8AbQBlAAAADgBSAGUAZwB1AGwAYQByAAAAJABWAGUAcgBzAGkAbwBuACAANAAuADcALgAwACAAMgAwADEANgAAABYARgBvAG4AdABBAHcAZQBzAG8AbQBlAAAAAAAAAQAAAA0AgAADAFBGRlRNa75HuQAChpAAAAAcR0RFRgLwAAQAAoZwAAAAIE9TLzKIMnpAAAABWAAAAGBjbWFwCr86fwAADKgAAALyZ2FzcP//AAMAAoZoAAAACGdseWaP965NAAAarAACTLxoZWFkEInlLQAAANwAAAA2aGhlYQ8DCrUAAAEUAAAAJGhtdHhFeRiFAAABuAAACvBsb2NhAvWiXAAAD5wAAAsQbWF4cAMsAhwAAAE4AAAAIG5hbWXjl4usAAJnaAAABIZwb3N0r4+boQACa/AAABp1AAEAAAAEAcuQz3hZXw889QALBwAAAAAA1DPNMgAAAADUM80y////AAkBBgAAAAAIAAIAAQAAAAAAAQAABgD/AAAACQD/////CQEAAQAAAAAAAAAAAAAAAAAAArUAAQAAAsMCGQAnAAAAAAACAAAAAQABAAAAQAAAAAAAAAADBmkBkAAFAAAEjAQzAAAAhgSMBDMAAAJzAAABigAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABweXJzAEAAIPUABgD/AAAABgABAAAAAAEAAAAAAAAAAAAAACAAAQOAAHAAAAAAAlUAAAHAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAABdBgAAAAaAAAAHAAAABwAAAAaAAAAGgAAABQAAAAeAAAAGgAAABwAAAAcAAAAHAAB5BYAAbgaAAAAGgAAABgAAAAcAAAAGAAAABYAAAAaAABoGAAAABgAAAAeAADIGgAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABwAAAASAAAAHAABABoAAAAMAAAAEgAAABoAAAAWAAAAHAAAABgAAAAeAAAAGgAAKBQAAAAaAAAAHgAAABoAAAAWAAAAEAAAABwAAAAYAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAeAAAAGAAAABAAAAAYAAAAEAAAABwAAAAaAAAAGgAAABwAAAAQAAAAHAAAABoAAegWAAAAGAAAABgAAAAaAAAAHAAAABAAAAAYCAAEFAACaBQAAWgYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAABABgAAAAaAADUGgAA1BwAAAAYAAAAGAAANBYAAAAWAAAAGgAB6BgAAAAYAAAAHAAAABYAAAAcAAAAHAAAABwAAEAWAAAAGgAAABwAAAAcAAAAGAAAABwAAWgcAAFoHgAAABoAAAAaAAAAHgAAAAwAAQAcAAAAIAAAABgAAAAYAAAAHAAAABwAAAAeAAAAHAAAABgAAAAYAAAADgAAABwAAAAaAAAAGAAAABIAAAAcAAAAGAAAABoAAAAYAAAAGgAAABgAAAAWAAAAFgAAABQAAAAYAAAAGgAAsBAAAXwYAAAAGgAAAB4AAAAWAAAAGAAAABwAAAAcAAEAGAAACBwAAAAcAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABoAAFQcAAAAFgAAFBwAAAAYAAAAHgAAABoAAEAeAAAAGgABzBwAAAQcAAAAFgAAEBgAAAAYAAAAGAAAABwAAAAcAAA8HAAAABgAAAAaAAAAGgAAbBwAAQAYAAAAGAAAABgAAAAkAAAAHgAAABAAAAAQAAAACgABAAoAAAAaAAAAEAAAABAAAAAQAAAAHAAAABgAAAAYAAAAHAAAoBwAAAAcAAAAHAAAAA4AAAQcAAAAGgAAABwAAAAQAAAAHAAAAB4AAAAeAAAAFgAAABYAAAAcAAAAHAABAB4AAAAWAAAAGAAAABYAAAAWAAAAHgABABwAAAAeAAAAGgABABgAAAAYAAAAEAAAtBAAADQSAAE0EgABNAoAALQKAAA0EgABNBIAATQeAAAAHgAAABIAAAAMAAAAGAAAABoAAAAaAAAAHAABABgAAAAcAAAAGgAAABoAAAAeAAAAHAAAABwAAAAYAAAAGAAAABgAAAAeAAAAHgAAABwAAQAcAAEAGgAANB4AALQcAAAAGgAACBYAAAgaAAAAEAAAABoAAAAQAAGACgAAAAoAAYgYAAAUGAAAFB4AAAQaAAAAEgAAABYAADQUAAAAGgAAABYAAAwaAACQHAAAABgAAAAYAAAAGAAAABgAAAAWAAAAHAAAMBwAAAASAAAAGAAAABYAAAAGAAAAGAAAABgAAAAcAADYGAAAABYAAAAQAAAMEAAADBgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAEAAAABAAAAAQAADQDggAABAMABAUAAAAHAAAABQAAOAYAAAAGAAAABoAAIgaAACIHAAAiBwAAIgYAACIGAAAiBoAAAAaAAAAGAAAABgAAGwWAAAUGAAAABwAAAAcAAEAGAAALBgAAAAYAAAAGAAAABYAAAAYAAAAEAABEBgAAAAMAAAMDAAADBwAAQAcAAAAFgAAABoAAAAWAAAAGAAALBgAAAAYAAAAFAAAsBgAAAAUAAAAEAAAABgAAAAcAACwGAAAABwAAQAaAACAHgP//BwAAAAYAAAAFgAAABQAAFQYAAAAGAAAABgAAAAYAAAAGgAAABgAAAASAAAAFgAAACIAAAAaAAAAGAAAABwAAAAcAAAAIAAAACQAAAAYAAG0GAAAABwAAAAYAAAAGAAAAB4AAAAYAAAAIAAAABgAAAAf2ACkGAAAABgAAAAYAAAAHAAAABgAAAAUAAEAGgAAAAwAAQAcAAAAJAAAACAAAAAYAAAAHAAAABgAAAAcAABAIAAAACAAAAAYAACAGAAAABAAAAAkAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAJwcAAAAIAAAABwAAAAcAACAHAAATBwAAAAYAAAAHAABEBgAAAAUAADkHAAASCAAAAAcAAAAHAAAABgAAAAYAAAAHAAA+BQAAGAYAAAAGAAAABgAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAGQcAAGQGAABZCAAAAAgAACoHAAAABgAACQcAACcJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAIAAAOCAAADgWAAAAGAAAABgAAAAcAAAAHAAAABwAAAAgAAAAHAAAACAAAAAcAAAAGAAAACAAAAAgAAAAJAAAABgAAAAgAAAAFAAALCAAAAAYAAAAGAAAABgAAAAgAAAAGAAAABgAAAAgAAAAIAAAABgAAAAgAAAAIAAAABoAAAAaAAAAIAAAACAAAEwYAAAAJAAAABgAAAAcAAAAFAAACBgAAAAUAAAAGAAACBwAAAAcA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AaoBqwGsAa0BrgGvAbABsQGyAbMBtAG1AbYBtwG4AbkBugG7AbwBvQG+Ab8BwAHBAcIBwwHEAcUBxgHHAcgByQHKAcsBzAHNAc4BzwHQAdEB0gHTAdQB1QHWAdcB2AHZAdoB2wHcAd0B3gHfAeAB4QHiAeMB5AHlAeYB5wHoAekB6gHrAewB7QHuAe8B8AHxAfIB8wH0AfUB9gH3AfgB+QH6AfsB/AH9Af4B/wIAAgECAgIDAgQCBQIGAgcCCAAiAgkCCgILAgwCDQIOAg8CEAIRAhICEwIUAhUCFgIXAhgCGQIaAhsCHAIdAh4CHwIgAiECIgIjAiQCJQImAicCKAIpAioCKwIsAi0CLgIvAjACMQIyAjMCNAI1AjYCNwI4AjkCOgI7AjwCPQI+Aj8CQAJBAkICQwJEAkUCRgJHAkgCSQJKAksCTAJNAk4CTwJQAlECUgJTANICVAJVAlYCVwJYAlkCWgJbAlwCXQJeAl8CYAJhAmICYwJkAmUCZgJnAmgCaQJqAmsCbAJtAm4CbwJwAnECcgJzAnQCdQJ2AncCeAJ5AnoCewJ8An0CfgJ/AoACgQKCAoMChAKFAoYChwKIAokCigKLAowCjQKOAo8CkAKRApICkwKUApUClgKXApgCmQKaApsCnAKdAp4CnwKgAqECogKjAqQCpQKmAqcCqAKpAqoCqwKsAq0CrgKvArACsQKyArMCtAK1ArYCtwK4ArkCugK7ArwCvQK+Ar8CwALBAsICwwLEAsUCxgLHAsgCyQLKAssCzALNAs4CzwLQAtEC0gLTAtQC1QLWAtcC2ALZAtoC2wLcAt0C3gLfAuAC4QLiAuMC5ALlAuYC5wLoAukC6gLrAuwC7QLuAu8C8ALxAvIC8wL0AvUC9gL3AvgC+QL6AvsC/AL9Av4C/wMAAwEDAgMDAwQDBQMGAwcDCAMJAwoDCwMMAw0DDgMPAxADEQMSAxMDFAMVAxYDFwMYAxkDGgMbAxwDHQMeAx8DIAMhAyIDIwMkAyUDJgMnAygDKQMqAysDLAMtAy4DLwMwAzEDMgMzAzQDNQM2AzcDOAM5AzoDOwM8Az0DPgM/A0ADQQNCA0MDRANFA0YDRwNIA0kDSgNLA0wDTQNOA08DUANRA1IDUwNUA1UDVgNXA1gDWQNaA1sDXANdA14DXwNgA2EDYgNjA2QDZQNmA2cDaANpA2oDawNsA20DbgNvA3ADcQNyA3MDdAN1A3YDdwN4A3kDegN7A3wDfQN+A38DgAOBA4IDgwOEA4UDhgOHA4gDiQOKA4sDjAONA44DjwOQA5EDkgOTA5QDlQOWA5cDmAOZA5oDmwOcA50DngOfA6ADoQOiA6MDpAOlA6YDpwOoA6kDqgOrA6wDrQOuA68DsAOxAJQFZ2xhc3MFbXVzaWMGc2VhcmNoCGVudmVsb3BlBWhlYXJ0BHN0YXIKc3Rhcl9lbXB0eQR1c2VyBGZpbG0IdGhfbGFyZ2UCdGgHdGhfbGlzdAJvawZyZW1vdmUHem9vbV9pbgh6b29tX291dANvZmYGc2lnbmFsA2NvZwV0cmFzaARob21lCGZpbGVfYWx0BHRpbWUEcm9hZAxkb3dubG9hZF9hbHQIZG93bmxvYWQGdXBsb2FkBWluYm94C3BsYXlfY2lyY2xlBnJlcGVhdAdyZWZyZXNoCGxpc3RfYWx0BGxvY2sEZmxhZwpoZWFkcGhvbmVzCnZvbHVtZV9vZmYLdm9sdW1lX2Rvd24Jdm9sdW1lX3VwBnFyY29kZQdiYXJjb2RlA3RhZwR0YWdzBGJvb2sIYm9va21hcmsFcHJpbnQGY2FtZXJhBGZvbnQEYm9sZAZpdGFsaWMLdGV4dF9oZWlnaHQKdGV4dF93aWR0aAphbGlnbl9sZWZ0DGFsaWduX2NlbnRlcgthbGlnbl9yaWdodA1hbGlnbl9qdXN0aWZ5BGxpc3QLaW5kZW50X2xlZnQMaW5kZW50X3JpZ2h0DmZhY2V0aW1lX3ZpZGVvB3BpY3R1cmUGcGVuY2lsCm1hcF9tYXJrZXIGYWRqdXN0BHRpbnQEZWRpdAVzaGFyZQVjaGVjawRtb3ZlDXN0ZXBfYmFja3dhcmQNZmFzdF9iYWNrd2FyZAhiYWNrd2FyZARwbGF5BXBhdXNlBHN0b3AHZm9yd2FyZAxmYXN0X2ZvcndhcmQMc3RlcF9mb3J3YXJkBWVqZWN0DGNoZXZyb25fbGVmdA1jaGV2cm9uX3JpZ2h0CXBsdXNfc2lnbgptaW51c19zaWduC3JlbW92ZV9zaWduB29rX3NpZ24NcXVlc3Rpb25fc2lnbglpbmZvX3NpZ24Kc2NyZWVuc2hvdA1yZW1vdmVfY2lyY2xlCW9rX2NpcmNsZQpiYW5fY2lyY2xlCmFycm93X2xlZnQLYXJyb3dfcmlnaHQIYXJyb3dfdXAKYXJyb3dfZG93bglzaGFyZV9hbHQLcmVzaXplX2Z1bGwMcmVzaXplX3NtYWxsEGV4Y2xhbWF0aW9uX3NpZ24EZ2lmdARsZWFmBGZpcmUIZXllX29wZW4JZXllX2Nsb3NlDHdhcm5pbmdfc2lnbgVwbGFuZQhjYWxlbmRhcgZyYW5kb20HY29tbWVudAZtYWduZXQKY2hldnJvbl91cAxjaGV2cm9uX2Rvd24HcmV0d2VldA1zaG9wcGluZ19jYXJ0DGZvbGRlcl9jbG9zZQtmb2xkZXJfb3Blbg9yZXNpemVfdmVydGljYWwRcmVzaXplX2hvcml6b250YWwJYmFyX2NoYXJ0DHR3aXR0ZXJfc2lnbg1mYWNlYm9va19zaWduDGNhbWVyYV9yZXRybwNrZXkEY29ncwhjb21tZW50cw10aHVtYnNfdXBfYWx0D3RodW1ic19kb3duX2FsdAlzdGFyX2hhbGYLaGVhcnRfZW1wdHkHc2lnbm91dA1saW5rZWRpbl9zaWduB3B1c2hwaW4NZXh0ZXJuYWxfbGluawZzaWduaW4GdHJvcGh5C2dpdGh1Yl9zaWduCnVwbG9hZF9hbHQFbGVtb24FcGhvbmULY2hlY2tfZW1wdHkOYm9va21hcmtfZW1wdHkKcGhvbmVfc2lnbgd0d2l0dGVyCGZhY2Vib29rBmdpdGh1YgZ1bmxvY2sLY3JlZGl0X2NhcmQDcnNzA2hkZAhidWxsaG9ybgRiZWxsC2NlcnRpZmljYXRlCmhhbmRfcmlnaHQJaGFuZF9sZWZ0B2hhbmRfdXAJaGFuZF9kb3duEWNpcmNsZV9hcnJvd19sZWZ0EmNpcmNsZV9hcnJvd19yaWdodA9jaXJjbGVfYXJyb3dfdXARY2lyY2xlX2Fycm93X2Rvd24FZ2xvYmUGd3JlbmNoBXRhc2tzBmZpbHRlcglicmllZmNhc2UKZnVsbHNjcmVlbgVncm91cARsaW5rBWNsb3VkBmJlYWtlcgNjdXQEY29weQpwYXBlcl9jbGlwBHNhdmUKc2lnbl9ibGFuawdyZW9yZGVyAnVsAm9sDXN0cmlrZXRocm91Z2gJdW5kZXJsaW5lBXRhYmxlBW1hZ2ljBXRydWNrCXBpbnRlcmVzdA5waW50ZXJlc3Rfc2lnbhBnb29nbGVfcGx1c19zaWduC2dvb2dsZV9wbHVzBW1vbmV5CmNhcmV0X2Rvd24IY2FyZXRfdXAKY2FyZXRfbGVmdAtjYXJldF9yaWdodAdjb2x1bW5zBHNvcnQJc29ydF9kb3duB3NvcnRfdXAMZW52ZWxvcGVfYWx0CGxpbmtlZGluBHVuZG8FbGVnYWwJZGFzaGJvYXJkC2NvbW1lbnRfYWx0DGNvbW1lbnRzX2FsdARib2x0B3NpdGVtYXAIdW1icmVsbGEFcGFzdGUKbGlnaHRfYnVsYghleGNoYW5nZQ5jbG91ZF9kb3dubG9hZAxjbG91ZF91cGxvYWQHdXNlcl9tZAtzdGV0aG9zY29wZQhzdWl0Y2FzZQhiZWxsX2FsdAZjb2ZmZWUEZm9vZA1maWxlX3RleHRfYWx0CGJ1aWxkaW5nCGhvc3BpdGFsCWFtYnVsYW5jZQZtZWRraXQLZmlnaHRlcl9qZXQEYmVlcgZoX3NpZ24EZjBmZRFkb3VibGVfYW5nbGVfbGVmdBJkb3VibGVfYW5nbGVfcmlnaHQPZG91YmxlX2FuZ2xlX3VwEWRvdWJsZV9hbmdsZV9kb3duCmFuZ2xlX2xlZnQLYW5nbGVfcmlnaHQIYW5nbGVfdXAKYW5nbGVfZG93bgdkZXNrdG9wBmxhcHRvcAZ0YWJsZXQMbW9iaWxlX3Bob25lDGNpcmNsZV9ibGFuawpxdW90ZV9sZWZ0C3F1b3RlX3JpZ2h0B3NwaW5uZXIGY2lyY2xlBXJlcGx5CmdpdGh1Yl9hbHQQZm9sZGVyX2Nsb3NlX2FsdA9mb2xkZXJfb3Blbl9hbHQKZXhwYW5kX2FsdAxjb2xsYXBzZV9hbHQFc21pbGUFZnJvd24DbWVoB2dhbWVwYWQIa2V5Ym9hcmQIZmxhZ19hbHQOZmxhZ19jaGVja2VyZWQIdGVybWluYWwEY29kZQlyZXBseV9hbGwPc3Rhcl9oYWxmX2VtcHR5DmxvY2F0aW9uX2Fycm93BGNyb3AJY29kZV9mb3JrBnVubGluawRfMjc5C2V4Y2xhbWF0aW9uC3N1cGVyc2NyaXB0CXN1YnNjcmlwdARfMjgzDHB1enpsZV9waWVjZQptaWNyb3Bob25lDm1pY3JvcGhvbmVfb2ZmBnNoaWVsZA5jYWxlbmRhcl9lbXB0eRFmaXJlX2V4dGluZ3Vpc2hlcgZyb2NrZXQGbWF4Y2RuEWNoZXZyb25fc2lnbl9sZWZ0EmNoZXZyb25fc2lnbl9yaWdodA9jaGV2cm9uX3NpZ25fdXARY2hldnJvbl9zaWduX2Rvd24FaHRtbDUEY3NzMwZhbmNob3IKdW5sb2NrX2FsdAhidWxsc2V5ZRNlbGxpcHNpc19ob3Jpem9udGFsEWVsbGlwc2lzX3ZlcnRpY2FsBF8zMDMJcGxheV9zaWduBnRpY2tldA5taW51c19zaWduX2FsdAtjaGVja19taW51cwhsZXZlbF91cApsZXZlbF9kb3duCmNoZWNrX3NpZ24JZWRpdF9zaWduBF8zMTIKc2hhcmVfc2lnbgdjb21wYXNzCGNvbGxhcHNlDGNvbGxhcHNlX3RvcARfMzE3A2V1cgNnYnADdXNkA2lucgNqcHkDcnViA2tydwNidGMEZmlsZQlmaWxlX3RleHQQc29ydF9ieV9hbHBoYWJldARfMzI5EnNvcnRfYnlfYXR0cmlidXRlcxZzb3J0X2J5X2F0dHJpYnV0ZXNfYWx0DXNvcnRfYnlfb3JkZXIRc29ydF9ieV9vcmRlcl9hbHQEXzMzNARfMzM1DHlvdXR1YmVfc2lnbgd5b3V0dWJlBHhpbmcJeGluZ19zaWduDHlvdXR1YmVfcGxheQdkcm9wYm94DXN0YWNrZXhjaGFuZ2UJaW5zdGFncmFtBmZsaWNrcgNhZG4EZjE3MQ5iaXRidWNrZXRfc2lnbgZ0dW1ibHILdHVtYmxyX3NpZ24PbG9uZ19hcnJvd19kb3duDWxvbmdfYXJyb3dfdXAPbG9uZ19hcnJvd19sZWZ0EGxvbmdfYXJyb3dfcmlnaHQHd2luZG93cwdhbmRyb2lkBWxpbnV4B2RyaWJibGUFc2t5cGUKZm91cnNxdWFyZQZ0cmVsbG8GZmVtYWxlBG1hbGUGZ2l0dGlwA3N1bgRfMzY2B2FyY2hpdmUDYnVnAnZrBXdlaWJvBnJlbnJlbgRfMzcyDnN0YWNrX2V4Y2hhbmdlBF8zNzQVYXJyb3dfY2lyY2xlX2FsdF9sZWZ0BF8zNzYOZG90X2NpcmNsZV9hbHQEXzM3OAx2aW1lb19zcXVhcmUEXzM4MA1wbHVzX3NxdWFyZV9vBF8zODIEXzM4MwRfMzg0BF8zODUEXzM4NgRfMzg3BF8zODgEXzM4OQd1bmlGMUEwBGYxYTEEXzM5MgRfMzkzBGYxYTQEXzM5NQRfMzk2BF8zOTcEXzM5OARfMzk5BF80MDAEZjFhYgRfNDAyBF80MDMEXzQwNAd1bmlGMUIxBF80MDYEXzQwNwRfNDA4BF80MDkEXzQxMARfNDExBF80MTIEXzQxMwRfNDE0BF80MTUEXzQxNgRfNDE3BF80MTgEXzQxOQd1bmlGMUMwB3VuaUYxQzEEXzQyMgRfNDIzBF80MjQEXzQyNQRfNDI2BF80MjcEXzQyOARfNDI5BF80MzAEXzQzMQRfNDMyBF80MzMEXzQzNAd1bmlGMUQwB3VuaUYxRDEHdW5pRjFEMgRfNDM4BF80MzkHdW5pRjFENQd1bmlGMUQ2B3VuaUYxRDcEXzQ0MwRfNDQ0BF80NDUEXzQ0NgRfNDQ3BF80NDgEXzQ0OQd1bmlGMUUwBF80NTEEXzQ1MgRfNDUzBF80NTQEXzQ1NQRfNDU2BF80NTcEXzQ1OARfNDU5BF80NjAEXzQ2MQRfNDYyBF80NjMEXzQ2NAd1bmlGMUYwBF80NjYEXzQ2NwRmMWYzBF80NjkEXzQ3MARfNDcxBF80NzIEXzQ3MwRfNDc0BF80NzUEXzQ3NgRmMWZjBF80NzgEXzQ3OQRfNDgwBF80ODEEXzQ4MgRfNDgzBF80ODQEXzQ4NQRfNDg2BF80ODcEXzQ4OARfNDg5BF80OTAEXzQ5MQRfNDkyBF80OTMEXzQ5NARmMjEwBF80OTYEZjIxMgRfNDk4BF80OTkEXzUwMARfNTAxBF81MDIEXzUwMwRfNTA0BF81MDUEXzUwNgRfNTA3BF81MDgEXzUwOQV2ZW51cwRfNTExBF81MTIEXzUxMwRfNTE0BF81MTUEXzUxNgRfNTE3BF81MTgEXzUxOQRfNTIwBF81MjEEXzUyMgRfNTIzBF81MjQEXzUyNQRfNTI2BF81MjcEXzUyOARfNTI5BF81MzAEXzUzMQRfNTMyBF81MzMEXzUzNARfNTM1BF81MzYEXzUzNwRfNTM4BF81MzkEXzU0MARfNTQxBF81NDIEXzU0MwRfNTQ0BF81NDUEXzU0NgRfNTQ3BF81NDgEXzU0OQRfNTUwBF81NTEEXzU1MgRfNTUzBF81NTQEXzU1NQRfNTU2BF81NTcEXzU1OARfNTU5BF81NjAEXzU2MQRfNTYyBF81NjMEXzU2NARfNTY1BF81NjYEXzU2NwRfNTY4BF81NjkEZjI2MARmMjYxBF81NzIEZjI2MwRfNTc0BF81NzUEXzU3NgRfNTc3BF81NzgEXzU3OQRfNTgwBF81ODEEXzU4MgRfNTgzBF81ODQEXzU4NQRfNTg2BF81ODcEXzU4OARfNTg5BF81OTAEXzU5MQRfNTkyBF81OTMEXzU5NARfNTk1BF81OTYEXzU5NwRfNTk4BGYyN2UHdW5pRjI4MAd1bmlGMjgxBF82MDIEXzYwMwRfNjA0B3VuaUYyODUHdW5pRjI4NgRfNjA3BF82MDgEXzYwOQRfNjEwBF82MTEEXzYxMgRfNjEzBF82MTQEXzYxNQRfNjE2BF82MTcEXzYxOARfNjE5BF82MjAEXzYyMQRfNjIyBF82MjMEXzYyNARfNjI1BF82MjYEXzYyNwRfNjI4BF82MjkHdW5pRjJBMAd1bmlGMkExB3VuaUYyQTIHdW5pRjJBMwd1bmlGMkE0B3VuaUYyQTUHdW5pRjJBNgd1bmlGMkE3B3VuaUYyQTgHdW5pRjJBOQd1bmlGMkFBB3VuaUYyQUIHdW5pRjJBQwd1bmlGMkFEB3VuaUYyQUUHdW5pRjJCMAd1bmlGMkIxB3VuaUYyQjIHdW5pRjJCMwd1bmlGMkI0B3VuaUYyQjUHdW5pRjJCNgd1bmlGMkI3B3VuaUYyQjgHdW5pRjJCOQd1bmlGMkJBB3VuaUYyQkIHdW5pRjJCQwd1bmlGMkJEB3VuaUYyQkUHdW5pRjJDMAd1bmlGMkMxB3VuaUYyQzIHdW5pRjJDMwd1bmlGMkM0B3VuaUYyQzUHdW5pRjJDNgd1bmlGMkM3B3VuaUYyQzgHdW5pRjJDOQd1bmlGMkNBB3VuaUYyQ0IHdW5pRjJDQwd1bmlGMkNEB3VuaUYyQ0UHdW5pRjJEMAd1bmlGMkQxB3VuaUYyRDIHdW5pRjJEMwd1bmlGMkQ0B3VuaUYyRDUHdW5pRjJENgd1bmlGMkQ3B3VuaUYyRDgHdW5pRjJEOQd1bmlGMkRBB3VuaUYyREIHdW5pRjJEQwd1bmlGMkREB3VuaUYyREUHdW5pRjJFMAd1bmlGMkUxB3VuaUYyRTIHdW5pRjJFMwd1bmlGMkU0B3VuaUYyRTUHdW5pRjJFNgd1bmlGMkU3BF82OTgHdW5pRjJFOQd1bmlGMkVBB3VuaUYyRUIHdW5pRjJFQwd1bmlGMkVEB3VuaUYyRUUAAAAAAAAB//8AAgABAAAADgAAABgAAAAAAAIAAQABAsIAAQAEAAAAAgAAAAAAAQAAAADMPaLPAAAAAMtPPDAAAAAA1DFouQ=="

/***/ }),
/* 1154 */
1153,
/* 1155 */
/***/ (function(module, exports) {

	module.exports = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/Pgo8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiID4KPHN2Zz4KPG1ldGFkYXRhPgpDcmVhdGVkIGJ5IEZvbnRGb3JnZSAyMDEyMDczMSBhdCBNb24gT2N0IDI0IDE3OjM3OjQwIDIwMTYKIEJ5ICwsLApDb3B5cmlnaHQgRGF2ZSBHYW5keSAyMDE2LiBBbGwgcmlnaHRzIHJlc2VydmVkLgo8L21ldGFkYXRhPgo8ZGVmcz4KPGZvbnQgaWQ9IkZvbnRBd2Vzb21lIiBob3Jpei1hZHYteD0iMTUzNiIgPgogIDxmb250LWZhY2UgCiAgICBmb250LWZhbWlseT0iRm9udEF3ZXNvbWUiCiAgICBmb250LXdlaWdodD0iNDAwIgogICAgZm9udC1zdHJldGNoPSJub3JtYWwiCiAgICB1bml0cy1wZXItZW09IjE3OTIiCiAgICBwYW5vc2UtMT0iMCAwIDAgMCAwIDAgMCAwIDAgMCIKICAgIGFzY2VudD0iMTUzNiIKICAgIGRlc2NlbnQ9Ii0yNTYiCiAgICBiYm94PSItMS4wMjA4MyAtMjU2Ljk2MiAyMzA0LjYgMTUzNy4wMiIKICAgIHVuZGVybGluZS10aGlja25lc3M9IjAiCiAgICB1bmRlcmxpbmUtcG9zaXRpb249IjAiCiAgICB1bmljb2RlLXJhbmdlPSJVKzAwMjAtRjUwMCIKICAvPgo8bWlzc2luZy1nbHlwaCBob3Jpei1hZHYteD0iODk2IiAKZD0iTTIyNCAxMTJoNDQ4djEzMTJoLTQ0OHYtMTMxMnpNMTEyIDB2MTUzNmg2NzJ2LTE1MzZoLTY3MnoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iLm5vdGRlZiIgaG9yaXotYWR2LXg9Ijg5NiIgCmQ9Ik0yMjQgMTEyaDQ0OHYxMzEyaC00NDh2LTEzMTJ6TTExMiAwdjE1MzZoNjcydi0xNTM2aC02NzJ6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9Ii5udWxsIiBob3Jpei1hZHYteD0iMCIgCiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9Im5vbm1hcmtpbmdyZXR1cm4iIGhvcml6LWFkdi14PSI1OTciIAogLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJzcGFjZSIgdW5pY29kZT0iICIgaG9yaXotYWR2LXg9IjQ0OCIgCiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9ImRpZXJlc2lzIiB1bmljb2RlPSImI3hhODsiIGhvcml6LWFkdi14PSIxNzkyIiAKIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iY29weXJpZ2h0IiB1bmljb2RlPSImI3hhOTsiIGhvcml6LWFkdi14PSIxNzkyIiAKIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0icmVnaXN0ZXJlZCIgdW5pY29kZT0iJiN4YWU7IiBob3Jpei1hZHYteD0iMTc5MiIgCiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9ImFjdXRlIiB1bmljb2RlPSImI3hiNDsiIGhvcml6LWFkdi14PSIxNzkyIiAKIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iQUUiIHVuaWNvZGU9IiYjeGM2OyIgaG9yaXotYWR2LXg9IjE3OTIiIAogLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJPc2xhc2giIHVuaWNvZGU9IiYjeGQ4OyIgaG9yaXotYWR2LXg9IjE3OTIiIAogLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ0cmFkZW1hcmsiIHVuaWNvZGU9IiYjeDIxMjI7IiBob3Jpei1hZHYteD0iMTc5MiIgCiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9ImluZmluaXR5IiB1bmljb2RlPSImI3gyMjFlOyIgaG9yaXotYWR2LXg9IjE3OTIiIAogLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJub3RlcXVhbCIgdW5pY29kZT0iJiN4MjI2MDsiIGhvcml6LWFkdi14PSIxNzkyIiAKIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iZ2xhc3MiIHVuaWNvZGU9IiYjeGYwMDA7IiBob3Jpei1hZHYteD0iMTc5MiIgCmQ9Ik0xNjk5IDEzNTBxMCAtMzUgLTQzIC03OGwtNjMyIC02MzJ2LTc2OGgzMjBxMjYgMCA0NSAtMTl0MTkgLTQ1dC0xOSAtNDV0LTQ1IC0xOWgtODk2cS0yNiAwIC00NSAxOXQtMTkgNDV0MTkgNDV0NDUgMTloMzIwdjc2OGwtNjMyIDYzMnEtNDMgNDMgLTQzIDc4cTAgMjMgMTggMzYuNXQzOCAxNy41dDQzIDRoMTQwOHEyMyAwIDQzIC00dDM4IC0xNy41dDE4IC0zNi41eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJtdXNpYyIgdW5pY29kZT0iJiN4ZjAwMTsiIApkPSJNMTUzNiAxMzEydi0xMTIwcTAgLTUwIC0zNCAtODl0LTg2IC02MC41dC0xMDMuNSAtMzJ0LTk2LjUgLTEwLjV0LTk2LjUgMTAuNXQtMTAzLjUgMzJ0LTg2IDYwLjV0LTM0IDg5dDM0IDg5dDg2IDYwLjV0MTAzLjUgMzJ0OTYuNSAxMC41cTEwNSAwIDE5MiAtMzl2NTM3bC03NjggLTIzN3YtNzA5cTAgLTUwIC0zNCAtODl0LTg2IC02MC41dC0xMDMuNSAtMzJ0LTk2LjUgLTEwLjV0LTk2LjUgMTAuNXQtMTAzLjUgMzJ0LTg2IDYwLjV0LTM0IDg5CnQzNCA4OXQ4NiA2MC41dDEwMy41IDMydDk2LjUgMTAuNXExMDUgMCAxOTIgLTM5djk2N3EwIDMxIDE5IDU2LjV0NDkgMzUuNWw4MzIgMjU2cTEyIDQgMjggNHE0MCAwIDY4IC0yOHQyOCAtNjh6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InNlYXJjaCIgdW5pY29kZT0iJiN4ZjAwMjsiIGhvcml6LWFkdi14PSIxNjY0IiAKZD0iTTExNTIgNzA0cTAgMTg1IC0xMzEuNSAzMTYuNXQtMzE2LjUgMTMxLjV0LTMxNi41IC0xMzEuNXQtMTMxLjUgLTMxNi41dDEzMS41IC0zMTYuNXQzMTYuNSAtMTMxLjV0MzE2LjUgMTMxLjV0MTMxLjUgMzE2LjV6TTE2NjQgLTEyOHEwIC01MiAtMzggLTkwdC05MCAtMzhxLTU0IDAgLTkwIDM4bC0zNDMgMzQycS0xNzkgLTEyNCAtMzk5IC0xMjRxLTE0MyAwIC0yNzMuNSA1NS41dC0yMjUgMTUwdC0xNTAgMjI1dC01NS41IDI3My41CnQ1NS41IDI3My41dDE1MCAyMjV0MjI1IDE1MHQyNzMuNSA1NS41dDI3My41IC01NS41dDIyNSAtMTUwdDE1MCAtMjI1dDU1LjUgLTI3My41cTAgLTIyMCAtMTI0IC0zOTlsMzQzIC0zNDNxMzcgLTM3IDM3IC05MHoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iZW52ZWxvcGUiIHVuaWNvZGU9IiYjeGYwMDM7IiBob3Jpei1hZHYteD0iMTc5MiIgCmQ9Ik0xNjY0IDMydjc2OHEtMzIgLTM2IC02OSAtNjZxLTI2OCAtMjA2IC00MjYgLTMzOHEtNTEgLTQzIC04MyAtNjd0LTg2LjUgLTQ4LjV0LTEwMi41IC0yNC41aC0xaC0xcS00OCAwIC0xMDIuNSAyNC41dC04Ni41IDQ4LjV0LTgzIDY3cS0xNTggMTMyIC00MjYgMzM4cS0zNyAzMCAtNjkgNjZ2LTc2OHEwIC0xMyA5LjUgLTIyLjV0MjIuNSAtOS41aDE0NzJxMTMgMCAyMi41IDkuNXQ5LjUgMjIuNXpNMTY2NCAxMDgzdjExdjEzLjV0LTAuNSAxMwp0LTMgMTIuNXQtNS41IDl0LTkgNy41dC0xNCAyLjVoLTE0NzJxLTEzIDAgLTIyLjUgLTkuNXQtOS41IC0yMi41cTAgLTE2OCAxNDcgLTI4NHExOTMgLTE1MiA0MDEgLTMxN3E2IC01IDM1IC0yOS41dDQ2IC0zNy41dDQ0LjUgLTMxLjV0NTAuNSAtMjcuNXQ0MyAtOWgxaDFxMjAgMCA0MyA5dDUwLjUgMjcuNXQ0NC41IDMxLjV0NDYgMzcuNXQzNSAyOS41cTIwOCAxNjUgNDAxIDMxN3E1NCA0MyAxMDAuNSAxMTUuNXQ0Ni41IDEzMS41egpNMTc5MiAxMTIwdi0xMDg4cTAgLTY2IC00NyAtMTEzdC0xMTMgLTQ3aC0xNDcycS02NiAwIC0xMTMgNDd0LTQ3IDExM3YxMDg4cTAgNjYgNDcgMTEzdDExMyA0N2gxNDcycTY2IDAgMTEzIC00N3Q0NyAtMTEzeiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJoZWFydCIgdW5pY29kZT0iJiN4ZjAwNDsiIGhvcml6LWFkdi14PSIxNzkyIiAKZD0iTTg5NiAtMTI4cS0yNiAwIC00NCAxOGwtNjI0IDYwMnEtMTAgOCAtMjcuNSAyNnQtNTUuNSA2NS41dC02OCA5Ny41dC01My41IDEyMXQtMjMuNSAxMzhxMCAyMjAgMTI3IDM0NHQzNTEgMTI0cTYyIDAgMTI2LjUgLTIxLjV0MTIwIC01OHQ5NS41IC02OC41dDc2IC02OHEzNiAzNiA3NiA2OHQ5NS41IDY4LjV0MTIwIDU4dDEyNi41IDIxLjVxMjI0IDAgMzUxIC0xMjR0MTI3IC0zNDRxMCAtMjIxIC0yMjkgLTQ1MGwtNjIzIC02MDAKcS0xOCAtMTggLTQ0IC0xOHoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0ic3RhciIgdW5pY29kZT0iJiN4ZjAwNTsiIGhvcml6LWFkdi14PSIxNjY0IiAKZD0iTTE2NjQgODg5cTAgLTIyIC0yNiAtNDhsLTM2MyAtMzU0bDg2IC01MDBxMSAtNyAxIC0yMHEwIC0yMSAtMTAuNSAtMzUuNXQtMzAuNSAtMTQuNXEtMTkgMCAtNDAgMTJsLTQ0OSAyMzZsLTQ0OSAtMjM2cS0yMiAtMTIgLTQwIC0xMnEtMjEgMCAtMzEuNSAxNC41dC0xMC41IDM1LjVxMCA2IDIgMjBsODYgNTAwbC0zNjQgMzU0cS0yNSAyNyAtMjUgNDhxMCAzNyA1NiA0Nmw1MDIgNzNsMjI1IDQ1NXExOSA0MSA0OSA0MXQ0OSAtNDFsMjI1IC00NTUKbDUwMiAtNzNxNTYgLTkgNTYgLTQ2eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJzdGFyX2VtcHR5IiB1bmljb2RlPSImI3hmMDA2OyIgaG9yaXotYWR2LXg9IjE2NjQiIApkPSJNMTEzNyA1MzJsMzA2IDI5N2wtNDIyIDYybC0xODkgMzgybC0xODkgLTM4MmwtNDIyIC02MmwzMDYgLTI5N2wtNzMgLTQyMWwzNzggMTk5bDM3NyAtMTk5ek0xNjY0IDg4OXEwIC0yMiAtMjYgLTQ4bC0zNjMgLTM1NGw4NiAtNTAwcTEgLTcgMSAtMjBxMCAtNTAgLTQxIC01MHEtMTkgMCAtNDAgMTJsLTQ0OSAyMzZsLTQ0OSAtMjM2cS0yMiAtMTIgLTQwIC0xMnEtMjEgMCAtMzEuNSAxNC41dC0xMC41IDM1LjVxMCA2IDIgMjBsODYgNTAwCmwtMzY0IDM1NHEtMjUgMjcgLTI1IDQ4cTAgMzcgNTYgNDZsNTAyIDczbDIyNSA0NTVxMTkgNDEgNDkgNDF0NDkgLTQxbDIyNSAtNDU1bDUwMiAtNzNxNTYgLTkgNTYgLTQ2eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ1c2VyIiB1bmljb2RlPSImI3hmMDA3OyIgaG9yaXotYWR2LXg9IjEyODAiIApkPSJNMTI4MCAxMzdxMCAtMTA5IC02Mi41IC0xODd0LTE1MC41IC03OGgtODU0cS04OCAwIC0xNTAuNSA3OHQtNjIuNSAxODdxMCA4NSA4LjUgMTYwLjV0MzEuNSAxNTJ0NTguNSAxMzF0OTQgODl0MTM0LjUgMzQuNXExMzEgLTEyOCAzMTMgLTEyOHQzMTMgMTI4cTc2IDAgMTM0LjUgLTM0LjV0OTQgLTg5dDU4LjUgLTEzMXQzMS41IC0xNTJ0OC41IC0xNjAuNXpNMTAyNCAxMDI0cTAgLTE1OSAtMTEyLjUgLTI3MS41dC0yNzEuNSAtMTEyLjUKdC0yNzEuNSAxMTIuNXQtMTEyLjUgMjcxLjV0MTEyLjUgMjcxLjV0MjcxLjUgMTEyLjV0MjcxLjUgLTExMi41dDExMi41IC0yNzEuNXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iZmlsbSIgdW5pY29kZT0iJiN4ZjAwODsiIGhvcml6LWFkdi14PSIxOTIwIiAKZD0iTTM4NCAtNjR2MTI4cTAgMjYgLTE5IDQ1dC00NSAxOWgtMTI4cS0yNiAwIC00NSAtMTl0LTE5IC00NXYtMTI4cTAgLTI2IDE5IC00NXQ0NSAtMTloMTI4cTI2IDAgNDUgMTl0MTkgNDV6TTM4NCAzMjB2MTI4cTAgMjYgLTE5IDQ1dC00NSAxOWgtMTI4cS0yNiAwIC00NSAtMTl0LTE5IC00NXYtMTI4cTAgLTI2IDE5IC00NXQ0NSAtMTloMTI4cTI2IDAgNDUgMTl0MTkgNDV6TTM4NCA3MDR2MTI4cTAgMjYgLTE5IDQ1dC00NSAxOWgtMTI4CnEtMjYgMCAtNDUgLTE5dC0xOSAtNDV2LTEyOHEwIC0yNiAxOSAtNDV0NDUgLTE5aDEyOHEyNiAwIDQ1IDE5dDE5IDQ1ek0xNDA4IC02NHY1MTJxMCAyNiAtMTkgNDV0LTQ1IDE5aC03NjhxLTI2IDAgLTQ1IC0xOXQtMTkgLTQ1di01MTJxMCAtMjYgMTkgLTQ1dDQ1IC0xOWg3NjhxMjYgMCA0NSAxOXQxOSA0NXpNMzg0IDEwODh2MTI4cTAgMjYgLTE5IDQ1dC00NSAxOWgtMTI4cS0yNiAwIC00NSAtMTl0LTE5IC00NXYtMTI4cTAgLTI2IDE5IC00NQp0NDUgLTE5aDEyOHEyNiAwIDQ1IDE5dDE5IDQ1ek0xNzkyIC02NHYxMjhxMCAyNiAtMTkgNDV0LTQ1IDE5aC0xMjhxLTI2IDAgLTQ1IC0xOXQtMTkgLTQ1di0xMjhxMCAtMjYgMTkgLTQ1dDQ1IC0xOWgxMjhxMjYgMCA0NSAxOXQxOSA0NXpNMTQwOCA3MDR2NTEycTAgMjYgLTE5IDQ1dC00NSAxOWgtNzY4cS0yNiAwIC00NSAtMTl0LTE5IC00NXYtNTEycTAgLTI2IDE5IC00NXQ0NSAtMTloNzY4cTI2IDAgNDUgMTl0MTkgNDV6TTE3OTIgMzIwdjEyOApxMCAyNiAtMTkgNDV0LTQ1IDE5aC0xMjhxLTI2IDAgLTQ1IC0xOXQtMTkgLTQ1di0xMjhxMCAtMjYgMTkgLTQ1dDQ1IC0xOWgxMjhxMjYgMCA0NSAxOXQxOSA0NXpNMTc5MiA3MDR2MTI4cTAgMjYgLTE5IDQ1dC00NSAxOWgtMTI4cS0yNiAwIC00NSAtMTl0LTE5IC00NXYtMTI4cTAgLTI2IDE5IC00NXQ0NSAtMTloMTI4cTI2IDAgNDUgMTl0MTkgNDV6TTE3OTIgMTA4OHYxMjhxMCAyNiAtMTkgNDV0LTQ1IDE5aC0xMjhxLTI2IDAgLTQ1IC0xOQp0LTE5IC00NXYtMTI4cTAgLTI2IDE5IC00NXQ0NSAtMTloMTI4cTI2IDAgNDUgMTl0MTkgNDV6TTE5MjAgMTI0OHYtMTM0NHEwIC02NiAtNDcgLTExM3QtMTEzIC00N2gtMTYwMHEtNjYgMCAtMTEzIDQ3dC00NyAxMTN2MTM0NHEwIDY2IDQ3IDExM3QxMTMgNDdoMTYwMHE2NiAwIDExMyAtNDd0NDcgLTExM3oiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idGhfbGFyZ2UiIHVuaWNvZGU9IiYjeGYwMDk7IiBob3Jpei1hZHYteD0iMTY2NCIgCmQ9Ik03NjggNTEydi0zODRxMCAtNTIgLTM4IC05MHQtOTAgLTM4aC01MTJxLTUyIDAgLTkwIDM4dC0zOCA5MHYzODRxMCA1MiAzOCA5MHQ5MCAzOGg1MTJxNTIgMCA5MCAtMzh0MzggLTkwek03NjggMTI4MHYtMzg0cTAgLTUyIC0zOCAtOTB0LTkwIC0zOGgtNTEycS01MiAwIC05MCAzOHQtMzggOTB2Mzg0cTAgNTIgMzggOTB0OTAgMzhoNTEycTUyIDAgOTAgLTM4dDM4IC05MHpNMTY2NCA1MTJ2LTM4NHEwIC01MiAtMzggLTkwdC05MCAtMzgKaC01MTJxLTUyIDAgLTkwIDM4dC0zOCA5MHYzODRxMCA1MiAzOCA5MHQ5MCAzOGg1MTJxNTIgMCA5MCAtMzh0MzggLTkwek0xNjY0IDEyODB2LTM4NHEwIC01MiAtMzggLTkwdC05MCAtMzhoLTUxMnEtNTIgMCAtOTAgMzh0LTM4IDkwdjM4NHEwIDUyIDM4IDkwdDkwIDM4aDUxMnE1MiAwIDkwIC0zOHQzOCAtOTB6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InRoIiB1bmljb2RlPSImI3hmMDBhOyIgaG9yaXotYWR2LXg9IjE3OTIiIApkPSJNNTEyIDI4OHYtMTkycTAgLTQwIC0yOCAtNjh0LTY4IC0yOGgtMzIwcS00MCAwIC02OCAyOHQtMjggNjh2MTkycTAgNDAgMjggNjh0NjggMjhoMzIwcTQwIDAgNjggLTI4dDI4IC02OHpNNTEyIDgwMHYtMTkycTAgLTQwIC0yOCAtNjh0LTY4IC0yOGgtMzIwcS00MCAwIC02OCAyOHQtMjggNjh2MTkycTAgNDAgMjggNjh0NjggMjhoMzIwcTQwIDAgNjggLTI4dDI4IC02OHpNMTE1MiAyODh2LTE5MnEwIC00MCAtMjggLTY4dC02OCAtMjhoLTMyMApxLTQwIDAgLTY4IDI4dC0yOCA2OHYxOTJxMCA0MCAyOCA2OHQ2OCAyOGgzMjBxNDAgMCA2OCAtMjh0MjggLTY4ek01MTIgMTMxMnYtMTkycTAgLTQwIC0yOCAtNjh0LTY4IC0yOGgtMzIwcS00MCAwIC02OCAyOHQtMjggNjh2MTkycTAgNDAgMjggNjh0NjggMjhoMzIwcTQwIDAgNjggLTI4dDI4IC02OHpNMTE1MiA4MDB2LTE5MnEwIC00MCAtMjggLTY4dC02OCAtMjhoLTMyMHEtNDAgMCAtNjggMjh0LTI4IDY4djE5MnEwIDQwIDI4IDY4dDY4IDI4CmgzMjBxNDAgMCA2OCAtMjh0MjggLTY4ek0xNzkyIDI4OHYtMTkycTAgLTQwIC0yOCAtNjh0LTY4IC0yOGgtMzIwcS00MCAwIC02OCAyOHQtMjggNjh2MTkycTAgNDAgMjggNjh0NjggMjhoMzIwcTQwIDAgNjggLTI4dDI4IC02OHpNMTE1MiAxMzEydi0xOTJxMCAtNDAgLTI4IC02OHQtNjggLTI4aC0zMjBxLTQwIDAgLTY4IDI4dC0yOCA2OHYxOTJxMCA0MCAyOCA2OHQ2OCAyOGgzMjBxNDAgMCA2OCAtMjh0MjggLTY4ek0xNzkyIDgwMHYtMTkyCnEwIC00MCAtMjggLTY4dC02OCAtMjhoLTMyMHEtNDAgMCAtNjggMjh0LTI4IDY4djE5MnEwIDQwIDI4IDY4dDY4IDI4aDMyMHE0MCAwIDY4IC0yOHQyOCAtNjh6TTE3OTIgMTMxMnYtMTkycTAgLTQwIC0yOCAtNjh0LTY4IC0yOGgtMzIwcS00MCAwIC02OCAyOHQtMjggNjh2MTkycTAgNDAgMjggNjh0NjggMjhoMzIwcTQwIDAgNjggLTI4dDI4IC02OHoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idGhfbGlzdCIgdW5pY29kZT0iJiN4ZjAwYjsiIGhvcml6LWFkdi14PSIxNzkyIiAKZD0iTTUxMiAyODh2LTE5MnEwIC00MCAtMjggLTY4dC02OCAtMjhoLTMyMHEtNDAgMCAtNjggMjh0LTI4IDY4djE5MnEwIDQwIDI4IDY4dDY4IDI4aDMyMHE0MCAwIDY4IC0yOHQyOCAtNjh6TTUxMiA4MDB2LTE5MnEwIC00MCAtMjggLTY4dC02OCAtMjhoLTMyMHEtNDAgMCAtNjggMjh0LTI4IDY4djE5MnEwIDQwIDI4IDY4dDY4IDI4aDMyMHE0MCAwIDY4IC0yOHQyOCAtNjh6TTE3OTIgMjg4di0xOTJxMCAtNDAgLTI4IC02OHQtNjggLTI4aC05NjAKcS00MCAwIC02OCAyOHQtMjggNjh2MTkycTAgNDAgMjggNjh0NjggMjhoOTYwcTQwIDAgNjggLTI4dDI4IC02OHpNNTEyIDEzMTJ2LTE5MnEwIC00MCAtMjggLTY4dC02OCAtMjhoLTMyMHEtNDAgMCAtNjggMjh0LTI4IDY4djE5MnEwIDQwIDI4IDY4dDY4IDI4aDMyMHE0MCAwIDY4IC0yOHQyOCAtNjh6TTE3OTIgODAwdi0xOTJxMCAtNDAgLTI4IC02OHQtNjggLTI4aC05NjBxLTQwIDAgLTY4IDI4dC0yOCA2OHYxOTJxMCA0MCAyOCA2OHQ2OCAyOApoOTYwcTQwIDAgNjggLTI4dDI4IC02OHpNMTc5MiAxMzEydi0xOTJxMCAtNDAgLTI4IC02OHQtNjggLTI4aC05NjBxLTQwIDAgLTY4IDI4dC0yOCA2OHYxOTJxMCA0MCAyOCA2OHQ2OCAyOGg5NjBxNDAgMCA2OCAtMjh0MjggLTY4eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJvayIgdW5pY29kZT0iJiN4ZjAwYzsiIGhvcml6LWFkdi14PSIxNzkyIiAKZD0iTTE2NzEgOTcwcTAgLTQwIC0yOCAtNjhsLTcyNCAtNzI0bC0xMzYgLTEzNnEtMjggLTI4IC02OCAtMjh0LTY4IDI4bC0xMzYgMTM2bC0zNjIgMzYycS0yOCAyOCAtMjggNjh0MjggNjhsMTM2IDEzNnEyOCAyOCA2OCAyOHQ2OCAtMjhsMjk0IC0yOTVsNjU2IDY1N3EyOCAyOCA2OCAyOHQ2OCAtMjhsMTM2IC0xMzZxMjggLTI4IDI4IC02OHoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0icmVtb3ZlIiB1bmljb2RlPSImI3hmMDBkOyIgaG9yaXotYWR2LXg9IjE0MDgiIApkPSJNMTI5OCAyMTRxMCAtNDAgLTI4IC02OGwtMTM2IC0xMzZxLTI4IC0yOCAtNjggLTI4dC02OCAyOGwtMjk0IDI5NGwtMjk0IC0yOTRxLTI4IC0yOCAtNjggLTI4dC02OCAyOGwtMTM2IDEzNnEtMjggMjggLTI4IDY4dDI4IDY4bDI5NCAyOTRsLTI5NCAyOTRxLTI4IDI4IC0yOCA2OHQyOCA2OGwxMzYgMTM2cTI4IDI4IDY4IDI4dDY4IC0yOGwyOTQgLTI5NGwyOTQgMjk0cTI4IDI4IDY4IDI4dDY4IC0yOGwxMzYgLTEzNnEyOCAtMjggMjggLTY4CnQtMjggLTY4bC0yOTQgLTI5NGwyOTQgLTI5NHEyOCAtMjggMjggLTY4eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ6b29tX2luIiB1bmljb2RlPSImI3hmMDBlOyIgaG9yaXotYWR2LXg9IjE2NjQiIApkPSJNMTAyNCA3MzZ2LTY0cTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtMjI0di0yMjRxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC02NHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djIyNGgtMjI0cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2NjRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWgyMjR2MjI0cTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoNjRxMTMgMCAyMi41IC05LjV0OS41IC0yMi41di0yMjRoMjI0CnExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6TTExNTIgNzA0cTAgMTg1IC0xMzEuNSAzMTYuNXQtMzE2LjUgMTMxLjV0LTMxNi41IC0xMzEuNXQtMTMxLjUgLTMxNi41dDEzMS41IC0zMTYuNXQzMTYuNSAtMTMxLjV0MzE2LjUgMTMxLjV0MTMxLjUgMzE2LjV6TTE2NjQgLTEyOHEwIC01MyAtMzcuNSAtOTAuNXQtOTAuNSAtMzcuNXEtNTQgMCAtOTAgMzhsLTM0MyAzNDJxLTE3OSAtMTI0IC0zOTkgLTEyNHEtMTQzIDAgLTI3My41IDU1LjUKdC0yMjUgMTUwdC0xNTAgMjI1dC01NS41IDI3My41dDU1LjUgMjczLjV0MTUwIDIyNXQyMjUgMTUwdDI3My41IDU1LjV0MjczLjUgLTU1LjV0MjI1IC0xNTB0MTUwIC0yMjV0NTUuNSAtMjczLjVxMCAtMjIwIC0xMjQgLTM5OWwzNDMgLTM0M3EzNyAtMzcgMzcgLTkweiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ6b29tX291dCIgdW5pY29kZT0iJiN4ZjAxMDsiIGhvcml6LWFkdi14PSIxNjY0IiAKZD0iTTEwMjQgNzM2di02NHEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTU3NnEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djY0cTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoNTc2cTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXpNMTE1MiA3MDRxMCAxODUgLTEzMS41IDMxNi41dC0zMTYuNSAxMzEuNXQtMzE2LjUgLTEzMS41dC0xMzEuNSAtMzE2LjV0MTMxLjUgLTMxNi41dDMxNi41IC0xMzEuNXQzMTYuNSAxMzEuNXQxMzEuNSAzMTYuNXoKTTE2NjQgLTEyOHEwIC01MyAtMzcuNSAtOTAuNXQtOTAuNSAtMzcuNXEtNTQgMCAtOTAgMzhsLTM0MyAzNDJxLTE3OSAtMTI0IC0zOTkgLTEyNHEtMTQzIDAgLTI3My41IDU1LjV0LTIyNSAxNTB0LTE1MCAyMjV0LTU1LjUgMjczLjV0NTUuNSAyNzMuNXQxNTAgMjI1dDIyNSAxNTB0MjczLjUgNTUuNXQyNzMuNSAtNTUuNXQyMjUgLTE1MHQxNTAgLTIyNXQ1NS41IC0yNzMuNXEwIC0yMjAgLTEyNCAtMzk5bDM0MyAtMzQzcTM3IC0zNyAzNyAtOTB6CiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJvZmYiIHVuaWNvZGU9IiYjeGYwMTE7IiAKZD0iTTE1MzYgNjQwcTAgLTE1NiAtNjEgLTI5OHQtMTY0IC0yNDV0LTI0NSAtMTY0dC0yOTggLTYxdC0yOTggNjF0LTI0NSAxNjR0LTE2NCAyNDV0LTYxIDI5OHEwIDE4MiA4MC41IDM0M3QyMjYuNSAyNzBxNDMgMzIgOTUuNSAyNXQ4My41IC01MHEzMiAtNDIgMjQuNSAtOTQuNXQtNDkuNSAtODQuNXEtOTggLTc0IC0xNTEuNSAtMTgxdC01My41IC0yMjhxMCAtMTA0IDQwLjUgLTE5OC41dDEwOS41IC0xNjMuNXQxNjMuNSAtMTA5LjUKdDE5OC41IC00MC41dDE5OC41IDQwLjV0MTYzLjUgMTA5LjV0MTA5LjUgMTYzLjV0NDAuNSAxOTguNXEwIDEyMSAtNTMuNSAyMjh0LTE1MS41IDE4MXEtNDIgMzIgLTQ5LjUgODQuNXQyNC41IDk0LjVxMzEgNDMgODQgNTB0OTUgLTI1cTE0NiAtMTA5IDIyNi41IC0yNzB0ODAuNSAtMzQzek04OTYgMTQwOHYtNjQwcTAgLTUyIC0zOCAtOTB0LTkwIC0zOHQtOTAgMzh0LTM4IDkwdjY0MHEwIDUyIDM4IDkwdDkwIDM4dDkwIC0zOHQzOCAtOTB6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InNpZ25hbCIgdW5pY29kZT0iJiN4ZjAxMjsiIGhvcml6LWFkdi14PSIxNzkyIiAKZD0iTTI1NiA5NnYtMTkycTAgLTE0IC05IC0yM3QtMjMgLTloLTE5MnEtMTQgMCAtMjMgOXQtOSAyM3YxOTJxMCAxNCA5IDIzdDIzIDloMTkycTE0IDAgMjMgLTl0OSAtMjN6TTY0MCAyMjR2LTMyMHEwIC0xNCAtOSAtMjN0LTIzIC05aC0xOTJxLTE0IDAgLTIzIDl0LTkgMjN2MzIwcTAgMTQgOSAyM3QyMyA5aDE5MnExNCAwIDIzIC05dDkgLTIzek0xMDI0IDQ4MHYtNTc2cTAgLTE0IC05IC0yM3QtMjMgLTloLTE5MnEtMTQgMCAtMjMgOXQtOSAyMwp2NTc2cTAgMTQgOSAyM3QyMyA5aDE5MnExNCAwIDIzIC05dDkgLTIzek0xNDA4IDg2NHYtOTYwcTAgLTE0IC05IC0yM3QtMjMgLTloLTE5MnEtMTQgMCAtMjMgOXQtOSAyM3Y5NjBxMCAxNCA5IDIzdDIzIDloMTkycTE0IDAgMjMgLTl0OSAtMjN6TTE3OTIgMTM3NnYtMTQ3MnEwIC0xNCAtOSAtMjN0LTIzIC05aC0xOTJxLTE0IDAgLTIzIDl0LTkgMjN2MTQ3MnEwIDE0IDkgMjN0MjMgOWgxOTJxMTQgMCAyMyAtOXQ5IC0yM3oiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iY29nIiB1bmljb2RlPSImI3hmMDEzOyIgCmQ9Ik0xMDI0IDY0MHEwIDEwNiAtNzUgMTgxdC0xODEgNzV0LTE4MSAtNzV0LTc1IC0xODF0NzUgLTE4MXQxODEgLTc1dDE4MSA3NXQ3NSAxODF6TTE1MzYgNzQ5di0yMjJxMCAtMTIgLTggLTIzdC0yMCAtMTNsLTE4NSAtMjhxLTE5IC01NCAtMzkgLTkxcTM1IC01MCAxMDcgLTEzOHExMCAtMTIgMTAgLTI1dC05IC0yM3EtMjcgLTM3IC05OSAtMTA4dC05NCAtNzFxLTEyIDAgLTI2IDlsLTEzOCAxMDhxLTQ0IC0yMyAtOTEgLTM4CnEtMTYgLTEzNiAtMjkgLTE4NnEtNyAtMjggLTM2IC0yOGgtMjIycS0xNCAwIC0yNC41IDguNXQtMTEuNSAyMS41bC0yOCAxODRxLTQ5IDE2IC05MCAzN2wtMTQxIC0xMDdxLTEwIC05IC0yNSAtOXEtMTQgMCAtMjUgMTFxLTEyNiAxMTQgLTE2NSAxNjhxLTcgMTAgLTcgMjNxMCAxMiA4IDIzcTE1IDIxIDUxIDY2LjV0NTQgNzAuNXEtMjcgNTAgLTQxIDk5bC0xODMgMjdxLTEzIDIgLTIxIDEyLjV0LTggMjMuNXYyMjJxMCAxMiA4IDIzdDE5IDEzCmwxODYgMjhxMTQgNDYgMzkgOTJxLTQwIDU3IC0xMDcgMTM4cS0xMCAxMiAtMTAgMjRxMCAxMCA5IDIzcTI2IDM2IDk4LjUgMTA3LjV0OTQuNSA3MS41cTEzIDAgMjYgLTEwbDEzOCAtMTA3cTQ0IDIzIDkxIDM4cTE2IDEzNiAyOSAxODZxNyAyOCAzNiAyOGgyMjJxMTQgMCAyNC41IC04LjV0MTEuNSAtMjEuNWwyOCAtMTg0cTQ5IC0xNiA5MCAtMzdsMTQyIDEwN3E5IDkgMjQgOXExMyAwIDI1IC0xMHExMjkgLTExOSAxNjUgLTE3MHE3IC04IDcgLTIyCnEwIC0xMiAtOCAtMjNxLTE1IC0yMSAtNTEgLTY2LjV0LTU0IC03MC41cTI2IC01MCA0MSAtOThsMTgzIC0yOHExMyAtMiAyMSAtMTIuNXQ4IC0yMy41eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ0cmFzaCIgdW5pY29kZT0iJiN4ZjAxNDsiIGhvcml6LWFkdi14PSIxNDA4IiAKZD0iTTUxMiA4MDB2LTU3NnEwIC0xNCAtOSAtMjN0LTIzIC05aC02NHEtMTQgMCAtMjMgOXQtOSAyM3Y1NzZxMCAxNCA5IDIzdDIzIDloNjRxMTQgMCAyMyAtOXQ5IC0yM3pNNzY4IDgwMHYtNTc2cTAgLTE0IC05IC0yM3QtMjMgLTloLTY0cS0xNCAwIC0yMyA5dC05IDIzdjU3NnEwIDE0IDkgMjN0MjMgOWg2NHExNCAwIDIzIC05dDkgLTIzek0xMDI0IDgwMHYtNTc2cTAgLTE0IC05IC0yM3QtMjMgLTloLTY0cS0xNCAwIC0yMyA5dC05IDIzdjU3NgpxMCAxNCA5IDIzdDIzIDloNjRxMTQgMCAyMyAtOXQ5IC0yM3pNMTE1MiA3NnY5NDhoLTg5NnYtOTQ4cTAgLTIyIDcgLTQwLjV0MTQuNSAtMjd0MTAuNSAtOC41aDgzMnEzIDAgMTAuNSA4LjV0MTQuNSAyN3Q3IDQwLjV6TTQ4MCAxMTUyaDQ0OGwtNDggMTE3cS03IDkgLTE3IDExaC0zMTdxLTEwIC0yIC0xNyAtMTF6TTE0MDggMTEyMHYtNjRxMCAtMTQgLTkgLTIzdC0yMyAtOWgtOTZ2LTk0OHEwIC04MyAtNDcgLTE0My41dC0xMTMgLTYwLjVoLTgzMgpxLTY2IDAgLTExMyA1OC41dC00NyAxNDEuNXY5NTJoLTk2cS0xNCAwIC0yMyA5dC05IDIzdjY0cTAgMTQgOSAyM3QyMyA5aDMwOWw3MCAxNjdxMTUgMzcgNTQgNjN0NzkgMjZoMzIwcTQwIDAgNzkgLTI2dDU0IC02M2w3MCAtMTY3aDMwOXExNCAwIDIzIC05dDkgLTIzeiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJob21lIiB1bmljb2RlPSImI3hmMDE1OyIgaG9yaXotYWR2LXg9IjE2NjQiIApkPSJNMTQwOCA1NDR2LTQ4MHEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTM4NHYzODRoLTI1NnYtMzg0aC0zODRxLTI2IDAgLTQ1IDE5dC0xOSA0NXY0ODBxMCAxIDAuNSAzdDAuNSAzbDU3NSA0NzRsNTc1IC00NzRxMSAtMiAxIC02ek0xNjMxIDYxM2wtNjIgLTc0cS04IC05IC0yMSAtMTFoLTNxLTEzIDAgLTIxIDdsLTY5MiA1NzdsLTY5MiAtNTc3cS0xMiAtOCAtMjQgLTdxLTEzIDIgLTIxIDExbC02MiA3NHEtOCAxMCAtNyAyMy41dDExIDIxLjUKbDcxOSA1OTlxMzIgMjYgNzYgMjZ0NzYgLTI2bDI0NCAtMjA0djE5NXEwIDE0IDkgMjN0MjMgOWgxOTJxMTQgMCAyMyAtOXQ5IC0yM3YtNDA4bDIxOSAtMTgycTEwIC04IDExIC0yMS41dC03IC0yMy41eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJmaWxlX2FsdCIgdW5pY29kZT0iJiN4ZjAxNjsiIApkPSJNMTQ2OCAxMTU2cTI4IC0yOCA0OCAtNzZ0MjAgLTg4di0xMTUycTAgLTQwIC0yOCAtNjh0LTY4IC0yOGgtMTM0NHEtNDAgMCAtNjggMjh0LTI4IDY4djE2MDBxMCA0MCAyOCA2OHQ2OCAyOGg4OTZxNDAgMCA4OCAtMjB0NzYgLTQ4ek0xMDI0IDE0MDB2LTM3NmgzNzZxLTEwIDI5IC0yMiA0MWwtMzEzIDMxM3EtMTIgMTIgLTQxIDIyek0xNDA4IC0xMjh2MTAyNGgtNDE2cS00MCAwIC02OCAyOHQtMjggNjh2NDE2aC03Njh2LTE1MzZoMTI4MHoKIiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InRpbWUiIHVuaWNvZGU9IiYjeGYwMTc7IiAKZD0iTTg5NiA5OTJ2LTQ0OHEwIC0xNCAtOSAtMjN0LTIzIC05aC0zMjBxLTE0IDAgLTIzIDl0LTkgMjN2NjRxMCAxNCA5IDIzdDIzIDloMjI0djM1MnEwIDE0IDkgMjN0MjMgOWg2NHExNCAwIDIzIC05dDkgLTIzek0xMzEyIDY0MHEwIDE0OCAtNzMgMjczdC0xOTggMTk4dC0yNzMgNzN0LTI3MyAtNzN0LTE5OCAtMTk4dC03MyAtMjczdDczIC0yNzN0MTk4IC0xOTh0MjczIC03M3QyNzMgNzN0MTk4IDE5OHQ3MyAyNzN6TTE1MzYgNjQwCnEwIC0yMDkgLTEwMyAtMzg1LjV0LTI3OS41IC0yNzkuNXQtMzg1LjUgLTEwM3QtMzg1LjUgMTAzdC0yNzkuNSAyNzkuNXQtMTAzIDM4NS41dDEwMyAzODUuNXQyNzkuNSAyNzkuNXQzODUuNSAxMDN0Mzg1LjUgLTEwM3QyNzkuNSAtMjc5LjV0MTAzIC0zODUuNXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0icm9hZCIgdW5pY29kZT0iJiN4ZjAxODsiIGhvcml6LWFkdi14PSIxOTIwIiAKZD0iTTExMTEgNTQwdjRsLTI0IDMyMHEtMSAxMyAtMTEgMjIuNXQtMjMgOS41aC0xODZxLTEzIDAgLTIzIC05LjV0LTExIC0yMi41bC0yNCAtMzIwdi00cS0xIC0xMiA4IC0yMHQyMSAtOGgyNDRxMTIgMCAyMSA4dDggMjB6TTE4NzAgNzNxMCAtNzMgLTQ2IC03M2gtNzA0cTEzIDAgMjIgOS41dDggMjIuNWwtMjAgMjU2cS0xIDEzIC0xMSAyMi41dC0yMyA5LjVoLTI3MnEtMTMgMCAtMjMgLTkuNXQtMTEgLTIyLjVsLTIwIC0yNTYKcS0xIC0xMyA4IC0yMi41dDIyIC05LjVoLTcwNHEtNDYgMCAtNDYgNzNxMCA1NCAyNiAxMTZsNDE3IDEwNDRxOCAxOSAyNiAzM3QzOCAxNGgzMzlxLTEzIDAgLTIzIC05LjV0LTExIC0yMi41bC0xNSAtMTkycS0xIC0xNCA4IC0yM3QyMiAtOWgxNjZxMTMgMCAyMiA5dDggMjNsLTE1IDE5MnEtMSAxMyAtMTEgMjIuNXQtMjMgOS41aDMzOXEyMCAwIDM4IC0xNHQyNiAtMzNsNDE3IC0xMDQ0cTI2IC02MiAyNiAtMTE2eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJkb3dubG9hZF9hbHQiIHVuaWNvZGU9IiYjeGYwMTk7IiBob3Jpei1hZHYteD0iMTY2NCIgCmQ9Ik0xMjgwIDE5MnEwIDI2IC0xOSA0NXQtNDUgMTl0LTQ1IC0xOXQtMTkgLTQ1dDE5IC00NXQ0NSAtMTl0NDUgMTl0MTkgNDV6TTE1MzYgMTkycTAgMjYgLTE5IDQ1dC00NSAxOXQtNDUgLTE5dC0xOSAtNDV0MTkgLTQ1dDQ1IC0xOXQ0NSAxOXQxOSA0NXpNMTY2NCA0MTZ2LTMyMHEwIC00MCAtMjggLTY4dC02OCAtMjhoLTE0NzJxLTQwIDAgLTY4IDI4dC0yOCA2OHYzMjBxMCA0MCAyOCA2OHQ2OCAyOGg0NjVsMTM1IC0xMzYKcTU4IC01NiAxMzYgLTU2dDEzNiA1NmwxMzYgMTM2aDQ2NHE0MCAwIDY4IC0yOHQyOCAtNjh6TTEzMzkgOTg1cTE3IC00MSAtMTQgLTcwbC00NDggLTQ0OHEtMTggLTE5IC00NSAtMTl0LTQ1IDE5bC00NDggNDQ4cS0zMSAyOSAtMTQgNzBxMTcgMzkgNTkgMzloMjU2djQ0OHEwIDI2IDE5IDQ1dDQ1IDE5aDI1NnEyNiAwIDQ1IC0xOXQxOSAtNDV2LTQ0OGgyNTZxNDIgMCA1OSAtMzl6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9ImRvd25sb2FkIiB1bmljb2RlPSImI3hmMDFhOyIgCmQ9Ik0xMTIwIDYwOHEwIC0xMiAtMTAgLTI0bC0zMTkgLTMxOXEtMTEgLTkgLTIzIC05dC0yMyA5bC0zMjAgMzIwcS0xNSAxNiAtNyAzNXE4IDIwIDMwIDIwaDE5MnYzNTJxMCAxNCA5IDIzdDIzIDloMTkycTE0IDAgMjMgLTl0OSAtMjN2LTM1MmgxOTJxMTQgMCAyMyAtOXQ5IC0yM3pNNzY4IDExODRxLTE0OCAwIC0yNzMgLTczdC0xOTggLTE5OHQtNzMgLTI3M3Q3MyAtMjczdDE5OCAtMTk4dDI3MyAtNzN0MjczIDczdDE5OCAxOTh0NzMgMjczCnQtNzMgMjczdC0xOTggMTk4dC0yNzMgNzN6TTE1MzYgNjQwcTAgLTIwOSAtMTAzIC0zODUuNXQtMjc5LjUgLTI3OS41dC0zODUuNSAtMTAzdC0zODUuNSAxMDN0LTI3OS41IDI3OS41dC0xMDMgMzg1LjV0MTAzIDM4NS41dDI3OS41IDI3OS41dDM4NS41IDEwM3QzODUuNSAtMTAzdDI3OS41IC0yNzkuNXQxMDMgLTM4NS41eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ1cGxvYWQiIHVuaWNvZGU9IiYjeGYwMWI7IiAKZD0iTTExMTggNjYwcS04IC0yMCAtMzAgLTIwaC0xOTJ2LTM1MnEwIC0xNCAtOSAtMjN0LTIzIC05aC0xOTJxLTE0IDAgLTIzIDl0LTkgMjN2MzUyaC0xOTJxLTE0IDAgLTIzIDl0LTkgMjNxMCAxMiAxMCAyNGwzMTkgMzE5cTExIDkgMjMgOXQyMyAtOWwzMjAgLTMyMHExNSAtMTYgNyAtMzV6TTc2OCAxMTg0cS0xNDggMCAtMjczIC03M3QtMTk4IC0xOTh0LTczIC0yNzN0NzMgLTI3M3QxOTggLTE5OHQyNzMgLTczdDI3MyA3M3QxOTggMTk4CnQ3MyAyNzN0LTczIDI3M3QtMTk4IDE5OHQtMjczIDczek0xNTM2IDY0MHEwIC0yMDkgLTEwMyAtMzg1LjV0LTI3OS41IC0yNzkuNXQtMzg1LjUgLTEwM3QtMzg1LjUgMTAzdC0yNzkuNSAyNzkuNXQtMTAzIDM4NS41dDEwMyAzODUuNXQyNzkuNSAyNzkuNXQzODUuNSAxMDN0Mzg1LjUgLTEwM3QyNzkuNSAtMjc5LjV0MTAzIC0zODUuNXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iaW5ib3giIHVuaWNvZGU9IiYjeGYwMWM7IiAKZD0iTTEwMjMgNTc2aDMxNnEtMSAzIC0yLjUgOC41dC0yLjUgNy41bC0yMTIgNDk2aC03MDhsLTIxMiAtNDk2cS0xIC0zIC0yLjUgLTguNXQtMi41IC03LjVoMzE2bDk1IC0xOTJoMzIwek0xNTM2IDU0NnYtNDgycTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtMTQwOHEtMjYgMCAtNDUgMTl0LTE5IDQ1djQ4MnEwIDYyIDI1IDEyM2wyMzggNTUycTEwIDI1IDM2LjUgNDJ0NTIuNSAxN2g4MzJxMjYgMCA1Mi41IC0xN3QzNi41IC00MmwyMzggLTU1MgpxMjUgLTYxIDI1IC0xMjN6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InBsYXlfY2lyY2xlIiB1bmljb2RlPSImI3hmMDFkOyIgCmQ9Ik0xMTg0IDY0MHEwIC0zNyAtMzIgLTU1bC01NDQgLTMyMHEtMTUgLTkgLTMyIC05cS0xNiAwIC0zMiA4cS0zMiAxOSAtMzIgNTZ2NjQwcTAgMzcgMzIgNTZxMzMgMTggNjQgLTFsNTQ0IC0zMjBxMzIgLTE4IDMyIC01NXpNMTMxMiA2NDBxMCAxNDggLTczIDI3M3QtMTk4IDE5OHQtMjczIDczdC0yNzMgLTczdC0xOTggLTE5OHQtNzMgLTI3M3Q3MyAtMjczdDE5OCAtMTk4dDI3MyAtNzN0MjczIDczdDE5OCAxOTh0NzMgMjczek0xNTM2IDY0MApxMCAtMjA5IC0xMDMgLTM4NS41dC0yNzkuNSAtMjc5LjV0LTM4NS41IC0xMDN0LTM4NS41IDEwM3QtMjc5LjUgMjc5LjV0LTEwMyAzODUuNXQxMDMgMzg1LjV0Mjc5LjUgMjc5LjV0Mzg1LjUgMTAzdDM4NS41IC0xMDN0Mjc5LjUgLTI3OS41dDEwMyAtMzg1LjV6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InJlcGVhdCIgdW5pY29kZT0iJiN4ZjAxZTsiIApkPSJNMTUzNiAxMjgwdi00NDhxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC00NDhxLTQyIDAgLTU5IDQwcS0xNyAzOSAxNCA2OWwxMzggMTM4cS0xNDggMTM3IC0zNDkgMTM3cS0xMDQgMCAtMTk4LjUgLTQwLjV0LTE2My41IC0xMDkuNXQtMTA5LjUgLTE2My41dC00MC41IC0xOTguNXQ0MC41IC0xOTguNXQxMDkuNSAtMTYzLjV0MTYzLjUgLTEwOS41dDE5OC41IC00MC41cTExOSAwIDIyNSA1MnQxNzkgMTQ3cTcgMTAgMjMgMTJxMTUgMCAyNSAtOQpsMTM3IC0xMzhxOSAtOCA5LjUgLTIwLjV0LTcuNSAtMjIuNXEtMTA5IC0xMzIgLTI2NCAtMjA0LjV0LTMyNyAtNzIuNXEtMTU2IDAgLTI5OCA2MXQtMjQ1IDE2NHQtMTY0IDI0NXQtNjEgMjk4dDYxIDI5OHQxNjQgMjQ1dDI0NSAxNjR0Mjk4IDYxcTE0NyAwIDI4NC41IC01NS41dDI0NC41IC0xNTYuNWwxMzAgMTI5cTI5IDMxIDcwIDE0cTM5IC0xNyAzOSAtNTl6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InJlZnJlc2giIHVuaWNvZGU9IiYjeGYwMjE7IiAKZD0iTTE1MTEgNDgwcTAgLTUgLTEgLTdxLTY0IC0yNjggLTI2OCAtNDM0LjV0LTQ3OCAtMTY2LjVxLTE0NiAwIC0yODIuNSA1NXQtMjQzLjUgMTU3bC0xMjkgLTEyOXEtMTkgLTE5IC00NSAtMTl0LTQ1IDE5dC0xOSA0NXY0NDhxMCAyNiAxOSA0NXQ0NSAxOWg0NDhxMjYgMCA0NSAtMTl0MTkgLTQ1dC0xOSAtNDVsLTEzNyAtMTM3cTcxIC02NiAxNjEgLTEwMnQxODcgLTM2cTEzNCAwIDI1MCA2NXQxODYgMTc5cTExIDE3IDUzIDExNwpxOCAyMyAzMCAyM2gxOTJxMTMgMCAyMi41IC05LjV0OS41IC0yMi41ek0xNTM2IDEyODB2LTQ0OHEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTQ0OHEtMjYgMCAtNDUgMTl0LTE5IDQ1dDE5IDQ1bDEzOCAxMzhxLTE0OCAxMzcgLTM0OSAxMzdxLTEzNCAwIC0yNTAgLTY1dC0xODYgLTE3OXEtMTEgLTE3IC01MyAtMTE3cS04IC0yMyAtMzAgLTIzaC0xOTlxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXY3cTY1IDI2OCAyNzAgNDM0LjV0NDgwIDE2Ni41CnExNDYgMCAyODQgLTU1LjV0MjQ1IC0xNTYuNWwxMzAgMTI5cTE5IDE5IDQ1IDE5dDQ1IC0xOXQxOSAtNDV6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9Imxpc3RfYWx0IiB1bmljb2RlPSImI3hmMDIyOyIgaG9yaXotYWR2LXg9IjE3OTIiIApkPSJNMzg0IDM1MnYtNjRxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC02NHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djY0cTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoNjRxMTMgMCAyMi41IC05LjV0OS41IC0yMi41ek0zODQgNjA4di02NHEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTY0cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2NjRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWg2NHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6Ck0zODQgODY0di02NHEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTY0cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2NjRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWg2NHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6TTE1MzYgMzUydi02NHEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTk2MHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djY0cTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoOTYwcTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXoKTTE1MzYgNjA4di02NHEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTk2MHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djY0cTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoOTYwcTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXpNMTUzNiA4NjR2LTY0cTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtOTYwcS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2NjRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWg5NjBxMTMgMCAyMi41IC05LjUKdDkuNSAtMjIuNXpNMTY2NCAxNjB2ODMycTAgMTMgLTkuNSAyMi41dC0yMi41IDkuNWgtMTQ3MnEtMTMgMCAtMjIuNSAtOS41dC05LjUgLTIyLjV2LTgzMnEwIC0xMyA5LjUgLTIyLjV0MjIuNSAtOS41aDE0NzJxMTMgMCAyMi41IDkuNXQ5LjUgMjIuNXpNMTc5MiAxMjQ4di0xMDg4cTAgLTY2IC00NyAtMTEzdC0xMTMgLTQ3aC0xNDcycS02NiAwIC0xMTMgNDd0LTQ3IDExM3YxMDg4cTAgNjYgNDcgMTEzdDExMyA0N2gxNDcycTY2IDAgMTEzIC00Nwp0NDcgLTExM3oiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0ibG9jayIgdW5pY29kZT0iJiN4ZjAyMzsiIGhvcml6LWFkdi14PSIxMTUyIiAKZD0iTTMyMCA3NjhoNTEydjE5MnEwIDEwNiAtNzUgMTgxdC0xODEgNzV0LTE4MSAtNzV0LTc1IC0xODF2LTE5MnpNMTE1MiA2NzJ2LTU3NnEwIC00MCAtMjggLTY4dC02OCAtMjhoLTk2MHEtNDAgMCAtNjggMjh0LTI4IDY4djU3NnEwIDQwIDI4IDY4dDY4IDI4aDMydjE5MnEwIDE4NCAxMzIgMzE2dDMxNiAxMzJ0MzE2IC0xMzJ0MTMyIC0zMTZ2LTE5MmgzMnE0MCAwIDY4IC0yOHQyOCAtNjh6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9ImZsYWciIHVuaWNvZGU9IiYjeGYwMjQ7IiBob3Jpei1hZHYteD0iMTc5MiIgCmQ9Ik0zMjAgMTI4MHEwIC03MiAtNjQgLTExMHYtMTI2NnEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTY0cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2MTI2NnEtNjQgMzggLTY0IDExMHEwIDUzIDM3LjUgOTAuNXQ5MC41IDM3LjV0OTAuNSAtMzcuNXQzNy41IC05MC41ek0xNzkyIDEyMTZ2LTc2M3EwIC0yNSAtMTIuNSAtMzguNXQtMzkuNSAtMjcuNXEtMjE1IC0xMTYgLTM2OSAtMTE2cS02MSAwIC0xMjMuNSAyMnQtMTA4LjUgNDgKdC0xMTUuNSA0OHQtMTQyLjUgMjJxLTE5MiAwIC00NjQgLTE0NnEtMTcgLTkgLTMzIC05cS0yNiAwIC00NSAxOXQtMTkgNDV2NzQycTAgMzIgMzEgNTVxMjEgMTQgNzkgNDNxMjM2IDEyMCA0MjEgMTIwcTEwNyAwIDIwMCAtMjl0MjE5IC04OHEzOCAtMTkgODggLTE5cTU0IDAgMTE3LjUgMjF0MTEwIDQ3dDg4IDQ3dDU0LjUgMjFxMjYgMCA0NSAtMTl0MTkgLTQ1eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJoZWFkcGhvbmVzIiB1bmljb2RlPSImI3hmMDI1OyIgaG9yaXotYWR2LXg9IjE2NjQiIApkPSJNMTY2NCA2NTBxMCAtMTY2IC02MCAtMzE0bC0yMCAtNDlsLTE4NSAtMzNxLTIyIC04MyAtOTAuNSAtMTM2LjV0LTE1Ni41IC01My41di0zMnEwIC0xNCAtOSAtMjN0LTIzIC05aC02NHEtMTQgMCAtMjMgOXQtOSAyM3Y1NzZxMCAxNCA5IDIzdDIzIDloNjRxMTQgMCAyMyAtOXQ5IC0yM3YtMzJxNzEgMCAxMzAgLTM1LjV0OTMgLTk1LjVsNjggMTJxMjkgOTUgMjkgMTkzcTAgMTQ4IC04OCAyNzl0LTIzNi41IDIwOXQtMzE1LjUgNzgKdC0zMTUuNSAtNzh0LTIzNi41IC0yMDl0LTg4IC0yNzlxMCAtOTggMjkgLTE5M2w2OCAtMTJxMzQgNjAgOTMgOTUuNXQxMzAgMzUuNXYzMnEwIDE0IDkgMjN0MjMgOWg2NHExNCAwIDIzIC05dDkgLTIzdi01NzZxMCAtMTQgLTkgLTIzdC0yMyAtOWgtNjRxLTE0IDAgLTIzIDl0LTkgMjN2MzJxLTg4IDAgLTE1Ni41IDUzLjV0LTkwLjUgMTM2LjVsLTE4NSAzM2wtMjAgNDlxLTYwIDE0OCAtNjAgMzE0cTAgMTUxIDY3IDI5MXQxNzkgMjQyLjUKdDI2NiAxNjMuNXQzMjAgNjF0MzIwIC02MXQyNjYgLTE2My41dDE3OSAtMjQyLjV0NjcgLTI5MXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idm9sdW1lX29mZiIgdW5pY29kZT0iJiN4ZjAyNjsiIGhvcml6LWFkdi14PSI3NjgiIApkPSJNNzY4IDExODR2LTEwODhxMCAtMjYgLTE5IC00NXQtNDUgLTE5dC00NSAxOWwtMzMzIDMzM2gtMjYycS0yNiAwIC00NSAxOXQtMTkgNDV2Mzg0cTAgMjYgMTkgNDV0NDUgMTloMjYybDMzMyAzMzNxMTkgMTkgNDUgMTl0NDUgLTE5dDE5IC00NXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idm9sdW1lX2Rvd24iIHVuaWNvZGU9IiYjeGYwMjc7IiBob3Jpei1hZHYteD0iMTE1MiIgCmQ9Ik03NjggMTE4NHYtMTA4OHEwIC0yNiAtMTkgLTQ1dC00NSAtMTl0LTQ1IDE5bC0zMzMgMzMzaC0yNjJxLTI2IDAgLTQ1IDE5dC0xOSA0NXYzODRxMCAyNiAxOSA0NXQ0NSAxOWgyNjJsMzMzIDMzM3ExOSAxOSA0NSAxOXQ0NSAtMTl0MTkgLTQ1ek0xMTUyIDY0MHEwIC03NiAtNDIuNSAtMTQxLjV0LTExMi41IC05My41cS0xMCAtNSAtMjUgLTVxLTI2IDAgLTQ1IDE4LjV0LTE5IDQ1LjVxMCAyMSAxMiAzNS41dDI5IDI1dDM0IDIzdDI5IDM2CnQxMiA1Ni41dC0xMiA1Ni41dC0yOSAzNnQtMzQgMjN0LTI5IDI1dC0xMiAzNS41cTAgMjcgMTkgNDUuNXQ0NSAxOC41cTE1IDAgMjUgLTVxNzAgLTI3IDExMi41IC05M3Q0Mi41IC0xNDJ6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InZvbHVtZV91cCIgdW5pY29kZT0iJiN4ZjAyODsiIGhvcml6LWFkdi14PSIxNjY0IiAKZD0iTTc2OCAxMTg0di0xMDg4cTAgLTI2IC0xOSAtNDV0LTQ1IC0xOXQtNDUgMTlsLTMzMyAzMzNoLTI2MnEtMjYgMCAtNDUgMTl0LTE5IDQ1djM4NHEwIDI2IDE5IDQ1dDQ1IDE5aDI2MmwzMzMgMzMzcTE5IDE5IDQ1IDE5dDQ1IC0xOXQxOSAtNDV6TTExNTIgNjQwcTAgLTc2IC00Mi41IC0xNDEuNXQtMTEyLjUgLTkzLjVxLTEwIC01IC0yNSAtNXEtMjYgMCAtNDUgMTguNXQtMTkgNDUuNXEwIDIxIDEyIDM1LjV0MjkgMjV0MzQgMjN0MjkgMzYKdDEyIDU2LjV0LTEyIDU2LjV0LTI5IDM2dC0zNCAyM3QtMjkgMjV0LTEyIDM1LjVxMCAyNyAxOSA0NS41dDQ1IDE4LjVxMTUgMCAyNSAtNXE3MCAtMjcgMTEyLjUgLTkzdDQyLjUgLTE0MnpNMTQwOCA2NDBxMCAtMTUzIC04NSAtMjgyLjV0LTIyNSAtMTg4LjVxLTEzIC01IC0yNSAtNXEtMjcgMCAtNDYgMTl0LTE5IDQ1cTAgMzkgMzkgNTlxNTYgMjkgNzYgNDRxNzQgNTQgMTE1LjUgMTM1LjV0NDEuNSAxNzMuNXQtNDEuNSAxNzMuNQp0LTExNS41IDEzNS41cS0yMCAxNSAtNzYgNDRxLTM5IDIwIC0zOSA1OXEwIDI2IDE5IDQ1dDQ1IDE5cTEzIDAgMjYgLTVxMTQwIC01OSAyMjUgLTE4OC41dDg1IC0yODIuNXpNMTY2NCA2NDBxMCAtMjMwIC0xMjcgLTQyMi41dC0zMzggLTI4My41cS0xMyAtNSAtMjYgLTVxLTI2IDAgLTQ1IDE5dC0xOSA0NXEwIDM2IDM5IDU5cTcgNCAyMi41IDEwLjV0MjIuNSAxMC41cTQ2IDI1IDgyIDUxcTEyMyA5MSAxOTIgMjI3dDY5IDI4OXQtNjkgMjg5CnQtMTkyIDIyN3EtMzYgMjYgLTgyIDUxcS03IDQgLTIyLjUgMTAuNXQtMjIuNSAxMC41cS0zOSAyMyAtMzkgNTlxMCAyNiAxOSA0NXQ0NSAxOXExMyAwIDI2IC01cTIxMSAtOTEgMzM4IC0yODMuNXQxMjcgLTQyMi41eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJxcmNvZGUiIHVuaWNvZGU9IiYjeGYwMjk7IiBob3Jpei1hZHYteD0iMTQwOCIgCmQ9Ik0zODQgMzg0di0xMjhoLTEyOHYxMjhoMTI4ek0zODQgMTE1MnYtMTI4aC0xMjh2MTI4aDEyOHpNMTE1MiAxMTUydi0xMjhoLTEyOHYxMjhoMTI4ek0xMjggMTI5aDM4NHYzODNoLTM4NHYtMzgzek0xMjggODk2aDM4NHYzODRoLTM4NHYtMzg0ek04OTYgODk2aDM4NHYzODRoLTM4NHYtMzg0ek02NDAgNjQwdi02NDBoLTY0MHY2NDBoNjQwek0xMTUyIDEyOHYtMTI4aC0xMjh2MTI4aDEyOHpNMTQwOCAxMjh2LTEyOGgtMTI4djEyOGgxMjh6Ck0xNDA4IDY0MHYtMzg0aC0zODR2MTI4aC0xMjh2LTM4NGgtMTI4djY0MGgzODR2LTEyOGgxMjh2MTI4aDEyOHpNNjQwIDE0MDh2LTY0MGgtNjQwdjY0MGg2NDB6TTE0MDggMTQwOHYtNjQwaC02NDB2NjQwaDY0MHoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iYmFyY29kZSIgdW5pY29kZT0iJiN4ZjAyYTsiIGhvcml6LWFkdi14PSIxNzkyIiAKZD0iTTYzIDBoLTYzdjE0MDhoNjN2LTE0MDh6TTEyNiAxaC0zMnYxNDA3aDMydi0xNDA3ek0yMjAgMWgtMzF2MTQwN2gzMXYtMTQwN3pNMzc3IDFoLTMxdjE0MDdoMzF2LTE0MDd6TTUzNCAxaC02MnYxNDA3aDYydi0xNDA3ek02NjAgMWgtMzF2MTQwN2gzMXYtMTQwN3pNNzIzIDFoLTMxdjE0MDdoMzF2LTE0MDd6TTc4NiAxaC0zMXYxNDA3aDMxdi0xNDA3ek05NDMgMWgtNjN2MTQwN2g2M3YtMTQwN3pNMTEwMCAxaC02M3YxNDA3aDYzdi0xNDA3egpNMTIyNiAxaC02M3YxNDA3aDYzdi0xNDA3ek0xMzUyIDFoLTYzdjE0MDdoNjN2LTE0MDd6TTE0NDYgMWgtNjN2MTQwN2g2M3YtMTQwN3pNMTYzNSAxaC05NHYxNDA3aDk0di0xNDA3ek0xNjk4IDFoLTMydjE0MDdoMzJ2LTE0MDd6TTE3OTIgMGgtNjN2MTQwOGg2M3YtMTQwOHoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idGFnIiB1bmljb2RlPSImI3hmMDJiOyIgCmQ9Ik00NDggMTA4OHEwIDUzIC0zNy41IDkwLjV0LTkwLjUgMzcuNXQtOTAuNSAtMzcuNXQtMzcuNSAtOTAuNXQzNy41IC05MC41dDkwLjUgLTM3LjV0OTAuNSAzNy41dDM3LjUgOTAuNXpNMTUxNSA1MTJxMCAtNTMgLTM3IC05MGwtNDkxIC00OTJxLTM5IC0zNyAtOTEgLTM3cS01MyAwIC05MCAzN2wtNzE1IDcxNnEtMzggMzcgLTY0LjUgMTAxdC0yNi41IDExN3Y0MTZxMCA1MiAzOCA5MHQ5MCAzOGg0MTZxNTMgMCAxMTcgLTI2LjV0MTAyIC02NC41Cmw3MTUgLTcxNHEzNyAtMzkgMzcgLTkxeiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ0YWdzIiB1bmljb2RlPSImI3hmMDJjOyIgaG9yaXotYWR2LXg9IjE5MjAiIApkPSJNNDQ4IDEwODhxMCA1MyAtMzcuNSA5MC41dC05MC41IDM3LjV0LTkwLjUgLTM3LjV0LTM3LjUgLTkwLjV0MzcuNSAtOTAuNXQ5MC41IC0zNy41dDkwLjUgMzcuNXQzNy41IDkwLjV6TTE1MTUgNTEycTAgLTUzIC0zNyAtOTBsLTQ5MSAtNDkycS0zOSAtMzcgLTkxIC0zN3EtNTMgMCAtOTAgMzdsLTcxNSA3MTZxLTM4IDM3IC02NC41IDEwMXQtMjYuNSAxMTd2NDE2cTAgNTIgMzggOTB0OTAgMzhoNDE2cTUzIDAgMTE3IC0yNi41dDEwMiAtNjQuNQpsNzE1IC03MTRxMzcgLTM5IDM3IC05MXpNMTg5OSA1MTJxMCAtNTMgLTM3IC05MGwtNDkxIC00OTJxLTM5IC0zNyAtOTEgLTM3cS0zNiAwIC01OSAxNHQtNTMgNDVsNDcwIDQ3MHEzNyAzNyAzNyA5MHEwIDUyIC0zNyA5MWwtNzE1IDcxNHEtMzggMzggLTEwMiA2NC41dC0xMTcgMjYuNWgyMjRxNTMgMCAxMTcgLTI2LjV0MTAyIC02NC41bDcxNSAtNzE0cTM3IC0zOSAzNyAtOTF6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9ImJvb2siIHVuaWNvZGU9IiYjeGYwMmQ7IiBob3Jpei1hZHYteD0iMTY2NCIgCmQ9Ik0xNjM5IDEwNThxNDAgLTU3IDE4IC0xMjlsLTI3NSAtOTA2cS0xOSAtNjQgLTc2LjUgLTEwNy41dC0xMjIuNSAtNDMuNWgtOTIzcS03NyAwIC0xNDguNSA1My41dC05OS41IDEzMS41cS0yNCA2NyAtMiAxMjdxMCA0IDMgMjd0NCAzN3ExIDggLTMgMjEuNXQtMyAxOS41cTIgMTEgOCAyMXQxNi41IDIzLjV0MTYuNSAyMy41cTIzIDM4IDQ1IDkxLjV0MzAgOTEuNXEzIDEwIDAuNSAzMHQtMC41IDI4cTMgMTEgMTcgMjh0MTcgMjMKcTIxIDM2IDQyIDkydDI1IDkwcTEgOSAtMi41IDMydDAuNSAyOHE0IDEzIDIyIDMwLjV0MjIgMjIuNXExOSAyNiA0Mi41IDg0LjV0MjcuNSA5Ni41cTEgOCAtMyAyNS41dC0yIDI2LjVxMiA4IDkgMTh0MTggMjN0MTcgMjFxOCAxMiAxNi41IDMwLjV0MTUgMzV0MTYgMzZ0MTkuNSAzMnQyNi41IDIzLjV0MzYgMTEuNXQ0Ny41IC01LjVsLTEgLTNxMzggOSA1MSA5aDc2MXE3NCAwIDExNCAtNTZ0MTggLTEzMGwtMjc0IC05MDYKcS0zNiAtMTE5IC03MS41IC0xNTMuNXQtMTI4LjUgLTM0LjVoLTg2OXEtMjcgMCAtMzggLTE1cS0xMSAtMTYgLTEgLTQzcTI0IC03MCAxNDQgLTcwaDkyM3EyOSAwIDU2IDE1LjV0MzUgNDEuNWwzMDAgOTg3cTcgMjIgNSA1N3EzOCAtMTUgNTkgLTQzek01NzUgMTA1NnEtNCAtMTMgMiAtMjIuNXQyMCAtOS41aDYwOHExMyAwIDI1LjUgOS41dDE2LjUgMjIuNWwyMSA2NHE0IDEzIC0yIDIyLjV0LTIwIDkuNWgtNjA4cS0xMyAwIC0yNS41IC05LjUKdC0xNi41IC0yMi41ek00OTIgODAwcS00IC0xMyAyIC0yMi41dDIwIC05LjVoNjA4cTEzIDAgMjUuNSA5LjV0MTYuNSAyMi41bDIxIDY0cTQgMTMgLTIgMjIuNXQtMjAgOS41aC02MDhxLTEzIDAgLTI1LjUgLTkuNXQtMTYuNSAtMjIuNXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iYm9va21hcmsiIHVuaWNvZGU9IiYjeGYwMmU7IiBob3Jpei1hZHYteD0iMTI4MCIgCmQ9Ik0xMTY0IDE0MDhxMjMgMCA0NCAtOXEzMyAtMTMgNTIuNSAtNDF0MTkuNSAtNjJ2LTEyODlxMCAtMzQgLTE5LjUgLTYydC01Mi41IC00MXEtMTkgLTggLTQ0IC04cS00OCAwIC04MyAzMmwtNDQxIDQyNGwtNDQxIC00MjRxLTM2IC0zMyAtODMgLTMzcS0yMyAwIC00NCA5cS0zMyAxMyAtNTIuNSA0MXQtMTkuNSA2MnYxMjg5cTAgMzQgMTkuNSA2MnQ1Mi41IDQxcTIxIDkgNDQgOWgxMDQ4eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJwcmludCIgdW5pY29kZT0iJiN4ZjAyZjsiIGhvcml6LWFkdi14PSIxNjY0IiAKZD0iTTM4NCAwaDg5NnYyNTZoLTg5NnYtMjU2ek0zODQgNjQwaDg5NnYzODRoLTE2MHEtNDAgMCAtNjggMjh0LTI4IDY4djE2MGgtNjQwdi02NDB6TTE1MzYgNTc2cTAgMjYgLTE5IDQ1dC00NSAxOXQtNDUgLTE5dC0xOSAtNDV0MTkgLTQ1dDQ1IC0xOXQ0NSAxOXQxOSA0NXpNMTY2NCA1NzZ2LTQxNnEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTIyNHYtMTYwcTAgLTQwIC0yOCAtNjh0LTY4IC0yOGgtOTYwcS00MCAwIC02OCAyOHQtMjggNjgKdjE2MGgtMjI0cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2NDE2cTAgNzkgNTYuNSAxMzUuNXQxMzUuNSA1Ni41aDY0djU0NHEwIDQwIDI4IDY4dDY4IDI4aDY3MnE0MCAwIDg4IC0yMHQ3NiAtNDhsMTUyIC0xNTJxMjggLTI4IDQ4IC03NnQyMCAtODh2LTI1Nmg2NHE3OSAwIDEzNS41IC01Ni41dDU2LjUgLTEzNS41eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJjYW1lcmEiIHVuaWNvZGU9IiYjeGYwMzA7IiBob3Jpei1hZHYteD0iMTkyMCIgCmQ9Ik05NjAgODY0cTExOSAwIDIwMy41IC04NC41dDg0LjUgLTIwMy41dC04NC41IC0yMDMuNXQtMjAzLjUgLTg0LjV0LTIwMy41IDg0LjV0LTg0LjUgMjAzLjV0ODQuNSAyMDMuNXQyMDMuNSA4NC41ek0xNjY0IDEyODBxMTA2IDAgMTgxIC03NXQ3NSAtMTgxdi04OTZxMCAtMTA2IC03NSAtMTgxdC0xODEgLTc1aC0xNDA4cS0xMDYgMCAtMTgxIDc1dC03NSAxODF2ODk2cTAgMTA2IDc1IDE4MXQxODEgNzVoMjI0bDUxIDEzNgpxMTkgNDkgNjkuNSA4NC41dDEwMy41IDM1LjVoNTEycTUzIDAgMTAzLjUgLTM1LjV0NjkuNSAtODQuNWw1MSAtMTM2aDIyNHpNOTYwIDEyOHExODUgMCAzMTYuNSAxMzEuNXQxMzEuNSAzMTYuNXQtMTMxLjUgMzE2LjV0LTMxNi41IDEzMS41dC0zMTYuNSAtMTMxLjV0LTEzMS41IC0zMTYuNXQxMzEuNSAtMzE2LjV0MzE2LjUgLTEzMS41eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJmb250IiB1bmljb2RlPSImI3hmMDMxOyIgaG9yaXotYWR2LXg9IjE2NjQiIApkPSJNNzI1IDk3N2wtMTcwIC00NTBxMzMgMCAxMzYuNSAtMnQxNjAuNSAtMnExOSAwIDU3IDJxLTg3IDI1MyAtMTg0IDQ1MnpNMCAtMTI4bDIgNzlxMjMgNyA1NiAxMi41dDU3IDEwLjV0NDkuNSAxNC41dDQ0LjUgMjl0MzEgNTAuNWwyMzcgNjE2bDI4MCA3MjRoNzVoNTNxOCAtMTQgMTEgLTIxbDIwNSAtNDgwcTMzIC03OCAxMDYgLTI1Ny41dDExNCAtMjc0LjVxMTUgLTM0IDU4IC0xNDQuNXQ3MiAtMTY4LjVxMjAgLTQ1IDM1IC01NwpxMTkgLTE1IDg4IC0yOS41dDg0IC0yMC41cTYgLTM4IDYgLTU3cTAgLTUgLTAuNSAtMTMuNXQtMC41IC0xMi41cS02MyAwIC0xOTAgOHQtMTkxIDhxLTc2IDAgLTIxNSAtN3QtMTc4IC04cTAgNDMgNCA3OGwxMzEgMjhxMSAwIDEyLjUgMi41dDE1LjUgMy41dDE0LjUgNC41dDE1IDYuNXQxMSA4dDkgMTF0Mi41IDE0cTAgMTYgLTMxIDk2LjV0LTcyIDE3Ny41dC00MiAxMDBsLTQ1MCAycS0yNiAtNTggLTc2LjUgLTE5NS41dC01MC41IC0xNjIuNQpxMCAtMjIgMTQgLTM3LjV0NDMuNSAtMjQuNXQ0OC41IC0xMy41dDU3IC04LjV0NDEgLTRxMSAtMTkgMSAtNThxMCAtOSAtMiAtMjdxLTU4IDAgLTE3NC41IDEwdC0xNzQuNSAxMHEtOCAwIC0yNi41IC00dC0yMS41IC00cS04MCAtMTQgLTE4OCAtMTR6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9ImJvbGQiIHVuaWNvZGU9IiYjeGYwMzI7IiBob3Jpei1hZHYteD0iMTQwOCIgCmQ9Ik01NTUgMTVxNzQgLTMyIDE0MCAtMzJxMzc2IDAgMzc2IDMzNXEwIDExNCAtNDEgMTgwcS0yNyA0NCAtNjEuNSA3NHQtNjcuNSA0Ni41dC04MC41IDI1dC04NCAxMC41dC05NC41IDJxLTczIDAgLTEwMSAtMTBxMCAtNTMgLTAuNSAtMTU5dC0wLjUgLTE1OHEwIC04IC0xIC02Ny41dC0wLjUgLTk2LjV0NC41IC04My41dDEyIC02Ni41ek01NDEgNzYxcTQyIC03IDEwOSAtN3E4MiAwIDE0MyAxM3QxMTAgNDQuNXQ3NC41IDg5LjV0MjUuNSAxNDIKcTAgNzAgLTI5IDEyMi41dC03OSA4MnQtMTA4IDQzLjV0LTEyNCAxNHEtNTAgMCAtMTMwIC0xM3EwIC01MCA0IC0xNTF0NCAtMTUycTAgLTI3IC0wLjUgLTgwdC0wLjUgLTc5cTAgLTQ2IDEgLTY5ek0wIC0xMjhsMiA5NHExNSA0IDg1IDE2dDEwNiAyN3E3IDEyIDEyLjUgMjd0OC41IDMzLjV0NS41IDMyLjV0MyAzNy41dDAuNSAzNHYzNS41djMwcTAgOTgyIC0yMiAxMDI1cS00IDggLTIyIDE0LjV0LTQ0LjUgMTF0LTQ5LjUgN3QtNDguNSA0LjUKdC0zMC41IDNsLTQgODNxOTggMiAzNDAgMTEuNXQzNzMgOS41cTIzIDAgNjggLTAuNXQ2OCAtMC41cTcwIDAgMTM2LjUgLTEzdDEyOC41IC00MnQxMDggLTcxdDc0IC0xMDQuNXQyOCAtMTM3LjVxMCAtNTIgLTE2LjUgLTk1LjV0LTM5IC03MnQtNjQuNSAtNTcuNXQtNzMgLTQ1dC04NCAtNDBxMTU0IC0zNSAyNTYuNSAtMTM0dDEwMi41IC0yNDhxMCAtMTAwIC0zNSAtMTc5LjV0LTkzLjUgLTEzMC41dC0xMzggLTg1LjV0LTE2My41IC00OC41CnQtMTc2IC0xNHEtNDQgMCAtMTMyIDN0LTEzMiAzcS0xMDYgMCAtMzA3IC0xMXQtMjMxIC0xMnoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iaXRhbGljIiB1bmljb2RlPSImI3hmMDMzOyIgaG9yaXotYWR2LXg9IjEwMjQiIApkPSJNMCAtMTI2bDE3IDg1cTIyIDcgNjEuNSAxNi41dDcyIDE5dDU5LjUgMjMuNXEyOCAzNSA0MSAxMDFxMSA3IDYyIDI4OXQxMTQgNTQzLjV0NTIgMjk2LjV2MjVxLTI0IDEzIC01NC41IDE4LjV0LTY5LjUgOHQtNTggNS41bDE5IDEwM3EzMyAtMiAxMjAgLTYuNXQxNDkuNSAtN3QxMjAuNSAtMi41cTQ4IDAgOTguNSAyLjV0MTIxIDd0OTguNSA2LjVxLTUgLTM5IC0xOSAtODlxLTMwIC0xMCAtMTAxLjUgLTI4LjV0LTEwOC41IC0zMy41CnEtOCAtMTkgLTE0IC00Mi41dC05IC00MHQtNy41IC00NS41dC02LjUgLTQycS0yNyAtMTQ4IC04Ny41IC00MTkuNXQtNzcuNSAtMzU1LjVxLTIgLTkgLTEzIC01OHQtMjAgLTkwdC0xNiAtODMuNXQtNiAtNTcuNWwxIC0xOHExNyAtNCAxODUgLTMxcS0zIC00NCAtMTYgLTk5cS0xMSAwIC0zMi41IC0xLjV0LTMyLjUgLTEuNXEtMjkgMCAtODcgMTB0LTg2IDEwcS0xMzggMiAtMjA2IDJxLTUxIDAgLTE0MyAtOXQtMTIxIC0xMXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idGV4dF9oZWlnaHQiIHVuaWNvZGU9IiYjeGYwMzQ7IiBob3Jpei1hZHYteD0iMTc5MiIgCmQ9Ik0xNzQ0IDEyOHEzMyAwIDQyIC0xOC41dC0xMSAtNDQuNWwtMTI2IC0xNjJxLTIwIC0yNiAtNDkgLTI2dC00OSAyNmwtMTI2IDE2MnEtMjAgMjYgLTExIDQ0LjV0NDIgMTguNWg4MHYxMDI0aC04MHEtMzMgMCAtNDIgMTguNXQxMSA0NC41bDEyNiAxNjJxMjAgMjYgNDkgMjZ0NDkgLTI2bDEyNiAtMTYycTIwIC0yNiAxMSAtNDQuNXQtNDIgLTE4LjVoLTgwdi0xMDI0aDgwek04MSAxNDA3bDU0IC0yN3ExMiAtNSAyMTEgLTVxNDQgMCAxMzIgMgp0MTMyIDJxMzYgMCAxMDcuNSAtMC41dDEwNy41IC0wLjVoMjkzcTYgMCAyMSAtMC41dDIwLjUgMHQxNiAzdDE3LjUgOXQxNSAxNy41bDQyIDFxNCAwIDE0IC0wLjV0MTQgLTAuNXEyIC0xMTIgMiAtMzM2cTAgLTgwIC01IC0xMDlxLTM5IC0xNCAtNjggLTE4cS0yNSA0NCAtNTQgMTI4cS0zIDkgLTExIDQ4dC0xNC41IDczLjV0LTcuNSAzNS41cS02IDggLTEyIDEyLjV0LTE1LjUgNnQtMTMgMi41dC0xOCAwLjV0LTE2LjUgLTAuNQpxLTE3IDAgLTY2LjUgMC41dC03NC41IDAuNXQtNjQgLTJ0LTcxIC02cS05IC04MSAtOCAtMTM2cTAgLTk0IDIgLTM4OHQyIC00NTVxMCAtMTYgLTIuNSAtNzEuNXQwIC05MS41dDEyLjUgLTY5cTQwIC0yMSAxMjQgLTQyLjV0MTIwIC0zNy41cTUgLTQwIDUgLTUwcTAgLTE0IC0zIC0yOWwtMzQgLTFxLTc2IC0yIC0yMTggOHQtMjA3IDEwcS01MCAwIC0xNTEgLTl0LTE1MiAtOXEtMyA1MSAtMyA1MnY5cTE3IDI3IDYxLjUgNDN0OTguNSAyOXQ3OCAyNwpxMTkgNDIgMTkgMzgzcTAgMTAxIC0zIDMwM3QtMyAzMDN2MTE3cTAgMiAwLjUgMTUuNXQwLjUgMjV0LTEgMjUuNXQtMyAyNHQtNSAxNHEtMTEgMTIgLTE2MiAxMnEtMzMgMCAtOTMgLTEydC04MCAtMjZxLTE5IC0xMyAtMzQgLTcyLjV0LTMxLjUgLTExMXQtNDIuNSAtNTMuNXEtNDIgMjYgLTU2IDQ0djM4M3oiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idGV4dF93aWR0aCIgdW5pY29kZT0iJiN4ZjAzNTsiIApkPSJNODEgMTQwN2w1NCAtMjdxMTIgLTUgMjExIC01cTQ0IDAgMTMyIDJ0MTMyIDJxNzAgMCAyNDYuNSAxdDMwNC41IDAuNXQyNDcgLTQuNXEzMyAtMSA1NiAzMWw0MiAxcTQgMCAxNCAtMC41dDE0IC0wLjVxMiAtMTEyIDIgLTMzNnEwIC04MCAtNSAtMTA5cS0zOSAtMTQgLTY4IC0xOHEtMjUgNDQgLTU0IDEyOHEtMyA5IC0xMSA0Ny41dC0xNSA3My41dC03IDM2cS0xMCAxMyAtMjcgMTlxLTUgMiAtNjYgMnEtMzAgMCAtOTMgMXQtMTAzIDEKdC05NCAtMnQtOTYgLTdxLTkgLTgxIC04IC0xMzZsMSAtMTUydjUycTAgLTU1IDEgLTE1NHQxLjUgLTE4MHQwLjUgLTE1M3EwIC0xNiAtMi41IC03MS41dDAgLTkxLjV0MTIuNSAtNjlxNDAgLTIxIDEyNCAtNDIuNXQxMjAgLTM3LjVxNSAtNDAgNSAtNTBxMCAtMTQgLTMgLTI5bC0zNCAtMXEtNzYgLTIgLTIxOCA4dC0yMDcgMTBxLTUwIDAgLTE1MSAtOXQtMTUyIC05cS0zIDUxIC0zIDUydjlxMTcgMjcgNjEuNSA0M3Q5OC41IDI5dDc4IDI3CnE3IDE2IDExLjUgNzR0NiAxNDUuNXQxLjUgMTU1dC0wLjUgMTUzLjV0LTAuNSA4OXEwIDcgLTIuNSAyMS41dC0yLjUgMjIuNXEwIDcgMC41IDQ0dDEgNzN0MCA3Ni41dC0zIDY3LjV0LTYuNSAzMnEtMTEgMTIgLTE2MiAxMnEtNDEgMCAtMTYzIC0xMy41dC0xMzggLTI0LjVxLTE5IC0xMiAtMzQgLTcxLjV0LTMxLjUgLTExMS41dC00Mi41IC01NHEtNDIgMjYgLTU2IDQ0djM4M3pNMTMxMCAxMjVxMTIgMCA0MiAtMTkuNXQ1Ny41IC00MS41CnQ1OS41IC00OXQzNiAtMzBxMjYgLTIxIDI2IC00OXQtMjYgLTQ5cS00IC0zIC0zNiAtMzB0LTU5LjUgLTQ5dC01Ny41IC00MS41dC00MiAtMTkuNXEtMTMgMCAtMjAuNSAxMC41dC0xMCAyOC41dC0yLjUgMzMuNXQxLjUgMzN0MS41IDE5LjVoLTEwMjRxMCAtMiAxLjUgLTE5LjV0MS41IC0zM3QtMi41IC0zMy41dC0xMCAtMjguNXQtMjAuNSAtMTAuNXEtMTIgMCAtNDIgMTkuNXQtNTcuNSA0MS41dC01OS41IDQ5dC0zNiAzMHEtMjYgMjEgLTI2IDQ5CnQyNiA0OXE0IDMgMzYgMzB0NTkuNSA0OXQ1Ny41IDQxLjV0NDIgMTkuNXExMyAwIDIwLjUgLTEwLjV0MTAgLTI4LjV0Mi41IC0zMy41dC0xLjUgLTMzdC0xLjUgLTE5LjVoMTAyNHEwIDIgLTEuNSAxOS41dC0xLjUgMzN0Mi41IDMzLjV0MTAgMjguNXQyMC41IDEwLjV6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9ImFsaWduX2xlZnQiIHVuaWNvZGU9IiYjeGYwMzY7IiBob3Jpei1hZHYteD0iMTc5MiIgCmQ9Ik0xNzkyIDE5MnYtMTI4cTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtMTY2NHEtMjYgMCAtNDUgMTl0LTE5IDQ1djEyOHEwIDI2IDE5IDQ1dDQ1IDE5aDE2NjRxMjYgMCA0NSAtMTl0MTkgLTQ1ek0xNDA4IDU3NnYtMTI4cTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtMTI4MHEtMjYgMCAtNDUgMTl0LTE5IDQ1djEyOHEwIDI2IDE5IDQ1dDQ1IDE5aDEyODBxMjYgMCA0NSAtMTl0MTkgLTQ1ek0xNjY0IDk2MHYtMTI4cTAgLTI2IC0xOSAtNDUKdC00NSAtMTloLTE1MzZxLTI2IDAgLTQ1IDE5dC0xOSA0NXYxMjhxMCAyNiAxOSA0NXQ0NSAxOWgxNTM2cTI2IDAgNDUgLTE5dDE5IC00NXpNMTI4MCAxMzQ0di0xMjhxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC0xMTUycS0yNiAwIC00NSAxOXQtMTkgNDV2MTI4cTAgMjYgMTkgNDV0NDUgMTloMTE1MnEyNiAwIDQ1IC0xOXQxOSAtNDV6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9ImFsaWduX2NlbnRlciIgdW5pY29kZT0iJiN4ZjAzNzsiIGhvcml6LWFkdi14PSIxNzkyIiAKZD0iTTE3OTIgMTkydi0xMjhxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC0xNjY0cS0yNiAwIC00NSAxOXQtMTkgNDV2MTI4cTAgMjYgMTkgNDV0NDUgMTloMTY2NHEyNiAwIDQ1IC0xOXQxOSAtNDV6TTE0MDggNTc2di0xMjhxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC04OTZxLTI2IDAgLTQ1IDE5dC0xOSA0NXYxMjhxMCAyNiAxOSA0NXQ0NSAxOWg4OTZxMjYgMCA0NSAtMTl0MTkgLTQ1ek0xNjY0IDk2MHYtMTI4cTAgLTI2IC0xOSAtNDV0LTQ1IC0xOQpoLTE0MDhxLTI2IDAgLTQ1IDE5dC0xOSA0NXYxMjhxMCAyNiAxOSA0NXQ0NSAxOWgxNDA4cTI2IDAgNDUgLTE5dDE5IC00NXpNMTI4MCAxMzQ0di0xMjhxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC02NDBxLTI2IDAgLTQ1IDE5dC0xOSA0NXYxMjhxMCAyNiAxOSA0NXQ0NSAxOWg2NDBxMjYgMCA0NSAtMTl0MTkgLTQ1eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJhbGlnbl9yaWdodCIgdW5pY29kZT0iJiN4ZjAzODsiIGhvcml6LWFkdi14PSIxNzkyIiAKZD0iTTE3OTIgMTkydi0xMjhxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC0xNjY0cS0yNiAwIC00NSAxOXQtMTkgNDV2MTI4cTAgMjYgMTkgNDV0NDUgMTloMTY2NHEyNiAwIDQ1IC0xOXQxOSAtNDV6TTE3OTIgNTc2di0xMjhxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC0xMjgwcS0yNiAwIC00NSAxOXQtMTkgNDV2MTI4cTAgMjYgMTkgNDV0NDUgMTloMTI4MHEyNiAwIDQ1IC0xOXQxOSAtNDV6TTE3OTIgOTYwdi0xMjhxMCAtMjYgLTE5IC00NQp0LTQ1IC0xOWgtMTUzNnEtMjYgMCAtNDUgMTl0LTE5IDQ1djEyOHEwIDI2IDE5IDQ1dDQ1IDE5aDE1MzZxMjYgMCA0NSAtMTl0MTkgLTQ1ek0xNzkyIDEzNDR2LTEyOHEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTExNTJxLTI2IDAgLTQ1IDE5dC0xOSA0NXYxMjhxMCAyNiAxOSA0NXQ0NSAxOWgxMTUycTI2IDAgNDUgLTE5dDE5IC00NXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iYWxpZ25fanVzdGlmeSIgdW5pY29kZT0iJiN4ZjAzOTsiIGhvcml6LWFkdi14PSIxNzkyIiAKZD0iTTE3OTIgMTkydi0xMjhxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC0xNjY0cS0yNiAwIC00NSAxOXQtMTkgNDV2MTI4cTAgMjYgMTkgNDV0NDUgMTloMTY2NHEyNiAwIDQ1IC0xOXQxOSAtNDV6TTE3OTIgNTc2di0xMjhxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC0xNjY0cS0yNiAwIC00NSAxOXQtMTkgNDV2MTI4cTAgMjYgMTkgNDV0NDUgMTloMTY2NHEyNiAwIDQ1IC0xOXQxOSAtNDV6TTE3OTIgOTYwdi0xMjhxMCAtMjYgLTE5IC00NQp0LTQ1IC0xOWgtMTY2NHEtMjYgMCAtNDUgMTl0LTE5IDQ1djEyOHEwIDI2IDE5IDQ1dDQ1IDE5aDE2NjRxMjYgMCA0NSAtMTl0MTkgLTQ1ek0xNzkyIDEzNDR2LTEyOHEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTE2NjRxLTI2IDAgLTQ1IDE5dC0xOSA0NXYxMjhxMCAyNiAxOSA0NXQ0NSAxOWgxNjY0cTI2IDAgNDUgLTE5dDE5IC00NXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0ibGlzdCIgdW5pY29kZT0iJiN4ZjAzYTsiIGhvcml6LWFkdi14PSIxNzkyIiAKZD0iTTI1NiAyMjR2LTE5MnEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTE5MnEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djE5MnEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDE5MnExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6TTI1NiA2MDh2LTE5MnEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTE5MnEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djE5MnEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDE5MnExMyAwIDIyLjUgLTkuNQp0OS41IC0yMi41ek0yNTYgOTkydi0xOTJxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC0xOTJxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXYxOTJxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWgxOTJxMTMgMCAyMi41IC05LjV0OS41IC0yMi41ek0xNzkyIDIyNHYtMTkycTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtMTM0NHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djE5MnEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDEzNDQKcTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXpNMjU2IDEzNzZ2LTE5MnEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTE5MnEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djE5MnEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDE5MnExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6TTE3OTIgNjA4di0xOTJxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC0xMzQ0cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2MTkycTAgMTMgOS41IDIyLjUKdDIyLjUgOS41aDEzNDRxMTMgMCAyMi41IC05LjV0OS41IC0yMi41ek0xNzkyIDk5MnYtMTkycTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtMTM0NHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djE5MnEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDEzNDRxMTMgMCAyMi41IC05LjV0OS41IC0yMi41ek0xNzkyIDEzNzZ2LTE5MnEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTEzNDRxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXYxOTIKcTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoMTM0NHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9ImluZGVudF9sZWZ0IiB1bmljb2RlPSImI3hmMDNiOyIgaG9yaXotYWR2LXg9IjE3OTIiIApkPSJNMzg0IDk5MnYtNTc2cTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNXEtMTQgMCAtMjMgOWwtMjg4IDI4OHEtOSA5IC05IDIzdDkgMjNsMjg4IDI4OHE5IDkgMjMgOXExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6TTE3OTIgMjI0di0xOTJxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC0xNzI4cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2MTkycTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoMTcyOHExMyAwIDIyLjUgLTkuNQp0OS41IC0yMi41ek0xNzkyIDYwOHYtMTkycTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtMTA4OHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djE5MnEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDEwODhxMTMgMCAyMi41IC05LjV0OS41IC0yMi41ek0xNzkyIDk5MnYtMTkycTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtMTA4OHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djE5MnEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDEwODgKcTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXpNMTc5MiAxMzc2di0xOTJxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC0xNzI4cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2MTkycTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoMTcyOHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9ImluZGVudF9yaWdodCIgdW5pY29kZT0iJiN4ZjAzYzsiIGhvcml6LWFkdi14PSIxNzkyIiAKZD0iTTM1MiA3MDRxMCAtMTQgLTkgLTIzbC0yODggLTI4OHEtOSAtOSAtMjMgLTlxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXY1NzZxMCAxMyA5LjUgMjIuNXQyMi41IDkuNXExNCAwIDIzIC05bDI4OCAtMjg4cTkgLTkgOSAtMjN6TTE3OTIgMjI0di0xOTJxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC0xNzI4cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2MTkycTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoMTcyOHExMyAwIDIyLjUgLTkuNQp0OS41IC0yMi41ek0xNzkyIDYwOHYtMTkycTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtMTA4OHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djE5MnEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDEwODhxMTMgMCAyMi41IC05LjV0OS41IC0yMi41ek0xNzkyIDk5MnYtMTkycTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtMTA4OHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djE5MnEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDEwODgKcTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXpNMTc5MiAxMzc2di0xOTJxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC0xNzI4cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2MTkycTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoMTcyOHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9ImZhY2V0aW1lX3ZpZGVvIiB1bmljb2RlPSImI3hmMDNkOyIgaG9yaXotYWR2LXg9IjE3OTIiIApkPSJNMTc5MiAxMTg0di0xMDg4cTAgLTQyIC0zOSAtNTlxLTEzIC01IC0yNSAtNXEtMjcgMCAtNDUgMTlsLTQwMyA0MDN2LTE2NnEwIC0xMTkgLTg0LjUgLTIwMy41dC0yMDMuNSAtODQuNWgtNzA0cS0xMTkgMCAtMjAzLjUgODQuNXQtODQuNSAyMDMuNXY3MDRxMCAxMTkgODQuNSAyMDMuNXQyMDMuNSA4NC41aDcwNHExMTkgMCAyMDMuNSAtODQuNXQ4NC41IC0yMDMuNXYtMTY1bDQwMyA0MDJxMTggMTkgNDUgMTlxMTIgMCAyNSAtNQpxMzkgLTE3IDM5IC01OXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0icGljdHVyZSIgdW5pY29kZT0iJiN4ZjAzZTsiIGhvcml6LWFkdi14PSIxOTIwIiAKZD0iTTY0MCA5NjBxMCAtODAgLTU2IC0xMzZ0LTEzNiAtNTZ0LTEzNiA1NnQtNTYgMTM2dDU2IDEzNnQxMzYgNTZ0MTM2IC01NnQ1NiAtMTM2ek0xNjY0IDU3NnYtNDQ4aC0xNDA4djE5MmwzMjAgMzIwbDE2MCAtMTYwbDUxMiA1MTJ6TTE3NjAgMTI4MGgtMTYwMHEtMTMgMCAtMjIuNSAtOS41dC05LjUgLTIyLjV2LTEyMTZxMCAtMTMgOS41IC0yMi41dDIyLjUgLTkuNWgxNjAwcTEzIDAgMjIuNSA5LjV0OS41IDIyLjV2MTIxNgpxMCAxMyAtOS41IDIyLjV0LTIyLjUgOS41ek0xOTIwIDEyNDh2LTEyMTZxMCAtNjYgLTQ3IC0xMTN0LTExMyAtNDdoLTE2MDBxLTY2IDAgLTExMyA0N3QtNDcgMTEzdjEyMTZxMCA2NiA0NyAxMTN0MTEzIDQ3aDE2MDBxNjYgMCAxMTMgLTQ3dDQ3IC0xMTN6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InBlbmNpbCIgdW5pY29kZT0iJiN4ZjA0MDsiIApkPSJNMzYzIDBsOTEgOTFsLTIzNSAyMzVsLTkxIC05MXYtMTA3aDEyOHYtMTI4aDEwN3pNODg2IDkyOHEwIDIyIC0yMiAyMnEtMTAgMCAtMTcgLTdsLTU0MiAtNTQycS03IC03IC03IC0xN3EwIC0yMiAyMiAtMjJxMTAgMCAxNyA3bDU0MiA1NDJxNyA3IDcgMTd6TTgzMiAxMTIwbDQxNiAtNDE2bC04MzIgLTgzMmgtNDE2djQxNnpNMTUxNSAxMDI0cTAgLTUzIC0zNyAtOTBsLTE2NiAtMTY2bC00MTYgNDE2bDE2NiAxNjVxMzYgMzggOTAgMzgKcTUzIDAgOTEgLTM4bDIzNSAtMjM0cTM3IC0zOSAzNyAtOTF6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9Im1hcF9tYXJrZXIiIHVuaWNvZGU9IiYjeGYwNDE7IiBob3Jpei1hZHYteD0iMTAyNCIgCmQ9Ik03NjggODk2cTAgMTA2IC03NSAxODF0LTE4MSA3NXQtMTgxIC03NXQtNzUgLTE4MXQ3NSAtMTgxdDE4MSAtNzV0MTgxIDc1dDc1IDE4MXpNMTAyNCA4OTZxMCAtMTA5IC0zMyAtMTc5bC0zNjQgLTc3NHEtMTYgLTMzIC00Ny41IC01MnQtNjcuNSAtMTl0LTY3LjUgMTl0LTQ2LjUgNTJsLTM2NSA3NzRxLTMzIDcwIC0zMyAxNzlxMCAyMTIgMTUwIDM2MnQzNjIgMTUwdDM2MiAtMTUwdDE1MCAtMzYyeiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJhZGp1c3QiIHVuaWNvZGU9IiYjeGYwNDI7IiAKZD0iTTc2OCA5NnYxMDg4cS0xNDggMCAtMjczIC03M3QtMTk4IC0xOTh0LTczIC0yNzN0NzMgLTI3M3QxOTggLTE5OHQyNzMgLTczek0xNTM2IDY0MHEwIC0yMDkgLTEwMyAtMzg1LjV0LTI3OS41IC0yNzkuNXQtMzg1LjUgLTEwM3QtMzg1LjUgMTAzdC0yNzkuNSAyNzkuNXQtMTAzIDM4NS41dDEwMyAzODUuNXQyNzkuNSAyNzkuNXQzODUuNSAxMDN0Mzg1LjUgLTEwM3QyNzkuNSAtMjc5LjV0MTAzIC0zODUuNXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idGludCIgdW5pY29kZT0iJiN4ZjA0MzsiIGhvcml6LWFkdi14PSIxMDI0IiAKZD0iTTUxMiAzODRxMCAzNiAtMjAgNjlxLTEgMSAtMTUuNSAyMi41dC0yNS41IDM4dC0yNSA0NHQtMjEgNTAuNXEtNCAxNiAtMjEgMTZ0LTIxIC0xNnEtNyAtMjMgLTIxIC01MC41dC0yNSAtNDR0LTI1LjUgLTM4dC0xNS41IC0yMi41cS0yMCAtMzMgLTIwIC02OXEwIC01MyAzNy41IC05MC41dDkwLjUgLTM3LjV0OTAuNSAzNy41dDM3LjUgOTAuNXpNMTAyNCA1MTJxMCAtMjEyIC0xNTAgLTM2MnQtMzYyIC0xNTB0LTM2MiAxNTB0LTE1MCAzNjIKcTAgMTQ1IDgxIDI3NXE2IDkgNjIuNSA5MC41dDEwMSAxNTF0OTkuNSAxNzh0ODMgMjAxLjVxOSAzMCAzNCA0N3Q1MSAxN3Q1MS41IC0xN3QzMy41IC00N3EyOCAtOTMgODMgLTIwMS41dDk5LjUgLTE3OHQxMDEgLTE1MXQ2Mi41IC05MC41cTgxIC0xMjcgODEgLTI3NXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iZWRpdCIgdW5pY29kZT0iJiN4ZjA0NDsiIGhvcml6LWFkdi14PSIxNzkyIiAKZD0iTTg4OCAzNTJsMTE2IDExNmwtMTUyIDE1MmwtMTE2IC0xMTZ2LTU2aDk2di05Nmg1NnpNMTMyOCAxMDcycS0xNiAxNiAtMzMgLTFsLTM1MCAtMzUwcS0xNyAtMTcgLTEgLTMzdDMzIDFsMzUwIDM1MHExNyAxNyAxIDMzek0xNDA4IDQ3OHYtMTkwcTAgLTExOSAtODQuNSAtMjAzLjV0LTIwMy41IC04NC41aC04MzJxLTExOSAwIC0yMDMuNSA4NC41dC04NC41IDIwMy41djgzMnEwIDExOSA4NC41IDIwMy41dDIwMy41IDg0LjVoODMyCnE2MyAwIDExNyAtMjVxMTUgLTcgMTggLTIzcTMgLTE3IC05IC0yOWwtNDkgLTQ5cS0xNCAtMTQgLTMyIC04cS0yMyA2IC00NSA2aC04MzJxLTY2IDAgLTExMyAtNDd0LTQ3IC0xMTN2LTgzMnEwIC02NiA0NyAtMTEzdDExMyAtNDdoODMycTY2IDAgMTEzIDQ3dDQ3IDExM3YxMjZxMCAxMyA5IDIybDY0IDY0cTE1IDE1IDM1IDd0MjAgLTI5ek0xMzEyIDEyMTZsMjg4IC0yODhsLTY3MiAtNjcyaC0yODh2Mjg4ek0xNzU2IDEwODRsLTkyIC05MgpsLTI4OCAyODhsOTIgOTJxMjggMjggNjggMjh0NjggLTI4bDE1MiAtMTUycTI4IC0yOCAyOCAtNjh0LTI4IC02OHoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0ic2hhcmUiIHVuaWNvZGU9IiYjeGYwNDU7IiBob3Jpei1hZHYteD0iMTY2NCIgCmQ9Ik0xNDA4IDU0N3YtMjU5cTAgLTExOSAtODQuNSAtMjAzLjV0LTIwMy41IC04NC41aC04MzJxLTExOSAwIC0yMDMuNSA4NC41dC04NC41IDIwMy41djgzMnEwIDExOSA4NC41IDIwMy41dDIwMy41IDg0LjVoMjU1djBxMTMgMCAyMi41IC05LjV0OS41IC0yMi41cTAgLTI3IC0yNiAtMzJxLTc3IC0yNiAtMTMzIC02MHEtMTAgLTQgLTE2IC00aC0xMTJxLTY2IDAgLTExMyAtNDd0LTQ3IC0xMTN2LTgzMnEwIC02NiA0NyAtMTEzdDExMyAtNDdoODMyCnE2NiAwIDExMyA0N3Q0NyAxMTN2MjE0cTAgMTkgMTggMjlxMjggMTMgNTQgMzdxMTYgMTYgMzUgOHEyMSAtOSAyMSAtMjl6TTE2NDUgMTA0M2wtMzg0IC0zODRxLTE4IC0xOSAtNDUgLTE5cS0xMiAwIC0yNSA1cS0zOSAxNyAtMzkgNTl2MTkyaC0xNjBxLTMyMyAwIC00MzggLTEzMXEtMTE5IC0xMzcgLTc0IC00NzNxMyAtMjMgLTIwIC0zNHEtOCAtMiAtMTIgLTJxLTE2IDAgLTI2IDEzcS0xMCAxNCAtMjEgMzF0LTM5LjUgNjguNXQtNDkuNSA5OS41CnQtMzguNSAxMTR0LTE3LjUgMTIycTAgNDkgMy41IDkxdDE0IDkwdDI4IDg4dDQ3IDgxLjV0NjguNSA3NHQ5NC41IDYxLjV0MTI0LjUgNDguNXQxNTkuNSAzMC41dDE5Ni41IDExaDE2MHYxOTJxMCA0MiAzOSA1OXExMyA1IDI1IDVxMjYgMCA0NSAtMTlsMzg0IC0zODRxMTkgLTE5IDE5IC00NXQtMTkgLTQ1eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJjaGVjayIgdW5pY29kZT0iJiN4ZjA0NjsiIGhvcml6LWFkdi14PSIxNjY0IiAKZD0iTTE0MDggNjA2di0zMThxMCAtMTE5IC04NC41IC0yMDMuNXQtMjAzLjUgLTg0LjVoLTgzMnEtMTE5IDAgLTIwMy41IDg0LjV0LTg0LjUgMjAzLjV2ODMycTAgMTE5IDg0LjUgMjAzLjV0MjAzLjUgODQuNWg4MzJxNjMgMCAxMTcgLTI1cTE1IC03IDE4IC0yM3EzIC0xNyAtOSAtMjlsLTQ5IC00OXEtMTAgLTEwIC0yMyAtMTBxLTMgMCAtOSAycS0yMyA2IC00NSA2aC04MzJxLTY2IDAgLTExMyAtNDd0LTQ3IC0xMTN2LTgzMgpxMCAtNjYgNDcgLTExM3QxMTMgLTQ3aDgzMnE2NiAwIDExMyA0N3Q0NyAxMTN2MjU0cTAgMTMgOSAyMmw2NCA2NHExMCAxMCAyMyAxMHE2IDAgMTIgLTNxMjAgLTggMjAgLTI5ek0xNjM5IDEwOTVsLTgxNCAtODE0cS0yNCAtMjQgLTU3IC0yNHQtNTcgMjRsLTQzMCA0MzBxLTI0IDI0IC0yNCA1N3QyNCA1N2wxMTAgMTEwcTI0IDI0IDU3IDI0dDU3IC0yNGwyNjMgLTI2M2w2NDcgNjQ3cTI0IDI0IDU3IDI0dDU3IC0yNGwxMTAgLTExMApxMjQgLTI0IDI0IC01N3QtMjQgLTU3eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJtb3ZlIiB1bmljb2RlPSImI3hmMDQ3OyIgaG9yaXotYWR2LXg9IjE3OTIiIApkPSJNMTc5MiA2NDBxMCAtMjYgLTE5IC00NWwtMjU2IC0yNTZxLTE5IC0xOSAtNDUgLTE5dC00NSAxOXQtMTkgNDV2MTI4aC0zODR2LTM4NGgxMjhxMjYgMCA0NSAtMTl0MTkgLTQ1dC0xOSAtNDVsLTI1NiAtMjU2cS0xOSAtMTkgLTQ1IC0xOXQtNDUgMTlsLTI1NiAyNTZxLTE5IDE5IC0xOSA0NXQxOSA0NXQ0NSAxOWgxMjh2Mzg0aC0zODR2LTEyOHEwIC0yNiAtMTkgLTQ1dC00NSAtMTl0LTQ1IDE5bC0yNTYgMjU2cS0xOSAxOSAtMTkgNDUKdDE5IDQ1bDI1NiAyNTZxMTkgMTkgNDUgMTl0NDUgLTE5dDE5IC00NXYtMTI4aDM4NHYzODRoLTEyOHEtMjYgMCAtNDUgMTl0LTE5IDQ1dDE5IDQ1bDI1NiAyNTZxMTkgMTkgNDUgMTl0NDUgLTE5bDI1NiAtMjU2cTE5IC0xOSAxOSAtNDV0LTE5IC00NXQtNDUgLTE5aC0xMjh2LTM4NGgzODR2MTI4cTAgMjYgMTkgNDV0NDUgMTl0NDUgLTE5bDI1NiAtMjU2cTE5IC0xOSAxOSAtNDV6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InN0ZXBfYmFja3dhcmQiIHVuaWNvZGU9IiYjeGYwNDg7IiBob3Jpei1hZHYteD0iMTAyNCIgCmQ9Ik05NzkgMTM5NXExOSAxOSAzMiAxM3QxMyAtMzJ2LTE0NzJxMCAtMjYgLTEzIC0zMnQtMzIgMTNsLTcxMCA3MTBxLTkgOSAtMTMgMTl2LTY3OHEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTEyOHEtMjYgMCAtNDUgMTl0LTE5IDQ1djE0MDhxMCAyNiAxOSA0NXQ0NSAxOWgxMjhxMjYgMCA0NSAtMTl0MTkgLTQ1di02NzhxNCAxMCAxMyAxOXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iZmFzdF9iYWNrd2FyZCIgdW5pY29kZT0iJiN4ZjA0OTsiIGhvcml6LWFkdi14PSIxNzkyIiAKZD0iTTE3NDcgMTM5NXExOSAxOSAzMiAxM3QxMyAtMzJ2LTE0NzJxMCAtMjYgLTEzIC0zMnQtMzIgMTNsLTcxMCA3MTBxLTkgOSAtMTMgMTl2LTcxMHEwIC0yNiAtMTMgLTMydC0zMiAxM2wtNzEwIDcxMHEtOSA5IC0xMyAxOXYtNjc4cTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtMTI4cS0yNiAwIC00NSAxOXQtMTkgNDV2MTQwOHEwIDI2IDE5IDQ1dDQ1IDE5aDEyOHEyNiAwIDQ1IC0xOXQxOSAtNDV2LTY3OHE0IDEwIDEzIDE5bDcxMCA3MTAKcTE5IDE5IDMyIDEzdDEzIC0zMnYtNzEwcTQgMTAgMTMgMTl6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9ImJhY2t3YXJkIiB1bmljb2RlPSImI3hmMDRhOyIgaG9yaXotYWR2LXg9IjE2NjQiIApkPSJNMTYxOSAxMzk1cTE5IDE5IDMyIDEzdDEzIC0zMnYtMTQ3MnEwIC0yNiAtMTMgLTMydC0zMiAxM2wtNzEwIDcxMHEtOSA5IC0xMyAxOXYtNzEwcTAgLTI2IC0xMyAtMzJ0LTMyIDEzbC03MTAgNzEwcS0xOSAxOSAtMTkgNDV0MTkgNDVsNzEwIDcxMHExOSAxOSAzMiAxM3QxMyAtMzJ2LTcxMHE0IDEwIDEzIDE5eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJwbGF5IiB1bmljb2RlPSImI3hmMDRiOyIgaG9yaXotYWR2LXg9IjE0MDgiIApkPSJNMTM4NCA2MDlsLTEzMjggLTczOHEtMjMgLTEzIC0zOS41IC0zdC0xNi41IDM2djE0NzJxMCAyNiAxNi41IDM2dDM5LjUgLTNsMTMyOCAtNzM4cTIzIC0xMyAyMyAtMzF0LTIzIC0zMXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0icGF1c2UiIHVuaWNvZGU9IiYjeGYwNGM7IiAKZD0iTTE1MzYgMTM0NHYtMTQwOHEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTUxMnEtMjYgMCAtNDUgMTl0LTE5IDQ1djE0MDhxMCAyNiAxOSA0NXQ0NSAxOWg1MTJxMjYgMCA0NSAtMTl0MTkgLTQ1ek02NDAgMTM0NHYtMTQwOHEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTUxMnEtMjYgMCAtNDUgMTl0LTE5IDQ1djE0MDhxMCAyNiAxOSA0NXQ0NSAxOWg1MTJxMjYgMCA0NSAtMTl0MTkgLTQ1eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJzdG9wIiB1bmljb2RlPSImI3hmMDRkOyIgCmQ9Ik0xNTM2IDEzNDR2LTE0MDhxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC0xNDA4cS0yNiAwIC00NSAxOXQtMTkgNDV2MTQwOHEwIDI2IDE5IDQ1dDQ1IDE5aDE0MDhxMjYgMCA0NSAtMTl0MTkgLTQ1eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJmb3J3YXJkIiB1bmljb2RlPSImI3hmMDRlOyIgaG9yaXotYWR2LXg9IjE2NjQiIApkPSJNNDUgLTExNXEtMTkgLTE5IC0zMiAtMTN0LTEzIDMydjE0NzJxMCAyNiAxMyAzMnQzMiAtMTNsNzEwIC03MTBxOSAtOSAxMyAtMTl2NzEwcTAgMjYgMTMgMzJ0MzIgLTEzbDcxMCAtNzEwcTE5IC0xOSAxOSAtNDV0LTE5IC00NWwtNzEwIC03MTBxLTE5IC0xOSAtMzIgLTEzdC0xMyAzMnY3MTBxLTQgLTEwIC0xMyAtMTl6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9ImZhc3RfZm9yd2FyZCIgdW5pY29kZT0iJiN4ZjA1MDsiIGhvcml6LWFkdi14PSIxNzkyIiAKZD0iTTQ1IC0xMTVxLTE5IC0xOSAtMzIgLTEzdC0xMyAzMnYxNDcycTAgMjYgMTMgMzJ0MzIgLTEzbDcxMCAtNzEwcTkgLTkgMTMgLTE5djcxMHEwIDI2IDEzIDMydDMyIC0xM2w3MTAgLTcxMHE5IC05IDEzIC0xOXY2NzhxMCAyNiAxOSA0NXQ0NSAxOWgxMjhxMjYgMCA0NSAtMTl0MTkgLTQ1di0xNDA4cTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtMTI4cS0yNiAwIC00NSAxOXQtMTkgNDV2Njc4cS00IC0xMCAtMTMgLTE5bC03MTAgLTcxMApxLTE5IC0xOSAtMzIgLTEzdC0xMyAzMnY3MTBxLTQgLTEwIC0xMyAtMTl6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InN0ZXBfZm9yd2FyZCIgdW5pY29kZT0iJiN4ZjA1MTsiIGhvcml6LWFkdi14PSIxMDI0IiAKZD0iTTQ1IC0xMTVxLTE5IC0xOSAtMzIgLTEzdC0xMyAzMnYxNDcycTAgMjYgMTMgMzJ0MzIgLTEzbDcxMCAtNzEwcTkgLTkgMTMgLTE5djY3OHEwIDI2IDE5IDQ1dDQ1IDE5aDEyOHEyNiAwIDQ1IC0xOXQxOSAtNDV2LTE0MDhxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC0xMjhxLTI2IDAgLTQ1IDE5dC0xOSA0NXY2NzhxLTQgLTEwIC0xMyAtMTl6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9ImVqZWN0IiB1bmljb2RlPSImI3hmMDUyOyIgaG9yaXotYWR2LXg9IjE1MzgiIApkPSJNMTQgNTU3bDcxMCA3MTBxMTkgMTkgNDUgMTl0NDUgLTE5bDcxMCAtNzEwcTE5IC0xOSAxMyAtMzJ0LTMyIC0xM2gtMTQ3MnEtMjYgMCAtMzIgMTN0MTMgMzJ6TTE0NzMgMGgtMTQwOHEtMjYgMCAtNDUgMTl0LTE5IDQ1djI1NnEwIDI2IDE5IDQ1dDQ1IDE5aDE0MDhxMjYgMCA0NSAtMTl0MTkgLTQ1di0yNTZxMCAtMjYgLTE5IC00NXQtNDUgLTE5eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJjaGV2cm9uX2xlZnQiIHVuaWNvZGU9IiYjeGYwNTM7IiBob3Jpei1hZHYteD0iMTI4MCIgCmQ9Ik0xMTcxIDEyMzVsLTUzMSAtNTMxbDUzMSAtNTMxcTE5IC0xOSAxOSAtNDV0LTE5IC00NWwtMTY2IC0xNjZxLTE5IC0xOSAtNDUgLTE5dC00NSAxOWwtNzQyIDc0MnEtMTkgMTkgLTE5IDQ1dDE5IDQ1bDc0MiA3NDJxMTkgMTkgNDUgMTl0NDUgLTE5bDE2NiAtMTY2cTE5IC0xOSAxOSAtNDV0LTE5IC00NXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iY2hldnJvbl9yaWdodCIgdW5pY29kZT0iJiN4ZjA1NDsiIGhvcml6LWFkdi14PSIxMjgwIiAKZD0iTTExMDcgNjU5bC03NDIgLTc0MnEtMTkgLTE5IC00NSAtMTl0LTQ1IDE5bC0xNjYgMTY2cS0xOSAxOSAtMTkgNDV0MTkgNDVsNTMxIDUzMWwtNTMxIDUzMXEtMTkgMTkgLTE5IDQ1dDE5IDQ1bDE2NiAxNjZxMTkgMTkgNDUgMTl0NDUgLTE5bDc0MiAtNzQycTE5IC0xOSAxOSAtNDV0LTE5IC00NXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0icGx1c19zaWduIiB1bmljb2RlPSImI3hmMDU1OyIgCmQ9Ik0xMjE2IDU3NnYxMjhxMCAyNiAtMTkgNDV0LTQ1IDE5aC0yNTZ2MjU2cTAgMjYgLTE5IDQ1dC00NSAxOWgtMTI4cS0yNiAwIC00NSAtMTl0LTE5IC00NXYtMjU2aC0yNTZxLTI2IDAgLTQ1IC0xOXQtMTkgLTQ1di0xMjhxMCAtMjYgMTkgLTQ1dDQ1IC0xOWgyNTZ2LTI1NnEwIC0yNiAxOSAtNDV0NDUgLTE5aDEyOHEyNiAwIDQ1IDE5dDE5IDQ1djI1NmgyNTZxMjYgMCA0NSAxOXQxOSA0NXpNMTUzNiA2NDBxMCAtMjA5IC0xMDMgLTM4NS41CnQtMjc5LjUgLTI3OS41dC0zODUuNSAtMTAzdC0zODUuNSAxMDN0LTI3OS41IDI3OS41dC0xMDMgMzg1LjV0MTAzIDM4NS41dDI3OS41IDI3OS41dDM4NS41IDEwM3QzODUuNSAtMTAzdDI3OS41IC0yNzkuNXQxMDMgLTM4NS41eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJtaW51c19zaWduIiB1bmljb2RlPSImI3hmMDU2OyIgCmQ9Ik0xMjE2IDU3NnYxMjhxMCAyNiAtMTkgNDV0LTQ1IDE5aC03NjhxLTI2IDAgLTQ1IC0xOXQtMTkgLTQ1di0xMjhxMCAtMjYgMTkgLTQ1dDQ1IC0xOWg3NjhxMjYgMCA0NSAxOXQxOSA0NXpNMTUzNiA2NDBxMCAtMjA5IC0xMDMgLTM4NS41dC0yNzkuNSAtMjc5LjV0LTM4NS41IC0xMDN0LTM4NS41IDEwM3QtMjc5LjUgMjc5LjV0LTEwMyAzODUuNXQxMDMgMzg1LjV0Mjc5LjUgMjc5LjV0Mzg1LjUgMTAzdDM4NS41IC0xMDN0Mjc5LjUgLTI3OS41CnQxMDMgLTM4NS41eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJyZW1vdmVfc2lnbiIgdW5pY29kZT0iJiN4ZjA1NzsiIApkPSJNMTE0OSA0MTRxMCAyNiAtMTkgNDVsLTE4MSAxODFsMTgxIDE4MXExOSAxOSAxOSA0NXEwIDI3IC0xOSA0NmwtOTAgOTBxLTE5IDE5IC00NiAxOXEtMjYgMCAtNDUgLTE5bC0xODEgLTE4MWwtMTgxIDE4MXEtMTkgMTkgLTQ1IDE5cS0yNyAwIC00NiAtMTlsLTkwIC05MHEtMTkgLTE5IC0xOSAtNDZxMCAtMjYgMTkgLTQ1bDE4MSAtMTgxbC0xODEgLTE4MXEtMTkgLTE5IC0xOSAtNDVxMCAtMjcgMTkgLTQ2bDkwIC05MHExOSAtMTkgNDYgLTE5CnEyNiAwIDQ1IDE5bDE4MSAxODFsMTgxIC0xODFxMTkgLTE5IDQ1IC0xOXEyNyAwIDQ2IDE5bDkwIDkwcTE5IDE5IDE5IDQ2ek0xNTM2IDY0MHEwIC0yMDkgLTEwMyAtMzg1LjV0LTI3OS41IC0yNzkuNXQtMzg1LjUgLTEwM3QtMzg1LjUgMTAzdC0yNzkuNSAyNzkuNXQtMTAzIDM4NS41dDEwMyAzODUuNXQyNzkuNSAyNzkuNXQzODUuNSAxMDN0Mzg1LjUgLTEwM3QyNzkuNSAtMjc5LjV0MTAzIC0zODUuNXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0ib2tfc2lnbiIgdW5pY29kZT0iJiN4ZjA1ODsiIApkPSJNMTI4NCA4MDJxMCAyOCAtMTggNDZsLTkxIDkwcS0xOSAxOSAtNDUgMTl0LTQ1IC0xOWwtNDA4IC00MDdsLTIyNiAyMjZxLTE5IDE5IC00NSAxOXQtNDUgLTE5bC05MSAtOTBxLTE4IC0xOCAtMTggLTQ2cTAgLTI3IDE4IC00NWwzNjIgLTM2MnExOSAtMTkgNDUgLTE5cTI3IDAgNDYgMTlsNTQzIDU0M3ExOCAxOCAxOCA0NXpNMTUzNiA2NDBxMCAtMjA5IC0xMDMgLTM4NS41dC0yNzkuNSAtMjc5LjV0LTM4NS41IC0xMDN0LTM4NS41IDEwMwp0LTI3OS41IDI3OS41dC0xMDMgMzg1LjV0MTAzIDM4NS41dDI3OS41IDI3OS41dDM4NS41IDEwM3QzODUuNSAtMTAzdDI3OS41IC0yNzkuNXQxMDMgLTM4NS41eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJxdWVzdGlvbl9zaWduIiB1bmljb2RlPSImI3hmMDU5OyIgCmQ9Ik04OTYgMTYwdjE5MnEwIDE0IC05IDIzdC0yMyA5aC0xOTJxLTE0IDAgLTIzIC05dC05IC0yM3YtMTkycTAgLTE0IDkgLTIzdDIzIC05aDE5MnExNCAwIDIzIDl0OSAyM3pNMTE1MiA4MzJxMCA4OCAtNTUuNSAxNjN0LTEzOC41IDExNnQtMTcwIDQxcS0yNDMgMCAtMzcxIC0yMTNxLTE1IC0yNCA4IC00MmwxMzIgLTEwMHE3IC02IDE5IC02cTE2IDAgMjUgMTJxNTMgNjggODYgOTJxMzQgMjQgODYgMjRxNDggMCA4NS41IC0yNnQzNy41IC01OQpxMCAtMzggLTIwIC02MXQtNjggLTQ1cS02MyAtMjggLTExNS41IC04Ni41dC01Mi41IC0xMjUuNXYtMzZxMCAtMTQgOSAtMjN0MjMgLTloMTkycTE0IDAgMjMgOXQ5IDIzcTAgMTkgMjEuNSA0OS41dDU0LjUgNDkuNXEzMiAxOCA0OSAyOC41dDQ2IDM1dDQ0LjUgNDh0MjggNjAuNXQxMi41IDgxek0xNTM2IDY0MHEwIC0yMDkgLTEwMyAtMzg1LjV0LTI3OS41IC0yNzkuNXQtMzg1LjUgLTEwM3QtMzg1LjUgMTAzdC0yNzkuNSAyNzkuNQp0LTEwMyAzODUuNXQxMDMgMzg1LjV0Mjc5LjUgMjc5LjV0Mzg1LjUgMTAzdDM4NS41IC0xMDN0Mjc5LjUgLTI3OS41dDEwMyAtMzg1LjV6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9ImluZm9fc2lnbiIgdW5pY29kZT0iJiN4ZjA1YTsiIApkPSJNMTAyNCAxNjB2MTYwcTAgMTQgLTkgMjN0LTIzIDloLTk2djUxMnEwIDE0IC05IDIzdC0yMyA5aC0zMjBxLTE0IDAgLTIzIC05dC05IC0yM3YtMTYwcTAgLTE0IDkgLTIzdDIzIC05aDk2di0zMjBoLTk2cS0xNCAwIC0yMyAtOXQtOSAtMjN2LTE2MHEwIC0xNCA5IC0yM3QyMyAtOWg0NDhxMTQgMCAyMyA5dDkgMjN6TTg5NiAxMDU2djE2MHEwIDE0IC05IDIzdC0yMyA5aC0xOTJxLTE0IDAgLTIzIC05dC05IC0yM3YtMTYwcTAgLTE0IDkgLTIzCnQyMyAtOWgxOTJxMTQgMCAyMyA5dDkgMjN6TTE1MzYgNjQwcTAgLTIwOSAtMTAzIC0zODUuNXQtMjc5LjUgLTI3OS41dC0zODUuNSAtMTAzdC0zODUuNSAxMDN0LTI3OS41IDI3OS41dC0xMDMgMzg1LjV0MTAzIDM4NS41dDI3OS41IDI3OS41dDM4NS41IDEwM3QzODUuNSAtMTAzdDI3OS41IC0yNzkuNXQxMDMgLTM4NS41eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJzY3JlZW5zaG90IiB1bmljb2RlPSImI3hmMDViOyIgCmQ9Ik0xMTk3IDUxMmgtMTA5cS0yNiAwIC00NSAxOXQtMTkgNDV2MTI4cTAgMjYgMTkgNDV0NDUgMTloMTA5cS0zMiAxMDggLTExMi41IDE4OC41dC0xODguNSAxMTIuNXYtMTA5cTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtMTI4cS0yNiAwIC00NSAxOXQtMTkgNDV2MTA5cS0xMDggLTMyIC0xODguNSAtMTEyLjV0LTExMi41IC0xODguNWgxMDlxMjYgMCA0NSAtMTl0MTkgLTQ1di0xMjhxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC0xMDkKcTMyIC0xMDggMTEyLjUgLTE4OC41dDE4OC41IC0xMTIuNXYxMDlxMCAyNiAxOSA0NXQ0NSAxOWgxMjhxMjYgMCA0NSAtMTl0MTkgLTQ1di0xMDlxMTA4IDMyIDE4OC41IDExMi41dDExMi41IDE4OC41ek0xNTM2IDcwNHYtMTI4cTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtMTQzcS0zNyAtMTYxIC0xNTQuNSAtMjc4LjV0LTI3OC41IC0xNTQuNXYtMTQzcTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtMTI4cS0yNiAwIC00NSAxOXQtMTkgNDV2MTQzCnEtMTYxIDM3IC0yNzguNSAxNTQuNXQtMTU0LjUgMjc4LjVoLTE0M3EtMjYgMCAtNDUgMTl0LTE5IDQ1djEyOHEwIDI2IDE5IDQ1dDQ1IDE5aDE0M3EzNyAxNjEgMTU0LjUgMjc4LjV0Mjc4LjUgMTU0LjV2MTQzcTAgMjYgMTkgNDV0NDUgMTloMTI4cTI2IDAgNDUgLTE5dDE5IC00NXYtMTQzcTE2MSAtMzcgMjc4LjUgLTE1NC41dDE1NC41IC0yNzguNWgxNDNxMjYgMCA0NSAtMTl0MTkgLTQ1eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJyZW1vdmVfY2lyY2xlIiB1bmljb2RlPSImI3hmMDVjOyIgCmQ9Ik0xMDk3IDQ1N2wtMTQ2IC0xNDZxLTEwIC0xMCAtMjMgLTEwdC0yMyAxMGwtMTM3IDEzN2wtMTM3IC0xMzdxLTEwIC0xMCAtMjMgLTEwdC0yMyAxMGwtMTQ2IDE0NnEtMTAgMTAgLTEwIDIzdDEwIDIzbDEzNyAxMzdsLTEzNyAxMzdxLTEwIDEwIC0xMCAyM3QxMCAyM2wxNDYgMTQ2cTEwIDEwIDIzIDEwdDIzIC0xMGwxMzcgLTEzN2wxMzcgMTM3cTEwIDEwIDIzIDEwdDIzIC0xMGwxNDYgLTE0NnExMCAtMTAgMTAgLTIzdC0xMCAtMjMKbC0xMzcgLTEzN2wxMzcgLTEzN3ExMCAtMTAgMTAgLTIzdC0xMCAtMjN6TTEzMTIgNjQwcTAgMTQ4IC03MyAyNzN0LTE5OCAxOTh0LTI3MyA3M3QtMjczIC03M3QtMTk4IC0xOTh0LTczIC0yNzN0NzMgLTI3M3QxOTggLTE5OHQyNzMgLTczdDI3MyA3M3QxOTggMTk4dDczIDI3M3pNMTUzNiA2NDBxMCAtMjA5IC0xMDMgLTM4NS41dC0yNzkuNSAtMjc5LjV0LTM4NS41IC0xMDN0LTM4NS41IDEwM3QtMjc5LjUgMjc5LjV0LTEwMyAzODUuNQp0MTAzIDM4NS41dDI3OS41IDI3OS41dDM4NS41IDEwM3QzODUuNSAtMTAzdDI3OS41IC0yNzkuNXQxMDMgLTM4NS41eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJva19jaXJjbGUiIHVuaWNvZGU9IiYjeGYwNWQ7IiAKZD0iTTExNzEgNzIzbC00MjIgLTQyMnEtMTkgLTE5IC00NSAtMTl0LTQ1IDE5bC0yOTQgMjk0cS0xOSAxOSAtMTkgNDV0MTkgNDVsMTAyIDEwMnExOSAxOSA0NSAxOXQ0NSAtMTlsMTQ3IC0xNDdsMjc1IDI3NXExOSAxOSA0NSAxOXQ0NSAtMTlsMTAyIC0xMDJxMTkgLTE5IDE5IC00NXQtMTkgLTQ1ek0xMzEyIDY0MHEwIDE0OCAtNzMgMjczdC0xOTggMTk4dC0yNzMgNzN0LTI3MyAtNzN0LTE5OCAtMTk4dC03MyAtMjczdDczIC0yNzN0MTk4IC0xOTgKdDI3MyAtNzN0MjczIDczdDE5OCAxOTh0NzMgMjczek0xNTM2IDY0MHEwIC0yMDkgLTEwMyAtMzg1LjV0LTI3OS41IC0yNzkuNXQtMzg1LjUgLTEwM3QtMzg1LjUgMTAzdC0yNzkuNSAyNzkuNXQtMTAzIDM4NS41dDEwMyAzODUuNXQyNzkuNSAyNzkuNXQzODUuNSAxMDN0Mzg1LjUgLTEwM3QyNzkuNSAtMjc5LjV0MTAzIC0zODUuNXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iYmFuX2NpcmNsZSIgdW5pY29kZT0iJiN4ZjA1ZTsiIApkPSJNMTMxMiA2NDNxMCAxNjEgLTg3IDI5NWwtNzU0IC03NTNxMTM3IC04OSAyOTcgLTg5cTExMSAwIDIxMS41IDQzLjV0MTczLjUgMTE2LjV0MTE2IDE3NC41dDQzIDIxMi41ek0zMTMgMzQ0bDc1NSA3NTRxLTEzNSA5MSAtMzAwIDkxcS0xNDggMCAtMjczIC03M3QtMTk4IC0xOTl0LTczIC0yNzRxMCAtMTYyIDg5IC0yOTl6TTE1MzYgNjQzcTAgLTE1NyAtNjEgLTMwMHQtMTYzLjUgLTI0NnQtMjQ1IC0xNjR0LTI5OC41IC02MXQtMjk4LjUgNjEKdC0yNDUgMTY0dC0xNjMuNSAyNDZ0LTYxIDMwMHQ2MSAyOTkuNXQxNjMuNSAyNDUuNXQyNDUgMTY0dDI5OC41IDYxdDI5OC41IC02MXQyNDUgLTE2NHQxNjMuNSAtMjQ1LjV0NjEgLTI5OS41eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJhcnJvd19sZWZ0IiB1bmljb2RlPSImI3hmMDYwOyIgCmQ9Ik0xNTM2IDY0MHYtMTI4cTAgLTUzIC0zMi41IC05MC41dC04NC41IC0zNy41aC03MDRsMjkzIC0yOTRxMzggLTM2IDM4IC05MHQtMzggLTkwbC03NSAtNzZxLTM3IC0zNyAtOTAgLTM3cS01MiAwIC05MSAzN2wtNjUxIDY1MnEtMzcgMzcgLTM3IDkwcTAgNTIgMzcgOTFsNjUxIDY1MHEzOCAzOCA5MSAzOHE1MiAwIDkwIC0zOGw3NSAtNzRxMzggLTM4IDM4IC05MXQtMzggLTkxbC0yOTMgLTI5M2g3MDRxNTIgMCA4NC41IC0zNy41CnQzMi41IC05MC41eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJhcnJvd19yaWdodCIgdW5pY29kZT0iJiN4ZjA2MTsiIApkPSJNMTQ3MiA1NzZxMCAtNTQgLTM3IC05MWwtNjUxIC02NTFxLTM5IC0zNyAtOTEgLTM3cS01MSAwIC05MCAzN2wtNzUgNzVxLTM4IDM4IC0zOCA5MXQzOCA5MWwyOTMgMjkzaC03MDRxLTUyIDAgLTg0LjUgMzcuNXQtMzIuNSA5MC41djEyOHEwIDUzIDMyLjUgOTAuNXQ4NC41IDM3LjVoNzA0bC0yOTMgMjk0cS0zOCAzNiAtMzggOTB0MzggOTBsNzUgNzVxMzggMzggOTAgMzhxNTMgMCA5MSAtMzhsNjUxIC02NTFxMzcgLTM1IDM3IC05MHoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iYXJyb3dfdXAiIHVuaWNvZGU9IiYjeGYwNjI7IiBob3Jpei1hZHYteD0iMTY2NCIgCmQ9Ik0xNjExIDU2NXEwIC01MSAtMzcgLTkwbC03NSAtNzVxLTM4IC0zOCAtOTEgLTM4cS01NCAwIC05MCAzOGwtMjk0IDI5M3YtNzA0cTAgLTUyIC0zNy41IC04NC41dC05MC41IC0zMi41aC0xMjhxLTUzIDAgLTkwLjUgMzIuNXQtMzcuNSA4NC41djcwNGwtMjk0IC0yOTNxLTM2IC0zOCAtOTAgLTM4dC05MCAzOGwtNzUgNzVxLTM4IDM4IC0zOCA5MHEwIDUzIDM4IDkxbDY1MSA2NTFxMzUgMzcgOTAgMzdxNTQgMCA5MSAtMzdsNjUxIC02NTEKcTM3IC0zOSAzNyAtOTF6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9ImFycm93X2Rvd24iIHVuaWNvZGU9IiYjeGYwNjM7IiBob3Jpei1hZHYteD0iMTY2NCIgCmQ9Ik0xNjExIDcwNHEwIC01MyAtMzcgLTkwbC02NTEgLTY1MnEtMzkgLTM3IC05MSAtMzdxLTUzIDAgLTkwIDM3bC02NTEgNjUycS0zOCAzNiAtMzggOTBxMCA1MyAzOCA5MWw3NCA3NXEzOSAzNyA5MSAzN3E1MyAwIDkwIC0zN2wyOTQgLTI5NHY3MDRxMCA1MiAzOCA5MHQ5MCAzOGgxMjhxNTIgMCA5MCAtMzh0MzggLTkwdi03MDRsMjk0IDI5NHEzNyAzNyA5MCAzN3E1MiAwIDkxIC0zN2w3NSAtNzVxMzcgLTM5IDM3IC05MXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0ic2hhcmVfYWx0IiB1bmljb2RlPSImI3hmMDY0OyIgaG9yaXotYWR2LXg9IjE3OTIiIApkPSJNMTc5MiA4OTZxMCAtMjYgLTE5IC00NWwtNTEyIC01MTJxLTE5IC0xOSAtNDUgLTE5dC00NSAxOXQtMTkgNDV2MjU2aC0yMjRxLTk4IDAgLTE3NS41IC02dC0xNTQgLTIxLjV0LTEzMyAtNDIuNXQtMTA1LjUgLTY5LjV0LTgwIC0xMDF0LTQ4LjUgLTEzOC41dC0xNy41IC0xODFxMCAtNTUgNSAtMTIzcTAgLTYgMi41IC0yMy41dDIuNSAtMjYuNXEwIC0xNSAtOC41IC0yNXQtMjMuNSAtMTBxLTE2IDAgLTI4IDE3cS03IDkgLTEzIDIyCnQtMTMuNSAzMHQtMTAuNSAyNHEtMTI3IDI4NSAtMTI3IDQ1MXEwIDE5OSA1MyAzMzNxMTYyIDQwMyA4NzUgNDAzaDIyNHYyNTZxMCAyNiAxOSA0NXQ0NSAxOXQ0NSAtMTlsNTEyIC01MTJxMTkgLTE5IDE5IC00NXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0icmVzaXplX2Z1bGwiIHVuaWNvZGU9IiYjeGYwNjU7IiAKZD0iTTc1NSA0ODBxMCAtMTMgLTEwIC0yM2wtMzMyIC0zMzJsMTQ0IC0xNDRxMTkgLTE5IDE5IC00NXQtMTkgLTQ1dC00NSAtMTloLTQ0OHEtMjYgMCAtNDUgMTl0LTE5IDQ1djQ0OHEwIDI2IDE5IDQ1dDQ1IDE5dDQ1IC0xOWwxNDQgLTE0NGwzMzIgMzMycTEwIDEwIDIzIDEwdDIzIC0xMGwxMTQgLTExNHExMCAtMTAgMTAgLTIzek0xNTM2IDEzNDR2LTQ0OHEwIC0yNiAtMTkgLTQ1dC00NSAtMTl0LTQ1IDE5bC0xNDQgMTQ0bC0zMzIgLTMzMgpxLTEwIC0xMCAtMjMgLTEwdC0yMyAxMGwtMTE0IDExNHEtMTAgMTAgLTEwIDIzdDEwIDIzbDMzMiAzMzJsLTE0NCAxNDRxLTE5IDE5IC0xOSA0NXQxOSA0NXQ0NSAxOWg0NDhxMjYgMCA0NSAtMTl0MTkgLTQ1eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJyZXNpemVfc21hbGwiIHVuaWNvZGU9IiYjeGYwNjY7IiAKZD0iTTc2OCA1NzZ2LTQ0OHEwIC0yNiAtMTkgLTQ1dC00NSAtMTl0LTQ1IDE5bC0xNDQgMTQ0bC0zMzIgLTMzMnEtMTAgLTEwIC0yMyAtMTB0LTIzIDEwbC0xMTQgMTE0cS0xMCAxMCAtMTAgMjN0MTAgMjNsMzMyIDMzMmwtMTQ0IDE0NHEtMTkgMTkgLTE5IDQ1dDE5IDQ1dDQ1IDE5aDQ0OHEyNiAwIDQ1IC0xOXQxOSAtNDV6TTE1MjMgMTI0OHEwIC0xMyAtMTAgLTIzbC0zMzIgLTMzMmwxNDQgLTE0NHExOSAtMTkgMTkgLTQ1dC0xOSAtNDUKdC00NSAtMTloLTQ0OHEtMjYgMCAtNDUgMTl0LTE5IDQ1djQ0OHEwIDI2IDE5IDQ1dDQ1IDE5dDQ1IC0xOWwxNDQgLTE0NGwzMzIgMzMycTEwIDEwIDIzIDEwdDIzIC0xMGwxMTQgLTExNHExMCAtMTAgMTAgLTIzeiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJwbHVzIiB1bmljb2RlPSImI3hmMDY3OyIgaG9yaXotYWR2LXg9IjE0MDgiIApkPSJNMTQwOCA4MDB2LTE5MnEwIC00MCAtMjggLTY4dC02OCAtMjhoLTQxNnYtNDE2cTAgLTQwIC0yOCAtNjh0LTY4IC0yOGgtMTkycS00MCAwIC02OCAyOHQtMjggNjh2NDE2aC00MTZxLTQwIDAgLTY4IDI4dC0yOCA2OHYxOTJxMCA0MCAyOCA2OHQ2OCAyOGg0MTZ2NDE2cTAgNDAgMjggNjh0NjggMjhoMTkycTQwIDAgNjggLTI4dDI4IC02OHYtNDE2aDQxNnE0MCAwIDY4IC0yOHQyOCAtNjh6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9Im1pbnVzIiB1bmljb2RlPSImI3hmMDY4OyIgaG9yaXotYWR2LXg9IjE0MDgiIApkPSJNMTQwOCA4MDB2LTE5MnEwIC00MCAtMjggLTY4dC02OCAtMjhoLTEyMTZxLTQwIDAgLTY4IDI4dC0yOCA2OHYxOTJxMCA0MCAyOCA2OHQ2OCAyOGgxMjE2cTQwIDAgNjggLTI4dDI4IC02OHoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iYXN0ZXJpc2siIHVuaWNvZGU9IiYjeGYwNjk7IiBob3Jpei1hZHYteD0iMTY2NCIgCmQ9Ik0xNDgyIDQ4NnE0NiAtMjYgNTkuNSAtNzcuNXQtMTIuNSAtOTcuNWwtNjQgLTExMHEtMjYgLTQ2IC03Ny41IC01OS41dC05Ny41IDEyLjVsLTI2NiAxNTN2LTMwN3EwIC01MiAtMzggLTkwdC05MCAtMzhoLTEyOHEtNTIgMCAtOTAgMzh0LTM4IDkwdjMwN2wtMjY2IC0xNTNxLTQ2IC0yNiAtOTcuNSAtMTIuNXQtNzcuNSA1OS41bC02NCAxMTBxLTI2IDQ2IC0xMi41IDk3LjV0NTkuNSA3Ny41bDI2NiAxNTRsLTI2NiAxNTQKcS00NiAyNiAtNTkuNSA3Ny41dDEyLjUgOTcuNWw2NCAxMTBxMjYgNDYgNzcuNSA1OS41dDk3LjUgLTEyLjVsMjY2IC0xNTN2MzA3cTAgNTIgMzggOTB0OTAgMzhoMTI4cTUyIDAgOTAgLTM4dDM4IC05MHYtMzA3bDI2NiAxNTNxNDYgMjYgOTcuNSAxMi41dDc3LjUgLTU5LjVsNjQgLTExMHEyNiAtNDYgMTIuNSAtOTcuNXQtNTkuNSAtNzcuNWwtMjY2IC0xNTR6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9ImV4Y2xhbWF0aW9uX3NpZ24iIHVuaWNvZGU9IiYjeGYwNmE7IiAKZD0iTTc2OCAxNDA4cTIwOSAwIDM4NS41IC0xMDN0Mjc5LjUgLTI3OS41dDEwMyAtMzg1LjV0LTEwMyAtMzg1LjV0LTI3OS41IC0yNzkuNXQtMzg1LjUgLTEwM3QtMzg1LjUgMTAzdC0yNzkuNSAyNzkuNXQtMTAzIDM4NS41dDEwMyAzODUuNXQyNzkuNSAyNzkuNXQzODUuNSAxMDN6TTg5NiAxNjF2MTkwcTAgMTQgLTkgMjMuNXQtMjIgOS41aC0xOTJxLTEzIDAgLTIzIC0xMHQtMTAgLTIzdi0xOTBxMCAtMTMgMTAgLTIzdDIzIC0xMGgxOTIKcTEzIDAgMjIgOS41dDkgMjMuNXpNODk0IDUwNWwxOCA2MjFxMCAxMiAtMTAgMThxLTEwIDggLTI0IDhoLTIyMHEtMTQgMCAtMjQgLThxLTEwIC02IC0xMCAtMThsMTcgLTYyMXEwIC0xMCAxMCAtMTcuNXQyNCAtNy41aDE4NXExNCAwIDIzLjUgNy41dDEwLjUgMTcuNXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iZ2lmdCIgdW5pY29kZT0iJiN4ZjA2YjsiIApkPSJNOTI4IDE4MHY1NnY0Njh2MTkyaC0zMjB2LTE5MnYtNDY4di01NnEwIC0yNSAxOCAtMzguNXQ0NiAtMTMuNWgxOTJxMjggMCA0NiAxMy41dDE4IDM4LjV6TTQ3MiAxMDI0aDE5NWwtMTI2IDE2MXEtMjYgMzEgLTY5IDMxcS00MCAwIC02OCAtMjh0LTI4IC02OHQyOCAtNjh0NjggLTI4ek0xMTYwIDExMjBxMCA0MCAtMjggNjh0LTY4IDI4cS00MyAwIC02OSAtMzFsLTEyNSAtMTYxaDE5NHE0MCAwIDY4IDI4dDI4IDY4ek0xNTM2IDg2NHYtMzIwCnEwIC0xNCAtOSAtMjN0LTIzIC05aC05NnYtNDE2cTAgLTQwIC0yOCAtNjh0LTY4IC0yOGgtMTA4OHEtNDAgMCAtNjggMjh0LTI4IDY4djQxNmgtOTZxLTE0IDAgLTIzIDl0LTkgMjN2MzIwcTAgMTQgOSAyM3QyMyA5aDQ0MHEtOTMgMCAtMTU4LjUgNjUuNXQtNjUuNSAxNTguNXQ2NS41IDE1OC41dDE1OC41IDY1LjVxMTA3IDAgMTY4IC03N2wxMjggLTE2NWwxMjggMTY1cTYxIDc3IDE2OCA3N3E5MyAwIDE1OC41IC02NS41dDY1LjUgLTE1OC41CnQtNjUuNSAtMTU4LjV0LTE1OC41IC02NS41aDQ0MHExNCAwIDIzIC05dDkgLTIzeiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJsZWFmIiB1bmljb2RlPSImI3hmMDZjOyIgaG9yaXotYWR2LXg9IjE3OTIiIApkPSJNMTI4MCA4MzJxMCAyNiAtMTkgNDV0LTQ1IDE5cS0xNzIgMCAtMzE4IC00OS41dC0yNTkuNSAtMTM0dC0yMzUuNSAtMjE5LjVxLTE5IC0yMSAtMTkgLTQ1cTAgLTI2IDE5IC00NXQ0NSAtMTlxMjQgMCA0NSAxOXEyNyAyNCA3NCA3MXQ2NyA2NnExMzcgMTI0IDI2OC41IDE3NnQzMTMuNSA1MnEyNiAwIDQ1IDE5dDE5IDQ1ek0xNzkyIDEwMzBxMCAtOTUgLTIwIC0xOTNxLTQ2IC0yMjQgLTE4NC41IC0zODN0LTM1Ny41IC0yNjgKcS0yMTQgLTEwOCAtNDM4IC0xMDhxLTE0OCAwIC0yODYgNDdxLTE1IDUgLTg4IDQydC05NiAzN3EtMTYgMCAtMzkuNSAtMzJ0LTQ1IC03MHQtNTIuNSAtNzB0LTYwIC0zMnEtNDMgMCAtNjMuNSAxNy41dC00NS41IDU5LjVxLTIgNCAtNiAxMXQtNS41IDEwdC0zIDkuNXQtMS41IDEzLjVxMCAzNSAzMSA3My41dDY4IDY1LjV0NjggNTZ0MzEgNDhxMCA0IC0xNCAzOHQtMTYgNDRxLTkgNTEgLTkgMTA0cTAgMTE1IDQzLjUgMjIwdDExOSAxODQuNQp0MTcwLjUgMTM5dDIwNCA5NS41cTU1IDE4IDE0NSAyNS41dDE3OS41IDl0MTc4LjUgNnQxNjMuNSAyNHQxMTMuNSA1Ni41bDI5LjUgMjkuNXQyOS41IDI4dDI3IDIwdDM2LjUgMTZ0NDMuNSA0LjVxMzkgMCA3MC41IC00NnQ0Ny41IC0xMTJ0MjQgLTEyNHQ4IC05NnoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iZmlyZSIgdW5pY29kZT0iJiN4ZjA2ZDsiIGhvcml6LWFkdi14PSIxNDA4IiAKZD0iTTE0MDggLTE2MHYtNjRxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC0xMzQ0cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2NjRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWgxMzQ0cTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXpNMTE1MiA4OTZxMCAtNzggLTI0LjUgLTE0NHQtNjQgLTExMi41dC04Ny41IC04OHQtOTYgLTc3LjV0LTg3LjUgLTcydC02NCAtODEuNXQtMjQuNSAtOTYuNXEwIC05NiA2NyAtMjI0bC00IDFsMSAtMQpxLTkwIDQxIC0xNjAgODN0LTEzOC41IDEwMHQtMTEzLjUgMTIyLjV0LTcyLjUgMTUwLjV0LTI3LjUgMTg0cTAgNzggMjQuNSAxNDR0NjQgMTEyLjV0ODcuNSA4OHQ5NiA3Ny41dDg3LjUgNzJ0NjQgODEuNXQyNC41IDk2LjVxMCA5NCAtNjYgMjI0bDMgLTFsLTEgMXE5MCAtNDEgMTYwIC04M3QxMzguNSAtMTAwdDExMy41IC0xMjIuNXQ3Mi41IC0xNTAuNXQyNy41IC0xODR6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9ImV5ZV9vcGVuIiB1bmljb2RlPSImI3hmMDZlOyIgaG9yaXotYWR2LXg9IjE3OTIiIApkPSJNMTY2NCA1NzZxLTE1MiAyMzYgLTM4MSAzNTNxNjEgLTEwNCA2MSAtMjI1cTAgLTE4NSAtMTMxLjUgLTMxNi41dC0zMTYuNSAtMTMxLjV0LTMxNi41IDEzMS41dC0xMzEuNSAzMTYuNXEwIDEyMSA2MSAyMjVxLTIyOSAtMTE3IC0zODEgLTM1M3ExMzMgLTIwNSAzMzMuNSAtMzI2LjV0NDM0LjUgLTEyMS41dDQzNC41IDEyMS41dDMzMy41IDMyNi41ek05NDQgOTYwcTAgMjAgLTE0IDM0dC0zNCAxNHEtMTI1IDAgLTIxNC41IC04OS41CnQtODkuNSAtMjE0LjVxMCAtMjAgMTQgLTM0dDM0IC0xNHQzNCAxNHQxNCAzNHEwIDg2IDYxIDE0N3QxNDcgNjFxMjAgMCAzNCAxNHQxNCAzNHpNMTc5MiA1NzZxMCAtMzQgLTIwIC02OXEtMTQwIC0yMzAgLTM3Ni41IC0zNjguNXQtNDk5LjUgLTEzOC41dC00OTkuNSAxMzl0LTM3Ni41IDM2OHEtMjAgMzUgLTIwIDY5dDIwIDY5cTE0MCAyMjkgMzc2LjUgMzY4dDQ5OS41IDEzOXQ0OTkuNSAtMTM5dDM3Ni41IC0zNjhxMjAgLTM1IDIwIC02OXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iZXllX2Nsb3NlIiB1bmljb2RlPSImI3hmMDcwOyIgaG9yaXotYWR2LXg9IjE3OTIiIApkPSJNNTU1IDIwMWw3OCAxNDFxLTg3IDYzIC0xMzYgMTU5dC00OSAyMDNxMCAxMjEgNjEgMjI1cS0yMjkgLTExNyAtMzgxIC0zNTNxMTY3IC0yNTggNDI3IC0zNzV6TTk0NCA5NjBxMCAyMCAtMTQgMzR0LTM0IDE0cS0xMjUgMCAtMjE0LjUgLTg5LjV0LTg5LjUgLTIxNC41cTAgLTIwIDE0IC0zNHQzNCAtMTR0MzQgMTR0MTQgMzRxMCA4NiA2MSAxNDd0MTQ3IDYxcTIwIDAgMzQgMTR0MTQgMzR6TTEzMDcgMTE1MXEwIC03IC0xIC05CnEtMTA2IC0xODkgLTMxNiAtNTY3dC0zMTUgLTU2NmwtNDkgLTg5cS0xMCAtMTYgLTI4IC0xNnEtMTIgMCAtMTM0IDcwcS0xNiAxMCAtMTYgMjhxMCAxMiA0NCA4N3EtMTQzIDY1IC0yNjMuNSAxNzN0LTIwOC41IDI0NXEtMjAgMzEgLTIwIDY5dDIwIDY5cTE1MyAyMzUgMzgwIDM3MXQ0OTYgMTM2cTg5IDAgMTgwIC0xN2w1NCA5N3ExMCAxNiAyOCAxNnE1IDAgMTggLTZ0MzEgLTE1LjV0MzMgLTE4LjV0MzEuNSAtMTguNXQxOS41IC0xMS41CnExNiAtMTAgMTYgLTI3ek0xMzQ0IDcwNHEwIC0xMzkgLTc5IC0yNTMuNXQtMjA5IC0xNjQuNWwyODAgNTAycTggLTQ1IDggLTg0ek0xNzkyIDU3NnEwIC0zNSAtMjAgLTY5cS0zOSAtNjQgLTEwOSAtMTQ1cS0xNTAgLTE3MiAtMzQ3LjUgLTI2N3QtNDE5LjUgLTk1bDc0IDEzMnEyMTIgMTggMzkyLjUgMTM3dDMwMS41IDMwN3EtMTE1IDE3OSAtMjgyIDI5NGw2MyAxMTJxOTUgLTY0IDE4Mi41IC0xNTN0MTQ0LjUgLTE4NHEyMCAtMzQgMjAgLTY5egoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0id2FybmluZ19zaWduIiB1bmljb2RlPSImI3hmMDcxOyIgaG9yaXotYWR2LXg9IjE3OTIiIApkPSJNMTAyNCAxNjF2MTkwcTAgMTQgLTkuNSAyMy41dC0yMi41IDkuNWgtMTkycS0xMyAwIC0yMi41IC05LjV0LTkuNSAtMjMuNXYtMTkwcTAgLTE0IDkuNSAtMjMuNXQyMi41IC05LjVoMTkycTEzIDAgMjIuNSA5LjV0OS41IDIzLjV6TTEwMjIgNTM1bDE4IDQ1OXEwIDEyIC0xMCAxOXEtMTMgMTEgLTI0IDExaC0yMjBxLTExIDAgLTI0IC0xMXEtMTAgLTcgLTEwIC0yMWwxNyAtNDU3cTAgLTEwIDEwIC0xNi41dDI0IC02LjVoMTg1CnExNCAwIDIzLjUgNi41dDEwLjUgMTYuNXpNMTAwOCAxNDY5bDc2OCAtMTQwOHEzNSAtNjMgLTIgLTEyNnEtMTcgLTI5IC00Ni41IC00NnQtNjMuNSAtMTdoLTE1MzZxLTM0IDAgLTYzLjUgMTd0LTQ2LjUgNDZxLTM3IDYzIC0yIDEyNmw3NjggMTQwOHExNyAzMSA0NyA0OXQ2NSAxOHQ2NSAtMTh0NDcgLTQ5eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJwbGFuZSIgdW5pY29kZT0iJiN4ZjA3MjsiIGhvcml6LWFkdi14PSIxNDA4IiAKZD0iTTEzNzYgMTM3NnE0NCAtNTIgMTIgLTE0OHQtMTA4IC0xNzJsLTE2MSAtMTYxbDE2MCAtNjk2cTUgLTE5IC0xMiAtMzNsLTEyOCAtOTZxLTcgLTYgLTE5IC02cS00IDAgLTcgMXEtMTUgMyAtMjEgMTZsLTI3OSA1MDhsLTI1OSAtMjU5bDUzIC0xOTRxNSAtMTcgLTggLTMxbC05NiAtOTZxLTkgLTkgLTIzIC05aC0ycS0xNSAyIC0yNCAxM2wtMTg5IDI1MmwtMjUyIDE4OXEtMTEgNyAtMTMgMjNxLTEgMTMgOSAyNWw5NiA5N3E5IDkgMjMgOQpxNiAwIDggLTFsMTk0IC01M2wyNTkgMjU5bC01MDggMjc5cS0xNCA4IC0xNyAyNHEtMiAxNiA5IDI3bDEyOCAxMjhxMTQgMTMgMzAgOGw2NjUgLTE1OWwxNjAgMTYwcTc2IDc2IDE3MiAxMDh0MTQ4IC0xMnoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iY2FsZW5kYXIiIHVuaWNvZGU9IiYjeGYwNzM7IiBob3Jpei1hZHYteD0iMTY2NCIgCmQ9Ik0xMjggLTEyOGgyODh2Mjg4aC0yODh2LTI4OHpNNDgwIC0xMjhoMzIwdjI4OGgtMzIwdi0yODh6TTEyOCAyMjRoMjg4djMyMGgtMjg4di0zMjB6TTQ4MCAyMjRoMzIwdjMyMGgtMzIwdi0zMjB6TTEyOCA2MDhoMjg4djI4OGgtMjg4di0yODh6TTg2NCAtMTI4aDMyMHYyODhoLTMyMHYtMjg4ek00ODAgNjA4aDMyMHYyODhoLTMyMHYtMjg4ek0xMjQ4IC0xMjhoMjg4djI4OGgtMjg4di0yODh6TTg2NCAyMjRoMzIwdjMyMGgtMzIwdi0zMjB6Ck01MTIgMTA4OHYyODhxMCAxMyAtOS41IDIyLjV0LTIyLjUgOS41aC02NHEtMTMgMCAtMjIuNSAtOS41dC05LjUgLTIyLjV2LTI4OHEwIC0xMyA5LjUgLTIyLjV0MjIuNSAtOS41aDY0cTEzIDAgMjIuNSA5LjV0OS41IDIyLjV6TTEyNDggMjI0aDI4OHYzMjBoLTI4OHYtMzIwek04NjQgNjA4aDMyMHYyODhoLTMyMHYtMjg4ek0xMjQ4IDYwOGgyODh2Mjg4aC0yODh2LTI4OHpNMTI4MCAxMDg4djI4OHEwIDEzIC05LjUgMjIuNXQtMjIuNSA5LjVoLTY0CnEtMTMgMCAtMjIuNSAtOS41dC05LjUgLTIyLjV2LTI4OHEwIC0xMyA5LjUgLTIyLjV0MjIuNSAtOS41aDY0cTEzIDAgMjIuNSA5LjV0OS41IDIyLjV6TTE2NjQgMTE1MnYtMTI4MHEwIC01MiAtMzggLTkwdC05MCAtMzhoLTE0MDhxLTUyIDAgLTkwIDM4dC0zOCA5MHYxMjgwcTAgNTIgMzggOTB0OTAgMzhoMTI4djk2cTAgNjYgNDcgMTEzdDExMyA0N2g2NHE2NiAwIDExMyAtNDd0NDcgLTExM3YtOTZoMzg0djk2cTAgNjYgNDcgMTEzdDExMyA0NwpoNjRxNjYgMCAxMTMgLTQ3dDQ3IC0xMTN2LTk2aDEyOHE1MiAwIDkwIC0zOHQzOCAtOTB6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InJhbmRvbSIgdW5pY29kZT0iJiN4ZjA3NDsiIGhvcml6LWFkdi14PSIxNzkyIiAKZD0iTTY2NiAxMDU1cS02MCAtOTIgLTEzNyAtMjczcS0yMiA0NSAtMzcgNzIuNXQtNDAuNSA2My41dC01MSA1Ni41dC02MyAzNXQtODEuNSAxNC41aC0yMjRxLTE0IDAgLTIzIDl0LTkgMjN2MTkycTAgMTQgOSAyM3QyMyA5aDIyNHEyNTAgMCA0MTAgLTIyNXpNMTc5MiAyNTZxMCAtMTQgLTkgLTIzbC0zMjAgLTMyMHEtOSAtOSAtMjMgLTlxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXYxOTJxLTMyIDAgLTg1IC0wLjV0LTgxIC0xdC03MyAxCnQtNzEgNXQtNjQgMTAuNXQtNjMgMTguNXQtNTggMjguNXQtNTkgNDB0LTU1IDUzLjV0LTU2IDY5LjVxNTkgOTMgMTM2IDI3M3EyMiAtNDUgMzcgLTcyLjV0NDAuNSAtNjMuNXQ1MSAtNTYuNXQ2MyAtMzV0ODEuNSAtMTQuNWgyNTZ2MTkycTAgMTQgOSAyM3QyMyA5cTEyIDAgMjQgLTEwbDMxOSAtMzE5cTkgLTkgOSAtMjN6TTE3OTIgMTE1MnEwIC0xNCAtOSAtMjNsLTMyMCAtMzIwcS05IC05IC0yMyAtOXEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41CnYxOTJoLTI1NnEtNDggMCAtODcgLTE1dC02OSAtNDV0LTUxIC02MS41dC00NSAtNzcuNXEtMzIgLTYyIC03OCAtMTcxcS0yOSAtNjYgLTQ5LjUgLTExMXQtNTQgLTEwNXQtNjQgLTEwMHQtNzQgLTgzdC05MCAtNjguNXQtMTA2LjUgLTQydC0xMjggLTE2LjVoLTIyNHEtMTQgMCAtMjMgOXQtOSAyM3YxOTJxMCAxNCA5IDIzdDIzIDloMjI0cTQ4IDAgODcgMTV0NjkgNDV0NTEgNjEuNXQ0NSA3Ny41cTMyIDYyIDc4IDE3MXEyOSA2NiA0OS41IDExMQp0NTQgMTA1dDY0IDEwMHQ3NCA4M3Q5MCA2OC41dDEwNi41IDQydDEyOCAxNi41aDI1NnYxOTJxMCAxNCA5IDIzdDIzIDlxMTIgMCAyNCAtMTBsMzE5IC0zMTlxOSAtOSA5IC0yM3oiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iY29tbWVudCIgdW5pY29kZT0iJiN4ZjA3NTsiIGhvcml6LWFkdi14PSIxNzkyIiAKZD0iTTE3OTIgNjQwcTAgLTE3NCAtMTIwIC0zMjEuNXQtMzI2IC0yMzN0LTQ1MCAtODUuNXEtNzAgMCAtMTQ1IDhxLTE5OCAtMTc1IC00NjAgLTI0MnEtNDkgLTE0IC0xMTQgLTIycS0xNyAtMiAtMzAuNSA5dC0xNy41IDI5djFxLTMgNCAtMC41IDEydDIgMTB0NC41IDkuNWw2IDl0NyA4LjV0OCA5cTcgOCAzMSAzNC41dDM0LjUgMzh0MzEgMzkuNXQzMi41IDUxdDI3IDU5dDI2IDc2cS0xNTcgODkgLTI0Ny41IDIyMHQtOTAuNSAyODEKcTAgMTMwIDcxIDI0OC41dDE5MSAyMDQuNXQyODYgMTM2LjV0MzQ4IDUwLjVxMjQ0IDAgNDUwIC04NS41dDMyNiAtMjMzdDEyMCAtMzIxLjV6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9Im1hZ25ldCIgdW5pY29kZT0iJiN4ZjA3NjsiIApkPSJNMTUzNiA3MDR2LTEyOHEwIC0yMDEgLTk4LjUgLTM2MnQtMjc0IC0yNTEuNXQtMzk1LjUgLTkwLjV0LTM5NS41IDkwLjV0LTI3NCAyNTEuNXQtOTguNSAzNjJ2MTI4cTAgMjYgMTkgNDV0NDUgMTloMzg0cTI2IDAgNDUgLTE5dDE5IC00NXYtMTI4cTAgLTUyIDIzLjUgLTkwdDUzLjUgLTU3dDcxIC0zMHQ2NCAtMTN0NDQgLTJ0NDQgMnQ2NCAxM3Q3MSAzMHQ1My41IDU3dDIzLjUgOTB2MTI4cTAgMjYgMTkgNDV0NDUgMTloMzg0CnEyNiAwIDQ1IC0xOXQxOSAtNDV6TTUxMiAxMzQ0di0zODRxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC0zODRxLTI2IDAgLTQ1IDE5dC0xOSA0NXYzODRxMCAyNiAxOSA0NXQ0NSAxOWgzODRxMjYgMCA0NSAtMTl0MTkgLTQ1ek0xNTM2IDEzNDR2LTM4NHEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTM4NHEtMjYgMCAtNDUgMTl0LTE5IDQ1djM4NHEwIDI2IDE5IDQ1dDQ1IDE5aDM4NHEyNiAwIDQ1IC0xOXQxOSAtNDV6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9ImNoZXZyb25fdXAiIHVuaWNvZGU9IiYjeGYwNzc7IiBob3Jpei1hZHYteD0iMTc5MiIgCmQ9Ik0xNjgzIDIwNWwtMTY2IC0xNjVxLTE5IC0xOSAtNDUgLTE5dC00NSAxOWwtNTMxIDUzMWwtNTMxIC01MzFxLTE5IC0xOSAtNDUgLTE5dC00NSAxOWwtMTY2IDE2NXEtMTkgMTkgLTE5IDQ1LjV0MTkgNDUuNWw3NDIgNzQxcTE5IDE5IDQ1IDE5dDQ1IC0xOWw3NDIgLTc0MXExOSAtMTkgMTkgLTQ1LjV0LTE5IC00NS41eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJjaGV2cm9uX2Rvd24iIHVuaWNvZGU9IiYjeGYwNzg7IiBob3Jpei1hZHYteD0iMTc5MiIgCmQ9Ik0xNjgzIDcyOGwtNzQyIC03NDFxLTE5IC0xOSAtNDUgLTE5dC00NSAxOWwtNzQyIDc0MXEtMTkgMTkgLTE5IDQ1LjV0MTkgNDUuNWwxNjYgMTY1cTE5IDE5IDQ1IDE5dDQ1IC0xOWw1MzEgLTUzMWw1MzEgNTMxcTE5IDE5IDQ1IDE5dDQ1IC0xOWwxNjYgLTE2NXExOSAtMTkgMTkgLTQ1LjV0LTE5IC00NS41eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJyZXR3ZWV0IiB1bmljb2RlPSImI3hmMDc5OyIgaG9yaXotYWR2LXg9IjE5MjAiIApkPSJNMTI4MCAzMnEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTk2MHEtOCAwIC0xMy41IDJ0LTkgN3QtNS41IDh0LTMgMTEuNXQtMSAxMS41djEzdjExdjE2MHY0MTZoLTE5MnEtMjYgMCAtNDUgMTl0LTE5IDQ1cTAgMjQgMTUgNDFsMzIwIDM4NHExOSAyMiA0OSAyMnQ0OSAtMjJsMzIwIC0zODRxMTUgLTE3IDE1IC00MXEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTE5MnYtMzg0aDU3NnExNiAwIDI1IC0xMWwxNjAgLTE5MnE3IC0xMCA3IC0yMQp6TTE5MjAgNDQ4cTAgLTI0IC0xNSAtNDFsLTMyMCAtMzg0cS0yMCAtMjMgLTQ5IC0yM3QtNDkgMjNsLTMyMCAzODRxLTE1IDE3IC0xNSA0MXEwIDI2IDE5IDQ1dDQ1IDE5aDE5MnYzODRoLTU3NnEtMTYgMCAtMjUgMTJsLTE2MCAxOTJxLTcgOSAtNyAyMHEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDk2MHE4IDAgMTMuNSAtMnQ5IC03dDUuNSAtOHQzIC0xMS41dDEgLTExLjV2LTEzdi0xMXYtMTYwdi00MTZoMTkycTI2IDAgNDUgLTE5dDE5IC00NXoKIiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InNob3BwaW5nX2NhcnQiIHVuaWNvZGU9IiYjeGYwN2E7IiBob3Jpei1hZHYteD0iMTY2NCIgCmQ9Ik02NDAgMHEwIC01MiAtMzggLTkwdC05MCAtMzh0LTkwIDM4dC0zOCA5MHQzOCA5MHQ5MCAzOHQ5MCAtMzh0MzggLTkwek0xNTM2IDBxMCAtNTIgLTM4IC05MHQtOTAgLTM4dC05MCAzOHQtMzggOTB0MzggOTB0OTAgMzh0OTAgLTM4dDM4IC05MHpNMTY2NCAxMDg4di01MTJxMCAtMjQgLTE2LjUgLTQyLjV0LTQwLjUgLTIxLjVsLTEwNDQgLTEyMnExMyAtNjAgMTMgLTcwcTAgLTE2IC0yNCAtNjRoOTIwcTI2IDAgNDUgLTE5dDE5IC00NQp0LTE5IC00NXQtNDUgLTE5aC0xMDI0cS0yNiAwIC00NSAxOXQtMTkgNDVxMCAxMSA4IDMxLjV0MTYgMzZ0MjEuNSA0MHQxNS41IDI5LjVsLTE3NyA4MjNoLTIwNHEtMjYgMCAtNDUgMTl0LTE5IDQ1dDE5IDQ1dDQ1IDE5aDI1NnExNiAwIDI4LjUgLTYuNXQxOS41IC0xNS41dDEzIC0yNC41dDggLTI2dDUuNSAtMjkuNXQ0LjUgLTI2aDEyMDFxMjYgMCA0NSAtMTl0MTkgLTQ1eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJmb2xkZXJfY2xvc2UiIHVuaWNvZGU9IiYjeGYwN2I7IiBob3Jpei1hZHYteD0iMTY2NCIgCmQ9Ik0xNjY0IDkyOHYtNzA0cTAgLTkyIC02NiAtMTU4dC0xNTggLTY2aC0xMjE2cS05MiAwIC0xNTggNjZ0LTY2IDE1OHY5NjBxMCA5MiA2NiAxNTh0MTU4IDY2aDMyMHE5MiAwIDE1OCAtNjZ0NjYgLTE1OHYtMzJoNjcycTkyIDAgMTU4IC02NnQ2NiAtMTU4eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJmb2xkZXJfb3BlbiIgdW5pY29kZT0iJiN4ZjA3YzsiIGhvcml6LWFkdi14PSIxOTIwIiAKZD0iTTE4NzkgNTg0cTAgLTMxIC0zMSAtNjZsLTMzNiAtMzk2cS00MyAtNTEgLTEyMC41IC04Ni41dC0xNDMuNSAtMzUuNWgtMTA4OHEtMzQgMCAtNjAuNSAxM3QtMjYuNSA0M3EwIDMxIDMxIDY2bDMzNiAzOTZxNDMgNTEgMTIwLjUgODYuNXQxNDMuNSAzNS41aDEwODhxMzQgMCA2MC41IC0xM3QyNi41IC00M3pNMTUzNiA5Mjh2LTE2MGgtODMycS05NCAwIC0xOTcgLTQ3LjV0LTE2NCAtMTE5LjVsLTMzNyAtMzk2bC01IC02cTAgNCAtMC41IDEyLjUKdC0wLjUgMTIuNXY5NjBxMCA5MiA2NiAxNTh0MTU4IDY2aDMyMHE5MiAwIDE1OCAtNjZ0NjYgLTE1OHYtMzJoNTQ0cTkyIDAgMTU4IC02NnQ2NiAtMTU4eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJyZXNpemVfdmVydGljYWwiIHVuaWNvZGU9IiYjeGYwN2Q7IiBob3Jpei1hZHYteD0iNzY4IiAKZD0iTTcwNCAxMjE2cTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtMTI4di0xMDI0aDEyOHEyNiAwIDQ1IC0xOXQxOSAtNDV0LTE5IC00NWwtMjU2IC0yNTZxLTE5IC0xOSAtNDUgLTE5dC00NSAxOWwtMjU2IDI1NnEtMTkgMTkgLTE5IDQ1dDE5IDQ1dDQ1IDE5aDEyOHYxMDI0aC0xMjhxLTI2IDAgLTQ1IDE5dC0xOSA0NXQxOSA0NWwyNTYgMjU2cTE5IDE5IDQ1IDE5dDQ1IC0xOWwyNTYgLTI1NnExOSAtMTkgMTkgLTQ1eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJyZXNpemVfaG9yaXpvbnRhbCIgdW5pY29kZT0iJiN4ZjA3ZTsiIGhvcml6LWFkdi14PSIxNzkyIiAKZD0iTTE3OTIgNjQwcTAgLTI2IC0xOSAtNDVsLTI1NiAtMjU2cS0xOSAtMTkgLTQ1IC0xOXQtNDUgMTl0LTE5IDQ1djEyOGgtMTAyNHYtMTI4cTAgLTI2IC0xOSAtNDV0LTQ1IC0xOXQtNDUgMTlsLTI1NiAyNTZxLTE5IDE5IC0xOSA0NXQxOSA0NWwyNTYgMjU2cTE5IDE5IDQ1IDE5dDQ1IC0xOXQxOSAtNDV2LTEyOGgxMDI0djEyOHEwIDI2IDE5IDQ1dDQ1IDE5dDQ1IC0xOWwyNTYgLTI1NnExOSAtMTkgMTkgLTQ1eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJiYXJfY2hhcnQiIHVuaWNvZGU9IiYjeGYwODA7IiBob3Jpei1hZHYteD0iMjA0OCIgCmQ9Ik02NDAgNjQwdi01MTJoLTI1NnY1MTJoMjU2ek0xMDI0IDExNTJ2LTEwMjRoLTI1NnYxMDI0aDI1NnpNMjA0OCAwdi0xMjhoLTIwNDh2MTUzNmgxMjh2LTE0MDhoMTkyMHpNMTQwOCA4OTZ2LTc2OGgtMjU2djc2OGgyNTZ6TTE3OTIgMTI4MHYtMTE1MmgtMjU2djExNTJoMjU2eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ0d2l0dGVyX3NpZ24iIHVuaWNvZGU9IiYjeGYwODE7IiAKZD0iTTEyODAgOTI2cS01NiAtMjUgLTEyMSAtMzRxNjggNDAgOTMgMTE3cS02NSAtMzggLTEzNCAtNTFxLTYxIDY2IC0xNTMgNjZxLTg3IDAgLTE0OC41IC02MS41dC02MS41IC0xNDguNXEwIC0yOSA1IC00OHEtMTI5IDcgLTI0MiA2NXQtMTkyIDE1NXEtMjkgLTUwIC0yOSAtMTA2cTAgLTExNCA5MSAtMTc1cS00NyAxIC0xMDAgMjZ2LTJxMCAtNzUgNTAgLTEzMy41dDEyMyAtNzIuNXEtMjkgLTggLTUxIC04cS0xMyAwIC0zOSA0CnEyMSAtNjMgNzQuNSAtMTA0dDEyMS41IC00MnEtMTE2IC05MCAtMjYxIC05MHEtMjYgMCAtNTAgM3ExNDggLTk0IDMyMiAtOTRxMTEyIDAgMjEwIDM1LjV0MTY4IDk1dDEyMC41IDEzN3Q3NSAxNjJ0MjQuNSAxNjguNXEwIDE4IC0xIDI3cTYzIDQ1IDEwNSAxMDl6TTE1MzYgMTEyMHYtOTYwcTAgLTExOSAtODQuNSAtMjAzLjV0LTIwMy41IC04NC41aC05NjBxLTExOSAwIC0yMDMuNSA4NC41dC04NC41IDIwMy41djk2MHEwIDExOSA4NC41IDIwMy41CnQyMDMuNSA4NC41aDk2MHExMTkgMCAyMDMuNSAtODQuNXQ4NC41IC0yMDMuNXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iZmFjZWJvb2tfc2lnbiIgdW5pY29kZT0iJiN4ZjA4MjsiIApkPSJNMTI0OCAxNDA4cTExOSAwIDIwMy41IC04NC41dDg0LjUgLTIwMy41di05NjBxMCAtMTE5IC04NC41IC0yMDMuNXQtMjAzLjUgLTg0LjVoLTE4OHY1OTVoMTk5bDMwIDIzMmgtMjI5djE0OHEwIDU2IDIzLjUgODR0OTEuNSAyOGwxMjIgMXYyMDdxLTYzIDkgLTE3OCA5cS0xMzYgMCAtMjE3LjUgLTgwdC04MS41IC0yMjZ2LTE3MWgtMjAwdi0yMzJoMjAwdi01OTVoLTUzMnEtMTE5IDAgLTIwMy41IDg0LjV0LTg0LjUgMjAzLjV2OTYwCnEwIDExOSA4NC41IDIwMy41dDIwMy41IDg0LjVoOTYweiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJjYW1lcmFfcmV0cm8iIHVuaWNvZGU9IiYjeGYwODM7IiBob3Jpei1hZHYteD0iMTc5MiIgCmQ9Ik05MjggNzA0cTAgMTQgLTkgMjN0LTIzIDlxLTY2IDAgLTExMyAtNDd0LTQ3IC0xMTNxMCAtMTQgOSAtMjN0MjMgLTl0MjMgOXQ5IDIzcTAgNDAgMjggNjh0NjggMjhxMTQgMCAyMyA5dDkgMjN6TTExNTIgNTc0cTAgLTEwNiAtNzUgLTE4MXQtMTgxIC03NXQtMTgxIDc1dC03NSAxODF0NzUgMTgxdDE4MSA3NXQxODEgLTc1dDc1IC0xODF6TTEyOCAwaDE1MzZ2MTI4aC0xNTM2di0xMjh6TTEyODAgNTc0cTAgMTU5IC0xMTIuNSAyNzEuNQp0LTI3MS41IDExMi41dC0yNzEuNSAtMTEyLjV0LTExMi41IC0yNzEuNXQxMTIuNSAtMjcxLjV0MjcxLjUgLTExMi41dDI3MS41IDExMi41dDExMi41IDI3MS41ek0yNTYgMTIxNmgzODR2MTI4aC0zODR2LTEyOHpNMTI4IDEwMjRoMTUzNnYxMTh2MTM4aC04MjhsLTY0IC0xMjhoLTY0NHYtMTI4ek0xNzkyIDEyODB2LTEyODBxMCAtNTMgLTM3LjUgLTkwLjV0LTkwLjUgLTM3LjVoLTE1MzZxLTUzIDAgLTkwLjUgMzcuNXQtMzcuNSA5MC41djEyODAKcTAgNTMgMzcuNSA5MC41dDkwLjUgMzcuNWgxNTM2cTUzIDAgOTAuNSAtMzcuNXQzNy41IC05MC41eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJrZXkiIHVuaWNvZGU9IiYjeGYwODQ7IiBob3Jpei1hZHYteD0iMTc5MiIgCmQ9Ik04MzIgMTAyNHEwIDgwIC01NiAxMzZ0LTEzNiA1NnQtMTM2IC01NnQtNTYgLTEzNnEwIC00MiAxOSAtODNxLTQxIDE5IC04MyAxOXEtODAgMCAtMTM2IC01NnQtNTYgLTEzNnQ1NiAtMTM2dDEzNiAtNTZ0MTM2IDU2dDU2IDEzNnEwIDQyIC0xOSA4M3E0MSAtMTkgODMgLTE5cTgwIDAgMTM2IDU2dDU2IDEzNnpNMTY4MyAzMjBxMCAtMTcgLTQ5IC02NnQtNjYgLTQ5cS05IDAgLTI4LjUgMTZ0LTM2LjUgMzN0LTM4LjUgNDB0LTI0LjUgMjYKbC05NiAtOTZsMjIwIC0yMjBxMjggLTI4IDI4IC02OHEwIC00MiAtMzkgLTgxdC04MSAtMzlxLTQwIDAgLTY4IDI4bC02NzEgNjcxcS0xNzYgLTEzMSAtMzY1IC0xMzFxLTE2MyAwIC0yNjUuNSAxMDIuNXQtMTAyLjUgMjY1LjVxMCAxNjAgOTUgMzEzdDI0OCAyNDh0MzEzIDk1cTE2MyAwIDI2NS41IC0xMDIuNXQxMDIuNSAtMjY1LjVxMCAtMTg5IC0xMzEgLTM2NWwzNTUgLTM1NWw5NiA5NnEtMyAzIC0yNiAyNC41dC00MCAzOC41dC0zMyAzNi41CnQtMTYgMjguNXEwIDE3IDQ5IDY2dDY2IDQ5cTEzIDAgMjMgLTEwcTYgLTYgNDYgLTQ0LjV0ODIgLTc5LjV0ODYuNSAtODZ0NzMgLTc4dDI4LjUgLTQxeiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJjb2dzIiB1bmljb2RlPSImI3hmMDg1OyIgaG9yaXotYWR2LXg9IjE5MjAiIApkPSJNODk2IDY0MHEwIDEwNiAtNzUgMTgxdC0xODEgNzV0LTE4MSAtNzV0LTc1IC0xODF0NzUgLTE4MXQxODEgLTc1dDE4MSA3NXQ3NSAxODF6TTE2NjQgMTI4cTAgNTIgLTM4IDkwdC05MCAzOHQtOTAgLTM4dC0zOCAtOTBxMCAtNTMgMzcuNSAtOTAuNXQ5MC41IC0zNy41dDkwLjUgMzcuNXQzNy41IDkwLjV6TTE2NjQgMTE1MnEwIDUyIC0zOCA5MHQtOTAgMzh0LTkwIC0zOHQtMzggLTkwcTAgLTUzIDM3LjUgLTkwLjV0OTAuNSAtMzcuNQp0OTAuNSAzNy41dDM3LjUgOTAuNXpNMTI4MCA3MzF2LTE4NXEwIC0xMCAtNyAtMTkuNXQtMTYgLTEwLjVsLTE1NSAtMjRxLTExIC0zNSAtMzIgLTc2cTM0IC00OCA5MCAtMTE1cTcgLTExIDcgLTIwcTAgLTEyIC03IC0xOXEtMjMgLTMwIC04Mi41IC04OS41dC03OC41IC01OS41cS0xMSAwIC0yMSA3bC0xMTUgOTBxLTM3IC0xOSAtNzcgLTMxcS0xMSAtMTA4IC0yMyAtMTU1cS03IC0yNCAtMzAgLTI0aC0xODZxLTExIDAgLTIwIDcuNXQtMTAgMTcuNQpsLTIzIDE1M3EtMzQgMTAgLTc1IDMxbC0xMTggLTg5cS03IC03IC0yMCAtN3EtMTEgMCAtMjEgOHEtMTQ0IDEzMyAtMTQ0IDE2MHEwIDkgNyAxOXExMCAxNCA0MSA1M3Q0NyA2MXEtMjMgNDQgLTM1IDgybC0xNTIgMjRxLTEwIDEgLTE3IDkuNXQtNyAxOS41djE4NXEwIDEwIDcgMTkuNXQxNiAxMC41bDE1NSAyNHExMSAzNSAzMiA3NnEtMzQgNDggLTkwIDExNXEtNyAxMSAtNyAyMHEwIDEyIDcgMjBxMjIgMzAgODIgODl0NzkgNTlxMTEgMCAyMSAtNwpsMTE1IC05MHEzNCAxOCA3NyAzMnExMSAxMDggMjMgMTU0cTcgMjQgMzAgMjRoMTg2cTExIDAgMjAgLTcuNXQxMCAtMTcuNWwyMyAtMTUzcTM0IC0xMCA3NSAtMzFsMTE4IDg5cTggNyAyMCA3cTExIDAgMjEgLThxMTQ0IC0xMzMgMTQ0IC0xNjBxMCAtOCAtNyAtMTlxLTEyIC0xNiAtNDIgLTU0dC00NSAtNjBxMjMgLTQ4IDM0IC04MmwxNTIgLTIzcTEwIC0yIDE3IC0xMC41dDcgLTE5LjV6TTE5MjAgMTk4di0xNDBxMCAtMTYgLTE0OSAtMzEKcS0xMiAtMjcgLTMwIC01MnE1MSAtMTEzIDUxIC0xMzhxMCAtNCAtNCAtN3EtMTIyIC03MSAtMTI0IC03MXEtOCAwIC00NiA0N3QtNTIgNjhxLTIwIC0yIC0zMCAtMnQtMzAgMnEtMTQgLTIxIC01MiAtNjh0LTQ2IC00N3EtMiAwIC0xMjQgNzFxLTQgMyAtNCA3cTAgMjUgNTEgMTM4cS0xOCAyNSAtMzAgNTJxLTE0OSAxNSAtMTQ5IDMxdjE0MHEwIDE2IDE0OSAzMXExMyAyOSAzMCA1MnEtNTEgMTEzIC01MSAxMzhxMCA0IDQgN3E0IDIgMzUgMjAKdDU5IDM0dDMwIDE2cTggMCA0NiAtNDYuNXQ1MiAtNjcuNXEyMCAyIDMwIDJ0MzAgLTJxNTEgNzEgOTIgMTEybDYgMnE0IDAgMTI0IC03MHE0IC0zIDQgLTdxMCAtMjUgLTUxIC0xMzhxMTcgLTIzIDMwIC01MnExNDkgLTE1IDE0OSAtMzF6TTE5MjAgMTIyMnYtMTQwcTAgLTE2IC0xNDkgLTMxcS0xMiAtMjcgLTMwIC01MnE1MSAtMTEzIDUxIC0xMzhxMCAtNCAtNCAtN3EtMTIyIC03MSAtMTI0IC03MXEtOCAwIC00NiA0N3QtNTIgNjgKcS0yMCAtMiAtMzAgLTJ0LTMwIDJxLTE0IC0yMSAtNTIgLTY4dC00NiAtNDdxLTIgMCAtMTI0IDcxcS00IDMgLTQgN3EwIDI1IDUxIDEzOHEtMTggMjUgLTMwIDUycS0xNDkgMTUgLTE0OSAzMXYxNDBxMCAxNiAxNDkgMzFxMTMgMjkgMzAgNTJxLTUxIDExMyAtNTEgMTM4cTAgNCA0IDdxNCAyIDM1IDIwdDU5IDM0dDMwIDE2cTggMCA0NiAtNDYuNXQ1MiAtNjcuNXEyMCAyIDMwIDJ0MzAgLTJxNTEgNzEgOTIgMTEybDYgMnE0IDAgMTI0IC03MApxNCAtMyA0IC03cTAgLTI1IC01MSAtMTM4cTE3IC0yMyAzMCAtNTJxMTQ5IC0xNSAxNDkgLTMxeiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJjb21tZW50cyIgdW5pY29kZT0iJiN4ZjA4NjsiIGhvcml6LWFkdi14PSIxNzkyIiAKZD0iTTE0MDggNzY4cTAgLTEzOSAtOTQgLTI1N3QtMjU2LjUgLTE4Ni41dC0zNTMuNSAtNjguNXEtODYgMCAtMTc2IDE2cS0xMjQgLTg4IC0yNzggLTEyOHEtMzYgLTkgLTg2IC0xNmgtM3EtMTEgMCAtMjAuNSA4dC0xMS41IDIxcS0xIDMgLTEgNi41dDAuNSA2LjV0MiA2bDIuNSA1dDMuNSA1LjV0NCA1dDQuNSA1dDQgNC41cTUgNiAyMyAyNXQyNiAyOS41dDIyLjUgMjl0MjUgMzguNXQyMC41IDQ0cS0xMjQgNzIgLTE5NSAxNzd0LTcxIDIyNApxMCAxMzkgOTQgMjU3dDI1Ni41IDE4Ni41dDM1My41IDY4LjV0MzUzLjUgLTY4LjV0MjU2LjUgLTE4Ni41dDk0IC0yNTd6TTE3OTIgNTEycTAgLTEyMCAtNzEgLTIyNC41dC0xOTUgLTE3Ni41cTEwIC0yNCAyMC41IC00NHQyNSAtMzguNXQyMi41IC0yOXQyNiAtMjkuNXQyMyAtMjVxMSAtMSA0IC00LjV0NC41IC01dDQgLTV0My41IC01LjVsMi41IC01dDIgLTZ0MC41IC02LjV0LTEgLTYuNXEtMyAtMTQgLTEzIC0yMnQtMjIgLTcKcS01MCA3IC04NiAxNnEtMTU0IDQwIC0yNzggMTI4cS05MCAtMTYgLTE3NiAtMTZxLTI3MSAwIC00NzIgMTMycTU4IC00IDg4IC00cTE2MSAwIDMwOSA0NXQyNjQgMTI5cTEyNSA5MiAxOTIgMjEydDY3IDI1NHEwIDc3IC0yMyAxNTJxMTI5IC03MSAyMDQgLTE3OHQ3NSAtMjMweiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ0aHVtYnNfdXBfYWx0IiB1bmljb2RlPSImI3hmMDg3OyIgCmQ9Ik0yNTYgMTkycTAgMjYgLTE5IDQ1dC00NSAxOXQtNDUgLTE5dC0xOSAtNDV0MTkgLTQ1dDQ1IC0xOXQ0NSAxOXQxOSA0NXpNMTQwOCA3NjhxMCA1MSAtMzkgODkuNXQtODkgMzguNWgtMzUycTAgNTggNDggMTU5LjV0NDggMTYwLjVxMCA5OCAtMzIgMTQ1dC0xMjggNDdxLTI2IC0yNiAtMzggLTg1dC0zMC41IC0xMjUuNXQtNTkuNSAtMTA5LjVxLTIyIC0yMyAtNzcgLTkxcS00IC01IC0yMyAtMzB0LTMxLjUgLTQxdC0zNC41IC00Mi41CnQtNDAgLTQ0dC0zOC41IC0zNS41dC00MCAtMjd0LTM1LjUgLTloLTMydi02NDBoMzJxMTMgMCAzMS41IC0zdDMzIC02LjV0MzggLTExdDM1IC0xMS41dDM1LjUgLTEyLjV0MjkgLTEwLjVxMjExIC03MyAzNDIgLTczaDEyMXExOTIgMCAxOTIgMTY3cTAgMjYgLTUgNTZxMzAgMTYgNDcuNSA1Mi41dDE3LjUgNzMuNXQtMTggNjlxNTMgNTAgNTMgMTE5cTAgMjUgLTEwIDU1LjV0LTI1IDQ3LjVxMzIgMSA1My41IDQ3dDIxLjUgODF6TTE1MzYgNzY5CnEwIC04OSAtNDkgLTE2M3E5IC0zMyA5IC02OXEwIC03NyAtMzggLTE0NHEzIC0yMSAzIC00M3EwIC0xMDEgLTYwIC0xNzhxMSAtMTM5IC04NSAtMjE5LjV0LTIyNyAtODAuNWgtMzZoLTkzcS05NiAwIC0xODkuNSAyMi41dC0yMTYuNSA2NS41cS0xMTYgNDAgLTEzOCA0MGgtMjg4cS01MyAwIC05MC41IDM3LjV0LTM3LjUgOTAuNXY2NDBxMCA1MyAzNy41IDkwLjV0OTAuNSAzNy41aDI3NHEzNiAyNCAxMzcgMTU1cTU4IDc1IDEwNyAxMjgKcTI0IDI1IDM1LjUgODUuNXQzMC41IDEyNi41dDYyIDEwOHEzOSAzNyA5MCAzN3E4NCAwIDE1MSAtMzIuNXQxMDIgLTEwMS41dDM1IC0xODZxMCAtOTMgLTQ4IC0xOTJoMTc2cTEwNCAwIDE4MCAtNzZ0NzYgLTE3OXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idGh1bWJzX2Rvd25fYWx0IiB1bmljb2RlPSImI3hmMDg4OyIgCmQ9Ik0yNTYgMTA4OHEwIDI2IC0xOSA0NXQtNDUgMTl0LTQ1IC0xOXQtMTkgLTQ1dDE5IC00NXQ0NSAtMTl0NDUgMTl0MTkgNDV6TTE0MDggNTEycTAgMzUgLTIxLjUgODF0LTUzLjUgNDdxMTUgMTcgMjUgNDcuNXQxMCA1NS41cTAgNjkgLTUzIDExOXExOCAzMSAxOCA2OXEwIDM3IC0xNy41IDczLjV0LTQ3LjUgNTIuNXE1IDMwIDUgNTZxMCA4NSAtNDkgMTI2dC0xMzYgNDFoLTEyOHEtMTMxIDAgLTM0MiAtNzNxLTUgLTIgLTI5IC0xMC41CnQtMzUuNSAtMTIuNXQtMzUgLTExLjV0LTM4IC0xMXQtMzMgLTYuNXQtMzEuNSAtM2gtMzJ2LTY0MGgzMnExNiAwIDM1LjUgLTl0NDAgLTI3dDM4LjUgLTM1LjV0NDAgLTQ0dDM0LjUgLTQyLjV0MzEuNSAtNDF0MjMgLTMwcTU1IC02OCA3NyAtOTFxNDEgLTQzIDU5LjUgLTEwOS41dDMwLjUgLTEyNS41dDM4IC04NXE5NiAwIDEyOCA0N3QzMiAxNDVxMCA1OSAtNDggMTYwLjV0LTQ4IDE1OS41aDM1MnE1MCAwIDg5IDM4LjV0MzkgODkuNXoKTTE1MzYgNTExcTAgLTEwMyAtNzYgLTE3OXQtMTgwIC03NmgtMTc2cTQ4IC05OSA0OCAtMTkycTAgLTExOCAtMzUgLTE4NnEtMzUgLTY5IC0xMDIgLTEwMS41dC0xNTEgLTMyLjVxLTUxIDAgLTkwIDM3cS0zNCAzMyAtNTQgODJ0LTI1LjUgOTAuNXQtMTcuNSA4NC41dC0zMSA2NHEtNDggNTAgLTEwNyAxMjdxLTEwMSAxMzEgLTEzNyAxNTVoLTI3NHEtNTMgMCAtOTAuNSAzNy41dC0zNy41IDkwLjV2NjQwcTAgNTMgMzcuNSA5MC41dDkwLjUgMzcuNQpoMjg4cTIyIDAgMTM4IDQwcTEyOCA0NCAyMjMgNjZ0MjAwIDIyaDExMnExNDAgMCAyMjYuNSAtNzl0ODUuNSAtMjE2di01cTYwIC03NyA2MCAtMTc4cTAgLTIyIC0zIC00M3EzOCAtNjcgMzggLTE0NHEwIC0zNiAtOSAtNjlxNDkgLTczIDQ5IC0xNjN6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InN0YXJfaGFsZiIgdW5pY29kZT0iJiN4ZjA4OTsiIGhvcml6LWFkdi14PSI4OTYiIApkPSJNODMyIDE1MDR2LTEzMzlsLTQ0OSAtMjM2cS0yMiAtMTIgLTQwIC0xMnEtMjEgMCAtMzEuNSAxNC41dC0xMC41IDM1LjVxMCA2IDIgMjBsODYgNTAwbC0zNjQgMzU0cS0yNSAyNyAtMjUgNDhxMCAzNyA1NiA0Nmw1MDIgNzNsMjI1IDQ1NXExOSA0MSA0OSA0MXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iaGVhcnRfZW1wdHkiIHVuaWNvZGU9IiYjeGYwOGE7IiBob3Jpei1hZHYteD0iMTc5MiIgCmQ9Ik0xNjY0IDk0MHEwIDgxIC0yMS41IDE0M3QtNTUgOTguNXQtODEuNSA1OS41dC05NCAzMXQtOTggOHQtMTEyIC0yNS41dC0xMTAuNSAtNjR0LTg2LjUgLTcydC02MCAtNjEuNXEtMTggLTIyIC00OSAtMjJ0LTQ5IDIycS0yNCAyOCAtNjAgNjEuNXQtODYuNSA3MnQtMTEwLjUgNjR0LTExMiAyNS41dC05OCAtOHQtOTQgLTMxdC04MS41IC01OS41dC01NSAtOTguNXQtMjEuNSAtMTQzcTAgLTE2OCAxODcgLTM1NWw1ODEgLTU2MGw1ODAgNTU5CnExODggMTg4IDE4OCAzNTZ6TTE3OTIgOTQwcTAgLTIyMSAtMjI5IC00NTBsLTYyMyAtNjAwcS0xOCAtMTggLTQ0IC0xOHQtNDQgMThsLTYyNCA2MDJxLTEwIDggLTI3LjUgMjZ0LTU1LjUgNjUuNXQtNjggOTcuNXQtNTMuNSAxMjF0LTIzLjUgMTM4cTAgMjIwIDEyNyAzNDR0MzUxIDEyNHE2MiAwIDEyNi41IC0yMS41dDEyMCAtNTh0OTUuNSAtNjguNXQ3NiAtNjhxMzYgMzYgNzYgNjh0OTUuNSA2OC41dDEyMCA1OHQxMjYuNSAyMS41CnEyMjQgMCAzNTEgLTEyNHQxMjcgLTM0NHoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0ic2lnbm91dCIgdW5pY29kZT0iJiN4ZjA4YjsiIGhvcml6LWFkdi14PSIxNjY0IiAKZD0iTTY0MCA5NnEwIC00IDEgLTIwdDAuNSAtMjYuNXQtMyAtMjMuNXQtMTAgLTE5LjV0LTIwLjUgLTYuNWgtMzIwcS0xMTkgMCAtMjAzLjUgODQuNXQtODQuNSAyMDMuNXY3MDRxMCAxMTkgODQuNSAyMDMuNXQyMDMuNSA4NC41aDMyMHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjVxMCAtNCAxIC0yMHQwLjUgLTI2LjV0LTMgLTIzLjV0LTEwIC0xOS41dC0yMC41IC02LjVoLTMyMHEtNjYgMCAtMTEzIC00N3QtNDcgLTExM3YtNzA0CnEwIC02NiA0NyAtMTEzdDExMyAtNDdoMjg4aDExaDEzdDExLjUgLTF0MTEuNSAtM3Q4IC01LjV0NyAtOXQyIC0xMy41ek0xNTY4IDY0MHEwIC0yNiAtMTkgLTQ1bC01NDQgLTU0NHEtMTkgLTE5IC00NSAtMTl0LTQ1IDE5dC0xOSA0NXYyODhoLTQ0OHEtMjYgMCAtNDUgMTl0LTE5IDQ1djM4NHEwIDI2IDE5IDQ1dDQ1IDE5aDQ0OHYyODhxMCAyNiAxOSA0NXQ0NSAxOXQ0NSAtMTlsNTQ0IC01NDRxMTkgLTE5IDE5IC00NXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0ibGlua2VkaW5fc2lnbiIgdW5pY29kZT0iJiN4ZjA4YzsiIApkPSJNMjM3IDEyMmgyMzF2Njk0aC0yMzF2LTY5NHpNNDgzIDEwMzBxLTEgNTIgLTM2IDg2dC05MyAzNHQtOTQuNSAtMzR0LTM2LjUgLTg2cTAgLTUxIDM1LjUgLTg1LjV0OTIuNSAtMzQuNWgxcTU5IDAgOTUgMzQuNXQzNiA4NS41ek0xMDY4IDEyMmgyMzF2Mzk4cTAgMTU0IC03MyAyMzN0LTE5MyA3OXEtMTM2IDAgLTIwOSAtMTE3aDJ2MTAxaC0yMzFxMyAtNjYgMCAtNjk0aDIzMXYzODhxMCAzOCA3IDU2cTE1IDM1IDQ1IDU5LjV0NzQgMjQuNQpxMTE2IDAgMTE2IC0xNTd2LTM3MXpNMTUzNiAxMTIwdi05NjBxMCAtMTE5IC04NC41IC0yMDMuNXQtMjAzLjUgLTg0LjVoLTk2MHEtMTE5IDAgLTIwMy41IDg0LjV0LTg0LjUgMjAzLjV2OTYwcTAgMTE5IDg0LjUgMjAzLjV0MjAzLjUgODQuNWg5NjBxMTE5IDAgMjAzLjUgLTg0LjV0ODQuNSAtMjAzLjV6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InB1c2hwaW4iIHVuaWNvZGU9IiYjeGYwOGQ7IiBob3Jpei1hZHYteD0iMTE1MiIgCmQ9Ik00ODAgNjcydjQ0OHEwIDE0IC05IDIzdC0yMyA5dC0yMyAtOXQtOSAtMjN2LTQ0OHEwIC0xNCA5IC0yM3QyMyAtOXQyMyA5dDkgMjN6TTExNTIgMzIwcTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtNDI5bC01MSAtNDgzcS0yIC0xMiAtMTAuNSAtMjAuNXQtMjAuNSAtOC41aC0xcS0yNyAwIC0zMiAyN2wtNzYgNDg1aC00MDRxLTI2IDAgLTQ1IDE5dC0xOSA0NXEwIDEyMyA3OC41IDIyMS41dDE3Ny41IDk4LjV2NTEycS01MiAwIC05MCAzOAp0LTM4IDkwdDM4IDkwdDkwIDM4aDY0MHE1MiAwIDkwIC0zOHQzOCAtOTB0LTM4IC05MHQtOTAgLTM4di01MTJxOTkgMCAxNzcuNSAtOTguNXQ3OC41IC0yMjEuNXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iZXh0ZXJuYWxfbGluayIgdW5pY29kZT0iJiN4ZjA4ZTsiIGhvcml6LWFkdi14PSIxNzkyIiAKZD0iTTE0MDggNjA4di0zMjBxMCAtMTE5IC04NC41IC0yMDMuNXQtMjAzLjUgLTg0LjVoLTgzMnEtMTE5IDAgLTIwMy41IDg0LjV0LTg0LjUgMjAzLjV2ODMycTAgMTE5IDg0LjUgMjAzLjV0MjAzLjUgODQuNWg3MDRxMTQgMCAyMyAtOXQ5IC0yM3YtNjRxMCAtMTQgLTkgLTIzdC0yMyAtOWgtNzA0cS02NiAwIC0xMTMgLTQ3dC00NyAtMTEzdi04MzJxMCAtNjYgNDcgLTExM3QxMTMgLTQ3aDgzMnE2NiAwIDExMyA0N3Q0NyAxMTN2MzIwCnEwIDE0IDkgMjN0MjMgOWg2NHExNCAwIDIzIC05dDkgLTIzek0xNzkyIDE0NzJ2LTUxMnEwIC0yNiAtMTkgLTQ1dC00NSAtMTl0LTQ1IDE5bC0xNzYgMTc2bC02NTIgLTY1MnEtMTAgLTEwIC0yMyAtMTB0LTIzIDEwbC0xMTQgMTE0cS0xMCAxMCAtMTAgMjN0MTAgMjNsNjUyIDY1MmwtMTc2IDE3NnEtMTkgMTkgLTE5IDQ1dDE5IDQ1dDQ1IDE5aDUxMnEyNiAwIDQ1IC0xOXQxOSAtNDV6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InNpZ25pbiIgdW5pY29kZT0iJiN4ZjA5MDsiIApkPSJNMTE4NCA2NDBxMCAtMjYgLTE5IC00NWwtNTQ0IC01NDRxLTE5IC0xOSAtNDUgLTE5dC00NSAxOXQtMTkgNDV2Mjg4aC00NDhxLTI2IDAgLTQ1IDE5dC0xOSA0NXYzODRxMCAyNiAxOSA0NXQ0NSAxOWg0NDh2Mjg4cTAgMjYgMTkgNDV0NDUgMTl0NDUgLTE5bDU0NCAtNTQ0cTE5IC0xOSAxOSAtNDV6TTE1MzYgOTkydi03MDRxMCAtMTE5IC04NC41IC0yMDMuNXQtMjAzLjUgLTg0LjVoLTMyMHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41CnEwIDQgLTEgMjB0LTAuNSAyNi41dDMgMjMuNXQxMCAxOS41dDIwLjUgNi41aDMyMHE2NiAwIDExMyA0N3Q0NyAxMTN2NzA0cTAgNjYgLTQ3IDExM3QtMTEzIDQ3aC0yODhoLTExaC0xM3QtMTEuNSAxdC0xMS41IDN0LTggNS41dC03IDl0LTIgMTMuNXEwIDQgLTEgMjB0LTAuNSAyNi41dDMgMjMuNXQxMCAxOS41dDIwLjUgNi41aDMyMHExMTkgMCAyMDMuNSAtODQuNXQ4NC41IC0yMDMuNXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idHJvcGh5IiB1bmljb2RlPSImI3hmMDkxOyIgaG9yaXotYWR2LXg9IjE2NjQiIApkPSJNNDU4IDY1M3EtNzQgMTYyIC03NCAzNzFoLTI1NnYtOTZxMCAtNzggOTQuNSAtMTYydDIzNS41IC0xMTN6TTE1MzYgOTI4djk2aC0yNTZxMCAtMjA5IC03NCAtMzcxcTE0MSAyOSAyMzUuNSAxMTN0OTQuNSAxNjJ6TTE2NjQgMTA1NnYtMTI4cTAgLTcxIC00MS41IC0xNDN0LTExMiAtMTMwdC0xNzMgLTk3LjV0LTIxNS41IC00NC41cS00MiAtNTQgLTk1IC05NXEtMzggLTM0IC01Mi41IC03Mi41dC0xNC41IC04OS41cTAgLTU0IDMwLjUgLTkxCnQ5Ny41IC0zN3E3NSAwIDEzMy41IC00NS41dDU4LjUgLTExNC41di02NHEwIC0xNCAtOSAtMjN0LTIzIC05aC04MzJxLTE0IDAgLTIzIDl0LTkgMjN2NjRxMCA2OSA1OC41IDExNC41dDEzMy41IDQ1LjVxNjcgMCA5Ny41IDM3dDMwLjUgOTFxMCA1MSAtMTQuNSA4OS41dC01Mi41IDcyLjVxLTUzIDQxIC05NSA5NXEtMTEzIDUgLTIxNS41IDQ0LjV0LTE3MyA5Ny41dC0xMTIgMTMwdC00MS41IDE0M3YxMjhxMCA0MCAyOCA2OHQ2OCAyOGgyODh2OTYKcTAgNjYgNDcgMTEzdDExMyA0N2g1NzZxNjYgMCAxMTMgLTQ3dDQ3IC0xMTN2LTk2aDI4OHE0MCAwIDY4IC0yOHQyOCAtNjh6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9ImdpdGh1Yl9zaWduIiB1bmljb2RlPSImI3hmMDkyOyIgCmQ9Ik01MTkgMzM2cTQgNiAtMyAxM3EtOSA3IC0xNCAycS00IC02IDMgLTEzcTkgLTcgMTQgLTJ6TTQ5MSAzNzdxLTUgNyAtMTIgNHEtNiAtNCAwIC0xMnE3IC04IDEyIC01cTYgNCAwIDEzek00NTAgNDE3cTIgNCAtNSA4cS03IDIgLTggLTJxLTMgLTUgNCAtOHE4IC0yIDkgMnpNNDcxIDM5NHEyIDEgMS41IDQuNXQtMy41IDUuNXEtNiA3IC0xMCAzdDEgLTExcTYgLTYgMTEgLTJ6TTU1NyAzMTlxMiA3IC05IDExcS05IDMgLTEzIC00CnEtMiAtNyA5IC0xMXE5IC0zIDEzIDR6TTU5OSAzMTZxMCA4IC0xMiA4cS0xMCAwIC0xMCAtOHQxMSAtOHQxMSA4ek02MzggMzIzcS0yIDcgLTEzIDV0LTkgLTlxMiAtOCAxMiAtNnQxMCAxMHpNMTI4MCA2NDBxMCAyMTIgLTE1MCAzNjJ0LTM2MiAxNTB0LTM2MiAtMTUwdC0xNTAgLTM2MnEwIC0xNjcgOTggLTMwMC41dDI1MiAtMTg1LjVxMTggLTMgMjYuNSA1dDguNSAyMHEwIDUyIC0xIDk1cS02IC0xIC0xNS41IC0yLjV0LTM1LjUgLTJ0LTQ4IDQKdC00My41IDIwdC0yOS41IDQxLjVxLTIzIDU5IC01NyA3NHEtMiAxIC00LjUgMy41bC04IDh0LTcgOS41dDQgNy41dDE5LjUgMy41cTYgMCAxNSAtMnQzMCAtMTUuNXQzMyAtMzUuNXExNiAtMjggMzcuNSAtNDJ0NDMuNSAtMTR0MzggMy41dDMwIDkuNXE3IDQ3IDMzIDY5cS00OSA2IC04NiAxOC41dC03MyAzOXQtNTUuNSA3NnQtMTkuNSAxMTkuNXEwIDc5IDUzIDEzN3EtMjQgNjIgNSAxMzZxMTkgNiA1NC41IC03LjV0NjAuNSAtMjkuNWwyNiAtMTYKcTU4IDE3IDEyOCAxN3QxMjggLTE3cTExIDcgMjguNSAxOHQ1NS41IDI2dDU3IDlxMjkgLTc0IDUgLTEzNnE1MyAtNTggNTMgLTEzN3EwIC01NyAtMTQgLTEwMC41dC0zNS41IC03MHQtNTMuNSAtNDQuNXQtNjIuNSAtMjZ0LTY4LjUgLTEycTM1IC0zMSAzNSAtOTVxMCAtNDAgLTAuNSAtODl0LTAuNSAtNTFxMCAtMTIgOC41IC0yMHQyNi41IC01cTE1NCA1MiAyNTIgMTg1LjV0OTggMzAwLjV6TTE1MzYgMTEyMHYtOTYwCnEwIC0xMTkgLTg0LjUgLTIwMy41dC0yMDMuNSAtODQuNWgtOTYwcS0xMTkgMCAtMjAzLjUgODQuNXQtODQuNSAyMDMuNXY5NjBxMCAxMTkgODQuNSAyMDMuNXQyMDMuNSA4NC41aDk2MHExMTkgMCAyMDMuNSAtODQuNXQ4NC41IC0yMDMuNXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idXBsb2FkX2FsdCIgdW5pY29kZT0iJiN4ZjA5MzsiIGhvcml6LWFkdi14PSIxNjY0IiAKZD0iTTEyODAgNjRxMCAyNiAtMTkgNDV0LTQ1IDE5dC00NSAtMTl0LTE5IC00NXQxOSAtNDV0NDUgLTE5dDQ1IDE5dDE5IDQ1ek0xNTM2IDY0cTAgMjYgLTE5IDQ1dC00NSAxOXQtNDUgLTE5dC0xOSAtNDV0MTkgLTQ1dDQ1IC0xOXQ0NSAxOXQxOSA0NXpNMTY2NCAyODh2LTMyMHEwIC00MCAtMjggLTY4dC02OCAtMjhoLTE0NzJxLTQwIDAgLTY4IDI4dC0yOCA2OHYzMjBxMCA0MCAyOCA2OHQ2OCAyOGg0MjdxMjEgLTU2IDcwLjUgLTkyCnQxMTAuNSAtMzZoMjU2cTYxIDAgMTEwLjUgMzZ0NzAuNSA5Mmg0MjdxNDAgMCA2OCAtMjh0MjggLTY4ek0xMzM5IDkzNnEtMTcgLTQwIC01OSAtNDBoLTI1NnYtNDQ4cTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtMjU2cS0yNiAwIC00NSAxOXQtMTkgNDV2NDQ4aC0yNTZxLTQyIDAgLTU5IDQwcS0xNyAzOSAxNCA2OWw0NDggNDQ4cTE4IDE5IDQ1IDE5dDQ1IC0xOWw0NDggLTQ0OHEzMSAtMzAgMTQgLTY5eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJsZW1vbiIgdW5pY29kZT0iJiN4ZjA5NDsiIApkPSJNMTQwNyA3MTBxMCA0NCAtNyAxMTMuNXQtMTggOTYuNXEtMTIgMzAgLTE3IDQ0dC05IDM2LjV0LTQgNDguNXEwIDIzIDUgNjguNXQ1IDY3LjVxMCAzNyAtMTAgNTVxLTQgMSAtMTMgMXEtMTkgMCAtNTggLTQuNXQtNTkgLTQuNXEtNjAgMCAtMTc2IDI0dC0xNzUgMjRxLTQzIDAgLTk0LjUgLTExLjV0LTg1IC0yMy41dC04OS41IC0zNHEtMTM3IC01NCAtMjAyIC0xMDNxLTk2IC03MyAtMTU5LjUgLTE4OS41dC04OCAtMjM2dC0yNC41IC0yNDguNQpxMCAtNDAgMTIuNSAtMTIwdDEyLjUgLTEyMXEwIC0yMyAtMTEgLTY2LjV0LTExIC02NS41dDEyIC0zNi41dDM0IC0xNC41cTI0IDAgNzIuNSAxMXQ3My41IDExcTU3IDAgMTY5LjUgLTE1LjV0MTY5LjUgLTE1LjVxMTgxIDAgMjg0IDM2cTEyOSA0NSAyMzUuNSAxNTIuNXQxNjYgMjQ1LjV0NTkuNSAyNzV6TTE1MzUgNzEycTAgLTE2NSAtNzAgLTMyNy41dC0xOTYgLTI4OHQtMjgxIC0xODAuNXEtMTI0IC00NCAtMzI2IC00NApxLTU3IDAgLTE3MCAxNC41dC0xNjkgMTQuNXEtMjQgMCAtNzIuNSAtMTQuNXQtNzMuNSAtMTQuNXEtNzMgMCAtMTIzLjUgNTUuNXQtNTAuNSAxMjguNXEwIDI0IDExIDY4dDExIDY3cTAgNDAgLTEyLjUgMTIwLjV0LTEyLjUgMTIxLjVxMCAxMTEgMTggMjE3LjV0NTQuNSAyMDkuNXQxMDAuNSAxOTR0MTUwIDE1NnE3OCA1OSAyMzIgMTIwcTE5NCA3OCAzMTYgNzhxNjAgMCAxNzUuNSAtMjR0MTczLjUgLTI0cTE5IDAgNTcgNXQ1OCA1CnE4MSAwIDExOCAtNTAuNXQzNyAtMTM0LjVxMCAtMjMgLTUgLTY4dC01IC02OHEwIC0xMyAyIC0yNXQzLjUgLTE2LjV0Ny41IC0yMC41dDggLTIwcTE2IC00MCAyNSAtMTE4LjV0OSAtMTM2LjV6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InBob25lIiB1bmljb2RlPSImI3hmMDk1OyIgaG9yaXotYWR2LXg9IjE0MDgiIApkPSJNMTQwOCAyOTZxMCAtMjcgLTEwIC03MC41dC0yMSAtNjguNXEtMjEgLTUwIC0xMjIgLTEwNnEtOTQgLTUxIC0xODYgLTUxcS0yNyAwIC01MyAzLjV0LTU3LjUgMTIuNXQtNDcgMTQuNXQtNTUuNSAyMC41dC00OSAxOHEtOTggMzUgLTE3NSA4M3EtMTI3IDc5IC0yNjQgMjE2dC0yMTYgMjY0cS00OCA3NyAtODMgMTc1cS0zIDkgLTE4IDQ5dC0yMC41IDU1LjV0LTE0LjUgNDd0LTEyLjUgNTcuNXQtMy41IDUzcTAgOTIgNTEgMTg2CnE1NiAxMDEgMTA2IDEyMnEyNSAxMSA2OC41IDIxdDcwLjUgMTBxMTQgMCAyMSAtM3ExOCAtNiA1MyAtNzZxMTEgLTE5IDMwIC01NHQzNSAtNjMuNXQzMSAtNTMuNXEzIC00IDE3LjUgLTI1dDIxLjUgLTM1LjV0NyAtMjguNXEwIC0yMCAtMjguNSAtNTB0LTYyIC01NXQtNjIgLTUzdC0yOC41IC00NnEwIC05IDUgLTIyLjV0OC41IC0yMC41dDE0IC0yNHQxMS41IC0xOXE3NiAtMTM3IDE3NCAtMjM1dDIzNSAtMTc0cTIgLTEgMTkgLTExLjV0MjQgLTE0CnQyMC41IC04LjV0MjIuNSAtNXExOCAwIDQ2IDI4LjV0NTMgNjJ0NTUgNjJ0NTAgMjguNXExNCAwIDI4LjUgLTd0MzUuNSAtMjEuNXQyNSAtMTcuNXEyNSAtMTUgNTMuNSAtMzF0NjMuNSAtMzV0NTQgLTMwcTcwIC0zNSA3NiAtNTNxMyAtNyAzIC0yMXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iY2hlY2tfZW1wdHkiIHVuaWNvZGU9IiYjeGYwOTY7IiBob3Jpei1hZHYteD0iMTQwOCIgCmQ9Ik0xMTIwIDEyODBoLTgzMnEtNjYgMCAtMTEzIC00N3QtNDcgLTExM3YtODMycTAgLTY2IDQ3IC0xMTN0MTEzIC00N2g4MzJxNjYgMCAxMTMgNDd0NDcgMTEzdjgzMnEwIDY2IC00NyAxMTN0LTExMyA0N3pNMTQwOCAxMTIwdi04MzJxMCAtMTE5IC04NC41IC0yMDMuNXQtMjAzLjUgLTg0LjVoLTgzMnEtMTE5IDAgLTIwMy41IDg0LjV0LTg0LjUgMjAzLjV2ODMycTAgMTE5IDg0LjUgMjAzLjV0MjAzLjUgODQuNWg4MzIKcTExOSAwIDIwMy41IC04NC41dDg0LjUgLTIwMy41eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJib29rbWFya19lbXB0eSIgdW5pY29kZT0iJiN4ZjA5NzsiIGhvcml6LWFkdi14PSIxMjgwIiAKZD0iTTExNTIgMTI4MGgtMTAyNHYtMTI0Mmw0MjMgNDA2bDg5IDg1bDg5IC04NWw0MjMgLTQwNnYxMjQyek0xMTY0IDE0MDhxMjMgMCA0NCAtOXEzMyAtMTMgNTIuNSAtNDF0MTkuNSAtNjJ2LTEyODlxMCAtMzQgLTE5LjUgLTYydC01Mi41IC00MXEtMTkgLTggLTQ0IC04cS00OCAwIC04MyAzMmwtNDQxIDQyNGwtNDQxIC00MjRxLTM2IC0zMyAtODMgLTMzcS0yMyAwIC00NCA5cS0zMyAxMyAtNTIuNSA0MXQtMTkuNSA2MnYxMjg5CnEwIDM0IDE5LjUgNjJ0NTIuNSA0MXEyMSA5IDQ0IDloMTA0OHoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0icGhvbmVfc2lnbiIgdW5pY29kZT0iJiN4ZjA5ODsiIApkPSJNMTI4MCAzNDNxMCAxMSAtMiAxNnQtMTggMTYuNXQtNDAuNSAyNXQtNDcuNSAyNi41dC00NS41IDI1dC0yOC41IDE1cS01IDMgLTE5IDEzdC0yNSAxNXQtMjEgNXEtMTUgMCAtMzYuNSAtMjAuNXQtMzkuNSAtNDV0LTM4LjUgLTQ1dC0zMy41IC0yMC41cS03IDAgLTE2LjUgMy41dC0xNS41IDYuNXQtMTcgOS41dC0xNCA4LjVxLTk5IDU1IC0xNzAgMTI2LjV0LTEyNyAxNzAuNXEtMiAzIC04LjUgMTR0LTkuNSAxN3QtNi41IDE1LjUKdC0zLjUgMTYuNXEwIDEzIDIwLjUgMzMuNXQ0NSAzOC41dDQ1IDM5LjV0MjAuNSAzNi41cTAgMTAgLTUgMjF0LTE1IDI1dC0xMyAxOXEtMyA2IC0xNSAyOC41dC0yNSA0NS41dC0yNi41IDQ3LjV0LTI1IDQwLjV0LTE2LjUgMTh0LTE2IDJxLTQ4IDAgLTEwMSAtMjJxLTQ2IC0yMSAtODAgLTk0LjV0LTM0IC0xMzAuNXEwIC0xNiAyLjUgLTM0dDUgLTMwLjV0OSAtMzN0MTAgLTI5LjV0MTIuNSAtMzN0MTEgLTMwcTYwIC0xNjQgMjE2LjUgLTMyMC41CnQzMjAuNSAtMjE2LjVxNiAtMiAzMCAtMTF0MzMgLTEyLjV0MjkuNSAtMTB0MzMgLTl0MzAuNSAtNXQzNCAtMi41cTU3IDAgMTMwLjUgMzR0OTQuNSA4MHEyMiA1MyAyMiAxMDF6TTE1MzYgMTEyMHYtOTYwcTAgLTExOSAtODQuNSAtMjAzLjV0LTIwMy41IC04NC41aC05NjBxLTExOSAwIC0yMDMuNSA4NC41dC04NC41IDIwMy41djk2MHEwIDExOSA4NC41IDIwMy41dDIwMy41IDg0LjVoOTYwcTExOSAwIDIwMy41IC04NC41dDg0LjUgLTIwMy41egoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idHdpdHRlciIgdW5pY29kZT0iJiN4ZjA5OTsiIGhvcml6LWFkdi14PSIxNjY0IiAKZD0iTTE2MjAgMTEyOHEtNjcgLTk4IC0xNjIgLTE2N3ExIC0xNCAxIC00MnEwIC0xMzAgLTM4IC0yNTkuNXQtMTE1LjUgLTI0OC41dC0xODQuNSAtMjEwLjV0LTI1OCAtMTQ2dC0zMjMgLTU0LjVxLTI3MSAwIC00OTYgMTQ1cTM1IC00IDc4IC00cTIyNSAwIDQwMSAxMzhxLTEwNSAyIC0xODggNjQuNXQtMTE0IDE1OS41cTMzIC01IDYxIC01cTQzIDAgODUgMTFxLTExMiAyMyAtMTg1LjUgMTExLjV0LTczLjUgMjA1LjV2NHE2OCAtMzggMTQ2IC00MQpxLTY2IDQ0IC0xMDUgMTE1dC0zOSAxNTRxMCA4OCA0NCAxNjNxMTIxIC0xNDkgMjk0LjUgLTIzOC41dDM3MS41IC05OS41cS04IDM4IC04IDc0cTAgMTM0IDk0LjUgMjI4LjV0MjI4LjUgOTQuNXExNDAgMCAyMzYgLTEwMnExMDkgMjEgMjA1IDc4cS0zNyAtMTE1IC0xNDIgLTE3OHE5MyAxMCAxODYgNTB6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9ImZhY2Vib29rIiB1bmljb2RlPSImI3hmMDlhOyIgaG9yaXotYWR2LXg9IjEwMjQiIApkPSJNOTU5IDE1MjR2LTI2NGgtMTU3cS04NiAwIC0xMTYgLTM2dC0zMCAtMTA4di0xODloMjkzbC0zOSAtMjk2aC0yNTR2LTc1OWgtMzA2djc1OWgtMjU1djI5NmgyNTV2MjE4cTAgMTg2IDEwNCAyODguNXQyNzcgMTAyLjVxMTQ3IDAgMjI4IC0xMnoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iZ2l0aHViIiB1bmljb2RlPSImI3hmMDliOyIgCmQ9Ik03NjggMTQwOHEyMDkgMCAzODUuNSAtMTAzdDI3OS41IC0yNzkuNXQxMDMgLTM4NS41cTAgLTI1MSAtMTQ2LjUgLTQ1MS41dC0zNzguNSAtMjc3LjVxLTI3IC01IC00MCA3dC0xMyAzMHEwIDMgMC41IDc2LjV0MC41IDEzNC41cTAgOTcgLTUyIDE0MnE1NyA2IDEwMi41IDE4dDk0IDM5dDgxIDY2LjV0NTMgMTA1dDIwLjUgMTUwLjVxMCAxMTkgLTc5IDIwNnEzNyA5MSAtOCAyMDRxLTI4IDkgLTgxIC0xMXQtOTIgLTQ0bC0zOCAtMjQKcS05MyAyNiAtMTkyIDI2dC0xOTIgLTI2cS0xNiAxMSAtNDIuNSAyN3QtODMuNSAzOC41dC04NSAxMy41cS00NSAtMTEzIC04IC0yMDRxLTc5IC04NyAtNzkgLTIwNnEwIC04NSAyMC41IC0xNTB0NTIuNSAtMTA1dDgwLjUgLTY3dDk0IC0zOXQxMDIuNSAtMThxLTM5IC0zNiAtNDkgLTEwM3EtMjEgLTEwIC00NSAtMTV0LTU3IC01dC02NS41IDIxLjV0LTU1LjUgNjIuNXEtMTkgMzIgLTQ4LjUgNTJ0LTQ5LjUgMjRsLTIwIDNxLTIxIDAgLTI5IC00LjUKdC01IC0xMS41dDkgLTE0dDEzIC0xMmw3IC01cTIyIC0xMCA0My41IC0zOHQzMS41IC01MWwxMCAtMjNxMTMgLTM4IDQ0IC02MS41dDY3IC0zMHQ2OS41IC03dDU1LjUgMy41bDIzIDRxMCAtMzggMC41IC04OC41dDAuNSAtNTQuNXEwIC0xOCAtMTMgLTMwdC00MCAtN3EtMjMyIDc3IC0zNzguNSAyNzcuNXQtMTQ2LjUgNDUxLjVxMCAyMDkgMTAzIDM4NS41dDI3OS41IDI3OS41dDM4NS41IDEwM3pNMjkxIDMwNXEzIDcgLTcgMTIKcS0xMCAzIC0xMyAtMnEtMyAtNyA3IC0xMnE5IC02IDEzIDJ6TTMyMiAyNzFxNyA1IC0yIDE2cS0xMCA5IC0xNiAzcS03IC01IDIgLTE2cTEwIC0xMCAxNiAtM3pNMzUyIDIyNnE5IDcgMCAxOXEtOCAxMyAtMTcgNnEtOSAtNSAwIC0xOHQxNyAtN3pNMzk0IDE4NHE4IDggLTQgMTlxLTEyIDEyIC0yMCAzcS05IC04IDQgLTE5cTEyIC0xMiAyMCAtM3pNNDUxIDE1OXEzIDExIC0xMyAxNnEtMTUgNCAtMTkgLTd0MTMgLTE1cTE1IC02IDE5IDZ6Ck01MTQgMTU0cTAgMTMgLTE3IDExcS0xNiAwIC0xNiAtMTFxMCAtMTMgMTcgLTExcTE2IDAgMTYgMTF6TTU3MiAxNjRxLTIgMTEgLTE4IDlxLTE2IC0zIC0xNCAtMTV0MTggLTh0MTQgMTR6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InVubG9jayIgdW5pY29kZT0iJiN4ZjA5YzsiIGhvcml6LWFkdi14PSIxNjY0IiAKZD0iTTE2NjQgOTYwdi0yNTZxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC02NHEtMjYgMCAtNDUgMTl0LTE5IDQ1djI1NnEwIDEwNiAtNzUgMTgxdC0xODEgNzV0LTE4MSAtNzV0LTc1IC0xODF2LTE5Mmg5NnE0MCAwIDY4IC0yOHQyOCAtNjh2LTU3NnEwIC00MCAtMjggLTY4dC02OCAtMjhoLTk2MHEtNDAgMCAtNjggMjh0LTI4IDY4djU3NnEwIDQwIDI4IDY4dDY4IDI4aDY3MnYxOTJxMCAxODUgMTMxLjUgMzE2LjV0MzE2LjUgMTMxLjUKdDMxNi41IC0xMzEuNXQxMzEuNSAtMzE2LjV6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9ImNyZWRpdF9jYXJkIiB1bmljb2RlPSImI3hmMDlkOyIgaG9yaXotYWR2LXg9IjE5MjAiIApkPSJNMTc2MCAxNDA4cTY2IDAgMTEzIC00N3Q0NyAtMTEzdi0xMjE2cTAgLTY2IC00NyAtMTEzdC0xMTMgLTQ3aC0xNjAwcS02NiAwIC0xMTMgNDd0LTQ3IDExM3YxMjE2cTAgNjYgNDcgMTEzdDExMyA0N2gxNjAwek0xNjAgMTI4MHEtMTMgMCAtMjIuNSAtOS41dC05LjUgLTIyLjV2LTIyNGgxNjY0djIyNHEwIDEzIC05LjUgMjIuNXQtMjIuNSA5LjVoLTE2MDB6TTE3NjAgMHExMyAwIDIyLjUgOS41dDkuNSAyMi41djYwOGgtMTY2NHYtNjA4CnEwIC0xMyA5LjUgLTIyLjV0MjIuNSAtOS41aDE2MDB6TTI1NiAxMjh2MTI4aDI1NnYtMTI4aC0yNTZ6TTY0MCAxMjh2MTI4aDM4NHYtMTI4aC0zODR6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InJzcyIgdW5pY29kZT0iJiN4ZjA5ZTsiIGhvcml6LWFkdi14PSIxNDA4IiAKZD0iTTM4NCAxOTJxMCAtODAgLTU2IC0xMzZ0LTEzNiAtNTZ0LTEzNiA1NnQtNTYgMTM2dDU2IDEzNnQxMzYgNTZ0MTM2IC01NnQ1NiAtMTM2ek04OTYgNjlxMiAtMjggLTE3IC00OHEtMTggLTIxIC00NyAtMjFoLTEzNXEtMjUgMCAtNDMgMTYuNXQtMjAgNDEuNXEtMjIgMjI5IC0xODQuNSAzOTEuNXQtMzkxLjUgMTg0LjVxLTI1IDIgLTQxLjUgMjB0LTE2LjUgNDN2MTM1cTAgMjkgMjEgNDdxMTcgMTcgNDMgMTdoNXExNjAgLTEzIDMwNiAtODAuNQp0MjU5IC0xODEuNXExMTQgLTExMyAxODEuNSAtMjU5dDgwLjUgLTMwNnpNMTQwOCA2N3EyIC0yNyAtMTggLTQ3cS0xOCAtMjAgLTQ2IC0yMGgtMTQzcS0yNiAwIC00NC41IDE3LjV0LTE5LjUgNDIuNXEtMTIgMjE1IC0xMDEgNDA4LjV0LTIzMS41IDMzNnQtMzM2IDIzMS41dC00MDguNSAxMDJxLTI1IDEgLTQyLjUgMTkuNXQtMTcuNSA0My41djE0M3EwIDI4IDIwIDQ2cTE4IDE4IDQ0IDE4aDNxMjYyIC0xMyA1MDEuNSAtMTIwdDQyNS41IC0yOTQKcTE4NyAtMTg2IDI5NCAtNDI1LjV0MTIwIC01MDEuNXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iaGRkIiB1bmljb2RlPSImI3hmMGEwOyIgCmQ9Ik0xMDQwIDMyMHEwIC0zMyAtMjMuNSAtNTYuNXQtNTYuNSAtMjMuNXQtNTYuNSAyMy41dC0yMy41IDU2LjV0MjMuNSA1Ni41dDU2LjUgMjMuNXQ1Ni41IC0yMy41dDIzLjUgLTU2LjV6TTEyOTYgMzIwcTAgLTMzIC0yMy41IC01Ni41dC01Ni41IC0yMy41dC01Ni41IDIzLjV0LTIzLjUgNTYuNXQyMy41IDU2LjV0NTYuNSAyMy41dDU2LjUgLTIzLjV0MjMuNSAtNTYuNXpNMTQwOCAxNjB2MzIwcTAgMTMgLTkuNSAyMi41dC0yMi41IDkuNQpoLTEyMTZxLTEzIDAgLTIyLjUgLTkuNXQtOS41IC0yMi41di0zMjBxMCAtMTMgOS41IC0yMi41dDIyLjUgLTkuNWgxMjE2cTEzIDAgMjIuNSA5LjV0OS41IDIyLjV6TTE3OCA2NDBoMTE4MGwtMTU3IDQ4MnEtNCAxMyAtMTYgMjEuNXQtMjYgOC41aC03ODJxLTE0IDAgLTI2IC04LjV0LTE2IC0yMS41ek0xNTM2IDQ4MHYtMzIwcTAgLTY2IC00NyAtMTEzdC0xMTMgLTQ3aC0xMjE2cS02NiAwIC0xMTMgNDd0LTQ3IDExM3YzMjBxMCAyNSAxNiA3NQpsMTk3IDYwNnExNyA1MyA2MyA4NnQxMDEgMzNoNzgycTU1IDAgMTAxIC0zM3Q2MyAtODZsMTk3IC02MDZxMTYgLTUwIDE2IC03NXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iYnVsbGhvcm4iIHVuaWNvZGU9IiYjeGYwYTE7IiBob3Jpei1hZHYteD0iMTc5MiIgCmQ9Ik0xNjY0IDg5NnE1MyAwIDkwLjUgLTM3LjV0MzcuNSAtOTAuNXQtMzcuNSAtOTAuNXQtOTAuNSAtMzcuNXYtMzg0cTAgLTUyIC0zOCAtOTB0LTkwIC0zOHEtNDE3IDM0NyAtODEyIDM4MHEtNTggLTE5IC05MSAtNjZ0LTMxIC0xMDAuNXQ0MCAtOTIuNXEtMjAgLTMzIC0yMyAtNjUuNXQ2IC01OHQzMy41IC01NXQ0OCAtNTB0NjEuNSAtNTAuNXEtMjkgLTU4IC0xMTEuNSAtODN0LTE2OC41IC0xMS41dC0xMzIgNTUuNXEtNyAyMyAtMjkuNSA4Ny41CnQtMzIgOTQuNXQtMjMgODl0LTE1IDEwMXQzLjUgOTguNXQyMiAxMTAuNWgtMTIycS02NiAwIC0xMTMgNDd0LTQ3IDExM3YxOTJxMCA2NiA0NyAxMTN0MTEzIDQ3aDQ4MHE0MzUgMCA4OTYgMzg0cTUyIDAgOTAgLTM4dDM4IC05MHYtMzg0ek0xNTM2IDI5MnY5NTRxLTM5NCAtMzAyIC03NjggLTM0M3YtMjcwcTM3NyAtNDIgNzY4IC0zNDF6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9ImJlbGwiIHVuaWNvZGU9IiYjeGYwYTI7IiBob3Jpei1hZHYteD0iMTc5MiIgCmQ9Ik05MTIgLTE2MHEwIDE2IC0xNiAxNnEtNTkgMCAtMTAxLjUgNDIuNXQtNDIuNSAxMDEuNXEwIDE2IC0xNiAxNnQtMTYgLTE2cTAgLTczIDUxLjUgLTEyNC41dDEyNC41IC01MS41cTE2IDAgMTYgMTZ6TTI0NiAxMjhoMTMwMHEtMjY2IDMwMCAtMjY2IDgzMnEwIDUxIC0yNCAxMDV0LTY5IDEwM3QtMTIxLjUgODAuNXQtMTY5LjUgMzEuNXQtMTY5LjUgLTMxLjV0LTEyMS41IC04MC41dC02OSAtMTAzdC0yNCAtMTA1cTAgLTUzMiAtMjY2IC04MzJ6Ck0xNzI4IDEyOHEwIC01MiAtMzggLTkwdC05MCAtMzhoLTQ0OHEwIC0xMDYgLTc1IC0xODF0LTE4MSAtNzV0LTE4MSA3NXQtNzUgMTgxaC00NDhxLTUyIDAgLTkwIDM4dC0zOCA5MHE1MCA0MiA5MSA4OHQ4NSAxMTkuNXQ3NC41IDE1OC41dDUwIDIwNnQxOS41IDI2MHEwIDE1MiAxMTcgMjgyLjV0MzA3IDE1OC41cS04IDE5IC04IDM5cTAgNDAgMjggNjh0NjggMjh0NjggLTI4dDI4IC02OHEwIC0yMCAtOCAtMzlxMTkwIC0yOCAzMDcgLTE1OC41CnQxMTcgLTI4Mi41cTAgLTEzOSAxOS41IC0yNjB0NTAgLTIwNnQ3NC41IC0xNTguNXQ4NSAtMTE5LjV0OTEgLTg4eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJjZXJ0aWZpY2F0ZSIgdW5pY29kZT0iJiN4ZjBhMzsiIApkPSJNMTM3NiA2NDBsMTM4IC0xMzVxMzAgLTI4IDIwIC03MHEtMTIgLTQxIC01MiAtNTFsLTE4OCAtNDhsNTMgLTE4NnExMiAtNDEgLTE5IC03MHEtMjkgLTMxIC03MCAtMTlsLTE4NiA1M2wtNDggLTE4OHEtMTAgLTQwIC01MSAtNTJxLTEyIC0yIC0xOSAtMnEtMzEgMCAtNTEgMjJsLTEzNSAxMzhsLTEzNSAtMTM4cS0yOCAtMzAgLTcwIC0yMHEtNDEgMTEgLTUxIDUybC00OCAxODhsLTE4NiAtNTNxLTQxIC0xMiAtNzAgMTlxLTMxIDI5IC0xOSA3MApsNTMgMTg2bC0xODggNDhxLTQwIDEwIC01MiA1MXEtMTAgNDIgMjAgNzBsMTM4IDEzNWwtMTM4IDEzNXEtMzAgMjggLTIwIDcwcTEyIDQxIDUyIDUxbDE4OCA0OGwtNTMgMTg2cS0xMiA0MSAxOSA3MHEyOSAzMSA3MCAxOWwxODYgLTUzbDQ4IDE4OHExMCA0MSA1MSA1MXE0MSAxMiA3MCAtMTlsMTM1IC0xMzlsMTM1IDEzOXEyOSAzMCA3MCAxOXE0MSAtMTAgNTEgLTUxbDQ4IC0xODhsMTg2IDUzcTQxIDEyIDcwIC0xOXEzMSAtMjkgMTkgLTcwCmwtNTMgLTE4NmwxODggLTQ4cTQwIC0xMCA1MiAtNTFxMTAgLTQyIC0yMCAtNzB6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9ImhhbmRfcmlnaHQiIHVuaWNvZGU9IiYjeGYwYTQ7IiBob3Jpei1hZHYteD0iMTc5MiIgCmQ9Ik0yNTYgMTkycTAgMjYgLTE5IDQ1dC00NSAxOXQtNDUgLTE5dC0xOSAtNDV0MTkgLTQ1dDQ1IC0xOXQ0NSAxOXQxOSA0NXpNMTY2NCA3NjhxMCA1MSAtMzkgODkuNXQtODkgMzguNWgtNTc2cTAgMjAgMTUgNDguNXQzMyA1NXQzMyA2OHQxNSA4NC41cTAgNjcgLTQ0LjUgOTcuNXQtMTE1LjUgMzAuNXEtMjQgMCAtOTAgLTEzOXEtMjQgLTQ0IC0zNyAtNjVxLTQwIC02NCAtMTEyIC0xNDVxLTcxIC04MSAtMTAxIC0xMDYKcS02OSAtNTcgLTE0MCAtNTdoLTMydi02NDBoMzJxNzIgMCAxNjcgLTMydDE5My41IC02NHQxNzkuNSAtMzJxMTg5IDAgMTg5IDE2N3EwIDI2IC01IDU2cTMwIDE2IDQ3LjUgNTIuNXQxNy41IDczLjV0LTE4IDY5cTUzIDUwIDUzIDExOXEwIDI1IC0xMCA1NS41dC0yNSA0Ny41aDMzMXE1MiAwIDkwIDM4dDM4IDkwek0xNzkyIDc2OXEwIC0xMDUgLTc1LjUgLTE4MXQtMTgwLjUgLTc2aC0xNjlxLTQgLTYyIC0zNyAtMTE5cTMgLTIxIDMgLTQzCnEwIC0xMDEgLTYwIC0xNzhxMSAtMTM5IC04NSAtMjE5LjV0LTIyNyAtODAuNXEtMTMzIDAgLTMyMiA2OXEtMTY0IDU5IC0yMjMgNTloLTI4OHEtNTMgMCAtOTAuNSAzNy41dC0zNy41IDkwLjV2NjQwcTAgNTMgMzcuNSA5MC41dDkwLjUgMzcuNWgyODhxMTAgMCAyMS41IDQuNXQyMy41IDE0dDIyLjUgMTh0MjQgMjIuNXQyMC41IDIxLjV0MTkgMjEuNXQxNCAxN3E2NSA3NCAxMDAgMTI5cTEzIDIxIDMzIDYydDM3IDcydDQwLjUgNjN0NTUgNDkuNQp0NjkuNSAxNy41cTEyNSAwIDIwNi41IC02N3Q4MS41IC0xODlxMCAtNjggLTIyIC0xMjhoMzc0cTEwNCAwIDE4MCAtNzZ0NzYgLTE3OXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iaGFuZF9sZWZ0IiB1bmljb2RlPSImI3hmMGE1OyIgaG9yaXotYWR2LXg9IjE3OTIiIApkPSJNMTM3NiAxMjhoMzJ2NjQwaC0zMnEtMzUgMCAtNjcuNSAxMnQtNjIuNSAzN3QtNTAgNDZ0LTQ5IDU0cS04IDkgLTEyIDE0cS03MiA4MSAtMTEyIDE0NXEtMTQgMjIgLTM4IDY4cS0xIDMgLTEwLjUgMjIuNXQtMTguNSAzNnQtMjAgMzUuNXQtMjEuNSAzMC41dC0xOC41IDExLjVxLTcxIDAgLTExNS41IC0zMC41dC00NC41IC05Ny41cTAgLTQzIDE1IC04NC41dDMzIC02OHQzMyAtNTV0MTUgLTQ4LjVoLTU3NnEtNTAgMCAtODkgLTM4LjUKdC0zOSAtODkuNXEwIC01MiAzOCAtOTB0OTAgLTM4aDMzMXEtMTUgLTE3IC0yNSAtNDcuNXQtMTAgLTU1LjVxMCAtNjkgNTMgLTExOXEtMTggLTMyIC0xOCAtNjl0MTcuNSAtNzMuNXQ0Ny41IC01Mi41cS00IC0yNCAtNCAtNTZxMCAtODUgNDguNSAtMTI2dDEzNS41IC00MXE4NCAwIDE4MyAzMnQxOTQgNjR0MTY3IDMyek0xNjY0IDE5MnEwIDI2IC0xOSA0NXQtNDUgMTl0LTQ1IC0xOXQtMTkgLTQ1dDE5IC00NXQ0NSAtMTl0NDUgMTl0MTkgNDV6Ck0xNzkyIDc2OHYtNjQwcTAgLTUzIC0zNy41IC05MC41dC05MC41IC0zNy41aC0yODhxLTU5IDAgLTIyMyAtNTlxLTE5MCAtNjkgLTMxNyAtNjlxLTE0MiAwIC0yMzAgNzcuNXQtODcgMjE3LjVsMSA1cS02MSA3NiAtNjEgMTc4cTAgMjIgMyA0M3EtMzMgNTcgLTM3IDExOWgtMTY5cS0xMDUgMCAtMTgwLjUgNzZ0LTc1LjUgMTgxcTAgMTAzIDc2IDE3OXQxODAgNzZoMzc0cS0yMiA2MCAtMjIgMTI4cTAgMTIyIDgxLjUgMTg5dDIwNi41IDY3CnEzOCAwIDY5LjUgLTE3LjV0NTUgLTQ5LjV0NDAuNSAtNjN0MzcgLTcydDMzIC02MnEzNSAtNTUgMTAwIC0xMjlxMiAtMyAxNCAtMTd0MTkgLTIxLjV0MjAuNSAtMjEuNXQyNCAtMjIuNXQyMi41IC0xOHQyMy41IC0xNHQyMS41IC00LjVoMjg4cTUzIDAgOTAuNSAtMzcuNXQzNy41IC05MC41eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJoYW5kX3VwIiB1bmljb2RlPSImI3hmMGE2OyIgCmQ9Ik0xMjgwIC02NHEwIDI2IC0xOSA0NXQtNDUgMTl0LTQ1IC0xOXQtMTkgLTQ1dDE5IC00NXQ0NSAtMTl0NDUgMTl0MTkgNDV6TTE0MDggNzAwcTAgMTg5IC0xNjcgMTg5cS0yNiAwIC01NiAtNXEtMTYgMzAgLTUyLjUgNDcuNXQtNzMuNSAxNy41dC02OSAtMThxLTUwIDUzIC0xMTkgNTNxLTI1IDAgLTU1LjUgLTEwdC00Ny41IC0yNXYzMzFxMCA1MiAtMzggOTB0LTkwIDM4cS01MSAwIC04OS41IC0zOXQtMzguNSAtODl2LTU3NgpxLTIwIDAgLTQ4LjUgMTV0LTU1IDMzdC02OCAzM3QtODQuNSAxNXEtNjcgMCAtOTcuNSAtNDQuNXQtMzAuNSAtMTE1LjVxMCAtMjQgMTM5IC05MHE0NCAtMjQgNjUgLTM3cTY0IC00MCAxNDUgLTExMnE4MSAtNzEgMTA2IC0xMDFxNTcgLTY5IDU3IC0xNDB2LTMyaDY0MHYzMnEwIDcyIDMyIDE2N3Q2NCAxOTMuNXQzMiAxNzkuNXpNMTUzNiA3MDVxMCAtMTMzIC02OSAtMzIycS01OSAtMTY0IC01OSAtMjIzdi0yODhxMCAtNTMgLTM3LjUgLTkwLjUKdC05MC41IC0zNy41aC02NDBxLTUzIDAgLTkwLjUgMzcuNXQtMzcuNSA5MC41djI4OHEwIDEwIC00LjUgMjEuNXQtMTQgMjMuNXQtMTggMjIuNXQtMjIuNSAyNHQtMjEuNSAyMC41dC0yMS41IDE5dC0xNyAxNHEtNzQgNjUgLTEyOSAxMDBxLTIxIDEzIC02MiAzM3QtNzIgMzd0LTYzIDQwLjV0LTQ5LjUgNTV0LTE3LjUgNjkuNXEwIDEyNSA2NyAyMDYuNXQxODkgODEuNXE2OCAwIDEyOCAtMjJ2Mzc0cTAgMTA0IDc2IDE4MHQxNzkgNzYKcTEwNSAwIDE4MSAtNzUuNXQ3NiAtMTgwLjV2LTE2OXE2MiAtNCAxMTkgLTM3cTIxIDMgNDMgM3ExMDEgMCAxNzggLTYwcTEzOSAxIDIxOS41IC04NXQ4MC41IC0yMjd6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9ImhhbmRfZG93biIgdW5pY29kZT0iJiN4ZjBhNzsiIApkPSJNMTQwOCA1NzZxMCA4NCAtMzIgMTgzdC02NCAxOTR0LTMyIDE2N3YzMmgtNjQwdi0zMnEwIC0zNSAtMTIgLTY3LjV0LTM3IC02Mi41dC00NiAtNTB0LTU0IC00OXEtOSAtOCAtMTQgLTEycS04MSAtNzIgLTE0NSAtMTEycS0yMiAtMTQgLTY4IC0zOHEtMyAtMSAtMjIuNSAtMTAuNXQtMzYgLTE4LjV0LTM1LjUgLTIwdC0zMC41IC0yMS41dC0xMS41IC0xOC41cTAgLTcxIDMwLjUgLTExNS41dDk3LjUgLTQ0LjVxNDMgMCA4NC41IDE1dDY4IDMzCnQ1NSAzM3Q0OC41IDE1di01NzZxMCAtNTAgMzguNSAtODl0ODkuNSAtMzlxNTIgMCA5MCAzOHQzOCA5MHYzMzFxNDYgLTM1IDEwMyAtMzVxNjkgMCAxMTkgNTNxMzIgLTE4IDY5IC0xOHQ3My41IDE3LjV0NTIuNSA0Ny41cTI0IC00IDU2IC00cTg1IDAgMTI2IDQ4LjV0NDEgMTM1LjV6TTEyODAgMTM0NHEwIDI2IC0xOSA0NXQtNDUgMTl0LTQ1IC0xOXQtMTkgLTQ1dDE5IC00NXQ0NSAtMTl0NDUgMTl0MTkgNDV6TTE1MzYgNTgwCnEwIC0xNDIgLTc3LjUgLTIzMHQtMjE3LjUgLTg3bC01IDFxLTc2IC02MSAtMTc4IC02MXEtMjIgMCAtNDMgM3EtNTQgLTMwIC0xMTkgLTM3di0xNjlxMCAtMTA1IC03NiAtMTgwLjV0LTE4MSAtNzUuNXEtMTAzIDAgLTE3OSA3NnQtNzYgMTgwdjM3NHEtNTQgLTIyIC0xMjggLTIycS0xMjEgMCAtMTg4LjUgODEuNXQtNjcuNSAyMDYuNXEwIDM4IDE3LjUgNjkuNXQ0OS41IDU1dDYzIDQwLjV0NzIgMzd0NjIgMzNxNTUgMzUgMTI5IDEwMApxMyAyIDE3IDE0dDIxLjUgMTl0MjEuNSAyMC41dDIyLjUgMjR0MTggMjIuNXQxNCAyMy41dDQuNSAyMS41djI4OHEwIDUzIDM3LjUgOTAuNXQ5MC41IDM3LjVoNjQwcTUzIDAgOTAuNSAtMzcuNXQzNy41IC05MC41di0yODhxMCAtNTkgNTkgLTIyM3E2OSAtMTkwIDY5IC0zMTd6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9ImNpcmNsZV9hcnJvd19sZWZ0IiB1bmljb2RlPSImI3hmMGE4OyIgCmQ9Ik0xMjgwIDU3NnYxMjhxMCAyNiAtMTkgNDV0LTQ1IDE5aC01MDJsMTg5IDE4OXExOSAxOSAxOSA0NXQtMTkgNDVsLTkxIDkxcS0xOCAxOCAtNDUgMTh0LTQ1IC0xOGwtMzYyIC0zNjJsLTkxIC05MXEtMTggLTE4IC0xOCAtNDV0MTggLTQ1bDkxIC05MWwzNjIgLTM2MnExOCAtMTggNDUgLTE4dDQ1IDE4bDkxIDkxcTE4IDE4IDE4IDQ1dC0xOCA0NWwtMTg5IDE4OWg1MDJxMjYgMCA0NSAxOXQxOSA0NXpNMTUzNiA2NDAKcTAgLTIwOSAtMTAzIC0zODUuNXQtMjc5LjUgLTI3OS41dC0zODUuNSAtMTAzdC0zODUuNSAxMDN0LTI3OS41IDI3OS41dC0xMDMgMzg1LjV0MTAzIDM4NS41dDI3OS41IDI3OS41dDM4NS41IDEwM3QzODUuNSAtMTAzdDI3OS41IC0yNzkuNXQxMDMgLTM4NS41eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJjaXJjbGVfYXJyb3dfcmlnaHQiIHVuaWNvZGU9IiYjeGYwYTk7IiAKZD0iTTEyODUgNjQwcTAgMjcgLTE4IDQ1bC05MSA5MWwtMzYyIDM2MnEtMTggMTggLTQ1IDE4dC00NSAtMThsLTkxIC05MXEtMTggLTE4IC0xOCAtNDV0MTggLTQ1bDE4OSAtMTg5aC01MDJxLTI2IDAgLTQ1IC0xOXQtMTkgLTQ1di0xMjhxMCAtMjYgMTkgLTQ1dDQ1IC0xOWg1MDJsLTE4OSAtMTg5cS0xOSAtMTkgLTE5IC00NXQxOSAtNDVsOTEgLTkxcTE4IC0xOCA0NSAtMTh0NDUgMThsMzYyIDM2Mmw5MSA5MXExOCAxOCAxOCA0NXpNMTUzNiA2NDAKcTAgLTIwOSAtMTAzIC0zODUuNXQtMjc5LjUgLTI3OS41dC0zODUuNSAtMTAzdC0zODUuNSAxMDN0LTI3OS41IDI3OS41dC0xMDMgMzg1LjV0MTAzIDM4NS41dDI3OS41IDI3OS41dDM4NS41IDEwM3QzODUuNSAtMTAzdDI3OS41IC0yNzkuNXQxMDMgLTM4NS41eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJjaXJjbGVfYXJyb3dfdXAiIHVuaWNvZGU9IiYjeGYwYWE7IiAKZD0iTTEyODQgNjQxcTAgMjcgLTE4IDQ1bC0zNjIgMzYybC05MSA5MXEtMTggMTggLTQ1IDE4dC00NSAtMThsLTkxIC05MWwtMzYyIC0zNjJxLTE4IC0xOCAtMTggLTQ1dDE4IC00NWw5MSAtOTFxMTggLTE4IDQ1IC0xOHQ0NSAxOGwxODkgMTg5di01MDJxMCAtMjYgMTkgLTQ1dDQ1IC0xOWgxMjhxMjYgMCA0NSAxOXQxOSA0NXY1MDJsMTg5IC0xODlxMTkgLTE5IDQ1IC0xOXQ0NSAxOWw5MSA5MXExOCAxOCAxOCA0NXpNMTUzNiA2NDAKcTAgLTIwOSAtMTAzIC0zODUuNXQtMjc5LjUgLTI3OS41dC0zODUuNSAtMTAzdC0zODUuNSAxMDN0LTI3OS41IDI3OS41dC0xMDMgMzg1LjV0MTAzIDM4NS41dDI3OS41IDI3OS41dDM4NS41IDEwM3QzODUuNSAtMTAzdDI3OS41IC0yNzkuNXQxMDMgLTM4NS41eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJjaXJjbGVfYXJyb3dfZG93biIgdW5pY29kZT0iJiN4ZjBhYjsiIApkPSJNMTI4NCA2MzlxMCAyNyAtMTggNDVsLTkxIDkxcS0xOCAxOCAtNDUgMTh0LTQ1IC0xOGwtMTg5IC0xODl2NTAycTAgMjYgLTE5IDQ1dC00NSAxOWgtMTI4cS0yNiAwIC00NSAtMTl0LTE5IC00NXYtNTAybC0xODkgMTg5cS0xOSAxOSAtNDUgMTl0LTQ1IC0xOWwtOTEgLTkxcS0xOCAtMTggLTE4IC00NXQxOCAtNDVsMzYyIC0zNjJsOTEgLTkxcTE4IC0xOCA0NSAtMTh0NDUgMThsOTEgOTFsMzYyIDM2MnExOCAxOCAxOCA0NXpNMTUzNiA2NDAKcTAgLTIwOSAtMTAzIC0zODUuNXQtMjc5LjUgLTI3OS41dC0zODUuNSAtMTAzdC0zODUuNSAxMDN0LTI3OS41IDI3OS41dC0xMDMgMzg1LjV0MTAzIDM4NS41dDI3OS41IDI3OS41dDM4NS41IDEwM3QzODUuNSAtMTAzdDI3OS41IC0yNzkuNXQxMDMgLTM4NS41eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJnbG9iZSIgdW5pY29kZT0iJiN4ZjBhYzsiIApkPSJNNzY4IDE0MDhxMjA5IDAgMzg1LjUgLTEwM3QyNzkuNSAtMjc5LjV0MTAzIC0zODUuNXQtMTAzIC0zODUuNXQtMjc5LjUgLTI3OS41dC0zODUuNSAtMTAzdC0zODUuNSAxMDN0LTI3OS41IDI3OS41dC0xMDMgMzg1LjV0MTAzIDM4NS41dDI3OS41IDI3OS41dDM4NS41IDEwM3pNMTA0MiA4ODdxLTIgLTEgLTkuNSAtOS41dC0xMy41IC05LjVxMiAwIDQuNSA1dDUgMTF0My41IDdxNiA3IDIyIDE1cTE0IDYgNTIgMTJxMzQgOCA1MSAtMTEKcS0yIDIgOS41IDEzdDE0LjUgMTJxMyAyIDE1IDQuNXQxNSA3LjVsMiAyMnEtMTIgLTEgLTE3LjUgN3QtNi41IDIxcTAgLTIgLTYgLThxMCA3IC00LjUgOHQtMTEuNSAtMXQtOSAtMXEtMTAgMyAtMTUgNy41dC04IDE2LjV0LTQgMTVxLTIgNSAtOS41IDExdC05LjUgMTBxLTEgMiAtMi41IDUuNXQtMyA2LjV0LTQgNS41dC01LjUgMi41dC03IC01dC03LjUgLTEwdC00LjUgLTVxLTMgMiAtNiAxLjV0LTQuNSAtMXQtNC41IC0zdC01IC0zLjUKcS0zIC0yIC04LjUgLTN0LTguNSAtMnExNSA1IC0xIDExcS0xMCA0IC0xNiAzcTkgNCA3LjUgMTJ0LTguNSAxNGg1cS0xIDQgLTguNSA4LjV0LTE3LjUgOC41dC0xMyA2cS04IDUgLTM0IDkuNXQtMzMgMC41cS01IC02IC00LjUgLTEwLjV0NCAtMTR0My41IC0xMi41cTEgLTYgLTUuNSAtMTN0LTYuNSAtMTJxMCAtNyAxNCAtMTUuNXQxMCAtMjEuNXEtMyAtOCAtMTYgLTE2dC0xNiAtMTJxLTUgLTggLTEuNSAtMTguNXQxMC41IC0xNi41CnEyIC0yIDEuNSAtNHQtMy41IC00LjV0LTUuNSAtNHQtNi41IC0zLjVsLTMgLTJxLTExIC01IC0yMC41IDZ0LTEzLjUgMjZxLTcgMjUgLTE2IDMwcS0yMyA4IC0yOSAtMXEtNSAxMyAtNDEgMjZxLTI1IDkgLTU4IDRxNiAxIDAgMTVxLTcgMTUgLTE5IDEycTMgNiA0IDE3LjV0MSAxMy41cTMgMTMgMTIgMjNxMSAxIDcgOC41dDkuNSAxMy41dDAuNSA2cTM1IC00IDUwIDExcTUgNSAxMS41IDE3dDEwLjUgMTdxOSA2IDE0IDUuNXQxNC41IC01LjUKdDE0LjUgLTVxMTQgLTEgMTUuNSAxMXQtNy41IDIwcTEyIC0xIDMgMTdxLTQgNyAtOCA5cS0xMiA0IC0yNyAtNXEtOCAtNCAyIC04cS0xIDEgLTkuNSAtMTAuNXQtMTYuNSAtMTcuNXQtMTYgNXEtMSAxIC01LjUgMTMuNXQtOS41IDEzLjVxLTggMCAtMTYgLTE1cTMgOCAtMTEgMTV0LTI0IDhxMTkgMTIgLTggMjdxLTcgNCAtMjAuNSA1dC0xOS41IC00cS01IC03IC01LjUgLTExLjV0NSAtOHQxMC41IC01LjV0MTEuNSAtNHQ4LjUgLTMKcTE0IC0xMCA4IC0xNHEtMiAtMSAtOC41IC0zLjV0LTExLjUgLTQuNXQtNiAtNHEtMyAtNCAwIC0xNHQtMiAtMTRxLTUgNSAtOSAxNy41dC03IDE2LjVxNyAtOSAtMjUgLTZsLTEwIDFxLTQgMCAtMTYgLTJ0LTIwLjUgLTF0LTEzLjUgOHEtNCA4IDAgMjBxMSA0IDQgMnEtNCAzIC0xMSA5LjV0LTEwIDguNXEtNDYgLTE1IC05NCAtNDFxNiAtMSAxMiAxcTUgMiAxMyA2LjV0MTAgNS41cTM0IDE0IDQyIDdsNSA1cTE0IC0xNiAyMCAtMjUKcS03IDQgLTMwIDFxLTIwIC02IC0yMiAtMTJxNyAtMTIgNSAtMThxLTQgMyAtMTEuNSAxMHQtMTQuNSAxMXQtMTUgNXEtMTYgMCAtMjIgLTFxLTE0NiAtODAgLTIzNSAtMjIycTcgLTcgMTIgLThxNCAtMSA1IC05dDIuNSAtMTF0MTEuNSAzcTkgLTggMyAtMTlxMSAxIDQ0IC0yN3ExOSAtMTcgMjEgLTIxcTMgLTExIC0xMCAtMThxLTEgMiAtOSA5dC05IDRxLTMgLTUgMC41IC0xOC41dDEwLjUgLTEyLjVxLTcgMCAtOS41IC0xNnQtMi41IC0zNS41CnQtMSAtMjMuNWwyIC0xcS0zIC0xMiA1LjUgLTM0LjV0MjEuNSAtMTkuNXEtMTMgLTMgMjAgLTQzcTYgLTggOCAtOXEzIC0yIDEyIC03LjV0MTUgLTEwdDEwIC0xMC41cTQgLTUgMTAgLTIyLjV0MTQgLTIzLjVxLTIgLTYgOS41IC0yMHQxMC41IC0yM3EtMSAwIC0yLjUgLTF0LTIuNSAtMXEzIC03IDE1LjUgLTE0dDE1LjUgLTEzcTEgLTMgMiAtMTB0MyAtMTF0OCAtMnEyIDIwIC0yNCA2MnEtMTUgMjUgLTE3IDI5cS0zIDUgLTUuNSAxNS41CnQtNC41IDE0LjVxMiAwIDYgLTEuNXQ4LjUgLTMuNXQ3LjUgLTR0MiAtM3EtMyAtNyAyIC0xNy41dDEyIC0xOC41dDE3IC0xOXQxMiAtMTNxNiAtNiAxNCAtMTkuNXQwIC0xMy41cTkgMCAyMCAtMTAuNXQxNyAtMTkuNXE1IC04IDggLTI2dDUgLTI0cTIgLTcgOC41IC0xMy41dDEyLjUgLTkuNWwxNiAtOHQxMyAtN3E1IC0yIDE4LjUgLTEwLjV0MjEuNSAtMTEuNXExMCAtNCAxNiAtNHQxNC41IDIuNXQxMy41IDMuNXExNSAyIDI5IC0xNXQyMSAtMjEKcTM2IC0xOSA1NSAtMTFxLTIgLTEgMC41IC03LjV0OCAtMTUuNXQ5IC0xNC41dDUuNSAtOC41cTUgLTYgMTggLTE1dDE4IC0xNXE2IDQgNyA5cS0zIC04IDcgLTIwdDE4IC0xMHExNCAzIDE0IDMycS0zMSAtMTUgLTQ5IDE4cTAgMSAtMi41IDUuNXQtNCA4LjV0LTIuNSA4LjV0MCA3LjV0NSAzcTkgMCAxMCAzLjV0LTIgMTIuNXQtNCAxM3EtMSA4IC0xMSAyMHQtMTIgMTVxLTUgLTkgLTE2IC04dC0xNiA5cTAgLTEgLTEuNSAtNS41dC0xLjUgLTYuNQpxLTEzIDAgLTE1IDFxMSAzIDIuNSAxNy41dDMuNSAyMi41cTEgNCA1LjUgMTJ0Ny41IDE0LjV0NCAxMi41dC00LjUgOS41dC0xNy41IDIuNXEtMTkgLTEgLTI2IC0yMHEtMSAtMyAtMyAtMTAuNXQtNSAtMTEuNXQtOSAtN3EtNyAtMyAtMjQgLTJ0LTI0IDVxLTEzIDggLTIyLjUgMjl0LTkuNSAzN3EwIDEwIDIuNSAyNi41dDMgMjV0LTUuNSAyNC41cTMgMiA5IDkuNXQxMCAxMC41cTIgMSA0LjUgMS41dDQuNSAwdDQgMS41dDMgNnEtMSAxIC00IDMKcS0zIDMgLTQgM3E3IC0zIDI4LjUgMS41dDI3LjUgLTEuNXExNSAtMTEgMjIgMnEwIDEgLTIuNSA5LjV0LTAuNSAxMy41cTUgLTI3IDI5IC05cTMgLTMgMTUuNSAtNXQxNy41IC01cTMgLTIgNyAtNS41dDUuNSAtNC41dDUgMC41dDguNSA2LjVxMTAgLTE0IDEyIC0yNHExMSAtNDAgMTkgLTQ0cTcgLTMgMTEgLTJ0NC41IDkuNXQwIDE0dC0xLjUgMTIuNWwtMSA4djE4bC0xIDhxLTE1IDMgLTE4LjUgMTJ0MS41IDE4LjV0MTUgMTguNXExIDEgOCAzLjUKdDE1LjUgNi41dDEyLjUgOHEyMSAxOSAxNSAzNXE3IDAgMTEgOXEtMSAwIC01IDN0LTcuNSA1dC00LjUgMnE5IDUgMiAxNnE1IDMgNy41IDExdDcuNSAxMHE5IC0xMiAyMSAtMnE4IDggMSAxNnE1IDcgMjAuNSAxMC41dDE4LjUgOS41cTcgLTIgOCAydDEgMTJ0MyAxMnE0IDUgMTUgOXQxMyA1bDE3IDExcTMgNCAwIDRxMTggLTIgMzEgMTFxMTAgMTEgLTYgMjBxMyA2IC0zIDkuNXQtMTUgNS41cTMgMSAxMS41IDAuNXQxMC41IDEuNQpxMTUgMTAgLTcgMTZxLTE3IDUgLTQzIC0xMnpNODc5IDEwcTIwNiAzNiAzNTEgMTg5cS0zIDMgLTEyLjUgNC41dC0xMi41IDMuNXEtMTggNyAtMjQgOHExIDcgLTIuNSAxM3QtOCA5dC0xMi41IDh0LTExIDdxLTIgMiAtNyA2dC03IDUuNXQtNy41IDQuNXQtOC41IDJ0LTEwIC0xbC0zIC0xcS0zIC0xIC01LjUgLTIuNXQtNS41IC0zdC00IC0zdDAgLTIuNXEtMjEgMTcgLTM2IDIycS01IDEgLTExIDUuNXQtMTAuNSA3dC0xMCAxLjV0LTExLjUgLTcKcS01IC01IC02IC0xNXQtMiAtMTNxLTcgNSAwIDE3LjV0MiAxOC41cS0zIDYgLTEwLjUgNC41dC0xMiAtNC41dC0xMS41IC04LjV0LTkgLTYuNXQtOC41IC01LjV0LTguNSAtNy41cS0zIC00IC02IC0xMnQtNSAtMTFxLTIgNCAtMTEuNSA2LjV0LTkuNSA1LjVxMiAtMTAgNCAtMzV0NSAtMzhxNyAtMzEgLTEyIC00OHEtMjcgLTI1IC0yOSAtNDBxLTQgLTIyIDEyIC0yNnEwIC03IC04IC0yMC41dC03IC0yMS41cTAgLTYgMiAtMTZ6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9IndyZW5jaCIgdW5pY29kZT0iJiN4ZjBhZDsiIGhvcml6LWFkdi14PSIxNjY0IiAKZD0iTTM4NCA2NHEwIDI2IC0xOSA0NXQtNDUgMTl0LTQ1IC0xOXQtMTkgLTQ1dDE5IC00NXQ0NSAtMTl0NDUgMTl0MTkgNDV6TTEwMjggNDg0bC02ODIgLTY4MnEtMzcgLTM3IC05MCAtMzdxLTUyIDAgLTkxIDM3bC0xMDYgMTA4cS0zOCAzNiAtMzggOTBxMCA1MyAzOCA5MWw2ODEgNjgxcTM5IC05OCAxMTQuNSAtMTczLjV0MTczLjUgLTExNC41ek0xNjYyIDkxOXEwIC0zOSAtMjMgLTEwNnEtNDcgLTEzNCAtMTY0LjUgLTIxNy41CnQtMjU4LjUgLTgzLjVxLTE4NSAwIC0zMTYuNSAxMzEuNXQtMTMxLjUgMzE2LjV0MTMxLjUgMzE2LjV0MzE2LjUgMTMxLjVxNTggMCAxMjEuNSAtMTYuNXQxMDcuNSAtNDYuNXExNiAtMTEgMTYgLTI4dC0xNiAtMjhsLTI5MyAtMTY5di0yMjRsMTkzIC0xMDdxNSAzIDc5IDQ4LjV0MTM1LjUgODF0NzAuNSAzNS41cTE1IDAgMjMuNSAtMTB0OC41IC0yNXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idGFza3MiIHVuaWNvZGU9IiYjeGYwYWU7IiBob3Jpei1hZHYteD0iMTc5MiIgCmQ9Ik0xMDI0IDEyOGg2NDB2MTI4aC02NDB2LTEyOHpNNjQwIDY0MGgxMDI0djEyOGgtMTAyNHYtMTI4ek0xMjgwIDExNTJoMzg0djEyOGgtMzg0di0xMjh6TTE3OTIgMzIwdi0yNTZxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC0xNjY0cS0yNiAwIC00NSAxOXQtMTkgNDV2MjU2cTAgMjYgMTkgNDV0NDUgMTloMTY2NHEyNiAwIDQ1IC0xOXQxOSAtNDV6TTE3OTIgODMydi0yNTZxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC0xNjY0cS0yNiAwIC00NSAxOQp0LTE5IDQ1djI1NnEwIDI2IDE5IDQ1dDQ1IDE5aDE2NjRxMjYgMCA0NSAtMTl0MTkgLTQ1ek0xNzkyIDEzNDR2LTI1NnEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTE2NjRxLTI2IDAgLTQ1IDE5dC0xOSA0NXYyNTZxMCAyNiAxOSA0NXQ0NSAxOWgxNjY0cTI2IDAgNDUgLTE5dDE5IC00NXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iZmlsdGVyIiB1bmljb2RlPSImI3hmMGIwOyIgaG9yaXotYWR2LXg9IjE0MDgiIApkPSJNMTQwMyAxMjQxcTE3IC00MSAtMTQgLTcwbC00OTMgLTQ5M3YtNzQycTAgLTQyIC0zOSAtNTlxLTEzIC01IC0yNSAtNXEtMjcgMCAtNDUgMTlsLTI1NiAyNTZxLTE5IDE5IC0xOSA0NXY0ODZsLTQ5MyA0OTNxLTMxIDI5IC0xNCA3MHExNyAzOSA1OSAzOWgxMjgwcTQyIDAgNTkgLTM5eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJicmllZmNhc2UiIHVuaWNvZGU9IiYjeGYwYjE7IiBob3Jpei1hZHYteD0iMTc5MiIgCmQ9Ik02NDAgMTI4MGg1MTJ2MTI4aC01MTJ2LTEyOHpNMTc5MiA2NDB2LTQ4MHEwIC02NiAtNDcgLTExM3QtMTEzIC00N2gtMTQ3MnEtNjYgMCAtMTEzIDQ3dC00NyAxMTN2NDgwaDY3MnYtMTYwcTAgLTI2IDE5IC00NXQ0NSAtMTloMzIwcTI2IDAgNDUgMTl0MTkgNDV2MTYwaDY3MnpNMTAyNCA2NDB2LTEyOGgtMjU2djEyOGgyNTZ6TTE3OTIgMTEyMHYtMzg0aC0xNzkydjM4NHEwIDY2IDQ3IDExM3QxMTMgNDdoMzUydjE2MHEwIDQwIDI4IDY4CnQ2OCAyOGg1NzZxNDAgMCA2OCAtMjh0MjggLTY4di0xNjBoMzUycTY2IDAgMTEzIC00N3Q0NyAtMTEzeiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJmdWxsc2NyZWVuIiB1bmljb2RlPSImI3hmMGIyOyIgCmQ9Ik0xMjgzIDk5NWwtMzU1IC0zNTVsMzU1IC0zNTVsMTQ0IDE0NHEyOSAzMSA3MCAxNHEzOSAtMTcgMzkgLTU5di00NDhxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC00NDhxLTQyIDAgLTU5IDQwcS0xNyAzOSAxNCA2OWwxNDQgMTQ0bC0zNTUgMzU1bC0zNTUgLTM1NWwxNDQgLTE0NHEzMSAtMzAgMTQgLTY5cS0xNyAtNDAgLTU5IC00MGgtNDQ4cS0yNiAwIC00NSAxOXQtMTkgNDV2NDQ4cTAgNDIgNDAgNTlxMzkgMTcgNjkgLTE0bDE0NCAtMTQ0CmwzNTUgMzU1bC0zNTUgMzU1bC0xNDQgLTE0NHEtMTkgLTE5IC00NSAtMTlxLTEyIDAgLTI0IDVxLTQwIDE3IC00MCA1OXY0NDhxMCAyNiAxOSA0NXQ0NSAxOWg0NDhxNDIgMCA1OSAtNDBxMTcgLTM5IC0xNCAtNjlsLTE0NCAtMTQ0bDM1NSAtMzU1bDM1NSAzNTVsLTE0NCAxNDRxLTMxIDMwIC0xNCA2OXExNyA0MCA1OSA0MGg0NDhxMjYgMCA0NSAtMTl0MTkgLTQ1di00NDhxMCAtNDIgLTM5IC01OXEtMTMgLTUgLTI1IC01cS0yNiAwIC00NSAxOXoKIiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9Imdyb3VwIiB1bmljb2RlPSImI3hmMGMwOyIgaG9yaXotYWR2LXg9IjE5MjAiIApkPSJNNTkzIDY0MHEtMTYyIC01IC0yNjUgLTEyOGgtMTM0cS04MiAwIC0xMzggNDAuNXQtNTYgMTE4LjVxMCAzNTMgMTI0IDM1M3E2IDAgNDMuNSAtMjF0OTcuNSAtNDIuNXQxMTkgLTIxLjVxNjcgMCAxMzMgMjNxLTUgLTM3IC01IC02NnEwIC0xMzkgODEgLTI1NnpNMTY2NCAzcTAgLTEyMCAtNzMgLTE4OS41dC0xOTQgLTY5LjVoLTg3NHEtMTIxIDAgLTE5NCA2OS41dC03MyAxODkuNXEwIDUzIDMuNSAxMDMuNXQxNCAxMDl0MjYuNSAxMDguNQp0NDMgOTcuNXQ2MiA4MXQ4NS41IDUzLjV0MTExLjUgMjBxMTAgMCA0MyAtMjEuNXQ3MyAtNDh0MTA3IC00OHQxMzUgLTIxLjV0MTM1IDIxLjV0MTA3IDQ4dDczIDQ4dDQzIDIxLjVxNjEgMCAxMTEuNSAtMjB0ODUuNSAtNTMuNXQ2MiAtODF0NDMgLTk3LjV0MjYuNSAtMTA4LjV0MTQgLTEwOXQzLjUgLTEwMy41ek02NDAgMTI4MHEwIC0xMDYgLTc1IC0xODF0LTE4MSAtNzV0LTE4MSA3NXQtNzUgMTgxdDc1IDE4MXQxODEgNzV0MTgxIC03NQp0NzUgLTE4MXpNMTM0NCA4OTZxMCAtMTU5IC0xMTIuNSAtMjcxLjV0LTI3MS41IC0xMTIuNXQtMjcxLjUgMTEyLjV0LTExMi41IDI3MS41dDExMi41IDI3MS41dDI3MS41IDExMi41dDI3MS41IC0xMTIuNXQxMTIuNSAtMjcxLjV6TTE5MjAgNjcxcTAgLTc4IC01NiAtMTE4LjV0LTEzOCAtNDAuNWgtMTM0cS0xMDMgMTIzIC0yNjUgMTI4cTgxIDExNyA4MSAyNTZxMCAyOSAtNSA2NnE2NiAtMjMgMTMzIC0yM3E1OSAwIDExOSAyMS41dDk3LjUgNDIuNQp0NDMuNSAyMXExMjQgMCAxMjQgLTM1M3pNMTc5MiAxMjgwcTAgLTEwNiAtNzUgLTE4MXQtMTgxIC03NXQtMTgxIDc1dC03NSAxODF0NzUgMTgxdDE4MSA3NXQxODEgLTc1dDc1IC0xODF6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9ImxpbmsiIHVuaWNvZGU9IiYjeGYwYzE7IiBob3Jpei1hZHYteD0iMTY2NCIgCmQ9Ik0xNDU2IDMyMHEwIDQwIC0yOCA2OGwtMjA4IDIwOHEtMjggMjggLTY4IDI4cS00MiAwIC03MiAtMzJxMyAtMyAxOSAtMTguNXQyMS41IC0yMS41dDE1IC0xOXQxMyAtMjUuNXQzLjUgLTI3LjVxMCAtNDAgLTI4IC02OHQtNjggLTI4cS0xNSAwIC0yNy41IDMuNXQtMjUuNSAxM3QtMTkgMTV0LTIxLjUgMjEuNXQtMTguNSAxOXEtMzMgLTMxIC0zMyAtNzNxMCAtNDAgMjggLTY4bDIwNiAtMjA3cTI3IC0yNyA2OCAtMjdxNDAgMCA2OCAyNgpsMTQ3IDE0NnEyOCAyOCAyOCA2N3pNNzUzIDEwMjVxMCA0MCAtMjggNjhsLTIwNiAyMDdxLTI4IDI4IC02OCAyOHEtMzkgMCAtNjggLTI3bC0xNDcgLTE0NnEtMjggLTI4IC0yOCAtNjdxMCAtNDAgMjggLTY4bDIwOCAtMjA4cTI3IC0yNyA2OCAtMjdxNDIgMCA3MiAzMXEtMyAzIC0xOSAxOC41dC0yMS41IDIxLjV0LTE1IDE5dC0xMyAyNS41dC0zLjUgMjcuNXEwIDQwIDI4IDY4dDY4IDI4cTE1IDAgMjcuNSAtMy41dDI1LjUgLTEzdDE5IC0xNQp0MjEuNSAtMjEuNXQxOC41IC0xOXEzMyAzMSAzMyA3M3pNMTY0OCAzMjBxMCAtMTIwIC04NSAtMjAzbC0xNDcgLTE0NnEtODMgLTgzIC0yMDMgLTgzcS0xMjEgMCAtMjA0IDg1bC0yMDYgMjA3cS04MyA4MyAtODMgMjAzcTAgMTIzIDg4IDIwOWwtODggODhxLTg2IC04OCAtMjA4IC04OHEtMTIwIDAgLTIwNCA4NGwtMjA4IDIwOHEtODQgODQgLTg0IDIwNHQ4NSAyMDNsMTQ3IDE0NnE4MyA4MyAyMDMgODNxMTIxIDAgMjA0IC04NWwyMDYgLTIwNwpxODMgLTgzIDgzIC0yMDNxMCAtMTIzIC04OCAtMjA5bDg4IC04OHE4NiA4OCAyMDggODhxMTIwIDAgMjA0IC04NGwyMDggLTIwOHE4NCAtODQgODQgLTIwNHoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iY2xvdWQiIHVuaWNvZGU9IiYjeGYwYzI7IiBob3Jpei1hZHYteD0iMTkyMCIgCmQ9Ik0xOTIwIDM4NHEwIC0xNTkgLTExMi41IC0yNzEuNXQtMjcxLjUgLTExMi41aC0xMDg4cS0xODUgMCAtMzE2LjUgMTMxLjV0LTEzMS41IDMxNi41cTAgMTMyIDcxIDI0MS41dDE4NyAxNjMuNXEtMiAyOCAtMiA0M3EwIDIxMiAxNTAgMzYydDM2MiAxNTBxMTU4IDAgMjg2LjUgLTg4dDE4Ny41IC0yMzBxNzAgNjIgMTY2IDYycTEwNiAwIDE4MSAtNzV0NzUgLTE4MXEwIC03NSAtNDEgLTEzOHExMjkgLTMwIDIxMyAtMTM0LjV0ODQgLTIzOS41egoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iYmVha2VyIiB1bmljb2RlPSImI3hmMGMzOyIgaG9yaXotYWR2LXg9IjE2NjQiIApkPSJNMTUyNyA4OHE1NiAtODkgMjEuNSAtMTUyLjV0LTE0MC41IC02My41aC0xMTUycS0xMDYgMCAtMTQwLjUgNjMuNXQyMS41IDE1Mi41bDUwMyA3OTN2Mzk5aC02NHEtMjYgMCAtNDUgMTl0LTE5IDQ1dDE5IDQ1dDQ1IDE5aDUxMnEyNiAwIDQ1IC0xOXQxOSAtNDV0LTE5IC00NXQtNDUgLTE5aC02NHYtMzk5ek03NDggODEzbC0yNzIgLTQyOWg3MTJsLTI3MiA0MjlsLTIwIDMxdjM3djM5OWgtMTI4di0zOTl2LTM3eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJjdXQiIHVuaWNvZGU9IiYjeGYwYzQ7IiBob3Jpei1hZHYteD0iMTc5MiIgCmQ9Ik05NjAgNjQwcTI2IDAgNDUgLTE5dDE5IC00NXQtMTkgLTQ1dC00NSAtMTl0LTQ1IDE5dC0xOSA0NXQxOSA0NXQ0NSAxOXpNMTI2MCA1NzZsNTA3IC0zOThxMjggLTIwIDI1IC01NnEtNSAtMzUgLTM1IC01MWwtMTI4IC02NHEtMTMgLTcgLTI5IC03cS0xNyAwIC0zMSA4bC02OTAgMzg3bC0xMTAgLTY2cS04IC00IC0xMiAtNXExNCAtNDkgMTAgLTk3cS03IC03NyAtNTYgLTE0Ny41dC0xMzIgLTEyMy41cS0xMzIgLTg0IC0yNzcgLTg0CnEtMTM2IDAgLTIyMiA3OHEtOTAgODQgLTc5IDIwN3E3IDc2IDU2IDE0N3QxMzEgMTI0cTEzMiA4NCAyNzggODRxODMgMCAxNTEgLTMxcTkgMTMgMjIgMjJsMTIyIDczbC0xMjIgNzNxLTEzIDkgLTIyIDIycS02OCAtMzEgLTE1MSAtMzFxLTE0NiAwIC0yNzggODRxLTgyIDUzIC0xMzEgMTI0dC01NiAxNDdxLTUgNTkgMTUuNSAxMTN0NjMuNSA5M3E4NSA3OSAyMjIgNzlxMTQ1IDAgMjc3IC04NHE4MyAtNTIgMTMyIC0xMjN0NTYgLTE0OApxNCAtNDggLTEwIC05N3E0IC0xIDEyIC01bDExMCAtNjZsNjkwIDM4N3ExNCA4IDMxIDhxMTYgMCAyOSAtN2wxMjggLTY0cTMwIC0xNiAzNSAtNTFxMyAtMzYgLTI1IC01NnpNNTc5IDgzNnE0NiA0MiAyMSAxMDh0LTEwNiAxMTdxLTkyIDU5IC0xOTIgNTlxLTc0IDAgLTExMyAtMzZxLTQ2IC00MiAtMjEgLTEwOHQxMDYgLTExN3E5MiAtNTkgMTkyIC01OXE3NCAwIDExMyAzNnpNNDk0IDkxcTgxIDUxIDEwNiAxMTd0LTIxIDEwOApxLTM5IDM2IC0xMTMgMzZxLTEwMCAwIC0xOTIgLTU5cS04MSAtNTEgLTEwNiAtMTE3dDIxIC0xMDhxMzkgLTM2IDExMyAtMzZxMTAwIDAgMTkyIDU5ek02NzIgNzA0bDk2IC01OHYxMXEwIDM2IDMzIDU2bDE0IDhsLTc5IDQ3bC0yNiAtMjZxLTMgLTMgLTEwIC0xMXQtMTIgLTEycS0yIC0yIC00IC0zLjV0LTMgLTIuNXpNODk2IDQ4MGw5NiAtMzJsNzM2IDU3NmwtMTI4IDY0bC03NjggLTQzMXYtMTEzbC0xNjAgLTk2bDkgLThxMiAtMiA3IC02CnE0IC00IDExIC0xMnQxMSAtMTJsMjYgLTI2ek0xNjAwIDY0bDEyOCA2NGwtNTIwIDQwOGwtMTc3IC0xMzhxLTIgLTMgLTEzIC03eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJjb3B5IiB1bmljb2RlPSImI3hmMGM1OyIgaG9yaXotYWR2LXg9IjE3OTIiIApkPSJNMTY5NiAxMTUycTQwIDAgNjggLTI4dDI4IC02OHYtMTIxNnEwIC00MCAtMjggLTY4dC02OCAtMjhoLTk2MHEtNDAgMCAtNjggMjh0LTI4IDY4djI4OGgtNTQ0cS00MCAwIC02OCAyOHQtMjggNjh2NjcycTAgNDAgMjAgODh0NDggNzZsNDA4IDQwOHEyOCAyOCA3NiA0OHQ4OCAyMGg0MTZxNDAgMCA2OCAtMjh0MjggLTY4di0zMjhxNjggNDAgMTI4IDQwaDQxNnpNMTE1MiA5MzlsLTI5OSAtMjk5aDI5OXYyOTl6TTUxMiAxMzIzbC0yOTkgLTI5OQpoMjk5djI5OXpNNzA4IDY3NmwzMTYgMzE2djQxNmgtMzg0di00MTZxMCAtNDAgLTI4IC02OHQtNjggLTI4aC00MTZ2LTY0MGg1MTJ2MjU2cTAgNDAgMjAgODh0NDggNzZ6TTE2NjQgLTEyOHYxMTUyaC0zODR2LTQxNnEwIC00MCAtMjggLTY4dC02OCAtMjhoLTQxNnYtNjQwaDg5NnoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0icGFwZXJfY2xpcCIgdW5pY29kZT0iJiN4ZjBjNjsiIGhvcml6LWFkdi14PSIxNDA4IiAKZD0iTTE0MDQgMTUxcTAgLTExNyAtNzkgLTE5NnQtMTk2IC03OXEtMTM1IDAgLTIzNSAxMDBsLTc3NyA3NzZxLTExMyAxMTUgLTExMyAyNzFxMCAxNTkgMTEwIDI3MHQyNjkgMTExcTE1OCAwIDI3MyAtMTEzbDYwNSAtNjA2cTEwIC0xMCAxMCAtMjJxMCAtMTYgLTMwLjUgLTQ2LjV0LTQ2LjUgLTMwLjVxLTEzIDAgLTIzIDEwbC02MDYgNjA3cS03OSA3NyAtMTgxIDc3cS0xMDYgMCAtMTc5IC03NXQtNzMgLTE4MXEwIC0xMDUgNzYgLTE4MQpsNzc2IC03NzdxNjMgLTYzIDE0NSAtNjNxNjQgMCAxMDYgNDJ0NDIgMTA2cTAgODIgLTYzIDE0NWwtNTgxIDU4MXEtMjYgMjQgLTYwIDI0cS0yOSAwIC00OCAtMTl0LTE5IC00OHEwIC0zMiAyNSAtNTlsNDEwIC00MTBxMTAgLTEwIDEwIC0yMnEwIC0xNiAtMzEgLTQ3dC00NyAtMzFxLTEyIDAgLTIyIDEwbC00MTAgNDEwcS02MyA2MSAtNjMgMTQ5cTAgODIgNTcgMTM5dDEzOSA1N3E4OCAwIDE0OSAtNjNsNTgxIC01ODFxMTAwIC05OCAxMDAgLTIzNQp6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InNhdmUiIHVuaWNvZGU9IiYjeGYwYzc7IiAKZD0iTTM4NCAwaDc2OHYzODRoLTc2OHYtMzg0ek0xMjgwIDBoMTI4djg5NnEwIDE0IC0xMCAzOC41dC0yMCAzNC41bC0yODEgMjgxcS0xMCAxMCAtMzQgMjB0LTM5IDEwdi00MTZxMCAtNDAgLTI4IC02OHQtNjggLTI4aC01NzZxLTQwIDAgLTY4IDI4dC0yOCA2OHY0MTZoLTEyOHYtMTI4MGgxMjh2NDE2cTAgNDAgMjggNjh0NjggMjhoODMycTQwIDAgNjggLTI4dDI4IC02OHYtNDE2ek04OTYgOTI4djMyMHEwIDEzIC05LjUgMjIuNXQtMjIuNSA5LjUKaC0xOTJxLTEzIDAgLTIyLjUgLTkuNXQtOS41IC0yMi41di0zMjBxMCAtMTMgOS41IC0yMi41dDIyLjUgLTkuNWgxOTJxMTMgMCAyMi41IDkuNXQ5LjUgMjIuNXpNMTUzNiA4OTZ2LTkyOHEwIC00MCAtMjggLTY4dC02OCAtMjhoLTEzNDRxLTQwIDAgLTY4IDI4dC0yOCA2OHYxMzQ0cTAgNDAgMjggNjh0NjggMjhoOTI4cTQwIDAgODggLTIwdDc2IC00OGwyODAgLTI4MHEyOCAtMjggNDggLTc2dDIwIC04OHoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0ic2lnbl9ibGFuayIgdW5pY29kZT0iJiN4ZjBjODsiIApkPSJNMTUzNiAxMTIwdi05NjBxMCAtMTE5IC04NC41IC0yMDMuNXQtMjAzLjUgLTg0LjVoLTk2MHEtMTE5IDAgLTIwMy41IDg0LjV0LTg0LjUgMjAzLjV2OTYwcTAgMTE5IDg0LjUgMjAzLjV0MjAzLjUgODQuNWg5NjBxMTE5IDAgMjAzLjUgLTg0LjV0ODQuNSAtMjAzLjV6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InJlb3JkZXIiIHVuaWNvZGU9IiYjeGYwYzk7IiAKZD0iTTE1MzYgMTkydi0xMjhxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC0xNDA4cS0yNiAwIC00NSAxOXQtMTkgNDV2MTI4cTAgMjYgMTkgNDV0NDUgMTloMTQwOHEyNiAwIDQ1IC0xOXQxOSAtNDV6TTE1MzYgNzA0di0xMjhxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC0xNDA4cS0yNiAwIC00NSAxOXQtMTkgNDV2MTI4cTAgMjYgMTkgNDV0NDUgMTloMTQwOHEyNiAwIDQ1IC0xOXQxOSAtNDV6TTE1MzYgMTIxNnYtMTI4cTAgLTI2IC0xOSAtNDUKdC00NSAtMTloLTE0MDhxLTI2IDAgLTQ1IDE5dC0xOSA0NXYxMjhxMCAyNiAxOSA0NXQ0NSAxOWgxNDA4cTI2IDAgNDUgLTE5dDE5IC00NXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idWwiIHVuaWNvZGU9IiYjeGYwY2E7IiBob3Jpei1hZHYteD0iMTc5MiIgCmQ9Ik0zODQgMTI4cTAgLTgwIC01NiAtMTM2dC0xMzYgLTU2dC0xMzYgNTZ0LTU2IDEzNnQ1NiAxMzZ0MTM2IDU2dDEzNiAtNTZ0NTYgLTEzNnpNMzg0IDY0MHEwIC04MCAtNTYgLTEzNnQtMTM2IC01NnQtMTM2IDU2dC01NiAxMzZ0NTYgMTM2dDEzNiA1NnQxMzYgLTU2dDU2IC0xMzZ6TTE3OTIgMjI0di0xOTJxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC0xMjE2cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2MTkycTAgMTMgOS41IDIyLjUKdDIyLjUgOS41aDEyMTZxMTMgMCAyMi41IC05LjV0OS41IC0yMi41ek0zODQgMTE1MnEwIC04MCAtNTYgLTEzNnQtMTM2IC01NnQtMTM2IDU2dC01NiAxMzZ0NTYgMTM2dDEzNiA1NnQxMzYgLTU2dDU2IC0xMzZ6TTE3OTIgNzM2di0xOTJxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC0xMjE2cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2MTkycTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoMTIxNnExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6Ck0xNzkyIDEyNDh2LTE5MnEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTEyMTZxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXYxOTJxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWgxMjE2cTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0ib2wiIHVuaWNvZGU9IiYjeGYwY2I7IiBob3Jpei1hZHYteD0iMTc5MiIgCmQ9Ik0zODEgLTg0cTAgLTgwIC01NC41IC0xMjZ0LTEzNS41IC00NnEtMTA2IDAgLTE3MiA2Nmw1NyA4OHE0OSAtNDUgMTA2IC00NXEyOSAwIDUwLjUgMTQuNXQyMS41IDQyLjVxMCA2NCAtMTA1IDU2bC0yNiA1NnE4IDEwIDMyLjUgNDMuNXQ0Mi41IDU0dDM3IDM4LjV2MXEtMTYgMCAtNDguNSAtMXQtNDguNSAtMXYtNTNoLTEwNnYxNTJoMzMzdi04OGwtOTUgLTExNXE1MSAtMTIgODEgLTQ5dDMwIC04OHpNMzgzIDU0M3YtMTU5aC0zNjIKcS02IDM2IC02IDU0cTAgNTEgMjMuNSA5M3Q1Ni41IDY4dDY2IDQ3LjV0NTYuNSA0My41dDIzLjUgNDVxMCAyNSAtMTQuNSAzOC41dC0zOS41IDEzLjVxLTQ2IDAgLTgxIC01OGwtODUgNTlxMjQgNTEgNzEuNSA3OS41dDEwNS41IDI4LjVxNzMgMCAxMjMgLTQxLjV0NTAgLTExMi41cTAgLTUwIC0zNCAtOTEuNXQtNzUgLTY0LjV0LTc1LjUgLTUwLjV0LTM1LjUgLTUyLjVoMTI3djYwaDEwNXpNMTc5MiAyMjR2LTE5MnEwIC0xMyAtOS41IC0yMi41CnQtMjIuNSAtOS41aC0xMjE2cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2MTkycTAgMTQgOSAyM3QyMyA5aDEyMTZxMTMgMCAyMi41IC05LjV0OS41IC0yMi41ek0zODQgMTEyM3YtOTloLTMzNXY5OWgxMDdxMCA0MSAwLjUgMTIxLjV0MC41IDEyMS41djEyaC0ycS04IC0xNyAtNTAgLTU0bC03MSA3NmwxMzYgMTI3aDEwNnYtNDA0aDEwOHpNMTc5MiA3MzZ2LTE5MnEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTEyMTYKcS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2MTkycTAgMTQgOSAyM3QyMyA5aDEyMTZxMTMgMCAyMi41IC05LjV0OS41IC0yMi41ek0xNzkyIDEyNDh2LTE5MnEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTEyMTZxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXYxOTJxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWgxMjE2cTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0ic3RyaWtldGhyb3VnaCIgdW5pY29kZT0iJiN4ZjBjYzsiIGhvcml6LWFkdi14PSIxNzkyIiAKZD0iTTE3NjAgNjQwcTE0IDAgMjMgLTl0OSAtMjN2LTY0cTAgLTE0IC05IC0yM3QtMjMgLTloLTE3MjhxLTE0IDAgLTIzIDl0LTkgMjN2NjRxMCAxNCA5IDIzdDIzIDloMTcyOHpNNDgzIDcwNHEtMjggMzUgLTUxIDgwcS00OCA5OCAtNDggMTg4cTAgMTgxIDEzNCAzMDlxMTMzIDEyNyAzOTMgMTI3cTUwIDAgMTY3IC0xOXE2NiAtMTIgMTc3IC00OHExMCAtMzggMjEgLTExOHExNCAtMTIzIDE0IC0xODNxMCAtMTggLTUgLTQ1bC0xMiAtM2wtODQgNgpsLTE0IDJxLTUwIDE0OSAtMTAzIDIwNXEtODggOTEgLTIxMCA5MXEtMTE0IDAgLTE4MiAtNTlxLTY3IC01OCAtNjcgLTE0NnEwIC03MyA2NiAtMTQwdDI3OSAtMTI5cTY5IC0yMCAxNzMgLTY2cTU4IC0yOCA5NSAtNTJoLTc0M3pNOTkwIDQ0OGg0MTFxNyAtMzkgNyAtOTJxMCAtMTExIC00MSAtMjEycS0yMyAtNTYgLTcxIC0xMDRxLTM3IC0zNSAtMTA5IC04MXEtODAgLTQ4IC0xNTMgLTY2cS04MCAtMjEgLTIwMyAtMjFxLTExNCAwIC0xOTUgMjMKbC0xNDAgNDBxLTU3IDE2IC03MiAyOHEtOCA4IC04IDIydjEzcTAgMTA4IC0yIDE1NnEtMSAzMCAwIDY4bDIgMzd2NDRsMTAyIDJxMTUgLTM0IDMwIC03MXQyMi41IC01NnQxMi41IC0yN3EzNSAtNTcgODAgLTk0cTQzIC0zNiAxMDUgLTU3cTU5IC0yMiAxMzIgLTIycTY0IDAgMTM5IDI3cTc3IDI2IDEyMiA4NnE0NyA2MSA0NyAxMjlxMCA4NCAtODEgMTU3cS0zNCAyOSAtMTM3IDcxeiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ1bmRlcmxpbmUiIHVuaWNvZGU9IiYjeGYwY2Q7IiAKZD0iTTQ4IDEzMTNxLTM3IDIgLTQ1IDRsLTMgODhxMTMgMSA0MCAxcTYwIDAgMTEyIC00cTEzMiAtNyAxNjYgLTdxODYgMCAxNjggM3ExMTYgNCAxNDYgNXE1NiAwIDg2IDJsLTEgLTE0bDIgLTY0di05cS02MCAtOSAtMTI0IC05cS02MCAwIC03OSAtMjVxLTEzIC0xNCAtMTMgLTEzMnEwIC0xMyAwLjUgLTMyLjV0MC41IC0yNS41bDEgLTIyOWwxNCAtMjgwcTYgLTEyNCA1MSAtMjAycTM1IC01OSA5NiAtOTJxODggLTQ3IDE3NyAtNDcKcTEwNCAwIDE5MSAyOHE1NiAxOCA5OSA1MXE0OCAzNiA2NSA2NHEzNiA1NiA1MyAxMTRxMjEgNzMgMjEgMjI5cTAgNzkgLTMuNSAxMjh0LTExIDEyMi41dC0xMy41IDE1OS41bC00IDU5cS01IDY3IC0yNCA4OHEtMzQgMzUgLTc3IDM0bC0xMDAgLTJsLTE0IDNsMiA4Nmg4NGwyMDUgLTEwcTc2IC0zIDE5NiAxMGwxOCAtMnE2IC0zOCA2IC01MXEwIC03IC00IC0zMXEtNDUgLTEyIC04NCAtMTNxLTczIC0xMSAtNzkgLTE3cS0xNSAtMTUgLTE1IC00MQpxMCAtNyAxLjUgLTI3dDEuNSAtMzFxOCAtMTkgMjIgLTM5NnE2IC0xOTUgLTE1IC0zMDRxLTE1IC03NiAtNDEgLTEyMnEtMzggLTY1IC0xMTIgLTEyM3EtNzUgLTU3IC0xODIgLTg5cS0xMDkgLTMzIC0yNTUgLTMzcS0xNjcgMCAtMjg0IDQ2cS0xMTkgNDcgLTE3OSAxMjJxLTYxIDc2IC04MyAxOTVxLTE2IDgwIC0xNiAyMzd2MzMzcTAgMTg4IC0xNyAyMTNxLTI1IDM2IC0xNDcgMzl6TTE1MzYgLTk2djY0cTAgMTQgLTkgMjN0LTIzIDloLTE0NzIKcS0xNCAwIC0yMyAtOXQtOSAtMjN2LTY0cTAgLTE0IDkgLTIzdDIzIC05aDE0NzJxMTQgMCAyMyA5dDkgMjN6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InRhYmxlIiB1bmljb2RlPSImI3hmMGNlOyIgaG9yaXotYWR2LXg9IjE2NjQiIApkPSJNNTEyIDE2MHYxOTJxMCAxNCAtOSAyM3QtMjMgOWgtMzIwcS0xNCAwIC0yMyAtOXQtOSAtMjN2LTE5MnEwIC0xNCA5IC0yM3QyMyAtOWgzMjBxMTQgMCAyMyA5dDkgMjN6TTUxMiA1NDR2MTkycTAgMTQgLTkgMjN0LTIzIDloLTMyMHEtMTQgMCAtMjMgLTl0LTkgLTIzdi0xOTJxMCAtMTQgOSAtMjN0MjMgLTloMzIwcTE0IDAgMjMgOXQ5IDIzek0xMDI0IDE2MHYxOTJxMCAxNCAtOSAyM3QtMjMgOWgtMzIwcS0xNCAwIC0yMyAtOXQtOSAtMjMKdi0xOTJxMCAtMTQgOSAtMjN0MjMgLTloMzIwcTE0IDAgMjMgOXQ5IDIzek01MTIgOTI4djE5MnEwIDE0IC05IDIzdC0yMyA5aC0zMjBxLTE0IDAgLTIzIC05dC05IC0yM3YtMTkycTAgLTE0IDkgLTIzdDIzIC05aDMyMHExNCAwIDIzIDl0OSAyM3pNMTAyNCA1NDR2MTkycTAgMTQgLTkgMjN0LTIzIDloLTMyMHEtMTQgMCAtMjMgLTl0LTkgLTIzdi0xOTJxMCAtMTQgOSAtMjN0MjMgLTloMzIwcTE0IDAgMjMgOXQ5IDIzek0xNTM2IDE2MHYxOTIKcTAgMTQgLTkgMjN0LTIzIDloLTMyMHEtMTQgMCAtMjMgLTl0LTkgLTIzdi0xOTJxMCAtMTQgOSAtMjN0MjMgLTloMzIwcTE0IDAgMjMgOXQ5IDIzek0xMDI0IDkyOHYxOTJxMCAxNCAtOSAyM3QtMjMgOWgtMzIwcS0xNCAwIC0yMyAtOXQtOSAtMjN2LTE5MnEwIC0xNCA5IC0yM3QyMyAtOWgzMjBxMTQgMCAyMyA5dDkgMjN6TTE1MzYgNTQ0djE5MnEwIDE0IC05IDIzdC0yMyA5aC0zMjBxLTE0IDAgLTIzIC05dC05IC0yM3YtMTkyCnEwIC0xNCA5IC0yM3QyMyAtOWgzMjBxMTQgMCAyMyA5dDkgMjN6TTE1MzYgOTI4djE5MnEwIDE0IC05IDIzdC0yMyA5aC0zMjBxLTE0IDAgLTIzIC05dC05IC0yM3YtMTkycTAgLTE0IDkgLTIzdDIzIC05aDMyMHExNCAwIDIzIDl0OSAyM3pNMTY2NCAxMjQ4di0xMDg4cTAgLTY2IC00NyAtMTEzdC0xMTMgLTQ3aC0xMzQ0cS02NiAwIC0xMTMgNDd0LTQ3IDExM3YxMDg4cTAgNjYgNDcgMTEzdDExMyA0N2gxMzQ0cTY2IDAgMTEzIC00N3Q0NyAtMTEzCnoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0ibWFnaWMiIHVuaWNvZGU9IiYjeGYwZDA7IiBob3Jpei1hZHYteD0iMTY2NCIgCmQ9Ik0xMTkwIDk1NWwyOTMgMjkzbC0xMDcgMTA3bC0yOTMgLTI5M3pNMTYzNyAxMjQ4cTAgLTI3IC0xOCAtNDVsLTEyODYgLTEyODZxLTE4IC0xOCAtNDUgLTE4dC00NSAxOGwtMTk4IDE5OHEtMTggMTggLTE4IDQ1dDE4IDQ1bDEyODYgMTI4NnExOCAxOCA0NSAxOHQ0NSAtMThsMTk4IC0xOThxMTggLTE4IDE4IC00NXpNMjg2IDE0MzhsOTggLTMwbC05OCAtMzBsLTMwIC05OGwtMzAgOThsLTk4IDMwbDk4IDMwbDMwIDk4ek02MzYgMTI3NgpsMTk2IC02MGwtMTk2IC02MGwtNjAgLTE5NmwtNjAgMTk2bC0xOTYgNjBsMTk2IDYwbDYwIDE5NnpNMTU2NiA3OThsOTggLTMwbC05OCAtMzBsLTMwIC05OGwtMzAgOThsLTk4IDMwbDk4IDMwbDMwIDk4ek05MjYgMTQzOGw5OCAtMzBsLTk4IC0zMGwtMzAgLTk4bC0zMCA5OGwtOTggMzBsOTggMzBsMzAgOTh6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InRydWNrIiB1bmljb2RlPSImI3hmMGQxOyIgaG9yaXotYWR2LXg9IjE3OTIiIApkPSJNNjQwIDEyOHEwIDUyIC0zOCA5MHQtOTAgMzh0LTkwIC0zOHQtMzggLTkwdDM4IC05MHQ5MCAtMzh0OTAgMzh0MzggOTB6TTI1NiA2NDBoMzg0djI1NmgtMTU4cS0xMyAwIC0yMiAtOWwtMTk1IC0xOTVxLTkgLTkgLTkgLTIydi0zMHpNMTUzNiAxMjhxMCA1MiAtMzggOTB0LTkwIDM4dC05MCAtMzh0LTM4IC05MHQzOCAtOTB0OTAgLTM4dDkwIDM4dDM4IDkwek0xNzkyIDEyMTZ2LTEwMjRxMCAtMTUgLTQgLTI2LjV0LTEzLjUgLTE4LjUKdC0xNi41IC0xMS41dC0yMy41IC02dC0yMi41IC0ydC0yNS41IDB0LTIyLjUgMC41cTAgLTEwNiAtNzUgLTE4MXQtMTgxIC03NXQtMTgxIDc1dC03NSAxODFoLTM4NHEwIC0xMDYgLTc1IC0xODF0LTE4MSAtNzV0LTE4MSA3NXQtNzUgMTgxaC02NHEtMyAwIC0yMi41IC0wLjV0LTI1LjUgMHQtMjIuNSAydC0yMy41IDZ0LTE2LjUgMTEuNXQtMTMuNSAxOC41dC00IDI2LjVxMCAyNiAxOSA0NXQ0NSAxOXYzMjBxMCA4IC0wLjUgMzV0MCAzOAp0Mi41IDM0LjV0Ni41IDM3dDE0IDMwLjV0MjIuNSAzMGwxOTggMTk4cTE5IDE5IDUwLjUgMzJ0NTguNSAxM2gxNjB2MTkycTAgMjYgMTkgNDV0NDUgMTloMTAyNHEyNiAwIDQ1IC0xOXQxOSAtNDV6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InBpbnRlcmVzdCIgdW5pY29kZT0iJiN4ZjBkMjsiIApkPSJNMTUzNiA2NDBxMCAtMjA5IC0xMDMgLTM4NS41dC0yNzkuNSAtMjc5LjV0LTM4NS41IC0xMDNxLTExMSAwIC0yMTggMzJxNTkgOTMgNzggMTY0cTkgMzQgNTQgMjExcTIwIC0zOSA3MyAtNjcuNXQxMTQgLTI4LjVxMTIxIDAgMjE2IDY4LjV0MTQ3IDE4OC41dDUyIDI3MHEwIDExNCAtNTkuNSAyMTR0LTE3Mi41IDE2M3QtMjU1IDYzcS0xMDUgMCAtMTk2IC0yOXQtMTU0LjUgLTc3dC0xMDkgLTExMC41dC02NyAtMTI5LjV0LTIxLjUgLTEzNApxMCAtMTA0IDQwIC0xODN0MTE3IC0xMTFxMzAgLTEyIDM4IDIwcTIgNyA4IDMxdDggMzBxNiAyMyAtMTEgNDNxLTUxIDYxIC01MSAxNTFxMCAxNTEgMTA0LjUgMjU5LjV0MjczLjUgMTA4LjVxMTUxIDAgMjM1LjUgLTgydDg0LjUgLTIxM3EwIC0xNzAgLTY4LjUgLTI4OXQtMTc1LjUgLTExOXEtNjEgMCAtOTggNDMuNXQtMjMgMTA0LjVxOCAzNSAyNi41IDkzLjV0MzAgMTAzdDExLjUgNzUuNXEwIDUwIC0yNyA4M3QtNzcgMzMKcS02MiAwIC0xMDUgLTU3dC00MyAtMTQycTAgLTczIDI1IC0xMjJsLTk5IC00MThxLTE3IC03MCAtMTMgLTE3N3EtMjA2IDkxIC0zMzMgMjgxdC0xMjcgNDIzcTAgMjA5IDEwMyAzODUuNXQyNzkuNSAyNzkuNXQzODUuNSAxMDN0Mzg1LjUgLTEwM3QyNzkuNSAtMjc5LjV0MTAzIC0zODUuNXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0icGludGVyZXN0X3NpZ24iIHVuaWNvZGU9IiYjeGYwZDM7IiAKZD0iTTEyNDggMTQwOHExMTkgMCAyMDMuNSAtODQuNXQ4NC41IC0yMDMuNXYtOTYwcTAgLTExOSAtODQuNSAtMjAzLjV0LTIwMy41IC04NC41aC03MjVxODUgMTIyIDEwOCAyMTBxOSAzNCA1MyAyMDlxMjEgLTM5IDczLjUgLTY3dDExMi41IC0yOHExODEgMCAyOTUuNSAxNDcuNXQxMTQuNSAzNzMuNXEwIDg0IC0zNSAxNjIuNXQtOTYuNSAxMzl0LTE1Mi41IDk3dC0xOTcgMzYuNXEtMTA0IDAgLTE5NC41IC0yOC41dC0xNTMgLTc2LjUKdC0xMDcuNSAtMTA5LjV0LTY2LjUgLTEyOHQtMjEuNSAtMTMyLjVxMCAtMTAyIDM5LjUgLTE4MHQxMTYuNSAtMTEwcTEzIC01IDIzLjUgMHQxNC41IDE5cTEwIDQ0IDE1IDYxcTYgMjMgLTExIDQycS01MCA2MiAtNTAgMTUwcTAgMTUwIDEwMy41IDI1Ni41dDI3MC41IDEwNi41cTE0OSAwIDIzMi41IC04MXQ4My41IC0yMTBxMCAtMTY4IC02Ny41IC0yODZ0LTE3My41IC0xMThxLTYwIDAgLTk3IDQzLjV0LTIzIDEwMy41cTggMzQgMjYuNSA5Mi41CnQyOS41IDEwMnQxMSA3NC41cTAgNDkgLTI2LjUgODEuNXQtNzUuNSAzMi41cS02MSAwIC0xMDMuNSAtNTYuNXQtNDIuNSAtMTM5LjVxMCAtNzIgMjQgLTEyMWwtOTggLTQxNHEtMjQgLTEwMCAtNyAtMjU0aC0xODNxLTExOSAwIC0yMDMuNSA4NC41dC04NC41IDIwMy41djk2MHEwIDExOSA4NC41IDIwMy41dDIwMy41IDg0LjVoOTYweiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJnb29nbGVfcGx1c19zaWduIiB1bmljb2RlPSImI3hmMGQ0OyIgCmQ9Ik05MTcgNjMxcTAgMjYgLTYgNjRoLTM2MnYtMTMyaDIxN3EtMyAtMjQgLTE2LjUgLTUwdC0zNy41IC01M3QtNjYuNSAtNDQuNXQtOTYuNSAtMTcuNXEtOTkgMCAtMTY5IDcxdC03MCAxNzF0NzAgMTcxdDE2OSA3MXE5MiAwIDE1MyAtNTlsMTA0IDEwMXEtMTA4IDEwMCAtMjU3IDEwMHEtMTYwIDAgLTI3MiAtMTEyLjV0LTExMiAtMjcxLjV0MTEyIC0yNzEuNXQyNzIgLTExMi41cTE2NSAwIDI2Ni41IDEwNXQxMDEuNSAyNzB6TTEyNjIgNTg1CmgxMDl2MTEwaC0xMDl2MTEwaC0xMTB2LTExMGgtMTEwdi0xMTBoMTEwdi0xMTBoMTEwdjExMHpNMTUzNiAxMTIwdi05NjBxMCAtMTE5IC04NC41IC0yMDMuNXQtMjAzLjUgLTg0LjVoLTk2MHEtMTE5IDAgLTIwMy41IDg0LjV0LTg0LjUgMjAzLjV2OTYwcTAgMTE5IDg0LjUgMjAzLjV0MjAzLjUgODQuNWg5NjBxMTE5IDAgMjAzLjUgLTg0LjV0ODQuNSAtMjAzLjV6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9Imdvb2dsZV9wbHVzIiB1bmljb2RlPSImI3hmMGQ1OyIgaG9yaXotYWR2LXg9IjIzMDQiIApkPSJNMTQzNyA2MjNxMCAtMjA4IC04NyAtMzcwLjV0LTI0OCAtMjU0dC0zNjkgLTkxLjVxLTE0OSAwIC0yODUgNTh0LTIzNCAxNTZ0LTE1NiAyMzR0LTU4IDI4NXQ1OCAyODV0MTU2IDIzNHQyMzQgMTU2dDI4NSA1OHEyODYgMCA0OTEgLTE5MmwtMTk5IC0xOTFxLTExNyAxMTMgLTI5MiAxMTNxLTEyMyAwIC0yMjcuNSAtNjJ0LTE2NS41IC0xNjguNXQtNjEgLTIzMi41dDYxIC0yMzIuNXQxNjUuNSAtMTY4LjV0MjI3LjUgLTYyCnE4MyAwIDE1Mi41IDIzdDExNC41IDU3LjV0NzguNSA3OC41dDQ5IDgzdDIxLjUgNzRoLTQxNnYyNTJoNjkycTEyIC02MyAxMiAtMTIyek0yMzA0IDc0NXYtMjEwaC0yMDl2LTIwOWgtMjEwdjIwOWgtMjA5djIxMGgyMDl2MjA5aDIxMHYtMjA5aDIwOXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0ibW9uZXkiIHVuaWNvZGU9IiYjeGYwZDY7IiBob3Jpei1hZHYteD0iMTkyMCIgCmQ9Ik03NjggMzg0aDM4NHY5NmgtMTI4djQ0OGgtMTE0bC0xNDggLTEzN2w3NyAtODBxNDIgMzcgNTUgNTdoMnYtMjg4aC0xMjh2LTk2ek0xMjgwIDY0MHEwIC03MCAtMjEgLTE0MnQtNTkuNSAtMTM0dC0xMDEuNSAtMTAxdC0xMzggLTM5dC0xMzggMzl0LTEwMS41IDEwMXQtNTkuNSAxMzR0LTIxIDE0MnQyMSAxNDJ0NTkuNSAxMzR0MTAxLjUgMTAxdDEzOCAzOXQxMzggLTM5dDEwMS41IC0xMDF0NTkuNSAtMTM0dDIxIC0xNDJ6TTE3OTIgMzg0CnY1MTJxLTEwNiAwIC0xODEgNzV0LTc1IDE4MWgtMTE1MnEwIC0xMDYgLTc1IC0xODF0LTE4MSAtNzV2LTUxMnExMDYgMCAxODEgLTc1dDc1IC0xODFoMTE1MnEwIDEwNiA3NSAxODF0MTgxIDc1ek0xOTIwIDEyMTZ2LTExNTJxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC0xNzkycS0yNiAwIC00NSAxOXQtMTkgNDV2MTE1MnEwIDI2IDE5IDQ1dDQ1IDE5aDE3OTJxMjYgMCA0NSAtMTl0MTkgLTQ1eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJjYXJldF9kb3duIiB1bmljb2RlPSImI3hmMGQ3OyIgaG9yaXotYWR2LXg9IjEwMjQiIApkPSJNMTAyNCA4MzJxMCAtMjYgLTE5IC00NWwtNDQ4IC00NDhxLTE5IC0xOSAtNDUgLTE5dC00NSAxOWwtNDQ4IDQ0OHEtMTkgMTkgLTE5IDQ1dDE5IDQ1dDQ1IDE5aDg5NnEyNiAwIDQ1IC0xOXQxOSAtNDV6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9ImNhcmV0X3VwIiB1bmljb2RlPSImI3hmMGQ4OyIgaG9yaXotYWR2LXg9IjEwMjQiIApkPSJNMTAyNCAzMjBxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC04OTZxLTI2IDAgLTQ1IDE5dC0xOSA0NXQxOSA0NWw0NDggNDQ4cTE5IDE5IDQ1IDE5dDQ1IC0xOWw0NDggLTQ0OHExOSAtMTkgMTkgLTQ1eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJjYXJldF9sZWZ0IiB1bmljb2RlPSImI3hmMGQ5OyIgaG9yaXotYWR2LXg9IjY0MCIgCmQ9Ik02NDAgMTA4OHYtODk2cTAgLTI2IC0xOSAtNDV0LTQ1IC0xOXQtNDUgMTlsLTQ0OCA0NDhxLTE5IDE5IC0xOSA0NXQxOSA0NWw0NDggNDQ4cTE5IDE5IDQ1IDE5dDQ1IC0xOXQxOSAtNDV6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9ImNhcmV0X3JpZ2h0IiB1bmljb2RlPSImI3hmMGRhOyIgaG9yaXotYWR2LXg9IjY0MCIgCmQ9Ik01NzYgNjQwcTAgLTI2IC0xOSAtNDVsLTQ0OCAtNDQ4cS0xOSAtMTkgLTQ1IC0xOXQtNDUgMTl0LTE5IDQ1djg5NnEwIDI2IDE5IDQ1dDQ1IDE5dDQ1IC0xOWw0NDggLTQ0OHExOSAtMTkgMTkgLTQ1eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJjb2x1bW5zIiB1bmljb2RlPSImI3hmMGRiOyIgaG9yaXotYWR2LXg9IjE2NjQiIApkPSJNMTYwIDBoNjA4djExNTJoLTY0MHYtMTEyMHEwIC0xMyA5LjUgLTIyLjV0MjIuNSAtOS41ek0xNTM2IDMydjExMjBoLTY0MHYtMTE1Mmg2MDhxMTMgMCAyMi41IDkuNXQ5LjUgMjIuNXpNMTY2NCAxMjQ4di0xMjE2cTAgLTY2IC00NyAtMTEzdC0xMTMgLTQ3aC0xMzQ0cS02NiAwIC0xMTMgNDd0LTQ3IDExM3YxMjE2cTAgNjYgNDcgMTEzdDExMyA0N2gxMzQ0cTY2IDAgMTEzIC00N3Q0NyAtMTEzeiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJzb3J0IiB1bmljb2RlPSImI3hmMGRjOyIgaG9yaXotYWR2LXg9IjEwMjQiIApkPSJNMTAyNCA0NDhxMCAtMjYgLTE5IC00NWwtNDQ4IC00NDhxLTE5IC0xOSAtNDUgLTE5dC00NSAxOWwtNDQ4IDQ0OHEtMTkgMTkgLTE5IDQ1dDE5IDQ1dDQ1IDE5aDg5NnEyNiAwIDQ1IC0xOXQxOSAtNDV6TTEwMjQgODMycTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtODk2cS0yNiAwIC00NSAxOXQtMTkgNDV0MTkgNDVsNDQ4IDQ0OHExOSAxOSA0NSAxOXQ0NSAtMTlsNDQ4IC00NDhxMTkgLTE5IDE5IC00NXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0ic29ydF9kb3duIiB1bmljb2RlPSImI3hmMGRkOyIgaG9yaXotYWR2LXg9IjEwMjQiIApkPSJNMTAyNCA0NDhxMCAtMjYgLTE5IC00NWwtNDQ4IC00NDhxLTE5IC0xOSAtNDUgLTE5dC00NSAxOWwtNDQ4IDQ0OHEtMTkgMTkgLTE5IDQ1dDE5IDQ1dDQ1IDE5aDg5NnEyNiAwIDQ1IC0xOXQxOSAtNDV6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InNvcnRfdXAiIHVuaWNvZGU9IiYjeGYwZGU7IiBob3Jpei1hZHYteD0iMTAyNCIgCmQ9Ik0xMDI0IDgzMnEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTg5NnEtMjYgMCAtNDUgMTl0LTE5IDQ1dDE5IDQ1bDQ0OCA0NDhxMTkgMTkgNDUgMTl0NDUgLTE5bDQ0OCAtNDQ4cTE5IC0xOSAxOSAtNDV6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9ImVudmVsb3BlX2FsdCIgdW5pY29kZT0iJiN4ZjBlMDsiIGhvcml6LWFkdi14PSIxNzkyIiAKZD0iTTE3OTIgODI2di03OTRxMCAtNjYgLTQ3IC0xMTN0LTExMyAtNDdoLTE0NzJxLTY2IDAgLTExMyA0N3QtNDcgMTEzdjc5NHE0NCAtNDkgMTAxIC04N3EzNjIgLTI0NiA0OTcgLTM0NXE1NyAtNDIgOTIuNSAtNjUuNXQ5NC41IC00OHQxMTAgLTI0LjVoMWgxcTUxIDAgMTEwIDI0LjV0OTQuNSA0OHQ5Mi41IDY1LjVxMTcwIDEyMyA0OTggMzQ1cTU3IDM5IDEwMCA4N3pNMTc5MiAxMTIwcTAgLTc5IC00OSAtMTUxdC0xMjIgLTEyMwpxLTM3NiAtMjYxIC00NjggLTMyNXEtMTAgLTcgLTQyLjUgLTMwLjV0LTU0IC0zOHQtNTIgLTMyLjV0LTU3LjUgLTI3dC01MCAtOWgtMWgtMXEtMjMgMCAtNTAgOXQtNTcuNSAyN3QtNTIgMzIuNXQtNTQgMzh0LTQyLjUgMzAuNXEtOTEgNjQgLTI2MiAxODIuNXQtMjA1IDE0Mi41cS02MiA0MiAtMTE3IDExNS41dC01NSAxMzYuNXEwIDc4IDQxLjUgMTMwdDExOC41IDUyaDE0NzJxNjUgMCAxMTIuNSAtNDd0NDcuNSAtMTEzeiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJsaW5rZWRpbiIgdW5pY29kZT0iJiN4ZjBlMTsiIApkPSJNMzQ5IDkxMXYtOTkxaC0zMzB2OTkxaDMzMHpNMzcwIDEyMTdxMSAtNzMgLTUwLjUgLTEyMnQtMTM1LjUgLTQ5aC0ycS04MiAwIC0xMzIgNDl0LTUwIDEyMnEwIDc0IDUxLjUgMTIyLjV0MTM0LjUgNDguNXQxMzMgLTQ4LjV0NTEgLTEyMi41ek0xNTM2IDQ4OHYtNTY4aC0zMjl2NTMwcTAgMTA1IC00MC41IDE2NC41dC0xMjYuNSA1OS41cS02MyAwIC0xMDUuNSAtMzQuNXQtNjMuNSAtODUuNXEtMTEgLTMwIC0xMSAtODF2LTU1M2gtMzI5CnEyIDM5OSAyIDY0N3QtMSAyOTZsLTEgNDhoMzI5di0xNDRoLTJxMjAgMzIgNDEgNTZ0NTYuNSA1MnQ4NyA0My41dDExNC41IDE1LjVxMTcxIDAgMjc1IC0xMTMuNXQxMDQgLTMzMi41eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ1bmRvIiB1bmljb2RlPSImI3hmMGUyOyIgCmQ9Ik0xNTM2IDY0MHEwIC0xNTYgLTYxIC0yOTh0LTE2NCAtMjQ1dC0yNDUgLTE2NHQtMjk4IC02MXEtMTcyIDAgLTMyNyA3Mi41dC0yNjQgMjA0LjVxLTcgMTAgLTYuNSAyMi41dDguNSAyMC41bDEzNyAxMzhxMTAgOSAyNSA5cTE2IC0yIDIzIC0xMnE3MyAtOTUgMTc5IC0xNDd0MjI1IC01MnExMDQgMCAxOTguNSA0MC41dDE2My41IDEwOS41dDEwOS41IDE2My41dDQwLjUgMTk4LjV0LTQwLjUgMTk4LjV0LTEwOS41IDE2My41CnQtMTYzLjUgMTA5LjV0LTE5OC41IDQwLjVxLTk4IDAgLTE4OCAtMzUuNXQtMTYwIC0xMDEuNWwxMzcgLTEzOHEzMSAtMzAgMTQgLTY5cS0xNyAtNDAgLTU5IC00MGgtNDQ4cS0yNiAwIC00NSAxOXQtMTkgNDV2NDQ4cTAgNDIgNDAgNTlxMzkgMTcgNjkgLTE0bDEzMCAtMTI5cTEwNyAxMDEgMjQ0LjUgMTU2LjV0Mjg0LjUgNTUuNXExNTYgMCAyOTggLTYxdDI0NSAtMTY0dDE2NCAtMjQ1dDYxIC0yOTh6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9ImxlZ2FsIiB1bmljb2RlPSImI3hmMGUzOyIgaG9yaXotYWR2LXg9IjE3OTIiIApkPSJNMTc3MSAwcTAgLTUzIC0zNyAtOTBsLTEwNyAtMTA4cS0zOSAtMzcgLTkxIC0zN3EtNTMgMCAtOTAgMzdsLTM2MyAzNjRxLTM4IDM2IC0zOCA5MHEwIDUzIDQzIDk2bC0yNTYgMjU2bC0xMjYgLTEyNnEtMTQgLTE0IC0zNCAtMTR0LTM0IDE0cTIgLTIgMTIuNSAtMTJ0MTIuNSAtMTN0MTAgLTExLjV0MTAgLTEzLjV0NiAtMTMuNXQ1LjUgLTE2LjV0MS41IC0xOHEwIC0zOCAtMjggLTY4cS0zIC0zIC0xNi41IC0xOHQtMTkgLTIwLjUKdC0xOC41IC0xNi41dC0yMiAtMTUuNXQtMjIgLTl0LTI2IC00LjVxLTQwIDAgLTY4IDI4bC00MDggNDA4cS0yOCAyOCAtMjggNjhxMCAxMyA0LjUgMjZ0OSAyMnQxNS41IDIydDE2LjUgMTguNXQyMC41IDE5dDE4IDE2LjVxMzAgMjggNjggMjhxMTAgMCAxOCAtMS41dDE2LjUgLTUuNXQxMy41IC02dDEzLjUgLTEwdDExLjUgLTEwdDEzIC0xMi41dDEyIC0xMi41cS0xNCAxNCAtMTQgMzR0MTQgMzRsMzQ4IDM0OHExNCAxNCAzNCAxNHQzNCAtMTQKcS0yIDIgLTEyLjUgMTJ0LTEyLjUgMTN0LTEwIDExLjV0LTEwIDEzLjV0LTYgMTMuNXQtNS41IDE2LjV0LTEuNSAxOHEwIDM4IDI4IDY4cTMgMyAxNi41IDE4dDE5IDIwLjV0MTguNSAxNi41dDIyIDE1LjV0MjIgOXQyNiA0LjVxNDAgMCA2OCAtMjhsNDA4IC00MDhxMjggLTI4IDI4IC02OHEwIC0xMyAtNC41IC0yNnQtOSAtMjJ0LTE1LjUgLTIydC0xNi41IC0xOC41dC0yMC41IC0xOXQtMTggLTE2LjVxLTMwIC0yOCAtNjggLTI4CnEtMTAgMCAtMTggMS41dC0xNi41IDUuNXQtMTMuNSA2dC0xMy41IDEwdC0xMS41IDEwdC0xMyAxMi41dC0xMiAxMi41cTE0IC0xNCAxNCAtMzR0LTE0IC0zNGwtMTI2IC0xMjZsMjU2IC0yNTZxNDMgNDMgOTYgNDNxNTIgMCA5MSAtMzdsMzYzIC0zNjNxMzcgLTM5IDM3IC05MXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iZGFzaGJvYXJkIiB1bmljb2RlPSImI3hmMGU0OyIgaG9yaXotYWR2LXg9IjE3OTIiIApkPSJNMzg0IDM4NHEwIDUzIC0zNy41IDkwLjV0LTkwLjUgMzcuNXQtOTAuNSAtMzcuNXQtMzcuNSAtOTAuNXQzNy41IC05MC41dDkwLjUgLTM3LjV0OTAuNSAzNy41dDM3LjUgOTAuNXpNNTc2IDgzMnEwIDUzIC0zNy41IDkwLjV0LTkwLjUgMzcuNXQtOTAuNSAtMzcuNXQtMzcuNSAtOTAuNXQzNy41IC05MC41dDkwLjUgLTM3LjV0OTAuNSAzNy41dDM3LjUgOTAuNXpNMTAwNCAzNTFsMTAxIDM4MnE2IDI2IC03LjUgNDguNXQtMzguNSAyOS41CnQtNDggLTYuNXQtMzAgLTM5LjVsLTEwMSAtMzgycS02MCAtNSAtMTA3IC00My41dC02MyAtOTguNXEtMjAgLTc3IDIwIC0xNDZ0MTE3IC04OXQxNDYgMjB0ODkgMTE3cTE2IDYwIC02IDExN3QtNzIgOTF6TTE2NjQgMzg0cTAgNTMgLTM3LjUgOTAuNXQtOTAuNSAzNy41dC05MC41IC0zNy41dC0zNy41IC05MC41dDM3LjUgLTkwLjV0OTAuNSAtMzcuNXQ5MC41IDM3LjV0MzcuNSA5MC41ek0xMDI0IDEwMjRxMCA1MyAtMzcuNSA5MC41CnQtOTAuNSAzNy41dC05MC41IC0zNy41dC0zNy41IC05MC41dDM3LjUgLTkwLjV0OTAuNSAtMzcuNXQ5MC41IDM3LjV0MzcuNSA5MC41ek0xNDcyIDgzMnEwIDUzIC0zNy41IDkwLjV0LTkwLjUgMzcuNXQtOTAuNSAtMzcuNXQtMzcuNSAtOTAuNXQzNy41IC05MC41dDkwLjUgLTM3LjV0OTAuNSAzNy41dDM3LjUgOTAuNXpNMTc5MiAzODRxMCAtMjYxIC0xNDEgLTQ4M3EtMTkgLTI5IC01NCAtMjloLTE0MDJxLTM1IDAgLTU0IDI5CnEtMTQxIDIyMSAtMTQxIDQ4M3EwIDE4MiA3MSAzNDh0MTkxIDI4NnQyODYgMTkxdDM0OCA3MXQzNDggLTcxdDI4NiAtMTkxdDE5MSAtMjg2dDcxIC0zNDh6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9ImNvbW1lbnRfYWx0IiB1bmljb2RlPSImI3hmMGU1OyIgaG9yaXotYWR2LXg9IjE3OTIiIApkPSJNODk2IDExNTJxLTIwNCAwIC0zODEuNSAtNjkuNXQtMjgyIC0xODcuNXQtMTA0LjUgLTI1NXEwIC0xMTIgNzEuNSAtMjEzLjV0MjAxLjUgLTE3NS41bDg3IC01MGwtMjcgLTk2cS0yNCAtOTEgLTcwIC0xNzJxMTUyIDYzIDI3NSAxNzFsNDMgMzhsNTcgLTZxNjkgLTggMTMwIC04cTIwNCAwIDM4MS41IDY5LjV0MjgyIDE4Ny41dDEwNC41IDI1NXQtMTA0LjUgMjU1dC0yODIgMTg3LjV0LTM4MS41IDY5LjV6TTE3OTIgNjQwCnEwIC0xNzQgLTEyMCAtMzIxLjV0LTMyNiAtMjMzdC00NTAgLTg1LjVxLTcwIDAgLTE0NSA4cS0xOTggLTE3NSAtNDYwIC0yNDJxLTQ5IC0xNCAtMTE0IC0yMmgtNXEtMTUgMCAtMjcgMTAuNXQtMTYgMjcuNXYxcS0zIDQgLTAuNSAxMnQyIDEwdDQuNSA5LjVsNiA5dDcgOC41dDggOXE3IDggMzEgMzQuNXQzNC41IDM4dDMxIDM5LjV0MzIuNSA1MXQyNyA1OXQyNiA3NnEtMTU3IDg5IC0yNDcuNSAyMjB0LTkwLjUgMjgxcTAgMTc0IDEyMCAzMjEuNQp0MzI2IDIzM3Q0NTAgODUuNXQ0NTAgLTg1LjV0MzI2IC0yMzN0MTIwIC0zMjEuNXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iY29tbWVudHNfYWx0IiB1bmljb2RlPSImI3hmMGU2OyIgaG9yaXotYWR2LXg9IjE3OTIiIApkPSJNNzA0IDExNTJxLTE1MyAwIC0yODYgLTUydC0yMTEuNSAtMTQxdC03OC41IC0xOTFxMCAtODIgNTMgLTE1OHQxNDkgLTEzMmw5NyAtNTZsLTM1IC04NHEzNCAyMCA2MiAzOWw0NCAzMWw1MyAtMTBxNzggLTE0IDE1MyAtMTRxMTUzIDAgMjg2IDUydDIxMS41IDE0MXQ3OC41IDE5MXQtNzguNSAxOTF0LTIxMS41IDE0MXQtMjg2IDUyek03MDQgMTI4MHExOTEgMCAzNTMuNSAtNjguNXQyNTYuNSAtMTg2LjV0OTQgLTI1N3QtOTQgLTI1Nwp0LTI1Ni41IC0xODYuNXQtMzUzLjUgLTY4LjVxLTg2IDAgLTE3NiAxNnEtMTI0IC04OCAtMjc4IC0xMjhxLTM2IC05IC04NiAtMTZoLTNxLTExIDAgLTIwLjUgOHQtMTEuNSAyMXEtMSAzIC0xIDYuNXQwLjUgNi41dDIgNmwyLjUgNXQzLjUgNS41dDQgNXQ0LjUgNXQ0IDQuNXE1IDYgMjMgMjV0MjYgMjkuNXQyMi41IDI5dDI1IDM4LjV0MjAuNSA0NHEtMTI0IDcyIC0xOTUgMTc3dC03MSAyMjRxMCAxMzkgOTQgMjU3dDI1Ni41IDE4Ni41CnQzNTMuNSA2OC41ek0xNTI2IDExMXExMCAtMjQgMjAuNSAtNDR0MjUgLTM4LjV0MjIuNSAtMjl0MjYgLTI5LjV0MjMgLTI1cTEgLTEgNCAtNC41dDQuNSAtNXQ0IC01dDMuNSAtNS41bDIuNSAtNXQyIC02dDAuNSAtNi41dC0xIC02LjVxLTMgLTE0IC0xMyAtMjJ0LTIyIC03cS01MCA3IC04NiAxNnEtMTU0IDQwIC0yNzggMTI4cS05MCAtMTYgLTE3NiAtMTZxLTI3MSAwIC00NzIgMTMycTU4IC00IDg4IC00cTE2MSAwIDMwOSA0NXQyNjQgMTI5CnExMjUgOTIgMTkyIDIxMnQ2NyAyNTRxMCA3NyAtMjMgMTUycTEyOSAtNzEgMjA0IC0xNzh0NzUgLTIzMHEwIC0xMjAgLTcxIC0yMjQuNXQtMTk1IC0xNzYuNXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iYm9sdCIgdW5pY29kZT0iJiN4ZjBlNzsiIGhvcml6LWFkdi14PSI4OTYiIApkPSJNODg1IDk3MHExOCAtMjAgNyAtNDRsLTU0MCAtMTE1N3EtMTMgLTI1IC00MiAtMjVxLTQgMCAtMTQgMnEtMTcgNSAtMjUuNSAxOXQtNC41IDMwbDE5NyA4MDhsLTQwNiAtMTAxcS00IC0xIC0xMiAtMXEtMTggMCAtMzEgMTFxLTE4IDE1IC0xMyAzOWwyMDEgODI1cTQgMTQgMTYgMjN0MjggOWgzMjhxMTkgMCAzMiAtMTIuNXQxMyAtMjkuNXEwIC04IC01IC0xOGwtMTcxIC00NjNsMzk2IDk4cTggMiAxMiAycTE5IDAgMzQgLTE1eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJzaXRlbWFwIiB1bmljb2RlPSImI3hmMGU4OyIgaG9yaXotYWR2LXg9IjE3OTIiIApkPSJNMTc5MiAyODh2LTMyMHEwIC00MCAtMjggLTY4dC02OCAtMjhoLTMyMHEtNDAgMCAtNjggMjh0LTI4IDY4djMyMHEwIDQwIDI4IDY4dDY4IDI4aDk2djE5MmgtNTEydi0xOTJoOTZxNDAgMCA2OCAtMjh0MjggLTY4di0zMjBxMCAtNDAgLTI4IC02OHQtNjggLTI4aC0zMjBxLTQwIDAgLTY4IDI4dC0yOCA2OHYzMjBxMCA0MCAyOCA2OHQ2OCAyOGg5NnYxOTJoLTUxMnYtMTkyaDk2cTQwIDAgNjggLTI4dDI4IC02OHYtMzIwCnEwIC00MCAtMjggLTY4dC02OCAtMjhoLTMyMHEtNDAgMCAtNjggMjh0LTI4IDY4djMyMHEwIDQwIDI4IDY4dDY4IDI4aDk2djE5MnEwIDUyIDM4IDkwdDkwIDM4aDUxMnYxOTJoLTk2cS00MCAwIC02OCAyOHQtMjggNjh2MzIwcTAgNDAgMjggNjh0NjggMjhoMzIwcTQwIDAgNjggLTI4dDI4IC02OHYtMzIwcTAgLTQwIC0yOCAtNjh0LTY4IC0yOGgtOTZ2LTE5Mmg1MTJxNTIgMCA5MCAtMzh0MzggLTkwdi0xOTJoOTZxNDAgMCA2OCAtMjh0MjggLTY4CnoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idW1icmVsbGEiIHVuaWNvZGU9IiYjeGYwZTk7IiBob3Jpei1hZHYteD0iMTY2NCIgCmQ9Ik04OTYgNzA4di01ODBxMCAtMTA0IC03NiAtMTgwdC0xODAgLTc2dC0xODAgNzZ0LTc2IDE4MHEwIDI2IDE5IDQ1dDQ1IDE5dDQ1IC0xOXQxOSAtNDVxMCAtNTAgMzkgLTg5dDg5IC0zOXQ4OSAzOXQzOSA4OXY1ODBxMzMgMTEgNjQgMTF0NjQgLTExek0xNjY0IDY4MXEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVxLTExIDAgLTIzIDEwcS00OSA0NiAtOTMgNjl0LTEwMiAyM3EtNjggMCAtMTI4IC0zN3QtMTAzIC05NwpxLTcgLTEwIC0xNy41IC0yOHQtMTQuNSAtMjRxLTExIC0xNyAtMjggLTE3cS0xOCAwIC0yOSAxN3EtNCA2IC0xNC41IDI0dC0xNy41IDI4cS00MyA2MCAtMTAyLjUgOTd0LTEyNy41IDM3dC0xMjcuNSAtMzd0LTEwMi41IC05N3EtNyAtMTAgLTE3LjUgLTI4dC0xNC41IC0yNHEtMTEgLTE3IC0yOSAtMTdxLTE3IDAgLTI4IDE3cS00IDYgLTE0LjUgMjR0LTE3LjUgMjhxLTQzIDYwIC0xMDMgOTd0LTEyOCAzN3EtNTggMCAtMTAyIC0yM3QtOTMgLTY5CnEtMTIgLTEwIC0yMyAtMTBxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXEwIDUgMSA3cTQ1IDE4MyAxNzIuNSAzMTkuNXQyOTggMjA0LjV0MzYwLjUgNjhxMTQwIDAgMjc0LjUgLTQwdDI0Ni41IC0xMTMuNXQxOTQuNSAtMTg3dDExNS41IC0yNTEuNXExIC0yIDEgLTd6TTg5NiAxNDA4di05OHEtNDIgMiAtNjQgMnQtNjQgLTJ2OThxMCAyNiAxOSA0NXQ0NSAxOXQ0NSAtMTl0MTkgLTQ1eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJwYXN0ZSIgdW5pY29kZT0iJiN4ZjBlYTsiIGhvcml6LWFkdi14PSIxNzkyIiAKZD0iTTc2OCAtMTI4aDg5NnY2NDBoLTQxNnEtNDAgMCAtNjggMjh0LTI4IDY4djQxNmgtMzg0di0xMTUyek0xMDI0IDEzMTJ2NjRxMCAxMyAtOS41IDIyLjV0LTIyLjUgOS41aC03MDRxLTEzIDAgLTIyLjUgLTkuNXQtOS41IC0yMi41di02NHEwIC0xMyA5LjUgLTIyLjV0MjIuNSAtOS41aDcwNHExMyAwIDIyLjUgOS41dDkuNSAyMi41ek0xMjgwIDY0MGgyOTlsLTI5OSAyOTl2LTI5OXpNMTc5MiA1MTJ2LTY3MnEwIC00MCAtMjggLTY4dC02OCAtMjgKaC05NjBxLTQwIDAgLTY4IDI4dC0yOCA2OHYxNjBoLTU0NHEtNDAgMCAtNjggMjh0LTI4IDY4djEzNDRxMCA0MCAyOCA2OHQ2OCAyOGgxMDg4cTQwIDAgNjggLTI4dDI4IC02OHYtMzI4cTIxIC0xMyAzNiAtMjhsNDA4IC00MDhxMjggLTI4IDQ4IC03NnQyMCAtODh6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9ImxpZ2h0X2J1bGIiIHVuaWNvZGU9IiYjeGYwZWI7IiBob3Jpei1hZHYteD0iMTAyNCIgCmQ9Ik03MzYgOTYwcTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNXQtMjIuNSA5LjV0LTkuNSAyMi41cTAgNDYgLTU0IDcxdC0xMDYgMjVxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXQ5LjUgMjIuNXQyMi41IDkuNXE1MCAwIDk5LjUgLTE2dDg3IC01NHQzNy41IC05MHpNODk2IDk2MHEwIDcyIC0zNC41IDEzNHQtOTAgMTAxLjV0LTEyMyA2MnQtMTM2LjUgMjIuNXQtMTM2LjUgLTIyLjV0LTEyMyAtNjJ0LTkwIC0xMDEuNXQtMzQuNSAtMTM0CnEwIC0xMDEgNjggLTE4MHExMCAtMTEgMzAuNSAtMzN0MzAuNSAtMzNxMTI4IC0xNTMgMTQxIC0yOThoMjI4cTEzIDE0NSAxNDEgMjk4cTEwIDExIDMwLjUgMzN0MzAuNSAzM3E2OCA3OSA2OCAxODB6TTEwMjQgOTYwcTAgLTE1NSAtMTAzIC0yNjhxLTQ1IC00OSAtNzQuNSAtODd0LTU5LjUgLTk1LjV0LTM0IC0xMDcuNXE0NyAtMjggNDcgLTgycTAgLTM3IC0yNSAtNjRxMjUgLTI3IDI1IC02NHEwIC01MiAtNDUgLTgxcTEzIC0yMyAxMyAtNDcKcTAgLTQ2IC0zMS41IC03MXQtNzcuNSAtMjVxLTIwIC00NCAtNjAgLTcwdC04NyAtMjZ0LTg3IDI2dC02MCA3MHEtNDYgMCAtNzcuNSAyNXQtMzEuNSA3MXEwIDI0IDEzIDQ3cS00NSAyOSAtNDUgODFxMCAzNyAyNSA2NHEtMjUgMjcgLTI1IDY0cTAgNTQgNDcgODJxLTQgNTAgLTM0IDEwNy41dC01OS41IDk1LjV0LTc0LjUgODdxLTEwMyAxMTMgLTEwMyAyNjhxMCA5OSA0NC41IDE4NC41dDExNyAxNDJ0MTY0IDg5dDE4Ni41IDMyLjUKdDE4Ni41IC0zMi41dDE2NCAtODl0MTE3IC0xNDJ0NDQuNSAtMTg0LjV6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9ImV4Y2hhbmdlIiB1bmljb2RlPSImI3hmMGVjOyIgaG9yaXotYWR2LXg9IjE3OTIiIApkPSJNMTc5MiAzNTJ2LTE5MnEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTEzNzZ2LTE5MnEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVxLTEyIDAgLTI0IDEwbC0zMTkgMzIwcS05IDkgLTkgMjJxMCAxNCA5IDIzbDMyMCAzMjBxOSA5IDIzIDlxMTMgMCAyMi41IC05LjV0OS41IC0yMi41di0xOTJoMTM3NnExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6TTE3OTIgODk2cTAgLTE0IC05IC0yM2wtMzIwIC0zMjBxLTkgLTkgLTIzIC05CnEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djE5MmgtMTM3NnEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djE5MnEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDEzNzZ2MTkycTAgMTQgOSAyM3QyMyA5cTEyIDAgMjQgLTEwbDMxOSAtMzE5cTkgLTkgOSAtMjN6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9ImNsb3VkX2Rvd25sb2FkIiB1bmljb2RlPSImI3hmMGVkOyIgaG9yaXotYWR2LXg9IjE5MjAiIApkPSJNMTI4MCA2MDhxMCAxNCAtOSAyM3QtMjMgOWgtMjI0djM1MnEwIDEzIC05LjUgMjIuNXQtMjIuNSA5LjVoLTE5MnEtMTMgMCAtMjIuNSAtOS41dC05LjUgLTIyLjV2LTM1MmgtMjI0cS0xMyAwIC0yMi41IC05LjV0LTkuNSAtMjIuNXEwIC0xNCA5IC0yM2wzNTIgLTM1MnE5IC05IDIzIC05dDIzIDlsMzUxIDM1MXExMCAxMiAxMCAyNHpNMTkyMCAzODRxMCAtMTU5IC0xMTIuNSAtMjcxLjV0LTI3MS41IC0xMTIuNWgtMTA4OApxLTE4NSAwIC0zMTYuNSAxMzEuNXQtMTMxLjUgMzE2LjVxMCAxMzAgNzAgMjQwdDE4OCAxNjVxLTIgMzAgLTIgNDNxMCAyMTIgMTUwIDM2MnQzNjIgMTUwcTE1NiAwIDI4NS41IC04N3QxODguNSAtMjMxcTcxIDYyIDE2NiA2MnExMDYgMCAxODEgLTc1dDc1IC0xODFxMCAtNzYgLTQxIC0xMzhxMTMwIC0zMSAyMTMuNSAtMTM1LjV0ODMuNSAtMjM4LjV6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9ImNsb3VkX3VwbG9hZCIgdW5pY29kZT0iJiN4ZjBlZTsiIGhvcml6LWFkdi14PSIxOTIwIiAKZD0iTTEyODAgNjcycTAgMTQgLTkgMjNsLTM1MiAzNTJxLTkgOSAtMjMgOXQtMjMgLTlsLTM1MSAtMzUxcS0xMCAtMTIgLTEwIC0yNHEwIC0xNCA5IC0yM3QyMyAtOWgyMjR2LTM1MnEwIC0xMyA5LjUgLTIyLjV0MjIuNSAtOS41aDE5MnExMyAwIDIyLjUgOS41dDkuNSAyMi41djM1MmgyMjRxMTMgMCAyMi41IDkuNXQ5LjUgMjIuNXpNMTkyMCAzODRxMCAtMTU5IC0xMTIuNSAtMjcxLjV0LTI3MS41IC0xMTIuNWgtMTA4OApxLTE4NSAwIC0zMTYuNSAxMzEuNXQtMTMxLjUgMzE2LjVxMCAxMzAgNzAgMjQwdDE4OCAxNjVxLTIgMzAgLTIgNDNxMCAyMTIgMTUwIDM2MnQzNjIgMTUwcTE1NiAwIDI4NS41IC04N3QxODguNSAtMjMxcTcxIDYyIDE2NiA2MnExMDYgMCAxODEgLTc1dDc1IC0xODFxMCAtNzYgLTQxIC0xMzhxMTMwIC0zMSAyMTMuNSAtMTM1LjV0ODMuNSAtMjM4LjV6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InVzZXJfbWQiIHVuaWNvZGU9IiYjeGYwZjA7IiBob3Jpei1hZHYteD0iMTQwOCIgCmQ9Ik0zODQgMTkycTAgLTI2IC0xOSAtNDV0LTQ1IC0xOXQtNDUgMTl0LTE5IDQ1dDE5IDQ1dDQ1IDE5dDQ1IC0xOXQxOSAtNDV6TTE0MDggMTMxcTAgLTEyMSAtNzMgLTE5MHQtMTk0IC02OWgtODc0cS0xMjEgMCAtMTk0IDY5dC03MyAxOTBxMCA2OCA1LjUgMTMxdDI0IDEzOHQ0Ny41IDEzMi41dDgxIDEwM3QxMjAgNjAuNXEtMjIgLTUyIC0yMiAtMTIwdi0yMDNxLTU4IC0yMCAtOTMgLTcwdC0zNSAtMTExcTAgLTgwIDU2IC0xMzZ0MTM2IC01Ngp0MTM2IDU2dDU2IDEzNnEwIDYxIC0zNS41IDExMXQtOTIuNSA3MHYyMDNxMCA2MiAyNSA5M3ExMzIgLTEwNCAyOTUgLTEwNHQyOTUgMTA0cTI1IC0zMSAyNSAtOTN2LTY0cS0xMDYgMCAtMTgxIC03NXQtNzUgLTE4MXYtODlxLTMyIC0yOSAtMzIgLTcxcTAgLTQwIDI4IC02OHQ2OCAtMjh0NjggMjh0MjggNjhxMCA0MiAtMzIgNzF2ODlxMCA1MiAzOCA5MHQ5MCAzOHQ5MCAtMzh0MzggLTkwdi04OXEtMzIgLTI5IC0zMiAtNzFxMCAtNDAgMjggLTY4CnQ2OCAtMjh0NjggMjh0MjggNjhxMCA0MiAtMzIgNzF2ODlxMCA2OCAtMzQuNSAxMjcuNXQtOTMuNSA5My41cTAgMTAgMC41IDQyLjV0MCA0OHQtMi41IDQxLjV0LTcgNDd0LTEzIDQwcTY4IC0xNSAxMjAgLTYwLjV0ODEgLTEwM3Q0Ny41IC0xMzIuNXQyNCAtMTM4dDUuNSAtMTMxek0xMDg4IDEwMjRxMCAtMTU5IC0xMTIuNSAtMjcxLjV0LTI3MS41IC0xMTIuNXQtMjcxLjUgMTEyLjV0LTExMi41IDI3MS41dDExMi41IDI3MS41dDI3MS41IDExMi41CnQyNzEuNSAtMTEyLjV0MTEyLjUgLTI3MS41eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJzdGV0aG9zY29wZSIgdW5pY29kZT0iJiN4ZjBmMTsiIGhvcml6LWFkdi14PSIxNDA4IiAKZD0iTTEyODAgODMycTAgMjYgLTE5IDQ1dC00NSAxOXQtNDUgLTE5dC0xOSAtNDV0MTkgLTQ1dDQ1IC0xOXQ0NSAxOXQxOSA0NXpNMTQwOCA4MzJxMCAtNjIgLTM1LjUgLTExMXQtOTIuNSAtNzB2LTM5NXEwIC0xNTkgLTEzMS41IC0yNzEuNXQtMzE2LjUgLTExMi41dC0zMTYuNSAxMTIuNXQtMTMxLjUgMjcxLjV2MTMycS0xNjQgMjAgLTI3NCAxMjh0LTExMCAyNTJ2NTEycTAgMjYgMTkgNDV0NDUgMTlxNiAwIDE2IC0ycTE3IDMwIDQ3IDQ4CnQ2NSAxOHE1MyAwIDkwLjUgLTM3LjV0MzcuNSAtOTAuNXQtMzcuNSAtOTAuNXQtOTAuNSAtMzcuNXEtMzMgMCAtNjQgMTh2LTQwMnEwIC0xMDYgOTQgLTE4MXQyMjYgLTc1dDIyNiA3NXQ5NCAxODF2NDAycS0zMSAtMTggLTY0IC0xOHEtNTMgMCAtOTAuNSAzNy41dC0zNy41IDkwLjV0MzcuNSA5MC41dDkwLjUgMzcuNXEzNSAwIDY1IC0xOHQ0NyAtNDhxMTAgMiAxNiAycTI2IDAgNDUgLTE5dDE5IC00NXYtNTEycTAgLTE0NCAtMTEwIC0yNTIKdC0yNzQgLTEyOHYtMTMycTAgLTEwNiA5NCAtMTgxdDIyNiAtNzV0MjI2IDc1dDk0IDE4MXYzOTVxLTU3IDIxIC05Mi41IDcwdC0zNS41IDExMXEwIDgwIDU2IDEzNnQxMzYgNTZ0MTM2IC01NnQ1NiAtMTM2eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJzdWl0Y2FzZSIgdW5pY29kZT0iJiN4ZjBmMjsiIGhvcml6LWFkdi14PSIxNzkyIiAKZD0iTTY0MCAxMTUyaDUxMnYxMjhoLTUxMnYtMTI4ek0yODggMTE1MnYtMTI4MGgtNjRxLTkyIDAgLTE1OCA2NnQtNjYgMTU4djgzMnEwIDkyIDY2IDE1OHQxNTggNjZoNjR6TTE0MDggMTE1MnYtMTI4MGgtMTAyNHYxMjgwaDEyOHYxNjBxMCA0MCAyOCA2OHQ2OCAyOGg1NzZxNDAgMCA2OCAtMjh0MjggLTY4di0xNjBoMTI4ek0xNzkyIDkyOHYtODMycTAgLTkyIC02NiAtMTU4dC0xNTggLTY2aC02NHYxMjgwaDY0cTkyIDAgMTU4IC02Ngp0NjYgLTE1OHoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iYmVsbF9hbHQiIHVuaWNvZGU9IiYjeGYwZjM7IiBob3Jpei1hZHYteD0iMTc5MiIgCmQ9Ik05MTIgLTE2MHEwIDE2IC0xNiAxNnEtNTkgMCAtMTAxLjUgNDIuNXQtNDIuNSAxMDEuNXEwIDE2IC0xNiAxNnQtMTYgLTE2cTAgLTczIDUxLjUgLTEyNC41dDEyNC41IC01MS41cTE2IDAgMTYgMTZ6TTE3MjggMTI4cTAgLTUyIC0zOCAtOTB0LTkwIC0zOGgtNDQ4cTAgLTEwNiAtNzUgLTE4MXQtMTgxIC03NXQtMTgxIDc1dC03NSAxODFoLTQ0OHEtNTIgMCAtOTAgMzh0LTM4IDkwcTUwIDQyIDkxIDg4dDg1IDExOS41dDc0LjUgMTU4LjUKdDUwIDIwNnQxOS41IDI2MHEwIDE1MiAxMTcgMjgyLjV0MzA3IDE1OC41cS04IDE5IC04IDM5cTAgNDAgMjggNjh0NjggMjh0NjggLTI4dDI4IC02OHEwIC0yMCAtOCAtMzlxMTkwIC0yOCAzMDcgLTE1OC41dDExNyAtMjgyLjVxMCAtMTM5IDE5LjUgLTI2MHQ1MCAtMjA2dDc0LjUgLTE1OC41dDg1IC0xMTkuNXQ5MSAtODh6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9ImNvZmZlZSIgdW5pY29kZT0iJiN4ZjBmNDsiIGhvcml6LWFkdi14PSIxOTIwIiAKZD0iTTE2NjQgODk2cTAgODAgLTU2IDEzNnQtMTM2IDU2aC02NHYtMzg0aDY0cTgwIDAgMTM2IDU2dDU2IDEzNnpNMCAxMjhoMTc5MnEwIC0xMDYgLTc1IC0xODF0LTE4MSAtNzVoLTEyODBxLTEwNiAwIC0xODEgNzV0LTc1IDE4MXpNMTg1NiA4OTZxMCAtMTU5IC0xMTIuNSAtMjcxLjV0LTI3MS41IC0xMTIuNWgtNjR2LTMycTAgLTkyIC02NiAtMTU4dC0xNTggLTY2aC03MDRxLTkyIDAgLTE1OCA2NnQtNjYgMTU4djczNnEwIDI2IDE5IDQ1CnQ0NSAxOWgxMTUycTE1OSAwIDI3MS41IC0xMTIuNXQxMTIuNSAtMjcxLjV6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9ImZvb2QiIHVuaWNvZGU9IiYjeGYwZjU7IiBob3Jpei1hZHYteD0iMTQwOCIgCmQ9Ik02NDAgMTQ3MnYtNjQwcTAgLTYxIC0zNS41IC0xMTF0LTkyLjUgLTcwdi03NzlxMCAtNTIgLTM4IC05MHQtOTAgLTM4aC0xMjhxLTUyIDAgLTkwIDM4dC0zOCA5MHY3NzlxLTU3IDIwIC05Mi41IDcwdC0zNS41IDExMXY2NDBxMCAyNiAxOSA0NXQ0NSAxOXQ0NSAtMTl0MTkgLTQ1di00MTZxMCAtMjYgMTkgLTQ1dDQ1IC0xOXQ0NSAxOXQxOSA0NXY0MTZxMCAyNiAxOSA0NXQ0NSAxOXQ0NSAtMTl0MTkgLTQ1di00MTZxMCAtMjYgMTkgLTQ1CnQ0NSAtMTl0NDUgMTl0MTkgNDV2NDE2cTAgMjYgMTkgNDV0NDUgMTl0NDUgLTE5dDE5IC00NXpNMTQwOCAxNDcydi0xNjAwcTAgLTUyIC0zOCAtOTB0LTkwIC0zOGgtMTI4cS01MiAwIC05MCAzOHQtMzggOTB2NTEyaC0yMjRxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXY4MDBxMCAxMzIgOTQgMjI2dDIyNiA5NGgyNTZxMjYgMCA0NSAtMTl0MTkgLTQ1eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJmaWxlX3RleHRfYWx0IiB1bmljb2RlPSImI3hmMGY2OyIgCmQ9Ik0xNDY4IDExNTZxMjggLTI4IDQ4IC03NnQyMCAtODh2LTExNTJxMCAtNDAgLTI4IC02OHQtNjggLTI4aC0xMzQ0cS00MCAwIC02OCAyOHQtMjggNjh2MTYwMHEwIDQwIDI4IDY4dDY4IDI4aDg5NnE0MCAwIDg4IC0yMHQ3NiAtNDh6TTEwMjQgMTQwMHYtMzc2aDM3NnEtMTAgMjkgLTIyIDQxbC0zMTMgMzEzcS0xMiAxMiAtNDEgMjJ6TTE0MDggLTEyOHYxMDI0aC00MTZxLTQwIDAgLTY4IDI4dC0yOCA2OHY0MTZoLTc2OHYtMTUzNmgxMjgwegpNMzg0IDczNnEwIDE0IDkgMjN0MjMgOWg3MDRxMTQgMCAyMyAtOXQ5IC0yM3YtNjRxMCAtMTQgLTkgLTIzdC0yMyAtOWgtNzA0cS0xNCAwIC0yMyA5dC05IDIzdjY0ek0xMTIwIDUxMnExNCAwIDIzIC05dDkgLTIzdi02NHEwIC0xNCAtOSAtMjN0LTIzIC05aC03MDRxLTE0IDAgLTIzIDl0LTkgMjN2NjRxMCAxNCA5IDIzdDIzIDloNzA0ek0xMTIwIDI1NnExNCAwIDIzIC05dDkgLTIzdi02NHEwIC0xNCAtOSAtMjN0LTIzIC05aC03MDQKcS0xNCAwIC0yMyA5dC05IDIzdjY0cTAgMTQgOSAyM3QyMyA5aDcwNHoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iYnVpbGRpbmciIHVuaWNvZGU9IiYjeGYwZjc7IiBob3Jpei1hZHYteD0iMTQwOCIgCmQ9Ik0zODQgMjI0di02NHEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTY0cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2NjRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWg2NHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6TTM4NCA0ODB2LTY0cTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtNjRxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXY2NHEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDY0cTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXoKTTY0MCA0ODB2LTY0cTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtNjRxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXY2NHEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDY0cTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXpNMzg0IDczNnYtNjRxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC02NHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djY0cTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoNjRxMTMgMCAyMi41IC05LjV0OS41IC0yMi41egpNMTE1MiAyMjR2LTY0cTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtNjRxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXY2NHEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDY0cTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXpNODk2IDQ4MHYtNjRxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC02NHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djY0cTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoNjRxMTMgMCAyMi41IC05LjV0OS41IC0yMi41egpNNjQwIDczNnYtNjRxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC02NHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djY0cTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoNjRxMTMgMCAyMi41IC05LjV0OS41IC0yMi41ek0zODQgOTkydi02NHEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTY0cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2NjRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWg2NHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6Ck0xMTUyIDQ4MHYtNjRxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC02NHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djY0cTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoNjRxMTMgMCAyMi41IC05LjV0OS41IC0yMi41ek04OTYgNzM2di02NHEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTY0cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2NjRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWg2NHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6Ck02NDAgOTkydi02NHEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTY0cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2NjRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWg2NHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6TTM4NCAxMjQ4di02NHEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTY0cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2NjRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWg2NHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6Ck0xMTUyIDczNnYtNjRxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC02NHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djY0cTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoNjRxMTMgMCAyMi41IC05LjV0OS41IC0yMi41ek04OTYgOTkydi02NHEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTY0cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2NjRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWg2NHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6Ck02NDAgMTI0OHYtNjRxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC02NHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djY0cTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoNjRxMTMgMCAyMi41IC05LjV0OS41IC0yMi41ek0xMTUyIDk5MnYtNjRxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC02NHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djY0cTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoNjRxMTMgMCAyMi41IC05LjV0OS41IC0yMi41egpNODk2IDEyNDh2LTY0cTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtNjRxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXY2NHEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDY0cTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXpNMTE1MiAxMjQ4di02NHEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTY0cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2NjRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWg2NHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6Ck04OTYgLTEyOGgzODR2MTUzNmgtMTE1MnYtMTUzNmgzODR2MjI0cTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoMzIwcTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXYtMjI0ek0xNDA4IDE0NzJ2LTE2NjRxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC0xMjgwcS0yNiAwIC00NSAxOXQtMTkgNDV2MTY2NHEwIDI2IDE5IDQ1dDQ1IDE5aDEyODBxMjYgMCA0NSAtMTl0MTkgLTQ1eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJob3NwaXRhbCIgdW5pY29kZT0iJiN4ZjBmODsiIGhvcml6LWFkdi14PSIxNDA4IiAKZD0iTTM4NCAyMjR2LTY0cTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtNjRxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXY2NHEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDY0cTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXpNMzg0IDQ4MHYtNjRxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC02NHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djY0cTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoNjRxMTMgMCAyMi41IC05LjV0OS41IC0yMi41egpNNjQwIDQ4MHYtNjRxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC02NHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djY0cTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoNjRxMTMgMCAyMi41IC05LjV0OS41IC0yMi41ek0zODQgNzM2di02NHEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTY0cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2NjRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWg2NHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6Ck0xMTUyIDIyNHYtNjRxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC02NHEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djY0cTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoNjRxMTMgMCAyMi41IC05LjV0OS41IC0yMi41ek04OTYgNDgwdi02NHEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTY0cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2NjRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWg2NHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6Ck02NDAgNzM2di02NHEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTY0cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2NjRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWg2NHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6TTExNTIgNDgwdi02NHEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTY0cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2NjRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWg2NHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6Ck04OTYgNzM2di02NHEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTY0cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2NjRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWg2NHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6TTExNTIgNzM2di02NHEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTY0cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2NjRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWg2NHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6Ck04OTYgLTEyOGgzODR2MTE1MmgtMjU2di0zMnEwIC00MCAtMjggLTY4dC02OCAtMjhoLTQ0OHEtNDAgMCAtNjggMjh0LTI4IDY4djMyaC0yNTZ2LTExNTJoMzg0djIyNHEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDMyMHExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV2LTIyNHpNODk2IDEwNTZ2MzIwcTAgMTMgLTkuNSAyMi41dC0yMi41IDkuNWgtNjRxLTEzIDAgLTIyLjUgLTkuNXQtOS41IC0yMi41di05NmgtMTI4djk2cTAgMTMgLTkuNSAyMi41CnQtMjIuNSA5LjVoLTY0cS0xMyAwIC0yMi41IC05LjV0LTkuNSAtMjIuNXYtMzIwcTAgLTEzIDkuNSAtMjIuNXQyMi41IC05LjVoNjRxMTMgMCAyMi41IDkuNXQ5LjUgMjIuNXY5NmgxMjh2LTk2cTAgLTEzIDkuNSAtMjIuNXQyMi41IC05LjVoNjRxMTMgMCAyMi41IDkuNXQ5LjUgMjIuNXpNMTQwOCAxMDg4di0xMjgwcTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtMTI4MHEtMjYgMCAtNDUgMTl0LTE5IDQ1djEyODBxMCAyNiAxOSA0NXQ0NSAxOWgzMjAKdjI4OHEwIDQwIDI4IDY4dDY4IDI4aDQ0OHE0MCAwIDY4IC0yOHQyOCAtNjh2LTI4OGgzMjBxMjYgMCA0NSAtMTl0MTkgLTQ1eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJhbWJ1bGFuY2UiIHVuaWNvZGU9IiYjeGYwZjk7IiBob3Jpei1hZHYteD0iMTkyMCIgCmQ9Ik02NDAgMTI4cTAgNTMgLTM3LjUgOTAuNXQtOTAuNSAzNy41dC05MC41IC0zNy41dC0zNy41IC05MC41dDM3LjUgLTkwLjV0OTAuNSAtMzcuNXQ5MC41IDM3LjV0MzcuNSA5MC41ek0yNTYgNjQwaDM4NHYyNTZoLTE1OHEtMTQgLTIgLTIyIC05bC0xOTUgLTE5NXEtNyAtMTIgLTkgLTIydi0zMHpNMTUzNiAxMjhxMCA1MyAtMzcuNSA5MC41dC05MC41IDM3LjV0LTkwLjUgLTM3LjV0LTM3LjUgLTkwLjV0MzcuNSAtOTAuNXQ5MC41IC0zNy41CnQ5MC41IDM3LjV0MzcuNSA5MC41ek0xNjY0IDgwMHYxOTJxMCAxNCAtOSAyM3QtMjMgOWgtMjI0djIyNHEwIDE0IC05IDIzdC0yMyA5aC0xOTJxLTE0IDAgLTIzIC05dC05IC0yM3YtMjI0aC0yMjRxLTE0IDAgLTIzIC05dC05IC0yM3YtMTkycTAgLTE0IDkgLTIzdDIzIC05aDIyNHYtMjI0cTAgLTE0IDkgLTIzdDIzIC05aDE5MnExNCAwIDIzIDl0OSAyM3YyMjRoMjI0cTE0IDAgMjMgOXQ5IDIzek0xOTIwIDEzNDR2LTExNTIKcTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtMTkycTAgLTEwNiAtNzUgLTE4MXQtMTgxIC03NXQtMTgxIDc1dC03NSAxODFoLTM4NHEwIC0xMDYgLTc1IC0xODF0LTE4MSAtNzV0LTE4MSA3NXQtNzUgMTgxaC0xMjhxLTI2IDAgLTQ1IDE5dC0xOSA0NXQxOSA0NXQ0NSAxOXY0MTZxMCAyNiAxMyA1OHQzMiA1MWwxOTggMTk4cTE5IDE5IDUxIDMydDU4IDEzaDE2MHYzMjBxMCAyNiAxOSA0NXQ0NSAxOWgxMTUycTI2IDAgNDUgLTE5dDE5IC00NXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0ibWVka2l0IiB1bmljb2RlPSImI3hmMGZhOyIgaG9yaXotYWR2LXg9IjE3OTIiIApkPSJNMTI4MCA0MTZ2MTkycTAgMTQgLTkgMjN0LTIzIDloLTIyNHYyMjRxMCAxNCAtOSAyM3QtMjMgOWgtMTkycS0xNCAwIC0yMyAtOXQtOSAtMjN2LTIyNGgtMjI0cS0xNCAwIC0yMyAtOXQtOSAtMjN2LTE5MnEwIC0xNCA5IC0yM3QyMyAtOWgyMjR2LTIyNHEwIC0xNCA5IC0yM3QyMyAtOWgxOTJxMTQgMCAyMyA5dDkgMjN2MjI0aDIyNHExNCAwIDIzIDl0OSAyM3pNNjQwIDExNTJoNTEydjEyOGgtNTEydi0xMjh6TTI1NiAxMTUydi0xMjgwaC0zMgpxLTkyIDAgLTE1OCA2NnQtNjYgMTU4djgzMnEwIDkyIDY2IDE1OHQxNTggNjZoMzJ6TTE0NDAgMTE1MnYtMTI4MGgtMTA4OHYxMjgwaDE2MHYxNjBxMCA0MCAyOCA2OHQ2OCAyOGg1NzZxNDAgMCA2OCAtMjh0MjggLTY4di0xNjBoMTYwek0xNzkyIDkyOHYtODMycTAgLTkyIC02NiAtMTU4dC0xNTggLTY2aC0zMnYxMjgwaDMycTkyIDAgMTU4IC02NnQ2NiAtMTU4eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJmaWdodGVyX2pldCIgdW5pY29kZT0iJiN4ZjBmYjsiIGhvcml6LWFkdi14PSIxOTIwIiAKZD0iTTE5MjAgNTc2cS0xIC0zMiAtMjg4IC05NmwtMzUyIC0zMmwtMjI0IC02NGgtNjRsLTI5MyAtMzUyaDY5cTI2IDAgNDUgLTQuNXQxOSAtMTEuNXQtMTkgLTExLjV0LTQ1IC00LjVoLTk2aC0xNjBoLTY0djMyaDY0djQxNmgtMTYwbC0xOTIgLTIyNGgtOTZsLTMyIDMydjE5MmgzMnYzMmgxMjh2OGwtMTkyIDI0djEyOGwxOTIgMjR2OGgtMTI4djMyaC0zMnYxOTJsMzIgMzJoOTZsMTkyIC0yMjRoMTYwdjQxNmgtNjR2MzJoNjRoMTYwaDk2CnEyNiAwIDQ1IC00LjV0MTkgLTExLjV0LTE5IC0xMS41dC00NSAtNC41aC02OWwyOTMgLTM1Mmg2NGwyMjQgLTY0bDM1MiAtMzJxMTI4IC0yOCAyMDAgLTUydDgwIC0zNHoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iYmVlciIgdW5pY29kZT0iJiN4ZjBmYzsiIGhvcml6LWFkdi14PSIxNjY0IiAKZD0iTTY0MCA2NDB2Mzg0aC0yNTZ2LTI1NnEwIC01MyAzNy41IC05MC41dDkwLjUgLTM3LjVoMTI4ek0xNjY0IDE5MnYtMTkyaC0xMTUydjE5MmwxMjggMTkyaC0xMjhxLTE1OSAwIC0yNzEuNSAxMTIuNXQtMTEyLjUgMjcxLjV2MzIwbC02NCA2NGwzMiAxMjhoNDgwbDMyIDEyOGg5NjBsMzIgLTE5MmwtNjQgLTMydi04MDB6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9Imhfc2lnbiIgdW5pY29kZT0iJiN4ZjBmZDsiIApkPSJNMTI4MCAxOTJ2ODk2cTAgMjYgLTE5IDQ1dC00NSAxOWgtMTI4cS0yNiAwIC00NSAtMTl0LTE5IC00NXYtMzIwaC01MTJ2MzIwcTAgMjYgLTE5IDQ1dC00NSAxOWgtMTI4cS0yNiAwIC00NSAtMTl0LTE5IC00NXYtODk2cTAgLTI2IDE5IC00NXQ0NSAtMTloMTI4cTI2IDAgNDUgMTl0MTkgNDV2MzIwaDUxMnYtMzIwcTAgLTI2IDE5IC00NXQ0NSAtMTloMTI4cTI2IDAgNDUgMTl0MTkgNDV6TTE1MzYgMTEyMHYtOTYwCnEwIC0xMTkgLTg0LjUgLTIwMy41dC0yMDMuNSAtODQuNWgtOTYwcS0xMTkgMCAtMjAzLjUgODQuNXQtODQuNSAyMDMuNXY5NjBxMCAxMTkgODQuNSAyMDMuNXQyMDMuNSA4NC41aDk2MHExMTkgMCAyMDMuNSAtODQuNXQ4NC41IC0yMDMuNXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iZjBmZSIgdW5pY29kZT0iJiN4ZjBmZTsiIApkPSJNMTI4MCA1NzZ2MTI4cTAgMjYgLTE5IDQ1dC00NSAxOWgtMzIwdjMyMHEwIDI2IC0xOSA0NXQtNDUgMTloLTEyOHEtMjYgMCAtNDUgLTE5dC0xOSAtNDV2LTMyMGgtMzIwcS0yNiAwIC00NSAtMTl0LTE5IC00NXYtMTI4cTAgLTI2IDE5IC00NXQ0NSAtMTloMzIwdi0zMjBxMCAtMjYgMTkgLTQ1dDQ1IC0xOWgxMjhxMjYgMCA0NSAxOXQxOSA0NXYzMjBoMzIwcTI2IDAgNDUgMTl0MTkgNDV6TTE1MzYgMTEyMHYtOTYwCnEwIC0xMTkgLTg0LjUgLTIwMy41dC0yMDMuNSAtODQuNWgtOTYwcS0xMTkgMCAtMjAzLjUgODQuNXQtODQuNSAyMDMuNXY5NjBxMCAxMTkgODQuNSAyMDMuNXQyMDMuNSA4NC41aDk2MHExMTkgMCAyMDMuNSAtODQuNXQ4NC41IC0yMDMuNXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iZG91YmxlX2FuZ2xlX2xlZnQiIHVuaWNvZGU9IiYjeGYxMDA7IiBob3Jpei1hZHYteD0iMTAyNCIgCmQ9Ik02MjcgMTYwcTAgLTEzIC0xMCAtMjNsLTUwIC01MHEtMTAgLTEwIC0yMyAtMTB0LTIzIDEwbC00NjYgNDY2cS0xMCAxMCAtMTAgMjN0MTAgMjNsNDY2IDQ2NnExMCAxMCAyMyAxMHQyMyAtMTBsNTAgLTUwcTEwIC0xMCAxMCAtMjN0LTEwIC0yM2wtMzkzIC0zOTNsMzkzIC0zOTNxMTAgLTEwIDEwIC0yM3pNMTAxMSAxNjBxMCAtMTMgLTEwIC0yM2wtNTAgLTUwcS0xMCAtMTAgLTIzIC0xMHQtMjMgMTBsLTQ2NiA0NjZxLTEwIDEwIC0xMCAyMwp0MTAgMjNsNDY2IDQ2NnExMCAxMCAyMyAxMHQyMyAtMTBsNTAgLTUwcTEwIC0xMCAxMCAtMjN0LTEwIC0yM2wtMzkzIC0zOTNsMzkzIC0zOTNxMTAgLTEwIDEwIC0yM3oiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iZG91YmxlX2FuZ2xlX3JpZ2h0IiB1bmljb2RlPSImI3hmMTAxOyIgaG9yaXotYWR2LXg9IjEwMjQiIApkPSJNNTk1IDU3NnEwIC0xMyAtMTAgLTIzbC00NjYgLTQ2NnEtMTAgLTEwIC0yMyAtMTB0LTIzIDEwbC01MCA1MHEtMTAgMTAgLTEwIDIzdDEwIDIzbDM5MyAzOTNsLTM5MyAzOTNxLTEwIDEwIC0xMCAyM3QxMCAyM2w1MCA1MHExMCAxMCAyMyAxMHQyMyAtMTBsNDY2IC00NjZxMTAgLTEwIDEwIC0yM3pNOTc5IDU3NnEwIC0xMyAtMTAgLTIzbC00NjYgLTQ2NnEtMTAgLTEwIC0yMyAtMTB0LTIzIDEwbC01MCA1MHEtMTAgMTAgLTEwIDIzdDEwIDIzCmwzOTMgMzkzbC0zOTMgMzkzcS0xMCAxMCAtMTAgMjN0MTAgMjNsNTAgNTBxMTAgMTAgMjMgMTB0MjMgLTEwbDQ2NiAtNDY2cTEwIC0xMCAxMCAtMjN6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9ImRvdWJsZV9hbmdsZV91cCIgdW5pY29kZT0iJiN4ZjEwMjsiIGhvcml6LWFkdi14PSIxMTUyIiAKZD0iTTEwNzUgMjI0cTAgLTEzIC0xMCAtMjNsLTUwIC01MHEtMTAgLTEwIC0yMyAtMTB0LTIzIDEwbC0zOTMgMzkzbC0zOTMgLTM5M3EtMTAgLTEwIC0yMyAtMTB0LTIzIDEwbC01MCA1MHEtMTAgMTAgLTEwIDIzdDEwIDIzbDQ2NiA0NjZxMTAgMTAgMjMgMTB0MjMgLTEwbDQ2NiAtNDY2cTEwIC0xMCAxMCAtMjN6TTEwNzUgNjA4cTAgLTEzIC0xMCAtMjNsLTUwIC01MHEtMTAgLTEwIC0yMyAtMTB0LTIzIDEwbC0zOTMgMzkzbC0zOTMgLTM5MwpxLTEwIC0xMCAtMjMgLTEwdC0yMyAxMGwtNTAgNTBxLTEwIDEwIC0xMCAyM3QxMCAyM2w0NjYgNDY2cTEwIDEwIDIzIDEwdDIzIC0xMGw0NjYgLTQ2NnExMCAtMTAgMTAgLTIzeiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJkb3VibGVfYW5nbGVfZG93biIgdW5pY29kZT0iJiN4ZjEwMzsiIGhvcml6LWFkdi14PSIxMTUyIiAKZD0iTTEwNzUgNjcycTAgLTEzIC0xMCAtMjNsLTQ2NiAtNDY2cS0xMCAtMTAgLTIzIC0xMHQtMjMgMTBsLTQ2NiA0NjZxLTEwIDEwIC0xMCAyM3QxMCAyM2w1MCA1MHExMCAxMCAyMyAxMHQyMyAtMTBsMzkzIC0zOTNsMzkzIDM5M3ExMCAxMCAyMyAxMHQyMyAtMTBsNTAgLTUwcTEwIC0xMCAxMCAtMjN6TTEwNzUgMTA1NnEwIC0xMyAtMTAgLTIzbC00NjYgLTQ2NnEtMTAgLTEwIC0yMyAtMTB0LTIzIDEwbC00NjYgNDY2cS0xMCAxMCAtMTAgMjMKdDEwIDIzbDUwIDUwcTEwIDEwIDIzIDEwdDIzIC0xMGwzOTMgLTM5M2wzOTMgMzkzcTEwIDEwIDIzIDEwdDIzIC0xMGw1MCAtNTBxMTAgLTEwIDEwIC0yM3oiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iYW5nbGVfbGVmdCIgdW5pY29kZT0iJiN4ZjEwNDsiIGhvcml6LWFkdi14PSI2NDAiIApkPSJNNjI3IDk5MnEwIC0xMyAtMTAgLTIzbC0zOTMgLTM5M2wzOTMgLTM5M3ExMCAtMTAgMTAgLTIzdC0xMCAtMjNsLTUwIC01MHEtMTAgLTEwIC0yMyAtMTB0LTIzIDEwbC00NjYgNDY2cS0xMCAxMCAtMTAgMjN0MTAgMjNsNDY2IDQ2NnExMCAxMCAyMyAxMHQyMyAtMTBsNTAgLTUwcTEwIC0xMCAxMCAtMjN6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9ImFuZ2xlX3JpZ2h0IiB1bmljb2RlPSImI3hmMTA1OyIgaG9yaXotYWR2LXg9IjY0MCIgCmQ9Ik01OTUgNTc2cTAgLTEzIC0xMCAtMjNsLTQ2NiAtNDY2cS0xMCAtMTAgLTIzIC0xMHQtMjMgMTBsLTUwIDUwcS0xMCAxMCAtMTAgMjN0MTAgMjNsMzkzIDM5M2wtMzkzIDM5M3EtMTAgMTAgLTEwIDIzdDEwIDIzbDUwIDUwcTEwIDEwIDIzIDEwdDIzIC0xMGw0NjYgLTQ2NnExMCAtMTAgMTAgLTIzeiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJhbmdsZV91cCIgdW5pY29kZT0iJiN4ZjEwNjsiIGhvcml6LWFkdi14PSIxMTUyIiAKZD0iTTEwNzUgMzUycTAgLTEzIC0xMCAtMjNsLTUwIC01MHEtMTAgLTEwIC0yMyAtMTB0LTIzIDEwbC0zOTMgMzkzbC0zOTMgLTM5M3EtMTAgLTEwIC0yMyAtMTB0LTIzIDEwbC01MCA1MHEtMTAgMTAgLTEwIDIzdDEwIDIzbDQ2NiA0NjZxMTAgMTAgMjMgMTB0MjMgLTEwbDQ2NiAtNDY2cTEwIC0xMCAxMCAtMjN6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9ImFuZ2xlX2Rvd24iIHVuaWNvZGU9IiYjeGYxMDc7IiBob3Jpei1hZHYteD0iMTE1MiIgCmQ9Ik0xMDc1IDgwMHEwIC0xMyAtMTAgLTIzbC00NjYgLTQ2NnEtMTAgLTEwIC0yMyAtMTB0LTIzIDEwbC00NjYgNDY2cS0xMCAxMCAtMTAgMjN0MTAgMjNsNTAgNTBxMTAgMTAgMjMgMTB0MjMgLTEwbDM5MyAtMzkzbDM5MyAzOTNxMTAgMTAgMjMgMTB0MjMgLTEwbDUwIC01MHExMCAtMTAgMTAgLTIzeiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJkZXNrdG9wIiB1bmljb2RlPSImI3hmMTA4OyIgaG9yaXotYWR2LXg9IjE5MjAiIApkPSJNMTc5MiA1NDR2ODMycTAgMTMgLTkuNSAyMi41dC0yMi41IDkuNWgtMTYwMHEtMTMgMCAtMjIuNSAtOS41dC05LjUgLTIyLjV2LTgzMnEwIC0xMyA5LjUgLTIyLjV0MjIuNSAtOS41aDE2MDBxMTMgMCAyMi41IDkuNXQ5LjUgMjIuNXpNMTkyMCAxMzc2di0xMDg4cTAgLTY2IC00NyAtMTEzdC0xMTMgLTQ3aC01NDRxMCAtMzcgMTYgLTc3LjV0MzIgLTcxdDE2IC00My41cTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtNTEycS0yNiAwIC00NSAxOQp0LTE5IDQ1cTAgMTQgMTYgNDR0MzIgNzB0MTYgNzhoLTU0NHEtNjYgMCAtMTEzIDQ3dC00NyAxMTN2MTA4OHEwIDY2IDQ3IDExM3QxMTMgNDdoMTYwMHE2NiAwIDExMyAtNDd0NDcgLTExM3oiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0ibGFwdG9wIiB1bmljb2RlPSImI3hmMTA5OyIgaG9yaXotYWR2LXg9IjE5MjAiIApkPSJNNDE2IDI1NnEtNjYgMCAtMTEzIDQ3dC00NyAxMTN2NzA0cTAgNjYgNDcgMTEzdDExMyA0N2gxMDg4cTY2IDAgMTEzIC00N3Q0NyAtMTEzdi03MDRxMCAtNjYgLTQ3IC0xMTN0LTExMyAtNDdoLTEwODh6TTM4NCAxMTIwdi03MDRxMCAtMTMgOS41IC0yMi41dDIyLjUgLTkuNWgxMDg4cTEzIDAgMjIuNSA5LjV0OS41IDIyLjV2NzA0cTAgMTMgLTkuNSAyMi41dC0yMi41IDkuNWgtMTA4OHEtMTMgMCAtMjIuNSAtOS41dC05LjUgLTIyLjV6Ck0xNzYwIDE5MmgxNjB2LTk2cTAgLTQwIC00NyAtNjh0LTExMyAtMjhoLTE2MDBxLTY2IDAgLTExMyAyOHQtNDcgNjh2OTZoMTYwaDE2MDB6TTEwNDAgOTZxMTYgMCAxNiAxNnQtMTYgMTZoLTE2MHEtMTYgMCAtMTYgLTE2dDE2IC0xNmgxNjB6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InRhYmxldCIgdW5pY29kZT0iJiN4ZjEwYTsiIGhvcml6LWFkdi14PSIxMTUyIiAKZD0iTTY0MCAxMjhxMCAyNiAtMTkgNDV0LTQ1IDE5dC00NSAtMTl0LTE5IC00NXQxOSAtNDV0NDUgLTE5dDQ1IDE5dDE5IDQ1ek0xMDI0IDI4OHY5NjBxMCAxMyAtOS41IDIyLjV0LTIyLjUgOS41aC04MzJxLTEzIDAgLTIyLjUgLTkuNXQtOS41IC0yMi41di05NjBxMCAtMTMgOS41IC0yMi41dDIyLjUgLTkuNWg4MzJxMTMgMCAyMi41IDkuNXQ5LjUgMjIuNXpNMTE1MiAxMjQ4di0xMDg4cTAgLTY2IC00NyAtMTEzdC0xMTMgLTQ3aC04MzIKcS02NiAwIC0xMTMgNDd0LTQ3IDExM3YxMDg4cTAgNjYgNDcgMTEzdDExMyA0N2g4MzJxNjYgMCAxMTMgLTQ3dDQ3IC0xMTN6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9Im1vYmlsZV9waG9uZSIgdW5pY29kZT0iJiN4ZjEwYjsiIGhvcml6LWFkdi14PSI3NjgiIApkPSJNNDY0IDEyOHEwIDMzIC0yMy41IDU2LjV0LTU2LjUgMjMuNXQtNTYuNSAtMjMuNXQtMjMuNSAtNTYuNXQyMy41IC01Ni41dDU2LjUgLTIzLjV0NTYuNSAyMy41dDIzLjUgNTYuNXpNNjcyIDI4OHY3MDRxMCAxMyAtOS41IDIyLjV0LTIyLjUgOS41aC01MTJxLTEzIDAgLTIyLjUgLTkuNXQtOS41IC0yMi41di03MDRxMCAtMTMgOS41IC0yMi41dDIyLjUgLTkuNWg1MTJxMTMgMCAyMi41IDkuNXQ5LjUgMjIuNXpNNDgwIDExMzYKcTAgMTYgLTE2IDE2aC0xNjBxLTE2IDAgLTE2IC0xNnQxNiAtMTZoMTYwcTE2IDAgMTYgMTZ6TTc2OCAxMTUydi0xMDI0cTAgLTUyIC0zOCAtOTB0LTkwIC0zOGgtNTEycS01MiAwIC05MCAzOHQtMzggOTB2MTAyNHEwIDUyIDM4IDkwdDkwIDM4aDUxMnE1MiAwIDkwIC0zOHQzOCAtOTB6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9ImNpcmNsZV9ibGFuayIgdW5pY29kZT0iJiN4ZjEwYzsiIApkPSJNNzY4IDExODRxLTE0OCAwIC0yNzMgLTczdC0xOTggLTE5OHQtNzMgLTI3M3Q3MyAtMjczdDE5OCAtMTk4dDI3MyAtNzN0MjczIDczdDE5OCAxOTh0NzMgMjczdC03MyAyNzN0LTE5OCAxOTh0LTI3MyA3M3pNMTUzNiA2NDBxMCAtMjA5IC0xMDMgLTM4NS41dC0yNzkuNSAtMjc5LjV0LTM4NS41IC0xMDN0LTM4NS41IDEwM3QtMjc5LjUgMjc5LjV0LTEwMyAzODUuNXQxMDMgMzg1LjV0Mjc5LjUgMjc5LjV0Mzg1LjUgMTAzdDM4NS41IC0xMDMKdDI3OS41IC0yNzkuNXQxMDMgLTM4NS41eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJxdW90ZV9sZWZ0IiB1bmljb2RlPSImI3hmMTBkOyIgaG9yaXotYWR2LXg9IjE2NjQiIApkPSJNNzY4IDU3NnYtMzg0cTAgLTgwIC01NiAtMTM2dC0xMzYgLTU2aC0zODRxLTgwIDAgLTEzNiA1NnQtNTYgMTM2djcwNHEwIDEwNCA0MC41IDE5OC41dDEwOS41IDE2My41dDE2My41IDEwOS41dDE5OC41IDQwLjVoNjRxMjYgMCA0NSAtMTl0MTkgLTQ1di0xMjhxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC02NHEtMTA2IDAgLTE4MSAtNzV0LTc1IC0xODF2LTMycTAgLTQwIDI4IC02OHQ2OCAtMjhoMjI0cTgwIDAgMTM2IC01NnQ1NiAtMTM2egpNMTY2NCA1NzZ2LTM4NHEwIC04MCAtNTYgLTEzNnQtMTM2IC01NmgtMzg0cS04MCAwIC0xMzYgNTZ0LTU2IDEzNnY3MDRxMCAxMDQgNDAuNSAxOTguNXQxMDkuNSAxNjMuNXQxNjMuNSAxMDkuNXQxOTguNSA0MC41aDY0cTI2IDAgNDUgLTE5dDE5IC00NXYtMTI4cTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtNjRxLTEwNiAwIC0xODEgLTc1dC03NSAtMTgxdi0zMnEwIC00MCAyOCAtNjh0NjggLTI4aDIyNHE4MCAwIDEzNiAtNTZ0NTYgLTEzNnoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0icXVvdGVfcmlnaHQiIHVuaWNvZGU9IiYjeGYxMGU7IiBob3Jpei1hZHYteD0iMTY2NCIgCmQ9Ik03NjggMTIxNnYtNzA0cTAgLTEwNCAtNDAuNSAtMTk4LjV0LTEwOS41IC0xNjMuNXQtMTYzLjUgLTEwOS41dC0xOTguNSAtNDAuNWgtNjRxLTI2IDAgLTQ1IDE5dC0xOSA0NXYxMjhxMCAyNiAxOSA0NXQ0NSAxOWg2NHExMDYgMCAxODEgNzV0NzUgMTgxdjMycTAgNDAgLTI4IDY4dC02OCAyOGgtMjI0cS04MCAwIC0xMzYgNTZ0LTU2IDEzNnYzODRxMCA4MCA1NiAxMzZ0MTM2IDU2aDM4NHE4MCAwIDEzNiAtNTZ0NTYgLTEzNnpNMTY2NCAxMjE2CnYtNzA0cTAgLTEwNCAtNDAuNSAtMTk4LjV0LTEwOS41IC0xNjMuNXQtMTYzLjUgLTEwOS41dC0xOTguNSAtNDAuNWgtNjRxLTI2IDAgLTQ1IDE5dC0xOSA0NXYxMjhxMCAyNiAxOSA0NXQ0NSAxOWg2NHExMDYgMCAxODEgNzV0NzUgMTgxdjMycTAgNDAgLTI4IDY4dC02OCAyOGgtMjI0cS04MCAwIC0xMzYgNTZ0LTU2IDEzNnYzODRxMCA4MCA1NiAxMzZ0MTM2IDU2aDM4NHE4MCAwIDEzNiAtNTZ0NTYgLTEzNnoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0ic3Bpbm5lciIgdW5pY29kZT0iJiN4ZjExMDsiIGhvcml6LWFkdi14PSIxNzkyIiAKZD0iTTUyNiAxNDJxMCAtNTMgLTM3LjUgLTkwLjV0LTkwLjUgLTM3LjVxLTUyIDAgLTkwIDM4dC0zOCA5MHEwIDUzIDM3LjUgOTAuNXQ5MC41IDM3LjV0OTAuNSAtMzcuNXQzNy41IC05MC41ek0xMDI0IC02NHEwIC01MyAtMzcuNSAtOTAuNXQtOTAuNSAtMzcuNXQtOTAuNSAzNy41dC0zNy41IDkwLjV0MzcuNSA5MC41dDkwLjUgMzcuNXQ5MC41IC0zNy41dDM3LjUgLTkwLjV6TTMyMCA2NDBxMCAtNTMgLTM3LjUgLTkwLjV0LTkwLjUgLTM3LjUKdC05MC41IDM3LjV0LTM3LjUgOTAuNXQzNy41IDkwLjV0OTAuNSAzNy41dDkwLjUgLTM3LjV0MzcuNSAtOTAuNXpNMTUyMiAxNDJxMCAtNTIgLTM4IC05MHQtOTAgLTM4cS01MyAwIC05MC41IDM3LjV0LTM3LjUgOTAuNXQzNy41IDkwLjV0OTAuNSAzNy41dDkwLjUgLTM3LjV0MzcuNSAtOTAuNXpNNTU4IDExMzhxMCAtNjYgLTQ3IC0xMTN0LTExMyAtNDd0LTExMyA0N3QtNDcgMTEzdDQ3IDExM3QxMTMgNDd0MTEzIC00N3Q0NyAtMTEzegpNMTcyOCA2NDBxMCAtNTMgLTM3LjUgLTkwLjV0LTkwLjUgLTM3LjV0LTkwLjUgMzcuNXQtMzcuNSA5MC41dDM3LjUgOTAuNXQ5MC41IDM3LjV0OTAuNSAtMzcuNXQzNy41IC05MC41ek0xMDg4IDEzNDRxMCAtODAgLTU2IC0xMzZ0LTEzNiAtNTZ0LTEzNiA1NnQtNTYgMTM2dDU2IDEzNnQxMzYgNTZ0MTM2IC01NnQ1NiAtMTM2ek0xNjE4IDExMzhxMCAtOTMgLTY2IC0xNTguNXQtMTU4IC02NS41cS05MyAwIC0xNTguNSA2NS41dC02NS41IDE1OC41CnEwIDkyIDY1LjUgMTU4dDE1OC41IDY2cTkyIDAgMTU4IC02NnQ2NiAtMTU4eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJjaXJjbGUiIHVuaWNvZGU9IiYjeGYxMTE7IiAKZD0iTTE1MzYgNjQwcTAgLTIwOSAtMTAzIC0zODUuNXQtMjc5LjUgLTI3OS41dC0zODUuNSAtMTAzdC0zODUuNSAxMDN0LTI3OS41IDI3OS41dC0xMDMgMzg1LjV0MTAzIDM4NS41dDI3OS41IDI3OS41dDM4NS41IDEwM3QzODUuNSAtMTAzdDI3OS41IC0yNzkuNXQxMDMgLTM4NS41eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJyZXBseSIgdW5pY29kZT0iJiN4ZjExMjsiIGhvcml6LWFkdi14PSIxNzkyIiAKZD0iTTE3OTIgNDE2cTAgLTE2NiAtMTI3IC00NTFxLTMgLTcgLTEwLjUgLTI0dC0xMy41IC0zMHQtMTMgLTIycS0xMiAtMTcgLTI4IC0xN3EtMTUgMCAtMjMuNSAxMHQtOC41IDI1cTAgOSAyLjUgMjYuNXQyLjUgMjMuNXE1IDY4IDUgMTIzcTAgMTAxIC0xNy41IDE4MXQtNDguNSAxMzguNXQtODAgMTAxdC0xMDUuNSA2OS41dC0xMzMgNDIuNXQtMTU0IDIxLjV0LTE3NS41IDZoLTIyNHYtMjU2cTAgLTI2IC0xOSAtNDV0LTQ1IC0xOXQtNDUgMTkKbC01MTIgNTEycS0xOSAxOSAtMTkgNDV0MTkgNDVsNTEyIDUxMnExOSAxOSA0NSAxOXQ0NSAtMTl0MTkgLTQ1di0yNTZoMjI0cTcxMyAwIDg3NSAtNDAzcTUzIC0xMzQgNTMgLTMzM3oiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iZ2l0aHViX2FsdCIgdW5pY29kZT0iJiN4ZjExMzsiIGhvcml6LWFkdi14PSIxNjY0IiAKZD0iTTY0MCAzMjBxMCAtNDAgLTEyLjUgLTgydC00MyAtNzZ0LTcyLjUgLTM0dC03Mi41IDM0dC00MyA3NnQtMTIuNSA4MnQxMi41IDgydDQzIDc2dDcyLjUgMzR0NzIuNSAtMzR0NDMgLTc2dDEyLjUgLTgyek0xMjgwIDMyMHEwIC00MCAtMTIuNSAtODJ0LTQzIC03NnQtNzIuNSAtMzR0LTcyLjUgMzR0LTQzIDc2dC0xMi41IDgydDEyLjUgODJ0NDMgNzZ0NzIuNSAzNHQ3Mi41IC0zNHQ0MyAtNzZ0MTIuNSAtODJ6TTE0NDAgMzIwCnEwIDEyMCAtNjkgMjA0dC0xODcgODRxLTQxIDAgLTE5NSAtMjFxLTcxIC0xMSAtMTU3IC0xMXQtMTU3IDExcS0xNTIgMjEgLTE5NSAyMXEtMTE4IDAgLTE4NyAtODR0LTY5IC0yMDRxMCAtODggMzIgLTE1My41dDgxIC0xMDN0MTIyIC02MHQxNDAgLTI5LjV0MTQ5IC03aDE2OHE4MiAwIDE0OSA3dDE0MCAyOS41dDEyMiA2MHQ4MSAxMDN0MzIgMTUzLjV6TTE2NjQgNDk2cTAgLTIwNyAtNjEgLTMzMXEtMzggLTc3IC0xMDUuNSAtMTMzdC0xNDEgLTg2CnQtMTcwIC00Ny41dC0xNzEuNSAtMjJ0LTE2NyAtNC41cS03OCAwIC0xNDIgM3QtMTQ3LjUgMTIuNXQtMTUyLjUgMzB0LTEzNyA1MS41dC0xMjEgODF0LTg2IDExNXEtNjIgMTIzIC02MiAzMzFxMCAyMzcgMTM2IDM5NnEtMjcgODIgLTI3IDE3MHEwIDExNiA1MSAyMThxMTA4IDAgMTkwIC0zOS41dDE4OSAtMTIzLjVxMTQ3IDM1IDMwOSAzNXExNDggMCAyODAgLTMycTEwNSA4MiAxODcgMTIxdDE4OSAzOXE1MSAtMTAyIDUxIC0yMTgKcTAgLTg3IC0yNyAtMTY4cTEzNiAtMTYwIDEzNiAtMzk4eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJmb2xkZXJfY2xvc2VfYWx0IiB1bmljb2RlPSImI3hmMTE0OyIgaG9yaXotYWR2LXg9IjE2NjQiIApkPSJNMTUzNiAyMjR2NzA0cTAgNDAgLTI4IDY4dC02OCAyOGgtNzA0cS00MCAwIC02OCAyOHQtMjggNjh2NjRxMCA0MCAtMjggNjh0LTY4IDI4aC0zMjBxLTQwIDAgLTY4IC0yOHQtMjggLTY4di05NjBxMCAtNDAgMjggLTY4dDY4IC0yOGgxMjE2cTQwIDAgNjggMjh0MjggNjh6TTE2NjQgOTI4di03MDRxMCAtOTIgLTY2IC0xNTh0LTE1OCAtNjZoLTEyMTZxLTkyIDAgLTE1OCA2NnQtNjYgMTU4djk2MHEwIDkyIDY2IDE1OHQxNTggNjZoMzIwCnE5MiAwIDE1OCAtNjZ0NjYgLTE1OHYtMzJoNjcycTkyIDAgMTU4IC02NnQ2NiAtMTU4eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJmb2xkZXJfb3Blbl9hbHQiIHVuaWNvZGU9IiYjeGYxMTU7IiBob3Jpei1hZHYteD0iMTkyMCIgCmQ9Ik0xNzgxIDYwNXEwIDM1IC01MyAzNWgtMTA4OHEtNDAgMCAtODUuNSAtMjEuNXQtNzEuNSAtNTIuNWwtMjk0IC0zNjNxLTE4IC0yNCAtMTggLTQwcTAgLTM1IDUzIC0zNWgxMDg4cTQwIDAgODYgMjJ0NzEgNTNsMjk0IDM2M3ExOCAyMiAxOCAzOXpNNjQwIDc2OGg3Njh2MTYwcTAgNDAgLTI4IDY4dC02OCAyOGgtNTc2cS00MCAwIC02OCAyOHQtMjggNjh2NjRxMCA0MCAtMjggNjh0LTY4IDI4aC0zMjBxLTQwIDAgLTY4IC0yOHQtMjggLTY4CnYtODUzbDI1NiAzMTVxNDQgNTMgMTE2IDg3LjV0MTQwIDM0LjV6TTE5MDkgNjA1cTAgLTYyIC00NiAtMTIwbC0yOTUgLTM2M3EtNDMgLTUzIC0xMTYgLTg3LjV0LTE0MCAtMzQuNWgtMTA4OHEtOTIgMCAtMTU4IDY2dC02NiAxNTh2OTYwcTAgOTIgNjYgMTU4dDE1OCA2NmgzMjBxOTIgMCAxNTggLTY2dDY2IC0xNTh2LTMyaDU0NHE5MiAwIDE1OCAtNjZ0NjYgLTE1OHYtMTYwaDE5MnE1NCAwIDk5IC0yNC41dDY3IC03MC41cTE1IC0zMiAxNSAtNjh6CiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJleHBhbmRfYWx0IiB1bmljb2RlPSImI3hmMTE2OyIgaG9yaXotYWR2LXg9IjE3OTIiIAogLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJjb2xsYXBzZV9hbHQiIHVuaWNvZGU9IiYjeGYxMTc7IiBob3Jpei1hZHYteD0iMTc5MiIgCiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InNtaWxlIiB1bmljb2RlPSImI3hmMTE4OyIgCmQ9Ik0xMTM0IDQ2MXEtMzcgLTEyMSAtMTM4IC0xOTV0LTIyOCAtNzR0LTIyOCA3NHQtMTM4IDE5NXEtOCAyNSA0IDQ4LjV0MzggMzEuNXEyNSA4IDQ4LjUgLTR0MzEuNSAtMzhxMjUgLTgwIDkyLjUgLTEyOS41dDE1MS41IC00OS41dDE1MS41IDQ5LjV0OTIuNSAxMjkuNXE4IDI2IDMyIDM4dDQ5IDR0MzcgLTMxLjV0NCAtNDguNXpNNjQwIDg5NnEwIC01MyAtMzcuNSAtOTAuNXQtOTAuNSAtMzcuNXQtOTAuNSAzNy41dC0zNy41IDkwLjUKdDM3LjUgOTAuNXQ5MC41IDM3LjV0OTAuNSAtMzcuNXQzNy41IC05MC41ek0xMTUyIDg5NnEwIC01MyAtMzcuNSAtOTAuNXQtOTAuNSAtMzcuNXQtOTAuNSAzNy41dC0zNy41IDkwLjV0MzcuNSA5MC41dDkwLjUgMzcuNXQ5MC41IC0zNy41dDM3LjUgLTkwLjV6TTE0MDggNjQwcTAgMTMwIC01MSAyNDguNXQtMTM2LjUgMjA0dC0yMDQgMTM2LjV0LTI0OC41IDUxdC0yNDguNSAtNTF0LTIwNCAtMTM2LjV0LTEzNi41IC0yMDR0LTUxIC0yNDguNQp0NTEgLTI0OC41dDEzNi41IC0yMDR0MjA0IC0xMzYuNXQyNDguNSAtNTF0MjQ4LjUgNTF0MjA0IDEzNi41dDEzNi41IDIwNHQ1MSAyNDguNXpNMTUzNiA2NDBxMCAtMjA5IC0xMDMgLTM4NS41dC0yNzkuNSAtMjc5LjV0LTM4NS41IC0xMDN0LTM4NS41IDEwM3QtMjc5LjUgMjc5LjV0LTEwMyAzODUuNXQxMDMgMzg1LjV0Mjc5LjUgMjc5LjV0Mzg1LjUgMTAzdDM4NS41IC0xMDN0Mjc5LjUgLTI3OS41dDEwMyAtMzg1LjV6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9ImZyb3duIiB1bmljb2RlPSImI3hmMTE5OyIgCmQ9Ik0xMTM0IDMwN3E4IC0yNSAtNCAtNDguNXQtMzcgLTMxLjV0LTQ5IDR0LTMyIDM4cS0yNSA4MCAtOTIuNSAxMjkuNXQtMTUxLjUgNDkuNXQtMTUxLjUgLTQ5LjV0LTkyLjUgLTEyOS41cS04IC0yNiAtMzEuNSAtMzh0LTQ4LjUgLTRxLTI2IDggLTM4IDMxLjV0LTQgNDguNXEzNyAxMjEgMTM4IDE5NXQyMjggNzR0MjI4IC03NHQxMzggLTE5NXpNNjQwIDg5NnEwIC01MyAtMzcuNSAtOTAuNXQtOTAuNSAtMzcuNXQtOTAuNSAzNy41CnQtMzcuNSA5MC41dDM3LjUgOTAuNXQ5MC41IDM3LjV0OTAuNSAtMzcuNXQzNy41IC05MC41ek0xMTUyIDg5NnEwIC01MyAtMzcuNSAtOTAuNXQtOTAuNSAtMzcuNXQtOTAuNSAzNy41dC0zNy41IDkwLjV0MzcuNSA5MC41dDkwLjUgMzcuNXQ5MC41IC0zNy41dDM3LjUgLTkwLjV6TTE0MDggNjQwcTAgMTMwIC01MSAyNDguNXQtMTM2LjUgMjA0dC0yMDQgMTM2LjV0LTI0OC41IDUxdC0yNDguNSAtNTF0LTIwNCAtMTM2LjV0LTEzNi41IC0yMDQKdC01MSAtMjQ4LjV0NTEgLTI0OC41dDEzNi41IC0yMDR0MjA0IC0xMzYuNXQyNDguNSAtNTF0MjQ4LjUgNTF0MjA0IDEzNi41dDEzNi41IDIwNHQ1MSAyNDguNXpNMTUzNiA2NDBxMCAtMjA5IC0xMDMgLTM4NS41dC0yNzkuNSAtMjc5LjV0LTM4NS41IC0xMDN0LTM4NS41IDEwM3QtMjc5LjUgMjc5LjV0LTEwMyAzODUuNXQxMDMgMzg1LjV0Mjc5LjUgMjc5LjV0Mzg1LjUgMTAzdDM4NS41IC0xMDN0Mjc5LjUgLTI3OS41dDEwMyAtMzg1LjV6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9Im1laCIgdW5pY29kZT0iJiN4ZjExYTsiIApkPSJNMTE1MiA0NDhxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC02NDBxLTI2IDAgLTQ1IDE5dC0xOSA0NXQxOSA0NXQ0NSAxOWg2NDBxMjYgMCA0NSAtMTl0MTkgLTQ1ek02NDAgODk2cTAgLTUzIC0zNy41IC05MC41dC05MC41IC0zNy41dC05MC41IDM3LjV0LTM3LjUgOTAuNXQzNy41IDkwLjV0OTAuNSAzNy41dDkwLjUgLTM3LjV0MzcuNSAtOTAuNXpNMTE1MiA4OTZxMCAtNTMgLTM3LjUgLTkwLjV0LTkwLjUgLTM3LjV0LTkwLjUgMzcuNQp0LTM3LjUgOTAuNXQzNy41IDkwLjV0OTAuNSAzNy41dDkwLjUgLTM3LjV0MzcuNSAtOTAuNXpNMTQwOCA2NDBxMCAxMzAgLTUxIDI0OC41dC0xMzYuNSAyMDR0LTIwNCAxMzYuNXQtMjQ4LjUgNTF0LTI0OC41IC01MXQtMjA0IC0xMzYuNXQtMTM2LjUgLTIwNHQtNTEgLTI0OC41dDUxIC0yNDguNXQxMzYuNSAtMjA0dDIwNCAtMTM2LjV0MjQ4LjUgLTUxdDI0OC41IDUxdDIwNCAxMzYuNXQxMzYuNSAyMDR0NTEgMjQ4LjV6TTE1MzYgNjQwCnEwIC0yMDkgLTEwMyAtMzg1LjV0LTI3OS41IC0yNzkuNXQtMzg1LjUgLTEwM3QtMzg1LjUgMTAzdC0yNzkuNSAyNzkuNXQtMTAzIDM4NS41dDEwMyAzODUuNXQyNzkuNSAyNzkuNXQzODUuNSAxMDN0Mzg1LjUgLTEwM3QyNzkuNSAtMjc5LjV0MTAzIC0zODUuNXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iZ2FtZXBhZCIgdW5pY29kZT0iJiN4ZjExYjsiIGhvcml6LWFkdi14PSIxOTIwIiAKZD0iTTgzMiA0NDh2MTI4cTAgMTQgLTkgMjN0LTIzIDloLTE5MnYxOTJxMCAxNCAtOSAyM3QtMjMgOWgtMTI4cS0xNCAwIC0yMyAtOXQtOSAtMjN2LTE5MmgtMTkycS0xNCAwIC0yMyAtOXQtOSAtMjN2LTEyOHEwIC0xNCA5IC0yM3QyMyAtOWgxOTJ2LTE5MnEwIC0xNCA5IC0yM3QyMyAtOWgxMjhxMTQgMCAyMyA5dDkgMjN2MTkyaDE5MnExNCAwIDIzIDl0OSAyM3pNMTQwOCAzODRxMCA1MyAtMzcuNSA5MC41dC05MC41IDM3LjV0LTkwLjUgLTM3LjUKdC0zNy41IC05MC41dDM3LjUgLTkwLjV0OTAuNSAtMzcuNXQ5MC41IDM3LjV0MzcuNSA5MC41ek0xNjY0IDY0MHEwIDUzIC0zNy41IDkwLjV0LTkwLjUgMzcuNXQtOTAuNSAtMzcuNXQtMzcuNSAtOTAuNXQzNy41IC05MC41dDkwLjUgLTM3LjV0OTAuNSAzNy41dDM3LjUgOTAuNXpNMTkyMCA1MTJxMCAtMjEyIC0xNTAgLTM2MnQtMzYyIC0xNTBxLTE5MiAwIC0zMzggMTI4aC0yMjBxLTE0NiAtMTI4IC0zMzggLTEyOHEtMjEyIDAgLTM2MiAxNTAKdC0xNTAgMzYydDE1MCAzNjJ0MzYyIDE1MGg4OTZxMjEyIDAgMzYyIC0xNTB0MTUwIC0zNjJ6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9ImtleWJvYXJkIiB1bmljb2RlPSImI3hmMTFjOyIgaG9yaXotYWR2LXg9IjE5MjAiIApkPSJNMzg0IDM2OHYtOTZxMCAtMTYgLTE2IC0xNmgtOTZxLTE2IDAgLTE2IDE2djk2cTAgMTYgMTYgMTZoOTZxMTYgMCAxNiAtMTZ6TTUxMiA2MjR2LTk2cTAgLTE2IC0xNiAtMTZoLTIyNHEtMTYgMCAtMTYgMTZ2OTZxMCAxNiAxNiAxNmgyMjRxMTYgMCAxNiAtMTZ6TTM4NCA4ODB2LTk2cTAgLTE2IC0xNiAtMTZoLTk2cS0xNiAwIC0xNiAxNnY5NnEwIDE2IDE2IDE2aDk2cTE2IDAgMTYgLTE2ek0xNDA4IDM2OHYtOTZxMCAtMTYgLTE2IC0xNgpoLTg2NHEtMTYgMCAtMTYgMTZ2OTZxMCAxNiAxNiAxNmg4NjRxMTYgMCAxNiAtMTZ6TTc2OCA2MjR2LTk2cTAgLTE2IC0xNiAtMTZoLTk2cS0xNiAwIC0xNiAxNnY5NnEwIDE2IDE2IDE2aDk2cTE2IDAgMTYgLTE2ek02NDAgODgwdi05NnEwIC0xNiAtMTYgLTE2aC05NnEtMTYgMCAtMTYgMTZ2OTZxMCAxNiAxNiAxNmg5NnExNiAwIDE2IC0xNnpNMTAyNCA2MjR2LTk2cTAgLTE2IC0xNiAtMTZoLTk2cS0xNiAwIC0xNiAxNnY5NnEwIDE2IDE2IDE2Cmg5NnExNiAwIDE2IC0xNnpNODk2IDg4MHYtOTZxMCAtMTYgLTE2IC0xNmgtOTZxLTE2IDAgLTE2IDE2djk2cTAgMTYgMTYgMTZoOTZxMTYgMCAxNiAtMTZ6TTEyODAgNjI0di05NnEwIC0xNiAtMTYgLTE2aC05NnEtMTYgMCAtMTYgMTZ2OTZxMCAxNiAxNiAxNmg5NnExNiAwIDE2IC0xNnpNMTY2NCAzNjh2LTk2cTAgLTE2IC0xNiAtMTZoLTk2cS0xNiAwIC0xNiAxNnY5NnEwIDE2IDE2IDE2aDk2cTE2IDAgMTYgLTE2ek0xMTUyIDg4MHYtOTYKcTAgLTE2IC0xNiAtMTZoLTk2cS0xNiAwIC0xNiAxNnY5NnEwIDE2IDE2IDE2aDk2cTE2IDAgMTYgLTE2ek0xNDA4IDg4MHYtOTZxMCAtMTYgLTE2IC0xNmgtOTZxLTE2IDAgLTE2IDE2djk2cTAgMTYgMTYgMTZoOTZxMTYgMCAxNiAtMTZ6TTE2NjQgODgwdi0zNTJxMCAtMTYgLTE2IC0xNmgtMjI0cS0xNiAwIC0xNiAxNnY5NnEwIDE2IDE2IDE2aDExMnYyNDBxMCAxNiAxNiAxNmg5NnExNiAwIDE2IC0xNnpNMTc5MiAxMjh2ODk2aC0xNjY0di04OTYKaDE2NjR6TTE5MjAgMTAyNHYtODk2cTAgLTUzIC0zNy41IC05MC41dC05MC41IC0zNy41aC0xNjY0cS01MyAwIC05MC41IDM3LjV0LTM3LjUgOTAuNXY4OTZxMCA1MyAzNy41IDkwLjV0OTAuNSAzNy41aDE2NjRxNTMgMCA5MC41IC0zNy41dDM3LjUgLTkwLjV6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9ImZsYWdfYWx0IiB1bmljb2RlPSImI3hmMTFkOyIgaG9yaXotYWR2LXg9IjE3OTIiIApkPSJNMTY2NCA0OTF2NjE2cS0xNjkgLTkxIC0zMDYgLTkxcS04MiAwIC0xNDUgMzJxLTEwMCA0OSAtMTg0IDc2LjV0LTE3OCAyNy41cS0xNzMgMCAtNDAzIC0xMjd2LTU5OXEyNDUgMTEzIDQzMyAxMTNxNTUgMCAxMDMuNSAtNy41dDk4IC0yNnQ3NyAtMzF0ODIuNSAtMzkuNWwyOCAtMTRxNDQgLTIyIDEwMSAtMjJxMTIwIDAgMjkzIDkyek0zMjAgMTI4MHEwIC0zNSAtMTcuNSAtNjR0LTQ2LjUgLTQ2di0xMjY2cTAgLTE0IC05IC0yM3QtMjMgLTkKaC02NHEtMTQgMCAtMjMgOXQtOSAyM3YxMjY2cS0yOSAxNyAtNDYuNSA0NnQtMTcuNSA2NHEwIDUzIDM3LjUgOTAuNXQ5MC41IDM3LjV0OTAuNSAtMzcuNXQzNy41IC05MC41ek0xNzkyIDEyMTZ2LTc2M3EwIC0zOSAtMzUgLTU3cS0xMCAtNSAtMTcgLTlxLTIxOCAtMTE2IC0zNjkgLTExNnEtODggMCAtMTU4IDM1bC0yOCAxNHEtNjQgMzMgLTk5IDQ4dC05MSAyOXQtMTE0IDE0cS0xMDIgMCAtMjM1LjUgLTQ0dC0yMjguNSAtMTAyCnEtMTUgLTkgLTMzIC05cS0xNiAwIC0zMiA4cS0zMiAxOSAtMzIgNTZ2NzQycTAgMzUgMzEgNTVxMzUgMjEgNzguNSA0Mi41dDExNCA1MnQxNTIuNSA0OS41dDE1NSAxOXExMTIgMCAyMDkgLTMxdDIwOSAtODZxMzggLTE5IDg5IC0xOXExMjIgMCAzMTAgMTEycTIyIDEyIDMxIDE3cTMxIDE2IDYyIC0ycTMxIC0yMCAzMSAtNTV6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9ImZsYWdfY2hlY2tlcmVkIiB1bmljb2RlPSImI3hmMTFlOyIgaG9yaXotYWR2LXg9IjE3OTIiIApkPSJNODMyIDUzNnYxOTJxLTE4MSAtMTYgLTM4NCAtMTE3di0xODVxMjA1IDk2IDM4NCAxMTB6TTgzMiA5NTR2MTk3cS0xNzIgLTggLTM4NCAtMTI2di0xODlxMjE1IDExMSAzODQgMTE4ek0xNjY0IDQ5MXYxODRxLTIzNSAtMTE2IC0zODQgLTcxdjIyNHEtMjAgNiAtMzkgMTVxLTUgMyAtMzMgMTd0LTM0LjUgMTd0LTMxLjUgMTV0LTM0LjUgMTUuNXQtMzIuNSAxM3QtMzYgMTIuNXQtMzUgOC41dC0zOS41IDcuNXQtMzkuNSA0dC00NCAyCnEtMjMgMCAtNDkgLTN2LTIyMmgxOXExMDIgMCAxOTIuNSAtMjl0MTk3LjUgLTgycTE5IC05IDM5IC0xNXYtMTg4cTQyIC0xNyA5MSAtMTdxMTIwIDAgMjkzIDkyek0xNjY0IDkxOHYxODlxLTE2OSAtOTEgLTMwNiAtOTFxLTQ1IDAgLTc4IDh2LTE5NnExNDggLTQyIDM4NCA5MHpNMzIwIDEyODBxMCAtMzUgLTE3LjUgLTY0dC00Ni41IC00NnYtMTI2NnEwIC0xNCAtOSAtMjN0LTIzIC05aC02NHEtMTQgMCAtMjMgOXQtOSAyM3YxMjY2CnEtMjkgMTcgLTQ2LjUgNDZ0LTE3LjUgNjRxMCA1MyAzNy41IDkwLjV0OTAuNSAzNy41dDkwLjUgLTM3LjV0MzcuNSAtOTAuNXpNMTc5MiAxMjE2di03NjNxMCAtMzkgLTM1IC01N3EtMTAgLTUgLTE3IC05cS0yMTggLTExNiAtMzY5IC0xMTZxLTg4IDAgLTE1OCAzNWwtMjggMTRxLTY0IDMzIC05OSA0OHQtOTEgMjl0LTExNCAxNHEtMTAyIDAgLTIzNS41IC00NHQtMjI4LjUgLTEwMnEtMTUgLTkgLTMzIC05cS0xNiAwIC0zMiA4CnEtMzIgMTkgLTMyIDU2djc0MnEwIDM1IDMxIDU1cTM1IDIxIDc4LjUgNDIuNXQxMTQgNTJ0MTUyLjUgNDkuNXQxNTUgMTlxMTEyIDAgMjA5IC0zMXQyMDkgLTg2cTM4IC0xOSA4OSAtMTlxMTIyIDAgMzEwIDExMnEyMiAxMiAzMSAxN3EzMSAxNiA2MiAtMnEzMSAtMjAgMzEgLTU1eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ0ZXJtaW5hbCIgdW5pY29kZT0iJiN4ZjEyMDsiIGhvcml6LWFkdi14PSIxNjY0IiAKZD0iTTU4NSA1NTNsLTQ2NiAtNDY2cS0xMCAtMTAgLTIzIC0xMHQtMjMgMTBsLTUwIDUwcS0xMCAxMCAtMTAgMjN0MTAgMjNsMzkzIDM5M2wtMzkzIDM5M3EtMTAgMTAgLTEwIDIzdDEwIDIzbDUwIDUwcTEwIDEwIDIzIDEwdDIzIC0xMGw0NjYgLTQ2NnExMCAtMTAgMTAgLTIzdC0xMCAtMjN6TTE2NjQgOTZ2LTY0cTAgLTE0IC05IC0yM3QtMjMgLTloLTk2MHEtMTQgMCAtMjMgOXQtOSAyM3Y2NHEwIDE0IDkgMjN0MjMgOWg5NjBxMTQgMCAyMyAtOQp0OSAtMjN6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9ImNvZGUiIHVuaWNvZGU9IiYjeGYxMjE7IiBob3Jpei1hZHYteD0iMTkyMCIgCmQ9Ik02MTcgMTM3bC01MCAtNTBxLTEwIC0xMCAtMjMgLTEwdC0yMyAxMGwtNDY2IDQ2NnEtMTAgMTAgLTEwIDIzdDEwIDIzbDQ2NiA0NjZxMTAgMTAgMjMgMTB0MjMgLTEwbDUwIC01MHExMCAtMTAgMTAgLTIzdC0xMCAtMjNsLTM5MyAtMzkzbDM5MyAtMzkzcTEwIC0xMCAxMCAtMjN0LTEwIC0yM3pNMTIwOCAxMjA0bC0zNzMgLTEyOTFxLTQgLTEzIC0xNS41IC0xOS41dC0yMy41IC0yLjVsLTYyIDE3cS0xMyA0IC0xOS41IDE1LjV0LTIuNSAyNC41CmwzNzMgMTI5MXE0IDEzIDE1LjUgMTkuNXQyMy41IDIuNWw2MiAtMTdxMTMgLTQgMTkuNSAtMTUuNXQyLjUgLTI0LjV6TTE4NjUgNTUzbC00NjYgLTQ2NnEtMTAgLTEwIC0yMyAtMTB0LTIzIDEwbC01MCA1MHEtMTAgMTAgLTEwIDIzdDEwIDIzbDM5MyAzOTNsLTM5MyAzOTNxLTEwIDEwIC0xMCAyM3QxMCAyM2w1MCA1MHExMCAxMCAyMyAxMHQyMyAtMTBsNDY2IC00NjZxMTAgLTEwIDEwIC0yM3QtMTAgLTIzeiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJyZXBseV9hbGwiIHVuaWNvZGU9IiYjeGYxMjI7IiBob3Jpei1hZHYteD0iMTc5MiIgCmQ9Ik02NDAgNDU0di03MHEwIC00MiAtMzkgLTU5cS0xMyAtNSAtMjUgLTVxLTI3IDAgLTQ1IDE5bC01MTIgNTEycS0xOSAxOSAtMTkgNDV0MTkgNDVsNTEyIDUxMnEyOSAzMSA3MCAxNHEzOSAtMTcgMzkgLTU5di02OWwtMzk3IC0zOThxLTE5IC0xOSAtMTkgLTQ1dDE5IC00NXpNMTc5MiA0MTZxMCAtNTggLTE3IC0xMzMuNXQtMzguNSAtMTM4dC00OCAtMTI1dC00MC41IC05MC41bC0yMCAtNDBxLTggLTE3IC0yOCAtMTdxLTYgMCAtOSAxCnEtMjUgOCAtMjMgMzRxNDMgNDAwIC0xMDYgNTY1cS02NCA3MSAtMTcwLjUgMTEwLjV0LTI2Ny41IDUyLjV2LTI1MXEwIC00MiAtMzkgLTU5cS0xMyAtNSAtMjUgLTVxLTI3IDAgLTQ1IDE5bC01MTIgNTEycS0xOSAxOSAtMTkgNDV0MTkgNDVsNTEyIDUxMnEyOSAzMSA3MCAxNHEzOSAtMTcgMzkgLTU5di0yNjJxNDExIC0yOCA1OTkgLTIyMXExNjkgLTE3MyAxNjkgLTUwOXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0ic3Rhcl9oYWxmX2VtcHR5IiB1bmljb2RlPSImI3hmMTIzOyIgaG9yaXotYWR2LXg9IjE2NjQiIApkPSJNMTE4NiA1NzlsMjU3IDI1MGwtMzU2IDUybC02NiAxMGwtMzAgNjBsLTE1OSAzMjJ2LTk2M2w1OSAtMzFsMzE4IC0xNjhsLTYwIDM1NWwtMTIgNjZ6TTE2MzggODQxbC0zNjMgLTM1NGw4NiAtNTAwcTUgLTMzIC02IC01MS41dC0zNCAtMTguNXEtMTcgMCAtNDAgMTJsLTQ0OSAyMzZsLTQ0OSAtMjM2cS0yMyAtMTIgLTQwIC0xMnEtMjMgMCAtMzQgMTguNXQtNiA1MS41bDg2IDUwMGwtMzY0IDM1NHEtMzIgMzIgLTIzIDU5LjV0NTQgMzQuNQpsNTAyIDczbDIyNSA0NTVxMjAgNDEgNDkgNDFxMjggMCA0OSAtNDFsMjI1IC00NTVsNTAyIC03M3E0NSAtNyA1NCAtMzQuNXQtMjQgLTU5LjV6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9ImxvY2F0aW9uX2Fycm93IiB1bmljb2RlPSImI3hmMTI0OyIgaG9yaXotYWR2LXg9IjE0MDgiIApkPSJNMTQwMSAxMTg3bC02NDAgLTEyODBxLTE3IC0zNSAtNTcgLTM1cS01IDAgLTE1IDJxLTIyIDUgLTM1LjUgMjIuNXQtMTMuNSAzOS41djU3NmgtNTc2cS0yMiAwIC0zOS41IDEzLjV0LTIyLjUgMzUuNXQ0IDQydDI5IDMwbDEyODAgNjQwcTEzIDcgMjkgN3EyNyAwIDQ1IC0xOXExNSAtMTQgMTguNSAtMzQuNXQtNi41IC0zOS41eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJjcm9wIiB1bmljb2RlPSImI3hmMTI1OyIgaG9yaXotYWR2LXg9IjE2NjQiIApkPSJNNTU3IDI1Nmg1OTV2NTk1ek01MTIgMzAxbDU5NSA1OTVoLTU5NXYtNTk1ek0xNjY0IDIyNHYtMTkycTAgLTE0IC05IC0yM3QtMjMgLTloLTIyNHYtMjI0cTAgLTE0IC05IC0yM3QtMjMgLTloLTE5MnEtMTQgMCAtMjMgOXQtOSAyM3YyMjRoLTg2NHEtMTQgMCAtMjMgOXQtOSAyM3Y4NjRoLTIyNHEtMTQgMCAtMjMgOXQtOSAyM3YxOTJxMCAxNCA5IDIzdDIzIDloMjI0djIyNHEwIDE0IDkgMjN0MjMgOWgxOTJxMTQgMCAyMyAtOXQ5IC0yMwp2LTIyNGg4NTFsMjQ2IDI0N3ExMCA5IDIzIDl0MjMgLTlxOSAtMTAgOSAtMjN0LTkgLTIzbC0yNDcgLTI0NnYtODUxaDIyNHExNCAwIDIzIC05dDkgLTIzeiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJjb2RlX2ZvcmsiIHVuaWNvZGU9IiYjeGYxMjY7IiBob3Jpei1hZHYteD0iMTAyNCIgCmQ9Ik0yODggNjRxMCA0MCAtMjggNjh0LTY4IDI4dC02OCAtMjh0LTI4IC02OHQyOCAtNjh0NjggLTI4dDY4IDI4dDI4IDY4ek0yODggMTIxNnEwIDQwIC0yOCA2OHQtNjggMjh0LTY4IC0yOHQtMjggLTY4dDI4IC02OHQ2OCAtMjh0NjggMjh0MjggNjh6TTkyOCAxMDg4cTAgNDAgLTI4IDY4dC02OCAyOHQtNjggLTI4dC0yOCAtNjh0MjggLTY4dDY4IC0yOHQ2OCAyOHQyOCA2OHpNMTAyNCAxMDg4cTAgLTUyIC0yNiAtOTYuNXQtNzAgLTY5LjUKcS0yIC0yODcgLTIyNiAtNDE0cS02NyAtMzggLTIwMyAtODFxLTEyOCAtNDAgLTE2OS41IC03MXQtNDEuNSAtMTAwdi0yNnE0NCAtMjUgNzAgLTY5LjV0MjYgLTk2LjVxMCAtODAgLTU2IC0xMzZ0LTEzNiAtNTZ0LTEzNiA1NnQtNTYgMTM2cTAgNTIgMjYgOTYuNXQ3MCA2OS41djgyMHEtNDQgMjUgLTcwIDY5LjV0LTI2IDk2LjVxMCA4MCA1NiAxMzZ0MTM2IDU2dDEzNiAtNTZ0NTYgLTEzNnEwIC01MiAtMjYgLTk2LjV0LTcwIC02OS41di00OTcKcTU0IDI2IDE1NCA1N3E1NSAxNyA4Ny41IDI5LjV0NzAuNSAzMXQ1OSAzOS41dDQwLjUgNTF0MjggNjkuNXQ4LjUgOTEuNXEtNDQgMjUgLTcwIDY5LjV0LTI2IDk2LjVxMCA4MCA1NiAxMzZ0MTM2IDU2dDEzNiAtNTZ0NTYgLTEzNnoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idW5saW5rIiB1bmljb2RlPSImI3hmMTI3OyIgaG9yaXotYWR2LXg9IjE2NjQiIApkPSJNNDM5IDI2NWwtMjU2IC0yNTZxLTExIC05IC0yMyAtOXQtMjMgOXEtOSAxMCAtOSAyM3Q5IDIzbDI1NiAyNTZxMTAgOSAyMyA5dDIzIC05cTkgLTEwIDkgLTIzdC05IC0yM3pNNjA4IDIyNHYtMzIwcTAgLTE0IC05IC0yM3QtMjMgLTl0LTIzIDl0LTkgMjN2MzIwcTAgMTQgOSAyM3QyMyA5dDIzIC05dDkgLTIzek0zODQgNDQ4cTAgLTE0IC05IC0yM3QtMjMgLTloLTMyMHEtMTQgMCAtMjMgOXQtOSAyM3Q5IDIzdDIzIDloMzIwCnExNCAwIDIzIC05dDkgLTIzek0xNjQ4IDMyMHEwIC0xMjAgLTg1IC0yMDNsLTE0NyAtMTQ2cS04MyAtODMgLTIwMyAtODNxLTEyMSAwIC0yMDQgODVsLTMzNCAzMzVxLTIxIDIxIC00MiA1NmwyMzkgMThsMjczIC0yNzRxMjcgLTI3IDY4IC0yNy41dDY4IDI2LjVsMTQ3IDE0NnEyOCAyOCAyOCA2N3EwIDQwIC0yOCA2OGwtMjc0IDI3NWwxOCAyMzlxMzUgLTIxIDU2IC00MmwzMzYgLTMzNnE4NCAtODYgODQgLTIwNHpNMTAzMSAxMDQ0bC0yMzkgLTE4CmwtMjczIDI3NHEtMjggMjggLTY4IDI4cS0zOSAwIC02OCAtMjdsLTE0NyAtMTQ2cS0yOCAtMjggLTI4IC02N3EwIC00MCAyOCAtNjhsMjc0IC0yNzRsLTE4IC0yNDBxLTM1IDIxIC01NiA0MmwtMzM2IDMzNnEtODQgODYgLTg0IDIwNHEwIDEyMCA4NSAyMDNsMTQ3IDE0NnE4MyA4MyAyMDMgODNxMTIxIDAgMjA0IC04NWwzMzQgLTMzNXEyMSAtMjEgNDIgLTU2ek0xNjY0IDk2MHEwIC0xNCAtOSAtMjN0LTIzIC05aC0zMjBxLTE0IDAgLTIzIDkKdC05IDIzdDkgMjN0MjMgOWgzMjBxMTQgMCAyMyAtOXQ5IC0yM3pNMTEyMCAxNTA0di0zMjBxMCAtMTQgLTkgLTIzdC0yMyAtOXQtMjMgOXQtOSAyM3YzMjBxMCAxNCA5IDIzdDIzIDl0MjMgLTl0OSAtMjN6TTE1MjcgMTM1M2wtMjU2IC0yNTZxLTExIC05IC0yMyAtOXQtMjMgOXEtOSAxMCAtOSAyM3Q5IDIzbDI1NiAyNTZxMTAgOSAyMyA5dDIzIC05cTkgLTEwIDkgLTIzdC05IC0yM3oiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0icXVlc3Rpb24iIHVuaWNvZGU9IiYjeGYxMjg7IiBob3Jpei1hZHYteD0iMTAyNCIgCmQ9Ik03MDQgMjgwdi0yNDBxMCAtMTYgLTEyIC0yOHQtMjggLTEyaC0yNDBxLTE2IDAgLTI4IDEydC0xMiAyOHYyNDBxMCAxNiAxMiAyOHQyOCAxMmgyNDBxMTYgMCAyOCAtMTJ0MTIgLTI4ek0xMDIwIDg4MHEwIC01NCAtMTUuNSAtMTAxdC0zNSAtNzYuNXQtNTUgLTU5LjV0LTU3LjUgLTQzLjV0LTYxIC0zNS41cS00MSAtMjMgLTY4LjUgLTY1dC0yNy41IC02N3EwIC0xNyAtMTIgLTMyLjV0LTI4IC0xNS41aC0yNDBxLTE1IDAgLTI1LjUgMTguNQp0LTEwLjUgMzcuNXY0NXEwIDgzIDY1IDE1Ni41dDE0MyAxMDguNXE1OSAyNyA4NCA1NnQyNSA3NnEwIDQyIC00Ni41IDc0dC0xMDcuNSAzMnEtNjUgMCAtMTA4IC0yOXEtMzUgLTI1IC0xMDcgLTExNXEtMTMgLTE2IC0zMSAtMTZxLTEyIDAgLTI1IDhsLTE2NCAxMjVxLTEzIDEwIC0xNS41IDI1dDUuNSAyOHExNjAgMjY2IDQ2NCAyNjZxODAgMCAxNjEgLTMxdDE0NiAtODN0MTA2IC0xMjcuNXQ0MSAtMTU4LjV6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9Il8yNzkiIHVuaWNvZGU9IiYjeGYxMjk7IiBob3Jpei1hZHYteD0iNjQwIiAKZD0iTTY0MCAxOTJ2LTEyOHEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTUxMnEtMjYgMCAtNDUgMTl0LTE5IDQ1djEyOHEwIDI2IDE5IDQ1dDQ1IDE5aDY0djM4NGgtNjRxLTI2IDAgLTQ1IDE5dC0xOSA0NXYxMjhxMCAyNiAxOSA0NXQ0NSAxOWgzODRxMjYgMCA0NSAtMTl0MTkgLTQ1di01NzZoNjRxMjYgMCA0NSAtMTl0MTkgLTQ1ek01MTIgMTM0NHYtMTkycTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtMjU2cS0yNiAwIC00NSAxOXQtMTkgNDV2MTkyCnEwIDI2IDE5IDQ1dDQ1IDE5aDI1NnEyNiAwIDQ1IC0xOXQxOSAtNDV6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9ImV4Y2xhbWF0aW9uIiB1bmljb2RlPSImI3hmMTJhOyIgaG9yaXotYWR2LXg9IjY0MCIgCmQ9Ik01MTIgMjg4di0yMjRxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC0yNTZxLTI2IDAgLTQ1IDE5dC0xOSA0NXYyMjRxMCAyNiAxOSA0NXQ0NSAxOWgyNTZxMjYgMCA0NSAtMTl0MTkgLTQ1ek01NDIgMTM0NGwtMjggLTc2OHEtMSAtMjYgLTIwLjUgLTQ1dC00NS41IC0xOWgtMjU2cS0yNiAwIC00NS41IDE5dC0yMC41IDQ1bC0yOCA3NjhxLTEgMjYgMTcuNSA0NXQ0NC41IDE5aDMyMHEyNiAwIDQ0LjUgLTE5dDE3LjUgLTQ1eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJzdXBlcnNjcmlwdCIgdW5pY29kZT0iJiN4ZjEyYjsiIApkPSJNODk3IDE2N3YtMTY3aC0yNDhsLTE1OSAyNTJsLTI0IDQycS04IDkgLTExIDIxaC0zcS0xIC0zIC0yLjUgLTYuNXQtMy41IC04dC0zIC02LjVxLTEwIC0yMCAtMjUgLTQ0bC0xNTUgLTI1MGgtMjU4djE2N2gxMjhsMTk3IDI5MWwtMTg1IDI3MmgtMTM3djE2OGgyNzZsMTM5IC0yMjhxMiAtNCAyMyAtNDJxOCAtOSAxMSAtMjFoM3EzIDkgMTEgMjFsMjUgNDJsMTQwIDIyOGgyNTd2LTE2OGgtMTI1bC0xODQgLTI2N2wyMDQgLTI5NmgxMDl6Ck0xNTM0IDg0NnYtMjA2aC01MTRsLTMgMjdxLTQgMjggLTQgNDZxMCA2NCAyNiAxMTd0NjUgODYuNXQ4NCA2NXQ4NCA1NC41dDY1IDU0dDI2IDY0cTAgMzggLTI5LjUgNjIuNXQtNzAuNSAyNC41cS01MSAwIC05NyAtMzlxLTE0IC0xMSAtMzYgLTM4bC0xMDUgOTJxMjYgMzcgNjMgNjZxODMgNjUgMTg4IDY1cTExMCAwIDE3OCAtNTkuNXQ2OCAtMTU4LjVxMCAtNTYgLTI0LjUgLTEwM3QtNjIgLTc2LjV0LTgxLjUgLTU4LjV0LTgyIC01MC41CnQtNjUuNSAtNTEuNXQtMzAuNSAtNjNoMjMydjgwaDEyNnoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0ic3Vic2NyaXB0IiB1bmljb2RlPSImI3hmMTJjOyIgCmQ9Ik04OTcgMTY3di0xNjdoLTI0OGwtMTU5IDI1MmwtMjQgNDJxLTggOSAtMTEgMjFoLTNxLTEgLTMgLTIuNSAtNi41dC0zLjUgLTh0LTMgLTYuNXEtMTAgLTIwIC0yNSAtNDRsLTE1NSAtMjUwaC0yNTh2MTY3aDEyOGwxOTcgMjkxbC0xODUgMjcyaC0xMzd2MTY4aDI3NmwxMzkgLTIyOHEyIC00IDIzIC00MnE4IC05IDExIC0yMWgzcTMgOSAxMSAyMWwyNSA0MmwxNDAgMjI4aDI1N3YtMTY4aC0xMjVsLTE4NCAtMjY3bDIwNCAtMjk2aDEwOXoKTTE1MzYgLTUwdi0yMDZoLTUxNGwtNCAyN3EtMyA0NSAtMyA0NnEwIDY0IDI2IDExN3Q2NSA4Ni41dDg0IDY1dDg0IDU0LjV0NjUgNTR0MjYgNjRxMCAzOCAtMjkuNSA2Mi41dC03MC41IDI0LjVxLTUxIDAgLTk3IC0zOXEtMTQgLTExIC0zNiAtMzhsLTEwNSA5MnEyNiAzNyA2MyA2NnE4MCA2NSAxODggNjVxMTEwIDAgMTc4IC01OS41dDY4IC0xNTguNXEwIC02NiAtMzQuNSAtMTE4LjV0LTg0IC04NnQtOTkuNSAtNjIuNXQtODcgLTYzdC00MSAtNzMKaDIzMnY4MGgxMjZ6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9Il8yODMiIHVuaWNvZGU9IiYjeGYxMmQ7IiBob3Jpei1hZHYteD0iMTkyMCIgCmQ9Ik04OTYgMTI4bDMzNiAzODRoLTc2OGwtMzM2IC0zODRoNzY4ek0xOTA5IDEyMDVxMTUgLTM0IDkuNSAtNzEuNXQtMzAuNSAtNjUuNWwtODk2IC0xMDI0cS0zOCAtNDQgLTk2IC00NGgtNzY4cS0zOCAwIC02OS41IDIwLjV0LTQ3LjUgNTQuNXEtMTUgMzQgLTkuNSA3MS41dDMwLjUgNjUuNWw4OTYgMTAyNHEzOCA0NCA5NiA0NGg3NjhxMzggMCA2OS41IC0yMC41dDQ3LjUgLTU0LjV6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InB1enpsZV9waWVjZSIgdW5pY29kZT0iJiN4ZjEyZTsiIGhvcml6LWFkdi14PSIxNjY0IiAKZD0iTTE2NjQgNDM4cTAgLTgxIC00NC41IC0xMzV0LTEyMy41IC01NHEtNDEgMCAtNzcuNSAxNy41dC01OSAzOHQtNTYuNSAzOHQtNzEgMTcuNXEtMTEwIDAgLTExMCAtMTI0cTAgLTM5IDE2IC0xMTV0MTUgLTExNXYtNXEtMjIgMCAtMzMgLTFxLTM0IC0zIC05Ny41IC0xMS41dC0xMTUuNSAtMTMuNXQtOTggLTVxLTYxIDAgLTEwMyAyNi41dC00MiA4My41cTAgMzcgMTcuNSA3MXQzOCA1Ni41dDM4IDU5dDE3LjUgNzcuNXEwIDc5IC01NCAxMjMuNQp0LTEzNSA0NC41cS04NCAwIC0xNDMgLTQ1LjV0LTU5IC0xMjcuNXEwIC00MyAxNSAtODN0MzMuNSAtNjQuNXQzMy41IC01M3QxNSAtNTAuNXEwIC00NSAtNDYgLTg5cS0zNyAtMzUgLTExNyAtMzVxLTk1IDAgLTI0NSAyNHEtOSAyIC0yNy41IDR0LTI3LjUgNGwtMTMgMnEtMSAwIC0zIDFxLTIgMCAtMiAxdjEwMjRxMiAtMSAxNy41IC0zLjV0MzQgLTV0MjEuNSAtMy41cTE1MCAtMjQgMjQ1IC0yNHE4MCAwIDExNyAzNXE0NiA0NCA0NiA4OQpxMCAyMiAtMTUgNTAuNXQtMzMuNSA1M3QtMzMuNSA2NC41dC0xNSA4M3EwIDgyIDU5IDEyNy41dDE0NCA0NS41cTgwIDAgMTM0IC00NC41dDU0IC0xMjMuNXEwIC00MSAtMTcuNSAtNzcuNXQtMzggLTU5dC0zOCAtNTYuNXQtMTcuNSAtNzFxMCAtNTcgNDIgLTgzLjV0MTAzIC0yNi41cTY0IDAgMTgwIDE1dDE2MyAxN3YtMnEtMSAtMiAtMy41IC0xNy41dC01IC0zNHQtMy41IC0yMS41cS0yNCAtMTUwIC0yNCAtMjQ1cTAgLTgwIDM1IC0xMTcKcTQ0IC00NiA4OSAtNDZxMjIgMCA1MC41IDE1dDUzIDMzLjV0NjQuNSAzMy41dDgzIDE1cTgyIDAgMTI3LjUgLTU5dDQ1LjUgLTE0M3oiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0ibWljcm9waG9uZSIgdW5pY29kZT0iJiN4ZjEzMDsiIGhvcml6LWFkdi14PSIxMTUyIiAKZD0iTTExNTIgODMydi0xMjhxMCAtMjIxIC0xNDcuNSAtMzg0LjV0LTM2NC41IC0xODcuNXYtMTMyaDI1NnEyNiAwIDQ1IC0xOXQxOSAtNDV0LTE5IC00NXQtNDUgLTE5aC02NDBxLTI2IDAgLTQ1IDE5dC0xOSA0NXQxOSA0NXQ0NSAxOWgyNTZ2MTMycS0yMTcgMjQgLTM2NC41IDE4Ny41dC0xNDcuNSAzODQuNXYxMjhxMCAyNiAxOSA0NXQ0NSAxOXQ0NSAtMTl0MTkgLTQ1di0xMjhxMCAtMTg1IDEzMS41IC0zMTYuNXQzMTYuNSAtMTMxLjUKdDMxNi41IDEzMS41dDEzMS41IDMxNi41djEyOHEwIDI2IDE5IDQ1dDQ1IDE5dDQ1IC0xOXQxOSAtNDV6TTg5NiAxMjE2di01MTJxMCAtMTMyIC05NCAtMjI2dC0yMjYgLTk0dC0yMjYgOTR0LTk0IDIyNnY1MTJxMCAxMzIgOTQgMjI2dDIyNiA5NHQyMjYgLTk0dDk0IC0yMjZ6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9Im1pY3JvcGhvbmVfb2ZmIiB1bmljb2RlPSImI3hmMTMxOyIgaG9yaXotYWR2LXg9IjE0MDgiIApkPSJNMjcxIDU5MWwtMTAxIC0xMDFxLTQyIDEwMyAtNDIgMjE0djEyOHEwIDI2IDE5IDQ1dDQ1IDE5dDQ1IC0xOXQxOSAtNDV2LTEyOHEwIC01MyAxNSAtMTEzek0xMzg1IDExOTNsLTM2MSAtMzYxdi0xMjhxMCAtMTMyIC05NCAtMjI2dC0yMjYgLTk0cS01NSAwIC0xMDkgMTlsLTk2IC05NnE5NyAtNTEgMjA1IC01MXExODUgMCAzMTYuNSAxMzEuNXQxMzEuNSAzMTYuNXYxMjhxMCAyNiAxOSA0NXQ0NSAxOXQ0NSAtMTl0MTkgLTQ1di0xMjgKcTAgLTIyMSAtMTQ3LjUgLTM4NC41dC0zNjQuNSAtMTg3LjV2LTEzMmgyNTZxMjYgMCA0NSAtMTl0MTkgLTQ1dC0xOSAtNDV0LTQ1IC0xOWgtNjQwcS0yNiAwIC00NSAxOXQtMTkgNDV0MTkgNDV0NDUgMTloMjU2djEzMnEtMTI1IDEzIC0yMzUgODFsLTI1NCAtMjU0cS0xMCAtMTAgLTIzIC0xMHQtMjMgMTBsLTgyIDgycS0xMCAxMCAtMTAgMjN0MTAgMjNsMTIzNCAxMjM0cTEwIDEwIDIzIDEwdDIzIC0xMGw4MiAtODJxMTAgLTEwIDEwIC0yMwp0LTEwIC0yM3pNMTAwNSAxMzI1bC02MjEgLTYyMXY1MTJxMCAxMzIgOTQgMjI2dDIyNiA5NHExMDIgMCAxODQuNSAtNTl0MTE2LjUgLTE1MnoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0ic2hpZWxkIiB1bmljb2RlPSImI3hmMTMyOyIgaG9yaXotYWR2LXg9IjEyODAiIApkPSJNMTA4OCA1NzZ2NjQwaC00NDh2LTExMzdxMTE5IDYzIDIxMyAxMzdxMjM1IDE4NCAyMzUgMzYwek0xMjgwIDEzNDR2LTc2OHEwIC04NiAtMzMuNSAtMTcwLjV0LTgzIC0xNTB0LTExOCAtMTI3LjV0LTEyNi41IC0xMDN0LTEyMSAtNzcuNXQtODkuNSAtNDkuNXQtNDIuNSAtMjBxLTEyIC02IC0yNiAtNnQtMjYgNnEtMTYgNyAtNDIuNSAyMHQtODkuNSA0OS41dC0xMjEgNzcuNXQtMTI2LjUgMTAzdC0xMTggMTI3LjV0LTgzIDE1MAp0LTMzLjUgMTcwLjV2NzY4cTAgMjYgMTkgNDV0NDUgMTloMTE1MnEyNiAwIDQ1IC0xOXQxOSAtNDV6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9ImNhbGVuZGFyX2VtcHR5IiB1bmljb2RlPSImI3hmMTMzOyIgaG9yaXotYWR2LXg9IjE2NjQiIApkPSJNMTI4IC0xMjhoMTQwOHYxMDI0aC0xNDA4di0xMDI0ek01MTIgMTA4OHYyODhxMCAxNCAtOSAyM3QtMjMgOWgtNjRxLTE0IDAgLTIzIC05dC05IC0yM3YtMjg4cTAgLTE0IDkgLTIzdDIzIC05aDY0cTE0IDAgMjMgOXQ5IDIzek0xMjgwIDEwODh2Mjg4cTAgMTQgLTkgMjN0LTIzIDloLTY0cS0xNCAwIC0yMyAtOXQtOSAtMjN2LTI4OHEwIC0xNCA5IC0yM3QyMyAtOWg2NHExNCAwIDIzIDl0OSAyM3pNMTY2NCAxMTUydi0xMjgwCnEwIC01MiAtMzggLTkwdC05MCAtMzhoLTE0MDhxLTUyIDAgLTkwIDM4dC0zOCA5MHYxMjgwcTAgNTIgMzggOTB0OTAgMzhoMTI4djk2cTAgNjYgNDcgMTEzdDExMyA0N2g2NHE2NiAwIDExMyAtNDd0NDcgLTExM3YtOTZoMzg0djk2cTAgNjYgNDcgMTEzdDExMyA0N2g2NHE2NiAwIDExMyAtNDd0NDcgLTExM3YtOTZoMTI4cTUyIDAgOTAgLTM4dDM4IC05MHoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iZmlyZV9leHRpbmd1aXNoZXIiIHVuaWNvZGU9IiYjeGYxMzQ7IiBob3Jpei1hZHYteD0iMTQwOCIgCmQ9Ik01MTIgMTM0NHEwIDI2IC0xOSA0NXQtNDUgMTl0LTQ1IC0xOXQtMTkgLTQ1dDE5IC00NXQ0NSAtMTl0NDUgMTl0MTkgNDV6TTE0MDggMTM3NnYtMzIwcTAgLTE2IC0xMiAtMjVxLTggLTcgLTIwIC03cS00IDAgLTcgMWwtNDQ4IDk2cS0xMSAyIC0xOCAxMXQtNyAyMGgtMjU2di0xMDJxMTExIC0yMyAxODMuNSAtMTExdDcyLjUgLTIwM3YtODAwcTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtNTEycS0yNiAwIC00NSAxOXQtMTkgNDV2ODAwCnEwIDEwNiA2Mi41IDE5MC41dDE2MS41IDExNC41djExMWgtMzJxLTU5IDAgLTExNSAtMjMuNXQtOTEuNSAtNTN0LTY2IC02Ni41dC00MC41IC01My41dC0xNCAtMjQuNXEtMTcgLTM1IC01NyAtMzVxLTE2IDAgLTI5IDdxLTIzIDEyIC0zMS41IDM3dDMuNSA0OXE1IDEwIDE0LjUgMjZ0MzcuNSA1My41dDYwLjUgNzB0ODUgNjd0MTA4LjUgNTIuNXEtMjUgNDIgLTI1IDg2cTAgNjYgNDcgMTEzdDExMyA0N3QxMTMgLTQ3dDQ3IC0xMTMKcTAgLTMzIC0xNCAtNjRoMzAycTAgMTEgNyAyMHQxOCAxMWw0NDggOTZxMyAxIDcgMXExMiAwIDIwIC03cTEyIC05IDEyIC0yNXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0icm9ja2V0IiB1bmljb2RlPSImI3hmMTM1OyIgaG9yaXotYWR2LXg9IjE2NjQiIApkPSJNMTQ0MCAxMDg4cTAgNDAgLTI4IDY4dC02OCAyOHQtNjggLTI4dC0yOCAtNjh0MjggLTY4dDY4IC0yOHQ2OCAyOHQyOCA2OHpNMTY2NCAxMzc2cTAgLTI0OSAtNzUuNSAtNDMwLjV0LTI1My41IC0zNjAuNXEtODEgLTgwIC0xOTUgLTE3NmwtMjAgLTM3OXEtMiAtMTYgLTE2IC0yNmwtMzg0IC0yMjRxLTcgLTQgLTE2IC00cS0xMiAwIC0yMyA5bC02NCA2NHEtMTMgMTQgLTggMzJsODUgMjc2bC0yODEgMjgxbC0yNzYgLTg1cS0zIC0xIC05IC0xCnEtMTQgMCAtMjMgOWwtNjQgNjRxLTE3IDE5IC01IDM5bDIyNCAzODRxMTAgMTQgMjYgMTZsMzc5IDIwcTk2IDExNCAxNzYgMTk1cTE4OCAxODcgMzU4IDI1OHQ0MzEgNzFxMTQgMCAyNCAtOS41dDEwIC0yMi41eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJtYXhjZG4iIHVuaWNvZGU9IiYjeGYxMzY7IiBob3Jpei1hZHYteD0iMTc5MiIgCmQ9Ik0xNzQ1IDc2M2wtMTY0IC03NjNoLTMzNGwxNzggODMycTEzIDU2IC0xNSA4OHEtMjcgMzMgLTgzIDMzaC0xNjlsLTIwNCAtOTUzaC0zMzRsMjA0IDk1M2gtMjg2bC0yMDQgLTk1M2gtMzM0bDIwNCA5NTNsLTE1MyAzMjdoMTI3NnExMDEgMCAxODkuNSAtNDAuNXQxNDcuNSAtMTEzLjVxNjAgLTczIDgxIC0xNjguNXQwIC0xOTQuNXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iY2hldnJvbl9zaWduX2xlZnQiIHVuaWNvZGU9IiYjeGYxMzc7IiAKZD0iTTkwOSAxNDFsMTAyIDEwMnExOSAxOSAxOSA0NXQtMTkgNDVsLTMwNyAzMDdsMzA3IDMwN3ExOSAxOSAxOSA0NXQtMTkgNDVsLTEwMiAxMDJxLTE5IDE5IC00NSAxOXQtNDUgLTE5bC00NTQgLTQ1NHEtMTkgLTE5IC0xOSAtNDV0MTkgLTQ1bDQ1NCAtNDU0cTE5IC0xOSA0NSAtMTl0NDUgMTl6TTE1MzYgNjQwcTAgLTIwOSAtMTAzIC0zODUuNXQtMjc5LjUgLTI3OS41dC0zODUuNSAtMTAzdC0zODUuNSAxMDN0LTI3OS41IDI3OS41CnQtMTAzIDM4NS41dDEwMyAzODUuNXQyNzkuNSAyNzkuNXQzODUuNSAxMDN0Mzg1LjUgLTEwM3QyNzkuNSAtMjc5LjV0MTAzIC0zODUuNXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iY2hldnJvbl9zaWduX3JpZ2h0IiB1bmljb2RlPSImI3hmMTM4OyIgCmQ9Ik03MTcgMTQxbDQ1NCA0NTRxMTkgMTkgMTkgNDV0LTE5IDQ1bC00NTQgNDU0cS0xOSAxOSAtNDUgMTl0LTQ1IC0xOWwtMTAyIC0xMDJxLTE5IC0xOSAtMTkgLTQ1dDE5IC00NWwzMDcgLTMwN2wtMzA3IC0zMDdxLTE5IC0xOSAtMTkgLTQ1dDE5IC00NWwxMDIgLTEwMnExOSAtMTkgNDUgLTE5dDQ1IDE5ek0xNTM2IDY0MHEwIC0yMDkgLTEwMyAtMzg1LjV0LTI3OS41IC0yNzkuNXQtMzg1LjUgLTEwM3QtMzg1LjUgMTAzdC0yNzkuNSAyNzkuNQp0LTEwMyAzODUuNXQxMDMgMzg1LjV0Mjc5LjUgMjc5LjV0Mzg1LjUgMTAzdDM4NS41IC0xMDN0Mjc5LjUgLTI3OS41dDEwMyAtMzg1LjV6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9ImNoZXZyb25fc2lnbl91cCIgdW5pY29kZT0iJiN4ZjEzOTsiIApkPSJNMTE2NSAzOTdsMTAyIDEwMnExOSAxOSAxOSA0NXQtMTkgNDVsLTQ1NCA0NTRxLTE5IDE5IC00NSAxOXQtNDUgLTE5bC00NTQgLTQ1NHEtMTkgLTE5IC0xOSAtNDV0MTkgLTQ1bDEwMiAtMTAycTE5IC0xOSA0NSAtMTl0NDUgMTlsMzA3IDMwN2wzMDcgLTMwN3ExOSAtMTkgNDUgLTE5dDQ1IDE5ek0xNTM2IDY0MHEwIC0yMDkgLTEwMyAtMzg1LjV0LTI3OS41IC0yNzkuNXQtMzg1LjUgLTEwM3QtMzg1LjUgMTAzdC0yNzkuNSAyNzkuNQp0LTEwMyAzODUuNXQxMDMgMzg1LjV0Mjc5LjUgMjc5LjV0Mzg1LjUgMTAzdDM4NS41IC0xMDN0Mjc5LjUgLTI3OS41dDEwMyAtMzg1LjV6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9ImNoZXZyb25fc2lnbl9kb3duIiB1bmljb2RlPSImI3hmMTNhOyIgCmQ9Ik04MTMgMjM3bDQ1NCA0NTRxMTkgMTkgMTkgNDV0LTE5IDQ1bC0xMDIgMTAycS0xOSAxOSAtNDUgMTl0LTQ1IC0xOWwtMzA3IC0zMDdsLTMwNyAzMDdxLTE5IDE5IC00NSAxOXQtNDUgLTE5bC0xMDIgLTEwMnEtMTkgLTE5IC0xOSAtNDV0MTkgLTQ1bDQ1NCAtNDU0cTE5IC0xOSA0NSAtMTl0NDUgMTl6TTE1MzYgNjQwcTAgLTIwOSAtMTAzIC0zODUuNXQtMjc5LjUgLTI3OS41dC0zODUuNSAtMTAzdC0zODUuNSAxMDN0LTI3OS41IDI3OS41CnQtMTAzIDM4NS41dDEwMyAzODUuNXQyNzkuNSAyNzkuNXQzODUuNSAxMDN0Mzg1LjUgLTEwM3QyNzkuNSAtMjc5LjV0MTAzIC0zODUuNXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iaHRtbDUiIHVuaWNvZGU9IiYjeGYxM2I7IiBob3Jpei1hZHYteD0iMTQwOCIgCmQ9Ik0xMTMwIDkzOWwxNiAxNzVoLTg4NGw0NyAtNTM0aDYxMmwtMjIgLTIyOGwtMTk3IC01M2wtMTk2IDUzbC0xMyAxNDBoLTE3NWwyMiAtMjc4bDM2MiAtMTAwaDR2MWwzNTkgOTlsNTAgNTQ0aC02NDRsLTE1IDE4MWg2NzR6TTAgMTQwOGgxNDA4bC0xMjggLTE0MzhsLTU3OCAtMTYybC01NzQgMTYyeiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJjc3MzIiB1bmljb2RlPSImI3hmMTNjOyIgaG9yaXotYWR2LXg9IjE3OTIiIApkPSJNMjc1IDE0MDhoMTUwNWwtMjY2IC0xMzMzbC04MDQgLTI2N2wtNjk4IDI2N2w3MSAzNTZoMjk3bC0yOSAtMTQ3bDQyMiAtMTYxbDQ4NiAxNjFsNjggMzM5aC0xMjA4bDU4IDI5N2gxMjA5bDM4IDE5MWgtMTIwOHoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iYW5jaG9yIiB1bmljb2RlPSImI3hmMTNkOyIgaG9yaXotYWR2LXg9IjE3OTIiIApkPSJNOTYwIDEyODBxMCAyNiAtMTkgNDV0LTQ1IDE5dC00NSAtMTl0LTE5IC00NXQxOSAtNDV0NDUgLTE5dDQ1IDE5dDE5IDQ1ek0xNzkyIDM1MnYtMzUycTAgLTIyIC0yMCAtMzBxLTggLTIgLTEyIC0ycS0xMiAwIC0yMyA5bC05MyA5M3EtMTE5IC0xNDMgLTMxOC41IC0yMjYuNXQtNDI5LjUgLTgzLjV0LTQyOS41IDgzLjV0LTMxOC41IDIyNi41bC05MyAtOTNxLTkgLTkgLTIzIC05cS00IDAgLTEyIDJxLTIwIDggLTIwIDMwdjM1MgpxMCAxNCA5IDIzdDIzIDloMzUycTIyIDAgMzAgLTIwcTggLTE5IC03IC0zNWwtMTAwIC0xMDBxNjcgLTkxIDE4OS41IC0xNTMuNXQyNzEuNSAtODIuNXY2NDdoLTE5MnEtMjYgMCAtNDUgMTl0LTE5IDQ1djEyOHEwIDI2IDE5IDQ1dDQ1IDE5aDE5MnYxNjNxLTU4IDM0IC05MyA5Mi41dC0zNSAxMjguNXEwIDEwNiA3NSAxODF0MTgxIDc1dDE4MSAtNzV0NzUgLTE4MXEwIC03MCAtMzUgLTEyOC41dC05MyAtOTIuNXYtMTYzaDE5MnEyNiAwIDQ1IC0xOQp0MTkgLTQ1di0xMjhxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC0xOTJ2LTY0N3ExNDkgMjAgMjcxLjUgODIuNXQxODkuNSAxNTMuNWwtMTAwIDEwMHEtMTUgMTYgLTcgMzVxOCAyMCAzMCAyMGgzNTJxMTQgMCAyMyAtOXQ5IC0yM3oiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idW5sb2NrX2FsdCIgdW5pY29kZT0iJiN4ZjEzZTsiIGhvcml6LWFkdi14PSIxMTUyIiAKZD0iTTEwNTYgNzY4cTQwIDAgNjggLTI4dDI4IC02OHYtNTc2cTAgLTQwIC0yOCAtNjh0LTY4IC0yOGgtOTYwcS00MCAwIC02OCAyOHQtMjggNjh2NTc2cTAgNDAgMjggNjh0NjggMjhoMzJ2MzIwcTAgMTg1IDEzMS41IDMxNi41dDMxNi41IDEzMS41dDMxNi41IC0xMzEuNXQxMzEuNSAtMzE2LjVxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC02NHEtMjYgMCAtNDUgMTl0LTE5IDQ1cTAgMTA2IC03NSAxODF0LTE4MSA3NXQtMTgxIC03NXQtNzUgLTE4MQp2LTMyMGg3MzZ6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9ImJ1bGxzZXllIiB1bmljb2RlPSImI3hmMTQwOyIgCmQ9Ik0xMDI0IDY0MHEwIC0xMDYgLTc1IC0xODF0LTE4MSAtNzV0LTE4MSA3NXQtNzUgMTgxdDc1IDE4MXQxODEgNzV0MTgxIC03NXQ3NSAtMTgxek0xMTUyIDY0MHEwIDE1OSAtMTEyLjUgMjcxLjV0LTI3MS41IDExMi41dC0yNzEuNSAtMTEyLjV0LTExMi41IC0yNzEuNXQxMTIuNSAtMjcxLjV0MjcxLjUgLTExMi41dDI3MS41IDExMi41dDExMi41IDI3MS41ek0xMjgwIDY0MHEwIC0yMTIgLTE1MCAtMzYydC0zNjIgLTE1MHQtMzYyIDE1MAp0LTE1MCAzNjJ0MTUwIDM2MnQzNjIgMTUwdDM2MiAtMTUwdDE1MCAtMzYyek0xNDA4IDY0MHEwIDEzMCAtNTEgMjQ4LjV0LTEzNi41IDIwNHQtMjA0IDEzNi41dC0yNDguNSA1MXQtMjQ4LjUgLTUxdC0yMDQgLTEzNi41dC0xMzYuNSAtMjA0dC01MSAtMjQ4LjV0NTEgLTI0OC41dDEzNi41IC0yMDR0MjA0IC0xMzYuNXQyNDguNSAtNTF0MjQ4LjUgNTF0MjA0IDEzNi41dDEzNi41IDIwNHQ1MSAyNDguNXpNMTUzNiA2NDAKcTAgLTIwOSAtMTAzIC0zODUuNXQtMjc5LjUgLTI3OS41dC0zODUuNSAtMTAzdC0zODUuNSAxMDN0LTI3OS41IDI3OS41dC0xMDMgMzg1LjV0MTAzIDM4NS41dDI3OS41IDI3OS41dDM4NS41IDEwM3QzODUuNSAtMTAzdDI3OS41IC0yNzkuNXQxMDMgLTM4NS41eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJlbGxpcHNpc19ob3Jpem9udGFsIiB1bmljb2RlPSImI3hmMTQxOyIgaG9yaXotYWR2LXg9IjE0MDgiIApkPSJNMzg0IDgwMHYtMTkycTAgLTQwIC0yOCAtNjh0LTY4IC0yOGgtMTkycS00MCAwIC02OCAyOHQtMjggNjh2MTkycTAgNDAgMjggNjh0NjggMjhoMTkycTQwIDAgNjggLTI4dDI4IC02OHpNODk2IDgwMHYtMTkycTAgLTQwIC0yOCAtNjh0LTY4IC0yOGgtMTkycS00MCAwIC02OCAyOHQtMjggNjh2MTkycTAgNDAgMjggNjh0NjggMjhoMTkycTQwIDAgNjggLTI4dDI4IC02OHpNMTQwOCA4MDB2LTE5MnEwIC00MCAtMjggLTY4dC02OCAtMjhoLTE5MgpxLTQwIDAgLTY4IDI4dC0yOCA2OHYxOTJxMCA0MCAyOCA2OHQ2OCAyOGgxOTJxNDAgMCA2OCAtMjh0MjggLTY4eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJlbGxpcHNpc192ZXJ0aWNhbCIgdW5pY29kZT0iJiN4ZjE0MjsiIGhvcml6LWFkdi14PSIzODQiIApkPSJNMzg0IDI4OHYtMTkycTAgLTQwIC0yOCAtNjh0LTY4IC0yOGgtMTkycS00MCAwIC02OCAyOHQtMjggNjh2MTkycTAgNDAgMjggNjh0NjggMjhoMTkycTQwIDAgNjggLTI4dDI4IC02OHpNMzg0IDgwMHYtMTkycTAgLTQwIC0yOCAtNjh0LTY4IC0yOGgtMTkycS00MCAwIC02OCAyOHQtMjggNjh2MTkycTAgNDAgMjggNjh0NjggMjhoMTkycTQwIDAgNjggLTI4dDI4IC02OHpNMzg0IDEzMTJ2LTE5MnEwIC00MCAtMjggLTY4dC02OCAtMjhoLTE5MgpxLTQwIDAgLTY4IDI4dC0yOCA2OHYxOTJxMCA0MCAyOCA2OHQ2OCAyOGgxOTJxNDAgMCA2OCAtMjh0MjggLTY4eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfMzAzIiB1bmljb2RlPSImI3hmMTQzOyIgCmQ9Ik01MTIgMjU2cTAgNTMgLTM3LjUgOTAuNXQtOTAuNSAzNy41dC05MC41IC0zNy41dC0zNy41IC05MC41dDM3LjUgLTkwLjV0OTAuNSAtMzcuNXQ5MC41IDM3LjV0MzcuNSA5MC41ek04NjMgMTYycS0xMyAyMzMgLTE3Ni41IDM5Ni41dC0zOTYuNSAxNzYuNXEtMTQgMSAtMjQgLTl0LTEwIC0yM3YtMTI4cTAgLTEzIDguNSAtMjJ0MjEuNSAtMTBxMTU0IC0xMSAyNjQgLTEyMXQxMjEgLTI2NHExIC0xMyAxMCAtMjEuNXQyMiAtOC41aDEyOApxMTMgMCAyMyAxMHQ5IDI0ek0xMjQ3IDE2MXEtNSAxNTQgLTU2IDI5Ny41dC0xMzkuNSAyNjB0LTIwNSAyMDV0LTI2MCAxMzkuNXQtMjk3LjUgNTZxLTE0IDEgLTIzIC05cS0xMCAtMTAgLTEwIC0yM3YtMTI4cTAgLTEzIDkgLTIydDIyIC0xMHEyMDQgLTcgMzc4IC0xMTEuNXQyNzguNSAtMjc4LjV0MTExLjUgLTM3OHExIC0xMyAxMCAtMjJ0MjIgLTloMTI4cTEzIDAgMjMgMTBxMTEgOSA5IDIzek0xNTM2IDExMjB2LTk2MApxMCAtMTE5IC04NC41IC0yMDMuNXQtMjAzLjUgLTg0LjVoLTk2MHEtMTE5IDAgLTIwMy41IDg0LjV0LTg0LjUgMjAzLjV2OTYwcTAgMTE5IDg0LjUgMjAzLjV0MjAzLjUgODQuNWg5NjBxMTE5IDAgMjAzLjUgLTg0LjV0ODQuNSAtMjAzLjV6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InBsYXlfc2lnbiIgdW5pY29kZT0iJiN4ZjE0NDsiIApkPSJNNzY4IDE0MDhxMjA5IDAgMzg1LjUgLTEwM3QyNzkuNSAtMjc5LjV0MTAzIC0zODUuNXQtMTAzIC0zODUuNXQtMjc5LjUgLTI3OS41dC0zODUuNSAtMTAzdC0zODUuNSAxMDN0LTI3OS41IDI3OS41dC0xMDMgMzg1LjV0MTAzIDM4NS41dDI3OS41IDI3OS41dDM4NS41IDEwM3pNMTE1MiA1ODVxMzIgMTggMzIgNTV0LTMyIDU1bC01NDQgMzIwcS0zMSAxOSAtNjQgMXEtMzIgLTE5IC0zMiAtNTZ2LTY0MHEwIC0zNyAzMiAtNTYKcTE2IC04IDMyIC04cTE3IDAgMzIgOXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idGlja2V0IiB1bmljb2RlPSImI3hmMTQ1OyIgaG9yaXotYWR2LXg9IjE3OTIiIApkPSJNMTAyNCAxMDg0bDMxNiAtMzE2bC01NzIgLTU3MmwtMzE2IDMxNnpNODEzIDEwNWw2MTggNjE4cTE5IDE5IDE5IDQ1dC0xOSA0NWwtMzYyIDM2MnEtMTggMTggLTQ1IDE4dC00NSAtMThsLTYxOCAtNjE4cS0xOSAtMTkgLTE5IC00NXQxOSAtNDVsMzYyIC0zNjJxMTggLTE4IDQ1IC0xOHQ0NSAxOHpNMTcwMiA3NDJsLTkwNyAtOTA4cS0zNyAtMzcgLTkwLjUgLTM3dC05MC41IDM3bC0xMjYgMTI2cTU2IDU2IDU2IDEzNnQtNTYgMTM2CnQtMTM2IDU2dC0xMzYgLTU2bC0xMjUgMTI2cS0zNyAzNyAtMzcgOTAuNXQzNyA5MC41bDkwNyA5MDZxMzcgMzcgOTAuNSAzN3Q5MC41IC0zN2wxMjUgLTEyNXEtNTYgLTU2IC01NiAtMTM2dDU2IC0xMzZ0MTM2IC01NnQxMzYgNTZsMTI2IC0xMjVxMzcgLTM3IDM3IC05MC41dC0zNyAtOTAuNXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0ibWludXNfc2lnbl9hbHQiIHVuaWNvZGU9IiYjeGYxNDY7IiAKZD0iTTEyODAgNTc2djEyOHEwIDI2IC0xOSA0NXQtNDUgMTloLTg5NnEtMjYgMCAtNDUgLTE5dC0xOSAtNDV2LTEyOHEwIC0yNiAxOSAtNDV0NDUgLTE5aDg5NnEyNiAwIDQ1IDE5dDE5IDQ1ek0xNTM2IDExMjB2LTk2MHEwIC0xMTkgLTg0LjUgLTIwMy41dC0yMDMuNSAtODQuNWgtOTYwcS0xMTkgMCAtMjAzLjUgODQuNXQtODQuNSAyMDMuNXY5NjBxMCAxMTkgODQuNSAyMDMuNXQyMDMuNSA4NC41aDk2MHExMTkgMCAyMDMuNSAtODQuNQp0ODQuNSAtMjAzLjV6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9ImNoZWNrX21pbnVzIiB1bmljb2RlPSImI3hmMTQ3OyIgaG9yaXotYWR2LXg9IjE0MDgiIApkPSJNMTE1MiA3MzZ2LTY0cTAgLTE0IC05IC0yM3QtMjMgLTloLTgzMnEtMTQgMCAtMjMgOXQtOSAyM3Y2NHEwIDE0IDkgMjN0MjMgOWg4MzJxMTQgMCAyMyAtOXQ5IC0yM3pNMTI4MCAyODh2ODMycTAgNjYgLTQ3IDExM3QtMTEzIDQ3aC04MzJxLTY2IDAgLTExMyAtNDd0LTQ3IC0xMTN2LTgzMnEwIC02NiA0NyAtMTEzdDExMyAtNDdoODMycTY2IDAgMTEzIDQ3dDQ3IDExM3pNMTQwOCAxMTIwdi04MzJxMCAtMTE5IC04NC41IC0yMDMuNQp0LTIwMy41IC04NC41aC04MzJxLTExOSAwIC0yMDMuNSA4NC41dC04NC41IDIwMy41djgzMnEwIDExOSA4NC41IDIwMy41dDIwMy41IDg0LjVoODMycTExOSAwIDIwMy41IC04NC41dDg0LjUgLTIwMy41eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJsZXZlbF91cCIgdW5pY29kZT0iJiN4ZjE0ODsiIGhvcml6LWFkdi14PSIxMDI0IiAKZD0iTTEwMTggOTMzcS0xOCAtMzcgLTU4IC0zN2gtMTkydi04NjRxMCAtMTQgLTkgLTIzdC0yMyAtOWgtNzA0cS0yMSAwIC0yOSAxOHEtOCAyMCA0IDM1bDE2MCAxOTJxOSAxMSAyNSAxMWgzMjB2NjQwaC0xOTJxLTQwIDAgLTU4IDM3cS0xNyAzNyA5IDY4bDMyMCAzODRxMTggMjIgNDkgMjJ0NDkgLTIybDMyMCAtMzg0cTI3IC0zMiA5IC02OHoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0ibGV2ZWxfZG93biIgdW5pY29kZT0iJiN4ZjE0OTsiIGhvcml6LWFkdi14PSIxMDI0IiAKZD0iTTMyIDEyODBoNzA0cTEzIDAgMjIuNSAtOS41dDkuNSAtMjMuNXYtODYzaDE5MnE0MCAwIDU4IC0zN3QtOSAtNjlsLTMyMCAtMzg0cS0xOCAtMjIgLTQ5IC0yMnQtNDkgMjJsLTMyMCAzODRxLTI2IDMxIC05IDY5cTE4IDM3IDU4IDM3aDE5MnY2NDBoLTMyMHEtMTQgMCAtMjUgMTFsLTE2MCAxOTJxLTEzIDE0IC00IDM0cTkgMTkgMjkgMTl6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9ImNoZWNrX3NpZ24iIHVuaWNvZGU9IiYjeGYxNGE7IiAKZD0iTTY4NSAyMzdsNjE0IDYxNHExOSAxOSAxOSA0NXQtMTkgNDVsLTEwMiAxMDJxLTE5IDE5IC00NSAxOXQtNDUgLTE5bC00NjcgLTQ2N2wtMjExIDIxMXEtMTkgMTkgLTQ1IDE5dC00NSAtMTlsLTEwMiAtMTAycS0xOSAtMTkgLTE5IC00NXQxOSAtNDVsMzU4IC0zNThxMTkgLTE5IDQ1IC0xOXQ0NSAxOXpNMTUzNiAxMTIwdi05NjBxMCAtMTE5IC04NC41IC0yMDMuNXQtMjAzLjUgLTg0LjVoLTk2MHEtMTE5IDAgLTIwMy41IDg0LjUKdC04NC41IDIwMy41djk2MHEwIDExOSA4NC41IDIwMy41dDIwMy41IDg0LjVoOTYwcTExOSAwIDIwMy41IC04NC41dDg0LjUgLTIwMy41eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJlZGl0X3NpZ24iIHVuaWNvZGU9IiYjeGYxNGI7IiAKZD0iTTQwNCA0MjhsMTUyIC0xNTJsLTUyIC01MmgtNTZ2OTZoLTk2djU2ek04MTggODE4cTE0IC0xMyAtMyAtMzBsLTI5MSAtMjkxcS0xNyAtMTcgLTMwIC0zcS0xNCAxMyAzIDMwbDI5MSAyOTFxMTcgMTcgMzAgM3pNNTQ0IDEyOGw1NDQgNTQ0bC0yODggMjg4bC01NDQgLTU0NHYtMjg4aDI4OHpNMTE1MiA3MzZsOTIgOTJxMjggMjggMjggNjh0LTI4IDY4bC0xNTIgMTUycS0yOCAyOCAtNjggMjh0LTY4IC0yOGwtOTIgLTkyek0xNTM2IDExMjAKdi05NjBxMCAtMTE5IC04NC41IC0yMDMuNXQtMjAzLjUgLTg0LjVoLTk2MHEtMTE5IDAgLTIwMy41IDg0LjV0LTg0LjUgMjAzLjV2OTYwcTAgMTE5IDg0LjUgMjAzLjV0MjAzLjUgODQuNWg5NjBxMTE5IDAgMjAzLjUgLTg0LjV0ODQuNSAtMjAzLjV6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9Il8zMTIiIHVuaWNvZGU9IiYjeGYxNGM7IiAKZD0iTTEyODAgNjA4djQ4MHEwIDI2IC0xOSA0NXQtNDUgMTloLTQ4MHEtNDIgMCAtNTkgLTM5cS0xNyAtNDEgMTQgLTcwbDE0NCAtMTQ0bC01MzQgLTUzNHEtMTkgLTE5IC0xOSAtNDV0MTkgLTQ1bDEwMiAtMTAycTE5IC0xOSA0NSAtMTl0NDUgMTlsNTM0IDUzNGwxNDQgLTE0NHExOCAtMTkgNDUgLTE5cTEyIDAgMjUgNXEzOSAxNyAzOSA1OXpNMTUzNiAxMTIwdi05NjBxMCAtMTE5IC04NC41IC0yMDMuNXQtMjAzLjUgLTg0LjVoLTk2MApxLTExOSAwIC0yMDMuNSA4NC41dC04NC41IDIwMy41djk2MHEwIDExOSA4NC41IDIwMy41dDIwMy41IDg0LjVoOTYwcTExOSAwIDIwMy41IC04NC41dDg0LjUgLTIwMy41eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJzaGFyZV9zaWduIiB1bmljb2RlPSImI3hmMTRkOyIgCmQ9Ik0xMDA1IDQzNWwzNTIgMzUycTE5IDE5IDE5IDQ1dC0xOSA0NWwtMzUyIDM1MnEtMzAgMzEgLTY5IDE0cS00MCAtMTcgLTQwIC01OXYtMTYwcS0xMTkgMCAtMjE2IC0xOS41dC0xNjIuNSAtNTF0LTExNCAtNzl0LTc2LjUgLTk1LjV0LTQ0LjUgLTEwOXQtMjEuNSAtMTExLjV0LTUgLTExMC41cTAgLTE4MSAxNjcgLTQwNHExMSAtMTIgMjUgLTEycTcgMCAxMyAzcTIyIDkgMTkgMzNxLTQ0IDM1NCA2MiA0NzNxNDYgNTIgMTMwIDc1LjUKdDIyNCAyMy41di0xNjBxMCAtNDIgNDAgLTU5cTEyIC01IDI0IC01cTI2IDAgNDUgMTl6TTE1MzYgMTEyMHYtOTYwcTAgLTExOSAtODQuNSAtMjAzLjV0LTIwMy41IC04NC41aC05NjBxLTExOSAwIC0yMDMuNSA4NC41dC04NC41IDIwMy41djk2MHEwIDExOSA4NC41IDIwMy41dDIwMy41IDg0LjVoOTYwcTExOSAwIDIwMy41IC04NC41dDg0LjUgLTIwMy41eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJjb21wYXNzIiB1bmljb2RlPSImI3hmMTRlOyIgCmQ9Ik02NDAgNDQ4bDI1NiAxMjhsLTI1NiAxMjh2LTI1NnpNMTAyNCAxMDM5di01NDJsLTUxMiAtMjU2djU0MnpNMTMxMiA2NDBxMCAxNDggLTczIDI3M3QtMTk4IDE5OHQtMjczIDczdC0yNzMgLTczdC0xOTggLTE5OHQtNzMgLTI3M3Q3MyAtMjczdDE5OCAtMTk4dDI3MyAtNzN0MjczIDczdDE5OCAxOTh0NzMgMjczek0xNTM2IDY0MHEwIC0yMDkgLTEwMyAtMzg1LjV0LTI3OS41IC0yNzkuNXQtMzg1LjUgLTEwM3QtMzg1LjUgMTAzCnQtMjc5LjUgMjc5LjV0LTEwMyAzODUuNXQxMDMgMzg1LjV0Mjc5LjUgMjc5LjV0Mzg1LjUgMTAzdDM4NS41IC0xMDN0Mjc5LjUgLTI3OS41dDEwMyAtMzg1LjV6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9ImNvbGxhcHNlIiB1bmljb2RlPSImI3hmMTUwOyIgCmQ9Ik0xMTQ1IDg2MXExOCAtMzUgLTUgLTY2bC0zMjAgLTQ0OHEtMTkgLTI3IC01MiAtMjd0LTUyIDI3bC0zMjAgNDQ4cS0yMyAzMSAtNSA2NnExNyAzNSA1NyAzNWg2NDBxNDAgMCA1NyAtMzV6TTEyODAgMTYwdjk2MHEwIDEzIC05LjUgMjIuNXQtMjIuNSA5LjVoLTk2MHEtMTMgMCAtMjIuNSAtOS41dC05LjUgLTIyLjV2LTk2MHEwIC0xMyA5LjUgLTIyLjV0MjIuNSAtOS41aDk2MHExMyAwIDIyLjUgOS41dDkuNSAyMi41ek0xNTM2IDExMjAKdi05NjBxMCAtMTE5IC04NC41IC0yMDMuNXQtMjAzLjUgLTg0LjVoLTk2MHEtMTE5IDAgLTIwMy41IDg0LjV0LTg0LjUgMjAzLjV2OTYwcTAgMTE5IDg0LjUgMjAzLjV0MjAzLjUgODQuNWg5NjBxMTE5IDAgMjAzLjUgLTg0LjV0ODQuNSAtMjAzLjV6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9ImNvbGxhcHNlX3RvcCIgdW5pY29kZT0iJiN4ZjE1MTsiIApkPSJNMTE0NSA0MTlxLTE3IC0zNSAtNTcgLTM1aC02NDBxLTQwIDAgLTU3IDM1cS0xOCAzNSA1IDY2bDMyMCA0NDhxMTkgMjcgNTIgMjd0NTIgLTI3bDMyMCAtNDQ4cTIzIC0zMSA1IC02NnpNMTI4MCAxNjB2OTYwcTAgMTMgLTkuNSAyMi41dC0yMi41IDkuNWgtOTYwcS0xMyAwIC0yMi41IC05LjV0LTkuNSAtMjIuNXYtOTYwcTAgLTEzIDkuNSAtMjIuNXQyMi41IC05LjVoOTYwcTEzIDAgMjIuNSA5LjV0OS41IDIyLjV6TTE1MzYgMTEyMHYtOTYwCnEwIC0xMTkgLTg0LjUgLTIwMy41dC0yMDMuNSAtODQuNWgtOTYwcS0xMTkgMCAtMjAzLjUgODQuNXQtODQuNSAyMDMuNXY5NjBxMCAxMTkgODQuNSAyMDMuNXQyMDMuNSA4NC41aDk2MHExMTkgMCAyMDMuNSAtODQuNXQ4NC41IC0yMDMuNXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzMxNyIgdW5pY29kZT0iJiN4ZjE1MjsiIApkPSJNMTA4OCA2NDBxMCAtMzMgLTI3IC01MmwtNDQ4IC0zMjBxLTMxIC0yMyAtNjYgLTVxLTM1IDE3IC0zNSA1N3Y2NDBxMCA0MCAzNSA1N3EzNSAxOCA2NiAtNWw0NDggLTMyMHEyNyAtMTkgMjcgLTUyek0xMjgwIDE2MHY5NjBxMCAxNCAtOSAyM3QtMjMgOWgtOTYwcS0xNCAwIC0yMyAtOXQtOSAtMjN2LTk2MHEwIC0xNCA5IC0yM3QyMyAtOWg5NjBxMTQgMCAyMyA5dDkgMjN6TTE1MzYgMTEyMHYtOTYwcTAgLTExOSAtODQuNSAtMjAzLjUKdC0yMDMuNSAtODQuNWgtOTYwcS0xMTkgMCAtMjAzLjUgODQuNXQtODQuNSAyMDMuNXY5NjBxMCAxMTkgODQuNSAyMDMuNXQyMDMuNSA4NC41aDk2MHExMTkgMCAyMDMuNSAtODQuNXQ4NC41IC0yMDMuNXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iZXVyIiB1bmljb2RlPSImI3hmMTUzOyIgaG9yaXotYWR2LXg9IjEwMjQiIApkPSJNOTc2IDIyOWwzNSAtMTU5cTMgLTEyIC0zIC0yMi41dC0xNyAtMTQuNWwtNSAtMXEtNCAtMiAtMTAuNSAtMy41dC0xNiAtNC41dC0yMS41IC01LjV0LTI1LjUgLTV0LTMwIC01dC0zMy41IC00LjV0LTM2LjUgLTN0LTM4LjUgLTFxLTIzNCAwIC00MDkgMTMwLjV0LTIzOCAzNTEuNWgtOTVxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXYxMTNxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWg2NnEtMiA1NyAxIDEwNWgtNjdxLTE0IDAgLTIzIDkKdC05IDIzdjExNHEwIDE0IDkgMjN0MjMgOWg5OHE2NyAyMTAgMjQzLjUgMzM4dDQwMC41IDEyOHExMDIgMCAxOTQgLTIzcTExIC0zIDIwIC0xNXE2IC0xMSAzIC0yNGwtNDMgLTE1OXEtMyAtMTMgLTE0IC0xOS41dC0yNCAtMi41bC00IDFxLTQgMSAtMTEuNSAyLjVsLTE3LjUgMy41dC0yMi41IDMuNXQtMjYgM3QtMjkgMi41dC0yOS41IDFxLTEyNiAwIC0yMjYgLTY0dC0xNTAgLTE3Nmg0NjhxMTYgMCAyNSAtMTJxMTAgLTEyIDcgLTI2CmwtMjQgLTExNHEtNSAtMjYgLTMyIC0yNmgtNDg4cS0zIC0zNyAwIC0xMDVoNDU5cTE1IDAgMjUgLTEycTkgLTEyIDYgLTI3bC0yNCAtMTEycS0yIC0xMSAtMTEgLTE4LjV0LTIwIC03LjVoLTM4N3E0OCAtMTE3IDE0OS41IC0xODUuNXQyMjguNSAtNjguNXExOCAwIDM2IDEuNXQzMy41IDMuNXQyOS41IDQuNXQyNC41IDV0MTguNSA0LjVsMTIgM2w1IDJxMTMgNSAyNiAtMnExMiAtNyAxNSAtMjF6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9ImdicCIgdW5pY29kZT0iJiN4ZjE1NDsiIGhvcml6LWFkdi14PSIxMDI0IiAKZD0iTTEwMjAgMzk5di0zNjdxMCAtMTQgLTkgLTIzdC0yMyAtOWgtOTU2cS0xNCAwIC0yMyA5dC05IDIzdjE1MHEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDk3djM4M2gtOTVxLTE0IDAgLTIzIDkuNXQtOSAyMi41djEzMXEwIDE0IDkgMjN0MjMgOWg5NXYyMjNxMCAxNzEgMTIzLjUgMjgydDMxNC41IDExMXExODUgMCAzMzUgLTEyNXE5IC04IDEwIC0yMC41dC03IC0yMi41bC0xMDMgLTEyN3EtOSAtMTEgLTIyIC0xMnEtMTMgLTIgLTIzIDcKcS01IDUgLTI2IDE5dC02OSAzMnQtOTMgMThxLTg1IDAgLTEzNyAtNDd0LTUyIC0xMjN2LTIxNWgzMDVxMTMgMCAyMi41IC05dDkuNSAtMjN2LTEzMXEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTMwNXYtMzc5aDQxNHYxODFxMCAxMyA5IDIyLjV0MjMgOS41aDE2MnExNCAwIDIzIC05LjV0OSAtMjIuNXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idXNkIiB1bmljb2RlPSImI3hmMTU1OyIgaG9yaXotYWR2LXg9IjEwMjQiIApkPSJNOTc4IDM1MXEwIC0xNTMgLTk5LjUgLTI2My41dC0yNTguNSAtMTM2LjV2LTE3NXEwIC0xNCAtOSAtMjN0LTIzIC05aC0xMzVxLTEzIDAgLTIyLjUgOS41dC05LjUgMjIuNXYxNzVxLTY2IDkgLTEyNy41IDMxdC0xMDEuNSA0NC41dC03NCA0OHQtNDYuNSAzNy41dC0xNy41IDE4cS0xNyAyMSAtMiA0MWwxMDMgMTM1cTcgMTAgMjMgMTJxMTUgMiAyNCAtOWwyIC0ycTExMyAtOTkgMjQzIC0xMjVxMzcgLTggNzQgLThxODEgMCAxNDIuNSA0Mwp0NjEuNSAxMjJxMCAyOCAtMTUgNTN0LTMzLjUgNDJ0LTU4LjUgMzcuNXQtNjYgMzJ0LTgwIDMyLjVxLTM5IDE2IC02MS41IDI1dC02MS41IDI2LjV0LTYyLjUgMzF0LTU2LjUgMzUuNXQtNTMuNSA0Mi41dC00My41IDQ5dC0zNS41IDU4dC0yMSA2Ni41dC04LjUgNzhxMCAxMzggOTggMjQydDI1NSAxMzR2MTgwcTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoMTM1cTE0IDAgMjMgLTl0OSAtMjN2LTE3NnE1NyAtNiAxMTAuNSAtMjN0ODcgLTMzLjUKdDYzLjUgLTM3LjV0MzkgLTI5dDE1IC0xNHExNyAtMTggNSAtMzhsLTgxIC0xNDZxLTggLTE1IC0yMyAtMTZxLTE0IC0zIC0yNyA3cS0zIDMgLTE0LjUgMTJ0LTM5IDI2LjV0LTU4LjUgMzJ0LTc0LjUgMjZ0LTg1LjUgMTEuNXEtOTUgMCAtMTU1IC00M3QtNjAgLTExMXEwIC0yNiA4LjUgLTQ4dDI5LjUgLTQxLjV0MzkuNSAtMzN0NTYgLTMxdDYwLjUgLTI3dDcwIC0yNy41cTUzIC0yMCA4MSAtMzEuNXQ3NiAtMzV0NzUuNSAtNDIuNXQ2MiAtNTAKdDUzIC02My41dDMxLjUgLTc2LjV0MTMgLTk0eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJpbnIiIHVuaWNvZGU9IiYjeGYxNTY7IiBob3Jpei1hZHYteD0iODk4IiAKZD0iTTg5OCAxMDY2di0xMDJxMCAtMTQgLTkgLTIzdC0yMyAtOWgtMTY4cS0yMyAtMTQ0IC0xMjkgLTIzNHQtMjc2IC0xMTBxMTY3IC0xNzggNDU5IC01MzZxMTQgLTE2IDQgLTM0cS04IC0xOCAtMjkgLTE4aC0xOTVxLTE2IDAgLTI1IDEycS0zMDYgMzY3IC00OTggNTcxcS05IDkgLTkgMjJ2MTI3cTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoMTEycTEzMiAwIDIxMi41IDQzdDEwMi41IDEyNWgtNDI3cS0xNCAwIC0yMyA5dC05IDIzdjEwMgpxMCAxNCA5IDIzdDIzIDloNDEzcS01NyAxMTMgLTI2OCAxMTNoLTE0NXEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djEzM3EwIDE0IDkgMjN0MjMgOWg4MzJxMTQgMCAyMyAtOXQ5IC0yM3YtMTAycTAgLTE0IC05IC0yM3QtMjMgLTloLTIzM3E0NyAtNjEgNjQgLTE0NGgxNzFxMTQgMCAyMyAtOXQ5IC0yM3oiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0ianB5IiB1bmljb2RlPSImI3hmMTU3OyIgaG9yaXotYWR2LXg9IjEwMjciIApkPSJNNjAzIDBoLTE3MnEtMTMgMCAtMjIuNSA5dC05LjUgMjN2MzMwaC0yODhxLTEzIDAgLTIyLjUgOXQtOS41IDIzdjEwM3EwIDEzIDkuNSAyMi41dDIyLjUgOS41aDI4OHY4NWgtMjg4cS0xMyAwIC0yMi41IDl0LTkuNSAyM3YxMDRxMCAxMyA5LjUgMjIuNXQyMi41IDkuNWgyMTRsLTMyMSA1NzhxLTggMTYgMCAzMnExMCAxNiAyOCAxNmgxOTRxMTkgMCAyOSAtMThsMjE1IC00MjVxMTkgLTM4IDU2IC0xMjVxMTAgMjQgMzAuNSA2OHQyNy41IDYxCmwxOTEgNDIwcTggMTkgMjkgMTloMTkxcTE3IDAgMjcgLTE2cTkgLTE0IDEgLTMxbC0zMTMgLTU3OWgyMTVxMTMgMCAyMi41IC05LjV0OS41IC0yMi41di0xMDRxMCAtMTQgLTkuNSAtMjN0LTIyLjUgLTloLTI5MHYtODVoMjkwcTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXYtMTAzcTAgLTE0IC05LjUgLTIzdC0yMi41IC05aC0yOTB2LTMzMHEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjV6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InJ1YiIgdW5pY29kZT0iJiN4ZjE1ODsiIGhvcml6LWFkdi14PSIxMjgwIiAKZD0iTTEwNDMgOTcxcTAgMTAwIC02NSAxNjJ0LTE3MSA2MmgtMzIwdi00NDhoMzIwcTEwNiAwIDE3MSA2MnQ2NSAxNjJ6TTEyODAgOTcxcTAgLTE5MyAtMTI2LjUgLTMxNXQtMzI2LjUgLTEyMmgtMzQwdi0xMThoNTA1cTE0IDAgMjMgLTl0OSAtMjN2LTEyOHEwIC0xNCAtOSAtMjN0LTIzIC05aC01MDV2LTE5MnEwIC0xNCAtOS41IC0yM3QtMjIuNSAtOWgtMTY3cS0xNCAwIC0yMyA5dC05IDIzdjE5MmgtMjI0cS0xNCAwIC0yMyA5dC05IDIzdjEyOApxMCAxNCA5IDIzdDIzIDloMjI0djExOGgtMjI0cS0xNCAwIC0yMyA5dC05IDIzdjE0OXEwIDEzIDkgMjIuNXQyMyA5LjVoMjI0djYyOXEwIDE0IDkgMjN0MjMgOWg1MzlxMjAwIDAgMzI2LjUgLTEyMnQxMjYuNSAtMzE1eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJrcnciIHVuaWNvZGU9IiYjeGYxNTk7IiBob3Jpei1hZHYteD0iMTc5MiIgCmQ9Ik01MTQgMzQxbDgxIDI5OWgtMTU5bDc1IC0zMDBxMSAtMSAxIC0zdDEgLTNxMCAxIDAuNSAzLjV0MC41IDMuNXpNNjMwIDc2OGwzNSAxMjhoLTI5MmwzMiAtMTI4aDIyNXpNODIyIDc2OGgxMzlsLTM1IDEyOGgtNzB6TTEyNzEgMzQwbDc4IDMwMGgtMTYybDgxIC0yOTlxMCAtMSAwLjUgLTMuNXQxLjUgLTMuNXEwIDEgMC41IDN0MC41IDN6TTEzODIgNzY4bDMzIDEyOGgtMjk3bDM0IC0xMjhoMjMwek0xNzkyIDczNnYtNjRxMCAtMTQgLTkgLTIzCnQtMjMgLTloLTIxM2wtMTY0IC02MTZxLTcgLTI0IC0zMSAtMjRoLTE1OXEtMjQgMCAtMzEgMjRsLTE2NiA2MTZoLTIwOWwtMTY3IC02MTZxLTcgLTI0IC0zMSAtMjRoLTE1OXEtMTEgMCAtMTkuNSA3dC0xMC41IDE3bC0xNjAgNjE2aC0yMDhxLTE0IDAgLTIzIDl0LTkgMjN2NjRxMCAxNCA5IDIzdDIzIDloMTc1bC0zMyAxMjhoLTE0MnEtMTQgMCAtMjMgOXQtOSAyM3Y2NHEwIDE0IDkgMjN0MjMgOWgxMDlsLTg5IDM0NHEtNSAxNSA1IDI4CnExMCAxMiAyNiAxMmgxMzdxMjYgMCAzMSAtMjRsOTAgLTM2MGgzNTlsOTcgMzYwcTcgMjQgMzEgMjRoMTI2cTI0IDAgMzEgLTI0bDk4IC0zNjBoMzY1bDkzIDM2MHE1IDI0IDMxIDI0aDEzN3ExNiAwIDI2IC0xMnExMCAtMTMgNSAtMjhsLTkxIC0zNDRoMTExcTE0IDAgMjMgLTl0OSAtMjN2LTY0cTAgLTE0IC05IC0yM3QtMjMgLTloLTE0NWwtMzQgLTEyOGgxNzlxMTQgMCAyMyAtOXQ5IC0yM3oiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iYnRjIiB1bmljb2RlPSImI3hmMTVhOyIgaG9yaXotYWR2LXg9IjEyODAiIApkPSJNMTE2NyA4OTZxMTggLTE4MiAtMTMxIC0yNThxMTE3IC0yOCAxNzUgLTEwM3Q0NSAtMjE0cS03IC03MSAtMzIuNSAtMTI1dC02NC41IC04OXQtOTcgLTU4LjV0LTEyMS41IC0zNC41dC0xNDUuNSAtMTV2LTI1NWgtMTU0djI1MXEtODAgMCAtMTIyIDF2LTI1MmgtMTU0djI1NXEtMTggMCAtNTQgMC41dC01NSAwLjVoLTIwMGwzMSAxODNoMTExcTUwIDAgNTggNTF2NDAyaDE2cS02IDEgLTE2IDF2Mjg3cS0xMyA2OCAtODkgNjhoLTExMXYxNjQKbDIxMiAtMXE2NCAwIDk3IDF2MjUyaDE1NHYtMjQ3cTgyIDIgMTIyIDJ2MjQ1aDE1NHYtMjUycTc5IC03IDE0MCAtMjIuNXQxMTMgLTQ1dDgyLjUgLTc4dDM2LjUgLTExNC41ek05NTIgMzUxcTAgMzYgLTE1IDY0dC0zNyA0NnQtNTcuNSAzMC41dC02NS41IDE4LjV0LTc0IDl0LTY5IDN0LTY0LjUgLTF0LTQ3LjUgLTF2LTMzOHE4IDAgMzcgLTAuNXQ0OCAtMC41dDUzIDEuNXQ1OC41IDR0NTcgOC41dDU1LjUgMTR0NDcuNSAyMXQzOS41IDMwCnQyNC41IDQwdDkuNSA1MXpNODgxIDgyN3EwIDMzIC0xMi41IDU4LjV0LTMwLjUgNDJ0LTQ4IDI4dC01NSAxNi41dC02MS41IDh0LTU4IDIuNXQtNTQgLTF0LTM5LjUgLTAuNXYtMzA3cTUgMCAzNC41IC0wLjV0NDYuNSAwdDUwIDJ0NTUgNS41dDUxLjUgMTF0NDguNSAxOC41dDM3IDI3dDI3IDM4LjV0OSA1MXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iZmlsZSIgdW5pY29kZT0iJiN4ZjE1YjsiIApkPSJNMTAyNCAxMDI0djQ3MnEyMiAtMTQgMzYgLTI4bDQwOCAtNDA4cTE0IC0xNCAyOCAtMzZoLTQ3MnpNODk2IDk5MnEwIC00MCAyOCAtNjh0NjggLTI4aDU0NHYtMTA1NnEwIC00MCAtMjggLTY4dC02OCAtMjhoLTEzNDRxLTQwIDAgLTY4IDI4dC0yOCA2OHYxNjAwcTAgNDAgMjggNjh0NjggMjhoODAwdi01NDR6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9ImZpbGVfdGV4dCIgdW5pY29kZT0iJiN4ZjE1YzsiIApkPSJNMTQ2OCAxMDYwcTE0IC0xNCAyOCAtMzZoLTQ3MnY0NzJxMjIgLTE0IDM2IC0yOHpNOTkyIDg5Nmg1NDR2LTEwNTZxMCAtNDAgLTI4IC02OHQtNjggLTI4aC0xMzQ0cS00MCAwIC02OCAyOHQtMjggNjh2MTYwMHEwIDQwIDI4IDY4dDY4IDI4aDgwMHYtNTQ0cTAgLTQwIDI4IC02OHQ2OCAtMjh6TTExNTIgMTYwdjY0cTAgMTQgLTkgMjN0LTIzIDloLTcwNHEtMTQgMCAtMjMgLTl0LTkgLTIzdi02NHEwIC0xNCA5IC0yM3QyMyAtOWg3MDQKcTE0IDAgMjMgOXQ5IDIzek0xMTUyIDQxNnY2NHEwIDE0IC05IDIzdC0yMyA5aC03MDRxLTE0IDAgLTIzIC05dC05IC0yM3YtNjRxMCAtMTQgOSAtMjN0MjMgLTloNzA0cTE0IDAgMjMgOXQ5IDIzek0xMTUyIDY3MnY2NHEwIDE0IC05IDIzdC0yMyA5aC03MDRxLTE0IDAgLTIzIC05dC05IC0yM3YtNjRxMCAtMTQgOSAtMjN0MjMgLTloNzA0cTE0IDAgMjMgOXQ5IDIzeiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJzb3J0X2J5X2FscGhhYmV0IiB1bmljb2RlPSImI3hmMTVkOyIgaG9yaXotYWR2LXg9IjE2NjQiIApkPSJNMTE5MSAxMTI4aDE3N2wtNzIgMjE4bC0xMiA0N3EtMiAxNiAtMiAyMGgtNGwtMyAtMjBxMCAtMSAtMy41IC0xOHQtNy41IC0yOXpNNzM2IDk2cTAgLTEyIC0xMCAtMjRsLTMxOSAtMzE5cS0xMCAtOSAtMjMgLTlxLTEyIDAgLTIzIDlsLTMyMCAzMjBxLTE1IDE2IC03IDM1cTggMjAgMzAgMjBoMTkydjEzNzZxMCAxNCA5IDIzdDIzIDloMTkycTE0IDAgMjMgLTl0OSAtMjN2LTEzNzZoMTkycTE0IDAgMjMgLTl0OSAtMjN6TTE1NzIgLTIzCnYtMjMzaC01ODR2OTBsMzY5IDUyOXExMiAxOCAyMSAyN2wxMSA5djNxLTIgMCAtNi41IC0wLjV0LTcuNSAtMC41cS0xMiAtMyAtMzAgLTNoLTIzMnYtMTE1aC0xMjB2MjI5aDU2N3YtODlsLTM2OSAtNTMwcS02IC04IC0yMSAtMjZsLTExIC0xMXYtMmwxNCAycTkgMiAzMCAyaDI0OHYxMTloMTIxek0xNjYxIDg3NHYtMTA2aC0yODh2MTA2aDc1bC00NyAxNDRoLTI0M2wtNDcgLTE0NGg3NXYtMTA2aC0yODd2MTA2aDcwbDIzMCA2NjJoMTYyCmwyMzAgLTY2Mmg3MHoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzMyOSIgdW5pY29kZT0iJiN4ZjE1ZTsiIGhvcml6LWFkdi14PSIxNjY0IiAKZD0iTTExOTEgMTA0aDE3N2wtNzIgMjE4bC0xMiA0N3EtMiAxNiAtMiAyMGgtNGwtMyAtMjBxMCAtMSAtMy41IC0xOHQtNy41IC0yOXpNNzM2IDk2cTAgLTEyIC0xMCAtMjRsLTMxOSAtMzE5cS0xMCAtOSAtMjMgLTlxLTEyIDAgLTIzIDlsLTMyMCAzMjBxLTE1IDE2IC03IDM1cTggMjAgMzAgMjBoMTkydjEzNzZxMCAxNCA5IDIzdDIzIDloMTkycTE0IDAgMjMgLTl0OSAtMjN2LTEzNzZoMTkycTE0IDAgMjMgLTl0OSAtMjN6TTE2NjEgLTE1MAp2LTEwNmgtMjg4djEwNmg3NWwtNDcgMTQ0aC0yNDNsLTQ3IC0xNDRoNzV2LTEwNmgtMjg3djEwNmg3MGwyMzAgNjYyaDE2MmwyMzAgLTY2Mmg3MHpNMTU3MiAxMDAxdi0yMzNoLTU4NHY5MGwzNjkgNTI5cTEyIDE4IDIxIDI3bDExIDl2M3EtMiAwIC02LjUgLTAuNXQtNy41IC0wLjVxLTEyIC0zIC0zMCAtM2gtMjMydi0xMTVoLTEyMHYyMjloNTY3di04OWwtMzY5IC01MzBxLTYgLTggLTIxIC0yNmwtMTEgLTEwdi0zbDE0IDNxOSAxIDMwIDFoMjQ4CnYxMTloMTIxeiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJzb3J0X2J5X2F0dHJpYnV0ZXMiIHVuaWNvZGU9IiYjeGYxNjA7IiBob3Jpei1hZHYteD0iMTc5MiIgCmQ9Ik03MzYgOTZxMCAtMTIgLTEwIC0yNGwtMzE5IC0zMTlxLTEwIC05IC0yMyAtOXEtMTIgMCAtMjMgOWwtMzIwIDMyMHEtMTUgMTYgLTcgMzVxOCAyMCAzMCAyMGgxOTJ2MTM3NnEwIDE0IDkgMjN0MjMgOWgxOTJxMTQgMCAyMyAtOXQ5IC0yM3YtMTM3NmgxOTJxMTQgMCAyMyAtOXQ5IC0yM3pNMTc5MiAtMzJ2LTE5MnEwIC0xNCAtOSAtMjN0LTIzIC05aC04MzJxLTE0IDAgLTIzIDl0LTkgMjN2MTkycTAgMTQgOSAyM3QyMyA5aDgzMgpxMTQgMCAyMyAtOXQ5IC0yM3pNMTYwMCA0ODB2LTE5MnEwIC0xNCAtOSAtMjN0LTIzIC05aC02NDBxLTE0IDAgLTIzIDl0LTkgMjN2MTkycTAgMTQgOSAyM3QyMyA5aDY0MHExNCAwIDIzIC05dDkgLTIzek0xNDA4IDk5MnYtMTkycTAgLTE0IC05IC0yM3QtMjMgLTloLTQ0OHEtMTQgMCAtMjMgOXQtOSAyM3YxOTJxMCAxNCA5IDIzdDIzIDloNDQ4cTE0IDAgMjMgLTl0OSAtMjN6TTEyMTYgMTUwNHYtMTkycTAgLTE0IC05IC0yM3QtMjMgLTloLTI1NgpxLTE0IDAgLTIzIDl0LTkgMjN2MTkycTAgMTQgOSAyM3QyMyA5aDI1NnExNCAwIDIzIC05dDkgLTIzeiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJzb3J0X2J5X2F0dHJpYnV0ZXNfYWx0IiB1bmljb2RlPSImI3hmMTYxOyIgaG9yaXotYWR2LXg9IjE3OTIiIApkPSJNMTIxNiAtMzJ2LTE5MnEwIC0xNCAtOSAtMjN0LTIzIC05aC0yNTZxLTE0IDAgLTIzIDl0LTkgMjN2MTkycTAgMTQgOSAyM3QyMyA5aDI1NnExNCAwIDIzIC05dDkgLTIzek03MzYgOTZxMCAtMTIgLTEwIC0yNGwtMzE5IC0zMTlxLTEwIC05IC0yMyAtOXEtMTIgMCAtMjMgOWwtMzIwIDMyMHEtMTUgMTYgLTcgMzVxOCAyMCAzMCAyMGgxOTJ2MTM3NnEwIDE0IDkgMjN0MjMgOWgxOTJxMTQgMCAyMyAtOXQ5IC0yM3YtMTM3NmgxOTIKcTE0IDAgMjMgLTl0OSAtMjN6TTE0MDggNDgwdi0xOTJxMCAtMTQgLTkgLTIzdC0yMyAtOWgtNDQ4cS0xNCAwIC0yMyA5dC05IDIzdjE5MnEwIDE0IDkgMjN0MjMgOWg0NDhxMTQgMCAyMyAtOXQ5IC0yM3pNMTYwMCA5OTJ2LTE5MnEwIC0xNCAtOSAtMjN0LTIzIC05aC02NDBxLTE0IDAgLTIzIDl0LTkgMjN2MTkycTAgMTQgOSAyM3QyMyA5aDY0MHExNCAwIDIzIC05dDkgLTIzek0xNzkyIDE1MDR2LTE5MnEwIC0xNCAtOSAtMjN0LTIzIC05aC04MzIKcS0xNCAwIC0yMyA5dC05IDIzdjE5MnEwIDE0IDkgMjN0MjMgOWg4MzJxMTQgMCAyMyAtOXQ5IC0yM3oiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0ic29ydF9ieV9vcmRlciIgdW5pY29kZT0iJiN4ZjE2MjsiIApkPSJNMTM0NiAyMjNxMCA2MyAtNDQgMTE2dC0xMDMgNTNxLTUyIDAgLTgzIC0zN3QtMzEgLTk0dDM2LjUgLTk1dDEwNC41IC0zOHE1MCAwIDg1IDI3dDM1IDY4ek03MzYgOTZxMCAtMTIgLTEwIC0yNGwtMzE5IC0zMTlxLTEwIC05IC0yMyAtOXEtMTIgMCAtMjMgOWwtMzIwIDMyMHEtMTUgMTYgLTcgMzVxOCAyMCAzMCAyMGgxOTJ2MTM3NnEwIDE0IDkgMjN0MjMgOWgxOTJxMTQgMCAyMyAtOXQ5IC0yM3YtMTM3NmgxOTJxMTQgMCAyMyAtOXQ5IC0yMwp6TTE0ODYgMTY1cTAgLTYyIC0xMyAtMTIxLjV0LTQxIC0xMTR0LTY4IC05NS41dC05OC41IC02NS41dC0xMjcuNSAtMjQuNXEtNjIgMCAtMTA4IDE2cS0yNCA4IC00MiAxNWwzOSAxMTNxMTUgLTcgMzEgLTExcTM3IC0xMyA3NSAtMTNxODQgMCAxMzQuNSA1OC41dDY2LjUgMTQ1LjVoLTJxLTIxIC0yMyAtNjEuNSAtMzd0LTg0LjUgLTE0cS0xMDYgMCAtMTczIDcxLjV0LTY3IDE3Mi41cTAgMTA1IDcyIDE3OHQxODEgNzNxMTIzIDAgMjA1IC05NC41CnQ4MiAtMjUyLjV6TTE0NTYgODgydi0xMTRoLTQ2OXYxMTRoMTY3djQzMnEwIDcgMC41IDE5dDAuNSAxN3YxNmgtMmwtNyAtMTJxLTggLTEzIC0yNiAtMzFsLTYyIC01OGwtODIgODZsMTkyIDE4NWgxMjN2LTY1NGgxNjV6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InNvcnRfYnlfb3JkZXJfYWx0IiB1bmljb2RlPSImI3hmMTYzOyIgCmQ9Ik0xMzQ2IDEyNDdxMCA2MyAtNDQgMTE2dC0xMDMgNTNxLTUyIDAgLTgzIC0zN3QtMzEgLTk0dDM2LjUgLTk1dDEwNC41IC0zOHE1MCAwIDg1IDI3dDM1IDY4ek03MzYgOTZxMCAtMTIgLTEwIC0yNGwtMzE5IC0zMTlxLTEwIC05IC0yMyAtOXEtMTIgMCAtMjMgOWwtMzIwIDMyMHEtMTUgMTYgLTcgMzVxOCAyMCAzMCAyMGgxOTJ2MTM3NnEwIDE0IDkgMjN0MjMgOWgxOTJxMTQgMCAyMyAtOXQ5IC0yM3YtMTM3NmgxOTJxMTQgMCAyMyAtOQp0OSAtMjN6TTE0NTYgLTE0MnYtMTE0aC00Njl2MTE0aDE2N3Y0MzJxMCA3IDAuNSAxOXQwLjUgMTd2MTZoLTJsLTcgLTEycS04IC0xMyAtMjYgLTMxbC02MiAtNThsLTgyIDg2bDE5MiAxODVoMTIzdi02NTRoMTY1ek0xNDg2IDExODlxMCAtNjIgLTEzIC0xMjEuNXQtNDEgLTExNHQtNjggLTk1LjV0LTk4LjUgLTY1LjV0LTEyNy41IC0yNC41cS02MiAwIC0xMDggMTZxLTI0IDggLTQyIDE1bDM5IDExM3ExNSAtNyAzMSAtMTFxMzcgLTEzIDc1IC0xMwpxODQgMCAxMzQuNSA1OC41dDY2LjUgMTQ1LjVoLTJxLTIxIC0yMyAtNjEuNSAtMzd0LTg0LjUgLTE0cS0xMDYgMCAtMTczIDcxLjV0LTY3IDE3Mi41cTAgMTA1IDcyIDE3OHQxODEgNzNxMTIzIDAgMjA1IC05NC41dDgyIC0yNTIuNXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzMzNCIgdW5pY29kZT0iJiN4ZjE2NDsiIGhvcml6LWFkdi14PSIxNjY0IiAKZD0iTTI1NiAxOTJxMCAyNiAtMTkgNDV0LTQ1IDE5cS0yNyAwIC00NS41IC0xOXQtMTguNSAtNDVxMCAtMjcgMTguNSAtNDUuNXQ0NS41IC0xOC41cTI2IDAgNDUgMTguNXQxOSA0NS41ek00MTYgNzA0di02NDBxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC0yODhxLTI2IDAgLTQ1IDE5dC0xOSA0NXY2NDBxMCAyNiAxOSA0NXQ0NSAxOWgyODhxMjYgMCA0NSAtMTl0MTkgLTQ1ek0xNjAwIDcwNHEwIC04NiAtNTUgLTE0OXExNSAtNDQgMTUgLTc2CnEzIC03NiAtNDMgLTEzN3ExNyAtNTYgMCAtMTE3cS0xNSAtNTcgLTU0IC05NHE5IC0xMTIgLTQ5IC0xODFxLTY0IC03NiAtMTk3IC03OGgtMzZoLTc2aC0xN3EtNjYgMCAtMTQ0IDE1LjV0LTEyMS41IDI5dC0xMjAuNSAzOS41cS0xMjMgNDMgLTE1OCA0NHEtMjYgMSAtNDUgMTkuNXQtMTkgNDQuNXY2NDFxMCAyNSAxOCA0My41dDQzIDIwLjVxMjQgMiA3NiA1OXQxMDEgMTIxcTY4IDg3IDEwMSAxMjBxMTggMTggMzEgNDh0MTcuNSA0OC41CnQxMy41IDYwLjVxNyAzOSAxMi41IDYxdDE5LjUgNTJ0MzQgNTBxMTkgMTkgNDUgMTlxNDYgMCA4Mi41IC0xMC41dDYwIC0yNnQ0MCAtNDAuNXQyNCAtNDV0MTIgLTUwdDUgLTQ1dDAuNSAtMzlxMCAtMzggLTkuNSAtNzZ0LTE5IC02MHQtMjcuNSAtNTZxLTMgLTYgLTEwIC0xOHQtMTEgLTIydC04IC0yNGgyNzdxNzggMCAxMzUgLTU3dDU3IC0xMzV6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9Il8zMzUiIHVuaWNvZGU9IiYjeGYxNjU7IiBob3Jpei1hZHYteD0iMTY2NCIgCmQ9Ik0yNTYgOTYwcTAgLTI2IC0xOSAtNDV0LTQ1IC0xOXEtMjcgMCAtNDUuNSAxOXQtMTguNSA0NXEwIDI3IDE4LjUgNDUuNXQ0NS41IDE4LjVxMjYgMCA0NSAtMTguNXQxOSAtNDUuNXpNNDE2IDQ0OHY2NDBxMCAyNiAtMTkgNDV0LTQ1IDE5aC0yODhxLTI2IDAgLTQ1IC0xOXQtMTkgLTQ1di02NDBxMCAtMjYgMTkgLTQ1dDQ1IC0xOWgyODhxMjYgMCA0NSAxOXQxOSA0NXpNMTU0NSA1OTdxNTUgLTYxIDU1IC0xNDlxLTEgLTc4IC01Ny41IC0xMzUKdC0xMzQuNSAtNTdoLTI3N3E0IC0xNCA4IC0yNHQxMSAtMjJ0MTAgLTE4cTE4IC0zNyAyNyAtNTd0MTkgLTU4LjV0MTAgLTc2LjVxMCAtMjQgLTAuNSAtMzl0LTUgLTQ1dC0xMiAtNTB0LTI0IC00NXQtNDAgLTQwLjV0LTYwIC0yNnQtODIuNSAtMTAuNXEtMjYgMCAtNDUgMTlxLTIwIDIwIC0zNCA1MHQtMTkuNSA1MnQtMTIuNSA2MXEtOSA0MiAtMTMuNSA2MC41dC0xNy41IDQ4LjV0LTMxIDQ4cS0zMyAzMyAtMTAxIDEyMHEtNDkgNjQgLTEwMSAxMjEKdC03NiA1OXEtMjUgMiAtNDMgMjAuNXQtMTggNDMuNXY2NDFxMCAyNiAxOSA0NC41dDQ1IDE5LjVxMzUgMSAxNTggNDRxNzcgMjYgMTIwLjUgMzkuNXQxMjEuNSAyOXQxNDQgMTUuNWgxN2g3NmgzNnExMzMgLTIgMTk3IC03OHE1OCAtNjkgNDkgLTE4MXEzOSAtMzcgNTQgLTk0cTE3IC02MSAwIC0xMTdxNDYgLTYxIDQzIC0xMzdxMCAtMzIgLTE1IC03NnoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0ieW91dHViZV9zaWduIiB1bmljb2RlPSImI3hmMTY2OyIgCmQ9Ik05MTkgMjMzdjE1N3EwIDUwIC0yOSA1MHEtMTcgMCAtMzMgLTE2di0yMjRxMTYgLTE2IDMzIC0xNnEyOSAwIDI5IDQ5ek0xMTAzIDM1NWg2NnYzNHEwIDUxIC0zMyA1MXQtMzMgLTUxdi0zNHpNNTMyIDYyMXYtNzBoLTgwdi00MjNoLTc0djQyM2gtNzh2NzBoMjMyek03MzMgNDk1di0zNjdoLTY3djQwcS0zOSAtNDUgLTc2IC00NXEtMzMgMCAtNDIgMjhxLTYgMTcgLTYgNTR2MjkwaDY2di0yNzBxMCAtMjQgMSAtMjZxMSAtMTUgMTUgLTE1CnEyMCAwIDQyIDMxdjI4MGg2N3pNOTg1IDM4NHYtMTQ2cTAgLTUyIC03IC03M3EtMTIgLTQyIC01MyAtNDJxLTM1IDAgLTY4IDQxdi0zNmgtNjd2NDkzaDY3di0xNjFxMzIgNDAgNjggNDBxNDEgMCA1MyAtNDJxNyAtMjEgNyAtNzR6TTEyMzYgMjU1di05cTAgLTI5IC0yIC00M3EtMyAtMjIgLTE1IC00MHEtMjcgLTQwIC04MCAtNDBxLTUyIDAgLTgxIDM4cS0yMSAyNyAtMjEgODZ2MTI5cTAgNTkgMjAgODZxMjkgMzggODAgMzh0NzggLTM4CnEyMSAtMjkgMjEgLTg2di03NmgtMTMzdi02NXEwIC01MSAzNCAtNTFxMjQgMCAzMCAyNnEwIDEgMC41IDd0MC41IDE2LjV2MjEuNWg2OHpNNzg1IDEwNzl2LTE1NnEwIC01MSAtMzIgLTUxdC0zMiA1MXYxNTZxMCA1MiAzMiA1MnQzMiAtNTJ6TTEzMTggMzY2cTAgMTc3IC0xOSAyNjBxLTEwIDQ0IC00MyA3My41dC03NiAzNC41cS0xMzYgMTUgLTQxMiAxNXEtMjc1IDAgLTQxMSAtMTVxLTQ0IC01IC03Ni41IC0zNC41dC00Mi41IC03My41CnEtMjAgLTg3IC0yMCAtMjYwcTAgLTE3NiAyMCAtMjYwcTEwIC00MyA0Mi41IC03M3Q3NS41IC0zNXExMzcgLTE1IDQxMiAtMTV0NDEyIDE1cTQzIDUgNzUuNSAzNXQ0Mi41IDczcTIwIDg0IDIwIDI2MHpNNTYzIDEwMTdsOTAgMjk2aC03NWwtNTEgLTE5NWwtNTMgMTk1aC03OHE3IC0yMyAyMyAtNjlsMjQgLTY5cTM1IC0xMDMgNDYgLTE1OHYtMjAxaDc0djIwMXpNODUyIDkzNnYxMzBxMCA1OCAtMjEgODdxLTI5IDM4IC03OCAzOApxLTUxIDAgLTc4IC0zOHEtMjEgLTI5IC0yMSAtODd2LTEzMHEwIC01OCAyMSAtODdxMjcgLTM4IDc4IC0zOHE0OSAwIDc4IDM4cTIxIDI3IDIxIDg3ek0xMDMzIDgxNmg2N3YzNzBoLTY3di0yODNxLTIyIC0zMSAtNDIgLTMxcS0xNSAwIC0xNiAxNnEtMSAyIC0xIDI2djI3MmgtNjd2LTI5M3EwIC0zNyA2IC01NXExMSAtMjcgNDMgLTI3cTM2IDAgNzcgNDV2LTQwek0xNTM2IDExMjB2LTk2MHEwIC0xMTkgLTg0LjUgLTIwMy41dC0yMDMuNSAtODQuNQpoLTk2MHEtMTE5IDAgLTIwMy41IDg0LjV0LTg0LjUgMjAzLjV2OTYwcTAgMTE5IDg0LjUgMjAzLjV0MjAzLjUgODQuNWg5NjBxMTE5IDAgMjAzLjUgLTg0LjV0ODQuNSAtMjAzLjV6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InlvdXR1YmUiIHVuaWNvZGU9IiYjeGYxNjc7IiAKZD0iTTk3MSAyOTJ2LTIxMXEwIC02NyAtMzkgLTY3cS0yMyAwIC00NSAyMnYzMDFxMjIgMjIgNDUgMjJxMzkgMCAzOSAtNjd6TTEzMDkgMjkxdi00NmgtOTB2NDZxMCA2OCA0NSA2OHQ0NSAtNjh6TTM0MyA1MDloMTA3djk0aC0zMTJ2LTk0aDEwNXYtNTY5aDEwMHY1Njl6TTYzMSAtNjBoODl2NDk0aC04OXYtMzc4cS0zMCAtNDIgLTU3IC00MnEtMTggMCAtMjEgMjFxLTEgMyAtMSAzNXYzNjRoLTg5di0zOTFxMCAtNDkgOCAtNzMKcTEyIC0zNyA1OCAtMzdxNDggMCAxMDIgNjF2LTU0ek0xMDYwIDg4djE5N3EwIDczIC05IDk5cS0xNyA1NiAtNzEgNTZxLTUwIDAgLTkzIC01NHYyMTdoLTg5di02NjNoODl2NDhxNDUgLTU1IDkzIC01NXE1NCAwIDcxIDU1cTkgMjcgOSAxMDB6TTEzOTggOTh2MTNoLTkxcTAgLTUxIC0yIC02MXEtNyAtMzYgLTQwIC0zNnEtNDYgMCAtNDYgNjl2ODdoMTc5djEwM3EwIDc5IC0yNyAxMTZxLTM5IDUxIC0xMDYgNTFxLTY4IDAgLTEwNyAtNTEKcS0yOCAtMzcgLTI4IC0xMTZ2LTE3M3EwIC03OSAyOSAtMTE2cTM5IC01MSAxMDggLTUxcTcyIDAgMTA4IDUzcTE4IDI3IDIxIDU0cTIgOSAyIDU4ek03OTAgMTAxMXYyMTBxMCA2OSAtNDMgNjl0LTQzIC02OXYtMjEwcTAgLTcwIDQzIC03MHQ0MyA3MHpNMTUwOSAyNjBxMCAtMjM0IC0yNiAtMzUwcS0xNCAtNTkgLTU4IC05OXQtMTAyIC00NnEtMTg0IC0yMSAtNTU1IC0yMXQtNTU1IDIxcS01OCA2IC0xMDIuNSA0NnQtNTcuNSA5OQpxLTI2IDExMiAtMjYgMzUwcTAgMjM0IDI2IDM1MHExNCA1OSA1OCA5OXQxMDMgNDdxMTgzIDIwIDU1NCAyMHQ1NTUgLTIwcTU4IC03IDEwMi41IC00N3Q1Ny41IC05OXEyNiAtMTEyIDI2IC0zNTB6TTUxMSAxNTM2aDEwMmwtMTIxIC0zOTl2LTI3MWgtMTAwdjI3MXEtMTQgNzQgLTYxIDIxMnEtMzcgMTAzIC02NSAxODdoMTA2bDcxIC0yNjN6TTg4MSAxMjAzdi0xNzVxMCAtODEgLTI4IC0xMThxLTM4IC01MSAtMTA2IC01MXEtNjcgMCAtMTA1IDUxCnEtMjggMzggLTI4IDExOHYxNzVxMCA4MCAyOCAxMTdxMzggNTEgMTA1IDUxcTY4IDAgMTA2IC01MXEyOCAtMzcgMjggLTExN3pNMTIxNiAxMzY1di00OTloLTkxdjU1cS01MyAtNjIgLTEwMyAtNjJxLTQ2IDAgLTU5IDM3cS04IDI0IC04IDc1djM5NGg5MXYtMzY3cTAgLTMzIDEgLTM1cTMgLTIyIDIxIC0yMnEyNyAwIDU3IDQzdjM4MWg5MXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0ieGluZyIgdW5pY29kZT0iJiN4ZjE2ODsiIGhvcml6LWFkdi14PSIxNDA4IiAKZD0iTTU5NyA4NjlxLTEwIC0xOCAtMjU3IC00NTZxLTI3IC00NiAtNjUgLTQ2aC0yMzlxLTIxIDAgLTMxIDE3dDAgMzZsMjUzIDQ0OHExIDAgMCAxbC0xNjEgMjc5cS0xMiAyMiAtMSAzN3E5IDE1IDMyIDE1aDIzOXE0MCAwIDY2IC00NXpNMTQwMyAxNTExcTExIC0xNiAwIC0zN2wtNTI4IC05MzR2LTFsMzM2IC02MTVxMTEgLTIwIDEgLTM3cS0xMCAtMTUgLTMyIC0xNWgtMjM5cS00MiAwIC02NiA0NWwtMzM5IDYyMnExOCAzMiA1MzEgOTQyCnEyNSA0NSA2NCA0NWgyNDFxMjIgMCAzMSAtMTV6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9Inhpbmdfc2lnbiIgdW5pY29kZT0iJiN4ZjE2OTsiIApkPSJNNjg1IDc3MXEwIDEgLTEyNiAyMjJxLTIxIDM0IC01MiAzNGgtMTg0cS0xOCAwIC0yNiAtMTFxLTcgLTEyIDEgLTI5bDEyNSAtMjE2di0xbC0xOTYgLTM0NnEtOSAtMTQgMCAtMjhxOCAtMTMgMjQgLTEzaDE4NXEzMSAwIDUwIDM2ek0xMzA5IDEyNjhxLTcgMTIgLTI0IDEyaC0xODdxLTMwIDAgLTQ5IC0zNWwtNDExIC03MjlxMSAtMiAyNjIgLTQ4MXEyMCAtMzUgNTIgLTM1aDE4NHExOCAwIDI1IDEycTggMTMgLTEgMjhsLTI2MCA0NzZ2MQpsNDA5IDcyM3E4IDE2IDAgMjh6TTE1MzYgMTEyMHYtOTYwcTAgLTExOSAtODQuNSAtMjAzLjV0LTIwMy41IC04NC41aC05NjBxLTExOSAwIC0yMDMuNSA4NC41dC04NC41IDIwMy41djk2MHEwIDExOSA4NC41IDIwMy41dDIwMy41IDg0LjVoOTYwcTExOSAwIDIwMy41IC04NC41dDg0LjUgLTIwMy41eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ5b3V0dWJlX3BsYXkiIHVuaWNvZGU9IiYjeGYxNmE7IiBob3Jpei1hZHYteD0iMTc5MiIgCmQ9Ik03MTEgNDA4bDQ4NCAyNTBsLTQ4NCAyNTN2LTUwM3pNODk2IDEyNzBxMTY4IDAgMzI0LjUgLTQuNXQyMjkuNSAtOS41bDczIC00cTEgMCAxNyAtMS41dDIzIC0zdDIzLjUgLTQuNXQyOC41IC04dDI4IC0xM3QzMSAtMTkuNXQyOSAtMjYuNXE2IC02IDE1LjUgLTE4LjV0MjkgLTU4LjV0MjYuNSAtMTAxcTggLTY0IDEyLjUgLTEzNi41dDUuNSAtMTEzLjV2LTQwdi0xMzZxMSAtMTQ1IC0xOCAtMjkwcS03IC01NSAtMjUgLTk5LjV0LTMyIC02MS41CmwtMTQgLTE3cS0xNCAtMTUgLTI5IC0yNi41dC0zMSAtMTl0LTI4IC0xMi41dC0yOC41IC04dC0yNCAtNC41dC0yMyAtM3QtMTYuNSAtMS41cS0yNTEgLTE5IC02MjcgLTE5cS0yMDcgMiAtMzU5LjUgNi41dC0yMDAuNSA3LjVsLTQ5IDRsLTM2IDRxLTM2IDUgLTU0LjUgMTB0LTUxIDIxdC01Ni41IDQxcS02IDYgLTE1LjUgMTguNXQtMjkgNTguNXQtMjYuNSAxMDFxLTggNjQgLTEyLjUgMTM2LjV0LTUuNSAxMTMuNXY0MHYxMzYKcS0xIDE0NSAxOCAyOTBxNyA1NSAyNSA5OS41dDMyIDYxLjVsMTQgMTdxMTQgMTUgMjkgMjYuNXQzMSAxOS41dDI4IDEzdDI4LjUgOHQyMy41IDQuNXQyMyAzdDE3IDEuNXEyNTEgMTggNjI3IDE4eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJkcm9wYm94IiB1bmljb2RlPSImI3hmMTZiOyIgaG9yaXotYWR2LXg9IjE3OTIiIApkPSJNNDAyIDgyOWw0OTQgLTMwNWwtMzQyIC0yODVsLTQ5MCAzMTl6TTEzODggMjc0di0xMDhsLTQ5MCAtMjkzdi0xbC0xIDFsLTEgLTF2MWwtNDg5IDI5M3YxMDhsMTQ3IC05NmwzNDIgMjg0djJsMSAtMWwxIDF2LTJsMzQzIC0yODR6TTU1NCAxNDE4bDM0MiAtMjg1bC00OTQgLTMwNGwtMzM4IDI3MHpNMTM5MCA4MjlsMzM4IC0yNzFsLTQ4OSAtMzE5bC0zNDMgMjg1ek0xMjM5IDE0MThsNDg5IC0zMTlsLTMzOCAtMjcwbC00OTQgMzA0eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJzdGFja2V4Y2hhbmdlIiB1bmljb2RlPSImI3hmMTZjOyIgCmQ9Ik0xMjg5IC05NmgtMTExOHY0ODBoLTE2MHYtNjQwaDE0Mzh2NjQwaC0xNjB2LTQ4MHpNMzQ3IDQyOGwzMyAxNTdsNzgzIC0xNjVsLTMzIC0xNTZ6TTQ1MCA4MDJsNjcgMTQ2bDcyNSAtMzM5bC02NyAtMTQ1ek02NTEgMTE1OGwxMDIgMTIzbDYxNCAtNTEzbC0xMDIgLTEyM3pNMTA0OCAxNTM2bDQ3NyAtNjQxbC0xMjggLTk2bC00NzcgNjQxek0zMzAgNjV2MTU5aDgwMHYtMTU5aC04MDB6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9Imluc3RhZ3JhbSIgdW5pY29kZT0iJiN4ZjE2ZDsiIApkPSJNMTAyNCA2NDBxMCAxMDYgLTc1IDE4MXQtMTgxIDc1dC0xODEgLTc1dC03NSAtMTgxdDc1IC0xODF0MTgxIC03NXQxODEgNzV0NzUgMTgxek0xMTYyIDY0MHEwIC0xNjQgLTExNSAtMjc5dC0yNzkgLTExNXQtMjc5IDExNXQtMTE1IDI3OXQxMTUgMjc5dDI3OSAxMTV0Mjc5IC0xMTV0MTE1IC0yNzl6TTEyNzAgMTA1MHEwIC0zOCAtMjcgLTY1dC02NSAtMjd0LTY1IDI3dC0yNyA2NXQyNyA2NXQ2NSAyN3Q2NSAtMjd0MjcgLTY1ek03NjggMTI3MApxLTcgMCAtNzYuNSAwLjV0LTEwNS41IDB0LTk2LjUgLTN0LTEwMyAtMTB0LTcxLjUgLTE4LjVxLTUwIC0yMCAtODggLTU4dC01OCAtODhxLTExIC0yOSAtMTguNSAtNzEuNXQtMTAgLTEwM3QtMyAtOTYuNXQwIC0xMDUuNXQwLjUgLTc2LjV0LTAuNSAtNzYuNXQwIC0xMDUuNXQzIC05Ni41dDEwIC0xMDN0MTguNSAtNzEuNXEyMCAtNTAgNTggLTg4dDg4IC01OHEyOSAtMTEgNzEuNSAtMTguNXQxMDMgLTEwdDk2LjUgLTN0MTA1LjUgMHQ3Ni41IDAuNQp0NzYuNSAtMC41dDEwNS41IDB0OTYuNSAzdDEwMyAxMHQ3MS41IDE4LjVxNTAgMjAgODggNTh0NTggODhxMTEgMjkgMTguNSA3MS41dDEwIDEwM3QzIDk2LjV0MCAxMDUuNXQtMC41IDc2LjV0MC41IDc2LjV0MCAxMDUuNXQtMyA5Ni41dC0xMCAxMDN0LTE4LjUgNzEuNXEtMjAgNTAgLTU4IDg4dC04OCA1OHEtMjkgMTEgLTcxLjUgMTguNXQtMTAzIDEwdC05Ni41IDN0LTEwNS41IDB0LTc2LjUgLTAuNXpNMTUzNiA2NDBxMCAtMjI5IC01IC0zMTcKcS0xMCAtMjA4IC0xMjQgLTMyMnQtMzIyIC0xMjRxLTg4IC01IC0zMTcgLTV0LTMxNyA1cS0yMDggMTAgLTMyMiAxMjR0LTEyNCAzMjJxLTUgODggLTUgMzE3dDUgMzE3cTEwIDIwOCAxMjQgMzIydDMyMiAxMjRxODggNSAzMTcgNXQzMTcgLTVxMjA4IC0xMCAzMjIgLTEyNHQxMjQgLTMyMnE1IC04OCA1IC0zMTd6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9ImZsaWNrciIgdW5pY29kZT0iJiN4ZjE2ZTsiIApkPSJNMTI0OCAxNDA4cTExOSAwIDIwMy41IC04NC41dDg0LjUgLTIwMy41di05NjBxMCAtMTE5IC04NC41IC0yMDMuNXQtMjAzLjUgLTg0LjVoLTk2MHEtMTE5IDAgLTIwMy41IDg0LjV0LTg0LjUgMjAzLjV2OTYwcTAgMTE5IDg0LjUgMjAzLjV0MjAzLjUgODQuNWg5NjB6TTY5OCA2NDBxMCA4OCAtNjIgMTUwdC0xNTAgNjJ0LTE1MCAtNjJ0LTYyIC0xNTB0NjIgLTE1MHQxNTAgLTYydDE1MCA2MnQ2MiAxNTB6TTEyNjIgNjQwcTAgODggLTYyIDE1MAp0LTE1MCA2MnQtMTUwIC02MnQtNjIgLTE1MHQ2MiAtMTUwdDE1MCAtNjJ0MTUwIDYydDYyIDE1MHoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iYWRuIiB1bmljb2RlPSImI3hmMTcwOyIgCmQ9Ik03NjggOTE0bDIwMSAtMzA2aC00MDJ6TTExMzMgMzg0aDk0bC00NTkgNjkxbC00NTkgLTY5MWg5NGwxMDQgMTYwaDUyMnpNMTUzNiA2NDBxMCAtMjA5IC0xMDMgLTM4NS41dC0yNzkuNSAtMjc5LjV0LTM4NS41IC0xMDN0LTM4NS41IDEwM3QtMjc5LjUgMjc5LjV0LTEwMyAzODUuNXQxMDMgMzg1LjV0Mjc5LjUgMjc5LjV0Mzg1LjUgMTAzdDM4NS41IC0xMDN0Mjc5LjUgLTI3OS41dDEwMyAtMzg1LjV6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9ImYxNzEiIHVuaWNvZGU9IiYjeGYxNzE7IiBob3Jpei1hZHYteD0iMTQwOCIgCmQ9Ik04MTUgNjc3cTggLTYzIC01MC41IC0xMDF0LTExMS41IC02cS0zOSAxNyAtNTMuNSA1OHQtMC41IDgydDUyIDU4cTM2IDE4IDcyLjUgMTJ0NjQgLTM1LjV0MjcuNSAtNjcuNXpNOTI2IDY5OHEtMTQgMTA3IC0xMTMgMTY0dC0xOTcgMTNxLTYzIC0yOCAtMTAwLjUgLTg4LjV0LTM0LjUgLTEyOS41cTQgLTkxIDc3LjUgLTE1NXQxNjUuNSAtNTZxOTEgOCAxNTIgODR0NTAgMTY4ek0xMTY1IDEyNDBxLTIwIDI3IC01NiA0NC41dC01OCAyMgp0LTcxIDEyLjVxLTI5MSA0NyAtNTY2IC0ycS00MyAtNyAtNjYgLTEydC01NSAtMjJ0LTUwIC00M3EzMCAtMjggNzYgLTQ1LjV0NzMuNSAtMjJ0ODcuNSAtMTEuNXEyMjggLTI5IDQ0OCAtMXE2MyA4IDg5LjUgMTJ0NzIuNSAyMS41dDc1IDQ2LjV6TTEyMjIgMjA1cS04IC0yNiAtMTUuNSAtNzYuNXQtMTQgLTg0dC0yOC41IC03MHQtNTggLTU2LjVxLTg2IC00OCAtMTg5LjUgLTcxLjV0LTIwMiAtMjJ0LTIwMS41IDE4LjVxLTQ2IDggLTgxLjUgMTgKdC03Ni41IDI3dC03MyA0My41dC01MiA2MS41cS0yNSA5NiAtNTcgMjkybDYgMTZsMTggOXEyMjMgLTE0OCA1MDYuNSAtMTQ4dDUwNy41IDE0OHEyMSAtNiAyNCAtMjN0LTUgLTQ1dC04IC0zN3pNMTQwMyAxMTY2cS0yNiAtMTY3IC0xMTEgLTY1NXEtNSAtMzAgLTI3IC01NnQtNDMuNSAtNDB0LTU0LjUgLTMxcS0yNTIgLTEyNiAtNjEwIC04OHEtMjQ4IDI3IC0zOTQgMTM5cS0xNSAxMiAtMjUuNSAyNi41dC0xNyAzNXQtOSAzNHQtNiAzOS41CnQtNS41IDM1cS05IDUwIC0yNi41IDE1MHQtMjggMTYxLjV0LTIzLjUgMTQ3LjV0LTIyIDE1OHEzIDI2IDE3LjUgNDguNXQzMS41IDM3LjV0NDUgMzB0NDYgMjIuNXQ0OCAxOC41cTEyNSA0NiAzMTMgNjRxMzc5IDM3IDY3NiAtNTBxMTU1IC00NiAyMTUgLTEyMnExNiAtMjAgMTYuNSAtNTF0LTUuNSAtNTR6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9ImJpdGJ1Y2tldF9zaWduIiB1bmljb2RlPSImI3hmMTcyOyIgCmQ9Ik04NDggNjY2cTAgNDMgLTQxIDY2dC03NyAxcS00MyAtMjAgLTQyLjUgLTcyLjV0NDMuNSAtNzAuNXEzOSAtMjMgODEgNHQzNiA3MnpNOTI4IDY4MnE4IC02NiAtMzYgLTEyMXQtMTEwIC02MXQtMTE5IDQwdC01NiAxMTNxLTIgNDkgMjUuNSA5M3Q3Mi41IDY0cTcwIDMxIDE0MS41IC0xMHQ4MS41IC0xMTh6TTExMDAgMTA3M3EtMjAgLTIxIC01My41IC0zNHQtNTMgLTE2dC02My41IC04cS0xNTUgLTIwIC0zMjQgMHEtNDQgNiAtNjMgOS41CnQtNTIuNSAxNnQtNTQuNSAzMi41cTEzIDE5IDM2IDMxdDQwIDE1LjV0NDcgOC41cTE5OCAzNSA0MDggMXEzMyAtNSA1MSAtOC41dDQzIC0xNnQzOSAtMzEuNXpNMTE0MiAzMjdxMCA3IDUuNSAyNi41dDMgMzJ0LTE3LjUgMTYuNXEtMTYxIC0xMDYgLTM2NSAtMTA2dC0zNjYgMTA2bC0xMiAtNmwtNSAtMTJxMjYgLTE1NCA0MSAtMjEwcTQ3IC04MSAyMDQgLTEwOHEyNDkgLTQ2IDQyOCA1M3EzNCAxOSA0OSA1MS41dDIyLjUgODUuNXQxMi41IDcxegpNMTI3MiAxMDIwcTkgNTMgLTggNzVxLTQzIDU1IC0xNTUgODhxLTIxNiA2MyAtNDg3IDM2cS0xMzIgLTEyIC0yMjYgLTQ2cS0zOCAtMTUgLTU5LjUgLTI1dC00NyAtMzR0LTI5LjUgLTU0cTggLTY4IDE5IC0xMzh0MjkgLTE3MXQyNCAtMTM3cTEgLTUgNSAtMzF0NyAtMzZ0MTIgLTI3dDIyIC0yOHExMDUgLTgwIDI4NCAtMTAwcTI1OSAtMjggNDQwIDYzcTI0IDEzIDM5LjUgMjN0MzEgMjl0MTkuNSA0MHE0OCAyNjcgODAgNDczek0xNTM2IDExMjAKdi05NjBxMCAtMTE5IC04NC41IC0yMDMuNXQtMjAzLjUgLTg0LjVoLTk2MHEtMTE5IDAgLTIwMy41IDg0LjV0LTg0LjUgMjAzLjV2OTYwcTAgMTE5IDg0LjUgMjAzLjV0MjAzLjUgODQuNWg5NjBxMTE5IDAgMjAzLjUgLTg0LjV0ODQuNSAtMjAzLjV6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InR1bWJsciIgdW5pY29kZT0iJiN4ZjE3MzsiIGhvcml6LWFkdi14PSIxMDI0IiAKZD0iTTk0NCAyMDdsODAgLTIzN3EtMjMgLTM1IC0xMTEgLTY2dC0xNzcgLTMycS0xMDQgLTIgLTE5MC41IDI2dC0xNDIuNSA3NHQtOTUgMTA2dC01NS41IDEyMHQtMTYuNSAxMTh2NTQ0aC0xNjh2MjE1cTcyIDI2IDEyOSA2OS41dDkxIDkwdDU4IDEwMnQzNCA5OXQxNSA4OC41cTEgNSA0LjUgOC41dDcuNSAzLjVoMjQ0di00MjRoMzMzdi0yNTJoLTMzNHYtNTE4cTAgLTMwIDYuNSAtNTZ0MjIuNSAtNTIuNXQ0OS41IC00MS41dDgxLjUgLTE0CnE3OCAyIDEzNCAyOXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idHVtYmxyX3NpZ24iIHVuaWNvZGU9IiYjeGYxNzQ7IiAKZD0iTTExMzYgNzVsLTYyIDE4M3EtNDQgLTIyIC0xMDMgLTIycS0zNiAtMSAtNjIgMTAuNXQtMzguNSAzMS41dC0xNy41IDQwLjV0LTUgNDMuNXYzOThoMjU3djE5NGgtMjU2djMyNmgtMTg4cS04IDAgLTkgLTEwcS01IC00NCAtMTcuNSAtODd0LTM5IC05NXQtNzcgLTk1dC0xMTguNSAtNjh2LTE2NWgxMzB2LTQxOHEwIC01NyAyMS41IC0xMTV0NjUgLTExMXQxMjEgLTg1LjV0MTc2LjUgLTMwLjVxNjkgMSAxMzYuNSAyNXQ4NS41IDUwegpNMTUzNiAxMTIwdi05NjBxMCAtMTE5IC04NC41IC0yMDMuNXQtMjAzLjUgLTg0LjVoLTk2MHEtMTE5IDAgLTIwMy41IDg0LjV0LTg0LjUgMjAzLjV2OTYwcTAgMTE5IDg0LjUgMjAzLjV0MjAzLjUgODQuNWg5NjBxMTE5IDAgMjAzLjUgLTg0LjV0ODQuNSAtMjAzLjV6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9ImxvbmdfYXJyb3dfZG93biIgdW5pY29kZT0iJiN4ZjE3NTsiIGhvcml6LWFkdi14PSI3NjgiIApkPSJNNzY1IDIzN3E4IC0xOSAtNSAtMzVsLTM1MCAtMzg0cS0xMCAtMTAgLTIzIC0xMHEtMTQgMCAtMjQgMTBsLTM1NSAzODRxLTEzIDE2IC01IDM1cTkgMTkgMjkgMTloMjI0djEyNDhxMCAxNCA5IDIzdDIzIDloMTkycTE0IDAgMjMgLTl0OSAtMjN2LTEyNDhoMjI0cTIxIDAgMjkgLTE5eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJsb25nX2Fycm93X3VwIiB1bmljb2RlPSImI3hmMTc2OyIgaG9yaXotYWR2LXg9Ijc2OCIgCmQ9Ik03NjUgMTA0M3EtOSAtMTkgLTI5IC0xOWgtMjI0di0xMjQ4cTAgLTE0IC05IC0yM3QtMjMgLTloLTE5MnEtMTQgMCAtMjMgOXQtOSAyM3YxMjQ4aC0yMjRxLTIxIDAgLTI5IDE5dDUgMzVsMzUwIDM4NHExMCAxMCAyMyAxMHExNCAwIDI0IC0xMGwzNTUgLTM4NHExMyAtMTYgNSAtMzV6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9ImxvbmdfYXJyb3dfbGVmdCIgdW5pY29kZT0iJiN4ZjE3NzsiIGhvcml6LWFkdi14PSIxNzkyIiAKZD0iTTE3OTIgNzM2di0xOTJxMCAtMTQgLTkgLTIzdC0yMyAtOWgtMTI0OHYtMjI0cTAgLTIxIC0xOSAtMjl0LTM1IDVsLTM4NCAzNTBxLTEwIDEwIC0xMCAyM3EwIDE0IDEwIDI0bDM4NCAzNTRxMTYgMTQgMzUgNnExOSAtOSAxOSAtMjl2LTIyNGgxMjQ4cTE0IDAgMjMgLTl0OSAtMjN6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9ImxvbmdfYXJyb3dfcmlnaHQiIHVuaWNvZGU9IiYjeGYxNzg7IiBob3Jpei1hZHYteD0iMTc5MiIgCmQ9Ik0xNzI4IDY0M3EwIC0xNCAtMTAgLTI0bC0zODQgLTM1NHEtMTYgLTE0IC0zNSAtNnEtMTkgOSAtMTkgMjl2MjI0aC0xMjQ4cS0xNCAwIC0yMyA5dC05IDIzdjE5MnEwIDE0IDkgMjN0MjMgOWgxMjQ4djIyNHEwIDIxIDE5IDI5dDM1IC01bDM4NCAtMzUwcTEwIC0xMCAxMCAtMjN6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9ImFwcGxlIiB1bmljb2RlPSImI3hmMTc5OyIgaG9yaXotYWR2LXg9IjE0MDgiIApkPSJNMTM5MyAzMjFxLTM5IC0xMjUgLTEyMyAtMjUwcS0xMjkgLTE5NiAtMjU3IC0xOTZxLTQ5IDAgLTE0MCAzMnEtODYgMzIgLTE1MSAzMnEtNjEgMCAtMTQyIC0zM3EtODEgLTM0IC0xMzIgLTM0cS0xNTIgMCAtMzAxIDI1OXEtMTQ3IDI2MSAtMTQ3IDUwM3EwIDIyOCAxMTMgMzc0cTExMyAxNDQgMjg0IDE0NHE3MiAwIDE3NyAtMzBxMTA0IC0zMCAxMzggLTMwcTQ1IDAgMTQzIDM0cTEwMiAzNCAxNzMgMzRxMTE5IDAgMjEzIC02NQpxNTIgLTM2IDEwNCAtMTAwcS03OSAtNjcgLTExNCAtMTE4cS02NSAtOTQgLTY1IC0yMDdxMCAtMTI0IDY5IC0yMjN0MTU4IC0xMjZ6TTEwMTcgMTQ5NHEwIC02MSAtMjkgLTEzNnEtMzAgLTc1IC05MyAtMTM4cS01NCAtNTQgLTEwOCAtNzJxLTM3IC0xMSAtMTA0IC0xN3EzIDE0OSA3OCAyNTdxNzQgMTA3IDI1MCAxNDhxMSAtMyAyLjUgLTExdDIuNSAtMTFxMCAtNCAwLjUgLTEwdDAuNSAtMTB6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9IndpbmRvd3MiIHVuaWNvZGU9IiYjeGYxN2E7IiBob3Jpei1hZHYteD0iMTY2NCIgCmQ9Ik02ODIgNTMwdi02NTFsLTY4MiA5NHY1NTdoNjgyek02ODIgMTI3M3YtNjU5aC02ODJ2NTY1ek0xNjY0IDUzMHYtNzg2bC05MDcgMTI1djY2MWg5MDd6TTE2NjQgMTQwOHYtNzk0aC05MDd2NjY5eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJhbmRyb2lkIiB1bmljb2RlPSImI3hmMTdiOyIgaG9yaXotYWR2LXg9IjE0MDgiIApkPSJNNDkzIDEwNTNxMTYgMCAyNy41IDExLjV0MTEuNSAyNy41dC0xMS41IDI3LjV0LTI3LjUgMTEuNXQtMjcgLTExLjV0LTExIC0yNy41dDExIC0yNy41dDI3IC0xMS41ek05MTUgMTA1M3ExNiAwIDI3IDExLjV0MTEgMjcuNXQtMTEgMjcuNXQtMjcgMTEuNXQtMjcuNSAtMTEuNXQtMTEuNSAtMjcuNXQxMS41IC0yNy41dDI3LjUgLTExLjV6TTEwMyA4NjlxNDIgMCA3MiAtMzB0MzAgLTcydi00MzBxMCAtNDMgLTI5LjUgLTczdC03Mi41IC0zMAp0LTczIDMwdC0zMCA3M3Y0MzBxMCA0MiAzMCA3MnQ3MyAzMHpNMTE2MyA4NTB2LTY2NnEwIC00NiAtMzIgLTc4dC03NyAtMzJoLTc1di0yMjdxMCAtNDMgLTMwIC03M3QtNzMgLTMwdC03MyAzMHQtMzAgNzN2MjI3aC0xMzh2LTIyN3EwIC00MyAtMzAgLTczdC03MyAtMzBxLTQyIDAgLTcyIDMwdC0zMCA3M2wtMSAyMjdoLTc0cS00NiAwIC03OCAzMnQtMzIgNzh2NjY2aDkxOHpNOTMxIDEyNTVxMTA3IC01NSAxNzEgLTE1My41dDY0IC0yMTUuNQpoLTkyNXEwIDExNyA2NCAyMTUuNXQxNzIgMTUzLjVsLTcxIDEzMXEtNyAxMyA1IDIwcTEzIDYgMjAgLTZsNzIgLTEzMnE5NSA0MiAyMDEgNDJ0MjAxIC00Mmw3MiAxMzJxNyAxMiAyMCA2cTEyIC03IDUgLTIwek0xNDA4IDc2N3YtNDMwcTAgLTQzIC0zMCAtNzN0LTczIC0zMHEtNDIgMCAtNzIgMzB0LTMwIDczdjQzMHEwIDQzIDMwIDcyLjV0NzIgMjkuNXE0MyAwIDczIC0yOS41dDMwIC03Mi41eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJsaW51eCIgdW5pY29kZT0iJiN4ZjE3YzsiIApkPSJNNjYzIDExMjVxLTExIC0xIC0xNS41IC0xMC41dC04LjUgLTkuNXEtNSAtMSAtNSA1cTAgMTIgMTkgMTVoMTB6TTc1MCAxMTExcS00IC0xIC0xMS41IDYuNXQtMTcuNSA0LjVxMjQgMTEgMzIgLTJxMyAtNiAtMyAtOXpNMzk5IDY4NHEtNCAxIC02IC0zdC00LjUgLTEyLjV0LTUuNSAtMTMuNXQtMTAgLTEzcS0xMCAtMTEgLTEgLTEycTQgLTEgMTIuNSA3dDEyLjUgMThxMSAzIDIgN3QyIDZ0MS41IDQuNXQwLjUgNHYzdC0xIDIuNXQtMyAyegpNMTI1NCAzMjVxMCAxOCAtNTUgNDJxNCAxNSA3LjUgMjcuNXQ1IDI2dDMgMjEuNXQwLjUgMjIuNXQtMSAxOS41dC0zLjUgMjJ0LTQgMjAuNXQtNSAyNXQtNS41IDI2LjVxLTEwIDQ4IC00NyAxMDN0LTcyIDc1cTI0IC0yMCA1NyAtODNxODcgLTE2MiA1NCAtMjc4cS0xMSAtNDAgLTUwIC00MnEtMzEgLTQgLTM4LjUgMTguNXQtOCA4My41dC0xMS41IDEwN3EtOSAzOSAtMTkuNSA2OXQtMTkuNSA0NS41dC0xNS41IDI0LjV0LTEzIDE1dC03LjUgNwpxLTE0IDYyIC0zMSAxMDN0LTI5LjUgNTZ0LTIzLjUgMzN0LTE1IDQwcS00IDIxIDYgNTMuNXQ0LjUgNDkuNXQtNDQuNSAyNXEtMTUgMyAtNDQuNSAxOHQtMzUuNSAxNnEtOCAxIC0xMSAyNnQ4IDUxdDM2IDI3cTM3IDMgNTEgLTMwdDQgLTU4cS0xMSAtMTkgLTIgLTI2LjV0MzAgLTAuNXExMyA0IDEzIDM2djM3cS01IDMwIC0xMy41IDUwdC0yMSAzMC41dC0yMy41IDE1dC0yNyA3LjVxLTEwNyAtOCAtODkgLTEzNHEwIC0xNSAtMSAtMTUKcS05IDkgLTI5LjUgMTAuNXQtMzMgLTAuNXQtMTUuNSA1cTEgNTcgLTE2IDkwdC00NSAzNHEtMjcgMSAtNDEuNSAtMjcuNXQtMTYuNSAtNTkuNXEtMSAtMTUgMy41IC0zN3QxMyAtMzcuNXQxNS41IC0xMy41cTEwIDMgMTYgMTRxNCA5IC03IDhxLTcgMCAtMTUuNSAxNC41dC05LjUgMzMuNXEtMSAyMiA5IDM3dDM0IDE0cTE3IDAgMjcgLTIxdDkuNSAtMzl0LTEuNSAtMjJxLTIyIC0xNSAtMzEgLTI5cS04IC0xMiAtMjcuNSAtMjMuNQp0LTIwLjUgLTEyLjVxLTEzIC0xNCAtMTUuNSAtMjd0Ny41IC0xOHExNCAtOCAyNSAtMTkuNXQxNiAtMTl0MTguNSAtMTN0MzUuNSAtNi41cTQ3IC0yIDEwMiAxNXEyIDEgMjMgN3QzNC41IDEwLjV0MjkuNSAxM3QyMSAxNy41cTkgMTQgMjAgOHE1IC0zIDYuNSAtOC41dC0zIC0xMnQtMTYuNSAtOS41cS0yMCAtNiAtNTYuNSAtMjEuNXQtNDUuNSAtMTkuNXEtNDQgLTE5IC03MCAtMjNxLTI1IC01IC03OSAycS0xMCAyIC05IC0ydDE3IC0xOQpxMjUgLTIzIDY3IC0yMnExNyAxIDM2IDd0MzYgMTR0MzMuNSAxNy41dDMwIDE3dDI0LjUgMTJ0MTcuNSAyLjV0OC41IC0xMXEwIC0yIC0xIC00LjV0LTQgLTV0LTYgLTQuNXQtOC41IC01dC05IC00LjV0LTEwIC01dC05LjUgLTQuNXEtMjggLTE0IC02Ny41IC00NHQtNjYuNSAtNDN0LTQ5IC0xcS0yMSAxMSAtNjMgNzNxLTIyIDMxIC0yNSAyMnEtMSAtMyAtMSAtMTBxMCAtMjUgLTE1IC01Ni41dC0yOS41IC01NS41dC0yMSAtNTh0MTEuNSAtNjMKcS0yMyAtNiAtNjIuNSAtOTB0LTQ3LjUgLTE0MXEtMiAtMTggLTEuNSAtNjl0LTUuNSAtNTlxLTggLTI0IC0yOSAtM3EtMzIgMzEgLTM2IDk0cS0yIDI4IDQgNTZxNCAxOSAtMSAxOHEtMiAtMSAtNCAtNXEtMzYgLTY1IDEwIC0xNjZxNSAtMTIgMjUgLTI4dDI0IC0yMHEyMCAtMjMgMTA0IC05MC41dDkzIC03Ni41cTE2IC0xNSAxNy41IC0zOHQtMTQgLTQzdC00NS41IC0yM3E4IC0xNSAyOSAtNDQuNXQyOCAtNTR0NyAtNzAuNXE0NiAyNCA3IDkyCnEtNCA4IC0xMC41IDE2dC05LjUgMTJ0LTIgNnEzIDUgMTMgOS41dDIwIC0yLjVxNDYgLTUyIDE2NiAtMzZxMTMzIDE1IDE3NyA4N3EyMyAzOCAzNCAzMHExMiAtNiAxMCAtNTJxLTEgLTI1IC0yMyAtOTJxLTkgLTIzIC02IC0zNy41dDI0IC0xNS41cTMgMTkgMTQuNSA3N3QxMy41IDkwcTIgMjEgLTYuNSA3My41dC03LjUgOTd0MjMgNzAuNXExNSAxOCA1MSAxOHExIDM3IDM0LjUgNTN0NzIuNSAxMC41dDYwIC0yMi41ek02MjYgMTE1MgpxMyAxNyAtMi41IDMwdC0xMS41IDE1cS05IDIgLTkgLTdxMiAtNSA1IC02cTEwIDAgNyAtMTVxLTMgLTIwIDggLTIwcTMgMCAzIDN6TTEwNDUgOTU1cS0yIDggLTYuNSAxMS41dC0xMyA1dC0xNC41IDUuNXEtNSAzIC05LjUgOHQtNyA4dC01LjUgNi41dC00IDR0LTQgLTEuNXEtMTQgLTE2IDcgLTQzLjV0MzkgLTMxLjVxOSAtMSAxNC41IDh0My41IDIwek04NjcgMTE2OHEwIDExIC01IDE5LjV0LTExIDEyLjV0LTkgM3EtNiAwIC04IC0ydDAgLTQKdDUgLTNxMTQgLTQgMTggLTMxcTAgLTMgOCAycTIgMiAyIDN6TTkyMSAxNDAxcTAgMiAtMi41IDV0LTkgN3QtOS41IDZxLTE1IDE1IC0yNCAxNXEtOSAtMSAtMTEuNSAtNy41dC0xIC0xM3QtMC41IC0xMi41cS0xIC00IC02IC0xMC41dC02IC05dDMgLTguNXE0IC0zIDggMHQxMSA5dDE1IDlxMSAxIDkgMXQxNSAydDkgN3pNMTQ4NiA2MHEyMCAtMTIgMzEgLTI0LjV0MTIgLTI0dC0yLjUgLTIyLjV0LTE1LjUgLTIydC0yMy41IC0xOS41CnQtMzAgLTE4LjV0LTMxLjUgLTE2LjV0LTMyIC0xNS41dC0yNyAtMTNxLTM4IC0xOSAtODUuNSAtNTZ0LTc1LjUgLTY0cS0xNyAtMTYgLTY4IC0xOS41dC04OSAxNC41cS0xOCA5IC0yOS41IDIzLjV0LTE2LjUgMjUuNXQtMjIgMTkuNXQtNDcgOS41cS00NCAxIC0xMzAgMXEtMTkgMCAtNTcgLTEuNXQtNTggLTIuNXEtNDQgLTEgLTc5LjUgLTE1dC01My41IC0zMHQtNDMuNSAtMjguNXQtNTMuNSAtMTEuNXEtMjkgMSAtMTExIDMxdC0xNDYgNDMKcS0xOSA0IC01MSA5LjV0LTUwIDl0LTM5LjUgOS41dC0zMy41IDE0LjV0LTE3IDE5LjVxLTEwIDIzIDcgNjYuNXQxOCA1NC41cTEgMTYgLTQgNDB0LTEwIDQyLjV0LTQuNSAzNi41dDEwLjUgMjdxMTQgMTIgNTcgMTR0NjAgMTJxMzAgMTggNDIgMzV0MTIgNTFxMjEgLTczIC0zMiAtMTA2cS0zMiAtMjAgLTgzIC0xNXEtMzQgMyAtNDMgLTEwcS0xMyAtMTUgNSAtNTdxMiAtNiA4IC0xOHQ4LjUgLTE4dDQuNSAtMTd0MSAtMjJxMCAtMTUgLTE3IC00OQp0LTE0IC00OHEzIC0xNyAzNyAtMjZxMjAgLTYgODQuNSAtMTguNXQ5OS41IC0yMC41cTI0IC02IDc0IC0yMnQ4Mi41IC0yM3Q1NS41IC00cTQzIDYgNjQuNSAyOHQyMyA0OHQtNy41IDU4LjV0LTE5IDUydC0yMCAzNi41cS0xMjEgMTkwIC0xNjkgMjQycS02OCA3NCAtMTEzIDQwcS0xMSAtOSAtMTUgMTVxLTMgMTYgLTIgMzhxMSAyOSAxMCA1MnQyNCA0N3QyMiA0MnE4IDIxIDI2LjUgNzJ0MjkuNSA3OHQzMCA2MXQzOSA1NApxMTEwIDE0MyAxMjQgMTk1cS0xMiAxMTIgLTE2IDMxMHEtMiA5MCAyNCAxNTEuNXQxMDYgMTA0LjVxMzkgMjEgMTA0IDIxcTUzIDEgMTA2IC0xMy41dDg5IC00MS41cTU3IC00MiA5MS41IC0xMjEuNXQyOS41IC0xNDcuNXEtNSAtOTUgMzAgLTIxNHEzNCAtMTEzIDEzMyAtMjE4cTU1IC01OSA5OS41IC0xNjN0NTkuNSAtMTkxcTggLTQ5IDUgLTg0LjV0LTEyIC01NS41dC0yMCAtMjJxLTEwIC0yIC0yMy41IC0xOXQtMjcgLTM1LjUKdC00MC41IC0zMy41dC02MSAtMTRxLTE4IDEgLTMxLjUgNXQtMjIuNSAxMy41dC0xMy41IDE1LjV0LTExLjUgMjAuNXQtOSAxOS41cS0yMiAzNyAtNDEgMzB0LTI4IC00OXQ3IC05N3EyMCAtNzAgMSAtMTk1cS0xMCAtNjUgMTggLTEwMC41dDczIC0zM3Q4NSAzNS41cTU5IDQ5IDg5LjUgNjYuNXQxMDMuNSA0Mi41cTUzIDE4IDc3IDM2LjV0MTguNSAzNC41dC0yNSAyOC41dC01MS41IDIzLjVxLTMzIDExIC00OS41IDQ4dC0xNSA3Mi41CnQxNS41IDQ3LjVxMSAtMzEgOCAtNTYuNXQxNC41IC00MC41dDIwLjUgLTI4LjV0MjEgLTE5dDIxLjUgLTEzdDE2LjUgLTkuNXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iZHJpYmJsZSIgdW5pY29kZT0iJiN4ZjE3ZDsiIApkPSJNMTAyNCAzNnEtNDIgMjQxIC0xNDAgNDk4aC0ybC0yIC0xcS0xNiAtNiAtNDMgLTE2LjV0LTEwMSAtNDl0LTEzNyAtODJ0LTEzMSAtMTE0LjV0LTEwMyAtMTQ4bC0xNSAxMXExODQgLTE1MCA0MTggLTE1MHExMzIgMCAyNTYgNTJ6TTgzOSA2NDNxLTIxIDQ5IC01MyAxMTFxLTMxMSAtOTMgLTY3MyAtOTNxLTEgLTcgLTEgLTIxcTAgLTEyNCA0NCAtMjM2LjV0MTI0IC0yMDEuNXE1MCA4OSAxMjMuNSAxNjYuNXQxNDIuNSAxMjQuNXQxMzAuNSA4MQp0OTkuNSA0OGwzNyAxM3E0IDEgMTMgMy41dDEzIDQuNXpNNzMyIDg1NXEtMTIwIDIxMyAtMjQ0IDM3OHEtMTM4IC02NSAtMjM0IC0xODZ0LTEyOCAtMjcycTMwMiAwIDYwNiA4MHpNMTQxNiA1MzZxLTIxMCA2MCAtNDA5IDI5cTg3IC0yMzkgMTI4IC00NjlxMTExIDc1IDE4NSAxODkuNXQ5NiAyNTAuNXpNNjExIDEyNzdxLTEgMCAtMiAtMXExIDEgMiAxek0xMjAxIDExMzJxLTE4NSAxNjQgLTQzMyAxNjRxLTc2IDAgLTE1NSAtMTkKcTEzMSAtMTcwIDI0NiAtMzgycTY5IDI2IDEzMCA2MC41dDk2LjUgNjEuNXQ2NS41IDU3dDM3LjUgNDAuNXpNMTQyNCA2NDdxLTMgMjMyIC0xNDkgNDEwbC0xIC0xcS05IC0xMiAtMTkgLTI0LjV0LTQzLjUgLTQ0LjV0LTcxIC02MC41dC0xMDAgLTY1dC0xMzEuNSAtNjQuNXEyNSAtNTMgNDQgLTk1cTIgLTUgNi41IC0xN3Q3LjUgLTE3cTM2IDUgNzQuNSA3dDczLjUgMnQ2OSAtMS41dDY0IC00dDU2LjUgLTUuNXQ0OCAtNi41dDM2LjUgLTYKdDI1IC00LjV6TTE1MzYgNjQwcTAgLTIwOSAtMTAzIC0zODUuNXQtMjc5LjUgLTI3OS41dC0zODUuNSAtMTAzdC0zODUuNSAxMDN0LTI3OS41IDI3OS41dC0xMDMgMzg1LjV0MTAzIDM4NS41dDI3OS41IDI3OS41dDM4NS41IDEwM3QzODUuNSAtMTAzdDI3OS41IC0yNzkuNXQxMDMgLTM4NS41eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJza3lwZSIgdW5pY29kZT0iJiN4ZjE3ZTsiIApkPSJNMTE3MyA0NzNxMCA1MCAtMTkuNSA5MS41dC00OC41IDY4LjV0LTczIDQ5dC04Mi41IDM0dC04Ny41IDIzbC0xMDQgMjRxLTMwIDcgLTQ0IDEwLjV0LTM1IDExLjV0LTMwIDE2dC0xNi41IDIxdC03LjUgMzBxMCA3NyAxNDQgNzdxNDMgMCA3NyAtMTJ0NTQgLTI4LjV0MzggLTMzLjV0NDAgLTI5dDQ4IC0xMnE0NyAwIDc1LjUgMzJ0MjguNSA3N3EwIDU1IC01NiA5OS41dC0xNDIgNjcuNXQtMTgyIDIzcS02OCAwIC0xMzIgLTE1LjUKdC0xMTkuNSAtNDd0LTg5IC04N3QtMzMuNSAtMTI4LjVxMCAtNjEgMTkgLTEwNi41dDU2IC03NS41dDgwIC00OC41dDEwMyAtMzIuNWwxNDYgLTM2cTkwIC0yMiAxMTIgLTM2cTMyIC0yMCAzMiAtNjBxMCAtMzkgLTQwIC02NC41dC0xMDUgLTI1LjVxLTUxIDAgLTkxLjUgMTZ0LTY1IDM4LjV0LTQ1LjUgNDV0LTQ2IDM4LjV0LTU0IDE2cS01MCAwIC03NS41IC0zMHQtMjUuNSAtNzVxMCAtOTIgMTIyIC0xNTcuNXQyOTEgLTY1LjUKcTczIDAgMTQwIDE4LjV0MTIyLjUgNTMuNXQ4OC41IDkzLjV0MzMgMTMxLjV6TTE1MzYgMjU2cTAgLTE1OSAtMTEyLjUgLTI3MS41dC0yNzEuNSAtMTEyLjVxLTEzMCAwIC0yMzQgODBxLTc3IC0xNiAtMTUwIC0xNnEtMTQzIDAgLTI3My41IDU1LjV0LTIyNSAxNTB0LTE1MCAyMjV0LTU1LjUgMjczLjVxMCA3MyAxNiAxNTBxLTgwIDEwNCAtODAgMjM0cTAgMTU5IDExMi41IDI3MS41dDI3MS41IDExMi41cTEzMCAwIDIzNCAtODAKcTc3IDE2IDE1MCAxNnExNDMgMCAyNzMuNSAtNTUuNXQyMjUgLTE1MHQxNTAgLTIyNXQ1NS41IC0yNzMuNXEwIC03MyAtMTYgLTE1MHE4MCAtMTA0IDgwIC0yMzR6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9ImZvdXJzcXVhcmUiIHVuaWNvZGU9IiYjeGYxODA7IiBob3Jpei1hZHYteD0iMTI4MCIgCmQ9Ik0xMDAwIDExMDJsMzcgMTk0cTUgMjMgLTkgNDB0LTM1IDE3aC03MTJxLTIzIDAgLTM4LjUgLTE3dC0xNS41IC0zN3YtMTEwMXEwIC03IDYgLTFsMjkxIDM1MnEyMyAyNiAzOCAzMy41dDQ4IDcuNWgyMzlxMjIgMCAzNyAxNC41dDE4IDI5LjVxMjQgMTMwIDM3IDE5MXE0IDIxIC0xMS41IDQwdC0zNi41IDE5aC0yOTRxLTI5IDAgLTQ4IDE5dC0xOSA0OHY0MnEwIDI5IDE5IDQ3LjV0NDggMTguNWgzNDZxMTggMCAzNSAxMy41dDIwIDI5LjV6Ck0xMjI3IDEzMjRxLTE1IC03MyAtNTMuNSAtMjY2LjV0LTY5LjUgLTM1MHQtMzUgLTE3My41cS02IC0yMiAtOSAtMzIuNXQtMTQgLTMyLjV0LTI0LjUgLTMzdC0zOC41IC0yMXQtNTggLTEwaC0yNzFxLTEzIDAgLTIyIC0xMHEtOCAtOSAtNDI2IC00OTRxLTIyIC0yNSAtNTguNSAtMjguNXQtNDguNSA1LjVxLTU1IDIyIC01NSA5OHYxNDEwcTAgNTUgMzggMTAyLjV0MTIwIDQ3LjVoODg4cTk1IDAgMTI3IC01M3QxMCAtMTU5ek0xMjI3IDEzMjQKbC0xNTggLTc5MHE0IDE3IDM1IDE3My41dDY5LjUgMzUwdDUzLjUgMjY2LjV6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InRyZWxsbyIgdW5pY29kZT0iJiN4ZjE4MTsiIApkPSJNNzA0IDE5MnYxMDI0cTAgMTQgLTkgMjN0LTIzIDloLTQ4MHEtMTQgMCAtMjMgLTl0LTkgLTIzdi0xMDI0cTAgLTE0IDkgLTIzdDIzIC05aDQ4MHExNCAwIDIzIDl0OSAyM3pNMTM3NiA1NzZ2NjQwcTAgMTQgLTkgMjN0LTIzIDloLTQ4MHEtMTQgMCAtMjMgLTl0LTkgLTIzdi02NDBxMCAtMTQgOSAtMjN0MjMgLTloNDgwcTE0IDAgMjMgOXQ5IDIzek0xNTM2IDEzNDR2LTE0MDhxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC0xNDA4CnEtMjYgMCAtNDUgMTl0LTE5IDQ1djE0MDhxMCAyNiAxOSA0NXQ0NSAxOWgxNDA4cTI2IDAgNDUgLTE5dDE5IC00NXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iZmVtYWxlIiB1bmljb2RlPSImI3hmMTgyOyIgaG9yaXotYWR2LXg9IjEyODAiIApkPSJNMTI4MCA0ODBxMCAtNDAgLTI4IC02OHQtNjggLTI4cS01MSAwIC04MCA0M2wtMjI3IDM0MWgtNDV2LTEzMmwyNDcgLTQxMXE5IC0xNSA5IC0zM3EwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTE5MnYtMjcycTAgLTQ2IC0zMyAtNzl0LTc5IC0zM2gtMTYwcS00NiAwIC03OSAzM3QtMzMgNzl2MjcyaC0xOTJxLTI2IDAgLTQ1IDE5dC0xOSA0NXEwIDE4IDkgMzNsMjQ3IDQxMXYxMzJoLTQ1bC0yMjcgLTM0MXEtMjkgLTQzIC04MCAtNDMKcS00MCAwIC02OCAyOHQtMjggNjhxMCAyOSAxNiA1M2wyNTYgMzg0cTczIDEwNyAxNzYgMTA3aDM4NHExMDMgMCAxNzYgLTEwN2wyNTYgLTM4NHExNiAtMjQgMTYgLTUzek04NjQgMTI4MHEwIC05MyAtNjUuNSAtMTU4LjV0LTE1OC41IC02NS41dC0xNTguNSA2NS41dC02NS41IDE1OC41dDY1LjUgMTU4LjV0MTU4LjUgNjUuNXQxNTguNSAtNjUuNXQ2NS41IC0xNTguNXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0ibWFsZSIgdW5pY29kZT0iJiN4ZjE4MzsiIGhvcml6LWFkdi14PSIxMDI0IiAKZD0iTTEwMjQgODMydi00MTZxMCAtNDAgLTI4IC02OHQtNjggLTI4dC02OCAyOHQtMjggNjh2MzUyaC02NHYtOTEycTAgLTQ2IC0zMyAtNzl0LTc5IC0zM3QtNzkgMzN0LTMzIDc5djQ2NGgtNjR2LTQ2NHEwIC00NiAtMzMgLTc5dC03OSAtMzN0LTc5IDMzdC0zMyA3OXY5MTJoLTY0di0zNTJxMCAtNDAgLTI4IC02OHQtNjggLTI4dC02OCAyOHQtMjggNjh2NDE2cTAgODAgNTYgMTM2dDEzNiA1Nmg2NDBxODAgMCAxMzYgLTU2dDU2IC0xMzZ6Ck03MzYgMTI4MHEwIC05MyAtNjUuNSAtMTU4LjV0LTE1OC41IC02NS41dC0xNTguNSA2NS41dC02NS41IDE1OC41dDY1LjUgMTU4LjV0MTU4LjUgNjUuNXQxNTguNSAtNjUuNXQ2NS41IC0xNTguNXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iZ2l0dGlwIiB1bmljb2RlPSImI3hmMTg0OyIgCmQ9Ik03NzMgMjM0bDM1MCA0NzNxMTYgMjIgMjQuNSA1OXQtNiA4NXQtNjEuNSA3OXEtNDAgMjYgLTgzIDI1LjV0LTczLjUgLTE3LjV0LTU0LjUgLTQ1cS0zNiAtNDAgLTk2IC00MHEtNTkgMCAtOTUgNDBxLTI0IDI4IC01NC41IDQ1dC03My41IDE3LjV0LTg0IC0yNS41cS00NiAtMzEgLTYwLjUgLTc5dC02IC04NXQyNC41IC01OXpNMTUzNiA2NDBxMCAtMjA5IC0xMDMgLTM4NS41dC0yNzkuNSAtMjc5LjV0LTM4NS41IC0xMDN0LTM4NS41IDEwMwp0LTI3OS41IDI3OS41dC0xMDMgMzg1LjV0MTAzIDM4NS41dDI3OS41IDI3OS41dDM4NS41IDEwM3QzODUuNSAtMTAzdDI3OS41IC0yNzkuNXQxMDMgLTM4NS41eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJzdW4iIHVuaWNvZGU9IiYjeGYxODU7IiBob3Jpei1hZHYteD0iMTc5MiIgCmQ9Ik0xNDcyIDY0MHEwIDExNyAtNDUuNSAyMjMuNXQtMTIzIDE4NHQtMTg0IDEyM3QtMjIzLjUgNDUuNXQtMjIzLjUgLTQ1LjV0LTE4NCAtMTIzdC0xMjMgLTE4NHQtNDUuNSAtMjIzLjV0NDUuNSAtMjIzLjV0MTIzIC0xODR0MTg0IC0xMjN0MjIzLjUgLTQ1LjV0MjIzLjUgNDUuNXQxODQgMTIzdDEyMyAxODR0NDUuNSAyMjMuNXpNMTc0OCAzNjNxLTQgLTE1IC0yMCAtMjBsLTI5MiAtOTZ2LTMwNnEwIC0xNiAtMTMgLTI2cS0xNSAtMTAgLTI5IC00CmwtMjkyIDk0bC0xODAgLTI0OHEtMTAgLTEzIC0yNiAtMTN0LTI2IDEzbC0xODAgMjQ4bC0yOTIgLTk0cS0xNCAtNiAtMjkgNHEtMTMgMTAgLTEzIDI2djMwNmwtMjkyIDk2cS0xNiA1IC0yMCAyMHEtNSAxNyA0IDI5bDE4MCAyNDhsLTE4MCAyNDhxLTkgMTMgLTQgMjlxNCAxNSAyMCAyMGwyOTIgOTZ2MzA2cTAgMTYgMTMgMjZxMTUgMTAgMjkgNGwyOTIgLTk0bDE4MCAyNDhxOSAxMiAyNiAxMnQyNiAtMTJsMTgwIC0yNDhsMjkyIDk0CnExNCA2IDI5IC00cTEzIC0xMCAxMyAtMjZ2LTMwNmwyOTIgLTk2cTE2IC01IDIwIC0yMHE1IC0xNiAtNCAtMjlsLTE4MCAtMjQ4bDE4MCAtMjQ4cTkgLTEyIDQgLTI5eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfMzY2IiB1bmljb2RlPSImI3hmMTg2OyIgCmQ9Ik0xMjYyIDIzM3EtNTQgLTkgLTExMCAtOXEtMTgyIDAgLTMzNyA5MHQtMjQ1IDI0NXQtOTAgMzM3cTAgMTkyIDEwNCAzNTdxLTIwMSAtNjAgLTMyOC41IC0yMjl0LTEyNy41IC0zODRxMCAtMTMwIDUxIC0yNDguNXQxMzYuNSAtMjA0dDIwNCAtMTM2LjV0MjQ4LjUgLTUxcTE0NCAwIDI3My41IDYxLjV0MjIwLjUgMTcxLjV6TTE0NjUgMzE4cS05NCAtMjAzIC0yODMuNSAtMzI0LjV0LTQxMy41IC0xMjEuNXEtMTU2IDAgLTI5OCA2MQp0LTI0NSAxNjR0LTE2NCAyNDV0LTYxIDI5OHEwIDE1MyA1Ny41IDI5Mi41dDE1NiAyNDEuNXQyMzUuNSAxNjQuNXQyOTAgNjguNXE0NCAyIDYxIC0zOXExOCAtNDEgLTE1IC03MnEtODYgLTc4IC0xMzEuNSAtMTgxLjV0LTQ1LjUgLTIxOC41cTAgLTE0OCA3MyAtMjczdDE5OCAtMTk4dDI3MyAtNzNxMTE4IDAgMjI4IDUxcTQxIDE4IDcyIC0xM3ExNCAtMTQgMTcuNSAtMzR0LTQuNSAtMzh6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9ImFyY2hpdmUiIHVuaWNvZGU9IiYjeGYxODc7IiBob3Jpei1hZHYteD0iMTc5MiIgCmQ9Ik0xMDg4IDcwNHEwIDI2IC0xOSA0NXQtNDUgMTloLTI1NnEtMjYgMCAtNDUgLTE5dC0xOSAtNDV0MTkgLTQ1dDQ1IC0xOWgyNTZxMjYgMCA0NSAxOXQxOSA0NXpNMTY2NCA4OTZ2LTk2MHEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTE0MDhxLTI2IDAgLTQ1IDE5dC0xOSA0NXY5NjBxMCAyNiAxOSA0NXQ0NSAxOWgxNDA4cTI2IDAgNDUgLTE5dDE5IC00NXpNMTcyOCAxMzQ0di0yNTZxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC0xNTM2CnEtMjYgMCAtNDUgMTl0LTE5IDQ1djI1NnEwIDI2IDE5IDQ1dDQ1IDE5aDE1MzZxMjYgMCA0NSAtMTl0MTkgLTQ1eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJidWciIHVuaWNvZGU9IiYjeGYxODg7IiBob3Jpei1hZHYteD0iMTY2NCIgCmQ9Ik0xNjMyIDU3NnEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTIyNHEwIC0xNzEgLTY3IC0yOTBsMjA4IC0yMDlxMTkgLTE5IDE5IC00NXQtMTkgLTQ1cS0xOCAtMTkgLTQ1IC0xOXQtNDUgMTlsLTE5OCAxOTdxLTUgLTUgLTE1IC0xM3QtNDIgLTI4LjV0LTY1IC0zNi41dC04MiAtMjl0LTk3IC0xM3Y4OTZoLTEyOHYtODk2cS01MSAwIC0xMDEuNSAxMy41dC04NyAzM3QtNjYgMzl0LTQzLjUgMzIuNWwtMTUgMTRsLTE4MyAtMjA3CnEtMjAgLTIxIC00OCAtMjFxLTI0IDAgLTQzIDE2cS0xOSAxOCAtMjAuNSA0NC41dDE1LjUgNDYuNWwyMDIgMjI3cS01OCAxMTQgLTU4IDI3NGgtMjI0cS0yNiAwIC00NSAxOXQtMTkgNDV0MTkgNDV0NDUgMTloMjI0djI5NGwtMTczIDE3M3EtMTkgMTkgLTE5IDQ1dDE5IDQ1dDQ1IDE5dDQ1IC0xOWwxNzMgLTE3M2g4NDRsMTczIDE3M3ExOSAxOSA0NSAxOXQ0NSAtMTl0MTkgLTQ1dC0xOSAtNDVsLTE3MyAtMTczdi0yOTRoMjI0cTI2IDAgNDUgLTE5CnQxOSAtNDV6TTExNTIgMTE1MmgtNjQwcTAgMTMzIDkzLjUgMjI2LjV0MjI2LjUgOTMuNXQyMjYuNSAtOTMuNXQ5My41IC0yMjYuNXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idmsiIHVuaWNvZGU9IiYjeGYxODk7IiBob3Jpei1hZHYteD0iMTkyMCIgCmQ9Ik0xOTE3IDEwMTZxMjMgLTY0IC0xNTAgLTI5NHEtMjQgLTMyIC02NSAtODVxLTQwIC01MSAtNTUgLTcydC0zMC41IC00OS41dC0xMiAtNDJ0MTMgLTM0LjV0MzIuNSAtNDN0NTcgLTUzcTQgLTIgNSAtNHExNDEgLTEzMSAxOTEgLTIyMXEzIC01IDYuNSAtMTIuNXQ3IC0yNi41dC0wLjUgLTM0dC0yNSAtMjcuNXQtNTkgLTEyLjVsLTI1NiAtNHEtMjQgLTUgLTU2IDV0LTUyIDIybC0yMCAxMnEtMzAgMjEgLTcwIDY0dC02OC41IDc3LjV0LTYxIDU4CnQtNTYuNSAxNS41cS0zIC0xIC04IC0zLjV0LTE3IC0xNC41dC0yMS41IC0yOS41dC0xNyAtNTJ0LTYuNSAtNzcuNXEwIC0xNSAtMy41IC0yNy41dC03LjUgLTE4LjVsLTQgLTVxLTE4IC0xOSAtNTMgLTIyaC0xMTVxLTcxIC00IC0xNDYgMTYuNXQtMTMxLjUgNTN0LTEwMyA2NnQtNzAuNSA1Ny41bC0yNSAyNHEtMTAgMTAgLTI3LjUgMzB0LTcxLjUgOTF0LTEwNiAxNTF0LTEyMi41IDIxMXQtMTMwLjUgMjcycS02IDE2IC02IDI3dDMgMTZsNCA2CnExNSAxOSA1NyAxOWwyNzQgMnExMiAtMiAyMyAtNi41dDE2IC04LjVsNSAtM3ExNiAtMTEgMjQgLTMycTIwIC01MCA0NiAtMTAzLjV0NDEgLTgxLjVsMTYgLTI5cTI5IC02MCA1NiAtMTA0dDQ4LjUgLTY4LjV0NDEuNSAtMzguNXQzNCAtMTR0MjcgNXEyIDEgNSA1dDEyIDIydDEzLjUgNDd0OS41IDgxdDAgMTI1cS0yIDQwIC05IDczdC0xNCA0NmwtNiAxMnEtMjUgMzQgLTg1IDQzcS0xMyAyIDUgMjRxMTYgMTkgMzggMzBxNTMgMjYgMjM5IDI0CnE4MiAtMSAxMzUgLTEzcTIwIC01IDMzLjUgLTEzLjV0MjAuNSAtMjR0MTAuNSAtMzJ0My41IC00NS41dC0xIC01NXQtMi41IC03MC41dC0xLjUgLTgyLjVxMCAtMTEgLTEgLTQydC0wLjUgLTQ4dDMuNSAtNDAuNXQxMS41IC0zOXQyMi41IC0yNC41cTggLTIgMTcgLTR0MjYgMTF0MzggMzQuNXQ1MiA2N3Q2OCAxMDcuNXE2MCAxMDQgMTA3IDIyNXE0IDEwIDEwIDE3LjV0MTEgMTAuNWw0IDNsNSAyLjV0MTMgM3QyMCAwLjVsMjg4IDIKcTM5IDUgNjQgLTIuNXQzMSAtMTYuNXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0id2VpYm8iIHVuaWNvZGU9IiYjeGYxOGE7IiBob3Jpei1hZHYteD0iMTc5MiIgCmQ9Ik02NzUgMjUycTIxIDM0IDExIDY5dC00NSA1MHEtMzQgMTQgLTczIDF0LTYwIC00NnEtMjIgLTM0IC0xMyAtNjguNXQ0MyAtNTAuNXQ3NC41IC0yLjV0NjIuNSA0Ny41ek03NjkgMzczcTggMTMgMy41IDI2LjV0LTE3LjUgMTguNXEtMTQgNSAtMjguNSAtMC41dC0yMS41IC0xOC41cS0xNyAtMzEgMTMgLTQ1cTE0IC01IDI5IDAuNXQyMiAxOC41ek05NDMgMjY2cS00NSAtMTAyIC0xNTggLTE1MHQtMjI0IC0xMgpxLTEwNyAzNCAtMTQ3LjUgMTI2LjV0Ni41IDE4Ny41cTQ3IDkzIDE1MS41IDEzOXQyMTAuNSAxOXExMTEgLTI5IDE1OC41IC0xMTkuNXQyLjUgLTE5MC41ek0xMjU1IDQyNnEtOSA5NiAtODkgMTcwdC0yMDguNSAxMDl0LTI3NC41IDIxcS0yMjMgLTIzIC0zNjkuNSAtMTQxLjV0LTEzMi41IC0yNjQuNXE5IC05NiA4OSAtMTcwdDIwOC41IC0xMDl0Mjc0LjUgLTIxcTIyMyAyMyAzNjkuNSAxNDEuNXQxMzIuNSAyNjQuNXpNMTU2MyA0MjIKcTAgLTY4IC0zNyAtMTM5LjV0LTEwOSAtMTM3dC0xNjguNSAtMTE3LjV0LTIyNiAtODN0LTI3MC41IC0zMXQtMjc1IDMzLjV0LTI0MC41IDkzdC0xNzEuNSAxNTF0LTY1IDE5OS41cTAgMTE1IDY5LjUgMjQ1dDE5Ny41IDI1OHExNjkgMTY5IDM0MS41IDIzNnQyNDYuNSAtN3E2NSAtNjQgMjAgLTIwOXEtNCAtMTQgLTEgLTIwdDEwIC03dDE0LjUgMC41dDEzLjUgMy41bDYgMnExMzkgNTkgMjQ2IDU5dDE1MyAtNjFxNDUgLTYzIDAgLTE3OApxLTIgLTEzIC00LjUgLTIwdDQuNSAtMTIuNXQxMiAtNy41dDE3IC02cTU3IC0xOCAxMDMgLTQ3dDgwIC04MS41dDM0IC0xMTYuNXpNMTQ4OSAxMDQ2cTQyIC00NyA1NC41IC0xMDguNXQtNi41IC0xMTcuNXEtOCAtMjMgLTI5LjUgLTM0dC00NC41IC00cS0yMyA4IC0zNCAyOS41dC00IDQ0LjVxMjAgNjMgLTI0IDExMXQtMTA3IDM1cS0yNCAtNSAtNDUgOHQtMjUgMzdxLTUgMjQgOCA0NC41dDM3IDI1LjVxNjAgMTMgMTE5IC01LjV0MTAxIC02NS41egpNMTY3MCAxMjA5cTg3IC05NiAxMTIuNSAtMjIyLjV0LTEzLjUgLTI0MS41cS05IC0yNyAtMzQgLTQwdC01MiAtNHQtNDAgMzR0LTUgNTJxMjggODIgMTAgMTcydC04MCAxNThxLTYyIDY5IC0xNDggOTUuNXQtMTczIDguNXEtMjggLTYgLTUyIDkuNXQtMzAgNDMuNXQ5LjUgNTEuNXQ0My41IDI5LjVxMTIzIDI2IDI0NCAtMTEuNXQyMDggLTEzNC41eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJyZW5yZW4iIHVuaWNvZGU9IiYjeGYxOGI7IiAKZD0iTTExMzMgLTM0cS0xNzEgLTk0IC0zNjggLTk0cS0xOTYgMCAtMzY3IDk0cTEzOCA4NyAyMzUuNSAyMTF0MTMxLjUgMjY4cTM1IC0xNDQgMTMyLjUgLTI2OHQyMzUuNSAtMjExek02MzggMTM5NHYtNDg1cTAgLTI1MiAtMTI2LjUgLTQ1OS41dC0zMzAuNSAtMzA2LjVxLTE4MSAyMTUgLTE4MSA0OTVxMCAxODcgODMuNSAzNDkuNXQyMjkuNSAyNjkuNXQzMjUgMTM3ek0xNTM2IDYzOHEwIC0yODAgLTE4MSAtNDk1CnEtMjA0IDk5IC0zMzAuNSAzMDYuNXQtMTI2LjUgNDU5LjV2NDg1cTE3OSAtMzAgMzI1IC0xMzd0MjI5LjUgLTI2OS41dDgzLjUgLTM0OS41eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfMzcyIiB1bmljb2RlPSImI3hmMThjOyIgaG9yaXotYWR2LXg9IjE0MDgiIApkPSJNMTQwMiA0MzNxLTMyIC04MCAtNzYgLTEzOHQtOTEgLTg4LjV0LTk5IC00Ni41dC0xMDEuNSAtMTQuNXQtOTYuNSA4LjV0LTg2LjUgMjJ0LTY5LjUgMjcuNXQtNDYgMjIuNWwtMTcgMTBxLTExMyAtMjI4IC0yODkuNSAtMzU5LjV0LTM4NC41IC0xMzIuNXEtMTkgMCAtMzIgMTN0LTEzIDMydDEzIDMxLjV0MzIgMTIuNXExNzMgMSAzMjIuNSAxMDcuNXQyNTEuNSAyOTQuNXEtMzYgLTE0IC03MiAtMjN0LTgzIC0xM3QtOTEgMi41dC05MyAyOC41CnQtOTIgNTl0LTg0LjUgMTAwdC03NC41IDE0NnExMTQgNDcgMjE0IDU3dDE2Ny41IC03LjV0MTI0LjUgLTU2LjV0ODguNSAtNzd0NTYuNSAtODJxNTMgMTMxIDc5IDI5MXEtNyAtMSAtMTggLTIuNXQtNDYuNSAtMi41dC02OS41IDAuNXQtODEuNSAxMHQtODguNSAyM3QtODQgNDIuNXQtNzUgNjV0LTU0LjUgOTQuNXQtMjguNSAxMjcuNXE3MCAyOCAxMzMuNSAzNi41dDExMi41IC0xdDkyIC0zMHQ3My41IC01MHQ1NiAtNjF0NDIgLTYzdDI3LjUgLTU2CnQxNiAtMzkuNWw0IC0xNnExMiAxMjIgMTIgMTk1cS04IDYgLTIxLjUgMTZ0LTQ5IDQ0LjV0LTYzLjUgNzEuNXQtNTQgOTN0LTMzIDExMi41dDEyIDEyN3Q3MCAxMzguNXE3MyAtMjUgMTI3LjUgLTYxLjV0ODQuNSAtNzYuNXQ0OCAtODV0MjAuNSAtODl0LTAuNSAtODUuNXQtMTMgLTc2LjV0LTE5IC02MnQtMTcgLTQybC03IC0xNXExIC00IDEgLTUwdC0xIC03MnEzIDcgMTAgMTguNXQzMC41IDQzdDUwLjUgNTh0NzEgNTUuNXQ5MS41IDQ0LjUKdDExMiAxNC41dDEzMi41IC0yNHEtMiAtNzggLTIxLjUgLTE0MS41dC01MCAtMTA0LjV0LTY5LjUgLTcxLjV0LTgxLjUgLTQ1LjV0LTg0LjUgLTI0dC04MCAtOS41dC02Ny41IDF0LTQ2LjUgNC41bC0xNyAzcS0yMyAtMTQ3IC03MyAtMjgzcTYgNyAxOCAxOC41dDQ5LjUgNDF0NzcuNSA1Mi41dDk5LjUgNDJ0MTE3LjUgMjB0MTI5IC0yMy41dDEzNyAtNzcuNXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0ic3RhY2tfZXhjaGFuZ2UiIHVuaWNvZGU9IiYjeGYxOGQ7IiBob3Jpei1hZHYteD0iMTI4MCIgCmQ9Ik0xMjU5IDI4M3YtNjZxMCAtODUgLTU3LjUgLTE0NC41dC0xMzguNSAtNTkuNWgtNTdsLTI2MCAtMjY5djI2OWgtNTI5cS04MSAwIC0xMzguNSA1OS41dC01Ny41IDE0NC41djY2aDEyMzh6TTEyNTkgNjA5di0yNTVoLTEyMzh2MjU1aDEyMzh6TTEyNTkgOTM3di0yNTVoLTEyMzh2MjU1aDEyMzh6TTEyNTkgMTA3N3YtNjdoLTEyMzh2NjdxMCA4NCA1Ny41IDE0My41dDEzOC41IDU5LjVoODQ2cTgxIDAgMTM4LjUgLTU5LjV0NTcuNSAtMTQzLjV6CiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfMzc0IiB1bmljb2RlPSImI3hmMThlOyIgCmQ9Ik0xMTUyIDY0MHEwIC0xNCAtOSAtMjNsLTMyMCAtMzIwcS05IC05IC0yMyAtOXEtMTMgMCAtMjIuNSA5LjV0LTkuNSAyMi41djE5MmgtMzUycS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2MTkycTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoMzUydjE5MnEwIDE0IDkgMjN0MjMgOXExMiAwIDI0IC0xMGwzMTkgLTMxOXE5IC05IDkgLTIzek0xMzEyIDY0MHEwIDE0OCAtNzMgMjczdC0xOTggMTk4dC0yNzMgNzN0LTI3MyAtNzN0LTE5OCAtMTk4CnQtNzMgLTI3M3Q3MyAtMjczdDE5OCAtMTk4dDI3MyAtNzN0MjczIDczdDE5OCAxOTh0NzMgMjczek0xNTM2IDY0MHEwIC0yMDkgLTEwMyAtMzg1LjV0LTI3OS41IC0yNzkuNXQtMzg1LjUgLTEwM3QtMzg1LjUgMTAzdC0yNzkuNSAyNzkuNXQtMTAzIDM4NS41dDEwMyAzODUuNXQyNzkuNSAyNzkuNXQzODUuNSAxMDN0Mzg1LjUgLTEwM3QyNzkuNSAtMjc5LjV0MTAzIC0zODUuNXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iYXJyb3dfY2lyY2xlX2FsdF9sZWZ0IiB1bmljb2RlPSImI3hmMTkwOyIgCmQ9Ik0xMTUyIDczNnYtMTkycTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtMzUydi0xOTJxMCAtMTQgLTkgLTIzdC0yMyAtOXEtMTIgMCAtMjQgMTBsLTMxOSAzMTlxLTkgOSAtOSAyM3Q5IDIzbDMyMCAzMjBxOSA5IDIzIDlxMTMgMCAyMi41IC05LjV0OS41IC0yMi41di0xOTJoMzUycTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXpNMTMxMiA2NDBxMCAxNDggLTczIDI3M3QtMTk4IDE5OHQtMjczIDczdC0yNzMgLTczdC0xOTggLTE5OAp0LTczIC0yNzN0NzMgLTI3M3QxOTggLTE5OHQyNzMgLTczdDI3MyA3M3QxOTggMTk4dDczIDI3M3pNMTUzNiA2NDBxMCAtMjA5IC0xMDMgLTM4NS41dC0yNzkuNSAtMjc5LjV0LTM4NS41IC0xMDN0LTM4NS41IDEwM3QtMjc5LjUgMjc5LjV0LTEwMyAzODUuNXQxMDMgMzg1LjV0Mjc5LjUgMjc5LjV0Mzg1LjUgMTAzdDM4NS41IC0xMDN0Mjc5LjUgLTI3OS41dDEwMyAtMzg1LjV6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9Il8zNzYiIHVuaWNvZGU9IiYjeGYxOTE7IiAKZD0iTTEwMjQgOTYwdi02NDBxMCAtMjYgLTE5IC00NXQtNDUgLTE5cS0yMCAwIC0zNyAxMmwtNDQ4IDMyMHEtMjcgMTkgLTI3IDUydDI3IDUybDQ0OCAzMjBxMTcgMTIgMzcgMTJxMjYgMCA0NSAtMTl0MTkgLTQ1ek0xMjgwIDE2MHY5NjBxMCAxMyAtOS41IDIyLjV0LTIyLjUgOS41aC05NjBxLTEzIDAgLTIyLjUgLTkuNXQtOS41IC0yMi41di05NjBxMCAtMTMgOS41IC0yMi41dDIyLjUgLTkuNWg5NjBxMTMgMCAyMi41IDkuNXQ5LjUgMjIuNXoKTTE1MzYgMTEyMHYtOTYwcTAgLTExOSAtODQuNSAtMjAzLjV0LTIwMy41IC04NC41aC05NjBxLTExOSAwIC0yMDMuNSA4NC41dC04NC41IDIwMy41djk2MHEwIDExOSA4NC41IDIwMy41dDIwMy41IDg0LjVoOTYwcTExOSAwIDIwMy41IC04NC41dDg0LjUgLTIwMy41eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJkb3RfY2lyY2xlX2FsdCIgdW5pY29kZT0iJiN4ZjE5MjsiIApkPSJNMTAyNCA2NDBxMCAtMTA2IC03NSAtMTgxdC0xODEgLTc1dC0xODEgNzV0LTc1IDE4MXQ3NSAxODF0MTgxIDc1dDE4MSAtNzV0NzUgLTE4MXpNNzY4IDExODRxLTE0OCAwIC0yNzMgLTczdC0xOTggLTE5OHQtNzMgLTI3M3Q3MyAtMjczdDE5OCAtMTk4dDI3MyAtNzN0MjczIDczdDE5OCAxOTh0NzMgMjczdC03MyAyNzN0LTE5OCAxOTh0LTI3MyA3M3pNMTUzNiA2NDBxMCAtMjA5IC0xMDMgLTM4NS41dC0yNzkuNSAtMjc5LjUKdC0zODUuNSAtMTAzdC0zODUuNSAxMDN0LTI3OS41IDI3OS41dC0xMDMgMzg1LjV0MTAzIDM4NS41dDI3OS41IDI3OS41dDM4NS41IDEwM3QzODUuNSAtMTAzdDI3OS41IC0yNzkuNXQxMDMgLTM4NS41eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfMzc4IiB1bmljb2RlPSImI3hmMTkzOyIgaG9yaXotYWR2LXg9IjE2NjQiIApkPSJNMTAyMyAzNDlsMTAyIC0yMDRxLTU4IC0xNzkgLTIxMCAtMjkwdC0zMzkgLTExMXEtMTU2IDAgLTI4OC41IDc3LjV0LTIxMCAyMTB0LTc3LjUgMjg4LjVxMCAxODEgMTA0LjUgMzMwdDI3NC41IDIxMWwxNyAtMTMxcS0xMjIgLTU0IC0xOTUgLTE2NS41dC03MyAtMjQ0LjVxMCAtMTg1IDEzMS41IC0zMTYuNXQzMTYuNSAtMTMxLjVxMTI2IDAgMjMyLjUgNjV0MTY1IDE3NS41dDQ5LjUgMjM2LjV6TTE1NzEgMjQ5bDU4IC0xMTRsLTI1NiAtMTI4CnEtMTMgLTcgLTI5IC03cS00MCAwIC01NyAzNWwtMjM5IDQ3N2gtNDcycS0yNCAwIC00Mi41IDE2LjV0LTIxLjUgNDAuNWwtOTYgNzc5cS0yIDE3IDYgNDJxMTQgNTEgNTcgODIuNXQ5NyAzMS41cTY2IDAgMTEzIC00N3Q0NyAtMTEzcTAgLTY5IC01MiAtMTE3LjV0LTEyMCAtNDEuNWwzNyAtMjg5aDQyM3YtMTI4aC00MDdsMTYgLTEyOGg0NTVxNDAgMCA1NyAtMzVsMjI4IC00NTV6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InZpbWVvX3NxdWFyZSIgdW5pY29kZT0iJiN4ZjE5NDsiIApkPSJNMTI5MiA4OThxMTAgMjE2IC0xNjEgMjIycS0yMzEgOCAtMzEyIC0yNjFxNDQgMTkgODIgMTlxODUgMCA3NCAtOTZxLTQgLTU3IC03NCAtMTY3dC0xMDUgLTExMHEtNDMgMCAtODIgMTY5cS0xMyA1NCAtNDUgMjU1cS0zMCAxODkgLTE2MCAxNzdxLTU5IC03IC0xNjQgLTEwMGwtODEgLTcybC04MSAtNzJsNTIgLTY3cTc2IDUyIDg3IDUycTU3IDAgMTA3IC0xNzlxMTUgLTU1IDQ1IC0xNjQuNXQ0NSAtMTY0LjVxNjggLTE3OSAxNjQgLTE3OQpxMTU3IDAgMzgzIDI5NHEyMjAgMjgzIDIyNiA0NDR6TTE1MzYgMTEyMHYtOTYwcTAgLTExOSAtODQuNSAtMjAzLjV0LTIwMy41IC04NC41aC05NjBxLTExOSAwIC0yMDMuNSA4NC41dC04NC41IDIwMy41djk2MHEwIDExOSA4NC41IDIwMy41dDIwMy41IDg0LjVoOTYwcTExOSAwIDIwMy41IC04NC41dDg0LjUgLTIwMy41eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfMzgwIiB1bmljb2RlPSImI3hmMTk1OyIgaG9yaXotYWR2LXg9IjExNTIiIApkPSJNMTE1MiA3MDRxMCAtMTkxIC05NC41IC0zNTN0LTI1Ni41IC0yNTYuNXQtMzUzIC05NC41aC0xNjBxLTE0IDAgLTIzIDl0LTkgMjN2NjExbC0yMTUgLTY2cS0zIC0xIC05IC0xcS0xMCAwIC0xOSA2cS0xMyAxMCAtMTMgMjZ2MTI4cTAgMjMgMjMgMzFsMjMzIDcxdjkzbC0yMTUgLTY2cS0zIC0xIC05IC0xcS0xMCAwIC0xOSA2cS0xMyAxMCAtMTMgMjZ2MTI4cTAgMjMgMjMgMzFsMjMzIDcxdjI1MHEwIDE0IDkgMjN0MjMgOWgxNjAKcTE0IDAgMjMgLTl0OSAtMjN2LTE4MWwzNzUgMTE2cTE1IDUgMjggLTV0MTMgLTI2di0xMjhxMCAtMjMgLTIzIC0zMWwtMzkzIC0xMjF2LTkzbDM3NSAxMTZxMTUgNSAyOCAtNXQxMyAtMjZ2LTEyOHEwIC0yMyAtMjMgLTMxbC0zOTMgLTEyMXYtNDg3cTE4OCAxMyAzMTggMTUxdDEzMCAzMjhxMCAxNCA5IDIzdDIzIDloMTYwcTE0IDAgMjMgLTl0OSAtMjN6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InBsdXNfc3F1YXJlX28iIHVuaWNvZGU9IiYjeGYxOTY7IiBob3Jpei1hZHYteD0iMTQwOCIgCmQ9Ik0xMTUyIDczNnYtNjRxMCAtMTQgLTkgLTIzdC0yMyAtOWgtMzUydi0zNTJxMCAtMTQgLTkgLTIzdC0yMyAtOWgtNjRxLTE0IDAgLTIzIDl0LTkgMjN2MzUyaC0zNTJxLTE0IDAgLTIzIDl0LTkgMjN2NjRxMCAxNCA5IDIzdDIzIDloMzUydjM1MnEwIDE0IDkgMjN0MjMgOWg2NHExNCAwIDIzIC05dDkgLTIzdi0zNTJoMzUycTE0IDAgMjMgLTl0OSAtMjN6TTEyODAgMjg4djgzMnEwIDY2IC00NyAxMTN0LTExMyA0N2gtODMyCnEtNjYgMCAtMTEzIC00N3QtNDcgLTExM3YtODMycTAgLTY2IDQ3IC0xMTN0MTEzIC00N2g4MzJxNjYgMCAxMTMgNDd0NDcgMTEzek0xNDA4IDExMjB2LTgzMnEwIC0xMTkgLTg0LjUgLTIwMy41dC0yMDMuNSAtODQuNWgtODMycS0xMTkgMCAtMjAzLjUgODQuNXQtODQuNSAyMDMuNXY4MzJxMCAxMTkgODQuNSAyMDMuNXQyMDMuNSA4NC41aDgzMnExMTkgMCAyMDMuNSAtODQuNXQ4NC41IC0yMDMuNXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzM4MiIgdW5pY29kZT0iJiN4ZjE5NzsiIGhvcml6LWFkdi14PSIyMTc2IiAKZD0iTTYyMCA0MTZxLTExMCAtNjQgLTI2OCAtNjRoLTEyOHY2NGgtNjRxLTEzIDAgLTIyLjUgMjMuNXQtOS41IDU2LjVxMCAyNCA3IDQ5cS01OCAyIC05Ni41IDEwLjV0LTM4LjUgMjAuNXQzOC41IDIwLjV0OTYuNSAxMC41cS03IDI1IC03IDQ5cTAgMzMgOS41IDU2LjV0MjIuNSAyMy41aDY0djY0aDEyOHExNTggMCAyNjggLTY0aDExMTNxNDIgLTcgMTA2LjUgLTE4dDgwLjUgLTE0cTg5IC0xNSAxNTAgLTQwLjV0ODMuNSAtNDcuNXQyMi41IC00MAp0LTIyLjUgLTQwdC04My41IC00Ny41dC0xNTAgLTQwLjVxLTE2IC0zIC04MC41IC0xNHQtMTA2LjUgLTE4aC0xMTEzek0xNzM5IDY2OHE1MyAtMzYgNTMgLTkydC01MyAtOTJsODEgLTMwcTY4IDQ4IDY4IDEyMnQtNjggMTIyek02MjUgNDAwaDEwMTVxLTIxNyAtMzggLTQ1NiAtODBxLTU3IDAgLTExMyAtMjR0LTgzIC00OGwtMjggLTI0bC0yODggLTI4OHEtMjYgLTI2IC03MC41IC00NXQtODkuNSAtMTloLTk2bC05MyA0NjRoMjkKcTE1NyAwIDI3MyA2NHpNMzUyIDgxNmgtMjlsOTMgNDY0aDk2cTQ2IDAgOTAgLTE5dDcwIC00NWwyODggLTI4OHE0IC00IDExIC0xMC41dDMwLjUgLTIzdDQ4LjUgLTI5dDYxLjUgLTIzdDcyLjUgLTEwLjVsNDU2IC04MGgtMTAxNXEtMTE2IDY0IC0yNzMgNjR6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9Il8zODMiIHVuaWNvZGU9IiYjeGYxOTg7IiBob3Jpei1hZHYteD0iMTY2NCIgCmQ9Ik0xNTE5IDc2MHE2MiAwIDEwMy41IC00MC41dDQxLjUgLTEwMS41cTAgLTk3IC05MyAtMTMwbC0xNzIgLTU5bDU2IC0xNjdxNyAtMjEgNyAtNDdxMCAtNTkgLTQyIC0xMDJ0LTEwMSAtNDNxLTQ3IDAgLTg1LjUgMjd0LTUzLjUgNzJsLTU1IDE2NWwtMzEwIC0xMDZsNTUgLTE2NHE4IC0yNCA4IC00N3EwIC01OSAtNDIgLTEwMnQtMTAyIC00M3EtNDcgMCAtODUgMjd0LTUzIDcybC01NSAxNjNsLTE1MyAtNTNxLTI5IC05IC01MCAtOQpxLTYxIDAgLTEwMS41IDQwdC00MC41IDEwMXEwIDQ3IDI3LjUgODV0NzEuNSA1M2wxNTYgNTNsLTEwNSAzMTNsLTE1NiAtNTRxLTI2IC04IC00OCAtOHEtNjAgMCAtMTAxIDQwLjV0LTQxIDEwMC41cTAgNDcgMjcuNSA4NXQ3MS41IDUzbDE1NyA1M2wtNTMgMTU5cS04IDI0IC04IDQ3cTAgNjAgNDIgMTAyLjV0MTAyIDQyLjVxNDcgMCA4NSAtMjd0NTMgLTcybDU0IC0xNjBsMzEwIDEwNWwtNTQgMTYwcS04IDI0IC04IDQ3cTAgNTkgNDIuNSAxMDIKdDEwMS41IDQzcTQ3IDAgODUuNSAtMjcuNXQ1My41IC03MS41bDUzIC0xNjFsMTYyIDU1cTIxIDYgNDMgNnE2MCAwIDEwMi41IC0zOS41dDQyLjUgLTk4LjVxMCAtNDUgLTMwIC04MS41dC03NCAtNTEuNWwtMTU3IC01NGwxMDUgLTMxNmwxNjQgNTZxMjQgOCA0NiA4ek03MjUgNDk4bDMxMCAxMDVsLTEwNSAzMTVsLTMxMCAtMTA3eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfMzg0IiB1bmljb2RlPSImI3hmMTk5OyIgCmQ9Ik0xMjQ4IDE0MDhxMTE5IDAgMjAzLjUgLTg0LjV0ODQuNSAtMjAzLjV2LTk2MHEwIC0xMTkgLTg0LjUgLTIwMy41dC0yMDMuNSAtODQuNWgtOTYwcS0xMTkgMCAtMjAzLjUgODQuNXQtODQuNSAyMDMuNXY5NjBxMCAxMTkgODQuNSAyMDMuNXQyMDMuNSA4NC41aDk2MHpNMTI4MCAzNTJ2NDM2cS0zMSAtMzUgLTY0IC01NXEtMzQgLTIyIC0xMzIuNSAtODV0LTE1MS41IC05OXEtOTggLTY5IC0xNjQgLTY5djB2MHEtNjYgMCAtMTY0IDY5CnEtNDcgMzIgLTE0MiA5Mi41dC0xNDIgOTIuNXEtMTIgOCAtMzMgMjd0LTMxIDI3di00MzZxMCAtNDAgMjggLTY4dDY4IC0yOGg4MzJxNDAgMCA2OCAyOHQyOCA2OHpNMTI4MCA5MjVxMCA0MSAtMjcuNSA3MHQtNjguNSAyOWgtODMycS00MCAwIC02OCAtMjh0LTI4IC02OHEwIC0zNyAzMC41IC03Ni41dDY3LjUgLTY0LjVxNDcgLTMyIDEzNy41IC04OXQxMjkuNSAtODNxMyAtMiAxNyAtMTEuNXQyMSAtMTR0MjEgLTEzdDIzLjUgLTEzCnQyMS41IC05LjV0MjIuNSAtNy41dDIwLjUgLTIuNXQyMC41IDIuNXQyMi41IDcuNXQyMS41IDkuNXQyMy41IDEzdDIxIDEzdDIxIDE0dDE3IDExLjVsMjY3IDE3NHEzNSAyMyA2Ni41IDYyLjV0MzEuNSA3My41eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfMzg1IiB1bmljb2RlPSImI3hmMTlhOyIgaG9yaXotYWR2LXg9IjE3OTIiIApkPSJNMTI3IDY0MHEwIDE2MyA2NyAzMTNsMzY3IC0xMDA1cS0xOTYgOTUgLTMxNSAyODF0LTExOSA0MTF6TTE0MTUgNjc5cTAgLTE5IC0yLjUgLTM4LjV0LTEwIC00OS41dC0xMS41IC00NHQtMTcuNSAtNTl0LTE3LjUgLTU4bC03NiAtMjU2bC0yNzggODI2cTQ2IDMgODggOHExOSAyIDI2IDE4LjV0LTIuNSAzMXQtMjguNSAxMy41bC0yMDUgLTEwcS03NSAxIC0yMDIgMTBxLTEyIDEgLTIwLjUgLTV0LTExLjUgLTE1dC0xLjUgLTE4LjV0OSAtMTYuNQp0MTkuNSAtOGw4MCAtOGwxMjAgLTMyOGwtMTY4IC01MDRsLTI4MCA4MzJxNDYgMyA4OCA4cTE5IDIgMjYgMTguNXQtMi41IDMxdC0yOC41IDEzLjVsLTIwNSAtMTBxLTcgMCAtMjMgMC41dC0yNiAwLjVxMTA1IDE2MCAyNzQuNSAyNTMuNXQzNjcuNSA5My41cTE0NyAwIDI4MC41IC01M3QyMzguNSAtMTQ5aC0xMHEtNTUgMCAtOTIgLTQwLjV0LTM3IC05NS41cTAgLTEyIDIgLTI0dDQgLTIxLjV0OCAtMjN0OSAtMjF0MTIgLTIyLjV0MTIuNSAtMjEKdDE0LjUgLTI0dDE0IC0yM3E2MyAtMTA3IDYzIC0yMTJ6TTkwOSA1NzNsMjM3IC02NDdxMSAtNiA1IC0xMXEtMTI2IC00NCAtMjU1IC00NHEtMTEyIDAgLTIxNyAzMnpNMTU3MCAxMDA5cTk1IC0xNzQgOTUgLTM2OXEwIC0yMDkgLTEwNCAtMzg1LjV0LTI3OSAtMjc4LjVsMjM1IDY3OHE1OSAxNjkgNTkgMjc2cTAgNDIgLTYgNzl6TTg5NiAxNTM2cTE4MiAwIDM0OCAtNzF0Mjg2IC0xOTF0MTkxIC0yODZ0NzEgLTM0OHQtNzEgLTM0OHQtMTkxIC0yODYKdC0yODYgLTE5MXQtMzQ4IC03MXQtMzQ4IDcxdC0yODYgMTkxdC0xOTEgMjg2dC03MSAzNDh0NzEgMzQ4dDE5MSAyODZ0Mjg2IDE5MXQzNDggNzF6TTg5NiAtMjE1cTE3MyAwIDMzMS41IDY4dDI3MyAxODIuNXQxODIuNSAyNzN0NjggMzMxLjV0LTY4IDMzMS41dC0xODIuNSAyNzN0LTI3MyAxODIuNXQtMzMxLjUgNjh0LTMzMS41IC02OHQtMjczIC0xODIuNXQtMTgyLjUgLTI3M3QtNjggLTMzMS41dDY4IC0zMzEuNXQxODIuNSAtMjczCnQyNzMgLTE4Mi41dDMzMS41IC02OHoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzM4NiIgdW5pY29kZT0iJiN4ZjE5YjsiIGhvcml6LWFkdi14PSIxNzkyIiAKZD0iTTEwODYgMTUzNnYtMTUzNmwtMjcyIC0xMjhxLTIyOCAyMCAtNDE0IDEwMnQtMjkzIDIwOC41dC0xMDcgMjcyLjVxMCAxNDAgMTAwLjUgMjYzLjV0Mjc1IDIwNS41dDM5MS41IDEwOHYtMTcycS0yMTcgLTM4IC0zNTYuNSAtMTUwdC0xMzkuNSAtMjU1cTAgLTE1MiAxNTQuNSAtMjY3dDM4OC41IC0xNDV2MTM2MHpNMTc1NSA5NTRsMzcgLTM5MGwtNTI1IDExNGwxNDcgODNxLTExOSA3MCAtMjgwIDk5djE3MnEyNzcgLTMzIDQ4MSAtMTU3eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfMzg3IiB1bmljb2RlPSImI3hmMTljOyIgaG9yaXotYWR2LXg9IjIwNDgiIApkPSJNOTYwIDE1MzZsOTYwIC0zODR2LTEyOGgtMTI4cTAgLTI2IC0yMC41IC00NXQtNDguNSAtMTloLTE1MjZxLTI4IDAgLTQ4LjUgMTl0LTIwLjUgNDVoLTEyOHYxMjh6TTI1NiA4OTZoMjU2di03NjhoMTI4djc2OGgyNTZ2LTc2OGgxMjh2NzY4aDI1NnYtNzY4aDEyOHY3NjhoMjU2di03NjhoNTlxMjggMCA0OC41IC0xOXQyMC41IC00NXYtNjRoLTE2NjR2NjRxMCAyNiAyMC41IDQ1dDQ4LjUgMTloNTl2NzY4ek0xODUxIC02NApxMjggMCA0OC41IC0xOXQyMC41IC00NXYtMTI4aC0xOTIwdjEyOHEwIDI2IDIwLjUgNDV0NDguNSAxOWgxNzgyeiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfMzg4IiB1bmljb2RlPSImI3hmMTlkOyIgaG9yaXotYWR2LXg9IjIzMDQiIApkPSJNMTc3NCA3MDBsMTggLTMxNnE0IC02OSAtODIgLTEyOHQtMjM1IC05My41dC0zMjMgLTM0LjV0LTMyMyAzNC41dC0yMzUgOTMuNXQtODIgMTI4bDE4IDMxNmw1NzQgLTE4MXEyMiAtNyA0OCAtN3Q0OCA3ek0yMzA0IDEwMjRxMCAtMjMgLTIyIC0zMWwtMTEyMCAtMzUycS00IC0xIC0xMCAtMXQtMTAgMWwtNjUyIDIwNnEtNDMgLTM0IC03MSAtMTExLjV0LTM0IC0xNzguNXE2MyAtMzYgNjMgLTEwOXEwIC02OSAtNTggLTEwN2w1OCAtNDMzCnEyIC0xNCAtOCAtMjVxLTkgLTExIC0yNCAtMTFoLTE5MnEtMTUgMCAtMjQgMTFxLTEwIDExIC04IDI1bDU4IDQzM3EtNTggMzggLTU4IDEwN3EwIDczIDY1IDExMXExMSAyMDcgOTggMzMwbC0zMzMgMTA0cS0yMiA4IC0yMiAzMXQyMiAzMWwxMTIwIDM1MnE0IDEgMTAgMXQxMCAtMWwxMTIwIC0zNTJxMjIgLTggMjIgLTMxeiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfMzg5IiB1bmljb2RlPSImI3hmMTllOyIgCmQ9Ik04NTkgNTc5bDEzIC03MDdxLTYyIDExIC0xMDUgMTFxLTQxIDAgLTEwNSAtMTFsMTMgNzA3cS00MCA2OSAtMTY4LjUgMjk1LjV0LTIxNi41IDM3NC41dC0xODEgMjg3cTU4IC0xNSAxMDggLTE1cTQ0IDAgMTExIDE1cTYzIC0xMTEgMTMzLjUgLTIyOS41dDE2NyAtMjc2LjV0MTM4LjUgLTIyN3EzNyA2MSAxMDkuNSAxNzcuNXQxMTcuNSAxOTB0MTA1IDE3NnQxMDcgMTg5LjVxNTQgLTE0IDEwNyAtMTRxNTYgMCAxMTQgMTR2MApxLTI4IC0zOSAtNjAgLTg4LjV0LTQ5LjUgLTc4LjV0LTU2LjUgLTk2dC00OSAtODRxLTE0NiAtMjQ4IC0zNTMgLTYxMHoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idW5pRjFBMCIgdW5pY29kZT0iJiN4ZjFhMDsiIApkPSJNNzY4IDc1MGg3MjVxMTIgLTY3IDEyIC0xMjhxMCAtMjE3IC05MSAtMzg3LjV0LTI1OS41IC0yNjYuNXQtMzg2LjUgLTk2cS0xNTcgMCAtMjk5IDYwLjV0LTI0NSAxNjMuNXQtMTYzLjUgMjQ1dC02MC41IDI5OXQ2MC41IDI5OXQxNjMuNSAyNDV0MjQ1IDE2My41dDI5OSA2MC41cTMwMCAwIDUxNSAtMjAxbC0yMDkgLTIwMXEtMTIzIDExOSAtMzA2IDExOXEtMTI5IDAgLTIzOC41IC02NXQtMTczLjUgLTE3Ni41dC02NCAtMjQzLjUKdDY0IC0yNDMuNXQxNzMuNSAtMTc2LjV0MjM4LjUgLTY1cTg3IDAgMTYwIDI0dDEyMCA2MHQ4MiA4MnQ1MS41IDg3dDIyLjUgNzhoLTQzNnYyNjR6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9ImYxYTEiIHVuaWNvZGU9IiYjeGYxYTE7IiBob3Jpei1hZHYteD0iMTc5MiIgCmQ9Ik0xMDk1IDM2OXExNiAtMTYgMCAtMzFxLTYyIC02MiAtMTk5IC02MnQtMTk5IDYycS0xNiAxNSAwIDMxcTYgNiAxNSA2dDE1IC02cTQ4IC00OSAxNjkgLTQ5cTEyMCAwIDE2OSA0OXE2IDYgMTUgNnQxNSAtNnpNNzg4IDU1MHEwIC0zNyAtMjYgLTYzdC02MyAtMjZ0LTYzLjUgMjZ0LTI2LjUgNjNxMCAzOCAyNi41IDY0dDYzLjUgMjZ0NjMgLTI2LjV0MjYgLTYzLjV6TTExODMgNTUwcTAgLTM3IC0yNi41IC02M3QtNjMuNSAtMjZ0LTYzIDI2CnQtMjYgNjN0MjYgNjMuNXQ2MyAyNi41dDYzLjUgLTI2dDI2LjUgLTY0ek0xNDM0IDY3MHEwIDQ5IC0zNSA4NHQtODUgMzV0LTg2IC0zNnEtMTMwIDkwIC0zMTEgOTZsNjMgMjgzbDIwMCAtNDVxMCAtMzcgMjYgLTYzdDYzIC0yNnQ2My41IDI2LjV0MjYuNSA2My41dC0yNi41IDYzLjV0LTYzLjUgMjYuNXEtNTQgMCAtODAgLTUwbC0yMjEgNDlxLTE5IDUgLTI1IC0xNmwtNjkgLTMxMnEtMTgwIC03IC0zMDkgLTk3cS0zNSAzNyAtODcgMzcKcS01MCAwIC04NSAtMzV0LTM1IC04NHEwIC0zNSAxOC41IC02NHQ0OS41IC00NHEtNiAtMjcgLTYgLTU2cTAgLTE0MiAxNDAgLTI0M3QzMzcgLTEwMXExOTggMCAzMzggMTAxdDE0MCAyNDNxMCAzMiAtNyA1N3EzMCAxNSA0OCA0My41dDE4IDYzLjV6TTE3OTIgNjQwcTAgLTE4MiAtNzEgLTM0OHQtMTkxIC0yODZ0LTI4NiAtMTkxdC0zNDggLTcxdC0zNDggNzF0LTI4NiAxOTF0LTE5MSAyODZ0LTcxIDM0OHQ3MSAzNDh0MTkxIDI4NnQyODYgMTkxCnQzNDggNzF0MzQ4IC03MXQyODYgLTE5MXQxOTEgLTI4NnQ3MSAtMzQ4eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfMzkyIiB1bmljb2RlPSImI3hmMWEyOyIgCmQ9Ik05MzkgNDA3cTEzIC0xMyAwIC0yNnEtNTMgLTUzIC0xNzEgLTUzdC0xNzEgNTNxLTEzIDEzIDAgMjZxNSA2IDEzIDZ0MTMgLTZxNDIgLTQyIDE0NSAtNDJ0MTQ1IDQycTUgNiAxMyA2dDEzIC02ek02NzYgNTYzcTAgLTMxIC0yMyAtNTR0LTU0IC0yM3QtNTQgMjN0LTIzIDU0cTAgMzIgMjIuNSA1NC41dDU0LjUgMjIuNXQ1NC41IC0yMi41dDIyLjUgLTU0LjV6TTEwMTQgNTYzcTAgLTMxIC0yMyAtNTR0LTU0IC0yM3QtNTQgMjN0LTIzIDU0CnEwIDMyIDIyLjUgNTQuNXQ1NC41IDIyLjV0NTQuNSAtMjIuNXQyMi41IC01NC41ek0xMjI5IDY2NnEwIDQyIC0zMCA3MnQtNzMgMzBxLTQyIDAgLTczIC0zMXEtMTEzIDc4IC0yNjcgODJsNTQgMjQzbDE3MSAtMzlxMSAtMzIgMjMuNSAtNTR0NTMuNSAtMjJxMzIgMCA1NC41IDIyLjV0MjIuNSA1NC41dC0yMi41IDU0LjV0LTU0LjUgMjIuNXEtNDggMCAtNjkgLTQzbC0xODkgNDJxLTE3IDUgLTIxIC0xM2wtNjAgLTI2OHEtMTU0IC02IC0yNjUgLTgzCnEtMzAgMzIgLTc0IDMycS00MyAwIC03MyAtMzB0LTMwIC03MnEwIC0zMCAxNiAtNTV0NDIgLTM4cS01IC0yNSAtNSAtNDhxMCAtMTIyIDEyMCAtMjA4LjV0Mjg5IC04Ni41cTE3MCAwIDI5MCA4Ni41dDEyMCAyMDguNXEwIDI1IC02IDQ5cTI1IDEzIDQwLjUgMzcuNXQxNS41IDU0LjV6TTE1MzYgMTEyMHYtOTYwcTAgLTExOSAtODQuNSAtMjAzLjV0LTIwMy41IC04NC41aC05NjBxLTExOSAwIC0yMDMuNSA4NC41dC04NC41IDIwMy41djk2MApxMCAxMTkgODQuNSAyMDMuNXQyMDMuNSA4NC41aDk2MHExMTkgMCAyMDMuNSAtODQuNXQ4NC41IC0yMDMuNXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzM5MyIgdW5pY29kZT0iJiN4ZjFhMzsiIApkPSJNODY2IDY5N2w5MCAyN3Y2MnEwIDc5IC01OCAxMzV0LTEzOCA1NnQtMTM4IC01NS41dC01OCAtMTM0LjV2LTI4M3EwIC0yMCAtMTQgLTMzLjV0LTMzIC0xMy41dC0zMi41IDEzLjV0LTEzLjUgMzMuNXYxMjBoLTE1MXYtMTIycTAgLTgyIDU3LjUgLTEzOXQxMzkuNSAtNTdxODEgMCAxMzguNSA1Ni41dDU3LjUgMTM2LjV2MjgwcTAgMTkgMTMuNSAzM3QzMy41IDE0cTE5IDAgMzIuNSAtMTR0MTMuNSAtMzN2LTU0ek0xMTk5IDUwMnYxMjJoLTE1MAp2LTEyNnEwIC0yMCAtMTMuNSAtMzMuNXQtMzMuNSAtMTMuNXEtMTkgMCAtMzIuNSAxNHQtMTMuNSAzM3YxMjNsLTkwIC0yNmwtNjAgMjh2LTEyM3EwIC04MCA1OCAtMTM3dDEzOSAtNTd0MTM4LjUgNTd0NTcuNSAxMzl6TTE1MzYgNjQwcTAgLTIwOSAtMTAzIC0zODUuNXQtMjc5LjUgLTI3OS41dC0zODUuNSAtMTAzdC0zODUuNSAxMDN0LTI3OS41IDI3OS41dC0xMDMgMzg1LjV0MTAzIDM4NS41dDI3OS41IDI3OS41dDM4NS41IDEwMwp0Mzg1LjUgLTEwM3QyNzkuNSAtMjc5LjV0MTAzIC0zODUuNXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iZjFhNCIgdW5pY29kZT0iJiN4ZjFhNDsiIGhvcml6LWFkdi14PSIxOTIwIiAKZD0iTTEwNjIgODI0djExOHEwIDQyIC0zMCA3MnQtNzIgMzB0LTcyIC0zMHQtMzAgLTcydi02MTJxMCAtMTc1IC0xMjYgLTI5OXQtMzAzIC0xMjRxLTE3OCAwIC0zMDMuNSAxMjUuNXQtMTI1LjUgMzAzLjV2MjY2aDMyOHYtMjYycTAgLTQzIDMwIC03Mi41dDcyIC0yOS41dDcyIDI5LjV0MzAgNzIuNXY2MjBxMCAxNzEgMTI2LjUgMjkydDMwMS41IDEyMXExNzYgMCAzMDIgLTEyMnQxMjYgLTI5NHYtMTM2bC0xOTUgLTU4ek0xNTkyIDYwMmgzMjgKdi0yNjZxMCAtMTc4IC0xMjUuNSAtMzAzLjV0LTMwMy41IC0xMjUuNXEtMTc3IDAgLTMwMyAxMjQuNXQtMTI2IDMwMC41djI2OGwxMzEgLTYxbDE5NSA1OHYtMjcwcTAgLTQyIDMwIC03MS41dDcyIC0yOS41dDcyIDI5LjV0MzAgNzEuNXYyNzV6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9Il8zOTUiIHVuaWNvZGU9IiYjeGYxYTU7IiAKZD0iTTE0NzIgMTYwdjQ4MGgtNzA0djcwNGgtNDgwcS05MyAwIC0xNTguNSAtNjUuNXQtNjUuNSAtMTU4LjV2LTQ4MGg3MDR2LTcwNGg0ODBxOTMgMCAxNTguNSA2NS41dDY1LjUgMTU4LjV6TTE1MzYgMTEyMHYtOTYwcTAgLTExOSAtODQuNSAtMjAzLjV0LTIwMy41IC04NC41aC05NjBxLTExOSAwIC0yMDMuNSA4NC41dC04NC41IDIwMy41djk2MHEwIDExOSA4NC41IDIwMy41dDIwMy41IDg0LjVoOTYwcTExOSAwIDIwMy41IC04NC41CnQ4NC41IC0yMDMuNXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzM5NiIgdW5pY29kZT0iJiN4ZjFhNjsiIGhvcml6LWFkdi14PSIyMDQ4IiAKZD0iTTMyOCAxMjU0aDIwNHYtOTgzaC01MzJ2Njk3aDMyOHYyODZ6TTMyOCA0MzV2MzY5aC0xMjN2LTM2OWgxMjN6TTYxNCA5Njh2LTY5N2gyMDV2Njk3aC0yMDV6TTYxNCAxMjU0di0yMDRoMjA1djIwNGgtMjA1ek05MDEgOTY4aDUzM3YtOTQyaC01MzN2MTYzaDMyOHY4MmgtMzI4djY5N3pNMTIyOSA0MzV2MzY5aC0xMjN2LTM2OWgxMjN6TTE1MTYgOTY4aDUzMnYtOTQyaC01MzJ2MTYzaDMyN3Y4MmgtMzI3djY5N3pNMTg0MyA0MzV2MzY5aC0xMjMKdi0zNjloMTIzeiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfMzk3IiB1bmljb2RlPSImI3hmMWE3OyIgCmQ9Ik0xMDQ2IDUxNnEwIC02NCAtMzggLTEwOXQtOTEgLTQ1cS00MyAwIC03MCAxNXYyNzdxMjggMTcgNzAgMTdxNTMgMCA5MSAtNDUuNXQzOCAtMTA5LjV6TTcwMyA5NDRxMCAtNjQgLTM4IC0xMDkuNXQtOTEgLTQ1LjVxLTQzIDAgLTcwIDE1djI3N3EyOCAxNyA3MCAxN3E1MyAwIDkxIC00NXQzOCAtMTA5ek0xMjY1IDUxM3EwIDEzNCAtODggMjI5dC0yMTMgOTVxLTIwIDAgLTM5IC0zcS0yMyAtNzggLTc4IC0xMzZxLTg3IC05NSAtMjExIC0xMDEKdi02MzZsMjExIDQxdjIwNnE1MSAtMTkgMTE3IC0xOXExMjUgMCAyMTMgOTV0ODggMjI5ek05MjIgOTQwcTAgMTM0IC04OC41IDIyOXQtMjEzLjUgOTVxLTc0IDAgLTE0MSAtMzZoLTE4NnYtODQwbDIxMSA0MXYyMDZxNTUgLTE5IDExNiAtMTlxMTI1IDAgMjEzLjUgOTV0ODguNSAyMjl6TTE1MzYgMTEyMHYtOTYwcTAgLTExOSAtODQuNSAtMjAzLjV0LTIwMy41IC04NC41aC05NjBxLTExOSAwIC0yMDMuNSA4NC41dC04NC41IDIwMy41djk2MApxMCAxMTkgODQuNSAyMDMuNXQyMDMuNSA4NC41aDk2MHExMTkgMCAyMDMuNSAtODQuNXQ4NC41IC0yMDMuNXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzM5OCIgdW5pY29kZT0iJiN4ZjFhODsiIGhvcml6LWFkdi14PSIyMDM4IiAKZD0iTTEyMjIgNjA3cTc1IDMgMTQzLjUgLTIwLjV0MTE4IC01OC41dDEwMSAtOTQuNXQ4NCAtMTA4dDc1LjUgLTEyMC41cTMzIC01NiA3OC41IC0xMDl0NzUuNSAtODAuNXQ5OSAtODguNXEtNDggLTMwIC0xMDguNSAtNTcuNXQtMTM4LjUgLTU5dC0xMTQgLTQ3LjVxLTQ0IDM3IC03NCAxMTV0LTQzLjUgMTY0LjV0LTMzIDE4MC41dC00Mi41IDE2OC41dC03Mi41IDEyM3QtMTIyLjUgNDguNWwtMTAgLTJsLTYgLTRxNCAtNSAxMyAtMTQKcTYgLTUgMjggLTIzLjV0MjUuNSAtMjJ0MTkgLTE4dDE4IC0yMC41dDExLjUgLTIxdDEwLjUgLTI3LjV0NC41IC0zMXQ0IC00MC41bDEgLTMzcTEgLTI2IC0yLjUgLTU3LjV0LTcuNSAtNTJ0LTEyLjUgLTU4LjV0LTExLjUgLTUzcS0zNSAxIC0xMDEgLTkuNXQtOTggLTEwLjVxLTM5IDAgLTcyIDEwcS0yIDE2IC0yIDQ3cTAgNzQgMyA5NnEyIDEzIDMxLjUgNDEuNXQ1NyA1OXQyNi41IDUxLjVxLTI0IDIgLTQzIC0yNApxLTM2IC01MyAtMTExLjUgLTk5LjV0LTEzNi41IC00Ni41cS0yNSAwIC03NS41IDYzdC0xMDYuNSAxMzkuNXQtODQgOTYuNXEtNiA0IC0yNyAzMHEtNDgyIC0xMTIgLTUxMyAtMTEycS0xNiAwIC0yOCAxMXQtMTIgMjdxMCAxNSA4LjUgMjYuNXQyMi41IDE0LjVsNDg2IDEwNnEtOCAxNCAtOCAyNXQ1LjUgMTcuNXQxNiAxMS41dDIwIDd0MjMgNC41dDE4LjUgNC41cTQgMSAxNS41IDcuNXQxNy41IDYuNXExNSAwIDI4IC0xNnQyMCAtMzMKcTE2MyAzNyAxNzIgMzdxMTcgMCAyOS41IC0xMXQxMi41IC0yOHEwIC0xNSAtOC41IC0yNnQtMjMuNSAtMTRsLTE4MiAtNDBsLTEgLTE2cS0xIC0yNiA4MS41IC0xMTcuNXQxMDQuNSAtOTEuNXE0NyAwIDExOSA4MHQ3MiAxMjlxMCAzNiAtMjMuNSA1M3QtNTEgMTguNXQtNTEgMTEuNXQtMjMuNSAzNHEwIDE2IDEwIDM0bC02OCAxOXE0MyA0NCA0MyAxMTdxMCAyNiAtNSA1OHE4MiAxNiAxNDQgMTZxNDQgMCA3MS41IC0xLjV0NDguNSAtOC41CnQzMSAtMTMuNXQyMC41IC0yNC41dDE1LjUgLTMzLjV0MTcgLTQ3LjV0MjQgLTYwbDUwIDI1cS0zIC00MCAtMjMgLTYwdC00Mi41IC0yMXQtNDAgLTYuNXQtMTYuNSAtMjAuNXpNMTI4MiA4NDJxLTUgNSAtMTMuNSAxNS41dC0xMiAxNC41dC0xMC41IDExLjV0LTEwIDEwLjVsLTggOHQtOC41IDcuNXQtOCA1dC04LjUgNC41cS03IDMgLTE0LjUgNXQtMjAuNSAyLjV0LTIyIDAuNWgtMzIuNWgtMzcuNXEtMTI2IDAgLTIxNyAtNDMKcTE2IDMwIDM2IDQ2LjV0NTQgMjkuNXQ2NS41IDM2dDQ2IDM2LjV0NTAgNTV0NDMuNSA1MC41cTEyIC05IDI4IC0zMS41dDMyIC0zNi41dDM4IC0xM2wxMiAxdi03NmwyMiAtMXEyNDcgOTUgMzcxIDE5MHEyOCAyMSA1MCAzOXQ0Mi41IDM3LjV0MzMgMzF0MjkuNSAzNHQyNCAzMXQyNC41IDM3dDIzIDM4dDI3IDQ3LjV0MjkuNSA1M2w3IDlxLTIgLTUzIC00MyAtMTM5cS03OSAtMTY1IC0yMDUgLTI2NHQtMzA2IC0xNDJxLTE0IC0zIC00MiAtNy41CnQtNTAgLTkuNXQtMzkgLTE0cTMgLTE5IDI0LjUgLTQ2dDIxLjUgLTM0cTAgLTExIC0yNiAtMzB6TTEwNjEgLTc5cTM5IDI2IDEzMS41IDQ3LjV0MTQ2LjUgMjEuNXE5IDAgMjIuNSAtMTUuNXQyOCAtNDIuNXQyNiAtNTB0MjQgLTUxdDE0LjUgLTMzcS0xMjEgLTQ1IC0yNDQgLTQ1cS02MSAwIC0xMjUgMTF6TTgyMiA1NjhsNDggMTJsMTA5IC0xNzdsLTczIC00OHpNMTMyMyA1MXEzIC0xNSAzIC0xNnEwIC03IC0xNy41IC0xNC41dC00NiAtMTMKdC01NCAtOS41dC01My41IC03LjV0LTMyIC00LjVsLTcgNDNxMjEgMiA2MC41IDguNXQ3MiAxMHQ2MC41IDMuNWgxNHpNODY2IDY3OWwtOTYgLTIwbC02IDE3cTEwIDEgMzIuNSA3dDM0LjUgNnExOSAwIDM1IC0xMHpNMTA2MSA0NWgzMWwxMCAtODNsLTQxIC0xMnY5NXpNMTk1MCAxNTM1djF2LTF6TTE5NTAgMTUzNWwtMSAtNWwtMiAtMmwxIDN6TTE5NTAgMTUzNWwxIDF6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9Il8zOTkiIHVuaWNvZGU9IiYjeGYxYTk7IiAKZD0iTTExNjcgLTUwcS01IDE5IC0yNCA1cS0zMCAtMjIgLTg3IC0zOXQtMTMxIC0xN3EtMTI5IDAgLTE5MyA0OXEtNSA0IC0xMyA0cS0xMSAwIC0yNiAtMTJxLTcgLTYgLTcuNSAtMTZ0Ny41IC0yMHEzNCAtMzIgODcuNSAtNDZ0MTAyLjUgLTEyLjV0OTkgNC41cTQxIDQgODQuNSAyMC41dDY1IDMwdDI4LjUgMjAuNXExMiAxMiA3IDI5ek0xMTI4IDY1cS0xOSA0NyAtMzkgNjFxLTIzIDE1IC03NiAxNXEtNDcgMCAtNzEgLTEwCnEtMjkgLTEyIC03OCAtNTZxLTI2IC0yNCAtMTIgLTQ0cTkgLTggMTcuNSAtNC41dDMxLjUgMjMuNXEzIDIgMTAuNSA4LjV0MTAuNSA4LjV0MTAgN3QxMS41IDd0MTIuNSA1dDE1IDQuNXQxNi41IDIuNXQyMC41IDFxMjcgMCA0NC41IC03LjV0MjMgLTE0LjV0MTMuNSAtMjJxMTAgLTE3IDEyLjUgLTIwdDEyLjUgMXEyMyAxMiAxNCAzNHpNMTQ4MyAzNDZxMCAyMiAtNSA0NC41dC0xNi41IDQ1dC0zNCAzNi41dC01Mi41IDE0CnEtMzMgMCAtOTcgLTQxLjV0LTEyOSAtODMuNXQtMTAxIC00MnEtMjcgLTEgLTYzLjUgMTl0LTc2IDQ5dC04My41IDU4dC0xMDAgNDl0LTExMSAxOXEtMTE1IC0xIC0xOTcgLTc4LjV0LTg0IC0xNzguNXEtMiAtMTEyIDc0IC0xNjRxMjkgLTIwIDYyLjUgLTI4LjV0MTAzLjUgLTguNXE1NyAwIDEzMiAzMi41dDEzNCA3MXQxMjAgNzAuNXQ5MyAzMXEyNiAtMSA2NSAtMzEuNXQ3MS41IC02N3Q2OCAtNjcuNXQ1NS41IC0zMnEzNSAtMyA1OC41IDE0CnQ1NS41IDYzcTI4IDQxIDQyLjUgMTAxdDE0LjUgMTA2ek0xNTM2IDUwNnEwIC0xNjQgLTYyIC0zMDQuNXQtMTY2IC0yMzZ0LTI0Mi41IC0xNDkuNXQtMjkwLjUgLTU0dC0yOTMgNTcuNXQtMjQ3LjUgMTU3dC0xNzAuNSAyNDEuNXQtNjQgMzAycTAgODkgMTkuNSAxNzIuNXQ0OSAxNDUuNXQ3MC41IDExOC41dDc4LjUgOTR0NzguNSA2OS41dDY0LjUgNDYuNXQ0Mi41IDI0LjVxMTQgOCA1MSAyNi41dDU0LjUgMjguNXQ0OCAzMHQ2MC41IDQ0CnEzNiAyOCA1OCA3Mi41dDMwIDEyNS41cTEyOSAtMTU1IDE4NiAtMTkzcTQ0IC0yOSAxMzAgLTY4dDEyOSAtNjZxMjEgLTEzIDM5IC0yNXQ2MC41IC00Ni41dDc2IC03MC41dDc1IC05NXQ2OSAtMTIydDQ3IC0xNDguNXQxOS41IC0xNzcuNXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzQwMCIgdW5pY29kZT0iJiN4ZjFhYTsiIApkPSJNMTA3MCA0NjNsLTE2MCAtMTYwbC0xNTEgLTE1MmwtMzAgLTMwcS02NSAtNjQgLTE1MS41IC04N3QtMTcxLjUgLTJxLTE2IC03MCAtNzIgLTExNXQtMTI5IC00NXEtODUgMCAtMTQ1IDYwLjV0LTYwIDE0NS41cTAgNzIgNDQuNSAxMjh0MTEzLjUgNzJxLTIyIDg2IDEgMTczdDg4IDE1MmwxMiAxMmwxNTEgLTE1MmwtMTEgLTExcS0zNyAtMzcgLTM3IC04OXQzNyAtOTBxMzcgLTM3IDg5IC0zN3Q4OSAzN2wzMCAzMGwxNTEgMTUybDE2MSAxNjB6Ck03MjkgMTE0NWwxMiAtMTJsLTE1MiAtMTUybC0xMiAxMnEtMzcgMzcgLTg5IDM3dC04OSAtMzd0LTM3IC04OS41dDM3IC04OS41bDI5IC0yOWwxNTIgLTE1MmwxNjAgLTE2MGwtMTUxIC0xNTJsLTE2MSAxNjBsLTE1MSAxNTJsLTMwIDMwcS02OCA2NyAtOTAgMTU5LjV0NSAxNzkuNXEtNzAgMTUgLTExNSA3MXQtNDUgMTI5cTAgODUgNjAgMTQ1LjV0MTQ1IDYwLjVxNzYgMCAxMzMuNSAtNDl0NjkuNSAtMTIzcTg0IDIwIDE2OS41IC0zLjUKdDE0OS41IC04Ny41ek0xNTM2IDc4cTAgLTg1IC02MCAtMTQ1LjV0LTE0NSAtNjAuNXEtNzQgMCAtMTMxIDQ3dC03MSAxMThxLTg2IC0yOCAtMTc5LjUgLTZ0LTE2MS41IDkwbC0xMSAxMmwxNTEgMTUybDEyIC0xMnEzNyAtMzcgODkgLTM3dDg5IDM3dDM3IDg5dC0zNyA4OWwtMzAgMzBsLTE1MiAxNTJsLTE2MCAxNjBsMTUyIDE1MmwxNjAgLTE2MGwxNTIgLTE1MmwyOSAtMzBxNjQgLTY0IDg3LjUgLTE1MC41dDIuNSAtMTcxLjUKcTc2IC0xMSAxMjYuNSAtNjguNXQ1MC41IC0xMzQuNXpNMTUzNCAxMjAycTAgLTc3IC01MSAtMTM1dC0xMjcgLTY5cTI2IC04NSAzIC0xNzYuNXQtOTAgLTE1OC41bC0xMiAtMTJsLTE1MSAxNTJsMTIgMTJxMzcgMzcgMzcgODl0LTM3IDg5dC04OSAzN3QtODkgLTM3bC0zMCAtMzBsLTE1MiAtMTUybC0xNjAgLTE2MGwtMTUyIDE1MmwxNjEgMTYwbDE1MiAxNTJsMjkgMzBxNjcgNjcgMTU5IDg5LjV0MTc4IC0zLjVxMTEgNzUgNjguNSAxMjYKdDEzNS41IDUxcTg1IDAgMTQ1IC02MC41dDYwIC0xNDUuNXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iZjFhYiIgdW5pY29kZT0iJiN4ZjFhYjsiIApkPSJNNjU0IDQ1OHEtMSAtMyAtMTIuNSAwLjV0LTMxLjUgMTEuNWwtMjAgOXEtNDQgMjAgLTg3IDQ5cS03IDUgLTQxIDMxLjV0LTM4IDI4LjVxLTY3IC0xMDMgLTEzNCAtMTgxcS04MSAtOTUgLTEwNSAtMTEwcS00IC0yIC0xOS41IC00dC0xOC41IDBxNiA0IDgyIDkycTIxIDI0IDg1LjUgMTE1dDc4LjUgMTE4cTE3IDMwIDUxIDk4LjV0MzYgNzcuNXEtOCAxIC0xMTAgLTMzcS04IC0yIC0yNy41IC03LjV0LTM0LjUgLTkuNXQtMTcgLTUKcS0yIC0yIC0yIC0xMC41dC0xIC05LjVxLTUgLTEwIC0zMSAtMTVxLTIzIC03IC00NyAwcS0xOCA0IC0yOCAyMXEtNCA2IC01IDIzcTYgMiAyNC41IDV0MjkuNSA2cTU4IDE2IDEwNSAzMnExMDAgMzUgMTAyIDM1cTEwIDIgNDMgMTkuNXQ0NCAyMS41cTkgMyAyMS41IDh0MTQuNSA1LjV0NiAtMC41cTIgLTEyIC0xIC0zM3EwIC0yIC0xMi41IC0yN3QtMjYuNSAtNTMuNXQtMTcgLTMzLjVxLTI1IC01MCAtNzcgLTEzMWw2NCAtMjgKcTEyIC02IDc0LjUgLTMydDY3LjUgLTI4cTQgLTEgMTAuNSAtMjUuNXQ0LjUgLTMwLjV6TTQ0OSA5NDRxMyAtMTUgLTQgLTI4cS0xMiAtMjMgLTUwIC0zOHEtMzAgLTEyIC02MCAtMTJxLTI2IDMgLTQ5IDI2cS0xNCAxNSAtMTggNDFsMSAzcTMgLTMgMTkuNSAtNXQyNi41IDB0NTggMTZxMzYgMTIgNTUgMTRxMTcgMCAyMSAtMTd6TTExNDcgODE1bDYzIC0yMjdsLTEzOSA0MnpNMzkgMTVsNjk0IDIzMnYxMDMybC02OTQgLTIzM3YtMTAzMXoKTTEyODAgMzMybDEwMiAtMzFsLTE4MSA2NTdsLTEwMCAzMWwtMjE2IC01MzZsMTAyIC0zMWw0NSAxMTBsMjExIC02NXpNNzc3IDEyOTRsNTczIC0xODR2Mzgwek0xMDg4IC0yOWwxNTggLTEzbC01NCAtMTYwbC00MCA2NnEtMTMwIC04MyAtMjc2IC0xMDhxLTU4IC0xMiAtOTEgLTEyaC04NHEtNzkgMCAtMTk5LjUgMzl0LTE4My41IDg1cS04IDcgLTggMTZxMCA4IDUgMTMuNXQxMyA1LjVxNCAwIDE4IC03LjV0MzAuNSAtMTYuNXQyMC41IC0xMQpxNzMgLTM3IDE1OS41IC02MS41dDE1Ny41IC0yNC41cTk1IDAgMTY3IDE0LjV0MTU3IDUwLjVxMTUgNyAzMC41IDE1LjV0MzQgMTl0MjguNSAxNi41ek0xNTM2IDEwNTB2LTEwNzlsLTc3NCAyNDZxLTE0IC02IC0zNzUgLTEyNy41dC0zNjggLTEyMS41cS0xMyAwIC0xOCAxM3EwIDEgLTEgM3YxMDc4cTMgOSA0IDEwcTUgNiAyMCAxMXExMDcgMzYgMTQ5IDUwdjM4NGw1NTggLTE5OHEyIDAgMTYwLjUgNTV0MzE2IDEwOC41dDE2MS41IDUzLjUKcTIwIDAgMjAgLTIxdi00MTh6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9Il80MDIiIHVuaWNvZGU9IiYjeGYxYWM7IiBob3Jpei1hZHYteD0iMTc5MiIgCmQ9Ik0yODggMTE1MnE2NiAwIDExMyAtNDd0NDcgLTExM3YtMTA4OHEwIC02NiAtNDcgLTExM3QtMTEzIC00N2gtMTI4cS02NiAwIC0xMTMgNDd0LTQ3IDExM3YxMDg4cTAgNjYgNDcgMTEzdDExMyA0N2gxMjh6TTE2NjQgOTg5cTU4IC0zNCA5MyAtOTN0MzUgLTEyOHYtNzY4cTAgLTEwNiAtNzUgLTE4MXQtMTgxIC03NWgtODY0cS02NiAwIC0xMTMgNDd0LTQ3IDExM3YxNTM2cTAgNDAgMjggNjh0NjggMjhoNjcycTQwIDAgODggLTIwdDc2IC00OApsMTUyIC0xNTJxMjggLTI4IDQ4IC03NnQyMCAtODh2LTE2M3pNOTI4IDB2MTI4cTAgMTQgLTkgMjN0LTIzIDloLTEyOHEtMTQgMCAtMjMgLTl0LTkgLTIzdi0xMjhxMCAtMTQgOSAtMjN0MjMgLTloMTI4cTE0IDAgMjMgOXQ5IDIzek05MjggMjU2djEyOHEwIDE0IC05IDIzdC0yMyA5aC0xMjhxLTE0IDAgLTIzIC05dC05IC0yM3YtMTI4cTAgLTE0IDkgLTIzdDIzIC05aDEyOHExNCAwIDIzIDl0OSAyM3pNOTI4IDUxMnYxMjhxMCAxNCAtOSAyMwp0LTIzIDloLTEyOHEtMTQgMCAtMjMgLTl0LTkgLTIzdi0xMjhxMCAtMTQgOSAtMjN0MjMgLTloMTI4cTE0IDAgMjMgOXQ5IDIzek0xMTg0IDB2MTI4cTAgMTQgLTkgMjN0LTIzIDloLTEyOHEtMTQgMCAtMjMgLTl0LTkgLTIzdi0xMjhxMCAtMTQgOSAtMjN0MjMgLTloMTI4cTE0IDAgMjMgOXQ5IDIzek0xMTg0IDI1NnYxMjhxMCAxNCAtOSAyM3QtMjMgOWgtMTI4cS0xNCAwIC0yMyAtOXQtOSAtMjN2LTEyOHEwIC0xNCA5IC0yM3QyMyAtOWgxMjgKcTE0IDAgMjMgOXQ5IDIzek0xMTg0IDUxMnYxMjhxMCAxNCAtOSAyM3QtMjMgOWgtMTI4cS0xNCAwIC0yMyAtOXQtOSAtMjN2LTEyOHEwIC0xNCA5IC0yM3QyMyAtOWgxMjhxMTQgMCAyMyA5dDkgMjN6TTE0NDAgMHYxMjhxMCAxNCAtOSAyM3QtMjMgOWgtMTI4cS0xNCAwIC0yMyAtOXQtOSAtMjN2LTEyOHEwIC0xNCA5IC0yM3QyMyAtOWgxMjhxMTQgMCAyMyA5dDkgMjN6TTE0NDAgMjU2djEyOHEwIDE0IC05IDIzdC0yMyA5aC0xMjgKcS0xNCAwIC0yMyAtOXQtOSAtMjN2LTEyOHEwIC0xNCA5IC0yM3QyMyAtOWgxMjhxMTQgMCAyMyA5dDkgMjN6TTE0NDAgNTEydjEyOHEwIDE0IC05IDIzdC0yMyA5aC0xMjhxLTE0IDAgLTIzIC05dC05IC0yM3YtMTI4cTAgLTE0IDkgLTIzdDIzIC05aDEyOHExNCAwIDIzIDl0OSAyM3pNMTUzNiA4OTZ2MjU2aC0xNjBxLTQwIDAgLTY4IDI4dC0yOCA2OHYxNjBoLTY0MHYtNTEyaDg5NnoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzQwMyIgdW5pY29kZT0iJiN4ZjFhZDsiIApkPSJNMTM0NCAxNTM2cTI2IDAgNDUgLTE5dDE5IC00NXYtMTY2NHEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTEyODBxLTI2IDAgLTQ1IDE5dC0xOSA0NXYxNjY0cTAgMjYgMTkgNDV0NDUgMTloMTI4MHpNNTEyIDEyNDh2LTY0cTAgLTE0IDkgLTIzdDIzIC05aDY0cTE0IDAgMjMgOXQ5IDIzdjY0cTAgMTQgLTkgMjN0LTIzIDloLTY0cS0xNCAwIC0yMyAtOXQtOSAtMjN6TTUxMiA5OTJ2LTY0cTAgLTE0IDkgLTIzdDIzIC05aDY0cTE0IDAgMjMgOQp0OSAyM3Y2NHEwIDE0IC05IDIzdC0yMyA5aC02NHEtMTQgMCAtMjMgLTl0LTkgLTIzek01MTIgNzM2di02NHEwIC0xNCA5IC0yM3QyMyAtOWg2NHExNCAwIDIzIDl0OSAyM3Y2NHEwIDE0IC05IDIzdC0yMyA5aC02NHEtMTQgMCAtMjMgLTl0LTkgLTIzek01MTIgNDgwdi02NHEwIC0xNCA5IC0yM3QyMyAtOWg2NHExNCAwIDIzIDl0OSAyM3Y2NHEwIDE0IC05IDIzdC0yMyA5aC02NHEtMTQgMCAtMjMgLTl0LTkgLTIzek0zODQgMTYwdjY0CnEwIDE0IC05IDIzdC0yMyA5aC02NHEtMTQgMCAtMjMgLTl0LTkgLTIzdi02NHEwIC0xNCA5IC0yM3QyMyAtOWg2NHExNCAwIDIzIDl0OSAyM3pNMzg0IDQxNnY2NHEwIDE0IC05IDIzdC0yMyA5aC02NHEtMTQgMCAtMjMgLTl0LTkgLTIzdi02NHEwIC0xNCA5IC0yM3QyMyAtOWg2NHExNCAwIDIzIDl0OSAyM3pNMzg0IDY3MnY2NHEwIDE0IC05IDIzdC0yMyA5aC02NHEtMTQgMCAtMjMgLTl0LTkgLTIzdi02NHEwIC0xNCA5IC0yM3QyMyAtOWg2NApxMTQgMCAyMyA5dDkgMjN6TTM4NCA5Mjh2NjRxMCAxNCAtOSAyM3QtMjMgOWgtNjRxLTE0IDAgLTIzIC05dC05IC0yM3YtNjRxMCAtMTQgOSAtMjN0MjMgLTloNjRxMTQgMCAyMyA5dDkgMjN6TTM4NCAxMTg0djY0cTAgMTQgLTkgMjN0LTIzIDloLTY0cS0xNCAwIC0yMyAtOXQtOSAtMjN2LTY0cTAgLTE0IDkgLTIzdDIzIC05aDY0cTE0IDAgMjMgOXQ5IDIzek04OTYgLTk2djE5MnEwIDE0IC05IDIzdC0yMyA5aC0zMjBxLTE0IDAgLTIzIC05CnQtOSAtMjN2LTE5MnEwIC0xNCA5IC0yM3QyMyAtOWgzMjBxMTQgMCAyMyA5dDkgMjN6TTg5NiA0MTZ2NjRxMCAxNCAtOSAyM3QtMjMgOWgtNjRxLTE0IDAgLTIzIC05dC05IC0yM3YtNjRxMCAtMTQgOSAtMjN0MjMgLTloNjRxMTQgMCAyMyA5dDkgMjN6TTg5NiA2NzJ2NjRxMCAxNCAtOSAyM3QtMjMgOWgtNjRxLTE0IDAgLTIzIC05dC05IC0yM3YtNjRxMCAtMTQgOSAtMjN0MjMgLTloNjRxMTQgMCAyMyA5dDkgMjN6TTg5NiA5Mjh2NjQKcTAgMTQgLTkgMjN0LTIzIDloLTY0cS0xNCAwIC0yMyAtOXQtOSAtMjN2LTY0cTAgLTE0IDkgLTIzdDIzIC05aDY0cTE0IDAgMjMgOXQ5IDIzek04OTYgMTE4NHY2NHEwIDE0IC05IDIzdC0yMyA5aC02NHEtMTQgMCAtMjMgLTl0LTkgLTIzdi02NHEwIC0xNCA5IC0yM3QyMyAtOWg2NHExNCAwIDIzIDl0OSAyM3pNMTE1MiAxNjB2NjRxMCAxNCAtOSAyM3QtMjMgOWgtNjRxLTE0IDAgLTIzIC05dC05IC0yM3YtNjRxMCAtMTQgOSAtMjN0MjMgLTloNjQKcTE0IDAgMjMgOXQ5IDIzek0xMTUyIDQxNnY2NHEwIDE0IC05IDIzdC0yMyA5aC02NHEtMTQgMCAtMjMgLTl0LTkgLTIzdi02NHEwIC0xNCA5IC0yM3QyMyAtOWg2NHExNCAwIDIzIDl0OSAyM3pNMTE1MiA2NzJ2NjRxMCAxNCAtOSAyM3QtMjMgOWgtNjRxLTE0IDAgLTIzIC05dC05IC0yM3YtNjRxMCAtMTQgOSAtMjN0MjMgLTloNjRxMTQgMCAyMyA5dDkgMjN6TTExNTIgOTI4djY0cTAgMTQgLTkgMjN0LTIzIDloLTY0cS0xNCAwIC0yMyAtOQp0LTkgLTIzdi02NHEwIC0xNCA5IC0yM3QyMyAtOWg2NHExNCAwIDIzIDl0OSAyM3pNMTE1MiAxMTg0djY0cTAgMTQgLTkgMjN0LTIzIDloLTY0cS0xNCAwIC0yMyAtOXQtOSAtMjN2LTY0cTAgLTE0IDkgLTIzdDIzIC05aDY0cTE0IDAgMjMgOXQ5IDIzeiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNDA0IiB1bmljb2RlPSImI3hmMWFlOyIgaG9yaXotYWR2LXg9IjEyODAiIApkPSJNMTE4OCA5ODhsLTI5MiAtMjkydi04MjRxMCAtNDYgLTMzIC03OXQtNzkgLTMzdC03OSAzM3QtMzMgNzl2Mzg0aC02NHYtMzg0cTAgLTQ2IC0zMyAtNzl0LTc5IC0zM3QtNzkgMzN0LTMzIDc5djgyNGwtMjkyIDI5MnEtMjggMjggLTI4IDY4dDI4IDY4cTI5IDI4IDY4LjUgMjh0NjcuNSAtMjhsMjI4IC0yMjhoMzY4bDIyOCAyMjhxMjggMjggNjggMjh0NjggLTI4cTI4IC0yOSAyOCAtNjguNXQtMjggLTY3LjV6TTg2NCAxMTUyCnEwIC05MyAtNjUuNSAtMTU4LjV0LTE1OC41IC02NS41dC0xNTguNSA2NS41dC02NS41IDE1OC41dDY1LjUgMTU4LjV0MTU4LjUgNjUuNXQxNTguNSAtNjUuNXQ2NS41IC0xNTguNXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idW5pRjFCMSIgdW5pY29kZT0iJiN4ZjFiMDsiIGhvcml6LWFkdi14PSIxNjY0IiAKZD0iTTc4MCAxMDY0cTAgLTYwIC0xOSAtMTEzLjV0LTYzIC05Mi41dC0xMDUgLTM5cS03NiAwIC0xMzggNTcuNXQtOTIgMTM1LjV0LTMwIDE1MXEwIDYwIDE5IDExMy41dDYzIDkyLjV0MTA1IDM5cTc3IDAgMTM4LjUgLTU3LjV0OTEuNSAtMTM1dDMwIC0xNTEuNXpNNDM4IDU4MXEwIC04MCAtNDIgLTEzOXQtMTE5IC01OXEtNzYgMCAtMTQxLjUgNTUuNXQtMTAwLjUgMTMzLjV0LTM1IDE1MnEwIDgwIDQyIDEzOS41dDExOSA1OS41CnE3NiAwIDE0MS41IC01NS41dDEwMC41IC0xMzR0MzUgLTE1Mi41ek04MzIgNjA4cTExOCAwIDI1NSAtOTcuNXQyMjkgLTIzN3Q5MiAtMjU0LjVxMCAtNDYgLTE3IC03Ni41dC00OC41IC00NXQtNjQuNSAtMjB0LTc2IC01LjVxLTY4IDAgLTE4Ny41IDQ1dC0xODIuNSA0NXEtNjYgMCAtMTkyLjUgLTQ0LjV0LTIwMC41IC00NC41cS0xODMgMCAtMTgzIDE0NnEwIDg2IDU2IDE5MS41dDEzOS41IDE5Mi41dDE4Ny41IDE0NnQxOTMgNTl6TTEwNzEgODE5CnEtNjEgMCAtMTA1IDM5dC02MyA5Mi41dC0xOSAxMTMuNXEwIDc0IDMwIDE1MS41dDkxLjUgMTM1dDEzOC41IDU3LjVxNjEgMCAxMDUgLTM5dDYzIC05Mi41dDE5IC0xMTMuNXEwIC03MyAtMzAgLTE1MXQtOTIgLTEzNS41dC0xMzggLTU3LjV6TTE1MDMgOTIzcTc3IDAgMTE5IC01OS41dDQyIC0xMzkuNXEwIC03NCAtMzUgLTE1MnQtMTAwLjUgLTEzMy41dC0xNDEuNSAtNTUuNXEtNzcgMCAtMTE5IDU5dC00MiAxMzlxMCA3NCAzNSAxNTIuNQp0MTAwLjUgMTM0dDE0MS41IDU1LjV6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9Il80MDYiIHVuaWNvZGU9IiYjeGYxYjE7IiBob3Jpei1hZHYteD0iNzY4IiAKZD0iTTcwNCAxMDA4cTAgLTE0NSAtNTcgLTI0My41dC0xNTIgLTEzNS41bDQ1IC04MjFxMiAtMjYgLTE2IC00NXQtNDQgLTE5aC0xOTJxLTI2IDAgLTQ0IDE5dC0xNiA0NWw0NSA4MjFxLTk1IDM3IC0xNTIgMTM1LjV0LTU3IDI0My41cTAgMTI4IDQyLjUgMjQ5LjV0MTE3LjUgMjAwdDE2MCA3OC41dDE2MCAtNzguNXQxMTcuNSAtMjAwdDQyLjUgLTI0OS41eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNDA3IiB1bmljb2RlPSImI3hmMWIyOyIgaG9yaXotYWR2LXg9IjE3OTIiIApkPSJNODk2IC05M2w2NDAgMzQ5djYzNmwtNjQwIC0yMzN2LTc1MnpNODMyIDc3Mmw2OTggMjU0bC02OTggMjU0bC02OTggLTI1NHpNMTY2NCAxMDI0di03NjhxMCAtMzUgLTE4IC02NXQtNDkgLTQ3bC03MDQgLTM4NHEtMjggLTE2IC02MSAtMTZ0LTYxIDE2bC03MDQgMzg0cS0zMSAxNyAtNDkgNDd0LTE4IDY1djc2OHEwIDQwIDIzIDczdDYxIDQ3bDcwNCAyNTZxMjIgOCA0NCA4dDQ0IC04bDcwNCAtMjU2cTM4IC0xNCA2MSAtNDd0MjMgLTczegoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzQwOCIgdW5pY29kZT0iJiN4ZjFiMzsiIGhvcml6LWFkdi14PSIyMzA0IiAKZD0iTTY0MCAtOTZsMzg0IDE5MnYzMTRsLTM4NCAtMTY0di0zNDJ6TTU3NiAzNThsNDA0IDE3M2wtNDA0IDE3M2wtNDA0IC0xNzN6TTE2NjQgLTk2bDM4NCAxOTJ2MzE0bC0zODQgLTE2NHYtMzQyek0xNjAwIDM1OGw0MDQgMTczbC00MDQgMTczbC00MDQgLTE3M3pNMTE1MiA2NTFsMzg0IDE2NXYyNjZsLTM4NCAtMTY0di0yNjd6TTEwODggMTAzMGw0NDEgMTg5bC00NDEgMTg5bC00NDEgLTE4OXpNMjE3NiA1MTJ2LTQxNnEwIC0zNiAtMTkgLTY3CnQtNTIgLTQ3bC00NDggLTIyNHEtMjUgLTE0IC01NyAtMTR0LTU3IDE0bC00NDggMjI0cS00IDIgLTcgNHEtMiAtMiAtNyAtNGwtNDQ4IC0yMjRxLTI1IC0xNCAtNTcgLTE0dC01NyAxNGwtNDQ4IDIyNHEtMzMgMTYgLTUyIDQ3dC0xOSA2N3Y0MTZxMCAzOCAyMS41IDcwdDU2LjUgNDhsNDM0IDE4NnY0MDBxMCAzOCAyMS41IDcwdDU2LjUgNDhsNDQ4IDE5MnEyMyAxMCA1MCAxMHQ1MCAtMTBsNDQ4IC0xOTJxMzUgLTE2IDU2LjUgLTQ4dDIxLjUgLTcwCnYtNDAwbDQzNCAtMTg2cTM2IC0xNiA1NyAtNDh0MjEgLTcweiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNDA5IiB1bmljb2RlPSImI3hmMWI0OyIgaG9yaXotYWR2LXg9IjIwNDgiIApkPSJNMTg0OCAxMTk3aC01MTF2LTEyNGg1MTF2MTI0ek0xNTk2IDc3MXEtOTAgMCAtMTQ2IC01Mi41dC02MiAtMTQyLjVoNDA4cS0xOCAxOTUgLTIwMCAxOTV6TTE2MTIgMTg2cTYzIDAgMTIyIDMydDc2IDg3aDIyMXEtMTAwIC0zMDcgLTQyNyAtMzA3cS0yMTQgMCAtMzQwLjUgMTMydC0xMjYuNSAzNDdxMCAyMDggMTMwLjUgMzQ1LjV0MzM2LjUgMTM3LjVxMTM4IDAgMjQwLjUgLTY4dDE1MyAtMTc5dDUwLjUgLTI0OHEwIC0xNyAtMiAtNDdoLTY1OApxMCAtMTExIDU3LjUgLTE3MS41dDE2Ni41IC02MC41ek0yNzcgMjM2aDI5NnEyMDUgMCAyMDUgMTY3cTAgMTgwIC0xOTkgMTgwaC0zMDJ2LTM0N3pNMjc3IDc3M2gyODFxNzggMCAxMjMuNSAzNi41dDQ1LjUgMTEzLjVxMCAxNDQgLTE5MCAxNDRoLTI2MHYtMjk0ek0wIDEyODJoNTk0cTg3IDAgMTU1IC0xNHQxMjYuNSAtNDcuNXQ5MCAtOTYuNXQzMS41IC0xNTRxMCAtMTgxIC0xNzIgLTI2M3ExMTQgLTMyIDE3MiAtMTE1dDU4IC0yMDQKcTAgLTc1IC0yNC41IC0xMzYuNXQtNjYgLTEwMy41dC05OC41IC03MXQtMTIxIC00MnQtMTM0IC0xM2gtNjExdjEyNjB6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9Il80MTAiIHVuaWNvZGU9IiYjeGYxYjU7IiAKZD0iTTEyNDggMTQwOHExMTkgMCAyMDMuNSAtODQuNXQ4NC41IC0yMDMuNXYtOTYwcTAgLTExOSAtODQuNSAtMjAzLjV0LTIwMy41IC04NC41aC05NjBxLTExOSAwIC0yMDMuNSA4NC41dC04NC41IDIwMy41djk2MHEwIDExOSA4NC41IDIwMy41dDIwMy41IDg0LjVoOTYwek00OTkgMTA0MWgtMzcxdi03ODdoMzgycTExNyAwIDE5NyA1Ny41dDgwIDE3MC41cTAgMTU4IC0xNDMgMjAwcTEwNyA1MiAxMDcgMTY0cTAgNTcgLTE5LjUgOTYuNQp0LTU2LjUgNjAuNXQtNzkgMjkuNXQtOTcgOC41ek00NzcgNzIzaC0xNzZ2MTg0aDE2M3ExMTkgMCAxMTkgLTkwcTAgLTk0IC0xMDYgLTk0ek00ODYgMzg4aC0xODV2MjE3aDE4OXExMjQgMCAxMjQgLTExM3EwIC0xMDQgLTEyOCAtMTA0ek0xMTM2IDM1NnEtNjggMCAtMTA0IDM4dC0zNiAxMDdoNDExcTEgMTAgMSAzMHEwIDEzMiAtNzQuNSAyMjAuNXQtMjAzLjUgODguNXEtMTI4IDAgLTIxMCAtODZ0LTgyIC0yMTZxMCAtMTM1IDc5IC0yMTcKdDIxMyAtODJxMjA1IDAgMjY3IDE5MWgtMTM4cS0xMSAtMzQgLTQ3LjUgLTU0dC03NS41IC0yMHpNMTEyNiA3MjJxMTEzIDAgMTI0IC0xMjJoLTI1NHE0IDU2IDM5IDg5dDkxIDMzek05NjQgOTg4aDMxOXYtNzdoLTMxOXY3N3oiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzQxMSIgdW5pY29kZT0iJiN4ZjFiNjsiIGhvcml6LWFkdi14PSIxNzkyIiAKZD0iTTE1ODIgOTU0cTAgLTEwMSAtNzEuNSAtMTcyLjV0LTE3Mi41IC03MS41dC0xNzIuNSA3MS41dC03MS41IDE3Mi41dDcxLjUgMTcyLjV0MTcyLjUgNzEuNXQxNzIuNSAtNzEuNXQ3MS41IC0xNzIuNXpNODEyIDIxMnEwIDEwNCAtNzMgMTc3dC0xNzcgNzNxLTI3IDAgLTU0IC02bDEwNCAtNDJxNzcgLTMxIDEwOS41IC0xMDYuNXQxLjUgLTE1MS41cS0zMSAtNzcgLTEwNyAtMTA5dC0xNTIgLTFxLTIxIDggLTYyIDI0LjV0LTYxIDI0LjUKcTMyIC02MCA5MSAtOTYuNXQxMzAgLTM2LjVxMTA0IDAgMTc3IDczdDczIDE3N3pNMTY0MiA5NTNxMCAxMjYgLTg5LjUgMjE1LjV0LTIxNS41IDg5LjVxLTEyNyAwIC0yMTYuNSAtODkuNXQtODkuNSAtMjE1LjVxMCAtMTI3IDg5LjUgLTIxNnQyMTYuNSAtODlxMTI2IDAgMjE1LjUgODl0ODkuNSAyMTZ6TTE3OTIgOTUzcTAgLTE4OSAtMTMzLjUgLTMyMnQtMzIxLjUgLTEzM2wtNDM3IC0zMTlxLTEyIC0xMjkgLTEwOSAtMjE4dC0yMjkgLTg5CnEtMTIxIDAgLTIxNCA3NnQtMTE4IDE5MmwtMjMwIDkydjQyOWwzODkgLTE1N3E3OSA0OCAxNzMgNDhxMTMgMCAzNSAtMmwyODQgNDA3cTIgMTg3IDEzNS41IDMxOXQzMjAuNSAxMzJxMTg4IDAgMzIxLjUgLTEzMy41dDEzMy41IC0zMjEuNXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzQxMiIgdW5pY29kZT0iJiN4ZjFiNzsiIApkPSJNMTI0MiA4ODlxMCA4MCAtNTcgMTM2LjV0LTEzNyA1Ni41dC0xMzYuNSAtNTd0LTU2LjUgLTEzNnEwIC04MCA1Ni41IC0xMzYuNXQxMzYuNSAtNTYuNXQxMzcgNTYuNXQ1NyAxMzYuNXpNNjMyIDMwMXEwIC04MyAtNTggLTE0MC41dC0xNDAgLTU3LjVxLTU2IDAgLTEwMyAyOXQtNzIgNzdxNTIgLTIwIDk4IC00MHE2MCAtMjQgMTIwIDEuNXQ4NSA4Ni41cTI0IDYwIC0xLjUgMTIwdC04Ni41IDg0bC04MiAzM3EyMiA1IDQyIDUKcTgyIDAgMTQwIC01Ny41dDU4IC0xNDAuNXpNMTUzNiAxMTIwdi05NjBxMCAtMTE5IC04NC41IC0yMDMuNXQtMjAzLjUgLTg0LjVoLTk2MHEtMTE5IDAgLTIwMy41IDg0LjV0LTg0LjUgMjAzLjV2MTUzbDE3MiAtNjlxMjAgLTkyIDkzLjUgLTE1MnQxNjguNSAtNjBxMTA0IDAgMTgxIDcwdDg3IDE3M2wzNDUgMjUycTE1MCAwIDI1NS41IDEwNS41dDEwNS41IDI1NC41cTAgMTUwIC0xMDUuNSAyNTUuNXQtMjU1LjUgMTA1LjUKcS0xNDggMCAtMjUzIC0xMDQuNXQtMTA3IC0yNTIuNWwtMjI1IC0zMjJxLTkgMSAtMjggMXEtNzUgMCAtMTM3IC0zN2wtMjk3IDExOXY0NjhxMCAxMTkgODQuNSAyMDMuNXQyMDMuNSA4NC41aDk2MHExMTkgMCAyMDMuNSAtODQuNXQ4NC41IC0yMDMuNXpNMTI4OSA4ODdxMCAtMTAwIC03MSAtMTcwLjV0LTE3MSAtNzAuNXQtMTcwLjUgNzAuNXQtNzAuNSAxNzAuNXQ3MC41IDE3MXQxNzAuNSA3MXExMDEgMCAxNzEuNSAtNzAuNXQ3MC41IC0xNzEuNXoKIiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9Il80MTMiIHVuaWNvZGU9IiYjeGYxYjg7IiBob3Jpei1hZHYteD0iMTc5MiIgCmQ9Ik04MzYgMzY3bC0xNSAtMzY4bC0yIC0yMmwtNDIwIDI5cS0zNiAzIC02NyAzMS41dC00NyA2NS41cS0xMSAyNyAtMTQuNSA1NXQ0IDY1dDEyIDU1dDIxLjUgNjR0MTkgNTNxNzggLTEyIDUwOSAtMjh6TTQ0OSA5NTNsMTgwIC0zNzlsLTE0NyA5MnEtNjMgLTcyIC0xMTEuNSAtMTQ0LjV0LTcyLjUgLTEyNXQtMzkuNSAtOTQuNXQtMTguNSAtNjNsLTQgLTIxbC0xOTAgMzU3cS0xNyAyNiAtMTggNTZ0NiA0N2w4IDE4cTM1IDYzIDExNCAxODgKbC0xNDAgODZ6TTE2ODAgNDM2bC0xODggLTM1OXEtMTIgLTI5IC0zNi41IC00Ni41dC00My41IC0yMC41bC0xOCAtNHEtNzEgLTcgLTIxOSAtMTJsOCAtMTY0bC0yMzAgMzY3bDIxMSAzNjJsNyAtMTczcTE3MCAtMTYgMjgzIC01dDE3MCAzM3pNODk1IDEzNjBxLTQ3IC02MyAtMjY1IC00MzVsLTMxNyAxODdsLTE5IDEybDIyNSAzNTZxMjAgMzEgNjAgNDV0ODAgMTBxMjQgLTIgNDguNSAtMTJ0NDIgLTIxdDQxLjUgLTMzdDM2IC0zNC41CnQzNiAtMzkuNXQzMiAtMzV6TTE1NTAgMTA1M2wyMTIgLTM2M3ExOCAtMzcgMTIuNSAtNzZ0LTI3LjUgLTc0cS0xMyAtMjAgLTMzIC0zN3QtMzggLTI4dC00OC41IC0yMnQtNDcgLTE2dC01MS41IC0xNHQtNDYgLTEycS0zNCA3MiAtMjY1IDQzNmwzMTMgMTk1ek0xNDA3IDEyNzlsMTQyIDgzbC0yMjAgLTM3M2wtNDE5IDIwbDE1MSA4NnEtMzQgODkgLTc1IDE2NnQtNzUuNSAxMjMuNXQtNjQuNSA4MHQtNDcgNDYuNWwtMTcgMTNsNDA1IC0xCnEzMSAzIDU4IC0xMC41dDM5IC0yOC41bDExIC0xNXEzOSAtNjEgMTEyIC0xOTB6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9Il80MTQiIHVuaWNvZGU9IiYjeGYxYjk7IiBob3Jpei1hZHYteD0iMjA0OCIgCmQ9Ik00ODAgNDQ4cTAgNjYgLTQ3IDExM3QtMTEzIDQ3dC0xMTMgLTQ3dC00NyAtMTEzdDQ3IC0xMTN0MTEzIC00N3QxMTMgNDd0NDcgMTEzek01MTYgNzY4aDEwMTZsLTg5IDM1N3EtMiA4IC0xNCAxNy41dC0yMSA5LjVoLTc2OHEtOSAwIC0yMSAtOS41dC0xNCAtMTcuNXpNMTg4OCA0NDhxMCA2NiAtNDcgMTEzdC0xMTMgNDd0LTExMyAtNDd0LTQ3IC0xMTN0NDcgLTExM3QxMTMgLTQ3dDExMyA0N3Q0NyAxMTN6TTIwNDggNTQ0di0zODQKcTAgLTE0IC05IC0yM3QtMjMgLTloLTk2di0xMjhxMCAtODAgLTU2IC0xMzZ0LTEzNiAtNTZ0LTEzNiA1NnQtNTYgMTM2djEyOGgtMTAyNHYtMTI4cTAgLTgwIC01NiAtMTM2dC0xMzYgLTU2dC0xMzYgNTZ0LTU2IDEzNnYxMjhoLTk2cS0xNCAwIC0yMyA5dC05IDIzdjM4NHEwIDkzIDY1LjUgMTU4LjV0MTU4LjUgNjUuNWgyOGwxMDUgNDE5cTIzIDk0IDEwNCAxNTcuNXQxNzkgNjMuNWg3NjhxOTggMCAxNzkgLTYzLjV0MTA0IC0xNTcuNQpsMTA1IC00MTloMjhxOTMgMCAxNTguNSAtNjUuNXQ2NS41IC0xNTguNXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzQxNSIgdW5pY29kZT0iJiN4ZjFiYTsiIGhvcml6LWFkdi14PSIyMDQ4IiAKZD0iTTE4MjQgNjQwcTkzIDAgMTU4LjUgLTY1LjV0NjUuNSAtMTU4LjV2LTM4NHEwIC0xNCAtOSAtMjN0LTIzIC05aC05NnYtNjRxMCAtODAgLTU2IC0xMzZ0LTEzNiAtNTZ0LTEzNiA1NnQtNTYgMTM2djY0aC0xMDI0di02NHEwIC04MCAtNTYgLTEzNnQtMTM2IC01NnQtMTM2IDU2dC01NiAxMzZ2NjRoLTk2cS0xNCAwIC0yMyA5dC05IDIzdjM4NHEwIDkzIDY1LjUgMTU4LjV0MTU4LjUgNjUuNWgyOGwxMDUgNDE5cTIzIDk0IDEwNCAxNTcuNQp0MTc5IDYzLjVoMTI4djIyNHEwIDE0IDkgMjN0MjMgOWg0NDhxMTQgMCAyMyAtOXQ5IC0yM3YtMjI0aDEyOHE5OCAwIDE3OSAtNjMuNXQxMDQgLTE1Ny41bDEwNSAtNDE5aDI4ek0zMjAgMTYwcTY2IDAgMTEzIDQ3dDQ3IDExM3QtNDcgMTEzdC0xMTMgNDd0LTExMyAtNDd0LTQ3IC0xMTN0NDcgLTExM3QxMTMgLTQ3ek01MTYgNjQwaDEwMTZsLTg5IDM1N3EtMiA4IC0xNCAxNy41dC0yMSA5LjVoLTc2OHEtOSAwIC0yMSAtOS41dC0xNCAtMTcuNXoKTTE3MjggMTYwcTY2IDAgMTEzIDQ3dDQ3IDExM3QtNDcgMTEzdC0xMTMgNDd0LTExMyAtNDd0LTQ3IC0xMTN0NDcgLTExM3QxMTMgLTQ3eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNDE2IiB1bmljb2RlPSImI3hmMWJiOyIgCmQ9Ik0xNTA0IDY0cTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtNDYycTEgLTE3IDYgLTg3LjV0NSAtMTA4LjVxMCAtMjUgLTE4IC00Mi41dC00MyAtMTcuNWgtMzIwcS0yNSAwIC00MyAxNy41dC0xOCA0Mi41cTAgMzggNSAxMDguNXQ2IDg3LjVoLTQ2MnEtMjYgMCAtNDUgMTl0LTE5IDQ1dDE5IDQ1bDQwMiA0MDNoLTIyOXEtMjYgMCAtNDUgMTl0LTE5IDQ1dDE5IDQ1bDQwMiA0MDNoLTE5N3EtMjYgMCAtNDUgMTl0LTE5IDQ1dDE5IDQ1bDM4NCAzODQKcTE5IDE5IDQ1IDE5dDQ1IC0xOWwzODQgLTM4NHExOSAtMTkgMTkgLTQ1dC0xOSAtNDV0LTQ1IC0xOWgtMTk3bDQwMiAtNDAzcTE5IC0xOSAxOSAtNDV0LTE5IC00NXQtNDUgLTE5aC0yMjlsNDAyIC00MDNxMTkgLTE5IDE5IC00NXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzQxNyIgdW5pY29kZT0iJiN4ZjFiYzsiIApkPSJNMTEyNyAzMjZxMCAzMiAtMzAgNTFxLTE5MyAxMTUgLTQ0NyAxMTVxLTEzMyAwIC0yODcgLTM0cS00MiAtOSAtNDIgLTUycTAgLTIwIDEzLjUgLTM0LjV0MzUuNSAtMTQuNXE1IDAgMzcgOHExMzIgMjcgMjQzIDI3cTIyNiAwIDM5NyAtMTAzcTE5IC0xMSAzMyAtMTFxMTkgMCAzMyAxMy41dDE0IDM0LjV6TTEyMjMgNTQxcTAgNDAgLTM1IDYxcS0yMzcgMTQxIC01NDggMTQxcS0xNTMgMCAtMzAzIC00MnEtNDggLTEzIC00OCAtNjQKcTAgLTI1IDE3LjUgLTQyLjV0NDIuNSAtMTcuNXE3IDAgMzcgOHExMjIgMzMgMjUxIDMzcTI3OSAwIDQ4OCAtMTI0cTI0IC0xMyAzOCAtMTNxMjUgMCA0Mi41IDE3LjV0MTcuNSA0Mi41ek0xMzMxIDc4OXEwIDQ3IC00MCA3MHEtMTI2IDczIC0yOTMgMTEwLjV0LTM0MyAzNy41cS0yMDQgMCAtMzY0IC00N3EtMjMgLTcgLTM4LjUgLTI1LjV0LTE1LjUgLTQ4LjVxMCAtMzEgMjAuNSAtNTJ0NTEuNSAtMjFxMTEgMCA0MCA4cTEzMyAzNyAzMDcgMzcKcTE1OSAwIDMwOS41IC0zNHQyNTMuNSAtOTVxMjEgLTEyIDQwIC0xMnEyOSAwIDUwLjUgMjAuNXQyMS41IDUxLjV6TTE1MzYgNjQwcTAgLTIwOSAtMTAzIC0zODUuNXQtMjc5LjUgLTI3OS41dC0zODUuNSAtMTAzdC0zODUuNSAxMDN0LTI3OS41IDI3OS41dC0xMDMgMzg1LjV0MTAzIDM4NS41dDI3OS41IDI3OS41dDM4NS41IDEwM3QzODUuNSAtMTAzdDI3OS41IC0yNzkuNXQxMDMgLTM4NS41eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNDE4IiB1bmljb2RlPSImI3hmMWJkOyIgaG9yaXotYWR2LXg9IjEwMjQiIApkPSJNMTAyNCAxMjMzbC0zMDMgLTU4MmwyNCAtMzFoMjc5di00MTVoLTUwN2wtNDQgLTMwbC0xNDIgLTI3M2wtMzAgLTMwaC0zMDF2MzAzbDMwMyA1ODNsLTI0IDMwaC0yNzl2NDE1aDUwN2w0NCAzMGwxNDIgMjczbDMwIDMwaDMwMXYtMzAzeiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNDE5IiB1bmljb2RlPSImI3hmMWJlOyIgaG9yaXotYWR2LXg9IjIzMDQiIApkPSJNNzg0IDE2NGwxNiAyNDFsLTE2IDUyM3EtMSAxMCAtNy41IDE3dC0xNi41IDdxLTkgMCAtMTYgLTd0LTcgLTE3bC0xNCAtNTIzbDE0IC0yNDFxMSAtMTAgNy41IC0xNi41dDE1LjUgLTYuNXEyMiAwIDI0IDIzek0xMDgwIDE5M2wxMSAyMTFsLTEyIDU4NnEwIDE2IC0xMyAyNHEtOCA1IC0xNiA1dC0xNiAtNXEtMTMgLTggLTEzIC0yNGwtMSAtNmwtMTAgLTU3OXEwIC0xIDExIC0yMzZ2LTFxMCAtMTAgNiAtMTdxOSAtMTEgMjMgLTExCnExMSAwIDIwIDlxOSA3IDkgMjB6TTM1IDUzM2wyMCAtMTI4bC0yMCAtMTI2cS0yIC05IC05IC05dC05IDlsLTE3IDEyNmwxNyAxMjhxMiA5IDkgOXQ5IC05ek0xMjEgNjEybDI2IC0yMDdsLTI2IC0yMDNxLTIgLTkgLTEwIC05cS05IDAgLTkgMTBsLTIzIDIwMmwyMyAyMDdxMCA5IDkgOXE4IDAgMTAgLTl6TTQwMSAxNTl6TTIxMyA2NTBsMjUgLTI0NWwtMjUgLTIzN3EwIC0xMSAtMTEgLTExcS0xMCAwIC0xMiAxMWwtMjEgMjM3bDIxIDI0NQpxMiAxMiAxMiAxMnExMSAwIDExIC0xMnpNMzA3IDY1N2wyMyAtMjUybC0yMyAtMjQ0cS0yIC0xMyAtMTQgLTEzcS0xMyAwIC0xMyAxM2wtMjEgMjQ0bDIxIDI1MnEwIDEzIDEzIDEzcTEyIDAgMTQgLTEzek00MDEgNjM5bDIxIC0yMzRsLTIxIC0yNDZxLTIgLTE2IC0xNiAtMTZxLTYgMCAtMTAuNSA0LjV0LTQuNSAxMS41bC0yMCAyNDZsMjAgMjM0cTAgNiA0LjUgMTAuNXQxMC41IDQuNXExNCAwIDE2IC0xNXpNNzg0IDE2NHpNNDk1IDc4NQpsMjEgLTM4MGwtMjEgLTI0NnEwIC03IC01IC0xMi41dC0xMiAtNS41cS0xNiAwIC0xOCAxOGwtMTggMjQ2bDE4IDM4MHEyIDE4IDE4IDE4cTcgMCAxMiAtNS41dDUgLTEyLjV6TTU4OSA4NzFsMTkgLTQ2OGwtMTkgLTI0NHEwIC04IC01LjUgLTEzLjV0LTEzLjUgLTUuNXEtMTggMCAtMjAgMTlsLTE2IDI0NGwxNiA0NjhxMiAxOSAyMCAxOXE4IDAgMTMuNSAtNS41dDUuNSAtMTMuNXpNNjg3IDkxMWwxOCAtNTA2bC0xOCAtMjQyCnEtMiAtMjEgLTIyIC0yMXEtMTkgMCAtMjEgMjFsLTE2IDI0MmwxNiA1MDZxMCA5IDYuNSAxNS41dDE0LjUgNi41cTkgMCAxNSAtNi41dDcgLTE1LjV6TTEwNzkgMTY5djB2MHYwek04ODEgOTE1bDE1IC01MTBsLTE1IC0yMzlxMCAtMTAgLTcuNSAtMTcuNXQtMTcuNSAtNy41dC0xNyA3dC04IDE4bC0xNCAyMzlsMTQgNTEwcTAgMTEgNy41IDE4dDE3LjUgN3QxNy41IC03dDcuNSAtMTh6TTk4MCA4OTZsMTQgLTQ5MmwtMTQgLTIzNgpxMCAtMTEgLTggLTE5dC0xOSAtOHQtMTkgOHQtOSAxOWwtMTIgMjM2bDEyIDQ5MnExIDEyIDkgMjB0MTkgOHQxOC41IC04dDguNSAtMjB6TTExOTIgNDA0bC0xNCAtMjMxdjBxMCAtMTMgLTkgLTIydC0yMiAtOXQtMjIgOXQtMTAgMjJsLTYgMTE0bC02IDExN2wxMiA2MzZ2M3EyIDE1IDEyIDI0cTkgNyAyMCA3cTggMCAxNSAtNXExNCAtOCAxNiAtMjZ6TTIzMDQgNDIzcTAgLTExNyAtODMgLTE5OS41dC0yMDAgLTgyLjVoLTc4NgpxLTEzIDIgLTIyIDExdC05IDIydjg5OXEwIDIzIDI4IDMzcTg1IDM0IDE4MSAzNHExOTUgMCAzMzggLTEzMS41dDE2MCAtMzIzLjVxNTMgMjIgMTEwIDIycTExNyAwIDIwMCAtODN0ODMgLTIwMXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idW5pRjFDMCIgdW5pY29kZT0iJiN4ZjFjMDsiIApkPSJNNzY4IDc2OHEyMzcgMCA0NDMgNDN0MzI1IDEyN3YtMTcwcTAgLTY5IC0xMDMgLTEyOHQtMjgwIC05My41dC0zODUgLTM0LjV0LTM4NSAzNC41dC0yODAgOTMuNXQtMTAzIDEyOHYxNzBxMTE5IC04NCAzMjUgLTEyN3Q0NDMgLTQzek03NjggMHEyMzcgMCA0NDMgNDN0MzI1IDEyN3YtMTcwcTAgLTY5IC0xMDMgLTEyOHQtMjgwIC05My41dC0zODUgLTM0LjV0LTM4NSAzNC41dC0yODAgOTMuNXQtMTAzIDEyOHYxNzBxMTE5IC04NCAzMjUgLTEyNwp0NDQzIC00M3pNNzY4IDM4NHEyMzcgMCA0NDMgNDN0MzI1IDEyN3YtMTcwcTAgLTY5IC0xMDMgLTEyOHQtMjgwIC05My41dC0zODUgLTM0LjV0LTM4NSAzNC41dC0yODAgOTMuNXQtMTAzIDEyOHYxNzBxMTE5IC04NCAzMjUgLTEyN3Q0NDMgLTQzek03NjggMTUzNnEyMDggMCAzODUgLTM0LjV0MjgwIC05My41dDEwMyAtMTI4di0xMjhxMCAtNjkgLTEwMyAtMTI4dC0yODAgLTkzLjV0LTM4NSAtMzQuNXQtMzg1IDM0LjV0LTI4MCA5My41CnQtMTAzIDEyOHYxMjhxMCA2OSAxMDMgMTI4dDI4MCA5My41dDM4NSAzNC41eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlGMUMxIiB1bmljb2RlPSImI3hmMWMxOyIgCmQ9Ik0xNDY4IDExNTZxMjggLTI4IDQ4IC03NnQyMCAtODh2LTExNTJxMCAtNDAgLTI4IC02OHQtNjggLTI4aC0xMzQ0cS00MCAwIC02OCAyOHQtMjggNjh2MTYwMHEwIDQwIDI4IDY4dDY4IDI4aDg5NnE0MCAwIDg4IC0yMHQ3NiAtNDh6TTEwMjQgMTQwMHYtMzc2aDM3NnEtMTAgMjkgLTIyIDQxbC0zMTMgMzEzcS0xMiAxMiAtNDEgMjJ6TTE0MDggLTEyOHYxMDI0aC00MTZxLTQwIDAgLTY4IDI4dC0yOCA2OHY0MTZoLTc2OHYtMTUzNmgxMjgwegpNODk0IDQ2NXEzMyAtMjYgODQgLTU2cTU5IDcgMTE3IDdxMTQ3IDAgMTc3IC00OXExNiAtMjIgMiAtNTJxMCAtMSAtMSAtMmwtMiAtMnYtMXEtNiAtMzggLTcxIC0zOHEtNDggMCAtMTE1IDIwdC0xMzAgNTNxLTIyMSAtMjQgLTM5MiAtODNxLTE1MyAtMjYyIC0yNDIgLTI2MnEtMTUgMCAtMjggN2wtMjQgMTJxLTEgMSAtNiA1cS0xMCAxMCAtNiAzNnE5IDQwIDU2IDkxLjV0MTMyIDk2LjVxMTQgOSAyMyAtNnEyIC0yIDIgLTRxNTIgODUgMTA3IDE5NwpxNjggMTM2IDEwNCAyNjJxLTI0IDgyIC0zMC41IDE1OS41dDYuNSAxMjcuNXExMSA0MCA0MiA0MGgyMWgxcTIzIDAgMzUgLTE1cTE4IC0yMSA5IC02OHEtMiAtNiAtNCAtOHExIC0zIDEgLTh2LTMwcS0yIC0xMjMgLTE0IC0xOTJxNTUgLTE2NCAxNDYgLTIzOHpNMzE4IDU0cTUyIDI0IDEzNyAxNThxLTUxIC00MCAtODcuNSAtODR0LTQ5LjUgLTc0ek03MTYgOTc0cS0xNSAtNDIgLTIgLTEzMnExIDcgNyA0NHEwIDMgNyA0M3ExIDQgNCA4CnEtMSAxIC0xIDJxLTEgMiAtMSAzcS0xIDIyIC0xMyAzNnEwIC0xIC0xIC0ydi0yek01OTIgMzEzcTEzNSA1NCAyODQgODFxLTIgMSAtMTMgOS41dC0xNiAxMy41cS03NiA2NyAtMTI3IDE3NnEtMjcgLTg2IC04MyAtMTk3cS0zMCAtNTYgLTQ1IC04M3pNMTIzOCAzMjlxLTI0IDI0IC0xNDAgMjRxNzYgLTI4IDEyNCAtMjhxMTQgMCAxOCAxcTAgMSAtMiAzeiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNDIyIiB1bmljb2RlPSImI3hmMWMyOyIgCmQ9Ik0xNDY4IDExNTZxMjggLTI4IDQ4IC03NnQyMCAtODh2LTExNTJxMCAtNDAgLTI4IC02OHQtNjggLTI4aC0xMzQ0cS00MCAwIC02OCAyOHQtMjggNjh2MTYwMHEwIDQwIDI4IDY4dDY4IDI4aDg5NnE0MCAwIDg4IC0yMHQ3NiAtNDh6TTEwMjQgMTQwMHYtMzc2aDM3NnEtMTAgMjkgLTIyIDQxbC0zMTMgMzEzcS0xMiAxMiAtNDEgMjJ6TTE0MDggLTEyOHYxMDI0aC00MTZxLTQwIDAgLTY4IDI4dC0yOCA2OHY0MTZoLTc2OHYtMTUzNmgxMjgwegpNMjMzIDc2OHYtMTA3aDcwbDE2NCAtNjYxaDE1OWwxMjggNDg1cTcgMjAgMTAgNDZxMiAxNiAyIDI0aDRsMyAtMjRxMSAtMyAzLjUgLTIwdDUuNSAtMjZsMTI4IC00ODVoMTU5bDE2NCA2NjFoNzB2MTA3aC0zMDB2LTEwN2g5MGwtOTkgLTQzOHEtNSAtMjAgLTcgLTQ2bC0yIC0yMWgtNHEwIDMgLTAuNSA2LjV0LTEuNSA4dC0xIDYuNXEtMSA1IC00IDIxdC01IDI1bC0xNDQgNTQ1aC0xMTRsLTE0NCAtNTQ1cS0yIC05IC00LjUgLTI0LjUKdC0zLjUgLTIxLjVsLTQgLTIxaC00bC0yIDIxcS0yIDI2IC03IDQ2bC05OSA0MzhoOTB2MTA3aC0zMDB6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9Il80MjMiIHVuaWNvZGU9IiYjeGYxYzM7IiAKZD0iTTE0NjggMTE1NnEyOCAtMjggNDggLTc2dDIwIC04OHYtMTE1MnEwIC00MCAtMjggLTY4dC02OCAtMjhoLTEzNDRxLTQwIDAgLTY4IDI4dC0yOCA2OHYxNjAwcTAgNDAgMjggNjh0NjggMjhoODk2cTQwIDAgODggLTIwdDc2IC00OHpNMTAyNCAxNDAwdi0zNzZoMzc2cS0xMCAyOSAtMjIgNDFsLTMxMyAzMTNxLTEyIDEyIC00MSAyMnpNMTQwOCAtMTI4djEwMjRoLTQxNnEtNDAgMCAtNjggMjh0LTI4IDY4djQxNmgtNzY4di0xNTM2aDEyODB6Ck00MjkgMTA2di0xMDZoMjgxdjEwNmgtNzVsMTAzIDE2MXE1IDcgMTAgMTYuNXQ3LjUgMTMuNXQzLjUgNGgycTEgLTQgNSAtMTBxMiAtNCA0LjUgLTcuNXQ2IC04dDYuNSAtOC41bDEwNyAtMTYxaC03NnYtMTA2aDI5MXYxMDZoLTY4bC0xOTIgMjczbDE5NSAyODJoNjd2MTA3aC0yNzl2LTEwN2g3NGwtMTAzIC0xNTlxLTQgLTcgLTEwIC0xNi41dC05IC0xMy41bC0yIC0zaC0ycS0xIDQgLTUgMTBxLTYgMTEgLTE3IDIzbC0xMDYgMTU5aDc2djEwNwpoLTI5MHYtMTA3aDY4bDE4OSAtMjcybC0xOTQgLTI4M2gtNjh6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9Il80MjQiIHVuaWNvZGU9IiYjeGYxYzQ7IiAKZD0iTTE0NjggMTE1NnEyOCAtMjggNDggLTc2dDIwIC04OHYtMTE1MnEwIC00MCAtMjggLTY4dC02OCAtMjhoLTEzNDRxLTQwIDAgLTY4IDI4dC0yOCA2OHYxNjAwcTAgNDAgMjggNjh0NjggMjhoODk2cTQwIDAgODggLTIwdDc2IC00OHpNMTAyNCAxNDAwdi0zNzZoMzc2cS0xMCAyOSAtMjIgNDFsLTMxMyAzMTNxLTEyIDEyIC00MSAyMnpNMTQwOCAtMTI4djEwMjRoLTQxNnEtNDAgMCAtNjggMjh0LTI4IDY4djQxNmgtNzY4di0xNTM2aDEyODB6Ck00MTYgMTA2di0xMDZoMzI3djEwNmgtOTN2MTY3aDEzN3E3NiAwIDExOCAxNXE2NyAyMyAxMDYuNSA4N3QzOS41IDE0NnEwIDgxIC0zNyAxNDF0LTEwMCA4N3EtNDggMTkgLTEzMCAxOWgtMzY4di0xMDdoOTJ2LTU1NWgtOTJ6TTc2OSAzODZoLTExOXYyNjhoMTIwcTUyIDAgODMgLTE4cTU2IC0zMyA1NiAtMTE1cTAgLTg5IC02MiAtMTIwcS0zMSAtMTUgLTc4IC0xNXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzQyNSIgdW5pY29kZT0iJiN4ZjFjNTsiIApkPSJNMTQ2OCAxMTU2cTI4IC0yOCA0OCAtNzZ0MjAgLTg4di0xMTUycTAgLTQwIC0yOCAtNjh0LTY4IC0yOGgtMTM0NHEtNDAgMCAtNjggMjh0LTI4IDY4djE2MDBxMCA0MCAyOCA2OHQ2OCAyOGg4OTZxNDAgMCA4OCAtMjB0NzYgLTQ4ek0xMDI0IDE0MDB2LTM3NmgzNzZxLTEwIDI5IC0yMiA0MWwtMzEzIDMxM3EtMTIgMTIgLTQxIDIyek0xNDA4IC0xMjh2MTAyNGgtNDE2cS00MCAwIC02OCAyOHQtMjggNjh2NDE2aC03Njh2LTE1MzZoMTI4MHoKTTEyODAgMzIwdi0zMjBoLTEwMjR2MTkybDE5MiAxOTJsMTI4IC0xMjhsMzg0IDM4NHpNNDQ4IDUxMnEtODAgMCAtMTM2IDU2dC01NiAxMzZ0NTYgMTM2dDEzNiA1NnQxMzYgLTU2dDU2IC0xMzZ0LTU2IC0xMzZ0LTEzNiAtNTZ6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9Il80MjYiIHVuaWNvZGU9IiYjeGYxYzY7IiAKZD0iTTY0MCAxMTUydjEyOGgtMTI4di0xMjhoMTI4ek03NjggMTAyNHYxMjhoLTEyOHYtMTI4aDEyOHpNNjQwIDg5NnYxMjhoLTEyOHYtMTI4aDEyOHpNNzY4IDc2OHYxMjhoLTEyOHYtMTI4aDEyOHpNMTQ2OCAxMTU2cTI4IC0yOCA0OCAtNzZ0MjAgLTg4di0xMTUycTAgLTQwIC0yOCAtNjh0LTY4IC0yOGgtMTM0NHEtNDAgMCAtNjggMjh0LTI4IDY4djE2MDBxMCA0MCAyOCA2OHQ2OCAyOGg4OTZxNDAgMCA4OCAtMjB0NzYgLTQ4ek0xMDI0IDE0MDAKdi0zNzZoMzc2cS0xMCAyOSAtMjIgNDFsLTMxMyAzMTNxLTEyIDEyIC00MSAyMnpNMTQwOCAtMTI4djEwMjRoLTQxNnEtNDAgMCAtNjggMjh0LTI4IDY4djQxNmgtMTI4di0xMjhoLTEyOHYxMjhoLTUxMnYtMTUzNmgxMjgwek03ODEgNTkzbDEwNyAtMzQ5cTggLTI3IDggLTUycTAgLTgzIC03Mi41IC0xMzcuNXQtMTgzLjUgLTU0LjV0LTE4My41IDU0LjV0LTcyLjUgMTM3LjVxMCAyNSA4IDUycTIxIDYzIDEyMCAzOTZ2MTI4aDEyOHYtMTI4aDc5CnEyMiAwIDM5IC0xM3QyMyAtMzR6TTY0MCAxMjhxNTMgMCA5MC41IDE5dDM3LjUgNDV0LTM3LjUgNDV0LTkwLjUgMTl0LTkwLjUgLTE5dC0zNy41IC00NXQzNy41IC00NXQ5MC41IC0xOXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzQyNyIgdW5pY29kZT0iJiN4ZjFjNzsiIApkPSJNMTQ2OCAxMTU2cTI4IC0yOCA0OCAtNzZ0MjAgLTg4di0xMTUycTAgLTQwIC0yOCAtNjh0LTY4IC0yOGgtMTM0NHEtNDAgMCAtNjggMjh0LTI4IDY4djE2MDBxMCA0MCAyOCA2OHQ2OCAyOGg4OTZxNDAgMCA4OCAtMjB0NzYgLTQ4ek0xMDI0IDE0MDB2LTM3NmgzNzZxLTEwIDI5IC0yMiA0MWwtMzEzIDMxM3EtMTIgMTIgLTQxIDIyek0xNDA4IC0xMjh2MTAyNGgtNDE2cS00MCAwIC02OCAyOHQtMjggNjh2NDE2aC03Njh2LTE1MzZoMTI4MHoKTTYyMCA2ODZxMjAgLTggMjAgLTMwdi01NDRxMCAtMjIgLTIwIC0zMHEtOCAtMiAtMTIgLTJxLTEyIDAgLTIzIDlsLTE2NiAxNjdoLTEzMXEtMTQgMCAtMjMgOXQtOSAyM3YxOTJxMCAxNCA5IDIzdDIzIDloMTMxbDE2NiAxNjdxMTYgMTUgMzUgN3pNMTAzNyAtM3EzMSAwIDUwIDI0cTEyOSAxNTkgMTI5IDM2M3QtMTI5IDM2M3EtMTYgMjEgLTQzIDI0dC00NyAtMTRxLTIxIC0xNyAtMjMuNSAtNDMuNXQxNC41IC00Ny41CnExMDAgLTEyMyAxMDAgLTI4MnQtMTAwIC0yODJxLTE3IC0yMSAtMTQuNSAtNDcuNXQyMy41IC00Mi41cTE4IC0xNSA0MCAtMTV6TTgyNiAxNDVxMjcgMCA0NyAyMHE4NyA5MyA4NyAyMTl0LTg3IDIxOXEtMTggMTkgLTQ1IDIwdC00NiAtMTd0LTIwIC00NC41dDE4IC00Ni41cTUyIC01NyA1MiAtMTMxdC01MiAtMTMxcS0xOSAtMjAgLTE4IC00Ni41dDIwIC00NC41cTIwIC0xNyA0NCAtMTd6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9Il80MjgiIHVuaWNvZGU9IiYjeGYxYzg7IiAKZD0iTTE0NjggMTE1NnEyOCAtMjggNDggLTc2dDIwIC04OHYtMTE1MnEwIC00MCAtMjggLTY4dC02OCAtMjhoLTEzNDRxLTQwIDAgLTY4IDI4dC0yOCA2OHYxNjAwcTAgNDAgMjggNjh0NjggMjhoODk2cTQwIDAgODggLTIwdDc2IC00OHpNMTAyNCAxNDAwdi0zNzZoMzc2cS0xMCAyOSAtMjIgNDFsLTMxMyAzMTNxLTEyIDEyIC00MSAyMnpNMTQwOCAtMTI4djEwMjRoLTQxNnEtNDAgMCAtNjggMjh0LTI4IDY4djQxNmgtNzY4di0xNTM2aDEyODB6Ck03NjggNzY4cTUyIDAgOTAgLTM4dDM4IC05MHYtMzg0cTAgLTUyIC0zOCAtOTB0LTkwIC0zOGgtMzg0cS01MiAwIC05MCAzOHQtMzggOTB2Mzg0cTAgNTIgMzggOTB0OTAgMzhoMzg0ek0xMjYwIDc2NnEyMCAtOCAyMCAtMzB2LTU3NnEwIC0yMiAtMjAgLTMwcS04IC0yIC0xMiAtMnEtMTQgMCAtMjMgOWwtMjY1IDI2NnY5MGwyNjUgMjY2cTkgOSAyMyA5cTQgMCAxMiAtMnoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzQyOSIgdW5pY29kZT0iJiN4ZjFjOTsiIApkPSJNMTQ2OCAxMTU2cTI4IC0yOCA0OCAtNzZ0MjAgLTg4di0xMTUycTAgLTQwIC0yOCAtNjh0LTY4IC0yOGgtMTM0NHEtNDAgMCAtNjggMjh0LTI4IDY4djE2MDBxMCA0MCAyOCA2OHQ2OCAyOGg4OTZxNDAgMCA4OCAtMjB0NzYgLTQ4ek0xMDI0IDE0MDB2LTM3NmgzNzZxLTEwIDI5IC0yMiA0MWwtMzEzIDMxM3EtMTIgMTIgLTQxIDIyek0xNDA4IC0xMjh2MTAyNGgtNDE2cS00MCAwIC02OCAyOHQtMjggNjh2NDE2aC03Njh2LTE1MzZoMTI4MHoKTTQ4MCA3NjhxOCAxMSAyMSAxMi41dDI0IC02LjVsNTEgLTM4cTExIC04IDEyLjUgLTIxdC02LjUgLTI0bC0xODIgLTI0M2wxODIgLTI0M3E4IC0xMSA2LjUgLTI0dC0xMi41IC0yMWwtNTEgLTM4cS0xMSAtOCAtMjQgLTYuNXQtMjEgMTIuNWwtMjI2IDMwMXEtMTQgMTkgMCAzOHpNMTI4MiA0NjdxMTQgLTE5IDAgLTM4bC0yMjYgLTMwMXEtOCAtMTEgLTIxIC0xMi41dC0yNCA2LjVsLTUxIDM4cS0xMSA4IC0xMi41IDIxdDYuNSAyNGwxODIgMjQzCmwtMTgyIDI0M3EtOCAxMSAtNi41IDI0dDEyLjUgMjFsNTEgMzhxMTEgOCAyNCA2LjV0MjEgLTEyLjV6TTY2MiA2cS0xMyAyIC0yMC41IDEzdC01LjUgMjRsMTM4IDgzMXEyIDEzIDEzIDIwLjV0MjQgNS41bDYzIC0xMHExMyAtMiAyMC41IC0xM3Q1LjUgLTI0bC0xMzggLTgzMXEtMiAtMTMgLTEzIC0yMC41dC0yNCAtNS41eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNDMwIiB1bmljb2RlPSImI3hmMWNhOyIgCmQ9Ik0xNDk3IDcwOXYtMTk4cS0xMDEgLTIzIC0xOTggLTIzcS02NSAtMTM2IC0xNjUuNSAtMjcxdC0xODEuNSAtMjE1LjV0LTEyOCAtMTA2LjVxLTgwIC00NSAtMTYyIDNxLTI4IDE3IC02MC41IDQzLjV0LTg1IDgzLjV0LTEwMi41IDEyOC41dC0xMDcuNSAxODR0LTEwNS41IDI0NHQtOTEuNSAzMTQuNXQtNzAuNSAzOTBoMjgzcTI2IC0yMTggNzAgLTM5OC41dDEwNC41IC0zMTd0MTIxLjUgLTIzNS41dDE0MCAtMTk1cTE2OSAxNjkgMjg3IDQwNgpxLTE0MiA3MiAtMjIzIDIyMHQtODEgMzMzcTAgMTkyIDEwNCAzMTQuNXQyODQgMTIyLjVxMTc4IDAgMjczIC0xMDUuNXQ5NSAtMjk3LjVxMCAtMTU5IC01OCAtMjg2cS03IC0xIC0xOS41IC0zdC00NiAtMnQtNjMgNnQtNjIgMjUuNXQtNTAuNSA1MS41cTMxIDEwMyAzMSAxODRxMCA4NyAtMjkgMTMydC03OSA0NXEtNTMgMCAtODUgLTQ5LjV0LTMyIC0xNDAuNXEwIC0xODYgMTA1IC0yOTMuNXQyNjcgLTEwNy41cTYyIDAgMTIxIDE0eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNDMxIiB1bmljb2RlPSImI3hmMWNiOyIgaG9yaXotYWR2LXg9IjE3OTIiIApkPSJNMjE2IDM2N2w2MDMgLTQwMnYzNTlsLTMzNCAyMjN6TTE1NCA1MTFsMTkzIDEyOWwtMTkzIDEyOXYtMjU4ek05NzMgLTM1bDYwMyA0MDJsLTI2OSAxODBsLTMzNCAtMjIzdi0zNTl6TTg5NiA0NThsMjcyIDE4MmwtMjcyIDE4MmwtMjcyIC0xODJ6TTQ4NSA3MzNsMzM0IDIyM3YzNTlsLTYwMyAtNDAyek0xNDQ1IDY0MGwxOTMgLTEyOXYyNTh6TTEzMDcgNzMzbDI2OSAxODBsLTYwMyA0MDJ2LTM1OXpNMTc5MiA5MTN2LTU0NgpxMCAtNDEgLTM0IC02NGwtODE5IC01NDZxLTIxIC0xMyAtNDMgLTEzdC00MyAxM2wtODE5IDU0NnEtMzQgMjMgLTM0IDY0djU0NnEwIDQxIDM0IDY0bDgxOSA1NDZxMjEgMTMgNDMgMTN0NDMgLTEzbDgxOSAtNTQ2cTM0IC0yMyAzNCAtNjR6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9Il80MzIiIHVuaWNvZGU9IiYjeGYxY2M7IiBob3Jpei1hZHYteD0iMjA0OCIgCmQ9Ik0xODAwIDc2NHExMTEgLTQ2IDE3OS41IC0xNDUuNXQ2OC41IC0yMjEuNXEwIC0xNjQgLTExOCAtMjgwLjV0LTI4NSAtMTE2LjVxLTQgMCAtMTEuNSAwLjV0LTEwLjUgMC41aC0xMjA5aC0xaC0yaC01cS0xNzAgMTAgLTI4OCAxMjUuNXQtMTE4IDI4MC41cTAgMTEwIDU1IDIwM3QxNDcgMTQ3cS0xMiAzOSAtMTIgODJxMCAxMTUgODIgMTk2dDE5OSA4MXE5NSAwIDE3MiAtNThxNzUgMTU0IDIyMi41IDI0OHQzMjYuNSA5NApxMTY2IDAgMzA2IC04MC41dDIyMS41IC0yMTguNXQ4MS41IC0zMDFxMCAtNiAtMC41IC0xOHQtMC41IC0xOHpNNDY4IDQ5OHEwIC0xMjIgODQgLTE5M3QyMDggLTcxcTEzNyAwIDI0MCA5OXEtMTYgMjAgLTQ3LjUgNTYuNXQtNDMuNSA1MC41cS02NyAtNjUgLTE0NCAtNjVxLTU1IDAgLTkzLjUgMzMuNXQtMzguNSA4Ny41cTAgNTMgMzguNSA4N3Q5MS41IDM0cTQ0IDAgODQuNSAtMjF0NzMgLTU1dDY1IC03NXQ2OSAtODJ0NzcgLTc1dDk3IC01NQp0MTIxLjUgLTIxcTEyMSAwIDIwNC41IDcxLjV0ODMuNSAxOTAuNXEwIDEyMSAtODQgMTkydC0yMDcgNzFxLTE0MyAwIC0yNDEgLTk3bDkzIC0xMDhxNjYgNjQgMTQyIDY0cTUyIDAgOTIgLTMzdDQwIC04NHEwIC01NyAtMzcgLTkxLjV0LTk0IC0zNC41cS00MyAwIC04Mi41IDIxdC03MiA1NXQtNjUuNSA3NXQtNjkuNSA4MnQtNzcuNSA3NXQtOTYuNSA1NXQtMTE4LjUgMjFxLTEyMiAwIC0yMDcgLTcwLjV0LTg1IC0xODkuNXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzQzMyIgdW5pY29kZT0iJiN4ZjFjZDsiIGhvcml6LWFkdi14PSIxNzkyIiAKZD0iTTg5NiAxNTM2cTE4MiAwIDM0OCAtNzF0Mjg2IC0xOTF0MTkxIC0yODZ0NzEgLTM0OHQtNzEgLTM0OHQtMTkxIC0yODZ0LTI4NiAtMTkxdC0zNDggLTcxdC0zNDggNzF0LTI4NiAxOTF0LTE5MSAyODZ0LTcxIDM0OHQ3MSAzNDh0MTkxIDI4NnQyODYgMTkxdDM0OCA3MXpNODk2IDE0MDhxLTE5MCAwIC0zNjEgLTkwbDE5NCAtMTk0cTgyIDI4IDE2NyAyOHQxNjcgLTI4bDE5NCAxOTRxLTE3MSA5MCAtMzYxIDkwek0yMTggMjc5bDE5NCAxOTQKcS0yOCA4MiAtMjggMTY3dDI4IDE2N2wtMTk0IDE5NHEtOTAgLTE3MSAtOTAgLTM2MXQ5MCAtMzYxek04OTYgLTEyOHExOTAgMCAzNjEgOTBsLTE5NCAxOTRxLTgyIC0yOCAtMTY3IC0yOHQtMTY3IDI4bC0xOTQgLTE5NHExNzEgLTkwIDM2MSAtOTB6TTg5NiAyNTZxMTU5IDAgMjcxLjUgMTEyLjV0MTEyLjUgMjcxLjV0LTExMi41IDI3MS41dC0yNzEuNSAxMTIuNXQtMjcxLjUgLTExMi41dC0xMTIuNSAtMjcxLjV0MTEyLjUgLTI3MS41CnQyNzEuNSAtMTEyLjV6TTEzODAgNDczbDE5NCAtMTk0cTkwIDE3MSA5MCAzNjF0LTkwIDM2MWwtMTk0IC0xOTRxMjggLTgyIDI4IC0xNjd0LTI4IC0xNjd6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9Il80MzQiIHVuaWNvZGU9IiYjeGYxY2U7IiBob3Jpei1hZHYteD0iMTc5MiIgCmQ9Ik0xNzYwIDY0MHEwIC0xNzYgLTY4LjUgLTMzNnQtMTg0IC0yNzUuNXQtMjc1LjUgLTE4NHQtMzM2IC02OC41dC0zMzYgNjguNXQtMjc1LjUgMTg0dC0xODQgMjc1LjV0LTY4LjUgMzM2cTAgMjEzIDk3IDM5OC41dDI2NSAzMDUuNXQzNzQgMTUxdi0yMjhxLTIyMSAtNDUgLTM2Ni41IC0yMjF0LTE0NS41IC00MDZxMCAtMTMwIDUxIC0yNDguNXQxMzYuNSAtMjA0dDIwNCAtMTM2LjV0MjQ4LjUgLTUxdDI0OC41IDUxdDIwNCAxMzYuNQp0MTM2LjUgMjA0dDUxIDI0OC41cTAgMjMwIC0xNDUuNSA0MDZ0LTM2Ni41IDIyMXYyMjhxMjA2IC0zMSAzNzQgLTE1MXQyNjUgLTMwNS41dDk3IC0zOTguNXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idW5pRjFEMCIgdW5pY29kZT0iJiN4ZjFkMDsiIGhvcml6LWFkdi14PSIxNzkyIiAKZD0iTTE5IDY2MnE4IDIxNyAxMTYgNDA2dDMwNSAzMThoNXEwIC0xIC0xIC0zcS04IC04IC0yOCAtMzMuNXQtNTIgLTc2LjV0LTYwIC0xMTAuNXQtNDQuNSAtMTM1LjV0LTE0IC0xNTAuNXQzOSAtMTU3LjV0MTA4LjUgLTE1NHE1MCAtNTAgMTAyIC02OS41dDkwLjUgLTExLjV0NjkuNSAyMy41dDQ3IDMyLjVsMTYgMTZxMzkgNTEgNTMgMTE2LjV0Ni41IDEyMi41dC0yMSAxMDd0LTI2LjUgODBsLTE0IDI5cS0xMCAyNSAtMzAuNSA0OS41dC00MyA0MQp0LTQzLjUgMjkuNXQtMzUgMTlsLTEzIDZsMTA0IDExNXEzOSAtMTcgNzggLTUydDU5IC02MWwxOSAtMjdxMSA0OCAtMTguNSAxMDMuNXQtNDAuNSA4Ny41bC0yMCAzMWwxNjEgMTgzbDE2MCAtMTgxcS0zMyAtNDYgLTUyLjUgLTEwMi41dC0yMi41IC05MC41bC00IC0zM3EyMiAzNyA2MS41IDcyLjV0NjcuNSA1Mi41bDI4IDE3bDEwMyAtMTE1cS00NCAtMTQgLTg1IC01MHQtNjAgLTY1bC0xOSAtMjlxLTMxIC01NiAtNDggLTEzMy41dC03IC0xNzAKdDU3IC0xNTYuNXEzMyAtNDUgNzcuNSAtNjAuNXQ4NSAtNS41dDc2IDI2LjV0NTcuNSAzMy41bDIxIDE2cTYwIDUzIDk2LjUgMTE1dDQ4LjUgMTIxLjV0MTAgMTIxLjV0LTE4IDExOHQtMzcgMTA3LjV0LTQ1LjUgOTN0LTQ1IDcydC0zNC41IDQ3LjVsLTEzIDE3cS0xNCAxMyAtNyAxM2wxMCAtM3E0MCAtMjkgNjIuNSAtNDZ0NjIgLTUwdDY0IC01OHQ1OC41IC02NXQ1NS41IC03N3Q0NS41IC04OHQzOCAtMTAzdDIzLjUgLTExN3QxMC41IC0xMzYKcTMgLTI1OSAtMTA4IC00NjV0LTMxMiAtMzIxdC00NTYgLTExNXEtMTg1IDAgLTM1MSA3NHQtMjgzLjUgMTk4dC0xODQgMjkzdC02MC41IDM1M3oiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idW5pRjFEMSIgdW5pY29kZT0iJiN4ZjFkMTsiIGhvcml6LWFkdi14PSIxNzkyIiAKZD0iTTg3NCAtMTAydi02NnEtMjA4IDYgLTM4NSAxMDkuNXQtMjgzIDI3NS41bDU4IDM0cTI5IC00OSA3MyAtOTlsNjUgNTdxMTQ4IC0xNjggMzY4IC0yMTJsLTE3IC04NnE2NSAtMTIgMTIxIC0xM3pNMjc2IDQyOGwtODMgLTI4cTIyIC02MCA0OSAtMTEybC01NyAtMzNxLTk4IDE4MCAtOTggMzg1dDk4IDM4NWw1NyAtMzNxLTMwIC01NiAtNDkgLTExMmw4MiAtMjhxLTM1IC0xMDAgLTM1IC0yMTJxMCAtMTA5IDM2IC0yMTJ6TTE1MjggMjUxCmw1OCAtMzRxLTEwNiAtMTcyIC0yODMgLTI3NS41dC0zODUgLTEwOS41djY2cTU2IDEgMTIxIDEzbC0xNyA4NnEyMjAgNDQgMzY4IDIxMmw2NSAtNTdxNDQgNTAgNzMgOTl6TTEzNzcgODA1bC0yMzMgLTgwcTE0IC00MiAxNCAtODV0LTE0IC04NWwyMzIgLTgwcS0zMSAtOTIgLTk4IC0xNjlsLTE4NSAxNjJxLTU3IC02NyAtMTQ3IC04NWw0OCAtMjQxcS01MiAtMTAgLTk4IC0xMHQtOTggMTBsNDggMjQxcS05MCAxOCAtMTQ3IDg1bC0xODUgLTE2MgpxLTY3IDc3IC05OCAxNjlsMjMyIDgwcS0xNCA0MiAtMTQgODV0MTQgODVsLTIzMyA4MHEzMyA5MyA5OSAxNjlsMTg1IC0xNjJxNTkgNjggMTQ3IDg2bC00OCAyNDBxNDQgMTAgOTggMTB0OTggLTEwbC00OCAtMjQwcTg4IC0xOCAxNDcgLTg2bDE4NSAxNjJxNjYgLTc2IDk5IC0xNjl6TTg3NCAxNDQ4di02NnEtNjUgLTIgLTEyMSAtMTNsMTcgLTg2cS0yMjAgLTQyIC0zNjggLTIxMWwtNjUgNTZxLTM4IC00MiAtNzMgLTk4bC01NyAzMwpxMTA2IDE3MiAyODIgMjc1LjV0Mzg1IDEwOS41ek0xNzA1IDY0MHEwIC0yMDUgLTk4IC0zODVsLTU3IDMzcTI3IDUyIDQ5IDExMmwtODMgMjhxMzYgMTAzIDM2IDIxMnEwIDExMiAtMzUgMjEybDgyIDI4cS0xOSA1NiAtNDkgMTEybDU3IDMzcTk4IC0xODAgOTggLTM4NXpNMTU4NSAxMDYzbC01NyAtMzNxLTM1IDU2IC03MyA5OGwtNjUgLTU2cS0xNDggMTY5IC0zNjggMjExbDE3IDg2cS01NiAxMSAtMTIxIDEzdjY2cTIwOSAtNiAzODUgLTEwOS41CnQyODIgLTI3NS41ek0xNzQ4IDY0MHEwIDE3MyAtNjcuNSAzMzF0LTE4MS41IDI3MnQtMjcyIDE4MS41dC0zMzEgNjcuNXQtMzMxIC02Ny41dC0yNzIgLTE4MS41dC0xODEuNSAtMjcydC02Ny41IC0zMzF0NjcuNSAtMzMxdDE4MS41IC0yNzJ0MjcyIC0xODEuNXQzMzEgLTY3LjV0MzMxIDY3LjV0MjcyIDE4MS41dDE4MS41IDI3MnQ2Ny41IDMzMXpNMTc5MiA2NDBxMCAtMTgyIC03MSAtMzQ4dC0xOTEgLTI4NnQtMjg2IC0xOTF0LTM0OCAtNzEKdC0zNDggNzF0LTI4NiAxOTF0LTE5MSAyODZ0LTcxIDM0OHQ3MSAzNDh0MTkxIDI4NnQyODYgMTkxdDM0OCA3MXQzNDggLTcxdDI4NiAtMTkxdDE5MSAtMjg2dDcxIC0zNDh6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InVuaUYxRDIiIHVuaWNvZGU9IiYjeGYxZDI7IiAKZD0iTTU4MiAyMjhxMCAtNjYgLTkzIC02NnEtMTA3IDAgLTEwNyA2M3EwIDY0IDk4IDY0cTEwMiAwIDEwMiAtNjF6TTU0NiA2OTRxMCAtODUgLTc0IC04NXEtNzcgMCAtNzcgODRxMCA5MCA3NyA5MHEzNiAwIDU1IC0yNS41dDE5IC02My41ek03MTIgNzY5djEyNXEtNzggLTI5IC0xMzUgLTI5cS01MCAyOSAtMTEwIDI5cS04NiAwIC0xNDUgLTU3dC01OSAtMTQzcTAgLTUwIDI5LjUgLTEwMnQ3My41IC02N3YtM3EtMzggLTE3IC0zOCAtODUKcTAgLTUzIDQxIC03N3YtM3EtMTEzIC0zNyAtMTEzIC0xMzlxMCAtNDUgMjAgLTc4LjV0NTQgLTUxdDcyIC0yNS41dDgxIC04cTIyNCAwIDIyNCAxODhxMCA2NyAtNDggOTl0LTEyNiA0NnEtMjcgNSAtNTEuNSAyMC41dC0yNC41IDM5LjVxMCA0NCA0OSA1MnE3NyAxNSAxMjIgNzB0NDUgMTM0cTAgMjQgLTEwIDUycTM3IDkgNDkgMTN6TTc3MSAzNTBoMTM3cS0yIDI3IC0yIDgydjM4N3EwIDQ2IDIgNjloLTEzN3EzIC0yMyAzIC03MXYtMzkyCnEwIC01MCAtMyAtNzV6TTEyODAgMzY2djEyMXEtMzAgLTIxIC02OCAtMjFxLTUzIDAgLTUzIDgydjIyNWg1MnE5IDAgMjYuNSAtMXQyNi41IC0xdjExN2gtMTA1cTAgODIgMyAxMDJoLTE0MHE0IC0yNCA0IC01NXYtNDdoLTYwdi0xMTdxMzYgMyAzNyAzcTMgMCAxMSAtMC41dDEyIC0wLjV2LTJoLTJ2LTIxN3EwIC0zNyAyLjUgLTY0dDExLjUgLTU2LjV0MjQuNSAtNDguNXQ0My41IC0zMXQ2NiAtMTJxNjQgMCAxMDggMjR6TTkyNCAxMDcyCnEwIDM2IC0yNCA2My41dC02MCAyNy41dC02MC41IC0yN3QtMjQuNSAtNjRxMCAtMzYgMjUgLTYyLjV0NjAgLTI2LjV0NTkuNSAyN3QyNC41IDYyek0xNTM2IDExMjB2LTk2MHEwIC0xMTkgLTg0LjUgLTIwMy41dC0yMDMuNSAtODQuNWgtOTYwcS0xMTkgMCAtMjAzLjUgODQuNXQtODQuNSAyMDMuNXY5NjBxMCAxMTkgODQuNSAyMDMuNXQyMDMuNSA4NC41aDk2MHExMTkgMCAyMDMuNSAtODQuNXQ4NC41IC0yMDMuNXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzQzOCIgdW5pY29kZT0iJiN4ZjFkMzsiIGhvcml6LWFkdi14PSIxNzkyIiAKZD0iTTU5NSAyMnEwIDEwMCAtMTY1IDEwMHEtMTU4IDAgLTE1OCAtMTA0cTAgLTEwMSAxNzIgLTEwMXExNTEgMCAxNTEgMTA1ek01MzYgNzc3cTAgNjEgLTMwIDEwMnQtODkgNDFxLTEyNCAwIC0xMjQgLTE0NXEwIC0xMzUgMTI0IC0xMzVxMTE5IDAgMTE5IDEzN3pNODA1IDExMDF2LTIwMnEtMzYgLTEyIC03OSAtMjJxMTYgLTQzIDE2IC04NHEwIC0xMjcgLTczIC0yMTYuNXQtMTk3IC0xMTIuNXEtNDAgLTggLTU5LjUgLTI3dC0xOS41IC01OApxMCAtMzEgMjIuNSAtNTEuNXQ1OCAtMzJ0NzguNSAtMjJ0ODYgLTI1LjV0NzguNSAtMzcuNXQ1OCAtNjR0MjIuNSAtOTguNXEwIC0zMDQgLTM2MyAtMzA0cS02OSAwIC0xMzAgMTIuNXQtMTE2IDQxdC04Ny41IDgydC0zMi41IDEyNy41cTAgMTY1IDE4MiAyMjV2NHEtNjcgNDEgLTY3IDEyNnEwIDEwOSA2MyAxMzd2NHEtNzIgMjQgLTExOS41IDEwOC41dC00Ny41IDE2NS41cTAgMTM5IDk1IDIzMS41dDIzNSA5Mi41cTk2IDAgMTc4IC00NwpxOTggMCAyMTggNDd6TTExMjMgMjIwaC0yMjJxNCA0NSA0IDEzNHY2MDlxMCA5NCAtNCAxMjhoMjIycS00IC0zMyAtNCAtMTI0di02MTNxMCAtODkgNCAtMTM0ek0xNzI0IDQ0MnYtMTk2cS03MSAtMzkgLTE3NCAtMzlxLTYyIDAgLTEwNyAyMHQtNzAgNTB0LTM5LjUgNzh0LTE4LjUgOTJ0LTQgMTAzdjM1MWgydjRxLTcgMCAtMTkgMXQtMTggMXEtMjEgMCAtNTkgLTZ2MTkwaDk2djc2cTAgNTQgLTYgODloMjI3cS02IC00MSAtNiAtMTY1aDE3MQp2LTE5MHEtMTUgMCAtNDMuNSAydC00Mi41IDJoLTg1di0zNjVxMCAtMTMxIDg3IC0xMzFxNjEgMCAxMDkgMzN6TTExNDggMTM4OXEwIC01OCAtMzkgLTEwMS41dC05NiAtNDMuNXEtNTggMCAtOTggNDMuNXQtNDAgMTAxLjVxMCA1OSAzOS41IDEwM3Q5OC41IDQ0cTU4IDAgOTYuNSAtNDQuNXQzOC41IC0xMDIuNXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzQzOSIgdW5pY29kZT0iJiN4ZjFkNDsiIApkPSJNODA5IDUzMmwyNjYgNDk5aC0xMTJsLTE1NyAtMzEycS0yNCAtNDggLTQ0IC05MmwtNDIgOTJsLTE1NSAzMTJoLTEyMGwyNjMgLTQ5M3YtMzI0aDEwMXYzMTh6TTE1MzYgMTEyMHYtOTYwcTAgLTExOSAtODQuNSAtMjAzLjV0LTIwMy41IC04NC41aC05NjBxLTExOSAwIC0yMDMuNSA4NC41dC04NC41IDIwMy41djk2MHEwIDExOSA4NC41IDIwMy41dDIwMy41IDg0LjVoOTYwcTExOSAwIDIwMy41IC04NC41dDg0LjUgLTIwMy41eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlGMUQ1IiB1bmljb2RlPSImI3hmMWQ1OyIgaG9yaXotYWR2LXg9IjEyODAiIApkPSJNODQyIDk2NHEwIC04MCAtNTcgLTEzNi41dC0xMzYgLTU2LjVxLTYwIDAgLTExMSAzNXEtNjIgLTY3IC0xMTUgLTE0NnEtMjQ3IC0zNzEgLTIwMiAtODU5cTEgLTIyIC0xMi41IC0zOC41dC0zNC41IC0xOC41aC01cS0yMCAwIC0zNSAxMy41dC0xNyAzMy41cS0xNCAxMjYgLTMuNSAyNDcuNXQyOS41IDIxN3Q1NCAxODZ0NjkgMTU1LjV0NzQgMTI1cTYxIDkwIDEzMiAxNjVxLTE2IDM1IC0xNiA3N3EwIDgwIDU2LjUgMTM2LjV0MTM2LjUgNTYuNQp0MTM2LjUgLTU2LjV0NTYuNSAtMTM2LjV6TTEyMjMgOTUzcTAgLTE1OCAtNzggLTI5MnQtMjEyLjUgLTIxMnQtMjkyLjUgLTc4cS02NCAwIC0xMzEgMTRxLTIxIDUgLTMyLjUgMjMuNXQtNi41IDM5LjVxNSAyMCAyMyAzMS41dDM5IDcuNXE1MSAtMTMgMTA4IC0xM3E5NyAwIDE4NiAzOHQxNTMgMTAydDEwMiAxNTN0MzggMTg2dC0zOCAxODZ0LTEwMiAxNTN0LTE1MyAxMDJ0LTE4NiAzOHQtMTg2IC0zOHQtMTUzIC0xMDJ0LTEwMiAtMTUzCnQtMzggLTE4NnEwIC0xMTQgNTIgLTIxOHExMCAtMjAgMy41IC00MHQtMjUuNSAtMzB0LTM5LjUgLTN0LTMwLjUgMjZxLTY0IDEyMyAtNjQgMjY1cTAgMTE5IDQ2LjUgMjI3dDEyNC41IDE4NnQxODYgMTI0dDIyNiA0NnExNTggMCAyOTIuNSAtNzh0MjEyLjUgLTIxMi41dDc4IC0yOTIuNXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idW5pRjFENiIgdW5pY29kZT0iJiN4ZjFkNjsiIGhvcml6LWFkdi14PSIxNzkyIiAKZD0iTTI3MCA3MzBxLTggMTkgLTggNTJxMCAyMCAxMSA0OXQyNCA0NXEtMSAyMiA3LjUgNTN0MjIuNSA0M3EwIDEzOSA5Mi41IDI4OC41dDIxNy41IDIwOS41cTEzOSA2NiAzMjQgNjZxMTMzIDAgMjY2IC01NXE0OSAtMjEgOTAgLTQ4dDcxIC01NnQ1NSAtNjh0NDIgLTc0dDMyLjUgLTg0LjV0MjUuNSAtODkuNXQyMiAtOThsMSAtNXE1NSAtODMgNTUgLTE1MHEwIC0xNCAtOSAtNDB0LTkgLTM4cTAgLTEgMS41IC0zLjV0My41IC01dDIgLTMuNQpxNzcgLTExNCAxMjAuNSAtMjE0LjV0NDMuNSAtMjA4LjVxMCAtNDMgLTE5LjUgLTEwMHQtNTUuNSAtNTdxLTkgMCAtMTkuNSA3LjV0LTE5IDE3LjV0LTE5IDI2dC0xNiAyNi41dC0xMy41IDI2dC05IDE3LjVxLTEgMSAtMyAxbC01IC00cS01OSAtMTU0IC0xMzIgLTIyM3EyMCAtMjAgNjEuNSAtMzguNXQ2OSAtNDEuNXQzNS41IC02NXEtMiAtNCAtNCAtMTZ0LTcgLTE4cS02NCAtOTcgLTMwMiAtOTdxLTUzIDAgLTExMC41IDl0LTk4IDIwCnQtMTA0LjUgMzBxLTE1IDUgLTIzIDdxLTE0IDQgLTQ2IDQuNXQtNDAgMS41cS00MSAtNDUgLTEyNy41IC02NXQtMTY4LjUgLTIwcS0zNSAwIC02OSAxLjV0LTkzIDl0LTEwMSAyMC41dC03NC41IDQwdC0zMi41IDY0cTAgNDAgMTAgNTkuNXQ0MSA0OC41cTExIDIgNDAuNSAxM3Q0OS41IDEycTQgMCAxNCAycTIgMiAyIDRsLTIgM3EtNDggMTEgLTEwOCAxMDUuNXQtNzMgMTU2LjVsLTUgM3EtNCAwIC0xMiAtMjBxLTE4IC00MSAtNTQuNSAtNzQuNQp0LTc3LjUgLTM3LjVoLTFxLTQgMCAtNiA0LjV0LTUgNS41cS0yMyA1NCAtMjMgMTAwcTAgMjc1IDI1MiA0NjZ6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InVuaUYxRDciIHVuaWNvZGU9IiYjeGYxZDc7IiBob3Jpei1hZHYteD0iMjA0OCIgCmQ9Ik01ODAgMTA3NXEwIDQxIC0yNSA2NnQtNjYgMjVxLTQzIDAgLTc2IC0yNS41dC0zMyAtNjUuNXEwIC0zOSAzMyAtNjQuNXQ3NiAtMjUuNXE0MSAwIDY2IDI0LjV0MjUgNjUuNXpNMTMyMyA1NjhxMCAyOCAtMjUuNSA1MHQtNjUuNSAyMnEtMjcgMCAtNDkuNSAtMjIuNXQtMjIuNSAtNDkuNXEwIC0yOCAyMi41IC01MC41dDQ5LjUgLTIyLjVxNDAgMCA2NS41IDIydDI1LjUgNTF6TTEwODcgMTA3NXEwIDQxIC0yNC41IDY2dC02NS41IDI1CnEtNDMgMCAtNzYgLTI1LjV0LTMzIC02NS41cTAgLTM5IDMzIC02NC41dDc2IC0yNS41cTQxIDAgNjUuNSAyNC41dDI0LjUgNjUuNXpNMTcyMiA1NjhxMCAyOCAtMjYgNTB0LTY1IDIycS0yNyAwIC00OS41IC0yMi41dC0yMi41IC00OS41cTAgLTI4IDIyLjUgLTUwLjV0NDkuNSAtMjIuNXEzOSAwIDY1IDIydDI2IDUxek0xNDU2IDk2NXEtMzEgNCAtNzAgNHEtMTY5IDAgLTMxMSAtNzd0LTIyMy41IC0yMDguNXQtODEuNSAtMjg3LjUKcTAgLTc4IDIzIC0xNTJxLTM1IC0zIC02OCAtM3EtMjYgMCAtNTAgMS41dC01NSA2LjV0LTQ0LjUgN3QtNTQuNSAxMC41dC01MCAxMC41bC0yNTMgLTEyN2w3MiAyMThxLTI5MCAyMDMgLTI5MCA0OTBxMCAxNjkgOTcuNSAzMTF0MjY0IDIyMy41dDM2My41IDgxLjVxMTc2IDAgMzMyLjUgLTY2dDI2MiAtMTgyLjV0MTM2LjUgLTI2MC41ek0yMDQ4IDQwNHEwIC0xMTcgLTY4LjUgLTIyMy41dC0xODUuNSAtMTkzLjVsNTUgLTE4MWwtMTk5IDEwOQpxLTE1MCAtMzcgLTIxOCAtMzdxLTE2OSAwIC0zMTEgNzAuNXQtMjIzLjUgMTkxLjV0LTgxLjUgMjY0dDgxLjUgMjY0dDIyMy41IDE5MS41dDMxMSA3MC41cTE2MSAwIDMwMyAtNzAuNXQyMjcuNSAtMTkydDg1LjUgLTI2My41eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNDQzIiB1bmljb2RlPSImI3hmMWQ4OyIgaG9yaXotYWR2LXg9IjE3OTIiIApkPSJNMTc2NCAxNTI1cTMzIC0yNCAyNyAtNjRsLTI1NiAtMTUzNnEtNSAtMjkgLTMyIC00NXEtMTQgLTggLTMxIC04cS0xMSAwIC0yNCA1bC00NTMgMTg1bC0yNDIgLTI5NXEtMTggLTIzIC00OSAtMjNxLTEzIDAgLTIyIDRxLTE5IDcgLTMwLjUgMjMuNXQtMTEuNSAzNi41djM0OWw4NjQgMTA1OWwtMTA2OSAtOTI1bC0zOTUgMTYycS0zNyAxNCAtNDAgNTVxLTIgNDAgMzIgNTlsMTY2NCA5NjBxMTUgOSAzMiA5cTIwIDAgMzYgLTExeiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNDQ0IiB1bmljb2RlPSImI3hmMWQ5OyIgaG9yaXotYWR2LXg9IjE3OTIiIApkPSJNMTc2NCAxNTI1cTMzIC0yNCAyNyAtNjRsLTI1NiAtMTUzNnEtNSAtMjkgLTMyIC00NXEtMTQgLTggLTMxIC04cS0xMSAwIC0yNCA1bC01MjcgMjE1bC0yOTggLTMyN3EtMTggLTIxIC00NyAtMjFxLTE0IDAgLTIzIDRxLTE5IDcgLTMwIDIzLjV0LTExIDM2LjV2NDUybC00NzIgMTkzcS0zNyAxNCAtNDAgNTVxLTMgMzkgMzIgNTlsMTY2NCA5NjBxMzUgMjEgNjggLTJ6TTE0MjIgMjZsMjIxIDEzMjNsLTE0MzQgLTgyN2wzMzYgLTEzNwpsODYzIDYzOWwtNDc4IC03OTd6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9Il80NDUiIHVuaWNvZGU9IiYjeGYxZGE7IiAKZD0iTTE1MzYgNjQwcTAgLTE1NiAtNjEgLTI5OHQtMTY0IC0yNDV0LTI0NSAtMTY0dC0yOTggLTYxcS0xNzIgMCAtMzI3IDcyLjV0LTI2NCAyMDQuNXEtNyAxMCAtNi41IDIyLjV0OC41IDIwLjVsMTM3IDEzOHExMCA5IDI1IDlxMTYgLTIgMjMgLTEycTczIC05NSAxNzkgLTE0N3QyMjUgLTUycTEwNCAwIDE5OC41IDQwLjV0MTYzLjUgMTA5LjV0MTA5LjUgMTYzLjV0NDAuNSAxOTguNXQtNDAuNSAxOTguNXQtMTA5LjUgMTYzLjUKdC0xNjMuNSAxMDkuNXQtMTk4LjUgNDAuNXEtOTggMCAtMTg4IC0zNS41dC0xNjAgLTEwMS41bDEzNyAtMTM4cTMxIC0zMCAxNCAtNjlxLTE3IC00MCAtNTkgLTQwaC00NDhxLTI2IDAgLTQ1IDE5dC0xOSA0NXY0NDhxMCA0MiA0MCA1OXEzOSAxNyA2OSAtMTRsMTMwIC0xMjlxMTA3IDEwMSAyNDQuNSAxNTYuNXQyODQuNSA1NS41cTE1NiAwIDI5OCAtNjF0MjQ1IC0xNjR0MTY0IC0yNDV0NjEgLTI5OHpNODk2IDkyOHYtNDQ4cTAgLTE0IC05IC0yMwp0LTIzIC05aC0zMjBxLTE0IDAgLTIzIDl0LTkgMjN2NjRxMCAxNCA5IDIzdDIzIDloMjI0djM1MnEwIDE0IDkgMjN0MjMgOWg2NHExNCAwIDIzIC05dDkgLTIzeiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNDQ2IiB1bmljb2RlPSImI3hmMWRiOyIgCmQ9Ik03NjggMTI4MHEtMTMwIDAgLTI0OC41IC01MXQtMjA0IC0xMzYuNXQtMTM2LjUgLTIwNHQtNTEgLTI0OC41dDUxIC0yNDguNXQxMzYuNSAtMjA0dDIwNCAtMTM2LjV0MjQ4LjUgLTUxdDI0OC41IDUxdDIwNCAxMzYuNXQxMzYuNSAyMDR0NTEgMjQ4LjV0LTUxIDI0OC41dC0xMzYuNSAyMDR0LTIwNCAxMzYuNXQtMjQ4LjUgNTF6TTE1MzYgNjQwcTAgLTIwOSAtMTAzIC0zODUuNXQtMjc5LjUgLTI3OS41dC0zODUuNSAtMTAzdC0zODUuNSAxMDMKdC0yNzkuNSAyNzkuNXQtMTAzIDM4NS41dDEwMyAzODUuNXQyNzkuNSAyNzkuNXQzODUuNSAxMDN0Mzg1LjUgLTEwM3QyNzkuNSAtMjc5LjV0MTAzIC0zODUuNXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzQ0NyIgdW5pY29kZT0iJiN4ZjFkYzsiIGhvcml6LWFkdi14PSIxNzkyIiAKZD0iTTE2ODIgLTEyOHEtNDQgMCAtMTMyLjUgMy41dC0xMzMuNSAzLjVxLTQ0IDAgLTEzMiAtMy41dC0xMzIgLTMuNXEtMjQgMCAtMzcgMjAuNXQtMTMgNDUuNXEwIDMxIDE3IDQ2dDM5IDE3dDUxIDd0NDUgMTVxMzMgMjEgMzMgMTQwbC0xIDM5MXEwIDIxIC0xIDMxcS0xMyA0IC01MCA0aC02NzVxLTM4IDAgLTUxIC00cS0xIC0xMCAtMSAtMzFsLTEgLTM3MXEwIC0xNDIgMzcgLTE2NHExNiAtMTAgNDggLTEzdDU3IC0zLjV0NDUgLTE1CnQyMCAtNDUuNXEwIC0yNiAtMTIuNSAtNDh0LTM2LjUgLTIycS00NyAwIC0xMzkuNSAzLjV0LTEzOC41IDMuNXEtNDMgMCAtMTI4IC0zLjV0LTEyNyAtMy41cS0yMyAwIC0zNS41IDIxdC0xMi41IDQ1cTAgMzAgMTUuNSA0NXQzNiAxNy41dDQ3LjUgNy41dDQyIDE1cTMzIDIzIDMzIDE0M2wtMSA1N3Y4MTNxMCAzIDAuNSAyNnQwIDM2LjV0LTEuNSAzOC41dC0zLjUgNDJ0LTYuNSAzNi41dC0xMSAzMS41dC0xNiAxOHEtMTUgMTAgLTQ1IDEydC01MyAyCnQtNDEgMTR0LTE4IDQ1cTAgMjYgMTIgNDh0MzYgMjJxNDYgMCAxMzguNSAtMy41dDEzOC41IC0zLjVxNDIgMCAxMjYuNSAzLjV0MTI2LjUgMy41cTI1IDAgMzcuNSAtMjJ0MTIuNSAtNDhxMCAtMzAgLTE3IC00My41dC0zOC41IC0xNC41dC00OS41IC00dC00MyAtMTNxLTM1IC0yMSAtMzUgLTE2MGwxIC0zMjBxMCAtMjEgMSAtMzJxMTMgLTMgMzkgLTNoNjk5cTI1IDAgMzggM3ExIDExIDEgMzJsMSAzMjBxMCAxMzkgLTM1IDE2MApxLTE4IDExIC01OC41IDEyLjV0LTY2IDEzdC0yNS41IDQ5LjVxMCAyNiAxMi41IDQ4dDM3LjUgMjJxNDQgMCAxMzIgLTMuNXQxMzIgLTMuNXE0MyAwIDEyOSAzLjV0MTI5IDMuNXEyNSAwIDM3LjUgLTIydDEyLjUgLTQ4cTAgLTMwIC0xNy41IC00NHQtNDAgLTE0LjV0LTUxLjUgLTN0LTQ0IC0xMi41cS0zNSAtMjMgLTM1IC0xNjFsMSAtOTQzcTAgLTExOSAzNCAtMTQwcTE2IC0xMCA0NiAtMTMuNXQ1My41IC00LjV0NDEuNSAtMTUuNXQxOCAtNDQuNQpxMCAtMjYgLTEyIC00OHQtMzYgLTIyeiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNDQ4IiB1bmljb2RlPSImI3hmMWRkOyIgaG9yaXotYWR2LXg9IjEyODAiIApkPSJNMTI3OCAxMzQ3di03M3EwIC0yOSAtMTguNSAtNjF0LTQyLjUgLTMycS01MCAwIC01NCAtMXEtMjYgLTYgLTMyIC0zMXEtMyAtMTEgLTMgLTY0di0xMTUycTAgLTI1IC0xOCAtNDN0LTQzIC0xOGgtMTA4cS0yNSAwIC00MyAxOHQtMTggNDN2MTIxOGgtMTQzdi0xMjE4cTAgLTI1IC0xNy41IC00M3QtNDMuNSAtMThoLTEwOHEtMjYgMCAtNDMuNSAxOHQtMTcuNSA0M3Y0OTZxLTE0NyAxMiAtMjQ1IDU5cS0xMjYgNTggLTE5MiAxNzkKcS02NCAxMTcgLTY0IDI1OXEwIDE2NiA4OCAyODZxODggMTE4IDIwOSAxNTlxMTExIDM3IDQxNyAzN2g0NzlxMjUgMCA0MyAtMTh0MTggLTQzeiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNDQ5IiB1bmljb2RlPSImI3hmMWRlOyIgCmQ9Ik0zNTIgMTI4di0xMjhoLTM1MnYxMjhoMzUyek03MDQgMjU2cTI2IDAgNDUgLTE5dDE5IC00NXYtMjU2cTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtMjU2cS0yNiAwIC00NSAxOXQtMTkgNDV2MjU2cTAgMjYgMTkgNDV0NDUgMTloMjU2ek04NjQgNjQwdi0xMjhoLTg2NHYxMjhoODY0ek0yMjQgMTE1MnYtMTI4aC0yMjR2MTI4aDIyNHpNMTUzNiAxMjh2LTEyOGgtNzM2djEyOGg3MzZ6TTU3NiAxMjgwcTI2IDAgNDUgLTE5dDE5IC00NXYtMjU2CnEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTI1NnEtMjYgMCAtNDUgMTl0LTE5IDQ1djI1NnEwIDI2IDE5IDQ1dDQ1IDE5aDI1NnpNMTIxNiA3NjhxMjYgMCA0NSAtMTl0MTkgLTQ1di0yNTZxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC0yNTZxLTI2IDAgLTQ1IDE5dC0xOSA0NXYyNTZxMCAyNiAxOSA0NXQ0NSAxOWgyNTZ6TTE1MzYgNjQwdi0xMjhoLTIyNHYxMjhoMjI0ek0xNTM2IDExNTJ2LTEyOGgtODY0djEyOGg4NjR6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InVuaUYxRTAiIHVuaWNvZGU9IiYjeGYxZTA7IiAKZD0iTTEyMTYgNTEycTEzMyAwIDIyNi41IC05My41dDkzLjUgLTIyNi41dC05My41IC0yMjYuNXQtMjI2LjUgLTkzLjV0LTIyNi41IDkzLjV0LTkzLjUgMjI2LjVxMCAxMiAyIDM0bC0zNjAgMTgwcS05MiAtODYgLTIxOCAtODZxLTEzMyAwIC0yMjYuNSA5My41dC05My41IDIyNi41dDkzLjUgMjI2LjV0MjI2LjUgOTMuNXExMjYgMCAyMTggLTg2bDM2MCAxODBxLTIgMjIgLTIgMzRxMCAxMzMgOTMuNSAyMjYuNXQyMjYuNSA5My41CnQyMjYuNSAtOTMuNXQ5My41IC0yMjYuNXQtOTMuNSAtMjI2LjV0LTIyNi41IC05My41cS0xMjYgMCAtMjE4IDg2bC0zNjAgLTE4MHEyIC0yMiAyIC0zNHQtMiAtMzRsMzYwIC0xODBxOTIgODYgMjE4IDg2eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNDUxIiB1bmljb2RlPSImI3hmMWUxOyIgCmQ9Ik0xMjgwIDM0MXEwIDg4IC02Mi41IDE1MXQtMTUwLjUgNjNxLTg0IDAgLTE0NSAtNThsLTI0MSAxMjBxMiAxNiAyIDIzdC0yIDIzbDI0MSAxMjBxNjEgLTU4IDE0NSAtNThxODggMCAxNTAuNSA2M3Q2Mi41IDE1MXQtNjIuNSAxNTAuNXQtMTUwLjUgNjIuNXQtMTUxIC02Mi41dC02MyAtMTUwLjVxMCAtNyAyIC0yM2wtMjQxIC0xMjBxLTYyIDU3IC0xNDUgNTdxLTg4IDAgLTE1MC41IC02Mi41dC02Mi41IC0xNTAuNXQ2Mi41IC0xNTAuNQp0MTUwLjUgLTYyLjVxODMgMCAxNDUgNTdsMjQxIC0xMjBxLTIgLTE2IC0yIC0yM3EwIC04OCA2MyAtMTUwLjV0MTUxIC02Mi41dDE1MC41IDYyLjV0NjIuNSAxNTAuNXpNMTUzNiAxMTIwdi05NjBxMCAtMTE5IC04NC41IC0yMDMuNXQtMjAzLjUgLTg0LjVoLTk2MHEtMTE5IDAgLTIwMy41IDg0LjV0LTg0LjUgMjAzLjV2OTYwcTAgMTE5IDg0LjUgMjAzLjV0MjAzLjUgODQuNWg5NjBxMTE5IDAgMjAzLjUgLTg0LjV0ODQuNSAtMjAzLjV6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9Il80NTIiIHVuaWNvZGU9IiYjeGYxZTI7IiBob3Jpei1hZHYteD0iMTc5MiIgCmQ9Ik01NzEgOTQ3cS0xMCAyNSAtMzQgMzV0LTQ5IDBxLTEwOCAtNDQgLTE5MSAtMTI3dC0xMjcgLTE5MXEtMTAgLTI1IDAgLTQ5dDM1IC0zNHExMyAtNSAyNCAtNXE0MiAwIDYwIDQwcTM0IDg0IDk4LjUgMTQ4LjV0MTQ4LjUgOTguNXEyNSAxMSAzNSAzNXQwIDQ5ek0xNTEzIDEzMDNsNDYgLTQ2bC0yNDQgLTI0M2w2OCAtNjhxMTkgLTE5IDE5IC00NS41dC0xOSAtNDUuNWwtNjQgLTY0cTg5IC0xNjEgODkgLTM0M3EwIC0xNDMgLTU1LjUgLTI3My41CnQtMTUwIC0yMjV0LTIyNSAtMTUwdC0yNzMuNSAtNTUuNXQtMjczLjUgNTUuNXQtMjI1IDE1MHQtMTUwIDIyNXQtNTUuNSAyNzMuNXQ1NS41IDI3My41dDE1MCAyMjV0MjI1IDE1MHQyNzMuNSA1NS41cTE4MiAwIDM0MyAtODlsNjQgNjRxMTkgMTkgNDUuNSAxOXQ0NS41IC0xOWw2OCAtNjh6TTE1MjEgMTM1OXEtMTAgLTEwIC0yMiAtMTBxLTEzIDAgLTIzIDEwbC05MSA5MHEtOSAxMCAtOSAyM3Q5IDIzcTEwIDkgMjMgOXQyMyAtOWw5MCAtOTEKcTEwIC05IDEwIC0yMi41dC0xMCAtMjIuNXpNMTc1MSAxMTI5cS0xMSAtOSAtMjMgLTl0LTIzIDlsLTkwIDkxcS0xMCA5IC0xMCAyMi41dDEwIDIyLjVxOSAxMCAyMi41IDEwdDIyLjUgLTEwbDkxIC05MHE5IC0xMCA5IC0yM3QtOSAtMjN6TTE3OTIgMTMxMnEwIC0xNCAtOSAtMjN0LTIzIC05aC05NnEtMTQgMCAtMjMgOXQtOSAyM3Q5IDIzdDIzIDloOTZxMTQgMCAyMyAtOXQ5IC0yM3pNMTYwMCAxNTA0di05NnEwIC0xNCAtOSAtMjN0LTIzIC05CnQtMjMgOXQtOSAyM3Y5NnEwIDE0IDkgMjN0MjMgOXQyMyAtOXQ5IC0yM3pNMTc1MSAxNDQ5bC05MSAtOTBxLTEwIC0xMCAtMjIgLTEwcS0xMyAwIC0yMyAxMHEtMTAgOSAtMTAgMjIuNXQxMCAyMi41bDkwIDkxcTEwIDkgMjMgOXQyMyAtOXE5IC0xMCA5IC0yM3QtOSAtMjN6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9Il80NTMiIHVuaWNvZGU9IiYjeGYxZTM7IiBob3Jpei1hZHYteD0iMTc5MiIgCmQ9Ik02MDkgNzIwbDI4NyAyMDhsMjg3IC0yMDhsLTEwOSAtMzM2aC0zNTV6TTg5NiAxNTM2cTE4MiAwIDM0OCAtNzF0Mjg2IC0xOTF0MTkxIC0yODZ0NzEgLTM0OHQtNzEgLTM0OHQtMTkxIC0yODZ0LTI4NiAtMTkxdC0zNDggLTcxdC0zNDggNzF0LTI4NiAxOTF0LTE5MSAyODZ0LTcxIDM0OHQ3MSAzNDh0MTkxIDI4NnQyODYgMTkxdDM0OCA3MXpNMTUxNSAxODZxMTQ5IDIwMyAxNDkgNDU0djNsLTEwMiAtODlsLTI0MCAyMjRsNjMgMzIzCmwxMzQgLTEycS0xNTAgMjA2IC0zODkgMjgybDUzIC0xMjRsLTI4NyAtMTU5bC0yODcgMTU5bDUzIDEyNHEtMjM5IC03NiAtMzg5IC0yODJsMTM1IDEybDYyIC0zMjNsLTI0MCAtMjI0bC0xMDIgODl2LTNxMCAtMjUxIDE0OSAtNDU0bDMwIDEzMmwzMjYgLTQwbDEzOSAtMjk4bC0xMTYgLTY5cTExNyAtMzkgMjQwIC0zOXQyNDAgMzlsLTExNiA2OWwxMzkgMjk4bDMyNiA0MHoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzQ1NCIgdW5pY29kZT0iJiN4ZjFlNDsiIGhvcml6LWFkdi14PSIxNzkyIiAKZD0iTTQ0OCAyMjR2LTE5MnEwIC0xNCAtOSAtMjN0LTIzIC05aC0xOTJxLTE0IDAgLTIzIDl0LTkgMjN2MTkycTAgMTQgOSAyM3QyMyA5aDE5MnExNCAwIDIzIC05dDkgLTIzek0yNTYgNjA4di0xOTJxMCAtMTQgLTkgLTIzdC0yMyAtOWgtMTkycS0xNCAwIC0yMyA5dC05IDIzdjE5MnEwIDE0IDkgMjN0MjMgOWgxOTJxMTQgMCAyMyAtOXQ5IC0yM3pNODMyIDIyNHYtMTkycTAgLTE0IC05IC0yM3QtMjMgLTloLTE5MnEtMTQgMCAtMjMgOXQtOSAyMwp2MTkycTAgMTQgOSAyM3QyMyA5aDE5MnExNCAwIDIzIC05dDkgLTIzek02NDAgNjA4di0xOTJxMCAtMTQgLTkgLTIzdC0yMyAtOWgtMTkycS0xNCAwIC0yMyA5dC05IDIzdjE5MnEwIDE0IDkgMjN0MjMgOWgxOTJxMTQgMCAyMyAtOXQ5IC0yM3pNNjYgNzY4cS0yOCAwIC00NyAxOXQtMTkgNDZ2MTI5aDUxNHYtMTI5cTAgLTI3IC0xOSAtNDZ0LTQ2IC0xOWgtMzgzek0xMjE2IDIyNHYtMTkycTAgLTE0IC05IC0yM3QtMjMgLTloLTE5MgpxLTE0IDAgLTIzIDl0LTkgMjN2MTkycTAgMTQgOSAyM3QyMyA5aDE5MnExNCAwIDIzIC05dDkgLTIzek0xMDI0IDYwOHYtMTkycTAgLTE0IC05IC0yM3QtMjMgLTloLTE5MnEtMTQgMCAtMjMgOXQtOSAyM3YxOTJxMCAxNCA5IDIzdDIzIDloMTkycTE0IDAgMjMgLTl0OSAtMjN6TTE2MDAgMjI0di0xOTJxMCAtMTQgLTkgLTIzdC0yMyAtOWgtMTkycS0xNCAwIC0yMyA5dC05IDIzdjE5MnEwIDE0IDkgMjN0MjMgOWgxOTJxMTQgMCAyMyAtOXQ5IC0yMwp6TTE0MDggNjA4di0xOTJxMCAtMTQgLTkgLTIzdC0yMyAtOWgtMTkycS0xNCAwIC0yMyA5dC05IDIzdjE5MnEwIDE0IDkgMjN0MjMgOWgxOTJxMTQgMCAyMyAtOXQ5IC0yM3pNMTc5MiAxMDE2di0xM2gtNTE0djEwcTAgMTA0IC0zODIgMTAycS0zODIgLTEgLTM4MiAtMTAydi0xMGgtNTE0djEzcTAgMTcgOC41IDQzdDM0IDY0dDY1LjUgNzUuNXQxMTAuNSA3NnQxNjAgNjcuNXQyMjQgNDcuNXQyOTMuNSAxOC41dDI5MyAtMTguNXQyMjQgLTQ3LjUKdDE2MC41IC02Ny41dDExMC41IC03NnQ2NS41IC03NS41dDM0IC02NHQ4LjUgLTQzek0xNzkyIDYwOHYtMTkycTAgLTE0IC05IC0yM3QtMjMgLTloLTE5MnEtMTQgMCAtMjMgOXQtOSAyM3YxOTJxMCAxNCA5IDIzdDIzIDloMTkycTE0IDAgMjMgLTl0OSAtMjN6TTE3OTIgOTYydi0xMjlxMCAtMjcgLTE5IC00NnQtNDYgLTE5aC0zODRxLTI3IDAgLTQ2IDE5dC0xOSA0NnYxMjloNTE0eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNDU1IiB1bmljb2RlPSImI3hmMWU1OyIgaG9yaXotYWR2LXg9IjE3OTIiIApkPSJNNzA0IDEyMTZ2LTc2OHEwIC0yNiAtMTkgLTQ1dC00NSAtMTl2LTU3NnEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTUxMnEtMjYgMCAtNDUgMTl0LTE5IDQ1djUxMmwyNDkgODczcTcgMjMgMzEgMjNoNDI0ek0xMDI0IDEyMTZ2LTcwNGgtMjU2djcwNGgyNTZ6TTE3OTIgMzIwdi01MTJxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC01MTJxLTI2IDAgLTQ1IDE5dC0xOSA0NXY1NzZxLTI2IDAgLTQ1IDE5dC0xOSA0NXY3NjhoNDI0cTI0IDAgMzEgLTIzegpNNzM2IDE1MDR2LTIyNGgtMzUydjIyNHEwIDE0IDkgMjN0MjMgOWgyODhxMTQgMCAyMyAtOXQ5IC0yM3pNMTQwOCAxNTA0di0yMjRoLTM1MnYyMjRxMCAxNCA5IDIzdDIzIDloMjg4cTE0IDAgMjMgLTl0OSAtMjN6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9Il80NTYiIHVuaWNvZGU9IiYjeGYxZTY7IiBob3Jpei1hZHYteD0iMTc5MiIgCmQ9Ik0xNzU1IDEwODNxMzcgLTM4IDM3IC05MC41dC0zNyAtOTAuNWwtNDAxIC00MDBsMTUwIC0xNTBsLTE2MCAtMTYwcS0xNjMgLTE2MyAtMzg5LjUgLTE4Ni41dC00MTEuNSAxMDAuNWwtMzYyIC0zNjJoLTE4MXYxODFsMzYyIDM2MnEtMTI0IDE4NSAtMTAwLjUgNDExLjV0MTg2LjUgMzg5LjVsMTYwIDE2MGwxNTAgLTE1MGw0MDAgNDAxcTM4IDM3IDkxIDM3dDkwIC0zN3QzNyAtOTAuNXQtMzcgLTkwLjVsLTQwMCAtNDAxbDIzNCAtMjM0Cmw0MDEgNDAwcTM4IDM3IDkxIDM3dDkwIC0zN3oiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzQ1NyIgdW5pY29kZT0iJiN4ZjFlNzsiIGhvcml6LWFkdi14PSIxNzkyIiAKZD0iTTg3MyA3OTZxMCAtODMgLTYzLjUgLTE0Mi41dC0xNTIuNSAtNTkuNXQtMTUyLjUgNTkuNXQtNjMuNSAxNDIuNXEwIDg0IDYzLjUgMTQzdDE1Mi41IDU5dDE1Mi41IC01OXQ2My41IC0xNDN6TTEzNzUgNzk2cTAgLTgzIC02MyAtMTQyLjV0LTE1MyAtNTkuNXEtODkgMCAtMTUyLjUgNTkuNXQtNjMuNSAxNDIuNXEwIDg0IDYzLjUgMTQzdDE1Mi41IDU5cTkwIDAgMTUzIC01OXQ2MyAtMTQzek0xNjAwIDYxNnY2NjdxMCA4NyAtMzIgMTIzLjUKdC0xMTEgMzYuNWgtMTExMnEtODMgMCAtMTEyLjUgLTM0dC0yOS41IC0xMjZ2LTY3M3E0MyAtMjMgODguNSAtNDB0ODEgLTI4dDgxIC0xOC41dDcxIC0xMXQ3MCAtNHQ1OC41IC0wLjV0NTYuNSAydDQ0LjUgMnE2OCAxIDk1IC0yN3E2IC02IDEwIC05cTI2IC0yNSA2MSAtNTFxNyA5MSAxMTggODdxNSAwIDM2LjUgLTEuNXQ0MyAtMnQ0NS41IC0xdDUzIDF0NTQuNSA0LjV0NjEgOC41dDYyIDEzLjV0NjcgMTkuNXQ2Ny41IDI3dDcyIDM0LjV6Ck0xNzYzIDYyMXEtMTIxIC0xNDkgLTM3MiAtMjUycTg0IC0yODUgLTIzIC00NjVxLTY2IC0xMTMgLTE4MyAtMTQ4cS0xMDQgLTMyIC0xODIgMTVxLTg2IDUxIC04MiAxNjRsLTEgMzI2djFxLTggMiAtMjQuNSA2dC0yMy41IDVsLTEgLTMzOHE0IC0xMTQgLTgzIC0xNjRxLTc5IC00NyAtMTgzIC0xNXEtMTE3IDM2IC0xODIgMTUwcS0xMDUgMTgwIC0yMiA0NjNxLTI1MSAxMDMgLTM3MiAyNTJxLTI1IDM3IC00IDYzdDYwIC0xcTQgLTIgMTEuNSAtNwp0MTAuNSAtOHY2OTRxMCA3MiA0NyAxMjN0MTE0IDUxaDEyNTdxNjcgMCAxMTQgLTUxdDQ3IC0xMjN2LTY5NGwyMSAxNXEzOSAyNyA2MCAxdC00IC02M3oiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzQ1OCIgdW5pY29kZT0iJiN4ZjFlODsiIGhvcml6LWFkdi14PSIxNzkyIiAKZD0iTTg5NiAxMTAydi00MzRoLTE0NXY0MzRoMTQ1ek0xMjk0IDExMDJ2LTQzNGgtMTQ1djQzNGgxNDV6TTEyOTQgMzQybDI1MyAyNTR2Nzk1aC0xMTk0di0xMDQ5aDMyNnYtMjE3bDIxNyAyMTdoMzk4ek0xNjkyIDE1MzZ2LTEwMTNsLTQzNCAtNDM0aC0zMjZsLTIxNyAtMjE3aC0yMTd2MjE3aC0zOTh2MTE1OGwxMDkgMjg5aDE0ODN6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9Il80NTkiIHVuaWNvZGU9IiYjeGYxZTk7IiAKZD0iTTc3MyAyMTd2LTEyN3EtMSAtMjkyIC02IC0zMDVxLTEyIC0zMiAtNTEgLTQwcS01NCAtOSAtMTgxLjUgMzh0LTE2Mi41IDg5cS0xMyAxNSAtMTcgMzZxLTEgMTIgNCAyNnE0IDEwIDM0IDQ3dDE4MSAyMTZxMSAwIDYwIDcwcTE1IDE5IDM5LjUgMjQuNXQ0OS41IC0zLjVxMjQgLTEwIDM3LjUgLTI5dDEyLjUgLTQyek02MjQgNDY4cS0zIC01NSAtNTIgLTcwbC0xMjAgLTM5cS0yNzUgLTg4IC0yOTIgLTg4cS0zNSAyIC01NCAzNgpxLTEyIDI1IC0xNyA3NXEtOCA3NiAxIDE2Ni41dDMwIDEyNC41dDU2IDMycTEzIDAgMjAyIC03N3E3MSAtMjkgMTE1IC00N2w4NCAtMzRxMjMgLTkgMzUuNSAtMzAuNXQxMS41IC00OC41ek0xNDUwIDE3MXEtNyAtNTQgLTkxLjUgLTE2MXQtMTM1LjUgLTEyN3EtMzcgLTE0IC02MyA3cS0xNCAxMCAtMTg0IDI4N2wtNDcgNzdxLTE0IDIxIC0xMS41IDQ2dDE5LjUgNDZxMzUgNDMgODMgMjZxMSAtMSAxMTkgLTQwcTIwMyAtNjYgMjQyIC03OS41CnQ0NyAtMjAuNXEyOCAtMjIgMjIgLTYxek03NzggODAzcTUgLTEwMiAtNTQgLTEyMnEtNTggLTE3IC0xMTQgNzFsLTM3OCA1OThxLTggMzUgMTkgNjJxNDEgNDMgMjA3LjUgODkuNXQyMjQuNSAzMS41cTQwIC0xMCA0OSAtNDVxMyAtMTggMjIgLTMwNS41dDI0IC0zNzkuNXpNMTQ0MCA2OTVxMyAtMzkgLTI2IC01OXEtMTUgLTEwIC0zMjkgLTg2cS02NyAtMTUgLTkxIC0yM2wxIDJxLTIzIC02IC00NiA0dC0zNyAzMnEtMzAgNDcgMCA4NwpxMSAxIDc1IDEwMnExMjUgMTcxIDE1MCAyMDR0MzQgMzlxMjggMTkgNjUgMnE0OCAtMjMgMTIzIC0xMzMuNXQ4MSAtMTY3LjV2LTN6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9Il80NjAiIHVuaWNvZGU9IiYjeGYxZWE7IiBob3Jpei1hZHYteD0iMjA0OCIgCmQ9Ik0xMDI0IDEwMjRoLTM4NHYtMzg0aDM4NHYzODR6TTExNTIgMzg0di0xMjhoLTY0MHYxMjhoNjQwek0xMTUyIDExNTJ2LTY0MGgtNjQwdjY0MGg2NDB6TTE3OTIgMzg0di0xMjhoLTUxMnYxMjhoNTEyek0xNzkyIDY0MHYtMTI4aC01MTJ2MTI4aDUxMnpNMTc5MiA4OTZ2LTEyOGgtNTEydjEyOGg1MTJ6TTE3OTIgMTE1MnYtMTI4aC01MTJ2MTI4aDUxMnpNMjU2IDE5MnY5NjBoLTEyOHYtOTYwcTAgLTI2IDE5IC00NXQ0NSAtMTl0NDUgMTkKdDE5IDQ1ek0xOTIwIDE5MnYxMDg4aC0xNTM2di0xMDg4cTAgLTMzIC0xMSAtNjRoMTQ4M3EyNiAwIDQ1IDE5dDE5IDQ1ek0yMDQ4IDE0MDh2LTEyMTZxMCAtODAgLTU2IC0xMzZ0LTEzNiAtNTZoLTE2NjRxLTgwIDAgLTEzNiA1NnQtNTYgMTM2djEwODhoMjU2djEyOGgxNzkyeiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNDYxIiB1bmljb2RlPSImI3hmMWViOyIgaG9yaXotYWR2LXg9IjIwNDgiIApkPSJNMTAyNCAxM3EtMjAgMCAtOTMgNzMuNXQtNzMgOTMuNXEwIDMyIDYyLjUgNTR0MTAzLjUgMjJ0MTAzLjUgLTIydDYyLjUgLTU0cTAgLTIwIC03MyAtOTMuNXQtOTMgLTczLjV6TTEyOTQgMjg0cS0yIDAgLTQwIDI1dC0xMDEuNSA1MHQtMTI4LjUgMjV0LTEyOC41IC0yNXQtMTAxIC01MHQtNDAuNSAtMjVxLTE4IDAgLTkzLjUgNzV0LTc1LjUgOTNxMCAxMyAxMCAyM3E3OCA3NyAxOTYgMTIxdDIzMyA0NHQyMzMgLTQ0dDE5NiAtMTIxCnExMCAtMTAgMTAgLTIzcTAgLTE4IC03NS41IC05M3QtOTMuNSAtNzV6TTE1NjcgNTU2cS0xMSAwIC0yMyA4cS0xMzYgMTA1IC0yNTIgMTU0LjV0LTI2OCA0OS41cS04NSAwIC0xNzAuNSAtMjJ0LTE0OSAtNTN0LTExMy41IC02MnQtNzkgLTUzdC0zMSAtMjJxLTE3IDAgLTkyIDc1dC03NSA5M3EwIDEyIDEwIDIycTEzMiAxMzIgMzIwIDIwNXQzODAgNzN0MzgwIC03M3QzMjAgLTIwNXExMCAtMTAgMTAgLTIycTAgLTE4IC03NSAtOTN0LTkyIC03NXoKTTE4MzggODI3cS0xMSAwIC0yMiA5cS0xNzkgMTU3IC0zNzEuNSAyMzYuNXQtNDIwLjUgNzkuNXQtNDIwLjUgLTc5LjV0LTM3MS41IC0yMzYuNXEtMTEgLTkgLTIyIC05cS0xNyAwIC05Mi41IDc1dC03NS41IDkzcTAgMTMgMTAgMjNxMTg3IDE4NiA0NDUgMjg4dDUyNyAxMDJ0NTI3IC0xMDJ0NDQ1IC0yODhxMTAgLTEwIDEwIC0yM3EwIC0xOCAtNzUuNSAtOTN0LTkyLjUgLTc1eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNDYyIiB1bmljb2RlPSImI3hmMWVjOyIgaG9yaXotYWR2LXg9IjE3OTIiIApkPSJNMzg0IDBxMCA1MyAtMzcuNSA5MC41dC05MC41IDM3LjV0LTkwLjUgLTM3LjV0LTM3LjUgLTkwLjV0MzcuNSAtOTAuNXQ5MC41IC0zNy41dDkwLjUgMzcuNXQzNy41IDkwLjV6TTc2OCAwcTAgNTMgLTM3LjUgOTAuNXQtOTAuNSAzNy41dC05MC41IC0zNy41dC0zNy41IC05MC41dDM3LjUgLTkwLjV0OTAuNSAtMzcuNXQ5MC41IDM3LjV0MzcuNSA5MC41ek0zODQgMzg0cTAgNTMgLTM3LjUgOTAuNXQtOTAuNSAzNy41dC05MC41IC0zNy41CnQtMzcuNSAtOTAuNXQzNy41IC05MC41dDkwLjUgLTM3LjV0OTAuNSAzNy41dDM3LjUgOTAuNXpNMTE1MiAwcTAgNTMgLTM3LjUgOTAuNXQtOTAuNSAzNy41dC05MC41IC0zNy41dC0zNy41IC05MC41dDM3LjUgLTkwLjV0OTAuNSAtMzcuNXQ5MC41IDM3LjV0MzcuNSA5MC41ek03NjggMzg0cTAgNTMgLTM3LjUgOTAuNXQtOTAuNSAzNy41dC05MC41IC0zNy41dC0zNy41IC05MC41dDM3LjUgLTkwLjV0OTAuNSAtMzcuNXQ5MC41IDM3LjUKdDM3LjUgOTAuNXpNMzg0IDc2OHEwIDUzIC0zNy41IDkwLjV0LTkwLjUgMzcuNXQtOTAuNSAtMzcuNXQtMzcuNSAtOTAuNXQzNy41IC05MC41dDkwLjUgLTM3LjV0OTAuNSAzNy41dDM3LjUgOTAuNXpNMTE1MiAzODRxMCA1MyAtMzcuNSA5MC41dC05MC41IDM3LjV0LTkwLjUgLTM3LjV0LTM3LjUgLTkwLjV0MzcuNSAtOTAuNXQ5MC41IC0zNy41dDkwLjUgMzcuNXQzNy41IDkwLjV6TTc2OCA3NjhxMCA1MyAtMzcuNSA5MC41dC05MC41IDM3LjUKdC05MC41IC0zNy41dC0zNy41IC05MC41dDM3LjUgLTkwLjV0OTAuNSAtMzcuNXQ5MC41IDM3LjV0MzcuNSA5MC41ek0xNTM2IDB2Mzg0cTAgNTIgLTM4IDkwdC05MCAzOHQtOTAgLTM4dC0zOCAtOTB2LTM4NHEwIC01MiAzOCAtOTB0OTAgLTM4dDkwIDM4dDM4IDkwek0xMTUyIDc2OHEwIDUzIC0zNy41IDkwLjV0LTkwLjUgMzcuNXQtOTAuNSAtMzcuNXQtMzcuNSAtOTAuNXQzNy41IC05MC41dDkwLjUgLTM3LjV0OTAuNSAzNy41dDM3LjUgOTAuNXoKTTE1MzYgMTA4OHYyNTZxMCAyNiAtMTkgNDV0LTQ1IDE5aC0xMjgwcS0yNiAwIC00NSAtMTl0LTE5IC00NXYtMjU2cTAgLTI2IDE5IC00NXQ0NSAtMTloMTI4MHEyNiAwIDQ1IDE5dDE5IDQ1ek0xNTM2IDc2OHEwIDUzIC0zNy41IDkwLjV0LTkwLjUgMzcuNXQtOTAuNSAtMzcuNXQtMzcuNSAtOTAuNXQzNy41IC05MC41dDkwLjUgLTM3LjV0OTAuNSAzNy41dDM3LjUgOTAuNXpNMTY2NCAxNDA4di0xNTM2cTAgLTUyIC0zOCAtOTB0LTkwIC0zOApoLTE0MDhxLTUyIDAgLTkwIDM4dC0zOCA5MHYxNTM2cTAgNTIgMzggOTB0OTAgMzhoMTQwOHE1MiAwIDkwIC0zOHQzOCAtOTB6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9Il80NjMiIHVuaWNvZGU9IiYjeGYxZWQ7IiAKZD0iTTE1MTkgODkwcTE4IC04NCAtNCAtMjA0cS04NyAtNDQ0IC01NjUgLTQ0NGgtNDRxLTI1IDAgLTQ0IC0xNi41dC0yNCAtNDIuNWwtNCAtMTlsLTU1IC0zNDZsLTIgLTE1cS01IC0yNiAtMjQuNSAtNDIuNXQtNDQuNSAtMTYuNWgtMjUxcS0yMSAwIC0zMyAxNXQtOSAzNnE5IDU2IDI2LjUgMTY4dDI2LjUgMTY4dDI3IDE2Ny41dDI3IDE2Ny41cTUgMzcgNDMgMzdoMTMxcTEzMyAtMiAyMzYgMjFxMTc1IDM5IDI4NyAxNDRxMTAyIDk1IDE1NSAyNDYKcTI0IDcwIDM1IDEzM3ExIDYgMi41IDcuNXQzLjUgMXQ2IC0zLjVxNzkgLTU5IDk4IC0xNjJ6TTEzNDcgMTE3MnEwIC0xMDcgLTQ2IC0yMzZxLTgwIC0yMzMgLTMwMiAtMzE1cS0xMTMgLTQwIC0yNTIgLTQycTAgLTEgLTkwIC0xbC05MCAxcS0xMDAgMCAtMTE4IC05NnEtMiAtOCAtODUgLTUzMHEtMSAtMTAgLTEyIC0xMGgtMjk1cS0yMiAwIC0zNi41IDE2LjV0LTExLjUgMzguNWwyMzIgMTQ3MXE1IDI5IDI3LjUgNDh0NTEuNSAxOWg1OTgKcTM0IDAgOTcuNSAtMTN0MTExLjUgLTMycTEwNyAtNDEgMTYzLjUgLTEyM3Q1Ni41IC0xOTZ6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9Il80NjQiIHVuaWNvZGU9IiYjeGYxZWU7IiBob3Jpei1hZHYteD0iMTc5MiIgCmQ9Ik00NDEgODY0cTMzIDAgNTIgLTI2cTI2NiAtMzY0IDM2MiAtNzc0aC00NDZxLTEyNyA0NDEgLTM2NyA3NDlxLTEyIDE2IC0zIDMzLjV0MjkgMTcuNWgzNzN6TTEwMDAgNTA3cS00OSAtMTk5IC0xMjUgLTM5M3EtNzkgMzEwIC0yNTYgNTk0cTQwIDIyMSA0NCA0NDlxMjExIC0zNDAgMzM3IC02NTB6TTEwOTkgMTIxNnEyMzUgLTMyNCAzODQuNSAtNjk4LjV0MTg0LjUgLTc3My41aC00NTFxLTQxIDY2NSAtNTUzIDE0NzJoNDM1ek0xNzkyIDY0MApxMCAtNDI0IC0xMDEgLTgxMnEtNjcgNTYwIC0zNTkgMTA4M3EtMjUgMzAxIC0xMDYgNTg0cS00IDE2IDUuNSAyOC41dDI1LjUgMTIuNWgzNTlxMjEgMCAzOC41IC0xM3QyMi41IC0zM3ExMTUgLTQwOSAxMTUgLTg1MHoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idW5pRjFGMCIgdW5pY29kZT0iJiN4ZjFmMDsiIGhvcml6LWFkdi14PSIyMzA0IiAKZD0iTTE5NzUgNTQ2aC0xMzhxMTQgMzcgNjYgMTc5bDMgOXE0IDEwIDEwIDI2dDkgMjZsMTIgLTU1ek01MzEgNjExbC01OCAyOTVxLTExIDU0IC03NSA1NGgtMjY4bC0yIC0xM3EzMTEgLTc5IDQwMyAtMzM2ek03MTAgOTYwbC0xNjIgLTQzOGwtMTcgODlxLTI2IDcwIC04NSAxMjkuNXQtMTMxIDg4LjVsMTM1IC01MTBoMTc1bDI2MSA2NDFoLTE3NnpNODQ5IDMxOGgxNjZsMTA0IDY0MmgtMTY2ek0xNjE3IDk0NHEtNjkgMjcgLTE0OSAyNwpxLTEyMyAwIC0yMDEgLTU5dC03OSAtMTUzcS0xIC0xMDIgMTQ1IC0xNzRxNDggLTIzIDY3IC00MXQxOSAtMzlxMCAtMzAgLTMwIC00NnQtNjkgLTE2cS04NiAwIC0xNTYgMzNsLTIyIDExbC0yMyAtMTQ0cTc0IC0zNCAxODUgLTM0cTEzMCAtMSAyMDguNSA1OXQ4MC41IDE2MHEwIDEwNiAtMTQwIDE3NHEtNDkgMjUgLTcxIDQydC0yMiAzOHEwIDIyIDI0LjUgMzguNXQ3MC41IDE2LjVxNzAgMSAxMjQgLTI0bDE1IC04ek0yMDQyIDk2MGgtMTI4CnEtNjUgMCAtODcgLTU0bC0yNDYgLTU4OGgxNzRsMzUgOTZoMjEycTUgLTIyIDIwIC05NmgxNTR6TTIzMDQgMTI4MHYtMTI4MHEwIC01MiAtMzggLTkwdC05MCAtMzhoLTIwNDhxLTUyIDAgLTkwIDM4dC0zOCA5MHYxMjgwcTAgNTIgMzggOTB0OTAgMzhoMjA0OHE1MiAwIDkwIC0zOHQzOCAtOTB6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9Il80NjYiIHVuaWNvZGU9IiYjeGYxZjE7IiBob3Jpei1hZHYteD0iMjMwNCIgCmQ9Ik0xMTE5IDExOTVxLTEyOCA4NSAtMjgxIDg1cS0xMDMgMCAtMTk3LjUgLTQwLjV0LTE2Mi41IC0xMDguNXQtMTA4LjUgLTE2MnQtNDAuNSAtMTk3cTAgLTEwNCA0MC41IC0xOTh0MTA4LjUgLTE2MnQxNjIgLTEwOC41dDE5OCAtNDAuNXExNTMgMCAyODEgODVxLTEzMSAxMDcgLTE3OCAyNjUuNXQwLjUgMzE2LjV0MTc3LjUgMjY1ek0xMTUyIDExNzFxLTEyNiAtOTkgLTE3MiAtMjQ5LjV0LTAuNSAtMzAwLjV0MTcyLjUgLTI0OQpxMTI3IDk5IDE3Mi41IDI0OXQtMC41IDMwMC41dC0xNzIgMjQ5LjV6TTExODUgMTE5NXExMzAgLTEwNyAxNzcuNSAtMjY1LjV0MC41IC0zMTd0LTE3OCAtMjY0LjVxMTI4IC04NSAyODEgLTg1cTEwNCAwIDE5OCA0MC41dDE2MiAxMDguNXQxMDguNSAxNjJ0NDAuNSAxOThxMCAxMDMgLTQwLjUgMTk3dC0xMDguNSAxNjJ0LTE2Mi41IDEwOC41dC0xOTcuNSA0MC41cS0xNTMgMCAtMjgxIC04NXpNMTkyNiA0NzNoN3YzaC0xN3YtM2g3di0xN2gzdjE3egpNMTk1NSA0NTZoNHYyMGgtNWwtNiAtMTNsLTYgMTNoLTV2LTIwaDN2MTVsNiAtMTNoNGw1IDEzdi0xNXpNMTk0NyAxNnYtMmgtMmgtM3YzaDNoMnYtMXpNMTk0NyA3aDNsLTQgNWgybDEgMXExIDEgMSAzdC0xIDNsLTEgMWgtM2gtNnYtMTNoM3Y1aDF6TTY4NSA3NXEwIDE5IDExIDMxdDMwIDEycTE4IDAgMjkgLTEyLjV0MTEgLTMwLjVxMCAtMTkgLTExIC0zMXQtMjkgLTEycS0xOSAwIC0zMCAxMnQtMTEgMzF6TTExNTggMTE5cTMwIDAgMzUgLTMyCmgtNzBxNSAzMiAzNSAzMnpNMTUxNCA3NXEwIDE5IDExIDMxdDI5IDEydDI5LjUgLTEyLjV0MTEuNSAtMzAuNXEwIC0xOSAtMTEgLTMxdC0zMCAtMTJxLTE4IDAgLTI5IDEydC0xMSAzMXpNMTc4NiA3NXEwIDE4IDExLjUgMzAuNXQyOS41IDEyLjV0MjkuNSAtMTIuNXQxMS41IC0zMC41cTAgLTE5IC0xMS41IC0zMXQtMjkuNSAtMTJ0LTI5LjUgMTIuNXQtMTEuNSAzMC41ek0xOTQ0IDNxLTIgMCAtNCAxcS0xIDAgLTMgMnQtMiAzcS0xIDIgLTEgNApxMCAzIDEgNHEwIDIgMiA0bDEgMXEyIDAgMiAxcTIgMSA0IDFxMyAwIDQgLTFsNCAtMmwyIC00di0xcTEgLTIgMSAtM2wtMSAtMXYtM3QtMSAtMWwtMSAtMnEtMiAtMiAtNCAtMnEtMSAtMSAtNCAtMXpNNTk5IDdoMzB2ODVxMCAyNCAtMTQuNSAzOC41dC0zOS41IDE1LjVxLTMyIDAgLTQ3IC0yNHEtMTQgMjQgLTQ1IDI0cS0yNCAwIC0zOSAtMjB2MTZoLTMwdi0xMzVoMzB2NzVxMCAzNiAzMyAzNnEzMCAwIDMwIC0zNnYtNzVoMjl2NzUKcTAgMzYgMzMgMzZxMzAgMCAzMCAtMzZ2LTc1ek03NjUgN2gyOXY2OHY2N2gtMjl2LTE2cS0xNyAyMCAtNDMgMjBxLTI5IDAgLTQ4IC0yMHQtMTkgLTUxdDE5IC01MXQ0OCAtMjBxMjggMCA0MyAyMHYtMTd6TTk0MyA0OHEwIDM0IC00NyA0MGwtMTQgMnEtMjMgNCAtMjMgMTRxMCAxNSAyNSAxNXEyMyAwIDQzIC0xMWwxMiAyNHEtMjIgMTQgLTU1IDE0cS0yNiAwIC00MSAtMTJ0LTE1IC0zMnEwIC0zMyA0NyAtMzlsMTMgLTJxMjQgLTQgMjQgLTE0CnEwIC0xNyAtMzEgLTE3cS0yNSAwIC00NSAxNGwtMTMgLTIzcTI1IC0xNyA1OCAtMTdxMjkgMCA0NS41IDEydDE2LjUgMzJ6TTEwNzMgMTRsLTggMjVxLTEzIC03IC0yNiAtN3EtMTkgMCAtMTkgMjJ2NjFoNDh2MjdoLTQ4djQxaC0zMHYtNDFoLTI4di0yN2gyOHYtNjFxMCAtNTAgNDcgLTUwcTIxIDAgMzYgMTB6TTExNTkgMTQ2cS0yOSAwIC00OCAtMjB0LTE5IC01MXEwIC0zMiAxOS41IC01MS41dDQ5LjUgLTE5LjVxMzMgMCA1NSAxOWwtMTQgMjIKcS0xOCAtMTUgLTM5IC0xNXEtMzQgMCAtNDEgMzNoMTAxdjEycTAgMzIgLTE4IDUxLjV0LTQ2IDE5LjV6TTEzMTggMTQ2cS0yMyAwIC0zNSAtMjB2MTZoLTMwdi0xMzVoMzB2NzZxMCAzNSAyOSAzNXExMCAwIDE4IC00bDkgMjhxLTkgNCAtMjEgNHpNMTM0OCA3NXEwIC0zMSAxOS41IC01MXQ1Mi41IC0yMHEyOSAwIDQ4IDE2bC0xNCAyNHEtMTggLTEzIC0zNSAtMTJxLTE4IDAgLTI5LjUgMTJ0LTExLjUgMzF0MTEuNSAzMXQyOS41IDEyCnExOSAwIDM1IC0xMmwxNCAyNHEtMjAgMTYgLTQ4IDE2cS0zMyAwIC01Mi41IC0yMHQtMTkuNSAtNTF6TTE1OTMgN2gzMHY2OHY2N2gtMzB2LTE2cS0xNSAyMCAtNDIgMjBxLTI5IDAgLTQ4LjUgLTIwdC0xOS41IC01MXQxOS41IC01MXQ0OC41IC0yMHEyOCAwIDQyIDIwdi0xN3pNMTcyNiAxNDZxLTIzIDAgLTM1IC0yMHYxNmgtMjl2LTEzNWgyOXY3NnEwIDM1IDI5IDM1cTEwIDAgMTggLTRsOSAyOHEtOCA0IC0yMSA0ek0xODY2IDdoMjl2Njh2MTIyCmgtMjl2LTcxcS0xNSAyMCAtNDMgMjB0LTQ3LjUgLTIwLjV0LTE5LjUgLTUwLjV0MTkuNSAtNTAuNXQ0Ny41IC0yMC41cTI5IDAgNDMgMjB2LTE3ek0xOTQ0IDI3bC0yIC0xaC0zcS0yIC0xIC00IC0zcS0zIC0xIC0zIC00cS0xIC0yIC0xIC02cTAgLTMgMSAtNXEwIC0yIDMgLTRxMiAtMiA0IC0zdDUgLTFxNCAwIDYgMXEwIDEgMiAybDIgMXExIDEgMyA0cTEgMiAxIDVxMCA0IC0xIDZxLTEgMSAtMyA0cTAgMSAtMiAybC0yIDFxLTEgMCAtMyAwLjUKdC0zIDAuNXpNMjMwNCAxMjgwdi0xMjgwcTAgLTUyIC0zOCAtOTB0LTkwIC0zOGgtMjA0OHEtNTIgMCAtOTAgMzh0LTM4IDkwdjEyODBxMCA1MiAzOCA5MHQ5MCAzOGgyMDQ4cTUyIDAgOTAgLTM4dDM4IC05MHoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzQ2NyIgdW5pY29kZT0iJiN4ZjFmMjsiIGhvcml6LWFkdi14PSIyMzA0IiAKZD0iTTMxMyA3NTlxMCAtNTEgLTM2IC04NHEtMjkgLTI2IC04OSAtMjZoLTE3djIyMGgxN3E2MSAwIDg5IC0yN3EzNiAtMzEgMzYgLTgzek0yMDg5IDgyNHEwIC01MiAtNjQgLTUyaC0xOXYxMDFoMjBxNjMgMCA2MyAtNDl6TTM4MCA3NTlxMCA3NCAtNTAgMTIwLjV0LTEyOSA0Ni41aC05NXYtMzMzaDk1cTc0IDAgMTE5IDM4cTYwIDUxIDYwIDEyOHpNNDEwIDU5M2g2NXYzMzNoLTY1di0zMzN6TTczMCA2OTRxMCA0MCAtMjAuNSA2MnQtNzUuNSA0MgpxLTI5IDEwIC0zOS41IDE5dC0xMC41IDIzcTAgMTYgMTMuNSAyNi41dDM0LjUgMTAuNXEyOSAwIDUzIC0yN2wzNCA0NHEtNDEgMzcgLTk4IDM3cS00NCAwIC03NCAtMjcuNXQtMzAgLTY3LjVxMCAtMzUgMTggLTU1LjV0NjQgLTM2LjVxMzcgLTEzIDQ1IC0xOXExOSAtMTIgMTkgLTM0cTAgLTIwIC0xNCAtMzMuNXQtMzYgLTEzLjVxLTQ4IDAgLTcxIDQ0bC00MiAtNDBxNDQgLTY0IDExNSAtNjRxNTEgMCA4MyAzMC41dDMyIDc5LjV6TTEwMDggNjA0CnY3N3EtMzcgLTM3IC03OCAtMzdxLTQ5IDAgLTgwLjUgMzIuNXQtMzEuNSA4Mi41cTAgNDggMzEuNSA4MS41dDc3LjUgMzMuNXE0MyAwIDgxIC0zOHY3N3EtNDAgMjAgLTgwIDIwcS03NCAwIC0xMjUuNSAtNTAuNXQtNTEuNSAtMTIzLjV0NTEgLTEyMy41dDEyNSAtNTAuNXE0MiAwIDgxIDE5ek0yMjQwIDB2NTI3cS02NSAtNDAgLTE0NC41IC04NHQtMjM3LjUgLTExN3QtMzI5LjUgLTEzNy41dC00MTcuNSAtMTM0LjV0LTUwNCAtMTE4aDE1NjkKcTI2IDAgNDUgMTl0MTkgNDV6TTEzODkgNzU3cTAgNzUgLTUzIDEyOHQtMTI4IDUzdC0xMjggLTUzdC01MyAtMTI4dDUzIC0xMjh0MTI4IC01M3QxMjggNTN0NTMgMTI4ek0xNTQxIDU4NGwxNDQgMzQyaC03MWwtOTAgLTIyNGwtODkgMjI0aC03MWwxNDIgLTM0MmgzNXpNMTcxNCA1OTNoMTg0djU2aC0xMTl2OTBoMTE1djU2aC0xMTV2NzRoMTE5djU3aC0xODR2LTMzM3pNMjEwNSA1OTNoODBsLTEwNSAxNDBxNzYgMTYgNzYgOTRxMCA0NyAtMzEgNzMKdC04NyAyNmgtOTd2LTMzM2g2NXYxMzNoOXpNMjMwNCAxMjc0di0xMjY4cTAgLTU2IC0zOC41IC05NXQtOTMuNSAtMzloLTIwNDBxLTU1IDAgLTkzLjUgMzl0LTM4LjUgOTV2MTI2OHEwIDU2IDM4LjUgOTV0OTMuNSAzOWgyMDQwcTU1IDAgOTMuNSAtMzl0MzguNSAtOTV6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9ImYxZjMiIHVuaWNvZGU9IiYjeGYxZjM7IiBob3Jpei1hZHYteD0iMjMwNCIgCmQ9Ik0xMTkgODU0aDg5bC00NSAxMDh6TTc0MCAzMjhsNzQgNzlsLTcwIDc5aC0xNjN2LTQ5aDE0MnYtNTVoLTE0MnYtNTRoMTU5ek04OTggNDA2bDk5IC0xMTB2MjE3ek0xMTg2IDQ1M3EwIDMzIC00MCAzM2gtODR2LTY5aDgzcTQxIDAgNDEgMzZ6TTE0NzUgNDU3cTAgMjkgLTQyIDI5aC04MnYtNjFoODFxNDMgMCA0MyAzMnpNMTE5NyA5MjNxMCAyOSAtNDIgMjloLTgydi02MGg4MXE0MyAwIDQzIDMxek0xNjU2IDg1NGg4OWwtNDQgMTA4egpNNjk5IDEwMDl2LTI3MWgtNjZ2MjEybC05NCAtMjEyaC01N2wtOTQgMjEydi0yMTJoLTEzMmwtMjUgNjBoLTEzNWwtMjUgLTYwaC03MGwxMTYgMjcxaDk2bDExMCAtMjU3djI1N2gxMDZsODUgLTE4NGw3NyAxODRoMTA4ek0xMjU1IDQ1M3EwIC0yMCAtNS41IC0zNXQtMTQgLTI1dC0yMi41IC0xNi41dC0yNiAtMTB0LTMxLjUgLTQuNXQtMzEuNSAtMXQtMzIuNSAwLjV0LTI5LjUgMC41di05MWgtMTI2bC04MCA5MGwtODMgLTkwaC0yNTZ2MjcxaDI2MApsODAgLTg5bDgyIDg5aDIwN3ExMDkgMCAxMDkgLTg5ek05NjQgNzk0di01NmgtMjE3djI3MWgyMTd2LTU3aC0xNTJ2LTQ5aDE0OHYtNTVoLTE0OHYtNTRoMTUyek0yMzA0IDIzNXYtMjI5cTAgLTU1IC0zOC41IC05NC41dC05My41IC0zOS41aC0yMDQwcS01NSAwIC05My41IDM5LjV0LTM4LjUgOTQuNXY2NzhoMTExbDI1IDYxaDU1bDI1IC02MWgyMTh2NDZsMTkgLTQ2aDExM2wyMCA0N3YtNDdoNTQxdjk5bDEwIDFxMTAgMCAxMCAtMTR2LTg2aDI3OQp2MjNxMjMgLTEyIDU1IC0xOHQ1Mi41IC02LjV0NjMgMC41dDUxLjUgMWwyNSA2MWg1NmwyNSAtNjFoMjI3djU4bDM0IC01OGgxODJ2Mzc4aC0xODB2LTQ0bC0yNSA0NGgtMTg1di00NGwtMjMgNDRoLTI0OXEtNjkgMCAtMTA5IC0yMnYyMmgtMTcydi0yMnEtMjQgMjIgLTczIDIyaC02MjhsLTQzIC05N2wtNDMgOTdoLTE5OHYtNDRsLTIyIDQ0aC0xNjlsLTc4IC0xNzl2MzkxcTAgNTUgMzguNSA5NC41dDkzLjUgMzkuNWgyMDQwCnE1NSAwIDkzLjUgLTM5LjV0MzguNSAtOTQuNXYtNjc4aC0xMjBxLTUxIDAgLTgxIC0yMnYyMmgtMTc3cS01NSAwIC03OCAtMjJ2MjJoLTMxNnYtMjJxLTMxIDIyIC04NyAyMmgtMjA5di0yMnEtMjMgMjIgLTkxIDIyaC0yMzRsLTU0IC01OGwtNTAgNThoLTM0OXYtMzc4aDM0M2w1NSA1OWw1MiAtNTloMjExdjg5aDIxcTU5IDAgOTAgMTN2LTEwMmgxNzR2OTloOHE4IDAgMTAgLTJ0MiAtMTB2LTg3aDUyOXE1NyAwIDg4IDI0di0yNGgxNjgKcTYwIDAgOTUgMTd6TTE1NDYgNDY5cTAgLTIzIC0xMiAtNDN0LTM0IC0yOXEyNSAtOSAzNCAtMjZ0OSAtNDZ2LTU0aC02NXY0NXEwIDMzIC0xMiA0My41dC00NiAxMC41aC02OXYtOTloLTY1djI3MWgxNTRxNDggMCA3NyAtMTV0MjkgLTU4ek0xMjY5IDkzNnEwIC0yNCAtMTIuNSAtNDR0LTMzLjUgLTI5cTI2IC05IDM0LjUgLTI1LjV0OC41IC00Ni41di01M2gtNjVxMCA5IDAuNSAyNi41dDAgMjV0LTMgMTguNXQtOC41IDE2dC0xNy41IDguNQp0LTI5LjUgMy41aC03MHYtOThoLTY0djI3MWwxNTMgLTFxNDkgMCA3OCAtMTQuNXQyOSAtNTcuNXpNMTc5OCAzMjd2LTU2aC0yMTZ2MjcxaDIxNnYtNTZoLTE1MXYtNDloMTQ4di01NWgtMTQ4di01NHpNMTM3MiAxMDA5di0yNzFoLTY2djI3MWg2NnpNMjA2NSAzNTdxMCAtODYgLTEwMiAtODZoLTEyNnY1OGgxMjZxMzQgMCAzNCAyNXEwIDE2IC0xNyAyMXQtNDEuNSA1dC00OS41IDMuNXQtNDIgMjIuNXQtMTcgNTVxMCAzOSAyNiA2MHQ2NiAyMQpoMTMwdi01N2gtMTE5cS0zNiAwIC0zNiAtMjVxMCAtMTYgMTcuNSAtMjAuNXQ0MiAtNHQ0OSAtMi41dDQyIC0yMS41dDE3LjUgLTU0LjV6TTIzMDQgNDA3di0xMDFxLTI0IC0zNSAtODggLTM1aC0xMjV2NThoMTI1cTMzIDAgMzMgMjVxMCAxMyAtMTIuNSAxOXQtMzEgNS41dC00MCAydC00MCA4dC0zMSAyNHQtMTIuNSA0OC41cTAgMzkgMjYuNSA2MHQ2Ni41IDIxaDEyOXYtNTdoLTExOHEtMzYgMCAtMzYgLTI1cTAgLTIwIDI5IC0yMnQ2OC41IC01CnQ1Ni41IC0yNnpNMjEzOSAxMDA4di0yNzBoLTkybC0xMjIgMjAzdi0yMDNoLTEzMmwtMjYgNjBoLTEzNGwtMjUgLTYwaC03NXEtMTI5IDAgLTEyOSAxMzNxMCAxMzggMTMzIDEzOGg2M3YtNTlxLTcgMCAtMjggMXQtMjguNSAwLjV0LTIzIC0ydC0yMS41IC02LjV0LTE0LjUgLTEzLjV0LTExLjUgLTIzdC0zIC0zMy41cTAgLTM4IDEzLjUgLTU4dDQ5LjUgLTIwaDI5bDkyIDIxM2g5N2wxMDkgLTI1NnYyNTZoOTlsMTE0IC0xODh2MTg4aDY2eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNDY5IiB1bmljb2RlPSImI3hmMWY0OyIgaG9yaXotYWR2LXg9IjIzMDQiIApkPSJNNzQ1IDYzMHEwIC0zNyAtMjUuNSAtNjEuNXQtNjIuNSAtMjQuNXEtMjkgMCAtNDYuNSAxNnQtMTcuNSA0NHEwIDM3IDI1IDYyLjV0NjIgMjUuNXEyOCAwIDQ2LjUgLTE2LjV0MTguNSAtNDUuNXpNMTUzMCA3NzlxMCAtNDIgLTIyIC01N3QtNjYgLTE1bC0zMiAtMWwxNyAxMDdxMiAxMSAxMyAxMWgxOHEyMiAwIDM1IC0ydDI1IC0xMi41dDEyIC0zMC41ek0xODgxIDYzMHEwIC0zNiAtMjUuNSAtNjF0LTYxLjUgLTI1cS0yOSAwIC00NyAxNgp0LTE4IDQ0cTAgMzcgMjUgNjIuNXQ2MiAyNS41cTI4IDAgNDYuNSAtMTYuNXQxOC41IC00NS41ek01MTMgODAxcTAgNTkgLTM4LjUgODUuNXQtMTAwLjUgMjYuNWgtMTYwcS0xOSAwIC0yMSAtMTlsLTY1IC00MDhxLTEgLTYgMyAtMTF0MTAgLTVoNzZxMjAgMCAyMiAxOWwxOCAxMTBxMSA4IDcgMTN0MTUgNi41dDE3IDEuNXQxOSAtMXQxNCAtMXE4NiAwIDEzNSA0OC41dDQ5IDEzNC41ek04MjIgNDg5bDQxIDI2MXExIDYgLTMgMTF0LTEwIDVoLTc2CnEtMTQgMCAtMTcgLTMzcS0yNyA0MCAtOTUgNDBxLTcyIDAgLTEyMi41IC01NHQtNTAuNSAtMTI3cTAgLTU5IDM0LjUgLTk0dDkyLjUgLTM1cTI4IDAgNTggMTJ0NDggMzJxLTQgLTEyIC00IC0yMXEwIC0xNiAxMyAtMTZoNjlxMTkgMCAyMiAxOXpNMTI2OSA3NTJxMCA1IC00IDkuNXQtOSA0LjVoLTc3cS0xMSAwIC0xOCAtMTBsLTEwNiAtMTU2bC00NCAxNTBxLTUgMTYgLTIyIDE2aC03NXEtNSAwIC05IC00LjV0LTQgLTkuNXEwIC0yIDE5LjUgLTU5CnQ0MiAtMTIzdDIzLjUgLTcwcS04MiAtMTEyIC04MiAtMTIwcTAgLTEzIDEzIC0xM2g3N3ExMSAwIDE4IDEwbDI1NSAzNjhxMiAyIDIgN3pNMTY0OSA4MDFxMCA1OSAtMzguNSA4NS41dC0xMDAuNSAyNi41aC0xNTlxLTIwIDAgLTIyIC0xOWwtNjUgLTQwOHEtMSAtNiAzIC0xMXQxMCAtNWg4MnExMiAwIDE2IDEzbDE4IDExNnExIDggNyAxM3QxNSA2LjV0MTcgMS41dDE5IC0xdDE0IC0xcTg2IDAgMTM1IDQ4LjV0NDkgMTM0LjV6TTE5NTggNDg5Cmw0MSAyNjFxMSA2IC0zIDExdC0xMCA1aC03NnEtMTQgMCAtMTcgLTMzcS0yNiA0MCAtOTUgNDBxLTcyIDAgLTEyMi41IC01NHQtNTAuNSAtMTI3cTAgLTU5IDM0LjUgLTk0dDkyLjUgLTM1cTI5IDAgNTkgMTJ0NDcgMzJxMCAtMSAtMiAtOXQtMiAtMTJxMCAtMTYgMTMgLTE2aDY5cTE5IDAgMjIgMTl6TTIxNzYgODk4djFxMCAxNCAtMTMgMTRoLTc0cS0xMSAwIC0xMyAtMTFsLTY1IC00MTZsLTEgLTJxMCAtNSA0IC05LjV0MTAgLTQuNWg2NgpxMTkgMCAyMSAxOXpNMzkyIDc2NHEtNSAtMzUgLTI2IC00NnQtNjAgLTExbC0zMyAtMWwxNyAxMDdxMiAxMSAxMyAxMWgxOXE0MCAwIDU4IC0xMS41dDEyIC00OC41ek0yMzA0IDEyODB2LTEyODBxMCAtNTIgLTM4IC05MHQtOTAgLTM4aC0yMDQ4cS01MiAwIC05MCAzOHQtMzggOTB2MTI4MHEwIDUyIDM4IDkwdDkwIDM4aDIwNDhxNTIgMCA5MCAtMzh0MzggLTkweiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNDcwIiB1bmljb2RlPSImI3hmMWY1OyIgaG9yaXotYWR2LXg9IjIzMDQiIApkPSJNMTU5NyA2MzNxMCAtNjkgLTIxIC0xMDZxLTE5IC0zNSAtNTIgLTM1cS0yMyAwIC00MSA5djIyNHEyOSAzMCA1NyAzMHE1NyAwIDU3IC0xMjJ6TTIwMzUgNjY5aC0xMTBxNiA5OCA1NiA5OHE1MSAwIDU0IC05OHpNNDc2IDUzNHEwIDU5IC0zMyA5MS41dC0xMDEgNTcuNXEtMzYgMTMgLTUyIDI0dC0xNiAyNXEwIDI2IDM4IDI2cTU4IDAgMTI0IC0zM2wxOCAxMTJxLTY3IDMyIC0xNDkgMzJxLTc3IDAgLTEyMyAtMzhxLTQ4IC0zOSAtNDggLTEwOQpxMCAtNTggMzIuNSAtOTAuNXQ5OS41IC01Ni41cTM5IC0xNCA1NC41IC0yNS41dDE1LjUgLTI3LjVxMCAtMzEgLTQ4IC0zMXEtMjkgMCAtNzAgMTIuNXQtNzIgMzAuNWwtMTggLTExM3E3MiAtNDEgMTY4IC00MXE4MSAwIDEyOSAzN3E1MSA0MSA1MSAxMTd6TTc3MSA3NDlsMTkgMTExaC05NnYxMzVsLTEyOSAtMjFsLTE4IC0xMTRsLTQ2IC04bC0xNyAtMTAzaDYydi0yMTlxMCAtODQgNDQgLTEyMHEzOCAtMzAgMTExIC0zMHEzMiAwIDc5IDExdjExOApxLTMyIC03IC00NCAtN3EtNDIgMCAtNDIgNTB2MTk3aDc3ek0xMDg3IDcyNHYxMzlxLTE1IDMgLTI4IDNxLTMyIDAgLTU1LjUgLTE2dC0zMy41IC00NmwtMTAgNTZoLTEzMXYtNDcxaDE1MHYzMDZxMjYgMzEgODIgMzFxMTYgMCAyNiAtMnpNMTEyNCAzODloMTUwdjQ3MWgtMTUwdi00NzF6TTE3NDYgNjM4cTAgMTIyIC00NSAxNzlxLTQwIDUyIC0xMTEgNTJxLTY0IDAgLTExNyAtNTZsLTggNDdoLTEzMnYtNjQ1bDE1MCAyNXYxNTEKcTM2IC0xMSA2OCAtMTFxODMgMCAxMzQgNTZxNjEgNjUgNjEgMjAyek0xMjc4IDk4NnEwIDMzIC0yMyA1NnQtNTYgMjN0LTU2IC0yM3QtMjMgLTU2dDIzIC01Ni41dDU2IC0yMy41dDU2IDIzLjV0MjMgNTYuNXpNMjE3NiA2MjlxMCAxMTMgLTQ4IDE3NnEtNTAgNjQgLTE0NCA2NHEtOTYgMCAtMTUxLjUgLTY2dC01NS41IC0xODBxMCAtMTI4IDYzIC0xODhxNTUgLTU1IDE2MSAtNTVxMTAxIDAgMTYwIDQwbC0xNiAxMDNxLTU3IC0zMSAtMTI4IC0zMQpxLTQzIDAgLTYzIDE5cS0yMyAxOSAtMjggNjZoMjQ4cTIgMTQgMiA1MnpNMjMwNCAxMjgwdi0xMjgwcTAgLTUyIC0zOCAtOTB0LTkwIC0zOGgtMjA0OHEtNTIgMCAtOTAgMzh0LTM4IDkwdjEyODBxMCA1MiAzOCA5MHQ5MCAzOGgyMDQ4cTUyIDAgOTAgLTM4dDM4IC05MHoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzQ3MSIgdW5pY29kZT0iJiN4ZjFmNjsiIGhvcml6LWFkdi14PSIyMDQ4IiAKZD0iTTE1NTggNjg0cTYxIC0zNTYgMjk4IC01NTZxMCAtNTIgLTM4IC05MHQtOTAgLTM4aC00NDhxMCAtMTA2IC03NSAtMTgxdC0xODEgLTc1dC0xODAuNSA3NC41dC03NS41IDE4MC41ek0xMDI0IC0xNzZxMTYgMCAxNiAxNnQtMTYgMTZxLTU5IDAgLTEwMS41IDQyLjV0LTQyLjUgMTAxLjVxMCAxNiAtMTYgMTZ0LTE2IC0xNnEwIC03MyA1MS41IC0xMjQuNXQxMjQuNSAtNTEuNXpNMjAyNiAxNDI0cTggLTEwIDcuNSAtMjMuNXQtMTAuNSAtMjIuNQpsLTE4NzIgLTE2MjJxLTEwIC04IC0yMy41IC03dC0yMS41IDExbC04NCA5NnEtOCAxMCAtNy41IDIzLjV0MTAuNSAyMS41bDE4NiAxNjFxLTE5IDMyIC0xOSA2NnE1MCA0MiA5MSA4OHQ4NSAxMTkuNXQ3NC41IDE1OC41dDUwIDIwNnQxOS41IDI2MHEwIDE1MiAxMTcgMjgyLjV0MzA3IDE1OC41cS04IDE5IC04IDM5cTAgNDAgMjggNjh0NjggMjh0NjggLTI4dDI4IC02OHEwIC0yMCAtOCAtMzlxMTI0IC0xOCAyMTkgLTgyLjV0MTQ4IC0xNTcuNQpsNDE4IDM2M3ExMCA4IDIzLjUgN3QyMS41IC0xMXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzQ3MiIgdW5pY29kZT0iJiN4ZjFmNzsiIGhvcml6LWFkdi14PSIyMDQ4IiAKZD0iTTEwNDAgLTE2MHEwIDE2IC0xNiAxNnEtNTkgMCAtMTAxLjUgNDIuNXQtNDIuNSAxMDEuNXEwIDE2IC0xNiAxNnQtMTYgLTE2cTAgLTczIDUxLjUgLTEyNC41dDEyNC41IC01MS41cTE2IDAgMTYgMTZ6TTUwMyAzMTVsODc3IDc2MHEtNDIgODggLTEzMi41IDE0Ni41dC0yMjMuNSA1OC41cS05MyAwIC0xNjkuNSAtMzEuNXQtMTIxLjUgLTgwLjV0LTY5IC0xMDN0LTI0IC0xMDVxMCAtMzg0IC0xMzcgLTY0NXpNMTg1NiAxMjgKcTAgLTUyIC0zOCAtOTB0LTkwIC0zOGgtNDQ4cTAgLTEwNiAtNzUgLTE4MXQtMTgxIC03NXQtMTgwLjUgNzQuNXQtNzUuNSAxODAuNWwxNDkgMTI5aDc1N3EtMTY2IDE4NyAtMjI3IDQ1OWwxMTEgOTdxNjEgLTM1NiAyOTggLTU1NnpNMTk0MiAxNTIwbDg0IC05NnE4IC0xMCA3LjUgLTIzLjV0LTEwLjUgLTIyLjVsLTE4NzIgLTE2MjJxLTEwIC04IC0yMy41IC03dC0yMS41IDExbC04NCA5NnEtOCAxMCAtNy41IDIzLjV0MTAuNSAyMS41bDE4NiAxNjEKcS0xOSAzMiAtMTkgNjZxNTAgNDIgOTEgODh0ODUgMTE5LjV0NzQuNSAxNTguNXQ1MCAyMDZ0MTkuNSAyNjBxMCAxNTIgMTE3IDI4Mi41dDMwNyAxNTguNXEtOCAxOSAtOCAzOXEwIDQwIDI4IDY4dDY4IDI4dDY4IC0yOHQyOCAtNjhxMCAtMjAgLTggLTM5cTEyNCAtMTggMjE5IC04Mi41dDE0OCAtMTU3LjVsNDE4IDM2M3ExMCA4IDIzLjUgN3QyMS41IC0xMXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzQ3MyIgdW5pY29kZT0iJiN4ZjFmODsiIGhvcml6LWFkdi14PSIxNDA4IiAKZD0iTTUxMiAxNjB2NzA0cTAgMTQgLTkgMjN0LTIzIDloLTY0cS0xNCAwIC0yMyAtOXQtOSAtMjN2LTcwNHEwIC0xNCA5IC0yM3QyMyAtOWg2NHExNCAwIDIzIDl0OSAyM3pNNzY4IDE2MHY3MDRxMCAxNCAtOSAyM3QtMjMgOWgtNjRxLTE0IDAgLTIzIC05dC05IC0yM3YtNzA0cTAgLTE0IDkgLTIzdDIzIC05aDY0cTE0IDAgMjMgOXQ5IDIzek0xMDI0IDE2MHY3MDRxMCAxNCAtOSAyM3QtMjMgOWgtNjRxLTE0IDAgLTIzIC05dC05IC0yM3YtNzA0CnEwIC0xNCA5IC0yM3QyMyAtOWg2NHExNCAwIDIzIDl0OSAyM3pNNDgwIDExNTJoNDQ4bC00OCAxMTdxLTcgOSAtMTcgMTFoLTMxN3EtMTAgLTIgLTE3IC0xMXpNMTQwOCAxMTIwdi02NHEwIC0xNCAtOSAtMjN0LTIzIC05aC05NnYtOTQ4cTAgLTgzIC00NyAtMTQzLjV0LTExMyAtNjAuNWgtODMycS02NiAwIC0xMTMgNTguNXQtNDcgMTQxLjV2OTUyaC05NnEtMTQgMCAtMjMgOXQtOSAyM3Y2NHEwIDE0IDkgMjN0MjMgOWgzMDlsNzAgMTY3CnExNSAzNyA1NCA2M3Q3OSAyNmgzMjBxNDAgMCA3OSAtMjZ0NTQgLTYzbDcwIC0xNjdoMzA5cTE0IDAgMjMgLTl0OSAtMjN6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9Il80NzQiIHVuaWNvZGU9IiYjeGYxZjk7IiAKZD0iTTExNTAgNDYydi0xMDlxMCAtNTAgLTM2LjUgLTg5dC05NCAtNjAuNXQtMTE4IC0zMi41dC0xMTcuNSAtMTFxLTIwNSAwIC0zNDIuNSAxMzl0LTEzNy41IDM0NnEwIDIwMyAxMzYgMzM5dDMzOSAxMzZxMzQgMCA3NS41IC00LjV0OTMgLTE4dDkyLjUgLTM0dDY5IC01Ni41dDI4IC04MXYtMTA5cTAgLTE2IC0xNiAtMTZoLTExOHEtMTYgMCAtMTYgMTZ2NzBxMCA0MyAtNjUuNSA2Ny41dC0xMzcuNSAyNC41cS0xNDAgMCAtMjI4LjUgLTkxLjUKdC04OC41IC0yMzcuNXEwIC0xNTEgOTEuNSAtMjQ5LjV0MjMzLjUgLTk4LjVxNjggMCAxMzggMjR0NzAgNjZ2NzBxMCA3IDQuNSAxMS41dDEwLjUgNC41aDExOXE2IDAgMTEgLTQuNXQ1IC0xMS41ek03NjggMTI4MHEtMTMwIDAgLTI0OC41IC01MXQtMjA0IC0xMzYuNXQtMTM2LjUgLTIwNHQtNTEgLTI0OC41dDUxIC0yNDguNXQxMzYuNSAtMjA0dDIwNCAtMTM2LjV0MjQ4LjUgLTUxdDI0OC41IDUxdDIwNCAxMzYuNXQxMzYuNSAyMDR0NTEgMjQ4LjUKdC01MSAyNDguNXQtMTM2LjUgMjA0dC0yMDQgMTM2LjV0LTI0OC41IDUxek0xNTM2IDY0MHEwIC0yMDkgLTEwMyAtMzg1LjV0LTI3OS41IC0yNzkuNXQtMzg1LjUgLTEwM3QtMzg1LjUgMTAzdC0yNzkuNSAyNzkuNXQtMTAzIDM4NS41dDEwMyAzODUuNXQyNzkuNSAyNzkuNXQzODUuNSAxMDN0Mzg1LjUgLTEwM3QyNzkuNSAtMjc5LjV0MTAzIC0zODUuNXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzQ3NSIgdW5pY29kZT0iJiN4ZjFmYTsiIApkPSJNOTcyIDc2MXEwIDEwOCAtNTMuNSAxNjl0LTE0Ny41IDYxcS02MyAwIC0xMjQgLTMwLjV0LTExMCAtODQuNXQtNzkuNSAtMTM3dC0zMC41IC0xODBxMCAtMTEyIDUzLjUgLTE3M3QxNTAuNSAtNjFxOTYgMCAxNzYgNjYuNXQxMjIuNSAxNjZ0NDIuNSAyMDMuNXpNMTUzNiA2NDBxMCAtMTExIC0zNyAtMTk3dC05OC41IC0xMzV0LTEzMS41IC03NC41dC0xNDUgLTI3LjVxLTYgMCAtMTUuNSAtMC41dC0xNi41IC0wLjVxLTk1IDAgLTE0MiA1MwpxLTI4IDMzIC0zMyA4M3EtNTIgLTY2IC0xMzEuNSAtMTEwdC0xNzMuNSAtNDRxLTE2MSAwIC0yNDkuNSA5NS41dC04OC41IDI2OS41cTAgMTU3IDY2IDI5MHQxNzkgMjEwLjV0MjQ2IDc3LjVxODcgMCAxNTUgLTM1LjV0MTA2IC05OS41bDIgMTlsMTEgNTZxMSA2IDUuNSAxMnQ5LjUgNmgxMThxNSAwIDEzIC0xMXE1IC01IDMgLTE2bC0xMjAgLTYxNHEtNSAtMjQgLTUgLTQ4cTAgLTM5IDEyLjUgLTUydDQ0LjUgLTEzcTI4IDEgNTcgNS41dDczIDI0CnQ3NyA1MHQ1NyA4OS41dDI0IDEzN3EwIDI5MiAtMTc0IDQ2NnQtNDY2IDE3NHEtMTMwIDAgLTI0OC41IC01MXQtMjA0IC0xMzYuNXQtMTM2LjUgLTIwNHQtNTEgLTI0OC41dDUxIC0yNDguNXQxMzYuNSAtMjA0dDIwNCAtMTM2LjV0MjQ4LjUgLTUxcTIyOCAwIDQwNSAxNDRxMTEgOSAyNCA4dDIxIC0xMmw0MSAtNDlxOCAtMTIgNyAtMjRxLTIgLTEzIC0xMiAtMjJxLTEwMiAtODMgLTIyNy41IC0xMjh0LTI1OC41IC00NXEtMTU2IDAgLTI5OCA2MQp0LTI0NSAxNjR0LTE2NCAyNDV0LTYxIDI5OHQ2MSAyOTh0MTY0IDI0NXQyNDUgMTY0dDI5OCA2MXEzNDQgMCA1NTYgLTIxMnQyMTIgLTU1NnoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzQ3NiIgdW5pY29kZT0iJiN4ZjFmYjsiIGhvcml6LWFkdi14PSIxNzkyIiAKZD0iTTE2OTggMTQ0MnE5NCAtOTQgOTQgLTIyNi41dC05NCAtMjI1LjVsLTIyNSAtMjIzbDEwNCAtMTA0cTEwIC0xMCAxMCAtMjN0LTEwIC0yM2wtMjEwIC0yMTBxLTEwIC0xMCAtMjMgLTEwdC0yMyAxMGwtMTA1IDEwNWwtNjAzIC02MDNxLTM3IC0zNyAtOTAgLTM3aC0yMDNsLTI1NiAtMTI4bC02NCA2NGwxMjggMjU2djIwM3EwIDUzIDM3IDkwbDYwMyA2MDNsLTEwNSAxMDVxLTEwIDEwIC0xMCAyM3QxMCAyM2wyMTAgMjEwcTEwIDEwIDIzIDEwCnQyMyAtMTBsMTA0IC0xMDRsMjIzIDIyNXE5MyA5NCAyMjUuNSA5NHQyMjYuNSAtOTR6TTUxMiA2NGw1NzYgNTc2bC0xOTIgMTkybC01NzYgLTU3NnYtMTkyaDE5MnoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iZjFmYyIgdW5pY29kZT0iJiN4ZjFmYzsiIGhvcml6LWFkdi14PSIxNzkyIiAKZD0iTTE2MTUgMTUzNnE3MCAwIDEyMi41IC00Ni41dDUyLjUgLTExNi41cTAgLTYzIC00NSAtMTUxcS0zMzIgLTYyOSAtNDY1IC03NTJxLTk3IC05MSAtMjE4IC05MXEtMTI2IDAgLTIxNi41IDkyLjV0LTkwLjUgMjE5LjVxMCAxMjggOTIgMjEybDYzOCA1NzlxNTkgNTQgMTMwIDU0ek03MDYgNTAycTM5IC03NiAxMDYuNSAtMTMwdDE1MC41IC03NmwxIC03MXE0IC0yMTMgLTEyOS41IC0zNDd0LTM0OC41IC0xMzRxLTEyMyAwIC0yMTggNDYuNQp0LTE1Mi41IDEyNy41dC04Ni41IDE4M3QtMjkgMjIwcTcgLTUgNDEgLTMwdDYyIC00NC41dDU5IC0zNi41dDQ2IC0xN3E0MSAwIDU1IDM3cTI1IDY2IDU3LjUgMTEyLjV0NjkuNSA3NnQ4OCA0Ny41dDEwMyAyNS41dDEyNSAxMC41eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNDc4IiB1bmljb2RlPSImI3hmMWZkOyIgaG9yaXotYWR2LXg9IjE3OTIiIApkPSJNMTc5MiAxMjh2LTM4NGgtMTc5MnYzODRxNDUgMCA4NSAxNHQ1OSAyNy41dDQ3IDM3LjVxMzAgMjcgNTEuNSAzOHQ1Ni41IDExcTI0IDAgNDQgLTd0MzEgLTE1dDMzIC0yN3EyOSAtMjUgNDcgLTM4dDU4IC0yN3Q4NiAtMTRxNDUgMCA4NSAxNC41dDU4IDI3dDQ4IDM3LjVxMjEgMTkgMzIuNSAyN3QzMSAxNXQ0My41IDdxMzUgMCA1Ni41IC0xMXQ1MS41IC0zOHEyOCAtMjQgNDcgLTM3LjV0NTkgLTI3LjV0ODUgLTE0dDg1IDE0dDU5IDI3LjUKdDQ3IDM3LjVxMzAgMjcgNTEuNSAzOHQ1Ni41IDExcTM0IDAgNTUuNSAtMTF0NTEuNSAtMzhxMjggLTI0IDQ3IC0zNy41dDU5IC0yNy41dDg1IC0xNHpNMTc5MiA0NDh2LTE5MnEtMjQgMCAtNDQgN3QtMzEgMTV0LTMzIDI3cS0yOSAyNSAtNDcgMzh0LTU4IDI3dC04NSAxNHEtNDYgMCAtODYgLTE0dC01OCAtMjd0LTQ3IC0zOHEtMjIgLTE5IC0zMyAtMjd0LTMxIC0xNXQtNDQgLTdxLTM1IDAgLTU2LjUgMTF0LTUxLjUgMzhxLTI5IDI1IC00NyAzOAp0LTU4IDI3dC04NiAxNHEtNDUgMCAtODUgLTE0LjV0LTU4IC0yN3QtNDggLTM3LjVxLTIxIC0xOSAtMzIuNSAtMjd0LTMxIC0xNXQtNDMuNSAtN3EtMzUgMCAtNTYuNSAxMXQtNTEuNSAzOHEtMjggMjQgLTQ3IDM3LjV0LTU5IDI3LjV0LTg1IDE0cS00NiAwIC04NiAtMTR0LTU4IC0yN3QtNDcgLTM4cS0zMCAtMjcgLTUxLjUgLTM4dC01Ni41IC0xMXYxOTJxMCA4MCA1NiAxMzZ0MTM2IDU2aDY0djQ0OGgyNTZ2LTQ0OGgyNTZ2NDQ4aDI1NnYtNDQ4CmgyNTZ2NDQ4aDI1NnYtNDQ4aDY0cTgwIDAgMTM2IC01NnQ1NiAtMTM2ek01MTIgMTMxMnEwIC03NyAtMzYgLTExOC41dC05MiAtNDEuNXEtNTMgMCAtOTAuNSAzNy41dC0zNy41IDkwLjVxMCAyOSA5LjUgNTF0MjMuNSAzNHQzMSAyOHQzMSAzMS41dDIzLjUgNDQuNXQ5LjUgNjdxMzggMCA4MyAtNzR0NDUgLTE1MHpNMTAyNCAxMzEycTAgLTc3IC0zNiAtMTE4LjV0LTkyIC00MS41cS01MyAwIC05MC41IDM3LjV0LTM3LjUgOTAuNQpxMCAyOSA5LjUgNTF0MjMuNSAzNHQzMSAyOHQzMSAzMS41dDIzLjUgNDQuNXQ5LjUgNjdxMzggMCA4MyAtNzR0NDUgLTE1MHpNMTUzNiAxMzEycTAgLTc3IC0zNiAtMTE4LjV0LTkyIC00MS41cS01MyAwIC05MC41IDM3LjV0LTM3LjUgOTAuNXEwIDI5IDkuNSA1MXQyMy41IDM0dDMxIDI4dDMxIDMxLjV0MjMuNSA0NC41dDkuNSA2N3EzOCAwIDgzIC03NHQ0NSAtMTUweiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNDc5IiB1bmljb2RlPSImI3hmMWZlOyIgaG9yaXotYWR2LXg9IjIwNDgiIApkPSJNMjA0OCAwdi0xMjhoLTIwNDh2MTUzNmgxMjh2LTE0MDhoMTkyMHpNMTY2NCAxMDI0bDI1NiAtODk2aC0xNjY0djU3Nmw0NDggNTc2bDU3NiAtNTc2eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNDgwIiB1bmljb2RlPSImI3hmMjAwOyIgaG9yaXotYWR2LXg9IjE3OTIiIApkPSJNNzY4IDY0Nmw1NDYgLTU0NnEtMTA2IC0xMDggLTI0Ny41IC0xNjh0LTI5OC41IC02MHEtMjA5IDAgLTM4NS41IDEwM3QtMjc5LjUgMjc5LjV0LTEwMyAzODUuNXQxMDMgMzg1LjV0Mjc5LjUgMjc5LjV0Mzg1LjUgMTAzdi03NjJ6TTk1NSA2NDBoNzczcTAgLTE1NyAtNjAgLTI5OC41dC0xNjggLTI0Ny41ek0xNjY0IDc2OGgtNzY4djc2OHEyMDkgMCAzODUuNSAtMTAzdDI3OS41IC0yNzkuNXQxMDMgLTM4NS41eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNDgxIiB1bmljb2RlPSImI3hmMjAxOyIgaG9yaXotYWR2LXg9IjIwNDgiIApkPSJNMjA0OCAwdi0xMjhoLTIwNDh2MTUzNmgxMjh2LTE0MDhoMTkyMHpNMTkyMCAxMjQ4di00MzVxMCAtMjEgLTE5LjUgLTI5LjV0LTM1LjUgNy41bC0xMjEgMTIxbC02MzMgLTYzM3EtMTAgLTEwIC0yMyAtMTB0LTIzIDEwbC0yMzMgMjMzbC00MTYgLTQxNmwtMTkyIDE5Mmw1ODUgNTg1cTEwIDEwIDIzIDEwdDIzIC0xMGwyMzMgLTIzM2w0NjQgNDY0bC0xMjEgMTIxcS0xNiAxNiAtNy41IDM1LjV0MjkuNSAxOS41aDQzNXExNCAwIDIzIC05CnQ5IC0yM3oiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzQ4MiIgdW5pY29kZT0iJiN4ZjIwMjsiIGhvcml6LWFkdi14PSIxNzkyIiAKZD0iTTEyOTIgODMycTAgLTYgMTAgLTQxcTEwIC0yOSAyNSAtNDkuNXQ0MSAtMzR0NDQgLTIwdDU1IC0xNi41cTMyNSAtOTEgMzI1IC0zMzJxMCAtMTQ2IC0xMDUuNSAtMjQyLjV0LTI1NC41IC05Ni41cS01OSAwIC0xMTEuNSAxOC41dC05MS41IDQ1LjV0LTc3IDc0LjV0LTYzIDg3LjV0LTUzLjUgMTAzLjV0LTQzLjUgMTAzdC0zOS41IDEwNi41dC0zNS41IDk1cS0zMiA4MSAtNjEuNSAxMzMuNXQtNzMuNSA5Ni41dC0xMDQgNjR0LTE0MiAyMApxLTk2IDAgLTE4MyAtNTUuNXQtMTM4IC0xNDQuNXQtNTEgLTE4NXEwIC0xNjAgMTA2LjUgLTI3OS41dDI2My41IC0xMTkuNXExNzcgMCAyNTggOTVxNTYgNjMgODMgMTE2bDg0IC0xNTJxLTE1IC0zNCAtNDQgLTcwbDEgLTFxLTEzMSAtMTUyIC0zODggLTE1MnEtMTQ3IDAgLTI2OS41IDc5dC0xOTAuNSAyMDcuNXQtNjggMjc0LjVxMCAxMDUgNDMuNSAyMDZ0MTE2IDE3Ni41dDE3MiAxMjEuNXQyMDQuNSA0NnE4NyAwIDE1OSAtMTl0MTIzLjUgLTUwCnQ5NSAtODB0NzIuNSAtOTl0NTguNSAtMTE3dDUwLjUgLTEyNC41dDUwIC0xMzAuNXQ1NSAtMTI3cTk2IC0yMDAgMjMzIC0yMDBxODEgMCAxMzguNSA0OC41dDU3LjUgMTI4LjVxMCA0MiAtMTkgNzJ0LTUwLjUgNDZ0LTcyLjUgMzEuNXQtODQuNSAyN3QtODcuNSAzNHQtODEgNTJ0LTY1IDgydC0zOSAxMjIuNXEtMyAxNiAtMyAzM3EwIDExMCA4Ny41IDE5MnQxOTguNSA3OHE3OCAtMyAxMjAuNSAtMTQuNXQ5MC41IC01My41aC0xCnExMiAtMTEgMjMgLTI0LjV0MjYgLTM2dDE5IC0yNy41bC0xMjkgLTk5cS0yNiA0OSAtNTQgNzB2MXEtMjMgMjEgLTk3IDIxcS00OSAwIC04NCAtMzN0LTM1IC04M3oiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzQ4MyIgdW5pY29kZT0iJiN4ZjIwMzsiIApkPSJNMTQzMiA0ODRxMCAxNzMgLTIzNCAyMzlxLTM1IDEwIC01MyAxNi41dC0zOCAyNXQtMjkgNDYuNXEwIDIgLTIgOC41dC0zIDEydC0xIDcuNXEwIDM2IDI0LjUgNTkuNXQ2MC41IDIzLjVxNTQgMCA3MSAtMTVoLTFxMjAgLTE1IDM5IC01MWw5MyA3MXEtMzkgNTQgLTQ5IDY0cS0zMyAyOSAtNjcuNSAzOXQtODUuNSAxMHEtODAgMCAtMTQyIC01Ny41dC02MiAtMTM3LjVxMCAtNyAyIC0yM3ExNiAtOTYgNjQuNSAtMTQwdDE0OC41IC03MwpxMjkgLTggNDkgLTE1LjV0NDUgLTIxLjV0MzguNSAtMzQuNXQxMy41IC00Ni41di01cTEgLTU4IC00MC41IC05M3QtMTAwLjUgLTM1cS05NyAwIC0xNjcgMTQ0cS0yMyA0NyAtNTEuNSAxMjEuNXQtNDggMTI1LjV0LTU0IDExMC41dC03NCA5NS41dC0xMDMuNSA2MC41dC0xNDcgMjQuNXEtMTAxIDAgLTE5MiAtNTZ0LTE0NCAtMTQ4dC01MCAtMTkydi0xcTQgLTEwOCA1MC41IC0xOTl0MTMzLjUgLTE0Ny41dDE5NiAtNTYuNXExODYgMCAyNzkgMTEwCnEyMCAyNyAzMSA1MWwtNjAgMTA5cS00MiAtODAgLTk5IC0xMTZ0LTE0NiAtMzZxLTExNSAwIC0xOTEgODd0LTc2IDIwNHEwIDEwNSA4MiAxODl0MTg2IDg0cTExMiAwIDE3MCAtNTMuNXQxMDQgLTE3Mi41cTggLTIxIDI1LjUgLTY4LjV0MjguNSAtNzYuNXQzMS41IC03NC41dDM4LjUgLTc0dDQ1LjUgLTYyLjV0NTUuNSAtNTMuNXQ2NiAtMzN0ODAgLTEzLjVxMTA3IDAgMTgzIDY5LjV0NzYgMTc0LjV6TTE1MzYgMTEyMHYtOTYwCnEwIC0xMTkgLTg0LjUgLTIwMy41dC0yMDMuNSAtODQuNWgtOTYwcS0xMTkgMCAtMjAzLjUgODQuNXQtODQuNSAyMDMuNXY5NjBxMCAxMTkgODQuNSAyMDMuNXQyMDMuNSA4NC41aDk2MHExMTkgMCAyMDMuNSAtODQuNXQ4NC41IC0yMDMuNXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzQ4NCIgdW5pY29kZT0iJiN4ZjIwNDsiIGhvcml6LWFkdi14PSIyMDQ4IiAKZD0iTTExNTIgNjQwcTAgMTA0IC00MC41IDE5OC41dC0xMDkuNSAxNjMuNXQtMTYzLjUgMTA5LjV0LTE5OC41IDQwLjV0LTE5OC41IC00MC41dC0xNjMuNSAtMTA5LjV0LTEwOS41IC0xNjMuNXQtNDAuNSAtMTk4LjV0NDAuNSAtMTk4LjV0MTA5LjUgLTE2My41dDE2My41IC0xMDkuNXQxOTguNSAtNDAuNXQxOTguNSA0MC41dDE2My41IDEwOS41dDEwOS41IDE2My41dDQwLjUgMTk4LjV6TTE5MjAgNjQwcTAgMTA0IC00MC41IDE5OC41CnQtMTA5LjUgMTYzLjV0LTE2My41IDEwOS41dC0xOTguNSA0MC41aC0zODZxMTE5IC05MCAxODguNSAtMjI0dDY5LjUgLTI4OHQtNjkuNSAtMjg4dC0xODguNSAtMjI0aDM4NnExMDQgMCAxOTguNSA0MC41dDE2My41IDEwOS41dDEwOS41IDE2My41dDQwLjUgMTk4LjV6TTIwNDggNjQwcTAgLTEzMCAtNTEgLTI0OC41dC0xMzYuNSAtMjA0dC0yMDQgLTEzNi41dC0yNDguNSAtNTFoLTc2OHEtMTMwIDAgLTI0OC41IDUxdC0yMDQgMTM2LjUKdC0xMzYuNSAyMDR0LTUxIDI0OC41dDUxIDI0OC41dDEzNi41IDIwNHQyMDQgMTM2LjV0MjQ4LjUgNTFoNzY4cTEzMCAwIDI0OC41IC01MXQyMDQgLTEzNi41dDEzNi41IC0yMDR0NTEgLTI0OC41eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNDg1IiB1bmljb2RlPSImI3hmMjA1OyIgaG9yaXotYWR2LXg9IjIwNDgiIApkPSJNMCA2NDBxMCAxMzAgNTEgMjQ4LjV0MTM2LjUgMjA0dDIwNCAxMzYuNXQyNDguNSA1MWg3NjhxMTMwIDAgMjQ4LjUgLTUxdDIwNCAtMTM2LjV0MTM2LjUgLTIwNHQ1MSAtMjQ4LjV0LTUxIC0yNDguNXQtMTM2LjUgLTIwNHQtMjA0IC0xMzYuNXQtMjQ4LjUgLTUxaC03NjhxLTEzMCAwIC0yNDguNSA1MXQtMjA0IDEzNi41dC0xMzYuNSAyMDR0LTUxIDI0OC41ek0xNDA4IDEyOHExMDQgMCAxOTguNSA0MC41dDE2My41IDEwOS41CnQxMDkuNSAxNjMuNXQ0MC41IDE5OC41dC00MC41IDE5OC41dC0xMDkuNSAxNjMuNXQtMTYzLjUgMTA5LjV0LTE5OC41IDQwLjV0LTE5OC41IC00MC41dC0xNjMuNSAtMTA5LjV0LTEwOS41IC0xNjMuNXQtNDAuNSAtMTk4LjV0NDAuNSAtMTk4LjV0MTA5LjUgLTE2My41dDE2My41IC0xMDkuNXQxOTguNSAtNDAuNXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzQ4NiIgdW5pY29kZT0iJiN4ZjIwNjsiIGhvcml6LWFkdi14PSIyMzA0IiAKZD0iTTc2MiAzODRoLTMxNHEtNDAgMCAtNTcuNSAzNXQ2LjUgNjdsMTg4IDI1MXEtNjUgMzEgLTEzNyAzMXEtMTMyIDAgLTIyNiAtOTR0LTk0IC0yMjZ0OTQgLTIyNnQyMjYgLTk0cTExNSAwIDIwMyA3Mi41dDExMSAxODMuNXpNNTc2IDUxMmgxODZxLTE4IDg1IC03NSAxNDh6TTEwNTYgNTEybDI4OCAzODRoLTQ4MGwtOTkgLTEzMnExMDUgLTEwMyAxMjYgLTI1MmgxNjV6TTIxNzYgNDQ4cTAgMTMyIC05NCAyMjZ0LTIyNiA5NApxLTYwIDAgLTEyMSAtMjRsMTc0IC0yNjBxMTUgLTIzIDEwIC00OXQtMjcgLTQwcS0xNSAtMTEgLTM2IC0xMXEtMzUgMCAtNTMgMjlsLTE3NCAyNjBxLTkzIC05NSAtOTMgLTIyNXEwIC0xMzIgOTQgLTIyNnQyMjYgLTk0dDIyNiA5NHQ5NCAyMjZ6TTIzMDQgNDQ4cTAgLTE4NSAtMTMxLjUgLTMxNi41dC0zMTYuNSAtMTMxLjV0LTMxNi41IDEzMS41dC0xMzEuNSAzMTYuNXEwIDk3IDM5LjUgMTgzLjV0MTA5LjUgMTQ5LjVsLTY1IDk4bC0zNTMgLTQ2OQpxLTE4IC0yNiAtNTEgLTI2aC0xOTdxLTIzIC0xNjQgLTE0OSAtMjc0dC0yOTQgLTExMHEtMTg1IDAgLTMxNi41IDEzMS41dC0xMzEuNSAzMTYuNXQxMzEuNSAzMTYuNXQzMTYuNSAxMzEuNXExMTQgMCAyMTUgLTU1bDEzNyAxODNoLTIyNHEtMjYgMCAtNDUgMTl0LTE5IDQ1dDE5IDQ1dDQ1IDE5aDM4NHYtMTI4aDQzNWwtODUgMTI4aC0yMjJxLTI2IDAgLTQ1IDE5dC0xOSA0NXQxOSA0NXQ0NSAxOWgyNTZxMzMgMCA1MyAtMjhsMjY3IC00MDAKcTkxIDQ0IDE5MiA0NHExODUgMCAzMTYuNSAtMTMxLjV0MTMxLjUgLTMxNi41eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNDg3IiB1bmljb2RlPSImI3hmMjA3OyIgCmQ9Ik0zODQgMzIwcTAgNTMgLTM3LjUgOTAuNXQtOTAuNSAzNy41dC05MC41IC0zNy41dC0zNy41IC05MC41dDM3LjUgLTkwLjV0OTAuNSAtMzcuNXQ5MC41IDM3LjV0MzcuNSA5MC41ek0xNDA4IDMyMHEwIDUzIC0zNy41IDkwLjV0LTkwLjUgMzcuNXQtOTAuNSAtMzcuNXQtMzcuNSAtOTAuNXQzNy41IC05MC41dDkwLjUgLTM3LjV0OTAuNSAzNy41dDM3LjUgOTAuNXpNMTM2MiA3MTZsLTcyIDM4NHEtNSAyMyAtMjIuNSAzNy41dC00MC41IDE0LjUKaC05MThxLTIzIDAgLTQwLjUgLTE0LjV0LTIyLjUgLTM3LjVsLTcyIC0zODRxLTUgLTMwIDE0IC01M3Q0OSAtMjNoMTA2MnEzMCAwIDQ5IDIzdDE0IDUzek0xMTM2IDEzMjhxMCAyMCAtMTQgMzR0LTM0IDE0aC02NDBxLTIwIDAgLTM0IC0xNHQtMTQgLTM0dDE0IC0zNHQzNCAtMTRoNjQwcTIwIDAgMzQgMTR0MTQgMzR6TTE1MzYgNjAzdi02MDNoLTEyOHYtMTI4cTAgLTUzIC0zNy41IC05MC41dC05MC41IC0zNy41dC05MC41IDM3LjUKdC0zNy41IDkwLjV2MTI4aC03Njh2LTEyOHEwIC01MyAtMzcuNSAtOTAuNXQtOTAuNSAtMzcuNXQtOTAuNSAzNy41dC0zNy41IDkwLjV2MTI4aC0xMjh2NjAzcTAgMTEyIDI1IDIyM2wxMDMgNDU0cTkgNzggOTcuNSAxMzd0MjMwIDg5dDMxMi41IDMwdDMxMi41IC0zMHQyMzAgLTg5dDk3LjUgLTEzN2wxMDUgLTQ1NHEyMyAtMTAyIDIzIC0yMjN6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9Il80ODgiIHVuaWNvZGU9IiYjeGYyMDg7IiBob3Jpei1hZHYteD0iMjA0OCIgCmQ9Ik0xNDYzIDcwNHEwIC0zNSAtMjUgLTYwLjV0LTYxIC0yNS41aC03MDJxLTM2IDAgLTYxIDI1LjV0LTI1IDYwLjV0MjUgNjAuNXQ2MSAyNS41aDcwMnEzNiAwIDYxIC0yNS41dDI1IC02MC41ek0xNjc3IDcwNHEwIDg2IC0yMyAxNzBoLTk4MnEtMzYgMCAtNjEgMjV0LTI1IDYwcTAgMzYgMjUgNjF0NjEgMjVoOTA4cS04OCAxNDMgLTIzNSAyMjd0LTMyMCA4NHEtMTc3IDAgLTMyNy41IC04Ny41dC0yMzggLTIzNy41dC04Ny41IC0zMjcKcTAgLTg2IDIzIC0xNzBoOTgycTM2IDAgNjEgLTI1dDI1IC02MHEwIC0zNiAtMjUgLTYxdC02MSAtMjVoLTkwOHE4OCAtMTQzIDIzNS41IC0yMjd0MzIwLjUgLTg0cTEzMiAwIDI1MyA1MS41dDIwOCAxMzl0MTM5IDIwOHQ1MiAyNTMuNXpNMjA0OCA5NTlxMCAtMzUgLTI1IC02MHQtNjEgLTI1aC0xMzFxMTcgLTg1IDE3IC0xNzBxMCAtMTY3IC02NS41IC0zMTkuNXQtMTc1LjUgLTI2M3QtMjYyLjUgLTE3NnQtMzE5LjUgLTY1LjUKcS0yNDYgMCAtNDQ4LjUgMTMzdC0zMDEuNSAzNTBoLTE4OXEtMzYgMCAtNjEgMjV0LTI1IDYxcTAgMzUgMjUgNjB0NjEgMjVoMTMycS0xNyA4NSAtMTcgMTcwcTAgMTY3IDY1LjUgMzE5LjV0MTc1LjUgMjYzdDI2Mi41IDE3NnQzMjAuNSA2NS41cTI0NSAwIDQ0Ny41IC0xMzN0MzAxLjUgLTM1MGgxODhxMzYgMCA2MSAtMjV0MjUgLTYxeiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNDg5IiB1bmljb2RlPSImI3hmMjA5OyIgaG9yaXotYWR2LXg9IjEyODAiIApkPSJNOTUzIDExNThsLTExNCAtMzI4bDExNyAtMjFxMTY1IDQ1MSAxNjUgNTE4cTAgNTYgLTM4IDU2cS01NyAwIC0xMzAgLTIyNXpNNjU0IDQ3MWwzMyAtODhxMzcgNDIgNzEgNjdsLTMzIDUuNXQtMzguNSA3dC0zMi41IDguNXpNMzYyIDEzNjdxMCAtOTggMTU5IC01MjFxMTcgMTAgNDkgMTBxMTUgMCA3NSAtNWwtMTIxIDM1MXEtNzUgMjIwIC0xMjMgMjIwcS0xOSAwIC0yOSAtMTcuNXQtMTAgLTM3LjV6TTI4MyA2MDhxMCAtMzYgNTEuNSAtMTE5CnQxMTcuNSAtMTUzdDEwMCAtNzBxMTQgMCAyNS41IDEzdDExLjUgMjdxMCAyNCAtMzIgMTAycS0xMyAzMiAtMzIgNzJ0LTQ3LjUgODl0LTYxLjUgODF0LTYyIDMycS0yMCAwIC00NS41IC0yN3QtMjUuNSAtNDd6TTEyNSAyNzNxMCAtNDEgMjUgLTEwNHE1OSAtMTQ1IDE4My41IC0yMjd0MjgxLjUgLTgycTIyNyAwIDM4MiAxNzBxMTUyIDE2OSAxNTIgNDI3cTAgNDMgLTEgNjd0LTExLjUgNjJ0LTMwLjUgNTZxLTU2IDQ5IC0yMTEuNSA3NS41CnQtMjcwLjUgMjYuNXEtMzcgMCAtNDkgLTExcS0xMiAtNSAtMTIgLTM1cTAgLTM0IDIxLjUgLTYwdDU1LjUgLTQwdDc3LjUgLTIzLjV0ODcuNSAtMTEuNXQ4NSAtNHQ3MCAwaDIzcTI0IDAgNDAgLTE5cTE1IC0xOSAxOSAtNTVxLTI4IC0yOCAtOTYgLTU0cS02MSAtMjIgLTkzIC00NnEtNjQgLTQ2IC0xMDguNSAtMTE0dC00NC41IC0xMzdxMCAtMzEgMTguNSAtODguNXQxOC41IC04Ny41bC0zIC0xMnEtNCAtMTIgLTQgLTE0CnEtMTM3IDEwIC0xNDYgMjE2cS04IC0yIC00MSAtMnEyIC03IDIgLTIxcTAgLTUzIC00MC41IC04OS41dC05NC41IC0zNi41cS04MiAwIC0xNjYuNSA3OHQtODQuNSAxNTlxMCAzNCAzMyA2N3E1MiAtNjQgNjAgLTc2cTc3IC0xMDQgMTMzIC0xMDRxMTIgMCAyNi41IDguNXQxNC41IDIwLjVxMCAzNCAtODcuNSAxNDV0LTExNi41IDExMXEtNDMgMCAtNzAgLTQ0LjV0LTI3IC05MC41ek0xMSAyNjRxMCAxMDEgNDIuNSAxNjN0MTM2LjUgODgKcS0yOCA3NCAtMjggMTA0cTAgNjIgNjEgMTIzdDEyMiA2MXEyOSAwIDcwIC0xNXEtMTYzIDQ2MiAtMTYzIDU2N3EwIDgwIDQxIDEzMC41dDExOSA1MC41cTEzMSAwIDMyNSAtNTgxcTYgLTE3IDggLTIzcTYgMTYgMjkgNzkuNXQ0My41IDExOC41dDU0IDEyNy41dDY0LjUgMTIzdDcwLjUgODYuNXQ3Ni41IDM2cTcxIDAgMTEyIC00OXQ0MSAtMTIycTAgLTEwOCAtMTU5IC01NTBxNjEgLTE1IDEwMC41IC00NnQ1OC41IC03OHQyNiAtOTMuNQp0NyAtMTEwLjVxMCAtMTUwIC00NyAtMjgwdC0xMzIgLTIyNXQtMjExIC0xNTB0LTI3OCAtNTVxLTExMSAwIC0yMjMgNDJxLTE0OSA1NyAtMjU4IDE5MS41dC0xMDkgMjg2LjV6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9Il80OTAiIHVuaWNvZGU9IiYjeGYyMGE7IiBob3Jpei1hZHYteD0iMjA0OCIgCmQ9Ik03ODUgNTI4aDIwN3EtMTQgLTE1OCAtOTguNSAtMjQ4LjV0LTIxNC41IC05MC41cS0xNjIgMCAtMjU0LjUgMTE2dC05Mi41IDMxNnEwIDE5NCA5MyAzMTEuNXQyMzMgMTE3LjVxMTQ4IDAgMjMyIC04N3Q5NyAtMjQ3aC0yMDNxLTUgNjQgLTM1LjUgOTl0LTgxLjUgMzVxLTU3IDAgLTg4LjUgLTYwLjV0LTMxLjUgLTE3Ny41cTAgLTQ4IDUgLTg0dDE4IC02OS41dDQwIC01MS41dDY2IC0xOHE5NSAwIDEwOSAxMzl6TTE0OTcgNTI4aDIwNgpxLTE0IC0xNTggLTk4IC0yNDguNXQtMjE0IC05MC41cS0xNjIgMCAtMjU0LjUgMTE2dC05Mi41IDMxNnEwIDE5NCA5MyAzMTEuNXQyMzMgMTE3LjVxMTQ4IDAgMjMyIC04N3Q5NyAtMjQ3aC0yMDRxLTQgNjQgLTM1IDk5dC04MSAzNXEtNTcgMCAtODguNSAtNjAuNXQtMzEuNSAtMTc3LjVxMCAtNDggNSAtODR0MTggLTY5LjV0MzkuNSAtNTEuNXQ2NS41IC0xOHE0OSAwIDc2LjUgMzh0MzMuNSAxMDF6TTE4NTYgNjQ3cTAgMjA3IC0xNS41IDMwNwp0LTYwLjUgMTYxcS02IDggLTEzLjUgMTR0LTIxLjUgMTV0LTE2IDExcS04NiA2MyAtNjk3IDYzcS02MjUgMCAtNzEwIC02M3EtNSAtNCAtMTcuNSAtMTEuNXQtMjEgLTE0dC0xNC41IC0xNC41cS00NSAtNjAgLTYwIC0xNTkuNXQtMTUgLTMwOC41cTAgLTIwOCAxNSAtMzA3LjV0NjAgLTE2MC41cTYgLTggMTUgLTE1dDIwLjUgLTE0dDE3LjUgLTEycTQ0IC0zMyAyMzkuNSAtNDl0NDcwLjUgLTE2cTYxMCAwIDY5NyA2NXE1IDQgMTcgMTF0MjAuNSAxNAp0MTMuNSAxNnE0NiA2MCA2MSAxNTl0MTUgMzA5ek0yMDQ4IDE0MDh2LTE1MzZoLTIwNDh2MTUzNmgyMDQ4eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNDkxIiB1bmljb2RlPSImI3hmMjBiOyIgCmQ9Ik05OTIgOTEydi00OTZxMCAtMTQgLTkgLTIzdC0yMyAtOWgtMTYwcS0xNCAwIC0yMyA5dC05IDIzdjQ5NnEwIDExMiAtODAgMTkydC0xOTIgODBoLTI3MnYtMTE1MnEwIC0xNCAtOSAtMjN0LTIzIC05aC0xNjBxLTE0IDAgLTIzIDl0LTkgMjN2MTM0NHEwIDE0IDkgMjN0MjMgOWg0NjRxMTM1IDAgMjQ5IC02Ni41dDE4MC41IC0xODAuNXQ2Ni41IC0yNDl6TTEzNzYgMTM3NnYtODgwcTAgLTEzNSAtNjYuNSAtMjQ5dC0xODAuNSAtMTgwLjUKdC0yNDkgLTY2LjVoLTQ2NHEtMTQgMCAtMjMgOXQtOSAyM3Y5NjBxMCAxNCA5IDIzdDIzIDloMTYwcTE0IDAgMjMgLTl0OSAtMjN2LTc2OGgyNzJxMTEyIDAgMTkyIDgwdDgwIDE5MnY4ODBxMCAxNCA5IDIzdDIzIDloMTYwcTE0IDAgMjMgLTl0OSAtMjN6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9Il80OTIiIHVuaWNvZGU9IiYjeGYyMGM7IiAKZD0iTTEzMTEgNjk0di0xMTRxMCAtMjQgLTEzLjUgLTM4dC0zNy41IC0xNGgtMjAycS0yNCAwIC0zOCAxNHQtMTQgMzh2MTE0cTAgMjQgMTQgMzh0MzggMTRoMjAycTI0IDAgMzcuNSAtMTR0MTMuNSAtMzh6TTgyMSA0NjR2MjUwcTAgNTMgLTMyLjUgODUuNXQtODUuNSAzMi41aC0xMzNxLTY4IDAgLTk2IC01MnEtMjggNTIgLTk2IDUyaC0xMzBxLTUzIDAgLTg1LjUgLTMyLjV0LTMyLjUgLTg1LjV2LTI1MHEwIC0yMiAyMSAtMjJoNTUKcTIyIDAgMjIgMjJ2MjMwcTAgMjQgMTMuNSAzOHQzOC41IDE0aDk0cTI0IDAgMzggLTE0dDE0IC0zOHYtMjMwcTAgLTIyIDIxIC0yMmg1NHEyMiAwIDIyIDIydjIzMHEwIDI0IDE0IDM4dDM4IDE0aDk3cTI0IDAgMzcuNSAtMTR0MTMuNSAtMzh2LTIzMHEwIC0yMiAyMiAtMjJoNTVxMjEgMCAyMSAyMnpNMTQxMCA1NjB2MTU0cTAgNTMgLTMzIDg1LjV0LTg2IDMyLjVoLTI2NHEtNTMgMCAtODYgLTMyLjV0LTMzIC04NS41di00MTAKcTAgLTIxIDIyIC0yMWg1NXEyMSAwIDIxIDIxdjE4MHEzMSAtNDIgOTQgLTQyaDE5MXE1MyAwIDg2IDMyLjV0MzMgODUuNXpNMTUzNiAxMTc2di0xMDcycTAgLTk2IC02OCAtMTY0dC0xNjQgLTY4aC0xMDcycS05NiAwIC0xNjQgNjh0LTY4IDE2NHYxMDcycTAgOTYgNjggMTY0dDE2NCA2OGgxMDcycTk2IDAgMTY0IC02OHQ2OCAtMTY0eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNDkzIiB1bmljb2RlPSImI3hmMjBkOyIgCmQ9Ik05MTUgNDUwaC0yOTRsMTQ3IDU1MXpNMTAwMSAxMjhoMzExbC0zMjQgMTAyNGgtNDQwbC0zMjQgLTEwMjRoMzExbDM4MyAzMTR6TTE1MzYgMTEyMHYtOTYwcTAgLTExOCAtODUgLTIwM3QtMjAzIC04NWgtOTYwcS0xMTggMCAtMjAzIDg1dC04NSAyMDN2OTYwcTAgMTE4IDg1IDIwM3QyMDMgODVoOTYwcTExOCAwIDIwMyAtODV0ODUgLTIwM3oiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzQ5NCIgdW5pY29kZT0iJiN4ZjIwZTsiIGhvcml6LWFkdi14PSIyMDQ4IiAKZD0iTTIwNDggNjQxcTAgLTIxIC0xMyAtMzYuNXQtMzMgLTE5LjVsLTIwNSAtMzU2cTMgLTkgMyAtMThxMCAtMjAgLTEyLjUgLTM1LjV0LTMyLjUgLTE5LjVsLTE5MyAtMzM3cTMgLTggMyAtMTZxMCAtMjMgLTE2LjUgLTQwdC00MC41IC0xN3EtMjUgMCAtNDEgMThoLTQwMHEtMTcgLTIwIC00MyAtMjB0LTQzIDIwaC0zOTlxLTE3IC0yMCAtNDMgLTIwcS0yMyAwIC00MCAxNi41dC0xNyA0MC41cTAgOCA0IDIwbC0xOTMgMzM1CnEtMjAgNCAtMzIuNSAxOS41dC0xMi41IDM1LjVxMCA5IDMgMThsLTIwNiAzNTZxLTIwIDUgLTMyLjUgMjAuNXQtMTIuNSAzNS41cTAgMjEgMTMuNSAzNi41dDMzLjUgMTkuNWwxOTkgMzQ0cTAgMSAtMC41IDN0LTAuNSAzcTAgMzYgMzQgNTFsMjA5IDM2M3EtNCAxMCAtNCAxOHEwIDI0IDE3IDQwLjV0NDAgMTYuNXEyNiAwIDQ0IC0yMWgzOTZxMTYgMjEgNDMgMjF0NDMgLTIxaDM5OHExOCAyMSA0NCAyMXEyMyAwIDQwIC0xNi41dDE3IC00MC41CnEwIC02IC00IC0xOGwyMDcgLTM1OHEyMyAtMSAzOSAtMTcuNXQxNiAtMzguNXEwIC0xMyAtNyAtMjdsMTg3IC0zMjRxMTkgLTQgMzEuNSAtMTkuNXQxMi41IC0zNS41ek0xMDYzIC0xNThoMzg5bC0zNDIgMzU0aC0xNDNsLTM0MiAtMzU0aDM2MHExOCAxNiAzOSAxNnQzOSAtMTZ6TTExMiA2NTRxMSAtNCAxIC0xM3EwIC0xMCAtMiAtMTVsMjA4IC0zNjBsMTUgLTZsMTg4IDE5OXYzNDdsLTE4NyAxOTRxLTEzIC04IC0yOSAtMTB6TTk4NiAxNDM4CmgtMzg4bDE5MCAtMjAwbDU1NCAyMDBoLTI4MHEtMTYgLTE2IC0zOCAtMTZ0LTM4IDE2ek0xNjg5IDIyNnExIDYgNSAxMWwtNjQgNjhsLTE3IC03OWg3NnpNMTU4MyAyMjZsMjIgMTA1bC0yNTIgMjY2bC0yOTYgLTMwN2w2MyAtNjRoNDYzek0xNDk1IC0xNDJsMTYgMjhsNjUgMzEwaC00MjdsMzMzIC0zNDNxOCA0IDEzIDV6TTU3OCAtMTU4aDVsMzQyIDM1NGgtMzczdi0zMzVsNCAtNnExNCAtNSAyMiAtMTN6TTU1MiAyMjZoNDAybDY0IDY2CmwtMzA5IDMyMWwtMTU3IC0xNjZ2LTIyMXpNMzU5IDIyNmgxNjN2MTg5bC0xNjggLTE3N3E0IC04IDUgLTEyek0zNTggMTA1MXEwIC0xIDAuNSAtMnQwLjUgLTJxMCAtMTYgLTggLTI5bDE3MSAtMTc3djI2OXpNNTUyIDExMjF2LTMxMWwxNTMgLTE1N2wyOTcgMzE0bC0yMjMgMjM2ek01NTYgMTQyNWwtNCAtOHYtMjY0bDIwNSA3NGwtMTkxIDIwMXEtNiAtMiAtMTAgLTN6TTE0NDcgMTQzOGgtMTZsLTYyMSAtMjI0bDIxMyAtMjI1ek0xMDIzIDk0NgpsLTI5NyAtMzE1bDMxMSAtMzE5bDI5NiAzMDd6TTY4OCA2MzRsLTEzNiAxNDF2LTI4NHpNMTAzOCAyNzBsLTQyIC00NGg4NXpNMTM3NCA2MThsMjM4IC0yNTFsMTMyIDYyNGwtMyA1bC0xIDF6TTE3MTggMTAxOHEtOCAxMyAtOCAyOXYybC0yMTYgMzc2cS01IDEgLTEzIDVsLTQzNyAtNDYzbDMxMCAtMzI3ek01MjIgMTE0MnYyMjNsLTE2MyAtMjgyek01MjIgMTk2aC0xNjNsMTYzIC0yODN2Mjgzek0xNjA3IDE5NmwtNDggLTIyN2wxMzAgMjI3aC04Mgp6TTE3MjkgMjY2bDIwNyAzNjFxLTIgMTAgLTIgMTRxMCAxIDMgMTZsLTE3MSAyOTZsLTEyOSAtNjEybDc3IC04MnE1IDMgMTUgN3oiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iZjIxMCIgdW5pY29kZT0iJiN4ZjIxMDsiIApkPSJNMCA4NTZxMCAxMzEgOTEuNSAyMjYuNXQyMjIuNSA5NS41aDc0MmwzNTIgMzU4di0xNDcwcTAgLTEzMiAtOTEuNSAtMjI3dC0yMjIuNSAtOTVoLTc4MHEtMTMxIDAgLTIyMi41IDk1dC05MS41IDIyN3Y3OTB6TTEyMzIgMTAybC0xNzYgMTgwdjQyNXEwIDQ2IC0zMiA3OXQtNzggMzNoLTQ4NHEtNDYgMCAtNzggLTMzdC0zMiAtNzl2LTQ5MnEwIC00NiAzMi41IC03OS41dDc3LjUgLTMzLjVoNzcweiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNDk2IiB1bmljb2RlPSImI3hmMjExOyIgCmQ9Ik05MzQgMTM4NnEtMzE3IC0xMjEgLTU1NiAtMzYyLjV0LTM1OCAtNTYwLjVxLTIwIDg5IC0yMCAxNzZxMCAyMDggMTAyLjUgMzg0LjV0Mjc4LjUgMjc5dDM4NCAxMDIuNXE4MiAwIDE2OSAtMTl6TTEyMDMgMTI2N3E5MyAtNjUgMTY0IC0xNTVxLTM4OSAtMTEzIC02NzQuNSAtNDAwLjV0LTM5Ni41IC02NzYuNXEtOTMgNzIgLTE1NSAxNjJxMTEyIDM4NiAzOTUgNjcxdDY2NyAzOTl6TTQ3MCAtNjdxMTE1IDM1NiAzNzkuNSA2MjJ0NjE5LjUgMzg0CnE0MCAtOTIgNTQgLTE5NXEtMjkyIC0xMjAgLTUxNiAtMzQ1dC0zNDMgLTUxOHEtMTAzIDE0IC0xOTQgNTJ6TTE1MzYgLTEyNXEtMTkzIDUwIC0zNjcgMTE1cS0xMzUgLTg0IC0yOTAgLTEwN3ExMDkgMjA1IDI3NCAzNzAuNXQzNjkgMjc1LjVxLTIxIC0xNTIgLTEwMSAtMjg0cTY1IC0xNzUgMTE1IC0zNzB6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9ImYyMTIiIHVuaWNvZGU9IiYjeGYyMTI7IiBob3Jpei1hZHYteD0iMjA0OCIgCmQ9Ik0xODkzIDExNDRsMTU1IC0xMjcycS0xMzEgMCAtMjU3IDU3cS0yMDAgOTEgLTM5MyA5MXEtMjI2IDAgLTM3NCAtMTQ4cS0xNDggMTQ4IC0zNzQgMTQ4cS0xOTMgMCAtMzkzIC05MXEtMTI4IC01NyAtMjUyIC01N2gtNWwxNTUgMTI3MnEyMjQgMTI3IDQ4MiAxMjdxMjMzIDAgMzg3IC0xMDZxMTU0IDEwNiAzODcgMTA2cTI1OCAwIDQ4MiAtMTI3ek0xMzk4IDE1N3ExMjkgMCAyMzIgLTI4LjV0MjYwIC05My41bC0xMjQgMTAyMQpxLTE3MSA3OCAtMzY4IDc4cS0yMjQgMCAtMzc0IC0xNDFxLTE1MCAxNDEgLTM3NCAxNDFxLTE5NyAwIC0zNjggLTc4bC0xMjQgLTEwMjFxMTA1IDQzIDE2NS41IDY1dDE0OC41IDM5LjV0MTc4IDE3LjVxMjAyIDAgMzc0IC0xMDhxMTcyIDEwOCAzNzQgMTA4ek0xNDM4IDE5MWwtNTUgOTA3cS0yMTEgLTQgLTM1OSAtMTU1cS0xNTIgMTU1IC0zNzQgMTU1cS0xNzYgMCAtMzM2IC02NmwtMTE0IC05NDFxMTI0IDUxIDIyOC41IDc2dDIyMS41IDI1CnEyMDkgMCAzNzQgLTEwMnExNzIgMTA3IDM3NCAxMDJ6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9Il80OTgiIHVuaWNvZGU9IiYjeGYyMTM7IiBob3Jpei1hZHYteD0iMjA0OCIgCmQ9Ik0xNTAwIDE2NXY3MzNxMCAyMSAtMTUgMzZ0LTM1IDE1aC05M3EtMjAgMCAtMzUgLTE1dC0xNSAtMzZ2LTczM3EwIC0yMCAxNSAtMzV0MzUgLTE1aDkzcTIwIDAgMzUgMTV0MTUgMzV6TTEyMTYgMTY1djUzMXEwIDIwIC0xNSAzNXQtMzUgMTVoLTEwMXEtMjAgMCAtMzUgLTE1dC0xNSAtMzV2LTUzMXEwIC0yMCAxNSAtMzV0MzUgLTE1aDEwMXEyMCAwIDM1IDE1dDE1IDM1ek05MjQgMTY1djQyOXEwIDIwIC0xNSAzNXQtMzUgMTVoLTEwMQpxLTIwIDAgLTM1IC0xNXQtMTUgLTM1di00MjlxMCAtMjAgMTUgLTM1dDM1IC0xNWgxMDFxMjAgMCAzNSAxNXQxNSAzNXpNNjMyIDE2NXYzNjJxMCAyMCAtMTUgMzV0LTM1IDE1aC0xMDFxLTIwIDAgLTM1IC0xNXQtMTUgLTM1di0zNjJxMCAtMjAgMTUgLTM1dDM1IC0xNWgxMDFxMjAgMCAzNSAxNXQxNSAzNXpNMjA0OCAzMTFxMCAtMTY2IC0xMTggLTI4NHQtMjg0IC0xMThoLTEyNDRxLTE2NiAwIC0yODQgMTE4dC0xMTggMjg0CnEwIDExNiA2MyAyMTQuNXQxNjggMTQ4LjVxLTEwIDM0IC0xMCA3M3EwIDExMyA4MC41IDE5My41dDE5My41IDgwLjVxMTAyIDAgMTgwIC02N3E0NSAxODMgMTk0IDMwMHQzMzggMTE3cTE0OSAwIDI3NSAtNzMuNXQxOTkuNSAtMTk5LjV0NzMuNSAtMjc1cTAgLTY2IC0xNCAtMTIycTEzNSAtMzMgMjIxIC0xNDIuNXQ4NiAtMjQ3LjV6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9Il80OTkiIHVuaWNvZGU9IiYjeGYyMTQ7IiAKZD0iTTAgMTUzNmgxNTM2di0xMzkybC03NzYgLTMzOGwtNzYwIDMzOHYxMzkyek0xNDM2IDIwOXY5MjZoLTEzMzZ2LTkyNmw2NjEgLTI5NHpNMTQzNiAxMjM1djIwMWgtMTMzNnYtMjAxaDEzMzZ6TTE4MSA5Mzd2LTExNWgtMzd2MTE1aDM3ek0xODEgNzg5di0xMTVoLTM3djExNWgzN3pNMTgxIDY0MXYtMTE1aC0zN3YxMTVoMzd6TTE4MSA0OTN2LTExNWgtMzd2MTE1aDM3ek0xODEgMzQ1di0xMTVoLTM3djExNWgzN3pNMjA3IDIwMmwxNSAzNApsMTA1IC00N2wtMTUgLTMzek0zNDMgMTQybDE1IDM0bDEwNSAtNDZsLTE1IC0zNHpNNDc4IDgybDE1IDM0bDEwNSAtNDZsLTE1IC0zNHpNNjE0IDIzbDE1IDMzbDEwNCAtNDZsLTE1IC0zNHpNNzk3IDEwbDEwNSA0NmwxNSAtMzNsLTEwNSAtNDd6TTkzMiA3MGwxMDUgNDZsMTUgLTM0bC0xMDUgLTQ2ek0xMDY4IDEzMGwxMDUgNDZsMTUgLTM0bC0xMDUgLTQ2ek0xMjAzIDE4OWwxMDUgNDdsMTUgLTM0bC0xMDUgLTQ2ek0yNTkgMTM4OXYtMzZoLTExNAp2MzZoMTE0ek00MjEgMTM4OXYtMzZoLTExNXYzNmgxMTV6TTU4MyAxMzg5di0zNmgtMTE1djM2aDExNXpNNzQ0IDEzODl2LTM2aC0xMTR2MzZoMTE0ek05MDYgMTM4OXYtMzZoLTExNHYzNmgxMTR6TTEwNjggMTM4OXYtMzZoLTExNXYzNmgxMTV6TTEyMzAgMTM4OXYtMzZoLTExNXYzNmgxMTV6TTEzOTEgMTM4OXYtMzZoLTExNHYzNmgxMTR6TTE4MSAxMDQ5di03OWgtMzd2MTE1aDExNXYtMzZoLTc4ek00MjEgMTA4NXYtMzZoLTExNXYzNmgxMTV6Ck01ODMgMTA4NXYtMzZoLTExNXYzNmgxMTV6TTc0NCAxMDg1di0zNmgtMTE0djM2aDExNHpNOTA2IDEwODV2LTM2aC0xMTR2MzZoMTE0ek0xMDY4IDEwODV2LTM2aC0xMTV2MzZoMTE1ek0xMjMwIDEwODV2LTM2aC0xMTV2MzZoMTE1ek0xMzU1IDk3MHY3OWgtNzh2MzZoMTE1di0xMTVoLTM3ek0xMzU1IDgyMnYxMTVoMzd2LTExNWgtMzd6TTEzNTUgNjc0djExNWgzN3YtMTE1aC0zN3pNMTM1NSA1MjZ2MTE1aDM3di0xMTVoLTM3ek0xMzU1IDM3OAp2MTE1aDM3di0xMTVoLTM3ek0xMzU1IDIzMHYxMTVoMzd2LTExNWgtMzd6TTc2MCAyNjVxLTEyOSAwIC0yMjEgOTEuNXQtOTIgMjIxLjVxMCAxMjkgOTIgMjIxdDIyMSA5MnExMzAgMCAyMjEuNSAtOTJ0OTEuNSAtMjIxcTAgLTEzMCAtOTEuNSAtMjIxLjV0LTIyMS41IC05MS41ek01OTUgNjQ2cTAgLTM2IDE5LjUgLTU2LjV0NDkuNSAtMjV0NjQgLTd0NjQgLTJ0NDkuNSAtOXQxOS41IC0zMC41cTAgLTQ5IC0xMTIgLTQ5cS05NyAwIC0xMjMgNTEKaC0zbC0zMSAtNjNxNjcgLTQyIDE2MiAtNDJxMjkgMCA1Ni41IDV0NTUuNSAxNnQ0NS41IDMzdDE3LjUgNTNxMCA0NiAtMjcuNSA2OS41dC02Ny41IDI3dC03OS41IDN0LTY3IDV0LTI3LjUgMjUuNXEwIDIxIDIwLjUgMzN0NDAuNSAxNXQ0MSAzcTM0IDAgNzAuNSAtMTF0NTEuNSAtMzRoM2wzMCA1OHEtMyAxIC0yMSA4LjV0LTIyLjUgOXQtMTkuNSA3dC0yMiA3dC0yMCA0LjV0LTI0IDR0LTIzIDFxLTI5IDAgLTU2LjUgLTV0LTU0IC0xNi41CnQtNDMgLTM0dC0xNi41IC01My41eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNTAwIiB1bmljb2RlPSImI3hmMjE1OyIgaG9yaXotYWR2LXg9IjIwNDgiIApkPSJNODYzIDUwNHEwIDExMiAtNzkuNSAxOTEuNXQtMTkxLjUgNzkuNXQtMTkxIC03OS41dC03OSAtMTkxLjV0NzkgLTE5MXQxOTEgLTc5dDE5MS41IDc5dDc5LjUgMTkxek0xNzI2IDUwNXEwIDExMiAtNzkgMTkxdC0xOTEgNzl0LTE5MS41IC03OXQtNzkuNSAtMTkxcTAgLTExMyA3OS41IC0xOTJ0MTkxLjUgLTc5dDE5MSA3OS41dDc5IDE5MS41ek0yMDQ4IDEzMTR2LTEzNDhxMCAtNDQgLTMxLjUgLTc1LjV0LTc2LjUgLTMxLjVoLTE4MzIKcS00NSAwIC03Ni41IDMxLjV0LTMxLjUgNzUuNXYxMzQ4cTAgNDQgMzEuNSA3NS41dDc2LjUgMzEuNWg0MzFxNDQgMCA3NiAtMzEuNXQzMiAtNzUuNXYtMTYxaDc1NHYxNjFxMCA0NCAzMiA3NS41dDc2IDMxLjVoNDMxcTQ1IDAgNzYuNSAtMzEuNXQzMS41IC03NS41eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNTAxIiB1bmljb2RlPSImI3hmMjE2OyIgaG9yaXotYWR2LXg9IjIwNDgiIApkPSJNMTQzMCA5NTN6TTE2OTAgNzQ5cTE0OCAwIDI1MyAtOTguNXQxMDUgLTI0NC41cTAgLTE1NyAtMTA5IC0yNjEuNXQtMjY3IC0xMDQuNXEtODUgMCAtMTYyIDI3LjV0LTEzOCA3My41dC0xMTggMTA2dC0xMDkgMTI2dC0xMDMuNSAxMzIuNXQtMTA4LjUgMTI2LjV0LTExNyAxMDZ0LTEzNiA3My41dC0xNTkgMjcuNXEtMTU0IDAgLTI1MS41IC05MS41dC05Ny41IC0yNDQuNXEwIC0xNTcgMTA0IC0yNTB0MjYzIC05M3ExMDAgMCAyMDggMzcuNQp0MTkzIDk4LjVxNSA0IDIxIDE4LjV0MzAgMjR0MjIgOS41cTE0IDAgMjQuNSAtMTAuNXQxMC41IC0yNC41cTAgLTI0IC02MCAtNzdxLTEwMSAtODggLTIzNC41IC0xNDJ0LTI2MC41IC01NHEtMTMzIDAgLTI0NS41IDU4dC0xODAgMTY1dC02Ny41IDI0MXEwIDIwNSAxNDEuNSAzNDF0MzQ3LjUgMTM2cTEyMCAwIDIyNi41IC00My41dDE4NS41IC0xMTN0MTUxLjUgLTE1M3QxMzkgLTE2Ny41dDEzMy41IC0xNTMuNXQxNDkuNSAtMTEzCnQxNzIuNSAtNDMuNXExMDIgMCAxNjguNSA2MS41dDY2LjUgMTYyLjVxMCA5NSAtNjQuNSAxNTl0LTE1OS41IDY0cS0zMCAwIC04MS41IC0xOC41dC02OC41IC0xOC41cS0yMCAwIC0zNS41IDE1dC0xNS41IDM1cTAgMTggOC41IDU3dDguNSA1OXEwIDE1OSAtMTA3LjUgMjYzdC0yNjYuNSAxMDRxLTU4IDAgLTExMS41IC0xOC41dC04NCAtNDAuNXQtNTUuNSAtNDAuNXQtMzMgLTE4LjVxLTE1IDAgLTI1LjUgMTAuNXQtMTAuNSAyNS41CnEwIDE5IDI1IDQ2cTU5IDY3IDE0NyAxMDMuNXQxODIgMzYuNXExOTEgMCAzMTggLTEyNS41dDEyNyAtMzE1LjVxMCAtMzcgLTQgLTY2cTU3IDE1IDExNSAxNXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzUwMiIgdW5pY29kZT0iJiN4ZjIxNzsiIGhvcml6LWFkdi14PSIxNjY0IiAKZD0iTTEyMTYgODMycTAgMjYgLTE5IDQ1dC00NSAxOWgtMTI4djEyOHEwIDI2IC0xOSA0NXQtNDUgMTl0LTQ1IC0xOXQtMTkgLTQ1di0xMjhoLTEyOHEtMjYgMCAtNDUgLTE5dC0xOSAtNDV0MTkgLTQ1dDQ1IC0xOWgxMjh2LTEyOHEwIC0yNiAxOSAtNDV0NDUgLTE5dDQ1IDE5dDE5IDQ1djEyOGgxMjhxMjYgMCA0NSAxOXQxOSA0NXpNNjQwIDBxMCAtNTMgLTM3LjUgLTkwLjV0LTkwLjUgLTM3LjV0LTkwLjUgMzcuNXQtMzcuNSA5MC41CnQzNy41IDkwLjV0OTAuNSAzNy41dDkwLjUgLTM3LjV0MzcuNSAtOTAuNXpNMTUzNiAwcTAgLTUzIC0zNy41IC05MC41dC05MC41IC0zNy41dC05MC41IDM3LjV0LTM3LjUgOTAuNXQzNy41IDkwLjV0OTAuNSAzNy41dDkwLjUgLTM3LjV0MzcuNSAtOTAuNXpNMTY2NCAxMDg4di01MTJxMCAtMjQgLTE2IC00Mi41dC00MSAtMjEuNWwtMTA0NCAtMTIycTEgLTcgNC41IC0yMS41dDYgLTI2LjV0Mi41IC0yMnEwIC0xNiAtMjQgLTY0aDkyMApxMjYgMCA0NSAtMTl0MTkgLTQ1dC0xOSAtNDV0LTQ1IC0xOWgtMTAyNHEtMjYgMCAtNDUgMTl0LTE5IDQ1cTAgMTQgMTEgMzkuNXQyOS41IDU5LjV0MjAuNSAzOGwtMTc3IDgyM2gtMjA0cS0yNiAwIC00NSAxOXQtMTkgNDV0MTkgNDV0NDUgMTloMjU2cTE2IDAgMjguNSAtNi41dDIwIC0xNS41dDEzIC0yNC41dDcuNSAtMjYuNXQ1LjUgLTI5LjV0NC41IC0yNS41aDEyMDFxMjYgMCA0NSAtMTl0MTkgLTQ1eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNTAzIiB1bmljb2RlPSImI3hmMjE4OyIgaG9yaXotYWR2LXg9IjE2NjQiIApkPSJNMTI4MCA4MzJxMCAyNiAtMTkgNDV0LTQ1IDE5dC00NSAtMTlsLTE0NyAtMTQ2djI5M3EwIDI2IC0xOSA0NXQtNDUgMTl0LTQ1IC0xOXQtMTkgLTQ1di0yOTNsLTE0NyAxNDZxLTE5IDE5IC00NSAxOXQtNDUgLTE5dC0xOSAtNDV0MTkgLTQ1bDI1NiAtMjU2cTE5IC0xOSA0NSAtMTl0NDUgMTlsMjU2IDI1NnExOSAxOSAxOSA0NXpNNjQwIDBxMCAtNTMgLTM3LjUgLTkwLjV0LTkwLjUgLTM3LjV0LTkwLjUgMzcuNXQtMzcuNSA5MC41CnQzNy41IDkwLjV0OTAuNSAzNy41dDkwLjUgLTM3LjV0MzcuNSAtOTAuNXpNMTUzNiAwcTAgLTUzIC0zNy41IC05MC41dC05MC41IC0zNy41dC05MC41IDM3LjV0LTM3LjUgOTAuNXQzNy41IDkwLjV0OTAuNSAzNy41dDkwLjUgLTM3LjV0MzcuNSAtOTAuNXpNMTY2NCAxMDg4di01MTJxMCAtMjQgLTE2IC00Mi41dC00MSAtMjEuNWwtMTA0NCAtMTIycTEgLTcgNC41IC0yMS41dDYgLTI2LjV0Mi41IC0yMnEwIC0xNiAtMjQgLTY0aDkyMApxMjYgMCA0NSAtMTl0MTkgLTQ1dC0xOSAtNDV0LTQ1IC0xOWgtMTAyNHEtMjYgMCAtNDUgMTl0LTE5IDQ1cTAgMTQgMTEgMzkuNXQyOS41IDU5LjV0MjAuNSAzOGwtMTc3IDgyM2gtMjA0cS0yNiAwIC00NSAxOXQtMTkgNDV0MTkgNDV0NDUgMTloMjU2cTE2IDAgMjguNSAtNi41dDIwIC0xNS41dDEzIC0yNC41dDcuNSAtMjYuNXQ1LjUgLTI5LjV0NC41IC0yNS41aDEyMDFxMjYgMCA0NSAtMTl0MTkgLTQ1eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNTA0IiB1bmljb2RlPSImI3hmMjE5OyIgaG9yaXotYWR2LXg9IjIwNDgiIApkPSJNMjEyIDc2OGw2MjMgLTY2NWwtMzAwIDY2NWgtMzIzek0xMDI0IC00bDM0OSA3NzJoLTY5OHpNNTM4IDg5NmwyMDQgMzg0aC0yNjJsLTI4OCAtMzg0aDM0NnpNMTIxMyAxMDNsNjIzIDY2NWgtMzIzek02ODMgODk2aDY4MmwtMjA0IDM4NGgtMjc0ek0xNTEwIDg5NmgzNDZsLTI4OCAzODRoLTI2MnpNMTY1MSAxMzgybDM4NCAtNTEycTE0IC0xOCAxMyAtNDEuNXQtMTcgLTQwLjVsLTk2MCAtMTAyNHEtMTggLTIwIC00NyAtMjB0LTQ3IDIwCmwtOTYwIDEwMjRxLTE2IDE3IC0xNyA0MC41dDEzIDQxLjVsMzg0IDUxMnExOCAyNiA1MSAyNmgxMTUycTMzIDAgNTEgLTI2eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNTA1IiB1bmljb2RlPSImI3hmMjFhOyIgaG9yaXotYWR2LXg9IjIwNDgiIApkPSJNMTgxMSAtMTlxMTkgMTkgNDUgMTl0NDUgLTE5bDEyOCAtMTI4bC05MCAtOTBsLTgzIDgzbC04MyAtODNxLTE4IC0xOSAtNDUgLTE5dC00NSAxOWwtODMgODNsLTgzIC04M3EtMTkgLTE5IC00NSAtMTl0LTQ1IDE5bC04MyA4M2wtODMgLTgzcS0xOSAtMTkgLTQ1IC0xOXQtNDUgMTlsLTgzIDgzbC04MyAtODNxLTE5IC0xOSAtNDUgLTE5dC00NSAxOWwtODMgODNsLTgzIC04M3EtMTkgLTE5IC00NSAtMTl0LTQ1IDE5bC04MyA4M2wtODMgLTgzCnEtMTkgLTE5IC00NSAtMTl0LTQ1IDE5bC04MyA4M2wtODMgLTgzcS0xOSAtMTkgLTQ1IC0xOXQtNDUgMTlsLTEyOCAxMjhsOTAgOTBsODMgLTgzbDgzIDgzcTE5IDE5IDQ1IDE5dDQ1IC0xOWw4MyAtODNsODMgODNxMTkgMTkgNDUgMTl0NDUgLTE5bDgzIC04M2w4MyA4M3ExOSAxOSA0NSAxOXQ0NSAtMTlsODMgLTgzbDgzIDgzcTE5IDE5IDQ1IDE5dDQ1IC0xOWw4MyAtODNsODMgODNxMTkgMTkgNDUgMTl0NDUgLTE5bDgzIC04M2w4MyA4MwpxMTkgMTkgNDUgMTl0NDUgLTE5bDgzIC04M3pNMjM3IDE5cS0xOSAtMTkgLTQ1IC0xOXQtNDUgMTlsLTEyOCAxMjhsOTAgOTBsODMgLTgybDgzIDgycTE5IDE5IDQ1IDE5dDQ1IC0xOWw4MyAtODJsNjQgNjR2MjkzbC0yMTAgMzE0cS0xNyAyNiAtNyA1Ni41dDQwIDQwLjVsMTc3IDU4djI5OWgxMjh2MTI4aDI1NnYxMjhoMjU2di0xMjhoMjU2di0xMjhoMTI4di0yOTlsMTc3IC01OHEzMCAtMTAgNDAgLTQwLjV0LTcgLTU2LjVsLTIxMCAtMzE0CnYtMjkzbDE5IDE4cTE5IDE5IDQ1IDE5dDQ1IC0xOWw4MyAtODJsODMgODJxMTkgMTkgNDUgMTl0NDUgLTE5bDEyOCAtMTI4bC05MCAtOTBsLTgzIDgzbC04MyAtODNxLTE4IC0xOSAtNDUgLTE5dC00NSAxOWwtODMgODNsLTgzIC04M3EtMTkgLTE5IC00NSAtMTl0LTQ1IDE5bC04MyA4M2wtODMgLTgzcS0xOSAtMTkgLTQ1IC0xOXQtNDUgMTlsLTgzIDgzbC04MyAtODNxLTE5IC0xOSAtNDUgLTE5dC00NSAxOWwtODMgODNsLTgzIC04MwpxLTE5IC0xOSAtNDUgLTE5dC00NSAxOWwtODMgODNsLTgzIC04M3EtMTkgLTE5IC00NSAtMTl0LTQ1IDE5bC04MyA4M3pNNjQwIDExNTJ2LTEyOGwzODQgMTI4bDM4NCAtMTI4djEyOGgtMTI4djEyOGgtNTEydi0xMjhoLTEyOHoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzUwNiIgdW5pY29kZT0iJiN4ZjIxYjsiIApkPSJNNTc2IDBsOTYgNDQ4bC05NiAxMjhsLTEyOCA2NHpNODMyIDBsMTI4IDY0MGwtMTI4IC02NGwtOTYgLTEyOHpNOTkyIDEwMTBxLTIgNCAtNCA2cS0xMCA4IC05NiA4cS03MCAwIC0xNjcgLTE5cS03IC0yIC0yMSAtMnQtMjEgMnEtOTcgMTkgLTE2NyAxOXEtODYgMCAtOTYgLThxLTIgLTIgLTQgLTZxMiAtMTggNCAtMjdxMiAtMyA3LjUgLTYuNXQ3LjUgLTEwLjVxMiAtNCA3LjUgLTIwLjV0NyAtMjAuNXQ3LjUgLTE3dDguNSAtMTd0OSAtMTQKdDEyIC0xMy41dDE0IC05LjV0MTcuNSAtOHQyMC41IC00dDI0LjUgLTJxMzYgMCA1OSAxMi41dDMyLjUgMzB0MTQuNSAzNC41dDExLjUgMjkuNXQxNy41IDEyLjVoMTJxMTEgMCAxNy41IC0xMi41dDExLjUgLTI5LjV0MTQuNSAtMzQuNXQzMi41IC0zMHQ1OSAtMTIuNXExMyAwIDI0LjUgMnQyMC41IDR0MTcuNSA4dDE0IDkuNXQxMiAxMy41dDkgMTR0OC41IDE3dDcuNSAxN3Q3IDIwLjV0Ny41IDIwLjVxMiA3IDcuNSAxMC41dDcuNSA2LjUKcTIgOSA0IDI3ek0xNDA4IDEzMXEwIC0xMjEgLTczIC0xOTB0LTE5NCAtNjloLTg3NHEtMTIxIDAgLTE5NCA2OXQtNzMgMTkwcTAgNjEgNC41IDExOHQxOSAxMjUuNXQzNy41IDEyMy41dDYzLjUgMTAzLjV0OTMuNSA3NC41bC05MCAyMjBoMjE0cS0yMiA2NCAtMjIgMTI4cTAgMTIgMiAzMnEtMTk0IDQwIC0xOTQgOTZxMCA1NyAyMTAgOTlxMTcgNjIgNTEuNSAxMzR0NzAuNSAxMTRxMzIgMzcgNzYgMzdxMzAgMCA4NCAtMzF0ODQgLTMxdDg0IDMxCnQ4NCAzMXE0NCAwIDc2IC0zN3EzNiAtNDIgNzAuNSAtMTE0dDUxLjUgLTEzNHEyMTAgLTQyIDIxMCAtOTlxMCAtNTYgLTE5NCAtOTZxNyAtODEgLTIwIC0xNjBoMjE0bC04MiAtMjI1cTYzIC0zMyAxMDcuNSAtOTYuNXQ2NS41IC0xNDMuNXQyOSAtMTUxLjV0OCAtMTQ4LjV6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9Il81MDciIHVuaWNvZGU9IiYjeGYyMWM7IiBob3Jpei1hZHYteD0iMjMwNCIgCmQ9Ik0yMzAxIDUwMHExMiAtMTAzIC0yMiAtMTk4LjV0LTk5IC0xNjMuNXQtMTU4LjUgLTEwNnQtMTk2LjUgLTMxcS0xNjEgMTEgLTI3OS41IDEyNXQtMTM0LjUgMjc0cS0xMiAxMTEgMjcuNSAyMTAuNXQxMTguNSAxNzAuNWwtNzEgMTA3cS05NiAtODAgLTE1MSAtMTk0dC01NSAtMjQ0cTAgLTI3IC0xOC41IC00Ni41dC00NS41IC0xOS41aC0yNTZoLTY5cS0yMyAtMTY0IC0xNDkgLTI3NHQtMjk0IC0xMTBxLTE4NSAwIC0zMTYuNSAxMzEuNQp0LTEzMS41IDMxNi41dDEzMS41IDMxNi41dDMxNi41IDEzMS41cTc2IDAgMTUyIC0yN2wyNCA0NXEtMTIzIDExMCAtMzA0IDExMGgtNjRxLTI2IDAgLTQ1IDE5dC0xOSA0NXQxOSA0NXQ0NSAxOWgxMjhxNzggMCAxNDUgLTEzLjV0MTE2LjUgLTM4LjV0NzEuNSAtMzkuNXQ1MSAtMzYuNWg1MTJoMTE1bC04NSAxMjhoLTIyMnEtMzAgMCAtNDkgMjIuNXQtMTQgNTIuNXE0IDIzIDIzIDM4dDQzIDE1aDI1M3EzMyAwIDUzIC0yOGw3MCAtMTA1CmwxMTQgMTE0cTE5IDE5IDQ2IDE5aDEwMXEyNiAwIDQ1IC0xOXQxOSAtNDV2LTEyOHEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTE3OWwxMTUgLTE3MnExMzEgNjMgMjc1IDM2cTE0MyAtMjYgMjQ0IC0xMzQuNXQxMTggLTI1My41ek00NDggMTI4cTExNSAwIDIwMyA3Mi41dDExMSAxODMuNWgtMzE0cS0zNSAwIC01NSAzMXEtMTggMzIgLTEgNjNsMTQ3IDI3N3EtNDcgMTMgLTkxIDEzcS0xMzIgMCAtMjI2IC05NHQtOTQgLTIyNnQ5NCAtMjI2CnQyMjYgLTk0ek0xODU2IDEyOHExMzIgMCAyMjYgOTR0OTQgMjI2dC05NCAyMjZ0LTIyNiA5NHEtNjAgMCAtMTIxIC0yNGwxNzQgLTI2MHExNSAtMjMgMTAgLTQ5dC0yNyAtNDBxLTE1IC0xMSAtMzYgLTExcS0zNSAwIC01MyAyOWwtMTc0IDI2MHEtOTMgLTk1IC05MyAtMjI1cTAgLTEzMiA5NCAtMjI2dDIyNiAtOTR6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9Il81MDgiIHVuaWNvZGU9IiYjeGYyMWQ7IiAKZD0iTTE0MDggMHEwIC02MyAtNjEuNSAtMTEzLjV0LTE2NCAtODF0LTIyNSAtNDZ0LTI1My41IC0xNS41dC0yNTMuNSAxNS41dC0yMjUgNDZ0LTE2NCA4MXQtNjEuNSAxMTMuNXEwIDQ5IDMzIDg4LjV0OTEgNjYuNXQxMTggNDQuNXQxMzEgMjkuNXEyNiA1IDQ4IC0xMC41dDI2IC00MS41cTUgLTI2IC0xMC41IC00OHQtNDEuNSAtMjZxLTU4IC0xMCAtMTA2IC0yMy41dC03Ni41IC0yNS41dC00OC41IC0yMy41dC0yNy41IC0xOS41dC04LjUgLTEyCnEzIC0xMSAyNyAtMjYuNXQ3MyAtMzN0MTE0IC0zMi41dDE2MC41IC0yNXQyMDEuNSAtMTB0MjAxLjUgMTB0MTYwLjUgMjV0MTE0IDMzdDczIDMzLjV0MjcgMjcuNXEtMSA0IC04LjUgMTF0LTI3LjUgMTl0LTQ4LjUgMjMuNXQtNzYuNSAyNXQtMTA2IDIzLjVxLTI2IDQgLTQxLjUgMjZ0LTEwLjUgNDhxNCAyNiAyNiA0MS41dDQ4IDEwLjVxNzEgLTEyIDEzMSAtMjkuNXQxMTggLTQ0LjV0OTEgLTY2LjV0MzMgLTg4LjV6TTEwMjQgODk2di0zODQKcTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtNjR2LTM4NHEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTI1NnEtMjYgMCAtNDUgMTl0LTE5IDQ1djM4NGgtNjRxLTI2IDAgLTQ1IDE5dC0xOSA0NXYzODRxMCA1MyAzNy41IDkwLjV0OTAuNSAzNy41aDM4NHE1MyAwIDkwLjUgLTM3LjV0MzcuNSAtOTAuNXpNOTI4IDEyODBxMCAtOTMgLTY1LjUgLTE1OC41dC0xNTguNSAtNjUuNXQtMTU4LjUgNjUuNXQtNjUuNSAxNTguNXQ2NS41IDE1OC41dDE1OC41IDY1LjUKdDE1OC41IC02NS41dDY1LjUgLTE1OC41eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNTA5IiB1bmljb2RlPSImI3hmMjFlOyIgaG9yaXotYWR2LXg9IjE3OTIiIApkPSJNMTI4MCA1MTJoMzA1cS01IC02IC0xMCAtMTAuNXQtOSAtNy41bC0zIC00bC02MjMgLTYwMHEtMTggLTE4IC00NCAtMTh0LTQ0IDE4bC02MjQgNjAycS01IDIgLTIxIDIwaDM2OXEyMiAwIDM5LjUgMTMuNXQyMi41IDM0LjVsNzAgMjgxbDE5MCAtNjY3cTYgLTIwIDIzIC0zM3QzOSAtMTNxMjEgMCAzOCAxM3QyMyAzM2wxNDYgNDg1bDU2IC0xMTJxMTggLTM1IDU3IC0zNXpNMTc5MiA5NDBxMCAtMTQ1IC0xMDMgLTMwMGgtMzY5bC0xMTEgMjIxCnEtOCAxNyAtMjUuNSAyN3QtMzYuNSA4cS00NSAtNSAtNTYgLTQ2bC0xMjkgLTQzMGwtMTk2IDY4NnEtNiAyMCAtMjMuNSAzM3QtMzkuNSAxM3QtMzkgLTEzLjV0LTIyIC0zNC41bC0xMTYgLTQ2NGgtNDIzcS0xMDMgMTU1IC0xMDMgMzAwcTAgMjIwIDEyNyAzNDR0MzUxIDEyNHE2MiAwIDEyNi41IC0yMS41dDEyMCAtNTh0OTUuNSAtNjguNXQ3NiAtNjhxMzYgMzYgNzYgNjh0OTUuNSA2OC41dDEyMCA1OHQxMjYuNSAyMS41cTIyNCAwIDM1MSAtMTI0CnQxMjcgLTM0NHoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idmVudXMiIHVuaWNvZGU9IiYjeGYyMjE7IiBob3Jpei1hZHYteD0iMTI4MCIgCmQ9Ik0xMTUyIDk2MHEwIC0yMjEgLTE0Ny41IC0zODQuNXQtMzY0LjUgLTE4Ny41di0yNjBoMjI0cTE0IDAgMjMgLTl0OSAtMjN2LTY0cTAgLTE0IC05IC0yM3QtMjMgLTloLTIyNHYtMjI0cTAgLTE0IC05IC0yM3QtMjMgLTloLTY0cS0xNCAwIC0yMyA5dC05IDIzdjIyNGgtMjI0cS0xNCAwIC0yMyA5dC05IDIzdjY0cTAgMTQgOSAyM3QyMyA5aDIyNHYyNjBxLTE1MCAxNiAtMjcxLjUgMTAzdC0xODYgMjI0dC01Mi41IDI5MgpxMTEgMTM0IDgwLjUgMjQ5dDE4MiAxODh0MjQ1LjUgODhxMTcwIDE5IDMxOSAtNTR0MjM2IC0yMTJ0ODcgLTMwNnpNMTI4IDk2MHEwIC0xODUgMTMxLjUgLTMxNi41dDMxNi41IC0xMzEuNXQzMTYuNSAxMzEuNXQxMzEuNSAzMTYuNXQtMTMxLjUgMzE2LjV0LTMxNi41IDEzMS41dC0zMTYuNSAtMTMxLjV0LTEzMS41IC0zMTYuNXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzUxMSIgdW5pY29kZT0iJiN4ZjIyMjsiIApkPSJNMTQ3MiAxNDA4cTI2IDAgNDUgLTE5dDE5IC00NXYtNDE2cTAgLTE0IC05IC0yM3QtMjMgLTloLTY0cS0xNCAwIC0yMyA5dC05IDIzdjI2MmwtMzgyIC0zODNxMTI2IC0xNTYgMTI2IC0zNTlxMCAtMTE3IC00NS41IC0yMjMuNXQtMTIzIC0xODR0LTE4NCAtMTIzdC0yMjMuNSAtNDUuNXQtMjIzLjUgNDUuNXQtMTg0IDEyM3QtMTIzIDE4NHQtNDUuNSAyMjMuNXQ0NS41IDIyMy41dDEyMyAxODR0MTg0IDEyM3QyMjMuNSA0NS41CnEyMDMgMCAzNTkgLTEyNmwzODIgMzgyaC0yNjFxLTE0IDAgLTIzIDl0LTkgMjN2NjRxMCAxNCA5IDIzdDIzIDloNDE2ek01NzYgMHExODUgMCAzMTYuNSAxMzEuNXQxMzEuNSAzMTYuNXQtMTMxLjUgMzE2LjV0LTMxNi41IDEzMS41dC0zMTYuNSAtMTMxLjV0LTEzMS41IC0zMTYuNXQxMzEuNSAtMzE2LjV0MzE2LjUgLTEzMS41eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNTEyIiB1bmljb2RlPSImI3hmMjIzOyIgaG9yaXotYWR2LXg9IjEyODAiIApkPSJNODMwIDEyMjBxMTQ1IC03MiAyMzMuNSAtMjEwLjV0ODguNSAtMzA1LjVxMCAtMjIxIC0xNDcuNSAtMzg0LjV0LTM2NC41IC0xODcuNXYtMTMyaDk2cTE0IDAgMjMgLTl0OSAtMjN2LTY0cTAgLTE0IC05IC0yM3QtMjMgLTloLTk2di05NnEwIC0xNCAtOSAtMjN0LTIzIC05aC02NHEtMTQgMCAtMjMgOXQtOSAyM3Y5NmgtOTZxLTE0IDAgLTIzIDl0LTkgMjN2NjRxMCAxNCA5IDIzdDIzIDloOTZ2MTMycS0yMTcgMjQgLTM2NC41IDE4Ny41CnQtMTQ3LjUgMzg0LjVxMCAxNjcgODguNSAzMDUuNXQyMzMuNSAyMTAuNXEtMTY1IDk2IC0yMjggMjczcS02IDE2IDMuNSAyOS41dDI2LjUgMTMuNWg2OXEyMSAwIDI5IC0yMHE0NCAtMTA2IDE0MCAtMTcxdDIxNCAtNjV0MjE0IDY1dDE0MCAxNzFxOCAyMCAzNyAyMGg2MXExNyAwIDI2LjUgLTEzLjV0My41IC0yOS41cS02MyAtMTc3IC0yMjggLTI3M3pNNTc2IDI1NnExODUgMCAzMTYuNSAxMzEuNXQxMzEuNSAzMTYuNXQtMTMxLjUgMzE2LjUKdC0zMTYuNSAxMzEuNXQtMzE2LjUgLTEzMS41dC0xMzEuNSAtMzE2LjV0MTMxLjUgLTMxNi41dDMxNi41IC0xMzEuNXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzUxMyIgdW5pY29kZT0iJiN4ZjIyNDsiIApkPSJNMTAyNCAxNTA0cTAgMTQgOSAyM3QyMyA5aDI4OHEyNiAwIDQ1IC0xOXQxOSAtNDV2LTI4OHEwIC0xNCAtOSAtMjN0LTIzIC05aC02NHEtMTQgMCAtMjMgOXQtOSAyM3YxMzRsLTI1NCAtMjU1cTEyNiAtMTU4IDEyNiAtMzU5cTAgLTIyMSAtMTQ3LjUgLTM4NC41dC0zNjQuNSAtMTg3LjV2LTEzMmg5NnExNCAwIDIzIC05dDkgLTIzdi02NHEwIC0xNCAtOSAtMjN0LTIzIC05aC05NnYtOTZxMCAtMTQgLTkgLTIzdC0yMyAtOWgtNjQKcS0xNCAwIC0yMyA5dC05IDIzdjk2aC05NnEtMTQgMCAtMjMgOXQtOSAyM3Y2NHEwIDE0IDkgMjN0MjMgOWg5NnYxMzJxLTE0OSAxNiAtMjcwLjUgMTAzdC0xODYuNSAyMjMuNXQtNTMgMjkxLjVxMTYgMjA0IDE2MCAzNTMuNXQzNDcgMTcyLjVxMTE4IDE0IDIyOCAtMTl0MTk4IC0xMDNsMjU1IDI1NGgtMTM0cS0xNCAwIC0yMyA5dC05IDIzdjY0ek01NzYgMjU2cTE4NSAwIDMxNi41IDEzMS41dDEzMS41IDMxNi41dC0xMzEuNSAzMTYuNQp0LTMxNi41IDEzMS41dC0zMTYuNSAtMTMxLjV0LTEzMS41IC0zMTYuNXQxMzEuNSAtMzE2LjV0MzE2LjUgLTEzMS41eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNTE0IiB1bmljb2RlPSImI3hmMjI1OyIgaG9yaXotYWR2LXg9IjE3OTIiIApkPSJNMTI4MCAxNTA0cTAgMTQgOSAyM3QyMyA5aDI4OHEyNiAwIDQ1IC0xOXQxOSAtNDV2LTI4OHEwIC0xNCAtOSAtMjN0LTIzIC05aC02NHEtMTQgMCAtMjMgOXQtOSAyM3YxMzRsLTI1NCAtMjU1cTEyNiAtMTU4IDEyNiAtMzU5cTAgLTIyMSAtMTQ3LjUgLTM4NC41dC0zNjQuNSAtMTg3LjV2LTEzMmg5NnExNCAwIDIzIC05dDkgLTIzdi02NHEwIC0xNCAtOSAtMjN0LTIzIC05aC05NnYtOTZxMCAtMTQgLTkgLTIzdC0yMyAtOWgtNjQKcS0xNCAwIC0yMyA5dC05IDIzdjk2aC05NnEtMTQgMCAtMjMgOXQtOSAyM3Y2NHEwIDE0IDkgMjN0MjMgOWg5NnYxMzJxLTIxNyAyNCAtMzY0LjUgMTg3LjV0LTE0Ny41IDM4NC41cTAgMjAxIDEyNiAzNTlsLTUyIDUzbC0xMDEgLTExMXEtOSAtMTAgLTIyIC0xMC41dC0yMyA3LjVsLTQ4IDQ0cS0xMCA4IC0xMC41IDIxLjV0OC41IDIzLjVsMTA1IDExNWwtMTExIDExMnYtMTM0cTAgLTE0IC05IC0yM3QtMjMgLTloLTY0cS0xNCAwIC0yMyA5CnQtOSAyM3YyODhxMCAyNiAxOSA0NXQ0NSAxOWgyODhxMTQgMCAyMyAtOXQ5IC0yM3YtNjRxMCAtMTQgLTkgLTIzdC0yMyAtOWgtMTMzbDEwNiAtMTA3bDg2IDk0cTkgMTAgMjIgMTAuNXQyMyAtNy41bDQ4IC00NHExMCAtOCAxMC41IC0yMS41dC04LjUgLTIzLjVsLTkwIC05OWw1NyAtNTZxMTU4IDEyNiAzNTkgMTI2dDM1OSAtMTI2bDI1NSAyNTRoLTEzNHEtMTQgMCAtMjMgOXQtOSAyM3Y2NHpNODMyIDI1NnExODUgMCAzMTYuNSAxMzEuNQp0MTMxLjUgMzE2LjV0LTEzMS41IDMxNi41dC0zMTYuNSAxMzEuNXQtMzE2LjUgLTEzMS41dC0xMzEuNSAtMzE2LjV0MTMxLjUgLTMxNi41dDMxNi41IC0xMzEuNXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzUxNSIgdW5pY29kZT0iJiN4ZjIyNjsiIGhvcml6LWFkdi14PSIxNzkyIiAKZD0iTTE3OTAgMTAwN3ExMiAtMTU1IC01Mi41IC0yOTJ0LTE4NiAtMjI0dC0yNzEuNSAtMTAzdi0yNjBoMjI0cTE0IDAgMjMgLTl0OSAtMjN2LTY0cTAgLTE0IC05IC0yM3QtMjMgLTloLTIyNHYtMjI0cTAgLTE0IC05IC0yM3QtMjMgLTloLTY0cS0xNCAwIC0yMyA5dC05IDIzdjIyNGgtNTEydi0yMjRxMCAtMTQgLTkgLTIzdC0yMyAtOWgtNjRxLTE0IDAgLTIzIDl0LTkgMjN2MjI0aC0yMjRxLTE0IDAgLTIzIDl0LTkgMjN2NjRxMCAxNCA5IDIzCnQyMyA5aDIyNHYyNjBxLTE1MCAxNiAtMjcxLjUgMTAzdC0xODYgMjI0dC01Mi41IDI5MnExNyAyMDYgMTY0LjUgMzU2LjV0MzUyLjUgMTY5LjVxMjA2IDIxIDM3NyAtOTRxMTcxIDExNSAzNzcgOTRxMjA1IC0xOSAzNTIuNSAtMTY5LjV0MTY0LjUgLTM1Ni41ek04OTYgNjQ3cTEyOCAxMzEgMTI4IDMxM3QtMTI4IDMxM3EtMTI4IC0xMzEgLTEyOCAtMzEzdDEyOCAtMzEzek01NzYgNTEycTExNSAwIDIxOCA1N3EtMTU0IDE2NSAtMTU0IDM5MQpxMCAyMjQgMTU0IDM5MXEtMTAzIDU3IC0yMTggNTdxLTE4NSAwIC0zMTYuNSAtMTMxLjV0LTEzMS41IC0zMTYuNXQxMzEuNSAtMzE2LjV0MzE2LjUgLTEzMS41ek0xMTUyIDEyOHYyNjBxLTEzNyAxNSAtMjU2IDk0cS0xMTkgLTc5IC0yNTYgLTk0di0yNjBoNTEyek0xMjE2IDUxMnExODUgMCAzMTYuNSAxMzEuNXQxMzEuNSAzMTYuNXQtMTMxLjUgMzE2LjV0LTMxNi41IDEzMS41cS0xMTUgMCAtMjE4IC01N3ExNTQgLTE2NyAxNTQgLTM5MQpxMCAtMjI2IC0xNTQgLTM5MXExMDMgLTU3IDIxOCAtNTd6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9Il81MTYiIHVuaWNvZGU9IiYjeGYyMjc7IiBob3Jpei1hZHYteD0iMTkyMCIgCmQ9Ik0xNTM2IDExMjBxMCAxNCA5IDIzdDIzIDloMjg4cTI2IDAgNDUgLTE5dDE5IC00NXYtMjg4cTAgLTE0IC05IC0yM3QtMjMgLTloLTY0cS0xNCAwIC0yMyA5dC05IDIzdjEzNGwtMjU0IC0yNTVxNzYgLTk1IDEwNy41IC0yMTR0OS41IC0yNDdxLTMxIC0xODIgLTE2NiAtMzEydC0zMTggLTE1NnEtMjEwIC0yOSAtMzg0LjUgODB0LTI0MS41IDMwMHEtMTE3IDYgLTIyMSA1Ny41dC0xNzcuNSAxMzN0LTExMy41IDE5Mi41dC0zMiAyMzAKcTkgMTM1IDc4IDI1MnQxODIgMTkxLjV0MjQ4IDg5LjVxMTE4IDE0IDIyNy41IC0xOXQxOTguNSAtMTAzbDI1NSAyNTRoLTEzNHEtMTQgMCAtMjMgOXQtOSAyM3Y2NHEwIDE0IDkgMjN0MjMgOWgyODhxMjYgMCA0NSAtMTl0MTkgLTQ1di0yODhxMCAtMTQgLTkgLTIzdC0yMyAtOWgtNjRxLTE0IDAgLTIzIDl0LTkgMjN2MTM0bC0yNTQgLTI1NXE1OSAtNzQgOTMgLTE2OXExODIgLTkgMzI4IC0xMjRsMjU1IDI1NGgtMTM0cS0xNCAwIC0yMyA5CnQtOSAyM3Y2NHpNMTAyNCA3MDRxMCAyMCAtNCA1OHEtMTYyIC0yNSAtMjcxIC0xNTB0LTEwOSAtMjkycTAgLTIwIDQgLTU4cTE2MiAyNSAyNzEgMTUwdDEwOSAyOTJ6TTEyOCA3MDRxMCAtMTY4IDExMSAtMjk0dDI3NiAtMTQ5cS0zIDI5IC0zIDU5cTAgMjEwIDEzNSAzNjkuNXQzMzggMTk2LjVxLTUzIDEyMCAtMTYzLjUgMTkzdC0yNDUuNSA3M3EtMTg1IDAgLTMxNi41IC0xMzEuNXQtMTMxLjUgLTMxNi41ek0xMDg4IC0xMjgKcTE4NSAwIDMxNi41IDEzMS41dDEzMS41IDMxNi41cTAgMTY4IC0xMTEgMjk0dC0yNzYgMTQ5cTMgLTI4IDMgLTU5cTAgLTIxMCAtMTM1IC0zNjkuNXQtMzM4IC0xOTYuNXE1MyAtMTIwIDE2My41IC0xOTN0MjQ1LjUgLTczeiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNTE3IiB1bmljb2RlPSImI3hmMjI4OyIgaG9yaXotYWR2LXg9IjIwNDgiIApkPSJNMTY2NCAxNTA0cTAgMTQgOSAyM3QyMyA5aDI4OHEyNiAwIDQ1IC0xOXQxOSAtNDV2LTI4OHEwIC0xNCAtOSAtMjN0LTIzIC05aC02NHEtMTQgMCAtMjMgOXQtOSAyM3YxMzRsLTI1NCAtMjU1cTc2IC05NSAxMDcuNSAtMjE0dDkuNSAtMjQ3cS0zMiAtMTgwIC0xNjQuNSAtMzEwdC0zMTMuNSAtMTU3cS0yMjMgLTM0IC00MDkgOTBxLTExNyAtNzggLTI1NiAtOTN2LTEzMmg5NnExNCAwIDIzIC05dDkgLTIzdi02NHEwIC0xNCAtOSAtMjMKdC0yMyAtOWgtOTZ2LTk2cTAgLTE0IC05IC0yM3QtMjMgLTloLTY0cS0xNCAwIC0yMyA5dC05IDIzdjk2aC05NnEtMTQgMCAtMjMgOXQtOSAyM3Y2NHEwIDE0IDkgMjN0MjMgOWg5NnYxMzJxLTE1NSAxNyAtMjc5LjUgMTA5LjV0LTE4NyAyMzcuNXQtMzkuNSAzMDdxMjUgMTg3IDE1OS41IDMyMi41dDMyMC41IDE2NC41cTIyNCAzNCA0MTAgLTkwcTE0NiA5NyAzMjAgOTdxMjAxIDAgMzU5IC0xMjZsMjU1IDI1NGgtMTM0cS0xNCAwIC0yMyA5CnQtOSAyM3Y2NHpNODk2IDM5MXExMjggMTMxIDEyOCAzMTN0LTEyOCAzMTNxLTEyOCAtMTMxIC0xMjggLTMxM3QxMjggLTMxM3pNMTI4IDcwNHEwIC0xODUgMTMxLjUgLTMxNi41dDMxNi41IC0xMzEuNXExMTcgMCAyMTggNTdxLTE1NCAxNjcgLTE1NCAzOTF0MTU0IDM5MXEtMTAxIDU3IC0yMTggNTdxLTE4NSAwIC0zMTYuNSAtMTMxLjV0LTEzMS41IC0zMTYuNXpNMTIxNiAyNTZxMTg1IDAgMzE2LjUgMTMxLjV0MTMxLjUgMzE2LjUKdC0xMzEuNSAzMTYuNXQtMzE2LjUgMTMxLjVxLTExNyAwIC0yMTggLTU3cTE1NCAtMTY3IDE1NCAtMzkxdC0xNTQgLTM5MXExMDEgLTU3IDIxOCAtNTd6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9Il81MTgiIHVuaWNvZGU9IiYjeGYyMjk7IiAKZD0iTTE0NzIgMTQwOHEyNiAwIDQ1IC0xOXQxOSAtNDV2LTQxNnEwIC0xNCAtOSAtMjN0LTIzIC05aC02NHEtMTQgMCAtMjMgOXQtOSAyM3YyNjJsLTIxMyAtMjE0bDE0MCAtMTQwcTkgLTEwIDkgLTIzdC05IC0yMmwtNDYgLTQ2cS05IC05IC0yMiAtOXQtMjMgOWwtMTQwIDE0MWwtNzggLTc5cTEyNiAtMTU2IDEyNiAtMzU5cTAgLTExNyAtNDUuNSAtMjIzLjV0LTEyMyAtMTg0dC0xODQgLTEyM3QtMjIzLjUgLTQ1LjV0LTIyMy41IDQ1LjUKdC0xODQgMTIzdC0xMjMgMTg0dC00NS41IDIyMy41dDQ1LjUgMjIzLjV0MTIzIDE4NHQxODQgMTIzdDIyMy41IDQ1LjVxMjAzIDAgMzU5IC0xMjZsNzggNzhsLTE3MiAxNzJxLTkgMTAgLTkgMjN0OSAyMmw0NiA0NnE5IDkgMjIgOXQyMyAtOWwxNzIgLTE3MmwyMTMgMjEzaC0yNjFxLTE0IDAgLTIzIDl0LTkgMjN2NjRxMCAxNCA5IDIzdDIzIDloNDE2ek01NzYgMHExODUgMCAzMTYuNSAxMzEuNXQxMzEuNSAzMTYuNXQtMTMxLjUgMzE2LjUKdC0zMTYuNSAxMzEuNXQtMzE2LjUgLTEzMS41dC0xMzEuNSAtMzE2LjV0MTMxLjUgLTMxNi41dDMxNi41IC0xMzEuNXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzUxOSIgdW5pY29kZT0iJiN4ZjIyYTsiIGhvcml6LWFkdi14PSIxMjgwIiAKZD0iTTY0MCA4OTJxMjE3IC0yNCAzNjQuNSAtMTg3LjV0MTQ3LjUgLTM4NC41cTAgLTE2NyAtODcgLTMwNnQtMjM2IC0yMTJ0LTMxOSAtNTRxLTEzMyAxNSAtMjQ1LjUgODh0LTE4MiAxODh0LTgwLjUgMjQ5cS0xMiAxNTUgNTIuNSAyOTJ0MTg2IDIyNHQyNzEuNSAxMDN2MTMyaC0xNjBxLTE0IDAgLTIzIDl0LTkgMjN2NjRxMCAxNCA5IDIzdDIzIDloMTYwdjE2NWwtOTIgLTkycS0xMCAtOSAtMjMgLTl0LTIyIDlsLTQ2IDQ2cS05IDkgLTkgMjIKdDkgMjNsMjAyIDIwMXExOSAxOSA0NSAxOXQ0NSAtMTlsMjAyIC0yMDFxOSAtMTAgOSAtMjN0LTkgLTIybC00NiAtNDZxLTkgLTkgLTIyIC05dC0yMyA5bC05MiA5MnYtMTY1aDE2MHExNCAwIDIzIC05dDkgLTIzdi02NHEwIC0xNCAtOSAtMjN0LTIzIC05aC0xNjB2LTEzMnpNNTc2IC0xMjhxMTg1IDAgMzE2LjUgMTMxLjV0MTMxLjUgMzE2LjV0LTEzMS41IDMxNi41dC0zMTYuNSAxMzEuNXQtMzE2LjUgLTEzMS41dC0xMzEuNSAtMzE2LjUKdDEzMS41IC0zMTYuNXQzMTYuNSAtMTMxLjV6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9Il81MjAiIHVuaWNvZGU9IiYjeGYyMmI7IiBob3Jpei1hZHYteD0iMjA0OCIgCmQ9Ik0xOTAxIDYyMXExOSAtMTkgMTkgLTQ1dC0xOSAtNDVsLTI5NCAtMjk0cS05IC0xMCAtMjIuNSAtMTB0LTIyLjUgMTBsLTQ1IDQ1cS0xMCA5IC0xMCAyMi41dDEwIDIyLjVsMTg1IDE4NWgtMjk0di0yMjRxMCAtMTQgLTkgLTIzdC0yMyAtOWgtNjRxLTE0IDAgLTIzIDl0LTkgMjN2MjI0aC0xMzJxLTI0IC0yMTcgLTE4Ny41IC0zNjQuNXQtMzg0LjUgLTE0Ny41cS0xNjcgMCAtMzA2IDg3dC0yMTIgMjM2dC01NCAzMTlxMTUgMTMzIDg4IDI0NS41CnQxODggMTgydDI0OSA4MC41cTE1NSAxMiAyOTIgLTUyLjV0MjI0IC0xODZ0MTAzIC0yNzEuNWgxMzJ2MjI0cTAgMTQgOSAyM3QyMyA5aDY0cTE0IDAgMjMgLTl0OSAtMjN2LTIyNGgyOTRsLTE4NSAxODVxLTEwIDkgLTEwIDIyLjV0MTAgMjIuNWw0NSA0NXE5IDEwIDIyLjUgMTB0MjIuNSAtMTB6TTU3NiAxMjhxMTg1IDAgMzE2LjUgMTMxLjV0MTMxLjUgMzE2LjV0LTEzMS41IDMxNi41dC0zMTYuNSAxMzEuNXQtMzE2LjUgLTEzMS41CnQtMTMxLjUgLTMxNi41dDEzMS41IC0zMTYuNXQzMTYuNSAtMTMxLjV6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9Il81MjEiIHVuaWNvZGU9IiYjeGYyMmM7IiBob3Jpei1hZHYteD0iMTI4MCIgCmQ9Ik0xMTUyIDk2MHEwIC0yMjEgLTE0Ny41IC0zODQuNXQtMzY0LjUgLTE4Ny41di02MTJxMCAtMTQgLTkgLTIzdC0yMyAtOWgtNjRxLTE0IDAgLTIzIDl0LTkgMjN2NjEycS0yMTcgMjQgLTM2NC41IDE4Ny41dC0xNDcuNSAzODQuNXEwIDExNyA0NS41IDIyMy41dDEyMyAxODR0MTg0IDEyM3QyMjMuNSA0NS41dDIyMy41IC00NS41dDE4NCAtMTIzdDEyMyAtMTg0dDQ1LjUgLTIyMy41ek01NzYgNTEycTE4NSAwIDMxNi41IDEzMS41CnQxMzEuNSAzMTYuNXQtMTMxLjUgMzE2LjV0LTMxNi41IDEzMS41dC0zMTYuNSAtMTMxLjV0LTEzMS41IC0zMTYuNXQxMzEuNSAtMzE2LjV0MzE2LjUgLTEzMS41eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNTIyIiB1bmljb2RlPSImI3hmMjJkOyIgaG9yaXotYWR2LXg9IjEyODAiIApkPSJNMTAyNCA1NzZxMCAxODUgLTEzMS41IDMxNi41dC0zMTYuNSAxMzEuNXQtMzE2LjUgLTEzMS41dC0xMzEuNSAtMzE2LjV0MTMxLjUgLTMxNi41dDMxNi41IC0xMzEuNXQzMTYuNSAxMzEuNXQxMzEuNSAzMTYuNXpNMTE1MiA1NzZxMCAtMTE3IC00NS41IC0yMjMuNXQtMTIzIC0xODR0LTE4NCAtMTIzdC0yMjMuNSAtNDUuNXQtMjIzLjUgNDUuNXQtMTg0IDEyM3QtMTIzIDE4NHQtNDUuNSAyMjMuNXQ0NS41IDIyMy41dDEyMyAxODR0MTg0IDEyMwp0MjIzLjUgNDUuNXQyMjMuNSAtNDUuNXQxODQgLTEyM3QxMjMgLTE4NHQ0NS41IC0yMjMuNXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzUyMyIgdW5pY29kZT0iJiN4ZjIyZTsiIGhvcml6LWFkdi14PSIxNzkyIiAKIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzUyNCIgdW5pY29kZT0iJiN4ZjIyZjsiIGhvcml6LWFkdi14PSIxNzkyIiAKIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzUyNSIgdW5pY29kZT0iJiN4ZjIzMDsiIApkPSJNMTQ1MSAxNDA4cTM1IDAgNjAgLTI1dDI1IC02MHYtMTM2NnEwIC0zNSAtMjUgLTYwdC02MCAtMjVoLTM5MXY1OTVoMTk5bDMwIDIzMmgtMjI5djE0OHEwIDU2IDIzLjUgODR0OTEuNSAyOGwxMjIgMXYyMDdxLTYzIDkgLTE3OCA5cS0xMzYgMCAtMjE3LjUgLTgwdC04MS41IC0yMjZ2LTE3MWgtMjAwdi0yMzJoMjAwdi01OTVoLTczNXEtMzUgMCAtNjAgMjV0LTI1IDYwdjEzNjZxMCAzNSAyNSA2MHQ2MCAyNWgxMzY2eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNTI2IiB1bmljb2RlPSImI3hmMjMxOyIgaG9yaXotYWR2LXg9IjEyODAiIApkPSJNMCA5MzlxMCAxMDggMzcuNSAyMDMuNXQxMDMuNSAxNjYuNXQxNTIgMTIzdDE4NSA3OHQyMDIgMjZxMTU4IDAgMjk0IC02Ni41dDIyMSAtMTkzLjV0ODUgLTI4N3EwIC05NiAtMTkgLTE4OHQtNjAgLTE3N3QtMTAwIC0xNDkuNXQtMTQ1IC0xMDN0LTE4OSAtMzguNXEtNjggMCAtMTM1IDMydC05NiA4OHEtMTAgLTM5IC0yOCAtMTEyLjV0LTIzLjUgLTk1dC0yMC41IC03MXQtMjYgLTcxdC0zMiAtNjIuNXQtNDYgLTc3LjV0LTYyIC04Ni41CmwtMTQgLTVsLTkgMTBxLTE1IDE1NyAtMTUgMTg4cTAgOTIgMjEuNSAyMDYuNXQ2Ni41IDI4Ny41dDUyIDIwM3EtMzIgNjUgLTMyIDE2OXEwIDgzIDUyIDE1NnQxMzIgNzNxNjEgMCA5NSAtNDAuNXQzNCAtMTAyLjVxMCAtNjYgLTQ0IC0xOTF0LTQ0IC0xODdxMCAtNjMgNDUgLTEwNC41dDEwOSAtNDEuNXE1NSAwIDEwMiAyNXQ3OC41IDY4dDU2IDk1dDM4IDExMC41dDIwIDExMXQ2LjUgOTkuNXEwIDE3MyAtMTA5LjUgMjY5LjV0LTI4NS41IDk2LjUKcS0yMDAgMCAtMzM0IC0xMjkuNXQtMTM0IC0zMjguNXEwIC00NCAxMi41IC04NXQyNyAtNjV0MjcgLTQ1LjV0MTIuNSAtMzAuNXEwIC0yOCAtMTUgLTczdC0zNyAtNDVxLTIgMCAtMTcgM3EtNTEgMTUgLTkwLjUgNTZ0LTYxIDk0LjV0LTMyLjUgMTA4dC0xMSAxMDYuNXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzUyNyIgdW5pY29kZT0iJiN4ZjIzMjsiIApkPSJNOTg1IDU2MnExMyAwIDk3LjUgLTQ0dDg5LjUgLTUzcTIgLTUgMiAtMTVxMCAtMzMgLTE3IC03NnEtMTYgLTM5IC03MSAtNjUuNXQtMTAyIC0yNi41cS01NyAwIC0xOTAgNjJxLTk4IDQ1IC0xNzAgMTE4dC0xNDggMTg1cS03MiAxMDcgLTcxIDE5NHY4cTMgOTEgNzQgMTU4cTI0IDIyIDUyIDIycTYgMCAxOCAtMS41dDE5IC0xLjVxMTkgMCAyNi41IC02LjV0MTUuNSAtMjcuNXE4IC0yMCAzMyAtODh0MjUgLTc1cTAgLTIxIC0zNC41IC01Ny41CnQtMzQuNSAtNDYuNXEwIC03IDUgLTE1cTM0IC03MyAxMDIgLTEzN3E1NiAtNTMgMTUxIC0xMDFxMTIgLTcgMjIgLTdxMTUgMCA1NCA0OC41dDUyIDQ4LjV6TTc4MiAzMnExMjcgMCAyNDMuNSA1MHQyMDAuNSAxMzR0MTM0IDIwMC41dDUwIDI0My41dC01MCAyNDMuNXQtMTM0IDIwMC41dC0yMDAuNSAxMzR0LTI0My41IDUwdC0yNDMuNSAtNTB0LTIwMC41IC0xMzR0LTEzNCAtMjAwLjV0LTUwIC0yNDMuNXEwIC0yMDMgMTIwIC0zNjhsLTc5IC0yMzMKbDI0MiA3N3ExNTggLTEwNCAzNDUgLTEwNHpNNzgyIDE0MTRxMTUzIDAgMjkyLjUgLTYwdDI0MC41IC0xNjF0MTYxIC0yNDAuNXQ2MCAtMjkyLjV0LTYwIC0yOTIuNXQtMTYxIC0yNDAuNXQtMjQwLjUgLTE2MXQtMjkyLjUgLTYwcS0xOTUgMCAtMzY1IDk0bC00MTcgLTEzNGwxMzYgNDA1cS0xMDggMTc4IC0xMDggMzg5cTAgMTUzIDYwIDI5Mi41dDE2MSAyNDAuNXQyNDAuNSAxNjF0MjkyLjUgNjB6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9Il81MjgiIHVuaWNvZGU9IiYjeGYyMzM7IiBob3Jpei1hZHYteD0iMTc5MiIgCmQ9Ik0xMjggMTI4aDEwMjR2MTI4aC0xMDI0di0xMjh6TTEyOCA2NDBoMTAyNHYxMjhoLTEwMjR2LTEyOHpNMTY5NiAxOTJxMCA0MCAtMjggNjh0LTY4IDI4dC02OCAtMjh0LTI4IC02OHQyOCAtNjh0NjggLTI4dDY4IDI4dDI4IDY4ek0xMjggMTE1MmgxMDI0djEyOGgtMTAyNHYtMTI4ek0xNjk2IDcwNHEwIDQwIC0yOCA2OHQtNjggMjh0LTY4IC0yOHQtMjggLTY4dDI4IC02OHQ2OCAtMjh0NjggMjh0MjggNjh6TTE2OTYgMTIxNgpxMCA0MCAtMjggNjh0LTY4IDI4dC02OCAtMjh0LTI4IC02OHQyOCAtNjh0NjggLTI4dDY4IDI4dDI4IDY4ek0xNzkyIDM4NHYtMzg0aC0xNzkydjM4NGgxNzkyek0xNzkyIDg5NnYtMzg0aC0xNzkydjM4NGgxNzkyek0xNzkyIDE0MDh2LTM4NGgtMTc5MnYzODRoMTc5MnoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzUyOSIgdW5pY29kZT0iJiN4ZjIzNDsiIGhvcml6LWFkdi14PSIyMDQ4IiAKZD0iTTcwNCA2NDBxLTE1OSAwIC0yNzEuNSAxMTIuNXQtMTEyLjUgMjcxLjV0MTEyLjUgMjcxLjV0MjcxLjUgMTEyLjV0MjcxLjUgLTExMi41dDExMi41IC0yNzEuNXQtMTEyLjUgLTI3MS41dC0yNzEuNSAtMTEyLjV6TTE2NjQgNTEyaDM1MnExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV2LTE5MnEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVoLTM1MnYtMzUycTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtMTkycS0xMyAwIC0yMi41IDkuNQp0LTkuNSAyMi41djM1MmgtMzUycS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2MTkycTAgMTMgOS41IDIyLjV0MjIuNSA5LjVoMzUydjM1MnEwIDEzIDkuNSAyMi41dDIyLjUgOS41aDE5MnExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV2LTM1MnpNOTI4IDI4OHEwIC01MiAzOCAtOTB0OTAgLTM4aDI1NnYtMjM4cS02OCAtNTAgLTE3MSAtNTBoLTg3NHEtMTIxIDAgLTE5NCA2OXQtNzMgMTkwcTAgNTMgMy41IDEwMy41dDE0IDEwOXQyNi41IDEwOC41CnQ0MyA5Ny41dDYyIDgxdDg1LjUgNTMuNXQxMTEuNSAyMHExOSAwIDM5IC0xN3E3OSAtNjEgMTU0LjUgLTkxLjV0MTY0LjUgLTMwLjV0MTY0LjUgMzAuNXQxNTQuNSA5MS41cTIwIDE3IDM5IDE3cTEzMiAwIDIxNyAtOTZoLTIyM3EtNTIgMCAtOTAgLTM4dC0zOCAtOTB2LTE5MnoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzUzMCIgdW5pY29kZT0iJiN4ZjIzNTsiIGhvcml6LWFkdi14PSIyMDQ4IiAKZD0iTTcwNCA2NDBxLTE1OSAwIC0yNzEuNSAxMTIuNXQtMTEyLjUgMjcxLjV0MTEyLjUgMjcxLjV0MjcxLjUgMTEyLjV0MjcxLjUgLTExMi41dDExMi41IC0yNzEuNXQtMTEyLjUgLTI3MS41dC0yNzEuNSAtMTEyLjV6TTE3ODEgMzIwbDI0OSAtMjQ5cTkgLTkgOSAtMjNxMCAtMTMgLTkgLTIybC0xMzYgLTEzNnEtOSAtOSAtMjIgLTlxLTE0IDAgLTIzIDlsLTI0OSAyNDlsLTI0OSAtMjQ5cS05IC05IC0yMyAtOXEtMTMgMCAtMjIgOWwtMTM2IDEzNgpxLTkgOSAtOSAyMnEwIDE0IDkgMjNsMjQ5IDI0OWwtMjQ5IDI0OXEtOSA5IC05IDIzcTAgMTMgOSAyMmwxMzYgMTM2cTkgOSAyMiA5cTE0IDAgMjMgLTlsMjQ5IC0yNDlsMjQ5IDI0OXE5IDkgMjMgOXExMyAwIDIyIC05bDEzNiAtMTM2cTkgLTkgOSAtMjJxMCAtMTQgLTkgLTIzek0xMjgzIDMyMGwtMTgxIC0xODFxLTM3IC0zNyAtMzcgLTkxcTAgLTUzIDM3IC05MGw4MyAtODNxLTIxIC0zIC00NCAtM2gtODc0cS0xMjEgMCAtMTk0IDY5CnQtNzMgMTkwcTAgNTMgMy41IDEwMy41dDE0IDEwOXQyNi41IDEwOC41dDQzIDk3LjV0NjIgODF0ODUuNSA1My41dDExMS41IDIwcTE5IDAgMzkgLTE3cTE1NCAtMTIyIDMxOSAtMTIydDMxOSAxMjJxMjAgMTcgMzkgMTdxMjggMCA1NyAtNnEtMjggLTI3IC00MSAtNTB0LTEzIC01NnEwIC01NCAzNyAtOTF6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9Il81MzEiIHVuaWNvZGU9IiYjeGYyMzY7IiBob3Jpei1hZHYteD0iMjA0OCIgCmQ9Ik0yNTYgNTEyaDE3MjhxMjYgMCA0NSAtMTl0MTkgLTQ1di00NDhoLTI1NnYyNTZoLTE1MzZ2LTI1NmgtMjU2djEyMTZxMCAyNiAxOSA0NXQ0NSAxOWgxMjhxMjYgMCA0NSAtMTl0MTkgLTQ1di03MDR6TTgzMiA4MzJxMCAxMDYgLTc1IDE4MXQtMTgxIDc1dC0xODEgLTc1dC03NSAtMTgxdDc1IC0xODF0MTgxIC03NXQxODEgNzV0NzUgMTgxek0yMDQ4IDU3NnY2NHEwIDE1OSAtMTEyLjUgMjcxLjV0LTI3MS41IDExMi41aC03MDQKcS0yNiAwIC00NSAtMTl0LTE5IC00NXYtMzg0aDExNTJ6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9Il81MzIiIHVuaWNvZGU9IiYjeGYyMzc7IiAKZD0iTTE1MzYgMTUzNmwtMTkyIC00NDhoMTkydi0xOTJoLTI3NGwtNTUgLTEyOGgzMjl2LTE5MmgtNDExbC0zNTcgLTgzMmwtMzU3IDgzMmgtNDExdjE5MmgzMjlsLTU1IDEyOGgtMjc0djE5MmgxOTJsLTE5MiA0NDhoMjU2bDMyMyAtNzY4aDM3OGwzMjMgNzY4aDI1NnpNNzY4IDMyMGwxMDggMjU2aC0yMTZ6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9Il81MzMiIHVuaWNvZGU9IiYjeGYyMzg7IiAKZD0iTTEwODggMTUzNnExODUgMCAzMTYuNSAtOTMuNXQxMzEuNSAtMjI2LjV2LTg5NnEwIC0xMzAgLTEyNS41IC0yMjJ0LTMwNS41IC05N2wyMTMgLTIwMnExNiAtMTUgOCAtMzV0LTMwIC0yMGgtMTA1NnEtMjIgMCAtMzAgMjB0OCAzNWwyMTMgMjAycS0xODAgNSAtMzA1LjUgOTd0LTEyNS41IDIyMnY4OTZxMCAxMzMgMTMxLjUgMjI2LjV0MzE2LjUgOTMuNWg2NDB6TTc2OCAxOTJxODAgMCAxMzYgNTZ0NTYgMTM2dC01NiAxMzZ0LTEzNiA1Ngp0LTEzNiAtNTZ0LTU2IC0xMzZ0NTYgLTEzNnQxMzYgLTU2ek0xMzQ0IDc2OHY1MTJoLTExNTJ2LTUxMmgxMTUyeiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNTM0IiB1bmljb2RlPSImI3hmMjM5OyIgCmQ9Ik0xMDg4IDE1MzZxMTg1IDAgMzE2LjUgLTkzLjV0MTMxLjUgLTIyNi41di04OTZxMCAtMTMwIC0xMjUuNSAtMjIydC0zMDUuNSAtOTdsMjEzIC0yMDJxMTYgLTE1IDggLTM1dC0zMCAtMjBoLTEwNTZxLTIyIDAgLTMwIDIwdDggMzVsMjEzIDIwMnEtMTgwIDUgLTMwNS41IDk3dC0xMjUuNSAyMjJ2ODk2cTAgMTMzIDEzMS41IDIyNi41dDMxNi41IDkzLjVoNjQwek0yODggMjI0cTY2IDAgMTEzIDQ3dDQ3IDExM3QtNDcgMTEzdC0xMTMgNDcKdC0xMTMgLTQ3dC00NyAtMTEzdDQ3IC0xMTN0MTEzIC00N3pNNzA0IDc2OHY1MTJoLTU0NHYtNTEyaDU0NHpNMTI0OCAyMjRxNjYgMCAxMTMgNDd0NDcgMTEzdC00NyAxMTN0LTExMyA0N3QtMTEzIC00N3QtNDcgLTExM3Q0NyAtMTEzdDExMyAtNDd6TTE0MDggNzY4djUxMmgtNTc2di01MTJoNTc2eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNTM1IiB1bmljb2RlPSImI3hmMjNhOyIgaG9yaXotYWR2LXg9IjE3OTIiIApkPSJNNTk3IDExMTV2LTExNzNxMCAtMjUgLTEyLjUgLTQyLjV0LTM2LjUgLTE3LjVxLTE3IDAgLTMzIDhsLTQ2NSAyMzNxLTIxIDEwIC0zNS41IDMzLjV0LTE0LjUgNDYuNXYxMTQwcTAgMjAgMTAgMzR0MjkgMTRxMTQgMCA0NCAtMTVsNTExIC0yNTZxMyAtMyAzIC01ek02NjEgMTAxNGw1MzQgLTg2NmwtNTM0IDI2NnY2MDB6TTE3OTIgOTk2di0xMDU0cTAgLTI1IC0xNCAtNDAuNXQtMzggLTE1LjV0LTQ3IDEzbC00NDEgMjIwek0xNzg5IDExMTYKcTAgLTMgLTI1Ni41IC00MTkuNXQtMzAwLjUgLTQ4Ny41bC0zOTAgNjM0bDMyNCA1MjdxMTcgMjggNTIgMjhxMTQgMCAyNiAtNmw1NDEgLTI3MHE0IC0yIDQgLTZ6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9Il81MzYiIHVuaWNvZGU9IiYjeGYyM2I7IiAKZD0iTTgwOSA1MzJsMjY2IDQ5OWgtMTEybC0xNTcgLTMxMnEtMjQgLTQ4IC00NCAtOTJsLTQyIDkybC0xNTUgMzEyaC0xMjBsMjYzIC00OTN2LTMyNGgxMDF2MzE4ek0xNTM2IDE0MDh2LTE1MzZoLTE1MzZ2MTUzNmgxNTM2eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNTM3IiB1bmljb2RlPSImI3hmMjNjOyIgaG9yaXotYWR2LXg9IjIyOTYiIApkPSJNNDc4IC0xMzlxLTggLTE2IC0yNyAtMzQuNXQtMzcgLTI1LjVxLTI1IC05IC01MS41IDMuNXQtMjguNSAzMS41cS0xIDIyIDQwIDU1dDY4IDM4cTIzIDQgMzQgLTIxLjV0MiAtNDYuNXpNMTgxOSAtMTM5cTcgLTE2IDI2IC0zNC41dDM4IC0yNS41cTI1IC05IDUxLjUgMy41dDI3LjUgMzEuNXEyIDIyIC0zOS41IDU1dC02OC41IDM4cS0yMiA0IC0zMyAtMjEuNXQtMiAtNDYuNXpNMTg2NyAtMzBxMTMgLTI3IDU2LjUgLTU5LjV0NzcuNSAtNDEuNQpxNDUgLTEzIDgyIDQuNXQzNyA1MC41cTAgNDYgLTY3LjUgMTAwLjV0LTExNS41IDU5LjVxLTQwIDUgLTYzLjUgLTM3LjV0LTYuNSAtNzYuNXpNNDI4IC0zMHEtMTMgLTI3IC01NiAtNTkuNXQtNzcgLTQxLjVxLTQ1IC0xMyAtODIgNC41dC0zNyA1MC41cTAgNDYgNjcuNSAxMDAuNXQxMTUuNSA1OS41cTQwIDUgNjMgLTM3LjV0NiAtNzYuNXpNMTE1OCAxMDk0aDFxLTQxIDAgLTc2IC0xNXEyNyAtOCA0NCAtMzAuNXQxNyAtNDkuNQpxMCAtMzUgLTI3IC02MHQtNjUgLTI1cS01MiAwIC04MCA0M3EtNSAtMjMgLTUgLTQycTAgLTc0IDU2IC0xMjYuNXQxMzUgLTUyLjVxODAgMCAxMzYgNTIuNXQ1NiAxMjYuNXQtNTYgMTI2LjV0LTEzNiA1Mi41ek0xNDYyIDEzMTJxLTk5IDEwOSAtMjIwLjUgMTMxLjV0LTI0NS41IC00NC41cTI3IDYwIDgyLjUgOTYuNXQxMTggMzkuNXQxMjEuNSAtMTd0OTkuNSAtNzQuNXQ0NC41IC0xMzEuNXpNMjIxMiA3M3E4IC0xMSAtMTEgLTQyCnE3IC0yMyA3IC00MHExIC01NiAtNDQuNSAtMTEyLjV0LTEwOS41IC05MS41dC0xMTggLTM3cS00OCAtMiAtOTIgMjEuNXQtNjYgNjUuNXEtNjg3IC0yNSAtMTI1OSAwcS0yMyAtNDEgLTY2LjUgLTY1dC05Mi41IC0yMnEtODYgMyAtMTc5LjUgODAuNXQtOTIuNSAxNjAuNXEyIDIyIDcgNDBxLTE5IDMxIC0xMSA0MnE2IDEwIDMxIDFxMTQgMjIgNDEgNTFxLTcgMjkgMiAzOHExMSAxMCAzOSAtNHEyOSAyMCA1OSAzNHEwIDI5IDEzIDM3CnEyMyAxMiA1MSAtMTZxMzUgNSA2MSAtMnExOCAtNCAzOCAtMTl2NzNxLTExIDAgLTE4IDJxLTUzIDEwIC05NyA0NC41dC01NSA4Ny41cS05IDM4IDAgODFxMTUgNjIgOTMgOTVxMiAxNyAxOSAzNS41dDM2IDIzLjV0MzMgLTcuNXQxOSAtMzAuNWgxM3E0NiAtNSA2MCAtMjNxMyAtMyA1IC03cTEwIDEgMzAuNSAzLjV0MzAuNSAzLjVxLTE1IDExIC0zMCAxN3EtMjMgNDAgLTkxIDQzcTAgNiAxIDEwcS02MiAyIC0xMTguNSAxOC41dC04NC41IDQ3LjUKcS0zMiAzNiAtNDIuNSA5MnQtMi41IDExMnExNiAxMjYgOTAgMTc5cTIzIDE2IDUyIDQuNXQzMiAtNDAuNXEwIC0xIDEuNSAtMTR0Mi41IC0yMXQzIC0yMHQ1LjUgLTE5dDguNSAtMTBxMjcgLTE0IDc2IC0xMnE0OCA0NiA5OCA3NHEtNDAgNCAtMTYyIC0xNGw0NyA0NnE2MSA1OCAxNjMgMTExcTE0NSA3MyAyODIgODZxLTIwIDggLTQxIDE1LjV0LTQ3IDE0dC00Mi41IDEwLjV0LTQ3LjUgMTF0LTQzIDEwcTU5NSAxMjYgOTA0IC0xMzkKcTk4IC04NCAxNTggLTIyMnE4NSAtMTAgMTIxIDloMXE1IDMgOC41IDEwdDUuNSAxOXQzIDE5LjV0MyAyMS41bDEgMTRxMyAyOCAzMiA0MHQ1MiAtNXE3MyAtNTIgOTEgLTE3OHE3IC01NyAtMy41IC0xMTN0LTQyLjUgLTkxcS0yOCAtMzIgLTgzLjUgLTQ4LjV0LTExNS41IC0xOC41di0xMHEtNzEgLTIgLTk1IC00M3EtMTQgLTUgLTMxIC0xN3ExMSAtMSAzMiAtMy41dDMwIC0zLjVxMSA1IDUgOHExNiAxOCA2MCAyM2gxM3E1IDE4IDE5IDMwdDMzIDgKdDM2IC0yM3QxOSAtMzZxNzkgLTMyIDkzIC05NXE5IC00MCAxIC04MXEtMTIgLTUzIC01NiAtODh0LTk3IC00NHEtMTAgLTIgLTE3IC0ycTAgLTQ5IC0xIC03M3EyMCAxNSAzOCAxOXEyNiA3IDYxIDJxMjggMjggNTEgMTZxMTQgLTkgMTQgLTM3cTMzIC0xNiA1OSAtMzRxMjcgMTMgMzggNHExMCAtMTAgMiAtMzhxMjggLTMwIDQxIC01MXEyMyA4IDMxIC0xek0xOTM3IDEwMjVxMCAtMjkgLTkgLTU0cTgyIC0zMiAxMTIgLTEzMgpxNCAzNyAtOS41IDk4LjV0LTQxLjUgOTAuNXEtMjAgMTkgLTM2IDE3dC0xNiAtMjB6TTE4NTkgOTI1cTM1IC00MiA0Ny41IC0xMDguNXQtMC41IC0xMjQuNXE2NyAxMyA5NyA0NXExMyAxNCAxOCAyOHEtMyA2NCAtMzEgMTE0LjV0LTc5IDY2LjVxLTE1IC0xNSAtNTIgLTIxek0xODIyIDkyMXEtMzAgMCAtNDQgMXE0MiAtMTE1IDUzIC0yMzlxMjEgMCA0MyAzcTE2IDY4IDEgMTM1dC01MyAxMDB6TTI1OCA4MzlxMzAgMTAwIDExMiAxMzIKcS05IDI1IC05IDU0cTAgMTggLTE2LjUgMjB0LTM1LjUgLTE3cS0yOCAtMjkgLTQxLjUgLTkwLjV0LTkuNSAtOTguNXpNMjk0IDczN3EyOSAtMzEgOTcgLTQ1cS0xMyA1OCAtMC41IDEyNC41dDQ3LjUgMTA4LjV2MHEtMzcgNiAtNTIgMjFxLTUxIC0xNiAtNzguNSAtNjZ0LTMxLjUgLTExNXE5IC0xNyAxOCAtMjh6TTQ3MSA2ODNxMTQgMTI0IDczIDIzNXEtMTkgLTQgLTU1IC0xOGwtNDUgLTE5djFxLTQ2IC04OSAtMjAgLTE5NnEyNSAtMyA0NyAtM3oKTTE0MzQgNjQ0cTggLTM4IDE2LjUgLTEwOC41dDExLjUgLTg5LjVxMyAtMTggOS41IC0yMS41dDIzLjUgNC41cTQwIDIwIDYyIDg1LjV0MjMgMTI1LjVxLTI0IDIgLTE0NiA0ek0xMTUyIDEyODVxLTExNiAwIC0xOTkgLTgyLjV0LTgzIC0xOTguNXEwIC0xMTcgODMgLTE5OS41dDE5OSAtODIuNXQxOTkgODIuNXQ4MyAxOTkuNXEwIDExNiAtODMgMTk4LjV0LTE5OSA4Mi41ek0xMzgwIDY0NnEtMTA1IDIgLTIxMSAwdjFxLTEgLTI3IDIuNSAtODYKdDEzLjUgLTY2cTI5IC0xNCA5My41IC0xNC41dDk1LjUgMTAuNXE5IDMgMTEgMzl0LTAuNSA2OS41dC00LjUgNDYuNXpNMTExMiA0NDdxOCA0IDkuNSA0OHQtMC41IDg4dC00IDYzdjFxLTIxMiAtMyAtMjE0IC0zcS00IC0yMCAtNyAtNjJ0MCAtODN0MTQgLTQ2cTM0IC0xNSAxMDEgLTE2dDEwMSAxMHpNNzE4IDYzNnEtMTYgLTU5IDQuNSAtMTE4LjV0NzcuNSAtODQuNXExNSAtOCAyNCAtNXQxMiAyMXEzIDE2IDggOTB0MTAgMTAzCnEtNjkgLTIgLTEzNiAtNnpNNTkxIDUxMHEzIC0yMyAtMzQgLTM2cTEzMiAtMTQxIDI3MS41IC0yNDB0MzA1LjUgLTE1NHExNzIgNDkgMzEwLjUgMTQ2dDI5My41IDI1MHEtMzMgMTMgLTMwIDM0cTAgMiAwLjUgMy41dDEuNSAzdDEgMi41djF2LTFxLTE3IDIgLTUwIDUuNXQtNDggNC41cS0yNiAtOTAgLTgyIC0xMzJxLTUxIC0zOCAtODIgMXEtNSA2IC05IDE0cS03IDEzIC0xNyA2MnEtMiAtNSAtNSAtOXQtNy41IC03dC04IC01LjV0LTkuNSAtNApsLTEwIC0yLjV0LTEyIC0ybC0xMiAtMS41dC0xMy41IC0xdC0xMy41IC0wLjVxLTEwNiAtOSAtMTYzIDExcS00IC0xNyAtMTAgLTI2LjV0LTIxIC0xNXQtMjMgLTd0LTM2IC0zLjVxLTYgLTEgLTkgLTFxLTE3OSAtMTcgLTIwMyA0MHEtMiAtNjMgLTU2IC01NHEtNDcgOCAtOTEgNTRxLTEyIDEzIC0yMCAyNnEtMTcgMjkgLTI2IDY1cS01OCAtNiAtODcgLTEwcTEgLTIgNCAtMTB6TTUwNyAtMTE4cTMgMTQgMyAzMHEtMTcgNzEgLTUxIDEzMAp0LTczIDcwcS00MSAxMiAtMTAxLjUgLTE0LjV0LTEwNC41IC04MHQtMzkgLTEwNy41cTM1IC01MyAxMDAgLTkzdDExOSAtNDJxNTEgLTIgOTQgMjh0NTMgNzl6TTUxMCA1M3EyMyAtNjMgMjcgLTExOXExOTUgMTEzIDM5MiAxNzRxLTk4IDUyIC0xODAuNSAxMjB0LTE3OS41IDE2NXEtNiAtNCAtMjkgLTEzcTAgLTEgLTEgLTR0LTEgLTVxMzEgLTE4IDIyIC0zN3EtMTIgLTIzIC01NiAtMzRxLTEwIC0xMyAtMjkgLTI0aC0xcS0yIC04MyAxIC0xNTAKcTE5IC0zNCAzNSAtNzN6TTU3OSAtMTEzcTUzMiAtMjEgMTE0NSAwcS0yNTQgMTQ3IC00MjggMTk2cS03NiAtMzUgLTE1NiAtNTdxLTggLTMgLTE2IDBxLTY1IDIxIC0xMjkgNDlxLTIwOCAtNjAgLTQxNiAtMTg4aC0xdi0xcTEgMCAxIDF6TTE3NjMgLTY3cTQgNTQgMjggMTIwcTE0IDM4IDMzIDcxbC0xIC0xcTMgNzcgMyAxNTNxLTE1IDggLTMwIDI1cS00MiA5IC01NiAzM3EtOSAyMCAyMiAzOHEtMiA0IC0yIDlxLTE2IDQgLTI4IDEyCnEtMjA0IC0xOTAgLTM4MyAtMjg0cTE5OCAtNTkgNDE0IC0xNzZ6TTIxNTUgLTkwcTUgNTQgLTM5IDEwNy41dC0xMDQgODB0LTEwMiAxNC41cS0zOCAtMTEgLTcyLjUgLTcwLjV0LTUxLjUgLTEyOS41cTAgLTE2IDMgLTMwcTEwIC00OSA1MyAtNzl0OTQgLTI4cTU0IDIgMTE5IDQydDEwMCA5M3oiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzUzOCIgdW5pY29kZT0iJiN4ZjIzZDsiIGhvcml6LWFkdi14PSIyMzA0IiAKZD0iTTE1MjQgLTI1cTAgLTY4IC00OCAtMTE2dC0xMTYgLTQ4dC0xMTYuNSA0OHQtNDguNSAxMTZ0NDguNSAxMTYuNXQxMTYuNSA0OC41dDExNiAtNDguNXQ0OCAtMTE2LjV6TTc3NSAtMjVxMCAtNjggLTQ4LjUgLTExNnQtMTE2LjUgLTQ4dC0xMTYgNDh0LTQ4IDExNnQ0OCAxMTYuNXQxMTYgNDguNXQxMTYuNSAtNDguNXQ0OC41IC0xMTYuNXpNMCAxNDY5cTU3IC02MCAxMTAuNSAtMTA0LjV0MTIxIC04MnQxMzYgLTYzdDE2NiAtNDUuNQp0MjAwIC0zMS41dDI1MCAtMTguNXQzMDQgLTkuNXQzNzIuNSAtMi41cTEzOSAwIDI0NC41IC01dDE4MSAtMTYuNXQxMjQgLTI3LjV0NzEgLTM5LjV0MjQgLTUxLjV0LTE5LjUgLTY0dC01Ni41IC03Ni41dC04OS41IC05MXQtMTE2IC0xMDQuNXQtMTM5IC0xMTlxLTE4NSAtMTU3IC0yODYgLTI0N3EyOSA1MSA3Ni41IDEwOXQ5NCAxMDUuNXQ5NC41IDk4LjV0ODMgOTEuNXQ1NCA4MC41dDEzIDcwdC00NS41IDU1LjV0LTExNi41IDQxdC0yMDQgMjMuNQp0LTMwNCA1cS0xNjggLTIgLTMxNCA2dC0yNTYgMjN0LTIwNC41IDQxdC0xNTkuNSA1MS41dC0xMjIuNSA2Mi41dC05MS41IDY2LjV0LTY4IDcxLjV0LTUwLjUgNjkuNXQtNDAgNjh0LTM2LjUgNTkuNXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzUzOSIgdW5pY29kZT0iJiN4ZjIzZTsiIGhvcml6LWFkdi14PSIxNzkyIiAKZD0iTTg5NiAxNDcycS0xNjkgMCAtMzIzIC02NnQtMjY1LjUgLTE3Ny41dC0xNzcuNSAtMjY1LjV0LTY2IC0zMjN0NjYgLTMyM3QxNzcuNSAtMjY1LjV0MjY1LjUgLTE3Ny41dDMyMyAtNjZ0MzIzIDY2dDI2NS41IDE3Ny41dDE3Ny41IDI2NS41dDY2IDMyM3QtNjYgMzIzdC0xNzcuNSAyNjUuNXQtMjY1LjUgMTc3LjV0LTMyMyA2NnpNODk2IDE1MzZxMTgyIDAgMzQ4IC03MXQyODYgLTE5MXQxOTEgLTI4NnQ3MSAtMzQ4dC03MSAtMzQ4CnQtMTkxIC0yODZ0LTI4NiAtMTkxdC0zNDggLTcxdC0zNDggNzF0LTI4NiAxOTF0LTE5MSAyODZ0LTcxIDM0OHQ3MSAzNDh0MTkxIDI4NnQyODYgMTkxdDM0OCA3MXpNNDk2IDcwNHExNiAwIDE2IC0xNnYtNDgwcTAgLTE2IC0xNiAtMTZoLTMycS0xNiAwIC0xNiAxNnY0ODBxMCAxNiAxNiAxNmgzMnpNODk2IDY0MHE1MyAwIDkwLjUgLTM3LjV0MzcuNSAtOTAuNXEwIC0zNSAtMTcuNSAtNjR0LTQ2LjUgLTQ2di0xMTRxMCAtMTQgLTkgLTIzCnQtMjMgLTloLTY0cS0xNCAwIC0yMyA5dC05IDIzdjExNHEtMjkgMTcgLTQ2LjUgNDZ0LTE3LjUgNjRxMCA1MyAzNy41IDkwLjV0OTAuNSAzNy41ek04OTYgMTQwOHEyMDkgMCAzODUuNSAtMTAzdDI3OS41IC0yNzkuNXQxMDMgLTM4NS41dC0xMDMgLTM4NS41dC0yNzkuNSAtMjc5LjV0LTM4NS41IC0xMDN0LTM4NS41IDEwM3QtMjc5LjUgMjc5LjV0LTEwMyAzODUuNXQxMDMgMzg1LjV0Mjc5LjUgMjc5LjV0Mzg1LjUgMTAzek01NDQgOTI4di05NgpxMCAtMTQgOSAtMjN0MjMgLTloNjRxMTQgMCAyMyA5dDkgMjN2OTZxMCA5MyA2NS41IDE1OC41dDE1OC41IDY1LjV0MTU4LjUgLTY1LjV0NjUuNSAtMTU4LjV2LTk2cTAgLTE0IDkgLTIzdDIzIC05aDY0cTE0IDAgMjMgOXQ5IDIzdjk2cTAgMTQ2IC0xMDMgMjQ5dC0yNDkgMTAzdC0yNDkgLTEwM3QtMTAzIC0yNDl6TTE0MDggMTkydjUxMnEwIDI2IC0xOSA0NXQtNDUgMTloLTg5NnEtMjYgMCAtNDUgLTE5dC0xOSAtNDV2LTUxMgpxMCAtMjYgMTkgLTQ1dDQ1IC0xOWg4OTZxMjYgMCA0NSAxOXQxOSA0NXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzU0MCIgdW5pY29kZT0iJiN4ZjI0MDsiIGhvcml6LWFkdi14PSIyMzA0IiAKZD0iTTE5MjAgMTAyNHYtNzY4aC0xNjY0djc2OGgxNjY0ek0yMDQ4IDQ0OGgxMjh2Mzg0aC0xMjh2Mjg4cTAgMTQgLTkgMjN0LTIzIDloLTE4NTZxLTE0IDAgLTIzIC05dC05IC0yM3YtOTYwcTAgLTE0IDkgLTIzdDIzIC05aDE4NTZxMTQgMCAyMyA5dDkgMjN2Mjg4ek0yMzA0IDgzMnYtMzg0cTAgLTUzIC0zNy41IC05MC41dC05MC41IC0zNy41di0xNjBxMCAtNjYgLTQ3IC0xMTN0LTExMyAtNDdoLTE4NTZxLTY2IDAgLTExMyA0N3QtNDcgMTEzCnY5NjBxMCA2NiA0NyAxMTN0MTEzIDQ3aDE4NTZxNjYgMCAxMTMgLTQ3dDQ3IC0xMTN2LTE2MHE1MyAwIDkwLjUgLTM3LjV0MzcuNSAtOTAuNXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzU0MSIgdW5pY29kZT0iJiN4ZjI0MTsiIGhvcml6LWFkdi14PSIyMzA0IiAKZD0iTTI1NiAyNTZ2NzY4aDEyODB2LTc2OGgtMTI4MHpNMjE3NiA5NjBxNTMgMCA5MC41IC0zNy41dDM3LjUgLTkwLjV2LTM4NHEwIC01MyAtMzcuNSAtOTAuNXQtOTAuNSAtMzcuNXYtMTYwcTAgLTY2IC00NyAtMTEzdC0xMTMgLTQ3aC0xODU2cS02NiAwIC0xMTMgNDd0LTQ3IDExM3Y5NjBxMCA2NiA0NyAxMTN0MTEzIDQ3aDE4NTZxNjYgMCAxMTMgLTQ3dDQ3IC0xMTN2LTE2MHpNMjE3NiA0NDh2Mzg0aC0xMjh2Mjg4cTAgMTQgLTkgMjN0LTIzIDkKaC0xODU2cS0xNCAwIC0yMyAtOXQtOSAtMjN2LTk2MHEwIC0xNCA5IC0yM3QyMyAtOWgxODU2cTE0IDAgMjMgOXQ5IDIzdjI4OGgxMjh6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9Il81NDIiIHVuaWNvZGU9IiYjeGYyNDI7IiBob3Jpei1hZHYteD0iMjMwNCIgCmQ9Ik0yNTYgMjU2djc2OGg4OTZ2LTc2OGgtODk2ek0yMTc2IDk2MHE1MyAwIDkwLjUgLTM3LjV0MzcuNSAtOTAuNXYtMzg0cTAgLTUzIC0zNy41IC05MC41dC05MC41IC0zNy41di0xNjBxMCAtNjYgLTQ3IC0xMTN0LTExMyAtNDdoLTE4NTZxLTY2IDAgLTExMyA0N3QtNDcgMTEzdjk2MHEwIDY2IDQ3IDExM3QxMTMgNDdoMTg1NnE2NiAwIDExMyAtNDd0NDcgLTExM3YtMTYwek0yMTc2IDQ0OHYzODRoLTEyOHYyODhxMCAxNCAtOSAyM3QtMjMgOQpoLTE4NTZxLTE0IDAgLTIzIC05dC05IC0yM3YtOTYwcTAgLTE0IDkgLTIzdDIzIC05aDE4NTZxMTQgMCAyMyA5dDkgMjN2Mjg4aDEyOHoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzU0MyIgdW5pY29kZT0iJiN4ZjI0MzsiIGhvcml6LWFkdi14PSIyMzA0IiAKZD0iTTI1NiAyNTZ2NzY4aDUxMnYtNzY4aC01MTJ6TTIxNzYgOTYwcTUzIDAgOTAuNSAtMzcuNXQzNy41IC05MC41di0zODRxMCAtNTMgLTM3LjUgLTkwLjV0LTkwLjUgLTM3LjV2LTE2MHEwIC02NiAtNDcgLTExM3QtMTEzIC00N2gtMTg1NnEtNjYgMCAtMTEzIDQ3dC00NyAxMTN2OTYwcTAgNjYgNDcgMTEzdDExMyA0N2gxODU2cTY2IDAgMTEzIC00N3Q0NyAtMTEzdi0xNjB6TTIxNzYgNDQ4djM4NGgtMTI4djI4OHEwIDE0IC05IDIzdC0yMyA5CmgtMTg1NnEtMTQgMCAtMjMgLTl0LTkgLTIzdi05NjBxMCAtMTQgOSAtMjN0MjMgLTloMTg1NnExNCAwIDIzIDl0OSAyM3YyODhoMTI4eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNTQ0IiB1bmljb2RlPSImI3hmMjQ0OyIgaG9yaXotYWR2LXg9IjIzMDQiIApkPSJNMjE3NiA5NjBxNTMgMCA5MC41IC0zNy41dDM3LjUgLTkwLjV2LTM4NHEwIC01MyAtMzcuNSAtOTAuNXQtOTAuNSAtMzcuNXYtMTYwcTAgLTY2IC00NyAtMTEzdC0xMTMgLTQ3aC0xODU2cS02NiAwIC0xMTMgNDd0LTQ3IDExM3Y5NjBxMCA2NiA0NyAxMTN0MTEzIDQ3aDE4NTZxNjYgMCAxMTMgLTQ3dDQ3IC0xMTN2LTE2MHpNMjE3NiA0NDh2Mzg0aC0xMjh2Mjg4cTAgMTQgLTkgMjN0LTIzIDloLTE4NTZxLTE0IDAgLTIzIC05dC05IC0yMwp2LTk2MHEwIC0xNCA5IC0yM3QyMyAtOWgxODU2cTE0IDAgMjMgOXQ5IDIzdjI4OGgxMjh6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9Il81NDUiIHVuaWNvZGU9IiYjeGYyNDU7IiBob3Jpei1hZHYteD0iMTI4MCIgCmQ9Ik0xMTMzIDQ5M3EzMSAtMzAgMTQgLTY5cS0xNyAtNDAgLTU5IC00MGgtMzgybDIwMSAtNDc2cTEwIC0yNSAwIC00OXQtMzQgLTM1bC0xNzcgLTc1cS0yNSAtMTAgLTQ5IDB0LTM1IDM0bC0xOTEgNDUybC0zMTIgLTMxMnEtMTkgLTE5IC00NSAtMTlxLTEyIDAgLTI0IDVxLTQwIDE3IC00MCA1OXYxNTA0cTAgNDIgNDAgNTlxMTIgNSAyNCA1cTI3IDAgNDUgLTE5eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNTQ2IiB1bmljb2RlPSImI3hmMjQ2OyIgaG9yaXotYWR2LXg9IjEwMjQiIApkPSJNODMyIDE0MDhxLTMyMCAwIC0zMjAgLTIyNHYtNDE2aDEyOHYtMTI4aC0xMjh2LTU0NHEwIC0yMjQgMzIwIC0yMjRoNjR2LTEyOGgtNjRxLTI3MiAwIC0zODQgMTQ2cS0xMTIgLTE0NiAtMzg0IC0xNDZoLTY0djEyOGg2NHEzMjAgMCAzMjAgMjI0djU0NGgtMTI4djEyOGgxMjh2NDE2cTAgMjI0IC0zMjAgMjI0aC02NHYxMjhoNjRxMjcyIDAgMzg0IC0xNDZxMTEyIDE0NiAzODQgMTQ2aDY0di0xMjhoLTY0eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNTQ3IiB1bmljb2RlPSImI3hmMjQ3OyIgaG9yaXotYWR2LXg9IjIwNDgiIApkPSJNMjA0OCAxMTUyaC0xMjh2LTEwMjRoMTI4di0zODRoLTM4NHYxMjhoLTEyODB2LTEyOGgtMzg0djM4NGgxMjh2MTAyNGgtMTI4djM4NGgzODR2LTEyOGgxMjgwdjEyOGgzODR2LTM4NHpNMTc5MiAxNDA4di0xMjhoMTI4djEyOGgtMTI4ek0xMjggMTQwOHYtMTI4aDEyOHYxMjhoLTEyOHpNMjU2IC0xMjh2MTI4aC0xMjh2LTEyOGgxMjh6TTE2NjQgMHYxMjhoMTI4djEwMjRoLTEyOHYxMjhoLTEyODB2LTEyOGgtMTI4di0xMDI0aDEyOHYtMTI4CmgxMjgwek0xOTIwIC0xMjh2MTI4aC0xMjh2LTEyOGgxMjh6TTEyODAgODk2aDM4NHYtNzY4aC04OTZ2MjU2aC0zODR2NzY4aDg5NnYtMjU2ek01MTIgNTEyaDY0MHY1MTJoLTY0MHYtNTEyek0xNTM2IDI1NnY1MTJoLTI1NnYtMzg0aC0zODR2LTEyOGg2NDB6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9Il81NDgiIHVuaWNvZGU9IiYjeGYyNDg7IiBob3Jpei1hZHYteD0iMjMwNCIgCmQ9Ik0yMzA0IDc2OGgtMTI4di02NDBoMTI4di0zODRoLTM4NHYxMjhoLTg5NnYtMTI4aC0zODR2Mzg0aDEyOHYxMjhoLTM4NHYtMTI4aC0zODR2Mzg0aDEyOHY2NDBoLTEyOHYzODRoMzg0di0xMjhoODk2djEyOGgzODR2LTM4NGgtMTI4di0xMjhoMzg0djEyOGgzODR2LTM4NHpNMjA0OCAxMDI0di0xMjhoMTI4djEyOGgtMTI4ek0xNDA4IDE0MDh2LTEyOGgxMjh2MTI4aC0xMjh6TTEyOCAxNDA4di0xMjhoMTI4djEyOGgtMTI4ek0yNTYgMjU2CnYxMjhoLTEyOHYtMTI4aDEyOHpNMTUzNiAzODRoLTEyOHYtMTI4aDEyOHYxMjh6TTM4NCAzODRoODk2djEyOGgxMjh2NjQwaC0xMjh2MTI4aC04OTZ2LTEyOGgtMTI4di02NDBoMTI4di0xMjh6TTg5NiAtMTI4djEyOGgtMTI4di0xMjhoMTI4ek0yMTc2IC0xMjh2MTI4aC0xMjh2LTEyOGgxMjh6TTIwNDggMTI4djY0MGgtMTI4djEyOGgtMzg0di0zODRoMTI4di0zODRoLTM4NHYxMjhoLTM4NHYtMTI4aDEyOHYtMTI4aDg5NnYxMjhoMTI4eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNTQ5IiB1bmljb2RlPSImI3hmMjQ5OyIgCmQ9Ik0xMDI0IDI4OHYtNDE2aC05MjhxLTQwIDAgLTY4IDI4dC0yOCA2OHYxMzQ0cTAgNDAgMjggNjh0NjggMjhoMTM0NHE0MCAwIDY4IC0yOHQyOCAtNjh2LTkyOGgtNDE2cS00MCAwIC02OCAtMjh0LTI4IC02OHpNMTE1MiAyNTZoMzgxcS0xNSAtODIgLTY1IC0xMzJsLTE4NCAtMTg0cS01MCAtNTAgLTEzMiAtNjV2MzgxeiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNTUwIiB1bmljb2RlPSImI3hmMjRhOyIgCmQ9Ik0xNDAwIDI1NmgtMjQ4di0yNDhxMjkgMTAgNDEgMjJsMTg1IDE4NXExMiAxMiAyMiA0MXpNMTEyMCAzODRoMjg4djg5NmgtMTI4MHYtMTI4MGg4OTZ2Mjg4cTAgNDAgMjggNjh0NjggMjh6TTE1MzYgMTMxMnYtMTAyNHEwIC00MCAtMjAgLTg4dC00OCAtNzZsLTE4NCAtMTg0cS0yOCAtMjggLTc2IC00OHQtODggLTIwaC0xMDI0cS00MCAwIC02OCAyOHQtMjggNjh2MTM0NHEwIDQwIDI4IDY4dDY4IDI4aDEzNDRxNDAgMCA2OCAtMjh0MjggLTY4CnoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzU1MSIgdW5pY29kZT0iJiN4ZjI0YjsiIGhvcml6LWFkdi14PSIyMzA0IiAKZD0iTTE5NTEgNTM4cTAgLTI2IC0xNS41IC00NC41dC0zOC41IC0yMy41cS04IC0yIC0xOCAtMmgtMTUzdjE0MGgxNTNxMTAgMCAxOCAtMnEyMyAtNSAzOC41IC0yMy41dDE1LjUgLTQ0LjV6TTE5MzMgNzUxcTAgLTI1IC0xNSAtNDJ0LTM4IC0yMXEtMyAtMSAtMTUgLTFoLTEzOXYxMjloMTM5cTMgMCA4LjUgLTAuNXQ2LjUgLTAuNXEyMyAtNCAzOCAtMjEuNXQxNSAtNDIuNXpNNzI4IDU4N3YzMDhoLTIyOHYtMzA4cTAgLTU4IC0zOCAtOTQuNQp0LTEwNSAtMzYuNXEtMTA4IDAgLTIyOSA1OXYtMTEycTUzIC0xNSAxMjEgLTIzdDEwOSAtOWw0MiAtMXEzMjggMCAzMjggMjE3ek0xNDQyIDQwM3YxMTNxLTk5IC01MiAtMjAwIC01OXEtMTA4IC04IC0xNjkgNDF0LTYxIDE0MnQ2MSAxNDJ0MTY5IDQxcTEwMSAtNyAyMDAgLTU4djExMnEtNDggMTIgLTEwMCAxOS41dC04MCA5LjVsLTI4IDJxLTEyNyA2IC0yMTguNSAtMTR0LTE0MC41IC02MHQtNzEgLTg4dC0yMiAtMTA2dDIyIC0xMDZ0NzEgLTg4CnQxNDAuNSAtNjB0MjE4LjUgLTE0cTEwMSA0IDIwOCAzMXpNMjE3NiA1MThxMCA1NCAtNDMgODguNXQtMTA5IDM5LjV2M3E1NyA4IDg5IDQxLjV0MzIgNzkuNXEwIDU1IC00MSA4OHQtMTA3IDM2cS0zIDAgLTEyIDAuNXQtMTQgMC41aC00NTV2LTUxMGg0OTFxNzQgMCAxMjEuNSAzNi41dDQ3LjUgOTYuNXpNMjMwNCAxMjgwdi0xMjgwcTAgLTUyIC0zOCAtOTB0LTkwIC0zOGgtMjA0OHEtNTIgMCAtOTAgMzh0LTM4IDkwdjEyODBxMCA1MiAzOCA5MAp0OTAgMzhoMjA0OHE1MiAwIDkwIC0zOHQzOCAtOTB6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9Il81NTIiIHVuaWNvZGU9IiYjeGYyNGM7IiBob3Jpei1hZHYteD0iMjMwNCIgCmQ9Ik04NTggMjk1djY5M3EtMTA2IC00MSAtMTcyIC0xMzUuNXQtNjYgLTIxMS41dDY2IC0yMTEuNXQxNzIgLTEzNC41ek0xMzYyIDY0MXEwIDExNyAtNjYgMjExLjV0LTE3MiAxMzUuNXYtNjk0cTEwNiA0MSAxNzIgMTM1LjV0NjYgMjExLjV6TTE1NzcgNjQxcTAgLTE1OSAtNzguNSAtMjk0dC0yMTMuNSAtMjEzLjV0LTI5NCAtNzguNXEtMTE5IDAgLTIyNy41IDQ2LjV0LTE4NyAxMjV0LTEyNSAxODd0LTQ2LjUgMjI3LjVxMCAxNTkgNzguNSAyOTQKdDIxMy41IDIxMy41dDI5NCA3OC41dDI5NCAtNzguNXQyMTMuNSAtMjEzLjV0NzguNSAtMjk0ek0xOTYwIDYzNHEwIDEzOSAtNTUuNSAyNjEuNXQtMTQ3LjUgMjA1LjV0LTIxMy41IDEzMXQtMjUyLjUgNDhoLTMwMXEtMTc2IDAgLTMyMy41IC04MXQtMjM1IC0yMzB0LTg3LjUgLTMzNXEwIC0xNzEgODcgLTMxNy41dDIzNiAtMjMxLjV0MzIzIC04NWgzMDFxMTI5IDAgMjUxLjUgNTAuNXQyMTQuNSAxMzV0MTQ3LjUgMjAyLjV0NTUuNSAyNDZ6Ck0yMzA0IDEyODB2LTEyODBxMCAtNTIgLTM4IC05MHQtOTAgLTM4aC0yMDQ4cS01MiAwIC05MCAzOHQtMzggOTB2MTI4MHEwIDUyIDM4IDkwdDkwIDM4aDIwNDhxNTIgMCA5MCAtMzh0MzggLTkweiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNTUzIiB1bmljb2RlPSImI3hmMjRkOyIgaG9yaXotYWR2LXg9IjE3OTIiIApkPSJNMTY2NCAtOTZ2MTA4OHEwIDEzIC05LjUgMjIuNXQtMjIuNSA5LjVoLTEwODhxLTEzIDAgLTIyLjUgLTkuNXQtOS41IC0yMi41di0xMDg4cTAgLTEzIDkuNSAtMjIuNXQyMi41IC05LjVoMTA4OHExMyAwIDIyLjUgOS41dDkuNSAyMi41ek0xNzkyIDk5MnYtMTA4OHEwIC02NiAtNDcgLTExM3QtMTEzIC00N2gtMTA4OHEtNjYgMCAtMTEzIDQ3dC00NyAxMTN2MTA4OHEwIDY2IDQ3IDExM3QxMTMgNDdoMTA4OHE2NiAwIDExMyAtNDd0NDcgLTExMwp6TTE0MDggMTM3NnYtMTYwaC0xMjh2MTYwcTAgMTMgLTkuNSAyMi41dC0yMi41IDkuNWgtMTA4OHEtMTMgMCAtMjIuNSAtOS41dC05LjUgLTIyLjV2LTEwODhxMCAtMTMgOS41IC0yMi41dDIyLjUgLTkuNWgxNjB2LTEyOGgtMTYwcS02NiAwIC0xMTMgNDd0LTQ3IDExM3YxMDg4cTAgNjYgNDcgMTEzdDExMyA0N2gxMDg4cTY2IDAgMTEzIC00N3Q0NyAtMTEzeiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNTU0IiB1bmljb2RlPSImI3hmMjRlOyIgaG9yaXotYWR2LXg9IjIzMDQiIApkPSJNMTcyOCAxMDg4bC0zODQgLTcwNGg3Njh6TTQ0OCAxMDg4bC0zODQgLTcwNGg3Njh6TTEyNjkgMTI4MHEtMTQgLTQwIC00NS41IC03MS41dC03MS41IC00NS41di0xMjkxaDYwOHExNCAwIDIzIC05dDkgLTIzdi02NHEwIC0xNCAtOSAtMjN0LTIzIC05aC0xMzQ0cS0xNCAwIC0yMyA5dC05IDIzdjY0cTAgMTQgOSAyM3QyMyA5aDYwOHYxMjkxcS00MCAxNCAtNzEuNSA0NS41dC00NS41IDcxLjVoLTQ5MXEtMTQgMCAtMjMgOXQtOSAyM3Y2NApxMCAxNCA5IDIzdDIzIDloNDkxcTIxIDU3IDcwIDkyLjV0MTExIDM1LjV0MTExIC0zNS41dDcwIC05Mi41aDQ5MXExNCAwIDIzIC05dDkgLTIzdi02NHEwIC0xNCAtOSAtMjN0LTIzIC05aC00OTF6TTEwODggMTI2NHEzMyAwIDU2LjUgMjMuNXQyMy41IDU2LjV0LTIzLjUgNTYuNXQtNTYuNSAyMy41dC01Ni41IC0yMy41dC0yMy41IC01Ni41dDIzLjUgLTU2LjV0NTYuNSAtMjMuNXpNMjE3NiAzODRxMCAtNzMgLTQ2LjUgLTEzMXQtMTE3LjUgLTkxCnQtMTQ0LjUgLTQ5LjV0LTEzOS41IC0xNi41dC0xMzkuNSAxNi41dC0xNDQuNSA0OS41dC0xMTcuNSA5MXQtNDYuNSAxMzFxMCAxMSAzNSA4MXQ5MiAxNzQuNXQxMDcgMTk1LjV0MTAyIDE4NHQ1NiAxMDBxMTggMzMgNTYgMzN0NTYgLTMzcTQgLTcgNTYgLTEwMHQxMDIgLTE4NHQxMDcgLTE5NS41dDkyIC0xNzQuNXQzNSAtODF6TTg5NiAzODRxMCAtNzMgLTQ2LjUgLTEzMXQtMTE3LjUgLTkxdC0xNDQuNSAtNDkuNXQtMTM5LjUgLTE2LjUKdC0xMzkuNSAxNi41dC0xNDQuNSA0OS41dC0xMTcuNSA5MXQtNDYuNSAxMzFxMCAxMSAzNSA4MXQ5MiAxNzQuNXQxMDcgMTk1LjV0MTAyIDE4NHQ1NiAxMDBxMTggMzMgNTYgMzN0NTYgLTMzcTQgLTcgNTYgLTEwMHQxMDIgLTE4NHQxMDcgLTE5NS41dDkyIC0xNzQuNXQzNSAtODF6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9Il81NTUiIHVuaWNvZGU9IiYjeGYyNTA7IiAKZD0iTTE0MDggMTQwOHEwIC0yNjEgLTEwNi41IC00NjEuNXQtMjY2LjUgLTMwNi41cTE2MCAtMTA2IDI2Ni41IC0zMDYuNXQxMDYuNSAtNDYxLjVoOTZxMTQgMCAyMyAtOXQ5IC0yM3YtNjRxMCAtMTQgLTkgLTIzdC0yMyAtOWgtMTQ3MnEtMTQgMCAtMjMgOXQtOSAyM3Y2NHEwIDE0IDkgMjN0MjMgOWg5NnEwIDI2MSAxMDYuNSA0NjEuNXQyNjYuNSAzMDYuNXEtMTYwIDEwNiAtMjY2LjUgMzA2LjV0LTEwNi41IDQ2MS41aC05NnEtMTQgMCAtMjMgOQp0LTkgMjN2NjRxMCAxNCA5IDIzdDIzIDloMTQ3MnExNCAwIDIzIC05dDkgLTIzdi02NHEwIC0xNCAtOSAtMjN0LTIzIC05aC05NnpNODc0IDcwMHE3NyAyOSAxNDkgOTIuNXQxMjkuNSAxNTIuNXQ5Mi41IDIxMHQzNSAyNTNoLTEwMjRxMCAtMTMyIDM1IC0yNTN0OTIuNSAtMjEwdDEyOS41IC0xNTIuNXQxNDkgLTkyLjVxMTkgLTcgMzAuNSAtMjMuNXQxMS41IC0zNi41dC0xMS41IC0zNi41dC0zMC41IC0yMy41cS03NyAtMjkgLTE0OSAtOTIuNQp0LTEyOS41IC0xNTIuNXQtOTIuNSAtMjEwdC0zNSAtMjUzaDEwMjRxMCAxMzIgLTM1IDI1M3QtOTIuNSAyMTB0LTEyOS41IDE1Mi41dC0xNDkgOTIuNXEtMTkgNyAtMzAuNSAyMy41dC0xMS41IDM2LjV0MTEuNSAzNi41dDMwLjUgMjMuNXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzU1NiIgdW5pY29kZT0iJiN4ZjI1MTsiIApkPSJNMTQwOCAxNDA4cTAgLTI2MSAtMTA2LjUgLTQ2MS41dC0yNjYuNSAtMzA2LjVxMTYwIC0xMDYgMjY2LjUgLTMwNi41dDEwNi41IC00NjEuNWg5NnExNCAwIDIzIC05dDkgLTIzdi02NHEwIC0xNCAtOSAtMjN0LTIzIC05aC0xNDcycS0xNCAwIC0yMyA5dC05IDIzdjY0cTAgMTQgOSAyM3QyMyA5aDk2cTAgMjYxIDEwNi41IDQ2MS41dDI2Ni41IDMwNi41cS0xNjAgMTA2IC0yNjYuNSAzMDYuNXQtMTA2LjUgNDYxLjVoLTk2cS0xNCAwIC0yMyA5CnQtOSAyM3Y2NHEwIDE0IDkgMjN0MjMgOWgxNDcycTE0IDAgMjMgLTl0OSAtMjN2LTY0cTAgLTE0IC05IC0yM3QtMjMgLTloLTk2ek0xMjgwIDE0MDhoLTEwMjRxMCAtNjYgOSAtMTI4aDEwMDZxOSA2MSA5IDEyOHpNMTI4MCAtMTI4cTAgMTMwIC0zNCAyNDkuNXQtOTAuNSAyMDh0LTEyNi41IDE1MnQtMTQ2IDk0LjVoLTIzMHEtNzYgLTMxIC0xNDYgLTk0LjV0LTEyNi41IC0xNTJ0LTkwLjUgLTIwOHQtMzQgLTI0OS41aDEwMjR6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9Il81NTciIHVuaWNvZGU9IiYjeGYyNTI7IiAKZD0iTTE0MDggMTQwOHEwIC0yNjEgLTEwNi41IC00NjEuNXQtMjY2LjUgLTMwNi41cTE2MCAtMTA2IDI2Ni41IC0zMDYuNXQxMDYuNSAtNDYxLjVoOTZxMTQgMCAyMyAtOXQ5IC0yM3YtNjRxMCAtMTQgLTkgLTIzdC0yMyAtOWgtMTQ3MnEtMTQgMCAtMjMgOXQtOSAyM3Y2NHEwIDE0IDkgMjN0MjMgOWg5NnEwIDI2MSAxMDYuNSA0NjEuNXQyNjYuNSAzMDYuNXEtMTYwIDEwNiAtMjY2LjUgMzA2LjV0LTEwNi41IDQ2MS41aC05NnEtMTQgMCAtMjMgOQp0LTkgMjN2NjRxMCAxNCA5IDIzdDIzIDloMTQ3MnExNCAwIDIzIC05dDkgLTIzdi02NHEwIC0xNCAtOSAtMjN0LTIzIC05aC05NnpNMTI4MCAxNDA4aC0xMDI0cTAgLTIwNiA4NSAtMzg0aDg1NHE4NSAxNzggODUgMzg0ek0xMjIzIDE5MnEtNTQgMTQxIC0xNDUuNSAyNDEuNXQtMTk0LjUgMTQyLjVoLTIzMHEtMTAzIC00MiAtMTk0LjUgLTE0Mi41dC0xNDUuNSAtMjQxLjVoOTEweiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNTU4IiB1bmljb2RlPSImI3hmMjUzOyIgCmQ9Ik0xNDA4IDE0MDhxMCAtMjYxIC0xMDYuNSAtNDYxLjV0LTI2Ni41IC0zMDYuNXExNjAgLTEwNiAyNjYuNSAtMzA2LjV0MTA2LjUgLTQ2MS41aDk2cTE0IDAgMjMgLTl0OSAtMjN2LTY0cTAgLTE0IC05IC0yM3QtMjMgLTloLTE0NzJxLTE0IDAgLTIzIDl0LTkgMjN2NjRxMCAxNCA5IDIzdDIzIDloOTZxMCAyNjEgMTA2LjUgNDYxLjV0MjY2LjUgMzA2LjVxLTE2MCAxMDYgLTI2Ni41IDMwNi41dC0xMDYuNSA0NjEuNWgtOTZxLTE0IDAgLTIzIDkKdC05IDIzdjY0cTAgMTQgOSAyM3QyMyA5aDE0NzJxMTQgMCAyMyAtOXQ5IC0yM3YtNjRxMCAtMTQgLTkgLTIzdC0yMyAtOWgtOTZ6TTg3NCA3MDBxNzcgMjkgMTQ5IDkyLjV0MTI5LjUgMTUyLjV0OTIuNSAyMTB0MzUgMjUzaC0xMDI0cTAgLTEzMiAzNSAtMjUzdDkyLjUgLTIxMHQxMjkuNSAtMTUyLjV0MTQ5IC05Mi41cTE5IC03IDMwLjUgLTIzLjV0MTEuNSAtMzYuNXQtMTEuNSAtMzYuNXQtMzAuNSAtMjMuNXEtMTM3IC01MSAtMjQ0IC0xOTYKaDcwMHEtMTA3IDE0NSAtMjQ0IDE5NnEtMTkgNyAtMzAuNSAyMy41dC0xMS41IDM2LjV0MTEuNSAzNi41dDMwLjUgMjMuNXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzU1OSIgdW5pY29kZT0iJiN4ZjI1NDsiIApkPSJNMTUwNCAtNjRxMTQgMCAyMyAtOXQ5IC0yM3YtMTI4cTAgLTE0IC05IC0yM3QtMjMgLTloLTE0NzJxLTE0IDAgLTIzIDl0LTkgMjN2MTI4cTAgMTQgOSAyM3QyMyA5aDE0NzJ6TTEzMCAwcTMgNTUgMTYgMTA3dDMwIDk1dDQ2IDg3dDUzLjUgNzZ0NjQuNSA2OS41dDY2IDYwdDcwLjUgNTV0NjYuNSA0Ny41dDY1IDQzcS00MyAyOCAtNjUgNDN0LTY2LjUgNDcuNXQtNzAuNSA1NXQtNjYgNjB0LTY0LjUgNjkuNXQtNTMuNSA3NnQtNDYgODcKdC0zMCA5NXQtMTYgMTA3aDEyNzZxLTMgLTU1IC0xNiAtMTA3dC0zMCAtOTV0LTQ2IC04N3QtNTMuNSAtNzZ0LTY0LjUgLTY5LjV0LTY2IC02MHQtNzAuNSAtNTV0LTY2LjUgLTQ3LjV0LTY1IC00M3E0MyAtMjggNjUgLTQzdDY2LjUgLTQ3LjV0NzAuNSAtNTV0NjYgLTYwdDY0LjUgLTY5LjV0NTMuNSAtNzZ0NDYgLTg3dDMwIC05NXQxNiAtMTA3aC0xMjc2ek0xNTA0IDE1MzZxMTQgMCAyMyAtOXQ5IC0yM3YtMTI4cTAgLTE0IC05IC0yM3QtMjMgLTkKaC0xNDcycS0xNCAwIC0yMyA5dC05IDIzdjEyOHEwIDE0IDkgMjN0MjMgOWgxNDcyeiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNTYwIiB1bmljb2RlPSImI3hmMjU1OyIgCmQ9Ik03NjggMTE1MnEtNTMgMCAtOTAuNSAtMzcuNXQtMzcuNSAtOTAuNXYtMTI4aC0zMnY5M3EwIDQ4IC0zMiA4MS41dC04MCAzMy41cS00NiAwIC03OSAtMzN0LTMzIC03OXYtNDI5bC0zMiAzMHYxNzJxMCA0OCAtMzIgODEuNXQtODAgMzMuNXEtNDYgMCAtNzkgLTMzdC0zMyAtNzl2LTIyNHEwIC00NyAzNSAtODJsMzEwIC0yOTZxMzkgLTM5IDM5IC0xMDJxMCAtMjYgMTkgLTQ1dDQ1IC0xOWg2NDBxMjYgMCA0NSAxOXQxOSA0NXYyNQpxMCA0MSAxMCA3N2wxMDggNDM2cTEwIDM2IDEwIDc3djI0NnEwIDQ4IC0zMiA4MS41dC04MCAzMy41cS00NiAwIC03OSAtMzN0LTMzIC03OXYtMzJoLTMydjEyNXEwIDQwIC0yNSA3Mi41dC02NCA0MC41cS0xNCAyIC0yMyAycS00NiAwIC03OSAtMzN0LTMzIC03OXYtMTI4aC0zMnYxMjJxMCA1MSAtMzIuNSA4OS41dC04Mi41IDQzLjVxLTUgMSAtMTMgMXpNNzY4IDEyODBxODQgMCAxNDkgLTUwcTU3IDM0IDEyMyAzNHE1OSAwIDExMSAtMjcKdDg2IC03NnEyNyA3IDU5IDdxMTAwIDAgMTcwIC03MS41dDcwIC0xNzEuNXYtMjQ2cTAgLTUxIC0xMyAtMTA4bC0xMDkgLTQzNnEtNiAtMjQgLTYgLTcxcTAgLTgwIC01NiAtMTM2dC0xMzYgLTU2aC02NDBxLTg0IDAgLTEzOCA1OC41dC01NCAxNDIuNWwtMzA4IDI5NnEtNzYgNzMgLTc2IDE3NXYyMjRxMCA5OSA3MC41IDE2OS41dDE2OS41IDcwLjVxMTEgMCAxNiAtMXE2IDk1IDc1LjUgMTYwdDE2NC41IDY1cTUyIDAgOTggLTIxCnE3MiA2OSAxNzQgNjl6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9Il81NjEiIHVuaWNvZGU9IiYjeGYyNTY7IiBob3Jpei1hZHYteD0iMTc5MiIgCmQ9Ik04ODAgMTQwOHEtNDYgMCAtNzkgLTMzdC0zMyAtNzl2LTY1NmgtMzJ2NTI4cTAgNDYgLTMzIDc5dC03OSAzM3QtNzkgLTMzdC0zMyAtNzl2LTUyOHYtMjU2bC0xNTQgMjA1cS0zOCA1MSAtMTAyIDUxcS01MyAwIC05MC41IC0zNy41dC0zNy41IC05MC41cTAgLTQzIDI2IC03N2wzODQgLTUxMnEzOCAtNTEgMTAyIC01MWg2ODhxMzQgMCA2MSAyMnQzNCA1Nmw3NiA0MDVxNSAzMiA1IDU5djQ5OHEwIDQ2IC0zMyA3OXQtNzkgMzN0LTc5IC0zMwp0LTMzIC03OXYtMjcyaC0zMnY1MjhxMCA0NiAtMzMgNzl0LTc5IDMzdC03OSAtMzN0LTMzIC03OXYtNTI4aC0zMnY2NTZxMCA0NiAtMzMgNzl0LTc5IDMzek04ODAgMTUzNnE2OCAwIDEyNS41IC0zNS41dDg4LjUgLTk2LjVxMTkgNCA0MiA0cTk5IDAgMTY5LjUgLTcwLjV0NzAuNSAtMTY5LjV2LTE3cTEwNSA2IDE4MC41IC02NHQ3NS41IC0xNzV2LTQ5OHEwIC00MCAtOCAtODNsLTc2IC00MDRxLTE0IC03OSAtNzYuNSAtMTMxdC0xNDMuNSAtNTIKaC02ODhxLTYwIDAgLTExNC41IDI3LjV0LTkwLjUgNzQuNWwtMzg0IDUxMnEtNTEgNjggLTUxIDE1NHEwIDEwNiA3NSAxODF0MTgxIDc1cTc4IDAgMTI4IC0zNHY0MzRxMCA5OSA3MC41IDE2OS41dDE2OS41IDcwLjVxMjMgMCA0MiAtNHEzMSA2MSA4OC41IDk2LjV0MTI1LjUgMzUuNXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzU2MiIgdW5pY29kZT0iJiN4ZjI1NzsiIGhvcml6LWFkdi14PSIxNzkyIiAKZD0iTTEwNzMgLTEyOGgtMTc3cS0xNjMgMCAtMjI2IDE0MXEtMjMgNDkgLTIzIDEwMnY1cS02MiAzMCAtOTguNSA4OC41dC0zNi41IDEyNy41cTAgMzggNSA0OGgtMjYxcS0xMDYgMCAtMTgxIDc1dC03NSAxODF0NzUgMTgxdDE4MSA3NWgxMTNsLTQ0IDE3cS03NCAyOCAtMTE5LjUgOTMuNXQtNDUuNSAxNDUuNXEwIDEwNiA3NSAxODF0MTgxIDc1cTQ2IDAgOTEgLTE3bDYyOCAtMjM5aDQwMXExMDYgMCAxODEgLTc1dDc1IC0xODF2LTY2OApxMCAtODggLTU0IC0xNTcuNXQtMTQwIC05MC41bC0zMzkgLTg1cS05MiAtMjMgLTE4NiAtMjN6TTEwMjQgNTgzbC0xNTUgLTcxbC0xNjMgLTc0cS0zMCAtMTQgLTQ4IC00MS41dC0xOCAtNjAuNXEwIC00NiAzMyAtNzl0NzkgLTMzcTI2IDAgNDYgMTBsMzM4IDE1NHEtNDkgMTAgLTgwLjUgNTB0LTMxLjUgOTB2NTV6TTEzNDQgMjcycTAgNDYgLTMzIDc5dC03OSAzM3EtMjYgMCAtNDYgLTEwbC0yOTAgLTEzMnEtMjggLTEzIC0zNyAtMTcKdC0zMC41IC0xN3QtMjkuNSAtMjMuNXQtMTYgLTI5dC04IC00MC41cTAgLTUwIDMxLjUgLTgydDgxLjUgLTMycTIwIDAgMzggOWwzNTIgMTYwcTMwIDE0IDQ4IDQxLjV0MTggNjAuNXpNMTExMiAxMDI0bC02NTAgMjQ4cS0yNCA4IC00NiA4cS01MyAwIC05MC41IC0zNy41dC0zNy41IC05MC41cTAgLTQwIDIyLjUgLTczdDU5LjUgLTQ3bDUyNiAtMjAwdi02NGgtNjQwcS01MyAwIC05MC41IC0zNy41dC0zNy41IC05MC41dDM3LjUgLTkwLjUKdDkwLjUgLTM3LjVoNTM1bDIzMyAxMDZ2MTk4cTAgNjMgNDYgMTA2bDExMSAxMDJoLTY5ek0xMDczIDBxODIgMCAxNTUgMTlsMzM5IDg1cTQzIDExIDcwIDQ1LjV0MjcgNzguNXY2NjhxMCA1MyAtMzcuNSA5MC41dC05MC41IDM3LjVoLTMwOGwtMTM2IC0xMjZxLTM2IC0zMyAtMzYgLTgydi0yOTZxMCAtNDYgMzMgLTc3dDc5IC0zMXQ3OSAzNXQzMyA4MXYyMDhoMzJ2LTIwOHEwIC03MCAtNTcgLTExNHE1MiAtOCA4Ni41IC00OC41dDM0LjUgLTkzLjUKcTAgLTQyIC0yMyAtNzh0LTYxIC01M2wtMzEwIC0xNDFoOTF6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9Il81NjMiIHVuaWNvZGU9IiYjeGYyNTg7IiBob3Jpei1hZHYteD0iMjA0OCIgCmQ9Ik0xMTUxIDE1MzZxNjEgMCAxMTYgLTI4dDkxIC03N2w1NzIgLTc4MXExMTggLTE1OSAxMTggLTM1OXYtMzU1cTAgLTgwIC01NiAtMTM2dC0xMzYgLTU2aC0zODRxLTgwIDAgLTEzNiA1NnQtNTYgMTM2djE3N2wtMjg2IDE0M2gtNTQ2cS04MCAwIC0xMzYgNTZ0LTU2IDEzNnYzMnEwIDExOSA4NC41IDIwMy41dDIwMy41IDg0LjVoNDIwbDQyIDEyOGgtNjg2cS0xMDAgMCAtMTczLjUgNjcuNXQtODEuNSAxNjYuNXEtNjUgNzkgLTY1IDE4MnYzMgpxMCA4MCA1NiAxMzZ0MTM2IDU2aDk1OXpNMTkyMCAtNjR2MzU1cTAgMTU3IC05MyAyODRsLTU3MyA3ODFxLTM5IDUyIC0xMDMgNTJoLTk1OXEtMjYgMCAtNDUgLTE5dC0xOSAtNDVxMCAtMzIgMS41IC00OS41dDkuNSAtNDAuNXQyNSAtNDNxMTAgMzEgMzUuNSA1MHQ1Ni41IDE5aDgzMnYtMzJoLTgzMnEtMjYgMCAtNDUgLTE5dC0xOSAtNDVxMCAtNDQgMyAtNThxOCAtNDQgNDQgLTczdDgxIC0yOWg2NDBoOTFxNDAgMCA2OCAtMjh0MjggLTY4CnEwIC0xNSAtNSAtMzBsLTY0IC0xOTJxLTEwIC0yOSAtMzUgLTQ3LjV0LTU2IC0xOC41aC00NDNxLTY2IDAgLTExMyAtNDd0LTQ3IC0xMTN2LTMycTAgLTI2IDE5IC00NXQ0NSAtMTloNTYxcTE2IDAgMjkgLTdsMzE3IC0xNThxMjQgLTEzIDM4LjUgLTM2dDE0LjUgLTUwdi0xOTdxMCAtMjYgMTkgLTQ1dDQ1IC0xOWgzODRxMjYgMCA0NSAxOXQxOSA0NXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzU2NCIgdW5pY29kZT0iJiN4ZjI1OTsiIGhvcml6LWFkdi14PSIyMDQ4IiAKZD0iTTQ1OSAtMjU2cS03NyAwIC0xMzcuNSA0Ny41dC03OS41IDEyMi41bC0xMDEgNDAxcS0xMyA1NyAtMTMgMTA4cTAgNDUgLTUgNjdsLTExNiA0NzdxLTcgMjcgLTcgNTdxMCA5MyA2MiAxNjF0MTU1IDc4cTE3IDg1IDgyLjUgMTM5dDE1Mi41IDU0cTgzIDAgMTQ4IC01MS41dDg1IC0xMzIuNWw4MyAtMzQ4bDEwMyA0MjhxMjAgODEgODUgMTMyLjV0MTQ4IDUxLjVxODkgMCAxNTUuNSAtNTcuNXQ4MC41IC0xNDQuNXE5MiAtMTAgMTUyIC03OQp0NjAgLTE2MnEwIC0yNCAtNyAtNTlsLTEyMyAtNTEycTEwIDcgMzcuNSAyOC41dDM4LjUgMjkuNXQzNSAyM3Q0MSAyMC41dDQxLjUgMTF0NDkuNSA1LjVxMTA1IDAgMTgwIC03NHQ3NSAtMTc5cTAgLTYyIC0yOC41IC0xMTh0LTc4LjUgLTk0bC01MDcgLTM4MHEtNjggLTUxIC0xNTMgLTUxaC02OTR6TTExMDQgMTQwOHEtMzggMCAtNjguNSAtMjR0LTM5LjUgLTYybC0xNjQgLTY4MmgtMTI3bC0xNDUgNjAycS05IDM4IC0zOS41IDYydC02OC41IDI0CnEtNDggMCAtODAgLTMzdC0zMiAtODBxMCAtMTUgMyAtMjhsMTMyIC01NDdoLTI2bC05OSA0MDhxLTkgMzcgLTQwIDYyLjV0LTY5IDI1LjVxLTQ3IDAgLTgwIC0zM3QtMzMgLTc5cTAgLTE0IDMgLTI2bDExNiAtNDc4cTcgLTI4IDkgLTg2dDEwIC04OGwxMDAgLTQwMXE4IC0zMiAzNCAtNTIuNXQ1OSAtMjAuNWg2OTRxNDIgMCA3NiAyNmw1MDcgMzc5cTU2IDQzIDU2IDExMHEwIDUyIC0zNy41IDg4LjV0LTg5LjUgMzYuNXEtNDMgMCAtNzcgLTI2CmwtMzA3IC0yMzB2MjI3cTAgNCAzMiAxMzh0NjggMjgydDM5IDE2MXE0IDE4IDQgMjlxMCA0NyAtMzIgODF0LTc5IDM0cS0zOSAwIC02OS41IC0yNHQtMzkuNSAtNjJsLTExNiAtNDgyaC0yNmwxNTAgNjI0cTMgMTQgMyAyOHEwIDQ4IC0zMS41IDgydC03OS41IDM0eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNTY1IiB1bmljb2RlPSImI3hmMjVhOyIgaG9yaXotYWR2LXg9IjE3OTIiIApkPSJNNjQwIDE0MDhxLTUzIDAgLTkwLjUgLTM3LjV0LTM3LjUgLTkwLjV2LTUxMnYtMzg0bC0xNTEgMjAycS00MSA1NCAtMTA3IDU0cS01MiAwIC04OSAtMzh0LTM3IC05MHEwIC00MyAyNiAtNzdsMzg0IC01MTJxMzggLTUxIDEwMiAtNTFoNzE4cTIyIDAgMzkuNSAxMy41dDIyLjUgMzQuNWw5MiAzNjhxMjQgOTYgMjQgMTk0djIxN3EwIDQxIC0yOCA3MXQtNjggMzB0LTY4IC0yOHQtMjggLTY4aC0zMnY2MXEwIDQ4IC0zMiA4MS41dC04MCAzMy41CnEtNDYgMCAtNzkgLTMzdC0zMyAtNzl2LTY0aC0zMnY5MHEwIDU1IC0zNyA5NC41dC05MSAzOS41cS01MyAwIC05MC41IC0zNy41dC0zNy41IC05MC41di05NmgtMzJ2NTcwcTAgNTUgLTM3IDk0LjV0LTkxIDM5LjV6TTY0MCAxNTM2cTEwNyAwIDE4MS41IC03Ny41dDc0LjUgLTE4NC41di0yMjBxMjIgMiAzMiAycTk5IDAgMTczIC02OXE0NyAyMSA5OSAyMXExMTMgMCAxODQgLTg3cTI3IDcgNTYgN3E5NCAwIDE1OSAtNjcuNXQ2NSAtMTYxLjUKdi0yMTdxMCAtMTE2IC0yOCAtMjI1bC05MiAtMzY4cS0xNiAtNjQgLTY4IC0xMDQuNXQtMTE4IC00MC41aC03MThxLTYwIDAgLTExNC41IDI3LjV0LTkwLjUgNzQuNWwtMzg0IDUxMnEtNTEgNjggLTUxIDE1NHEwIDEwNSA3NC41IDE4MC41dDE3OS41IDc1LjVxNzEgMCAxMzAgLTM1djU0N3EwIDEwNiA3NSAxODF0MTgxIDc1ek03NjggMTI4djM4NGgtMzJ2LTM4NGgzMnpNMTAyNCAxMjh2Mzg0aC0zMnYtMzg0aDMyek0xMjgwIDEyOHYzODRoLTMyCnYtMzg0aDMyeiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNTY2IiB1bmljb2RlPSImI3hmMjViOyIgCmQ9Ik0xMjg4IDg4OXE2MCAwIDEwNyAtMjNxMTQxIC02MyAxNDEgLTIyNnYtMTc3cTAgLTk0IC0yMyAtMTg2bC04NSAtMzM5cS0yMSAtODYgLTkwLjUgLTE0MHQtMTU3LjUgLTU0aC02NjhxLTEwNiAwIC0xODEgNzV0LTc1IDE4MXY0MDFsLTIzOSA2MjhxLTE3IDQ1IC0xNyA5MXEwIDEwNiA3NSAxODF0MTgxIDc1cTgwIDAgMTQ1LjUgLTQ1LjV0OTMuNSAtMTE5LjVsMTcgLTQ0djExM3EwIDEwNiA3NSAxODF0MTgxIDc1dDE4MSAtNzV0NzUgLTE4MQp2LTI2MXEyNyA1IDQ4IDVxNjkgMCAxMjcuNSAtMzYuNXQ4OC41IC05OC41ek0xMDcyIDg5NnEtMzMgMCAtNjAuNSAtMTh0LTQxLjUgLTQ4bC03NCAtMTYzbC03MSAtMTU1aDU1cTUwIDAgOTAgLTMxLjV0NTAgLTgwLjVsMTU0IDMzOHExMCAyMCAxMCA0NnEwIDQ2IC0zMyA3OXQtNzkgMzN6TTEyOTMgNzYxcS0yMiAwIC00MC41IC04dC0yOSAtMTZ0LTIzLjUgLTI5LjV0LTE3IC0zMC41dC0xNyAtMzdsLTEzMiAtMjkwcS0xMCAtMjAgLTEwIC00NgpxMCAtNDYgMzMgLTc5dDc5IC0zM3EzMyAwIDYwLjUgMTh0NDEuNSA0OGwxNjAgMzUycTkgMTggOSAzOHEwIDUwIC0zMiA4MS41dC04MiAzMS41ek0xMjggMTEyMHEwIC0yMiA4IC00NmwyNDggLTY1MHYtNjlsMTAyIDExMXE0MyA0NiAxMDYgNDZoMTk4bDEwNiAyMzN2NTM1cTAgNTMgLTM3LjUgOTAuNXQtOTAuNSAzNy41dC05MC41IC0zNy41dC0zNy41IC05MC41di02NDBoLTY0bC0yMDAgNTI2cS0xNCAzNyAtNDcgNTkuNXQtNzMgMjIuNQpxLTUzIDAgLTkwLjUgLTM3LjV0LTM3LjUgLTkwLjV6TTExODAgLTEyOHE0NCAwIDc4LjUgMjd0NDUuNSA3MGw4NSAzMzlxMTkgNzMgMTkgMTU1djkxbC0xNDEgLTMxMHEtMTcgLTM4IC01MyAtNjF0LTc4IC0yM3EtNTMgMCAtOTMuNSAzNC41dC00OC41IDg2LjVxLTQ0IC01NyAtMTE0IC01N2gtMjA4djMyaDIwOHE0NiAwIDgxIDMzdDM1IDc5dC0zMSA3OXQtNzcgMzNoLTI5NnEtNDkgMCAtODIgLTM2bC0xMjYgLTEzNnYtMzA4CnEwIC01MyAzNy41IC05MC41dDkwLjUgLTM3LjVoNjY4eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNTY3IiB1bmljb2RlPSImI3hmMjVjOyIgaG9yaXotYWR2LXg9IjE5NzMiIApkPSJNODU3IDk5MnYtMTE3cTAgLTEzIC05LjUgLTIydC0yMi41IC05aC0yOTh2LTgxMnEwIC0xMyAtOSAtMjIuNXQtMjIgLTkuNWgtMTM1cS0xMyAwIC0yMi41IDl0LTkuNSAyM3Y4MTJoLTI5N3EtMTMgMCAtMjIuNSA5dC05LjUgMjJ2MTE3cTAgMTQgOSAyM3QyMyA5aDc5M3ExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV6TTE4OTUgOTk1bDc3IC05NjFxMSAtMTMgLTggLTI0cS0xMCAtMTAgLTIzIC0xMGgtMTM0cS0xMiAwIC0yMSA4LjUKdC0xMCAyMC41bC00NiA1ODhsLTE4OSAtNDI1cS04IC0xOSAtMjkgLTE5aC0xMjBxLTIwIDAgLTI5IDE5bC0xODggNDI3bC00NSAtNTkwcS0xIC0xMiAtMTAgLTIwLjV0LTIxIC04LjVoLTEzNXEtMTMgMCAtMjMgMTBxLTkgMTAgLTkgMjRsNzggOTYxcTEgMTIgMTAgMjAuNXQyMSA4LjVoMTQycTIwIDAgMjkgLTE5bDIyMCAtNTIwcTEwIC0yNCAyMCAtNTFxMyA3IDkuNSAyNC41dDEwLjUgMjYuNWwyMjEgNTIwcTkgMTkgMjkgMTloMTQxCnExMyAwIDIyIC04LjV0MTAgLTIwLjV6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9Il81NjgiIHVuaWNvZGU9IiYjeGYyNWQ7IiBob3Jpei1hZHYteD0iMTc5MiIgCmQ9Ik0xMDQyIDgzM3EwIDg4IC02MCAxMjFxLTMzIDE4IC0xMTcgMThoLTEyM3YtMjgxaDE2MnE2NiAwIDEwMiAzN3QzNiAxMDV6TTEwOTQgNTQ4bDIwNSAtMzczcTggLTE3IC0xIC0zMXEtOCAtMTYgLTI3IC0xNmgtMTUycS0yMCAwIC0yOCAxN2wtMTk0IDM2NWgtMTU1di0zNTBxMCAtMTQgLTkgLTIzdC0yMyAtOWgtMTM0cS0xNCAwIC0yMyA5dC05IDIzdjk2MHEwIDE0IDkgMjN0MjMgOWgyOTRxMTI4IDAgMTkwIC0yNHE4NSAtMzEgMTM0IC0xMDkKdDQ5IC0xODBxMCAtOTIgLTQyLjUgLTE2NS41dC0xMTUuNSAtMTA5LjVxNiAtMTAgOSAtMTZ6TTg5NiAxMzc2cS0xNTAgMCAtMjg2IC01OC41dC0yMzQuNSAtMTU3dC0xNTcgLTIzNC41dC01OC41IC0yODZ0NTguNSAtMjg2dDE1NyAtMjM0LjV0MjM0LjUgLTE1N3QyODYgLTU4LjV0Mjg2IDU4LjV0MjM0LjUgMTU3dDE1NyAyMzQuNXQ1OC41IDI4NnQtNTguNSAyODZ0LTE1NyAyMzQuNXQtMjM0LjUgMTU3dC0yODYgNTguNXpNMTc5MiA2NDAKcTAgLTE4MiAtNzEgLTM0OHQtMTkxIC0yODZ0LTI4NiAtMTkxdC0zNDggLTcxdC0zNDggNzF0LTI4NiAxOTF0LTE5MSAyODZ0LTcxIDM0OHQ3MSAzNDh0MTkxIDI4NnQyODYgMTkxdDM0OCA3MXQzNDggLTcxdDI4NiAtMTkxdDE5MSAtMjg2dDcxIC0zNDh6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9Il81NjkiIHVuaWNvZGU9IiYjeGYyNWU7IiBob3Jpei1hZHYteD0iMTc5MiIgCmQ9Ik02MDUgMzAzcTE1MyAwIDI1NyAxMDRxMTQgMTggMyAzNmwtNDUgODJxLTYgMTMgLTI0IDE3cS0xNiAyIC0yNyAtMTFsLTQgLTNxLTQgLTQgLTExLjUgLTEwdC0xNy41IC0xMy41dC0yMy41IC0xNC41dC0yOC41IC0xM3QtMzMuNSAtOS41dC0zNy41IC0zLjVxLTc2IDAgLTEyNSA1MHQtNDkgMTI3cTAgNzYgNDggMTI1LjV0MTIyIDQ5LjVxMzcgMCA3MS41IC0xNHQ1MC41IC0yOGwxNiAtMTRxMTEgLTExIDI2IC0xMHExNiAyIDI0IDE0bDUzIDc4CnExMyAyMCAtMiAzOXEtMyA0IC0xMSAxMnQtMzAgMjMuNXQtNDguNSAyOHQtNjcuNSAyMi41dC04NiAxMHEtMTQ4IDAgLTI0NiAtOTYuNXQtOTggLTI0MC41cTAgLTE0NiA5NyAtMjQxLjV0MjQ3IC05NS41ek0xMjM1IDMwM3ExNTMgMCAyNTcgMTA0cTE0IDE4IDQgMzZsLTQ1IDgycS04IDE0IC0yNSAxN3EtMTYgMiAtMjcgLTExbC00IC0zcS00IC00IC0xMS41IC0xMHQtMTcuNSAtMTMuNXQtMjMuNSAtMTQuNXQtMjguNSAtMTN0LTMzLjUgLTkuNQp0LTM3LjUgLTMuNXEtNzYgMCAtMTI1IDUwdC00OSAxMjdxMCA3NiA0OCAxMjUuNXQxMjIgNDkuNXEzNyAwIDcxLjUgLTE0dDUwLjUgLTI4bDE2IC0xNHExMSAtMTEgMjYgLTEwcTE2IDIgMjQgMTRsNTMgNzhxMTMgMjAgLTIgMzlxLTMgNCAtMTEgMTJ0LTMwIDIzLjV0LTQ4LjUgMjh0LTY3LjUgMjIuNXQtODYgMTBxLTE0NyAwIC0yNDUuNSAtOTYuNXQtOTguNSAtMjQwLjVxMCAtMTQ2IDk3IC0yNDEuNXQyNDcgLTk1LjV6TTg5NiAxMzc2CnEtMTUwIDAgLTI4NiAtNTguNXQtMjM0LjUgLTE1N3QtMTU3IC0yMzQuNXQtNTguNSAtMjg2dDU4LjUgLTI4NnQxNTcgLTIzNC41dDIzNC41IC0xNTd0Mjg2IC01OC41dDI4NiA1OC41dDIzNC41IDE1N3QxNTcgMjM0LjV0NTguNSAyODZ0LTU4LjUgMjg2dC0xNTcgMjM0LjV0LTIzNC41IDE1N3QtMjg2IDU4LjV6TTg5NiAxNTM2cTE4MiAwIDM0OCAtNzF0Mjg2IC0xOTF0MTkxIC0yODZ0NzEgLTM0OHQtNzEgLTM0OHQtMTkxIC0yODZ0LTI4NiAtMTkxCnQtMzQ4IC03MXQtMzQ4IDcxdC0yODYgMTkxdC0xOTEgMjg2dC03MSAzNDh0NzEgMzQ4dDE5MSAyODZ0Mjg2IDE5MXQzNDggNzF6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9ImYyNjAiIHVuaWNvZGU9IiYjeGYyNjA7IiBob3Jpei1hZHYteD0iMjA0OCIgCmQ9Ik03MzYgNzM2bDM4NCAtMzg0bC0zODQgLTM4NGwtNjcyIDY3Mmw2NzIgNjcybDE2OCAtMTY4bC05NiAtOTZsLTcyIDcybC00ODAgLTQ4MGw0ODAgLTQ4MGwxOTMgMTkzbC0yODkgMjg3ek0xMzEyIDEzMTJsNjcyIC02NzJsLTY3MiAtNjcybC0xNjggMTY4bDk2IDk2bDcyIC03Mmw0ODAgNDgwbC00ODAgNDgwbC0xOTMgLTE5M2wyODkgLTI4N2wtOTYgLTk2bC0zODQgMzg0eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJmMjYxIiB1bmljb2RlPSImI3hmMjYxOyIgaG9yaXotYWR2LXg9IjE3OTIiIApkPSJNNzE3IDE4MmwyNzEgMjcxbC0yNzkgMjc5bC04OCAtODhsMTkyIC0xOTFsLTk2IC05NmwtMjc5IDI3OWwyNzkgMjc5bDQwIC00MGw4NyA4N2wtMTI3IDEyOGwtNDU0IC00NTR6TTEwNzUgMTkwbDQ1NCA0NTRsLTQ1NCA0NTRsLTI3MSAtMjcxbDI3OSAtMjc5bDg4IDg4bC0xOTIgMTkxbDk2IDk2bDI3OSAtMjc5bC0yNzkgLTI3OWwtNDAgNDBsLTg3IC04OHpNMTc5MiA2NDBxMCAtMTgyIC03MSAtMzQ4dC0xOTEgLTI4NnQtMjg2IC0xOTEKdC0zNDggLTcxdC0zNDggNzF0LTI4NiAxOTF0LTE5MSAyODZ0LTcxIDM0OHQ3MSAzNDh0MTkxIDI4NnQyODYgMTkxdDM0OCA3MXQzNDggLTcxdDI4NiAtMTkxdDE5MSAtMjg2dDcxIC0zNDh6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9Il81NzIiIHVuaWNvZGU9IiYjeGYyNjI7IiBob3Jpei1hZHYteD0iMjMwNCIgCmQ9Ik02NTEgNTM5cTAgLTM5IC0yNy41IC02Ni41dC02NS41IC0yNy41cS0zOSAwIC02Ni41IDI3LjV0LTI3LjUgNjYuNXEwIDM4IDI3LjUgNjUuNXQ2Ni41IDI3LjVxMzggMCA2NS41IC0yNy41dDI3LjUgLTY1LjV6TTE4MDUgNTQwcTAgLTM5IC0yNy41IC02Ni41dC02Ni41IC0yNy41dC02Ni41IDI3LjV0LTI3LjUgNjYuNXQyNy41IDY2dDY2LjUgMjd0NjYuNSAtMjd0MjcuNSAtNjZ6TTc2NSA1MzlxMCA3OSAtNTYuNSAxMzZ0LTEzNi41IDU3CnQtMTM2LjUgLTU2LjV0LTU2LjUgLTEzNi41dDU2LjUgLTEzNi41dDEzNi41IC01Ni41dDEzNi41IDU2LjV0NTYuNSAxMzYuNXpNMTkxOCA1NDBxMCA4MCAtNTYuNSAxMzYuNXQtMTM2LjUgNTYuNXEtNzkgMCAtMTM2IC01Ni41dC01NyAtMTM2LjV0NTYuNSAtMTM2LjV0MTM2LjUgLTU2LjV0MTM2LjUgNTYuNXQ1Ni41IDEzNi41ek04NTAgNTM5cTAgLTExNiAtODEuNSAtMTk3LjV0LTE5Ni41IC04MS41cS0xMTYgMCAtMTk3LjUgODJ0LTgxLjUgMTk3CnQ4MiAxOTYuNXQxOTcgODEuNXQxOTYuNSAtODEuNXQ4MS41IC0xOTYuNXpNMjAwNCA1NDBxMCAtMTE1IC04MS41IC0xOTYuNXQtMTk3LjUgLTgxLjVxLTExNSAwIC0xOTYuNSA4MS41dC04MS41IDE5Ni41dDgxLjUgMTk2LjV0MTk2LjUgODEuNXExMTYgMCAxOTcuNSAtODEuNXQ4MS41IC0xOTYuNXpNMTA0MCA1MzdxMCAxOTEgLTEzNS41IDMyNi41dC0zMjYuNSAxMzUuNXEtMTI1IDAgLTIzMSAtNjJ0LTE2OCAtMTY4LjV0LTYyIC0yMzEuNQp0NjIgLTIzMS41dDE2OCAtMTY4LjV0MjMxIC02MnExOTEgMCAzMjYuNSAxMzUuNXQxMzUuNSAzMjYuNXpNMTcwOCAxMTEwcS0yNTQgMTExIC01NTYgMTExcS0zMTkgMCAtNTczIC0xMTBxMTE3IDAgMjIzIC00NS41dDE4Mi41IC0xMjIuNXQxMjIgLTE4M3Q0NS41IC0yMjNxMCAxMTUgNDMuNSAyMTkuNXQxMTggMTgwLjV0MTc3LjUgMTIzdDIxNyA1MHpNMjE4NyA1MzdxMCAxOTEgLTEzNSAzMjYuNXQtMzI2IDEzNS41dC0zMjYuNSAtMTM1LjUKdC0xMzUuNSAtMzI2LjV0MTM1LjUgLTMyNi41dDMyNi41IC0xMzUuNXQzMjYgMTM1LjV0MTM1IDMyNi41ek0xOTIxIDExMDNoMzgzcS00NCAtNTEgLTc1IC0xMTQuNXQtNDAgLTExNC41cTExMCAtMTUxIDExMCAtMzM3cTAgLTE1NiAtNzcgLTI4OHQtMjA5IC0yMDguNXQtMjg3IC03Ni41cS0xMzMgMCAtMjQ5IDU2dC0xOTYgMTU1cS00NyAtNTYgLTEyOSAtMTc5cS0xMSAyMiAtNTMuNSA4Mi41dC03NC41IDk3LjUKcS04MCAtOTkgLTE5Ni41IC0xNTUuNXQtMjQ5LjUgLTU2LjVxLTE1NSAwIC0yODcgNzYuNXQtMjA5IDIwOC41dC03NyAyODhxMCAxODYgMTEwIDMzN3EtOSA1MSAtNDAgMTE0LjV0LTc1IDExNC41aDM2NXExNDkgMTAwIDM1NSAxNTYuNXQ0MzIgNTYuNXEyMjQgMCA0MjEgLTU2dDM0OCAtMTU3eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJmMjYzIiB1bmljb2RlPSImI3hmMjYzOyIgaG9yaXotYWR2LXg9IjEyODAiIApkPSJNNjQwIDYyOXEtMTg4IDAgLTMyMSAxMzN0LTEzMyAzMjBxMCAxODggMTMzIDMyMXQzMjEgMTMzdDMyMSAtMTMzdDEzMyAtMzIxcTAgLTE4NyAtMTMzIC0zMjB0LTMyMSAtMTMzek02NDAgMTMwNnEtOTIgMCAtMTU3LjUgLTY1LjV0LTY1LjUgLTE1OC41cTAgLTkyIDY1LjUgLTE1Ny41dDE1Ny41IC02NS41dDE1Ny41IDY1LjV0NjUuNSAxNTcuNXEwIDkzIC02NS41IDE1OC41dC0xNTcuNSA2NS41ek0xMTYzIDU3NHExMyAtMjcgMTUgLTQ5LjUKdC00LjUgLTQwLjV0LTI2LjUgLTM4LjV0LTQyLjUgLTM3dC02MS41IC00MS41cS0xMTUgLTczIC0zMTUgLTk0bDczIC03MmwyNjcgLTI2N3EzMCAtMzEgMzAgLTc0dC0zMCAtNzNsLTEyIC0xM3EtMzEgLTMwIC03NCAtMzB0LTc0IDMwcS02NyA2OCAtMjY3IDI2OGwtMjY3IC0yNjhxLTMxIC0zMCAtNzQgLTMwdC03MyAzMGwtMTIgMTNxLTMxIDMwIC0zMSA3M3QzMSA3NGwyNjcgMjY3bDcyIDcycS0yMDMgMjEgLTMxNyA5NApxLTM5IDI1IC02MS41IDQxLjV0LTQyLjUgMzd0LTI2LjUgMzguNXQtNC41IDQwLjV0MTUgNDkuNXExMCAyMCAyOCAzNXQ0MiAyMnQ1NiAtMnQ2NSAtMzVxNSAtNCAxNSAtMTF0NDMgLTI0LjV0NjkgLTMwLjV0OTIgLTI0dDExMyAtMTFxOTEgMCAxNzQgMjUuNXQxMjAgNTAuNWwzOCAyNXEzMyAyNiA2NSAzNXQ1NiAydDQyIC0yMnQyOCAtMzV6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9Il81NzQiIHVuaWNvZGU9IiYjeGYyNjQ7IiAKZD0iTTkyNyA5NTZxMCAtNjYgLTQ2LjUgLTExMi41dC0xMTIuNSAtNDYuNXQtMTEyLjUgNDYuNXQtNDYuNSAxMTIuNXQ0Ni41IDExMi41dDExMi41IDQ2LjV0MTEyLjUgLTQ2LjV0NDYuNSAtMTEyLjV6TTExNDEgNTkzcS0xMCAyMCAtMjggMzJ0LTQ3LjUgOS41dC02MC41IC0yNy41cS0xMCAtOCAtMjkgLTIwdC04MSAtMzJ0LTEyNyAtMjB0LTEyNCAxOHQtODYgMzZsLTI3IDE4cS0zMSAyNSAtNjAuNSAyNy41dC00Ny41IC05LjV0LTI4IC0zMgpxLTIyIC00NSAtMiAtNzQuNXQ4NyAtNzMuNXE4MyAtNTMgMjI2IC02N2wtNTEgLTUycS0xNDIgLTE0MiAtMTkxIC0xOTBxLTIyIC0yMiAtMjIgLTUyLjV0MjIgLTUyLjVsOSAtOXEyMiAtMjIgNTIuNSAtMjJ0NTIuNSAyMmwxOTEgMTkxcTExNCAtMTE1IDE5MSAtMTkxcTIyIC0yMiA1Mi41IC0yMnQ1Mi41IDIybDkgOXEyMiAyMiAyMiA1Mi41dC0yMiA1Mi41bC0xOTEgMTkwbC01MiA1MnExNDEgMTQgMjI1IDY3cTY3IDQ0IDg3IDczLjV0LTIgNzQuNQp6TTEwOTIgOTU2cTAgMTM0IC05NSAyMjl0LTIyOSA5NXQtMjI5IC05NXQtOTUgLTIyOXQ5NSAtMjI5dDIyOSAtOTV0MjI5IDk1dDk1IDIyOXpNMTUzNiAxMTIwdi05NjBxMCAtMTE5IC04NC41IC0yMDMuNXQtMjAzLjUgLTg0LjVoLTk2MHEtMTE5IDAgLTIwMy41IDg0LjV0LTg0LjUgMjAzLjV2OTYwcTAgMTE5IDg0LjUgMjAzLjV0MjAzLjUgODQuNWg5NjBxMTE5IDAgMjAzLjUgLTg0LjV0ODQuNSAtMjAzLjV6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9Il81NzUiIHVuaWNvZGU9IiYjeGYyNjU7IiBob3Jpei1hZHYteD0iMTcyMCIgCmQ9Ik0xNTY1IDE0MDhxNjUgMCAxMTAgLTQ1LjV0NDUgLTExMC41di01MTlxMCAtMTc2IC02OCAtMzM2dC0xODIuNSAtMjc1dC0yNzQgLTE4Mi41dC0zMzQuNSAtNjcuNXEtMTc2IDAgLTMzNS41IDY3LjV0LTI3NC41IDE4Mi41dC0xODMgMjc1dC02OCAzMzZ2NTE5cTAgNjQgNDYgMTEwdDExMCA0NmgxNDA5ek04NjEgMzQ0cTQ3IDAgODIgMzNsNDA0IDM4OHEzNyAzNSAzNyA4NXEwIDQ5IC0zNC41IDgzLjV0LTgzLjUgMzQuNXEtNDcgMCAtODIgLTMzCmwtMzIzIC0zMTBsLTMyMyAzMTBxLTM1IDMzIC04MSAzM3EtNDkgMCAtODMuNSAtMzQuNXQtMzQuNSAtODMuNXEwIC01MSAzNiAtODVsNDA1IC0zODhxMzMgLTMzIDgxIC0zM3oiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzU3NiIgdW5pY29kZT0iJiN4ZjI2NjsiIGhvcml6LWFkdi14PSIyMzA0IiAKZD0iTTE0OTQgLTEwM2wtMjk1IDY5NXEtMjUgLTQ5IC0xNTguNSAtMzA1LjV0LTE5OC41IC0zODkuNXEtMSAtMSAtMjcuNSAtMC41dC0yNi41IDEuNXEtODIgMTkzIC0yNTUuNSA1ODd0LTI1OS41IDU5NnEtMjEgNTAgLTY2LjUgMTA3LjV0LTEwMy41IDEwMC41dC0xMDIgNDNxMCA1IC0wLjUgMjR0LTAuNSAyN2g1ODN2LTUwcS0zOSAtMiAtNzkuNSAtMTZ0LTY2LjUgLTQzdC0xMCAtNjRxMjYgLTU5IDIxNi41IC00OTl0MjM1LjUgLTU0MApxMzEgNjEgMTQwIDI2Ni41dDEzMSAyNDcuNXEtMTkgMzkgLTEyNiAyODF0LTEzNiAyOTVxLTM4IDY5IC0yMDEgNzF2NTBsNTEzIC0xdi00N3EtNjAgLTIgLTkzLjUgLTI1dC0xMi41IC02OXEzMyAtNzAgODcgLTE4OS41dDg2IC0xODcuNXExMTAgMjE0IDE3MyAzNjNxMjQgNTUgLTEwIDc5LjV0LTEyOSAyNi41cTEgNyAxIDI1djI0cTY0IDAgMTcwLjUgMC41dDE4MCAxdDkyLjUgMC41di00OXEtNjIgLTIgLTExOSAtMzN0LTkwIC04MQpsLTIxMyAtNDQycTEzIC0zMyAxMjcuNSAtMjkwdDEyMS41IC0yNzRsNDQxIDEwMTdxLTE0IDM4IC00OS41IDYyLjV0LTY1IDMxLjV0LTU1LjUgOHY1MGw0NjAgLTRsMSAtMmwtMSAtNDRxLTEzOSAtNCAtMjAxIC0xNDVxLTUyNiAtMTIxNiAtNTU5IC0xMjkxaC00OXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzU3NyIgdW5pY29kZT0iJiN4ZjI2NzsiIGhvcml6LWFkdi14PSIxNzkyIiAKZD0iTTk0OSA2NDNxMCAtMjYgLTE2LjUgLTQ1dC00MS41IC0xOXEtMjYgMCAtNDUgMTYuNXQtMTkgNDEuNXEwIDI2IDE3IDQ1dDQyIDE5dDQ0IC0xNi41dDE5IC00MS41ek05NjQgNTg1bDM1MCA1ODFxLTkgLTggLTY3LjUgLTYyLjV0LTEyNS41IC0xMTYuNXQtMTM2LjUgLTEyN3QtMTE3IC0xMTAuNXQtNTAuNSAtNTEuNWwtMzQ5IC01ODBxNyA3IDY3IDYydDEyNiAxMTYuNXQxMzYgMTI3dDExNyAxMTF0NTAgNTAuNXpNMTYxMSA2NDAKcTAgLTIwMSAtMTA0IC0zNzFxLTMgMiAtMTcgMTF0LTI2LjUgMTYuNXQtMTYuNSA3LjVxLTEzIDAgLTEzIC0xM3EwIC0xMCA1OSAtNDRxLTc0IC0xMTIgLTE4NC41IC0xOTAuNXQtMjQxLjUgLTExMC41bC0xNiA2N3EtMSAxMCAtMTUgMTBxLTUgMCAtOCAtNS41dC0yIC05LjVsMTYgLTY4cS03MiAtMTUgLTE0NiAtMTVxLTE5OSAwIC0zNzIgMTA1cTEgMiAxMyAyMC41dDIxLjUgMzMuNXQ5LjUgMTlxMCAxMyAtMTMgMTNxLTYgMCAtMTcgLTE0LjUKdC0yMi41IC0zNC41dC0xMy41IC0yM3EtMTEzIDc1IC0xOTIgMTg3LjV0LTExMCAyNDQuNWw2OSAxNXExMCAzIDEwIDE1cTAgNSAtNS41IDh0LTEwLjUgMmwtNjggLTE1cS0xNCA3MiAtMTQgMTM5cTAgMjA2IDEwOSAzNzlxMiAtMSAxOC41IC0xMnQzMCAtMTl0MTcuNSAtOHExMyAwIDEzIDEycTAgNiAtMTIuNSAxNS41dC0zMi41IDIxLjVsLTIwIDEycTc3IDExMiAxODkgMTg5dDI0NCAxMDdsMTUgLTY3cTIgLTEwIDE1IC0xMHE1IDAgOCA1LjUKdDIgMTAuNWwtMTUgNjZxNzEgMTMgMTM0IDEzcTIwNCAwIDM3OSAtMTA5cS0zOSAtNTYgLTM5IC02NXEwIC0xMyAxMiAtMTNxMTEgMCA0OCA2NHExMTEgLTc1IDE4Ny41IC0xODZ0MTA3LjUgLTI0MWwtNTYgLTEycS0xMCAtMiAtMTAgLTE2cTAgLTUgNS41IC04dDkuNSAtMmw1NyAxM3ExNCAtNzIgMTQgLTE0MHpNMTY5NiA2NDBxMCAxNjMgLTYzLjUgMzExdC0xNzAuNSAyNTV0LTI1NSAxNzAuNXQtMzExIDYzLjV0LTMxMSAtNjMuNQp0LTI1NSAtMTcwLjV0LTE3MC41IC0yNTV0LTYzLjUgLTMxMXQ2My41IC0zMTF0MTcwLjUgLTI1NXQyNTUgLTE3MC41dDMxMSAtNjMuNXQzMTEgNjMuNXQyNTUgMTcwLjV0MTcwLjUgMjU1dDYzLjUgMzExek0xNzkyIDY0MHEwIC0xODIgLTcxIC0zNDh0LTE5MSAtMjg2dC0yODYgLTE5MXQtMzQ4IC03MXQtMzQ4IDcxdC0yODYgMTkxdC0xOTEgMjg2dC03MSAzNDh0NzEgMzQ4dDE5MSAyODZ0Mjg2IDE5MXQzNDggNzF0MzQ4IC03MXQyODYgLTE5MQp0MTkxIC0yODZ0NzEgLTM0OHoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzU3OCIgdW5pY29kZT0iJiN4ZjI2ODsiIGhvcml6LWFkdi14PSIxNzkyIiAKZD0iTTg5MyAxNTM2cTI0MCAyIDQ1MSAtMTIwcTIzMiAtMTM0IDM1MiAtMzcybC03NDIgMzlxLTE2MCA5IC0yOTQgLTc0LjV0LTE4NSAtMjI5LjVsLTI3NiA0MjRxMTI4IDE1OSAzMTEgMjQ1LjV0MzgzIDg3LjV6TTE0NiAxMTMxbDMzNyAtNjYzcTcyIC0xNDMgMjExIC0yMTd0MjkzIC00NWwtMjMwIC00NTFxLTIxMiAzMyAtMzg1IDE1Ny41dC0yNzIuNSAzMTZ0LTk5LjUgNDExLjVxMCAyNjcgMTQ2IDQ5MXpNMTczMiA5NjIKcTU4IC0xNTAgNTkuNSAtMzEwLjV0LTQ4LjUgLTMwNnQtMTUzIC0yNzJ0LTI0NiAtMjA5LjVxLTIzMCAtMTMzIC00OTggLTExOWw0MDUgNjIzcTg4IDEzMSA4Mi41IDI5MC41dC0xMDYuNSAyNzcuNXpNODk2IDk0MnExMjUgMCAyMTMuNSAtODguNXQ4OC41IC0yMTMuNXQtODguNSAtMjEzLjV0LTIxMy41IC04OC41dC0yMTMuNSA4OC41dC04OC41IDIxMy41dDg4LjUgMjEzLjV0MjEzLjUgODguNXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzU3OSIgdW5pY29kZT0iJiN4ZjI2OTsiIGhvcml6LWFkdi14PSIxNzkyIiAKZD0iTTkwMyAtMjU2cS0yODMgMCAtNTA0LjUgMTUwLjV0LTMyOS41IDM5OC41cS01OCAxMzEgLTY3IDMwMXQyNiAzMzIuNXQxMTEgMzEydDE3OSAyNDIuNWwtMTEgLTI4MXExMSAxNCA2OCAxNS41dDcwIC0xNS41cTQyIDgxIDE2MC41IDEzOHQyMzQuNSA1OXEtNTQgLTQ1IC0xMTkuNSAtMTQ4LjV0LTU4LjUgLTE2My41cTI1IC04IDYyLjUgLTEzLjV0NjMgLTcuNXQ2OCAtNHQ1MC41IC0zcTE1IC01IDkuNSAtNDUuNXQtMzAuNSAtNzUuNQpxLTUgLTcgLTE2LjUgLTE4LjV0LTU2LjUgLTM1LjV0LTEwMSAtMzRsMTUgLTE4OWwtMTM5IDY3cS0xOCAtNDMgLTcuNSAtODEuNXQzNiAtNjYuNXQ2NS41IC00MS41dDgxIC02LjVxNTEgOSA5OCAzNC41dDgzLjUgNDV0NzMuNSAxNy41cTYxIC00IDg5LjUgLTMzdDE5LjUgLTY1cS0xIC0yIC0yLjUgLTUuNXQtOC41IC0xMi41dC0xOCAtMTUuNXQtMzEuNSAtMTAuNXQtNDYuNSAtMXEtNjAgLTk1IC0xNDQuNSAtMTM1LjV0LTIwOS41IC0yOS41CnE3NCAtNjEgMTYyLjUgLTgyLjV0MTY4LjUgLTZ0MTU0LjUgNTJ0MTI4IDg3LjV0ODAuNSAxMDRxNDMgOTEgMzkgMTkyLjV0LTM3LjUgMTg4LjV0LTc4LjUgMTI1cTg3IC0zOCAxMzcgLTc5LjV0NzcgLTExMi41cTE1IDE3MCAtNTcuNSAzNDN0LTIwOS41IDI4NHEyNjUgLTc3IDQxMiAtMjc5LjV0MTUxIC01MTcuNXEyIC0xMjcgLTQwLjUgLTI1NXQtMTIzLjUgLTIzOHQtMTg5IC0xOTZ0LTI0Ny41IC0xMzUuNXQtMjg4LjUgLTQ5LjV6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9Il81ODAiIHVuaWNvZGU9IiYjeGYyNmE7IiBob3Jpei1hZHYteD0iMTc5MiIgCmQ9Ik0xNDkzIDEzMDhxLTE2NSAxMTAgLTM1OSAxMTBxLTE1NSAwIC0yOTMgLTczdC0yNDAgLTIwMHEtNzUgLTkzIC0xMTkuNSAtMjE4dC00OC41IC0yNjZ2LTQycTQgLTE0MSA0OC41IC0yNjZ0MTE5LjUgLTIxOHExMDIgLTEyNyAyNDAgLTIwMHQyOTMgLTczcTE5NCAwIDM1OSAxMTBxLTEyMSAtMTA4IC0yNzQuNSAtMTY4dC0zMjIuNSAtNjBxLTI5IDAgLTQzIDFxLTE3NSA4IC0zMzMgODJ0LTI3MiAxOTN0LTE4MSAyODF0LTY3IDMzOQpxMCAxODIgNzEgMzQ4dDE5MSAyODZ0Mjg2IDE5MXQzNDggNzFoM3ExNjggLTEgMzIwLjUgLTYwLjV0MjczLjUgLTE2Ny41ek0xNzkyIDY0MHEwIC0xOTIgLTc3IC0zNjIuNXQtMjEzIC0yOTYuNXEtMTA0IC02MyAtMjIyIC02M3EtMTM3IDAgLTI1NSA4NHExNTQgNTYgMjUzLjUgMjMzdDk5LjUgNDA1cTAgMjI3IC05OSA0MDR0LTI1MyAyMzRxMTE5IDgzIDI1NCA4M3ExMTkgMCAyMjYgLTY1cTEzNSAtMTI1IDIxMC41IC0yOTV0NzUuNSAtMzYxegoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzU4MSIgdW5pY29kZT0iJiN4ZjI2YjsiIGhvcml6LWFkdi14PSIxNzkyIiAKZD0iTTE3OTIgNTk5cTAgLTU2IC03IC0xMDRoLTExNTFxMCAtMTQ2IDEwOS41IC0yNDQuNXQyNTcuNSAtOTguNXE5OSAwIDE4NS41IDQ2LjV0MTM2LjUgMTMwLjVoNDIzcS01NiAtMTU5IC0xNzAuNSAtMjgxdC0yNjcuNSAtMTg4LjV0LTMyMSAtNjYuNXEtMTg3IDAgLTM1NiA4M3EtMjI4IC0xMTYgLTM5NCAtMTE2cS0yMzcgMCAtMjM3IDI2M3EwIDExNSA0NSAyNzVxMTcgNjAgMTA5IDIyOXExOTkgMzYwIDQ3NSA2MDYKcS0xODQgLTc5IC00MjcgLTM1NHE2MyAyNzQgMjgzLjUgNDQ5LjV0NTAxLjUgMTc1LjVxMzAgMCA0NSAtMXEyNTUgMTE3IDQzMyAxMTdxNjQgMCAxMTYgLTEzdDk0LjUgLTQwLjV0NjYuNSAtNzYuNXQyNCAtMTE1cTAgLTExNiAtNzUgLTI4NnExMDEgLTE4MiAxMDEgLTM5MHpNMTcyMiAxMjM5cTAgODMgLTUzIDEzMnQtMTM3IDQ5cS0xMDggMCAtMjU0IC03MHExMjEgLTQ3IDIyMi41IC0xMzEuNXQxNzAuNSAtMTk1LjVxNTEgMTM1IDUxIDIxNnoKTTEyOCAycTAgLTg2IDQ4LjUgLTEzMi41dDEzNC41IC00Ni41cTExNSAwIDI2NiA4M3EtMTIyIDcyIC0yMTMuNSAxODN0LTEzNy41IDI0NXEtOTggLTIwNSAtOTggLTMzMnpNNjMyIDcxNWg3MjhxLTUgMTQyIC0xMTMgMjM3dC0yNTEgOTVxLTE0NCAwIC0yNTEuNSAtOTV0LTExMi41IC0yMzd6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9Il81ODIiIHVuaWNvZGU9IiYjeGYyNmM7IiBob3Jpei1hZHYteD0iMjA0OCIgCmQ9Ik0xNzkyIDI4OHY5NjBxMCAxMyAtOS41IDIyLjV0LTIyLjUgOS41aC0xNjAwcS0xMyAwIC0yMi41IC05LjV0LTkuNSAtMjIuNXYtOTYwcTAgLTEzIDkuNSAtMjIuNXQyMi41IC05LjVoMTYwMHExMyAwIDIyLjUgOS41dDkuNSAyMi41ek0xOTIwIDEyNDh2LTk2MHEwIC02NiAtNDcgLTExM3QtMTEzIC00N2gtNzM2di0xMjhoMzUycTE0IDAgMjMgLTl0OSAtMjN2LTY0cTAgLTE0IC05IC0yM3QtMjMgLTloLTgzMnEtMTQgMCAtMjMgOXQtOSAyMwp2NjRxMCAxNCA5IDIzdDIzIDloMzUydjEyOGgtNzM2cS02NiAwIC0xMTMgNDd0LTQ3IDExM3Y5NjBxMCA2NiA0NyAxMTN0MTEzIDQ3aDE2MDBxNjYgMCAxMTMgLTQ3dDQ3IC0xMTN6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9Il81ODMiIHVuaWNvZGU9IiYjeGYyNmQ7IiBob3Jpei1hZHYteD0iMTc5MiIgCmQ9Ik0xMzggMTQwOGgxOTdxLTcwIC02NCAtMTI2IC0xNDlxLTM2IC01NiAtNTkgLTExNXQtMzAgLTEyNS41dC04LjUgLTEyMHQxMC41IC0xMzJ0MjEgLTEyNnQyOCAtMTM2LjVxNCAtMTkgNiAtMjhxNTEgLTIzOCA4MSAtMzI5cTU3IC0xNzEgMTUyIC0yNzVoLTI3MnEtNDggMCAtODIgMzR0LTM0IDgydjEzMDRxMCA0OCAzNCA4MnQ4MiAzNHpNMTM0NiAxNDA4aDMwOHE0OCAwIDgyIC0zNHQzNCAtODJ2LTEzMDRxMCAtNDggLTM0IC04MnQtODIgLTM0CmgtMTc4cTIxMiAyMTAgMTk2IDU2NWwtNDY5IC0xMDFxLTIgLTQ1IC0xMiAtODJ0LTMxIC03MnQtNTkuNSAtNTkuNXQtOTMuNSAtMzYuNXEtMTIzIC0yNiAtMTk5IDQwcS0zMiAyNyAtNTMgNjF0LTUxLjUgMTI5dC02NC41IDI1OHEtMzUgMTYzIC00NS41IDI2M3QtNS41IDEzOXQyMyA3N3EyMCA0MSA2Mi41IDczdDEwMi41IDQ1cTQ1IDEyIDgzLjUgNi41dDY3IC0xN3Q1NCAtMzV0NDMgLTQ4dDM0LjUgLTU2LjVsNDY4IDEwMApxLTY4IDE3NSAtMTgwIDI4N3oiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzU4NCIgdW5pY29kZT0iJiN4ZjI2ZTsiIApkPSJNMTQwMSAtMTFsLTYgLTZxLTExMyAtMTEzIC0yNTkgLTE3NXEtMTU0IC02NCAtMzE3IC02NHEtMTY1IDAgLTMxNyA2NHEtMTQ4IDYzIC0yNTkgMTc1cS0xMTMgMTEyIC0xNzUgMjU4cS00MiAxMDMgLTU0IDE4OXEtNCAyOCA0OCAzNnE1MSA4IDU2IC0yMHExIC0xIDEgLTRxMTggLTkwIDQ2IC0xNTlxNTAgLTEyNCAxNTIgLTIyNnE5OCAtOTggMjI2IC0xNTJxMTMyIC01NiAyNzYgLTU2cTE0MyAwIDI3NiA1NnExMjggNTUgMjI1IDE1Mmw2IDYKcTEwIDEwIDI1IDZxMTIgLTMgMzMgLTIycTM2IC0zNyAxNyAtNTh6TTkyOSA2MDRsLTY2IC02Nmw2MyAtNjNxMjEgLTIxIC03IC00OXEtMTcgLTE3IC0zMiAtMTdxLTEwIDAgLTE5IDEwbC02MiA2MWwtNjYgLTY2cS01IC01IC0xNSAtNXEtMTUgMCAtMzEgMTZsLTIgMnEtMTggMTUgLTE4IDI5cTAgNyA4IDE3bDY2IDY1bC02NiA2NnEtMTYgMTYgMTQgNDVxMTggMTggMzEgMThxNiAwIDEzIC01bDY1IC02Nmw2NSA2NXExOCAxNyA0OCAtMTMKcTI3IC0yNyAxMSAtNDR6TTE0MDAgNTQ3cTAgLTExOCAtNDYgLTIyOHEtNDUgLTEwNSAtMTI2IC0xODZxLTgwIC04MCAtMTg3IC0xMjZ0LTIyOCAtNDZ0LTIyOCA0NnQtMTg3IDEyNnEtODIgODIgLTEyNSAxODZxLTE1IDMzIC0xNSA0MGgtMXEtOSAyNyA0MyA0NHE1MCAxNiA2MCAtMTJxMzcgLTk5IDk3IC0xNjdoMXYzMzl2MnEzIDEzNiAxMDIgMjMycTEwNSAxMDMgMjUzIDEwM3ExNDcgMCAyNTEgLTEwM3QxMDQgLTI0OQpxMCAtMTQ3IC0xMDQuNSAtMjUxdC0yNTAuNSAtMTA0cS01OCAwIC0xMTIgMTZxLTI4IDExIC0xMyA2MXExNiA1MSA0NCA0M2wxNCAtM3ExNCAtMyAzMyAtNnQzMCAtM3ExMDQgMCAxNzYgNzEuNXQ3MiAxNzQuNXEwIDEwMSAtNzIgMTcxcS03MSA3MSAtMTc1IDcxcS0xMDcgMCAtMTc4IC04MHEtNjQgLTcyIC02NCAtMTYwdi00MTNxMTEwIC02NyAyNDIgLTY3cTk2IDAgMTg1IDM2LjV0MTU2IDEwMy41dDEwMy41IDE1NXQzNi41IDE4MwpxMCAxOTggLTE0MSAzMzlxLTE0MCAxNDAgLTMzOSAxNDBxLTIwMCAwIC0zNDAgLTE0MHEtNTMgLTUzIC03NyAtODdsLTIgLTJxLTggLTExIC0xMyAtMTUuNXQtMjEuNSAtOS41dC0zOC41IDNxLTIxIDUgLTM2LjUgMTYuNXQtMTUuNSAyNi41djY4MHEwIDE1IDEwLjUgMjYuNXQyNy41IDExLjVoODc3cTMwIDAgMzAgLTU1dC0zMCAtNTVoLTgxMXYtNDgzaDFxNDAgNDIgMTAyIDg0dDEwOCA2MXExMDkgNDYgMjMxIDQ2cTEyMSAwIDIyOCAtNDYKdDE4NyAtMTI2cTgxIC04MSAxMjYgLTE4NnE0NiAtMTEyIDQ2IC0yMjl6TTEzNjkgMTEyOHE5IC04IDkgLTE4dC01LjUgLTE4dC0xNi41IC0yMXEtMjYgLTI2IC0zOSAtMjZxLTkgMCAtMTYgN3EtMTA2IDkxIC0yMDcgMTMzcS0xMjggNTYgLTI3NiA1NnEtMTMzIDAgLTI2MiAtNDlxLTI3IC0xMCAtNDUgMzdxLTkgMjUgLTggMzhxMyAxNiAxNiAyMHExMzAgNTcgMjk5IDU3cTE2NCAwIDMxNiAtNjRxMTM3IC01OCAyMzUgLTE1MnoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzU4NSIgdW5pY29kZT0iJiN4ZjI3MDsiIGhvcml6LWFkdi14PSIxNzkyIiAKZD0iTTE1NTEgNjBxMTUgNiAyNiAzdDExIC0xNy41dC0xNSAtMzMuNXEtMTMgLTE2IC00NCAtNDMuNXQtOTUuNSAtNjh0LTE0MSAtNzR0LTE4OCAtNTh0LTIyOS41IC0yNC41cS0xMTkgMCAtMjM4IDMxdC0yMDkgNzYuNXQtMTcyLjUgMTA0dC0xMzIuNSAxMDV0LTg0IDg3LjVxLTggOSAtMTAgMTYuNXQxIDEydDggN3QxMS41IDJ0MTEuNSAtNC41cTE5MiAtMTE3IDMwMCAtMTY2cTM4OSAtMTc2IDc5OSAtOTBxMTkwIDQwIDM5MSAxMzV6Ck0xNzU4IDE3NXExMSAtMTYgMi41IC02OS41dC0yOC41IC0xMDIuNXEtMzQgLTgzIC04NSAtMTI0cS0xNyAtMTQgLTI2IC05dDAgMjRxMjEgNDUgNDQuNSAxMjEuNXQ2LjUgOTguNXEtNSA3IC0xNS41IDExLjV0LTI3IDZ0LTI5LjUgMi41dC0zNSAwdC0zMS41IC0ydC0zMSAtM3QtMjIuNSAtMnEtNiAtMSAtMTMgLTEuNXQtMTEgLTF0LTguNSAtMXQtNyAtMC41aC01LjVoLTQuNXQtMyAwLjV0LTIgMS41bC0xLjUgM3EtNiAxNiA0NyA0MHQxMDMgMzAKcTQ2IDcgMTA4IDF0NzYgLTI0ek0xMzY0IDYxOHEwIC0zMSAxMy41IC02NHQzMiAtNTh0MzcuNSAtNDZ0MzMgLTMybDEzIC0xMWwtMjI3IC0yMjRxLTQwIDM3IC03OSA3NS41dC01OCA1OC41bC0xOSAyMHEtMTEgMTEgLTI1IDMzcS0zOCAtNTkgLTk3LjUgLTEwMi41dC0xMjcuNSAtNjMuNXQtMTQwIC0yM3QtMTM3LjUgMjF0LTExNy41IDY1LjV0LTgzIDExM3QtMzEgMTYyLjVxMCA4NCAyOCAxNTR0NzIgMTE2LjV0MTA2LjUgODN0MTIyLjUgNTcKdDEzMCAzNC41dDExOS41IDE4LjV0OTkuNSA2LjV2MTI3cTAgNjUgLTIxIDk3cS0zNCA1MyAtMTIxIDUzcS02IDAgLTE2LjUgLTF0LTQwLjUgLTEydC01NiAtMjkuNXQtNTYgLTU5LjV0LTQ4IC05NmwtMjk0IDI3cTAgNjAgMjIgMTE5dDY3IDExM3QxMDggOTV0MTUxLjUgNjUuNXQxOTAuNSAyNC41cTEwMCAwIDE4MSAtMjV0MTI5LjUgLTYxLjV0ODEgLTgzdDQ1IC04NnQxMi41IC03My41di01ODl6TTY5MiA1OTdxMCAtODYgNzAgLTEzMwpxNjYgLTQ0IDEzOSAtMjJxODQgMjUgMTE0IDEyM3ExNCA0NSAxNCAxMDF2MTYycS01OSAtMiAtMTExIC0xMnQtMTA2LjUgLTMzLjV0LTg3IC03MXQtMzIuNSAtMTE0LjV6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9Il81ODYiIHVuaWNvZGU9IiYjeGYyNzE7IiBob3Jpei1hZHYteD0iMTc5MiIgCmQ9Ik0xNTM2IDEyODBxNTIgMCA5MCAtMzh0MzggLTkwdi0xMjgwcTAgLTUyIC0zOCAtOTB0LTkwIC0zOGgtMTQwOHEtNTIgMCAtOTAgMzh0LTM4IDkwdjEyODBxMCA1MiAzOCA5MHQ5MCAzOGgxMjh2OTZxMCA2NiA0NyAxMTN0MTEzIDQ3aDY0cTY2IDAgMTEzIC00N3Q0NyAtMTEzdi05NmgzODR2OTZxMCA2NiA0NyAxMTN0MTEzIDQ3aDY0cTY2IDAgMTEzIC00N3Q0NyAtMTEzdi05NmgxMjh6TTExNTIgMTM3NnYtMjg4cTAgLTE0IDkgLTIzdDIzIC05Cmg2NHExNCAwIDIzIDl0OSAyM3YyODhxMCAxNCAtOSAyM3QtMjMgOWgtNjRxLTE0IDAgLTIzIC05dC05IC0yM3pNMzg0IDEzNzZ2LTI4OHEwIC0xNCA5IC0yM3QyMyAtOWg2NHExNCAwIDIzIDl0OSAyM3YyODhxMCAxNCAtOSAyM3QtMjMgOWgtNjRxLTE0IDAgLTIzIC05dC05IC0yM3pNMTUzNiAtMTI4djEwMjRoLTE0MDh2LTEwMjRoMTQwOHpNODk2IDQ0OGgyMjRxMTQgMCAyMyAtOXQ5IC0yM3YtNjRxMCAtMTQgLTkgLTIzdC0yMyAtOWgtMjI0CnYtMjI0cTAgLTE0IC05IC0yM3QtMjMgLTloLTY0cS0xNCAwIC0yMyA5dC05IDIzdjIyNGgtMjI0cS0xNCAwIC0yMyA5dC05IDIzdjY0cTAgMTQgOSAyM3QyMyA5aDIyNHYyMjRxMCAxNCA5IDIzdDIzIDloNjRxMTQgMCAyMyAtOXQ5IC0yM3YtMjI0eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNTg3IiB1bmljb2RlPSImI3hmMjcyOyIgaG9yaXotYWR2LXg9IjE3OTIiIApkPSJNMTE1MiA0MTZ2LTY0cTAgLTE0IC05IC0yM3QtMjMgLTloLTU3NnEtMTQgMCAtMjMgOXQtOSAyM3Y2NHEwIDE0IDkgMjN0MjMgOWg1NzZxMTQgMCAyMyAtOXQ5IC0yM3pNMTI4IC0xMjhoMTQwOHYxMDI0aC0xNDA4di0xMDI0ek01MTIgMTA4OHYyODhxMCAxNCAtOSAyM3QtMjMgOWgtNjRxLTE0IDAgLTIzIC05dC05IC0yM3YtMjg4cTAgLTE0IDkgLTIzdDIzIC05aDY0cTE0IDAgMjMgOXQ5IDIzek0xMjgwIDEwODh2Mjg4cTAgMTQgLTkgMjMKdC0yMyA5aC02NHEtMTQgMCAtMjMgLTl0LTkgLTIzdi0yODhxMCAtMTQgOSAtMjN0MjMgLTloNjRxMTQgMCAyMyA5dDkgMjN6TTE2NjQgMTE1MnYtMTI4MHEwIC01MiAtMzggLTkwdC05MCAtMzhoLTE0MDhxLTUyIDAgLTkwIDM4dC0zOCA5MHYxMjgwcTAgNTIgMzggOTB0OTAgMzhoMTI4djk2cTAgNjYgNDcgMTEzdDExMyA0N2g2NHE2NiAwIDExMyAtNDd0NDcgLTExM3YtOTZoMzg0djk2cTAgNjYgNDcgMTEzdDExMyA0N2g2NHE2NiAwIDExMyAtNDcKdDQ3IC0xMTN2LTk2aDEyOHE1MiAwIDkwIC0zOHQzOCAtOTB6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9Il81ODgiIHVuaWNvZGU9IiYjeGYyNzM7IiBob3Jpei1hZHYteD0iMTc5MiIgCmQ9Ik0xMTExIDE1MWwtNDYgLTQ2cS05IC05IC0yMiAtOXQtMjMgOWwtMTg4IDE4OWwtMTg4IC0xODlxLTEwIC05IC0yMyAtOXQtMjIgOWwtNDYgNDZxLTkgOSAtOSAyMnQ5IDIzbDE4OSAxODhsLTE4OSAxODhxLTkgMTAgLTkgMjN0OSAyMmw0NiA0NnE5IDkgMjIgOXQyMyAtOWwxODggLTE4OGwxODggMTg4cTEwIDkgMjMgOXQyMiAtOWw0NiAtNDZxOSAtOSA5IC0yMnQtOSAtMjNsLTE4OCAtMTg4bDE4OCAtMTg4cTkgLTEwIDkgLTIzdC05IC0yMnoKTTEyOCAtMTI4aDE0MDh2MTAyNGgtMTQwOHYtMTAyNHpNNTEyIDEwODh2Mjg4cTAgMTQgLTkgMjN0LTIzIDloLTY0cS0xNCAwIC0yMyAtOXQtOSAtMjN2LTI4OHEwIC0xNCA5IC0yM3QyMyAtOWg2NHExNCAwIDIzIDl0OSAyM3pNMTI4MCAxMDg4djI4OHEwIDE0IC05IDIzdC0yMyA5aC02NHEtMTQgMCAtMjMgLTl0LTkgLTIzdi0yODhxMCAtMTQgOSAtMjN0MjMgLTloNjRxMTQgMCAyMyA5dDkgMjN6TTE2NjQgMTE1MnYtMTI4MApxMCAtNTIgLTM4IC05MHQtOTAgLTM4aC0xNDA4cS01MiAwIC05MCAzOHQtMzggOTB2MTI4MHEwIDUyIDM4IDkwdDkwIDM4aDEyOHY5NnEwIDY2IDQ3IDExM3QxMTMgNDdoNjRxNjYgMCAxMTMgLTQ3dDQ3IC0xMTN2LTk2aDM4NHY5NnEwIDY2IDQ3IDExM3QxMTMgNDdoNjRxNjYgMCAxMTMgLTQ3dDQ3IC0xMTN2LTk2aDEyOHE1MiAwIDkwIC0zOHQzOCAtOTB6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9Il81ODkiIHVuaWNvZGU9IiYjeGYyNzQ7IiBob3Jpei1hZHYteD0iMTc5MiIgCmQ9Ik0xMzAzIDU3MmwtNTEyIC01MTJxLTEwIC05IC0yMyAtOXQtMjMgOWwtMjg4IDI4OHEtOSAxMCAtOSAyM3Q5IDIybDQ2IDQ2cTkgOSAyMiA5dDIzIC05bDIyMCAtMjIwbDQ0NCA0NDRxMTAgOSAyMyA5dDIyIC05bDQ2IC00NnE5IC05IDkgLTIydC05IC0yM3pNMTI4IC0xMjhoMTQwOHYxMDI0aC0xNDA4di0xMDI0ek01MTIgMTA4OHYyODhxMCAxNCAtOSAyM3QtMjMgOWgtNjRxLTE0IDAgLTIzIC05dC05IC0yM3YtMjg4cTAgLTE0IDkgLTIzCnQyMyAtOWg2NHExNCAwIDIzIDl0OSAyM3pNMTI4MCAxMDg4djI4OHEwIDE0IC05IDIzdC0yMyA5aC02NHEtMTQgMCAtMjMgLTl0LTkgLTIzdi0yODhxMCAtMTQgOSAtMjN0MjMgLTloNjRxMTQgMCAyMyA5dDkgMjN6TTE2NjQgMTE1MnYtMTI4MHEwIC01MiAtMzggLTkwdC05MCAtMzhoLTE0MDhxLTUyIDAgLTkwIDM4dC0zOCA5MHYxMjgwcTAgNTIgMzggOTB0OTAgMzhoMTI4djk2cTAgNjYgNDcgMTEzdDExMyA0N2g2NHE2NiAwIDExMyAtNDcKdDQ3IC0xMTN2LTk2aDM4NHY5NnEwIDY2IDQ3IDExM3QxMTMgNDdoNjRxNjYgMCAxMTMgLTQ3dDQ3IC0xMTN2LTk2aDEyOHE1MiAwIDkwIC0zOHQzOCAtOTB6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9Il81OTAiIHVuaWNvZGU9IiYjeGYyNzU7IiBob3Jpei1hZHYteD0iMTc5MiIgCmQ9Ik00NDggMTUzNnEyNiAwIDQ1IC0xOXQxOSAtNDV2LTg5MWw1MzYgNDI5cTE3IDE0IDQwIDE0cTI2IDAgNDUgLTE5dDE5IC00NXYtMzc5bDUzNiA0MjlxMTcgMTQgNDAgMTRxMjYgMCA0NSAtMTl0MTkgLTQ1di0xMTUycTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtMTY2NHEtMjYgMCAtNDUgMTl0LTE5IDQ1djE2NjRxMCAyNiAxOSA0NXQ0NSAxOWgzODR6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9Il81OTEiIHVuaWNvZGU9IiYjeGYyNzY7IiBob3Jpei1hZHYteD0iMTAyNCIgCmQ9Ik01MTIgNDQ4cTY2IDAgMTI4IDE1di02NTVxMCAtMjYgLTE5IC00NXQtNDUgLTE5aC0xMjhxLTI2IDAgLTQ1IDE5dC0xOSA0NXY2NTVxNjIgLTE1IDEyOCAtMTV6TTUxMiAxNTM2cTIxMiAwIDM2MiAtMTUwdDE1MCAtMzYydC0xNTAgLTM2MnQtMzYyIC0xNTB0LTM2MiAxNTB0LTE1MCAzNjJ0MTUwIDM2MnQzNjIgMTUwek01MTIgMTMxMnExNCAwIDIzIDl0OSAyM3QtOSAyM3QtMjMgOXEtMTQ2IDAgLTI0OSAtMTAzdC0xMDMgLTI0OQpxMCAtMTQgOSAtMjN0MjMgLTl0MjMgOXQ5IDIzcTAgMTE5IDg0LjUgMjAzLjV0MjAzLjUgODQuNXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzU5MiIgdW5pY29kZT0iJiN4ZjI3NzsiIGhvcml6LWFkdi14PSIxNzkyIiAKZD0iTTE3NDUgMTIzOXExMCAtMTAgMTAgLTIzdC0xMCAtMjNsLTE0MSAtMTQxcS0yOCAtMjggLTY4IC0yOGgtMTM0NHEtMjYgMCAtNDUgMTl0LTE5IDQ1djI1NnEwIDI2IDE5IDQ1dDQ1IDE5aDU3NnY2NHEwIDI2IDE5IDQ1dDQ1IDE5aDEyOHEyNiAwIDQ1IC0xOXQxOSAtNDV2LTY0aDUxMnE0MCAwIDY4IC0yOHpNNzY4IDMyMGgyNTZ2LTUxMnEwIC0yNiAtMTkgLTQ1dC00NSAtMTloLTEyOHEtMjYgMCAtNDUgMTl0LTE5IDQ1djUxMnpNMTYwMCA3NjgKcTI2IDAgNDUgLTE5dDE5IC00NXYtMjU2cTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtMTM0NHEtNDAgMCAtNjggMjhsLTE0MSAxNDFxLTEwIDEwIC0xMCAyM3QxMCAyM2wxNDEgMTQxcTI4IDI4IDY4IDI4aDUxMnYxOTJoMjU2di0xOTJoNTc2eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNTkzIiB1bmljb2RlPSImI3hmMjc4OyIgaG9yaXotYWR2LXg9IjIwNDgiIApkPSJNMjAyMCAxNTI1cTI4IC0yMCAyOCAtNTN2LTE0MDhxMCAtMjAgLTExIC0zNnQtMjkgLTIzbC02NDAgLTI1NnEtMjQgLTExIC00OCAwbC02MTYgMjQ2bC02MTYgLTI0NnEtMTAgLTUgLTI0IC01cS0xOSAwIC0zNiAxMXEtMjggMjAgLTI4IDUzdjE0MDhxMCAyMCAxMSAzNnQyOSAyM2w2NDAgMjU2cTI0IDExIDQ4IDBsNjE2IC0yNDZsNjE2IDI0NnEzMiAxMyA2MCAtNnpNNzM2IDEzOTB2LTEyNzBsNTc2IC0yMzB2MTI3MHpNMTI4IDExNzMKdi0xMjcwbDU0NCAyMTd2MTI3MHpNMTkyMCAxMDd2MTI3MGwtNTQ0IC0yMTd2LTEyNzB6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9Il81OTQiIHVuaWNvZGU9IiYjeGYyNzk7IiBob3Jpei1hZHYteD0iMTc5MiIgCmQ9Ik01MTIgMTUzNnExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV2LTE0NzJxMCAtMjAgLTE3IC0yOGwtNDgwIC0yNTZxLTcgLTQgLTE1IC00cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2MTQ3MnEwIDIwIDE3IDI4bDQ4MCAyNTZxNyA0IDE1IDR6TTE3NjAgMTUzNnExMyAwIDIyLjUgLTkuNXQ5LjUgLTIyLjV2LTE0NzJxMCAtMjAgLTE3IC0yOGwtNDgwIC0yNTZxLTcgLTQgLTE1IC00cS0xMyAwIC0yMi41IDkuNXQtOS41IDIyLjV2MTQ3MgpxMCAyMCAxNyAyOGw0ODAgMjU2cTcgNCAxNSA0ek02NDAgMTUzNnE4IDAgMTQgLTNsNTEyIC0yNTZxMTggLTEwIDE4IC0yOXYtMTQ3MnEwIC0xMyAtOS41IC0yMi41dC0yMi41IC05LjVxLTggMCAtMTQgM2wtNTEyIDI1NnEtMTggMTAgLTE4IDI5djE0NzJxMCAxMyA5LjUgMjIuNXQyMi41IDkuNXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzU5NSIgdW5pY29kZT0iJiN4ZjI3YTsiIGhvcml6LWFkdi14PSIxNzkyIiAKZD0iTTY0MCA2NDBxMCA1MyAtMzcuNSA5MC41dC05MC41IDM3LjV0LTkwLjUgLTM3LjV0LTM3LjUgLTkwLjV0MzcuNSAtOTAuNXQ5MC41IC0zNy41dDkwLjUgMzcuNXQzNy41IDkwLjV6TTEwMjQgNjQwcTAgNTMgLTM3LjUgOTAuNXQtOTAuNSAzNy41dC05MC41IC0zNy41dC0zNy41IC05MC41dDM3LjUgLTkwLjV0OTAuNSAtMzcuNXQ5MC41IDM3LjV0MzcuNSA5MC41ek0xNDA4IDY0MHEwIDUzIC0zNy41IDkwLjV0LTkwLjUgMzcuNQp0LTkwLjUgLTM3LjV0LTM3LjUgLTkwLjV0MzcuNSAtOTAuNXQ5MC41IC0zNy41dDkwLjUgMzcuNXQzNy41IDkwLjV6TTE3OTIgNjQwcTAgLTE3NCAtMTIwIC0zMjEuNXQtMzI2IC0yMzN0LTQ1MCAtODUuNXEtMTEwIDAgLTIxMSAxOHEtMTczIC0xNzMgLTQzNSAtMjI5cS01MiAtMTAgLTg2IC0xM3EtMTIgLTEgLTIyIDZ0LTEzIDE4cS00IDE1IDIwIDM3cTUgNSAyMy41IDIxLjV0MjUuNSAyMy41dDIzLjUgMjUuNXQyNCAzMS41dDIwLjUgMzcKdDIwIDQ4dDE0LjUgNTcuNXQxMi41IDcyLjVxLTE0NiA5MCAtMjI5LjUgMjE2LjV0LTgzLjUgMjY5LjVxMCAxNzQgMTIwIDMyMS41dDMyNiAyMzN0NDUwIDg1LjV0NDUwIC04NS41dDMyNiAtMjMzdDEyMCAtMzIxLjV6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9Il81OTYiIHVuaWNvZGU9IiYjeGYyN2I7IiBob3Jpei1hZHYteD0iMTc5MiIgCmQ9Ik02NDAgNjQwcTAgLTUzIC0zNy41IC05MC41dC05MC41IC0zNy41dC05MC41IDM3LjV0LTM3LjUgOTAuNXQzNy41IDkwLjV0OTAuNSAzNy41dDkwLjUgLTM3LjV0MzcuNSAtOTAuNXpNMTAyNCA2NDBxMCAtNTMgLTM3LjUgLTkwLjV0LTkwLjUgLTM3LjV0LTkwLjUgMzcuNXQtMzcuNSA5MC41dDM3LjUgOTAuNXQ5MC41IDM3LjV0OTAuNSAtMzcuNXQzNy41IC05MC41ek0xNDA4IDY0MHEwIC01MyAtMzcuNSAtOTAuNXQtOTAuNSAtMzcuNQp0LTkwLjUgMzcuNXQtMzcuNSA5MC41dDM3LjUgOTAuNXQ5MC41IDM3LjV0OTAuNSAtMzcuNXQzNy41IC05MC41ek04OTYgMTE1MnEtMjA0IDAgLTM4MS41IC02OS41dC0yODIgLTE4Ny41dC0xMDQuNSAtMjU1cTAgLTExMiA3MS41IC0yMTMuNXQyMDEuNSAtMTc1LjVsODcgLTUwbC0yNyAtOTZxLTI0IC05MSAtNzAgLTE3MnExNTIgNjMgMjc1IDE3MWw0MyAzOGw1NyAtNnE2OSAtOCAxMzAgLThxMjA0IDAgMzgxLjUgNjkuNXQyODIgMTg3LjUKdDEwNC41IDI1NXQtMTA0LjUgMjU1dC0yODIgMTg3LjV0LTM4MS41IDY5LjV6TTE3OTIgNjQwcTAgLTE3NCAtMTIwIC0zMjEuNXQtMzI2IC0yMzN0LTQ1MCAtODUuNXEtNzAgMCAtMTQ1IDhxLTE5OCAtMTc1IC00NjAgLTI0MnEtNDkgLTE0IC0xMTQgLTIyaC01cS0xNSAwIC0yNyAxMC41dC0xNiAyNy41djFxLTMgNCAtMC41IDEydDIgMTB0NC41IDkuNWw2IDl0NyA4LjV0OCA5cTcgOCAzMSAzNC41dDM0LjUgMzh0MzEgMzkuNXQzMi41IDUxCnQyNyA1OXQyNiA3NnEtMTU3IDg5IC0yNDcuNSAyMjB0LTkwLjUgMjgxcTAgMTMwIDcxIDI0OC41dDE5MSAyMDQuNXQyODYgMTM2LjV0MzQ4IDUwLjV0MzQ4IC01MC41dDI4NiAtMTM2LjV0MTkxIC0yMDQuNXQ3MSAtMjQ4LjV6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9Il81OTciIHVuaWNvZGU9IiYjeGYyN2M7IiBob3Jpei1hZHYteD0iMTAyNCIgCmQ9Ik01MTIgMzQ1bDUxMiAyOTV2LTU5MWwtNTEyIC0yOTZ2NTkyek0wIDY0MHYtNTkxbDUxMiAyOTZ6TTUxMiAxNTI3di01OTFsLTUxMiAtMjk2djU5MXpNNTEyIDkzNmw1MTIgMjk1di01OTF6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9Il81OTgiIHVuaWNvZGU9IiYjeGYyN2Q7IiBob3Jpei1hZHYteD0iMTc5MiIgCmQ9Ik0xNzA5IDEwMThxLTEwIC0yMzYgLTMzMiAtNjUxcS0zMzMgLTQzMSAtNTYyIC00MzFxLTE0MiAwIC0yNDAgMjYzcS00NCAxNjAgLTEzMiA0ODJxLTcyIDI2MiAtMTU3IDI2MnEtMTggMCAtMTI3IC03NmwtNzcgOThxMjQgMjEgMTA4IDk2LjV0MTMwIDExNS41cTE1NiAxMzggMjQxIDE0NnE5NSA5IDE1MyAtNTUuNXQ4MSAtMjAzLjVxNDQgLTI4NyA2NiAtMzczcTU1IC0yNDkgMTIwIC0yNDlxNTEgMCAxNTQgMTYxcTEwMSAxNjEgMTA5IDI0NgpxMTMgMTM5IC0xMDkgMTM5cS01NyAwIC0xMjEgLTI2cTEyMCAzOTMgNDU5IDM4MnEyNTEgLTggMjM2IC0zMjZ6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9ImYyN2UiIHVuaWNvZGU9IiYjeGYyN2U7IiAKZD0iTTAgMTQwOGgxNTM2di0xNTM2aC0xNTM2djE1MzZ6TTEwODUgMjkzbC0yMjEgNjMxbDIyMSAyOTdoLTYzNGwyMjEgLTI5N2wtMjIxIC02MzFsMzE3IC0zMDR6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InVuaUYyODAiIHVuaWNvZGU9IiYjeGYyODA7IiAKZD0iTTAgMTQwOGgxNTM2di0xNTM2aC0xNTM2djE1MzZ6TTkwOCAxMDg4bC0xMiAtMzNsNzUgLTgzbC0zMSAtMTE0bDI1IC0yNWwxMDcgNTdsMTA3IC01N2wyNSAyNWwtMzEgMTE0bDc1IDgzbC0xMiAzM2gtOTVsLTUzIDk2aC0zMmwtNTMgLTk2aC05NXpNNjQxIDkyNXEzMiAwIDQ0LjUgLTE2dDExLjUgLTYzbDE3NCAyMXEwIDU1IC0xNy41IDkyLjV0LTUwLjUgNTZ0LTY5IDI1LjV0LTg1IDdxLTEzMyAwIC0xOTkgLTU3LjV0LTY2IC0xODIuNXYtNzIKaC05NnYtMTI4aDc2cTIwIDAgMjAgLTh2LTM4MnEwIC0xNCAtNSAtMjB0LTE4IC03bC03MyAtN3YtODhoNDQ4djg2bC0xNDkgMTRxLTYgMSAtOC41IDEuNXQtMy41IDIuNXQtMC41IDR0MSA3dDAuNSAxMHYzODdoMTkxbDM4IDEyOGgtMjMxcS02IDAgLTIgNnQ0IDl2ODBxMCAyNyAxLjUgNDAuNXQ3LjUgMjh0MTkuNSAyMHQzNi41IDUuNXpNMTI0OCA5NnY4NmwtNTQgOXEtNyAxIC05LjUgMi41dC0yLjUgM3QxIDcuNXQxIDEydjUyMGgtMjc1CmwtMjMgLTEwMWw4MyAtMjJxMjMgLTcgMjMgLTI3di0zNzBxMCAtMTQgLTYgLTE4LjV0LTIwIC02LjVsLTcwIC05di04NmgzNTJ6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InVuaUYyODEiIHVuaWNvZGU9IiYjeGYyODE7IiBob3Jpei1hZHYteD0iMTc5MiIgCmQ9Ik0xNzkyIDY5MHEwIC01OCAtMjkuNSAtMTA1LjV0LTc5LjUgLTcyLjVxMTIgLTQ2IDEyIC05NnEwIC0xNTUgLTEwNi41IC0yODd0LTI5MC41IC0yMDguNXQtNDAwIC03Ni41dC0zOTkuNSA3Ni41dC0yOTAgMjA4LjV0LTEwNi41IDI4N3EwIDQ3IDExIDk0cS01MSAyNSAtODIgNzMuNXQtMzEgMTA2LjVxMCA4MiA1OCAxNDAuNXQxNDEgNTguNXE4NSAwIDE0NSAtNjNxMjE4IDE1MiA1MTUgMTYybDExNiA1MjFxMyAxMyAxNSAyMXQyNiA1CmwzNjkgLTgxcTE4IDM3IDU0IDU5LjV0NzkgMjIuNXE2MiAwIDEwNiAtNDMuNXQ0NCAtMTA1LjV0LTQ0IC0xMDZ0LTEwNiAtNDR0LTEwNS41IDQzLjV0LTQzLjUgMTA1LjVsLTMzNCA3NGwtMTA0IC00NzJxMzAwIC05IDUxOSAtMTYwcTU4IDYxIDE0MyA2MXE4MyAwIDE0MSAtNTguNXQ1OCAtMTQwLjV6TTQxOCA0OTFxMCAtNjIgNDMuNSAtMTA2dDEwNS41IC00NHQxMDYgNDR0NDQgMTA2dC00NCAxMDUuNXQtMTA2IDQzLjVxLTYxIDAgLTEwNSAtNDQKdC00NCAtMTA1ek0xMjI4IDEzNnExMSAxMSAxMSAyNnQtMTEgMjZxLTEwIDEwIC0yNSAxMHQtMjYgLTEwcS00MSAtNDIgLTEyMSAtNjJ0LTE2MCAtMjB0LTE2MCAyMHQtMTIxIDYycS0xMSAxMCAtMjYgMTB0LTI1IC0xMHEtMTEgLTEwIC0xMSAtMjUuNXQxMSAtMjYuNXE0MyAtNDMgMTE4LjUgLTY4dDEyMi41IC0yOS41dDkxIC00LjV0OTEgNC41dDEyMi41IDI5LjV0MTE4LjUgNjh6TTEyMjUgMzQxcTYyIDAgMTA1LjUgNDR0NDMuNSAxMDYKcTAgNjEgLTQ0IDEwNXQtMTA1IDQ0cS02MiAwIC0xMDYgLTQzLjV0LTQ0IC0xMDUuNXQ0NCAtMTA2dDEwNiAtNDR6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9Il82MDIiIHVuaWNvZGU9IiYjeGYyODI7IiBob3Jpei1hZHYteD0iMTc5MiIgCmQ9Ik02OSA3NDFoMXExNiAxMjYgNTguNSAyNDEuNXQxMTUgMjE3dDE2Ny41IDE3NnQyMjMuNSAxMTcuNXQyNzYuNSA0M3EyMzEgMCA0MTQgLTEwNS41dDI5NCAtMzAzLjVxMTA0IC0xODcgMTA0IC00NDJ2LTE4OGgtMTEyNXExIC0xMTEgNTMuNSAtMTkyLjV0MTM2LjUgLTEyMi41dDE4OS41IC01N3QyMTMgLTN0MjA4IDQ2LjV0MTczLjUgODQuNXYtMzc3cS05MiAtNTUgLTIyOS41IC05MnQtMzEyLjUgLTM4dC0zMTYgNTMKcS0xODkgNzMgLTMxMS41IDI0OXQtMTI0LjUgMzcycS0zIDI0MiAxMTEgNDEydDMyNSAyNjhxLTQ4IC02MCAtNzggLTEyNS41dC00NiAtMTU5LjVoNjM1cTggNzcgLTggMTQwdC00NyAxMDEuNXQtNzAuNSA2Ni41dC04MC41IDQxdC03NSAyMC41dC01NiA4LjVsLTIyIDFxLTEzNSAtNSAtMjU5LjUgLTQ0LjV0LTIyMy41IC0xMDQuNXQtMTc2IC0xNDAuNXQtMTM4IC0xNjMuNXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzYwMyIgdW5pY29kZT0iJiN4ZjI4MzsiIGhvcml6LWFkdi14PSIyMzA0IiAKZD0iTTAgMzJ2NjA4aDIzMDR2LTYwOHEwIC02NiAtNDcgLTExM3QtMTEzIC00N2gtMTk4NHEtNjYgMCAtMTEzIDQ3dC00NyAxMTN6TTY0MCAyNTZ2LTEyOGgzODR2MTI4aC0zODR6TTI1NiAyNTZ2LTEyOGgyNTZ2MTI4aC0yNTZ6TTIxNDQgMTQwOHE2NiAwIDExMyAtNDd0NDcgLTExM3YtMjI0aC0yMzA0djIyNHEwIDY2IDQ3IDExM3QxMTMgNDdoMTk4NHoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzYwNCIgdW5pY29kZT0iJiN4ZjI4NDsiIGhvcml6LWFkdi14PSIxNzkyIiAKZD0iTTE1ODQgMjQ2bC0yMTggMTExcS03NCAtMTIwIC0xOTYuNSAtMTg5dC0yNjMuNSAtNjlxLTE0NyAwIC0yNzEgNzJ0LTE5NiAxOTZ0LTcyIDI3MHEwIDExMCA0Mi41IDIwOS41dDExNSAxNzJ0MTcyIDExNXQyMDkuNSA0Mi41cTEzMSAwIDI0Ny41IC02MC41dDE5Mi41IC0xNjguNWwyMTUgMTI1cS0xMTAgMTY5IC0yODYuNSAyNjV0LTM3OC41IDk2cS0xNjEgMCAtMzA4IC02M3QtMjUzIC0xNjl0LTE2OSAtMjUzdC02MyAtMzA4dDYzIC0zMDgKdDE2OSAtMjUzdDI1MyAtMTY5dDMwOCAtNjNxMjEzIDAgMzk3LjUgMTA3dDI5MC41IDI5MnpNMTAzMCA2NDNsNjkzIC0zNTJxLTExNiAtMjUzIC0zMzQuNSAtNDAwdC00OTIuNSAtMTQ3cS0xODIgMCAtMzQ4IDcxdC0yODYgMTkxdC0xOTEgMjg2dC03MSAzNDh0NzEgMzQ4dDE5MSAyODZ0Mjg2IDE5MXQzNDggNzFxMjYwIDAgNDcwLjUgLTEzMy41dDMzNS41IC0zNjYuNXpNMTU0MyA2NDBoLTM5di0xNjBoLTk2djM1MmgxMzZxMzIgMCA1NC41IC0yMAp0MjguNSAtNDh0MSAtNTZ0LTI3LjUgLTQ4dC01Ny41IC0yMHoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idW5pRjI4NSIgdW5pY29kZT0iJiN4ZjI4NTsiIGhvcml6LWFkdi14PSIxNzkyIiAKZD0iTTE0MjcgODI3bC02MTQgMzg2bDkyIDE1MWg4NTV6TTQwNSA1NjJsLTE4NCAxMTZ2ODU4bDExODMgLTc0M3pNMTQyNCA2OTdsMTQ3IC05NXYtODU4bC01MzIgMzM1ek0xMzg3IDcxOGwtNTAwIC04MDJoLTg1NWwzNTYgNTcxeiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlGMjg2IiB1bmljb2RlPSImI3hmMjg2OyIgaG9yaXotYWR2LXg9IjE3OTIiIApkPSJNNjQwIDUyOHYyMjRxMCAxNiAtMTYgMTZoLTk2cS0xNiAwIC0xNiAtMTZ2LTIyNHEwIC0xNiAxNiAtMTZoOTZxMTYgMCAxNiAxNnpNMTE1MiA1Mjh2MjI0cTAgMTYgLTE2IDE2aC05NnEtMTYgMCAtMTYgLTE2di0yMjRxMCAtMTYgMTYgLTE2aDk2cTE2IDAgMTYgMTZ6TTE2NjQgNDk2di03NTJoLTY0MHYzMjBxMCA4MCAtNTYgMTM2dC0xMzYgNTZ0LTEzNiAtNTZ0LTU2IC0xMzZ2LTMyMGgtNjQwdjc1MnEwIDE2IDE2IDE2aDk2CnExNiAwIDE2IC0xNnYtMTEyaDEyOHY2MjRxMCAxNiAxNiAxNmg5NnExNiAwIDE2IC0xNnYtMTEyaDEyOHYxMTJxMCAxNiAxNiAxNmg5NnExNiAwIDE2IC0xNnYtMTEyaDEyOHYxMTJxMCA2IDIuNSA5LjV0OC41IDV0OS41IDJ0MTEuNSAwdDkgLTAuNXYzOTFxLTMyIDE1IC0zMiA1MHEwIDIzIDE2LjUgMzl0MzguNSAxNnQzOC41IC0xNnQxNi41IC0zOXEwIC0zNSAtMzIgLTUwdi0xN3E0NSAxMCA4MyAxMHEyMSAwIDU5LjUgLTcuNXQ1NC41IC03LjUKcTE3IDAgNDcgNy41dDM3IDcuNXExNiAwIDE2IC0xNnYtMjEwcTAgLTE1IC0zNSAtMjEuNXQtNjIgLTYuNXEtMTggMCAtNTQuNSA3LjV0LTU1LjUgNy41cS00MCAwIC05MCAtMTJ2LTEzM3ExIDAgOSAwLjV0MTEuNSAwdDkuNSAtMnQ4LjUgLTV0Mi41IC05LjV2LTExMmgxMjh2MTEycTAgMTYgMTYgMTZoOTZxMTYgMCAxNiAtMTZ2LTExMmgxMjh2MTEycTAgMTYgMTYgMTZoOTZxMTYgMCAxNiAtMTZ2LTYyNGgxMjh2MTEycTAgMTYgMTYgMTZoOTYKcTE2IDAgMTYgLTE2eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNjA3IiB1bmljb2RlPSImI3hmMjg3OyIgaG9yaXotYWR2LXg9IjIzMDQiIApkPSJNMjI4OCA3MzFxMTYgLTggMTYgLTI3dC0xNiAtMjdsLTMyMCAtMTkycS04IC01IC0xNiAtNXEtOSAwIC0xNiA0cS0xNiAxMCAtMTYgMjh2MTI4aC04NThxMzcgLTU4IDgzIC0xNjVxMTYgLTM3IDI0LjUgLTU1dDI0IC00OXQyNyAtNDd0MjcgLTM0dDMxLjUgLTI2dDMzIC04aDk2djk2cTAgMTQgOSAyM3QyMyA5aDMyMHExNCAwIDIzIC05dDkgLTIzdi0zMjBxMCAtMTQgLTkgLTIzdC0yMyAtOWgtMzIwcS0xNCAwIC0yMyA5dC05IDIzdjk2aC05NgpxLTMyIDAgLTYxIDEwdC01MSAyMy41dC00NSA0MC41dC0zNyA0NnQtMzMuNSA1N3QtMjguNSA1Ny41dC0yOCA2MC41cS0yMyA1MyAtMzcgODEuNXQtMzYgNjV0LTQ0LjUgNTMuNXQtNDYuNSAxN2gtMzYwcS0yMiAtODQgLTkxIC0xMzh0LTE1NyAtNTRxLTEwNiAwIC0xODEgNzV0LTc1IDE4MXQ3NSAxODF0MTgxIDc1cTg4IDAgMTU3IC01NHQ5MSAtMTM4aDEwNHEyNCAwIDQ2LjUgMTd0NDQuNSA1My41dDM2IDY1dDM3IDgxLjVxMTkgNDEgMjggNjAuNQp0MjguNSA1Ny41dDMzLjUgNTd0MzcgNDZ0NDUgNDAuNXQ1MSAyMy41dDYxIDEwaDEwN3EyMSA1NyA3MCA5Mi41dDExMSAzNS41cTgwIDAgMTM2IC01NnQ1NiAtMTM2dC01NiAtMTM2dC0xMzYgLTU2cS02MiAwIC0xMTEgMzUuNXQtNzAgOTIuNWgtMTA3cS0xNyAwIC0zMyAtOHQtMzEuNSAtMjZ0LTI3IC0zNHQtMjcgLTQ3dC0yNCAtNDl0LTI0LjUgLTU1cS00NiAtMTA3IC04MyAtMTY1aDExMTR2MTI4cTAgMTggMTYgMjh0MzIgLTF6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9Il82MDgiIHVuaWNvZGU9IiYjeGYyODg7IiBob3Jpei1hZHYteD0iMTc5MiIgCmQ9Ik0xMTUwIDc3NHEwIC01NiAtMzkuNSAtOTV0LTk1LjUgLTM5aC0yNTN2MjY5aDI1M3E1NiAwIDk1LjUgLTM5LjV0MzkuNSAtOTUuNXpNMTMyOSA3NzRxMCAxMzAgLTkxLjUgMjIydC0yMjIuNSA5MmgtNDMzdi04OTZoMTgwdjI2OWgyNTNxMTMwIDAgMjIyIDkxLjV0OTIgMjIxLjV6TTE3OTIgNjQwcTAgLTE4MiAtNzEgLTM0OHQtMTkxIC0yODZ0LTI4NiAtMTkxdC0zNDggLTcxdC0zNDggNzF0LTI4NiAxOTF0LTE5MSAyODZ0LTcxIDM0OAp0NzEgMzQ4dDE5MSAyODZ0Mjg2IDE5MXQzNDggNzF0MzQ4IC03MXQyODYgLTE5MXQxOTEgLTI4NnQ3MSAtMzQ4eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNjA5IiB1bmljb2RlPSImI3hmMjg5OyIgaG9yaXotYWR2LXg9IjIzMDQiIApkPSJNMTY0NSA0MzhxMCA1OSAtMzQgMTA2LjV0LTg3IDY4LjVxLTcgLTQ1IC0yMyAtOTJxLTcgLTI0IC0yNy41IC0zOHQtNDQuNSAtMTRxLTEyIDAgLTI0IDNxLTMxIDEwIC00NSAzOC41dC00IDU4LjVxMjMgNzEgMjMgMTQzcTAgMTIzIC02MSAyMjcuNXQtMTY2IDE2NS41dC0yMjggNjFxLTEzNCAwIC0yNDcgLTczdC0xNjcgLTE5NHExMDggLTI4IDE4OCAtMTA2cTIyIC0yMyAyMiAtNTV0LTIyIC01NHQtNTQgLTIydC01NSAyMgpxLTc1IDc1IC0xODAgNzVxLTEwNiAwIC0xODEgLTc0LjV0LTc1IC0xODAuNXQ3NSAtMTgwLjV0MTgxIC03NC41aDEwNDZxNzkgMCAxMzQuNSA1NS41dDU1LjUgMTMzLjV6TTE3OTggNDM4cTAgLTE0MiAtMTAwLjUgLTI0MnQtMjQyLjUgLTEwMGgtMTA0NnEtMTY5IDAgLTI4OSAxMTkuNXQtMTIwIDI4OC41cTAgMTUzIDEwMCAyNjd0MjQ5IDEzNnE2MiAxODQgMjIxIDI5OHQzNTQgMTE0cTIzNSAwIDQwOC41IC0xNTguNXQxOTYuNSAtMzg5LjUKcTExNiAtMjUgMTkyLjUgLTExOC41dDc2LjUgLTIxNC41ek0yMDQ4IDQzOHEwIC0xNzUgLTk3IC0zMTlxLTIzIC0zMyAtNjQgLTMzcS0yNCAwIC00MyAxM3EtMjYgMTcgLTMyIDQ4LjV0MTIgNTcuNXE3MSAxMDQgNzEgMjMzdC03MSAyMzNxLTE4IDI2IC0xMiA1N3QzMiA0OXQ1Ny41IDExLjV0NDkuNSAtMzIuNXE5NyAtMTQyIDk3IC0zMTh6TTIzMDQgNDM4cTAgLTI0NCAtMTM0IC00NDNxLTIzIC0zNCAtNjQgLTM0cS0yMyAwIC00MiAxMwpxLTI2IDE4IC0zMi41IDQ5dDExLjUgNTdxMTA4IDE2NCAxMDggMzU4cTAgMTk1IC0xMDggMzU3cS0xOCAyNiAtMTEuNSA1Ny41dDMyLjUgNDguNXEyNiAxOCA1NyAxMnQ0OSAtMzNxMTM0IC0xOTggMTM0IC00NDJ6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9Il82MTAiIHVuaWNvZGU9IiYjeGYyOGE7IiAKZD0iTTE1MDAgLTEzcTAgLTg5IC02MyAtMTUyLjV0LTE1MyAtNjMuNXQtMTUzLjUgNjMuNXQtNjMuNSAxNTIuNXEwIDkwIDYzLjUgMTUzLjV0MTUzLjUgNjMuNXQxNTMgLTYzLjV0NjMgLTE1My41ek0xMjY3IDI2OHEtMTE1IC0xNSAtMTkyLjUgLTEwMi41dC03Ny41IC0yMDUuNXEwIC03NCAzMyAtMTM4cS0xNDYgLTc4IC0zNzkgLTc4cS0xMDkgMCAtMjAxIDIxdC0xNTMuNSA1NC41dC0xMTAuNSA3Ni41dC03NiA4NXQtNDQuNSA4Mwp0LTIzLjUgNjYuNXQtNiAzOS41cTAgMTkgNC41IDQyLjV0MTguNSA1NnQzNi41IDU4dDY0IDQzLjV0OTQuNSAxOHQ5NCAtMTcuNXQ2MyAtNDF0MzUuNSAtNTN0MTcuNSAtNDl0NCAtMzMuNXEwIC0zNCAtMjMgLTgxcTI4IC0yNyA4MiAtNDJ0OTMgLTE3bDQwIC0xcTExNSAwIDE5MCA1MXQ3NSAxMzNxMCAyNiAtOSA0OC41dC0zMS41IDQ0LjV0LTQ5LjUgNDF0LTc0IDQ0dC05My41IDQ3LjV0LTExOS41IDU2LjVxLTI4IDEzIC00MyAyMApxLTExNiA1NSAtMTg3IDEwMHQtMTIyLjUgMTAydC03MiAxMjUuNXQtMjAuNSAxNjIuNXEwIDc4IDIwLjUgMTUwdDY2IDEzNy41dDExMi41IDExNHQxNjYuNSA3N3QyMjEuNSAyOC41cTEyMCAwIDIyMCAtMjZ0MTY0LjUgLTY3dDEwOS41IC05NHQ2NCAtMTA1LjV0MTkgLTEwMy41cTAgLTQ2IC0xNSAtODIuNXQtMzYuNSAtNTh0LTQ4LjUgLTM2dC00OSAtMTkuNXQtMzkgLTVoLThoLTMydC0zOSA1dC00NCAxNHQtNDEgMjh0LTM3IDQ2dC0yNCA3MC41CnQtMTAgOTcuNXEtMTUgMTYgLTU5IDI1LjV0LTgxIDEwLjVsLTM3IDFxLTY4IDAgLTExNy41IC0zMXQtNzAuNSAtNzB0LTIxIC03NnEwIC0yNCA1IC00M3QyNCAtNDZ0NTMgLTUxdDk3IC01My41dDE1MCAtNTguNXE3NiAtMjUgMTM4LjUgLTUzLjV0MTA5IC01NS41dDgzIC01OXQ2MC41IC01OS41dDQxIC02Mi41dDI2LjUgLTYydDE0LjUgLTYzLjV0NiAtNjJ0MSAtNjIuNXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzYxMSIgdW5pY29kZT0iJiN4ZjI4YjsiIApkPSJNNzA0IDM1MnY1NzZxMCAxNCAtOSAyM3QtMjMgOWgtMjU2cS0xNCAwIC0yMyAtOXQtOSAtMjN2LTU3NnEwIC0xNCA5IC0yM3QyMyAtOWgyNTZxMTQgMCAyMyA5dDkgMjN6TTExNTIgMzUydjU3NnEwIDE0IC05IDIzdC0yMyA5aC0yNTZxLTE0IDAgLTIzIC05dC05IC0yM3YtNTc2cTAgLTE0IDkgLTIzdDIzIC05aDI1NnExNCAwIDIzIDl0OSAyM3pNMTUzNiA2NDBxMCAtMjA5IC0xMDMgLTM4NS41dC0yNzkuNSAtMjc5LjV0LTM4NS41IC0xMDMKdC0zODUuNSAxMDN0LTI3OS41IDI3OS41dC0xMDMgMzg1LjV0MTAzIDM4NS41dDI3OS41IDI3OS41dDM4NS41IDEwM3QzODUuNSAtMTAzdDI3OS41IC0yNzkuNXQxMDMgLTM4NS41eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNjEyIiB1bmljb2RlPSImI3hmMjhjOyIgCmQ9Ik03NjggMTQwOHEyMDkgMCAzODUuNSAtMTAzdDI3OS41IC0yNzkuNXQxMDMgLTM4NS41dC0xMDMgLTM4NS41dC0yNzkuNSAtMjc5LjV0LTM4NS41IC0xMDN0LTM4NS41IDEwM3QtMjc5LjUgMjc5LjV0LTEwMyAzODUuNXQxMDMgMzg1LjV0Mjc5LjUgMjc5LjV0Mzg1LjUgMTAzek03NjggOTZxMTQ4IDAgMjczIDczdDE5OCAxOTh0NzMgMjczdC03MyAyNzN0LTE5OCAxOTh0LTI3MyA3M3QtMjczIC03M3QtMTk4IC0xOTh0LTczIC0yNzMKdDczIC0yNzN0MTk4IC0xOTh0MjczIC03M3pNODY0IDMyMHEtMTQgMCAtMjMgOXQtOSAyM3Y1NzZxMCAxNCA5IDIzdDIzIDloMTkycTE0IDAgMjMgLTl0OSAtMjN2LTU3NnEwIC0xNCAtOSAtMjN0LTIzIC05aC0xOTJ6TTQ4MCAzMjBxLTE0IDAgLTIzIDl0LTkgMjN2NTc2cTAgMTQgOSAyM3QyMyA5aDE5MnExNCAwIDIzIC05dDkgLTIzdi01NzZxMCAtMTQgLTkgLTIzdC0yMyAtOWgtMTkyeiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNjEzIiB1bmljb2RlPSImI3hmMjhkOyIgCmQ9Ik0xMDg4IDM1MnY1NzZxMCAxNCAtOSAyM3QtMjMgOWgtNTc2cS0xNCAwIC0yMyAtOXQtOSAtMjN2LTU3NnEwIC0xNCA5IC0yM3QyMyAtOWg1NzZxMTQgMCAyMyA5dDkgMjN6TTE1MzYgNjQwcTAgLTIwOSAtMTAzIC0zODUuNXQtMjc5LjUgLTI3OS41dC0zODUuNSAtMTAzdC0zODUuNSAxMDN0LTI3OS41IDI3OS41dC0xMDMgMzg1LjV0MTAzIDM4NS41dDI3OS41IDI3OS41dDM4NS41IDEwM3QzODUuNSAtMTAzdDI3OS41IC0yNzkuNQp0MTAzIC0zODUuNXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzYxNCIgdW5pY29kZT0iJiN4ZjI4ZTsiIApkPSJNNzY4IDE0MDhxMjA5IDAgMzg1LjUgLTEwM3QyNzkuNSAtMjc5LjV0MTAzIC0zODUuNXQtMTAzIC0zODUuNXQtMjc5LjUgLTI3OS41dC0zODUuNSAtMTAzdC0zODUuNSAxMDN0LTI3OS41IDI3OS41dC0xMDMgMzg1LjV0MTAzIDM4NS41dDI3OS41IDI3OS41dDM4NS41IDEwM3pNNzY4IDk2cTE0OCAwIDI3MyA3M3QxOTggMTk4dDczIDI3M3QtNzMgMjczdC0xOTggMTk4dC0yNzMgNzN0LTI3MyAtNzN0LTE5OCAtMTk4dC03MyAtMjczCnQ3MyAtMjczdDE5OCAtMTk4dDI3MyAtNzN6TTQ4MCAzMjBxLTE0IDAgLTIzIDl0LTkgMjN2NTc2cTAgMTQgOSAyM3QyMyA5aDU3NnExNCAwIDIzIC05dDkgLTIzdi01NzZxMCAtMTQgLTkgLTIzdC0yMyAtOWgtNTc2eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNjE1IiB1bmljb2RlPSImI3hmMjkwOyIgaG9yaXotYWR2LXg9IjE3OTIiIApkPSJNMTc1NyAxMjhsMzUgLTMxM3EzIC0yOCAtMTYgLTUwcS0xOSAtMjEgLTQ4IC0yMWgtMTY2NHEtMjkgMCAtNDggMjFxLTE5IDIyIC0xNiA1MGwzNSAzMTNoMTcyMnpNMTY2NCA5NjdsODYgLTc3NWgtMTcwOGw4NiA3NzVxMyAyNCAyMSA0MC41dDQzIDE2LjVoMjU2di0xMjhxMCAtNTMgMzcuNSAtOTAuNXQ5MC41IC0zNy41dDkwLjUgMzcuNXQzNy41IDkwLjV2MTI4aDM4NHYtMTI4cTAgLTUzIDM3LjUgLTkwLjV0OTAuNSAtMzcuNQp0OTAuNSAzNy41dDM3LjUgOTAuNXYxMjhoMjU2cTI1IDAgNDMgLTE2LjV0MjEgLTQwLjV6TTEyODAgMTE1MnYtMjU2cTAgLTI2IC0xOSAtNDV0LTQ1IC0xOXQtNDUgMTl0LTE5IDQ1djI1NnEwIDEwNiAtNzUgMTgxdC0xODEgNzV0LTE4MSAtNzV0LTc1IC0xODF2LTI1NnEwIC0yNiAtMTkgLTQ1dC00NSAtMTl0LTQ1IDE5dC0xOSA0NXYyNTZxMCAxNTkgMTEyLjUgMjcxLjV0MjcxLjUgMTEyLjV0MjcxLjUgLTExMi41dDExMi41IC0yNzEuNXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzYxNiIgdW5pY29kZT0iJiN4ZjI5MTsiIGhvcml6LWFkdi14PSIyMDQ4IiAKZD0iTTE5MjAgNzY4cTUzIDAgOTAuNSAtMzcuNXQzNy41IC05MC41dC0zNy41IC05MC41dC05MC41IC0zNy41aC0xNWwtMTE1IC02NjJxLTggLTQ2IC00NCAtNzZ0LTgyIC0zMGgtMTI4MHEtNDYgMCAtODIgMzB0LTQ0IDc2bC0xMTUgNjYyaC0xNXEtNTMgMCAtOTAuNSAzNy41dC0zNy41IDkwLjV0MzcuNSA5MC41dDkwLjUgMzcuNWgxNzkyek00ODUgLTMycTI2IDIgNDMuNSAyMi41dDE1LjUgNDYuNWwtMzIgNDE2cS0yIDI2IC0yMi41IDQzLjUKdC00Ni41IDE1LjV0LTQzLjUgLTIyLjV0LTE1LjUgLTQ2LjVsMzIgLTQxNnEyIC0yNSAyMC41IC00MnQ0My41IC0xN2g1ek04OTYgMzJ2NDE2cTAgMjYgLTE5IDQ1dC00NSAxOXQtNDUgLTE5dC0xOSAtNDV2LTQxNnEwIC0yNiAxOSAtNDV0NDUgLTE5dDQ1IDE5dDE5IDQ1ek0xMjgwIDMydjQxNnEwIDI2IC0xOSA0NXQtNDUgMTl0LTQ1IC0xOXQtMTkgLTQ1di00MTZxMCAtMjYgMTkgLTQ1dDQ1IC0xOXQ0NSAxOXQxOSA0NXpNMTYzMiAyN2wzMiA0MTYKcTIgMjYgLTE1LjUgNDYuNXQtNDMuNSAyMi41dC00Ni41IC0xNS41dC0yMi41IC00My41bC0zMiAtNDE2cS0yIC0yNiAxNS41IC00Ni41dDQzLjUgLTIyLjVoNXEyNSAwIDQzLjUgMTd0MjAuNSA0MnpNNDc2IDEyNDRsLTkzIC00MTJoLTEzMmwxMDEgNDQxcTE5IDg4IDg5IDE0My41dDE2MCA1NS41aDE2N3EwIDI2IDE5IDQ1dDQ1IDE5aDM4NHEyNiAwIDQ1IC0xOXQxOSAtNDVoMTY3cTkwIDAgMTYwIC01NS41dDg5IC0xNDMuNWwxMDEgLTQ0MQpoLTEzMmwtOTMgNDEycS0xMSA0NCAtNDUuNSA3MnQtNzkuNSAyOGgtMTY3cTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtMzg0cS0yNiAwIC00NSAxOXQtMTkgNDVoLTE2N3EtNDUgMCAtNzkuNSAtMjh0LTQ1LjUgLTcyeiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNjE3IiB1bmljb2RlPSImI3hmMjkyOyIgaG9yaXotYWR2LXg9IjE3OTIiIApkPSJNOTkxIDUxMmw2NCAyNTZoLTI1NGwtNjQgLTI1NmgyNTR6TTE3NTkgMTAxNmwtNTYgLTIyNHEtNyAtMjQgLTMxIC0yNGgtMzI3bC02NCAtMjU2aDMxMXExNSAwIDI1IC0xMnExMCAtMTQgNiAtMjhsLTU2IC0yMjRxLTUgLTI0IC0zMSAtMjRoLTMyN2wtODEgLTMyOHEtNyAtMjQgLTMxIC0yNGgtMjI0cS0xNiAwIC0yNiAxMnEtOSAxMiAtNiAyOGw3OCAzMTJoLTI1NGwtODEgLTMyOHEtNyAtMjQgLTMxIC0yNGgtMjI1cS0xNSAwIC0yNSAxMgpxLTkgMTIgLTYgMjhsNzggMzEyaC0zMTFxLTE1IDAgLTI1IDEycS05IDEyIC02IDI4bDU2IDIyNHE3IDI0IDMxIDI0aDMyN2w2NCAyNTZoLTMxMXEtMTUgMCAtMjUgMTJxLTEwIDE0IC02IDI4bDU2IDIyNHE1IDI0IDMxIDI0aDMyN2w4MSAzMjhxNyAyNCAzMiAyNGgyMjRxMTUgMCAyNSAtMTJxOSAtMTIgNiAtMjhsLTc4IC0zMTJoMjU0bDgxIDMyOHE3IDI0IDMyIDI0aDIyNHExNSAwIDI1IC0xMnE5IC0xMiA2IC0yOGwtNzggLTMxMmgzMTEKcTE1IDAgMjUgLTEycTkgLTEyIDYgLTI4eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNjE4IiB1bmljb2RlPSImI3hmMjkzOyIgCmQ9Ik04NDEgNDgzbDE0OCAtMTQ4bC0xNDkgLTE0OXpNODQwIDEwOTRsMTQ5IC0xNDlsLTE0OCAtMTQ4ek03MTAgLTEzMGw0NjQgNDY0bC0zMDYgMzA2bDMwNiAzMDZsLTQ2NCA0NjR2LTYxMWwtMjU1IDI1NWwtOTMgLTkzbDMyMCAtMzIxbC0zMjAgLTMyMWw5MyAtOTNsMjU1IDI1NXYtNjExek0xNDI5IDY0MHEwIC0yMDkgLTMyIC0zNjUuNXQtODcuNSAtMjU3dC0xNDAuNSAtMTYyLjV0LTE4MS41IC04Ni41dC0yMTkuNSAtMjQuNQp0LTIxOS41IDI0LjV0LTE4MS41IDg2LjV0LTE0MC41IDE2Mi41dC04Ny41IDI1N3QtMzIgMzY1LjV0MzIgMzY1LjV0ODcuNSAyNTd0MTQwLjUgMTYyLjV0MTgxLjUgODYuNXQyMTkuNSAyNC41dDIxOS41IC0yNC41dDE4MS41IC04Ni41dDE0MC41IC0xNjIuNXQ4Ny41IC0yNTd0MzIgLTM2NS41eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNjE5IiB1bmljb2RlPSImI3hmMjk0OyIgaG9yaXotYWR2LXg9IjEwMjQiIApkPSJNNTk2IDExM2wxNzMgMTcybC0xNzMgMTcydi0zNDR6TTU5NiA4MjNsMTczIDE3MmwtMTczIDE3MnYtMzQ0ek02MjggNjQwbDM1NiAtMzU2bC01MzkgLTU0MHY3MTFsLTI5NyAtMjk2bC0xMDggMTA4bDM3MiAzNzNsLTM3MiAzNzNsMTA4IDEwOGwyOTcgLTI5NnY3MTFsNTM5IC01NDB6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9Il82MjAiIHVuaWNvZGU9IiYjeGYyOTU7IiAKZD0iTTEyODAgMjU2cTAgNTIgLTM4IDkwdC05MCAzOHQtOTAgLTM4dC0zOCAtOTB0MzggLTkwdDkwIC0zOHQ5MCAzOHQzOCA5MHpNNTEyIDEwMjRxMCA1MiAtMzggOTB0LTkwIDM4dC05MCAtMzh0LTM4IC05MHQzOCAtOTB0OTAgLTM4dDkwIDM4dDM4IDkwek0xNTM2IDI1NnEwIC0xNTkgLTExMi41IC0yNzEuNXQtMjcxLjUgLTExMi41dC0yNzEuNSAxMTIuNXQtMTEyLjUgMjcxLjV0MTEyLjUgMjcxLjV0MjcxLjUgMTEyLjV0MjcxLjUgLTExMi41CnQxMTIuNSAtMjcxLjV6TTE0NDAgMTM0NHEwIC0yMCAtMTMgLTM4bC0xMDU2IC0xNDA4cS0xOSAtMjYgLTUxIC0yNmgtMTYwcS0yNiAwIC00NSAxOXQtMTkgNDVxMCAyMCAxMyAzOGwxMDU2IDE0MDhxMTkgMjYgNTEgMjZoMTYwcTI2IDAgNDUgLTE5dDE5IC00NXpNNzY4IDEwMjRxMCAtMTU5IC0xMTIuNSAtMjcxLjV0LTI3MS41IC0xMTIuNXQtMjcxLjUgMTEyLjV0LTExMi41IDI3MS41dDExMi41IDI3MS41dDI3MS41IDExMi41CnQyNzEuNSAtMTEyLjV0MTEyLjUgLTI3MS41eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNjIxIiB1bmljb2RlPSImI3hmMjk2OyIgaG9yaXotYWR2LXg9IjE3OTIiIApkPSJNMTA0IDgzMGw3OTIgLTEwMTVsLTg2OCA2MzBxLTE4IDEzIC0yNSAzNC41dDAgNDIuNWwxMDEgMzA4djB6TTU2NiA4MzBoNjYwbC0zMzAgLTEwMTV2MHpNMzY4IDE0NDJsMTk4IC02MTJoLTQ2MmwxOTggNjEycTggMjMgMzMgMjN0MzMgLTIzek0xNjg4IDgzMGwxMDEgLTMwOHE3IC0yMSAwIC00Mi41dC0yNSAtMzQuNWwtODY4IC02MzBsNzkyIDEwMTV2MHpNMTY4OCA4MzBoLTQ2MmwxOTggNjEycTggMjMgMzMgMjN0MzMgLTIzeiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNjIyIiB1bmljb2RlPSImI3hmMjk3OyIgaG9yaXotYWR2LXg9IjE3OTIiIApkPSJNMzg0IDcwNGgxNjB2MjI0aC0xNjB2LTIyNHpNMTIyMSAzNzJ2OTJxLTEwNCAtMzYgLTI0MyAtMzhxLTEzNSAtMSAtMjU5LjUgNDYuNXQtMjIwLjUgMTIyLjVsMSAtOTZxODggLTgwIDIxMiAtMTI4LjV0MjcyIC00Ny41cTEyOSAwIDIzOCA0OXpNNjQwIDcwNGg2NDB2MjI0aC02NDB2LTIyNHpNMTc5MiA3MzZxMCAtMTg3IC05OSAtMzUycTg5IC0xMDIgODkgLTIyOXEwIC0xNTcgLTEyOS41IC0yNjh0LTMxMy41IC0xMTEKcS0xMjIgMCAtMjI1IDUyLjV0LTE2MSAxNDAuNXEtMTkgLTEgLTU3IC0xdC01NyAxcS01OCAtODggLTE2MSAtMTQwLjV0LTIyNSAtNTIuNXEtMTg0IDAgLTMxMy41IDExMXQtMTI5LjUgMjY4cTAgMTI3IDg5IDIyOXEtOTkgMTY1IC05OSAzNTJxMCAyMDkgMTIwIDM4NS41dDMyNi41IDI3OS41dDQ0OS41IDEwM3Q0NDkuNSAtMTAzdDMyNi41IC0yNzkuNXQxMjAgLTM4NS41eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNjIzIiB1bmljb2RlPSImI3hmMjk4OyIgCmQ9Ik01MTUgNjI1di0xMjhoLTI1MnYxMjhoMjUyek01MTUgODgwdi0xMjdoLTI1MnYxMjdoMjUyek0xMjczIDM2OXYtMTI4aC0zNDF2MTI4aDM0MXpNMTI3MyA2MjV2LTEyOGgtNjcydjEyOGg2NzJ6TTEyNzMgODgwdi0xMjdoLTY3MnYxMjdoNjcyek0xNDA4IDIwdjEyNDBxMCA4IC02IDE0dC0xNCA2aC0zMmwtMzc4IC0yNTZsLTIxMCAxNzFsLTIxMCAtMTcxbC0zNzggMjU2aC0zMnEtOCAwIC0xNCAtNnQtNiAtMTR2LTEyNDBxMCAtOCA2IC0xNAp0MTQgLTZoMTI0MHE4IDAgMTQgNnQ2IDE0ek01NTMgMTEzMGwxODUgMTUwaC00MDZ6TTk4MyAxMTMwbDIyMSAxNTBoLTQwNnpNMTUzNiAxMjYwdi0xMjQwcTAgLTYyIC00MyAtMTA1dC0xMDUgLTQzaC0xMjQwcS02MiAwIC0xMDUgNDN0LTQzIDEwNXYxMjQwcTAgNjIgNDMgMTA1dDEwNSA0M2gxMjQwcTYyIDAgMTA1IC00M3Q0MyAtMTA1eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNjI0IiB1bmljb2RlPSImI3hmMjk5OyIgaG9yaXotYWR2LXg9IjE3OTIiIApkPSJNODk2IDcyMHEtMTA0IDE5NiAtMTYwIDI3OHEtMTM5IDIwMiAtMzQ3IDMxOHEtMzQgMTkgLTcwIDM2cS04OSA0MCAtOTQgMzJ0MzQgLTM4bDM5IC0zMXE2MiAtNDMgMTEyLjUgLTkzLjV0OTQuNSAtMTE2LjV0NzAuNSAtMTEzdDcwLjUgLTEzMXE5IC0xNyAxMyAtMjVxNDQgLTg0IDg0IC0xNTN0OTggLTE1NHQxMTUuNSAtMTUwdDEzMSAtMTIzLjV0MTQ4LjUgLTkwLjVxMTUzIC02NiAxNTQgLTYwcTEgMyAtNDkgMzdxLTUzIDM2IC04MSA1NwpxLTc3IDU4IC0xNzkgMjExdC0xODUgMzEwek01NDkgMTc3cS03NiA2MCAtMTMyLjUgMTI1dC05OCAxNDMuNXQtNzEgMTU0LjV0LTU4LjUgMTg2dC01MiAyMDl0LTYwLjUgMjUydC03Ni41IDI4OXEyNzMgMCA0OTcuNSAtMzZ0Mzc5IC05MnQyNzEgLTE0NC41dDE4NS41IC0xNzIuNXQxMTAgLTE5OC41dDU2IC0xOTkuNXQxMi41IC0xOTguNXQtOS41IC0xNzN0LTIwIC0xNDMuNXQtMTMgLTEwN2wzMjMgLTMyN2gtMTA0bC0yODEgMjg1CnEtMjIgLTIgLTkxLjUgLTE0dC0xMjEuNSAtMTl0LTEzOCAtNnQtMTYwLjUgMTd0LTE2Ny41IDU5dC0xNzkgMTExeiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNjI1IiB1bmljb2RlPSImI3hmMjlhOyIgaG9yaXotYWR2LXg9IjE3OTIiIApkPSJNMTM3NCA4NzlxLTYgMjYgLTI4LjUgMzkuNXQtNDguNSA3LjVxLTI2MSAtNjIgLTQwMSAtNjJ0LTQwMSA2MnEtMjYgNiAtNDguNSAtNy41dC0yOC41IC0zOS41dDcuNSAtNDguNXQzOS41IC0yOC41cTE5NCAtNDYgMzAzIC01OHEtMiAtMTU4IC0xNS41IC0yNjl0LTI2LjUgLTE1NS41dC00MSAtMTE1LjVsLTkgLTIxcS0xMCAtMjUgMSAtNDl0MzYgLTM0cTkgLTQgMjMgLTRxNDQgMCA2MCA0MWw4IDIwcTU0IDEzOSA3MSAyNTloNDIKcTE3IC0xMjAgNzEgLTI1OWw4IC0yMHExNiAtNDEgNjAgLTQxcTE0IDAgMjMgNHEyNSAxMCAzNiAzNHQxIDQ5bC05IDIxcS0yOCA3MSAtNDEgMTE1LjV0LTI2LjUgMTU1LjV0LTE1LjUgMjY5cTEwOSAxMiAzMDMgNThxMjYgNiAzOS41IDI4LjV0Ny41IDQ4LjV6TTEwMjQgMTAyNHEwIDUzIC0zNy41IDkwLjV0LTkwLjUgMzcuNXQtOTAuNSAtMzcuNXQtMzcuNSAtOTAuNXQzNy41IC05MC41dDkwLjUgLTM3LjV0OTAuNSAzNy41dDM3LjUgOTAuNXoKTTE2MDAgNjQwcTAgLTE0MyAtNTUuNSAtMjczLjV0LTE1MCAtMjI1dC0yMjUgLTE1MHQtMjczLjUgLTU1LjV0LTI3My41IDU1LjV0LTIyNSAxNTB0LTE1MCAyMjV0LTU1LjUgMjczLjV0NTUuNSAyNzMuNXQxNTAgMjI1dDIyNSAxNTB0MjczLjUgNTUuNXQyNzMuNSAtNTUuNXQyMjUgLTE1MHQxNTAgLTIyNXQ1NS41IC0yNzMuNXpNODk2IDE0MDhxLTE1NiAwIC0yOTggLTYxdC0yNDUgLTE2NHQtMTY0IC0yNDV0LTYxIC0yOTh0NjEgLTI5OAp0MTY0IC0yNDV0MjQ1IC0xNjR0Mjk4IC02MXQyOTggNjF0MjQ1IDE2NHQxNjQgMjQ1dDYxIDI5OHQtNjEgMjk4dC0xNjQgMjQ1dC0yNDUgMTY0dC0yOTggNjF6TTE3OTIgNjQwcTAgLTE4MiAtNzEgLTM0OHQtMTkxIC0yODZ0LTI4NiAtMTkxdC0zNDggLTcxdC0zNDggNzF0LTI4NiAxOTF0LTE5MSAyODZ0LTcxIDM0OHQ3MSAzNDh0MTkxIDI4NnQyODYgMTkxdDM0OCA3MXQzNDggLTcxdDI4NiAtMTkxdDE5MSAtMjg2dDcxIC0zNDh6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9Il82MjYiIHVuaWNvZGU9IiYjeGYyOWI7IiAKZD0iTTE0MzggNzIzcTM0IC0zNSAyOSAtODJsLTQ0IC01NTFxLTQgLTQyIC0zNC41IC03MHQtNzEuNSAtMjhxLTYgMCAtOSAxcS00NCAzIC03Mi41IDM2LjV0LTI1LjUgNzcuNWwzNSA0MjlsLTE0MyAtOHE1NSAtMTEzIDU1IC0yNDBxMCAtMjE2IC0xNDggLTM3MmwtMTM3IDEzN3E5MSAxMDEgOTEgMjM1cTAgMTQ1IC0xMDIuNSAyNDh0LTI0Ny41IDEwM3EtMTM0IDAgLTIzNiAtOTJsLTEzNyAxMzhxMTIwIDExNCAyODQgMTQxbDI2NCAzMDAKbC0xNDkgODdsLTE4MSAtMTYxcS0zMyAtMzAgLTc3IC0yNy41dC03MyAzNS41dC0yNi41IDc3dDM0LjUgNzNsMjM5IDIxM3EyNiAyMyA2MCAyNi41dDY0IC0xNC41bDQ4OCAtMjgzcTM2IC0yMSA0OCAtNjhxMTcgLTY3IC0yNiAtMTE3bC0yMDUgLTIzMmwzNzEgMjBxNDkgMyA4MyAtMzJ6TTEyNDAgMTE4MHEtNzQgMCAtMTI2IDUydC01MiAxMjZ0NTIgMTI2dDEyNiA1MnQxMjYuNSAtNTJ0NTIuNSAtMTI2dC01Mi41IC0xMjZ0LTEyNi41IC01MnoKTTYxMyAtNjJxMTA2IDAgMTk2IDYxbDEzOSAtMTM5cS0xNDYgLTExNiAtMzM1IC0xMTZxLTE0OCAwIC0yNzMuNSA3M3QtMTk4LjUgMTk4dC03MyAyNzNxMCAxODggMTE2IDMzNmwxMzkgLTEzOXEtNjAgLTg4IC02MCAtMTk3cTAgLTE0NSAxMDIuNSAtMjQ3LjV0MjQ3LjUgLTEwMi41eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJfNjI3IiB1bmljb2RlPSImI3hmMjljOyIgCmQ9Ik04ODAgMzM2di0xNjBxMCAtMTQgLTkgLTIzdC0yMyAtOWgtMTYwcS0xNCAwIC0yMyA5dC05IDIzdjE2MHEwIDE0IDkgMjN0MjMgOWgxNjBxMTQgMCAyMyAtOXQ5IC0yM3pNMTEzNiA4MzJxMCAtNTAgLTE1IC05MHQtNDUuNSAtNjl0LTUyIC00NHQtNTkuNSAtMzZxLTMyIC0xOCAtNDYuNSAtMjh0LTI2IC0yNHQtMTEuNSAtMjl2LTMycTAgLTE0IC05IC0yM3QtMjMgLTloLTE2MHEtMTQgMCAtMjMgOXQtOSAyM3Y2OHEwIDM1IDEwLjUgNjQuNQp0MjQgNDcuNXQzOSAzNS41dDQxIDI1LjV0NDQuNSAyMXE1MyAyNSA3NSA0M3QyMiA0OXEwIDQyIC00My41IDcxLjV0LTk1LjUgMjkuNXEtNTYgMCAtOTUgLTI3cS0yOSAtMjAgLTgwIC04M3EtOSAtMTIgLTI1IC0xMnEtMTEgMCAtMTkgNmwtMTA4IDgycS0xMCA3IC0xMiAyMHQ1IDIzcTEyMiAxOTIgMzQ5IDE5MnExMjkgMCAyMzguNSAtODkuNXQxMDkuNSAtMjE0LjV6TTc2OCAxMjgwcS0xMzAgMCAtMjQ4LjUgLTUxdC0yMDQgLTEzNi41CnQtMTM2LjUgLTIwNHQtNTEgLTI0OC41dDUxIC0yNDguNXQxMzYuNSAtMjA0dDIwNCAtMTM2LjV0MjQ4LjUgLTUxdDI0OC41IDUxdDIwNCAxMzYuNXQxMzYuNSAyMDR0NTEgMjQ4LjV0LTUxIDI0OC41dC0xMzYuNSAyMDR0LTIwNCAxMzYuNXQtMjQ4LjUgNTF6TTE1MzYgNjQwcTAgLTIwOSAtMTAzIC0zODUuNXQtMjc5LjUgLTI3OS41dC0zODUuNSAtMTAzdC0zODUuNSAxMDN0LTI3OS41IDI3OS41dC0xMDMgMzg1LjV0MTAzIDM4NS41CnQyNzkuNSAyNzkuNXQzODUuNSAxMDN0Mzg1LjUgLTEwM3QyNzkuNSAtMjc5LjV0MTAzIC0zODUuNXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0iXzYyOCIgdW5pY29kZT0iJiN4ZjI5ZDsiIGhvcml6LWFkdi14PSIxNDA4IiAKZD0iTTM2NiAxMjI1cS02NCAwIC0xMTAgNDUuNXQtNDYgMTEwLjVxMCA2NCA0NiAxMDkuNXQxMTAgNDUuNXQxMDkuNSAtNDUuNXQ0NS41IC0xMDkuNXEwIC02NSAtNDUuNSAtMTEwLjV0LTEwOS41IC00NS41ek05MTcgNTgzcTAgLTUwIC0zMCAtNjcuNXQtNjMuNSAtNi41dC00Ny41IDM0bC0zNjcgNDM4cS03IDEyIC0xNCAxNS41dC0xMSAxLjVsLTMgLTNxLTcgLTggNCAtMjFsMTIyIC0xMzlsMSAtMzU0bC0xNjEgLTQ1NwpxLTY3IC0xOTIgLTkyIC0yMzRxLTE1IC0yNiAtMjggLTMycS01MCAtMjYgLTEwMyAtMXEtMjkgMTMgLTQxLjUgNDN0LTkuNSA1N3EyIDE3IDE5NyA2MThsNSA0MTZsLTg1IC0xNjRsMzUgLTIyMnE0IC0yNCAtMSAtNDJ0LTE0IC0yNy41dC0xOSAtMTZ0LTE3IC03LjVsLTcgLTJxLTE5IC0zIC0zNC41IDN0LTI0IDE2dC0xNCAyMnQtNy41IDE5LjV0LTIgOS41bC00NiAyOTlsMjExIDM4MXEyMyAzNCAxMTMgMzRxNzUgMCAxMDcgLTQwbDQyNCAtNTIxCnE3IC01IDE0IC0xN2wzIC0zbC0xIC0xcTcgLTEzIDcgLTI5ek01MTQgNDMzcTQzIC0xMTMgODguNSAtMjI1dDY5LjUgLTE2OGwyNCAtNTVxMzYgLTkzIDQyIC0xMjVxMTEgLTcwIC0zNiAtOTdxLTM1IC0yMiAtNjYgLTE2dC01MSAyMnQtMjkgMzVoLTFxLTYgMTYgLTggMjVsLTEyNCAzNTF6TTEzMzggLTE1OXEzMSAtNDkgMzEgLTU3cTAgLTUgLTMgLTdxLTkgLTUgLTE0LjUgMC41dC0xNS41IDI2dC0xNiAzMC41cS0xMTQgMTcyIC00MjMgNjYxCnEzIC0xIDcgMXQ3IDRsMyAycTExIDkgMTEgMTd6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9Il82MjkiIHVuaWNvZGU9IiYjeGYyOWU7IiBob3Jpei1hZHYteD0iMjMwNCIgCmQ9Ik01MDQgNTQyaDE3MWwtMSAyNjV6TTE1MzAgNjQxcTAgODcgLTUwLjUgMTQwdC0xNDYuNSA1M2gtNTR2LTM4OGg1MnE5MSAwIDE0NSA1N3Q1NCAxMzh6TTk1NiAxMDE4bDEgLTc1NnEwIC0xNCAtOS41IC0yNHQtMjMuNSAtMTBoLTIxNnEtMTQgMCAtMjMuNSAxMHQtOS41IDI0djYyaC0yOTFsLTU1IC04MXEtMTAgLTE1IC0yOCAtMTVoLTI2N3EtMjEgMCAtMzAuNSAxOHQzLjUgMzVsNTU2IDc1N3E5IDE0IDI3IDE0aDMzMnExNCAwIDI0IC0xMAp0MTAgLTI0ek0xNzgzIDY0MXEwIC0xOTMgLTEyNS41IC0zMDN0LTMyNC41IC0xMTBoLTI3MHEtMTQgMCAtMjQgMTB0LTEwIDI0djc1NnEwIDE0IDEwIDI0dDI0IDEwaDI2OHEyMDAgMCAzMjYgLTEwOXQxMjYgLTMwMnpNMTkzOSA2NDBxMCAtMTEgLTAuNSAtMjl0LTggLTcxLjV0LTIxLjUgLTEwMnQtNDQuNSAtMTA4dC03My41IC0xMDIuNWgtNTFxMzggNDUgNjYuNSAxMDQuNXQ0MS41IDExMnQyMSA5OHQ5IDcyLjVsMSAyN3EwIDggLTAuNSAyMi41CnQtNy41IDYwdC0yMCA5MS41dC00MSAxMTEuNXQtNjYgMTI0LjVoNDNxNDEgLTQ3IDcyIC0xMDd0NDUuNSAtMTExLjV0MjMgLTk2dDEwLjUgLTcwLjV6TTIxMjMgNjQwcTAgLTExIC0wLjUgLTI5dC04IC03MS41dC0yMS41IC0xMDJ0LTQ1IC0xMDh0LTc0IC0xMDIuNWgtNTFxMzggNDUgNjYuNSAxMDQuNXQ0MS41IDExMnQyMSA5OHQ5IDcyLjVsMSAyN3EwIDggLTAuNSAyMi41dC03LjUgNjB0LTE5LjUgOTEuNXQtNDAuNSAxMTEuNXQtNjYgMTI0LjUKaDQzcTQxIC00NyA3MiAtMTA3dDQ1LjUgLTExMS41dDIzIC05NnQxMC41IC03MC41ek0yMzA0IDY0MHEwIC0xMSAtMC41IC0yOXQtOCAtNzEuNXQtMjEuNSAtMTAydC00NC41IC0xMDh0LTczLjUgLTEwMi41aC01MXEzOCA0NSA2NiAxMDQuNXQ0MSAxMTJ0MjEgOTh0OSA3Mi41bDEgMjdxMCA4IC0wLjUgMjIuNXQtNy41IDYwdC0xOS41IDkxLjV0LTQwLjUgMTExLjV0LTY2IDEyNC41aDQzcTQxIC00NyA3MiAtMTA3dDQ1LjUgLTExMS41dDIzIC05Ngp0OS41IC03MC41eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlGMkEwIiB1bmljb2RlPSImI3hmMmEwOyIgaG9yaXotYWR2LXg9IjE0MDgiIApkPSJNNjE3IC0xNTNxMCAxMSAtMTMgNTh0LTMxIDEwN3QtMjAgNjlxLTEgNCAtNSAyNi41dC04LjUgMzZ0LTEzLjUgMjEuNXEtMTUgMTQgLTUxIDE0cS0yMyAwIC03MCAtNS41dC03MSAtNS41cS0zNCAwIC00NyAxMXEtNiA1IC0xMSAxNS41dC03LjUgMjB0LTYuNSAyNHQtNSAxOC41cS0zNyAxMjggLTM3IDI1NXQzNyAyNTVxMSA0IDUgMTguNXQ2LjUgMjR0Ny41IDIwdDExIDE1LjVxMTMgMTEgNDcgMTFxMjQgMCA3MSAtNS41dDcwIC01LjUKcTM2IDAgNTEgMTRxOSA4IDEzLjUgMjEuNXQ4LjUgMzZ0NSAyNi41cTIgOSAyMCA2OXQzMSAxMDd0MTMgNThxMCAyMiAtNDMuNSA1Mi41dC03NS41IDQyLjVxLTIwIDggLTQ1IDhxLTM0IDAgLTk4IC0xOHEtNTcgLTE3IC05Ni41IC00MC41dC03MSAtNjZ0LTQ2IC03MHQtNDUuNSAtOTQuNXEtNiAtMTIgLTkgLTE5cS00OSAtMTA3IC02OCAtMjE2dC0xOSAtMjQ0dDE5IC0yNDR0NjggLTIxNnE1NiAtMTIyIDgzIC0xNjFxNjMgLTkxIDE3OSAtMTI3Cmw2IC0ycTY0IC0xOCA5OCAtMThxMjUgMCA0NSA4cTMyIDEyIDc1LjUgNDIuNXQ0My41IDUyLjV6TTc3NiA3NjBxLTI2IDAgLTQ1IDE5dC0xOSA0NS41dDE5IDQ1LjVxMzcgMzcgMzcgOTBxMCA1MiAtMzcgOTFxLTE5IDE5IC0xOSA0NXQxOSA0NXQ0NSAxOXQ0NSAtMTlxNzUgLTc1IDc1IC0xODF0LTc1IC0xODFxLTIxIC0xOSAtNDUgLTE5ek05NTcgNTc5cS0yNyAwIC00NSAxOXEtMTkgMTkgLTE5IDQ1dDE5IDQ1cTExMiAxMTQgMTEyIDI3Mgp0LTExMiAyNzJxLTE5IDE5IC0xOSA0NXQxOSA0NXQ0NSAxOXQ0NSAtMTlxMTUwIC0xNTAgMTUwIC0zNjJ0LTE1MCAtMzYycS0xOCAtMTkgLTQ1IC0xOXpNMTEzOCAzOThxLTI3IDAgLTQ1IDE5cS0xOSAxOSAtMTkgNDV0MTkgNDVxOTAgOTEgMTM4LjUgMjA4dDQ4LjUgMjQ1dC00OC41IDI0NXQtMTM4LjUgMjA4cS0xOSAxOSAtMTkgNDV0MTkgNDV0NDUgMTl0NDUgLTE5cTEwOSAtMTA5IDE2NyAtMjQ5dDU4IC0yOTR0LTU4IC0yOTR0LTE2NyAtMjQ5CnEtMTggLTE5IC00NSAtMTl6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InVuaUYyQTEiIHVuaWNvZGU9IiYjeGYyYTE7IiBob3Jpei1hZHYteD0iMjE3NiIgCmQ9Ik0xOTIgMzUycS02NiAwIC0xMTMgLTQ3dC00NyAtMTEzdDQ3IC0xMTN0MTEzIC00N3QxMTMgNDd0NDcgMTEzdC00NyAxMTN0LTExMyA0N3pNNzA0IDM1MnEtNjYgMCAtMTEzIC00N3QtNDcgLTExM3Q0NyAtMTEzdDExMyAtNDd0MTEzIDQ3dDQ3IDExM3QtNDcgMTEzdC0xMTMgNDd6TTcwNCA4NjRxLTY2IDAgLTExMyAtNDd0LTQ3IC0xMTN0NDcgLTExM3QxMTMgLTQ3dDExMyA0N3Q0NyAxMTN0LTQ3IDExM3QtMTEzIDQ3ek0xNDcyIDM1MgpxLTY2IDAgLTExMyAtNDd0LTQ3IC0xMTN0NDcgLTExM3QxMTMgLTQ3dDExMyA0N3Q0NyAxMTN0LTQ3IDExM3QtMTEzIDQ3ek0xOTg0IDM1MnEtNjYgMCAtMTEzIC00N3QtNDcgLTExM3Q0NyAtMTEzdDExMyAtNDd0MTEzIDQ3dDQ3IDExM3QtNDcgMTEzdC0xMTMgNDd6TTE0NzIgODY0cS02NiAwIC0xMTMgLTQ3dC00NyAtMTEzdDQ3IC0xMTN0MTEzIC00N3QxMTMgNDd0NDcgMTEzdC00NyAxMTN0LTExMyA0N3pNMTk4NCA4NjQKcS02NiAwIC0xMTMgLTQ3dC00NyAtMTEzdDQ3IC0xMTN0MTEzIC00N3QxMTMgNDd0NDcgMTEzdC00NyAxMTN0LTExMyA0N3pNMTk4NCAxMzc2cS02NiAwIC0xMTMgLTQ3dC00NyAtMTEzdDQ3IC0xMTN0MTEzIC00N3QxMTMgNDd0NDcgMTEzdC00NyAxMTN0LTExMyA0N3pNMzg0IDE5MnEwIC04MCAtNTYgLTEzNnQtMTM2IC01NnQtMTM2IDU2dC01NiAxMzZ0NTYgMTM2dDEzNiA1NnQxMzYgLTU2dDU2IC0xMzZ6TTg5NiAxOTJxMCAtODAgLTU2IC0xMzYKdC0xMzYgLTU2dC0xMzYgNTZ0LTU2IDEzNnQ1NiAxMzZ0MTM2IDU2dDEzNiAtNTZ0NTYgLTEzNnpNMzg0IDcwNHEwIC04MCAtNTYgLTEzNnQtMTM2IC01NnQtMTM2IDU2dC01NiAxMzZ0NTYgMTM2dDEzNiA1NnQxMzYgLTU2dDU2IC0xMzZ6TTg5NiA3MDRxMCAtODAgLTU2IC0xMzZ0LTEzNiAtNTZ0LTEzNiA1NnQtNTYgMTM2dDU2IDEzNnQxMzYgNTZ0MTM2IC01NnQ1NiAtMTM2ek0zODQgMTIxNnEwIC04MCAtNTYgLTEzNnQtMTM2IC01Ngp0LTEzNiA1NnQtNTYgMTM2dDU2IDEzNnQxMzYgNTZ0MTM2IC01NnQ1NiAtMTM2ek0xNjY0IDE5MnEwIC04MCAtNTYgLTEzNnQtMTM2IC01NnQtMTM2IDU2dC01NiAxMzZ0NTYgMTM2dDEzNiA1NnQxMzYgLTU2dDU2IC0xMzZ6TTg5NiAxMjE2cTAgLTgwIC01NiAtMTM2dC0xMzYgLTU2dC0xMzYgNTZ0LTU2IDEzNnQ1NiAxMzZ0MTM2IDU2dDEzNiAtNTZ0NTYgLTEzNnpNMjE3NiAxOTJxMCAtODAgLTU2IC0xMzZ0LTEzNiAtNTZ0LTEzNiA1Ngp0LTU2IDEzNnQ1NiAxMzZ0MTM2IDU2dDEzNiAtNTZ0NTYgLTEzNnpNMTY2NCA3MDRxMCAtODAgLTU2IC0xMzZ0LTEzNiAtNTZ0LTEzNiA1NnQtNTYgMTM2dDU2IDEzNnQxMzYgNTZ0MTM2IC01NnQ1NiAtMTM2ek0yMTc2IDcwNHEwIC04MCAtNTYgLTEzNnQtMTM2IC01NnQtMTM2IDU2dC01NiAxMzZ0NTYgMTM2dDEzNiA1NnQxMzYgLTU2dDU2IC0xMzZ6TTE2NjQgMTIxNnEwIC04MCAtNTYgLTEzNnQtMTM2IC01NnQtMTM2IDU2dC01NiAxMzYKdDU2IDEzNnQxMzYgNTZ0MTM2IC01NnQ1NiAtMTM2ek0yMTc2IDEyMTZxMCAtODAgLTU2IC0xMzZ0LTEzNiAtNTZ0LTEzNiA1NnQtNTYgMTM2dDU2IDEzNnQxMzYgNTZ0MTM2IC01NnQ1NiAtMTM2eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlGMkEyIiB1bmljb2RlPSImI3hmMmEyOyIgaG9yaXotYWR2LXg9IjE3OTIiIApkPSJNMTI4IC0xOTJxMCAtMjYgLTE5IC00NXQtNDUgLTE5dC00NSAxOXQtMTkgNDV0MTkgNDV0NDUgMTl0NDUgLTE5dDE5IC00NXpNMzIwIDBxMCAtMjYgLTE5IC00NXQtNDUgLTE5dC00NSAxOXQtMTkgNDV0MTkgNDV0NDUgMTl0NDUgLTE5dDE5IC00NXpNMzY1IDM2NWwyNTYgLTI1NmwtOTAgLTkwbC0yNTYgMjU2ek03MDQgMzg0cTAgLTI2IC0xOSAtNDV0LTQ1IC0xOXQtNDUgMTl0LTE5IDQ1dDE5IDQ1dDQ1IDE5dDQ1IC0xOXQxOSAtNDV6Ck0xNDExIDcwNHEwIC01OSAtMTEuNSAtMTA4LjV0LTM3LjUgLTkzLjV0LTQ0IC02Ny41dC01MyAtNjQuNXEtMzEgLTM1IC00NS41IC01NHQtMzMuNSAtNTB0LTI2LjUgLTY0dC03LjUgLTc0cTAgLTE1OSAtMTEyLjUgLTI3MS41dC0yNzEuNSAtMTEyLjVxLTI2IDAgLTQ1IDE5dC0xOSA0NXQxOSA0NXQ0NSAxOXExMDYgMCAxODEgNzV0NzUgMTgxcTAgNTcgMTEuNSAxMDUuNXQzNyA5MXQ0My41IDY2LjV0NTIgNjNxNDAgNDYgNTkuNSA3Mgp0MzcuNSA3NC41dDE4IDEwMy41cTAgMTg1IC0xMzEuNSAzMTYuNXQtMzE2LjUgMTMxLjV0LTMxNi41IC0xMzEuNXQtMTMxLjUgLTMxNi41cTAgLTI2IC0xOSAtNDV0LTQ1IC0xOXQtNDUgMTl0LTE5IDQ1cTAgMTE3IDQ1LjUgMjIzLjV0MTIzIDE4NHQxODQgMTIzdDIyMy41IDQ1LjV0MjIzLjUgLTQ1LjV0MTg0IC0xMjN0MTIzIC0xODR0NDUuNSAtMjIzLjV6TTg5NiA1NzZxMCAtMjYgLTE5IC00NXQtNDUgLTE5dC00NSAxOXQtMTkgNDV0MTkgNDUKdDQ1IDE5dDQ1IC0xOXQxOSAtNDV6TTExODQgNzA0cTAgLTI2IC0xOSAtNDV0LTQ1IC0xOXQtNDUgMTl0LTE5IDQ1cTAgOTMgLTY1LjUgMTU4LjV0LTE1OC41IDY1LjVxLTkyIDAgLTE1OCAtNjUuNXQtNjYgLTE1OC41cTAgLTI2IC0xOSAtNDV0LTQ1IC0xOXQtNDUgMTl0LTE5IDQ1cTAgMTQ2IDEwMyAyNDl0MjQ5IDEwM3QyNDkgLTEwM3QxMDMgLTI0OXpNMTU3OCA5OTNxMTAgLTI1IC0xIC00OXQtMzYgLTM0cS05IC00IC0yMyAtNApxLTE5IDAgLTM1LjUgMTF0LTIzLjUgMzBxLTY4IDE3OCAtMjI0IDI5NXEtMjEgMTYgLTI1IDQydDEyIDQ3cTE3IDIxIDQzIDI1dDQ3IC0xMnExODMgLTEzNyAyNjYgLTM1MXpNMTc4OCAxMDc0cTkgLTI1IC0xLjUgLTQ5dC0zNS41IC0zNHEtMTEgLTQgLTIzIC00cS00NCAwIC02MCA0MXEtOTIgMjM4IC0yOTcgMzkzcS0yMiAxNiAtMjUuNSA0MnQxMi41IDQ3cTE2IDIyIDQyIDI1LjV0NDcgLTEyLjVxMjM1IC0xNzUgMzQxIC00NDl6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InVuaUYyQTMiIHVuaWNvZGU9IiYjeGYyYTM7IiBob3Jpei1hZHYteD0iMjMwNCIgCmQ9Ik0xMDMyIDU3NnEtNTkgMiAtODQgNTVxLTE3IDM0IC00OCA1My41dC02OCAxOS41cS01MyAwIC05MC41IC0zNy41dC0zNy41IC05MC41cTAgLTU2IDM2IC04OWwxMCAtOHEzNCAtMzEgODIgLTMxcTM3IDAgNjggMTkuNXQ0OCA1My41cTI1IDUzIDg0IDU1ek0xNjAwIDcwNHEwIDU2IC0zNiA4OWwtMTAgOHEtMzQgMzEgLTgyIDMxcS0zNyAwIC02OCAtMTkuNXQtNDggLTUzLjVxLTI1IC01MyAtODQgLTU1cTU5IC0yIDg0IC01NQpxMTcgLTM0IDQ4IC01My41dDY4IC0xOS41cTUzIDAgOTAuNSAzNy41dDM3LjUgOTAuNXpNMTE3NCA5MjVxLTE3IC0zNSAtNTUgLTQ4dC03MyA0cS02MiAzMSAtMTM0IDMxcS01MSAwIC05OSAtMTdxMyAwIDkuNSAwLjV0OS41IDAuNXE5MiAwIDE3MC41IC01MHQxMTguNSAtMTMzcTE3IC0zNiAzLjUgLTczLjV0LTQ5LjUgLTU0LjVxLTE4IC05IC0zOSAtOXEyMSAwIDM5IC05cTM2IC0xNyA0OS41IC01NC41dC0zLjUgLTczLjUKcS00MCAtODMgLTExOC41IC0xMzN0LTE3MC41IC01MGgtNnEtMTYgMiAtNDQgNGwtMjkwIDI3bC0yMzkgLTEyMHEtMTQgLTcgLTI5IC03cS00MCAwIC01NyAzNWwtMTYwIDMyMHEtMTEgMjMgLTQgNDcuNXQyOSAzNy41bDIwOSAxMTlsMTQ4IDI2N3ExNyAxNTUgOTEuNSAyOTEuNXQxOTUuNSAyMzYuNXEzMSAyNSA3MC41IDIxLjV0NjQuNSAtMzQuNXQyMS41IC03MHQtMzQuNSAtNjVxLTcwIC01OSAtMTE3IC0xMjhxMTIzIDg0IDI2NyAxMDEKcTQwIDUgNzEuNSAtMTl0MzUuNSAtNjRxNSAtNDAgLTE5IC03MS41dC02NCAtMzUuNXEtODQgLTEwIC0xNTkgLTU1cTQ2IDEwIDk5IDEwcTExNSAwIDIxOCAtNTBxMzYgLTE4IDQ5IC01NS41dC01IC03My41ek0yMTM3IDEwODVsMTYwIC0zMjBxMTEgLTIzIDQgLTQ3LjV0LTI5IC0zNy41bC0yMDkgLTExOWwtMTQ4IC0yNjdxLTE3IC0xNTUgLTkxLjUgLTI5MS41dC0xOTUuNSAtMjM2LjVxLTI2IC0yMiAtNjEgLTIycS00NSAwIC03NCAzNQpxLTI1IDMxIC0yMS41IDcwdDM0LjUgNjVxNzAgNTkgMTE3IDEyOHEtMTIzIC04NCAtMjY3IC0xMDFxLTQgLTEgLTEyIC0xcS0zNiAwIC02My41IDI0dC0zMS41IDYwcS01IDQwIDE5IDcxLjV0NjQgMzUuNXE4NCAxMCAxNTkgNTVxLTQ2IC0xMCAtOTkgLTEwcS0xMTUgMCAtMjE4IDUwcS0zNiAxOCAtNDkgNTUuNXQ1IDczLjVxMTcgMzUgNTUgNDh0NzMgLTRxNjIgLTMxIDEzNCAtMzFxNTEgMCA5OSAxN3EtMyAwIC05LjUgLTAuNXQtOS41IC0wLjUKcS05MiAwIC0xNzAuNSA1MHQtMTE4LjUgMTMzcS0xNyAzNiAtMy41IDczLjV0NDkuNSA1NC41cTE4IDkgMzkgOXEtMjEgMCAtMzkgOXEtMzYgMTcgLTQ5LjUgNTQuNXQzLjUgNzMuNXE0MCA4MyAxMTguNSAxMzN0MTcwLjUgNTBoNmgxcTE0IC0yIDQyIC00bDI5MSAtMjdsMjM5IDEyMHExNCA3IDI5IDdxNDAgMCA1NyAtMzV6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InVuaUYyQTQiIHVuaWNvZGU9IiYjeGYyYTQ7IiBob3Jpei1hZHYteD0iMTc5MiIgCmQ9Ik0xMDU2IDcwNHEwIC0yNiAxOSAtNDV0NDUgLTE5dDQ1IDE5dDE5IDQ1cTAgMTQ2IC0xMDMgMjQ5dC0yNDkgMTAzdC0yNDkgLTEwM3QtMTAzIC0yNDlxMCAtMjYgMTkgLTQ1dDQ1IC0xOXQ0NSAxOXQxOSA0NXEwIDkzIDY2IDE1OC41dDE1OCA2NS41dDE1OCAtNjUuNXQ2NiAtMTU4LjV6TTgzNSAxMjgwcS0xMTcgMCAtMjIzLjUgLTQ1LjV0LTE4NCAtMTIzdC0xMjMgLTE4NHQtNDUuNSAtMjIzLjVxMCAtMjYgMTkgLTQ1dDQ1IC0xOXQ0NSAxOQp0MTkgNDVxMCAxODUgMTMxLjUgMzE2LjV0MzE2LjUgMTMxLjV0MzE2LjUgLTEzMS41dDEzMS41IC0zMTYuNXEwIC01NSAtMTggLTEwMy41dC0zNy41IC03NC41dC01OS41IC03MnEtMzQgLTM5IC01MiAtNjN0LTQzLjUgLTY2LjV0LTM3IC05MXQtMTEuNSAtMTA1LjVxMCAtMTA2IC03NSAtMTgxdC0xODEgLTc1cS0yNiAwIC00NSAtMTl0LTE5IC00NXQxOSAtNDV0NDUgLTE5cTE1OSAwIDI3MS41IDExMi41dDExMi41IDI3MS41cTAgNDEgNy41IDc0CnQyNi41IDY0dDMzLjUgNTB0NDUuNSA1NHEzNSA0MSA1MyA2NC41dDQ0IDY3LjV0MzcuNSA5My41dDExLjUgMTA4LjVxMCAxMTcgLTQ1LjUgMjIzLjV0LTEyMyAxODR0LTE4NCAxMjN0LTIyMy41IDQ1LjV6TTU5MSA1NjFsMjI2IC0yMjZsLTU3OSAtNTc5cS0xMiAtMTIgLTI5IC0xMnQtMjkgMTJsLTE2OCAxNjhxLTEyIDEyIC0xMiAyOXQxMiAyOXpNMTYxMiAxNTI0bDE2OCAtMTY4cTEyIC0xMiAxMiAtMjl0LTEyIC0zMGwtMjMzIC0yMzMKbC0yNiAtMjVsLTcxIC03MXEtNjYgMTUzIC0xOTUgMjU4bDkxIDkxbDIwNyAyMDdxMTMgMTIgMzAgMTJ0MjkgLTEyeiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlGMkE1IiB1bmljb2RlPSImI3hmMmE1OyIgCmQ9Ik04NjYgMTAyMXEwIC0yNyAtMTMgLTk0cS0xMSAtNTAgLTMxLjUgLTE1MHQtMzAuNSAtMTUwcS0yIC0xMSAtNC41IC0xMi41dC0xMy41IC0yLjVxLTIwIC0yIC0zMSAtMnEtNTggMCAtODQgNDkuNXQtMjYgMTEzLjVxMCA4OCAzNSAxNzR0MTAzIDEyNHEyOCAxNCA1MSAxNHEyOCAwIDM2LjUgLTE2LjV0OC41IC00Ny41ek0xMzUyIDU5N3EwIDE0IC0zOSA3NS41dC01MiA2Ni41cS0yMSA4IC0zNCA4cS05MSAwIC0yMjYgLTc3bC0yIDIKcTMgMjIgMjcuNSAxMzV0MjQuNSAxNzhxMCAyMzMgLTI0MiAyMzNxLTI0IDAgLTY4IC02cS05NCAtMTcgLTE2OC41IC04OS41dC0xMTEuNSAtMTY2LjV0LTM3IC0xODlxMCAtMTQ2IDgwLjUgLTIyNXQyMjcuNSAtNzlxMjUgMCAyNSAtM3QtMSAtNXEtNCAtMzQgLTI2IC0xMTdxLTE0IC01MiAtNTEuNSAtMTAxdC04Mi41IC00OXEtNDIgMCAtNDIgNDdxMCAyNCAxMC41IDQ3LjV0MjUgMzkuNXQyOS41IDI4LjV0MjYgMjB0MTEgOC41cTAgMyAtNyAxMApxLTI0IDIyIC01OC41IDM2LjV0LTY1LjUgMTQuNXEtMzUgMCAtNjMuNSAtMzR0LTQxIC03NXQtMTIuNSAtNzVxMCAtODggNTEuNSAtMTQydDEzOC41IC01NHE4MiAwIDE1NSA1M3QxMTcuNSAxMjZ0NjUuNSAxNTNxNiAyMiAxNS41IDY2LjV0MTQuNSA2Ni41cTMgMTIgMTQgMThxMTE4IDYwIDIyNyA2MHE0OCAwIDEyNyAtMThxMSAtMSA0IC0xcTUgMCA5LjUgNC41dDQuNSA4LjV6TTE1MzYgMTEyMHYtOTYwcTAgLTExOSAtODQuNSAtMjAzLjUKdC0yMDMuNSAtODQuNWgtOTYwcS0xMTkgMCAtMjAzLjUgODQuNXQtODQuNSAyMDMuNXY5NjBxMCAxMTkgODQuNSAyMDMuNXQyMDMuNSA4NC41aDk2MHExMTkgMCAyMDMuNSAtODQuNXQ4NC41IC0yMDMuNXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idW5pRjJBNiIgdW5pY29kZT0iJiN4ZjJhNjsiIGhvcml6LWFkdi14PSIxNTM1IiAKZD0iTTc0NCAxMjMxcTAgMjQgLTIgMzguNXQtOC41IDMwdC0yMSAyM3QtMzcuNSA3LjVxLTM5IDAgLTc4IC0yM3EtMTA1IC01OCAtMTU5IC0xOTAuNXQtNTQgLTI2OS41cTAgLTQ0IDguNSAtODUuNXQyNi41IC04MC41dDUyLjUgLTYyLjV0ODEuNSAtMjMuNXE0IDAgMTggLTAuNXQyMCAwdDE2IDN0MTUgOC41dDcgMTZxMTYgNzcgNDggMjMxLjV0NDggMjMxLjVxMTkgOTEgMTkgMTQ2ek0xNDk4IDU3NXEwIC03IC03LjUgLTEzLjV0LTE1LjUgLTYuNQpsLTYgMXEtMjIgMyAtNjIgMTF0LTcyIDEyLjV0LTYzIDQuNXEtMTY3IDAgLTM1MSAtOTNxLTE1IC04IC0yMSAtMjdxLTEwIC0zNiAtMjQuNSAtMTA1LjV0LTIyLjUgLTEwMC41cS0yMyAtOTEgLTcwIC0xNzkuNXQtMTEyLjUgLTE2NC41dC0xNTQuNSAtMTIzdC0xODUgLTQ3cS0xMzUgMCAtMjE0LjUgODMuNXQtNzkuNSAyMTkuNXEwIDUzIDE5LjUgMTE3dDYzIDExNi41dDk3LjUgNTIuNXEzOCAwIDEyMCAtMzMuNXQ4MyAtNjEuNQpxMCAtMSAtMTYuNSAtMTIuNXQtMzkuNSAtMzF0LTQ2IC00NC41dC0zOSAtNjF0LTE2IC03NHEwIC0zMyAxNi41IC01M3Q0OC41IC0yMHE0NSAwIDg1IDMxLjV0NjYuNSA3OHQ0OCAxMDUuNXQzMi41IDEwN3QxNiA5MHY5cTAgMiAtMy41IDMuNXQtOC41IDEuNWgtMTB0LTEwIC0wLjV0LTYgLTAuNXEtMjI3IDAgLTM1MiAxMjIuNXQtMTI1IDM0OC41cTAgMTA4IDM0LjUgMjIxdDk2IDIxMHQxNTYgMTY3LjV0MjA0LjUgODkuNXE1MiA5IDEwNiA5CnEzNzQgMCAzNzQgLTM2MHEwIC05OCAtMzggLTI3M3QtNDMgLTIxMWwzIC0zcTEwMSA1NyAxODIuNSA4OHQxNjcuNSAzMXEyMiAwIDUzIC0xM3ExOSAtNyA4MCAtMTAyLjV0NjEgLTExNi41eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlGMkE3IiB1bmljb2RlPSImI3hmMmE3OyIgaG9yaXotYWR2LXg9IjE2NjQiIApkPSJNODMxIDg2M3EzMiAwIDU5IC0xOGwyMjIgLTE0OHE2MSAtNDAgMTEwIC05N2wxNDYgLTE3MHE0MCAtNDYgMjkgLTEwNmwtNzIgLTQxM3EtNiAtMzIgLTI5LjUgLTUzLjV0LTU1LjUgLTI1LjVsLTUyNyAtNTZsLTM1MiAtMzJoLTlxLTM5IDAgLTY3LjUgMjh0LTI4LjUgNjhxMCAzNyAyNyA2NHQ2NSAzMmwyNjAgMzJoLTQ0OHEtNDEgMCAtNjkuNSAzMHQtMjYuNSA3MXEyIDM5IDMyIDY1dDY5IDI2bDQ0MiAxbC01MjEgNjRxLTQxIDUgLTY2IDM3CnQtMTkgNzNxNiAzNSAzNC41IDU3LjV0NjUuNSAyMi41aDEwbDQ4MSAtNjBsLTM1MSA5NHEtMzggMTAgLTYyIDQxLjV0LTE4IDY4LjVxNiAzNiAzMyA1OC41dDYyIDIyLjVxNiAwIDIwIC0ybDQ0OCAtOTZsMjE3IC0zN3ExIDAgMyAtMC41dDMgLTAuNXEyMyAwIDMwLjUgMjN0LTEyLjUgMzZsLTE4NiAxMjVxLTM1IDIzIC00MiA2My41dDE4IDczLjVxMjcgMzggNzYgMzh6TTc2MSA2NjFsMTg2IC0xMjVsLTIxOCAzN2wtNSAybC0zNiAzOApsLTIzOCAyNjJxLTEgMSAtMi41IDMuNXQtMi41IDMuNXEtMjQgMzEgLTE4LjUgNzB0MzcuNSA2NHEzMSAyMyA2OCAxNy41dDY0IC0zMy41bDE0MiAtMTQ3cS0yIC0xIC01IC0zLjV0LTQgLTQuNXEtMzIgLTQ1IC0yMyAtOTl0NTUgLTg1ek0xNjQ4IDExMTVsMTUgLTI2NnE0IC03MyAtMTEgLTE0N2wtNDggLTIxOXEtMTIgLTU5IC02NyAtODdsLTEwNiAtNTRxMiA2MiAtMzkgMTA5bC0xNDYgMTcwcS01MyA2MSAtMTE3IDEwM2wtMjIyIDE0OApxLTM0IDIzIC03NiAyM3EtNTEgMCAtODggLTM3bC0yMzUgMzEycS0yNSAzMyAtMTggNzMuNXQ0MSA2My41cTMzIDIyIDcxLjUgMTR0NjIuNSAtNDBsMjY2IC0zNTJsLTI2MiA0NTVxLTIxIDM1IC0xMC41IDc1dDQ3LjUgNTlxMzUgMTggNzIuNSA2dDU3LjUgLTQ2bDI0MSAtNDIwbC0xMzYgMzM3cS0xNSAzNSAtNC41IDc0dDQ0LjUgNTZxMzcgMTkgNzYgNnQ1NiAtNTFsMTkzIC00MTVsMTAxIC0xOTZxOCAtMTUgMjMgLTE3LjV0MjcgNy41dDExIDI2CmwtMTIgMjI0cS0yIDQxIDI2IDcxdDY5IDMxcTM5IDAgNjcgLTI4LjV0MzAgLTY3LjV6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InVuaUYyQTgiIHVuaWNvZGU9IiYjeGYyYTg7IiBob3Jpei1hZHYteD0iMTc5MiIgCmQ9Ik0zMzUgMTgwcS0yIDAgLTYgMnEtODYgNTcgLTE2OC41IDE0NXQtMTM5LjUgMTgwcS0yMSAzMCAtMjEgNjlxMCA5IDIgMTl0NCAxOHQ3IDE4dDguNSAxNnQxMC41IDE3dDEwIDE1dDEyIDE1LjV0MTEgMTQuNXExODQgMjUxIDQ1MiAzNjVxLTExMCAxOTggLTExMCAyMTFxMCAxOSAxNyAyOXExMTYgNjQgMTI4IDY0cTE4IDAgMjggLTE2bDEyNCAtMjI5cTkyIDE5IDE5MiAxOXEyNjYgMCA0OTcuNSAtMTM3LjV0Mzc4LjUgLTM2OS41CnEyMCAtMzEgMjAgLTY5dC0yMCAtNjlxLTkxIC0xNDIgLTIxOC41IC0yNTMuNXQtMjc4LjUgLTE3NS41cTExMCAtMTk4IDExMCAtMjExcTAgLTIwIC0xNyAtMjlxLTExNiAtNjQgLTEyNyAtNjRxLTE5IDAgLTI5IDE2bC0xMjQgMjI5bC02NCAxMTlsLTQ0NCA4MjBsNyA3cS01OCAtMjQgLTk5IC00N3EzIC01IDEyNyAtMjM0dDI0MyAtNDQ5dDExOSAtMjIzcTAgLTcgLTkgLTlxLTEzIC0zIC03MiAtM3EtNTcgMCAtNjAgN2wtNDU2IDg0MQpxLTM5IC0yOCAtODIgLTY4cTI0IC00MyAyMTQgLTM5My41dDE5MCAtMzU0LjVxMCAtMTAgLTExIC0xMHEtMTQgMCAtODIuNSAyMnQtNzIuNSAyOGwtMTA2IDE5N2wtMjI0IDQxM3EtNDQgLTUzIC03OCAtMTA2cTIgLTMgMTggLTI1dDIzIC0zNGwxNzYgLTMyN3EwIC0xMCAtMTAgLTEwek0xMTY1IDI4Mmw0OSAtOTFxMjczIDExMSA0NTAgMzg1cS0xODAgMjc3IC00NTkgMzg5cTY3IC02NCAxMDMgLTE0OC41dDM2IC0xNzYuNQpxMCAtMTA2IC00NyAtMjAwLjV0LTEzMiAtMTU3LjV6TTg0OCA4OTZxMCAtMjAgMTQgLTM0dDM0IC0xNHE4NiAwIDE0NyAtNjF0NjEgLTE0N3EwIC0yMCAxNCAtMzR0MzQgLTE0dDM0IDE0dDE0IDM0cTAgMTI2IC04OSAyMTV0LTIxNSA4OXEtMjAgMCAtMzQgLTE0dC0xNCAtMzR6TTEyMTQgOTYxbC05IDRsNyAtN3oiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idW5pRjJBOSIgdW5pY29kZT0iJiN4ZjJhOTsiIGhvcml6LWFkdi14PSIxMjgwIiAKZD0iTTEwNTAgNDMwcTAgLTIxNSAtMTQ3IC0zNzRxLTE0OCAtMTYxIC0zNzggLTE2MXEtMjMyIDAgLTM3OCAxNjFxLTE0NyAxNTkgLTE0NyAzNzRxMCAxNDcgNjggMjcwLjV0MTg5IDE5Ni41dDI2OCA3M3E5NiAwIDE4MiAtMzFxLTMyIC02MiAtMzkgLTEyNnEtNjYgMjggLTE0MyAyOHEtMTY3IDAgLTI4MC41IC0xMjN0LTExMy41IC0yOTFxMCAtMTcwIDExMi41IC0yODguNXQyODEuNSAtMTE4LjV0MjgxIDExOC41dDExMiAyODguNQpxMCA4OSAtMzIgMTY2cTY2IDEzIDEyMyA0OXE0MSAtOTggNDEgLTIxMnpNODQ2IDYxOXEwIC0xOTIgLTc5LjUgLTM0NXQtMjM4LjUgLTI1M2wtMTQgLTFxLTI5IDAgLTYyIDVxODMgMzIgMTQ2LjUgMTAyLjV0OTkuNSAxNTQuNXQ1OC41IDE4OXQzMCAxOTIuNXQ3LjUgMTc4LjVxMCA2OSAtMyAxMDNxNTUgLTE2MCA1NSAtMzI2ek03OTEgOTQ3di0ycS03MyAyMTQgLTIwNiA0NDBxODggLTU5IDE0Mi41IC0xODYuNXQ2My41IC0yNTEuNXoKTTEwMzUgNzQ0cS04MyAwIC0xNjAgNzVxMjE4IDEyMCAyOTAgMjQ3cTE5IDM3IDIxIDU2cS00MiAtOTQgLTEzOS41IC0xNjYuNXQtMjA0LjUgLTk3LjVxLTM1IDU0IC0zNSAxMTNxMCAzNyAxNyA3OXQ0MyA2OHE0NiA0NCAxNTcgNzRxNTkgMTYgMTA2IDU4LjV0NzQgMTAwLjVxNzQgLTEwNSA3NCAtMjUzcTAgLTEwOSAtMjQgLTE3MHEtMzIgLTc3IC04OC41IC0xMzAuNXQtMTMwLjUgLTUzLjV6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InVuaUYyQUEiIHVuaWNvZGU9IiYjeGYyYWE7IiAKZD0iTTEwNTAgNDk1cTAgNzggLTI4IDE0N3EtNDEgLTI1IC04NSAtMzRxMjIgLTUwIDIyIC0xMTRxMCAtMTE3IC03NyAtMTk4LjV0LTE5MyAtODEuNXQtMTkzLjUgODEuNXQtNzcuNSAxOTguNXEwIDExNSA3OCAxOTkuNXQxOTMgODQuNXE1MyAwIDk4IC0xOXE0IDQzIDI3IDg3cS02MCAyMSAtMTI1IDIxcS0xNTQgMCAtMjU3LjUgLTEwOC41dC0xMDMuNSAtMjYzLjV0MTAzLjUgLTI2MXQyNTcuNSAtMTA2dDI1Ny41IDEwNi41dDEwMy41IDI2MC41egpNODcyIDg1MHEyIC0yNCAyIC03MXEwIC02MyAtNSAtMTIzdC0yMC41IC0xMzIuNXQtNDAuNSAtMTMwdC02OC41IC0xMDZ0LTEwMC41IC03MC41cTIxIC0zIDQyIC0zaDEwcTIxOSAxMzkgMjE5IDQxMXEwIDExNiAtMzggMjI1ek04NzIgODUwcS00IDgwIC00NCAxNzEuNXQtOTggMTMwLjVxOTIgLTE1NiAxNDIgLTMwMnpNMTIwNyA5NTVxMCAxMDIgLTUxIDE3NHEtNDEgLTg2IC0xMjQgLTEwOXEtNjkgLTE5IC0xMDkgLTUzLjV0LTQwIC05OS41CnEwIC00MCAyNCAtNzdxNzQgMTcgMTQwLjUgNjd0OTUuNSAxMTVxLTQgLTUyIC03NC41IC0xMTEuNXQtMTM4LjUgLTk3LjVxNTIgLTUyIDExMCAtNTJxNTEgMCA5MCAzN3Q2MCA5MHExNyA0MiAxNyAxMTd6TTE1MzYgMTEyMHYtOTYwcTAgLTExOSAtODQuNSAtMjAzLjV0LTIwMy41IC04NC41aC05NjBxLTExOSAwIC0yMDMuNSA4NC41dC04NC41IDIwMy41djk2MHEwIDExOSA4NC41IDIwMy41dDIwMy41IDg0LjVoOTYwcTExOSAwIDIwMy41IC04NC41CnQ4NC41IC0yMDMuNXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idW5pRjJBQiIgdW5pY29kZT0iJiN4ZjJhYjsiIApkPSJNMTI3OSAzODhxMCAyMiAtMjIgMjdxLTY3IDE1IC0xMTggNTl0LTgwIDEwOHEtNyAxOSAtNyAyNXEwIDE1IDE5LjUgMjZ0NDMgMTd0NDMgMjAuNXQxOS41IDM2LjVxMCAxOSAtMTguNSAzMS41dC0zOC41IDEyLjVxLTEyIDAgLTMyIC04dC0zMSAtOHEtNCAwIC0xMiAycTUgOTUgNSAxMTRxMCA3OSAtMTcgMTE0cS0zNiA3OCAtMTAzIDEyMS41dC0xNTIgNDMuNXEtMTk5IDAgLTI3NSAtMTY1cS0xNyAtMzUgLTE3IC0xMTRxMCAtMTkgNSAtMTE0CnEtNCAtMiAtMTQgLTJxLTEyIDAgLTMyIDcuNXQtMzAgNy41cS0yMSAwIC0zOC41IC0xMnQtMTcuNSAtMzJxMCAtMjEgMTkuNSAtMzUuNXQ0MyAtMjAuNXQ0MyAtMTd0MTkuNSAtMjZxMCAtNiAtNyAtMjVxLTY0IC0xMzggLTE5OCAtMTY3cS0yMiAtNSAtMjIgLTI3cTAgLTQ2IDEzNyAtNjhxMiAtNSA2IC0yNnQxMS41IC0zMC41dDIzLjUgLTkuNXExMiAwIDM3LjUgNC41dDM5LjUgNC41cTM1IDAgNjcgLTE1dDU0IC0zMi41dDU3LjUgLTMyLjUKdDc2LjUgLTE1cTQzIDAgNzkgMTV0NTcuNSAzMi41dDUzLjUgMzIuNXQ2NyAxNXExNCAwIDM5LjUgLTR0MzguNSAtNHExNiAwIDIzIDEwdDExIDMwdDYgMjVxMTM3IDIyIDEzNyA2OHpNMTUzNiA2NDBxMCAtMjA5IC0xMDMgLTM4NS41dC0yNzkuNSAtMjc5LjV0LTM4NS41IC0xMDN0LTM4NS41IDEwM3QtMjc5LjUgMjc5LjV0LTEwMyAzODUuNXQxMDMgMzg1LjV0Mjc5LjUgMjc5LjV0Mzg1LjUgMTAzdDM4NS41IC0xMDN0Mjc5LjUgLTI3OS41CnQxMDMgLTM4NS41eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlGMkFDIiB1bmljb2RlPSImI3hmMmFjOyIgaG9yaXotYWR2LXg9IjE2NjQiIApkPSJNODQ4IDE0MDhxMTM0IDEgMjQwLjUgLTY4LjV0MTYzLjUgLTE5Mi41cTI3IC01OCAyNyAtMTc5cTAgLTQ3IC05IC0xOTFxMTQgLTcgMjggLTdxMTggMCA1MSAxMy41dDUxIDEzLjVxMjkgMCA1NiAtMTh0MjcgLTQ2cTAgLTMyIC0zMS41IC01NHQtNjkgLTMxLjV0LTY5IC0yOXQtMzEuNSAtNDcuNXEwIC0xNSAxMiAtNDNxMzcgLTgyIDEwMi41IC0xNTB0MTQ0LjUgLTEwMXEyOCAtMTIgODAgLTIzcTI4IC02IDI4IC0zNQpxMCAtNzAgLTIxOSAtMTAzcS03IC0xMSAtMTEgLTM5dC0xNCAtNDYuNXQtMzMgLTE4LjVxLTIwIDAgLTYyIDYuNXQtNjQgNi41cS0zNyAwIC02MiAtNXEtMzIgLTUgLTYzIC0yMi41dC01OCAtMzh0LTU4IC00MC41dC03NiAtMzMuNXQtOTkgLTEzLjVxLTUyIDAgLTk2LjUgMTMuNXQtNzUgMzMuNXQtNTcuNSA0MC41dC01OCAzOHQtNjIgMjIuNXEtMjYgNSAtNjMgNXEtMjQgMCAtNjUuNSAtNy41dC01OC41IC03LjVxLTI1IDAgLTM1IDE4LjUKdC0xNCA0Ny41dC0xMSA0MHEtMjE5IDMzIC0yMTkgMTAzcTAgMjkgMjggMzVxNTIgMTEgODAgMjNxNzggMzIgMTQ0LjUgMTAxdDEwMi41IDE1MHExMiAyOCAxMiA0M3EwIDI4IC0zMS41IDQ3LjV0LTY5LjUgMjkuNXQtNjkuNSAzMS41dC0zMS41IDUyLjVxMCAyNyAyNiA0NS41dDU1IDE4LjVxMTUgMCA0OCAtMTN0NTMgLTEzcTE4IDAgMzIgN3EtOSAxNDIgLTkgMTkwcTAgMTIyIDI3IDE4MHE2NCAxMzcgMTcyIDE5OHQyNjQgNjN6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InVuaUYyQUQiIHVuaWNvZGU9IiYjeGYyYWQ7IiAKZD0iTTEyODAgMzg4cTAgMjIgLTIyIDI3cS02NyAxNCAtMTE4IDU4dC04MCAxMDlxLTcgMTQgLTcgMjVxMCAxNSAxOS41IDI2dDQyLjUgMTd0NDIuNSAyMC41dDE5LjUgMzYuNXEwIDE5IC0xOC41IDMxLjV0LTM4LjUgMTIuNXEtMTEgMCAtMzEgLTh0LTMyIC04cS00IDAgLTEyIDJxNSA2MyA1IDExNXEwIDc4IC0xNyAxMTRxLTM2IDc4IC0xMDIuNSAxMjEuNXQtMTUyLjUgNDMuNXEtMTk4IDAgLTI3NSAtMTY1cS0xOCAtMzggLTE4IC0xMTUKcTAgLTM4IDYgLTExNHEtMTAgLTIgLTE1IC0ycS0xMSAwIC0zMS41IDh0LTMwLjUgOHEtMjAgMCAtMzcuNSAtMTIuNXQtMTcuNSAtMzIuNXEwIC0yMSAxOS41IC0zNS41dDQyLjUgLTIwLjV0NDIuNSAtMTd0MTkuNSAtMjZxMCAtMTEgLTcgLTI1cS02NCAtMTM4IC0xOTggLTE2N3EtMjIgLTUgLTIyIC0yN3EwIC00NyAxMzggLTY5cTIgLTUgNiAtMjZ0MTEgLTMwLjV0MjMgLTkuNXExMyAwIDM4LjUgNXQzOC41IDVxMzUgMCA2Ny41IC0xNQp0NTQuNSAtMzIuNXQ1Ny41IC0zMi41dDc2LjUgLTE1cTQzIDAgNzkgMTV0NTcuNSAzMi41dDU0IDMyLjV0NjcuNSAxNXExMyAwIDM5IC00LjV0MzkgLTQuNXExNSAwIDIyLjUgOS41dDExLjUgMzF0NSAyNC41cTEzOCAyMiAxMzggNjl6TTE1MzYgMTEyMHYtOTYwcTAgLTExOSAtODQuNSAtMjAzLjV0LTIwMy41IC04NC41aC05NjBxLTExOSAwIC0yMDMuNSA4NC41dC04NC41IDIwMy41djk2MHEwIDExOSA4NC41IDIwMy41dDIwMy41IDg0LjVoOTYwCnExMTkgMCAyMDMuNSAtODQuNXQ4NC41IC0yMDMuNXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idW5pRjJBRSIgdW5pY29kZT0iJiN4ZjJhZTsiIGhvcml6LWFkdi14PSIyMzA0IiAKZD0iTTIzMDQgMTUzNnEtNjkgLTQ2IC0xMjUgLTkydC04OSAtODF0LTU5LjUgLTcxLjV0LTM3LjUgLTU3LjV0LTIyIC00NC41dC0xNCAtMjkuNXEtMTAgLTE4IC0zNS41IC0xMzYuNXQtNDguNSAtMTY0LjVxLTE1IC0yOSAtNTAgLTYwLjV0LTY3LjUgLTUwLjV0LTcyLjUgLTQxdC00OCAtMjhxLTQ3IC0zMSAtMTUxIC0yMzFxLTM0MSAxNCAtNjMwIC0xNThxLTkyIC01MyAtMzAzIC0xNzlxNDcgMTYgODYgMzF0NTUgMjJsMTUgNwpxNzEgMjcgMTYzIDY0LjV0MTMzLjUgNTMuNXQxMDggMzQuNXQxNDIuNSAzMS41cTE4NiAzMSA0NjUgLTdxMSAwIDEwIC0zcTExIC02IDE0IC0xN3QtMyAtMjJsLTE5NCAtMzQ1cS0xNSAtMjkgLTQ3IC0yMnEtMTI4IDI0IC0zNTQgMjRxLTE0NiAwIC00MDIgLTQ0LjV0LTM5MiAtNDYuNXEtODIgLTEgLTE0OSAxM3QtMTA3IDM3dC02MSA0MHQtMzMgMzRsLTEgMXYycTAgNiA2IDZxMTM4IDAgMzcxIDU1cTE5MiAzNjYgMzc0LjUgNTI0dDM4My41IDE1OApxNSAwIDE0LjUgLTAuNXQzOCAtNXQ1NSAtMTJ0NjEuNSAtMjQuNXQ2MyAtMzkuNXQ1NCAtNTl0NDAgLTgyLjVsMTAyIDE3N3EyIDQgMjEgNDIuNXQ0NC41IDg2LjV0NjEgMTA5LjV0ODQgMTMzLjV0MTAwLjUgMTM3cTY2IDgyIDEyOCAxNDEuNXQxMjEuNSA5Ni41dDkyLjUgNTMuNXQ4OCAzOS41eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlGMkIwIiB1bmljb2RlPSImI3hmMmIwOyIgCmQ9Ik0xMzIyIDY0MHEwIC00NSAtNSAtNzZsLTIzNiAxNGwyMjQgLTc4cS0xOSAtNzMgLTU4IC0xNDFsLTIxNCAxMDNsMTc3IC0xNThxLTQ0IC02MSAtMTA3IC0xMDhsLTE1NyAxNzhsMTAzIC0yMTVxLTYxIC0zNyAtMTQwIC01OWwtNzkgMjI4bDE0IC0yNDBxLTM4IC02IC03NiAtNnQtNzYgNmwxNCAyMzhsLTc4IC0yMjZxLTc0IDE5IC0xNDAgNTlsMTAzIDIxNWwtMTU3IC0xNzhxLTU5IDQzIC0xMDggMTA4bDE3OCAxNThsLTIxNCAtMTA0CnEtMzkgNjkgLTU4IDE0MWwyMjQgNzlsLTIzNyAtMTRxLTUgNDIgLTUgNzZxMCAzNSA1IDc3bDIzOCAtMTRsLTIyNSA3OXExOSA3MyA1OCAxNDBsMjE0IC0xMDRsLTE3NyAxNTlxNDYgNjEgMTA3IDEwOGwxNTggLTE3OGwtMTAzIDIxNXE2NyAzOSAxNDAgNThsNzcgLTIyNGwtMTMgMjM2cTM2IDYgNzUgNnEzOCAwIDc2IC02bC0xNCAtMjM3bDc4IDIyNXE3NCAtMTkgMTQwIC01OWwtMTAzIC0yMTRsMTU4IDE3OHE2MSAtNDcgMTA3IC0xMDgKbC0xNzcgLTE1OWwyMTMgMTA0cTM3IC02MiA1OCAtMTQxbC0yMjQgLTc4bDIzNyAxNHE1IC0zMSA1IC03N3pNMTM1MiA2NDBxMCAxNjAgLTc4LjUgMjk1LjV0LTIxMyAyMTR0LTI5Mi41IDc4LjVxLTExOSAwIC0yMjcgLTQ2LjV0LTE4Ni41IC0xMjV0LTEyNC41IC0xODcuNXQtNDYgLTIyOXEwIC0xMTkgNDYgLTIyOHQxMjQuNSAtMTg3LjV0MTg2LjUgLTEyNXQyMjcgLTQ2LjVxMTU4IDAgMjkyLjUgNzguNXQyMTMgMjE0dDc4LjUgMjk0LjV6Ck0xNDI1IDEwMjN2LTc2NmwtNjU3IC0zODNsLTY1NyAzODN2NzY2bDY1NyAzODN6TTc2OCAtMTgzbDcwOCA0MTJ2ODIzbC03MDggNDExbC03MDggLTQxMXYtODIzek0xNTM2IDEwODh2LTg5NmwtNzY4IC00NDhsLTc2OCA0NDh2ODk2bDc2OCA0NDh6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InVuaUYyQjEiIHVuaWNvZGU9IiYjeGYyYjE7IiBob3Jpei1hZHYteD0iMTY2NCIgCmQ9Ik0zMzkgMTMxOGg2OTFsLTI2IC03MmgtNjY1cS0xMTAgMCAtMTg4LjUgLTc5dC03OC41IC0xODl2LTc3MXEwIC05NSA2MC41IC0xNjkuNXQxNTMuNSAtOTMuNXEyMyAtNSA5OCAtNXYtNzJoLTQ1cS0xNDAgMCAtMjM5LjUgMTAwdC05OS41IDI0MHY3NzFxMCAxNDAgOTkuNSAyNDB0MjM5LjUgMTAwek0xMTkwIDE1MzZoMjQ3bC00ODIgLTEyOTRxLTIzIC02MSAtNDAuNSAtMTAzLjV0LTQ1IC05OHQtNTQgLTkzLjV0LTY0LjUgLTc4LjUKdC03OS41IC02NXQtOTUuNSAtNDF0LTExNiAtMTguNXYxOTVxMTYzIDI2IDIyMCAxODJxMjAgNTIgMjAgMTA1cTAgNTQgLTIwIDEwNmwtMjg1IDczM2gyMjhsMTg3IC01ODV6TTE2NjQgOTc4di0xMTExaC03OTVxMzcgNTUgNDUgNzNoNjc4djEwMzhxMCA4NSAtNDkuNSAxNTV0LTEyOS41IDk5bDI1IDY3cTEwMSAtMzQgMTYzLjUgLTEyMy41dDYyLjUgLTE5Ny41eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlGMkIyIiB1bmljb2RlPSImI3hmMmIyOyIgaG9yaXotYWR2LXg9IjE3OTIiIApkPSJNODUyIDEyMjdxMCAtMjkgLTE3IC01Mi41dC00NSAtMjMuNXQtNDUgMjMuNXQtMTcgNTIuNXQxNyA1Mi41dDQ1IDIzLjV0NDUgLTIzLjV0MTcgLTUyLjV6TTY4OCAtMTQ5djExNHEwIDMwIC0yMC41IDUxLjV0LTUwLjUgMjEuNXQtNTAgLTIxLjV0LTIwIC01MS41di0xMTRxMCAtMzAgMjAuNSAtNTJ0NDkuNSAtMjJxMzAgMCA1MC41IDIydDIwLjUgNTJ6TTg2MCAtMTQ5djExNHEwIDMwIC0yMCA1MS41dC01MCAyMS41dC01MC41IC0yMS41CnQtMjAuNSAtNTEuNXYtMTE0cTAgLTMwIDIwLjUgLTUydDUwLjUgLTIycTI5IDAgNDkuNSAyMnQyMC41IDUyek0xMDM0IC0xNDl2MTE0cTAgMzAgLTIwLjUgNTEuNXQtNTAuNSAyMS41dC01MC41IC0yMS41dC0yMC41IC01MS41di0xMTRxMCAtMzAgMjAuNSAtNTJ0NTAuNSAtMjJ0NTAuNSAyMnQyMC41IDUyek0xMjA4IC0xNDl2MTE0cTAgMzAgLTIwLjUgNTEuNXQtNTAuNSAyMS41dC01MC41IC0yMS41dC0yMC41IC01MS41di0xMTQKcTAgLTMwIDIwLjUgLTUydDUwLjUgLTIydDUwLjUgMjJ0MjAuNSA1MnpNMTQ3NiA1MzVxLTg0IC0xNjAgLTIzMiAtMjU5LjV0LTMyMyAtOTkuNXEtMTIzIDAgLTIyOS41IDUxLjV0LTE3OC41IDEzN3QtMTEzIDE5Ny41dC00MSAyMzJxMCA4OCAyMSAxNzRxLTEwNCAtMTc1IC0xMDQgLTM5MHEwIC0xNjIgNjUgLTMxMnQxODUgLTI1MXEzMCA1NyA5MSA1N3E1NiAwIDg2IC01MHEzMiA1MCA4NyA1MHE1NiAwIDg2IC01MHEzMiA1MCA4NyA1MHQ4NyAtNTAKcTMwIDUwIDg2IDUwcTI4IDAgNTIuNSAtMTUuNXQzNy41IC00MC41cTExMiA5NCAxNzcgMjMxLjV0NzMgMjg3LjV6TTEzMjYgNTY0cTAgNzUgLTcyIDc1cS0xNyAwIC00NyAtNnEtOTUgLTE5IC0xNDkgLTE5cS0yMjYgMCAtMjI2IDI0M3EwIDg2IDMwIDIwNHEtODMgLTEyNyAtODMgLTI3NXEwIC0xNTAgODkgLTI2MC41dDIzNSAtMTEwLjVxMTExIDAgMjEwIDcwcTEzIDQ4IDEzIDc5ek04ODQgMTIyM3EwIDUwIC0zMiA4OS41dC04MSAzOS41CnQtODEgLTM5LjV0LTMyIC04OS41cTAgLTUxIDMxLjUgLTkwLjV0ODEuNSAtMzkuNXQ4MS41IDM5LjV0MzEuNSA5MC41ek0xNTEzIDg4NHEwIDk2IC0zNy41IDE3OXQtMTEzIDEzN3QtMTczLjUgNTRxLTc3IDAgLTE0OSAtMzV0LTEyNyAtOTRxLTQ4IC0xNTkgLTQ4IC0yNjhxMCAtMTA0IDQ1LjUgLTE1N3QxNDcuNSAtNTNxNTMgMCAxNDIgMTlxMzYgNiA1MyA2cTUxIDAgNzcuNSAtMjh0MjYuNSAtODBxMCAtMjYgLTQgLTQ2CnE3NSA2OCAxMTcuNSAxNjUuNXQ0Mi41IDIwMC41ek0xNzkyIDY2N3EwIC0xMTEgLTMzLjUgLTI0OS41dC05My41IC0yMDQuNXEtNTggLTY0IC0xOTUgLTE0Mi41dC0yMjggLTEwNC41bC00IC0xdi0xMTRxMCAtNDMgLTI5LjUgLTc1dC03Mi41IC0zMnEtNTYgMCAtODYgNTBxLTMyIC01MCAtODcgLTUwdC04NyA1MHEtMzAgLTUwIC04NiAtNTBxLTU1IDAgLTg3IDUwcS0zMCAtNTAgLTg2IC01MHEtNDcgMCAtNzUgMzMuNXQtMjggODEuNQpxLTkwIC02OCAtMTk4IC02OHEtMTE4IDAgLTIxMSA4MHE1NCAxIDEwNiAyMHEtMTEzIDMxIC0xODIgMTI3cTMyIC03IDcxIC03cTg5IDAgMTY0IDQ2cS0xOTIgMTkyIC0yNDAgMzA2cS0yNCA1NiAtMjQgMTYwcTAgNTcgOSAxMjUuNXQzMS41IDE0Ni41dDU1IDE0MXQ4Ni41IDEwNXQxMjAgNDJxNTkgMCA4MSAtNTJxMTkgMjkgNDIgNTRxMiAzIDEyIDEzdDEzIDE2cTEwIDE1IDIzIDM4dDI1IDQydDI4IDM5cTg3IDExMSAyMTEuNSAxNzcKdDI2MC41IDY2cTM1IDAgNjIgLTRxNTkgNjQgMTQ2IDY0cTgzIDAgMTQwIC01N3E1IC01IDUgLTEycTAgLTUgLTYgLTEzLjV0LTEyLjUgLTE2dC0xNiAtMTdsLTEwLjUgLTEwLjVxMTcgLTYgMzYgLTE4dDE5IC0yNHEwIC02IC0xNiAtMjVxMTU3IC0xMzggMTk3IC0zNzhxMjUgMzAgNjAgMzBxNDUgMCAxMDAgLTQ5cTkwIC04MCA5MCAtMjc5eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlGMkIzIiB1bmljb2RlPSImI3hmMmIzOyIgCmQ9Ik05MTcgNjMxcTAgMzMgLTYgNjRoLTM2MnYtMTMyaDIxN3EtMTIgLTc2IC03NC41IC0xMjAuNXQtMTQyLjUgLTQ0LjVxLTk5IDAgLTE2OSA3MS41dC03MCAxNzAuNXQ3MCAxNzAuNXQxNjkgNzEuNXE5MyAwIDE1MyAtNTlsMTA0IDEwMXEtMTA4IDEwMCAtMjU3IDEwMHEtMTYwIDAgLTI3MiAtMTEyLjV0LTExMiAtMjcxLjV0MTEyIC0yNzEuNXQyNzIgLTExMi41cTE2NSAwIDI2Ni41IDEwNXQxMDEuNSAyNzB6TTEyNjIgNTg1aDEwOXYxMTAKaC0xMDl2MTEwaC0xMTB2LTExMGgtMTEwdi0xMTBoMTEwdi0xMTBoMTEwdjExMHpNMTUzNiA2NDBxMCAtMjA5IC0xMDMgLTM4NS41dC0yNzkuNSAtMjc5LjV0LTM4NS41IC0xMDN0LTM4NS41IDEwM3QtMjc5LjUgMjc5LjV0LTEwMyAzODUuNXQxMDMgMzg1LjV0Mjc5LjUgMjc5LjV0Mzg1LjUgMTAzdDM4NS41IC0xMDN0Mjc5LjUgLTI3OS41dDEwMyAtMzg1LjV6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InVuaUYyQjQiIHVuaWNvZGU9IiYjeGYyYjQ7IiAKZD0iTTE1MzYgMTAyNHYtODM5cTAgLTQ4IC00OSAtNjJxLTE3NCAtNTIgLTMzOCAtNTJxLTczIDAgLTIxNS41IDI5LjV0LTIyNy41IDI5LjVxLTE2NCAwIC0zNzAgLTQ4di0zMzhoLTE2MHYxMzY4cS02MyAyNSAtMTAxIDgxdC0zOCAxMjRxMCA5MSA2NCAxNTV0MTU1IDY0dDE1NSAtNjR0NjQgLTE1NXEwIC02OCAtMzggLTEyNHQtMTAxIC04MXYtNjhxMTkwIDQ0IDM0MyA0NHE5OSAwIDE5OCAtMTVxMTQgLTIgMTExLjUgLTIyLjV0MTQ5LjUgLTIwLjUKcTc3IDAgMTY1IDE4cTExIDIgODAgMjF0ODkgMTlxMjYgMCA0NSAtMTl0MTkgLTQ1eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlGMkI1IiB1bmljb2RlPSImI3hmMmI1OyIgaG9yaXotYWR2LXg9IjIzMDQiIApkPSJNMTkyIDM4NHE0MCAwIDU2IDMydDAgNjR0LTU2IDMydC01NiAtMzJ0MCAtNjR0NTYgLTMyek0xNjY1IDQ0MnEtMTAgMTMgLTM4LjUgNTB0LTQxLjUgNTR0LTM4IDQ5dC00Mi41IDUzdC00MC41IDQ3dC00NSA0OWwtMTI1IC0xNDBxLTgzIC05NCAtMjA4LjUgLTkydC0yMDUuNSA5OHEtNTcgNjkgLTU2LjUgMTU4dDU4LjUgMTU3bDE3NyAyMDZxLTIyIDExIC01MSAxNi41dC00Ny41IDZ0LTU2LjUgLTAuNXQtNDkgLTFxLTkyIDAgLTE1OCAtNjYKbC0xNTggLTE1OGgtMTU1di01NDRxNSAwIDIxIDAuNXQyMiAwdDE5LjUgLTJ0MjAuNSAtNC41dDE3LjUgLTguNXQxOC41IC0xMy41bDI5NyAtMjkycTExNSAtMTExIDIyNyAtMTExcTc4IDAgMTI1IDQ3cTU3IC0yMCAxMTIuNSA4dDcyLjUgODVxNzQgLTYgMTI3IDQ0cTIwIDE4IDM2IDQ1LjV0MTQgNTAuNXExMCAtMTAgNDMgLTEwcTQzIDAgNzcgMjF0NDkuNSA1M3QxMiA3MS41dC0zMC41IDczLjV6TTE4MjQgMzg0aDk2djUxMmgtOTNsLTE1NyAxODAKcS02NiA3NiAtMTY5IDc2aC0xNjdxLTg5IDAgLTE0NiAtNjdsLTIwOSAtMjQzcS0yOCAtMzMgLTI4IC03NXQyNyAtNzVxNDMgLTUxIDExMCAtNTJ0MTExIDQ5bDE5MyAyMThxMjUgMjMgNTMuNSAyMS41dDQ3IC0yN3Q4LjUgLTU2LjVxMTYgLTE5IDU2IC02M3Q2MCAtNjhxMjkgLTM2IDgyLjUgLTEwNS41dDY0LjUgLTg0LjVxNTIgLTY2IDYwIC0xNDB6TTIxMTIgMzg0cTQwIDAgNTYgMzJ0MCA2NHQtNTYgMzJ0LTU2IC0zMnQwIC02NHQ1NiAtMzJ6Ck0yMzA0IDk2MHYtNjQwcTAgLTI2IC0xOSAtNDV0LTQ1IC0xOWgtNDM0cS0yNyAtNjUgLTgyIC0xMDYuNXQtMTI1IC01MS41cS0zMyAtNDggLTgwLjUgLTgxLjV0LTEwMi41IC00NS41cS00MiAtNTMgLTEwNC41IC04MS41dC0xMjguNSAtMjQuNXEtNjAgLTM0IC0xMjYgLTM5LjV0LTEyNy41IDE0dC0xMTcgNTMuNXQtMTAzLjUgODFsLTI4NyAyODJoLTM1OHEtMjYgMCAtNDUgMTl0LTE5IDQ1djY3MnEwIDI2IDE5IDQ1dDQ1IDE5aDQyMQpxMTQgMTQgNDcgNDh0NDcuNSA0OHQ0NCA0MHQ1MC41IDM3LjV0NTEgMjUuNXQ2MiAxOS41dDY4IDUuNWgxMTdxOTkgMCAxODEgLTU2cTgyIDU2IDE4MSA1NmgxNjdxMzUgMCA2NyAtNnQ1Ni41IC0xNC41dDUxLjUgLTI2LjV0NDQuNSAtMzF0NDMgLTM5LjV0MzkgLTQydDQxIC00OHQ0MS41IC00OC41aDM1NXEyNiAwIDQ1IC0xOXQxOSAtNDV6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InVuaUYyQjYiIHVuaWNvZGU9IiYjeGYyYjY7IiBob3Jpei1hZHYteD0iMTc5MiIgCmQ9Ik0xNzkyIDg4MnYtOTc4cTAgLTY2IC00NyAtMTEzdC0xMTMgLTQ3aC0xNDcycS02NiAwIC0xMTMgNDd0LTQ3IDExM3Y5NzhxMCAxNSAxMSAyNHE4IDcgMzkgMzQuNXQ0MS41IDM2dDQ1LjUgMzcuNXQ3MCA1NS41dDk2IDczdDE0My41IDEwN3QxOTIuNSAxNDAuNXE1IDQgNTIuNSA0MHQ3MS41IDUyLjV0NjQgMzV0NjkgMTguNXQ2OSAtMTguNXQ2NSAtMzUuNXQ3MSAtNTJ0NTIgLTQwcTExMCAtODAgMTkyLjUgLTE0MC41dDE0My41IC0xMDcKdDk2IC03M3Q3MCAtNTUuNXQ0NS41IC0zNy41dDQxLjUgLTM2dDM5IC0zNC41cTExIC05IDExIC0yNHpNMTIyOCAyOTdxMjYzIDE5MSAzNDUgMjUycTExIDggMTIuNSAyMC41dC02LjUgMjMuNWwtMzggNTJxLTggMTEgLTIxIDEyLjV0LTI0IC02LjVxLTIzMSAtMTY5IC0zNDMgLTI1MHEtNSAtMyAtNTIgLTM5dC03MS41IC01Mi41dC02NC41IC0zNXQtNjkgLTE4LjV0LTY5IDE4LjV0LTY0LjUgMzV0LTcxLjUgNTIuNXQtNTIgMzkKcS0xODYgMTM0IC0zNDMgMjUwcS0xMSA4IC0yNCA2LjV0LTIxIC0xMi41bC0zOCAtNTJxLTggLTExIC02LjUgLTIzLjV0MTIuNSAtMjAuNXE4MiAtNjEgMzQ1IC0yNTJxMTAgLTggNTAgLTM4dDY1IC00N3Q2NCAtMzkuNXQ3Ny41IC0zMy41dDc1LjUgLTExdDc1LjUgMTF0NzkgMzQuNXQ2NC41IDM5LjV0NjUgNDcuNXQ0OCAzNi41eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlGMkI3IiB1bmljb2RlPSImI3hmMmI3OyIgaG9yaXotYWR2LXg9IjE3OTIiIApkPSJNMTQ3NCA2MjNsMzkgLTUxcTggLTExIDYuNSAtMjMuNXQtMTEuNSAtMjAuNXEtNDMgLTM0IC0xMjYuNSAtOTguNXQtMTQ2LjUgLTExM3QtNjcgLTUxLjVxLTM5IC0zMiAtNjAgLTQ4dC02MC41IC00MXQtNzYuNSAtMzYuNXQtNzQgLTExLjVoLTFoLTFxLTM3IDAgLTc0IDExLjV0LTc2IDM2LjV0LTYxIDQxLjV0LTYwIDQ3LjVxLTUgNCAtNjUgNTAuNXQtMTQzLjUgMTExdC0xMjIuNSA5NC41cS0xMSA4IC0xMi41IDIwLjV0Ni41IDIzLjUKbDM3IDUycTggMTEgMjEuNSAxM3QyNC41IC03cTk0IC03MyAzMDYgLTIzNnE1IC00IDQzLjUgLTM1dDYwLjUgLTQ2LjV0NTYuNSAtMzIuNXQ1OC41IC0xN2gxaDFxMjQgMCA1OC41IDE3dDU2LjUgMzIuNXQ2MC41IDQ2LjV0NDMuNSAzNXEyNTggMTk4IDMxMyAyNDJxMTEgOCAyNCA2LjV0MjEgLTEyLjV6TTE2NjQgLTk2djkyOHEtOTAgODMgLTE1OSAxMzlxLTkxIDc0IC0zODkgMzA0cS0zIDIgLTQzIDM1dC02MSA0OHQtNTYgMzIuNXQtNTkgMTcuNQpoLTFoLTFxLTI0IDAgLTU5IC0xNy41dC01NiAtMzIuNXQtNjEgLTQ4dC00MyAtMzVxLTIxNSAtMTY2IC0zMTUuNSAtMjQ1LjV0LTEyOS41IC0xMDR0LTgyIC03NC41cS0xNCAtMTIgLTIxIC0xOXYtOTI4cTAgLTEzIDkuNSAtMjIuNXQyMi41IC05LjVoMTQ3MnExMyAwIDIyLjUgOS41dDkuNSAyMi41ek0xNzkyIDgzMnYtOTI4cTAgLTY2IC00NyAtMTEzdC0xMTMgLTQ3aC0xNDcycS02NiAwIC0xMTMgNDd0LTQ3IDExM3Y5MjhxMCA1NiA0MSA5NApxMTIzIDExNCAzNTAgMjkwLjV0MjMzIDE4MS41cTM2IDMwIDU5IDQ3LjV0NjEuNSA0MnQ3NiAzNi41dDc0LjUgMTJoMWgxcTM3IDAgNzQuNSAtMTJ0NzYgLTM2LjV0NjEuNSAtNDJ0NTkgLTQ3LjVxNDMgLTM2IDE1NiAtMTIydDIyNiAtMTc3dDIwMSAtMTczcTQxIC0zOCA0MSAtOTR6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InVuaUYyQjgiIHVuaWNvZGU9IiYjeGYyYjg7IiAKZD0iTTMzMCAxbDIwMiAtMjE0bC0zNCAyMzZsLTIxNiAyMTN6TTU1NiAtMjI1bDI3NCAyMThsLTExIDI0NWwtMzAwIC0yMTV6TTI0NSA0MTNsMjI3IC0yMTNsLTQ4IDMyN2wtMjQ1IDIwNHpNNDk1IDE4OWwzMTcgMjE0bC0xNCAzMjRsLTM1MiAtMjAwek04NDMgMTc4bDk1IC04MGwtMiAyMzlsLTEwMyA3OXEwIC0xIDEgLTguNXQwIC0xMnQtNSAtNy41bC03OCAtNTJsODUgLTcwcTcgLTYgNyAtODh6TTEzOCA5MzBsMjU2IC0yMDBsLTY4IDQ2NQpsLTI3OSAxNzN6TTExNzMgMjY3bDE1IDIzNGwtMjMwIC0xNjRsMiAtMjQwek00MTcgNzIybDM3MyAxOTRsLTE5IDQ0MWwtNDIzIC0xNjN6TTEyNzAgMzU3bDIwIDIzM2wtMjI2IDE0MmwtMiAtMTA1bDE0NCAtOTVxNiAtNCA0IC05bC03IC0xMTl6TTE0NjEgNDk2bDMwIDIyMmwtMTc5IC0xMjhsLTIwIC0yMjh6TTEyNzMgMzI5bC03MSA0OWwtOCAtMTE3cTAgLTUgLTQgLThsLTIzNCAtMTg3cS03IC01IC0xNCAwbC05OCA4M2w3IC0xNjEKcTAgLTUgLTQgLThsLTI5MyAtMjM0cS00IC0yIC02IC0ycS04IDIgLTggM2wtMjI4IDI0MnEtNCA0IC01OSAyNzdxLTIgNyA1IDExbDYxIDM3cS05NCA4NiAtOTUgOTJsLTcyIDM1MXEtMiA3IDYgMTJsOTQgNDVxLTEzMyAxMDAgLTEzNSAxMDhsLTk2IDQ2NnEtMiAxMCA3IDEzbDQzMyAxMzVxNSAwIDggLTFsMzE3IC0xNTNxNiAtNCA2IC05bDIwIC00NjNxMCAtNyAtNiAtMTBsLTExOCAtNjFsMTI2IC04NXE1IC0yIDUgLThsNSAtMTIzbDEyMSA3NApxNSA0IDExIDBsODQgLTU2bDMgMTEwcTAgNiA1IDlsMjA2IDEyNnE2IDMgMTEgMGwyNDUgLTEzNXE0IC00IDUgLTd0LTYuNSAtNjB0LTE3LjUgLTEyNC41dC0xMCAtNzAuNXEwIC01IC00IC03bC0xOTEgLTE1M3EtNiAtNSAtMTMgMHoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idW5pRjJCOSIgdW5pY29kZT0iJiN4ZjJiOTsiIGhvcml6LWFkdi14PSIxNjY0IiAKZD0iTTEyMDEgMjk4cTAgNTcgLTUuNSAxMDd0LTIxIDEwMC41dC0zOS41IDg2dC02NCA1OHQtOTEgMjIuNXEtNiAtNCAtMzMuNSAtMjAuNXQtNDIuNSAtMjQuNXQtNDAuNSAtMjB0LTQ5IC0xN3QtNDYuNSAtNXQtNDYuNSA1dC00OSAxN3QtNDAuNSAyMHQtNDIuNSAyNC41dC0zMy41IDIwLjVxLTUxIDAgLTkxIC0yMi41dC02NCAtNTh0LTM5LjUgLTg2dC0yMSAtMTAwLjV0LTUuNSAtMTA3cTAgLTczIDQyIC0xMjEuNXQxMDMgLTQ4LjVoNTc2CnE2MSAwIDEwMyA0OC41dDQyIDEyMS41ek0xMDI4IDg5MnEwIDEwOCAtNzYuNSAxODR0LTE4My41IDc2dC0xODMuNSAtNzZ0LTc2LjUgLTE4NHEwIC0xMDcgNzYuNSAtMTgzdDE4My41IC03NnQxODMuNSA3NnQ3Ni41IDE4M3pNMTY2NCAzNTJ2LTE5MnEwIC0xNCAtOSAtMjN0LTIzIC05aC05NnYtMjI0cTAgLTY2IC00NyAtMTEzdC0xMTMgLTQ3aC0xMjE2cS02NiAwIC0xMTMgNDd0LTQ3IDExM3YxNDcycTAgNjYgNDcgMTEzdDExMyA0N2gxMjE2CnE2NiAwIDExMyAtNDd0NDcgLTExM3YtMjI0aDk2cTE0IDAgMjMgLTl0OSAtMjN2LTE5MnEwIC0xNCAtOSAtMjN0LTIzIC05aC05NnYtMTI4aDk2cTE0IDAgMjMgLTl0OSAtMjN2LTE5MnEwIC0xNCAtOSAtMjN0LTIzIC05aC05NnYtMTI4aDk2cTE0IDAgMjMgLTl0OSAtMjN6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InVuaUYyQkEiIHVuaWNvZGU9IiYjeGYyYmE7IiBob3Jpei1hZHYteD0iMTY2NCIgCmQ9Ik0xMDI4IDg5MnEwIC0xMDcgLTc2LjUgLTE4M3QtMTgzLjUgLTc2dC0xODMuNSA3NnQtNzYuNSAxODNxMCAxMDggNzYuNSAxODR0MTgzLjUgNzZ0MTgzLjUgLTc2dDc2LjUgLTE4NHpNOTgwIDY3MnE0NiAwIDgyLjUgLTE3dDYwIC00Ny41dDM5LjUgLTY3dDI0IC04MXQxMS41IC04Mi41dDMuNSAtNzlxMCAtNjcgLTM5LjUgLTExOC41dC0xMDUuNSAtNTEuNWgtNTc2cS02NiAwIC0xMDUuNSA1MS41dC0zOS41IDExOC41cTAgNDggNC41IDkzLjUKdDE4LjUgOTguNXQzNi41IDkxLjV0NjMgNjQuNXQ5My41IDI2aDVxNyAtNCAzMiAtMTkuNXQzNS41IC0yMXQzMyAtMTd0MzcgLTE2dDM1IC05dDM5LjUgLTQuNXQzOS41IDQuNXQzNSA5dDM3IDE2dDMzIDE3dDM1LjUgMjF0MzIgMTkuNXpNMTY2NCA5MjhxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC05NnYtMTI4aDk2cTEzIDAgMjIuNSAtOS41dDkuNSAtMjIuNXYtMTkycTAgLTEzIC05LjUgLTIyLjV0LTIyLjUgLTkuNWgtOTZ2LTEyOGg5NgpxMTMgMCAyMi41IC05LjV0OS41IC0yMi41di0xOTJxMCAtMTMgLTkuNSAtMjIuNXQtMjIuNSAtOS41aC05NnYtMjI0cTAgLTY2IC00NyAtMTEzdC0xMTMgLTQ3aC0xMjE2cS02NiAwIC0xMTMgNDd0LTQ3IDExM3YxNDcycTAgNjYgNDcgMTEzdDExMyA0N2gxMjE2cTY2IDAgMTEzIC00N3Q0NyAtMTEzdi0yMjRoOTZxMTMgMCAyMi41IC05LjV0OS41IC0yMi41di0xOTJ6TTE0MDggLTk2djE0NzJxMCAxMyAtOS41IDIyLjV0LTIyLjUgOS41aC0xMjE2CnEtMTMgMCAtMjIuNSAtOS41dC05LjUgLTIyLjV2LTE0NzJxMCAtMTMgOS41IC0yMi41dDIyLjUgLTkuNWgxMjE2cTEzIDAgMjIuNSA5LjV0OS41IDIyLjV6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InVuaUYyQkIiIHVuaWNvZGU9IiYjeGYyYmI7IiBob3Jpei1hZHYteD0iMjA0OCIgCmQ9Ik0xMDI0IDQwNXEwIDY0IC05IDExNy41dC0yOS41IDEwM3QtNjAuNSA3OHQtOTcgMjguNXEtNiAtNCAtMzAgLTE4dC0zNy41IC0yMS41dC0zNS41IC0xNy41dC00MyAtMTQuNXQtNDIgLTQuNXQtNDIgNC41dC00MyAxNC41dC0zNS41IDE3LjV0LTM3LjUgMjEuNXQtMzAgMThxLTU3IDAgLTk3IC0yOC41dC02MC41IC03OHQtMjkuNSAtMTAzdC05IC0xMTcuNXQzNyAtMTA2LjV0OTEgLTQyLjVoNTEycTU0IDAgOTEgNDIuNXQzNyAxMDYuNXoKTTg2NyA5MjVxMCA5NCAtNjYuNSAxNjAuNXQtMTYwLjUgNjYuNXQtMTYwLjUgLTY2LjV0LTY2LjUgLTE2MC41dDY2LjUgLTE2MC41dDE2MC41IC02Ni41dDE2MC41IDY2LjV0NjYuNSAxNjAuNXpNMTc5MiA0MTZ2NjRxMCAxNCAtOSAyM3QtMjMgOWgtNTc2cS0xNCAwIC0yMyAtOXQtOSAtMjN2LTY0cTAgLTE0IDkgLTIzdDIzIC05aDU3NnExNCAwIDIzIDl0OSAyM3pNMTc5MiA2NzZ2NTZxMCAxNSAtMTAuNSAyNS41dC0yNS41IDEwLjVoLTU2OApxLTE1IDAgLTI1LjUgLTEwLjV0LTEwLjUgLTI1LjV2LTU2cTAgLTE1IDEwLjUgLTI1LjV0MjUuNSAtMTAuNWg1NjhxMTUgMCAyNS41IDEwLjV0MTAuNSAyNS41ek0xNzkyIDkyOHY2NHEwIDE0IC05IDIzdC0yMyA5aC01NzZxLTE0IDAgLTIzIC05dC05IC0yM3YtNjRxMCAtMTQgOSAtMjN0MjMgLTloNTc2cTE0IDAgMjMgOXQ5IDIzek0yMDQ4IDEyNDh2LTEyMTZxMCAtNjYgLTQ3IC0xMTN0LTExMyAtNDdoLTM1MnY5NnEwIDE0IC05IDIzdC0yMyA5CmgtNjRxLTE0IDAgLTIzIC05dC05IC0yM3YtOTZoLTc2OHY5NnEwIDE0IC05IDIzdC0yMyA5aC02NHEtMTQgMCAtMjMgLTl0LTkgLTIzdi05NmgtMzUycS02NiAwIC0xMTMgNDd0LTQ3IDExM3YxMjE2cTAgNjYgNDcgMTEzdDExMyA0N2gxNzI4cTY2IDAgMTEzIC00N3Q0NyAtMTEzeiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlGMkJDIiB1bmljb2RlPSImI3hmMmJjOyIgaG9yaXotYWR2LXg9IjIwNDgiIApkPSJNMTAyNCA0MDVxMCAtNjQgLTM3IC0xMDYuNXQtOTEgLTQyLjVoLTUxMnEtNTQgMCAtOTEgNDIuNXQtMzcgMTA2LjV0OSAxMTcuNXQyOS41IDEwM3Q2MC41IDc4dDk3IDI4LjVxNiAtNCAzMCAtMTh0MzcuNSAtMjEuNXQzNS41IC0xNy41dDQzIC0xNC41dDQyIC00LjV0NDIgNC41dDQzIDE0LjV0MzUuNSAxNy41dDM3LjUgMjEuNXQzMCAxOHE1NyAwIDk3IC0yOC41dDYwLjUgLTc4dDI5LjUgLTEwM3Q5IC0xMTcuNXpNODY3IDkyNQpxMCAtOTQgLTY2LjUgLTE2MC41dC0xNjAuNSAtNjYuNXQtMTYwLjUgNjYuNXQtNjYuNSAxNjAuNXQ2Ni41IDE2MC41dDE2MC41IDY2LjV0MTYwLjUgLTY2LjV0NjYuNSAtMTYwLjV6TTE3OTIgNDgwdi02NHEwIC0xNCAtOSAtMjN0LTIzIC05aC01NzZxLTE0IDAgLTIzIDl0LTkgMjN2NjRxMCAxNCA5IDIzdDIzIDloNTc2cTE0IDAgMjMgLTl0OSAtMjN6TTE3OTIgNzMydi01NnEwIC0xNSAtMTAuNSAtMjUuNXQtMjUuNSAtMTAuNWgtNTY4CnEtMTUgMCAtMjUuNSAxMC41dC0xMC41IDI1LjV2NTZxMCAxNSAxMC41IDI1LjV0MjUuNSAxMC41aDU2OHExNSAwIDI1LjUgLTEwLjV0MTAuNSAtMjUuNXpNMTc5MiA5OTJ2LTY0cTAgLTE0IC05IC0yM3QtMjMgLTloLTU3NnEtMTQgMCAtMjMgOXQtOSAyM3Y2NHEwIDE0IDkgMjN0MjMgOWg1NzZxMTQgMCAyMyAtOXQ5IC0yM3pNMTkyMCAzMnYxMjE2cTAgMTMgLTkuNSAyMi41dC0yMi41IDkuNWgtMTcyOHEtMTMgMCAtMjIuNSAtOS41CnQtOS41IC0yMi41di0xMjE2cTAgLTEzIDkuNSAtMjIuNXQyMi41IC05LjVoMzUydjk2cTAgMTQgOSAyM3QyMyA5aDY0cTE0IDAgMjMgLTl0OSAtMjN2LTk2aDc2OHY5NnEwIDE0IDkgMjN0MjMgOWg2NHExNCAwIDIzIC05dDkgLTIzdi05NmgzNTJxMTMgMCAyMi41IDkuNXQ5LjUgMjIuNXpNMjA0OCAxMjQ4di0xMjE2cTAgLTY2IC00NyAtMTEzdC0xMTMgLTQ3aC0xNzI4cS02NiAwIC0xMTMgNDd0LTQ3IDExM3YxMjE2cTAgNjYgNDcgMTEzCnQxMTMgNDdoMTcyOHE2NiAwIDExMyAtNDd0NDcgLTExM3oiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idW5pRjJCRCIgdW5pY29kZT0iJiN4ZjJiZDsiIGhvcml6LWFkdi14PSIxNzkyIiAKZD0iTTE1MjMgMTk3cS0yMiAxNTUgLTg3LjUgMjU3LjV0LTE4NC41IDExOC41cS02NyAtNzQgLTE1OS41IC0xMTUuNXQtMTk1LjUgLTQxLjV0LTE5NS41IDQxLjV0LTE1OS41IDExNS41cS0xMTkgLTE2IC0xODQuNSAtMTE4LjV0LTg3LjUgLTI1Ny41cTEwNiAtMTUwIDI3MSAtMjM3LjV0MzU2IC04Ny41dDM1NiA4Ny41dDI3MSAyMzcuNXpNMTI4MCA4OTZxMCAxNTkgLTExMi41IDI3MS41dC0yNzEuNSAxMTIuNXQtMjcxLjUgLTExMi41CnQtMTEyLjUgLTI3MS41dDExMi41IC0yNzEuNXQyNzEuNSAtMTEyLjV0MjcxLjUgMTEyLjV0MTEyLjUgMjcxLjV6TTE3OTIgNjQwcTAgLTE4MiAtNzEgLTM0Ny41dC0xOTAuNSAtMjg2dC0yODUuNSAtMTkxLjV0LTM0OSAtNzFxLTE4MiAwIC0zNDggNzF0LTI4NiAxOTF0LTE5MSAyODZ0LTcxIDM0OHQ3MSAzNDh0MTkxIDI4NnQyODYgMTkxdDM0OCA3MXQzNDggLTcxdDI4NiAtMTkxdDE5MSAtMjg2dDcxIC0zNDh6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InVuaUYyQkUiIHVuaWNvZGU9IiYjeGYyYmU7IiBob3Jpei1hZHYteD0iMTc5MiIgCmQ9Ik04OTYgMTUzNnExODIgMCAzNDggLTcxdDI4NiAtMTkxdDE5MSAtMjg2dDcxIC0zNDhxMCAtMTgxIC03MC41IC0zNDd0LTE5MC41IC0yODZ0LTI4NiAtMTkxLjV0LTM0OSAtNzEuNXQtMzQ5IDcxdC0yODUuNSAxOTEuNXQtMTkwLjUgMjg2dC03MSAzNDcuNXQ3MSAzNDh0MTkxIDI4NnQyODYgMTkxdDM0OCA3MXpNMTUxNSAxODVxMTQ5IDIwNSAxNDkgNDU1cTAgMTU2IC02MSAyOTh0LTE2NCAyNDV0LTI0NSAxNjR0LTI5OCA2MXQtMjk4IC02MQp0LTI0NSAtMTY0dC0xNjQgLTI0NXQtNjEgLTI5OHEwIC0yNTAgMTQ5IC00NTVxNjYgMzI3IDMwNiAzMjdxMTMxIC0xMjggMzEzIC0xMjh0MzEzIDEyOHEyNDAgMCAzMDYgLTMyN3pNMTI4MCA4MzJxMCAxNTkgLTExMi41IDI3MS41dC0yNzEuNSAxMTIuNXQtMjcxLjUgLTExMi41dC0xMTIuNSAtMjcxLjV0MTEyLjUgLTI3MS41dDI3MS41IC0xMTIuNXQyNzEuNSAxMTIuNXQxMTIuNSAyNzEuNXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idW5pRjJDMCIgdW5pY29kZT0iJiN4ZjJjMDsiIApkPSJNMTIwMSA3NTJxNDcgLTE0IDg5LjUgLTM4dDg5IC03M3Q3OS41IC0xMTUuNXQ1NSAtMTcydDIyIC0yMzYuNXEwIC0xNTQgLTEwMCAtMjYzLjV0LTI0MSAtMTA5LjVoLTg1NHEtMTQxIDAgLTI0MSAxMDkuNXQtMTAwIDI2My41cTAgMTMxIDIyIDIzNi41dDU1IDE3MnQ3OS41IDExNS41dDg5IDczdDg5LjUgMzhxLTc5IDEyNSAtNzkgMjcycTAgMTA0IDQwLjUgMTk4LjV0MTA5LjUgMTYzLjV0MTYzLjUgMTA5LjV0MTk4LjUgNDAuNQp0MTk4LjUgLTQwLjV0MTYzLjUgLTEwOS41dDEwOS41IC0xNjMuNXQ0MC41IC0xOTguNXEwIC0xNDcgLTc5IC0yNzJ6TTc2OCAxNDA4cS0xNTkgMCAtMjcxLjUgLTExMi41dC0xMTIuNSAtMjcxLjV0MTEyLjUgLTI3MS41dDI3MS41IC0xMTIuNXQyNzEuNSAxMTIuNXQxMTIuNSAyNzEuNXQtMTEyLjUgMjcxLjV0LTI3MS41IDExMi41ek0xMTk1IC0xMjhxODggMCAxNTAuNSA3MS41dDYyLjUgMTczLjVxMCAyMzkgLTc4LjUgMzc3dC0yMjUuNSAxNDUKcS0xNDUgLTEyNyAtMzM2IC0xMjd0LTMzNiAxMjdxLTE0NyAtNyAtMjI1LjUgLTE0NXQtNzguNSAtMzc3cTAgLTEwMiA2Mi41IC0xNzMuNXQxNTAuNSAtNzEuNWg4NTR6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InVuaUYyQzEiIHVuaWNvZGU9IiYjeGYyYzE7IiBob3Jpei1hZHYteD0iMTI4MCIgCmQ9Ik0xMDI0IDI3OHEwIC02NCAtMzcgLTEwN3QtOTEgLTQzaC01MTJxLTU0IDAgLTkxIDQzdC0zNyAxMDd0OSAxMTh0MjkuNSAxMDR0NjEgNzguNXQ5Ni41IDI4LjVxODAgLTc1IDE4OCAtNzV0MTg4IDc1cTU2IDAgOTYuNSAtMjguNXQ2MSAtNzguNXQyOS41IC0xMDR0OSAtMTE4ek04NzAgNzk3cTAgLTk0IC02Ny41IC0xNjAuNXQtMTYyLjUgLTY2LjV0LTE2Mi41IDY2LjV0LTY3LjUgMTYwLjV0NjcuNSAxNjAuNXQxNjIuNSA2Ni41CnQxNjIuNSAtNjYuNXQ2Ny41IC0xNjAuNXpNMTE1MiAtOTZ2MTM3NmgtMTAyNHYtMTM3NnEwIC0xMyA5LjUgLTIyLjV0MjIuNSAtOS41aDk2MHExMyAwIDIyLjUgOS41dDkuNSAyMi41ek0xMjgwIDEzNzZ2LTE0NzJxMCAtNjYgLTQ3IC0xMTN0LTExMyAtNDdoLTk2MHEtNjYgMCAtMTEzIDQ3dC00NyAxMTN2MTQ3MnEwIDY2IDQ3IDExM3QxMTMgNDdoMzUydi05NnEwIC0xNCA5IC0yM3QyMyAtOWgxOTJxMTQgMCAyMyA5dDkgMjN2OTZoMzUyCnE2NiAwIDExMyAtNDd0NDcgLTExM3oiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idW5pRjJDMiIgdW5pY29kZT0iJiN4ZjJjMjsiIGhvcml6LWFkdi14PSIyMDQ4IiAKZD0iTTg5NiAzMjRxMCA1NCAtNy41IDEwMC41dC0yNC41IDkwdC01MSA2OC41dC04MSAyNXEtNjQgLTY0IC0xNTYgLTY0dC0xNTYgNjRxLTQ3IDAgLTgxIC0yNXQtNTEgLTY4LjV0LTI0LjUgLTkwdC03LjUgLTEwMC41cTAgLTU1IDMxLjUgLTkzLjV0NzUuNSAtMzguNWg0MjZxNDQgMCA3NS41IDM4LjV0MzEuNSA5My41ek03NjggNzY4cTAgODAgLTU2IDEzNnQtMTM2IDU2dC0xMzYgLTU2dC01NiAtMTM2dDU2IC0xMzZ0MTM2IC01NnQxMzYgNTYKdDU2IDEzNnpNMTc5MiAyODh2NjRxMCAxNCAtOSAyM3QtMjMgOWgtNzA0cS0xNCAwIC0yMyAtOXQtOSAtMjN2LTY0cTAgLTE0IDkgLTIzdDIzIC05aDcwNHExNCAwIDIzIDl0OSAyM3pNMTQwOCA1NDR2NjRxMCAxNCAtOSAyM3QtMjMgOWgtMzIwcS0xNCAwIC0yMyAtOXQtOSAtMjN2LTY0cTAgLTE0IDkgLTIzdDIzIC05aDMyMHExNCAwIDIzIDl0OSAyM3pNMTc5MiA1NDR2NjRxMCAxNCAtOSAyM3QtMjMgOWgtMTkycS0xNCAwIC0yMyAtOXQtOSAtMjMKdi02NHEwIC0xNCA5IC0yM3QyMyAtOWgxOTJxMTQgMCAyMyA5dDkgMjN6TTE3OTIgODAwdjY0cTAgMTQgLTkgMjN0LTIzIDloLTcwNHEtMTQgMCAtMjMgLTl0LTkgLTIzdi02NHEwIC0xNCA5IC0yM3QyMyAtOWg3MDRxMTQgMCAyMyA5dDkgMjN6TTEyOCAxMTUyaDE3OTJ2OTZxMCAxNCAtOSAyM3QtMjMgOWgtMTcyOHEtMTQgMCAtMjMgLTl0LTkgLTIzdi05NnpNMjA0OCAxMjQ4di0xMjE2cTAgLTY2IC00NyAtMTEzdC0xMTMgLTQ3aC0xNzI4CnEtNjYgMCAtMTEzIDQ3dC00NyAxMTN2MTIxNnEwIDY2IDQ3IDExM3QxMTMgNDdoMTcyOHE2NiAwIDExMyAtNDd0NDcgLTExM3oiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idW5pRjJDMyIgdW5pY29kZT0iJiN4ZjJjMzsiIGhvcml6LWFkdi14PSIyMDQ4IiAKZD0iTTg5NiAzMjRxMCAtNTUgLTMxLjUgLTkzLjV0LTc1LjUgLTM4LjVoLTQyNnEtNDQgMCAtNzUuNSAzOC41dC0zMS41IDkzLjVxMCA1NCA3LjUgMTAwLjV0MjQuNSA5MHQ1MSA2OC41dDgxIDI1cTY0IC02NCAxNTYgLTY0dDE1NiA2NHE0NyAwIDgxIC0yNXQ1MSAtNjguNXQyNC41IC05MHQ3LjUgLTEwMC41ek03NjggNzY4cTAgLTgwIC01NiAtMTM2dC0xMzYgLTU2dC0xMzYgNTZ0LTU2IDEzNnQ1NiAxMzZ0MTM2IDU2dDEzNiAtNTZ0NTYgLTEzNnoKTTE3OTIgMzUydi02NHEwIC0xNCAtOSAtMjN0LTIzIC05aC03MDRxLTE0IDAgLTIzIDl0LTkgMjN2NjRxMCAxNCA5IDIzdDIzIDloNzA0cTE0IDAgMjMgLTl0OSAtMjN6TTE0MDggNjA4di02NHEwIC0xNCAtOSAtMjN0LTIzIC05aC0zMjBxLTE0IDAgLTIzIDl0LTkgMjN2NjRxMCAxNCA5IDIzdDIzIDloMzIwcTE0IDAgMjMgLTl0OSAtMjN6TTE3OTIgNjA4di02NHEwIC0xNCAtOSAtMjN0LTIzIC05aC0xOTJxLTE0IDAgLTIzIDl0LTkgMjN2NjQKcTAgMTQgOSAyM3QyMyA5aDE5MnExNCAwIDIzIC05dDkgLTIzek0xNzkyIDg2NHYtNjRxMCAtMTQgLTkgLTIzdC0yMyAtOWgtNzA0cS0xNCAwIC0yMyA5dC05IDIzdjY0cTAgMTQgOSAyM3QyMyA5aDcwNHExNCAwIDIzIC05dDkgLTIzek0xOTIwIDMydjExMjBoLTE3OTJ2LTExMjBxMCAtMTMgOS41IC0yMi41dDIyLjUgLTkuNWgxNzI4cTEzIDAgMjIuNSA5LjV0OS41IDIyLjV6TTIwNDggMTI0OHYtMTIxNnEwIC02NiAtNDcgLTExM3QtMTEzIC00NwpoLTE3MjhxLTY2IDAgLTExMyA0N3QtNDcgMTEzdjEyMTZxMCA2NiA0NyAxMTN0MTEzIDQ3aDE3MjhxNjYgMCAxMTMgLTQ3dDQ3IC0xMTN6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InVuaUYyQzQiIHVuaWNvZGU9IiYjeGYyYzQ7IiBob3Jpei1hZHYteD0iMTc5MiIgCmQ9Ik0xMjU1IDc0OXEwIDMxOCAtMTA1IDQ3NC41dC0zMzAgMTU2LjVxLTIyMiAwIC0zMjYgLTE1N3QtMTA0IC00NzRxMCAtMzE2IDEwNCAtNDcxLjV0MzI2IC0xNTUuNXE3NCAwIDEzMSAxN3EtMjIgNDMgLTM5IDczdC00NCA2NXQtNTMuNSA1Ni41dC02MyAzNnQtNzcuNSAxNC41cS00NiAwIC03OSAtMTZsLTQ5IDk3cTEwNSA5MSAyNzYgOTFxMTMyIDAgMjE1LjUgLTU0dDE1MC41IC0xNTVxNjcgMTQ5IDY3IDQwMnpNMTY0NSAxMTdoMTE3CnEzIC0yNyAtMiAtNjd0LTI2LjUgLTk1dC01OCAtMTAwLjV0LTEwNyAtNzh0LTE2Mi41IC0zMi41cS03MSAwIC0xMzAuNSAxOXQtMTA1LjUgNTZ0LTc5IDc4dC02NiA5NnEtOTcgLTI3IC0yMDUgLTI3cS0xNTAgMCAtMjkyLjUgNTh0LTI1MyAxNTguNXQtMTc4IDI0OXQtNjcuNSAzMTcuNXEwIDE3MCA2Ny41IDMxOS41dDE3OC41IDI1MC41dDI1My41IDE1OXQyOTEuNSA1OHExMjEgMCAyMzguNSAtMzZ0MjE3IC0xMDZ0MTc2IC0xNjQuNQp0MTE5LjUgLTIxOXQ0MyAtMjYxLjVxMCAtMTkwIC04MC41IC0zNDcuNXQtMjE4LjUgLTI2NC41cTQ3IC03MCA5My41IC0xMDYuNXQxMDQuNSAtMzYuNXE2MSAwIDk0IDM3LjV0MzggODUuNXoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idW5pRjJDNSIgdW5pY29kZT0iJiN4ZjJjNTsiIGhvcml6LWFkdi14PSIyMzA0IiAKZD0iTTQ1MyAtMTAxcTAgLTIxIC0xNiAtMzcuNXQtMzcgLTE2LjVxLTEgMCAtMTMgM3EtNjMgMTUgLTE2MiAxNDBxLTIyNSAyODQgLTIyNSA2NzZxMCAzNDEgMjEzIDYxNHEzOSA1MSA5NSAxMDMuNXQ5NCA1Mi41cTE5IDAgMzUgLTEzLjV0MTYgLTMyLjVxMCAtMjcgLTYzIC05MHEtOTggLTEwMiAtMTQ3IC0xODRxLTExOSAtMTk5IC0xMTkgLTQ0OXEwIC0yODEgMTIzIC00OTFxNTAgLTg1IDEzNiAtMTczcTIgLTMgMTQuNSAtMTZ0MTkuNSAtMjEKdDE3IC0yMC41dDE0LjUgLTIzLjV0NC41IC0yMXpNMTc5NiAzM3EwIC0yOSAtMTcuNSAtNDguNXQtNDYuNSAtMTkuNWgtMTA4MXEtMjYgMCAtNDUgMTl0LTE5IDQ1cTAgMjkgMTcuNSA0OC41dDQ2LjUgMTkuNWgxMDgxcTI2IDAgNDUgLTE5dDE5IC00NXpNMTU4MSA2NDRxMCAtMTM0IC02NyAtMjMzcS0yNSAtMzggLTY5LjUgLTc4LjV0LTgzLjUgLTYwLjVxLTE2IC0xMCAtMjcgLTEwcS03IDAgLTE1IDZ0LTggMTJxMCA5IDE5IDMwdDQyIDQ2CnQ0MiA2Ny41dDE5IDg4LjVxMCA3NiAtMzUgMTMwcS0yOSA0MiAtNDYgNDJxLTMgMCAtMyAtNXEwIC0xMiA3LjUgLTM1LjV0Ny41IC0zNi41cTAgLTIyIC0yMS41IC0zNXQtNDQuNSAtMTNxLTY2IDAgLTY2IDc2cTAgMTUgMS41IDQ0dDEuNSA0NHEwIDI1IC0xMCA0NnEtMTMgMjUgLTQyIDUzLjV0LTUxIDI4LjVxLTUgMCAtNyAtMC41dC0zLjUgLTIuNXQtMS41IC02cTAgLTIgMTYgLTI2dDE2IC01NHEwIC0zNyAtMTkgLTY4dC00NiAtNTQKdC01My41IC00NnQtNDUuNSAtNTR0LTE5IC02OHEwIC05OCA0MiAtMTYwcTI5IC00MyA3OSAtNjNxMTYgLTUgMTcgLTEwcTEgLTIgMSAtNXEwIC0xNiAtMTggLTE2cS02IDAgLTMzIDExcS0xMTkgNDMgLTE5NSAxMzkuNXQtNzYgMjE4LjVxMCA1NSAyNC41IDExNS41dDYwIDExNXQ3MC41IDEwOC41dDU5LjUgMTEzLjV0MjQuNSAxMTEuNXEwIDUzIC0yNSA5NHEtMjkgNDggLTU2IDY0cS0xOSA5IC0xOSAyMXEwIDIwIDQxIDIwcTUwIDAgMTEwIC0yOQpxNDEgLTE5IDcxIC00NC41dDQ5LjUgLTUxdDMzLjUgLTYyLjV0MjIgLTY5dDE2IC04MHEwIC0xIDMgLTE3LjV0NC41IC0yNXQ1LjUgLTI1dDkgLTI3dDExIC0yMS41dDE0LjUgLTE2LjV0MTguNSAtNS41cTIzIDAgMzcgMTR0MTQgMzdxMCAyNSAtMjAgNjd0LTIwIDUydDEwIDEwcTI3IDAgOTMgLTcwcTcyIC03NiAxMDIuNSAtMTU2dDMwLjUgLTE4NnpNMjMwNCA2MTVxMCAtMjc0IC0xMzggLTUwM3EtMTkgLTMyIC00OCAtNzJ0LTY4IC04Ni41CnQtODEgLTc3dC03NCAtMzAuNXEtMTYgMCAtMzEgMTUuNXQtMTUgMzEuNXEwIDE1IDI5IDUwLjV0NjguNSA3N3Q0OC41IDUyLjVxMTgzIDIzMCAxODMgNTMxcTAgMTMxIC0yMC41IDIzNXQtNzIuNSAyMTFxLTU4IDExOSAtMTYzIDIyOHEtMiAzIC0xMyAxMy41dC0xNi41IDE2LjV0LTE1IDE3LjV0LTE1IDIwdC05LjUgMTguNXQtNCAxOXEwIDE5IDE2IDM1LjV0MzUgMTYuNXE3MCAwIDE5NiAtMTY5cTk4IC0xMzEgMTQ2IC0yNzN0NjAgLTMxNApxMiAtNDIgMiAtNjR6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InVuaUYyQzYiIHVuaWNvZGU9IiYjeGYyYzY7IiBob3Jpei1hZHYteD0iMTc5MiIgCmQ9Ik0xMTg5IDIyOWwxNDcgNjkzcTkgNDQgLTEwLjUgNjN0LTUxLjUgN2wtODY0IC0zMzNxLTI5IC0xMSAtMzkuNSAtMjV0LTIuNSAtMjYuNXQzMiAtMTkuNWwyMjEgLTY5bDUxMyAzMjNxMjEgMTQgMzIgNnE3IC01IC00IC0xNWwtNDE1IC0zNzV2MHYwbC0xNiAtMjI4cTIzIDAgNDUgMjJsMTA4IDEwNGwyMjQgLTE2NXE2NCAtMzYgODEgMzh6TTE3OTIgNjQwcTAgLTE4MiAtNzEgLTM0OHQtMTkxIC0yODZ0LTI4NiAtMTkxdC0zNDggLTcxCnQtMzQ4IDcxdC0yODYgMTkxdC0xOTEgMjg2dC03MSAzNDh0NzEgMzQ4dDE5MSAyODZ0Mjg2IDE5MXQzNDggNzF0MzQ4IC03MXQyODYgLTE5MXQxOTEgLTI4NnQ3MSAtMzQ4eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlGMkM3IiB1bmljb2RlPSImI3hmMmM3OyIgaG9yaXotYWR2LXg9IjEwMjQiIApkPSJNNjQwIDE5MnEwIC04MCAtNTYgLTEzNnQtMTM2IC01NnQtMTM2IDU2dC01NiAxMzZxMCA2MCAzNSAxMTB0OTMgNzF2OTA3aDEyOHYtOTA3cTU4IC0yMSA5MyAtNzF0MzUgLTExMHpNNzY4IDE5MnEwIDc3IC0zNCAxNDR0LTk0IDExMnY3NjhxMCA4MCAtNTYgMTM2dC0xMzYgNTZ0LTEzNiAtNTZ0LTU2IC0xMzZ2LTc2OHEtNjAgLTQ1IC05NCAtMTEydC0zNCAtMTQ0cTAgLTEzMyA5My41IC0yMjYuNXQyMjYuNSAtOTMuNXQyMjYuNSA5My41CnQ5My41IDIyNi41ek04OTYgMTkycTAgLTE4NSAtMTMxLjUgLTMxNi41dC0zMTYuNSAtMTMxLjV0LTMxNi41IDEzMS41dC0xMzEuNSAzMTYuNXEwIDE4MiAxMjggMzEzdjcxMXEwIDEzMyA5My41IDIyNi41dDIyNi41IDkzLjV0MjI2LjUgLTkzLjV0OTMuNSAtMjI2LjV2LTcxMXExMjggLTEzMSAxMjggLTMxM3pNMTAyNCA3Njh2LTEyOGgtMTkydjEyOGgxOTJ6TTEwMjQgMTAyNHYtMTI4aC0xOTJ2MTI4aDE5MnpNMTAyNCAxMjgwdi0xMjhoLTE5Mgp2MTI4aDE5MnoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idW5pRjJDOCIgdW5pY29kZT0iJiN4ZjJjODsiIGhvcml6LWFkdi14PSIxMDI0IiAKZD0iTTY0MCAxOTJxMCAtODAgLTU2IC0xMzZ0LTEzNiAtNTZ0LTEzNiA1NnQtNTYgMTM2cTAgNjAgMzUgMTEwdDkzIDcxdjY1MWgxMjh2LTY1MXE1OCAtMjEgOTMgLTcxdDM1IC0xMTB6TTc2OCAxOTJxMCA3NyAtMzQgMTQ0dC05NCAxMTJ2NzY4cTAgODAgLTU2IDEzNnQtMTM2IDU2dC0xMzYgLTU2dC01NiAtMTM2di03NjhxLTYwIC00NSAtOTQgLTExMnQtMzQgLTE0NHEwIC0xMzMgOTMuNSAtMjI2LjV0MjI2LjUgLTkzLjV0MjI2LjUgOTMuNQp0OTMuNSAyMjYuNXpNODk2IDE5MnEwIC0xODUgLTEzMS41IC0zMTYuNXQtMzE2LjUgLTEzMS41dC0zMTYuNSAxMzEuNXQtMTMxLjUgMzE2LjVxMCAxODIgMTI4IDMxM3Y3MTFxMCAxMzMgOTMuNSAyMjYuNXQyMjYuNSA5My41dDIyNi41IC05My41dDkzLjUgLTIyNi41di03MTFxMTI4IC0xMzEgMTI4IC0zMTN6TTEwMjQgNzY4di0xMjhoLTE5MnYxMjhoMTkyek0xMDI0IDEwMjR2LTEyOGgtMTkydjEyOGgxOTJ6TTEwMjQgMTI4MHYtMTI4aC0xOTIKdjEyOGgxOTJ6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InVuaUYyQzkiIHVuaWNvZGU9IiYjeGYyYzk7IiBob3Jpei1hZHYteD0iMTAyNCIgCmQ9Ik02NDAgMTkycTAgLTgwIC01NiAtMTM2dC0xMzYgLTU2dC0xMzYgNTZ0LTU2IDEzNnEwIDYwIDM1IDExMHQ5MyA3MXYzOTVoMTI4di0zOTVxNTggLTIxIDkzIC03MXQzNSAtMTEwek03NjggMTkycTAgNzcgLTM0IDE0NHQtOTQgMTEydjc2OHEwIDgwIC01NiAxMzZ0LTEzNiA1NnQtMTM2IC01NnQtNTYgLTEzNnYtNzY4cS02MCAtNDUgLTk0IC0xMTJ0LTM0IC0xNDRxMCAtMTMzIDkzLjUgLTIyNi41dDIyNi41IC05My41dDIyNi41IDkzLjUKdDkzLjUgMjI2LjV6TTg5NiAxOTJxMCAtMTg1IC0xMzEuNSAtMzE2LjV0LTMxNi41IC0xMzEuNXQtMzE2LjUgMTMxLjV0LTEzMS41IDMxNi41cTAgMTgyIDEyOCAzMTN2NzExcTAgMTMzIDkzLjUgMjI2LjV0MjI2LjUgOTMuNXQyMjYuNSAtOTMuNXQ5My41IC0yMjYuNXYtNzExcTEyOCAtMTMxIDEyOCAtMzEzek0xMDI0IDc2OHYtMTI4aC0xOTJ2MTI4aDE5MnpNMTAyNCAxMDI0di0xMjhoLTE5MnYxMjhoMTkyek0xMDI0IDEyODB2LTEyOGgtMTkyCnYxMjhoMTkyeiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlGMkNBIiB1bmljb2RlPSImI3hmMmNhOyIgaG9yaXotYWR2LXg9IjEwMjQiIApkPSJNNjQwIDE5MnEwIC04MCAtNTYgLTEzNnQtMTM2IC01NnQtMTM2IDU2dC01NiAxMzZxMCA2MCAzNSAxMTB0OTMgNzF2MTM5aDEyOHYtMTM5cTU4IC0yMSA5MyAtNzF0MzUgLTExMHpNNzY4IDE5MnEwIDc3IC0zNCAxNDR0LTk0IDExMnY3NjhxMCA4MCAtNTYgMTM2dC0xMzYgNTZ0LTEzNiAtNTZ0LTU2IC0xMzZ2LTc2OHEtNjAgLTQ1IC05NCAtMTEydC0zNCAtMTQ0cTAgLTEzMyA5My41IC0yMjYuNXQyMjYuNSAtOTMuNXQyMjYuNSA5My41CnQ5My41IDIyNi41ek04OTYgMTkycTAgLTE4NSAtMTMxLjUgLTMxNi41dC0zMTYuNSAtMTMxLjV0LTMxNi41IDEzMS41dC0xMzEuNSAzMTYuNXEwIDE4MiAxMjggMzEzdjcxMXEwIDEzMyA5My41IDIyNi41dDIyNi41IDkzLjV0MjI2LjUgLTkzLjV0OTMuNSAtMjI2LjV2LTcxMXExMjggLTEzMSAxMjggLTMxM3pNMTAyNCA3Njh2LTEyOGgtMTkydjEyOGgxOTJ6TTEwMjQgMTAyNHYtMTI4aC0xOTJ2MTI4aDE5MnpNMTAyNCAxMjgwdi0xMjhoLTE5Mgp2MTI4aDE5MnoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idW5pRjJDQiIgdW5pY29kZT0iJiN4ZjJjYjsiIGhvcml6LWFkdi14PSIxMDI0IiAKZD0iTTY0MCAxOTJxMCAtODAgLTU2IC0xMzZ0LTEzNiAtNTZ0LTEzNiA1NnQtNTYgMTM2cTAgNzkgNTYgMTM1LjV0MTM2IDU2LjV0MTM2IC01Ni41dDU2IC0xMzUuNXpNNzY4IDE5MnEwIDc3IC0zNCAxNDR0LTk0IDExMnY3NjhxMCA4MCAtNTYgMTM2dC0xMzYgNTZ0LTEzNiAtNTZ0LTU2IC0xMzZ2LTc2OHEtNjAgLTQ1IC05NCAtMTEydC0zNCAtMTQ0cTAgLTEzMyA5My41IC0yMjYuNXQyMjYuNSAtOTMuNXQyMjYuNSA5My41dDkzLjUgMjI2LjV6Ck04OTYgMTkycTAgLTE4NSAtMTMxLjUgLTMxNi41dC0zMTYuNSAtMTMxLjV0LTMxNi41IDEzMS41dC0xMzEuNSAzMTYuNXEwIDE4MiAxMjggMzEzdjcxMXEwIDEzMyA5My41IDIyNi41dDIyNi41IDkzLjV0MjI2LjUgLTkzLjV0OTMuNSAtMjI2LjV2LTcxMXExMjggLTEzMSAxMjggLTMxM3pNMTAyNCA3Njh2LTEyOGgtMTkydjEyOGgxOTJ6TTEwMjQgMTAyNHYtMTI4aC0xOTJ2MTI4aDE5MnpNMTAyNCAxMjgwdi0xMjhoLTE5MnYxMjhoMTkyeiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlGMkNDIiB1bmljb2RlPSImI3hmMmNjOyIgaG9yaXotYWR2LXg9IjE5MjAiIApkPSJNMTQzMyAxMjg3cTEwIC0xMCAxMCAtMjN0LTEwIC0yM2wtNjI2IC02MjZxLTEwIC0xMCAtMjMgLTEwdC0yMyAxMGwtODIgODJxLTEwIDEwIC0xMCAyM3QxMCAyM2w0NCA0NHEtNzIgOTEgLTgxLjUgMjA3dDQ2LjUgMjE1cS03NCA3MSAtMTc2IDcxcS0xMDYgMCAtMTgxIC03NXQtNzUgLTE4MXYtMTI4MGgtMjU2djEyODBxMCAxMDQgNDAuNSAxOTguNXQxMDkuNSAxNjMuNXQxNjMuNSAxMDkuNXQxOTguNSA0MC41cTEwNiAwIDIwMSAtNDEKdDE2NiAtMTE1cTk0IDM5IDE5NyAyNC41dDE4NSAtNzkuNWw0NCA0NHExMCAxMCAyMyAxMHQyMyAtMTB6TTEzNDQgMTAyNHEyNiAwIDQ1IC0xOXQxOSAtNDV0LTE5IC00NXQtNDUgLTE5dC00NSAxOXQtMTkgNDV0MTkgNDV0NDUgMTl6TTE2MDAgODk2cS0yNiAwIC00NSAxOXQtMTkgNDV0MTkgNDV0NDUgMTl0NDUgLTE5dDE5IC00NXQtMTkgLTQ1dC00NSAtMTl6TTE4NTYgMTAyNHEyNiAwIDQ1IC0xOXQxOSAtNDV0LTE5IC00NXQtNDUgLTE5CnQtNDUgMTl0LTE5IDQ1dDE5IDQ1dDQ1IDE5ek0xMjE2IDg5NnEyNiAwIDQ1IC0xOXQxOSAtNDV0LTE5IC00NXQtNDUgLTE5dC00NSAxOXQtMTkgNDV0MTkgNDV0NDUgMTl6TTE0MDggODMycTAgMjYgMTkgNDV0NDUgMTl0NDUgLTE5dDE5IC00NXQtMTkgLTQ1dC00NSAtMTl0LTQ1IDE5dC0xOSA0NXpNMTcyOCA4OTZxMjYgMCA0NSAtMTl0MTkgLTQ1dC0xOSAtNDV0LTQ1IC0xOXQtNDUgMTl0LTE5IDQ1dDE5IDQ1dDQ1IDE5ek0xMDg4IDc2OApxMjYgMCA0NSAtMTl0MTkgLTQ1dC0xOSAtNDV0LTQ1IC0xOXQtNDUgMTl0LTE5IDQ1dDE5IDQ1dDQ1IDE5ek0xMzQ0IDY0MHEtMjYgMCAtNDUgMTl0LTE5IDQ1dDE5IDQ1dDQ1IDE5dDQ1IC0xOXQxOSAtNDV0LTE5IC00NXQtNDUgLTE5ek0xNjAwIDc2OHEyNiAwIDQ1IC0xOXQxOSAtNDV0LTE5IC00NXQtNDUgLTE5dC00NSAxOXQtMTkgNDV0MTkgNDV0NDUgMTl6TTEyMTYgNTEycS0yNiAwIC00NSAxOXQtMTkgNDV0MTkgNDV0NDUgMTl0NDUgLTE5CnQxOSAtNDV0LTE5IC00NXQtNDUgLTE5ek0xNDcyIDY0MHEyNiAwIDQ1IC0xOXQxOSAtNDV0LTE5IC00NXQtNDUgLTE5dC00NSAxOXQtMTkgNDV0MTkgNDV0NDUgMTl6TTEwODggNTEycTI2IDAgNDUgLTE5dDE5IC00NXQtMTkgLTQ1dC00NSAtMTl0LTQ1IDE5dC0xOSA0NXQxOSA0NXQ0NSAxOXpNMTM0NCA1MTJxMjYgMCA0NSAtMTl0MTkgLTQ1dC0xOSAtNDV0LTQ1IC0xOXQtNDUgMTl0LTE5IDQ1dDE5IDQ1dDQ1IDE5ek0xMjE2IDM4NApxMjYgMCA0NSAtMTl0MTkgLTQ1dC0xOSAtNDV0LTQ1IC0xOXQtNDUgMTl0LTE5IDQ1dDE5IDQ1dDQ1IDE5ek0xMDg4IDI1NnEyNiAwIDQ1IC0xOXQxOSAtNDV0LTE5IC00NXQtNDUgLTE5dC00NSAxOXQtMTkgNDV0MTkgNDV0NDUgMTl6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InVuaUYyQ0QiIHVuaWNvZGU9IiYjeGYyY2Q7IiBob3Jpei1hZHYteD0iMTc5MiIgCmQ9Ik0xNjY0IDQ0OHYtMTkycTAgLTE2OSAtMTI4IC0yODZ2LTE5NHEwIC0xNCAtOSAtMjN0LTIzIC05aC02NHEtMTQgMCAtMjMgOXQtOSAyM3YxMThxLTYzIC0yMiAtMTI4IC0yMmgtNzY4cS02NSAwIC0xMjggMjJ2LTExMHEwIC0xNyAtOS41IC0yOC41dC0yMi41IC0xMS41aC02NHEtMTMgMCAtMjIuNSAxMS41dC05LjUgMjguNXYxODZxLTEyOCAxMTcgLTEyOCAyODZ2MTkyaDE1MzZ6TTcwNCA4NjRxMCAtMTQgLTkgLTIzdC0yMyAtOXQtMjMgOQp0LTkgMjN0OSAyM3QyMyA5dDIzIC05dDkgLTIzek03NjggOTI4cTAgLTE0IC05IC0yM3QtMjMgLTl0LTIzIDl0LTkgMjN0OSAyM3QyMyA5dDIzIC05dDkgLTIzek03MDQgOTkycTAgLTE0IC05IC0yM3QtMjMgLTl0LTIzIDl0LTkgMjN0OSAyM3QyMyA5dDIzIC05dDkgLTIzek04MzIgOTkycTAgLTE0IC05IC0yM3QtMjMgLTl0LTIzIDl0LTkgMjN0OSAyM3QyMyA5dDIzIC05dDkgLTIzek03NjggMTA1NnEwIC0xNCAtOSAtMjN0LTIzIC05dC0yMyA5CnQtOSAyM3Q5IDIzdDIzIDl0MjMgLTl0OSAtMjN6TTcwNCAxMTIwcTAgLTE0IC05IC0yM3QtMjMgLTl0LTIzIDl0LTkgMjN0OSAyM3QyMyA5dDIzIC05dDkgLTIzek0xNzkyIDYwOHYtNjRxMCAtMTQgLTkgLTIzdC0yMyAtOWgtMTcyOHEtMTQgMCAtMjMgOXQtOSAyM3Y2NHEwIDE0IDkgMjN0MjMgOWg5NnY2NDBxMCAxMDYgNzUgMTgxdDE4MSA3NXExMDggMCAxODQgLTc4cTQ2IDE5IDk4IDEydDkzIC0zOWwyMiAyMnExMSAxMSAyMiAwbDQyIC00MgpxMTEgLTExIDAgLTIybC0zMTQgLTMxNHEtMTEgLTExIC0yMiAwbC00MiA0MnEtMTEgMTEgMCAyMmwyMiAyMnEtMzYgNDYgLTQwLjUgMTA0dDIzLjUgMTA4cS0zNyAzNSAtODggMzVxLTUzIDAgLTkwLjUgLTM3LjV0LTM3LjUgLTkwLjV2LTY0MGgxNTA0cTE0IDAgMjMgLTl0OSAtMjN6TTg5NiAxMDU2cTAgLTE0IC05IC0yM3QtMjMgLTl0LTIzIDl0LTkgMjN0OSAyM3QyMyA5dDIzIC05dDkgLTIzek04MzIgMTEyMHEwIC0xNCAtOSAtMjN0LTIzIC05CnQtMjMgOXQtOSAyM3Q5IDIzdDIzIDl0MjMgLTl0OSAtMjN6TTc2OCAxMTg0cTAgLTE0IC05IC0yM3QtMjMgLTl0LTIzIDl0LTkgMjN0OSAyM3QyMyA5dDIzIC05dDkgLTIzek05NjAgMTEyMHEwIC0xNCAtOSAtMjN0LTIzIC05dC0yMyA5dC05IDIzdDkgMjN0MjMgOXQyMyAtOXQ5IC0yM3pNODk2IDExODRxMCAtMTQgLTkgLTIzdC0yMyAtOXQtMjMgOXQtOSAyM3Q5IDIzdDIzIDl0MjMgLTl0OSAtMjN6TTgzMiAxMjQ4cTAgLTE0IC05IC0yMwp0LTIzIC05dC0yMyA5dC05IDIzdDkgMjN0MjMgOXQyMyAtOXQ5IC0yM3pNMTAyNCAxMTg0cTAgLTE0IC05IC0yM3QtMjMgLTl0LTIzIDl0LTkgMjN0OSAyM3QyMyA5dDIzIC05dDkgLTIzek05NjAgMTI0OHEwIC0xNCAtOSAtMjN0LTIzIC05dC0yMyA5dC05IDIzdDkgMjN0MjMgOXQyMyAtOXQ5IC0yM3pNMTA4OCAxMjQ4cTAgLTE0IC05IC0yM3QtMjMgLTl0LTIzIDl0LTkgMjN0OSAyM3QyMyA5dDIzIC05dDkgLTIzeiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlGMkNFIiB1bmljb2RlPSImI3hmMmNlOyIgCmQ9Ik05OTQgMzQ0cTAgLTg2IC0xNyAtMTk3cS0zMSAtMjE1IC01NSAtMzEzcS0yMiAtOTAgLTE1MiAtOTB0LTE1MiA5MHEtMjQgOTggLTU1IDMxM3EtMTcgMTEwIC0xNyAxOTdxMCAxNjggMjI0IDE2OHQyMjQgLTE2OHpNMTUzNiA3NjhxMCAtMjQwIC0xMzQgLTQzNHQtMzUwIC0yODBxLTggLTMgLTE1IDN0LTYgMTVxNyA0OCAxMCA2NnE0IDMyIDYgNDdxMSA5IDkgMTJxMTU5IDgxIDI1NS41IDIzNHQ5Ni41IDMzN3EwIDE4MCAtOTEgMzMwLjUKdC0yNDcgMjM0LjV0LTMzNyA3NHEtMTI0IC03IC0yMzcgLTYxdC0xOTMuNSAtMTQwLjV0LTEyOCAtMjAydC00Ni41IC0yNDAuNXExIC0xODQgOTkgLTMzNi41dDI1NyAtMjMxLjVxNyAtMyA5IC0xMnEzIC0yMSA2IC00NXExIC05IDUgLTMyLjV0NiAtMzUuNXExIC05IC02LjUgLTE1dC0xNS41IC0ycS0xNDggNTggLTI2MSAxNjkuNXQtMTczLjUgMjY0dC01Mi41IDMxOS41cTcgMTQzIDY2IDI3My41dDE1NC41IDIyN3QyMjUgMTU3LjV0MjcyLjUgNzAKcTE2NCAxMCAzMTUuNSAtNDYuNXQyNjEgLTE2MC41dDE3NSAtMjUwLjV0NjUuNSAtMzA4LjV6TTk5NCA4MDBxMCAtOTMgLTY1LjUgLTE1OC41dC0xNTguNSAtNjUuNXQtMTU4LjUgNjUuNXQtNjUuNSAxNTguNXQ2NS41IDE1OC41dDE1OC41IDY1LjV0MTU4LjUgLTY1LjV0NjUuNSAtMTU4LjV6TTEyODIgNzY4cTAgLTEyMiAtNTMuNSAtMjI4LjV0LTE0Ni41IC0xNzcuNXEtOCAtNiAtMTYgLTJ0LTEwIDE0cS02IDUyIC0yOSA5MnEtNyAxMCAzIDIwCnE1OCA1NCA5MSAxMjd0MzMgMTU1cTAgMTExIC01OC41IDIwNHQtMTU3LjUgMTQxLjV0LTIxMiAzNi41cS0xMzMgLTE1IC0yMjkgLTExM3QtMTA5IC0yMzFxLTEwIC05MiAyMy41IC0xNzZ0OTguNSAtMTQ0cTEwIC0xMCAzIC0yMHEtMjQgLTQxIC0yOSAtOTNxLTIgLTkgLTEwIC0xM3QtMTYgMnEtOTUgNzQgLTE0OC41IDE4M3QtNTEuNSAyMzRxMyAxMzEgNjkgMjQ0dDE3NyAxODEuNXQyNDEgNzQuNXExNDQgNyAyNjggLTYwdDE5Ni41IC0xODcuNQp0NzIuNSAtMjYzLjV6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InVuaUYyRDAiIHVuaWNvZGU9IiYjeGYyZDA7IiBob3Jpei1hZHYteD0iMTc5MiIgCmQ9Ik0yNTYgMTI4aDEyODB2NzY4aC0xMjgwdi03Njh6TTE3OTIgMTI0OHYtMTIxNnEwIC02NiAtNDcgLTExM3QtMTEzIC00N2gtMTQ3MnEtNjYgMCAtMTEzIDQ3dC00NyAxMTN2MTIxNnEwIDY2IDQ3IDExM3QxMTMgNDdoMTQ3MnE2NiAwIDExMyAtNDd0NDcgLTExM3oiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idW5pRjJEMSIgdW5pY29kZT0iJiN4ZjJkMTsiIGhvcml6LWFkdi14PSIxNzkyIiAKZD0iTTE3OTIgMjI0di0xOTJxMCAtNjYgLTQ3IC0xMTN0LTExMyAtNDdoLTE0NzJxLTY2IDAgLTExMyA0N3QtNDcgMTEzdjE5MnEwIDY2IDQ3IDExM3QxMTMgNDdoMTQ3MnE2NiAwIDExMyAtNDd0NDcgLTExM3oiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idW5pRjJEMiIgdW5pY29kZT0iJiN4ZjJkMjsiIGhvcml6LWFkdi14PSIyMDQ4IiAKZD0iTTI1NiAwaDc2OHY1MTJoLTc2OHYtNTEyek0xMjgwIDUxMmg1MTJ2NzY4aC03Njh2LTI1Nmg5NnE2NiAwIDExMyAtNDd0NDcgLTExM3YtMzUyek0yMDQ4IDEzNzZ2LTk2MHEwIC02NiAtNDcgLTExM3QtMTEzIC00N2gtNjA4di0zNTJxMCAtNjYgLTQ3IC0xMTN0LTExMyAtNDdoLTk2MHEtNjYgMCAtMTEzIDQ3dC00NyAxMTN2OTYwcTAgNjYgNDcgMTEzdDExMyA0N2g2MDh2MzUycTAgNjYgNDcgMTEzdDExMyA0N2g5NjBxNjYgMCAxMTMgLTQ3CnQ0NyAtMTEzeiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlGMkQzIiB1bmljb2RlPSImI3hmMmQzOyIgaG9yaXotYWR2LXg9IjE3OTIiIApkPSJNMTE3NSAyMTVsMTQ2IDE0NnExMCAxMCAxMCAyM3QtMTAgMjNsLTIzMyAyMzNsMjMzIDIzM3ExMCAxMCAxMCAyM3QtMTAgMjNsLTE0NiAxNDZxLTEwIDEwIC0yMyAxMHQtMjMgLTEwbC0yMzMgLTIzM2wtMjMzIDIzM3EtMTAgMTAgLTIzIDEwdC0yMyAtMTBsLTE0NiAtMTQ2cS0xMCAtMTAgLTEwIC0yM3QxMCAtMjNsMjMzIC0yMzNsLTIzMyAtMjMzcS0xMCAtMTAgLTEwIC0yM3QxMCAtMjNsMTQ2IC0xNDZxMTAgLTEwIDIzIC0xMHQyMyAxMApsMjMzIDIzM2wyMzMgLTIzM3ExMCAtMTAgMjMgLTEwdDIzIDEwek0xNzkyIDEyNDh2LTEyMTZxMCAtNjYgLTQ3IC0xMTN0LTExMyAtNDdoLTE0NzJxLTY2IDAgLTExMyA0N3QtNDcgMTEzdjEyMTZxMCA2NiA0NyAxMTN0MTEzIDQ3aDE0NzJxNjYgMCAxMTMgLTQ3dDQ3IC0xMTN6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InVuaUYyRDQiIHVuaWNvZGU9IiYjeGYyZDQ7IiBob3Jpei1hZHYteD0iMTc5MiIgCmQ9Ik0xMjU3IDQyNWwtMTQ2IC0xNDZxLTEwIC0xMCAtMjMgLTEwdC0yMyAxMGwtMTY5IDE2OWwtMTY5IC0xNjlxLTEwIC0xMCAtMjMgLTEwdC0yMyAxMGwtMTQ2IDE0NnEtMTAgMTAgLTEwIDIzdDEwIDIzbDE2OSAxNjlsLTE2OSAxNjlxLTEwIDEwIC0xMCAyM3QxMCAyM2wxNDYgMTQ2cTEwIDEwIDIzIDEwdDIzIC0xMGwxNjkgLTE2OWwxNjkgMTY5cTEwIDEwIDIzIDEwdDIzIC0xMGwxNDYgLTE0NnExMCAtMTAgMTAgLTIzdC0xMCAtMjMKbC0xNjkgLTE2OWwxNjkgLTE2OXExMCAtMTAgMTAgLTIzdC0xMCAtMjN6TTI1NiAxMjhoMTI4MHYxMDI0aC0xMjgwdi0xMDI0ek0xNzkyIDEyNDh2LTEyMTZxMCAtNjYgLTQ3IC0xMTN0LTExMyAtNDdoLTE0NzJxLTY2IDAgLTExMyA0N3QtNDcgMTEzdjEyMTZxMCA2NiA0NyAxMTN0MTEzIDQ3aDE0NzJxNjYgMCAxMTMgLTQ3dDQ3IC0xMTN6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InVuaUYyRDUiIHVuaWNvZGU9IiYjeGYyZDU7IiBob3Jpei1hZHYteD0iMTc5MiIgCmQ9Ik0xMDcwIDM1OGwzMDYgNTY0aC02NTRsLTMwNiAtNTY0aDY1NHpNMTc5MiA2NDBxMCAtMTgyIC03MSAtMzQ4dC0xOTEgLTI4NnQtMjg2IC0xOTF0LTM0OCAtNzF0LTM0OCA3MXQtMjg2IDE5MXQtMTkxIDI4NnQtNzEgMzQ4dDcxIDM0OHQxOTEgMjg2dDI4NiAxOTF0MzQ4IDcxdDM0OCAtNzF0Mjg2IC0xOTF0MTkxIC0yODZ0NzEgLTM0OHoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idW5pRjJENiIgdW5pY29kZT0iJiN4ZjJkNjsiIGhvcml6LWFkdi14PSIxNzk0IiAKZD0iTTEyOTEgMTA2MHEtMTUgMTcgLTM1IDguNXQtMjYgLTI4LjV0NSAtMzhxMTQgLTE3IDQwIC0xNC41dDM0IDIwLjV0LTE4IDUyek04OTUgODE0cS04IC04IC0xOS41IC04dC0xOC41IDhxLTggOCAtOCAxOXQ4IDE4cTcgOCAxOC41IDh0MTkuNSAtOHE3IC03IDcgLTE4dC03IC0xOXpNMTA2MCA3NDBsLTM1IC0zNXEtMTIgLTEzIC0yOS41IC0xM3QtMzAuNSAxM2wtMzggMzhxLTEyIDEzIC0xMiAzMHQxMiAzMGwzNSAzNXExMiAxMiAyOS41IDEyCnQzMC41IC0xMmwzOCAtMzlxMTIgLTEyIDEyIC0yOS41dC0xMiAtMjkuNXpNOTUxIDg3MHEtNyAtOCAtMTguNSAtOHQtMTkuNSA4cS03IDggLTcgMTl0NyAxOXE4IDggMTkgOHQxOSAtOHQ4IC0xOXQtOCAtMTl6TTEzNTQgOTY4cS0zNCAtNjQgLTEwNy41IC04NS41dC0xMjcuNSAxNi41cS0zOCAyOCAtNjEgNjYuNXQtMjEgODcuNXQzOSA5MnQ3NS41IDUzdDcwLjUgLTV0NzAgLTUxcTIgLTIgMTMgLTEyLjV0MTQuNSAtMTMuNXQxMyAtMTMuNQp0MTIuNSAtMTUuNXQxMCAtMTUuNXQ4LjUgLTE4dDQgLTE4LjV0MSAtMjF0LTUgLTIydC05LjUgLTI0ek0xNTU1IDQ4NnEzIDIwIC04LjUgMzQuNXQtMjcuNSAyMS41dC0zMyAxN3QtMjMgMjBxLTQwIDcxIC04NCA5OC41dC0xMTMgMTEuNXExOSAxMyA0MCAxOC41dDMzIDQuNWwxMiAtMXEyIDQ1IC0zNCA5MHE2IDIwIDYuNSA0MC41dC0yLjUgMzAuNWwtMyAxMHE0MyAyNCA3MSA2NXQzNCA5MXExMCA4NCAtNDMgMTUwLjV0LTEzNyA3Ni41CnEtNjAgNyAtMTE0IC0xOC41dC04MiAtNzQuNXEtMzAgLTUxIC0zMy41IC0xMDF0MTQuNSAtODd0NDMuNSAtNjR0NTYuNSAtNDJxLTQ1IDQgLTg4IDM2dC01NyA4OHEtMjggMTA4IDMyIDIyMnEtMTYgMjEgLTI5IDMycS01MCAwIC04OSAtMTlxMTkgMjQgNDIgMzd0MzYgMTRsMTMgMXEwIDUwIC0xMyA3OHEtMTAgMjEgLTMyLjUgMjguNXQtNDcgLTMuNXQtMzcuNSAtNDBxMiA0IDQgN3EtNyAtMjggLTYuNSAtNzUuNXQxOSAtMTE3dDQ4LjUgLTEyMi41CnEtMjUgLTE0IC00NyAtMzZxLTM1IC0xNiAtODUuNSAtNzAuNXQtODQuNSAtMTAxLjVsLTMzIC00NnEtOTAgLTM0IC0xODEgLTEyNS41dC03NSAtMTYyLjVxMSAtMTYgMTEgLTI3cS0xNSAtMTIgLTMwIC0zMHEtMjEgLTI1IC0yMSAtNTR0MjEuNSAtNDB0NjMuNSA2cTQxIDE5IDc3IDQ5LjV0NTUgNjAuNXEtMiAyIC02LjUgNXQtMjAuNSA3LjV0LTMzIDMuNXEyMyA1IDUxIDEyLjV0NDAgMTB0MjcuNSA2dDI2IDR0MjMuNSAwLjVxMTQgLTcgMjIgMzQKcTcgMzcgNyA5MHEwIDEwMiAtNDAgMTUwcTEwNiAtMTAzIDEwMSAtMjE5cS0xIC0yOSAtMTUgLTUwdC0yNyAtMjdsLTEzIC02cS00IC03IC0xOSAtMzJ0LTI2IC00NS41dC0yNi41IC01MnQtMjUgLTYxdC0xNyAtNjN0LTYuNSAtNjYuNXQxMCAtNjNxLTM1IDU0IC0zNyA4MHEtMjIgLTI0IC0zNC41IC0zOXQtMzMuNSAtNDJ0LTMwLjUgLTQ2dC0xNi41IC00MXQtMC41IC0zOHQyNS41IC0yN3E0NSAtMjUgMTQ0IDY0dDE5MC41IDIyMS41CnQxMjIuNSAyMjguNXE4NiA1MiAxNDUgMTE1LjV0ODYgMTE5LjVxNDcgLTkzIDE1NCAtMTc4cTEwNCAtODMgMTY3IC04MHEzOSAyIDQ2IDQzek0xNzk0IDY0MHEwIC0xODIgLTcxIC0zNDh0LTE5MSAtMjg2dC0yODYuNSAtMTkxdC0zNDguNSAtNzF0LTM0OC41IDcxdC0yODYuNSAxOTF0LTE5MSAyODZ0LTcxIDM0OHQ3MSAzNDh0MTkxIDI4NnQyODYuNSAxOTF0MzQ4LjUgNzF0MzQ4LjUgLTcxdDI4Ni41IC0xOTF0MTkxIC0yODZ0NzEgLTM0OHoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idW5pRjJENyIgdW5pY29kZT0iJiN4ZjJkNzsiIApkPSJNNTE4IDEzNTN2LTY1NXExMDMgLTEgMTkxLjUgMS41dDEyNS41IDUuNWwzNyAzcTY4IDIgOTAuNSAyNC41dDM5LjUgOTQuNWwzMyAxNDJoMTAzbC0xNCAtMzIybDcgLTMxOWgtMTAzbC0yOSAxMjdxLTE1IDY4IC00NSA5M3QtODQgMjZxLTg3IDggLTM1MiA4di01NTZxMCAtNzggNDMuNSAtMTE1LjV0MTMzLjUgLTM3LjVoMzU3cTM1IDAgNTkuNSAydDU1IDcuNXQ1NCAxOHQ0OC41IDMydDQ2IDUwLjV0MzkgNzNsOTMgMjE2aDg5CnEtNiAtMzcgLTMxLjUgLTI1MnQtMzAuNSAtMjc2cS0xNDYgNSAtMjYzLjUgOHQtMTYyLjUgNGgtNDRoLTYyOGwtMzc2IC0xMnYxMDJsMTI3IDI1cTY3IDEzIDkxLjUgMzd0MjUuNSA3OWw4IDY0M3EzIDQwMiAtOCA2NDVxLTIgNjEgLTI1LjUgODR0LTkxLjUgMzZsLTEyNyAyNHYxMDJsMzc2IC0xMmg3MDJxMTM5IDAgMzc0IDI3cS02IC02OCAtMTQgLTE5NC41dC0xMiAtMjE5LjVsLTUgLTkyaC05M2wtMzIgMTI0cS0zMSAxMjEgLTc0IDE3OS41CnQtMTEzIDU4LjVoLTU0OHEtMjggMCAtMzUuNSAtOC41dC03LjUgLTMwLjV6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InVuaUYyRDgiIHVuaWNvZGU9IiYjeGYyZDg7IiAKZD0iTTkyMiA3Mzl2LTE4MnEwIC00IDAuNSAtMTV0MCAtMTVsLTEuNSAtMTJ0LTMuNSAtMTEuNXQtNi41IC03LjV0LTExIC01LjV0LTE2IC0xLjV2MzA5cTkgMCAxNiAtMXQxMSAtNXQ2LjUgLTUuNXQzLjUgLTkuNXQxIC0xMC41di0xMy41di0xNHpNMTIzOCA2NDN2LTEyMXEwIC0xIDAuNSAtMTIuNXQwIC0xNS41dC0yLjUgLTExLjV0LTcuNSAtMTAuNXQtMTMuNSAtM3EtOSAwIC0xNCA5cS00IDEwIC00IDE2NXY3djguNXY5dDEuNSA4LjVsMy41IDcKdDUgNS41dDggMS41cTYgMCAxMCAtMS41dDYuNSAtNC41dDQgLTZ0MiAtOC41dDAuNSAtOHYtOS41di05ek0xODAgNDA3aDEyMnY0NzJoLTEyMnYtNDcyek02MTQgNDA3aDEwNnY0NzJoLTE1OWwtMjggLTIyMXEtMjAgMTQ4IC0zMiAyMjFoLTE1OHYtNDcyaDEwN3YzMTJsNDUgLTMxMmg3Nmw0MyAzMTl2LTMxOXpNMTAzOSA3MTJxMCA2NyAtNSA5MHEtMyAxNiAtMTEgMjguNXQtMTcgMjAuNXQtMjUgMTR0LTI2LjUgOC41dC0zMSA0dC0yOSAxLjUKaC0yOS41aC0xMmgtOTF2LTQ3Mmg1NnExNjkgLTEgMTk3IDI0LjV0MjUgMTgwLjVxLTEgNjIgLTEgMTAwek0xMzU2IDUxNXYxMzNxMCAyOSAtMiA0NXQtOS41IDMzLjV0LTI0LjUgMjV0LTQ2IDcuNXEtNDYgMCAtNzcgLTM0djE1NGgtMTE3di00NzJoMTEwbDcgMzBxMzAgLTM2IDc3IC0zNnE1MCAwIDY2IDMwLjV0MTYgODMuNXpNMTUzNiAxMjQ4di0xMjE2cTAgLTY2IC00NyAtMTEzdC0xMTMgLTQ3aC0xMjE2cS02NiAwIC0xMTMgNDd0LTQ3IDExMwp2MTIxNnEwIDY2IDQ3IDExM3QxMTMgNDdoMTIxNnE2NiAwIDExMyAtNDd0NDcgLTExM3oiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idW5pRjJEOSIgdW5pY29kZT0iJiN4ZjJkOTsiIGhvcml6LWFkdi14PSIyMTc2IiAKZD0iTTExNDMgLTE5N3EtNiAxIC0xMSA0cS0xMyA4IC0zNiAyM3QtODYgNjV0LTExNi41IDEwNC41dC0xMTIgMTQwdC04OS41IDE3Mi41cS0xNyAzIC0xNzUgMzdxNjYgLTIxMyAyMzUgLTM2MnQzOTEgLTE4NHpNNTAyIDQwOWwxNjggLTI4cS0yNSA3NiAtNDEgMTY3LjV0LTE5IDE0NS41bC00IDUzcS04NCAtODIgLTEyMSAtMjI0cTUgLTY1IDE3IC0xMTR6TTYxMiAxMDE4cS00MyAtNjQgLTc3IC0xNDhxNDQgNDYgNzQgNjh6TTIwNDkgNTg0CnEwIDE2MSAtNjIgMzA3dC0xNjcuNSAyNTJ0LTI1MC41IDE2OC41dC0zMDQgNjIuNXEtMTQ3IDAgLTI4MSAtNTIuNXQtMjQwIC0xNDguNXEtMzAgLTU4IC00NSAtMTYwcTYwIDUxIDE0MyA4My41dDE1OC41IDQzdDE0MyAxMy41dDEwOC41IC0xbDQwIC0zcTMzIC0xIDUzIC0xNS41dDI0LjUgLTMzdDYuNSAtMzd0LTEgLTI4LjVxLTEyNiAxMSAtMjI3LjUgMC41dC0xODMgLTQzLjV0LTE0Mi41IC03MS41dC0xMzEgLTk4LjUKcTQgLTM2IDExLjUgLTkyLjV0MzUuNSAtMTc4dDYyIC0xNzkuNXExMjMgLTYgMjQ3LjUgMTQuNXQyMTQuNSA1My41dDE2Mi41IDY3dDEwOS41IDU5bDM3IDI0cTIyIDE2IDM5LjUgMjAuNXQzMC41IC01dDE3IC0zNC41cTE0IC05NyAtMzkgLTEyMXEtMjA4IC05NyAtNDY3IC0xMzRxLTEzNSAtMjAgLTMxNyAtMTZxNDEgLTk2IDExMCAtMTc2LjV0MTM3IC0xMjd0MTMwLjUgLTc5dDEwMS41IC00My41bDM5IC0xMnExNDMgLTIzIDI2MyAxNQpxMTk1IDk5IDMxNCAyODl0MTE5IDQxOHpNMjEyMyA2MjFxLTE0IC0xMzUgLTQwIC0yMTJxLTcwIC0yMDggLTE4MS41IC0zNDYuNXQtMzE4LjUgLTI1My41cS00OCAtMzMgLTgyIC00NHEtNzIgLTI2IC0xNjMgLTE2cS0zNiAtMyAtNzMgLTNxLTI4MyAwIC01MDQuNSAxNzN0LTI5NS41IDQ0MnEtMSAwIC00IDAuNXQtNSAwLjVxLTYgLTUwIDIuNSAtMTEyLjV0MjYgLTExNXQzNiAtOTh0MzEuNSAtNzEuNWwxNCAtMjZxOCAtMTIgNTQgLTgyCnEtNzEgMzggLTEyNC41IDEwNi41dC03OC41IDE0MHQtMzkuNSAxMzd0LTE3LjUgMTA3LjVsLTIgNDJxLTUgMiAtMzMuNSAxMi41dC00OC41IDE4dC01MyAyMC41dC01Ny41IDI1dC01MCAyNS41dC00Mi41IDI3dC0yNSAyNS41cTE5IC0xMCA1MC41IC0yNS41dDExMyAtNDUuNXQxNDUuNSAtMzhsMiAzMnExMSAxNDkgOTQgMjkwcTQxIDIwMiAxNzYgMzY1cTI4IDExNSA4MSAyMTRxMTUgMjggMzIgNDV0NDkgMzJxMTU4IDc0IDMwMy41IDEwNAp0MzAyIDExdDMwNi41IC05N3EyMjAgLTExNSAzMzMgLTMzNnQ4NyAtNDc0eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlGMkRBIiB1bmljb2RlPSImI3hmMmRhOyIgaG9yaXotYWR2LXg9IjE3OTIiIApkPSJNMTM0MSA3NTJxMjkgNDQgLTYuNSAxMjkuNXQtMTIxLjUgMTQyLjVxLTU4IDM5IC0xMjUuNSA1My41dC0xMTggNC41dC02OC41IC0zN3EtMTIgLTIzIC00LjUgLTI4dDQyLjUgLTEwcTIzIC0zIDM4LjUgLTV0NDQuNSAtOS41dDU2IC0xNy41cTM2IC0xMyA2Ny41IC0zMS41dDUzIC0zN3Q0MCAtMzguNXQzMC41IC0zOHQyMiAtMzQuNXQxNi41IC0yOC41dDEyIC0xOC41dDEwLjUgLTZ0MTEgOS41ek0xNzA0IDE3OApxLTUyIC0xMjcgLTE0OC41IC0yMjB0LTIxNC41IC0xNDEuNXQtMjUzIC02MC41dC0yNjYgMTMuNXQtMjUxIDkxdC0yMTAgMTYxLjV0LTE0MS41IDIzNS41dC00Ni41IDMwMy41cTEgNDEgOC41IDg0LjV0MTIuNSA2NHQyNCA4MC41dDIzIDczcS01MSAtMjA4IDEgLTM5N3QxNzMgLTMxOHQyOTEgLTIwNnQzNDYgLTgzdDM0OSA3NC41dDI4OSAyNDQuNXEyMCAyNyAxOCAxNHEwIC00IC00IC0xNHpNMTQ2NSA2MjdxMCAtMTA0IC00MC41IC0xOTkKdC0xMDguNSAtMTY0dC0xNjIgLTEwOS41dC0xOTggLTQwLjV0LTE5OCA0MC41dC0xNjIgMTA5LjV0LTEwOC41IDE2NHQtNDAuNSAxOTl0NDAuNSAxOTl0MTA4LjUgMTY0dDE2MiAxMDkuNXQxOTggNDAuNXQxOTggLTQwLjV0MTYyIC0xMDkuNXQxMDguNSAtMTY0dDQwLjUgLTE5OXpNMTc1MiA5MTVxLTY1IDE0NyAtMTgwLjUgMjUxdC0yNTMgMTUzLjV0LTI5MiA1My41dC0zMDEgLTM2LjV0LTI3NS41IC0xMjl0LTIyMCAtMjExLjV0LTEzMSAtMjk3CnQtMTAgLTM3M3EtNDkgMTYxIC01MS41IDMxMS41dDM1LjUgMjcyLjV0MTA5IDIyN3QxNjUuNSAxODAuNXQyMDcgMTI2dDIzMiA3MXQyNDIuNSA5dDIzNiAtNTR0MjE2IC0xMjQuNXQxNzggLTE5N3EzMyAtNTAgNjIgLTEyMXQzMSAtMTEyek0xNjkwIDU3M3ExMiAyNDQgLTEzNi41IDQxNnQtMzk2LjUgMjQwcS04IDAgLTEwIDV0MjQgOHExMjUgLTQgMjMwIC01MHQxNzMgLTEyMHQxMTYgLTE2OC41dDU4LjUgLTE5OXQtMSAtMjA4CnQtNjEuNSAtMTk3LjV0LTEyMi41IC0xNjd0LTE4NSAtMTE3LjV0LTI0OC41IC00Ni41cTEwOCAzMCAyMDEuNSA4MHQxNzQgMTIzdDEyOS41IDE3Ni41dDU1IDIyNS41eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlGMkRCIiB1bmljb2RlPSImI3hmMmRiOyIgCmQ9Ik0xOTIgMjU2di0xMjhoLTExMnEtMTYgMCAtMTYgMTZ2MTZoLTQ4cS0xNiAwIC0xNiAxNnYzMnEwIDE2IDE2IDE2aDQ4djE2cTAgMTYgMTYgMTZoMTEyek0xOTIgNTEydi0xMjhoLTExMnEtMTYgMCAtMTYgMTZ2MTZoLTQ4cS0xNiAwIC0xNiAxNnYzMnEwIDE2IDE2IDE2aDQ4djE2cTAgMTYgMTYgMTZoMTEyek0xOTIgNzY4di0xMjhoLTExMnEtMTYgMCAtMTYgMTZ2MTZoLTQ4cS0xNiAwIC0xNiAxNnYzMnEwIDE2IDE2IDE2aDQ4djE2CnEwIDE2IDE2IDE2aDExMnpNMTkyIDEwMjR2LTEyOGgtMTEycS0xNiAwIC0xNiAxNnYxNmgtNDhxLTE2IDAgLTE2IDE2djMycTAgMTYgMTYgMTZoNDh2MTZxMCAxNiAxNiAxNmgxMTJ6TTE5MiAxMjgwdi0xMjhoLTExMnEtMTYgMCAtMTYgMTZ2MTZoLTQ4cS0xNiAwIC0xNiAxNnYzMnEwIDE2IDE2IDE2aDQ4djE2cTAgMTYgMTYgMTZoMTEyek0xMjgwIDE0NDB2LTE0NzJxMCAtNDAgLTI4IC02OHQtNjggLTI4aC04MzJxLTQwIDAgLTY4IDI4CnQtMjggNjh2MTQ3MnEwIDQwIDI4IDY4dDY4IDI4aDgzMnE0MCAwIDY4IC0yOHQyOCAtNjh6TTE1MzYgMjA4di0zMnEwIC0xNiAtMTYgLTE2aC00OHYtMTZxMCAtMTYgLTE2IC0xNmgtMTEydjEyOGgxMTJxMTYgMCAxNiAtMTZ2LTE2aDQ4cTE2IDAgMTYgLTE2ek0xNTM2IDQ2NHYtMzJxMCAtMTYgLTE2IC0xNmgtNDh2LTE2cTAgLTE2IC0xNiAtMTZoLTExMnYxMjhoMTEycTE2IDAgMTYgLTE2di0xNmg0OHExNiAwIDE2IC0xNnpNMTUzNiA3MjB2LTMyCnEwIC0xNiAtMTYgLTE2aC00OHYtMTZxMCAtMTYgLTE2IC0xNmgtMTEydjEyOGgxMTJxMTYgMCAxNiAtMTZ2LTE2aDQ4cTE2IDAgMTYgLTE2ek0xNTM2IDk3NnYtMzJxMCAtMTYgLTE2IC0xNmgtNDh2LTE2cTAgLTE2IC0xNiAtMTZoLTExMnYxMjhoMTEycTE2IDAgMTYgLTE2di0xNmg0OHExNiAwIDE2IC0xNnpNMTUzNiAxMjMydi0zMnEwIC0xNiAtMTYgLTE2aC00OHYtMTZxMCAtMTYgLTE2IC0xNmgtMTEydjEyOGgxMTJxMTYgMCAxNiAtMTZ2LTE2Cmg0OHExNiAwIDE2IC0xNnoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idW5pRjJEQyIgdW5pY29kZT0iJiN4ZjJkYzsiIGhvcml6LWFkdi14PSIxNjY0IiAKZD0iTTE1NjYgNDE5bC0xNjcgLTMzbDE4NiAtMTA3cTIzIC0xMyAyOS41IC0zOC41dC02LjUgLTQ4LjVxLTE0IC0yMyAtMzkgLTI5LjV0LTQ4IDYuNWwtMTg2IDEwNmw1NSAtMTYwcTEzIC0zOCAtMTIgLTYzLjV0LTYwLjUgLTIwLjV0LTQ4LjUgNDJsLTEwMiAzMDBsLTI3MSAxNTZ2LTMxM2wyMDggLTIzOHExNiAtMTggMTcgLTM5dC0xMSAtMzYuNXQtMjguNSAtMjV0LTM3IC01LjV0LTM2LjUgMjJsLTExMiAxMjh2LTIxNHEwIC0yNiAtMTkgLTQ1CnQtNDUgLTE5dC00NSAxOXQtMTkgNDV2MjE0bC0xMTIgLTEyOHEtMTYgLTE4IC0zNi41IC0yMnQtMzcgNS41dC0yOC41IDI1dC0xMSAzNi41dDE3IDM5bDIwOCAyMzh2MzEzbC0yNzEgLTE1NmwtMTAyIC0zMDBxLTEzIC0zNyAtNDguNSAtNDJ0LTYwLjUgMjAuNXQtMTIgNjMuNWw1NSAxNjBsLTE4NiAtMTA2cS0yMyAtMTMgLTQ4IC02LjV0LTM5IDI5LjVxLTEzIDIzIC02LjUgNDguNXQyOS41IDM4LjVsMTg2IDEwN2wtMTY3IDMzCnEtMjkgNiAtNDIgMjl0LTguNSA0Ni41dDI1LjUgNDB0NTAgMTAuNWwzMTAgLTYybDI3MSAxNTdsLTI3MSAxNTdsLTMxMCAtNjJxLTQgLTEgLTEzIC0xcS0yNyAwIC00NCAxOHQtMTkgNDB0MTEgNDN0NDAgMjZsMTY3IDMzbC0xODYgMTA3cS0yMyAxMyAtMjkuNSAzOC41dDYuNSA0OC41dDM5IDMwdDQ4IC03bDE4NiAtMTA2bC01NSAxNjBxLTEzIDM4IDEyIDYzLjV0NjAuNSAyMC41dDQ4LjUgLTQybDEwMiAtMzAwbDI3MSAtMTU2djMxMwpsLTIwOCAyMzhxLTE2IDE4IC0xNyAzOXQxMSAzNi41dDI4LjUgMjV0MzcgNS41dDM2LjUgLTIybDExMiAtMTI4djIxNHEwIDI2IDE5IDQ1dDQ1IDE5dDQ1IC0xOXQxOSAtNDV2LTIxNGwxMTIgMTI4cTE2IDE4IDM2LjUgMjJ0MzcgLTUuNXQyOC41IC0yNXQxMSAtMzYuNXQtMTcgLTM5bC0yMDggLTIzOHYtMzEzbDI3MSAxNTZsMTAyIDMwMHExMyAzNyA0OC41IDQydDYwLjUgLTIwLjV0MTIgLTYzLjVsLTU1IC0xNjBsMTg2IDEwNgpxMjMgMTMgNDggNi41dDM5IC0yOS41cTEzIC0yMyA2LjUgLTQ4LjV0LTI5LjUgLTM4LjVsLTE4NiAtMTA3bDE2NyAtMzNxMjcgLTUgNDAgLTI2dDExIC00M3QtMTkgLTQwdC00NCAtMThxLTkgMCAtMTMgMWwtMzEwIDYybC0yNzEgLTE1N2wyNzEgLTE1N2wzMTAgNjJxMjkgNiA1MCAtMTAuNXQyNS41IC00MHQtOC41IC00Ni41dC00MiAtMjl6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InVuaUYyREQiIHVuaWNvZGU9IiYjeGYyZGQ7IiBob3Jpei1hZHYteD0iMTc5MiIgCmQ9Ik0xNDczIDYwN3E3IDExOCAtMzMgMjI2LjV0LTExMyAxODl0LTE3NyAxMzF0LTIyMSA1Ny41cS0xMTYgNyAtMjI1LjUgLTMydC0xOTIgLTExMC41dC0xMzUgLTE3NXQtNTkuNSAtMjIwLjVxLTcgLTExOCAzMyAtMjI2LjV0MTEzIC0xODl0MTc3LjUgLTEzMXQyMjEuNSAtNTcuNXExNTUgLTkgMjkzIDU5dDIyNCAxOTUuNXQ5NCAyODMuNXpNMTc5MiAxNTM2bC0zNDkgLTM0OHExMjAgLTExNyAxODAuNSAtMjcydDUwLjUgLTMyMQpxLTExIC0xODMgLTEwMiAtMzM5dC0yNDEgLTI1NS41dC0zMzIgLTEyNC41bC05OTkgLTEzMmwzNDcgMzQ3cS0xMjAgMTE2IC0xODAuNSAyNzEuNXQtNTAuNSAzMjEuNXExMSAxODQgMTAyIDM0MHQyNDEuNSAyNTUuNXQzMzIuNSAxMjQuNXExNjcgMjIgNTAwIDY2dDUwMCA2NnoiIC8+CiAgICA8Z2x5cGggZ2x5cGgtbmFtZT0idW5pRjJERSIgdW5pY29kZT0iJiN4ZjJkZTsiIGhvcml6LWFkdi14PSIxNzkyIiAKZD0iTTk0OCA1MDhsMTYzIC0zMjloLTUxbC0xNzUgMzUwbC0xNzEgLTM1MGgtNDlsMTc5IDM3NGwtNzggMzNsMjEgNDlsMjQwIC0xMDJsLTIxIC01MHpNNTYzIDExMDBsMzA0IC0xMzBsLTEzMCAtMzA0bC0zMDQgMTMwek05MDcgOTE1bDI0MCAtMTAzbC0xMDMgLTIzOWwtMjM5IDEwMnpNMTE4OCA3NjVsMTkxIC04MWwtODIgLTE5MGwtMTkwIDgxek0xNjgwIDY0MHEwIDE1OSAtNjIgMzA0dC0xNjcuNSAyNTAuNXQtMjUwLjUgMTY3LjV0LTMwNCA2Mgp0LTMwNCAtNjJ0LTI1MC41IC0xNjcuNXQtMTY3LjUgLTI1MC41dC02MiAtMzA0dDYyIC0zMDR0MTY3LjUgLTI1MC41dDI1MC41IC0xNjcuNXQzMDQgLTYydDMwNCA2MnQyNTAuNSAxNjcuNXQxNjcuNSAyNTAuNXQ2MiAzMDR6TTE3OTIgNjQwcTAgLTE4MiAtNzEgLTM0OHQtMTkxIC0yODZ0LTI4NiAtMTkxdC0zNDggLTcxdC0zNDggNzF0LTI4NiAxOTF0LTE5MSAyODZ0LTcxIDM0OHQ3MSAzNDh0MTkxIDI4NnQyODYgMTkxdDM0OCA3MXQzNDggLTcxCnQyODYgLTE5MXQxOTEgLTI4NnQ3MSAtMzQ4eiIgLz4KICAgIDxnbHlwaCBnbHlwaC1uYW1lPSJ1bmlGMkUwIiB1bmljb2RlPSImI3hmMmUwOyIgaG9yaXotYWR2LXg9IjE5MjAiIApkPSJNMTMzNCAzMDJxLTQgMjQgLTI3LjUgMzR0LTQ5LjUgMTAuNXQtNDguNSAxMi41dC0yNS41IDM4cS01IDQ3IDMzIDEzOS41dDc1IDE4MXQzMiAxMjcuNXEtMTQgMTAxIC0xMTcgMTAzcS00NSAxIC03NSAtMTZsLTMgLTJsLTUgLTIuNXQtNC41IC0ydC01IC0ydC01IC0wLjV0LTYgMS41dC02IDMuNXQtNi41IDVxLTMgMiAtOSA4LjV0LTkgOXQtOC41IDcuNXQtOS41IDcuNXQtOS41IDUuNXQtMTEgNC41dC0xMS41IDIuNXEtMzAgNSAtNDggLTMKdC00NSAtMzFxLTEgLTEgLTkgLTguNXQtMTIuNSAtMTF0LTE1IC0xMHQtMTYuNSAtNS41dC0xNyAzcS01NCAyNyAtODQgNDBxLTQxIDE4IC05NCAtNXQtNzYgLTY1cS0xNiAtMjggLTQxIC05OC41dC00My41IC0xMzIuNXQtNDAgLTEzNHQtMjEuNSAtNzNxLTIyIC02OSAxOC41IC0xMTl0MTEwLjUgLTQ2cTMwIDIgNTAuNSAxNXQzOC41IDQ2cTcgMTMgNzkgMTk5LjV0NzcgMTk0LjVxNiAxMSAyMS41IDE4dDI5LjUgMHEyNyAtMTUgMjEgLTUzCnEtMiAtMTggLTUxIC0xMzkuNXQtNTAgLTEzMi41cS02IC0zOCAxOS41IC01Ni41dDYwLjUgLTd0NTUgNDkuNXE0IDggNDUuNSA5MnQ4MS41IDE2My41dDQ2IDg4LjVxMjAgMjkgNDEgMjhxMjkgMCAyNSAtMzhxLTIgLTE2IC02NS41IC0xNDcuNXQtNzAuNSAtMTU5LjVxLTEyIC01MyAxMyAtMTAzdDc0IC03NHExNyAtOSA1MSAtMTUuNXQ3MS41IC04dDYyLjUgMTR0MjAgNDguNXpNMzgzIDg2cTMgLTE1IC01IC0yNy41dC0yMyAtMTUuNQpxLTE0IC0zIC0yNi41IDV0LTE1LjUgMjNxLTMgMTQgNSAyN3QyMiAxNnQyNyAtNXQxNiAtMjN6TTk1MyAtMTc3cTEyIC0xNyA4LjUgLTM3LjV0LTIwLjUgLTMyLjV0LTM3LjUgLTh0LTMyLjUgMjFxLTExIDE3IC03LjUgMzcuNXQyMC41IDMyLjV0MzcuNSA4dDMxLjUgLTIxek0xNzcgNjM1cS0xOCAtMjcgLTQ5LjUgLTMzdC01Ny41IDEzcS0yNiAxOCAtMzIgNTB0MTIgNThxMTggMjcgNDkuNSAzM3Q1Ny41IC0xMnEyNiAtMTkgMzIgLTUwLjUKdC0xMiAtNTguNXpNMTQ2NyAtNDJxMTkgLTI4IDEzIC02MS41dC0zNCAtNTIuNXQtNjAuNSAtMTN0LTUxLjUgMzR0LTEzIDYxdDMzIDUzcTI4IDE5IDYwLjUgMTN0NTIuNSAtMzR6TTE1NzkgNTYycTY5IC0xMTMgNDIuNSAtMjQ0LjV0LTEzNC41IC0yMDcuNXEtOTAgLTYzIC0xOTkgLTYwcS0yMCAtODAgLTg0LjUgLTEyN3QtMTQzLjUgLTQ0LjV0LTE0MCA1Ny41cS0xMiAtOSAtMTMgLTEwcS0xMDMgLTcxIC0yMjUgLTQ4LjV0LTE5MyAxMjYuNQpxLTUwIDczIC01MyAxNjRxLTgzIDE0IC0xNDIuNSA3MC41dC04MC41IDEyOHQtMiAxNTJ0ODEgMTM4LjVxLTM2IDYwIC0zOCAxMjh0MjQuNSAxMjV0NzkuNSA5OC41dDEyMSA1MC41cTMyIDg1IDk5IDE0OHQxNDYuNSA5MS41dDE2OCAxN3QxNTkuNSAtNjYuNXE3MiAyMSAxNDAgMTcuNXQxMjguNSAtMzZ0MTA0LjUgLTgwdDY3LjUgLTExNXQxNy41IC0xNDAuNXE1MiAtMTYgODcgLTU3dDQ1LjUgLTg5dC01LjUgLTk5LjV0LTU4IC04Ny41egpNNDU1IDEyMjJxMTQgLTIwIDkuNSAtNDQuNXQtMjQuNSAtMzguNXEtMTkgLTE0IC00My41IC05LjV0LTM3LjUgMjQuNXEtMTQgMjAgLTkuNSA0NC41dDI0LjUgMzguNXExOSAxNCA0My41IDkuNXQzNy41IC0yNC41ek02MTQgMTUwM3E0IC0xNiAtNSAtMzAuNXQtMjYgLTE4LjV0LTMxIDUuNXQtMTggMjYuNXEtMyAxNyA2LjUgMzF0MjUuNSAxOHExNyA0IDMxIC01LjV0MTcgLTI2LjV6TTE4MDAgNTU1cTQgLTIwIC02LjUgLTM3dC0zMC41IC0yMQpxLTE5IC00IC0zNiA2LjV0LTIxIDMwLjV0Ni41IDM3dDMwLjUgMjJxMjAgNCAzNi41IC03LjV0MjAuNSAtMzAuNXpNMTEzNiAxNDQ4cTE2IC0yNyA4LjUgLTU4LjV0LTM1LjUgLTQ3LjVxLTI3IC0xNiAtNTcuNSAtOC41dC00Ni41IDM0LjVxLTE2IDI4IC04LjUgNTl0MzQuNSA0OHQ1OCA5dDQ3IC0zNnpNMTg4MiA3OTJxNCAtMTUgLTQgLTI3LjV0LTIzIC0xNi41cS0xNSAtMyAtMjcuNSA1LjV0LTE1LjUgMjIuNXEtMyAxNSA1IDI4dDIzIDE2CnExNCAzIDI2LjUgLTV0MTUuNSAtMjN6TTE2OTEgMTAzM3ExNSAtMjIgMTAuNSAtNDl0LTI2LjUgLTQzcS0yMiAtMTUgLTQ5IC0xMHQtNDIgMjd0LTEwIDQ5dDI3IDQzdDQ4LjUgMTF0NDEuNSAtMjh6IiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InVuaUYyRTEiIHVuaWNvZGU9IiYjeGYyZTE7IiBob3Jpei1hZHYteD0iMTc5MiIgCiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InVuaUYyRTIiIHVuaWNvZGU9IiYjeGYyZTI7IiBob3Jpei1hZHYteD0iMTc5MiIgCiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InVuaUYyRTMiIHVuaWNvZGU9IiYjeGYyZTM7IiBob3Jpei1hZHYteD0iMTc5MiIgCiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InVuaUYyRTQiIHVuaWNvZGU9IiYjeGYyZTQ7IiBob3Jpei1hZHYteD0iMTc5MiIgCiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InVuaUYyRTUiIHVuaWNvZGU9IiYjeGYyZTU7IiBob3Jpei1hZHYteD0iMTc5MiIgCiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InVuaUYyRTYiIHVuaWNvZGU9IiYjeGYyZTY7IiBob3Jpei1hZHYteD0iMTc5MiIgCiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InVuaUYyRTciIHVuaWNvZGU9IiYjeGYyZTc7IiBob3Jpei1hZHYteD0iMTc5MiIgCiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9Il82OTgiIHVuaWNvZGU9IiYjeGYyZTg7IiBob3Jpei1hZHYteD0iMTc5MiIgCiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InVuaUYyRTkiIHVuaWNvZGU9IiYjeGYyZTk7IiBob3Jpei1hZHYteD0iMTc5MiIgCiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InVuaUYyRUEiIHVuaWNvZGU9IiYjeGYyZWE7IiBob3Jpei1hZHYteD0iMTc5MiIgCiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InVuaUYyRUIiIHVuaWNvZGU9IiYjeGYyZWI7IiBob3Jpei1hZHYteD0iMTc5MiIgCiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InVuaUYyRUMiIHVuaWNvZGU9IiYjeGYyZWM7IiBob3Jpei1hZHYteD0iMTc5MiIgCiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InVuaUYyRUQiIHVuaWNvZGU9IiYjeGYyZWQ7IiBob3Jpei1hZHYteD0iMTc5MiIgCiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9InVuaUYyRUUiIHVuaWNvZGU9IiYjeGYyZWU7IiBob3Jpei1hZHYteD0iMTc5MiIgCiAvPgogICAgPGdseXBoIGdseXBoLW5hbWU9Imxlc3NlcXVhbCIgdW5pY29kZT0iJiN4ZjUwMDsiIGhvcml6LWFkdi14PSIxNzkyIiAKIC8+CiAgPC9mb250Pgo8L2RlZnM+PC9zdmc+Cg=="

/***/ }),
/* 1156 */
/***/ (function(module, exports) {

	module.exports = "data:application/x-font-ttf;base64,AAEAAAANAIAAAwBQRkZUTWu+R7kAAoaQAAAAHEdERUYC8AAEAAKGcAAAACBPUy8yiDJ6QAAAAVgAAABgY21hcAq/On8AAAyoAAAC8mdhc3D//wADAAKGaAAAAAhnbHlmj/euTQAAGqwAAky8aGVhZBCJ5S0AAADcAAAANmhoZWEPAwq1AAABFAAAACRobXR4RXkYhQAAAbgAAArwbG9jYQL1olwAAA+cAAALEG1heHADLAIcAAABOAAAACBuYW1l45eLrAACZ2gAAASGcG9zdK+Pm6EAAmvwAAAadQABAAAABAHLkM94WV8PPPUACwcAAAAAANQzzTIAAAAA1DPNMv///wAJAQYAAAAACAACAAEAAAAAAAEAAAYA/wAAAAkA/////wkBAAEAAAAAAAAAAAAAAAAAAAK1AAEAAALDAhkAJwAAAAAAAgAAAAEAAQAAAEAAAAAAAAAAAwZpAZAABQAABIwEMwAAAIYEjAQzAAACcwAAAYoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcHlycwBAACD1AAYA/wAAAAYAAQAAAAABAAAAAAAAAAAAAAAgAAEDgABwAAAAAAJVAAABwAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAXQYAAAAGgAAABwAAAAcAAAAGgAAABoAAAAUAAAAHgAAABoAAAAcAAAAHAAAABwAAeQWAAG4GgAAABoAAAAYAAAAHAAAABgAAAAWAAAAGgAAaBgAAAAYAAAAHgAAyBoAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAcAAAAEgAAABwAAQAaAAAADAAAABIAAAAaAAAAFgAAABwAAAAYAAAAHgAAABoAACgUAAAAGgAAAB4AAAAaAAAAFgAAABAAAAAcAAAAGAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHgAAABgAAAAQAAAAGAAAABAAAAAcAAAAGgAAABoAAAAcAAAAEAAAABwAAAAaAAHoFgAAABgAAAAYAAAAGgAAABwAAAAQAAAAGAgABBQAAmgUAAFoGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAQAYAAAAGgAA1BoAANQcAAAAGAAAABgAADQWAAAAFgAAABoAAegYAAAAGAAAABwAAAAWAAAAHAAAABwAAAAcAABAFgAAABoAAAAcAAAAHAAAABgAAAAcAAFoHAABaB4AAAAaAAAAGgAAAB4AAAAMAAEAHAAAACAAAAAYAAAAGAAAABwAAAAcAAAAHgAAABwAAAAYAAAAGAAAAA4AAAAcAAAAGgAAABgAAAASAAAAHAAAABgAAAAaAAAAGAAAABoAAAAYAAAAFgAAABYAAAAUAAAAGAAAABoAALAQAAF8GAAAABoAAAAeAAAAFgAAABgAAAAcAAAAHAABABgAAAgcAAAAHAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAaAABUHAAAABYAABQcAAAAGAAAAB4AAAAaAABAHgAAABoAAcwcAAAEHAAAABYAABAYAAAAGAAAABgAAAAcAAAAHAAAPBwAAAAYAAAAGgAAABoAAGwcAAEAGAAAABgAAAAYAAAAJAAAAB4AAAAQAAAAEAAAAAoAAQAKAAAAGgAAABAAAAAQAAAAEAAAABwAAAAYAAAAGAAAABwAAKAcAAAAHAAAABwAAAAOAAAEHAAAABoAAAAcAAAAEAAAABwAAAAeAAAAHgAAABYAAAAWAAAAHAAAABwAAQAeAAAAFgAAABgAAAAWAAAAFgAAAB4AAQAcAAAAHgAAABoAAQAYAAAAGAAAABAAALQQAAA0EgABNBIAATQKAAC0CgAANBIAATQSAAE0HgAAAB4AAAASAAAADAAAABgAAAAaAAAAGgAAABwAAQAYAAAAHAAAABoAAAAaAAAAHgAAABwAAAAcAAAAGAAAABgAAAAYAAAAHgAAAB4AAAAcAAEAHAABABoAADQeAAC0HAAAABoAAAgWAAAIGgAAABAAAAAaAAAAEAABgAoAAAAKAAGIGAAAFBgAABQeAAAEGgAAABIAAAAWAAA0FAAAABoAAAAWAAAMGgAAkBwAAAAYAAAAGAAAABgAAAAYAAAAFgAAABwAADAcAAAAEgAAABgAAAAWAAAABgAAABgAAAAYAAAAHAAA2BgAAAAWAAAAEAAADBAAAAwYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABAAAAAQAAAAEAAA0A4IAAAQDAAQFAAAABwAAAAUAADgGAAAABgAAAAaAACIGgAAiBwAAIgcAACIGAAAiBgAAIgaAAAAGgAAABgAAAAYAABsFgAAFBgAAAAcAAAAHAABABgAACwYAAAAGAAAABgAAAAWAAAAGAAAABAAARAYAAAADAAADAwAAAwcAAEAHAAAABYAAAAaAAAAFgAAABgAACwYAAAAGAAAABQAALAYAAAAFAAAABAAAAAYAAAAHAAAsBgAAAAcAAEAGgAAgB4D//wcAAAAGAAAABYAAAAUAABUGAAAABgAAAAYAAAAGAAAABoAAAAYAAAAEgAAABYAAAAiAAAAGgAAABgAAAAcAAAAHAAAACAAAAAkAAAAGAABtBgAAAAcAAAAGAAAABgAAAAeAAAAGAAAACAAAAAYAAAAH9gApBgAAAAYAAAAGAAAABwAAAAYAAAAFAABABoAAAAMAAEAHAAAACQAAAAgAAAAGAAAABwAAAAYAAAAHAAAQCAAAAAgAAAAGAAAgBgAAAAQAAAAJAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAACcHAAAACAAAAAcAAAAHAAAgBwAAEwcAAAAGAAAABwAARAYAAAAFAAA5BwAAEggAAAAHAAAABwAAAAYAAAAGAAAABwAAPgUAABgGAAAABgAAAAYAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAABkHAABkBgAAWQgAAAAIAAAqBwAAAAYAAAkHAAAnCQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACAAADggAAA4FgAAABgAAAAYAAAAHAAAABwAAAAcAAAAIAAAABwAAAAgAAAAHAAAABgAAAAgAAAAIAAAACQAAAAYAAAAIAAAABQAACwgAAAAGAAAABgAAAAYAAAAIAAAABgAAAAYAAAAIAAAACAAAAAYAAAAIAAAACAAAAAaAAAAGgAAACAAAAAgAABMGAAAACQAAAAYAAAAHAAAABQAAAgYAAAAFAAAABgAAAgcAAAAHAAACB4AAAQgAAAYGAAAABQAAAggAAAQFAAAABQAAAAcAAAAHAAAABgAAAAUAAAAGAAAABwAAAAgAAAAIAAAACAAAAAYAAAAGAAAABgAAAAcAAAAGAAAACPgAVAkAAAAHAAAACQAAAAkAAAAJAAAACQAAAAkAAAAFAAAABAAAAAgAAAAJAAAABgAAAAYAAAAJAAAACQAAAAcAAAAJAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABwAAAAcAAAAIAAAA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AAD8uAAA/QwAAP1gAAD9tAAA/ggAAP64AAD/CAABABQAAQW0AAEG9AABB/gAAQjQAAEJZAABChAAAQqYAAELGAABDAQAAQykAAENLAABDgAAAQ+IAAERLAABEaAAARLMAAETOAABE+QAARSQAAEVKAABFaQAARZYAAEW/AABF8AAARiEAAEZeAABGnwAARtUAAEc1AABHUAAAR3UAAEekAABHwQAAR98AAEgpAABIcAAASJ4AAEjCAABI2wAASQEAAEkzAABJ2gAASjoAAEqTAABLFQAAS5MAAExdAABMfQAATLgAAEzMAABM7AAATSoAAE1dAABNlQAATckAAE4DAABOUgAAToQAAE68AABO5AAATyEAAE82AABP1gAAUAcAAFBwAABQsgAAUPIAAFEnAABRUgAAUZIAAFHcAABSEgAAUl4AAFKIAABSuQAAUvUAAFMoAABTRgAAU5AAAFQQAABUaAAAVLgAAFTRAABVCAAAVVMAAFWYAABVtQAAVdYAAFYNAABWKAAAVoEAAFaiAABW2QAAVvgAAFcfAABXdgAAV6gAAFglAABYUgAAWG8AAFi8AABY1gAAWSsAAFldAABZmgAAWfcAAFotAABaVwAAWp4AAFuhAABcEAAAXPgAAF2EAABd8gAAXiQAAF5iAABeowAAXtoAAF8jAABfRwAAX2kAAF/XAABf5gAAX/4AAGAbAABgXQAAYKQAAGDNAABg6QAAYTIAAGFsAABhqQAAYh0AAGJjAABijgAAYs4AAGLoAABjkwAAY6oAAGPVAABkBAAAZEUAAGTkAABlBQAAZUEAAGV/AABlvgAAZegAAGZfAABmsgAAZwQAAGdCAABndgAAZ58AAGfGAABn+gAAaDEAAGiDAABozQAAaR4AAGlsAABpoAAAadMAAGoHAABqJAAAajsAAGo7AABqOwAAalYAAGqKAABqyAAAavMAAGsrAABragAAa4gAAGuiAABrwQAAa+oAAGwQAABsIgAAba8AAG3bAABuOAAAbl0AAG6BAABupQAAbskAAG7pAABvAgAAbx4AAG9TAABvkwAAb6kAAG/IAABwEgAAcEYAAHBxAABwwQAAcPkAAHEoAABxVQAAcYoAAHG7AAByAwAAckMAAHKiAABy6AAAcz4AAHOHAABz5QAAdBsAAHRZAAB0twAAdNQAAHT+AAB1YQAAdZ4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AgoCCwIMAg0CDgIPAhACEQISAhMCFAIVAhYCFwIYAhkCGgIbAhwCHQIeAh8CIAIhAiICIwIkAiUCJgInAigCKQIqAisCLAItAi4CLwIwAjECMgIzAjQCNQI2AjcCOAI5AjoCOwI8Aj0CPgI/AkACQQJCAkMCRAJFAkYCRwJIAkkCSgJLAkwCTQJOAk8CUAJRAlICUwDSAlQCVQJWAlcCWAJZAloCWwJcAl0CXgJfAmACYQJiAmMCZAJlAmYCZwJoAmkCagJrAmwCbQJuAm8CcAJxAnICcwJ0AnUCdgJ3AngCeQJ6AnsCfAJ9An4CfwKAAoECggKDAoQChQKGAocCiAKJAooCiwKMAo0CjgKPApACkQKSApMClAKVApYClwKYApkCmgKbApwCnQKeAp8CoAKhAqICowKkAqUCpgKnAqgCqQKqAqsCrAKtAq4CrwKwArECsgKzArQCtQK2ArcCuAK5AroCuwK8Ar0CvgK/AsACwQLCAsMCxALFAsYCxwLIAskCygLLAswCzQLOAs8C0ALRAtIC0wLUAtUC1gLXAtgC2QLaAtsC3ALdAt4C3wLgAuEC4gLjAuQC5QLmAucC6ALpAuoC6wLsAu0C7gLvAvAC8QLyAvMC9AL1AvYC9wL4AvkC+gL7AvwC/QL+Av8DAAMBAwIDAwMEAwUDBgMHAwgDCQMKAwsDDAMNAw4DDwMQAxEDEgMTAxQDFQMWAxcDGAMZAxoDGwMcAx0DHgMfAyADIQMiAyMDJAMlAyYDJwMoAykDKgMrAywDLQMuAy8DMAMxAzIDMwM0AzUDNgM3AzgDOQM6AzsDPAM9Az4DPwNAA0EDQgNDA0QDRQNGA0cDSANJA0oDSwNMA00DTgNPA1ADUQNSA1MDVANVA1YDVwNYA1kDWgNbA1wDXQNeA18DYANhA2IDYwNkA2UDZgNnA2gDaQNqA2sDbANtA24DbwNwA3EDcgNzA3QDdQN2A3cDeAN5A3oDewN8A30DfgN/A4ADgQOCA4MDhAOFA4YDhwOIA4kDigOLA4wDjQOOA48DkAORA5IDkwOUA5UDlgOXA5gDmQOaA5sDnAOdA54DnwOgA6EDogOjA6QDpQOmA6cDqAOpA6oDqwOsA60DrgOvA7ADsQCUBWdsYXNzBW11c2ljBnNlYXJjaAhlbnZlbG9wZQVoZWFydARzdGFyCnN0YXJfZW1wdHkEdXNlcgRmaWxtCHRoX2xhcmdlAnRoB3RoX2xpc3QCb2sGcmVtb3ZlB3pvb21faW4Iem9vbV9vdXQDb2ZmBnNpZ25hbANjb2cFdHJhc2gEaG9tZQhmaWxlX2FsdAR0aW1lBHJvYWQMZG93bmxvYWRfYWx0CGRvd25sb2FkBnVwbG9hZAVpbmJveAtwbGF5X2NpcmNsZQZyZXBlYXQHcmVmcmVzaAhsaXN0X2FsdARsb2NrBGZsYWcKaGVhZHBob25lcwp2b2x1bWVfb2ZmC3ZvbHVtZV9kb3duCXZvbHVtZV91cAZxcmNvZGUHYmFyY29kZQN0YWcEdGFncwRib29rCGJvb2ttYXJrBXByaW50BmNhbWVyYQRmb250BGJvbGQGaXRhbGljC3RleHRfaGVpZ2h0CnRleHRfd2lkdGgKYWxpZ25fbGVmdAxhbGlnbl9jZW50ZXILYWxpZ25fcmlnaHQNYWxpZ25fanVzdGlmeQRsaXN0C2luZGVudF9sZWZ0DGluZGVudF9yaWdodA5mYWNldGltZV92aWRlbwdwaWN0dXJlBnBlbmNpbAptYXBfbWFya2VyBmFkanVzdAR0aW50BGVkaXQFc2hhcmUFY2hlY2sEbW92ZQ1zdGVwX2JhY2t3YXJkDWZhc3RfYmFja3dhcmQIYmFja3dhcmQEcGxheQVwYXVzZQRzdG9wB2ZvcndhcmQMZmFzdF9mb3J3YXJkDHN0ZXBfZm9yd2FyZAVlamVjdAxjaGV2cm9uX2xlZnQNY2hldnJvbl9yaWdodAlwbHVzX3NpZ24KbWludXNfc2lnbgtyZW1vdmVfc2lnbgdva19zaWduDXF1ZXN0aW9uX3NpZ24JaW5mb19zaWduCnNjcmVlbnNob3QNcmVtb3ZlX2NpcmNsZQlva19jaXJjbGUKYmFuX2NpcmNsZQphcnJvd19sZWZ0C2Fycm93X3JpZ2h0CGFycm93X3VwCmFycm93X2Rvd24Jc2hhcmVfYWx0C3Jlc2l6ZV9mdWxsDHJlc2l6ZV9zbWFsbBBleGNsYW1hdGlvbl9zaWduBGdpZnQEbGVhZgRmaXJlCGV5ZV9vcGVuCWV5ZV9jbG9zZQx3YXJuaW5nX3NpZ24FcGxhbmUIY2FsZW5kYXIGcmFuZG9tB2NvbW1lbnQGbWFnbmV0CmNoZXZyb25fdXAMY2hldnJvbl9kb3duB3JldHdlZXQNc2hvcHBpbmdfY2FydAxmb2xkZXJfY2xvc2ULZm9sZGVyX29wZW4PcmVzaXplX3ZlcnRpY2FsEXJlc2l6ZV9ob3Jpem9udGFsCWJhcl9jaGFydAx0d2l0dGVyX3NpZ24NZmFjZWJvb2tfc2lnbgxjYW1lcmFfcmV0cm8Da2V5BGNvZ3MIY29tbWVudHMNdGh1bWJzX3VwX2FsdA90aHVtYnNfZG93bl9hbHQJc3Rhcl9oYWxmC2hlYXJ0X2VtcHR5B3NpZ25vdXQNbGlua2VkaW5fc2lnbgdwdXNocGluDWV4dGVybmFsX2xpbmsGc2lnbmluBnRyb3BoeQtnaXRodWJfc2lnbgp1cGxvYWRfYWx0BWxlbW9uBXBob25lC2NoZWNrX2VtcHR5DmJvb2ttYXJrX2VtcHR5CnBob25lX3NpZ24HdHdpdHRlcghmYWNlYm9vawZnaXRodWIGdW5sb2NrC2NyZWRpdF9jYXJkA3JzcwNoZGQIYnVsbGhvcm4EYmVsbAtjZXJ0aWZpY2F0ZQpoYW5kX3JpZ2h0CWhhbmRfbGVmdAdoYW5kX3VwCWhhbmRfZG93bhFjaXJjbGVfYXJyb3dfbGVmdBJjaXJjbGVfYXJyb3dfcmlnaHQPY2lyY2xlX2Fycm93X3VwEWNpcmNsZV9hcnJvd19kb3duBWdsb2JlBndyZW5jaAV0YXNrcwZmaWx0ZXIJYnJpZWZjYXNlCmZ1bGxzY3JlZW4FZ3JvdXAEbGluawVjbG91ZAZiZWFrZXIDY3V0BGNvcHkKcGFwZXJfY2xpcARzYXZlCnNpZ25fYmxhbmsHcmVvcmRlcgJ1bAJvbA1zdHJpa2V0aHJvdWdoCXVuZGVybGluZQV0YWJsZQVtYWdpYwV0cnVjawlwaW50ZXJlc3QOcGludGVyZXN0X3NpZ24QZ29vZ2xlX3BsdXNfc2lnbgtnb29nbGVfcGx1cwVtb25leQpjYXJldF9kb3duCGNhcmV0X3VwCmNhcmV0X2xlZnQLY2FyZXRfcmlnaHQHY29sdW1ucwRzb3J0CXNvcnRfZG93bgdzb3J0X3VwDGVudmVsb3BlX2FsdAhsaW5rZWRpbgR1bmRvBWxlZ2FsCWRhc2hib2FyZAtjb21tZW50X2FsdAxjb21tZW50c19hbHQEYm9sdAdzaXRlbWFwCHVtYnJlbGxhBXBhc3RlCmxpZ2h0X2J1bGIIZXhjaGFuZ2UOY2xvdWRfZG93bmxvYWQMY2xvdWRfdXBsb2FkB3VzZXJfbWQLc3RldGhvc2NvcGUIc3VpdGNhc2UIYmVsbF9hbHQGY29mZmVlBGZvb2QNZmlsZV90ZXh0X2FsdAhidWlsZGluZwhob3NwaXRhbAlhbWJ1bGFuY2UGbWVka2l0C2ZpZ2h0ZXJfamV0BGJlZXIGaF9zaWduBGYwZmURZG91YmxlX2FuZ2xlX2xlZnQSZG91YmxlX2FuZ2xlX3JpZ2h0D2RvdWJsZV9hbmdsZV91cBFkb3VibGVfYW5nbGVfZG93bgphbmdsZV9sZWZ0C2FuZ2xlX3JpZ2h0CGFuZ2xlX3VwCmFuZ2xlX2Rvd24HZGVza3RvcAZsYXB0b3AGdGFibGV0DG1vYmlsZV9waG9uZQxjaXJjbGVfYmxhbmsKcXVvdGVfbGVmdAtxdW90ZV9yaWdodAdzcGlubmVyBmNpcmNsZQVyZXBseQpnaXRodWJfYWx0EGZvbGRlcl9jbG9zZV9hbHQPZm9sZGVyX29wZW5fYWx0CmV4cGFuZF9hbHQMY29sbGFwc2VfYWx0BXNtaWxlBWZyb3duA21laAdnYW1lcGFkCGtleWJvYXJkCGZsYWdfYWx0DmZsYWdfY2hlY2tlcmVkCHRlcm1pbmFsBGNvZGUJcmVwbHlfYWxsD3N0YXJfaGFsZl9lbXB0eQ5sb2NhdGlvbl9hcnJvdwRjcm9wCWNvZGVfZm9yawZ1bmxpbmsEXzI3OQtleGNsYW1hdGlvbgtzdXBlcnNjcmlwdAlzdWJzY3JpcHQEXzI4MwxwdXp6bGVfcGllY2UKbWljcm9waG9uZQ5taWNyb3Bob25lX29mZgZzaGllbGQOY2FsZW5kYXJfZW1wdHkRZmlyZV9leHRpbmd1aXNoZXIGcm9ja2V0Bm1heGNkbhFjaGV2cm9uX3NpZ25fbGVmdBJjaGV2cm9uX3NpZ25fcmlnaHQPY2hldnJvbl9zaWduX3VwEWNoZXZyb25fc2lnbl9kb3duBWh0bWw1BGNzczMGYW5jaG9yCnVubG9ja19hbHQIYnVsbHNleWUTZWxsaXBzaXNfaG9yaXpvbnRhbBFlbGxpcHNpc192ZXJ0aWNhbARfMzAzCXBsYXlfc2lnbgZ0aWNrZXQObWludXNfc2lnbl9hbHQLY2hlY2tfbWludXMIbGV2ZWxfdXAKbGV2ZWxfZG93bgpjaGVja19zaWduCWVkaXRfc2lnbgRfMzEyCnNoYXJlX3NpZ24HY29tcGFzcwhjb2xsYXBzZQxjb2xsYXBzZV90b3AEXzMxNwNldXIDZ2JwA3VzZANpbnIDanB5A3J1YgNrcncDYnRjBGZpbGUJZmlsZV90ZXh0EHNvcnRfYnlfYWxwaGFiZXQEXzMyORJzb3J0X2J5X2F0dHJpYnV0ZXMWc29ydF9ieV9hdHRyaWJ1dGVzX2FsdA1zb3J0X2J5X29yZGVyEXNvcnRfYnlfb3JkZXJfYWx0BF8zMzQEXzMzNQx5b3V0dWJlX3NpZ24HeW91dHViZQR4aW5nCXhpbmdfc2lnbgx5b3V0dWJlX3BsYXkHZHJvcGJveA1zdGFja2V4Y2hhbmdlCWluc3RhZ3JhbQZmbGlja3IDYWRuBGYxNzEOYml0YnVja2V0X3NpZ24GdHVtYmxyC3R1bWJscl9zaWduD2xvbmdfYXJyb3dfZG93bg1sb25nX2Fycm93X3VwD2xvbmdfYXJyb3dfbGVmdBBsb25nX2Fycm93X3JpZ2h0B3dpbmRvd3MHYW5kcm9pZAVsaW51eAdkcmliYmxlBXNreXBlCmZvdXJzcXVhcmUGdHJlbGxvBmZlbWFsZQRtYWxlBmdpdHRpcANzdW4EXzM2NgdhcmNoaXZlA2J1ZwJ2awV3ZWlibwZyZW5yZW4EXzM3Mg5zdGFja19leGNoYW5nZQRfMzc0FWFycm93X2NpcmNsZV9hbHRfbGVmdARfMzc2DmRvdF9jaXJjbGVfYWx0BF8zNzgMdmltZW9fc3F1YXJlBF8zODANcGx1c19zcXVhcmVfbwRfMzgyBF8zODMEXzM4NARfMzg1BF8zODYEXzM4NwRfMzg4BF8zODkHdW5pRjFBMARmMWExBF8zOTIEXzM5MwRmMWE0BF8zOTUEXzM5NgRfMzk3BF8zOTgEXzM5OQRfNDAwBGYxYWIEXzQwMgRfNDAzBF80MDQHdW5pRjFCMQRfNDA2BF80MDcEXzQwOARfNDA5BF80MTAEXzQxMQRfNDEyBF80MTMEXzQxNARfNDE1BF80MTYEXzQxNwRfNDE4BF80MTkHdW5pRjFDMAd1bmlGMUMxBF80MjIEXzQyMwRfNDI0BF80MjUEXzQyNgRfNDI3BF80MjgEXzQyOQRfNDMwBF80MzEEXzQzMgRfNDMzBF80MzQHdW5pRjFEMAd1bmlGMUQxB3VuaUYxRDIEXzQzOARfNDM5B3VuaUYxRDUHdW5pRjFENgd1bmlGMUQ3BF80NDMEXzQ0NARfNDQ1BF80NDYEXzQ0NwRfNDQ4BF80NDkHdW5pRjFFMARfNDUxBF80NTIEXzQ1MwRfNDU0BF80NTUEXzQ1NgRfNDU3BF80NTgEXzQ1OQRfNDYwBF80NjEEXzQ2MgRfNDYzBF80NjQHdW5pRjFGMARfNDY2BF80NjcEZjFmMwRfNDY5BF80NzAEXzQ3MQRfNDcyBF80NzMEXzQ3NARfNDc1BF80NzYEZjFmYwRfNDc4BF80NzkEXzQ4MARfNDgxBF80ODIEXzQ4MwRfNDg0BF80ODUEXzQ4NgRfNDg3BF80ODgEXzQ4OQRfNDkwBF80OTEEXzQ5MgRfNDkzBF80OTQEZjIxMARfNDk2BGYyMTIEXzQ5OARfNDk5BF81MDAEXzUwMQRfNTAyBF81MDMEXzUwNARfNTA1BF81MDYEXzUwNwRfNTA4BF81MDkFdmVudXMEXzUxMQRfNTEyBF81MTMEXzUxNARfNTE1BF81MTYEXzUxNwRfNTE4BF81MTkEXzUyMARfNTIxBF81MjIEXzUyMwRfNTI0BF81MjUEXzUyNgRfNTI3BF81MjgEXzUyOQRfNTMwBF81MzEEXzUzMgRfNTMzBF81MzQEXzUzNQRfNTM2BF81MzcEXzUzOARfNTM5BF81NDAEXzU0MQRfNTQyBF81NDMEXzU0NARfNTQ1BF81NDYEXzU0NwRfNTQ4BF81NDkEXzU1MARfNTUxBF81NTIEXzU1MwRfNTU0BF81NTUEXzU1NgRfNTU3BF81NTgEXzU1OQRfNTYwBF81NjEEXzU2MgRfNTYzBF81NjQEXzU2NQRfNTY2BF81NjcEXzU2OARfNTY5BGYyNjAEZjI2MQRfNTcyBGYyNjMEXzU3NARfNTc1BF81NzYEXzU3NwRfNTc4BF81NzkEXzU4MARfNTgxBF81ODIEXzU4MwRfNTg0BF81ODUEXzU4NgRfNTg3BF81ODgEXzU4OQRfNTkwBF81OTEEXzU5MgRfNTkzBF81OTQEXzU5NQRfNTk2BF81OTcEXzU5OARmMjdlB3VuaUYyODAHdW5pRjI4MQRfNjAyBF82MDMEXzYwNAd1bmlGMjg1B3VuaUYyODYEXzYwNwRfNjA4BF82MDkEXzYxMARfNjExBF82MTIEXzYxMwRfNjE0BF82MTUEXzYxNgRfNjE3BF82MTgEXzYxOQRfNjIwBF82MjEEXzYyMgRfNjIzBF82MjQEXzYyNQRfNjI2BF82MjcEXzYyOARfNjI5B3VuaUYyQTAHdW5pRjJBMQd1bmlGMkEyB3VuaUYyQTMHdW5pRjJBNAd1bmlGMkE1B3VuaUYyQTYHdW5pRjJBNwd1bmlGMkE4B3VuaUYyQTkHdW5pRjJBQQd1bmlGMkFCB3VuaUYyQUMHdW5pRjJBRAd1bmlGMkFFB3VuaUYyQjAHdW5pRjJCMQd1bmlGMkIyB3VuaUYyQjMHdW5pRjJCNAd1bmlGMkI1B3VuaUYyQjYHdW5pRjJCNwd1bmlGMkI4B3VuaUYyQjkHdW5pRjJCQQd1bmlGMkJCB3VuaUYyQkMHdW5pRjJCRAd1bmlGMkJFB3VuaUYyQzAHdW5pRjJDMQd1bmlGMkMyB3VuaUYyQzMHdW5pRjJDNAd1bmlGMkM1B3VuaUYyQzYHdW5pRjJDNwd1bmlGMkM4B3VuaUYyQzkHdW5pRjJDQQd1bmlGMkNCB3VuaUYyQ0MHdW5pRjJDRAd1bmlGMkNFB3VuaUYyRDAHdW5pRjJEMQd1bmlGMkQyB3VuaUYyRDMHdW5pRjJENAd1bmlGMkQ1B3VuaUYyRDYHdW5pRjJENwd1bmlGMkQ4B3VuaUYyRDkHdW5pRjJEQQd1bmlGMkRCB3VuaUYyREMHdW5pRjJERAd1bmlGMkRFB3VuaUYyRTAHdW5pRjJFMQd1bmlGMkUyB3VuaUYyRTMHdW5pRjJFNAd1bmlGMkU1B3VuaUYyRTYHdW5pRjJFNwRfNjk4B3VuaUYyRTkHdW5pRjJFQQd1bmlGMkVCB3VuaUYyRUMHdW5pRjJFRAd1bmlGMkVFAAAAAAAAAf//AAIAAQAAAA4AAAAYAAAAAAACAAEAAQLCAAEABAAAAAIAAAAAAAEAAAAAzD2izwAAAADLTzwwAAAAANQxaLk="

/***/ }),
/* 1157 */
/***/ (function(module, exports) {

	module.exports = "data:application/font-woff2;base64,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"

/***/ }),
/* 1158 */
/***/ (function(module, exports) {

	module.exports = "data:application/font-woff;base64,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"

/***/ }),
/* 1159 */
/***/ (function(module, exports) {

	module.exports = "data:font/opentype;base64,T1RUTwANAIAAAwBQQ0ZGILDDOV8AAAycAAEZ8kRTSUcAAAABAAF0AAAAAAhHREVGCRYJGQABNxwAAABAR1BPUwTiAeEAAV8cAAAU4kdTVULkVg8QAAE3XAAAJ75PUy8y2Yh25AAAAUAAAABgY21hcJLonLoAAAeEAAAE+GhlYWQT7p3aAAAA3AAAADZoaGVhDJIGTQAAARQAAAAkaG10eEiT73AAASaQAAAQjG1heHAEJFAAAAABOAAAAAZuYW1lw00hRgAAAaAAAAXkcG9zdP+4ADIAAAx8AAAAIAABAAAAAzMzTRPiGV8PPPUAAwPoAAAAANZiE+8AAAAA1mIT7/3y/cwKHwQdAAAAAwACAAAAAAAAAAEAAAQa/qIAZAoD/fL5hQofAAEAAAAAAAAAAAAAAAAAAAQiAABQAAQkAAAABANMASwABQAAAooCWAAAAEsCigJYAAABXgAyAUcAAAAABAAAAAAAAAAAAIAHAAAAAAAAAAAAAAAASVRGTwDAAAD7AgQa/qIAZARvAnMgAACTAAAAAAIiArwAAAAgAAQAAAATAOoAAwABBAkAAACIAAAAAwABBAkAAQAaAIgAAwABBAkAAgAOAKIAAwABBAkAAwAwALAAAwABBAkABAAaAIgAAwABBAkABQB2AOAAAwABBAkABgAaAVYAAwABBAkACAAmAXAAAwABBAkACQBcAZYAAwABBAkACwA6AfIAAwABBAkADQEgAiwAAwABBAkADgA0A0wAAwABBAkAEAAOA4AAAwABBAkAEQAKA44AAwABBAkAEwCuA5gAAwABBAkBAABABEYAAwABBAkBAQAeBIYAAwABBAkBAgAqBKQAAwABBAkBAwAsBM4AQwBvAHAAeQByAGkAZwBoAHQAIAAyADAAMQA0AC0AMgAwADEANwAgAEkAbgBkAGkAYQBuACAAVAB5AHAAZQAgAEYAbwB1AG4AZAByAHkAIAAoAGkAbgBmAG8AQABpAG4AZABpAGEAbgB0AHkAcABlAGYAbwB1AG4AZAByAHkALgBjAG8AbQApAFAAbwBwAHAAaQBuAHMAIABMAGkAZwBoAHQAUgBlAGcAdQBsAGEAcgAzAC4AMgAwADAAOwBJAFQARgBPADsAUABvAHAAcABpAG4AcwAtAEwAaQBnAGgAdABWAGUAcgBzAGkAbwBuACAAMwAuADIAMAAwADsAUABTACAAMQAuADAAMAAwADsAaABvAHQAYwBvAG4AdgAgADEANgAuADYALgA1ADQAOwBtAGEAawBlAG8AdABmAC4AbABpAGIAMgAuADUALgA2ADUANQA5ADAAUABvAHAAcABpAG4AcwAtAEwAaQBnAGgAdABJAG4AZABpAGEAbgAgAFQAeQBwAGUAIABGAG8AdQBuAGQAcgB5AE4AaQBuAGEAZAAgAEsAYQBsAGUAIAAoAEQAZQB2AGEAbgBhAGcAYQByAGkAKQAsACAASgBvAG4AbgB5ACAAUABpAG4AaABvAHIAbgAgACgATABhAHQAaQBuACkAaAB0AHQAcABzADoALwAvAGkAbgBkAGkAYQBuAHQAeQBwAGUAZgBvAHUAbgBkAHIAeQAuAGMAbwBtAFQAaABpAHMAIABGAG8AbgB0ACAAUwBvAGYAdAB3AGEAcgBlACAAaQBzACAAbABpAGMAZQBuAHMAZQBkACAAdQBuAGQAZQByACAAdABoAGUAIABTAEkATAAgAE8AcABlAG4AIABGAG8AbgB0ACAATABpAGMAZQBuAHMAZQAsACAAVgBlAHIAcwBpAG8AbgAgADEALgAxAC4AIABUAGgAaQBzACAAbABpAGMAZQBuAHMAZQAgAGkAcwAgAGEAdgBhAGkAbABhAGIAbABlACAAdwBpAHQAaAAgAGEAIABGAEEAUQAgAGEAdAA6ACAAaAB0AHQAcAA6AC8ALwBzAGMAcgBpAHAAdABzAC4AcwBpAGwALgBvAHIAZwAvAE8ARgBMAGgAdAB0AHAAOgAvAC8AcwBjAHIAaQBwAHQAcwAuAHMAaQBsAC4AbwByAGcALwBPAEYATABQAG8AcABwAGkAbgBzAEwAaQBnAGgAdAk4CS0JQAAgCS4JKAlBCTcJTQkvCUsJAgAgCRUJSwAgCRcJTAkwCTUAIAkUCTAAIAkFCScJPwkVCT4JMAlLCQIAIAkVCUcAIAkuCT4JLgkyCUcAIAkuCUcJAgAgCRwJKAlNCS4JHAk+CSQAIAk4CU0JNQkkCSgJTQkkCU0JMAkkCT4AIAkUCTAAIAk4CS4JPgkoCSQJPgAgCSoJTQkwCT4JKglNCSQAIAk5CUgJZABTAHEAdQBhAHIAZQAgAGQAbwB0AHMAIABpAG4AIABwAHUAbgBjAHQAdQBhAHQAaQBvAG4AIABt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TANTA1oDYgNpA3EDeAN+A4UDiwOSA5gDngOlA6sDsgO4A74DxAPKA9ED2APeA+QD6wPyA/oEAQQIBBAEFQQbBCAEJgQsBDEENwQ8BEIESAROBFUEWwRiBGgEbQRzBHgEfgSDBIgEjgSTBJkEngSjBKgErQSzBLkEvgTDBMkEzwTWBNwE4gTpBO8E9wT+BQQFCgURBRgFHgUlBS0FNQU9BUQFSgVQBVYFXgVlBW0FdgV9BYMFigWQBZYFnAWkBasFtAW/BcgF0QXXBeAF6QXxBfsGBQYNBhQGHAYjBioGMgY5BkEGSAZQBlgGYQZpBm8GdgZ8BoMGiQaQBpkGogaoBrAGtga9BsYGzAbSBtoG4AbmBuwG8wb6BwEHBwcOBxcHHQcjBykHMAc5Bz8HRQdNB1YHXgdmB20Hdgd9B4QHigeQB5YHnAeiB6gHrwe1B7wHwwfKB9EH2QfgB+gH8Af5CAAIBwgRCBkIIQgpCDIIOQhACEoIUghaCGIIawhzCHwIhAiLCJIImQifCKcIrwi3CMAIxwjQCNYI3gjmCO0I8wj7CQEJCQkRCRgJHgkmCSwJNAk6CUAJRglOCVYJXgllCWwJcwl5CYEJiAmOCZUJmwmhCakJsAm2CbwJwgnJCdIJ2QngCecJ7Qn1CfsKAgoJChAKFgoeCiYKLgo1Cj4KRwpNClUKXQpkCm0Kdgp/CoUKjQqTCpsKogqrCrIKuwrECsoK0grYCt4K5ArtCvcK/wsFCwwLFAsaCyILKAsuCzULOwtBC0cLTQtTC1oLYwtrC3ILeguBC4gLkAuaC6ELqAuwC7gLvgvFC80L1AvaC+AL5wvwC/YL/AwDDAwMEgwYDCAMJgwtDDMMOgxBDEoMUQxYDF4MZAxqDHAMeAx+DIYMjgyVDJ4MpwywDLYMvAzCDMgMzwzVDNsM4QznDPMM/w0FDQ0NFA0aDSANJw0uDTYNPQ1FDUsNUg1bDWENaQ1vDXYNfA2DDYkNjw2VDZ0Now2sDbINuA2+DcQNyg3QDdYN3Q3lDewN9A38DgMOCg4RDhgOHw4mDi4ONQ4+DkYOUA5aDmQObQ54DoMOiw6VDpwOpQ6tDrQOvQ7EDssO0w7ZDuEO6Q7wDvYO/Q8DDwsPEw8bDyIPKw8xDzcPPQ9FD0wPUg9YD2APZg9sD3IPeA9/D4UPiw+RD5cPnQ+kD68Pvg/MD9YP6Q/2EAQQDhAhEDUQRRBeEGsQdBCGEJQQnhCxEL4QxxDZEOcQ8REEERcRKhExETkRQBFIEVARWRFhEWkRcRF5EYERiRGREZkRoRGpEbERuRHBEckR0RHZEeER6RHxEfkSARIJEhESGRIhEigSLxI2Ej0SRBJKElASVxJeEmQSahJ0En4ShBKKEpASlhKcEqISqRKwErYSvBLGEtAS1xLeEuQS6hLwEvYTABMKExETGBMeEyQTKxMyEzkTQBNHE04TWBNfE2YTbBNyE3kTgBOGE4wTkBOUE5oToBOnE64TtBO6E8ETyBPPE9YT4xPwE/YT/BQDFAoUEBQWFBwUIhQpFDAUNxQ+FEQUShRQFFYUXRRkFGoUcBR1FHoUhxSUFJsUohStFLgUwxTOFNQU2hTkFO4U9RT8FQMVChURFRgVHxUmFS0VNBU2FTwVQhVIFU4VVxVgFWcVbhV0FXoVgRWIFYwVkxWaFaEVqBWxFbwVwxXKFdMV2hXhFegV8BX4FgMWCxYUFiAWJxYyFjwWRxZRFl8WbBZ7Fo4WnxaqFrwWyhbZFuoW/BcJFw8XGhclFzUXQxdOF1oXZhdwF3sXiReRF5sXoxesF7FOVUxMQ1JkdkFkdkFBZHZJZHZJSWR2VWR2VVVkdnZSZHZ2UlJkdnZMZHZ2TExkdkVkdkFJZHZPZHZBVWR2RWNhbmRyYWR2QWNhbmRyYWR2T2NhbmRyYWR2bUFBZHZtSWR2bUlJZHZtVWR2bVVVZHZtdlJkdm12UlJkdm12TGR2bXZMTGR2bUVkdm1BSWR2bU9kdm1BVWR2bUVjYW5kcmFkdm1PY2FuZHJhZHZLQWR2S0hBZHZHQWR2R0hBZHZOR0FkdkNBZHZDSEFkdkpBZHZKSEFkdk5ZQWR2VFRBZHZUVEhBZHZEREFkdkRESEFkdk5OQWR2VEFkdlRIQWR2REFkdkRIQWR2TkFkdlBBZHZQSEFkdkJBZHZCSEFkdk1BZHZZQWR2UkFkdkxBZHZWQWR2U0hBZHZTU0FkdlNBZHZIQWR2TExBZHZLX1NTQWR2Sl9OWUFkdkt4QWR2S0h4QWR2R3hBZHZKeEFkdkREeEFkdkRESHhBZHZQSHhBZHZSeEFkdktkdktIZHZHZHZHSGR2TkdkdkNkdkNIZHZKZHZKSGR2TllkdlRUZHZUVEhkdkREZHZEREhkdk5OZHZUZHZUSGR2RGR2REhkdk5kdlBkdlBIZHZCZHZCSGR2TWR2WWR2UmR2TGR2VmR2U0hkdlNTZHZTZHZIZHZMTGR2S19TU2R2Sl9OWWR2S3hkdktIeGR2R3hkdkp4ZHZQSHhkdkFudXN2YXJhZHZDYW5kcmFiaW5kdWR2VmlzYXJnYWR2QXZhZ3JhaGFkdlZpcmFtYWR2TnVrdGFkdlplcm9kdk9uZWR2VHdvZHZUaHJlZWR2Rm91cmR2Rml2ZWR2U2l4ZHZTZXZlbmR2RWlnaHRkdk5pbmVkdk9tZHZBYmJyZXZpYXRpb25zaWduZGFuZGFkb3VibGVkYW5kYXJ1cGVlaW5kaWFucnVwZWV6ZXJvd2lkdGhub25qb2luZXJ6ZXJvd2lkdGhqb2luZXJkb3R0ZWRjaXJjbGVkdlJlcGhkdkV5ZWxhc2hkdlJhc2h0cmFzaWduZHZLX1JBZHZLSF9SQWR2R19SQWR2R0hfUkFkdk5HX1JBZHZDX1JBZHZDSF9SQWR2Sl9SQWR2SkhfUkFkdk5ZX1JBZHZUVF9SQWR2VFRIX1JBZHZERF9SQWR2RERIX1JBZHZOTl9SQWR2VF9SQWR2VEhfUkFkdkRfUkFkdkRIX1JBZHZOX1JBZHZQX1JBZHZQSF9SQWR2Ql9SQWR2QkhfUkFkdk1fUkFkdllfUkFkdkxfUkFkdlZfUkFkdlNIX1JBZHZTU19SQWR2U19SQWR2SF9SQWR2TExfUkFkdkt4X1JBZHZLSHhfUkFkdkd4X1JBZHZKeF9SQWR2UEh4X1JBZHZLX1JkdktIX1JkdkdfUmR2R0hfUmR2TkdfUmR2Q19SZHZDSF9SZHZKX1JkdkpIX1Jkdk5ZX1JkdlRUX1JkdlRUSF9SZHZERF9SZHZEREhfUmR2Tk5fUmR2VF9SZHZUSF9SZHZEX1JkdkRIX1Jkdk5fUmR2UF9SZHZQSF9SZHZCX1JkdkJIX1Jkdk1fUmR2WV9SZHZMX1JkdlZfUmR2U0hfUmR2U1NfUmR2U19SZHZIX1JkdkxMX1Jkdkt4X1JkdktIeF9SZHZHeF9SZHZKeF9SZHZQSHhfUmR2S19LQWR2S3hfS3hBZHZLX0tIQWR2S19DQWR2S19KQWR2S19UVEFkdktfTk5BZHZLX1RBZHZLeF9UQWR2S19UX1lBZHZLX1RfUkFkdktfVF9WQWR2S19USEFkdktfREFkdktfTkFkdktfUEFkdktfUF9SQWR2S19QSEFkdkt4X1BIQWR2S3hfUEh4QWR2S3hfQkFkdktfTUFkdkt4X01BZHZLX1lBZHZLX0xBZHZLX1ZBZHZLX1ZfWUFkdktfU0hBZHZLX1NTX01BZHZLX1NTX01fWUFkdktfU1NfWUFkdktfU1NfVkFkdktfU0FkdktfU19UVEFkdktfU19EREFkdktfU19UQWR2S19TX1BfUkFkdktfU19QX0xBZHZLSF9LSEFkdktIX1RBZHZLSHhfVEFkdktIX05BZHZLSF9NQWR2S0h4X01BZHZLSF9ZQWR2S0h4X1lBZHZLSF9WQWR2S0h4X1ZBZHZLSF9TSEFkdktIeF9TSEFkdktIeF9TQWR2R19HQWR2R19HSEFkdkdfSkFkdkdfTk5BZHZHX0RBZHZHX0RIQWR2R19ESF9ZQWR2R19ESF9WQWR2R19OQWR2R19OX1lBZHZHX0JBZHZHX0JIQWR2R19CSF9ZQWR2R19NQWR2R19ZQWR2R19SX1lBZHZHX0xBZHZHX1ZBZHZHX1NBZHZHSF9OQWR2R0hfTUFkdkdIX1lBZHZDX0NBZHZDX0NIQWR2Q19DSF9WQWR2Q19OQWR2Q19NQWR2Q19ZQWR2Q0hfWUFkdkNIX1JfWUFkdkpfS0FkdkpfSkFkdkp4X0p4QWR2Sl9KX05ZQWR2Sl9KX1lBZHZKX0pfVkFkdkpfSkhBZHZKX05ZX1lBZHZKX1RUQWR2Sl9EREFkdkpfVEFkdkpfREFkdkpfTkFkdkpfQkFkdkpfTUFkdkpfWUFkdkp4X1lBZHZKX1ZBZHZKSF9OQWR2SkhfTUFkdkpIX1lBZHZOWV9DQWR2TllfQ0hBZHZOWV9KQWR2TllfU0hBZHZUVF9UVEFkdlRUX1RUSEFkdlRUX1lBZHZUVF9WQWR2VFRIX1RUSEFkdlRUSF9ZQWR2VFRIX1ZBZHZERF9EREFkdkREX0RESEFkdkREX1lBZHZERF9WQWR2RERIX0RESEFkdkRESF9ZQWR2RERIX1ZBZHZOTl9UVEFkdk5OX1RUSEFkdk5OX0REQWR2Tk5fRERIQWR2Tk5fTk5BZHZOTl9NQWR2Tk5fWUFkdk5OX1ZBZHZUX0tBZHZUX0tfWUFkdlRfS19SQWR2VF9LX1ZBZHZUX0tfU1NBZHZUX0tIQWR2VF9LSF9SQWR2VF9UQWR2VF9UX1lBZHZUX1RfVkFkdlRfVEhBZHZUX05BZHZUX05fWUFkdlRfUEFkdlRfUF9SQWR2VF9QX0xBZHZUX1BIQWR2VF9NQWR2VF9NX1lBZHZUX1lBZHZUX1JfWUFkdlRfTEFkdlRfVkFkdlRfU0FkdlRfU19OQWR2VF9TX1lBZHZUX1NfVkFkdlRIX05BZHZUSF9ZQWR2VEhfVkFkdkRfR0FkdkRfR19SQWR2RF9HSEFkdkRfREFkdkRfREhBZHZEX05BZHZEX0JBZHZEX0JfUkFkdkRfQkhBZHZEX01BZHZEX1lBZHZEX1ZBZHZESF9OQWR2REhfTl9ZQWR2REhfTUFkdkRIX1lBZHZESF9WQWR2Tl9LQWR2Tl9LX1NBZHZOX0NBZHZOX0NIQWR2Tl9UVEFkdk5fRERBZHZOX1RBZHZOX1RfWUFkdk5fVF9SQWR2Tl9UX1NBZHZOX1RIQWR2Tl9USF9ZQWR2Tl9USF9WQWR2Tl9EQWR2Tl9EX1JBZHZOX0RfVkFkdk5fREhBZHZOX0RIX1lBZHZOX0RIX1JBZHZOX0RIX1ZBZHZOX05BZHZOX05fWUFkdk5fUEFkdk5fUF9SQWR2Tl9QSEFkdk5fUEhfUkFkdk5fQkhBZHZOX0JIX1lBZHZOX0JIX1ZBZHZOX01BZHZOX01fWUFkdk5fWUFkdk5fVkFkdk5fU0Fkdk5fU19UVEFkdk5fU19NX1lBZHZOX1NfWUFkdk5fSEFkdlBfVFRBZHZQX1RUSEFkdlBfVEFkdlBfVF9ZQWR2UF9OQWR2UF9QQWR2UF9QSEFkdlBfTUFkdlBfWUFkdlBfTEFkdlBfVkFkdlBfU0FkdlBIX0pBZHZQSHhfSnhBZHZQSF9UVEFkdlBIX1RBZHZQSHhfVEFkdlBIX05BZHZQSF9QQWR2UEhfUEhBZHZQSHhfUEh4QWR2UEhfWUFkdlBIX0xBZHZQSF9TSEFkdlBIeF9TQWR2Ql9KQWR2Ql9KeEFkdkJfSl9ZQWR2Ql9KSEFkdkJfVEFkdkJfREFkdkJfREhBZHZCX0RIX1ZBZHZCX05BZHZCX0JBZHZCX0JIQWR2Ql9CSF9SQWR2Ql9ZQWR2Ql9MQWR2Ql9MX1lBZHZCX1ZBZHZCX1NIQWR2Ql9TQWR2QkhfTkFkdkJIX1lBZHZCSF9SX1lBZHZCSF9MQWR2QkhfVkFkdk1fVEFkdk1fREFkdk1fTkFkdk1fUEFkdk1fUF9SQWR2TV9CQWR2TV9CX1lBZHZNX0JfUkFkdk1fQkhBZHZNX0JIX1lBZHZNX0JIX1JBZHZNX0JIX1ZBZHZNX01BZHZNX1lBZHZNX0xBZHZNX1ZBZHZNX1NIQWR2TV9TQWR2TV9IQWR2WV9OQWR2WV9ZQWR2RXllbGFzaF9ZQWR2RXllbGFzaF9IQWR2TF9LQWR2TF9LX1lBZHZMX0tIQWR2TF9HQWR2TF9KQWR2TF9KeEFkdkxfVFRBZHZMX1RUSEFkdkxfRERBZHZMX0RESEFkdkxfVEFkdkxfVEhBZHZMX1RIX1lBZHZMX0RBZHZMX0RfUkFkdkxfUEFkdkxfUEhBZHZMX0JBZHZMX0JIQWR2TF9NQWR2TF9ZQWR2TF9MQWR2TF9MX1lBZHZMX1ZBZHZMX1ZfRERBZHZMX1NBZHZMX0hBZHZWX05BZHZWX1lBZHZWX0xBZHZWX1ZBZHZWX0hBZHZTSF9LQWR2U0hfS3hBZHZTSF9DQWR2U0hfQ0hBZHZTSF9UVEFkdlNIX1RBZHZTSF9OQWR2U0hfTUFkdlNIX1lBZHZTSF9MQWR2U0hfVkFkdlNIX1NIQWR2U1NfS0FkdlNTX0tfUkFkdlNTX1RUQWR2U1NfVFRfWUFkdlNTX1RUX1JBZHZTU19UVF9WQWR2U1NfVFRIQWR2U1NfVFRIX1lBZHZTU19UVEhfUkFkdlNTX05OQWR2U1NfTk5fWUFkdlNTX1BBZHZTU19QX1JBZHZTU19QSEFkdlNTX01BZHZTU19NX1lBZHZTU19ZQWR2U1NfVkFkdlNTX1NTQWR2U19LQWR2U19LX1JBZHZTX0tfVkFkdlNfS0hBZHZTX0pBZHZTX1RUQWR2U19UQWR2U19UX1lBZHZTX1RfUkFkdlNfVF9WQWR2U19USEFkdlNfVEhfWUFkdlNfREFkdlNfTkFkdlNfUEFkdlNfUF9SQWR2U19QSEFkdlNfQkFkdlNfTUFkdlNfTV9ZQWR2U19ZQWR2U19MQWR2U19WQWR2U19TQWR2SF9OTkFkdkhfTkFkdkhfTUFkdkhfWUFkdkhfTEFkdkhfVkFkdkxMX1lBZHZtSUkuYUxvbmdkdlJlcGhfQW51c3ZhcmFkdkFudXN2YXJhLmFtSWR2UmVwaC5hbUlkdlJlcGhfQW51c3ZhcmEuYW1JZHZJSV9BbnVzdmFyYWR2bUlJX0FudXN2YXJhZHZtSUlfUmVwaGR2bUlJX1JlcGhfQW51c3ZhcmFkdm1JSV9BbnVzdmFyYS5hTG9uZ2R2bUlJX1JlcGguYUxvbmdkdm1JSV9SZXBoX0FudXN2YXJhLmFMb25nZHZtRV9BbnVzdmFyYWR2bUVfUmVwaGR2bUVfUmVwaF9BbnVzdmFyYWR2bUFJX0FudXN2YXJhZHZtQUlfUmVwaGR2bUFJX1JlcGhfQW51c3ZhcmFkdm1PX0FudXN2YXJhZHZtT19SZXBoZHZtT19SZXBoX0FudXN2YXJhZHZtQVVfQW51c3ZhcmFkdm1BVV9SZXBoZHZtQVVfUmVwaF9BbnVzdmFyYWR2bUVjYW5kcmFfQW51c3ZhcmFkdm1PY2FuZHJhX0FudXN2YXJhZHZSQV9tVWR2UkFfbVVVZHZIQV9tVWR2SEFfbVVVZHZEQV9tdlJkdlNIQV9tdlJkdkhBX212UmR2bUkuYTAxZHZtSS5hMDJkdm1JLmEwM2R2bUkuYTA0ZHZtSS5hMDVkdm1JLmEwNmR2bUkuYTA3ZHZtSS5hMDhkdm1JLmEwOWR2bUkuYTEwZHZtSS5hMTFkdm1JLmExMmR2bUkuYTEzZHZtSS5hMTRkdm1JLmExNWR2bUkuYTE2ZHZtSS5hMTdkdm1JLmExOGR2bUkuYTE5ZHZtSS5hMjBkdm1JLmEyMWR2bUkuYTIyZHZtSS5hMjNkdm1JLmEyNHVuaTAwQTB1bmkwMEFEdW5pMDBCNUFtYWNyb25hbWFjcm9uQWJyZXZlYWJyZXZlQW9nb25la2FvZ29uZWtDYWN1dGVjYWN1dGVDZG90YWNjZW50Y2RvdGFjY2VudENjYXJvbmNjYXJvbkRjYXJvbmRjYXJvbkRjcm9hdGRjcm9hdEVtYWNyb25lbWFjcm9uRWJyZXZlZWJyZXZlRWRvdGFjY2VudGVkb3RhY2NlbnRFb2dvbmVrZW9nb25la0VjYXJvbmVjYXJvbkdicmV2ZWdicmV2ZUdkb3RhY2NlbnRnZG90YWNjZW50dW5pMDEyMnVuaTAxMjNJdGlsZGVpdGlsZGVJbWFjcm9uaW1hY3JvbnVuaTAxMkN1bmkwMTJESW9nb25la2lvZ29uZWtJZG90YWNjZW50dW5pMDEzNnVuaTAxMzdMYWN1dGVsYWN1dGV1bmkwMTNCdW5pMDEzQ0xjYXJvbmxjYXJvbkxkb3RsZG90TmFjdXRlbmFjdXRldW5pMDE0NXVuaTAxNDZOY2Fyb25uY2Fyb25PbWFjcm9ub21hY3JvbnVuaTAxNEV1bmkwMTRGT2h1bmdhcnVtbGF1dG9odW5nYXJ1bWxhdXRSYWN1dGVyYWN1dGV1bmkwMTU2dW5pMDE1N1JjYXJvbnJjYXJvblNhY3V0ZXNhY3V0ZXVuaTAxNUV1bmkwMTVGdW5pMDE2MnVuaTAxNjNUY2Fyb250Y2Fyb25VdGlsZGV1dGlsZGVVbWFjcm9udW1hY3JvblVicmV2ZXVicmV2ZVVyaW5ndXJpbmdVaHVuZ2FydW1sYXV0dWh1bmdhcnVtbGF1dFVvZ29uZWt1b2dvbmVrV2NpcmN1bWZsZXh3Y2lyY3VtZmxleFljaXJjdW1mbGV4eWNpcmN1bWZsZXhaYWN1dGV6YWN1dGVaZG90YWNjZW50emRvdGFjY2VudHVuaTAxOEZ1bmkwMUZDdW5pMDFGRHVuaTAyMTh1bmkwMjE5dW5pMDIxQXVuaTAyMUJ1bmkwMjU5dW5pMDJCQ3VuaTAyQzlwaVdncmF2ZXdncmF2ZVdhY3V0ZXdhY3V0ZVdkaWVyZXNpc3dkaWVyZXNpc3VuaTFFQkN1bmkxRUJEWWdyYXZleWdyYXZldW5pMUVGOHVuaTFFRjlFdXJvdW5pMjBCQXVuaTIwQkR1bmkyMTEzdW5pMjEyNmVzdGltYXRlZHBhcnRpYWxkaWZmdW5pMjIwNnByb2R1Y3RzdW1tYXRpb251bmkyMjE1dW5pMjIxOXJhZGljYWxpbmZpbml0eWludGVncmFsYXBwcm94ZXF1YWxub3RlcXVhbGxlc3NlcXVhbGdyZWF0ZXJlcXVhbGxvemVuZ2VleGNsYW0uc3MwMWNvbW1hLnNzMDFwZXJpb2Quc3MwMWNvbG9uLnNzMDFzZW1pY29sb24uc3MwMXF1ZXN0aW9uLnNzMDFleGNsYW1kb3duLnNzMDFwZXJpb2RjZW50ZXJlZC5zczAxcXVlc3Rpb25kb3duLnNzMDFkaXZpZGUuc3MwMWFwb3N0cm9waGVtb2Quc3MwMXF1b3RlbGVmdC5zczAxcXVvdGVyaWdodC5zczAxcXVvdGVkYmxsZWZ0LnNzMDFxdW90ZWRibHJpZ2h0LnNzMDFlbGxpcHNpcy5zczAxYS5zczAyYWFjdXRlLnNzMDJhYnJldmUuc3MwMmFjaXJjdW1mbGV4LnNzMDJhZGllcmVzaXMuc3MwMmFncmF2ZS5zczAyYW1hY3Jvbi5zczAyYW9nb25lay5zczAyYXJpbmcuc3MwMmF0aWxkZS5zczAyYW1wZXJzYW5kLnNzMDN0d28uc3MwNHRocmVlLnNzMDRzaXguc3MwNG5pbmUuc3MwNDEuMDAwAcsCAAEAGwBtAHgApgCrAPgBCgEvATUBUgFWAVwBbwGtAb0BwQHFAd8CAgIHAgwCJwIrAjACOAI/AnECdwKfAqQCvQLXAuAC9AL6AwIDVgOPA5MDuAO/A9wECgQpBDcEUgSOBMAExgTKBNEFEgUkBSoFMAU7BVwFaAV5BbgFygXQBdQF/wZXBoEGuAbABtUHBgcLBx0HhAekB7AHtQe8B9IH7QfxCEEISAhNCFIIWAiXCOIJDgkXCR8JJwlOCWEJcQl6CZkJpgn1Cg0KFQolCisKRwpeCnMKtAq7CsQK0grkCvYLBAsSCyELJwsrC0sLVQtgC2gLbAunC+gL7wwdDCEMOQxIDHAMgwynDMYM0AzfDScNKw02DVMNWg1eDWMNgQ2lDcsN/A4FDlsOag58DoIOzw7rDwoPJg83DzwPSA9MD1MPcQ93D3wPgw+XD54Pug/QD9YP4hAeEGcQkhCgEOYQ+REBETURaRGDEZIRnBGhEeIR5xHyEfoSBBITEhsSIRIvEk0SYBJzEn0SoBLJEtQS2RLmEuoTJhNGE1ATVRNbE2QTahNyE38ThROfE7YT3RPgE/EUBBQZFCEUORRFFHkUlBTFFNkU6RTxFPcU/BULFREVQBVGFUoVURVeFW0VhxWPFZYVnhWlFaoVrxW7FcIVzhXvFhgWHRYuFkkWZRZ2Fn4WpBa6FsMWzRbVFtsW5hbsFvEXFRc6F00XURdaF18XbhdzF3gXlxe4F9AX2xfnF+8X8xf/GAQYCRgOGBYYGhgeGDoYTxhWGFoYdhh/GJAYlhidGLEYtxi8GNgY5xj3GQMZDxkWGSAZJRksGTIZTRlWGW8ZhxmNGZMZrBnFGd4Z6RoBGhQaKhpAGk4aXBplGmsacBp2GocajBqiGrEauBrAGs0a0hrZGuAa5hrrGv4bAxsPGxQbGRsgGzQbOxtPG1UbaRt1G4EbhRuRG5cbnRuiG7UbuhvNG+Ab5RvvG/gcARwJHBAcFxwcHCEcKBw6HEwcWxxfHGkcbxx1HHscgRyGHIsckByWHKcctxy+HM8c0xzYHOQc9B0EHRQdGR0gHSodNB07HUMdRx1OHVUdWx1hHWkdeB1/HY4dnR2iHakdrh28Hcodzx3bHeUd8R39HgIeBx4QHhUeGh4gHiUeKh43Hj4eQx5JHlUeXB5hHmsedB6AHowekR6YHp4eph6tHrQeux7BHscezB7RHtwe5x7yHv0fCB8RHxYVLELM9wT3ANfM5/cMvC45H4oHPlkq+wseC5z3zfiCFfDnS/sTiB/8FAb3E5Piy+4b95H71RVBBkJ3TFouGyUyzvcUhR/4WQaNnouZoRr3Hyn3Bvs0+zH7AyD7QvtB9wX7APcv9x3j2fKkHgsVN1PBQh0999UKC/ddHeXTSSH7BEdKMHt5jY99HlgHhpv3qB33DPcaHTDk+wsqT1hKcB/3gPiFwQshCvtxC/dL+Xj38hX3Zfsp9yj7WftY+yr7KPtl+2b3Kvsn91j3Wfcp9yf3Zh79ABb3S/cL9wT3L/cv9wv7BPtL+0v7C/sF+y/7L/sL9wX3Sx4Lpp+epaZ3n3Bwd3dwcZ94ph8L+wP7Afs/H/hxihX7HDA3+wT7BzPe9x73H+Pb9wf3BOY3+xweC/fYByMdC+EKcXd2cnKfdqUf9y4WpJ+gpKR39wsKcp92pR8LHyoKC/lC9yHBCyJb0/cHH/eB98L7mgczVkErHguw+Ob3pRX3QvsL9vsu+y37DCD7QvtB9wn7APcu9y73DfcA90Ee/G8W9yrs0fPz7UX7KvsqJ0UkIyvR9yoeC5lNgAc1W1A6M2LN5h73NAsfPR0LFSwdC0cK6Lo/LSBQPfsGg4CMjIEeUgeKl5aKlRsLwcBTBidPvdzKtb7S0rFZUYaLhIp+H70GjJaMmJIa5k/MJQs7Qi4KC/vANh0LBvsLOTf7C/sINtz3Bvcf7833FB7m90n3c8ELyigdC5WXNQoLYQop+2BeHQv3jh0HIwoLFU0GWn1YUjAb+wBS1ObkxNb3AOq8UVqXH8kG2nxJ2/scG/fbHc3Dosoe9073RfckwQv7BEhECgun+L34thVF+70G+xlESyUnScn3DR73y0b70wf7NO0/9xDc06/QrB4LSAr3DAv7E0ZuPx5l+zYG+ynrM/cl9wXWz92uHogLFZheB1hwbktLcKi+Hl9+Bki4U+XlucPOHguVl4yMlx8mCgv7BVnU9wkf93731fuYBzJTQCUeC/foHVM9C6q/dAb3yAoL+MgVL4lUWXFMCPeB+JAxB/sHT2Eugx521VDIJYkImx35u5gV+xk84vcMH46Ljo8a9/MK9xcd/NX3MBXgt+n3BY0e6I25S5JMCIsH+y7p+wX3RAoLZlawBsCwenOjH4yJBYwGpXCWZ2oaN1NRMTFLx+EeTgb7DOc69xP3DdvX9wevga94qR73SYoF++wLBkkdC/cPXN/7CSZNSPfkCssGiJqKmJca1LW1xtOpUzUeJyX3GAr1Hwv6R/gvPgoLMjBqISHkaOEftQbY2XEtSltYJ/sKUcrbih9MBgsV3MmyztHGXUFJYmRWah4tjkW+3xr3ev0FFcb3n1QGQ1xQOj1dwM7w6a7kuR4L+2L3fPgRQAb7D0JpJR73ifus9wQK9w6O38H3HcIdCypg0Oce9wzzB/cdlgoLFfsHNt33BvcH4Nz3B/cJ4Dr7B/sGNjn7CR8LFfeY/BT7EPdeGtzPuN2KHuyKuk+TWgjXBut/O9X36QoyPPsAH/ub+BT3FvtiGkNSUir7BWDRxYUeQQYLFfcWyicvZH9gcWgf+7X3mQWqrrqcvxuN/BMVIDHQ9wy8mrSjqx/3t/uZBW1sX3dRGwv7PU8gHQvuCuALUR2z6/cJCxX7WPsq+yj7Zftm9yr7J/dY91P3Hvci902WH778BFL3ugf7M4D7ACj7Jxv3Ix33BOBRMbIf3Qb3GVn7Ctr7KhsLFfsa3fsaOQVSB/ca3/caNwULeh3T9w8L+xLLPAoL98wd+zv3mR1dCgv3Zwr3IfJF2PsC+wA/RfsDfI15jnwfYwomBol7int8Ggv3Q/lCFfchwfshBgsV+xreBVMH9xo59xrdBcMHDhX3CtzJ7q8fMLLcVfcJG/cH1cLLrB/7gm8d/TpV91ZAB/sUQGX7BB57Bop9int9GocHiwf7IY5AKPsZ9xsdC0Fdw9kf98T3hPvEBz1fUz8eC1Id5MxJCwZWHQt8k3mReI4IjQfgnrTH2Br2OdD7BfsJNEb7BR7HBtrLu9vWyVs4UV9LKh4LTwr42AeQmpyNnBvgwr0KHy4G9Hw7yfsF91gKS8xsH09xVVczG/kMTRX3CvfuHVlPOUwd9+sKeh/+O6IKy8Gfsa8f+xWO0zv3Fhv32ZMVzPlB9yDC+2EGDhv7G0c4NX0fyAbAmLrI7Bv3A8I2LipUOPsDLVvFwnwfTgY2mtA49xkbC88d9yr3APd8HfsbB/sQOkYjJ0a+1XQeRgb7BqHtQ/chG/cq9PD3LR/4xEX7CwfQbD7F+wArCgv3wPsZBj4dCxX3F8omL2R/YHFoH/u195kF90EdC/fy93CKFdeM90j46PdE/OgF2Qb3WvlPBUAG+zX8+ftC+PkFPQb7R/z5+zT4+QVABgs8Ci4dC6h1oW9udXVubqF0qKehoqgeCxUuTcjo6MnI6OnJTi4uTU4tH/g+eBX7GUHV9xSIH/cgj7vQ9x0a7/d83B39UfsMFTsd+PkxB/sNZ1UihR7fckK+JRv7EjX3hR3k0LLQqR85sNNZ9wob9wTW93cdHPo9VfewCge+Cg75QhX5d/dZHTRCY0dkH8tqT7E/Gy1VWk2QCvmmhiIKC+EKcnZ2cnKgdqQfDvdsYgoLytL3Fx/gC10dMB6M+ycG+xLLMfcV9wrT2PcMHg6Jnhv3EOTX9xT3EjXY+xP3ER07Hfh5wf3kBwvLKx0LTwr56vtP+y0HJjpvUFsf4nNBviT3WApLzGwfT3FVVzMb96XkFcvAn7CwH/sWnudH9yEbp791BvsXQtP3D/cZ5Mn3Gx/3LPxQbx0c+nKiCg73LB0fMh0LVR33GQv3lXkKC1X4A3QKCz0K+Af3mhX3EUjPOJge9+odHPrFVfjp94wdRoFSYXtCCIsHe0VHTjGKCDA9w/GkHfsY8kP3C4we2syuw7QfCxX3GB386/sEFTsd+Vn38x1UXXpsax/ndj/CIRv7Ejf3hR3TxaS6rx9LosRj3Bv3AcjS9xcf4Pda/CLK+UL3IsEc+gFV97AKB74KDosHlpaVl5KYCPe5HUhoYV91HomMiIgFgXRyhnMbIUjP9PcM6Mf3BR/3uAoL96cdQF7E3R4LNwqJ+BRACg6qv3QG+xdDCxUrQ87v89LP7O/NRCYpSEYoH/ghFidJ0O3wzdLw69JHIydDSCsfCxWlnp2kpXiecXF4eHFynnmlHwv7A8s49wn3C8vc9wUe974LVfm8+wUHhQoLYveM96QV+6TR96QH93T4PwU9BvtJ+//7Svf/BTwGC/sUQGX7BR58Bol9igv56vfG95owHfgd98MVK1FYS3Af94D5kvekCiQ3bk1ZH/NxQ8AsG/tJ+4UV910d8s9A+zl+HowGioSLhIQa1Aoe93YKZwoc+hP3pQoGfwoLFSxCzPcE9wDXzOf3rh1/fwWEd3WGcRsL0Ub09wJsHQv3ch34N/vaFUEd/Av3AQoL9y8K+woLYQpXBsdySa4jG/tHBjEKzQbzslxUH4z7I14dDhXt92r7o/u2B7mtqcXcGrf8JBX3Xx0LvgbvwV1BUWRYLyJWx8+AH1L7i8gLefhc+IQVNlhN+wYe+yH3t/cgBvcKu1MzH/wM918V/U/R97j3FQf3Qfu4Bd8G+0j3vQX3CqHB3Osa9wc/4/s2Hgu5ranF3BoLVfiN+30HXR0Lzwb3Jvcu9yb7LgXQBgsVpp+fpqV3n3Bwd3dxcPfcCg74IfhwFiwK/rj3jh0HIQpQHQv3xx1GHfsGjOQ89ysbCxpIw3LEo6WQk6EezgoLFfsb99QdkAf38wrH9goLG/srJx0OmMQdC6q+93od9xD3Fs3L9wv3AaZcb5Mfhgf7Nekh9z33WQoL99YK928KH4gdC9XY9xEfmU1+BzMLYgouPfsIHgsGih0LVfi0+3sHyW9PvCob+xAvM/sf+yHn960d92r3X6CdnKKWpPfYCtbM6PeuHX5/BYN4dYdxG/uX+yJ8HQ4yHXb3Tx39F1X4yvcJClOEUmGBQYZvf3B6c/u295oYq668nb8bpqGIhKEfuAeTc3GOcBv7HiAt+yj7KfcINPcZC/wn/CcgHQs5XVI+QV7E3IoeiweMi42NGvcDPfcT+z9qCvXXwNSxHlalvWrVG/cIztz3Bx8LG6MKC72hemxpdXpZHzVc7wbRurHHyVmsPYkfCynLWM18HokHToNMWTMaCxX4PvfHHUYdjCzJRfZ1+y77NfcjCvczBfOav8zdGvcTI7MnHvd2HQ4Vop2coqJ5nHR0enp0dJx6oh8O0PfUBvc0Kdf7EDpFaEdoHuhF/LbR974H9xnSy/HvzU37DR4L/KL5aBXIpAbwvO33hveGuCkmHoL7IlX3IfeWCvshC/cFHUhrZUw9Ggv3I/euCh73KB0wCh9QHQv3dfc6LQr4lhZJWrjR1L+31h/vMwYwYVZFHvsv+DIVfo18jX0eywaImoqYlxrUtbXG06lTNR4n/Fn3f/dsB/eZCvcw/GnTCgvmB6oK+x8HKoBhQXtICAv7Q/loFcnGBtak1uTkokBAHmD7IlX3IfeWCvshC7iACsKYBwv3QgoO9yY3Cgv3QB0c+nfZHdvKq8StHzut1VvrG/eNCh/7S0oiCgv3jh0Hym9QvSkb+xAuM/sf+yHoNPcOkpKLjJEf4B37PU2CHQ68HffR+6IFiAdbf1hVMxv4RvfCFfsTJlgmYh/73/eqBfkM+xIGCxX3bAr7Etwv9wtyH/ss+zMFzwb3JPcsBY4G9yX7LAXQBvsr9zEF9w+j2ev3Ghr3QQpJMB6M+ydeHQuf6PdTFfsBl8829x8b91DF9x/3gPdmV/co+177NEAh+xf7LOk19x7l2rfVpR/7f5FIOfsMGy9YveB9H/cu9xAV+wZN0fcC9s7Q8vcOxTYk+wE5UC8fDiXB+xkbUNkKyXC7Z6gfC/sF30H3BvcA3dH3A8tvu2WoC7gKH/uBC/cMCvkK+x4GL35gQn1JCIgG03xa3SAb+xA7M/sf+x/aJPcu6ArDB4qAgYqCG/sFUNj3Aey81OzouDj7CR98wprEHee5Py51iXaGeB4LFfsaPdr3FB+Oi46PGvcTjtr3Fx33pftCFSsdC/s4+CL4thX7+FH3qAb7rfxCBVH4AsX7sgf3rfhCBQtMCvcgB/s86vsD9zz3BtXBy60e9ykd+z73wgoLVxVGtn0HZ353avehCoajHwuoHUYKCxX7BlfU9wsf90sHC9HbCgv3x/c1IB0LO/hx+U8V/EBN9+4G+/T82QVT+EvJ+/kH9/T42QUL+0H3Rh0L+yfHCgsa4Pdrlx0LFfhE+xn7F+kK90L3SPdpwf1XBg4H9wy72+wLUwYkOEP7FTQ8sOL3Jx0nSEctnx37B+5S9xMeDogG2W9JzfsDG/sSKjH7HvsY6zD3FAvxCin3Hwv7IeY29xfYy66/pgv3/PeaFSJc0/cHH/eB98H7mgczV0EqHvwZ+DwV90H7gQb7Jc73AB33jfeUnZqanZagGfvBy/fYB/ddHQsVwQapk6GftRu0pnRoZW12Yh9bZLsGtap2ZWdwdWBlbpq4hR9TBkeRu2fWG9y8uL63bqdmlh+NB7KWpKe0GsVUtkY/XGNUhB4O+XAcBIkW6B0c+o5V+Vr7KAb7D0tsQokey3JIwfsM90YK9wG4T1uVHyYHC+pKzic2R1g0g4yAjYILl+H5YhX8Ic0Hx6fHs9ob9wbHSPsB+wBUO/sNMEi85HkfRgb7C53jPPcfG/c91fcG9xv3BVD3DvtBP0ZoXmsf95T4AsgHDvcr9wbw9yn3IiXq+xiYH/ejCgsV+z/3A/sDC/cR98z5TxX7ZPvSLErq+9D3ZPcCHf0YFfeZ92DM+2D3mfcdB/dZ8PsF+0n7SCb7BftZHw73Hx33AsdFQpMfgouCjIIegAc4Vyn7Ex74WZ0V+xk71PcLH4+LkI8a9xWP2MT3Hxr27woLa5i/RPcKG/cMyNXk9xYjsiYfXwaXCvcxwQsmwmDNgR6IBzp/SlMoGgvg9x2Oi4+Mjx8L9w8KBwuIB02ETVcyGvsH5VD3A/cL5tL3C6EehaGiiKMb2Mutv6Yf+2HK948dIjVgRiFHz/T3DOnH9wQe94IK9y/B/k8GDsEK+w0LGvEdHvtS99BPHQtrCpydiZ4bCxX7qAb3HvgOBQ5wCvsXKPe/Hesv9xrwHQ5iCi49+wkeC+sdy/lCC/dbBvtHjun7CPc59w4K9w9c3/sIJk1J9+QKyQaJmoqXmBrTtLXH1KpUNB4L+zv7MgXSBvdv92SenJqglaIZCxU3R8Pv6tHD3fW1OUNFYDgiHwsH+wfNOvcJ9wgL+yP4yPerFc8H/An8AwXWBvu7+VYV99n7fwaUCvdgwfzlBwuCoIajoRrRr7DCvK1oWIgevgbcj1rDQBsuZkREH4gH91YgXpT7AnEKC/dPCgf7S/cwIgoO6AooCgsH93H7F1ma+xL3Ph0Ly1wKC/cr8PD3KB9NBvsFPTv7BfsDO9z3Bvcf7833FB736gbJ3oQ6TVV6Mx9xBoGKgIAa+yPVMPch6cS60aoeC/eq+DEVQLVlvI7WCMiNvcLVG9y6T0xCYV1QXx98gAULtAr7P+r7A7wKCz0dudsLjtnBuwoLLQr4Bvex1woL9wodbx0L978KH/d7Cgv7JvcBMPca8M6+y6oL2cKvxKkL98b3mjAd++P4PBX3fR0GpAr32Afku+33Cwv4ybgVJTzP9wf3A93P7vcW97YK+xYeDvD3s/lPFftj/U/3Y/cCHf0VFfjb9x0H91rw+wT7SftIJvsC+1ofC7oKDi33G5KRi4yRHvtx+3AF0wYLGtQKHkMd9xMGfW2DaGQa+yRgCgb3ffcd9xf3bfdv+x33GPt9H/sdCxX358H75wYOFe340ft9B8pvUL0pGyc8Ui1vH/uVmB0L92MdrL77/Vj3WgYL9wwK+CYoBvsMTFL7Bx4g+2AG+xHLMfcU9wrS2vcOHpdNfQc1WlE8M2PN5h73M6cHgoYFCxX7HjM4+wf7Ay/f9xz3HOff9wP3B+M7+x8eDhX7A1XN7B+Pi46PGvKMz67bGvQtp/sAHvv29x35ZvvqBvsUTzH7BB73QPsSFckrHQv3NhUoQLbn0LrC9wYfwcBaBiBhC9FG9PcCytL3Fx7g91n8Igv3LR35T0UGC+PJ9xsfC9vFwt0L91UK9xTAKzU7Vif7FB8LlZeMjJcLBu99QN736QpHODV9H8gGwJi6yOwb9wPCPTUwVD37Ay1VxsGCH04GN5TWN/cZGwv7EjV9CgswCh4L+Bb4phXBC/dm9wwK9xf7BgbTHQt3cIBpZRopy1jNfB6JBwsV9wX3avuy+7YHih23/BUV9woK+H/772cKC8L3HRrv8AoLSfczCkQeC/ctHfi2RQYL5eD3J/ccCxs0cR0LGzBxHQtUCuT3PvdSwf1LBgv3Hwr3LAoLFSM7z/cH9wPez/ALg6eqGtT3WB3eVsI3Jl9EQR6Hi4aHGvclK1eW+wD3ox0LFfsCVNH0H46Ljo4a8ozPrtsa9S2o+wAe+5T3FfkE++4G+xNPMPsEHg6sCvcEC/sv+wv3BfdJ90n3C/cE9y8Lqh33DrzZ79qyVWCUHoiLiYga+zXqIfdXCgcL5vcoH42Ljo4a9xGP3L/3EBrg8Ar3pvtC90sdC/zy96kK0fcDzG67Zaj3wB0Lzrq87x4yHQvLBvcdMeX7DCtRWEpwHveA+BvB/lH3jh0Hym9QvSkb+xAuM/sfC/uByvlC9yLB/VFV921AB/sSQGkmHgtV9+Qd1Cn3JQt9B2d+d2oeaAcLPLDizrq87wv8DNsW0Qv7ccj33gf3NQpgCiA991wdC/cK+34Lk/gwFtD3PvbIIPh2OAb8APx+BVb4Dgf7vcgV98D4KQX8KQcOFUFexN0fnAf3Ejrj+wwsVVpMch73fPoO+0z7pfs7BzldUj4eCxWnoqGpqXSgb290dm1tonWnHw4FjB0L95gdMXz3pwoL1cHLrQu399D3cgr77fg8FffTCgvAHVUdCxv3XAoLVfdSBklpXEggGvsq8jb35wr7GEPQ9wr3HuPM9xwfC/d3BsXdhDpOVXk0H3EGioGLgYAa+x3VNPcg6sW70akeDscd3sa0vaoeTqXDZNsb9wvL3PcFH/e+CxU3U8LZ28XB6woL96Md769/+z/3AB8L978d8C/3JQvKXAoLq666nL4bjfwUNwoL3PcHHgsG90gdCwX3TAoLYgotPfsIHgvUCh8LG5sdC/eZCn6NfI19HssGiJqKmJca1LW1xtOpUzUeJwv88ftB+XQVyAb3dfsZWZr7EvfNHQvMa0fAJRsLFVwKC+cG+9738vfb9/EFMgb7w/vbBffbRf1P0ffXBw5T9wuNCsv5QgsV8fdDBUQGKPtD7vtDBdIGC3eIhXkeC/gdKQY4HQu8HffQ+6EFiYuIiogeW35ZWTUbC/dD90AKC/wjIB0L99v3JhUhL8/3DL2ZtKOrH/e3+5oFbmxfd1MbC/ewCgb7E0ZuPx5l+zYGCxX7GwcsgjxWZjn74PerGAv7H+Y29xeSkYuMkgu2tMvHrmJVjh65Bgv7ewb3ex0LFbwG8veaBT0GC/csCh8LTfsAJtFGC+S77fcLC/sMFTVMwOXlyMT3Bby2kpmuH/s4B0hcOyIeCy4d+H77/28dC98V+y4lxfcD1r3K9w0foMB1BiP3sB33BAtDpflgFU/4JAf7rv0kBdIG96v5KgXBBw68Csv5QgvoztL2HwtNBipKR/sX+xNHyuLt3LnyHvcW9zr3bsELwQZ/rYWsqBroyqzAyMlYIfs5+xgo+0keCxX3FdTa3ZsfTQZYfVhTMBv7AVPU5uTD1gvj92wFOgZR+2wFC/gD+2YkBiA9TvsAJ9FH9PcAy9P3FR/fC2EKKft3BvsExTr3CfHI1fcHHgtVBjJTQCX7BFjU9wke9374C8H8wQcO112kB6yXna0erwdRam5Bc45vkmofDvccBoz8LwX7LdUk9zgL9wEb9yn3A/cD9z/3PwvmBvcPXN/7CQv30x37gQv3mx0HC1T3fwoGCxXt91T7fgd+jH+Mfx73eR0L9238WAv7BkPA6uvTwPcG9wfTVissQ1b7Bx8LFfcP+3b37wrd9wQe93YL95AK/Q4GC8HLrR/30B0L+AX72Qf7Ci06+woeC/uimB0LdAb7F0PTC8xsSr0lGwvXxtGrHgv3CvuBC/vpByVBNyCKHjA9w/H3Yx2svgv3PcMKC1cVRrV9B2d+99odC/e2HQcOIvculQv38UAHtAoLFc4G4MTA5uXIVDL7HSB1+wcecQt9Cven5BULFUgGNlJWMDFOwuT3Hfah9wcepQv3Rh1yHQv3JPPF9yv3EDHb+xT7EjI++w0fC/sbB/sXfiYt+yIaCweHeYl3dxr7JOsvC8w8Cgv7BgcmwmDNgR6IBwvR+XhFBg5V+I37fQv301AHCxVBXcLaH/d794T7ewc8X1Q/Hgv3nB0GCxU3R8Pv6tHD3fS2OUNFXzgjHwu+B4Z7cIVvG0ZPqt3Ltr/bH6IL91YKBw736RX4Gcb8GQYOFfta93/3WgYL9wb3AN3S9wML930K+wVFTAv3FPsA9zwLBjBhVkQeC/tI++MLG/dNCgv3wQof9xoLBjJJZzpOtWW6dx8+XGY6LRoLV0WmH/wI+/kFh90H97n3uAUL+4D3DAr30wr7KNYq9ycLP8AdC/fzHVthf3NrHwsbZlaxBgv4rflCFQt+BzNaTwv7QhX5Qgs5XFI/C6OIoRsL+zv7Cwv8JPfFCgsGlqmQra8a9xBO4SeaHvceC0C02l73BBv3Bfc2HR/7gQs09w73yx0L9wy8LjkfigdUckpRah6Fjgv3xh0OYbnfHwuKHbf8JBWZTYAHNQuaUn8HOmNTST1mxNge900L+IwWx/gS90cGs6yUnaQfC/dCFfsaPeb3KB+Ni46OGgv32B0HDhvyHR/7wAv3WgZIa2VMPRoLFcT39PsDXsEGC/tiyvePHQuO2cH3HRrgCxZcCgsax7+gxh4LdHaIhXgfC5KSi4yRCzD7H/skCx/3iQb3LgoL2RrjRdb7CfsGRj4zNsML96kd96EdC/cCMaf7Dj1Kk8vPzZfCCx+5vGAGUVyhxMm8nr0fCxX3zB0LB/sS94sdC/sZ+xELux6oVAeKgYuBgRo3ugv7IDTS9wn3FO3J9w0eCwb32x0L974dH/s7+zIF0gYL+FD7EF4G91sKC/ejHfCvf/tD9wIfC/wO984F+A7B/MIGDgeKHe0L+4HoHQv5eRVM/XnKBgsa9x8KC/c2HR4LPeD3HR8LdneJhwv4lBXBC1JLBltza0ke+0/3jwv3GQrK+UIL+RZRCgt3a/ehCgv31R15H1uZaKq8GgtV+Hj7TywL5+gvBgv7wMr32Af3XR0LuNHUv7f32woLBrn3bQVIBl37bQUL+2D8CAb7FyU8+wsL9y4KHgv3HR/gax0L99MK+ysLzEohHn0HIQv37B0eipsLBiD3sB3dC9n3DR3axAv3E9jRzQv3Gvd2wQsHyooFC+H3FY0L+3wkB1lffXJrHwvW2PcRH5lMfgczCxX7fQfKb1C9KRsLNzNe+xBqkWiYaQs7T1M1Hvcg7BW9CxjPBvcm9y4FDvt/JAcLAQGHAQABAAGJ/wKJ/wOJjwACBQBoAAAJNwB8AABCHQQZAABgAgBnAABkAACgAABmAACDAACqAACLAABqAACXAAQaAAClAACAAAChAACcAACkAACpAAB9AAQbAABzAAByAACFAACWAACPAAB4AACeAACbAACjAAB7AACuAACrAQCwAACtAACvAACKAACxAAC1AACyAgC5AAC2AgCaAAC6AAC+AAC7AQC/AAC9AACoAACNAADEAADBAgDFAACdAACVAADLAADIAQDNAADKAADMAACQAADOAADSAADPAgDWAADTAgCnAADXAADbAADYAQDcAADaAACfAACTAADhAADeAgDiAACiAADjAAQcKACRAARFCQCMAACSAARPCwCOAACUAARbCQDAAADdAARlEwDGAAR5AwDHAADkAAR9AABlAAR+BwB+AACIAASGAACBAQCEAACHAAB/AACGAASHDABvAACJAABBAAAIAAB1AABpAAB3AAB2AABwAQB0AAB5AQBrAQBjAASUAwCZAASYBQCmAASeCQBtAQSoHgQkAgABAEEARABHAEoAXwB2AIwApwDGAQ4BRgGJAboB9QIJAiMCNwJUAmwChgKiAq4C1ALmAxQDUgN2A7gD6gQ3BDsEPwRUBGIEagR6BH0EkASlBMYEzgT4BRMFKgVSBXkFhwWKBZEFogW8Bd4F/gYFBjMGUgZpBp4GvwbRBu4HCQcQBz8HTQdbB4gHrgfHCAAIHgg1CE0IagiGCKQIsgjKCQYJFAkXCUMJVglkCXIJkAmfCaIJwQnpCf8KBwoVCi0KQgpoCpAKngqtCs4K2wreCwwLFgs4C1ULYwuMC7gLvAvIC+AMAAw2DEsMYwx7DK4MyAzSDNwM5AzsDRcNTA1UDV4NYA1jDWUNZw1qDWwNbg1xDXMNdQ5HDnIOeg6HDxEPZg9zD5kP4Q/uECIQMhA9EGcQahCtELUQ/BESERURUhGBEYcRihGQEZYRwBHeEhUSMhJ1ErAS2RMLEz4TehOrE+UUIhR+FJ4U3RUSFRUVXRV9Fa4VtxXAFfcWHhZGFkkWZxZ1FqIWphapFtgXBxcUFxwXKRc2F1kXkhfLF+8YDxg9GFsYexizGOQZCxk7GX4ZuBnwGg4aOhpDGoUaohrQGtka4hsHGzYbbhvqHEIciBzKHRodhB3OHiEech68HzEfix/MIA0gSyCBIL0hBiFOIWwhjyGbIeYiBSJYIr8jEyOmI/kkNSRdJK4k6yUmJYMlzCZLJlMmYiarJsEm3CbkJvMnFidYJ2AnbyfPJ+woFSg5KGEohyjJKPwpJilNKWUpjiniKgYqMCpTKo0qxCrbKvMrOyuJK8osGywwLH0svS0ALTstcS26LewuGC5OLpcu8y8uL3Evyy/5MC8wcjCbMNYxPDGaMZ0xpTHPMgwyUTKPMtYzGzNfM7s0DDR2NJQ0uzUQNTw1uTYvNrQ3EzeVOBs4dTjlOQo5ODlnOZk5xjn4OiE6RDpuOpQ6xzr4O2M7dzudO7U8LDxUPNo9ID1lPZY9vz30Phg+fT7IPvA/bj+hP80/3EAZQHlAq0DzQSFBakGRQcVCDUJlQpZC2kLvQyFDQ0OvRBREPESMRQpFYkWARcVF/UZaRrpHTEd/R7lH90g/SJZI4ElXSZxKIEpOSoVKxUtBS4JL6UwZTE5Mhky7TPdNGk1VTcRN7E47TopO2U7qTxdPL09HT8hP4VATUF5QqFDwUT5RgFG3UehSNlJtUpZS3VMMUzlTdVO/U8JTy1QXVFxUplUAVWdVulYvVnRWnlbHVwdXsFfnWCFYVlinWQNZSlm0WkhahVq7WxFbRVuiW/FcHVxBXI5dC109XXVdrl3lXhxeUF5yXtVfB19SX3Vf92AoYGNgpGDwYSVhumIjYnti0GMiY1xjlGPRZApkX2SiZKVkrWTnZSVlZGWqZeVmKWadZtFnD2dGZ3NnsGf+aEFogGi+aRhpTGmladhqEmpoap9q02sZa4FrhGuNa+JsCmwzbGhs6W0ebVRtkW3bbe5uLG5vbpZuwm8Cb1RvkG/ScCxwV3CCcJxwwXDycU1xvnIUcmRywHLncxVzQ3P2dCl0NnRrdKR04HUPdYx17nY7dnR2i3aldtx3EndNd4N3kXfSeAp4aXjueTx5gHoUeq97Nnube6t8KnwyfFN8inzAfNZ9AH0ufUJ9an2WfZ59tX3OfdZ98H4gfjp+U35xfoR+n37JftF+4X8cf0V/k3/4gEyAd4DggQSBKoFQgXaBnIHCgeqCE4I7gmOCjYK3gt+DCoM1g12DiIOzg96ECYQ0hF+EioS0hMmE5YU1ha6GE4aMhpuG0IcEhzuHVodfh2SHbIdvh3GHdId2h3iHe4d9h3+HgoeEh4aHk4ekh72H0ofriAiIpIiqiPqI/YkAiQOJGIkhiTmJPYlgiWeJcYmYiaCJo4nXijWKOIpNilWKWIpzinaKo4qmiqmKvIrMit+K+4sGiw6LEYs6iz2LWItbi22LcIuZi6GL0YvYi9+MJYwsjC+MWYx1jH6Mk4yhjKeMxIzHjPWM+Iz7jU6NW42ujbeNuo3ejieOgY7njymPP4/Aj8iQSZCCkJKQopCnkQeRD5E7kV2RZZFskXORopHDkc2R25HkkhSSJJJHkmGSg5Kvkr2SypLWkuSS8ZMjkyyTgZOKk5OTm5Okk62TtZO+k8aTyJPVk96T55Pwk/mUApQvlKuUtJS8lMSUzJTUlQuVZZVulXeVf5WIlZGVmpWfleeV8JX5lgKWC5YUlhyWJpYulpyWy5bTltuW5JbslvWXDZeBl42XmJejl6+Xt5fhl+mX/JgFmBGYGZhfmISYjZiWmJ6YppiumLaYvZj4mPqZIJkpmTKZOplDmUuZU5l4md6Z5pnumf2aBZoRmhmaJZpHmk+aV5pgmmmac5p9mpOarpq1mrmaxZrSmuCa7JsJmxWbOJtcm2mbhZuum82b2pvnm/ecA5wPnBucJJwsnDWcPpxGnE6cpJ0rnTKdP52JnaOdqZ22ndGd7J4LnieeQZ5bnnaep56zntye5J8TnxqfJp8vnzqfQ59zn3ufhp+7n8+f2J/hn+mf8Z/5oAKgC6AToBugI6AroISgzqDdoOihAqEboTChUqGioayhtaG9ocWhzqHVod6h76H3of6iF6IgoimiMaI5okGiSaJSoluiZKJtonWifaKJopaioaKrorSixKLUouOjBaM8o1WjZqPno/Gj/KQKpISk4qUmpS2lbaXFphimdqaUpq2m1qbbpt6m6KcKp2+nn6etp+OoB6grqFCobaiHqJ2ouKjAqM+o8akJqSCpKqlFqWCpaalzqXypnam/qdSp2qnmqfOqAKoNqhuqLqqJqpaqpKsTq1GrkqvhrDAiiwT4iPlQ/IgG9477xRX7PveTBffoBvsg+8AV9z73kwX8kgf8Bl4V9z73k/c++5MF/Ab4vxX3PvuT+z77kwUO/PEO+98O+98O92/3sfhNFUUdZwr7YPvq+4MHXx0O+If3sfhNFUUdyvfXCvx/++r7gwdfHQ5zY/lCFfhO96gKBu0K9zoG0h39KQYOc/cz5hXSHfsz2PdeCj78TlX4TveoCgftCgYOcPcgCtzl9xHrU94vnR6NB86XvMXfGvcH9xfB/RAHDveb9yAK2+X3DsV3wGiwHvcQBuTbZiIjSWc/gH+LjH8fWgeJmpmKmRv3AOLC9xn3IyLB+xIf+2uNBs6XvMXfGvcH+DnB/jIHDvgs97Md+yQHL39UTDYa+wHcWO2hppCPmh7AB4Z9dYd2G0hRqd3Kt7/dH5z39vfXHfhywf7D9xAK9/z3sx37J4UHSIxCbDQaT7Bpvn8eiAdbgWNlTRoy2GfgsrWTlKIevQeEeGT3zgq/nr73xB219/j31x34c8H+xPcQCve6th0yglJKORr7A9xY7qKkj5CbHsAHhn11h3UbSFGq28u3vuMfkverHfecwf5QBw73wrYdhQZIQm00T7Bpvn8fiAdbgWNlThox2GfgsrWTlKIevQeEeWP3zgq+nr/3xB2y96sd96DB/lQHDrr3DAr3bB33It/g9yQeuQr9WgcOuvfunhX3It/g9yQfuQr7D+cd/KFV92wdHg73ngr7JOcd+7H76vuDBl8dRR0HDveeCvslB/et+yNil/sRvwr7tfvq+4MGXx1FHQcOuvcMCvdsHfci3+D3JB65Cv1aB/f68qAK93H3sfhNFUUdZwr7YPvq+4MHXx34KPgnoAr4jvex+E0VRR3K99cK/H/76vuDB18d+LH4JqAK9wQWZwr77VX3IQYOWR33NvdDq/cd9xz3RF/7Kh57y5wH90T7UtH7TvtO+09Q+1CJVwqpHbQH9wZg5/sX+xVcL/sGHg788ftW+7UV9wzUyPLeVc4oH3ZYoAbKrVtYQlRjOC1BufWQH1IG+yKG8073DhsO/PH7QPuvFZiXjIyYH7wHin6AioAbTV2xyM2+tt311zz7HB9owAeMlIuUlRr3NzX3APss+wFATyor0FbkHg788fsd+8MVpquQkp8f95MduAaMhXyLhRv7CEpELvsJ5V3oHw788fso/EoVs7WTlKIfvQeEeWP3zgq+n8AfuLtfBlJbosTIvJ++H6+yUwZHQm00TrBpvn8fiQdbgGNmTRox2GffHg788fL8YBWdnI6Olx+2B4eBe4l7G11fosO3q6/LH5HKCn2Kfoh+HkqEYVxNGjvJZdQeDvzx9zr8vBWzB4Z+b4RvG2Jnm7O4sZewH6mzbQZiapu0tq2Yrh+pygp+in6Ifh6KBllYc0xfpHGxgh+JB2mEbnBeGknCccmoqpGRmx4O90kdDvcVCg73Qxb5Qvchwfsj5x37IFX3If1CBg734wr3rfsjYpf7Ec0KDvzx+yf5yKAK9wQWZwr77VX3IQar9xqgCo4dDvfV+O/3VuEdgFj3Bgr7mTJlCg73Dvi8FmcK/aVV99n7sAYkCvdUBw73Affa9wkdud8f3fd4Hfv3+KAV9xo3BvdQCsxcCv2YBw7fCvz3997DHfcR9wwK+Nv76fd/Clj3WgZIa2VMPRr7Fe1B9wjk07jPrx77bW8d/agHDvcUHfsk9xZA91L3wQoe9+od/f0H+D79JD0KDvd69wwK+UX3egoGOgr3ZvxT6B3+EQcO94P3pvfUFZcK92H8Agb71ARnCv4aVfhD96gKBpUd9zgGlQr3ZooFDvda9wwK+SX71vsGBvcDgEDn+x1hHfcf1ur3B5Uf9wX7yWcK/fEGDrn3DAr3bAr3Hh0f90EKxQoOb275QnYKDqtu+UIVVx3k9z73UsH9SwYO94T3qPeMFVwd+8X4ShX3Agr3aPeWCv4bBw7g9wwK+LT7T/svBvs7+ws/+0H7N/I29zEf93YKZwr9gAYO9y742xb3sgr7DPslQ+H3FY0eTgr7Oe8i9z336R2kHg6PbvlCjgoO8ffH8hX23r7dsR/7gPdtCvwHB/sSLTX7DDBCsuD3Jx0nSEctnx37BepQ9wweDvdE9533TSId+7r4iRX5DvebHQYxCvdt/FhvHf3bBg73Nx37KNEq9yLexq/Fqh77wWcK/VcHDvgQ98b3mhUiW9P3Bx/3gffC+5oHM1ZBKx774/g8FfcK+4EG+yfPLPcb2cKvxKkeNB3+qAcO3/iYFslcCv1/Vfi1+3gG90od+xohLvsm8R0f+1L30HgK90NzHfdD/CJvHfth+7X7Q6cd9zr3dfc67h39BBb4A/t/JAZbCvdZ/CJvHf3RBw73E/fv90IVLwr8DPiUFffHQAbdHfcgwf2qBw5GbvlCjwoO97z45toVTQr+U1X5EPsfByqAYUF7SAiJBtN7W9z7ABv7EDsz+x77Htoi9y5AHQ7S99P3MLIK/XJV+KfbHfdaSgr32ZMVbx37YQYOvPfQ95YV9+gK90sH99P7oAVNd1ZeOvdUCvsr0yn3I+HFsMaqHvu/Zwr9XAcO92j3eQr3avuj+7YHih38XO0V+B0pBkkK+H77/8v5Qvchwf3/Bw54+KHFOh39GFX4SvfHCgYuRWQ0974KH/Yd+Cb3xfc2ex2TUxX3E+vm9xj3Dz7fIp0f9xj3scH+vVX5YfsWBymDT01yQgjGHfduCjqh1kn3ABsO90j3M/jRSh33tPwWyCsd+177xftwBriurbfRcwoO91P5ARZnCv3qVfke+y/8DlbCCvd6Bg6OHW77fRWmn56lpnefcHB3d3Bxn3imHw731fjk9yP3Bgr7q/vWFSYd97b4CeEd+6T7IGUKDvcO+LwWZwr9pVX32fuwBiQK91QH++j9CxUmHQ73evcMCvlF93oKBjoK92b8U+gd/hEH9779nxUmHQ5vbvlCdgr36f43FSYdDqtu+UIVVx3k9z73UsH9Swb4Cf4dFSYdDvgQ98b3mhUiW9P3Bx/3gffC+5oHM1ZBKx774/g8FfcK+4EG+yfPLPcb2cKvxKkeNB3+qAf3vf1ZFSYdDkZu+UKPCvcm/gkVJh0OpR0O0vcMCvfA+xkG+xNGbj8eZfs2Bvsp6zP3JfcF1s/drh6InJ1uHfh0/B3gCg77I/cMCvfZ+7AGJAr3F8H8nAcO90cK9zT29wH3Ix73MgrfCvtF/Rt8CvvP+aTDHfsnvfh096oK9ybt9vcaiB73cR089y8V+RLB/RIGDvcUHfsk9xZA91L3UgrPCvMKDmr3OuQVlQr3cooFvPwrB5cK923B/VpV+EP3qAoGqx1Q97fuFfcf1ur3B5Uf9ybC+ycG9wOAQOf7HWEd+9T43xX5RsH9RgYOufhC+3p8Cvvo+WcV92wK9x4dH/dBCsUK5furfAoOb/go+7d8CvvO+aR2Cg6r+Ez7nnwK+/L5ixVXHeT3PvdSwf1LBg5d9wwK9wIK9xbB/P0H98X8gBVcHQ77Zviy+FAVwvtKB/s7+ws/+0H3hx3jyfcbH/wb94YV+M/B/M8GDvsa+RT38RVSBvsKLkL7FPslQ+H3FY0eTgr7O/Ik90P3NPcJ7fcoHg6O+Nv7tnwK/IH5o44KDvtF99LyFfc89On3Gx/FHSr3nPcWFakK96DB/BYGQwofjMIiHfu6+IkV+UHB/UEGDvegHfcd2+n3ER73ah22Cg77TPfY7hX3MOP3BPcU9wNA9xP7P2oKH4r4Q0AK+/T3MBX46sH86gb39vzmNwoOJHMd91nA+1mnHSD3dfc6LQr7kvicFfgD+38kBlsK93TA+3T3f/d0wf0fBw77MPcMCvfH9xcK+0Hw+wH3Qfc09wLz9yCKHvcwCkb3/vu1fAr7pPmijwoOzvhY+B8VKgrouj8tHsuMBfcbP+b7C/sHWztCeh78dfe3Ffnswf3sBg77XffU8xX3Pdf3D/cB9wJC9xD7QPsiI/c/HR+Mv/dwCvvy+KYV+ObB/OYGDkRKCg73Gwr3Htfn2B73zh09+Gv3UBUuHfh2v/uu988d92LB/So/Cg54+KHFOh39GFX4SvfHCgYuRWQ0974KH7oK+xr8SnwKDvgm9771FfduCjqh1kn3ABv3E+vm9xj3Hirl+xL7A0hJPXAfxh0fksN7Hf1v+KAV+r3B/r0GDjj3M/jRSh33x7z7gwa4rq230XMKDkL3DAr5b8H9bwb3pPuaFcIK98vA/F8GDqUdbvt9FaafnqWmd59wcHd3cHGfeKYfDtL3DAr3wPsZBvsTRm4/HmX7Ngb7Kesz9yX3BdbP3a4eiJydbh336v4rFSYd9x74ouAKDvsj9wwK99n7sAYkCvcXwfycB/eF/UEVJh0O8wr3vv2fFSYdDrYK9739WRUmHQ788fsk+d2NHfzx+yf5yKcK/Bb3AvhYFaWgn6Wldp9xcHd3cXH33Ar7yASloJ+mpXafcXB3d3Fw99wKDmnczBX3igbsuMLJH/cy+57j9w0aw7eXvh73S8L7WQY8SG02H/s29580+woaZW1rTR77fAYO/PFW+5N8Cg788fwP+wkVJh0O1Qr3tArlCrEK9zEdzR2uCvdhHaYKsh34U/fBmBX3DdzZ9w2zgLJ2qh+VBvcExbn3E9eqyebrqUT7Bx/7Jgf7IF49+yxzbI6Qah5VB4Wvq4epG/dH0ur3RR/3IQf3MFrm+yD7HF08+wUtXW9CHk8GfZJ7kXmOCI0H4Z20y9wa9wQ30/sG+wg0RvsFHsgG28m62tfLWDRMX0gqHmVUsQb3BLQ/SDNSTjEySsfhH08G+wzmOvcTHveq+XQV9xjJ3OEfVwZTXkwqKl/Kwx5XBjXIOvcYHoz3NRWgmpufoHybdnZ7e3Z3m3ugHw4g94/4lBUqRkktLtBI7OvNzejqSc0rH2EE0bxZRkZaW0VDV7zQ0L+80x8O++f3cvfRHQ77Jfdy99Ed91b30R0O+Gn4W/iEFTVdUPsKHvsh97j3IQb3CrlRMh/8C/dfFf1P0fe69wAH91T7ugXhBvtb970F9xiaxdzyGvcHQeP7Nh73yfu/Fftc993w+zAaVGFhPzRavcyFHkMG+wCV3kz3DBv3A9jJ5R/3ZfvdI/ctGsK2tNjetlhLkR7SBvSDP837Bxv7C0FJMx8OtML5GxX35iQGhIuEhBr75lf34wb7B39Ue/twG/skB/sTzDz3GPcO0s73GIweSgYyY1UzLGbG5h7pB/dZ1LT3IJsf9yS/+yAGkYuSkhrz9yDA/LQHDvzxo/t6FfqlXP6lBw788fcU+OUVK+rr62urKyws6mpq6iwuLqxq0NQF/fW6+fUH00AFDrn4wfgtaAr8DPuyaArtP2gK+yP3UWgK95/7X2gK+5D32GgK+AP7qmgK+7f4DWgK+AD7rWgK+4v312gK95X7X2gK+xz3UGgKDvzx+0D5axXH5fdeCg772/gC+CIVdrMFhnl2hWcbNy2u9wCKH04G+yON9w1b9wEbtbSTlqAf/B/3tBX4CsH8CgYO/PH8RyoVjB37QPdHBTUGDvgh+HAWbQr+uK4d99X5gxZnCv5sVXcKoZull6cIiJmZipkb3b60v6Uf+yhh4R37pPsgZQoO2goO9wH32vcJHbvfH9v3eB379/igFfcaNwbBCvsM6k73F5ycjI6bHvtK+z4F0wb3hvd9BYoGnZyanpahCPuAzFwK/ZgHDt8K/Pf33p8K9xH3DAr42/vpBkVoTlNrHooGiYkFfXFug2sbMD3D8aQd+xTtQvcIlJSLjJMe+zb7LQXSBvdh91qjnZ6hmaUZ+25vHf2oBw7YCvcRSM84mB736h39/Qf4Pv0kPQoO0AoO97n3pvfUFZcK95j8AgaM+9QVyVwK/lBV+EP3qAoGlR33OAaVCvedigV2B4yABYAH+4/74QXNBvdN95MFDvda9wwK+VT7wvs29xAd9yHX5/cFkh/3NkUG+9r74wXPBveW96EF+1XJKx3+IQcOuW75QrAdoQoOb275QqAdq275QpkK94P3qPfV95Ad+8X4Afd1Hfdo++8H+/z8BAXVBve0978F+6LHKx3+GgcO4fcMCvi1+5kGwWpJwiEb+x0nNPsqjB/3OQr9gQcO9y742xb3sgr7DPslQ+H3FY0eTgr7OO8j9z2Tk4uMkx77cftFBYfaB/e0934Figaoo5+nlqcIDo5u+UL3xAr3Vx0f+0L7OAXSBvdz92gFdx39LgYO8ffH8xWcm4yOmx/7Svs+BdQG94b3fQWKBp6em6GXowj7gPdtCvwHB/sSLTX7DDBCsuD3Jx0nSEctnx37BepR9wweDvdg9533TSId+7r4iRX5LftI/AIGQwr3AtvV9stvu2WoH/eM+z8G++v78wXTBvem97QF+27GXAr99wcO9zcd+yfRLPcilJSLjJMe+3T7bwXTBveW95mcmJiclp8Z+8NnCv1XBw74EMkK5dNJIfsER0owe3mNj30eWAeGm/eoHfcM9xodMOT7CypPWEpwH/eA+IXB/qgHDt/4cfc0FZycl5yVngj7aclcCv1/Vfi1+3gH90od+xohLvsm99oKH/s8+y8F0QbT+Np4CvdD9yQKjFYV883V9xMfz/da+w8H+/j78AXUBvey97MF+23GKx37X/uy+1rjB98dKiQHID1QJCvRS/UfDvc693EK+An3rxX7Xfdm910G/QcW92gd9137JAf7+vvyBdQG97T3tQX7b8UrHf3RBw73E/fv90IVLwr8DPiUFffH9xcK+z7q+wP3PJOUi4yTHvty+0QFhtkH9673eaWenqOZpBn30B39qgcO97z45toVTQr+U1X5EPsfByqAYUF7SAiJBtN7W9z7ABv7EDsz+x77Htoi9y5AHfti+34VjB37QPdHBTUGDtL30/cwFSQ8z/cH9wPdz+/3FcErNR+KB1FuRUhrHokGiIkFgHRwhWsb9xMd/XJV+KdwCvsXKDD7H/sj6zH3GpWUi4yUH/s4+ywF0gb3YvdXpJ6eo5inGfty95oK907qHffL/CIVyvcHCvdELPub+4MFhdYH93/3b95eBQ6899D3lhX36Ar3Sgf30vugBU13Vl8791QK+yrTKvcjk5OLjJMe+3X7agXTBveT946fmpyfl6IZ+8BnCv1cBw73mfd5Cvee+6P76geKHfxc7RX4HSkG92kd97Id+LVSB/uo+/8Fywb3bfe7BfuEwysd/jAHDpsKDvgm98X3Nnsd9zD7ZxXQBvsw9zYF6qTO3PcCGvcPPt8inR73GPexwf69Vflh+xYHKYNPTXJCCMYd924KnUnAU9h5+y/7NvfyHfhJ96sK+wVFTDJ796cKHlAKLVBZTHAf9334gsH+4Jkd99X5gxZnCv5sVXcKoZull6cIiJmZipkb3b60v6Uf/Rv773wd+If3xeEd+6T7IGUKDtoK/F77WnwdDtAK9z/9dHwdDvhHyR3k1Ekh+wRHSjB6eo2PfB5YB4ac96gd9wv3Gh0x5PsMK09YTHAf9374hMH+3gf1/RN8HQ73I/fmCt+Muez3CRv3fQofywb3HTHl+wwrUVhKcB73gPgbwf5Rrh3S9wwKdwqinKWXpwiInJ5uHfkP/LcVLk3I6OjJyOjpyU4uLk1OLR8O4x0O90cKn56Njp0e+0j7PQXSBvd2928Fxrmt0dwa9zIK3wr7Rv1qfAr7zvnznwr7J/cMCvkSwf0SBtr7mPeqCpiYjI2XHvs1+y0F0gb3YfdbxLes0InaGfdxHQ7YCs8K3AoOavc65BWVCveFigW8/D4Hlwr3gMH9bVX4Q/eoCgb3Qgr4qvdWFdIH+3b7uwXNBg5Q97f3EBX3Idfn9wWSH/ctwvsv9xAdx/tcFc8G9433mAXQB/1N+EUV+U3B/U0GDrn4QPvGfAr75vmzsB2hCuL7+XwKDm/4H/wGfAr7xfnzoB2r+FH77XwK+/f52pkKXffKbhXVBvem968F1Af9Q/f793Ud91zB/UMH98X8N/eQHQ77Q9b3vRXLBvcL38716M1XRqYe/An7+gWH3Qf39ffzBfNvMNv7GRv7JiMw+ycfI/gZFfjywfzyBg77GvkU9/EVUgb7Ci5C+xT7JUPh9xWNHk4K+zvyJPdDmZiMjJge+3f7SAWH2wf3t/eCBcW2rs3cGg6O+Nr7tnwK/ID5o/fECvdXHR/7Qvs4BdIG93P3aAV3Hf0uBg77RffS8hWmpI2Qox/7TPtABdMG93X3cAXBtKnI0xrFHSr3nPcWFakK96DB/BYGQwofjMIiHaf7kxXTBve398UFzwf9QfgTFflBwf1BBg73oB2Xl4yMlh77cfttBdMG95H3lwW+sqbK1Br3ah33IskK9MRJIR7MBvceP+T7GipPWEpwHveA+B7B/kEHDvtM9wwK+OrB/OoG9/X9FRWbm4yOmh/7OvsuBc8G92P3XAXEt6rR1xr3A0D3E/s/agoeivhDZB0OJPckCoxWFfPN1fcTH8/3WsD7WuMH3x0qJAcgPVAkK9FL9R+X+14V1Ab3r/ewBcoHDiD3cQqa+5sV1Ab3x/fIBcoH/R34FRX3aB33dL/7dPdm93XB/R8HDvsw9wwK98f3Fwr7QfD7AfdBl5aMjJYe+3L7RAWG2Qf3uPeBBYsHwreszYrXCPcwCve8+ObaFU0K/lNV+RD7HwcqgGFBe0gIiQbTe1vc+wAb+xA7M/se+x7aIvcuQB37Yvt+FYwd+0D3RwU1BvcX/BF8Cg77XfcOHYpXFZybjI6aH/s9+zEF0gb3afdiBcO5pdDLGvcCQvcQ+0D7IiP3Px0e+/H42hX45sH85gYO+wXqHfuS+2EV1Ab3Tvcj90Qs+537hAWG2Af3gPdvBcUH+0ftjo0F28j3NAowxEzsVB77Zvs2BQ73GwqZl4yNmB77dPtqBdMG95v3mAW1rKG5tBr3zh09+D73SBX3sh34gr37t/fPHfdrwf0zVfgdKQf3aR2C+38Vywb3NfdwBdYHDpsK+xn8R3wKDvgm9771FfduCp1JwFPYefsv+zYYjB37MPc2Beqkztz3Ahr3Hirl+xL7A0hJPXAexh0fksN7Hf1v+KAV+r3B/r0GDvdK96sKHssG9x0x5fsMLVBZTHAe9334GsH+eJkd0vcMCncKopyll6cIiJyebh33Gf3nfB34ivfEFS5NyOjoycjo6clOLi5NTi0fDuMd9xD9MnwdDtwK+w77YXwdDvdZyR3zxUkhHssG9x5A5PsbK09YTHAe9374HcH+dwf1/RN8HQ4cBJO+HfpD+KH37x08SWdOZR/IaU6vPhv3lwoH+V39QhUsChz41osdIfcSHVAdDhwEk/fH9zWECvmaFiYd91r5ivfvHTpHZUplH8xrT7E/G/eXCgf5Xf1CFSwKHPjWix0h9xIdUB0O+s35WvjIFS1VWkxyH/d++IH7GQf7ClFqRoce8HdEzCX3Rx0cBLT7NRVnChz5MIoKIR77Agf7I+oz9yb3BdXO3K8eiZiYipkb3b+0wKQf+yhg95Id+6T7IBX7A0fR8x/3DY73rQpYtDgb+wQ0PPsOMbVKy2wfUHBVWDQbDvmf+pb3MhUxPcT17M3T9h+tv/vjBiFPXU1wH/eQ+TP76QclQTf7AIoe/WOOIB33evcyFd+64vcWHvdXBkRrYkg3GvsY7ET3CeTTuM+vHvttbx0c+l40Cg76eb4d+WiuFUFexN0fnAf3Ejrj+w0tVVpMch73fPoN94sKHvyC9xr3uwrk9+UdzTr3CPcI0fdCHfcE92b8U28dHPmENAoO+cb5WvjKFfeXCvkK+xJrByAyZ0NZH9JrS7Y4G/wn/CkgHfd69z33uwrkzEkhHosHin6Kfn0a9x4dHk41HRz6N9YK+nP3pB33yPtIBq5pXaBTGy73fAr7evu2IB35ZOIVXB38ft33uwrZxlg9mR5/jICNgB6KB4sHMZnJTPEb9wvL3PcFH/e+92j3lgoc+Yo0Cg74fvcMCvjQ+178jlX3UAZLa11MKRr7KvE29+cK+xdC0PcK9xTkx/ccH/cg/EHI95UG2r/s9xfo2Eb7AfsJQ0YkeXSOjX4eWAeGnaWJoxv3GOjk9yv3ICvo+w8iS1dLbh/3zficwRz7fwcO+dP5UfjEFTNXXE9zH/d9+Wj3pAopOnFSWB/td0W5Nhv8HvwjhAr3l/gmFd6x6fcD3c5P+x6BHoh5iXd2GtQKHvd2CmcKHPoq1gocBPj5TfjEFTVZXVBzH/d7+gr3Hgr7ABstQmxKYh/ndU21Oxv8GvdTHRwEoZiRCv5P9zAV3rHp9wPeyVH7H4Uein+Kf34a1AoelB1nChz4cTQKDvn3HAUR+D0VwWpJwiEbM0JnSmMf4mtGuTwbL1NYTHEf9375jAf+cvyhIB33evs1FffeB+C46/cG4dVH+yMei4uKiRr3OQoc+gb3jh0HJB0HDhwEvflP+MQVNFhdT3Mf93z65/eTCvsBM2tFWx/3BHhLvjkb/Bz3Ux0cBIKGsgoc+Kw5HffeB96x6fcD4cZJ+zKFHoqBioB/9wEd+ie+Hfgn+CcVLVVaTHIf9374XowHj5iajp4b17dURvsP+wJwJR9XBuJ2RMQrG/kP/MgVy/lB9yDC92sKQ/fmHZ+Lphv3IPcEw/ch8kTY+wF3d4iFeh/+i/eOHQZSHdrJVj2WHomLiYga+znwIvc89+kdpR4O+Z33pB35J/emCio1aUVcH8tpTbE9Gy1VWkxyH/t6+7kgHfp2+0AV948dIjVgRiFHz/T3DOnH9wQe97gKHPpgigohHosHiouJiRr7IeY29xfXy62+px77YAcO+lD5WvjKFfeXCvnk93AdSFJ0YWYf2nBLuTMb/Cf8KSAd+XajIh38kPcl97sK4stMJY4eioKKgYGHCm8dHPmt1gr5lfekHfep+zQGpG1lmGAbMlZbTXMf+3r7uSAd+XLwFUEd/IzPFeCx6/cDyr1iSJ0e+wyZ0D/3EvezChz6aDQKDvmV96Qd96n7NAakbWWYYBsyVltNcx/7evu5IB35cvCzChz6aPeOHQZRHbHr9wPLvGJHnR77CpnRQfcRkgoO+v33pB33wPs6Bqdq9ycK+X/wMB38mc/3uwrRwmJHnx77DJnOQPcMG9nCr8SpHzQdHPkANAoO+v33pB33wPs6Bqdq9ycK+X/wMB38mc/3uwrRwmJHnx77DJnOQPcMG9nCr8SpHzQdHPkANAr7l0MVJh0O+v73pB33wfs7BqhpX5tZGy1VW0xyH/t6+7iECvl38hUmHbH3ezAd/JrP97sK08NgQ54e+wiazkL3ChvZwq/EqR80HRz4/zQKDvnu96Qd+YX7eAb3Sh0xPWFCYh/Na0+yPhstVVpMch/7evu5IB36a/s1FclcChz6D4oKIR6LB4kH8R0e/oj7sxUmHfnK+O94CvpM+Vr4yBX3XAr3ffjf96Id53NHxCr3Rx35VJCYCvpI+Vr4yBX3XAr3ffjf96Id53NHxCob/Cf8J4QK+XH3gpgK+hL5WkQdHPnrNAoO+sEcBMn4HxVGCj9PalFoH85rTrM+9zkd933536gd/ir7fiAd93r3Pfe7CuLLTCWOHoqEi4KDGvse2iL3LvcPHR4mCk0KHPk8NAoO+eH4rWkd+Bb4phXBHPocix0hHosH+yP3tQoe93sKDhwFMPrY+M4VLD5iRmIfzGtPsj73OR33ffpBKgf7DEphJ4ce2nFCz/sOG/2l/C0gHfmohtEd/of3MBX3NQrwL/cl9wbOyNWoHvesHW8dHPg5NAoO+ku+Hfgn+CcVLVVaTHIf9374aQeQmpuNnRvgwVMv+wE1VvsDHy8G9wJ8QtIgG/fs/NAV9wuWHVlPOSpf0Oce9wzzB/celgp0doiFeR/+k4oKIR77Ewf7GNMz9xoe99qTFW8d+2EGDvlC+X33KRVJWrnR07+31h/wM/eaHfze+DxKHfe6Bm1ueWJYGiXRRvX3AMvS9xce4Pda/BJnCv2CVfe0+478Zge4rq230XMK+Wv31xX7WveO91oGDhwEffl99ycVSVq40tLAuNUf7zMGMGJWRB783vg+Sh33vQZrbnhhVhom0Ub19wDL0fcYHuD3RAf7P+n7A/c99wbVwcytHvtsZwoc+0NV97P7kfxnB7murrjScwr5c/fVFfti95H4EikG+w5AaiYe94n7rRX7GvfUHY6Lj48a9w+O3cL3HRr192375gf7Ci09+wgeDvkK9zP40Uod948GiIuJiBr7Me0l9zz3BNTBy60e99Ad/URV92EpB/sPOmsoHvtnBrmurrjScwr4YckV+xo92fcRH46Ljo4a9xOQ2sb3Hhrt8AoO+NL3M/jRSh33lQaIfIp8exr7JPeBCveNCh77cfdAHf0OVfhDcAopO1g3aR/7Xwa4rq230XMK+EW3IgoO+mFIHfdq+6P7tgeKHbf3qh33NPh++//L+UL3IcEc+ZxV+I37fQdtHRwFO/pH+C8VXQbkdkTJKBstVVpNch/3f/jgKQf7AE1G+wge/RT7jhUsQsz3BPcA18zn9wy8Ljkfigc+WSr7Cx76Bfg/qAoc+C5V+I37fQZtHRwFA0gd+J33xx0HMzBqIoof+7iYHfhN/O0VVQr3PPdI9ybBHPhmigowHvsnB/sSzGYd+IgHSKPUdNEbnQocBWFIHfkA96QKKDlwUlkf+8oGua2pxdwat/eqHfc0+HEHfWuDZl8a1Aoe93YKZwoc+AdV+I37fQZtHRwFN/pH+C8VXQbkdkTJKBstVVpNch/3f/jgKQf7AE1G+wge/RT7jhUsQsz3BPcA18zn9wy8Ljkfigc+WSr7Cx76Bfg/hB0so85R9wOSCvvDZwoc+DJV+I37fQdtHRwHpkgd91T7fgd+jH+Mfx77oga5ranF3Br4Lvvatwr8AvcBCiqjz1D3ARvMvaKyrB/7A57YPPcZG0AdTQoc9cSLHTAe+yf3rx36d/hX9+/gCvnO+y33kh33KPtWFWcKHPmG2R3NwqCzrx/7FpjmP/ccG/cF1c7crh+JmJiKmRvev7TApB/8OPtLFfsER9HzH/cNj/etCle0OBv7AzQ8+w4xtUrKbB9QcVVYNBv9NhY7Hfj2+x8H+wxOakOIHu56Psf7Axv3ER0O+Yv48vdVcB35i/fW+0kVJh33sPgKcB35+/pT90337QrEUz09UlQ7H/v1k08K+lv7SPvkB0JQcFppH9duRLcsG/sSN/eFHdvKq8SuH0upy2XeG/cA2/fMCmcKHPoC2R0O+fwcBRX4V/eWHf3m++fgCvhz+0l2Hfn89837RxUmHfce+KLgCvnm8/eWHfwH/Jx2HfnB+PL3VWgd+cH31vtJFSYd97D4Cmgd+YYcBKEWrR38ILBPCvnncAowQl9CaB/JaUquNhv7Ejd9Cg75hvfW+0kVJh33sPgKFS5NyOjoycjo6clOLi5NTi0f+Nf7VRWtHf0zJRU7HfnncAowQl9CaB/JaUquNhv7Ejd9Cg757/jy91VgHfnv99b7SRUmHfew+ApgHfoL99b7SRUmHfew+ApPCvlWKQf7AE1G+wkeVAbjc0C+JPdYCkvMbB9PcVVXMxv5mPiq92QKWlA7M2LN5h73NPh++//oHRz58lX3sAoHPh2bnYmdG87DobSvH/sR94sdDvjC+nAWZwoc+ztV99n7sAYkCvgI+7AHJAr3VAcO+KP5ffcJHbnfH933eB33qfs290sdHPtZVffZ+7AHJAr3ODcH91AKBw75IRwEeve7HRz63VX32fuwByQK+Wb7TPuk+zsHOgr3ZvxTBw75OPlc94wVXB34XfuMFSsdHPrFVffZ+7AHJAr3Pvu+B30d92j9QgcO+EX6UIAVWAr+3FX32fuwBiQK+H/7CjkH+yX7DT/7MsgdH/tiBw74ovlt8hX23r7dsR/7gPdtCvwHB/sSLTX7DDBCsuD3Jx12908d/RlV99n7sAYkCvdHB3dwgGllGp8d+wXqUPcMHg76gRwEyfdCFfsaPH4K/HlEWx12908d/RlV99n7sAYkCvdHB3dwgGllGp8d+wfuUvcTHg76VRwFrha1Cv0ZVffZ+7AGJAr3Rwd3cIBpZRopy1jNfB6JB06DTFkz5R34+flS900iHfgo+00VKx0c+wRV99n7sAckCvk+93AdMQr3bfxYBg76yPlR9yUVaQoc+TRV99n7sAckCvn35Ar4lvpFFslcChz7aFX32fuwBiQK+N37eAf3Sh37GiEu+ybxHR/7UEilCvjo+Tv3OhVI9zMKRR5UBPcBbB33Qvwiy/lC9yLB+2L7tftC5gf3D1vf+wh1eIiFeh79JlX32fuwBiQK97UHj5eZjpgb06pTNR8nJQcgPPdcHfUfDvqq+Tv3Orkd/SRV99n7sAYkCvdWB/dIHSX3GAr1H/jfypEdDvj2+qP4V9cK/Ab8nC0K+Eb7OhUrHRz7B1X32fuwByQK+Dp0CvdZ/CIHDvjD+Z73QhUvCvem+0L3Sx0c+ztV99n7sAckCvfxQAfrHQcO+MP5nvdCFS8Kf1QV9wbV93cdHPs7VffZ+38HlAr3gx1mj2mUbB772fvTBdYG96H3ogU4tNpb9wMbDvlp+pPaFU0KHPqUVffZ+7AHJAr5OPsfByqAYUF7SAiJBtN7W9z7ABv7EDsz+x77Htoi9y5AHQ74iPmA9zCyChz7dVX32fuwByQK+M/bHfkK+eH44IcdHPrzVffZ+7AHJAr4OkEKDvj7+VT3TSId/B909+IKusBh9+cd+f/3cB0gOVAmfh+IgQX7FWtTXiAb+kD4oBXBHPsC9ygK4033DvTZr/CxHkOm0V/jnR0GDvj/+qz4V9cK/Ab8nC0K/AWH9+IKyMBT9+cd+QL38x0wRV47eB+LB4V0BSRvSWUoG/pE+KAVwRz6/vcoCuRN9w/w1azasR5Ioshg3RvnCvjj99r3CR253x/d+NBAB7QKeox7jXse+wSGMz37Cxv4eJeTChz7G/coCupN9yT3BuLC37QeOrTaW/cCjQrL990K+Kf4BPcyFTM/w/H3Yx33qAZPbmdWg0kILXVWOyAb+bH4pBXBHPtWVfpx934d/ZNY97cd+xjsRPcK8snE2a8eNKfdW+kb5NO4z68f+23L990K+Tj58991HfsBp/cMUvc5G/dSCh8O+Tj56vucFTZLwOfjxsTxjh+LB7y8kpi2H/s7B0lcOyEelPfwdR2gOdNX83YITm9hTzwa+wbdQfcH3sKywace+y/E+FQH9L7M6vcVGg75Gfls900iHfi1+IkVwRz66lX63fdwHYUdH4iLiIkaO4BSRysbNUDC76Qd+xbuRPcK586706seT6vMZ9qdHQYO+Rf6w/hX1wr8BvycLQr40/icFcEc+udV+d/38x0nQFQrgh88eVVMLRs1RMPxpB37F+hD9wvjybTLrh5OpMZm2BvnCvj3+dL3QpMKHPsHVfmq948KhIUahPs2Nk8siggxQcPxpB37GOtE9xHs37v3Aa8eMrPcVvcIjQrL990Kiwr4MvfWHRz6bVX3F/sGB9Md+yT3FkD3UvdG9xrb9x+1Hjq12Fv3Ahv3AdLAy60f+4DL990Kiwr8MPvAFdAG+zD3NvcaouzVrvcHGTq12Fv3Ahv3AdLAy60f+4DoHRz6bVX3F/sGB9Md+xv3BkH3PoIe+yn7MAXPBvcm9y4FDvpI+pcWLAoc+bVV+rT7fQfKb1C9KRtMU3RiZB/7vPs7BjoK91kHfWyDZ2Ia9xIdUB0O+bQcBQ33ux0c+kpVHATq+0z7pPs7B28K+9r7Owc6Cvdc+wT3Ih33ZvxTBw75tPeh9zcK+M0WJh34W7L3Sx0c+kpVHATq+0z7pPs7B28K+9r7Owc6Cvdc+wT3Ih33ZvxTBw75YhwEfRbJKx0c+ptVHASa+0z9jfs7BjkK9wb34wf021IjOFRKMTtAu+qBH0/7osr3PQZZpspe4xv3A9jX9wTiXcVKqB/3ewYOHAToHAXE90IV+xo99yUdHPiBVRwFnEAH+wNAa/sEHvub+xkG96cdQV3E3R73Gfva+xkHeB33GUv7GawK2fddPQf7B8337gra9zAHlZOLkhv33grWwcytH/uCBw4cBKMcBZv3MLIKHPjGVRwGb3AKR09yYGIf+7r7OwZvCvva+zsHOgr3XPsE9yId91YHfGyDZ2Ma+yRgCvml+cj31BWXCvdh/AIG+9QEZwoc+lhV+mX3qAoGUlB+ZWgf+6r7OwY6CvdQB4iBin9/GvdvCh6IHfc4BpUK92aKBQ75Ufot90IV+xlI4PcdgB+QB/cSkdrF9xwa4Pds90Ud96X7QhUrHRz6rFX6BEAH+wpMYiqFHrxyVa80G/uuVsIK9xkG0LZoXJcf+zqV3vsD9zwb90oKH/uCBw745voMvBX3Wx1ONR0c+xdV+mD7EmsGPUZ4ZFgf+9n7OwY6CvdoB3FkfVlQ95QK+IL5234VVQr3PPdI9ybBHPt8VfpI98cdBlJRfWZpH/uV+zsGOgr3OweJgYqAfxoh5GjhHp0K+RIcBGz3ux0c+utV+t37T/08+zgHeB33OEv7OKwK9wH3rAdLZmVKKxr7MfI09+cK+xhD0/cP9xnkyfcbH/cs/FAGDvjA+syAFVgKHPs8VfqA96YKPkR1X1of+8j7OwY6CvdfB3psgmVf95Qd+Wf5vfdI93cKPT1SUzwf+Cj7SBUrHRz6mVUcBJv7TP2O+zsHOgr3agf3sQrR9wPLbrxlqB73b/xVBg75B/n79ygVIDHQ9wy8mrSjqx/3t/uZBW1sX3dRG/dQ+ygVyVwKHPr2VfrU+3gG90odQ0twXGAf+7b7OwY6CvdTB3trg2ZiGvEdHvtS99AV9xbKJy9kf2BxaB/7tfeZBaquupy/Gw75aBwEgfh5Ffta9133Wgb8Bvx7FUlaudHTv7jWH+8jBjphW0Ue+Eb7WxUrHRz6lVX6MPtd/I/7Kgd4HfcqS/sqrArt92UHa294Y1YaJ9FH9fcAys73DB7w91r8RAcOiAoOiAr94/c3Cg74/vn29zCyChz6/1X6ynAKR09yYGIf+7r7OwY6CvdWB3xsg2djGvskYAr5bfem99QVlwr5S/ebHQb7CDVG+wmJH/db+xsiHf0hKxWVCvc6igU0n9ZV7Z0d9yHBHPqPVfhD96gKBqsd+XscBJT4V9cK/Ab8nC0K/KT3LhWXCvhX+38kBi5DXDd7H/xl+3sVlQr3PIoFK5DQS/Ab9ykK9yHBHPqCVfhD96gKB6sd+UD3pvfUFZcK+Af3FwpujnCQch73n/smFS8K/XY2FZUK91SKBSyx3lL3DBv3BtX3dx0c+r1V+EP3qAoHqx35IBwEevdAChz63FX66/d+Hfv9WPdaBlRxaFyAUAj7Mwb3CoU/8PsjYR33Gtbj9wKZH/cxBvsPkOtF9wUb5NO4z68f+20HDvmM+kffPQpUBPedHfd2wRz6cVX5PfeMHWKFZ3pxbwj7MAb3A4BA5/sdYR33H9bq9weVH/cOBoR5iHd0Gvsk9xZA91IeDvmgHAT597sdHPpeVRwE1vtM+6T7Owd1Cvse+wgH9wOAQOf7HWEd9x/W6vcHlR/3CAYmlctG9wAb9wjR970K92b8UwcO+XP524MVgQpzdIiFdx/9tlX5XwZsaHpcUxp7jXuOex7KBombipqbGuTBxN737Aoe+yh6+wsG9wJ/QOb7HGEd9yDW6/cIlB/3CigG+xjSM/cbHvfZkxVvHfthBg7d9wwK+EX7A0YG+yIlR/sWNb1M3W4fQ3RPVCoa+w3qOPc490Dd5fcXHvfxCsnj9wTqq+8e90GN3OP3Fxr38QrK4u3cufEe9xX3OveOwf1+Bg7i9wwK+Ef7A0UG+yElR/sWN7lL4WwfOnBYUDAa+xXzRPct9yz00vcV5ljGOace4qu30OYaTgYqSkf7FfsSSMri7du58R73Ffc695HB/YIG+A/99RX7C0DA6uvWv/cL9wvVVyssQVb7Cx8O+R76zRbJKx0c+t9V92wK+yj3ACX3KOkd+0BI9yEdwPfW914d+/P5uhX4SPsDQwb7ISVH+xY2u0fhbR/3SAr3ZB39YAYOx/fo+xEV93Qd9/ME93Qd/CkE9ynw0vcV413FQacf1qq4x+Ma9xEwzfsVlB73BPfYwf1nVffl+wQH+xOCMUn7ERozuE/WbB5Bb11RMxr7FfBE9ygeDvko9+b1TR342Z/3CB0c+tVV9+P7Gwb7F34mLfsiGvsp9wYm9yr32Qoe9zsdwvfo93cV+wlCwerr1b/3C/cF0lcrLENV+wcfZ/vsFTpOwebtz7z3ALizkZetH/s3B0ldOiAe92j7BBX4WAe5raa+zxr3ETLN+xOUHvcC99DB/WJV9+f7Agf7GIIvSfsQGjK7T9xuHklxXFAzGvsK2T/3At/Ds8GmHvsvBw5/9wwK+ED7A/sMBjA7bS4t4XT3AuHWfjlRYGcw+wxRws2KH04GSLpYzXUeUn1kak8aLeF39wPl0X05UWBoMPsMUcDOih5OBiGN71D3Hhv3FM2/4vcCNaf7Ez1IkszFvqH3AfcWz8Dh98MdH/c89zD3N8H9HwYOinr5QhX4MfsD+w0GMjptLi3hdPcC4dV+OVFgZzH7DFHCzYofTgZCwlbVeB4ucUpG+wca+yX3BTz3MPcf2s3q3lXGKDRSX0CDjICNgh64BoqRipORGr6yq8TOrmFTRktcJfsYOs73A/cT7sf3C44e9xOQyrzgGvfDHR73Pfcw9yfB/QEGDvjE+nIW6B0c+zlV+D77GfsR6Qr32QbJ4IM4TFN5NB9yBoqAi4GAGvsf1TT3IejEutCqHvs+SRX7A1PO7h+Oi46PGvSMzq3cGvQvqPsBHvs59xr4p/vqBvsUUDH7Ax4Oi/ey+zoVP1C63OXNt/cDsauQk6Yf+ycHUmBEKx77z/noFfg9+wP7DQYyOm0uJO176eXVfThQYGgx+wxRwcyKH04GRb9U1XUeR3dYVDkaItdK8tDApbyoHvskwvg5B6ejmayzGvcANKn7CY0eOYxGj88az82Ywh73Pfcw90XB/SsGDs33DAr4V/sBQgb7KfsGP/sv+wDJQuxqHy1tSkX7BRr7KfcLOPc69yvgzevdUcckME73nQq1q8nSsWFTR0Vb+wP7IDTR9wn3F/TJ9xAei4wH9yPkzOveU8YiME5fP4ONgIyDH7kGiZCKk5EavrWrydKxYlJHRVv7A/fJHfcG9yz3csH9bQYO+R76zRbJKx0c+t9VVx332QbH3II3TVJ0M48fdAaKgYuAgRr7JNUw9yHpxbjNqR77P04V+wRV0fMfjouPjRrvitKs4Rr1MqciHvuJ9xH48fv5BvsLTzf7Ax4Oq/cMCvhP+wFKBvsp+wY/+y8gyT/nbB9DdldRMhoh2Eb12L+yv6Ye+zbC+D0Hv6eousUa3FXFLTJP950KtKvHx7BjVEVMWiT3yR329yz3V8H9Swb36f4YFT9Pu93qzbr3FKqojpKkH/saB0dgOyceDvjO96j3jBVcHfnlxxVONR0c+y9V9wIK+GH7EmsH91oK9x4dHw74+/oF9U0d/PH3IhVcHfjx+1gVzh0c+wJV9w/7vgd9Hfgb94kd+yn3Bib3Kh4O+I/3qPeMFVwd+NT7mRVVCvc890j3JsEc+29V9wIK+G73xx0HMjBqISHkaOEfnQr42veo94wVXB36AmEVzB0eVArk9z73UsEc+yNV9wIK+I/7EF4H91sK+zv3mR33ugofDvmp96j3jBVcHfi4Flwd+Or4ShXBHPpVVfcP+74HfR33TPu+B30d92j9QveaCvlK+vf4V9cK/Ab8nC0K/HHdFVwd+rD4ShXBHPqzVfcP+74HfR34LHQK91n8Isv5QgcO+RQcBPr5QhXBHPrpVfcP+74HfR334UAH3R0H/e78ShVcHfjcQRUvCg749vnu9zAiCvza5xVcHfpc+EoVwRz7B1X3D/u+B30d+NvbHfmn+fUWLAoc+lf3PQpSc19kH/szBvepHUD3OB33GPeKCmhkGvcSHVAdDhwFBPrfRB0c+Gb3PQpSc19kH/szBvepHUD3OB33GPeKCmhk94gK+af5TPc1gh33Pfs1FW0KHPpX9z0KUnNfZB/7Mwb3qR1A9zgd9xj3igpoZBr34Aoe4B0OHATT+jJpHfgW+KYVwRz4l/c9ClNzYGQf+zQG+zv7Cz/7QfeHHfeKCmdkGvcSHfcuHfjp+NT40Uod97T8FsgrHfte+8X7cAa4rq230Rr1N8cpc3SIhHYe/S9V+NwGdG99Zl8aJdZS4XseUm5PbWhcCPF6UvD7JRv7HCk6+zz3Rh1VHfcW0sz3APcfr/sILB9jBy3ORvLjt8Colh4Oyx37Keoz9yb3BdTO3K8eiZiYrwrLHfsn6jP3JpWVjIyVHvsp+yQFh9AH91/3W6mkoqyarxmImJmvCvcL9wwK+Nb7T/yZ9zod9yz8UOgd/aIGDviw+Yz3QhX7Gj3a9xQfogf3D47ew/ceGuD3bPdFHfem+0L3Sx0c+ztV+XZAB/sMSWIlhh6yclex+wAb+9hV9z0GV2tjSyMa+yryNvcwHqq/dQb7GEPQ9wv3GtXG9wX1p15vlB+EB/s16iH3PPcF1sHLrR77gQcO+Ib5ffcwsgoc+3hV+lFwCkVPcV5hH/yi9zod9xEGfW2DaGQa+yRgCviz+mAWy/lC9yDB9+Ed+yVC5/cejh6KnaGLqRv3IPPB9xztRdX7AnR2iIV3H/0PVfi9BnNtfWNbGnyNeY18HsYGiJqJmpoa2Lq/2de3V0v7CSVxJh77gQb7NvsFS/sn+ybyP/cwH6u/cQb7FUTJ9fcB3r73Fh/3Dgb7PO/7A/c99+kdpB4O+Lj5EfdGFTdTwdnbxcLrCvgo+0YVKx0c+0VV+oL7T/z9B/s7+ws/+0H3hx3jyfcbH/cWBvexCtL3A8tvvGWnHvdt/FIGDvqI+RH3JRVpChz5dFUcBKhAB/sGQG37BR78+wb3qR1F+zP7L/I69zEfqr9yBvsVQ833CPcM4sL3Gx/3FQZqa3heU/cdCvgu+T73cgr3cfuaFSsd/sX33B0H+zv7Cz/7QfeHHePJ9xsf6Ab7JI7RLvcf9xkKBw74Lvk+95qzCv7F99wdBvs7+ws/+0H3hx3jyfcbH+gG+yOO0TD3H5IKDvqd+TX3mrcK+8j7mPefCugG+ySO0i73HRvMvaKyrB/7A57YPPcZG0AdTQoc+WH33B0H968K+X75NMAKHPp+99wdB/s7+ws/+0H3hx3jyfcbH+gG+yLHCgcO+MP6cfhnFfta92/3Wgb8B/yNFUlbuNLSv7j30gpEHvhH+0kVKx0c+zlV+Yz7b/wHB/epHUT7NPsu8jv3MR96Hc33BvcN48P3Gx/3DgZxb3xkXBol0Ub19wHK0vcYHt/3WvwxBw76k/j/938d+A/3sRVLHfel+0IVKx0c+WpV+Y37fPwLB/s6+wlH+zH7KfI99zEfqr9yBvsWRMr3AvcK4sH3GR/3EwZwb3xkW60KBw74n/l790KRCvel+0IVKx0c+15V+VP3Hgr7ABv7Kis8+z73Rh2UHQcO+Mv5p/cWFfsaPNr3FB+Oi46PGvcUjtrB9x4a9yT3a/v9B/sJLj37CB5/VBX3BdXAy60f+1RvHRz7MlX5fvsaB/sGT2Augx7hZjbJ+wkb+yYjMPsnH8sG9wvfzvXmzFlIpx6Ji4mKiB78Bvv3BYfdB/e497YF+xid5zj3KRsO+Tj4AY33nwr3CgZ6aYJiXBr7Htoi9y73Dx0eJgpNChz6xVX6jLsdVFx6a2kf+zYG968K+GT5XPcwsgr++1X6MPeTCvs7+ws/+0H3hx3jyfcbH/cTBn1tg2hkGvskYAr5Bvne+NH3Fh0c+vd+HQ769fne+NEV9wX5WPdwHTVFZEhsH/uamB34BPwYIh372I4V9woK+FQHioGKgYGHCm8dHPkIVfm8+wUGhQoO+r/6mvgkFfucmB33BfgM+xEH+xFAZ/sFHveV+5IV+xo92PcOH42hlgf3A5TTwvcVGvcb92z77Af7CS48+wge/CW1FfcKCvhTB/st6SX3PfcF1b/MrR77ZW8dHPk+fh0O+nr53vjRFfcF+N9wCvsDM0oicx/7hpgd+Cj8NbIKHPmDfh33Cgr4SAeJi4mIGvskYAr5RRwFK/lCFcH9d1X4qvdwHfsJNUT7Ch+LB4AqNUn7CYz7J41B4Y33FghOCvs88yP3RfcA4bratB5Oq8tn250dBvwo/IkiHQ75Dvf88mwK+wA/RfsDfI15jnwfYwomBol7int8Gvs78ST3QR74gtIV+xs9fgoO+NX6w/lCFfchwf0LVfg/91kd+xYqMvsdiR/7B3c+RPsJG/spQvfsHR9OCvs78iT3Q/cD3cDjtB40rNpW8Pc+CsoH+4r3MCIKDvdoCvsaB1h4U0NHdcH3yB1H7va11OIe9xQH0I7DrKa4CPxQxvdJCvdoCkcHV3hUQ0d1wPfIHUju9rXT4x7JB9COw6ymuAj7Vwf7wvvBBc0G94L3hwX7U8T3SQr3uPe1eBX3nArGtMDntLaAcrcfcmh8XVQaLbRGzWceKXZEUzUb+9L5VRX5dfemCkBHd2JaH61ZTp9QG/sWUUE3Lstfy30f1h1K+DhcFcn3qFUGI0tSJzRStdjJtrfiHui7LwYwXrjB2NOk4h/3Ifck9y7B/PVV+BwoBoxsa4tsG/sFLmj7AEHAYM6AH4kHSYFYWz0aJ9lP9wLtw7i8oh4O97j3DAr5dfeJCi20Rs1nHyl2RFM1G/ecCsq4w/cAhB/AB/sqlkk9Mhouy1/LfR7WHfmR+Nv7tnwK+Bn3riId+9r7WBX3jx0iNWBFIUjP9PcM6Mf3BR73ggr5WPebHQYxCvdt/FhvHRz6bVX3ygrIHR/7YgcO9zYK1savyace9wUKBWZ0Ym5P9zoK9zYKHo+Pi48b+xr7EQXPBvdB9zmdmpqflaIZ9wUKfXV3eHF/GYkGiYkFhHp3h3T3Ogr5ffjb+7Z8CvyB+aOOCvnt/NJMCvdD/CJvHfth+7X7Q6cd91v3ryUVUWGyxMu6sMsf40QGO2ZdTR73MvePFfc1+z4HP1OszdfCp9Uf9zP3Qfdc/K0G/ST4rRX4HvsKJAYiOmH7CCfbVvcAH/cK+wA2BilCWCUwyU/r7sXL9w0fzPdO+83L+hz3IsH98gcO5/e06RUrRrPW2Mmn3R/OvUoGO0mn0djXn9AfpIkGjI0Fx/cT9z379gb7PChF+xwe+7v45BX3wCkGjHh4i3cbOC5vJzPYb7qFH4gHXYc9bSkaI+dT9xD3EOG56rEe+01nCv1yBw6G9wwK+E77CjEG+yQpTfsWNrpO0nMf94QKxvdfCv0mBvfg/cb3XQoO+REcBQT5QhXB/X1V+LH7SPvkB/sHN0f7Bocfigf7An07U/sMiQruUvcS9wvfvOKvHkeozmLhG/cB3PfMCsv5Qgb8KfyJFThSwUIdPffVCg767BwG0vlCFcEc+0tV+WZAB/sGP237BB774gb7BDhK+wGEHzF2RF37DIkK7lL3EvcH2bLTsR4+pNNc5hv3ANz3UQof91sG994K9zYdH/uBy/lCB/35/LEVOFLC2fcNHdvEUz08UlQ7H/joqBX7Gzzq9ygf9xKP3MD3E/cUCg75GhwFAflCFcH9elX3q/t/JQcmP1MphB+JhAVAf0RR+xAbNOMK61L3EvcI2bLIsh5SpsNo1xv3AWwd91r8Isv5Qgf8R/ycFUlb998dYVZEHvgH97H3lh0O+Nr30vJbHSdIRy2fHfsH7lL3Ex74edIV+xo8fgoO+IT6nPlCFfcgwf0NVfhC91kd+xQqNPsahh+KB/saejxS+wqJCutS9xX3EtjB660eLqrdU/Mb940KH/txygf7ivcwIgoO+hj3nfdNIh35XvtNFSwKHPnlVfqE+30Hym9QvSkbTlV2ZGQf/AYGMQr3agZ7a4JlYBr3Eh1QHQ4cBcP3nfdNIh0cBKH3dj4K92r7o/u2B4odt/eqHfc0+H77/8v5QvchwRz3pVX6hPt9B8pvUL0pG05VdmRkH/wGBjEK92oGe2uCZWAa9xId+3HI994H92IK5MyxHQ742BwEvvlCFcEc+yVV+qP76QclQTb7ATE9wOvizM/3AR6sv/zoBvcvCvsL+wTfQPeXHcxtvWSnH/fPBkprZlBCGvsQ6kX3DOTUuc+uHvtuyvlCB/28/IL3yQo9UlM8Hw75Zved900iHfkYJhX7LiTF9wPXvcr3DR+hwHQGJGG63x/3Avgd+xoHQYJHW/sCGmqRaJdpHsEGgK2ErKga6Musv8nJWCH7OfsZKPtIHopUFfedHfd3wRz6l1X5FvsFByfCYM6CHogHUoJabHJXCPcSWvsDwfsHG1DZCslwumioH+F93EWo+xAI+yCQ9xVD904bDviu9533TSId+Mz7HBX3Wx1ONR0c+05V+in7EmsGP0l5Z1kf/B4GMQr3cgZwY3tYTfeUCvhc9533TSId+K37WhVVCvc890j3JsH+81X6I/fHHQZUVH5paB/76gYxCvdVBomAiX59GiHkaOEenQr43ved90YVN1PB2dvFwusK+cL7RhUrHRz7H1X6qftP/X4HOArS9wPLbrxlpx/3qQZTY2pKMBrUCh73dgoGDvqV9533XRU3U8H36B1TPjtSVTwf+mhwkQr3pftCFSsdHPloVRwEtfceCiEbi/y+BzIKzG67Zagf95wGW2JwSzAa1AoelB0HDvi09533DBU3U8LY28XC6wr5W/sMFclcChz7SVX6gPuZBsFqScIhGz5Ha01gH/vMBvsJNEP7CvsD3kH3BvcC3NX3AMtuvGanH/d/Bs2uyqjKG+jQ958dDvr89533R/fJCjxSVDwf+sr4HvcWHRz5AlUcBR37BQf3jApPBsVuSLr7BBuGi/zCBjgK0vcDy268Zacf96EGWGJtSjAa1AoeewoO+R33nfcG9z0d+cL7BhXL+UL3IMH3awpD5/cejffqCqYb9yD3BMH3He1F1PsD970d/XpV+SgGc219Y1safIx5jnwexgaImomamhrYub/a17dYTPsL+wJxJR78Mgb3EQrKb7xlqB/3VAb7PPD7A/c89xTX0c2lHg76/ved7hU3U8LY28XC6wr60dYV+xs9fgr8gkRsCve9Hf17VfkpBnJtfWNbGnyNeY58HmMK/DMG9xYK91UG+zXxJPdBHg76xPed7hU3U8LY28XC6wocBRX43xX3IcH9C1X4P/dZHfsWKjL7HYkf+wd3PkT7CRv7KUL37B0fipugi6X3Zwr3IfJF2PsC970d/XpV+SgGcm19Y1safI15jnweYwr8Mgb3Fgr3VAb7NfIk90P3A93A47QeNKzaVvD3PgrKB/uK9zAiCg74hPed900iHfmH+1gVWAoc+3hV+kT3pgpARndhWh/8BgYxCvdkBnhrgWNd95Qd+IT3nfdNIh35LHEVdx0c+3lV+kT3pgpARndhWh/8BgYxCvdkBnhrgWNdGvdXHR77Qvs4BdIGDvh29533TSId+KD7m/ddCvda+wgV918KHPuIVfo0+woxBjlHd2FhH/vvBjEK91UGgnWGcm4aNrpO0nMe94QKBw745fmw8hX3AN2+3LEf+3/L+UL3H8H7X/wHB/sSLjX7DTFBsuDOu7zuHsHAUwYnUL3cyrS+0tKyWVGGi4SKfh+9BoyWi/ciCvkQBndwgGllGinKWM58HokHZIZjdXRkCOxjsx3sf9lTmygIiYuIiBr7BelQ9wwe/KfdIh0O+sT3nfdNIh36l4AV+xo8fgr8eURbHXb3Tx39XFX5D/cJCmSGZHVzZQjrZLMd6n/YVJ0rCIeLh4ca+wfuUvcTHg745fed900iHfinOhWcm4yOmx/7Svs+BdQG94b3fQWKBp6em6GXowj7gPdtCvwHB/sSLTX7DDBCsuD3Jx12908d/VxV+Q/3CQpkhmR1c2UI62SzHep/2FSdKwiHi4eHGvsF6lH3DB4O+mv3nfdNIh0cBOj7TRW1Cv1cVfkP9wkKZIZkdXNlCOtksx3qf9hUnSsIh4uHh+Ud+UP3nfdNIh34lBY3U8FCHT331Qr4KPtNFSsdHPq5VRwEevtI/eMHMQr3iAZpa3ddUocKBg4cBID3nfcl93cK95gK+JMWaQoc+OlVHAUzQAf7BkBt+wUe/eAGUgpA9yoKqB/3iQZpa3ZcUvcdCvir9533TSId+LHYFUEd93H7mhUrHRz7U1X49PtI+8kHMQr3Uwb7KNEq9yLexq/Fqh77wQcO+Kv3nfdNIh34sdizChz7U1X49PtI+8kGMQr3Uwb7J9Es9yKUlIuMkx77dPtvBdMG95b3mZyYmJyWnxkO+fz3nfdNIh34qNgVxAoc+gFV+PX7SPvKBzEK91SIBsEdBw75/Ped900iHfio2DAd9yn7mhXK99gGIx0c+gFV+PX7SPvKBzEK91SIBvslz/cAHfeP95ecmZmdlp8ZDvkc+Y/3SBVJWrjR07+41h/wMgYxYVZEHoxUFfcAy9H3GB/g90L8MG8d+2H7p/tC2Af3D1vf+wl1eIiFeR79eVX5MAb3mQp+jXyNfR7KBoiaipiXGtS1tcbTqlM1HjX3Jh0e/Ied93cKPjxSUzwfDvr/9533Fvc9HfiHr7kd/XlV+TD3Qx388gf3Fgr3iQb34h3438qRHQ76z/ed9xb3PR34hq9MCvcw94od9xvvzb3Nqh77cPdAHf0cVfhR+3sHzGxKvSYbLz5eQWYf+0P3wgr9eFX5L/dDHfzxB/cWCveIBvfiHfQd+VX5j/dIFUlauNHTwLjVH/AyBjFhVkQe/IZm93cKPjxSUzwf+fn31hX7Wvdx91oGy/1C90sdHPqpVfod+3H3Jh33AcrR9xge4Pda/DAHDhwEkPed9xkVN1PC2NvFwusK+Ievwwr4D/exFUsd96X7QhUrHRz42VX6Hvt8/PMHhR37BN9A9wb3AN3S9wLMbr1kpx/3iwZvbntkWa0KBw75FPed9yUVaQoc+uhV+cjkCvjJ9533TSId+Mhusgoc+yRV+qVwCklRdGJiH/wPBjEK93EGe2uCZWEa+yRgCvlm9533TSId+TT4J4cdHPqXVfobKQeGHfrV9533TSId+TT4J6gKHPkpVfobKQaGHRwGkPed900iHfqHe8MK++b4NxXt+Ff37R37vwa5rarF3Br5YfsaFUsd/iqZFY6LkYqQHk6ABjVaUDozYs3mHvc0+F0HgHSFcW2tCm8dHPbZVfocKQf7AExG+wgeVwbHckmuIxv7RwYxCs0G87JcVB/7Iwf7Eswx9xX3CtTY9wweDhwEi/ed900iHfnw93qcChz431X6GykHhh34bfed900iHfmD+xM6HRz7kVX6NffHCgZQWXtpbh/78QYxCvdkBoqEioSDGve+Ch72HfhC99D3mhX7BFjU9wkf9375BfsSawf7JfsDSfsXcB9QeFhhPhv5MLkVTjUd/thV99MK+yjUKvclzb6isq4e+xiZ9wAz9yIb91sdDvhb+WX1TR38KfcwFfsEWNT3CR/3fvis+xsHIYE0S24nCIsHSXxWWjgb+Cn7ZhXOHf7y1R37KNQq9yXNvqKyrh77F5r3ADX3HxsO+Fb3zveaFfsDWdT3CR/3fvlr96QK+xklWyBmH1t1W2lGG/mW+DwVwf7t1R37KNMq9yTCuJynrR6Ki4uKGtQKHvd2Csr5QgYO+g73zveaFfsDWdP3Bx/3gfoN9x4K+wAb+w01V/sBbh9Rd2FiPxv5sTORCvgy99YdHPnu1R37KNMq9yTHuJ6rqx77LZLwO/csG5Qd95oK+LX5CvdNIh371tgVIFvU9wkf9375xfdwHSU8VTB4H1F5X2JKG/n3+DwVwRz7TPEKLfcfxrqhsKseN6DWV+udHQYO+D/3rAr7fgeEi4SMhB4hhVRMKxv4ExZBHff++DwVwf7W1R37KNIq9yLszLfeph47qctc7ve1HfmQ96wK+4EHhIuFhBoihVRNLBv4CRbEChz6bdUd+yjSKvci68y33KYePKjJXen3gR34mvpG+FfXCvwG/JwtCvux6xUsYM73AB/3jfis9/MdNklkRXMfXHVjalEb+fD4PBXBHPtkVfcK+40H+x/KMPcSwbSerKgeMpXOUOwb5wr4kvfLCviQQAeAHXx9Gj6DWkwwG/g7M5MKHPtr1R37KNIq9yDbw67CrB77A6vhSPcXjQrL990K+S/3x/eatwr5JftLFU0KHPrP1R37KNIq9yDMvaKyrB77A57YPPcZ3Qr4UflJ9zAiCvwW9RUhW9T3CR/3fvlncAr7Ci5B+wl7H0h7W1k7G/mY+DwVwf7o1R37KNIq9yDRvqa3rR77AKLiSfcFG/AdDvjQ98sK+M8pB2EKKYcGPllHMB74dPfahx0c+y3VHfso0ir3IM29pbSrHkgHVh0O+mX3xveaMB35Vkn3Mh38gvcaFeCy6/cK5fflHcz37gr3BPdm/FNnChz5l94K+mX6iPdY9zId/VbNMB33aM8V4LLr9wrl9+UdzPfuCvcE92b8U2cKHPmX96UKB38K+Ib3Nwr9gNEVJh0O+cb3xveaMB34HffEFStRWEtwH/d/+Rz7EmsH+wMwZD9bH9dsTLgwG/tJ+4YV910d8cRE+weNHoqCi4OCGvceHR5ONR0c+jj3ZgqBHQ6BHfuOqhUmHQ76QPfG95owHfgV98QVLlVbTXEf93r55/dwHUdSc2FmH+JvRLI5G/fm/BEiHfyT9x8V5LTt9wvfzlr7DI0eioOLg4KHCm8dHPm992YK+Z33xveaMB34E/fBFTFUWk1xH/d+98T7QAeqa16dUxv3/PvBFUEd/KfJFeS57fcG3L5fQZse+wac0EP3DvezChz6YN4K+u33xveaMB34E/fBFTFUWk1xH/d+98T7QAeqa16dUxv38vvBMB38nckV5Lnt9wbdvV1Fmh77CJvOQ/cJG9nCr8SpHzQdHPkP3gr67ffG95owHfgT98EVMVRaTXEf9373xPtAB6prXp1TG/fy+8EwHfydyRXkue33Bt29XUWaHvsIm85D9wkb2cKvxKkfNB0c+Q/3pQoHfwr7jqoVJh35cRYmHQ76AvfG95owHfgW98IVMIlSWnFNCPd/+JMxB/sHT2Etgx521k/HJYkI+Cr8GhX7Gj3i9wwfjouOjxr3E47a9xcd/Nj3KhXkuOv3Bo0e5Y25TpVNCIqLioka+y7q+wX3VwpnChz5+94K+qP3xveaMB36C/cZFdN7W9z7ABs/UGpSaB/QblKwOxs0VVpNcR/3ffnUqB39OUQV5Lbt9wDrwEz7D4oeiweIB/se2iL3LvcPHR4mCk0KHPla3gr6O/lF+MMVL1VbTnIf94D4bQf3mwotBvcAej7PJBv38fzLFfcLlh1ZTzkqX9DnHvcM8wf3HvPT9yH3GTrW+w11doiFeR/+hPelCgakCvfUB+S07PcL5MxJIR77Dgf7GNIz9xse/XD3ojAd+rb7mhVvHfthBg76UPfG95owHfgW98EVLlRcTnEf93v44ikHYQpeBuZ1Q8goG/hzpIcdHPmt96UKB6QK99gH5LPt9wvly7Ed/kf7MRUmHQ75JffZrB35zfsmFSsdHPrYVfrv+0z7pPs7B5wd9wT3ZfxTB/2P+KZACg75LhwEfvdAChz62FX67/tM+6T7OwecHfcE92X8Uwf8G/c3CvwG9015Hfru99f4pmQd+oSnFfsZPPclHRz5EFUcBQ1AB/sDQGv7BB77m/sZBpwd2vdJB/tHjur7CPc6G/cF9zYdH/uBBw75SPfZ9yYVIy/R9wu9mbSjqx/3tvuZBWxtX3dRG/gP90IVSlKjz9nWm8kf91L3SPdp/AIG+9QE90AdHPq2VfoA+xn7JQb31gofXAdaf1ZtYR77tPeYBauuu5zAG6qmhYOkH7oHk3FvkGsbagr3Idns9w2aH6ttu369igjTBvDBXUFRZFgvIlbHz4AfVPuLxvc4BnKYu0b3DBv3C8LP3slxs2ajH/dnigUO+J36ivdAChz7YFX6aPekCiQ2bkxaH+RyP9z7HBtqCuHMrb+0H/sNpOpN9xob93YKBv0G9yZ5HfhT+l6AFVgK/upV+hL3pgojL2Q6Xx/SaUPF+wcbagr01b7TsR9CrtNi5hvYy66/ph/7Ygf82vcxeR34m/dUHfgkYBX23r7dsR/7gPdtCvwHB/sSLTX7DDBCsuDOurzvHpod6NG2zbIfRqrZZ+gbDvpS91Qd+vn4sBX3IMH9DVX4QvdZHfsUKjT7GoYfigf7Gno8UvsKGzA8sOLOurzvH5od59K2zLIfRqrbaPAb9xLYweutH/fACsoH+4r3MCIKDvkG+V/3TSId+Cj7TRUrHRz691X60PdwHUNOcFpnH9tsQc77EBtqCvTVvdOwH1Ksy2nY95Ed/W6sHYn4FBX3FsooLowfioWLhYMaiGl/aHVu+7X3mRirrrqcvhsO+KL31/imQAr5D/ymFclcChz7W1X6b/t4BvdKHSw6XDtlH9JpRMT7BxtqCvbWwNavHzuy3VzrG/DOvsuqH/0NRjcK+FGNpQr48PlD9zoVSPczCkUejFQV9wDqCnqIhXwe/TNV+TCNBp6JBY+Xl46aG9KqUzUfJyUHUlt6amof53RA3/sfG2oK69C1ybMfUqXEaNcb/AH4NxX3F8omL4SLg4qEH4qHi4iKiIZtgG73JgoO+Qf31/imFfcXyiYvhouGioYfhoqGhRqGbX9t9yYK+ACyFUhatczOv7XVH/JD95od+An7TRXFKx37Xvuy+1rjBvcPW9/7CHZ4iIV7Hv0yVflEBpCXl42bG9OqVDQfKiQHUVp6amof5XNA3vseG2oK79K5zbIfWqfDbdMb9M3V9xMfz/da+w4H+/n78QXUBvez97QFDvjE+rr3QAoc+zBV+YBAB/sPRmMiiB7UaUPG+wkbagr3B9nH3qwfPrTZXfcAG/dKCh/7ggf9Nqwd+GSn0Qr5cPqa2hVNChz6jVX6xLsdPU9mS2sf02lDxfsIG2oK8NO6zrIfO6rRVfUb5h3t5zEd/VXOeR0cBN332awdHAR0p7cdHPiMVRwFkTEH+wlMYSuFHst2UcAzG/sIWTtCex9GCj1PZktrH9NpQ8X7CBtqCvDTus6yHzuq0VX1G+Yd7ef3JB0c+rj4pkAKDviW+Y73MLIKHPtnVfpicAovP15BZh/RaETD+wYbagr11r/VsB8/sNZe6BvwHf1B+zBkHQ75APlngxX3CvfuHVpPOSlg0Oce9wzzB/ce9NP3IfcZOdb7DnV3iIV5H/1JVflVBvebCiYG7Xo/6/spG2oK5c+wxLQf+w6R0Dz3ERv8JPiuZB35Z/smFcxcCvthBg75FPfX+KZkHfin+E73ZApaUDszYs3mHvc0+H77/28dHProVfnKKQf7AExG+wceUQbjcj/Z+xobagrlzrDDtB/7CpDJOPcNG/cK09j3DB8O+UZzHfc7B4FzhXBthwpvHf18Vfiv+0j75AZOVnhnZx/7YOYGRx34ndUiHQ75BXMd9yAH+zzq+wP3PPcG1cHLrR73KR37PuYGRx3438qRHQ75BfckCvjggJEd/N9hFfPN1fcTH8/3IQdSlVmfYh773fvXBdQG9673rQVQt9Jq5xv3BtXBy60f9ykd+z/mBt8dJyQHID1RJivRS/UfDvm2cx33NAeFdIhxcBr7Htv3gh2WjIyXHsQHioGAioIb+wVQ2fbsvNTt57mACsGTHem5Py0gUD37BYKBjIyAHlIHipeWipUb9y7a9Pce9wxP4CqdH/ch95nB/gdV+MP7HwcrgGBBfEgIiAbTfFrc+wAbPU5nTmgf+0nmBqoK+NRzHfcw94od9xvvzb3Nqh77cPdAHf0cVfhR+3sHzGxKvSYbLz5eQWYf+0PmBkcd9B34xfd19zotCvj39+EVQEp8alkf+4z3f/jl+08GyvyHFSsdHPs4dB33VQdxZXxaThrUCh73dgoGDviE93X3Oi0K+UX4JhU5BiQwZTxfH/tY93/4mAb0/U0VWAoc+3lV+AP7fyQGWwr3QweHd4h2dPeUHfkv93X3Oi0K+KaeIh2Q99UVTlZ4Z2Yf+2f3f/lN+0gGy/yOFSsdHPrPdB33QgeBc4VwbYcKBg74sfd19zotCvf997IVivtQ93/3UAf3d/w8FUEd93H7mhUrHRz7THQd91MH+wmb0EH3EPcZCgcO+LH3dfc6LQr3/feyFYr7UPd/91AH93f8PLMKHPtMVfgD+38kBlsK91MH+wib0EP3EJIKDvcNCvj7/UIVyVwKHPskVfgD+38kBlsK90gHhniJd3XYHQ76vvd19zotChwFNvs6FSsdHPk/dB33SAeGeIl2dhr7JPYt9yP3B9nH3qwePrTZXfcAG/dKCh/7ggf9NqwdiPhDFSY5Wz1kH/tb93/5xkAG+w9GYyKIHtRpQ8b7CRv4Z/wn0Qr3DQr41PyiFZycl5yVngj7aclcChz7JHQd90gHhniJd3Ua99oKHvs8+y8F0QbT+Np4Cvkl93X3Oi0K+JUW9xgdcPicFY+WmI6ZG9OpUzUfJ/xZ938H9+r80xX3AOoKeYiFex79ZVX4A/t/JAZbCvdqB21veWRZGibRRvUeDvrmph33IAf7POr7A/c89wbVwcutHvcpHfs+9wAK+N/KkR0O+Tr3dfc6LQr4l5wVSVq2y8+/tNUf8UQGMGJVQx5t+IsVkJeYjZob1KlUNB8n/Fv3fwf36/zAFfTN1PcUH8/3WvsNB/v4+/AF0wb3s/e0BftuxSsd+177tfta5gf3D1vf+wd2eYiFex79Z1X4A/t/JAZbCvdkB3FwfGdeGivRS/UeDvq2ph33MPeKHfcb7829zaoe+3D3QB39HFX4Uft7B8xsSr0mGy8+XkFmH/tD9wAK9B35NPd19zotCvj/97EV/FL3f/hSBveV+3/XCvwG/JwtCvhG+zoVKx0c+sl0HfdeB29ue2RaGib3Ch0HDvkJ93X3fx34D/exFUsd96X7QhUrHRz69FX4A/t8JAcgPU37ACXRR/T3AsrR9xgf4PdEB/s/6fsD9z33BfdvHQcO+ar3dfc6LQr5Y/d5FdN7W9z7ABs8TmdOaR/7XPd/+VP7HwYqgGFBe0gI9yL70BVNChz6U3Qd90cHhXSIcXAa+x7aIvcu9w8dHiYKDvjO93X3Oi0K+OWBIgr3S/imFXAKLz9eQWYf+1z3fwb5uhbBHPsvdB33SQeHeYl3dxr7JGAK+Ub3dfcMFUlaudHTv7fVH/EzBjBgVkUe+JP3shX75ves94cGbWh6XFMae417jXseygaJm4qamxrkwcTe4MFYOSM0WfsDHsT8MhX3C/fuHVpPOSlg0Oce9yPzB/ce89D3HfcOOdH7DXN0iIV3H/2JVfgD+6wkBiA9TfsAJYMd91L7IAf7GNIz9xoe99qTFcxcCvthBg75Wfd19xYVSVq40dO/uNUf8TIGMWBWRR74XvewFfux96T4ZC0G94wK94X3QhXt92r7oPu2B7msqcTbGrf3qh33N/h+/AJvHRz6pFX4A/ukJAcgPU77ACXRRvT3AsrS9xgf4PdO+y/3rx34YPd19zcVSVq40tO/t9Uf8TMGMGBWRR75K/ifFffHCgc1SWpBgR/7TfeBBvjy/Qg6Hf73VfgD+4EkBiA9TfsBJtFG9PcCytH3GB/g91EHl1+tbrF8CPYd+Q35ZvdNIh38FYAV+xNA4PcdH46Lj48a9xT3uh35ZfdwHfsGNUf7BocfMXo/Ty4b+jb31h0c+vBV98dAB7QK+z/m+wP3Nu7XutSyHkeoz2LgnR0GDvjh9+b3QhX7EDzd9yAfjouPjxr3FPe6Hfgj948KhYQa+w2FRjX7DRv4axYvCvgy99YdHPscVffHQAe0CvtB7/sB9zX3BtbH5a4eLbHe900dBw73x/ij90IVLwr3pvtC90sd/l5V+HtAB/sUQGX7BB45jCyu9BpPBoz7G/cDWPWGCPs8jer7APc69w4K9yX5RcU6Hf28Vfju9ysKaZdwnXYfh3x7iXcbQjyu8R9PBvsbjPRV6xu+rJeWoh+PiY+JkIkI9h360hwEjBYsChz5LFUcBKn7fQfKb1C9KRs2RGFEZx/HbVWuRBv7B1s7QnoqHeC6TTeSHoqLiIka9xIdUB0OHAYvHAV2RB0c9ztVHASp+30Hym9QvSkbNkRhRGcfx21VrkQb+wdbO0J6Kh3guk03kh6Ki4iJ94gK+nYcBZAWZwoc+YdV+mH7GQb7C05qRYce53hJxisb+wdbO0J6Kh3guVJCkh77Egf7Kesz9yX3BdXO3a4eiJiZipkb3b60v6Uf/Dj7SmUK96T3IOEdDvnAHATaFmcKHPo9VfqL+7AGVnlURR5Oine0fbUI7G1o1vsGG/sDXjMdttvp5Z9OR58eRqGzVOgb9rbX5R/3rvdUBw6DCg6DCvwb9zcKDvly+pe8FfdbHU41HRz6jFX66/sSawb7BS9jO1sf0mxSsD4b+wdbO0J6Kh3kuU77AY8eioSLhIP3lAr5iPqV9U0dVQTOHRz6clX6kvsbBzaDQ2BiRwjYbU+yOxv7AlwzHbnb6uS7TfsCkB6Fi4aFGvsp9wYm9yoeDvkI+mJ+FVUK9zz3SPcmwRz69VX6z/fHHQZHRXhSbx+5a1ujURv7A107Q3sf7B3q1bhhP5seiwdBn9dx1RudCvla+rWXFV0K5Pc+91LBHPqaVfr/+xBeBvsIKWAyWh/ZbE+zPRv7AlwzHbnb6ua9Q/sTjB6Ki4mJGokHigeLB/s495kdHg75khwE6/dAChz6a1UcBMn3pAokNm5MWR/pc0a6OBv7A1szHbrb6+PESvsWgx6JfYp7exrUCh73dgoGDvnMHATmFmcK92sK9y0Km46dG9e3VEb7D/sCcCUfVAbbdk27MBv7BVozHbvb7dq2XEyUHomLiIga+znwIvc89+kdpR4OHAUXHAX090KTCv1CVfdeQAf7FEFl+wUeewaKf4p9fhqLB/ssOiv7Hvsj9y0KnI6cG9e3VEb7D/sCcCUfVAbbdk27MBv7BVozHbvb7dq2XEyUHomLiIga+zvxJPdB9wvgyvKxHi2x3VP3DBv3Sgof+4L3mgr5QRwEuIAVWAoc+rxVHARs96YKJTFlPl8fxm1Ur0Mb+wRbMx262+vfuE47kB6Gi4aF95Qd+UH68fczFXcdHPq9VRwEbPemCiUxZT5fH8ZtVK9DG/sEWzMdutvr37hOO5AehouGhRr3Vx0e+0L7OAXSBg75Uvpi93IK93H7mhUrHRz6q1X5nPtPB6ptYZ1ZG/sDXDpDfCodzbZjUZ4e+wac0EP3DvcZCgcO+qP6WcAKHPlZVfmd+1AHq21hnVgb+wNcOkN8Kh3PtmJPnR77BZzNRfcI94Ed+ZgcBLMWyVwKHPpmVRwE0Pt4BvdKHSw7XTxjH8hsVK9DG/sEWjpDfCod4LlLN5IeiouIiRrxHR77UEilCvnp+jr3OhX3GB2MVBX3AeoKeIiFfB7+KVX6OwaPl5eOmhvTqVM1HyclB05Xd2VqH/V0Trw1G/sFWztCeyod5rlI+yEeiweJBybQRvUeDvoAHAUZ+FfXCvwG/JwtCvhG+zoVKx0c+f1V+sn38x1OV3dlah/1dE68NRv7BVs7QnsqHea5SPshHosHiQcm9wodBw75vfqZ90K3HRz6QFX6cTEH+wlMYSqFHst3UsA0G/sJWTtCeh9ICvcOvNnv2rJVYJQeiIuJiBr7Neoh91cKBw76YxwFAtoVTQoc+ZFVHAUsux06TWVLaR/KblOyQBv7BVs7QnsqHeK6STWQHoWLhoUa+x7aIvcu9w8dHiYKDhwF2hwGtfdCtx0c95BVHAaNMQf7CUxhKoUey3dSwDQb+wlZO0J6H0YKOk1lS2kfym5TskAb+wVbO0J7Kh3iukk1kB6Fi4aFGvse2iL3LvcPHR4oCuzo9yQdDvmL+oP3MLIKHPpyVRwEw3AKL0BfQGUfyGxTr0Mb+wRbO0J7Kh3guUw4kx6Ki4mJGvskYAocBNAcBip+FVUK9zz3SPcmwRz4mVUcBpePHfzN9z33cAqKVxX3Pdf3D/cB9wJC9xD7QCc6XkBkH8hsU7BCG/sEWztCeyod4LpMOJIeiouJiRr7JPAv9yUeDvn/+tL44IcdHPoCVfqwKQdhClgG4HlNvzEb+wJcO0J8H0gK9w652engtlBCHoz7LF4dDvjyHAR+xTodHPsLVfq798cKBkRRdFp0H7NvYaNVGyJfOkN9H0gK9w243OrCr2tdnx6RU7JotnoI9h34+PlQ900iHfwPbvcfHfcTwC01jB+KhIuEhBqLBz+DVTb7Chv5o/swFSsdHPsGVfrB93AdQk1vWWcf2G5GzPsKG/shJPc/HfPNv86tH1Gsy2jZ95EdDvi+99X3MNEd96X7QhUrHRz7P1X5cSoH+wxKYSeHHtpxQs/7Dhv7IST3Px33Bs7I1agf96wdBw75aPcOHflRPhVNChz6lVX6vLsdOUxkSWof0mtHw/sCG/shJPc/He/MvMquHzmr01T3A90K+If3Dh34PhYkPM/3B/cD3c/v9xX3tgr7FR73Ex0c+3ZV+lNwCi4+XT9nH89pSMEgG/shJPc/HfTPwc+sHz6v117pG/AdDvfz99T3MRUjPM73B/cD2s/t4LtaT6Yfk1ewarV6Z3lvcXdrCGJtWGo/G/jSKDod/olV+bv3xwoGQ1F0V3Qfv2ZSsDgb+xkp978d7y/3HsO5mqKuH4qDi4OCGvsN2Sn3KvcV1Nrcmx4OWgoOWgr4hEsVJh0O8grYx7e998EdTvBbHvtl+zMFgtIH91D3JPfD+yQFYwcmUEMwUGWww7KYpKOfHosHm5kFkAdjn/us+38FhdEH9zf3IQWGfYl7eRpHv1jU2ca2zKUeDvmVSgr3ePlKFfcX+wYG0x37JPcWQPdS98EKHvfqHf39B/g+/SQ9Cg741vjr+UIV99v7Emz3lQr7KPcEJfcu9zH09PcuH001Hfz5Bvu9/YA7Cvj7+Ov5QhX4UftP+y8G+zv7CvehHam/dQb7F0LT9w/3GeTJ9xsf9yz8UG8d/R4G+739gDsK+Rr3sfgxFTq0ZL2O1gjIjb3C1Rvcuk9MQmFdUF8fgIIF+5b7YxXUBvdT9yf3iPsRBVWtyGzWG/cA3NH3A8tvu2aoH/dzHegd/WxV+KD7SPvkBvsJNUT7CoGMgYyBH/tB4wXZxvc0CjHES+9XHvtp+zkF+Tp79+0Kw1M9PVNUOx8O+VH5jPc6FUla998dYlZEHvgG97H3lh38tRb3s/t/JQb3Lx314gr3Wvwibx39ggf7r/2AOwr5JPjS+UIV931ABvsUQGX7BR58Bop9iXt9Gvs/6vsD9zz3WQroHf1gB/fC/MoVLwr80vtKOwr5y/r12hVNCv3sVfip+x8HK4BfQXxICDMK2yL3LZaWNQrpuT8tIFA9+waDgIyMgR5SB4qXloqVG/3HNDsK8grXyLi898EdT/BaHvtl+zUFgtIH91H3JvcpRAUjhjpJJhou0kjy2Mayx6ce+yhaFT5VutTXyL3iq6eFgqMfunUFYwcpUkQwHg75YEoK+JoWIAr32ZMVbx37YQYO+ar5+PlC9+8dJztSK3Af+9n3pQX5Yf1CFSwKHPpU1R33vArWxKq1rB4gotxM9Bvsyb7Lpx9QHfwS7PdRHQ75qvn4+UL37x0nO1IrcB/72felBflh/UIVbQoc+lTVHfe8CtfDqrOtHiWj3U7xG5KSi4yRH+Ad/Luu91Ed+BIqgh0O+EX30feWrx33YvuQFU41Hf7d9yod0MClsK4e+xab9jT3IRv3Wx0O+qIcBb0WySsdHPlb9yod0MClsK4e+xaa8TT3HRvpHRz7gNCvHfiW/Er3IR34RffR95avHeL9KxXQBvsr9zEF9w+j2ev3GhpONR3+3fcqHdDApbCuHpj7Adg99wB0+yz7MxjPBvck9ywFjgYO+Dv5SPdeHfwL+A68HffL+5wFg4yEjIUeXntZXjob+Bj30RX7EC1XJnYf+8/3nAX5BvsDBvdd+0wV92Qd/tL3Kh3ex7G7qx6hYLJqwHgI90gKDvhg+Wr1TR38LfcsvB330fuiBVqCV1MxG/gN+ED3Vh340/0OFc4d/vfVHfe8CtHApq+tHvsVnPY29x4bDvqr+Wr1TR38LfcsvB330fuiBVqCV1MxG/gN+ED3Vh0cBIT8xPcIHRz5UfcqHdHApq+tHvsVnPY29x4b99kKH/c7Hfhg99H3lrwd99H7ogVagldTMRv4LfssTR1r+Nj3Vh35Zv2qFdAG+y/3NgX3C6Lg6PcUGvciJer7GJge96MK/vfVHfe8CtHApq+tHpr7Ats99wB2+y77NffyHfjsjAr3I/c4FfvC95wF98IG90r8ShVcHfjq+EoVwRz7Evc8Hfdo/UL3mgr6fIwK9yP3OBX7wvecBffCBvdK/EoVXB343EGTChz5gvc8HffhQAfdHQcOzAr3/vg8FcH+vccd5cm7wqYeTa3HZuL3tR3MCvcy+5oVyvlC9yHB/r1V9+Qd0in3H+bIu8OnHk6sx2fikgoO+XaMCvcd91MVg4uEjIQe+733lwX3vAb3bfw8FcQKHPqGxx3kyLrBpx5OrMRn3veBHfi++mv4V9cK/Ab8nC0K+8PnFfsCWtT3Cx/3SQf3xPuhiYaIhYmEGWF7XF9AG/fN91UVUFl4aGof+973tQX40/t/Bvhi938VwRz7P8cdx7ugqqweNJbNUusb5wr6jvj6938d+8TkFfsCWtT3Cx/3SQf3xPuhiYaJhYiEGWJ6XV5AG/fO91gVT1h4Zmof+933tAX41Pt8BveeFksd+DL31h0c+W/HHce7oautHjSWzlPqG/cCytH3GB/g90QH+z/p+wP3PfcF928dy/fdCviP98r3lhX7AlrU9wsf90kH98L7nwWLB1qCW1I1G/fv9/UV+xRAZfsFHnwGioSKhIMa+8H3mwX4jgbQ/JSTChz7b8cd28SwuqseI63gS/cTjQrL990K+FX5TPcwIgr8FvEV+wJa1PcLH/dJB/fB+54FiYuJihpagFxWNxv4zfhAFXAKITZQK28f+8v3owX6NxbB/uvHHdTAqrSsHiGk4Ur3BBvwHQ74KowK9/8W9+gK90sH99P7oAVNd1ZeOhv7d/dWFYOLgoyEHvu895YF97sG+Br7mRWGi4aHGvvc96cF99wG92AWwf7Bxx3kybrBpx5Lrchm4xvhxbDGqh/7v/eaCvou+nwWLAoc+dBV+B0pB0kK+FQHioOLg4Ma9xIdUB38KPg/9wQdDvou+nwWbQoc+dBV+B0pB0kK+FQHioOLg4Ma9+AKHuAd/NH4AfcEHfgo/D+CHQ4cBVr6uWkdHPta+ET3BB0cBijtFcEc+BBV+B0pB0kK+FQHioOLg4Ma9xId9y4d+dUcBPAWyflC9yLBHPonVfgd+wEG+wBNRfsIHin7VF4dmU2ABzVbUDozYs3mHvcp+Fb7CQf7Keoz9yX3BdbO3K4eiZiYipkb3r+1wKQf+ylfFTdHw+/q0cPd9Lc5Q0VfOCIf/HH3ZRX7tAa5rarG3Br3Aff3+xkH+w9HcD8e92H78RX7A0fR8x/3E44H69649yYf9yD4Nvt6B8ByWLU3G/sENDz7DjG1SstrH1FwVlgzGw75j/my91gVQF7E3R/3O0s0+5v3zx35kveLCh7724MVLh34Y2/3Ih33ZvxT6B0c+m4/Cg741vg/+OCoChz7J+wK+P33eQr5APekCig5cFJZH/vKBrmtqcXcGrf3qh33NPhxB31rg2ZfGtQKHvd2CmcKHPsA7Ar6s/d5Cvmf9x4K+wAbKD9oQ2Mf+7KYHfnk/DKRCv24mRUuHfhmB4Rxh21pGtQKHpQdZwoc+Uo/Cg742vhr91AVLh34gQfZo9G13Rvo0fefHfu4yCsdHPskPwpf+CQV7fjd+5kHwWlKwiEbKj9gP2Yf+4qYHQ76ePd5Cvp895MKKDlwUlkf+8qYHfnF/ESyChz5hVX4HSkHSQr4cQd9a4NmX/cBHfkx+VT4NhX78Qa3rafE2hrt93QHcm19Y1safI15jnwexQaImomamhrYur/a17dURvsS+wJxJR74Hvw2FfeyCvsL+yVD3/cUjPfqCqb3Zwr3JPJF2PsC970d/Y71CplNgAc1W1A6M2LN5h73NvhVB/s0jvAl9zkb9+kdpB8OHAR9+VT4OBX78ga3rajE2hrr93QHcm19Y1safI15jnweYwr3P/vRbAr3vR39jlX4HSsG+wBNR/sIHin7Y14dmU2ABzVbUDozYs3mHvc5+FUH+zbxJPdBHviC0hX7Gz1+Cg74pfd5Cvid+wo5B/sKJlkkaB/7mZgd+Qb7rBVQBiI1YEUhSM/09wzox/cFHveCCvcsBozBBRz7V1X4HSkGSQr4VgeKgouBgfdWCsoHDvlW+a/3TSId/AT4JxXt+Vj3cB07SmpRaR/7oga5ranF3Bq396od9zT4VgeIfYl7e4cKbx0c+qfsCvjS+D/44IQdKqPOUPcD97MKHPsrPwoO+NL4P/jghB0so85R9wOSCvvDZwoc+ys/Cg76Ovd5Cvdr+4EHf4uAjIAe+7iYHfhE+9owHfwYQRUuHfiIByqizFD1G9nCr8SpHzQdHPnDPwoO+PT6pBbJXAoc+wlV+B0pBkkK+FQHioOLgoLYHfw9+EwV7fj5+3gH90od+wAxTidsH/uWmB0O+VccBHD4V9cK/Ab8nC0K++f4OhXt+Fj3oh37wwa5ranF3Bq396od9zT4Xwd/dIRvbBom7x0c+qY/Cg4cBJP5k/d/Hfvo+DcV7fhZ9+0d+8CYHflj+xoVSx3+LJkVLh34XgeAdIVxba0Kbx0c+NY/Cg75IPj7+DOcChz63T8KDvnC+lz4HxXTe1vc+wAbLkZZOG8f+5OYHe35Tqgd/If7YxUuHfhQB4l+in19Gvse2iL3LvcPHR4mCk0KHPo7PwoO+Nz50/cwIgr8KPhEFe3433AKITdQK24f+4qYHfmq7RXBHPsiVfgdKQdJCvhIB4qEi4ODGvskYAr5aflP+DMV+/CYHe34Vi8H+wFNRfsIHveG90EV7fdp+577tge5rKrD2hq296od9zWhj/ho/ARvHRz6lD8KmU2ABzVbUDozYs3mHvc1+Fb7MQf7Essx9xX3C9LY9wweDsP3/aYVXXGvvR/3WQePoKONpRumpIiGoB/7VwdZcGdeHnf7OxX7FZA76vcbGuWl2uWtHvtJB0OzVtPUssDTHvdGB9dopj8xGvsdvPcdB/clQvcO+1RbYYR+aB5hm2+ntve8Hfew90X3HcH9aVX4qPsX+4kGMklnOk+0Zbl3Hz9dZzv3zQr5Cvc6+DgVzcOiyh73TvdF+NP3mx0G+wQ3SvsBgx/7W/fKHfiw+38iHfwj+7P3Zh33Ax/3XQYvnNhR8J0d9yHBHPsAVfhK+xb7Iwb3YAr5BPc6+DgVzcOiyh73TvdF99n7fyQGMkZgP3cf+2P3yh34mfuS7h39fv2o92Yd9wIf91wGJ+8dHPr5VfhK98cKB/dgCver+LNSFS1Qx98fjYuNjBrlj8+u4xrxMbMkXmODfWgeYJtuqLf3vB33evdF92X8pAb7DlMu+wYe90AzFcT50/chwf5CVfhw+xf7UgYySWc6TbVlu3YfQVtiNiQa+z33BfsZ91SHHroH+zCRLvb3JRr3Fdfy9ybO0nRAS1dwLh6BBoqAioCAGvsAzjb3FubHudOqHg7k+Af7ThW3B/spLvH3G/cJzvT3PfLJWkygH16BdmiEagiJBrKCb7VOG0dgXEJAtlThkZGLjJIfrweKhYaLhRtQbbLBu6WwurumYk4fhLKSB8qmsr24pWZaVmxkUIaGi4yGHmcHipGRi5Eb4bfC1s1nuFOTH+N1Ps37GfeSCvfH90X3IcH9hFX4wPsX+6H3nh37MvcB+xP3TI0eDrT4RIUVUGGxy8q5scKKH9OKqlZbGl5sVEMeMPtIFbkH+xSQO+r3Gxr3DNTu9yP0zkw5lx53rmamVIo/ik5YjDkIOcRV2sayqrGdHvsKuvduB/cSOPX7MmNnhH9rHmOYbKe497wd94v3Rfcbwf1CVfiD+xf7ZAYySWc6TbVmuXcfQ11iPPfNCvot98X3Nnsd+EuXFfsRQNT3DYEfipeImImWCPcYj9jD9x0a4Pdt3B33pvtC90sdHPnQVfrhQAf7D0ZjJYge0WZFtTcb+wNIST1wH8Yd924KOqHWSfcAG+fWvdqsH0K11mDx9w4Kox2YB/ceQPcD+6b3uQoeDvzx+0H5axXG7QbcuLnPzLJfVR6+Bt6PTs0oGyhETvsIih//AKc4Uv//8OZmFf8AFzXD/wARMKT/ABEwpP8AFzXD/wAWWZr//+7PXP8AETCk///oyj3//+jKPf//7s9c///uz1z//+mmZv//6Mo9/wARMKT//+7PXP8AFzXDHw788fcM+d2NHfzxXvl4FbjLBtiss7+8qWZWih7EBt+NW8U3GzZZTCofDvzxXvl4FbjgBty4uc/MsV9VjB69Bt6PUc0rGytJTvsIH/c0gRWcmJecnX6Xenl+f3l6mH+dHw5z9zPmFdId+zPaBuWxvdTNs1xRHsAG6YxOySob+wdUPvsFHzv8UVX4TveoCgftCgb4L/oBoR2pHbQH9wZg5/sX+xVcL/sGHvhmw40dqR3cB8insr67qGpTiB7EBuaQWr1BG05nal18H8N0W7A4G/sVXC/7Bh8OqR3ZB9Cus8G/q2lWih6/Bt6RWcM7G0xiaVl7H8NzW685G/sVXC/7Bh/4SpahHaMdmAf3HkD3A/um97kKHvnF340dox3cB8insr67qGpTiB7EBuaQWr1BG0RmXlGCH9pjLcD7Uhv3uQofDqMd2QfQrrPBv6tpVooevwbekVnDOxtCYF5Mgh/ZYi3A+1Eb97kKH/mpsqEd90kd9xXxjR388ftB+XQVyAZ+pPcaCvCvf/tD9wIfDvzx+wT5dBV9pfcgHfCvf/tD9wIf9yHFoR33FQr3Fe+NHfzx+zv5dRXCBomPiJCJjwjkHfWphif3DB8O/PH7O/l1FcIGh5IFgKOEpKUa1vdYHd1XwzYoX0ZBHokH91MhXpT7AfdLCvcZxKEd90MW+UL3IcH7I+cd+yBV9yH9Qgb3F/najR334QqAoPcaCu+vf/s/9wAf+yBV9yH9QgYO9+EKf6H3IB3vr3/7P/cAH/sgVfch/UIG9yP5rqEd9+MK9637I2KX+xHNCvcb+dmNHffjCoyIkImPHuQd9KmGKvcJH/sjVfch/UIGDvfjComPBYCjhKSlGtb3WB3dV8M2KF9GQR6JB/dTIV6U+wHNCvcf+a6hHfzx+yP5yKcK9wQWZwr77VX3IQar9xqnCvd29wYd+DQG3b9gP0JaY0N6do6Peh9XB4edoIifG/cAzsnw9wJFy/sSH/trBrixpMfaGu74UsH+JAcO9yT3Bh33wQbsw1oxHyjH7wf3DULR+xse+wEGuLGkx9oa7vfpwf27Bw549+v7/BX3E9jG7PBHxPsf+xVG0+fixNb3APcFtztFH8gG61D1+zL31R14HvccCvsN5Cv3QPG8ZUdIUGUyJjq58ZEeUgb7G4X2S/cYGw5499T78xW7B4p+f4qAG01dscnMvrbd9tY8+xsfaMGmB/c4NfcB+yoeiwf7AYxR0+Ya4sTW9wD3Bbg7RIoeyAbrjE/2+zIb99UdeB/3HAo3tEPcaR5acW5cThor0FbkmZeMjZgeDnT3yJcV9yDwzfcnjB9UBvsCO1UjLUq119jMqNEeyLxQBjlTr8fSyqLSH/dI9zb3KMH9FlX4RvsH+yIGLDpmKTzRYsOFH4gHW4c9aC0aIedT9xUeDvdO6h34P/1FFfeTHaGM9wcK98b7OgX7KActfldJOBr7CeVd6KarkJKfHg7H+Bb7UxW6B/szKvH3HfcJzvP3PPXEZEihH41zboxgGyxbV0c30mbSsKWPkp8ftAeEdHGHchtWWqTDuKmwzh/3Iwbzfz3c+yf3kgr3wPdF9wvB/WdV+Lj7F/uZ954d+zX3BPsV91iNHg5ZHfc29x6r9fP3H1/7Kh57yZwH90T7LNH7Lfst+y1R+1GKVwpZHfc09xuu9xr3GPcfXPspHnvJnQf3Qvst1PtI+0j7Kk/7UIlXClkd9zP3GrD3Nfc09x5a+ykefMqbB/dD+y3W+2T7Y/spTftPiVcKWR33MfcXs/dQ91H3Hlf7KB58ypwH90H7Ldn7gPt/+yZK+02JVwpZHfcv9xW192v3bPcfVfsmHnzKmwf3QPst2/uc+5n7JUn7TIlXClkd9y33E7j3h/eH9x9S+yUefMmbB/dA+yzd+7f7tfsjR/tLiVcKWR33K/cRu/ei96T3HlD7JR5+9+sdmgf3P/st4PvS+8/7I0T7SYlXClkd9yr3EL33vPe/9x9N+yMefgfJigWaB/c++yri+/D76/sgQvtIiVcKWR33KPcNwPfY99v3H0r7Ix5/9+sdmgf3Pfss5fwM/AT7HkH7SIhXClkd9yf3C8L38/f49x5H+yEef/frHZkH9z37LOf8KPwf+xw++0aIVwpZHfcmjvcKxPgKG/gU9x9E+yAff/frHZoH9zv7K+r8Rfw7+xo8+0WIVwpZHfckjvcJx/gkG/gw9x9B+x8fgPfrHZgH9zv7LO38X/xW+xk6+0SIVwpZHfcjjvcGyPhAG/hL9x9A+x4ff8uYB/c6+yzu/Hv8b/sZOftDiFcKWR33IY73B8v4WBv4Z/cfPfseH4EHy4oFlwf3O/ss8PyW/Iv7Fzf7QohXClkd9yCO9wXN+HUb+IL3IDr7HB+BB8mKBZcH9zj7K/T8s/ym+xU1+0GIVwpZHfcej/cE0PiNG/if9x84+xsfgMqXB/c3+yv2/M/8v/sVMvs/iFcKWR33HI/3AdP4qRv4u/cfNPsaH4L36x2WB/c4+yv3Afzr/Nr7EjH7P4dXClkd9xyP9wHU+MIb+Nb3IDL7Gh+D9+sdlgf3Nvsr9wT9B/z0+xEv+z6HVwpZHfcaj/cA1/jdG/jx9yEv+xgfgvfrHZcH9zT7K/cH/SP9D/sQLPs8h1cKWR33GJD22vj1G/kP9x8t+xkfhAfLigWVB/c1+yv3Cf0//Sj7ECr7O4dXClkd9xiQ9dr5EBv5KfchK/sXH4QHyokFlQf3NPsr9wv9Wv1F+w0q+zuHVwpZHfcWkPPd+Ssb+UX3ISf7FR+EB8mKBZUH9zL7KvcO/Xb9X/sMJ/s5h1cKWR33FZD03/lDG/li9yAl+xUfhQfLiQWUB/cz+yv3EP2S/Xf7DSX7OIZXClkd9xSQ8+H5XRv5ffchIvsTH4T36x2UB/cy+yr3Ev2u/ZL7CyP7N4ZXCvvc9fdNFcYGlPiWBT8G5v0gFfc7CvvpuvjuFbwGlfdVBUYG9xf7VRW8BpT3VQVGBg73Y/iE96gV+3IGsvdNBfdyBin8YRXOBrn3agX3MMn7Iway900F9zPJ+yX34B37cvfgHfs+TfcwBmT7TQX7QE33MwZd+2oFzga592oF93IGDoP3nDQVt9sG9x+RzOrlGvcfI6knpR73nwfVf7BWkl8I1QaA5EjQ+waWCOBfNwf7E4U+PyMa+xzzbu9wHvupBzaXZciGwAhABpAn2kL3C4AI90b3TxVGXVIzhh73ngfUdchuNxr7y/frFdvDtNiPHvuVB0KgT6jdGg73Dbb4yxUzx1Pb3MfD4+JPwzo7T1M0Hvcg7RW9rWhMTGlnWVlqr8rKrK69H079LRXSBvgu+VAFRQb7FvzLFTPHU9vbx8Pj40/DOztPUzMe9yDtFb2saExMamhZWWmuysqtrr0fDvcG+HP4vxXnj0XKJxsgRk0zV59hulgf+wBhUkApGvsU7Df3Ie3VrtXPHuoqBeYG+yb3J52knaedqhnX9xcFQAZLIH51f3d+eRn7evd9BVu+crC4GsC0scnBuWlMih77GPyOFShGzOPYt8Pqrh/3c/t2BUpTUG08Gw78Xrz47hW8Bpf3VQVCBg77TfgG+04Vkgf7HfciRPdZ92Ua92TS92L3J/ckHpJCB/sa+xM8+2L7fBr7fNr7XfcP+w4eDvtNvftOFZIH9x33ItL3WfdlGvdkRPdi+yf3JB6S1Af3GvsT2vti+3wa+3w8+137D/sOHg77HPee+XAVUAaX+zH7FuJuV/chTPsiS6lW9xXigPsxBcUGf/cx9xU1qL/7Isv3IctvvvsVNAUOvfe7+QUV+3X7ck/3cvt1zPd193PH+3P3dQcO/ESD+yb3Wh0ONan3lR38O/ci94cKDvegCtUK97QK5QqxCvcxHc0drgr3YR2mCrId/Dj3IveHCvhHBPc7CvwO9zv4dxVnHfsr/Qn3Wh0OJvcz+AYV95D3fAUyBvuP+3z3j/t8BeQGDtLe94MV+JLG/JIG9yQE+JLH/JIGDvsF2fceFeQG94/3fPuP93wFMgb3kPt8BQ4urfiS94QdBo/7NAXHBo73AgX3iB33XvxjFfc7Cvgh+WSFFfcY1vcx9yz3Wfsg9xz7cPuy+2L7b/ut+1/3IvsU92fOzJejxh+AvAV0WVCAUxv7UvsM8/dLjB/3ivdI91j3iPdW9wn7APtG+wVa+yMxWH20xpUevve3BU4GfkEFw3dcqUgb+yQp+xr7JyPGSPHTz7DJtB9Qjqtjzhs094gV+wR/QT4xGz9jvdf3AM73APcC4rFGN4EfDl8KdsXaHYP4cvdWFTdPWCYe+zv3pfc4Bu/LVTcfevfWFT1WWywe+zf3jvc0BvC9WkAf4vvdFeNM0z2ZHs6exb7nGu1F2fsnHvt//U/3hgb3J9rd9B8OVgoO9R0OUwoO+wTbFtH31veYxfuY95n3yMX8DgYO90X4HvlXUx0O1filFtH5T0X7zvwP985F/U/R99v4DwYO9wsdDiH34fc+FVFuUjo4bMbRih5EBvsK1EL3BfcC0dL1HvilRQcOZvhZFvdMHftM2/lPFfdFCg73gdsW0fi5BveK/LkFvgb3ivi7Bfy70flGQAf7n/zq+5/46gVBBg7c+K35T6sKDiUdDmL3Kvf6Ffeu9yEH9wq5VzE1XVX7Ch/3gPcgFfcHQeH7Nh77Z/1P0fe+9yEG9zjT4vcFHw73TPcM9/IV90v3C/cE9y/3L/cL+wT7S/tL+wv7Bfsv+y/7C/cF90se+QAW92X7Kfco+1n7WPsq+yj7Zftm9yr7J/dYsK+Qla0e9zD7JQXpBvtP90AF9sXQ9wb3IxoOiR0OaviZ90xOHSCP5zv3IBv3KNjr6h8ONqn5FfdhCg42Cg7B993XFft5+QMFPwb3nf1PBdsG9535TwVBBg5lHQ53+GYW2Qb7aPfx92n38gU9Bvs/+7f7Rfe3BT0G92f77/tn+/QF2Qb3Pfe4BQ5/HQ6/HQ77gvcL+04V9y7GM/p/48X7LgYOifdA+kAVRAb32v7mBdAGDvuC94z7ThX7Lsbj+n8zxfcuBg6M+IT3PxXUBvt++JsFTAb7fvybBdMG91b4QwUO0OEnFfiRzPyRBg777aP5V24KDicKDtH3Kfg9FffPRv140PcMB0Ss1lL3bR37AvcB+yogP1JDaR/4Kvsr9wcdZAoOvR33KvcA18XTqx77DtH5eEX7zAfTaDnBKZIdIR0O+6ztFtH4e/cTxvsT90MK9/IKXgoOp9sW0fe+BvcZ0svx781N+w0e+8zQ99QH9zQq1/sNOENnSGge97NFBw73GR2u8vczHfwH9wz5HRWnoaGpqXWgb290dm1tonWnH2ckFf00B1Z2eFceZU+8BuO3tOMf+TcHDvsR2xb3PAr8DNsW940d+DX6AhbQ99QG9zQr1/sNNDteMm0e5mo9tjAbPkZoRmgf6UX8ttH3vAf3GdDN7+zLTfsNHvvM0Pe8B/cZ0c3u7MpN+w0eDqf4fRaiHQ4tHQ7R9yn4PhX3DEb9uND4DgdHq9dP920d+wP3Afsp+wE/UEZrH/gq+yz3Bx29Hfcp9wHZx8+pHvwO0fm4RfsMB9BtPsb7AJId+4f3KvfF5goOLPhe9yVZCieU4k33EBv3BdjM4x8O+43v9ygV+wG+ZOoeywo8HSvRBw5Rmvi2Ffdv/LYF2gb3b/i2BUEG+0z8cvtM+HIFDmYKDvsl+AIW2gb7RPeo90L3ogVCBvsb+237H/dtBTwG90L7pftE+6UF1Qb3HPdwBQ6CCg64HQ77VPdT93cVPHUlMxopxVziHr3IZQZSa6TLH92h89sa0WrCPJ0ejQfanazC0dx18t0ay6ukxB6xyFkGNFFcKR8zoSY7Glp2Wjd4HlIH33egWloaDvvs6/mqFf4O0foOBw77VPdy93cVPKElMxopUVw0HlnIsQbEq6TLH91189sa0azC2p0ejQc8nWrC0dyh8t0ay2ukUh5lyL0G4sVcKR8zdSY7GlqgWt94HlIHN3d2WloaDvsKsfeVFdIKDvvfDvvc9fgHFcYGlPyWBT8G5vkgFW51dW9udaGoqKGiqKehdG4eDrD4uPdUFUkGP3tPWzAbJDnN9xb3Ft3O8ubHWz+bH80Gfe881vsOkQjrXysH+yGANib7Ihr7IeAm9yGAHia37wf3DpLa1pnvCA6C9wP4lRVOm16aYB4rWfcGBpNxkXFuGjRoWlpTHpdhBfhDxvwEBr3ApMLQGqaFpYSlHvdFvftWBnu4errBGvPOttbovk45kB7LBvcChEfn+x4b+xA3OvsOHw48+Aj4DRU4Vl1ST1u53t27u8fFv1s5HsH7XRWsrE/HBaCol6+2GrZ+sHaoHsjIaqxPTgWgbmiXZBtkZ392bx9OyGpqyE4Fdm9/ZWAaYJZmoG8eT0+sasbGBXanr3+zG7Kvl6GoHw5395j3pBVc+1xW91z7QNH3QPdcwPtcugekuvdDjAW/+ygH90D32wU8BvtJ+//7Sff/BTwG90H72wX7J1cG90OKBQ777Ov3ohX8BtH4Bgf3KgT4BkX8BgcOatn40hVAx2XQcR4kd1VGPxoi4V73EWYe9xBmsm5UGkxabUAqZMLHhB5FBiGS4k/3Cxv3D9LO3tVRsUalH/GhwM7WGvU1t/sQsB77EbFkqMMayb2p1+uzUVKQHtEG9YQ2xvsLG/sPQkk5H/gJ+8QVSVJRIiJMwdHNxcX088pXQx4O+7bc+QMpHQ73U8D38hX7Y/cg+yf3Yfdh9yD3J/dj92P7IPcm+2H7Yfsg+yb7Yx75Ihb7UPsL+xj7UvtS+wv3GPdQ91H3C/cX91L3UvcL+xf7UR4i3hVKBsx2Va1LGzhFTfsM+wzRTt7Ova3LoR/MBi5xO1IpG/sKKeD3Kfcn7eH3Cu3bVSqlHw77NPde9+8Vz7usuZ4fQsT38lJBB7l3XK1FGyxFQiAh0T/sH5f30RXQwVg2NlVYRklVvuHgwb3NHw77PvcF97v3Th3P90P3Th0Oubj4CRX4gfsj0Pdc/MYGDjWp95UdJPeQ+TYV7MtFKipLRSopS9Hs7MvR7R/8AwT3B93g9wf3Bznh+wf7CDk1+wf7B9029wgf4veIFbNvpF8eLvtrtuCiBsI2voxP4QWskZ+irRpApRWdmYN4d32DeR9cwgYO+26j+Rr3Ax37Z6j4nhUizkXv7dLR9PVF0CkpRUYhHveqFjZaXU1LXbng4Lu6ycq7XDYeDr/3vPkIFftQ+3JQ93L7Z/tyT/iRx/ty92f3csb7cvdQBw77r6z47vcICvuuqvj6yh379KP32R0OrPjC+LYVRfu+BvsZRksoJkXM9xwe97pG/bjQ9+YHR6rIdccb3NSz3qwf+wXRBw5i95z5RhX7ND81+wf7BtU19zYfk/u1yvkO4f0OyvlGBg78Ovck9+8V9zsK++j3BZIVWvsLuQaeHQ78Ot739Pe4HQ77RK74oxX7AddC8vHa1PcB9wI+0yQlPUP7Ah73wRYzUlxKSVW64+TCuszNw1wyHg77Pve39wwV904KKBb3TgoOiMcWzgb4AvlQBUkG5vd1Cvt4FvcO904F+04H/AP3hve4HQ64vxbOBvf8+VAFSAb71Pvw97gd95f8LvcICtb3JhbNBvgN+VAFSQba93UK+3cW9w73TgX7Tgf8jviMyh0k+G2v94YdBof3NAVPBoj7AgX3hgr7XvhjFW6hdaeooaGoqHWibm91dG4eDl8K+6P5QW4K9479RtodXwr7o/kAUQq4/UbaHV8KcvkTVB2P/KDaHV8K+7b43CkK96H8otodXwr7f/jtKR3H/LPaHV8K+zP5BxVrcaOwsaWiq6yldGVmcXNqH/c1BFRcZU1NumXCxLixyclesVIf9x79btod96n4XvkU9xMK9zq79/IV+2H3Ifsk90+EHiG5B54dyQf3Hpby17n3Dgg5BjBkOVH7Cxv7LfsJ9wX3SvdL9wn3Bfct9wvdUS6yH90G9xpZ+wjZ+zAb+1b7KPsn+2YfDlMK+8n3ZW4KDlMK+8n3JFEKDlMKTPc3VB0OUwr7pfcRKR0O9wsdPfcsbgoO9wsdPeJRCg73Cx33PfVUHQ73Cx1hzykdDtAd3Pit+U+rCvwfvikKDiUd9zr4iW4KDiUd9zr4SFEKDiUd+DH4W1QdDiUd9yf4JCkKDiUd91/4NSkdDn3h+KwV9zj7Ofs5+zm5Xfc59zn3Ofs5ubj7Ofc69zf3N125+zf7N/s49zgFDvdL+Xj38hXuauBSyh7q8gVQBkhCBb5PPag0G/tY+yr7KPtlKKw2w00fLCMFxwbO1AVYx9lu4hv3Wfcp9yf3Zh/9ABb3S/cL9wT3L9HKdGG7Hvwd/EAFZL10ztwa96b7vBVETKK2Wx/4HfhABbNZokg6GvtL+wv7BfsvHg42Cvch9yxuCg42Cvch4lEKDjYK+Bf1VB0ONgr3Rc8pHQ5/Hfco4lEKDmL3KvdjFfez9yEH9wq5VDI1XVL7Ch/3gPcjFfcHQeH7Nh77IvcpRv1Q0fcq9yEG9zjT4fcGHw7HzRbR+LwG7LvH8+HAYkseLPsnbSQaT7Rr9Gge2HKoblYaUGNnR0Bdu9OFHkQG+wKV2Ej3Axv3Bc7L6NZjvCuqHy6pc5+sz/cmrPcPGuFC1Psb+ylBMvsLHg4nCvu/+EZuCg4nCvu/+AVRCg4nClf4GFQdDicK+9L34SkKDicK+5r38ikdDicK+074rZoKDviLegoOk7v3pRX7N+4i9yB/HiK5B54dxwf3EJPb1aPyCEAGO3hKXC8bIDTV9yj3KOLU9ufNWz2dH9YG9wVyMtT7HRv7LvsD+wD7QR8OIR38BPiqbgoOIR38BPhpUQoOIR37Dfh8VB0OIR373/hWKR0O9xkdPfc1bgoO9xkdPetRCg73GR33PfcHVB0O9xkdYdgpHQ6u95b5FBViB/cfu8pHrkifOxngY0KyMxv7LvsE+wH7OvtB9wH7CPc19zP3B/X3avcbXPcGKvIf9bAFtAf7HFx6mnqaeZoZQwamdaN3oHYI+4v8IBX3IeXW9wL3AOk9+yb7Iy08+wH7BDTd9ygeDqf3Kve+FfcZ0svx781N+w0e+8zQ99QH9zQp1/sQOkVoR2ge6EX8ttEHp/jyKQoOLR3m+EtuCg4tHeb4ClEKDi0d9+b4HVQdDi0d0/fmKQoOLR33E/f3KR0Oq8736RX4kcb8kQb3x/uHFWcd+EEE9zsKsPjm96UV3HHNYLse0tkFVwZcWAWxXE6gRxv7LfsMIPtCOqVItlsfRT4FwAa4vQVmusd2zhv3LvcN9wD3QR/8bxb3KuzR87y6fGuwHvu3+9MFca56vMka91z7cBVbXZqpZx/3tvfTBaZom1tOGvsqJ0UkHg48HSvRB/vx+VduCg48HSvRB/vx99kdDjwdK9EHJfkpVB0OPB0r0Qf7zPkDKR0Oggr7vutRCg7R9yn4MBX33Eb+etD4Hgc4q9dO920d+wP3Afsp+wE/TzlrH/gq+x73Bx2CCvuZ2CkdDl8K+9z5BBX358H75wb3x/0A2h0nCvv4+An3Ax1fCnT5Vz8djf0d2h0nCln4XD8dDrr3s/lGFfuT/UYF1QbI9zoF99IGxPsvBUFpbmJeGkjCcsWjpZCToR68B4J1dIZ3G2dynaylmqO7oh/GqPuS+UYF7fxm2h29Hfcp9wH3fB0hB4eJBTxnbmJekB0F+LZF+wwH0GxAxvsCKwoOVgr3hPhMUQoOZAr3J/gFUQoOVgr39fgvah1kCveY9+hqHVYK9/X4XFodZAr3mPgVWh31Hcj5fFod9xH5HPl4FT+5cgdqf3loHmcHxqyo1aOIp4SsH/09/GbPHfcq9wDXxdOrHvsO0fl4RfvMB9NoOcEpkh3QHc3bCvcq9wDXxdOrHvsO0fj+yrdM2UU9+yBf9yD7UgfTaDnBKZIdUwr8A/co9wMdIR38Pfht9wMdUwpO93s/HQ4hHfsL+MA/HQ5TCvtZ9wdqHSEd+5P4TGodJfhR+VAV/AH9UPedBlBqdGdjkB0Fxfu79533ncX7nfeZ97sHDpz3zfiCFfDnS/sTiB/8FAb3E5Piy+4b9wX9MRWGCrag4aXCy57ZGUEGQndMWi4bJTLO9xSFH/hZBo2ei5mhGvcfKfcG+zT7MfsDIPtC+zjwIvcjgB5mcH1taxpIw3LEo6WQk6EeDlMK+1n3NFodIR37k/h5Wh33Rfge+VdTHfcg9zo/HQ5eCln4XD8dDvdF+B75V1Mdjr1qHV4K+0736God90X39bodZfmLUx0O0fgJ+OcV2F2jB62YnK0erwdRam5Bc45vkWof+4j71WIdDvcLHSq+KQoO9xkdKscpCg73Cx37G+b3Ax33GR37G+/3Ax33Cx33P/dCPx0O9xkd9z/3Sz8dDvwM9y37TxWGCsWnBY35T0X9P/eACg78DPct+08VhgrFpwWN+LZF/Kb3gApl+dj3Mx33Cx2txWod9xkdDmb3hbod9xm/FfdMHfsR9126HftcvxX3PAr7TNv5TxX3RQpZ4lEKDvctHfl4RQY961EKDvtM91xXFUa19ysdxPfGCoijhaMf+1r5gxX3RQoO/AzU92kKQ78V940d+0L3n/lPFT+5cwdpfnlpHmcHxayp1KOIp4WsH/ugFvdFCg77tfdu+XgVP7lyB2p+eWkeZwfFrKjVo4mnhKwf+2/9eBX3jR37TNv5TxX3RQrJxWod/Az3B/mkFaSgn6WkdvcLCnGfd6UfaP2kFfeNHftD6vlPFfvVBzVpBVQH4a0F+9f31cL7j/e7B/cRvAXCB/sRWgX3ugcO/ALfFtH4KgbXrAXCBz9qBferRfvJB0BqBVQH1qwFDtz4rflPqwr8DOJRCg6n91n32R3i/ZYVoh0O3PfC94AdhaMf9zH5g6sKDqf3qrod9xi/FaIdDtz4rflPqwr7m/JaHaf4fRaiHftH9+5aHSUd9wH4TPcDHS0drfgO9wMdJR34M/ifPx0OLR336PhhPx0OJR33hviqsAotHfc7+GywCvh7+p75FxXD/AL7PQf3Al4hzvsUG/tT+yr7J/tm+2b3Kvsn91P3FPXN9wS4H/s/+ALD+7z3oPeewvue95wH++wW9y/3C/sE+0n7SfsL+wX7L/cjHR8O+H/4nvelFfsqJ0MkIyvT9yr3KuzS8/PtRPsqHved93EV8OdK+xeIH/wTBvcWkOPN7xv9d/txFftB9wj7APcv9uTC7LQeKrLgVPYb9x3k2fKkH0EGQndMWi0bJTXO9xaGH/hWBo6ejJmgGvceKvcG+zX7ATVUK2Ue62IzwiAb+y37DCD7Qh8OiR0r4lEKDvuH9yr3xeYKYvfZHQ559473gB2Gox/7R78V97j3FQf3Qfu4Bd8G+0j3vQX3CqHB3Osa9wc/4/s2Hvtm/U8G+Az4hBU2WE37Bh77Ife39yAG9wq7UzMfDvuH01cVRrb3Kx3ErKjZnomjhaMfivf55goOiR2b8lod+4f3KvfF5grT+SZaHWr4mfdMTh0gj+c79yAb9yjY6+of++748lEKDiz4XvclWQonlOJN9xAb9wXYzOMf+8/4ilEKDmr4mfdMTh2PJ9s/9xGBCPsCuQeeHcwH9xqU0OblGg4s+F73JVkKkzDUUPWBCCG5B54dxgfzkdHK3xoOaviZ90xOHSCP5zv3IBv3KNjr6h/7ffkCWh0s+F73JVkKJ5TiTfcQG/cF2MzjH/te+JpaHTap+RUV91f9FZf7BLkGnh3OlPkV91bF/F8HDvuN7/coFT2lYb15HvsOuge9oHpsaXZ6WR81XO8G0bqxx8lZrD2JH88HipGSi5Ibywo2qfkV92EK93ryWh37iveI+Y8VP7l1B3J+fmkeZwfFrKTOpIihhawf+3X8+xX7Ab5k6h7LCjYK9w6+KQoOp/h3FtH4tkX7vQb7GURLJSdJyfcNHvfLRvvTB/s07T/3ENzTr9CsHvu++JIpCg42Ct/m9wMdPB0r0Qf8Kvka9wMdNgr4GfdCPx0OPB0r0Qcn+W0/HQ42CveR95OaCg48HSvRB/uA+R0Va3GjsLGloquspXRlZnFzah/3NQRUXGVNTbplwsS4scnJXrFSHw42Cvdt902wCjwdK9EH+6X5eLAKw9j3mBX7O+Y49w98HlVsd2hlkB0F9wCi2d73Lhr4S0X8TAf7JUFQ+wH7AT/G9yUe+ExFBw48HTkHh4kFPGduYl6QHQWMB4sHDmUd+Nv3C1QdDmYK+KP3B1QdDn8d+B/1VB0OggpY9wdUHQ5/HfdMzykdDr8d+9v3I1EKDrgd+7X3LlEKDr8d+2r3BmoduB37RfcRah2/Hftq9zNaHbgd+0X3Plod90v4H8MV+ywn8Pcujh/4jwb7NoX7Ai77IhtMBPdc9xr3JPdp92b7G/cn+1j7M/sNMPsgYh/bBvSr6cn3Bxv3I/Uk+ziRH/zVBol3inh4Gvti9xn7C/dRHg77pfcP+OsVhVYFPwaGUQXWBlL8rgVUhXd7YBt2BoZRBaQG5LWz5JQfxPiuBfcUBpDFBfsTBpHABdWTsqrfG5DGBfsSR1r7B38fDvep+FP5sVEK+1b7sfcTCviNegr4KvgEUQoOaveV92kK90n3gE4dII/nO/cgG/co2OvqHw4s93S6Hfcv91lZCieU4k33EBv3BdjM4x8ONvdu9+UKfffaHYajH/uf+Un3YQoO+433LVcVRrb3Kx3DrajZnomjhaMf+xj3XBX7Ab5k6h7LCpz3yb8VJi/L9xOOH/gUBvsTgzRLKBuITxX3MfcD9vdC90H7BfcA+y/7HTM9JHIf1QbUn8q86Bvx5Ej7FJEf/FkGiXiLfXUa+x/t+wb3NB4O/Czd+HcV92cdDvu197j5KVQdDvu19zL5Jlod+26j+Rr3Ax37sve7+W0/HQ78XtT5A2od+/n3EPm+mgoO+/n3HZgVPGduYl6QHXixBQ77o6P48ikKDvus5Pl4sAr3ALr4fhXc/H7R+H73zvx+0fh+3MP8/AYOZR33rfc2bgoOZgr3bfc1bgoOZR34Nu9RCg5mCvf961EKDmUd+AjaKR0OZgr30NgpHQ5TCvvc9wApCg4hHfwW+EUpCg5/Hfco9yxuCg6CCvu+9zVuCg5/HfcVvikKDoIK+9DHKQoOt8z36RX4m8b8mwYO94jM9+kV+WPG/WMGDvws9wf5TxX3ogoO/Czd+HcV92cdDvxFg/sm91odDvuU9wf5TxX3ogrrFveiCg77kfeB+HcV92cdKxb3Zx0O+5iD+yb3Wh3u+5r3Wh0OLfev+K8VkveEBUYGkvuE97cKhP2GBdAGhPmG91CEBcQHDi74bPi2FftQhJH3hAVGBpP7hPe3CgX8awf3twqD+4QF0AaF94T3UIQFxAf7UIQF+GsH91CEBQ77g/dK924VzL6+y8xYvkpMV1hKS79Yyh8OPvfR94cK90MWZx378hb3Owr38LT4yxU0xlPc28fD4uBPwzs6UFM2Hvcg6xW9rGhOTWpnWVlpr8nIra69HyL9KxXQBvgv+VAFRQb7Q/zLFTXHU9vbx8Ph4U/DO/fxHaxoTU5qaFlZaa7Iya2uvR/3SSoVNcdT29zGw+HhUMM69/EdrWhNTmloWVlqrsjJrK69Hw776PcF97v3Th0O++j3DfcMFfdOCg77WG4W0gb4L/lQBUMGDvdp9wT38hV2jHeOdx4uWfMG+ym19xMr9zIb9zD3B9n3GL4fOQYyZDlR+wsb+woqz/cGZR/3kr37ngaInomgoBqdjJyNnB73oL37lQb3DK7u0/cOG/cL3VEwsh/dBvcaWPsH2fswG/s1+xUm+y5kHyVZ5waJeop6eRoO92P3rPlSFUP7gQb7QF4FWAf3QLgF+wcH+z5gBVcH9z62BfuMB3/AvYS5G/eQ9wD3J/erH0MG+340+xP7XXNxjZFwHvdpB/dQuwW/B/tQWwX3Bwf3UrwFvwf7UlkFDpP3W/kXFfchBvcKulQxNVxT+wof+yEG+y9RFeD7ADZS4PsZ0fcZ937E+373APchBvc50uL3BfcHQuH7Nx/7Z/vrNgYO/AzbFveNHfcppvkmFeYGivvGBcUGivfGBea5+4IG97n79BW/96QG9wn7pAW1BvcK96GM+6EFwPf0Rwb7EPuw+wz3sAVEBg73TLf38hX7FMb7BfcAVh77LVP3qMYG+xOkL/aK9zAI90X3C/cM9zX3MvcP+wn7SPswLiD7E3IeUPenw/srB/bAx/cF9xQa92f7MPcm+1j7V/sv+yb7Zx4O9zP5QvcdFWexBTk4QlkkGyRKr9FWH/c4+LTIB/c6+wr3Mftq+2r7Cvs3+2H7bPcm+wz3V/cH7cPj3R78mPd+Ffc7B9a816ziG+LSaE62H/tHBw5d+Ej33BX7Jzr7F/sMRlS+9wf3Mt33D/cH2rxV+wce/CD7BBX7L+BE8vc59xL3N/eZ92o39wT7I21vh4JqHl8Hk6mlkKUb9xCz+wb7Kowf63dTp0gb+zQi+zn7Qx8OyJ/CFVT5BsIH+7D5DwVQBvek/Q8V/HgG94X4vwUO9xe6+RgV3P0Y0fkY9+j9GNH5GNzD/RYGDvs9s/j2Ffee+8D7nvu/BTv4D8L71Qf3ove+BcMH+6H3uwX31ML8DwYONcz3lR33oAr8Ovck9+8V9zsK9yX3kV8V+HX6GwVWBvxF/cT7AvdV+wxGoWTIrvcK+2MFDuH4iveVFVZntLpnH8GoubG/G8OsaVRUaGdTH/vPjBVTaq3Cwq6vw76uYFqwH1duXmdYG/sp5BUxyFjeih7WwbrCqR9Wtbpa1hvdzcDl5U2+OYwfP1RaU2wfwWJdvkEbOEpWMR8O+/S9WRVVhX56ZBt1BoVRBaQG37Cz5JUf6PnYBb6Rn5quG54GkcYFdAY7YGYzgR8O+wqx93EV0gr3XATSCg7G9wj3HRXCBuDxBfflxvu0BvcN9yQF9zvH+wkG3/AFUwY3JgX75U/3swb7DPskBfs7UPcKBg77Fc/yFffpwfvpBvfpxRX7jfdW9433VQUuBvuQ+1b3kPtVBQ77Ffcz92sV95H3VfuR91YFLwb3jftV+437VgWKURVV9+nBBw5Vs/fxFfd/+4D3gPeA+3/3gAX3M/uAFfs0+zT7Mvc09zP3NAUOUu0W0fh793/8e9H4tvvF90MKQFDWB/fp9zb3Mx1Z7RbR+Hv3E8b7E/dDCj9Q1wf3x/x7FfeNHfvu8PdNFcMGlfiXBT8Gg/1QFffdHQ78Sq3WFT+6fAdkfXZoHmUHyLCt26GHpIWnHw78P7YW990dDvwovxb33R336gTn6S8GDvxJrtYVP7p8B2R9dmkeZQfIr63boYekhqcfMvf7FffdHQ4u9yQW990d+wL4NfeEHfs0zvcCBveIHQ777vD4AhXDBpX8lwU/BoP5UBXnLi8GDvw/tvfBFffdHQ4u+AT4uBUvLucG9wL8NfeGHfc0SPsCBveGCg6rzvfnFfiRyfyRBvdl+7YV5+kvBvfgBPfdHQ78W6n5mBX3IQr8W/cM+NwV92sd/Fup+ZgV9yEK++L3hPjcFdddpAesmJ2uHq8HUGpuQXOOb5FqH2QW92sd++L3LPmYFT+4cgdpfnlpHmgHxa2o1KOIqIWsH/tfFvchCkC2FvfdHfdELhX33R33RS4V990dDn34TBYlCn33dvfZHZT9lhUlCn34b/ltPx1o/W0VJQp9+G35KVQdavzwFSUKffeb+QMpHaL9AxUlCn33dvlXbgr3av2WFSUKf/c9+RoV9+fB++cG96P9UBUlCn34lvtQFc4KBffTB/csLt77FPsWOTf7A3se0AbfmMe93xvrwEz7Ao4f+0kG+yNHQSst1kn27NzB06sfJQeIivdEHfwg9+sVyrm46h73SXkG+w8rRCY/WrXJHg599+f5vpoK8P0dFSUKffdj+PIpCvd9/PIVJQrN9zj4zhVMqV62WB6ZfAWNg4OMghslNUD7EfsS6Dr3A/Tb1+6VH/ck+zsF3gb8EPhdBWuxeai4Gr+wuczOtGBKgYp+iIEezwaPl42ZmRrbUtv7DfsFUD48Hkz8BxXlxcDV1dNLNjpQTz0/SsTlHg55whb4ccb8CQb3OvczBfcf9xm62uQa9ww43fsc+xYpOPsuiR7PBvKMw9X0G+y/UDg+Xkj7EfsLH/ts+2MFDoD3vIYV9yfm3/cb9x802/slH3sG92z3fQXA/CdQ99IH+2z7fQVY7wfxyE8lJ0tPJCJSzOB/H0UG+xyZ60L3GRsOgPi7930V9x8s6/shZWiDfW0e90z3owU+BvtP+6wFW0R0Skga+xzqIPcr9yTv8PchHvuI90oV9wLRQfsA+wFFQfsC+wJE1fcC9tLV9wIfDoC2+HMV+yHqK/cjsK2Smage+0v7nwXYBvdP96kFvNOhy9Ea9xws9vsr+yQnJvsiHveI90wV9wLSQfsD+wFEQfsC+wJF1fcC9wLR1fcCHw6Dk/i2lPcklKukBvuhlgf3sxT48RWiEwHLAgABACwAPABQAFQAcwC+ANMA7gD/ASUBKwExAUsBXgFiAXYBggGLAZEBnAGgAacB0wHrAfEB+wIAAgQCDwI8AlwCYgJ6An8CiwKRAqECqAKyAroCwwLUAtkC3gL1AwgDEAMqAz8DSgNQA2wDjwOmA/ID/QQZBFEE0wTcBOIE6wTyBQ4FFgUeBSQFPAV9BZ4FzgXSBeUGDAYZBh0GXwZ7BokGjgaVBqwGswbVBtwG4Ab0BxwHHwckB7cH1AffB+8H+Qf9CAMIDQgrCHYIfwibCK4ItgkHCQwJEwlVCXAJdAmDCcAJyQniCfwKBQokCjcKQgpQCm4Kkwq6CxALXQt5C34LoQu8C/4MBgwNDBEMQwyiDNINAQ0ODRENKw0yDU8Npw3sDgQOWg5gDmsObw6RDrEOzQ7TDv8PEw8aDx8PKA8wDzoPQA9PD3kPjA+WD7EPwQ/LD9EP+xBFEF0QfBCHEIwQyRD6ESERRhFKEVARkxGZEaIRxRHJEe0R8xIlEikSMBJIElsSZBJpEnQSihLFEtwS4RLmEvMTChMSExUTMRM3EzwTQRNHE30TnhOiE6cTrRPCE8oT0hPWE90UEhRCFGgUmhSfFK8UthS7FNoU3hTjFRIVGBUfFU0VUhVnFXEVdhV7FYUVsBXQFdgV5BXyFfoWJBY6FkkWTxZjFnIWfRaIFpAWnBahFqoWsRbWFtsW4BcAFwkXJRcuFz0XShdtF3IXeReZF7oXvRfdF+sX8xf9GAEYCBgMGB4YJRgwGD8YTBhrGIgYjxiZGKoYsBjBGNMY4RjqGPMZBhkgGSgZLxk7GUUZTBlUGVwZYRl8GZcZsRnHGdYZ3BnhGe4Z9Bn7GgIaGRosGkIaSBpRGlcaYBpmGn0akRqXGq0auBrOGtUa3hrjGuoa8Rr4Gv4bAxsJGxwbIRsmGysbPxtTG1kbbRtyG3sbhhuQG5cbnxulG6obsRvEG8kb2RvlG+ob7xv0G/0cAxwKHA4cGRwrHD0cRhxOHF4cZBxvHHUcexyAHIUcihyPHJMcnhyuHLQcxRzRHNUc2hzqHPYc/R0LHRIdHB0mHS0dNR08HUEdSB1PHVUdWx1kHW4ddh2FHYodmR2eHaMdrx29HcMdyR3XHeMd7B3yHfcd/x4FHgoeDx4UHhkeIR4uHjseSB5PHlQeWB5kHnAeeh6BHo0elB6cHqQeqx6zHrsewR7HHswe0R7cHuYe8R74HwMfCB8NgQr7Dzw7+w17jXuOex/KBombipqbGuTBxN737Aoe+yj7Pwb7GNIz9xseC8pvUL0pG/sQLjP7HzAKHwsVJDzP9wf3A93P7/cV97YK+xUeCyQdyAtWeFRDRnXBvh6qTQeKgYuBgRowvUT09wO21+Ue964L0vfTBvcsLt77FPsWOTf7A3se0AbfmMe93xvrwEz7Ao4f+0kG+yNHQSst1kn27NzB06sf+9ayFcq5uOoe90l5BvsPK0QmP1q1yR4OxAeKgIGKghv7BVDZ9uy81OzoMR0LvR33KfcB93wd+w3R+LZF+wwH0GxAxvsCKwoLxAeKgIGKghv7BVDZ9uy81AsVtgaqj5uZobSdXMAbuq+txpEfYQZth3l8dWB6ulcbXGprToMfCz0du9vsCxv7KicdC/eOCuC66/cJ9zUdHlAKK1FYSnAf94D4gsELFUlauNHUv7fVH/EzBjBgVkUeC3svHQv7GvfUHY6Lj48a9xTtHS09+wgeC/sk5jL3EOzJvsunCzIKy2+7ZagfCzgK0fcDC0YK+xA7M/se+x4LOR0HC4yMlx9FCgvD2PeYFftN9wQ59yL3IvcE3fdNHvhLRfxMB/slQVD7AfsBP8b3JR74TEUHCxUjL9H3C7yataOqH/e3+5kFbWxed1EbC0MK9wDdC0IK9wjR3PcHHgs5CvcECxUgCg4x9xX3CtPY9wweCxX7LiXF9wPWvcr3DR+gwHUGI/ewHfcE+B37GgdBgUdb+wEaapFomGke92UdCxVdBuR2RMko9zkd93/44CkHYQr9FPuOIB36Bfg/Fe0LVfgdQQoLFfcXyiYvZH9gcWgf+7X3mQWrrrqcvhsLKQc4HQt1Cvs7B/sHzTr3CQtSCkH3BgvR8x/3DY4H69649ywf9yALKArs6EcKC4kG03tb3PsAGwuqHfcMu9vsCzMK2iL3LnIKC/sATUb7CB4p+2AG+xLLZh0L98JLCguDFSAKCxVJWrjR1L+31h/vMwYwYVZFHoxU0woL9y7a9Pce9wxP4CqdH/ch95jBC4qboIulWB0LFS5NyOjoycjo6clOLi5NTi0f+6f7HxU7HQtXB4ecoYihG/cL5eD3JvccMeX7DAsVVQf3YfcLBcoHC4Ud+wXfCyX4UflQFfwB/VD4AcX7u/ed953F+533mfe7Bgu8BomQipSRGse6scHNuVtJNUBQJfsgLOj3F/cx9wHV9yIeC/cd0dLq9xMjsycfXgZNUqPQ2NSbyR8L9zq79/IV+2b3KPsm91b3MPcI2fcYvR45BjBkOVH7Cxv7LfsJ9wX3SvdL9wn3Bfct9wvdUS6yH90G9xpZ+wjZ+zAb+1b7KPsn+2YfCx77IVX3If1CygYO948dIjVgRSFIz/T3DOjH9wUe94IK9ywGjMEFCxWI91X71zz3KBq7ubLU3rhdTo8e0Qb0hT7J+wkb+wc+SDof+2H33Nr7GxpXX2E9Mle2x4UeQwYL+ir5z/c1FSxCzPcE9wDXzOj3C70uOR+KBz5ZKvsMHvd7+zUV994H4Lnr9wnm00kh+wVGTDF7eoyPfh5XB4eboYihG/cL5eD3JvccMuX7DCxQWUtwH/d++ILB/lFV+Cb7fQfKb0+9KRv7EC8z+x/7JOUy9xDuyL7Mpx/7cgf9S0sKCyA9TfsAJoMdC/lC9yDBC/e6CswdH1QKC9G796ZiHQu6+LYW1Qb7kvlGBTwG+5P9RgXVBsj3OgX30gYL97UKHvd7Cg77AE1G+wgeC/vQB/sKC8UGiZqJmpoa2Lm/2te3VEb7D/sDcCYeC5O796UV+0H3A/sA9y73HeTY9wGkHkAGO3hKXC8bIDTV9yj3KOLU9ufNWz2dH9YG9wVyMtT7HRv7LvsD+wD7QR8LFTsd+DX7eAe/cVi0ORv7BDQ8+w4ytEnLbB9QcVVYNBsL92b3ThbSBvcr+F73K/xeBdEG9z/4tgVGBvsb/HD7K/hwBUUG+y38b/sc+G8FRAYLyisdCxWkeZxycnl6cnKdeqSknZykHgs3U8JCHTxSVDwf+OioFfsbPOr3KB/3Eo/cwPcT9xQK96X7QhUrHQv7JCMr+yT7JPYt9yMLVWMdCxX3C+DK8rEfLbHd900d9yHB/UNV919AB/sUQGX7BB56Bn+KfX4aiwf7LDkr+x77I0T35h2fi6b3Zwr3IfJF2PsCC/eOCt+Muez3CRv3NR0fUAorUVhKcB/3gPiCwQsV92H7CwXBB/th9xQFC3gd9zsL+3sH93sdCxtjX7QG5reE+0/xH+IlZo4nG2RgswYL5h3s6KodCxr1N8cpJDZN+wMl1lLhex4xXStc+wgaLc5G8uO3wKiWHgv7fyQHWwoLbwpLCxX4PvsZ+xHpCvc890j3JsH9DgYL91Ud+yfrM/cllpWMjJUe+yn7JAWH0Af3avdmBYyMi4wakZAFiwegC08dDvc6TAoL+bH4ghXz50r7FYcf/BwG9xOS587wG/eU+9UVPwZBekhbKhssKsr3GoMf+GEGjp6MmaAa9xwr9wj7Miw7YTFfHvcQUPsPB9tkP74lG/st+wP7Afs/+z/3A/sD9yr02cTYrh/7Esj3Egc2r+Fa7Bv3GePZ8qQf/jrwFfcf49v3B/cE5jf7HPscMDf7BPsHM973Hh4Lch3XyfcM9w+3QFof+wUH+xLMMfcU9wrU2PcMHgsVzgb7DvdVBUsGCz77EjWzTMxrH1BxVVYzGwvUHfcTjtnB9goLpAoHCzn7Ch9+C/cKlh1aTzhMHQtP96rbFftO+GYFPgb3dPyzIfuYBdQG99j5twVDBgv6ExwFbfe7HRz56lUcBUr7TPuk+zwHOVxTPkJdwuEemAf3CkHb+wP7AVs7Qnse7B3n4rZKKowe+waOzD/3Bhv3CNH3vQr3ZvxTBwsgHW77fRUmHQv3jApPBsVuSLr7BBv7KyA9+0D7N/I29zEfewoLvAeCdXSGeBtmcp2spZujuqIfCxq0HR73cx0L+UP6H/e0HfcQj92/9xDCHfem+0L3Sx0c+rpV+fdAB/sDQGv7BR77mvsZBngd9xlL+xmsCtr3MAeVlIuSG/tHjun7CPc6G/cE1cDLrh/7gAcLGzDjCgv3jh0GXR0L+ZH4IfdgHfmDPgf7Bkpm+wCKHsxsT6tLG/fwHR/3ZR343+UV+xdC3Pcaex+JioqSipGKkRn3G9/E9+MdLD37Bx4L98r3lhX7AlrU9wsf90kH98L7nwVaglxSNBsLG7UdC/fECsgdH/tiylgK/S8GCxX4JiAG+wtMUfsHHiD7WAb7Ecsx9xT3CtLa9w4em016BzRaUTwzY83mHvcmygf3KNbc9ykf9vcUwfzmBwtyH/t6+7ggHQsV+xo92vcUH6IH9w6O3sP3Hhrg9233RR0LG5SUi4yTH/t0+28F0wb3lveZnJiYnJafGQsVLwr4MvfWHQtXeFNDRnXCvh6qTQeKgYuAgRoxvUT09wO21+Qe930Lcpi8RvcLG/cLw8/eyXCzZ6MfC/TT9yH3GTnW+w0LSlKjz9nWm8kf90P3SAvuHf3g+/j3uwrhy00mjx6Dd4d1chom7x0c+bE0Cg73xR37IOUo9xVvH/sw+zf3NB37LPcyBfcKmdPV8hrMHR73HR0OFVRcZU1NumXCxLixyclesVIf+zUEa3GjsLGloquspXRlZnFzah8LePihqRVSBlt8WFIvG/sEUdvs7Mfd9dK5aGihH/sP+w4FyAb3DfcMBcx0RcQhG3h5iYh6H1qYZ6q991MKSbdju3kfQWVhPzMa+xLZIvcq9xXU2dqbHgsV+5yYHe34DPsCB/sRQGf7BR73lfuSFfsaPdj3Dx+Oi4+PGvcQjt3B9x4a9wv3bPvdB/sJLjz7CR78JaYVLh34Uwf7LuklyAr7degdC7UG2NlxLUpbWCf7ClHK24ofTAb7BozkPPcrGw6AHXt9C/cxCowqy0T3A3f7Lfs09yMK9zQF7py9ytwa9xMjsyce92oKFfcbxt7fH1QGU2FNKipiycMeUwY3xjj3Gx4O1Pfm9U0d9yj7ZhXQBvsw9zYF9wyi3+j3FBr3IiXq+xiYHvejCv1zVffj94kd+xXhLvcMdB77Lvs1Bc8G9yb3LgULawqbnYmdGwv3TQrL+UILwR3KCxUgMdD3DLyatKOrH/e3+5kFbWxfd1EbifgTFfcWyicvZH9gcWgf+7X3mQWqrrqcvxsOnvdg+AgVMnRSSS4a+xXvOfcu9y7v3fcV6FLNMqIe3qW3ydoa9Tnd+y37LTk5ITu2T99wHvcAohUnSMDe5s667/DNWzE4SFYnH1UE8t1dJCxDUPsF+wZDxev037fxHw4V9xjJ3OEfVwZSXk0qKl/JxB5WBjXKOvcXHoz3NRWgmpufn3ybdnZ7e3d3m3ugHw4V7fiI+xJrB/sQJ1orYR/7qga5ranF3Bq396od9zT4YQeHd4l2dBr3Hh0eTjUdC/cA3dH3A8tvu2WoHwtHHQ4V/N8H/Bf43wVF/U/R+OAG+Bf84AXR+U8GC+Id0fdCHQsaJdFH9PcCytH3GB7g90QH+z/p+wP3PfcF928dC6P4sviyFfR+Rt/7Ghv7S0T7I/t3+2K7+zL3avc20/cC9xP3KzPm+yAsN1w5cB/3gobS4vcSG+W6WjqZH/sq+xIV9wPJRvsI+wBJSCT7FlHj8PcK6sDkHw6KmRvdvrS+pR/8N/tJFfsER9HzH/UHjI2LjBvr3rj3LB/3L/g0+3cHv3FYszkb+wP3cwo2SMPv6tHD3fS1OUNFYDgjHw4VSvsfBbwG2vcfBdoWRvsfBbsG3/cfBQ53yfiqFc8G4pbMu+Qb6r5WPzNIXvsdH3RQoQb3H9tdITxYTCEhTczgfx9HBvscme5C9xsb9yvU4fcB9UvJMJ0fkAfpmrvR3BrxQdz7HvsaMEH7DoEeDiIK9xMdCxVBHfcy+5oVZwoLngoaC1wK/Q1V+EJwCvsUKjT7GoYfigf7Gno8UvsK9xwddvdPHQv3IvMd9MRJIR7MBvceP+T7GipPWEpwHveA+B7B/kEHCxUhW9T3CR/3fvnMux37Az9E+wd8H1J5XGBBGwv3Bvc2HQtMBvsCT0sj+wlS2PcOHvgx9937EAf7AGRgKpMeUQf3JH7BzPcoGvcR9wvBC0NoYkU2GvsN2Sn3KvcV1Nrcmx4L9x0a4GsdC8gK+4ELUy/7ATRW+wMLPh2cnYmeGwtxCvSphir3CR8L95oVxAoLJsJgzoEeiQdBgUlVMRoLmgb02lIkN1VMMDtAu+qCH0/7o8n3PgZapcpd5Bv3A9jW9wThXsVKqB8LFUlauNLSv7jVH/EzBjBgVkUeCywd92j7mhUoHQvT9+b1TR1VBM4d/XNV9+P3iR37KfcGJvcqHgv7CTRF+wv7BN9A9wb3AN0Lzyz3G/IdHvvAC/c8uAoeC/fG95owHfvj+DwV930dBvslz/cAHfeP95ecmZmdlp8Z+8LK99gH910dCwaSoo+jpBrvVMw1OGdRV38eiQa/gGjFPRszUEwlJ8RB9wSSlYuMkh+4B4qGgYqFGzxhwdbRrr7PzKtROB+At5YH3qzFz86pVkgL1sdLBkx0oM4f9+f3Ksb7KvcdRPsd9/IK+CaMCvcd91YVgouDjIMe+733lwX3vAb3d/w8FUEdC78K+yNV9yH9QgYLhgrHqAv3IDfPK/fwHR7BBn+thayoGujKrMDIyVgh+zn7GCj7SfsuJcX3A9a9yvcNHqDAdQYj97Ad9wT5O8H9/QcO93r3DAr5SPtK+6coBveDCvcIz/dCHbn3a/sPB/v1+/oF0wb3rve4Bfuax1wK/hEHCxX7FUHX9w+BH4GKipWJlIiUGZEG9xrey/fjHS09+wge/Gb3+EAKDsAGsZGkp6/GrkjUG8+1tuGZH1YGZIZycGdTZc5BG0lgYDV8HwsV4goL+zf3YwoLlsz4ARX7Zbn7MvdZ91i69zL3ZfdhXPcx+1j7WV37MfthHvg1Fvs8dfsb+yz7LHX3G/c89zah9x33LPcsofsd+zYeDveOHQb0ChX7Wfd/91kGC/cUHfsb9wZB9z6CHvsp+zD3NB37MPc2Bfc+p/cF9wT3PhoLBjIKC/cO+L0WySsd/aVV99n7fwaUCvdU+/MH+/379wXWBvez97QFC7v3ps8dC073ym0V0wb3yffVBc4H/WT33BX5ZMH9ZAb3ufynFfcIz9z3Bx+294fD+8MoB/eDCh4LG0AdDvelCgd/Cg63+Nr3+BWknp6ko3iecnJ4eHNynnikHwsV6MnI6OnJTi4uTU4tLk3I6B4LFaSgoKT31AoL9wBsHQtxHSdIRy2fHfsHC0AH+wZAbfsFHvvhBlIKQPcqCqgf3h1qvpAV+HHG/AYG9yHz92P3PfdLGvceL9L7EfsYLzj7K4Mezwbvkb/V9Rv3A69GOPst+0f7L/ti+y4fDhX3Hdi05h6e1AYtTGNIbR/sRfy20QcL9ykKBw73Dx0fC0Yd+waM5Dz3KxtVCgtsHfdD/CL30Ar7tftD5gf3D1vf+wh2C93axFT3mAoL9QoO99YK928KH74G19lxLU1gVS8jUMncgx9S+5PHCyMK994HC/dslx0L92zcHQvVHfsr0gv3SPep+FUVObJnuo7QCMWNvr/UG9y8U09IXmNSXx9+gQX3y/xJFcZcCvte/FUG+5b3DgWLBwtO95z3HxX3CNH3vQr3hcL7w/dlCh77ufi3Fflkwf1kBgv3AwoOVfdQHQv3HfcUCgv3wgr9YFX4A/t/JAZbCvdmB/fiHQtBFS4d+HIHC/cP+74GfR0LIwoHCxX7GjzUHQv7MsP4y1QHLjhjRzpFwd3r0rr3BR73KfdA9y3B/SoG99z91RU3ikzB5RqtlaeeoR73hvs1CxXdvrS/pR/7gGcK/mxV97AKB/sTRm4/HmX7Ngb7Kesz9yX3BdXO3a4eiJiZipkbC1wK+1/8lgb7mfckjo4F28j3NAowxEvsVR77Zvs2BYPUB/dO9yMLFcQGs5ChorEbrKZ2YFtramVqH/sDLAVj94u6+0kH3ssFxrqssMMax125QzxiW1CHHg4G9xUdC5lNgAc1WlA7M2HN5h73JAugcnF3dnILbvlCFQv42fd19zotCvmo+JwV+3gH90odLDtdPGQf+1v3fwYLjQoHDlX3MB0LVfip+24GzGhLtS8b+yAoJ/suH8sG9w7b2PcE68xMN5ge/Av8BAWG2gf3vPfFBQ7GCtL3AwtV+Er3KwoLFfw2+4YH+PP4OhXD/CoH/Cr9UAXYBuv3OgX3pvs6+AHD+7v3oPedw/ud95wGDhrg7woL/PH7O/l1FcIG97D7JWKX+xH3SwoL9xEKy268ZqcfC0AGtAoLB/cvHQsb3savxaof+8ELg6enGtGvsMK8rWhYiB7CBtyRWMM9Gy1lRESFi4WMhR/3KihXlvsB96MdC/tt99H3lrwd99X7owVagFZUMBv77vhAFffkHdYp9ysLXPclCkY3Ggsa+wXfQPcqCqge3h1AB/sNSGMlhh6yclexC/so9wUl9y0L9wwK+E/7AwZCX08rHmhTtQb3DbgyQC1NRyopQNLoH04G+xXuL/ce9xwLP7lyB2l/eWkeaAfFrKjUo4iohKwfDpiSGuZPzCV2908d/VxVCxiMHfstC/eV900VSFq1zM7AtdQf8kP3mh0LmWiqvPdTCve+Ch9DaGILeHH7tfeZGPdBHQtfm1kbLVVbTJAKC1X3GjcH1x0L9wJsHfdZ/CLL+UIL9zgKZQv3xwoGLkVkNAv3MfP09y4LQuH3FY736gqnG/cf9wTD9yHyRNj7And3iIV5H/4uVfo4BpCZC/c/CvUL+wk0RAtRBvsFLj/7B/sXON33IB6Oi4+PGvcU97od96bB/RgHDhX4RPeoCkYdC1QG+wgxOPsOKEC259C6wvcGHvfwCvg8wf0CBw5auNHUwPd4Cgu1xOEa50Tb+wn7CEY6Kwv3YgrkzEkhHosH+yMLivcMCvhR+woyBvslKU37Fji+T85yH05zXVI9GvsF20D3AwtkFSYdC/eXHctuvAvLBvcL3s7y6NBXRqce/An7+gWH3Qf3ufe3Bfu3ySsdCxuC96kV2JDCq6W6CPtnB3eHd4N3Hvt/9zCinaqWro0ZDmcdDtH3iQb3dfuJBeoG+5n3pveX96QFKQb7cPuIBfhKRQcOVfoS+30Hym9QvSkbSgsb940KH/txC29ue2RaGibRRgsWKx0LTjUd/VkGDpUdBguxBtqpregexwf7HlRT+wkfZQv3Yh33IMEL/U/31cT7j/kWBwsb+ysgPftA94cd18n3DAv7QfcMCvcaNwb3fgoLR3FcTDYa+wfcP/cG38OzwKce+y/G+FwHvbKkxdIaC/i3VAcuN2NILlDB3evSuvcGHvco90D3LcH9RAYO9wbVwsutC3EK9amGJ/cMHws8Z25iXhpIw3LEo6WQk6EeC6kK93MdC+73Qyj3QwVEBvH7QyX7QwULGvsH61L3FfcS2MHrrR73wAoL95EK9xfy3bvasx77gAvS9wPLbrxlqAv3bvct9wv3WgsazcOiyh73TvdF9yTB/Rj3EgoLG/c39zsVhouGhxr73PenBffcBvyQFvfTCgv31fcw9x8dCxrIHR77Ygv3PPcH1cLLrB77ggsb+xI3PvsSNbML90oKHvuCC/s7+w4z+0EL+zv7FTL7Tgst93wKCxU7T7ze17+805Af1ZDBqaa3CPtiB1BgPyseCwbhrLnOxbBfTooewwbpjVPMKhv7AlpA+wMfC/jGVAcuN2NILlHB3evRuvcGHvcp90D3LMELLkVkNPe+Ch9DaGJFNRr7DNkp9yoeDhX3V/0V0fkV91bF/F8GC+Cz6/cJC/I29zELFe33avuj+7YH97EdC/s7B0IKC/elCgZ/Cg4b9yD3A8MLpPcMCvhs+woxBvslKkv7GCzCROt5Hwv35Qp9d2oeaAfE98YKiKOGox8LXgZNUqPQ2NSbyR/3QvdI92nB/VcGDvfhHfsmC/g8+xJr95UKC/dAHftfC/bWzdyhH44GCynbY+SJCxUiO8/3B/cD3s/x9xTBLDQ6VSj7FB8L93X3VRVIW7jR0r+41B/yNPeaHQv3mhVBHQs0PPsOMrRJy2wfUHFVWDQb96T3IBUL9xIK974KH0NoYgv84hX3iEIH+zf7jAVo90dExNK9sgcLQx33LfxQCxU3U8L36B1TC7f30goL+D/44BXtC/tM+6T7Owv7cMr5QgcLVVpNch8L5dRJIQv3kQr3JAsGJUE3IIoeMD3D8fdjHay++/0LBveFCgvrL/caC/cg90ELOFxTP0Bew94e7ksoB/sHzTr3CQtWcmJUQBog10T3ANDDqsGnHvssC4eJ90QdC/skI1H7K/sQ5Tv3FPcS5Nj3DR8LuhVnHQsa9xId+3HIBw73pgr7JfsNP/syC/cMHfcOBn1thAv3zwpcUj8L+wBMRfsIHgvvzr3OqgvI994GC0AHngqEiwteBk1So9DY1JvJH/c890j3JsEL1x3qTQsbWmGEfWcfYJtup7f3vB0LcApFT3FeYR/7OQYL99IdHg4G91oKC/1CZwoLLVVaTHIf93wLPTz31QoLeG+AZ2EaC8r33QqQmpuNnBv37AofCzxKs+HOuL/qH5K+hAYsWLnSC18/g42AjIMeuQaJkIqTkRq+C/iO+VwW99cKCxW/dAf3yAoL+zi5+zoV0Ab3qPrmBUQGDvfRCoijCzP7bAXcBsX3bAUL9xr35cEL+0/7LwcLVfd9HQv7CjkGC3qMj30L+xn7FwsHxgoLFfe3HfsY8ET3EAv4lxbJ994G37ns9wn3fQoL98MK99MLB+veuPcsH/cg+DX7eQfAcgv35grguuv3Cfd9Cgv3wh0O98D7GQtqa3ddUxr7Bd5B9wb3AdwLbx37YfwIBvsXJjwL99gd9yHBC/vN9xYW0vlh+z5M7gYO94EK978KC8ErNR+KBzxVJwv7UJIFUgf3UJIL94IK9yzBC/ujOvsE+x0L9yPm2vcHCxX3YgoL+yvUKfclC9z3Bx/3BAtKtWS6eAvwzb3Nqgsuqt1T8/c+Cgv3Ugr3EUjPOJgL924ddfdPHQv30PeaFfsFWdT3CR/3fgsV98oKCxWZTYAHNVtQOjNizeYeC62o2Z4L+xb7Iwv7F0PT9w/3GfcMHQsVN1PC2NzFwd3axFQ9C/hX94kKC/fH998KC9H3A8tvu2WoH/du/FgLKhr7Mu77Dvc4iB4OgmUbUVigxsoL93oKBzkL6B37YAseaAfD98YKC/fbCmFWC/cwHQYLpHagcgtSVDwfCzEuaiAL+UL3dPeWCgsZ+z1NFSxCzPcE9wAL9yz3A/H3JeNj0kmzC/sl9wEx9xqXl4yMlgvVH/AzBjALn3emHwv5QgcO+0eO6vsI9zkb9wUL95oVIVvU9wkf934L+yHoNPcO974dC/dSHfsjBwsVNkO259C6wvcGHwv3Uh37JQcLJX6NfI19HgtXFUa2fQdnC/hwFveOCgv3MR6pv3UGC/sFV9X3Ch8L+xkb+xsLHoqbn4sLdneIhQvgwb0KCxU4U8HZ28TC3dsLOvcI9wjS90IdCwb7A8s49wn3C8sLwcBa9+cdC00GKlBH+xv7EUcLP1DXBw73FI7ZCwAAAfQAAAAAAAABEgAAARIAAAM4AE0EUABNAkX/2AJF/9gCQv/jA2T/4wP1/+MDxf/jA4P/4wOL/+MCjP/jAoz/4wRXAE0EVwBNAoz/4wM6AE0EVwBNAR//4wEf/+MBH/9RAAD+YQAA/rYAAP7AAAD+ywAA/mIAAP5iAAD+NgAA/jEBH/9VAR//TgAA/qsBH//OA+r/4wOe/+MC1//jAsr/4wKJ/+MC2v/jAy//4wND/+MDTP/jAyP/4wKL/+MCpf/jAkH/4wJ9/+MDTf/jArL/4wL3AFUCYf/jAsMAVgMN/+MCif/jA9n/4wKx/+MDDABSAwP/4wLc/+MCGP/jA4X/4wKk/+MDIwBgAo7/4wMx/+MCSv/jA+//4wMRAEwDHP/jA+r/4wOe/+MC1//jA0P/4wJB/+MCff/jA9n/4wIY/+MC7P/jAqT/4wHO/+MBsP/jAon/4wHK/+MDL//jAiD/4wI8/+MCIv/jAov/4wKl/+MCQf/jAn3/4wIv/+MBi//jAdcAVQJg/+MBrABWAfz/4wFx/+MC6//jAaX/4wH2AFIB8v/jAcH/4wIY/+MCoP/jAZT/4wIWAGABhP/jAg//4wJK/+MD7//jAgoATAIU/+MC7P/jAqT/4wHO/+MCIP/jAuv/4wAA/0EAAP6rANsAPwI7AFEAAP9UAAD+VgJoAEEBJAAfAjwAMwJJADICZQAiAmkASAJ1AEgCFQAaAnAAOgJxAEUEHABTAfIAVQEKAJ8BzACfBDIAUAKGADcAAP/pAAD/gAKLADIAAP9UARb/4wAA/k0D6v/jA57/4wLX/+MCyv/jAon/4wLa/+MDL//jA0P/4wOC/+MDI//jAov/4wKm/+MCQf/jAn3/4wNM/+MCs//jAvcAVQJg/+MCwwBWAyn/4wKJ/+MD2f/jArH/4wMMAFIDA//jAtz/4wOF/+MCpP/jAxcANAKO/+MDYv/jAkr/4wPv/+MEEv/jA57/4wLX/+MDQ//jBBD/4wLs/+MCpP/jAc7/4wGw/+MCif/jAcr/4wMv/+MCIP/jAjz/4wIi/+MCi//jAqb/4wJB/+MCff/jAi//4wGu/+MB1wBVAmD/4wGsAFYB/P/jAXH/4wLr/+MBpf/jAfYAUgHy/+MBwf/jA4X/4wGU/+MB7AA0AYT/4wIP/+MCSv/jA+//4wMT/+MCpP/jAc7/4wIg/+MDIv/jBvD/4wbw/+MGlv/jBWj/4wZC/+MFj//jBjz/4wRH/+MFnP/jB1X/4wXA/+MHGv/jBfD/4wVm/+MGGf/jBV7/4wVe/+MGxv/jBsb/4wbH/+MFt//jBhX/4wYR/+MF2//jBor/4wWq/+MHjf/jBhT/4wULAEwG2gBMBNMATASbAEwGKv/jB5j/4wdg/+MHvv/jB5T/4woD/+MGQP/jBVT/4wVU/+MFxP/jBcX/4wXF/+MFiv/jBYr/4wVP/+MFT//jBbj/4wW4/+MF1P/jBIv/4wRs/+ME6v/jBQH/4wQO/+MEa//jBkr/4wYe/+MEwv/jBpH/4wRf/+MEsf/jBnP/4wS//+MEjP/jBIz/4wUy/+MEUf/jBNP/4wTE/+MEyP/jBKz/4wRw/+MFAf/jBQH/4wTi/+ME4P/jBMD/4wVa/+MFWv/jBhH/4wV9/+MFff/jBSv/4wdF/+MHAP/jBW7/4wUa/+MEr//jBEv/4wTb/+MEif/jBTD/4wTQ/+MFMf/jBQz/4wUM/+MEx//jBTb/4wVE/+MFCf/jBOn/4wVV/+MFaf/jBTz/4wKv/+MCtP/jBOf/4wKS/+MCmf/jBPH/4wKU/+MCUf/jAlz/7wSN/+MCXf/jAp//4wTn/+MCff/jBJf/4wTE/+MEWP/jBKP/4wVy/+MFE//jBN3/4wS//+MFcP/jB2H/4wVw/+MHMP/jBLL/4wU5/+MFOf/jAtT/4wR5/9EET//jBHz/4wSB/+MGUf/jA/f/4wP3/+MGZv/jBUf/4wSM/+MGXP/jBGj/4wSU/+MFAf/jBC3/4wTP/+MGvv/jBoj/4wZD/+MFDgBVBNcAVQSeAFUCdv/jAnb/4wOB/+MCHP/YA4H/4wVa/+MCXP/jAlz/4wVG/+MDJP/jArn/+QJY/+ME2gBWBrUAVgTjAFYEowBWBE0AVgXh/+MIIP/jBKH/4wUv/+MEd//jBCX/4wSn/+MGXv/jBH3/4wbF/+ME5v/jBsf/4waN/+METf/jBE3/4wQ//+MErv/jBo3/4wSu/+MGNP/jBQz/4wbd/+MEdP/jBHT/4wXF/+MFxf/jBOX/4wbI/+MGmP/jBR7/4wbt/+ME3f/jBJL/4wUv/+MGnv/jCO3/4wbo/+MENv/jBAv/4wQk/+MEH//jBdf/4wR+/+MECP/jBVn/4wRj/+MEW//jBPj/4wQa/+MEmf/jBi7/4wYu/+MFj//jBbP/4wWz/+MGCf/jBWb/4wa2/+MGtv/jBcv/4wZs/+MGBP/jBhn/4wTu/+ME9//jBrf/4wUR/+MEZv/jBBz/4wRk/+MGG//jBM//4wRr/+MEuf/jBND/4wSN/+MFOf/jBzr/4wRf/+MEyf/jBN3/4wUPAFIEzgBSBM4AUgV/AFIEnQBSBI7/4wRN/+ME+P/jBHr/4wR6/+MEov/jBof/4wSi/+ME7v/jBq//4wUD/+MGf//jBP3/4wTS/+MFc//jBJf/4wUP/+MFIv/jBCn/4wTW/+MEqv/jA5D/4wLu/+MGm//jCIz/4wY//+MFif/jBdz/4wXc/+MFO//jBVH/4wTR/+MFI//jBVv/4wWV/+MHdP/jBQr/4wUK/+MFG//jBmz/4wVh/+MFsv/jBcn/4wWG/+MGLP/jCDf/4wVU/+MHLf/jBcj/4wS7/+MEwf/jBIf/4wUx/+MEUP/jA7z/4wXzAGAF8wBgAxEANAVeAGAEnwBgBMQAYATjADQFGgBgBO0AYAWUAGADEQA0BSkAYAVz/+MFc//jBA7/4wZr/+MEDv/jBAT/4wQp/+MGdP/jBCn/4wS1/+MGRf/jA+//4wPv/+MFP//jBIf/4wZX/+MEWP/jBB7/4wPz/+MF9//jBff/4we3/+MFnv/jBVj/4wSf/+MExv/jBnz/4wSj/+MGQf/jBPr/4wba/+MEbv/jBR//4wSb/+MEm//jBgP/4wS9/+MFIP/jBvD/4wTp/+MFi//jBKX/4wUy/+MClf/jBNP/4wTN/+MDdP/jArb/4wKG/+MF9v/jAR/98gAA/1MAAABJAAD/0wAA/9MCRf/YAR//UQEf/1EBH/9RAR/98gEf/fIBH/3yAAD+NgAA/jYAAP42AAD+MQAA/jEAAP4xAR//VQEf/1UBH/9VAR//TgEf/04BH/9OAAD+rwEf/84DP//jAu3/4wJK/+MCSv/jAkb/4wMXADQCmf/jAR//4wEf/+MBH//jAR//4wEf/+MBH//jAR//4wEf/+MBH//jAR//4wEf/+MBH//jAR//4wEf/+MBH//jAR//4wEf/+MBH//jAR//4wEf/+MBH//jAR//4wEf/+MBH//jARUAWAEIACUDLAAjAlUAPALWACsCzwAnAJMAJQGkAF4BpAAoAdUAOwKPAEkArf/4AgcAHgC2ACkBuQAuAmgAQQEkAB8CPAAzAkkAMgJlACICaQBIAnUASAIVABoCcAA6AnEARQC5ACkA4wAQAfgARwKkAFMB7ABOAgAAIgPqAEsCjAAgAlUAUAMDADACwgBQAfcAUAHtAFADDgAwAqcAUADlAFAB8wAlAjgAUAGlAFADSgBQAq4AUAMUADACNABQAxUAMAJLAFACPAA4AggAHgKVAE0CkwAYA7sAGgJJACkCNAAWAg0AKwFvAHcCWwBlAW8AXgJeACYCogBWAQQAGAKjADACowBQAmUAMAKjADACbgAwAUUAFgKjADACeQBQAOUAQADq/+UB4ABQAOUAUAP+AFACeQBQAoIAMAKjAFACowAwAWoAUAH+ADABZAAYAnkASwIjAA8DLwAPAcwADwIhAA8BuQAlAZ0AVgEFAGABnQAxAecAJgESAAABFQBYAoIAPwJUAC4CDgBCAkkAIgEFAGACPAAyATsAIwMcADUBvQAjAbMALQKLAC0CBwAeAfYANgGDABgBigAdApEASgFCACEBQwAcAP0AGAJ+AFACNAAcALcAKwEJABgAtwAdAa0AIwGzADICWgApAooAJgKoACYB9gAoAowAIAKMACACjAAgAowAIAKMACACjAAgA3IACwMDADAB9wBQAfcAUAH3AFAB9wBQAOUAAgDlAAIA5f/tAOX/+ALaAAkCrgBQAxQAMAMUADADFAAwAxQAMAMUADACTwBVAxQAKgKVAE0ClQBNApUATQKVAE0CNAAWAjQAUAKZAEICowAwAqMAMAKjADACowAwAqMAMAKjADAEVAAwAmUAMAJuADACbgAwAm4AMAJuADAA5QACAOUAAgDl/+0A5f/4AoAAMAJ5AFACggAwAoIAMAKCADACggAwAoIAMAJ9AEMCggAvAnkASwJ5AEsCeQBLAnkASwIhAA8CowBQAiEADwKMACACowAwAowAIAKjADACjAAgAqMAMAMDADACZQAwAwMAMAJlADADAwAwAmUAMALCAFAC2gAwAtoACQKfADAB9wBOAm4AMAH3AFACbgAwAfcAUAJuADAB9wBQAm4AMAH3AFACbgAwAw4AMAKjADADDgAwAqMAMAMOADACowAwAOX/7wDl/+8A5f/JAOX/yQDl/+wA5f/sAOX/4ADl/+AA5QBEAOUAUAI4AFAB4ABQAaUAUADlAAIBpQBQAOUARQGvAFABPABQAaUAUADlAEUBrgAJAO8ACQKuAFACeQBQAq4AUAJ5AFACrgBQAnkAUAMUADACggAwAxQAMAKCADADFAAwAoIAMAREADAESAAwAksAUAFqAFACSwBQAWoARQJLAFABagBQAjwAOAH+ADACPAA4Af4AMAI8ADgB/gAwAggAHgFkABgCCAAeAWcAGAKVAE0CeQBLApUATQJ5AEsClQBNAnkASwKVAE0CeQBLApUATQJ5AEsClQBNAnkASwO7ABoDLwAPAjQAFgIhAA8CNAAWAg0AKwG5ACUCDQArAbkAJQINACsBuQAlAxQASQFM/9cDcgALBFYAMAI8ADgB/gAwAggAHgFkABgCbgAwAMUAHwE8ABgBPAAYAYMAGAE/ABgAkwAbAPgAFgD4AB0BTgAYAUUAGALJAC8DuwAaAy8ADwO7ABoDLwAPA7sAGgMvAA8B9wBQAm4AMAI0ABYCIQAPAjQAFgIhAA8CiQBBA1EAQQDFABsAxQAfAKz/+AFdABsBYAAnAVn/+AH/ACgCAAApAW4AQwIQACkDuQApAQkALQEJADIBmf/jAzIAFwMsACQCZQAsAOUAUALyABsDFQAsAvwAMgIvACgCmgAUAuAALwG0ACgCBwBBAbkALgC3ACsC7gASArMAJgD9/9wB5wAmApgAUwHcAEAB3ABCAicAKAIkABcCKwAWAQMAUwCnACAAsgArAMkANACoACECAAAiAQMAUwCyACsCAAAtAn0AQwCWAB4AlgAdAJYAHgEPAB0BDwAeAhIAKwJPADACTwAwAk8AMAJPADACTwAwAk8AMAJRADACTwAwAk8AMAJPADACnwAmAksANwJSADUAPQArAAEAAAAMAAAAAAAAAAIACAAYAB8AAwAiACIAAwB5AHoAAwB9AH0AAwCSAJIAAwJcAl8AAwJnAmwAAwJzAnMAAwABAAAACgCWAs4AA0RGTFQAFGRldjIAPGRldmEAZAAEAAAAAP//AA8AAAADAAYACQAMAA8AEgAVABgAGwAdACAAIwAmACkABAAAAAD//wAPAAEABAAHAAoADQAQABMAFgAZABwAHgAhACQAJwAqAAQAAAAA//8ADwACAAUACAALAA4AEQAUABcAGgAfACIAJQAoACsALAAtYWJ2cwEQYWJ2cwEaYWJ2cwEkYWtobgEuYWtobgE2YWtobgE+Ymx3ZgFEYmx3ZgFKYmx3ZgFQYmx3cwFWYmx3cwFcYmx3cwFiaGFsZgFoaGFsZgFwaGFsZgF4aGFsbgF+aGFsbgGEaGFsbgGKbnVrdAGQbnVrdAGWbnVrdAGccHJlcwGicHJlcwGqcHJlcwGycHN0cwG6cHN0cwHAcHN0cwHGcmtyZgHMcmtyZgHScnBoZgHYcnBoZgHecnBoZgHkc3MwMQHqc3MwMQHwc3MwMQH2c3MwMgH8c3MwMgICc3MwMgIIc3MwMwIOc3MwMwIUc3MwMwIac3MwNAIgc3MwNAImc3MwNAIsdmF0dQIyAAAAAwAOAA8AEAAAAAMADgAPABAAAAADAA4ADwAQAAAAAgABAAIAAAACAAEAAgAAAAEAAQAAAAEABQAAAAEABQAAAAEABgAAAAEAEQAAAAEAEQAAAAEAEQAAAAIABwAIAAAAAgAHAAgAAAABAAcAAAABABMAAAABABMAAAABABMAAAABAAAAAAABAAAAAAABAAAAAAACAAoACwAAAAIACgALAAAAAgAKAAsAAAABABIAAAABABIAAAABABIAAAABAAQAAAABAAQAAAABAAMAAAABAAMAAAABAAMeCAABABQeAgABABQd/AABABQeHgABABUeGAABABUeEgABABUeKgABABYeJAABABYeHgABABYeIgABABceHAABABceFgABABcAAAABAAkANABqAHIAegCCAIoAkgCaAKIAqgCyALoAwgD4AQYBDgEWAR4BJgEuATYBPgFGAU4BVgFeAWYBbgF2AX4BhgGOAZYBngGmAa4BtgG+AcYBzgHWAd4B5gHuAfYB/gIGAg4CFgIeAiYCLgI2AAQAAAABAdQABAAAAAECMgAGAAAAAQJMAAQAAAABAlgABAAAAAECYgAEAAAAAQR0AAQAAAABBH4ABAAAAAEEiAAEAAAAAQZ+AAQAAAABCEQABAAAAAEL0gAGAAAAGBjiGPQZBhkYGSoZPBlOGWAZchmEGZYZqBm6GcwZ3hnwGgIaFBomGjgaShpcGm4agAAGAAAABBpcGm4agBqSAAEAAAABGpYABgAAAAEanAAEAAAAARqqAAYAAAABG24ABAAAAAEbegAGAAAAARvAAAQAAAABG8oAAQAAAAEcgAABAAAAARygAAEAAAABHLYAAQAAAAEcuAAEAAAAARy+AAEAAAABHMgAAQAAAAEcxgABAAAAARzEAAEAAAABHMIAAQAAAAEcwAABAAAAARy+AAEAAAABHLwAAQAAAAEcugABAAAAARy4AAEAAAABHLYAAQAAAAEctAABAAAAARyyAAEAAAABHLAAAQAAAAEcrgABAAAAARysAAEAAAABHKoAAQAAAAEcqAABAAAAARymAAEAAAABHKQAAQAAAAEcogABAAAAARygAAEAAAABHJ4AAQAAAAEcnAABAAAAARyaAAEAAAABHJwAAQAAAAEcmgABAAAAARyYAAEcpgAIABYAIAAqADQAPgBIAFIAXAABAAQASAACAH4AAQAEAEkAAgB+AAEABABKAAIAfgABAAQASwACAH4AAQAEAEwAAgB+AAEABABNAAIAfgABAAQATgACAH4AAQAEAE8AAgB+AAEcVAACAAoAFgABAAQARgADAH0AQgABAAQARwADAH0ALQADAAAAAhw6HEAAARxGAAEAAAAYAAEcJgABAAgAAQAEAJIAAgB9AAEcJgAmAFIAXgBqAHYAggCOAJoApgCyAL4AygDWAOIA7gD6AQYBEgEeASoBNgFCAU4BWgFmAXIBfgGKAZYBogGuAboBxgHSAd4B6gH2AgICDgABAAQAlQADAH0APgABAAQAlgADAH0APgABAAQAlwADAH0APgABAAQAmAADAH0APgABAAQAmQADAH0APgABAAQAmgADAH0APgABAAQAmwADAH0APgABAAQAnAADAH0APgABAAQAnQADAH0APgABAAQAngADAH0APgABAAQAnwADAH0APgABAAQAoAADAH0APgABAAQAoQADAH0APgABAAQAogADAH0APgABAAQAowADAH0APgABAAQApAADAH0APgABAAQApQADAH0APgABAAQApgADAH0APgABAAQApwADAH0APgABAAQAqAADAH0APgABAAQAqQADAH0APgABAAQAqgADAH0APgABAAQAqwADAH0APgABAAQArAADAH0APgABAAQArQADAH0APgABAAQArgADAH0APgABAAQArwADAH0APgABAAQAsAADAH0APgABAAQAsQADAH0APgABAAQAsgADAH0APgABAAQAswADAH0APgABAAQAtAADAH0APgABAAQAtQADAH0APgABAAQAtgADAH0APgABAAQAtwADAH0APgABAAQAuAADAH0APgABAAQAuQADAH0APgABAAQAugADAH0APgABGgAAAQAIAAEABACUAAIAPgABGegAAQAIAAEABACUAAIAfQABGgQAKgBaAGQAbgB4AIIAjACWAKAAqgC0AL4AyADSANwA5gDwAPoBBAEOARgBIgEsATYBQAFKAVQBXgFoAXIBfAGGAZABmgGkAa4BuAHCAcwB1gHgAeoB9AABAAQAUAACAH0AAQAEAFEAAgB9AAEABABSAAIAfQABAAQAUwACAH0AAQAEAFQAAgB9AAEABABVAAIAfQABAAQAVgACAH0AAQAEAFcAAgB9AAEABABYAAIAfQABAAQAWQACAH0AAQAEAFoAAgB9AAEABABbAAIAfQABAAQAXAACAH0AAQAEAF0AAgB9AAEABABeAAIAfQABAAQAXwACAH0AAQAEAGAAAgB9AAEABABhAAIAfQABAAQAYgACAH0AAQAEAGMAAgB9AAEABABkAAIAfQABAAQAZQACAH0AAQAEAGYAAgB9AAEABABnAAIAfQABAAQAaAACAH0AAQAEAGkAAgB9AAEABACTAAIAfQABAAQAawACAH0AAQAEAGwAAgB9AAEABABtAAIAfQABAAQAbgACAH0AAQAEAG8AAgB9AAEABABwAAIAfQABAAQAcQACAH0AAQAEAHIAAgB9AAEABABzAAIAfQABAAQAdAACAH0AAQAEAHUAAgB9AAEABAB2AAIAfQABAAQAdwACAH0AAQAEAHgAAgB9AAEABACTAAIAfQABGBYAJgBSAFwAZgBwAHoAhACOAJgAogCsALYAwADKANQA3gDoAPIA/AEGARABGgEkAS4BOAFCAUwBVgFgAWoBdAF+AYgBkgGcAaYBsAG6AcQAAQAEALsAAgB9AAEABAC8AAIAfQABAAQAvQACAH0AAQAEAL4AAgB9AAEABAC/AAIAfQABAAQAwAACAH0AAQAEAMEAAgB9AAEABADCAAIAfQABAAQAwwACAH0AAQAEAMQAAgB9AAEABADFAAIAfQABAAQAxgACAH0AAQAEAMcAAgB9AAEABADIAAIAfQABAAQAyQACAH0AAQAEAMoAAgB9AAEABADLAAIAfQABAAQAzAACAH0AAQAEAM0AAgB9AAEABADOAAIAfQABAAQAzwACAH0AAQAEANAAAgB9AAEABADRAAIAfQABAAQA0gACAH0AAQAEANMAAgB9AAEABADUAAIAfQABAAQA1QACAH0AAQAEANYAAgB9AAEABADXAAIAfQABAAQA2AACAH0AAQAEANkAAgB9AAEABADaAAIAfQABAAQA2wACAH0AAQAEANwAAgB9AAEABADdAAIAfQABAAQA3gACAH0AAQAEAN8AAgB9AAEABADgAAIAfQABFlIATACeAKgAsgC8AMYA0ADaAOQA7gD4AQIBDAEWASABKgE0AT4BSAFSAVwBZgFwAXoBhAGOAZgBogGsAbYBwAHKAdQB3gHoAfIB/AIGAhACGgIkAi4COAJCAkwCVgJgAmoCdAJ+AogCkgKcAqYCsAK6AsQCzgLYAuIC7AL2AwADCgMUAx4DKAMyAzwDRgNQA1oDZANuA3gDggOMAAEABACVAAIAlAABAAQAlgACAJQAAQAEAJcAAgCUAAEABACYAAIAlAABAAQAmQACAJQAAQAEAJoAAgCUAAEABACbAAIAlAABAAQAnAACAJQAAQAEAJ0AAgCUAAEABACeAAIAlAABAAQAnwACAJQAAQAEAKAAAgCUAAEABAChAAIAlAABAAQAogACAJQAAQAEAKMAAgCUAAEABACkAAIAlAABAAQApQACAJQAAQAEAKYAAgCUAAEABACnAAIAlAABAAQAqAACAJQAAQAEAKkAAgCUAAEABACqAAIAlAABAAQAqwACAJQAAQAEAKwAAgCUAAEABACtAAIAlAABAAQArgACAJQAAQAEAK8AAgCUAAEABACwAAIAlAABAAQAsQACAJQAAQAEALIAAgCUAAEABACzAAIAlAABAAQAtAACAJQAAQAEALUAAgCUAAEABAC2AAIAlAABAAQAtwACAJQAAQAEALgAAgCUAAEABAC5AAIAlAABAAQAugACAJQAAQAEALsAAgCUAAEABAC8AAIAlAABAAQAvQACAJQAAQAEAL4AAgCUAAEABAC/AAIAlAABAAQAwAACAJQAAQAEAMEAAgCUAAEABADCAAIAlAABAAQAwwACAJQAAQAEAMQAAgCUAAEABADFAAIAlAABAAQAxgACAJQAAQAEAMcAAgCUAAEABADIAAIAlAABAAQAyQACAJQAAQAEAMoAAgCUAAEABADLAAIAlAABAAQAzAACAJQAAQAEAM0AAgCUAAEABADOAAIAlAABAAQAzwACAJQAAQAEANAAAgCUAAEABADRAAIAlAABAAQA0gACAJQAAQAEANMAAgCUAAEABADUAAIAlAABAAQA1QACAJQAAQAEANYAAgCUAAEABADXAAIAlAABAAQA2AACAJQAAQAEANkAAgCUAAEABADaAAIAlAABAAQA2wACAJQAAQAEANwAAgCUAAEABADdAAIAlAABAAQA3gACAJQAAQAEAN8AAgCUAAEABADgAAIAlAABEuoAKwBcAVABigIkAj4CcgJ8AvoDFAM2A1gDcgOUA64D8ATWBPAFUgV+BtAHNAd+CBYIOAjYCOoJzAn2ClgK/AvIC/oMBAwoDDIMZAyWDKgMygzwDPoNBA0OABwAOgBEAEwAVABcAGQAbAB0AHwAggCIAI4AlACaAKAApgCsALIAuAC+AMQAygDQANYA3ADiAOgA7gEGAAQAbwBkAD8A6gADAF8APQDsAAMAXwBAAPsAAwBsAD0BAgADAG8ALgEDAAMAbwAwAQQAAwBvADMBBQADAG8AqQDhAAIAJADjAAIAJQDkAAIAKQDlAAIAKwDmAAIALgDnAAIAMgDoAAIAMwDtAAIANADuAAIANQDvAAIANwDwAAIAOADyAAIAOQD2AAIAPAD4AAIAPQD5AAIAPwD6AAIAQAD8AAIAQQEBAAIAQwDrAAIApADxAAIAqQAHABAAFgAcACIAKAAuADQBBwACACUBCAACADMBCgACADcBCwACADwBDQACAD0BDwACAEABEQACAEEAEgAmAC4ANgA+AEYATABSAFgAXgBkAGoAcAB2AHwAggCIAI4AlAEaAAMAYgA9ARsAAwBiAEABHQADAGMAPQEgAAMAZwA9ARQAAgAmARUAAgAnARYAAgArARcAAgAyARgAAgA1ARkAAgA2ARwAAgA3AR4AAgA6AR8AAgA7ASEAAgA8ASIAAgA9ASQAAgA/ASUAAgBAASYAAgBDAAMACAAOABQBJwACADcBKAACADwBKQACAD0ABgAOABYAHAAiACgALgEsAAMAVgBAASoAAgApASsAAgAqAS0AAgA3AS4AAgA8AS8AAgA9AAEABAEwAAIAPQAPACAAKAAwADYAPABCAEgATgBUAFoAYABmAGwAcgB4ATYAAwBXAD0BNwADAFcAQAEyAAIAJAEzAAIAKwE4AAIALAE6AAIALgE7AAIAMAE8AAIAMwE9AAIANQE+AAIANwE/AAIAOgFAAAIAPAFBAAIAPQFDAAIAQAE1AAIARwADAAgADgAUAUQAAgA3AUUAAgA8AUYAAgA9AAQACgAQABYAHAFHAAIAKQFIAAIAKgFJAAIAKwFKAAIAQQAEAAoAEAAWABwBSwACAC4BTAACAC8BTQACAD0BTgACAEAAAwAIAA4AFAFPAAIALwFQAAIAPQFRAAIAQAAEAAoAEAAWABwBUgACADABUwACADEBVAACAD0BVQACAEAAAwAIAA4AFAFWAAIAMQFXAAIAPQFYAAIAQAAIABIAGAAeACQAKgAwADYAPAFZAAIALgFaAAIALwFbAAIAMAFcAAIAMQFdAAIAMgFeAAIAPAFfAAIAPQFgAAIAQAAaADYAPgBGAE4AVgBeAGYAbgB2AH4AhgCMAJIAmACeAKQAqgCwALYAvADCAMgAzgDUANoA4AFiAAMAUAA9AWQAAwBQAEABaQADAF8APQFqAAMAXwBAAW0AAwBjAD0BcAADAGQAPwFzAAMAaAA9AXkAAwBvADcBegADAG8APQF7AAMAbwBAAWEAAgAkAWYAAgAlAWgAAgAzAWsAAgA0AWwAAgA3AW4AAgA4AXEAAgA5AXIAAgA8AXQAAgA9AXYAAgA/AXcAAgBAAXgAAgBDAWUAAgBGAWMAAgCVAWcAAgCWAW8AAgCpAAMACAAOABQBfAACADcBfQACAD0BfgACAEAADAAaACAAJgAsADIAOAA+AEQASgBQAFYAXAF/AAIAJgGBAAIAJwGCAAIANQGDAAIANgGEAAIANwGFAAIAOgGHAAIAOwGIAAIAPAGJAAIAPQGKAAIAQAGAAAIAlwGGAAIAqwAFAAwAFAAaACAAJgGMAAMAYwA9AYsAAgA3AY0AAgA8AY4AAgA9AY8AAgBAACYATgBYAGAAaABwAHgAgACIAJAAmACgAKgAsAC4AMAAyADOANQA2gDgAOYA7ADyAPgA/gEEAQoBEAEWARwBIgEoAS4BNAE6AUABRgFMAbMABABvAGgAPQGRAAMAUABDAZcAAwBfAD0BmQADAF8AQwGbAAMAYAA9AZwAAwBgAEABnwADAGEAQAGhAAMAYgA9AaMAAwBiAEABpQADAGMAPQGrAAMAZwA9AawAAwBnAEABrgADAGgAPQGyAAMAbwAuAbQAAwBvAD0BkAACACQBkgACACkBkwACACoBlAACAC4BlQACADABlgACADMBmgACADQBnQACADUBoAACADYBpAACADcBpgACADgBqAACADkBqgACADsBrQACADwBrwACAD0BsAACAEABsQACAEMBtQACAEQBmAACAKQBngACAKYBogACAKcBpwACAKkBqQACAKoADAAaACIAKAAuADQAOgBAAEYATABSAFgAXgG5AAMAXwA9AbYAAgAuAbcAAgAvAbgAAgAzAboAAgA3AbsAAgA4AbwAAgA5Ab0AAgA8Ab4AAgA9Ab8AAgA/AcAAAgBAAcEAAgBDAAkAFAAaACAAJgAsADIAOAA+AEQBwgACACsBxAACAC4BxQACADMBxwACADcByAACADgByQACADkBywACAD0BzAACAD8BzQACAEEAEgAmAC4ANgA+AEQASgBQAFYAXABiAGgAbgB0AHoAgACGAIwAkgHRAAMAVwA9AdYAAwBiAEAB3QADAGsAPQHPAAIAKwHSAAIALAHTAAIAMwHUAAIANQHVAAIANgHXAAIANwHYAAIAOgHZAAIAOwHbAAIAPQHcAAIAPwHeAAIAQAHfAAIAQQHgAAIAQwHQAAIASwHaAAIArAAEAAoAEAAWABwB4QACADcB4gACAD0B5AACAD8B5QACAEAAEwAoADAAOABAAEYATABSAFgAXgBkAGoAcAB2AHwAggCIAI4AlACaAewAAwBmAD0B7wADAGcAPQHxAAMAZwBAAeYAAgAzAecAAgA1AegAAgA3AekAAgA4AesAAgA6Ae4AAgA7AfIAAgA8AfMAAgA9AfQAAgA/AfUAAgBAAfYAAgBBAfcAAgBDAfgAAgBEAeoAAgCpAe0AAgCrAfAAAgCsAAIABgAMAfkAAgA3AfoAAgA9ABsAOABAAEgAUABYAF4AZABqAHAAdgB8AIIAiACOAJQAmgCgAKYArACyALgAvgDEAMoA0ADWANwB/gADAFAAPQIJAAMAYAA9AhMAAwBrAD0CFQADAGwAMAH9AAIAJAH/AAIAJQIAAAIAJgIBAAIAKwIDAAIALgIEAAIALwIFAAIAMAIGAAIAMQIHAAIAMwIIAAIANAIKAAIANQIMAAIAOAINAAIAOQIOAAIAOgIPAAIAOwIQAAIAPAIRAAIAPQISAAIAPwIUAAIAQAIWAAIAQwIXAAIARAICAAIASwILAAIApgAFAAwAEgAYAB4AJAIYAAIANwIZAAIAPQIaAAIAPwIbAAIAQAIcAAIARAAMABoAIAAmACwAMgA4AD4ARABKAFAAVgBcAh0AAgAkAh8AAgApAiAAAgAqAiEAAgAuAiIAAgAzAiMAAgA3AiQAAgA8AiUAAgA9AiYAAgA/AicAAgBAAigAAgBBAh4AAgBIABMAKAAwADgAQABIAFAAVgBcAGIAaABuAHQAegCAAIYAjACSAJgAngIsAAMAWgA9Ai4AAwBaAEACMAADAFsAPQIzAAMAXgA9AjgAAwBoAD0CKQACACQCKwACAC4CLwACAC8CMgACADICNAACADgCNgACADkCNwACADwCOQACAD0COgACAEACOwACAEICKgACAJUCLQACAJ8CMQACAKACNQACAKkAGAAyADoAQgBKAFIAWgBgAGYAbAByAHgAfgCEAIoAkACWAJwAogCoAK4AtAC6AMAAxgI+AAMAUABAAkMAAwBfAD0CRQADAF8AQAJHAAMAYAA9Ak8AAwBoAD0CPAACACQCPwACACUCQAACACsCQQACAC4CQgACADMCRgACADQCSAACADUCSQACADcCSgACADgCTAACADkCTQACADoCTgACADwCUAACAD0CUQACAD8CUgACAEACUwACAEMCPQACAJUCRAACAKQCSwACAKkABgAOABQAGgAgACYALAJUAAIAMgJVAAIANwJWAAIAPAJXAAIAPQJYAAIAPwJZAAIAQAABAAQCWgACAD0ABAAKABIAGAAeAP4AAwBoAD0A/QACADwA/wACAD0BAAACAEAAAQAEATkAAgA9AAYADgAUABoAIAAmACwA6QACADMA8wACADkA9QACADoA9wACADwA4gACAEgA9AACAE4ABgAOABQAGgAgACYALAEJAAIAMwEMAAIAPAEOAAIAPQEQAAIAQAESAAIAQQETAAIAQwACAAYADAFCAAIAPQE0AAIASwAEAAoAEAAWABwBxgACADMBzgACAEMBwwACAEsBygACAE4ABAAKABIAGgAgAfsAAwCQAD0B/AADAJAARAH7AAIAPQH8AAIARAABAAQBIwACAD0AAQAEATEAAgA9AAEABAF1AAIAPQABAAQB4wACAD0AAwAAAAEGDAABBhIAAQAAABkAAwAAAAEF+gABBjgAAQAAABoAAwAAAAEF6AABBkIAAQAAABsAAwAAAAEF1gABBlYAAQAAABwAAwAAAAEFxAABBmwAAQAAAB0AAwAAAAEFsgABBnoAAQAAAB4AAwAAAAEFoAABBoYAAQAAAB8AAwAAAAEFjgABBowAAQAAACAAAwAAAAEFfAABBpIAAQAAACEAAwAAAAEFagABBpAAAQAAACIAAwAAAAEFWAABBqIAAQAAACMAAwAAAAEFRgABBrwAAQAAACQAAwAAAAEFNAABBwAAAQAAACUAAwAAAAEFIgABB0YAAQAAACYAAwAAAAEFEAABB5IAAQAAACcAAwAAAAEE/gABB8AAAQAAACgAAwAAAAEE7AABB/AAAQAAACkAAwAA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AnMAAQCyAAYACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAAkACgAKgAuAC8AMAAxADUAOQA+AD8ARABFAEgATABNAE4ATwBUAFoAWwBcAF0AYQBqAHAAlQCZAJsAnwCgAKEAogCmAKoArwC0ALUAtgC6AL8AxQDGAMcAyADMANUA2gDhAOIA5gDoAO4A8gDzAPQA+QECAQMBBgEYASQBKwEsATIBOgE7AT0BSAFLAUwBTgFPAVEBUgFTAVUBVgFYAVkBWgFbAVwBYQFjAXABcQF2AX8BgAGBAYIBgwGFAYYBiAGKAZABkwGUAZUBnQGeAZ8BqAGpAbIBtQG2AbcBvAG/AcQByQHKAcwB1AHcAeQB5wH0AfgB/AH9AgMCBAIFAgYCCgILAg0CEgIVAhcCGgIcAh0CHgIgAiECJgIpAioCKwItAi4CLwIxAjYCPAI9AkECSAJMAlECVAJYAlkCdQJ2AncCeAJ5AnsAAgABAl0CXwAAAAIACAAkAE8AAACVALoALADhAQUAUgEHAZAAdwGSAbIBAQG0Af0BIgH/AhIBbAIUAloBgAACAAEAGAAdAAAAAQCPACQAKAAqAC4ALwAwADEANQA5AD8ARABFAEgATABNAE4AlQCZAJsAnwCgAKEAogCmAKoArwC0ALUAtgC6AOEA4gDmAOgA7gDyAPMA9AD5AQIBAwEGARgBJAErASwBMgE6ATsBPQFIAUsBTAFOAU8BUQFSAVMBVQFWAVgBWQFaAVsBXAFhAWMBcAFxAXYBfwGAAYEBggGDAYUBhgGIAYoBkAGTAZQBlQGdAZ4BnwGoAakBsgG1AbYBtwG8Ab8BxAHJAcoBzAHUAdwB5AHnAfQB+AH8Af0CAwIEAgUCBgIKAgsCDQISAhUCFwIaAhwCHQIeAh8CIAIhAiYCJwIpAioCKwItAi4CLwIxAjYCPAI9AkECSAJMAlECVAJXAlgCWQABAAEAfQAAAAAAAQAAAAA="

/***/ }),
/* 1160 */
/***/ (function(module, exports) {

	module.exports = "data:font/opentype;base64,T1RUTwANAIAAAwBQQ0ZGIFh9x2sAAAykAAEWTkRTSUcAAAABAAFwZAAAAAhHREVGCRYJGQABM4QAAABAR1BPUwUZDJcAAVuIAAAU2kdTVULoyw7xAAEzxAAAJ8JPUy8y2lB4+AAAAUAAAABgY21hcJLonLoAAAeMAAAE+GhlYWQTsJ6QAAAA3AAAADZoaGVhDFQF8QAAARQAAAAkaG10eIad81IAASL0AAAQjm1heHAEJFAAAAABOAAAAAZuYW1lwZ8lAAAAAaAAAAXscG9zdP+4ADIAAAyEAAAAIAABAAAAAzMzevayQV8PPPUAAwPoAAAAANZiFEcAAAAA1mIUR/3n/boJ7AQ1AAAAAwACAAAAAAAAAAEAAAQa/qIAZAnW/ef5VQnsAAEAAAAAAAAAAAAAAAAAAAQjAABQAAQkAAAABANbAfQABQAAAooCWAAAAEsCigJYAAABXgAyAUoAAAAABgAAAAAAAAAAAIAHAAAAAAAAAAAAAAAASVRGTwDAAAD7AgQa/qIAZARvAnMgAACTAAAAAAInArkAAAAgAAQAAAATAOoAAwABBAkAAACIAAAAAwABBAkAAQAcAIgAAwABBAkAAgAOAKQAAwABBAkAAwAyALIAAwABBAkABAAcAIgAAwABBAkABQB2AOQAAwABBAkABgAcAVoAAwABBAkACAAmAXYAAwABBAkACQBcAZwAAwABBAkACwA6AfgAAwABBAkADQEgAjIAAwABBAkADgA0A1IAAwABBAkAEAAOA4YAAwABBAkAEQAMA5QAAwABBAkAEwCuA6AAAwABBAkBAABABE4AAwABBAkBAQAeBI4AAwABBAkBAgAqBKwAAwABBAkBAwAsBNYAQwBvAHAAeQByAGkAZwBoAHQAIAAyADAAMQA0AC0AMgAwADEANwAgAEkAbgBkAGkAYQBuACAAVAB5AHAAZQAgAEYAbwB1AG4AZAByAHkAIAAoAGkAbgBmAG8AQABpAG4AZABpAGEAbgB0AHkAcABlAGYAbwB1AG4AZAByAHkALgBjAG8AbQApAFAAbwBwAHAAaQBuAHMAIABNAGUAZABpAHUAbQBSAGUAZwB1AGwAYQByADMALgAyADAAMAA7AEkAVABGAE8AOwBQAG8AcABwAGkAbgBzAC0ATQBlAGQAaQB1AG0AVgBlAHIAcwBpAG8AbgAgADMALgAyADAAMAA7AFAAUwAgADEALgAwADAAMAA7AGgAbwB0AGMAbwBuAHYAIAAxADYALgA2AC4ANQA0ADsAbQBhAGsAZQBvAHQAZgAuAGwAaQBiADIALgA1AC4ANgA1ADUAOQAwAFAAbwBwAHAAaQBuAHMALQBNAGUAZABpAHUAbQBJAG4AZABpAGEAbgAgAFQAeQBwAGUAIABGAG8AdQBuAGQAcgB5AE4AaQBuAGEAZAAgAEsAYQBsAGUAIAAoAEQAZQB2AGEAbgBhAGcAYQByAGkAKQAsACAASgBvAG4AbgB5ACAAUABpAG4AaABvAHIAbgAgACgATABhAHQAaQBuACkAaAB0AHQAcABzADoALwAvAGkAbgBkAGkAYQBuAHQAeQBwAGUAZgBvAHUAbgBkAHIAeQAuAGMAbwBtAFQAaABpAHMAIABGAG8AbgB0ACAAUwBvAGYAdAB3AGEAcgBlACAAaQBzACAAbABpAGMAZQBuAHMAZQBkACAAdQBuAGQAZQByACAAdABoAGUAIABTAEkATAAgAE8AcABlAG4AIABGAG8AbgB0ACAATABpAGMAZQBuAHMAZQAsACAAVgBlAHIAcwBpAG8AbgAgADEALgAxAC4AIABUAGgAaQBzACAAbABpAGMAZQBuAHMAZQAgAGkAcwAgAGEAdgBhAGkAbABhAGIAbABlACAAdwBpAHQAaAAgAGEAIABGAEEAUQAgAGEAdAA6ACAAaAB0AHQAcAA6AC8ALwBzAGMAcgBpAHAAdABzAC4AcwBpAGwALgBvAHIAZwAvAE8ARgBMAGgAdAB0AHAAOgAvAC8AcwBjAHIAaQBwAHQAcwAuAHMAaQBsAC4AbwByAGcALwBPAEYATABQAG8AcABwAGkAbgBzAE0AZQBkAGkAdQBtCTgJLQlAACAJLgkoCUEJNwlNCS8JSwkCACAJFQlLACAJFwlMCTAJNQAgCRQJMAAgCQUJJwk/CRUJPgkwCUsJAgAgCRUJRwAgCS4JPgkuCTIJRwAgCS4JRwkCACAJHAkoCU0JLgkcCT4JJAAgCTgJTQk1CSQJKAlNCSQJTQkwCSQJPgAgCRQJMAAgCTgJLgk+CSgJJAk+ACAJKglNCTAJPgkqCU0JJAAgCTkJSAlkAFMAcQB1AGEAcgBlACAAZABvAHQAcwAgAGkAbgAgAHAAdQBuAGMAdAB1AGEAdABp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AzIDOAM/A0UDTANTA1oDYgNpA3EDeAN+A4UDiwOSA5gDngOlA6sDsgO4A74DxAPKA9ED2APeA+QD6wPyA/oEAQQIBBAEFQQbBCAEJgQsBDEENwQ8BEIESAROBFUEWwRiBGgEbQRzBHgEfgSDBIgEjgSTBJkEngSjBKgErQSzBLkEvgTDBMkEzwTWBNwE4gTpBO8E9wT+BQQFCgURBRgFHgUlBS0FNQU9BUQFSgVQBVYFXgVlBW0FdgV9BYMFigWQBZYFnAWkBasFtAW/BcgF0QXXBeAF6QXxBfsGBQYNBhQGHAYjBioGMgY5BkEGSAZQBlgGYQZpBm8GdgZ8BoMGiQaQBpkGogaoBrAGtga9BsYGzAbSBtoG4AbmBuwG8wb6BwEHBwcOBxcHHQcjBykHMAc5Bz8HRQdNB1YHXgdmB20Hdgd9B4QHigeQB5YHnAeiB6gHrwe1B7wHwwfKB9EH2QfgB+gH8Af5CAAIBwgRCBkIIQgpCDIIOQhACEoIUghaCGIIawhzCHwIhAiLCJIImQifCKcIrwi3CMAIxwjQCNYI3gjmCO0I8wj7CQEJCQkRCRgJHgkmCSwJNAk6CUAJRglOCVYJXgllCWwJcwl5CYEJiAmOCZUJmwmhCakJsAm2CbwJwgnJCdIJ2QngCecJ7Qn1CfsKAgoJChAKFgoeCiYKLgo1Cj4KRwpNClUKXQpkCm0Kdgp/CoUKjQqTCpsKogqrCrIKuwrECsoK0grYCt4K5ArtCvcK/wsFCwwLFAsaCyILKAsuCzULOwtBC0cLTQtTC1oLYwtrC3ILeguBC4gLkAuaC6ELqAuwC7gLvgvFC80L1AvaC+AL5wvwC/YL/AwDDAwMEgwYDCAMJgwtDDMMOgxBDEoMUQxYDF4MZAxqDHAMeAx+DIYMjgyVDJ4MpwywDLYMvAzCDMgMzwzVDNsM4QznDPMM/w0FDQ0NFA0aDSANJw0uDTYNPQ1FDUsNUg1bDWENaQ1vDXYNfA2DDYkNjw2VDZ0Now2sDbINuA2+DcQNyg3QDdYN3Q3lDewN9A38DgMOCg4RDhgOHw4mDi4ONQ4+DkYOUA5aDmQObQ54DoMOiw6VDpwOpQ6tDrQOvQ7EDssO0w7ZDuEO6Q7wDvYO/Q8DDwsPEw8bDyIPKw8xDzcPPQ9FD0wPUg9YD2APZg9sD3IPeA9/D4UPiw+RD5cPnQ+kD68Pvg/MD9YP6Q/2EAQQDhAhEDUQRRBeEGsQdBCGEJQQnhCxEL4QxxDZEOcQ8REEERcRKhExETkRQBFIEVARWRFhEWkRcRF5EYERiRGREZkRoRGpEbERuRHBEckR0RHZEeER6RHxEfkSARIJEhESGRIhEigSLxI2Ej0SRBJKElASVxJeEmQSahJ0En4ShBKKEpASlhKcEqISqRKwErYSvBLGEtAS1xLeEuQS6hLwEvYTABMKExETGBMeEyQTKxMyEzkTQBNHE04TWBNfE2YTbBNyE3kTgBOGE4wTkBOUE5oToBOnE64TtBO6E8ETyBPPE9YT4xPwE/YT/BQDFAoUEBQWFBwUIhQpFDAUNxQ+FEQUShRQFFYUXRRkFGoUcBR1FHoUhxSUFJsUohStFLgUwxTOFNQU2hTkFO4U9RT8FQMVChURFRgVHxUmFS0VNBU2FTwVQhVIFU4VVxVgFWcVbhV0FXoVgRWIFYwVkxWaFaEVqBWxFbwVwxXKFdMV2hXhFegV8BX4FgMWCxYUFiAWJxYyFjwWRxZRFl8WbBZ7Fo4WnxaqFrwWyhbZFuoW/BcJFw8XGhclFzUXQxdOF1oXZhdwF3sXiReRF5sXoxesF7FOVUxMQ1JkdkFkdkFBZHZJZHZJSWR2VWR2VVVkdnZSZHZ2UlJkdnZMZHZ2TExkdkVkdkFJZHZPZHZBVWR2RWNhbmRyYWR2QWNhbmRyYWR2T2NhbmRyYWR2bUFBZHZtSWR2bUlJZHZtVWR2bVVVZHZtdlJkdm12UlJkdm12TGR2bXZMTGR2bUVkdm1BSWR2bU9kdm1BVWR2bUVjYW5kcmFkdm1PY2FuZHJhZHZLQWR2S0hBZHZHQWR2R0hBZHZOR0FkdkNBZHZDSEFkdkpBZHZKSEFkdk5ZQWR2VFRBZHZUVEhBZHZEREFkdkRESEFkdk5OQWR2VEFkdlRIQWR2REFkdkRIQWR2TkFkdlBBZHZQSEFkdkJBZHZCSEFkdk1BZHZZQWR2UkFkdkxBZHZWQWR2U0hBZHZTU0FkdlNBZHZIQWR2TExBZHZLX1NTQWR2Sl9OWUFkdkt4QWR2S0h4QWR2R3hBZHZKeEFkdkREeEFkdkRESHhBZHZQSHhBZHZSeEFkdktkdktIZHZHZHZHSGR2TkdkdkNkdkNIZHZKZHZKSGR2TllkdlRUZHZUVEhkdkREZHZEREhkdk5OZHZUZHZUSGR2RGR2REhkdk5kdlBkdlBIZHZCZHZCSGR2TWR2WWR2UmR2TGR2VmR2U0hkdlNTZHZTZHZIZHZMTGR2S19TU2R2Sl9OWWR2S3hkdktIeGR2R3hkdkp4ZHZQSHhkdkFudXN2YXJhZHZDYW5kcmFiaW5kdWR2VmlzYXJnYWR2QXZhZ3JhaGFkdlZpcmFtYWR2TnVrdGFkdlplcm9kdk9uZWR2VHdvZHZUaHJlZWR2Rm91cmR2Rml2ZWR2U2l4ZHZTZXZlbmR2RWlnaHRkdk5pbmVkdk9tZHZBYmJyZXZpYXRpb25zaWduZGFuZGFkb3VibGVkYW5kYXJ1cGVlaW5kaWFucnVwZWV6ZXJvd2lkdGhub25qb2luZXJ6ZXJvd2lkdGhqb2luZXJkb3R0ZWRjaXJjbGVkdlJlcGhkdkV5ZWxhc2hkdlJhc2h0cmFzaWduZHZLX1JBZHZLSF9SQWR2R19SQWR2R0hfUkFkdk5HX1JBZHZDX1JBZHZDSF9SQWR2Sl9SQWR2SkhfUkFkdk5ZX1JBZHZUVF9SQWR2VFRIX1JBZHZERF9SQWR2RERIX1JBZHZOTl9SQWR2VF9SQWR2VEhfUkFkdkRfUkFkdkRIX1JBZHZOX1JBZHZQX1JBZHZQSF9SQWR2Ql9SQWR2QkhfUkFkdk1fUkFkdllfUkFkdkxfUkFkdlZfUkFkdlNIX1JBZHZTU19SQWR2U19SQWR2SF9SQWR2TExfUkFkdkt4X1JBZHZLSHhfUkFkdkd4X1JBZHZKeF9SQWR2UEh4X1JBZHZLX1JkdktIX1JkdkdfUmR2R0hfUmR2TkdfUmR2Q19SZHZDSF9SZHZKX1JkdkpIX1Jkdk5ZX1JkdlRUX1JkdlRUSF9SZHZERF9SZHZEREhfUmR2Tk5fUmR2VF9SZHZUSF9SZHZEX1JkdkRIX1Jkdk5fUmR2UF9SZHZQSF9SZHZCX1JkdkJIX1Jkdk1fUmR2WV9SZHZMX1JkdlZfUmR2U0hfUmR2U1NfUmR2U19SZHZIX1JkdkxMX1Jkdkt4X1JkdktIeF9SZHZHeF9SZHZKeF9SZHZQSHhfUmR2S19LQWR2S3hfS3hBZHZLX0tIQWR2S19DQWR2S19KQWR2S19UVEFkdktfTk5BZHZLX1RBZHZLeF9UQWR2S19UX1lBZHZLX1RfUkFkdktfVF9WQWR2S19USEFkdktfREFkdktfTkFkdktfUEFkdktfUF9SQWR2S19QSEFkdkt4X1BIQWR2S3hfUEh4QWR2S3hfQkFkdktfTUFkdkt4X01BZHZLX1lBZHZLX0xBZHZLX1ZBZHZLX1ZfWUFkdktfU0hBZHZLX1NTX01BZHZLX1NTX01fWUFkdktfU1NfWUFkdktfU1NfVkFkdktfU0FkdktfU19UVEFkdktfU19EREFkdktfU19UQWR2S19TX1BfUkFkdktfU19QX0xBZHZLSF9LSEFkdktIX1RBZHZLSHhfVEFkdktIX05BZHZLSF9NQWR2S0h4X01BZHZLSF9ZQWR2S0h4X1lBZHZLSF9WQWR2S0h4X1ZBZHZLSF9TSEFkdktIeF9TSEFkdktIeF9TQWR2R19HQWR2R19HSEFkdkdfSkFkdkdfTk5BZHZHX0RBZHZHX0RIQWR2R19ESF9ZQWR2R19ESF9WQWR2R19OQWR2R19OX1lBZHZHX0JBZHZHX0JIQWR2R19CSF9ZQWR2R19NQWR2R19ZQWR2R19SX1lBZHZHX0xBZHZHX1ZBZHZHX1NBZHZHSF9OQWR2R0hfTUFkdkdIX1lBZHZDX0NBZHZDX0NIQWR2Q19DSF9WQWR2Q19OQWR2Q19NQWR2Q19ZQWR2Q0hfWUFkdkNIX1JfWUFkdkpfS0FkdkpfSkFkdkp4X0p4QWR2Sl9KX05ZQWR2Sl9KX1lBZHZKX0pfVkFkdkpfSkhBZHZKX05ZX1lBZHZKX1RUQWR2Sl9EREFkdkpfVEFkdkpfREFkdkpfTkFkdkpfQkFkdkpfTUFkdkpfWUFkdkp4X1lBZHZKX1ZBZHZKSF9OQWR2SkhfTUFkdkpIX1lBZHZOWV9DQWR2TllfQ0hBZHZOWV9KQWR2TllfU0hBZHZUVF9UVEFkdlRUX1RUSEFkdlRUX1lBZHZUVF9WQWR2VFRIX1RUSEFkdlRUSF9ZQWR2VFRIX1ZBZHZERF9EREFkdkREX0RESEFkdkREX1lBZHZERF9WQWR2RERIX0RESEFkdkRESF9ZQWR2RERIX1ZBZHZOTl9UVEFkdk5OX1RUSEFkdk5OX0REQWR2Tk5fRERIQWR2Tk5fTk5BZHZOTl9NQWR2Tk5fWUFkdk5OX1ZBZHZUX0tBZHZUX0tfWUFkdlRfS19SQWR2VF9LX1ZBZHZUX0tfU1NBZHZUX0tIQWR2VF9LSF9SQWR2VF9UQWR2VF9UX1lBZHZUX1RfVkFkdlRfVEhBZHZUX05BZHZUX05fWUFkdlRfUEFkdlRfUF9SQWR2VF9QX0xBZHZUX1BIQWR2VF9NQWR2VF9NX1lBZHZUX1lBZHZUX1JfWUFkdlRfTEFkdlRfVkFkdlRfU0FkdlRfU19OQWR2VF9TX1lBZHZUX1NfVkFkdlRIX05BZHZUSF9ZQWR2VEhfVkFkdkRfR0FkdkRfR19SQWR2RF9HSEFkdkRfREFkdkRfREhBZHZEX05BZHZEX0JBZHZEX0JfUkFkdkRfQkhBZHZEX01BZHZEX1lBZHZEX1ZBZHZESF9OQWR2REhfTl9ZQWR2REhfTUFkdkRIX1lBZHZESF9WQWR2Tl9LQWR2Tl9LX1NBZHZOX0NBZHZOX0NIQWR2Tl9UVEFkdk5fRERBZHZOX1RBZHZOX1RfWUFkdk5fVF9SQWR2Tl9UX1NBZHZOX1RIQWR2Tl9USF9ZQWR2Tl9USF9WQWR2Tl9EQWR2Tl9EX1JBZHZOX0RfVkFkdk5fREhBZHZOX0RIX1lBZHZOX0RIX1JBZHZOX0RIX1ZBZHZOX05BZHZOX05fWUFkdk5fUEFkdk5fUF9SQWR2Tl9QSEFkdk5fUEhfUkFkdk5fQkhBZHZOX0JIX1lBZHZOX0JIX1ZBZHZOX01BZHZOX01fWUFkdk5fWUFkdk5fVkFkdk5fU0Fkdk5fU19UVEFkdk5fU19NX1lBZHZOX1NfWUFkdk5fSEFkdlBfVFRBZHZQX1RUSEFkdlBfVEFkdlBfVF9ZQWR2UF9OQWR2UF9QQWR2UF9QSEFkdlBfTUFkdlBfWUFkdlBfTEFkdlBfVkFkdlBfU0FkdlBIX0pBZHZQSHhfSnhBZHZQSF9UVEFkdlBIX1RBZHZQSHhfVEFkdlBIX05BZHZQSF9QQWR2UEhfUEhBZHZQSHhfUEh4QWR2UEhfWUFkdlBIX0xBZHZQSF9TSEFkdlBIeF9TQWR2Ql9KQWR2Ql9KeEFkdkJfSl9ZQWR2Ql9KSEFkdkJfVEFkdkJfREFkdkJfREhBZHZCX0RIX1ZBZHZCX05BZHZCX0JBZHZCX0JIQWR2Ql9CSF9SQWR2Ql9ZQWR2Ql9MQWR2Ql9MX1lBZHZCX1ZBZHZCX1NIQWR2Ql9TQWR2QkhfTkFkdkJIX1lBZHZCSF9SX1lBZHZCSF9MQWR2QkhfVkFkdk1fVEFkdk1fREFkdk1fTkFkdk1fUEFkdk1fUF9SQWR2TV9CQWR2TV9CX1lBZHZNX0JfUkFkdk1fQkhBZHZNX0JIX1lBZHZNX0JIX1JBZHZNX0JIX1ZBZHZNX01BZHZNX1lBZHZNX0xBZHZNX1ZBZHZNX1NIQWR2TV9TQWR2TV9IQWR2WV9OQWR2WV9ZQWR2RXllbGFzaF9ZQWR2RXllbGFzaF9IQWR2TF9LQWR2TF9LX1lBZHZMX0tIQWR2TF9HQWR2TF9KQWR2TF9KeEFkdkxfVFRBZHZMX1RUSEFkdkxfRERBZHZMX0RESEFkdkxfVEFkdkxfVEhBZHZMX1RIX1lBZHZMX0RBZHZMX0RfUkFkdkxfUEFkdkxfUEhBZHZMX0JBZHZMX0JIQWR2TF9NQWR2TF9ZQWR2TF9MQWR2TF9MX1lBZHZMX1ZBZHZMX1ZfRERBZHZMX1NBZHZMX0hBZHZWX05BZHZWX1lBZHZWX0xBZHZWX1ZBZHZWX0hBZHZTSF9LQWR2U0hfS3hBZHZTSF9DQWR2U0hfQ0hBZHZTSF9UVEFkdlNIX1RBZHZTSF9OQWR2U0hfTUFkdlNIX1lBZHZTSF9MQWR2U0hfVkFkdlNIX1NIQWR2U1NfS0FkdlNTX0tfUkFkdlNTX1RUQWR2U1NfVFRfWUFkdlNTX1RUX1JBZHZTU19UVF9WQWR2U1NfVFRIQWR2U1NfVFRIX1lBZHZTU19UVEhfUkFkdlNTX05OQWR2U1NfTk5fWUFkdlNTX1BBZHZTU19QX1JBZHZTU19QSEFkdlNTX01BZHZTU19NX1lBZHZTU19ZQWR2U1NfVkFkdlNTX1NTQWR2U19LQWR2U19LX1JBZHZTX0tfVkFkdlNfS0hBZHZTX0pBZHZTX1RUQWR2U19UQWR2U19UX1lBZHZTX1RfUkFkdlNfVF9WQWR2U19USEFkdlNfVEhfWUFkdlNfREFkdlNfTkFkdlNfUEFkdlNfUF9SQWR2U19QSEFkdlNfQkFkdlNfTUFkdlNfTV9ZQWR2U19ZQWR2U19MQWR2U19WQWR2U19TQWR2SF9OTkFkdkhfTkFkdkhfTUFkdkhfWUFkdkhfTEFkdkhfVkFkdkxMX1lBZHZtSUkuYUxvbmdkdlJlcGhfQW51c3ZhcmFkdkFudXN2YXJhLmFtSWR2UmVwaC5hbUlkdlJlcGhfQW51c3ZhcmEuYW1JZHZJSV9BbnVzdmFyYWR2bUlJX0FudXN2YXJhZHZtSUlfUmVwaGR2bUlJX1JlcGhfQW51c3ZhcmFkdm1JSV9BbnVzdmFyYS5hTG9uZ2R2bUlJX1JlcGguYUxvbmdkdm1JSV9SZXBoX0FudXN2YXJhLmFMb25nZHZtRV9BbnVzdmFyYWR2bUVfUmVwaGR2bUVfUmVwaF9BbnVzdmFyYWR2bUFJX0FudXN2YXJhZHZtQUlfUmVwaGR2bUFJX1JlcGhfQW51c3ZhcmFkdm1PX0FudXN2YXJhZHZtT19SZXBoZHZtT19SZXBoX0FudXN2YXJhZHZtQVVfQW51c3ZhcmFkdm1BVV9SZXBoZHZtQVVfUmVwaF9BbnVzdmFyYWR2bUVjYW5kcmFfQW51c3ZhcmFkdm1PY2FuZHJhX0FudXN2YXJhZHZSQV9tVWR2UkFfbVVVZHZIQV9tVWR2SEFfbVVVZHZEQV9tdlJkdlNIQV9tdlJkdkhBX212UmR2bUkuYTAxZHZtSS5hMDJkdm1JLmEwM2R2bUkuYTA0ZHZtSS5hMDVkdm1JLmEwNmR2bUkuYTA3ZHZtSS5hMDhkdm1JLmEwOWR2bUkuYTEwZHZtSS5hMTFkdm1JLmExMmR2bUkuYTEzZHZtSS5hMTRkdm1JLmExNWR2bUkuYTE2ZHZtSS5hMTdkdm1JLmExOGR2bUkuYTE5ZHZtSS5hMjBkdm1JLmEyMWR2bUkuYTIyZHZtSS5hMjNkdm1JLmEyNHVuaTAwQTB1bmkwMEFEdW5pMDBCNUFtYWNyb25hbWFjcm9uQWJyZXZlYWJyZXZlQW9nb25la2FvZ29uZWtDYWN1dGVjYWN1dGVDZG90YWNjZW50Y2RvdGFjY2VudENjYXJvbmNjYXJvbkRjYXJvbmRjYXJvbkRjcm9hdGRjcm9hdEVtYWNyb25lbWFjcm9uRWJyZXZlZWJyZXZlRWRvdGFjY2VudGVkb3RhY2NlbnRFb2dvbmVrZW9nb25la0VjYXJvbmVjYXJvbkdicmV2ZWdicmV2ZUdkb3RhY2NlbnRnZG90YWNjZW50dW5pMDEyMnVuaTAxMjNJdGlsZGVpdGlsZGVJbWFjcm9uaW1hY3JvbnVuaTAxMkN1bmkwMTJESW9nb25la2lvZ29uZWtJZG90YWNjZW50dW5pMDEzNnVuaTAxMzdMYWN1dGVsYWN1dGV1bmkwMTNCdW5pMDEzQ0xjYXJvbmxjYXJvbkxkb3RsZG90TmFjdXRlbmFjdXRldW5pMDE0NXVuaTAxNDZOY2Fyb25uY2Fyb25PbWFjcm9ub21hY3JvbnVuaTAxNEV1bmkwMTRGT2h1bmdhcnVtbGF1dG9odW5nYXJ1bWxhdXRSYWN1dGVyYWN1dGV1bmkwMTU2dW5pMDE1N1JjYXJvbnJjYXJvblNhY3V0ZXNhY3V0ZXVuaTAxNUV1bmkwMTVGdW5pMDE2MnVuaTAxNjNUY2Fyb250Y2Fyb25VdGlsZGV1dGlsZGVVbWFjcm9udW1hY3JvblVicmV2ZXVicmV2ZVVyaW5ndXJpbmdVaHVuZ2FydW1sYXV0dWh1bmdhcnVtbGF1dFVvZ29uZWt1b2dvbmVrV2NpcmN1bWZsZXh3Y2lyY3VtZmxleFljaXJjdW1mbGV4eWNpcmN1bWZsZXhaYWN1dGV6YWN1dGVaZG90YWNjZW50emRvdGFjY2VudHVuaTAxOEZ1bmkwMUZDdW5pMDFGRHVuaTAyMTh1bmkwMjE5dW5pMDIxQXVuaTAyMUJ1bmkwMjU5dW5pMDJCQ3VuaTAyQzlwaVdncmF2ZXdncmF2ZVdhY3V0ZXdhY3V0ZVdkaWVyZXNpc3dkaWVyZXNpc3VuaTFFQkN1bmkxRUJEWWdyYXZleWdyYXZldW5pMUVGOHVuaTFFRjlFdXJvdW5pMjBCQXVuaTIwQkR1bmkyMTEzdW5pMjEyNmVzdGltYXRlZHBhcnRpYWxkaWZmdW5pMjIwNnByb2R1Y3RzdW1tYXRpb251bmkyMjE1dW5pMjIxOXJhZGljYWxpbmZpbml0eWludGVncmFsYXBwcm94ZXF1YWxub3RlcXVhbGxlc3NlcXVhbGdyZWF0ZXJlcXVhbGxvemVuZ2VleGNsYW0uc3MwMWNvbW1hLnNzMDFwZXJpb2Quc3MwMWNvbG9uLnNzMDFzZW1pY29sb24uc3MwMXF1ZXN0aW9uLnNzMDFleGNsYW1kb3duLnNzMDFwZXJpb2RjZW50ZXJlZC5zczAxcXVlc3Rpb25kb3duLnNzMDFkaXZpZGUuc3MwMWFwb3N0cm9waGVtb2Quc3MwMXF1b3RlbGVmdC5zczAxcXVv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UyZTKVM3U5NT3VRNVJpUxFTyVTBV0VYLVk5Wt1clV2VX2VgrWMxZBllUWcFZ/lpgWq5a+VsVW11bwVvuXDBcaFynXONdD10tXYpdyl4UXi9erF7XXxtfSF+RX8tgR2CpYPphSWGgYdxiE2JPYoti0WMXYxpjImNRY41jyGQMZExkkGULZUxliWW+ZepmJWZzZrhm82cnZ4pnuGgMaDxodGjFaQBpM2mHaedqRmqjavlrJWtda41sB2xHbI5s320rbUBtgm3Qbf1uNG59bthvC29Lb5tvzG/7cDNwaHCXcPFxVHGHccZyD3JDcnxytHM5c3JzpXPedBh0YnScdQF1SnWhddp19nYldlp2mnbbdwl3F3dNd4x373hweLt5BnmSejV6u3saeyp7rHu0e9V8DnxGfFx8h3y0fMh88X0cfSR9On1RfVl9bX2kfbp9zn3nffp+FX5LflN+W36Wfr5/FH+Df9aAFoCHgKuA04D7gSOBS4FzgZ6ByYHtghKCN4JggomCtYLhgwqDM4Nfg4uDsoPZhAWEMYRYhHCEgITRhVCFrYYkhi2GY4aYhs+G6obzhvaG/ocBhwOHBocIhwqHDYcPhxGHFIcWhxiHJYc2h1GHaIeDh5+ILog0iIWIiIiLiI6IooiriMaIyYjviPaJAIkqiTKJNYlfibWJuInMidSJ14n2ifmKKootijCKQ4pVimiKh4qVip2KoIrKis2K6YrsivuLAosliy2LT4t1i3yLsIu3i7qL5Iv/jAiMHYwrjDKMUYxUjIaMiYyMjOKM8I1GjU6NUY14jcGOGY5/jsSO3I9bj2mP6JAhkDGQQpBFkKaQrZDekQCRCJEPkRaRRpFnkXGRf5GIkb2RzZHnkgOSHJJHklWSYpJuknySj5LBksqTHZMmky+TN5NGk06TVpNfk2yTbpN7k4STjZOWk56TrZPblFSUXZRmlG+UfZSGlLSVEJUZlSKVKpUzlUKVS5VQlZuVpJWtlbaVxZXNldWV3pXrlk+WdZZ9loWWjpaWlqSWvJcxlz6XSpdWl2mXcpedl6uXvpfGl9KX2pgEmCaYL5g4mEKYTJhUmFyYY5iUmJaYupjCmMqY0pjamOSY7pkTmXmZgZmJmZiZpJmymcCZ15nvmfaZ/ZoEmguaFJodmjOaT5pXmlqaZpqUmqOasJrEmtqa6ZsFmxSbJJtLm2ibdpuD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As4ATAMf/+gClf/oA9n/6AKx/+gDLABGAyP/6ALn/+gCFv/oA4v/6AKg/+gDOgBTAp7/6AM2/+gCSv/oA9v/6AMyAEQDMf/oA9r/6AOt/+gC/f/oA07/6AI8/+gChf/oA9n/6AIW/+gC1//oAqH/6AHz/+gBm//oAqD/6AHD/+gDM//oAiP/6AI3/+gCHP/oAon/6AKi/+gCPP/oAoX/6AI6/+gBhv/oAdkASAJh/+gBrABMAf//6AFq/+gC1v/oAZb/6AIHAEYCAf/oAbn/6AIW/+gCkf/oAYD/6AIeAFMBgv/oAgj/6AJK/+gD2//oAhoARAIa/+gC1//oAqH/6AHz/+gCI//oAtb/6AAA/yYAAP6OAPYAOAJGAEYAAP84AAD+bQKBADwBXgAtAkEAMgJSADAChwAuAn8ASgKCAEoCMAAoAn4APQJ7AE0EJQBMAegATQEsAJoCEQCaBHsASwJuAC4AAP/pAAD/gAKLADIAAP88ATf/6AAA/hUD2v/oA63/6AL9/+gCw//oAqD/6ALk/+gDM//oA07/6AOa/+gDMf/oAon/6AKk/+gCPP/oAoX/6ANh/+gCu//oAwYASAJh/+gCzgBMA0P/6AKV/+gD2f/oArD/6AMsAEYDI//oAuf/6AOL/+gCoP/oAzYAJQKe/+gDeP/oAkr/6APb/+gEEv/oA63/6AL9/+gDTv/oBBz/6ALX/+gCof/oAfP/6AGb/+gCoP/oAcP/6AMz/+gCI//oAjf/6AIc/+gCif/oAqT/6AI8/+gChf/oAjr/6AGm/+gB2QBIAmH/6AGsAEwB///oAWr/6ALW/+gBlv/oAgcARgIB/+gBuf/oA4v/6AGA/+gB+QAlAYL/6AII/+gCSv/oA9v/6AMP/+gCof/oAfP/6AIj/+gDGv/oBr3/6Aa9/+gGg//oBVL/6AYs/+gFav/oBir/6ARE/+gFh//oBzn/6AWj/+gG9f/oBd7/6AVE/+gGB//oBUz/6AVM/+gGof/oBqH/6Aai/+gFk//oBhD/6AYJ/+gFwv/oBm3/6AWD/+gHXf/oBgv/6AU+AEQHBwBEBPIARAStAEQGDf/oB2//6Acw/+gHn//oB3X/6AnW/+gGTP/oBVX/6AVV/+gF0f/oBdz/6AXc/+gFjf/oBY3/6AVE/+gFRP/oBcr/6AXK/+gF2P/oBM7/6ASG/+gFFv/oBS7/6AQt/+gEk//oBmv/6AYu/+gE8P/oBrr/6AR8/+gE8v/oBqr/6AT6/+gEs//oBLP/6AVW/+gEa//oBPr/6ATC/+gE0P/oBJ3/6ARo/+gE9//oBPf/6ATy/+gE9v/oBMD/6AVP/+gFT//oBgP/6AWG/+gFhv/oBUf/6AdN/+gG///oBXr/6AUh/+gEr//oBEr/6ATk/+gEi//oBUr/6ATT/+gFUv/oBRb/6AUW/+gEx//oBUT/6AVa/+gFC//oBO7/6AVQ/+gFcP/oBVL/6AKn/+gCqv/oBP3/6AKS/+gCnf/oBQf/6AKa/+gCSv/oAlX/8QSg/+gCVv/oAqH/6AUE/+gChv/oBKX/6ATO/+gEYf/oBLT/6AWL/+gFQv/oBPr/6ATJ/+gFXP/oB0T/6AVc/+gHBf/oBMr/6AVC/+gFQv/oAub/6ASK/9sEUP/oBI3/6ASV/+gGYP/oA/7/6AP+/+gGX//oBUL/6ASo/+gGcv/oBGr/6ASR/+gFB//oBCX/6ATQ/+gGx//oBoj/6AY7/+gFGQBIBN4ASASVAEgCiv/oAor/6AOL/+gCKv/gA4v/6AVr/+gCZP/oAmT/6AVw/+gDQP/oAsD/+AJd/+gE5wBMBrgATAT5AEwEqgBMBE4ATAXW/+gICf/oBKf/6AU7/+gEfP/oBCj/6AS1/+gGZv/oBJD/6AbM/+gE/v/oBtb/6AaM/+gEVv/oBFX/6ARK/+gExf/oBp3/6ATF/+gGLv/oBSL/6Abt/+gEhP/oBIT/6AXI/+gFyP/oBRT/6Abl/+gGp//oBTv/6AcF/+gE6v/oBJb/6AU4/+gGmv/oCQP/6Abw/+gEOP/oBAH/6AQb/+gEH//oBdD/6ASS/+gED//oBVP/6ASA/+gEX//oBPb/6AQP/+gEnv/oBif/6AYn/+gFdv/oBaX/6AWl/+gGB//oBV7/6Aah/+gGof/oBcP/6AZj/+gGC//oBg3/6ATk/+gE6v/oBqz/6AUp/+gEX//oBA3/6ARf/+gGAv/oBM//6ARb/+gEzf/oBOP/6ASC/+gFKf/oBxz/6ARL/+gE0//oBNT/6AUuAEYE5QBGBOUARgWUAEYEpwBGBKv/6ARh/+gFHf/oBJf/6ASX/+gEs//oBpH/6ASy/+gFJP/oBtz/6AU6/+gGn//oBSz/6ATs/+gFiv/oBKT/6AU3/+gFN//oBDj/6ATh/+gEsf/oA7T/6AML/+gGef/oCGH/6AY9/+gFnv/oBdz/6AXc/+gFKP/oBTr/6AS7/+gFE//oBVP/6AWW/+gHbf/oBPz/6AT7/+gFE//oBlj/6AVO/+gFxP/oBdP/6AV+/+gGGP/oCB3/6AU+/+gHG//oBcX/6ASr/+gEvP/oBHr/6AUi/+gEN//oA6b/6AXtAFMF7QBTAyoAJQVqAFMEpwBTBNQAUwULACUFQQBTBP8AUwWgAFMDKgAlBUkAUwVd/+gFXf/oBAf/6AZ8/+gEB//oBAT/6AQi/+gGhv/oBCL/6ATJ/+gGYP/oA///6AP//+gFQ//oBKL/6AZq/+gEYf/oBBn/6AQI/+gF5P/oBeT/6AeN/+gFq//oBVz/6ASX/+gEyP/oBnj/6ASq/+gGM//oBQX/6Abd/+gEbP/oBSz/6ASe/+gEnv/oBfX/6AS5/+gFN//oBwP/6ATu/+gFj//oBKH/6AU1/+gCqP/oBPX/6AT8/+gDev/oAr3/6AKL/+gF1f/oAS395wAA/zkAAAA7AAD/twAA/7cCRP/gAS3/NQEt/zUBLf81AS395wEt/ecBLf3nAAD+LwAA/i8AAP4vAAD+JwAA/icAAP4nAS3/XQEt/10BLf9dAS3/UQEt/1EBLf9RAAD+lAEt/8EDPP/oAvX/6AJK/+gCSv/oAk7/6AM2ACUCnv/oAS3/6AEt/+gBLf/oAS3/6AEt/+gBLf/oAS3/6AEt/+gBLf/oAS3/6AEt/+gBLf/oAS3/6AEt/+gBLf/oAS3/6AEt/+gBLf/oAS3/6AEt/+gBLf/oAS3/6AEt/+gBLf/oAUEAWAFDACIDaAAfAooAPAMaACoC+QAjAKwAIgHsAHwB7AAbAfgAPwLKAGYA4QAFAkkAVwDxADACAgA9AoEAPAFeAC0CQQAyAlIAMAKHAC4CfwBKAoIASgIwACgCfgA9AnsATQD1ADABMAAgAmQAYgMGAHkCTgBwAhoAKAQBAEYCuQAiAnYASwMFACUCxQBLAgwASwIDAEsDBQAlAsEASwEIAEsCNAAsAnkASwG8AEsDcgBLAtEASwMQACUCUwBLAxMAJQJ4AEsCXAA6AjQAJwKyAEoCtgATA+cAEwKUADICXQAPAi4AMgHlAJQCzQCkAeQAgAKOACQDHgB+AP4ACgKmACUCpgBLAlgAJQKmACUCaQAlAUwAGAKmACUCiQBLAQgAPAEI/+QCKgBLAQgASwQPAEsCiQBLAn4AJgKmAEsCpgAlAYAASwIWAC0BdAAcAokARgJAAAoDOQAKAfMACgJGAAoB1wAsAgQAfgFEAGkCBABaAikAJAEEAAABQQBYArIAQgKGACoCJAA8Al0ADwFEAGkCQgApATgACgMVAC4ByAAfAekALQKJACUCSQBXAgUAMgGCAAoBqwAcAs0AaAFUABsBVgASAPEACgKOAEsCdgAjAPQANAEXAAoA0QAUAbwAHwHpADICqgAiAr0AIgLmACECGgAzArkAIgK5ACICuQAiArkAIgK5ACICuQAiA5kADAMFACUCDABLAgwASwIMAEsCDABLAQgADgEIAA4BCP/1AQj/8gLQAAkC0QBLAxAAJQMQACUDEAAlAxAAJQMQACUCuwB7AxAAGgKyAEoCsgBKArIASgKyAEoCXQAPAlMASwK7ADYCpgAlAqYAJQKmACUCpgAlAqYAJQKmACUEPQAlAlgAJQJpACUCaQAlAmkAJQJpACUBCAAOAQgADgEI//UBCP/yAnwAJQKJAEsCfgAmAn4AJgJ+ACYCfgAmAn4AJgKnAFoCfgAcAokARgKJAEYCiQBGAokARgJGAAoCpgBLAkYACgK5ACICpgAlArkAIgKmACUCuQAiAqYAJQMFACUCWAAlAwUAJQJYACUDBQAlAlgAJQLFAEsDDQAlAtAACQKmACUCDABLAmkAJQIMAEsCaQAlAgwASwJpACUCDABLAmkAJQIMAEsCaQAlAwUAJQKmACUDBQAlAqYAJQMFACUCpgAlAQj/4QEI/+EBCP/NAQj/zQEI/+4BCP/uAQj/9gEI//YBCABIAQgASwJ5AEsCKgBLAbwASwEIAA4BvABLAQgASwHPAEsBqwBLAbwASwEIAEgBvAAJAQgACQLRAEsCiQBLAtEASwKJAEsC0QBLAokASwMQACUCfgAmAxAAJQJ+ACYDEAAlAn4AJgQ3ACUEJgAlAngASwGAAEsCeABLAYAASwJ4AEsBgABLAlwAOgIWAC0CXAA6AhYALQJcADoCFgAtAjQAJwF0ABwCNAAnAXkAHAKyAEoCiQBGArIASgKJAEYCsgBKAokARgKyAEoCiQBGArIASgKJAEYCsgBKAokARgPnABMDOQAKAl0ADwJGAAoCXQAPAi4AMgHXACwCLgAy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AAQAWAACAH0AAQAEAFkAAgB9AAEABABaAAIAfQABAAQAWwACAH0AAQAEAFwAAgB9AAEABABdAAIAfQABAAQAXgACAH0AAQAEAF8AAgB9AAEABABgAAIAfQABAAQAYQACAH0AAQAEAGIAAgB9AAEABABjAAIAfQABAAQAZAACAH0AAQAEAGUAAgB9AAEABABmAAIAfQABAAQAZwACAH0AAQAEAGgAAgB9AAEABABpAAIAfQABAAQAkwACAH0AAQAEAGsAAgB9AAEABABsAAIAfQABAAQAbQACAH0AAQAEAG4AAgB9AAEABABvAAIAfQABAAQAcAACAH0AAQAEAHEAAgB9AAEABAByAAIAfQABAAQAcwACAH0AAQAEAHQAAgB9AAEABAB1AAIAfQABAAQAdgACAH0AAQAEAHcAAgB9AAEABAB4AAIAfQABAAQAkwACAH0AARgWACYAUgBcAGYAcAB6AIQAjgCYAKIArAC2AMAAygDUAN4A6ADyAPwBBgEQARoBJAEuATgBQgFMAVYBYAFqAXQBfgGIAZIBnAGmAbABugHEAAEABAC7AAIAfQABAAQAvAACAH0AAQAEAL0AAgB9AAEABAC+AAIAfQABAAQAvwACAH0AAQAEAMAAAgB9AAEABADBAAIAfQABAAQAwgACAH0AAQAEAMMAAgB9AAEABADEAAIAfQABAAQAxQACAH0AAQAEAMYAAgB9AAEABADHAAIAfQABAAQAyAACAH0AAQAEAMkAAgB9AAEABADKAAIAfQABAAQAywACAH0AAQAEAMwAAgB9AAEABADNAAIAfQABAAQAzgACAH0AAQAEAM8AAgB9AAEABADQAAIAfQABAAQA0QACAH0AAQAEANIAAgB9AAEABADTAAIAfQABAAQA1AACAH0AAQAEANUAAgB9AAEABADWAAIAfQABAAQA1wACAH0AAQAEANgAAgB9AAEABADZAAIAfQABAAQA2gACAH0AAQAEANsAAgB9AAEABADcAAIAfQABAAQA3QACAH0AAQAEAN4AAgB9AAEABADfAAIAfQABAAQA4AACAH0AARZSAEwAngCoALIAvADGANAA2gDkAO4A+AECAQwBFgEgASoBNAE+AUgBUgFcAWYBcAF6AYQBjgGYAaIBrAG2AcABygHUAd4B6AHyAfwCBgIQAhoCJAIuAjgCQgJMAlYCYAJqAnQCfgKIApICnAKmArACugLEAs4C2ALiAuwC9gMAAwoDFAMeAygDMgM8A0YDUANaA2QDbgN4A4IDjAABAAQAlQACAJQAAQAEAJYAAgCUAAEABACXAAIAlAABAAQAmAACAJQAAQAEAJkAAgCUAAEABACaAAIAlAABAAQAmwACAJQAAQAEAJwAAgCUAAEABACdAAIAlAABAAQAngACAJQAAQAEAJ8AAgCUAAEABACgAAIAlAABAAQAoQACAJQAAQAEAKIAAgCUAAEABACjAAIAlAABAAQApAACAJQAAQAEAKUAAgCUAAEABACmAAIAlAABAAQApwACAJQAAQAEAKgAAgCUAAEABACpAAIAlAABAAQAqgACAJQAAQAEAKsAAgCUAAEABACsAAIAlAABAAQArQACAJQAAQAEAK4AAgCUAAEABACvAAIAlAABAAQAsAACAJQAAQAEALEAAgCUAAEABACyAAIAlAABAAQAswACAJQAAQAEALQAAgCUAAEABAC1AAIAlAABAAQAtgACAJQAAQAEALcAAgCUAAEABAC4AAIAlAABAAQAuQACAJQAAQAEALoAAgCUAAEABAC7AAIAlAABAAQAvAACAJQAAQAEAL0AAgCUAAEABAC+AAIAlAABAAQAvwACAJQAAQAEAMAAAgCUAAEABADBAAIAlAABAAQAwgACAJQAAQAEAMMAAgCUAAEABADEAAIAlAABAAQAxQACAJQAAQAEAMYAAgCUAAEABADHAAIAlAABAAQAyAACAJQAAQAEAMkAAgCUAAEABADKAAIAlAABAAQAywACAJQAAQAEAMwAAgCUAAEABADNAAIAlAABAAQAzgACAJQAAQAEAM8AAgCUAAEABADQAAIAlAABAAQA0QACAJQAAQAEANIAAgCUAAEABADTAAIAlAABAAQA1AACAJQAAQAEANUAAgCUAAEABADWAAIAlAABAAQA1wACAJQAAQAEANgAAgCUAAEABADZAAIAlAABAAQA2gACAJQAAQAEANsAAgCUAAEABADcAAIAlAABAAQA3QACAJQAAQAEAN4AAgCUAAEABADfAAIAlAABAAQA4AACAJQAARLqACsAXAFQAYoCJAI+AnICfAL6AxQDNgNYA3IDlAOuA/AE1gTwBVIFfgbQBzQHfggWCDgI2AjqCcwJ9gpYCvwLyAv6DAQMKAwyDGQMlgyoDMoM8Az6DQQNDgAcADoARABMAFQAXABkAGwAdAB8AIIAiACOAJQAmgCgAKYArACyALgAvgDEAMoA0ADWANwA4gDoAO4BBgAEAG8AZAA/AOoAAwBfAD0A7AADAF8AQAD7AAMAbAA9AQIAAwBvAC4BAwADAG8AMAEEAAMAbwAzAQUAAwBvAKkA4QACACQA4wACACUA5AACACkA5QACACsA5gACAC4A5wACADIA6AACADMA7QACADQA7gACADUA7wACADcA8AACADgA8gACADkA9gACADwA+AACAD0A+QACAD8A+gACAEAA/AACAEEBAQACAEMA6wACAKQA8QACAKkABwAQABYAHAAiACgALgA0AQcAAgAlAQgAAgAzAQoAAgA3AQsAAgA8AQ0AAgA9AQ8AAgBAAREAAgBBABIAJgAuADYAPgBGAEwAUgBYAF4AZABqAHAAdgB8AIIAiACOAJQBGgADAGIAPQEbAAMAYgBAAR0AAwBjAD0BIAADAGcAPQEUAAIAJgEVAAIAJwEWAAIAKwEXAAIAMgEYAAIANQEZAAIANgEcAAIANwEeAAIAOgEfAAIAOwEhAAIAPAEiAAIAPQEkAAIAPwElAAIAQAEmAAIAQwADAAgADgAUAScAAgA3ASgAAgA8ASkAAgA9AAYADgAWABwAIgAoAC4BLAADAFYAQAEqAAIAKQErAAIAKgEtAAIANwEuAAIAPAEvAAIAPQABAAQBMAACAD0ADwAgACgAMAA2ADwAQgBIAE4AVABaAGAAZgBsAHIAeAE2AAMAVwA9ATcAAwBXAEABMgACACQBMwACACsBOAACACwBOgACAC4BOwACADABPAACADMBPQACADUBPgACADcBPwACADoBQAACADwBQQACAD0BQwACAEABNQACAEcAAwAIAA4AFAFEAAIANwFFAAIAPAFGAAIAPQAEAAoAEAAWABwBRwACACkBSAACACoBSQACACsBSgACAEEABAAKABAAFgAcAUsAAgAuAUwAAgAvAU0AAgA9AU4AAgBAAAMACAAOABQBTwACAC8BUAACAD0BUQACAEAABAAKABAAFgAcAVIAAgAwAVMAAgAxAVQAAgA9AVUAAgBAAAMACAAOABQBVgACADEBVwACAD0BWAACAEAACAASABgAHgAkACoAMAA2ADwBWQACAC4BWgACAC8BWwACADABXAACADEBXQACADIBXgACADwBXwACAD0BYAACAEAAGgA2AD4ARgBOAFYAXgBmAG4AdgB+AIYAjACSAJgAngCkAKoAsAC2ALwAwgDIAM4A1ADaAOABYgADAFAAPQFkAAMAUABAAWkAAwBfAD0BagADAF8AQAFtAAMAYwA9AXAAAwBkAD8BcwADAGgAPQF5AAMAbwA3AXoAAwBvAD0BewADAG8AQAFhAAIAJAFmAAIAJQFoAAIAMwFrAAIANAFsAAIANwFuAAIAOAFxAAIAOQFyAAIAPAF0AAIAPQF2AAIAPwF3AAIAQAF4AAIAQwFlAAIARgFjAAIAlQFnAAIAlgFvAAIAqQADAAgADgAUAXwAAgA3AX0AAgA9AX4AAgBAAAwAGgAgACYALAAyADgAPgBEAEoAUABWAFwBfwACACYBgQACACcBggACADUBgwACADYBhAACADcBhQACADoBhwACADsBiAACADwBiQACAD0BigACAEABgAACAJcBhgACAKsABQAMABQAGgAgACYBjAADAGMAPQGLAAIANwGNAAIAPAGOAAIAPQGPAAIAQAAmAE4AWABgAGgAcAB4AIAAiACQAJgAoACoALAAuADAAMgAzgDUANoA4ADmAOwA8gD4AP4BBAEKARABFgEcASIBKAEuATQBOgFAAUYBTAGzAAQAbwBoAD0BkQADAFAAQwGXAAMAXwA9AZkAAwBfAEMBmwADAGAAPQGcAAMAYABAAZ8AAwBhAEABoQADAGIAPQGjAAMAYgBAAaUAAwBjAD0BqwADAGcAPQGsAAMAZwBAAa4AAwBoAD0BsgADAG8ALgG0AAMAbwA9AZAAAgAkAZIAAgApAZMAAgAqAZQAAgAuAZUAAgAwAZYAAgAzAZoAAgA0AZ0AAgA1AaAAAgA2AaQAAgA3AaYAAgA4AagAAgA5AaoAAgA7Aa0AAgA8Aa8AAgA9AbAAAgBAAbEAAgBDAbUAAgBEAZgAAgCkAZ4AAgCmAaIAAgCnAacAAgCpAakAAgCqAAwAGgAiACgALgA0ADoAQABGAEwAUgBYAF4BuQADAF8APQG2AAIALgG3AAIALwG4AAIAMwG6AAIANwG7AAIAOAG8AAIAOQG9AAIAPAG+AAIAPQG/AAIAPwHAAAIAQAHBAAIAQwAJABQAGgAgACYALAAyADgAPgBEAcIAAgArAcQAAgAuAcUAAgAzAccAAgA3AcgAAgA4AckAAgA5AcsAAgA9AcwAAgA/Ac0AAgBBABIAJgAuADYAPgBEAEoAUABWAFwAYgBoAG4AdAB6AIAAhgCMAJIB0QADAFcAPQHWAAMAYgBAAd0AAwBrAD0BzwACACsB0gACACwB0wACADMB1AACADUB1QACADYB1wACADcB2AACADoB2QACADsB2wACAD0B3AACAD8B3gACAEAB3wACAEEB4AACAEMB0AACAEsB2gACAKwABAAKABAAFgAcAeEAAgA3AeIAAgA9AeQAAgA/AeUAAgBAABMAKAAwADgAQABGAEwAUgBYAF4AZABqAHAAdgB8AIIAiACOAJQAmgHsAAMAZgA9Ae8AAwBnAD0B8QADAGcAQAHmAAIAMwHnAAIANQHoAAIANwHpAAIAOAHrAAIAOgHuAAIAOwHyAAIAPAHzAAIAPQH0AAIAPwH1AAIAQAH2AAIAQQH3AAIAQwH4AAIARAHqAAIAqQHtAAIAqwHwAAIArAACAAYADAH5AAIANwH6AAIAPQAbADgAQABIAFAAWABeAGQAagBwAHYAfACCAIgAjgCUAJoAoACmAKwAsgC4AL4AxADKANAA1gDcAf4AAwBQAD0CCQADAGAAPQITAAMAawA9AhUAAwBsADAB/QACACQB/wACACUCAAACACYCAQACACsCAwACAC4CBAACAC8CBQACADACBgACADECBwACADMCCAACADQCCgACADUCDAACADgCDQACADkCDgACADoCDwACADsCEAACADwCEQACAD0CEgACAD8CFAACAEACFgACAEMCFwACAEQCAgACAEsCCwACAKYABQAMABIAGAAeACQCGAACADcCGQACAD0CGgACAD8CGwACAEACHAACAEQADAAaACAAJgAsADIAOAA+AEQASgBQAFYAXAIdAAIAJAIfAAIAKQIgAAIAKgIhAAIALgIiAAIAMwIjAAIANwIkAAIAPAIlAAIAPQImAAIAPwInAAIAQAIoAAIAQQIeAAIASAATACgAMAA4AEAASABQAFYAXABiAGgAbgB0AHoAgACGAIwAkgCYAJ4CLAADAFoAPQIuAAMAWgBAAjAAAwBbAD0CMwADAF4APQI4AAMAaAA9AikAAgAkAisAAgAuAi8AAgAvAjIAAgAyAjQAAgA4AjYAAgA5AjcAAgA8AjkAAgA9AjoAAgBAAjsAAgBCAioAAgCVAi0AAgCfAjEAAgCgAjUAAgCpABgAMgA6AEIASgBSAFoAYABmAGwAcgB4AH4AhACKAJAAlgCcAKIAqACuALQAugDAAMYCPgADAFAAQAJDAAMAXwA9AkUAAwBfAEACRwADAGAAPQJPAAMAaAA9AjwAAgAkAj8AAgAlAkAAAgArAkEAAgAuAkIAAgAzAkYAAgA0AkgAAgA1AkkAAgA3AkoAAgA4AkwAAgA5Ak0AAgA6Ak4AAgA8AlAAAgA9AlEAAgA/AlIAAgBAAlMAAgBDAj0AAgCVAkQAAgCkAksAAgCpAAYADgAUABoAIAAmACwCVAACADICVQACADcCVgACADwCVwACAD0CWAACAD8CWQACAEAAAQAEAloAAgA9AAQACgASABgAHgD+AAMAaAA9AP0AAgA8AP8AAgA9AQAAAgBAAAEABAE5AAIAPQAGAA4AFAAaACAAJgAsAOkAAgAzAPMAAgA5APUAAgA6APcAAgA8AOIAAgBIAPQAAgBOAAYADgAUABoAIAAmACwBCQACADMBDAACADwBDgACAD0BEAACAEABEgACAEEBEwACAEMAAgAGAAwBQgACAD0BNAACAEsABAAKABAAFgAcAcYAAgAzAc4AAgBDAcMAAgBLAcoAAgBOAAQACgASABoAIAH7AAMAkAA9AfwAAwCQAEQB+wACAD0B/AACAEQAAQAEASMAAgA9AAEABAExAAIAPQABAAQBdQACAD0AAQAEAeMAAgA9AAMAAAABBgwAAQYSAAEAAAAZAAMAAAABBfoAAQY6AAEAAAAaAAMAAAABBegAAQZCAAEAAAAbAAMAAAABBdYAAQZQAAEAAAAcAAMAAAABBcQAAQZiAAEAAAAdAAMAAAABBbIAAQZsAAEAAAAeAAMAAAABBaAAAQaGAAEAAAAfAAMAAAABBY4AAQaKAAEAAAAgAAMAAAABBXwAAQaSAAEAAAAhAAMAAAABBWoAAQaUAAEAAAAiAAMAAAABBVgAAQaoAAEAAAAjAAMAAAABBUYAAQbGAAEAAAAkAAMAAAABBTQAAQcMAAEAAAAlAAMAAAABBSIAAQdKAAEAAAAmAAMAAAABBRAAAQeQAAEAAAAnAAMAAAABBP4AAQfSAAEAAAAoAAMAAAABBOwAAQf4AAEAAAApAAMAAAABBNoAAQgGAAEAAAAqAAMAAAABBMgAAQgaAAEAAAArAAMAAAABBLYAAQgkAAEAAAAsAAMAAAABBKQAAQgsAAEAAAAtAAMAAAABBJIAAQg4AAEAAAAuAAMAAAABBIAAAQg6AAEAAAAvAAMAAAABBG4AAQg+AAEAAAAwAAMAAAABA6wAAQhUAAEAAAAwAAMAAAABA5oAAQhIAAEAAAAxAAMAAAABA4gAAQg8AAEAAAAyAAMAAAABA3YAAQgwAAEAAAAzAAIIJAAEAJIAkgCSAJIAAwAAAAIDVggWAAAAAgAAAAwAAQANAAEICgAJABgAIgA+AFoAdgCSAK4AuADCAAEABAJgAAIAeQADAAgAEAAWAmMAAwCSAHkCYQACAHkCYgACAJIAAwAIABAAFgJpAAMAkgB5AmcAAgB5AmgAAgCSAAMACAAQABYCbAADAJIAeQJqAAIAeQJrAAIAkgADAAgAEAAWAm8AAwCSAHkCbQACAHkCbgACAJIAAwAIABAAFgJyAAMAkgB5AnAAAgB5AnEAAgCSAAEABAJzAAIAeQABAAQCdAACAHkAAQAEAlwAAgB5AAMAAgdeB1QAAQd0AAAAAQAAADMAAQdqAAQADgAYACoANAABAAQCeQACABoAAgAGAAwCdQACABgCdgACABkAAQAEAnoAAgAaAAMACAAOABQCdwACABgCeAACABkCewACABoAAwABBygAAQdwAAAAAQAAADMAAQdqAA8AJAAuADgAQgBMAFYAYABqAHQAfgCIAJIAnACmALAAAQAEAFQAAgB9AAEABABaAAIAfQABAAQAWwACAH0AAQAEAFwAAgB9AAEABABdAAIAfQABAAQAYQACAH0AAQAEAGoAAgB9AAEABABwAAIAfQABAAQAvwACAH0AAQAEAMUAAgB9AAEABADGAAIAfQABAAQAxwACAH0AAQAEAMgAAgB9AAEABADMAAIAfQABAAQA2gACAH0AAAEAAAIGzgAPBAUEBgQHBAgECQQKBAsEDAQNBA4EEAQRBBIEEwQUAAABAQACBsgACgQVBBoEFgQYBB4EGQQdBBsEFwQcAAABAgABBsIBhgAAAQMAAga+AAQEIAQhBCIEIwABAOQAAQAIAAEABACTAAIAfQABAYICZgABAXwCZwABAXYCaAABAXACaQABAWoCagABAWQCawABAV4CbAABAVgCbQABAVICbgABAUwCbwABAUYCcAABAUACcQABAToCcgABATQCcwABAS4CdAABASgCdQABASICdgABARwCdwABARYCeAABARACeQABAQoCegABAQQCewABAP4CfAACBiAAAgKTAAoAAQA+/80AAQA4/84AAgYSAAgCWwANAl0CXgJfAmQCZQJmAAEACAAkACUAJgArADAAMQA5AD4AAQACACQAKwABAAEAPgABAAEAfQABAAEAkAACAAQAJAA9AAAAPwBFABoASABLACEATgBOACUAAgACACQASwAAAE4ATwAoAAIAAQCVALoAAAACAAcAJAA9AAAAPwBFABoASABLACEATgBOACUAUABpACYAawBxAEAAdAB4AEcAAgAJAFAAUwAAAFUAaQAEAGsAdQAZAHcAeAAkAJMAkwAmAL0AvQAnAMEAwQAoAMoAygApANIA0gAqAAEAAQAWAAEAGwAoAC4ALwAwADEAPgBEAEwATQBPAJkAnwCgAKEAogC0AUsBTAFOAU8BUQFSAVMBVQFWAVgBggABAAsANQA5AE4ApgCqAX8BgAGFAYYBigJZAAEADgAkADMAOAA6AEAAQgBIAJUAqQCrALAAsgJUAlgAAQAQACcAKQAqADYAPQCYAJoAmwCkAKcArgC2ALoA6AFoAYkAAQAMACYANAA3ADwAPwBKAJcApQCtAK8AuAH8AAEAFAArACwALQA7AEEAQwBFAEYARwBLAJwAngCoAKwAsQC1ALkBiAIfAicAAQAJADIAowCzAYEBgwG3Ai8CMQJXAAEACwAlAEkAlgCdALcBtgH7AhwCKwItAi4AAQAIAW4BbwFxAbwB1AI0AjUCNgABABEBGAFaAWEBYwF3AZQBlQG1AbgBuwHAAfgCGwIpAioCOgI7AAEAFgElASoBOgE7AVkBWwFqAXQBjwGdAZ4BnwG+AdMB1QHYAd4B5wIhAjkCQQJIAAEAKgEVARkBHgEpASsBLAE9AVQBXAFpAWsBbAF1AXYBfgGQAZgBpgGnAagBqQGwAboBvQG/AcEB2wHpAeoB9QIEAhcCGQIdAh4CNwI8Aj0CSgJLAkwCUgABACYBAAEUASIBIwEnASgBLwEyAT8BQwFgAWUBcgF4AY4BkgGWAaABogHXAdkB3AHfAeAB5QHmAesB7QH6AgMCBQIYAhoCIgIyAkICRAJNAAEAKgD/ARwBHwEhASQBJgEtAS4BPAFGAUcBSAFNAVABVwFfAX0BiwGNAZMBmgGqAa8BzwHQAdoB4gHjAfMB+QIGAgoCCwIMAg0CIAIjAiUCRgJQAlUCVgABACgA5gDuAP0BDwEQARYBFwE1ATkBPgFBAUIBRAFeAWYBZwF8AaQBrQGxAcQB0gHhAeQB6AHuAfAB8gH0AfYB9wH9AhQCJAImAigCSQJOAlECUwABABoA4QDiAOQA8ADxAPIA8wD0AQgBCQEwATEBOAFAAUUBSQFKAYQBhwHIAckBygIHAg4CEQJAAAEADgDpAOsA9QD6AQ0BDgEzATQBXQHFAcYCAAIIAj8AAQARAO0A+AEKAQsBDAERARIBEwG5AcsCAQICAg8CEAISAhYCWgABAAwA7wD2APcA+QD8AQEBcAHHAcwBzQHOAdYAAQALAOUA5wEHARsBewGjAbIBwgHDAf8CRQABAA0A4wEaAW0BcwF6AZcBnAHsAiwCMAIzAjgCQwABAAgBHQEgAXkBjAGhAawB0QHxAAEACQDsATcBmQGbAaUBqwG0Ae8CRwABABIA6gD7AP4BAgEDAQQBBQE2AWIBZAGRAa4B3QIJAhMCFQI+Ak8AAQABABoAAQABABsAAQABABwAAQABAB0AAgABABoAHQAAAAEACQAHABcAHgAfACAAIQAiACMAkgACAAECfAKTAAAAAgADACQATwAAAJUAugAsAOECWgBSAAEAAwB5AJICXAABAAQANQA+AEEARAABACIAJAA5AEgATgCVAKoAtgC6AOEA4gDoAPIA8wD0ATIBYQFjAXEBkAGoAakBvAHJAcoB/QINAh0CHgIpAioCNgI8Aj0CTAABAAQAFwJhAmICYwABAA8AKAAuAC8AMAAxADUAPgBEAJkAnwCgAKEAogCmALQAAQAPApQCnwKhAq0CrgKyAvMDCQMRA0kD3wPgA+ID4wPoAAEACgLUAzIDMwM0AzUDNgM3A1MDVQNXAAEAAQKZAAEABAKlAqYCqQKsAAEAAgAWAD4AAQAIABcAPgB5AJICXAJhAmICYwAAAAEAAAAKAEgAngADREZMVAAUZGV2MgAiZGV2YQAwAAQAAAAA//8AAgAAAAMABAAAAAD//wACAAEABAAEAAAAAP//AAIAAgAFAAZhYnZtACZhYnZtAC5hYnZtADZibHdtAD5ibHdtAEZibHdtAE4AAAACAAAAAQAAAAIAAAABAAAAAgAAAAEAAAACAAIAAwAAAAIAAgADAAAAAgACAAMABAAKABIAGgAiAAQAAAABACAABAAAAAEEZAAEAAAAAQigAAQAAAABDRoAAREmEUYAAQAMAEYADgAAAaYAAAGgAAABoAAAAaAAAAGgAAABoAAAAawAAAGmAAABpgAAAaYAAAGgAAABoAAAAaAAAAGgALIBeAF+AYQBigGKAZABkAGWAZABnAGiAagBrgG0AboBwAHGAcwB0gHYAd4B5AHqAfAB9gH8AgIBugHYAd4B6gHwAcABzAHSAdgB3gHkAfAB/AG6AcABxgHMAdIB2AHeAeQB6gH2AfwCAgIIAg4BwAHMAdIB2AHeAeQB9gH8AhQCFAIaAiACJgIsAiwCMgI4Aj4CRAJKAlACVgJcAlwCYgJoAm4CdAJ6AoAChgKMAdIBlgKSAdgB2AKYAp4CpAKqArACtgK8ArwCwgLIAs4C1ALUAtoC4ALaAuYC7ALyAvgC/gMEAwoDEAMWAxYDHAMiAyIDKAMuAzQDOgNAA0YDTAIyAjIDUgNYA14DTANkA2oDLgNwA0wDdgN8A4ICVgOIA4gDjgOUA5oDoAOmA6wDoAOgA7ICsAO4A74DvgPEA8QDxAPKA8oD0APWA9YD3APiAlwD6APuA/QD+gQABAAB/AH8AowBigAB/54C5AAB/50C5AAB/5oC5AABAVYC5AABAVoC5AABAeQC5AABAk0C5AABAq8C5AABAYwC5AABBIUC5AABBIsC5AABAX4DpQABAuUDpQABA3gDpQABAiYC5AABAdUC5AABAnkC5AABAdcC5AABAYYC5AABAdAC5AABAekC5AABAfIC5AABAiEC5AABAcAC5AABArsC5AABAdgC5AABAvkC5AABAl4C5AABAmUC5AABBQkC5AABBLgC5AABAn0C5AABBNUC5AABBOkC5AABBOoC5AABBZ4C5AABBr0C5AABBsUC5AABCQcC5AABA74C5AABBIcC5AABBD0C5AABBE8C5AABA/0C5AABA98C5AABBBsC5AABBJYC5AABAd0C5AABAd4C5AABAeMC5AABAdMC5AABAeYC5AABAeEC5AABA/MC5AABA7EC5AABA/YC5AABBBgC5AABA6cC5AABBZEC5AABA4oC5AABBDcC5AABAh0C5AABAxcC5AABAa8C5AABAfUC5AABAfUCxQABAtsC5AABAe8C5AABBCIC5AABBIEC5AABA8sC5AABA70C5AABA+YC5AABA9sC5AABBBAC5AABBegC5AABA8YC5AABA08C5AABAv4C5AABA5sC5AABBCcC5AABBMUC5AABBZQC5AABA50C5AABBFoC5AABA/EC5AABBLsC5AABApkC5AABBHYC5AABBCUC5AABBFAC5AABBIwC5AABBKEC5AABBVsC5AABBrAC5AABBDkC5AABBFIC5AABAzQC5AABBLAC5AABBNEC5AABA6kC5AABA1YC5AABAwUC5AABA4wC5AABBC8C5AABA+UC5AABA/wC5AABBMEC5AABAksC5AABAlIC5AABAh4C5AABAcIC5AABDmIObAABAAwAGgADAAADogAAA6IAAAOiAckDmgOgA6YDrAOyA6wDrAO4A7gDuAOyA7IDsgOyA74DmgOmA8QDrAOmA5oDxAOaA7gDpgOsA7IDpgOaA7gDmgO4A7IDuAO4A7gDmgOgA6YDuAOyA7IDxAOyA5oDoAOmA6wDsgOsA6wDuAOgA7gDsgOyA7IDsgO+A6wDpgPEA6wDuAOaA8QDmgO4A6YDrAOmA5oDuAOaA74DsgO4A6wDoAOmA7gDrAPKA8oD0APKA9YD3APWA6wD4gPoA+ID7gP0A9wD+gPKA8oDygPKA8oD4gP6A/oD9AP6A+ID6AP6A9wD6AQABAYD+gPoA+gD6APoA9YDygPKA/QD9AP0A+ID4gPcA9wD9AP0A/QEBgQMA9wD3AQSBAwD0APWBAAEGAQMBAAEGAQABAYEBgQABB4EAAQGBAYEDAQeBAwEDAQABAAEBgPKA8oEBgPiA+ID3APoA+4DygPcBB4EHgQABAwD3AQGA8oD3APcBAYD3APKBAAEAAQAA8oDygOyA7IEAAOyA7IEAAOyA7IDsgQMA7IDsgQAA7IEHgQSBB4EDAPiA9wEAAQGBBID6AQSA+gEBgPcA9wDrAQMBB4EDAQMA9AEJAQkA/oEJAQGA9AEHgQMBAwEEgQGBBgD0APWA9wEAAQMA8QDxAO+A7IDvgPKA8QDxAPKA7gDrAPEBAAEGAQABAYEHgQMA+gEBgQABBIEEgQGA9AEDAPuBAAD7gPQBB4EHgQeBAYEGAQGA9YD3APuBAwEDAQMBAwEAAPuBBgD3APoBAAEDAPcA9YD7gQSA6ADvgQSA/QEDAQSBCQEDAQeBAwEEgQMA9YD1gPcA+ID4gP6A8oDygPKA/QD+gP6A/oEAAQABBgD3AQeBCQEHgP6BAYEHgQGBAAEDAQGA+gEHgQGBAYD3AQABAAD3AQGBAYEHgPcBAwEDAQGA9AEBgPcA+4D3AQYA9wEAAPcBAwD3APcBBIEAAQGA6ADpgPcA9YD4gP0A/QEBgQMBAYEAAPKA+ID6AQABAAEAAQAA8oD9AP0A8oD9APoA9wD6AP0BAwEBgQMBAYEEgOgBAwEDAO4BAAEHgQGBAAD3AQAA9wDuAPcBBIEEgOgA9ADoAOgA74D0AO+BAYD0AQkBCQEJAQMA9AEHgQSBBIEDAQMA+gD4gPKBB4EBgPQBAYD1gQAA+4EHgPcBAwEDAQMBAYD3APoBAAD3AQMA9wDmgQABAADvgOaA8QD9AABAAAC5AABAi8CygABAz8CxgABApwCyAABAmUCyQABAcECzAABAtICxwABAwkCxgABAfcCywABBPYCwAABBgcCvAABBdACvQABBL8CwAABBSwCvwABBqsCuQABBnUCugABBWICvgABBZoCvQABBIgCwQABBFECwgABBBsCwwABA60CxAABBj0CuwABA+QCwwABA3YCxQABClAKWgABAAwAJgAGAAABOgAAAToAAAE6AAABOgAAAToAAAE6AI8BJgEsATIBOAE+AUQBSgFQAVYBXAFiAWgBbgF0AXoBgAGGAYwBkgGYAZ4BpAGqAbABVgG2AbwBwgHIAc4B1AHaAeAB5gHsAfIB8gH4Af4CBAIKAhACFgIcAiICKAIuAjQCOgJAAkYCTAJSAlgCXgJkAmoCcAJ2AnwCggKIAo4ClAKaAqACpgKsArICuAK+AsQCygLQAsoC1gLcAuIC6ALuAvQC+gMAAwYDDAMSAxgDGAMeAyQDKgMwAzYDPANCA0gDTgNUA1oDYANmA2wDcgMkA3gDfgOEA4oDkAOWA5wDogOoA64DtAO6A8ADxgPMA9ID2APeA+QD6gPYA/AD9gP8BAIECAQOBBQEGgQgBCYELAQyBDgEPgREBEoEUARWAAH/ngAAAAECJgAAAAEBev+SAAEB1P+6AAEBkv/GAAEBjv/MAAEBeP+RAAEBsP+lAAECGP/rAAECIQAAAAECvP/eAAEBdv86AAEC+P/3AAECJv+YAAEBeP7YAAEBsP7sAAECIf/TAAECJv/hAAEBev8uAAEB1P9XAAEBkv9oAAEBjv9lAAEBeP8uAAEBsP9BAAECGP/ZAAECvP8jAAEBdv8fAAEC+P+UAAECXgAAAAECZQAAAAEFCQAAAAEFCf+YAAEEc//GAAECfQAAAAEE+//rAAEE6QAAAAEE6v/TAAEFnv/eAAEGd//GAAEGbf+RAAEJB//eAAED5P/rAAEEiP/eAAEDmP+6AAEELf6SAAEETwAAAAEDuP/GAAEDh/+RAAEEQf/rAAED8f+6AAEBmP7MAAEBmf7NAAECJP76AAEBjv7NAAECG/8BAAEBeP5hAAEBeP5sAAEB6/7TAAEBrf5sAAECFP7TAAEDrv/GAAEDuv/MAAEDnv+RAAED3/+lAAEDpwAAAAEDp//hAAEFkP/eAAEDigAAAAEEOP/eAAECNP8rAAECNP8HAAEDPf/rAAEB9P+/AAECC/8XAAECC/8BAAEC2/7zAAECBf8hAAEEIgAAAAED3f+6AAEDhv/GAAEDZf+RAAEEDP/rAAEEDP/ZAAED8f8hAAEEEAAAAAEFov/GAAEDZP86AAEDCv/GAAEDB//MAAEDmwAAAAEEKP/eAAEEf//GAAEE6gAAAAEE6v/YAAEFlP/eAAEDwv/rAAEEWf/eAAEExf/eAAEEF//rAAEEu//eAAECN/86AAEExQAAAAEEMP/GAAEELf/MAAED+P+RAAEETv+lAAEEsv/rAAEEsv/ZAAEEoQAAAAEFW//eAAEGWP+RAAED1/86AAEEU//eAAEC0v86AAEEOQAAAAEEOf+YAAECyP+yAAEEDP+6AAEDsv/GAAEE0f/eAAEDqQAAAAEDqf/hAAEDEf/GAAEDEf9oAAEDlv76AAEDDv/MAAEDDv9fAAEDjAAAAAEELwAAAAEEL//hAAEDoP/GAAEEIv/rAAEEPQAAAAEEwf/eAAEBof7ZAAEDFv9qAAEBwf7ZAAEBnv7ZAAEG+gXYAAEADAASAAEAAAEmAI8BJgEsATIBOAE+AUQBSgFQAVYBXAFiAWgBJgFuAXQBVgEmAXoBgAGGAYwBkgGYAVABVgGeAaQBqgGwAbYBvAG8AcIByAHOAdQB1AHaAeAB5gHsAfIB+AH+AgQCCgIQAhYCHAIiAigCLgI0AjoCQAJGAkwCUgJYAl4CZAJqAnACdgJ8AoICggKIAo4ClAKaApoCoAKmAqACrAKsArICuAK+AsQCygLQAtYC1gLcAuIC4gLoAu4C9AL6AwADBgMMAdoB2gMSAxgDHgMkAyoDMALuAzYDPANCA0gDTgNUA1oDWgNgA2YDbANyA3gDfgOEA4QDigOQA5YDnAOKA6IDogOoA64DtAO6A8ADxgPMA8wD0gPYA94D5APqA/AD9gP8AAH/ngAAAAECJgAAAAEBdP/wAAEBzgAZAAEBjAAkAAEBiAAqAAEBcv/wAAEBqgADAAECGP/rAAECIQAAAAECtAA5AAEBbv+WAAEC8ABTAAEBcv82AAEBqv9KAAEBdP+MAAEBzv+2AAEBjP/HAAEBiP/DAAEBcv+NAAEBqv+gAAECtP9/AAEBbv97AAEC8P/wAAECXgAAAAECZQAAAAEFCQAAAAEEbAAkAAECfQAAAAEE+//rAAEE6QAAAAEE6gAAAAEFlgA5AAEGcQAkAAEGZ//wAAEI/wA5AAED5P/rAAEEfwA5AAEDkgAZAAEELf6SAAEETwAAAAEDsQAkAAEDgP/wAAEEQf/rAAED6wAZAAEBkf8qAAEBkv8rAAECJP76AAEBiP8rAAECG/8BAAEBcv7AAAEBcv7KAAEB6/7TAAEBpv7LAAECFP7TAAEDpwAkAAEDswAqAAEDl//wAAED2AADAAEDpwAAAAEFiAA5AAEDigAAAAEEMAA5AAECNP8rAAEDPf/rAAEB9P+/AAECC/8XAAEC2/7zAAECBf8hAAEEIgAAAAED1wAZAAEDfwAkAAEDXv/wAAEEDP/rAAED8f8hAAEEEAAAAAEFnAAkAAEDXP+WAAEDAwAkAAEDAAAqAAEDmwAAAAEEHwA5AAEEeQAkAAEFjAA5AAEDwv/rAAEEUQA5AAEEvQA5AAEEF//rAAEEswA5AAECL/+WAAEExQAAAAEEKgAkAAEEJgAqAAED8v/wAAEERwADAAEEsv/rAAEEoQAAAAEFUwA5AAEGUf/wAAEDz/+WAAEESwA5AAECyv+WAAEEOQAAAAECyP/6AAEEBQAZAAEDqwAkAAEEygA5AAEDqQAAAAEDCgAkAAEDCv/HAAEDlv76AAEDBwAqAAEDB/++AAEDjAAAAAEELwAAAAEDmgAkAAEEIv/rAAEEPQAAAAEEuQA5AAEBmf81AAEDFv9qAAEBuf81AAEBlv80AAEADgAeAB8AIgB5AHoAkgJcAmcCaAJpAmoCawJsAnMAAQCyAAYACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAAkACgAKgAuAC8AMAAxADUAOQA+AD8ARABFAEgATABNAE4ATwBUAFoAWwBcAF0AYQBqAHAAlQCZAJsAnwCgAKEAogCmAKoArwC0ALUAtgC6AL8AxQDGAMcAyADMANUA2gDhAOIA5gDoAO4A8gDzAPQA+QECAQMBBgEYASQBKwEsATIBOgE7AT0BSAFLAUwBTgFPAVEBUgFTAVUBVgFYAVkBWgFbAVwBYQFjAXABcQF2AX8BgAGBAYIBgwGFAYYBiAGKAZABkwGUAZUBnQGeAZ8BqAGpAbIBtQG2AbcBvAG/AcQByQHKAcwB1AHcAeQB5wH0AfgB/AH9AgMCBAIFAgYCCgILAg0CEgIVAhcCGgIcAh0CHgIgAiECJgIpAioCKwItAi4CLwIxAjYCPAI9AkECSAJMAlECVAJYAlkCdQJ2AncCeAJ5AnsAAgABAl0CXwAAAAIABgAkAE8AAACVALoALADhAQUAUgEHAbIAdwG0Af0BIwH/AloBbQACAAEAGAAdAAAAAQCPACQAKAAqAC4ALwAwADEANQA5AD8ARABFAEgATABNAE4AlQCZAJsAnwCgAKEAogCmAKoArwC0ALUAtgC6AOEA4gDmAOgA7gDyAPMA9AD5AQIBAwEGARgBJAErASwBMgE6ATsBPQFIAUsBTAFOAU8BUQFSAVMBVQFWAVgBWQFaAVsBXAFhAWMBcAFxAXYBfwGAAYEBggGDAYUBhgGIAYoBkAGTAZQBlQGdAZ4BnwGoAakBsgG1AbYBtwG8Ab8BxAHJAcoBzAHUAdwB5AHnAfQB+AH8Af0CAwIEAgUCBgIKAgsCDQISAhUCFwIaAhwCHQIeAh8CIAIhAiYCJwIpAioCKwItAi4CLwIxAjYCPAI9AkECSAJMAlECVAJXAlgCWQABAAEAfQAAAAAAAQAAAAA="

/***/ }),
/* 1161 */
/***/ (function(module, exports) {

	module.exports = "data:image/png;base64,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"

/***/ }),
/* 1162 */
/***/ (function(module, exports) {

	module.exports = function() { throw new Error("define cannot be used indirect"); };


/***/ }),
/* 1163 */
/***/ (function(module, exports) {

	/* WEBPACK VAR INJECTION */(function(__webpack_amd_options__) {module.exports = __webpack_amd_options__;
	
	/* WEBPACK VAR INJECTION */}.call(exports, {}))

/***/ }),
/* 1164 */
/***/ (function(module, exports, __webpack_require__) {

	/* WEBPACK VAR INJECTION */(function(Promise) {(function (global, factory) {
	   true ? factory(exports) :
	  typeof define === 'function' && define.amd ? define(['exports'], factory) :
	  (factory((global.WHATWGFetch = {})));
	}(this, (function (exports) {
	
	  var global = (function(self) {
	    return self
	    // eslint-disable-next-line no-invalid-this
	  })(typeof self !== 'undefined' ? self : this);
	  var support = {
	    searchParams: 'URLSearchParams' in global,
	    iterable: 'Symbol' in global && 'iterator' in Symbol,
	    blob:
	      'FileReader' in global &&
	      'Blob' in global &&
	      (function() {
	        try {
	          new Blob();
	          return true
	        } catch (e) {
	          return false
	        }
	      })(),
	    formData: 'FormData' in global,
	    arrayBuffer: 'ArrayBuffer' in global
	  };
	
	  function isDataView(obj) {
	    return obj && DataView.prototype.isPrototypeOf(obj)
	  }
	
	  if (support.arrayBuffer) {
	    var viewClasses = [
	      '[object Int8Array]',
	      '[object Uint8Array]',
	      '[object Uint8ClampedArray]',
	      '[object Int16Array]',
	      '[object Uint16Array]',
	      '[object Int32Array]',
	      '[object Uint32Array]',
	      '[object Float32Array]',
	      '[object Float64Array]'
	    ];
	
	    var isArrayBufferView =
	      ArrayBuffer.isView ||
	      function(obj) {
	        return obj && viewClasses.indexOf(Object.prototype.toString.call(obj)) > -1
	      };
	  }
	
	  function normalizeName(name) {
	    if (typeof name !== 'string') {
	      name = String(name);
	    }
	    if (/[^a-z0-9\-#$%&'*+.^_`|~!]/i.test(name) || name === '') {
	      throw new TypeError('Invalid character in header field name')
	    }
	    return name.toLowerCase()
	  }
	
	  function normalizeValue(value) {
	    if (typeof value !== 'string') {
	      value = String(value);
	    }
	    return value
	  }
	
	  // Build a destructive iterator for the value list
	  function iteratorFor(items) {
	    var iterator = {
	      next: function() {
	        var value = items.shift();
	        return {done: value === undefined, value: value}
	      }
	    };
	
	    if (support.iterable) {
	      iterator[Symbol.iterator] = function() {
	        return iterator
	      };
	    }
	
	    return iterator
	  }
	
	  function Headers(headers) {
	    this.map = {};
	
	    if (headers instanceof Headers) {
	      headers.forEach(function(value, name) {
	        this.append(name, value);
	      }, this);
	    } else if (Array.isArray(headers)) {
	      headers.forEach(function(header) {
	        this.append(header[0], header[1]);
	      }, this);
	    } else if (headers) {
	      Object.getOwnPropertyNames(headers).forEach(function(name) {
	        this.append(name, headers[name]);
	      }, this);
	    }
	  }
	
	  Headers.prototype.append = function(name, value) {
	    name = normalizeName(name);
	    value = normalizeValue(value);
	    var oldValue = this.map[name];
	    this.map[name] = oldValue ? oldValue + ', ' + value : value;
	  };
	
	  Headers.prototype['delete'] = function(name) {
	    delete this.map[normalizeName(name)];
	  };
	
	  Headers.prototype.get = function(name) {
	    name = normalizeName(name);
	    return this.has(name) ? this.map[name] : null
	  };
	
	  Headers.prototype.has = function(name) {
	    return this.map.hasOwnProperty(normalizeName(name))
	  };
	
	  Headers.prototype.set = function(name, value) {
	    this.map[normalizeName(name)] = normalizeValue(value);
	  };
	
	  Headers.prototype.forEach = function(callback, thisArg) {
	    for (var name in this.map) {
	      if (this.map.hasOwnProperty(name)) {
	        callback.call(thisArg, this.map[name], name, this);
	      }
	    }
	  };
	
	  Headers.prototype.keys = function() {
	    var items = [];
	    this.forEach(function(value, name) {
	      items.push(name);
	    });
	    return iteratorFor(items)
	  };
	
	  Headers.prototype.values = function() {
	    var items = [];
	    this.forEach(function(value) {
	      items.push(value);
	    });
	    return iteratorFor(items)
	  };
	
	  Headers.prototype.entries = function() {
	    var items = [];
	    this.forEach(function(value, name) {
	      items.push([name, value]);
	    });
	    return iteratorFor(items)
	  };
	
	  if (support.iterable) {
	    Headers.prototype[Symbol.iterator] = Headers.prototype.entries;
	  }
	
	  function consumed(body) {
	    if (body.bodyUsed) {
	      return Promise.reject(new TypeError('Already read'))
	    }
	    body.bodyUsed = true;
	  }
	
	  function fileReaderReady(reader) {
	    return new Promise(function(resolve, reject) {
	      reader.onload = function() {
	        resolve(reader.result);
	      };
	      reader.onerror = function() {
	        reject(reader.error);
	      };
	    })
	  }
	
	  function readBlobAsArrayBuffer(blob) {
	    var reader = new FileReader();
	    var promise = fileReaderReady(reader);
	    reader.readAsArrayBuffer(blob);
	    return promise
	  }
	
	  function readBlobAsText(blob) {
	    var reader = new FileReader();
	    var promise = fileReaderReady(reader);
	    reader.readAsText(blob);
	    return promise
	  }
	
	  function readArrayBufferAsText(buf) {
	    var view = new Uint8Array(buf);
	    var chars = new Array(view.length);
	
	    for (var i = 0; i < view.length; i++) {
	      chars[i] = String.fromCharCode(view[i]);
	    }
	    return chars.join('')
	  }
	
	  function bufferClone(buf) {
	    if (buf.slice) {
	      return buf.slice(0)
	    } else {
	      var view = new Uint8Array(buf.byteLength);
	      view.set(new Uint8Array(buf));
	      return view.buffer
	    }
	  }
	
	  function Body() {
	    this.bodyUsed = false;
	
	    this._initBody = function(body) {
	      /*
	        fetch-mock wraps the Response object in an ES6 Proxy to
	        provide useful test harness features such as flush. However, on
	        ES5 browsers without fetch or Proxy support pollyfills must be used;
	        the proxy-pollyfill is unable to proxy an attribute unless it exists
	        on the object before the Proxy is created. This change ensures
	        Response.bodyUsed exists on the instance, while maintaining the
	        semantic of setting Request.bodyUsed in the constructor before
	        _initBody is called.
	      */
	      this.bodyUsed = this.bodyUsed;
	      this._bodyInit = body;
	      if (!body) {
	        this._bodyText = '';
	      } else if (typeof body === 'string') {
	        this._bodyText = body;
	      } else if (support.blob && Blob.prototype.isPrototypeOf(body)) {
	        this._bodyBlob = body;
	      } else if (support.formData && FormData.prototype.isPrototypeOf(body)) {
	        this._bodyFormData = body;
	      } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {
	        this._bodyText = body.toString();
	      } else if (support.arrayBuffer && support.blob && isDataView(body)) {
	        this._bodyArrayBuffer = bufferClone(body.buffer);
	        // IE 10-11 can't handle a DataView body.
	        this._bodyInit = new Blob([this._bodyArrayBuffer]);
	      } else if (support.arrayBuffer && (ArrayBuffer.prototype.isPrototypeOf(body) || isArrayBufferView(body))) {
	        this._bodyArrayBuffer = bufferClone(body);
	      } else {
	        this._bodyText = body = Object.prototype.toString.call(body);
	      }
	
	      if (!this.headers.get('content-type')) {
	        if (typeof body === 'string') {
	          this.headers.set('content-type', 'text/plain;charset=UTF-8');
	        } else if (this._bodyBlob && this._bodyBlob.type) {
	          this.headers.set('content-type', this._bodyBlob.type);
	        } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {
	          this.headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8');
	        }
	      }
	    };
	
	    if (support.blob) {
	      this.blob = function() {
	        var rejected = consumed(this);
	        if (rejected) {
	          return rejected
	        }
	
	        if (this._bodyBlob) {
	          return Promise.resolve(this._bodyBlob)
	        } else if (this._bodyArrayBuffer) {
	          return Promise.resolve(new Blob([this._bodyArrayBuffer]))
	        } else if (this._bodyFormData) {
	          throw new Error('could not read FormData body as blob')
	        } else {
	          return Promise.resolve(new Blob([this._bodyText]))
	        }
	      };
	
	      this.arrayBuffer = function() {
	        if (this._bodyArrayBuffer) {
	          return consumed(this) || Promise.resolve(this._bodyArrayBuffer)
	        } else {
	          return this.blob().then(readBlobAsArrayBuffer)
	        }
	      };
	    }
	
	    this.text = function() {
	      var rejected = consumed(this);
	      if (rejected) {
	        return rejected
	      }
	
	      if (this._bodyBlob) {
	        return readBlobAsText(this._bodyBlob)
	      } else if (this._bodyArrayBuffer) {
	        return Promise.resolve(readArrayBufferAsText(this._bodyArrayBuffer))
	      } else if (this._bodyFormData) {
	        throw new Error('could not read FormData body as text')
	      } else {
	        return Promise.resolve(this._bodyText)
	      }
	    };
	
	    if (support.formData) {
	      this.formData = function() {
	        return this.text().then(decode)
	      };
	    }
	
	    this.json = function() {
	      return this.text().then(JSON.parse)
	    };
	
	    return this
	  }
	
	  // HTTP methods whose capitalization should be normalized
	  var methods = ['DELETE', 'GET', 'HEAD', 'OPTIONS', 'POST', 'PUT'];
	
	  function normalizeMethod(method) {
	    var upcased = method.toUpperCase();
	    return methods.indexOf(upcased) > -1 ? upcased : method
	  }
	
	  function Request(input, options) {
	    options = options || {};
	    var body = options.body;
	
	    if (input instanceof Request) {
	      if (input.bodyUsed) {
	        throw new TypeError('Already read')
	      }
	      this.url = input.url;
	      this.credentials = input.credentials;
	      if (!options.headers) {
	        this.headers = new Headers(input.headers);
	      }
	      this.method = input.method;
	      this.mode = input.mode;
	      this.signal = input.signal;
	      if (!body && input._bodyInit != null) {
	        body = input._bodyInit;
	        input.bodyUsed = true;
	      }
	    } else {
	      this.url = String(input);
	    }
	
	    this.credentials = options.credentials || this.credentials || 'same-origin';
	    if (options.headers || !this.headers) {
	      this.headers = new Headers(options.headers);
	    }
	    this.method = normalizeMethod(options.method || this.method || 'GET');
	    this.mode = options.mode || this.mode || null;
	    this.signal = options.signal || this.signal;
	    this.referrer = null;
	
	    if ((this.method === 'GET' || this.method === 'HEAD') && body) {
	      throw new TypeError('Body not allowed for GET or HEAD requests')
	    }
	    this._initBody(body);
	
	    if (this.method === 'GET' || this.method === 'HEAD') {
	      if (options.cache === 'no-store' || options.cache === 'no-cache') {
	        // Search for a '_' parameter in the query string
	        var reParamSearch = /([?&])_=[^&]*/;
	        if (reParamSearch.test(this.url)) {
	          // If it already exists then set the value with the current time
	          this.url = this.url.replace(reParamSearch, '$1_=' + new Date().getTime());
	        } else {
	          // Otherwise add a new '_' parameter to the end with the current time
	          var reQueryString = /\?/;
	          this.url += (reQueryString.test(this.url) ? '&' : '?') + '_=' + new Date().getTime();
	        }
	      }
	    }
	  }
	
	  Request.prototype.clone = function() {
	    return new Request(this, {body: this._bodyInit})
	  };
	
	  function decode(body) {
	    var form = new FormData();
	    body
	      .trim()
	      .split('&')
	      .forEach(function(bytes) {
	        if (bytes) {
	          var split = bytes.split('=');
	          var name = split.shift().replace(/\+/g, ' ');
	          var value = split.join('=').replace(/\+/g, ' ');
	          form.append(decodeURIComponent(name), decodeURIComponent(value));
	        }
	      });
	    return form
	  }
	
	  function parseHeaders(rawHeaders) {
	    var headers = new Headers();
	    // Replace instances of \r\n and \n followed by at least one space or horizontal tab with a space
	    // https://tools.ietf.org/html/rfc7230#section-3.2
	    var preProcessedHeaders = rawHeaders.replace(/\r?\n[\t ]+/g, ' ');
	    preProcessedHeaders.split(/\r?\n/).forEach(function(line) {
	      var parts = line.split(':');
	      var key = parts.shift().trim();
	      if (key) {
	        var value = parts.join(':').trim();
	        headers.append(key, value);
	      }
	    });
	    return headers
	  }
	
	  Body.call(Request.prototype);
	
	  function Response(bodyInit, options) {
	    if (!options) {
	      options = {};
	    }
	
	    this.type = 'default';
	    this.status = options.status === undefined ? 200 : options.status;
	    this.ok = this.status >= 200 && this.status < 300;
	    this.statusText = 'statusText' in options ? options.statusText : '';
	    this.headers = new Headers(options.headers);
	    this.url = options.url || '';
	    this._initBody(bodyInit);
	  }
	
	  Body.call(Response.prototype);
	
	  Response.prototype.clone = function() {
	    return new Response(this._bodyInit, {
	      status: this.status,
	      statusText: this.statusText,
	      headers: new Headers(this.headers),
	      url: this.url
	    })
	  };
	
	  Response.error = function() {
	    var response = new Response(null, {status: 0, statusText: ''});
	    response.type = 'error';
	    return response
	  };
	
	  var redirectStatuses = [301, 302, 303, 307, 308];
	
	  Response.redirect = function(url, status) {
	    if (redirectStatuses.indexOf(status) === -1) {
	      throw new RangeError('Invalid status code')
	    }
	
	    return new Response(null, {status: status, headers: {location: url}})
	  };
	
	  exports.DOMException = global.DOMException;
	
	  if (typeof exports.DOMException !== 'function') {
	    exports.DOMException = function(message, name) {
	      this.message = message;
	      this.name = name;
	      var error = Error(message);
	      this.stack = error.stack;
	    };
	    exports.DOMException.prototype = Object.create(Error.prototype);
	    exports.DOMException.prototype.constructor = exports.DOMException;
	  }
	
	  function fetch(input, init) {
	    return new Promise(function(resolve, reject) {
	      var request = new Request(input, init);
	
	      if (request.signal && request.signal.aborted) {
	        return reject(new exports.DOMException('Aborted', 'AbortError'))
	      }
	
	      var xhr = new XMLHttpRequest();
	
	      function abortXhr() {
	        xhr.abort();
	      }
	
	      xhr.onload = function() {
	        var options = {
	          status: xhr.status,
	          statusText: xhr.statusText,
	          headers: parseHeaders(xhr.getAllResponseHeaders() || '')
	        };
	        options.url = 'responseURL' in xhr ? xhr.responseURL : options.headers.get('X-Request-URL');
	        var body = 'response' in xhr ? xhr.response : xhr.responseText;
	        setTimeout(function() {
	          resolve(new Response(body, options));
	        }, 0);
	      };
	
	      xhr.onerror = function() {
	        setTimeout(function() {
	          reject(new TypeError('Network request failed'));
	        }, 0);
	      };
	
	      xhr.ontimeout = function() {
	        setTimeout(function() {
	          reject(new TypeError('Network request failed'));
	        }, 0);
	      };
	
	      xhr.onabort = function() {
	        setTimeout(function() {
	          reject(new exports.DOMException('Aborted', 'AbortError'));
	        }, 0);
	      };
	
	      function fixUrl(url) {
	        try {
	          return url === '' && global.location.href ? global.location.href : url
	        } catch (e) {
	          return url
	        }
	      }
	
	      xhr.open(request.method, fixUrl(request.url), true);
	
	      if (request.credentials === 'include') {
	        xhr.withCredentials = true;
	      } else if (request.credentials === 'omit') {
	        xhr.withCredentials = false;
	      }
	
	      if ('responseType' in xhr) {
	        if (support.blob) {
	          xhr.responseType = 'blob';
	        } else if (
	          support.arrayBuffer &&
	          request.headers.get('Content-Type') &&
	          request.headers.get('Content-Type').indexOf('application/octet-stream') !== -1
	        ) {
	          xhr.responseType = 'arraybuffer';
	        }
	      }
	
	      request.headers.forEach(function(value, name) {
	        xhr.setRequestHeader(name, value);
	      });
	
	      if (request.signal) {
	        request.signal.addEventListener('abort', abortXhr);
	
	        xhr.onreadystatechange = function() {
	          // DONE (success or failure)
	          if (xhr.readyState === 4) {
	            request.signal.removeEventListener('abort', abortXhr);
	          }
	        };
	      }
	
	      xhr.send(typeof request._bodyInit === 'undefined' ? null : request._bodyInit);
	    })
	  }
	
	  fetch.polyfill = true;
	
	  if (!global.fetch) {
	    global.fetch = fetch;
	    global.Headers = Headers;
	    global.Request = Request;
	    global.Response = Response;
	  }
	
	  exports.Headers = Headers;
	  exports.Request = Request;
	  exports.Response = Response;
	  exports.fetch = fetch;
	
	  Object.defineProperty(exports, '__esModule', { value: true });
	
	})));
	
	/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(27)))

/***/ }),
/* 1165 */
/***/ (function(module, exports, __webpack_require__) {

	module.exports = function() {
		return new Worker(__webpack_require__.p + "ed6090683ac14375de89.worker.js");
	};

/***/ })
/******/ ])))
});
;
//# sourceMappingURL=prism.js.map